[fix](Nereids) nullable not adjust in output exprs in result sink node (#30206)
This commit is contained in:
@ -21,6 +21,7 @@ import org.apache.doris.nereids.exceptions.UnboundException;
|
||||
import org.apache.doris.nereids.memo.GroupExpression;
|
||||
import org.apache.doris.nereids.properties.LogicalProperties;
|
||||
import org.apache.doris.nereids.trees.expressions.Expression;
|
||||
import org.apache.doris.nereids.trees.expressions.NamedExpression;
|
||||
import org.apache.doris.nereids.trees.expressions.Slot;
|
||||
import org.apache.doris.nereids.trees.plans.BlockFuncDepsPropagation;
|
||||
import org.apache.doris.nereids.trees.plans.Plan;
|
||||
@ -77,7 +78,11 @@ public class UnboundResultSink<CHILD_TYPE extends Plan> extends LogicalSink<CHIL
|
||||
Optional<LogicalProperties> logicalProperties, List<Plan> children) {
|
||||
Preconditions.checkArgument(children.size() == 1, "UnboundResultSink only accepts one child");
|
||||
return new UnboundResultSink<>(groupExpression, logicalProperties, children.get(0));
|
||||
}
|
||||
|
||||
@Override
|
||||
public UnboundResultSink<CHILD_TYPE> withOutputExprs(List<NamedExpression> outputExprs) {
|
||||
throw new UnboundException("could not call withOutputExprs on UnboundResultSink");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -22,6 +22,7 @@ import org.apache.doris.nereids.memo.GroupExpression;
|
||||
import org.apache.doris.nereids.properties.LogicalProperties;
|
||||
import org.apache.doris.nereids.properties.UnboundLogicalProperties;
|
||||
import org.apache.doris.nereids.trees.expressions.Expression;
|
||||
import org.apache.doris.nereids.trees.expressions.NamedExpression;
|
||||
import org.apache.doris.nereids.trees.expressions.Slot;
|
||||
import org.apache.doris.nereids.trees.plans.BlockFuncDepsPropagation;
|
||||
import org.apache.doris.nereids.trees.plans.Plan;
|
||||
@ -137,6 +138,11 @@ public class UnboundTableSink<CHILD_TYPE extends Plan> extends LogicalSink<CHILD
|
||||
dmlCommandType, groupExpression, Optional.empty(), children.get(0));
|
||||
}
|
||||
|
||||
@Override
|
||||
public UnboundTableSink<CHILD_TYPE> withOutputExprs(List<NamedExpression> outputExprs) {
|
||||
throw new UnboundException("could not call withOutputExprs on UnboundTableSink");
|
||||
}
|
||||
|
||||
@Override
|
||||
public <R, C> R accept(PlanVisitor<R, C> visitor, C context) {
|
||||
return visitor.visitUnboundTableSink(this, context);
|
||||
|
||||
@ -40,6 +40,7 @@ import org.apache.doris.nereids.trees.plans.logical.LogicalPlan;
|
||||
import org.apache.doris.nereids.trees.plans.logical.LogicalProject;
|
||||
import org.apache.doris.nereids.trees.plans.logical.LogicalRepeat;
|
||||
import org.apache.doris.nereids.trees.plans.logical.LogicalSetOperation;
|
||||
import org.apache.doris.nereids.trees.plans.logical.LogicalSink;
|
||||
import org.apache.doris.nereids.trees.plans.logical.LogicalSort;
|
||||
import org.apache.doris.nereids.trees.plans.logical.LogicalTopN;
|
||||
import org.apache.doris.nereids.trees.plans.logical.LogicalUnion;
|
||||
@ -78,6 +79,13 @@ public class AdjustNullable extends DefaultPlanRewriter<Map<ExprId, Slot>> imple
|
||||
return logicalPlan;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Plan visitLogicalSink(LogicalSink<? extends Plan> logicalSink, Map<ExprId, Slot> replaceMap) {
|
||||
logicalSink = (LogicalSink<? extends Plan>) super.visit(logicalSink, replaceMap);
|
||||
List<NamedExpression> newOutputExprs = updateExpressions(logicalSink.getOutputExprs(), replaceMap);
|
||||
return logicalSink.withOutputExprs(newOutputExprs);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Plan visitLogicalAggregate(LogicalAggregate<? extends Plan> aggregate, Map<ExprId, Slot> replaceMap) {
|
||||
aggregate = (LogicalAggregate<? extends Plan>) super.visit(aggregate, replaceMap);
|
||||
|
||||
@ -21,6 +21,7 @@ import org.apache.doris.catalog.OlapTable;
|
||||
import org.apache.doris.nereids.memo.GroupExpression;
|
||||
import org.apache.doris.nereids.properties.LogicalProperties;
|
||||
import org.apache.doris.nereids.trees.expressions.Expression;
|
||||
import org.apache.doris.nereids.trees.expressions.NamedExpression;
|
||||
import org.apache.doris.nereids.trees.plans.Plan;
|
||||
import org.apache.doris.nereids.trees.plans.PropagateFuncDeps;
|
||||
import org.apache.doris.nereids.trees.plans.algebra.Sink;
|
||||
@ -82,6 +83,12 @@ public class LogicalDeferMaterializeResultSink<CHILD_TYPE extends Plan>
|
||||
olapTable, selectedIndexId, Optional.empty(), Optional.empty(), children.get(0));
|
||||
}
|
||||
|
||||
@Override
|
||||
public LogicalDeferMaterializeResultSink<CHILD_TYPE> withOutputExprs(List<NamedExpression> outputExprs) {
|
||||
return new LogicalDeferMaterializeResultSink<>(logicalResultSink, olapTable, selectedIndexId,
|
||||
Optional.empty(), Optional.empty(), child());
|
||||
}
|
||||
|
||||
@Override
|
||||
public <R, C> R accept(PlanVisitor<R, C> visitor, C context) {
|
||||
return visitor.visitLogicalDeferMaterializeResultSink(this, context);
|
||||
|
||||
@ -59,7 +59,7 @@ public class LogicalFileSink<CHILD_TYPE extends Plan> extends LogicalSink<CHILD_
|
||||
this.properties = ImmutableMap.copyOf(Objects.requireNonNull(properties));
|
||||
}
|
||||
|
||||
public Plan withOutputExprs(List<NamedExpression> outputExprs) {
|
||||
public LogicalFileSink<CHILD_TYPE> withOutputExprs(List<NamedExpression> outputExprs) {
|
||||
return new LogicalFileSink<>(filePath, format, properties, outputExprs, child());
|
||||
}
|
||||
|
||||
|
||||
@ -113,6 +113,11 @@ public class LogicalOlapTableSink<CHILD_TYPE extends Plan> extends LogicalSink<C
|
||||
return dmlCommandType;
|
||||
}
|
||||
|
||||
public LogicalOlapTableSink<CHILD_TYPE> withOutputExprs(List<NamedExpression> outputExprs) {
|
||||
return new LogicalOlapTableSink<>(database, targetTable, cols, partitionIds, outputExprs, isPartialUpdate,
|
||||
dmlCommandType, Optional.empty(), Optional.empty(), child());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) {
|
||||
|
||||
@ -72,6 +72,11 @@ public class LogicalResultSink<CHILD_TYPE extends Plan> extends LogicalSink<CHIL
|
||||
return new LogicalResultSink<>(outputExprs, groupExpression, logicalProperties, children.get(0));
|
||||
}
|
||||
|
||||
@Override
|
||||
public LogicalResultSink<CHILD_TYPE> withOutputExprs(List<NamedExpression> outputExprs) {
|
||||
return new LogicalResultSink<>(outputExprs, Optional.empty(), Optional.empty(), child());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return Utils.toSqlString("LogicalResultSink[" + id.asInt() + "]",
|
||||
|
||||
@ -52,6 +52,8 @@ public abstract class LogicalSink<CHILD_TYPE extends Plan> extends LogicalUnary<
|
||||
return outputExprs;
|
||||
}
|
||||
|
||||
public abstract LogicalSink<CHILD_TYPE> withOutputExprs(List<NamedExpression> outputExprs);
|
||||
|
||||
@Override
|
||||
public List<? extends Expression> getExpressions() {
|
||||
return outputExprs;
|
||||
|
||||
Reference in New Issue
Block a user