This is an automated email from the ASF dual-hosted git repository. yiguolei pushed a commit to branch branch-2.1 in repository https://gitbox.apache.org/repos/asf/doris.git
commit 22c42209f7214f495c15269fc9e1c8fa99f7ce18 Author: minghong <[email protected]> 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 e8472b6af23..a88ef8dc507 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: [email protected] For additional commands, e-mail: [email protected]
