Skip to content

feat: reuse tree visitor to display tree for LogicalPlan#22203

Draft
duongcongtoai wants to merge 4 commits into
apache:mainfrom
duongcongtoai:feat-print-logical-plan-tree
Draft

feat: reuse tree visitor to display tree for LogicalPlan#22203
duongcongtoai wants to merge 4 commits into
apache:mainfrom
duongcongtoai:feat-print-logical-plan-tree

Conversation

@duongcongtoai
Copy link
Copy Markdown
Contributor

@duongcongtoai duongcongtoai commented May 15, 2026

Which issue does this PR close?

Explain format tree only supports physical plan. During the time working with complex logical plan (such correlated subquery) i find tree format is more readable and will be helpful for development.

  • Closes #.

Rationale for this change

What changes are included in this PR?

Breaking changes:

  • move DisplayAs ,DisplayFormatType, RenderTreeNode, RenderTree, Coordinate to datafusion_common::display
    => implement datafusion_common::display::tree::render_tree method that render any object impl trait TreeNode + DisplayAs into tree structure (Unfortunately this is not possible for ExecutionPlan trait, it has implement the recursion logic its own way)

Are these changes tested?

Are there any user-facing changes?

@github-actions github-actions Bot added logical-expr Logical plan and expressions core Core DataFusion crate common Related to common crate physical-plan Changes to the physical-plan crate labels May 15, 2026
@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 15, 2026

Thank you for opening this pull request!

Reviewer note: cargo-semver-checks reported the current version number is not SemVer-compatible with the changes in this pull request (compared against the base branch).

Details
     Cloning apache/main
    Building datafusion v53.1.0 (current)
       Built [  98.019s] (current)
     Parsing datafusion v53.1.0 (current)
      Parsed [   0.038s] (current)
    Building datafusion v53.1.0 (baseline)
       Built [  98.723s] (baseline)
     Parsing datafusion v53.1.0 (baseline)
      Parsed [   0.038s] (baseline)
    Checking datafusion v53.1.0 -> v53.1.0 (no change; assume patch)
     Checked [   0.867s] 222 checks: 222 pass, 30 skip
     Summary no semver update required
    Finished [ 199.842s] datafusion
    Building datafusion-common v53.1.0 (current)
       Built [  32.088s] (current)
     Parsing datafusion-common v53.1.0 (current)
      Parsed [   0.063s] (current)
    Building datafusion-common v53.1.0 (baseline)
       Built [  32.488s] (baseline)
     Parsing datafusion-common v53.1.0 (baseline)
      Parsed [   0.063s] (baseline)
    Checking datafusion-common v53.1.0 -> v53.1.0 (no change; assume patch)
     Checked [   0.926s] 222 checks: 222 pass, 30 skip
     Summary no semver update required
    Finished [  67.333s] datafusion-common
    Building datafusion-expr v53.1.0 (current)
       Built [  26.100s] (current)
     Parsing datafusion-expr v53.1.0 (current)
      Parsed [   0.077s] (current)
    Building datafusion-expr v53.1.0 (baseline)
       Built [  26.048s] (baseline)
     Parsing datafusion-expr v53.1.0 (baseline)
      Parsed [   0.079s] (baseline)
    Checking datafusion-expr v53.1.0 -> v53.1.0 (no change; assume patch)
     Checked [   1.717s] 222 checks: 222 pass, 30 skip
     Summary no semver update required
    Finished [  56.192s] datafusion-expr
    Building datafusion-physical-plan v53.1.0 (current)
       Built [  31.742s] (current)
     Parsing datafusion-physical-plan v53.1.0 (current)
      Parsed [   0.133s] (current)
    Building datafusion-physical-plan v53.1.0 (baseline)
       Built [  31.670s] (baseline)
     Parsing datafusion-physical-plan v53.1.0 (baseline)
      Parsed [   0.134s] (baseline)
    Checking datafusion-physical-plan v53.1.0 -> v53.1.0 (no change; assume patch)
     Checked [   0.848s] 222 checks: 219 pass, 3 fail, 0 warn, 30 skip

