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

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

commit 3ffe49854db3278ead910e0363bcfc993ec52862
Author: minghong <engle...@gmail.com>
AuthorDate: Thu Apr 11 08:43:28 2024 +0800

    [fix](nereids) fix a visitor bug in CommonSubExpressionOpt (#33154)
    
    * fix a bug in visitproject
    * fix-variant
---
 .../processor/post/CommonSubExpressionOpt.java        | 19 ++++++-------------
 .../nereids/trees/plans/physical/PhysicalProject.java |  8 ++++++--
 2 files changed, 12 insertions(+), 15 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/CommonSubExpressionOpt.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/CommonSubExpressionOpt.java
index 194116cf319..44e65dee1c9 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/CommonSubExpressionOpt.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/CommonSubExpressionOpt.java
@@ -51,10 +51,12 @@ import java.util.Set;
 public class CommonSubExpressionOpt extends PlanPostProcessor {
     @Override
     public PhysicalProject visitPhysicalProject(PhysicalProject<? extends 
Plan> project, CascadesContext ctx) {
-
-        List<List<NamedExpression>> multiLayers = computeMultiLayerProjections(
-                project.getInputSlots(), project.getProjects());
-        project.setMultiLayerProjects(multiLayers);
+        project.child().accept(this, ctx);
+        if (!project.hasPushedDownToProjectionFunctions()) {
+            List<List<NamedExpression>> multiLayers = 
computeMultiLayerProjections(
+                    project.getInputSlots(), project.getProjects());
+            project.setMultiLayerProjects(multiLayers);
+        }
         return project;
     }
 
@@ -66,15 +68,6 @@ public class CommonSubExpressionOpt extends 
PlanPostProcessor {
         for (Expression expr : projects) {
             expr.accept(collector, null);
         }
-        Map<Expression, Alias> commonExprToAliasMap = new HashMap<>();
-        collector.commonExprByDepth.values().stream().flatMap(expressions -> 
expressions.stream())
-                .forEach(expression -> {
-                    if (expression instanceof Alias) {
-                        commonExprToAliasMap.put(expression, (Alias) 
expression);
-                    } else {
-                        commonExprToAliasMap.put(expression, new 
Alias(expression));
-                    }
-                });
         Map<Expression, Alias> aliasMap = new HashMap<>();
         if (!collector.commonExprByDepth.isEmpty()) {
             for (int i = 1; i <= collector.commonExprByDepth.size(); i++) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalProject.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalProject.java
index 93fde854a1c..50e37217e66 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalProject.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalProject.java
@@ -85,9 +85,13 @@ public class PhysicalProject<CHILD_TYPE extends Plan> 
extends PhysicalUnary<CHIL
 
     @Override
     public String toString() {
+        StringBuilder cse = new StringBuilder();
+        for (int i = 0; i < multiLayerProjects.size(); i++) {
+            List<NamedExpression> layer = multiLayerProjects.get(i);
+            cse.append("l").append(i).append("(").append(layer).append(")");
+        }
         return Utils.toSqlString("PhysicalProject[" + id.asInt() + "]" + 
getGroupIdWithPrefix(),
-                "stats", statistics, "projects", projects
-
+                "stats", statistics, "projects", projects, "multi_proj", 
cse.toString()
         );
     }
 


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

Reply via email to