[fix](nereids) fix a visitor bug in CommonSubExpressionOpt (#33154)

* fix a bug in visitproject
* fix-variant
This commit is contained in:
minghong
2024-04-11 08:43:28 +08:00
committed by yiguolei
parent 8c66915bb5
commit 22c42209f7
2 changed files with 12 additions and 15 deletions

View File

@ -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++) {

View File

@ -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()
);
}