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

Reply via email to