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 7e17e0d3f7 [fix](Nereids) select outfile column order is wrong (#24595)
7e17e0d3f7 is described below
commit 7e17e0d3f76982a86a7a1a6f085aec80d0c6940b
Author: morrySnow <[email protected]>
AuthorDate: Wed Sep 20 09:27:40 2023 +0800
[fix](Nereids) select outfile column order is wrong (#24595)
---
.../glue/translator/PhysicalPlanTranslator.java | 2 +-
.../LogicalFileSinkToPhysicalFileSink.java | 1 +
...ogicalOlapTableSinkToPhysicalOlapTableSink.java | 3 +-
.../trees/plans/logical/LogicalOlapTableSink.java | 15 ++++++-
.../PhysicalDeferMaterializeResultSink.java | 12 +-----
.../trees/plans/physical/PhysicalFileSink.java | 50 ++++++++++++++--------
.../plans/physical/PhysicalOlapTableSink.java | 41 ++++++++++++------
.../trees/plans/physical/PhysicalResultSink.java | 15 +------
.../nereids/trees/plans/physical/PhysicalSink.java | 17 ++++++++
9 files changed, 97 insertions(+), 59 deletions(-)
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PhysicalPlanTranslator.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PhysicalPlanTranslator.java
index 045082befd..59f4318811 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PhysicalPlanTranslator.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PhysicalPlanTranslator.java
@@ -369,7 +369,7 @@ public class PhysicalPlanTranslator extends
DefaultPlanVisitor<PlanFragment, Pla
);
if (olapTableSink.isPartialUpdate() ||
(olapTableSink.isFromNativeInsertStmt()
&&
ConnectContext.get().getSessionVariable().isEnableUniqueKeyPartialUpdate())) {
- OlapTable olapTable = (OlapTable) olapTableSink.getTargetTable();
+ OlapTable olapTable = olapTableSink.getTargetTable();
if (!olapTable.getEnableUniqueKeyMergeOnWrite()) {
throw new AnalysisException("Partial update is only allowed in"
+ "unique table with merge-on-write enabled.");
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/implementation/LogicalFileSinkToPhysicalFileSink.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/implementation/LogicalFileSinkToPhysicalFileSink.java
index 456822c8de..3406185322 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/implementation/LogicalFileSinkToPhysicalFileSink.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/implementation/LogicalFileSinkToPhysicalFileSink.java
@@ -34,6 +34,7 @@ public class LogicalFileSinkToPhysicalFileSink extends
OneImplementationRuleFact
return logicalFileSink().thenApply(ctx -> {
LogicalFileSink<? extends Plan> sink = ctx.root;
return new PhysicalFileSink<>(
+ sink.getOutputExprs(),
sink.getFilePath(),
sink.getFormat(),
sink.getProperties(),
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/implementation/LogicalOlapTableSinkToPhysicalOlapTableSink.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/implementation/LogicalOlapTableSinkToPhysicalOlapTableSink.java
index e8cfaa9f80..2c727ebb8b 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/implementation/LogicalOlapTableSinkToPhysicalOlapTableSink.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/implementation/LogicalOlapTableSinkToPhysicalOlapTableSink.java
@@ -36,8 +36,9 @@ public class LogicalOlapTableSinkToPhysicalOlapTableSink
extends OneImplementati
return new PhysicalOlapTableSink<>(
sink.getDatabase(),
sink.getTargetTable(),
- sink.getPartitionIds(),
sink.getCols(),
+ sink.getPartitionIds(),
+ sink.getOutputExprs(),
ctx.connectContext.getSessionVariable().isEnableSingleReplicaInsert(),
sink.isPartialUpdate(),
sink.isFromNativeInsertStmt(),
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 3366dbd7fd..d7d890dda6 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
@@ -50,7 +50,7 @@ public class LogicalOlapTableSink<CHILD_TYPE extends Plan>
extends LogicalSink<C
public LogicalOlapTableSink(Database database, OlapTable targetTable,
List<Column> cols, List<Long> partitionIds,
List<NamedExpression> outputExprs, boolean isPartialUpdate,
boolean isFromNativeInsertStmt,
- CHILD_TYPE child) {
+ CHILD_TYPE child) {
this(database, targetTable, cols, partitionIds, outputExprs,
isPartialUpdate, isFromNativeInsertStmt,
Optional.empty(), Optional.empty(), child);
}
@@ -134,6 +134,19 @@ public class LogicalOlapTableSink<CHILD_TYPE extends Plan>
extends LogicalSink<C
isPartialUpdate, isFromNativeInsertStmt);
}
+ @Override
+ public String toString() {
+ return Utils.toSqlString("LogicalOlapTableSink[" + id.asInt() + "]",
+ "outputExprs", outputExprs,
+ "database", database,
+ "targetTable", targetTable,
+ "cols", cols,
+ "partitionIds", partitionIds,
+ "isPartialUpdate", isPartialUpdate,
+ "isFromNativeInsertStmt", isFromNativeInsertStmt
+ );
+ }
+
@Override
public <R, C> R accept(PlanVisitor<R, C> visitor, C context) {
return visitor.visitLogicalOlapTableSink(this, context);
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalDeferMaterializeResultSink.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalDeferMaterializeResultSink.java
index 955c441157..4bb7a57964 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalDeferMaterializeResultSink.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalDeferMaterializeResultSink.java
@@ -22,8 +22,6 @@ import org.apache.doris.nereids.memo.GroupExpression;
import org.apache.doris.nereids.properties.LogicalProperties;
import org.apache.doris.nereids.properties.PhysicalProperties;
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.Plan;
import org.apache.doris.nereids.trees.plans.algebra.Sink;
import org.apache.doris.nereids.trees.plans.visitor.PlanVisitor;
@@ -61,7 +59,8 @@ public class PhysicalDeferMaterializeResultSink<CHILD_TYPE
extends Plan>
Optional<GroupExpression> groupExpression, LogicalProperties
logicalProperties,
@Nullable PhysicalProperties physicalProperties, Statistics
statistics,
CHILD_TYPE child) {
- super(physicalResultSink.getType(), groupExpression,
logicalProperties, physicalProperties, statistics, child);
+ super(physicalResultSink.getType(), physicalResultSink.outputExprs,
+ groupExpression, logicalProperties, physicalProperties,
statistics, child);
this.physicalResultSink = physicalResultSink;
this.olapTable = olapTable;
this.selectedIndexId = selectedIndexId;
@@ -122,13 +121,6 @@ public class PhysicalDeferMaterializeResultSink<CHILD_TYPE
extends Plan>
groupExpression, getLogicalProperties(), physicalProperties,
statistics, child());
}
- @Override
- public List<Slot> computeOutput() {
- return physicalResultSink.getOutputExprs().stream()
- .map(NamedExpression::toSlot)
- .collect(ImmutableList.toImmutableList());
- }
-
@Override
public PhysicalDeferMaterializeResultSink<CHILD_TYPE>
resetLogicalProperties() {
return new PhysicalDeferMaterializeResultSink<>(physicalResultSink,
olapTable, selectedIndexId,
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalFileSink.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalFileSink.java
index 56ff9aff08..bc18447118 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalFileSink.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalFileSink.java
@@ -21,11 +21,12 @@ import org.apache.doris.nereids.memo.GroupExpression;
import org.apache.doris.nereids.properties.LogicalProperties;
import org.apache.doris.nereids.properties.PhysicalProperties;
import org.apache.doris.nereids.trees.expressions.Expression;
-import org.apache.doris.nereids.trees.expressions.Slot;
+import org.apache.doris.nereids.trees.expressions.NamedExpression;
import org.apache.doris.nereids.trees.plans.Plan;
import org.apache.doris.nereids.trees.plans.PlanType;
import org.apache.doris.nereids.trees.plans.algebra.Sink;
import org.apache.doris.nereids.trees.plans.visitor.PlanVisitor;
+import org.apache.doris.nereids.util.Utils;
import org.apache.doris.statistics.Statistics;
import com.google.common.base.Preconditions;
@@ -45,21 +46,26 @@ public class PhysicalFileSink<CHILD_TYPE extends Plan>
extends PhysicalSink<CHIL
private final String format;
private final Map<String, String> properties;
- public PhysicalFileSink(String filePath, String format, Map<String,
String> properties,
+ public PhysicalFileSink(List<NamedExpression> outputExprs, String
filePath, String format,
+ Map<String, String> properties,
LogicalProperties logicalProperties, CHILD_TYPE child) {
- this(filePath, format, properties, Optional.empty(),
logicalProperties, child);
+ this(outputExprs, filePath, format, properties, Optional.empty(),
logicalProperties, child);
}
- public PhysicalFileSink(String filePath, String format, Map<String,
String> properties,
+ public PhysicalFileSink(List<NamedExpression> outputExprs, String
filePath, String format,
+ Map<String, String> properties,
Optional<GroupExpression> groupExpression, LogicalProperties
logicalProperties,
CHILD_TYPE child) {
- this(filePath, format, properties, groupExpression, logicalProperties,
PhysicalProperties.GATHER, null, child);
+ this(outputExprs, filePath, format, properties,
+ groupExpression, logicalProperties, PhysicalProperties.GATHER,
null, child);
}
- public PhysicalFileSink(String filePath, String format, Map<String,
String> properties,
+ public PhysicalFileSink(List<NamedExpression> outputExprs, String
filePath, String format,
+ Map<String, String> properties,
Optional<GroupExpression> groupExpression, LogicalProperties
logicalProperties,
PhysicalProperties physicalProperties, Statistics statistics,
CHILD_TYPE child) {
- super(PlanType.PHYSICAL_FILE_SINK, groupExpression, logicalProperties,
physicalProperties, statistics, child);
+ super(PlanType.PHYSICAL_FILE_SINK, outputExprs,
+ groupExpression, logicalProperties, physicalProperties,
statistics, child);
this.filePath = filePath;
this.format = format;
this.properties = properties;
@@ -80,7 +86,8 @@ public class PhysicalFileSink<CHILD_TYPE extends Plan>
extends PhysicalSink<CHIL
@Override
public Plan withChildren(List<Plan> children) {
Preconditions.checkArgument(children.size() == 1, "PhysicalFileSink
only accepts one child");
- return new PhysicalFileSink<>(filePath, format, properties,
getLogicalProperties(), children.get(0));
+ return new PhysicalFileSink<>(outputExprs, filePath, format,
properties,
+ getLogicalProperties(), children.get(0));
}
@Override
@@ -112,32 +119,37 @@ public class PhysicalFileSink<CHILD_TYPE extends Plan>
extends PhysicalSink<CHIL
return Objects.hash(filePath, format, properties);
}
+ @Override
+ public String toString() {
+ return Utils.toSqlString("PhysicalFileSink[" + id.asInt() + "]",
+ "outputExprs", outputExprs,
+ "filePath", filePath,
+ "format", format,
+ "properties", properties);
+ }
+
@Override
public Plan withGroupExpression(Optional<GroupExpression> groupExpression)
{
- return new PhysicalFileSink<>(filePath, format, properties,
groupExpression, getLogicalProperties(), child());
+ return new PhysicalFileSink<>(outputExprs, filePath, format,
properties,
+ groupExpression, getLogicalProperties(), child());
}
@Override
public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression>
groupExpression,
Optional<LogicalProperties> logicalProperties, List<Plan>
children) {
- return new PhysicalFileSink<>(filePath, format, properties,
groupExpression, logicalProperties.get(),
- children.get(0));
+ return new PhysicalFileSink<>(outputExprs, filePath, format,
properties,
+ groupExpression, logicalProperties.get(), children.get(0));
}
@Override
public PhysicalPlan withPhysicalPropertiesAndStats(PhysicalProperties
physicalProperties, Statistics statistics) {
- return new PhysicalFileSink<>(filePath, format, properties,
groupExpression, getLogicalProperties(),
- physicalProperties, statistics, child());
- }
-
- @Override
- public List<Slot> computeOutput() {
- return child().getOutput();
+ return new PhysicalFileSink<>(outputExprs, filePath, format,
properties, groupExpression,
+ getLogicalProperties(), physicalProperties, statistics,
child());
}
@Override
public PhysicalFileSink<CHILD_TYPE> resetLogicalProperties() {
- return new PhysicalFileSink<>(filePath, format, properties,
groupExpression, null,
+ return new PhysicalFileSink<>(outputExprs, filePath, format,
properties, groupExpression, null,
physicalProperties, statistics, child());
}
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalOlapTableSink.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalOlapTableSink.java
index ed97e1e5c1..3c0a7177fc 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalOlapTableSink.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalOlapTableSink.java
@@ -29,6 +29,7 @@ import
org.apache.doris.nereids.properties.DistributionSpecHash.ShuffleType;
import org.apache.doris.nereids.properties.LogicalProperties;
import org.apache.doris.nereids.properties.PhysicalProperties;
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.Plan;
import org.apache.doris.nereids.trees.plans.PlanType;
@@ -64,22 +65,25 @@ public class PhysicalOlapTableSink<CHILD_TYPE extends Plan>
extends PhysicalSink
/**
* Constructor
*/
- public PhysicalOlapTableSink(Database database, OlapTable targetTable,
List<Long> partitionIds, List<Column> cols,
- boolean singleReplicaLoad, boolean isPartialUpdate, boolean
isFromNativeInsertStmt,
+ public PhysicalOlapTableSink(Database database, OlapTable targetTable,
List<Column> cols, List<Long> partitionIds,
+ List<NamedExpression> outputExprs, boolean singleReplicaLoad,
+ boolean isPartialUpdate, boolean isFromNativeInsertStmt,
Optional<GroupExpression> groupExpression, LogicalProperties
logicalProperties, CHILD_TYPE child) {
- this(database, targetTable, partitionIds, cols, singleReplicaLoad,
isPartialUpdate, isFromNativeInsertStmt,
+ this(database, targetTable, cols, partitionIds, outputExprs,
+ singleReplicaLoad, isPartialUpdate, isFromNativeInsertStmt,
groupExpression, logicalProperties, PhysicalProperties.GATHER,
null, child);
}
/**
* Constructor
*/
- public PhysicalOlapTableSink(Database database, OlapTable targetTable,
List<Long> partitionIds, List<Column> cols,
- boolean singleReplicaLoad, boolean isPartialUpdate, boolean
isFromNativeInsertStmt,
+ public PhysicalOlapTableSink(Database database, OlapTable targetTable,
List<Column> cols, List<Long> partitionIds,
+ List<NamedExpression> outputExprs, boolean singleReplicaLoad,
+ boolean isPartialUpdate, boolean isFromNativeInsertStmt,
Optional<GroupExpression> groupExpression, LogicalProperties
logicalProperties,
PhysicalProperties physicalProperties, Statistics statistics,
CHILD_TYPE child) {
- super(PlanType.PHYSICAL_OLAP_TABLE_SINK, groupExpression,
logicalProperties, physicalProperties,
- statistics, child);
+ super(PlanType.PHYSICAL_OLAP_TABLE_SINK, outputExprs, groupExpression,
+ logicalProperties, physicalProperties, statistics, child);
this.database = Objects.requireNonNull(database, "database != null in
PhysicalOlapTableSink");
this.targetTable = Objects.requireNonNull(targetTable, "targetTable !=
null in PhysicalOlapTableSink");
this.cols = Utils.copyRequiredList(cols);
@@ -120,7 +124,7 @@ public class PhysicalOlapTableSink<CHILD_TYPE extends Plan>
extends PhysicalSink
@Override
public Plan withChildren(List<Plan> children) {
Preconditions.checkArgument(children.size() == 1,
"PhysicalOlapTableSink only accepts one child");
- return new PhysicalOlapTableSink<>(database, targetTable,
partitionIds, cols,
+ return new PhysicalOlapTableSink<>(database, targetTable, cols,
partitionIds, outputExprs,
singleReplicaLoad, isPartialUpdate, isFromNativeInsertStmt,
groupExpression,
getLogicalProperties(), physicalProperties,
statistics, children.get(0));
}
@@ -150,8 +154,17 @@ public class PhysicalOlapTableSink<CHILD_TYPE extends
Plan> extends PhysicalSink
}
@Override
- public List<Slot> computeOutput() {
- return child().getOutput();
+ public String toString() {
+ return Utils.toSqlString("LogicalOlapTableSink[" + id.asInt() + "]",
+ "outputExprs", outputExprs,
+ "database", database,
+ "targetTable", targetTable,
+ "cols", cols,
+ "partitionIds", partitionIds,
+ "singleReplicaLoad", singleReplicaLoad,
+ "isPartialUpdate", isPartialUpdate,
+ "isFromNativeInsertStmt", isFromNativeInsertStmt
+ );
}
@Override
@@ -179,20 +192,20 @@ public class PhysicalOlapTableSink<CHILD_TYPE extends
Plan> extends PhysicalSink
@Override
public Plan withGroupExpression(Optional<GroupExpression> groupExpression)
{
- return new PhysicalOlapTableSink<>(database, targetTable,
partitionIds, cols, singleReplicaLoad,
+ return new PhysicalOlapTableSink<>(database, targetTable, cols,
partitionIds, outputExprs, singleReplicaLoad,
isPartialUpdate, isFromNativeInsertStmt, groupExpression,
getLogicalProperties(), child());
}
@Override
public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression>
groupExpression,
Optional<LogicalProperties> logicalProperties, List<Plan>
children) {
- return new PhysicalOlapTableSink<>(database, targetTable,
partitionIds, cols, singleReplicaLoad,
+ return new PhysicalOlapTableSink<>(database, targetTable, cols,
partitionIds, outputExprs, singleReplicaLoad,
isPartialUpdate, isFromNativeInsertStmt, groupExpression,
logicalProperties.get(), children.get(0));
}
@Override
public PhysicalPlan withPhysicalPropertiesAndStats(PhysicalProperties
physicalProperties, Statistics statistics) {
- return new PhysicalOlapTableSink<>(database, targetTable,
partitionIds, cols, singleReplicaLoad,
+ return new PhysicalOlapTableSink<>(database, targetTable, cols,
partitionIds, outputExprs, singleReplicaLoad,
isPartialUpdate, isFromNativeInsertStmt, groupExpression,
getLogicalProperties(),
physicalProperties, statistics, child());
}
@@ -233,7 +246,7 @@ public class PhysicalOlapTableSink<CHILD_TYPE extends Plan>
extends PhysicalSink
@Override
public PhysicalOlapTableSink<Plan> resetLogicalProperties() {
- return new PhysicalOlapTableSink<>(database, targetTable,
partitionIds, cols, singleReplicaLoad,
+ return new PhysicalOlapTableSink<>(database, targetTable, cols,
partitionIds, outputExprs, singleReplicaLoad,
isPartialUpdate, isFromNativeInsertStmt, groupExpression,
null, physicalProperties, statistics, child());
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalResultSink.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalResultSink.java
index 553b47d29b..eba99cdfb2 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalResultSink.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalResultSink.java
@@ -22,7 +22,6 @@ import org.apache.doris.nereids.properties.LogicalProperties;
import org.apache.doris.nereids.properties.PhysicalProperties;
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.Plan;
import org.apache.doris.nereids.trees.plans.PlanType;
import org.apache.doris.nereids.trees.plans.algebra.Sink;
@@ -31,7 +30,6 @@ import org.apache.doris.nereids.util.Utils;
import org.apache.doris.statistics.Statistics;
import com.google.common.base.Preconditions;
-import com.google.common.collect.ImmutableList;
import org.jetbrains.annotations.Nullable;
import java.util.List;
@@ -43,8 +41,6 @@ import java.util.Optional;
*/
public class PhysicalResultSink<CHILD_TYPE extends Plan> extends
PhysicalSink<CHILD_TYPE> implements Sink {
- private final List<NamedExpression> outputExprs;
-
public PhysicalResultSink(List<NamedExpression> outputExprs,
Optional<GroupExpression> groupExpression,
LogicalProperties logicalProperties, CHILD_TYPE child) {
this(outputExprs, groupExpression, logicalProperties,
PhysicalProperties.GATHER, null, child);
@@ -53,8 +49,8 @@ public class PhysicalResultSink<CHILD_TYPE extends Plan>
extends PhysicalSink<CH
public PhysicalResultSink(List<NamedExpression> outputExprs,
Optional<GroupExpression> groupExpression,
LogicalProperties logicalProperties, @Nullable PhysicalProperties
physicalProperties,
Statistics statistics, CHILD_TYPE child) {
- super(PlanType.PHYSICAL_RESULT_SINK, groupExpression,
logicalProperties, physicalProperties, statistics, child);
- this.outputExprs = outputExprs;
+ super(PlanType.PHYSICAL_RESULT_SINK, outputExprs, groupExpression,
+ logicalProperties, physicalProperties, statistics, child);
}
public List<NamedExpression> getOutputExprs() {
@@ -124,13 +120,6 @@ public class PhysicalResultSink<CHILD_TYPE extends Plan>
extends PhysicalSink<CH
"outputExprs", outputExprs);
}
- @Override
- public List<Slot> computeOutput() {
- return outputExprs.stream()
- .map(NamedExpression::toSlot)
- .collect(ImmutableList.toImmutableList());
- }
-
@Override
public PhysicalResultSink<CHILD_TYPE> resetLogicalProperties() {
return new PhysicalResultSink<>(outputExprs, groupExpression,
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalSink.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalSink.java
index d9dd45d208..17cf97106e 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalSink.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalSink.java
@@ -20,21 +20,38 @@ package org.apache.doris.nereids.trees.plans.physical;
import org.apache.doris.nereids.memo.GroupExpression;
import org.apache.doris.nereids.properties.LogicalProperties;
import org.apache.doris.nereids.properties.PhysicalProperties;
+import org.apache.doris.nereids.trees.expressions.NamedExpression;
+import org.apache.doris.nereids.trees.expressions.Slot;
import org.apache.doris.nereids.trees.plans.Plan;
import org.apache.doris.nereids.trees.plans.PlanType;
import org.apache.doris.statistics.Statistics;
+import com.google.common.collect.ImmutableList;
import org.jetbrains.annotations.Nullable;
+import java.util.List;
+import java.util.Objects;
import java.util.Optional;
/** abstract physical sink */
public abstract class PhysicalSink<CHILD_TYPE extends Plan> extends
PhysicalUnary<CHILD_TYPE> {
+
+ protected final List<NamedExpression> outputExprs;
+
public PhysicalSink(PlanType type,
+ List<NamedExpression> outputExprs,
Optional<GroupExpression> groupExpression,
LogicalProperties logicalProperties,
@Nullable PhysicalProperties physicalProperties,
Statistics statistics, CHILD_TYPE child) {
super(type, groupExpression, logicalProperties, physicalProperties,
statistics, child);
+ this.outputExprs =
ImmutableList.copyOf(Objects.requireNonNull(outputExprs, "outputExprs should
not null"));
+ }
+
+ @Override
+ public List<Slot> computeOutput() {
+ return outputExprs.stream()
+ .map(NamedExpression::toSlot)
+ .collect(ImmutableList.toImmutableList());
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]