--- failure enum_missing: pub enum removed or renamed ---

Description:
A publicly-visible enum cannot be imported by its prior path. A `pub use` may have been removed, or the enum itself may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.47.0/src/lints/enum_missing.ron

Failed in:
  enum datafusion_physical_plan::display::DisplayFormatType, previously in file /home/runner/work/datafusion/datafusion/target/semver-checks/git-apache_main/cb8aeabfba134348c60a34a625defa387121a782/datafusion/physical-plan/src/display.rs:38
  enum datafusion_physical_plan::execution_plan::DisplayFormatType, previously in file /home/runner/work/datafusion/datafusion/target/semver-checks/git-apache_main/cb8aeabfba134348c60a34a625defa387121a782/datafusion/physical-plan/src/display.rs:38
  enum datafusion_physical_plan::DisplayFormatType, previously in file /home/runner/work/datafusion/datafusion/target/semver-checks/git-apache_main/cb8aeabfba134348c60a34a625defa387121a782/datafusion/physical-plan/src/display.rs:38

--- failure trait_missing: pub trait removed or renamed ---

Description:
A publicly-visible trait cannot be imported by its prior path. A `pub use` may have been removed, or the trait itself may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.47.0/src/lints/trait_missing.ron

Failed in:
  trait datafusion_physical_plan::display::DisplayAs, previously in file /home/runner/work/datafusion/datafusion/target/semver-checks/git-apache_main/cb8aeabfba134348c60a34a625defa387121a782/datafusion/physical-plan/src/display.rs:1103
  trait datafusion_physical_plan::execution_plan::DisplayAs, previously in file /home/runner/work/datafusion/datafusion/target/semver-checks/git-apache_main/cb8aeabfba134348c60a34a625defa387121a782/datafusion/physical-plan/src/display.rs:1103
  trait datafusion_physical_plan::DisplayAs, previously in file /home/runner/work/datafusion/datafusion/target/semver-checks/git-apache_main/cb8aeabfba134348c60a34a625defa387121a782/datafusion/physical-plan/src/display.rs:1103

--- failure trait_removed_supertrait: supertrait removed or renamed ---

Description:
A supertrait was removed from a trait. Users of the trait can no longer assume it can also be used like its supertrait.
        ref: https://doc.rust-lang.org/reference/items/traits.html#supertraits
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.47.0/src/lints/trait_removed_supertrait.ron

Failed in:
  supertrait datafusion_physical_plan::display::DisplayAs of trait ExecutionPlan in file /home/runner/work/datafusion/datafusion/datafusion/physical-plan/src/execution_plan.rs:107
  supertrait datafusion_physical_plan::execution_plan::DisplayAs of trait ExecutionPlan in file /home/runner/work/datafusion/datafusion/datafusion/physical-plan/src/execution_plan.rs:107
  supertrait datafusion_physical_plan::DisplayAs of trait ExecutionPlan in file /home/runner/work/datafusion/datafusion/datafusion/physical-plan/src/execution_plan.rs:107
  supertrait datafusion_physical_plan::display::DisplayAs of trait ExecutionPlan in file /home/runner/work/datafusion/datafusion/datafusion/physical-plan/src/execution_plan.rs:107
  supertrait datafusion_physical_plan::execution_plan::DisplayAs of trait ExecutionPlan in file /home/runner/work/datafusion/datafusion/datafusion/physical-plan/src/execution_plan.rs:107
  supertrait datafusion_physical_plan::DisplayAs of trait ExecutionPlan in file /home/runner/work/datafusion/datafusion/datafusion/physical-plan/src/execution_plan.rs:107

     Summary semver requires new major version: 3 major and 0 minor checks failed
    Finished [  66.089s] datafusion-physical-plan

@github-actions github-actions Bot added the auto detected api change Auto detected API change label May 15, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

auto detected api change Auto detected API change common Related to common crate core Core DataFusion crate logical-expr Logical plan and expressions physical-plan Changes to the physical-plan crate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant