You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by yi...@apache.org on 2025/11/08 13:14:31 UTC

(doris) branch branch-4.0 updated: branch-4.0: [optimize](nereids) explain plan process print change point #57772 (#57787)

This is an automated email from the ASF dual-hosted git repository.

yiguolei pushed a commit to branch branch-4.0
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-4.0 by this push:
     new 219b30f35a7 branch-4.0: [optimize](nereids) explain plan process print change point #57772 (#57787)
219b30f35a7 is described below

commit 219b30f35a754b8c35fcdc1a92f359ba1bc19db1
Author: github-actions[bot] <41...@users.noreply.github.com>
AuthorDate: Sat Nov 8 21:14:25 2025 +0800

    branch-4.0: [optimize](nereids) explain plan process print change point #57772 (#57787)
    
    Cherry-picked from #57772
    
    Co-authored-by: 924060929 <la...@selectdb.com>
---
 .../main/java/org/apache/doris/nereids/NereidsPlanner.java   |  4 +++-
 .../nereids/jobs/rewrite/BottomUpVisitorRewriteJob.java      |  4 ++--
 .../apache/doris/nereids/jobs/rewrite/CustomRewriteJob.java  |  4 +++-
 .../doris/nereids/jobs/rewrite/PlanTreeRewriteJob.java       | 12 ++++++------
 .../apache/doris/nereids/jobs/rewrite/RewriteJobContext.java |  5 +++++
 .../doris/nereids/jobs/rewrite/RootPlanTreeRewriteJob.java   |  1 +
 .../doris/nereids/jobs/rewrite/TopDownVisitorRewriteJob.java |  4 ++--
 .../org/apache/doris/nereids/trees/plans/AbstractPlan.java   | 12 +++++++++---
 .../java/org/apache/doris/nereids/trees/plans/FakePlan.java  |  2 +-
 .../main/java/org/apache/doris/nereids/trees/plans/Plan.java |  6 +++++-
 .../test/java/org/apache/doris/nereids/stats/DummyPlan.java  |  2 +-
 11 files changed, 38 insertions(+), 18 deletions(-)

diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/NereidsPlanner.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/NereidsPlanner.java
index 75c2b3fe7f5..f701ff0edfd 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/NereidsPlanner.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/NereidsPlanner.java
@@ -235,7 +235,9 @@ public class NereidsPlanner extends Planner {
                         case ALL_PLAN:
                             cascadesContext.addPlanProcess(
                                     new PlanProcess("ImplementSqlCache",
-                                            parsedPlan.treeString(), physicalPlan.treeString())
+                                            parsedPlan.treeString(false, parsedPlan),
+                                            physicalPlan.treeString(false, physicalPlan)
+                                    )
                             );
                             break;
                         default: {
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/rewrite/BottomUpVisitorRewriteJob.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/rewrite/BottomUpVisitorRewriteJob.java
index bda6f1ed7af..7bec8269ccf 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/rewrite/BottomUpVisitorRewriteJob.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/rewrite/BottomUpVisitorRewriteJob.java
@@ -133,9 +133,9 @@ public class BottomUpVisitorRewriteJob implements RewriteJob {
                 currentRule.acceptPlan(result);
 
                 if (cascadesContext.showPlanProcess()) {
-                    String beforeShape = processState.getNewestPlan().treeString(true);
+                    String beforeShape = processState.getNewestPlan().treeString(true, plan);
                     String afterShape = processState.updateChildAndGetNewest(originParent, childIndex, result)
-                            .treeString(true);
+                            .treeString(true, result);
                     cascadesContext.addPlanProcess(
                         new PlanProcess(currentRule.getRuleType().name(), beforeShape, afterShape)
                     );
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/rewrite/CustomRewriteJob.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/rewrite/CustomRewriteJob.java
index 43cf331d429..67d57730868 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/rewrite/CustomRewriteJob.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/rewrite/CustomRewriteJob.java
@@ -68,7 +68,9 @@ public class CustomRewriteJob implements RewriteJob {
         if (!root.deepEquals(rewrittenRoot)) {
             if (cascadesContext.showPlanProcess()) {
                 PlanProcess planProcess = new PlanProcess(
-                        ruleType.name(), root.treeString(true), rewrittenRoot.treeString(true));
+                        ruleType.name(),
+                        root.treeString(true, root),
+                        rewrittenRoot.treeString(true, rewrittenRoot));
                 cascadesContext.addPlanProcess(planProcess);
             }
             // if rewrite success, record the rule type
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/rewrite/PlanTreeRewriteJob.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/rewrite/PlanTreeRewriteJob.java
index 85925132aa0..346373e7bb0 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/rewrite/PlanTreeRewriteJob.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/rewrite/PlanTreeRewriteJob.java
@@ -64,13 +64,13 @@ public abstract class PlanTreeRewriteJob extends Job {
                     NereidsTracer.logRewriteEvent(rule.toString(), pattern, plan, newPlan);
                     String traceBefore = null;
                     if (showPlanProcess) {
-                        traceBefore = getCurrentPlanTreeString();
+                        traceBefore = getCurrentPlanTreeString(rewriteJobContext, null);
                     }
                     rewriteJobContext.result = newPlan;
                     context.setRewritten(true);
                     rule.acceptPlan(newPlan);
                     if (showPlanProcess) {
-                        String traceAfter = getCurrentPlanTreeString();
+                        String traceAfter = getCurrentPlanTreeString(rewriteJobContext, newPlan);
                         PlanProcess planProcess = new PlanProcess(rule.getRuleType().name(), traceBefore, traceAfter);
                         cascadesContext.addPlanProcess(planProcess);
                     }
@@ -130,11 +130,11 @@ public abstract class PlanTreeRewriteJob extends Job {
         }
     }
 
-    private String getCurrentPlanTreeString() {
-        return context.getCascadesContext()
+    private String getCurrentPlanTreeString(RewriteJobContext rewriteJobContext, Plan rewrittenPlan) {
+        Plan newestPlan = context.getCascadesContext()
                 .getCurrentRootRewriteJobContext().get()
-                .getNewestPlan()
-                .treeString(true);
+                .getNewestPlan();
+        return newestPlan.treeString(true, rewrittenPlan == null ? rewriteJobContext.tmpPlan : rewrittenPlan);
     }
 
     static class RewriteResult {
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/rewrite/RewriteJobContext.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/rewrite/RewriteJobContext.java
index 060bb8edd62..2ef71f9b2ad 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/rewrite/RewriteJobContext.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/rewrite/RewriteJobContext.java
@@ -30,6 +30,7 @@ public class RewriteJobContext {
     final int childIndexInParentContext;
     final Plan plan;
     final RewriteJobContext[] childrenContext;
+    Plan tmpPlan;
     Plan result;
 
     /** RewriteJobContext */
@@ -46,6 +47,10 @@ public class RewriteJobContext {
         this.batchId = batchId;
     }
 
+    public void setTmpPlan(Plan tmp) {
+        this.tmpPlan = tmp;
+    }
+
     public void setResult(Plan result) {
         this.result = result;
     }
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/rewrite/RootPlanTreeRewriteJob.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/rewrite/RootPlanTreeRewriteJob.java
index b8e7e49c905..b4115bc0219 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/rewrite/RootPlanTreeRewriteJob.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/rewrite/RootPlanTreeRewriteJob.java
@@ -185,6 +185,7 @@ public class RootPlanTreeRewriteJob implements RewriteJob {
         }
 
         private void linkResult(Plan result) {
+            rewriteJobContext.tmpPlan = result;
             if (parentJob != null) {
                 parentJob.childrenResult[rewriteJobContext.childIndexInParentContext] = result;
             } else {
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/rewrite/TopDownVisitorRewriteJob.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/rewrite/TopDownVisitorRewriteJob.java
index 46c53f9bd5c..5275de0eb0a 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/rewrite/TopDownVisitorRewriteJob.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/rewrite/TopDownVisitorRewriteJob.java
@@ -116,9 +116,9 @@ public class TopDownVisitorRewriteJob implements RewriteJob {
                     Plan newPlan = transform.get(0);
                     currentRule.acceptPlan(originPlan);
                     if (cascadesContext.showPlanProcess()) {
-                        String beforeShape = processState.getNewestPlan().treeString(true);
+                        String beforeShape = processState.getNewestPlan().treeString(true, originPlan);
                         String afterShape = processState.updateChildAndGetNewest(originParent, childIndex, newPlan)
-                                .treeString(true);
+                                .treeString(true, newPlan);
                         cascadesContext.addPlanProcess(
                                 new PlanProcess(currentRule.getRuleType().name(), beforeShape, afterShape)
                         );
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/AbstractPlan.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/AbstractPlan.java
index 15ae8b9c1c1..271b008362c 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/AbstractPlan.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/AbstractPlan.java
@@ -251,19 +251,25 @@ public abstract class AbstractPlan extends AbstractTreeNode<Plan> implements Pla
         return !hasUnboundChild.get();
     }
 
+    @Override
+    public String treeString(boolean printStates) {
+        return treeString(printStates, null);
+    }
+
     /**
      * Get tree like string describing query plan.
      *
      * @return tree like string describing query plan
      */
     @Override
-    public String treeString(boolean printStates) {
+    public String treeString(boolean printStates, Object specialPlan) {
         return TreeStringUtils.treeString(this,
                 plan -> {
+                    String specialPrefix = specialPlan == plan ? "**" : "";
                     if (printStates && plan instanceof Plan) {
-                        return plan + ", states: " + ((Plan) plan).getMutableStates();
+                        return specialPrefix + plan + ", states: " + ((Plan) plan).getMutableStates();
                     }
-                    return plan.toString();
+                    return specialPrefix + plan.toString();
                 },
                 plan -> {
                     if (plan instanceof TreeStringPlan) {
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/FakePlan.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/FakePlan.java
index f0a4af107c5..16f1475d4e9 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/FakePlan.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/FakePlan.java
@@ -101,7 +101,7 @@ public class FakePlan implements Plan, BlockFuncDepsPropagation {
     }
 
     @Override
-    public String treeString(boolean printStates) {
+    public String treeString(boolean printStates, Object specialPlan) {
         return "DUMMY";
     }
 
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/Plan.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/Plan.java
index 2d564e94bcc..7d174ff28bc 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/Plan.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/Plan.java
@@ -188,7 +188,11 @@ public interface Plan extends TreeNode<Plan> {
         return treeString(false);
     }
 
-    String treeString(boolean printStates);
+    default String treeString(boolean printStates) {
+        return treeString(printStates, null);
+    }
+
+    String treeString(boolean printStates, Object specialPlan);
 
     Plan withGroupExpression(Optional<GroupExpression> groupExpression);
 
diff --git a/fe/fe-core/src/test/java/org/apache/doris/nereids/stats/DummyPlan.java b/fe/fe-core/src/test/java/org/apache/doris/nereids/stats/DummyPlan.java
index 138482c0440..c81ee57441b 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/nereids/stats/DummyPlan.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/nereids/stats/DummyPlan.java
@@ -74,7 +74,7 @@ public class DummyPlan implements Plan {
     }
 
     @Override
-    public String treeString(boolean printStates) {
+    public String treeString(boolean printStates, Object specialPlan) {
         return "";
     }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org