This is an automated email from the ASF dual-hosted git repository. morrysnow pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push: new 9b9e077b1d0 [fix](Nereids) nullable not adjust in output exprs in result sink node (#30206) 9b9e077b1d0 is described below commit 9b9e077b1d011e2cc74add9c622f18583602e79a Author: morrySnow <101034200+morrys...@users.noreply.github.com> AuthorDate: Mon Jan 22 14:47:18 2024 +0800 [fix](Nereids) nullable not adjust in output exprs in result sink node (#30206) --- .../java/org/apache/doris/nereids/analyzer/UnboundResultSink.java | 5 +++++ .../java/org/apache/doris/nereids/analyzer/UnboundTableSink.java | 6 ++++++ .../org/apache/doris/nereids/rules/rewrite/AdjustNullable.java | 8 ++++++++ .../trees/plans/logical/LogicalDeferMaterializeResultSink.java | 7 +++++++ .../apache/doris/nereids/trees/plans/logical/LogicalFileSink.java | 2 +- .../doris/nereids/trees/plans/logical/LogicalOlapTableSink.java | 5 +++++ .../doris/nereids/trees/plans/logical/LogicalResultSink.java | 5 +++++ .../org/apache/doris/nereids/trees/plans/logical/LogicalSink.java | 2 ++ 8 files changed, 39 insertions(+), 1 deletion(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundResultSink.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundResultSink.java index 6f378e99112..10a6b0121e3 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundResultSink.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundResultSink.java @@ -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 diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundTableSink.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundTableSink.java index 1bd4e994ac5..89d67dc3766 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundTableSink.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundTableSink.java @@ -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); diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/AdjustNullable.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/AdjustNullable.java index 2aa095875ee..8f70b86e4bd 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/AdjustNullable.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/AdjustNullable.java @@ -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); diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalDeferMaterializeResultSink.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalDeferMaterializeResultSink.java index ab6efb8977a..dab393cb007 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalDeferMaterializeResultSink.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalDeferMaterializeResultSink.java @@ -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); diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalFileSink.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalFileSink.java index 3ca559c5197..43e490c00c7 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalFileSink.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalFileSink.java @@ -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()); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalOlapTableSink.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalOlapTableSink.java index a1147a96170..1a298ea8c40 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalOlapTableSink.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalOlapTableSink.java @@ -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) { diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalResultSink.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalResultSink.java index 564938dd8b1..6312aee6235 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalResultSink.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalResultSink.java @@ -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() + "]", diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalSink.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalSink.java index 028c0e93e0a..ea2fa49e466 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalSink.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalSink.java @@ -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; --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org