[fix](nereids) fix a visitor bug in CommonSubExpressionOpt (#33154)
* fix a bug in visitproject * fix-variant
This commit is contained in:
@ -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++) {
|
||||
|
||||
@ -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()
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user