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