From 7b3377d47407c70514b1fc6934943920d08b529f Mon Sep 17 00:00:00 2001 From: morrySnow <101034200+morrySnow@users.noreply.github.com> Date: Tue, 27 Feb 2024 16:59:21 +0800 Subject: [PATCH] [fix](Nereids) let with methods of plans use correct logical properties (#31447) --- .../apache/doris/nereids/rules/rewrite/EliminateSort.java | 2 ++ .../nereids/trees/plans/logical/LogicalCTEConsumer.java | 3 +-- .../nereids/trees/plans/logical/LogicalEmptyRelation.java | 2 +- .../nereids/trees/plans/logical/LogicalGenerate.java | 8 +------- .../doris/nereids/trees/plans/logical/LogicalJoin.java | 5 ++++- .../nereids/trees/plans/logical/LogicalPartitionTopN.java | 3 ++- .../doris/nereids/trees/plans/logical/LogicalProject.java | 3 ++- .../nereids/trees/plans/logical/LogicalResultSink.java | 2 +- .../doris/nereids/trees/plans/logical/LogicalTopN.java | 3 +-- .../doris/nereids/trees/plans/logical/LogicalUnion.java | 5 ----- .../doris/nereids/trees/plans/logical/LogicalWindow.java | 3 +-- 11 files changed, 16 insertions(+), 23 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/EliminateSort.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/EliminateSort.java index c08c5dfb26..50fe0bc414 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/EliminateSort.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/EliminateSort.java @@ -69,6 +69,8 @@ public class EliminateSort extends DefaultPlanRewriter implements Custo @Override public Plan visitLogicalSink(LogicalSink sink, Boolean eliminateSort) { + // 1. table sink: eliminate -> true + // 2. sink -> tablesink -> olaptablesink return skipEliminateSort(sink, eliminateSort); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalCTEConsumer.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalCTEConsumer.java index e098f79d84..71b1c43f79 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalCTEConsumer.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalCTEConsumer.java @@ -122,8 +122,7 @@ public class LogicalCTEConsumer extends LogicalRelation implements BlockFuncDeps public Plan withTwoMaps(Map consumerToProducerOutputMap, Map producerToConsumerOutputMap) { return new LogicalCTEConsumer(relationId, cteId, name, - consumerToProducerOutputMap, producerToConsumerOutputMap, - Optional.empty(), Optional.empty()); + consumerToProducerOutputMap, producerToConsumerOutputMap); } @Override diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalEmptyRelation.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalEmptyRelation.java index 2f6018fae9..ab816f7a40 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalEmptyRelation.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalEmptyRelation.java @@ -66,7 +66,7 @@ public class LogicalEmptyRelation extends LogicalRelation } public LogicalEmptyRelation withProjects(List projects) { - return new LogicalEmptyRelation(relationId, projects, Optional.empty(), Optional.empty()); + return new LogicalEmptyRelation(relationId, projects); } @Override diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalGenerate.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalGenerate.java index a26ce99d6b..0c38bd9a06 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalGenerate.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalGenerate.java @@ -80,11 +80,6 @@ public class LogicalGenerate extends LogicalUnary withExpandColumnAlias(List> expandColumnAlias) { - return new LogicalGenerate<>(generators, generatorOutput, expandColumnAlias, - Optional.empty(), Optional.of(getLogicalProperties()), child()); - } - @Override public LogicalGenerate withChildren(List children) { Preconditions.checkArgument(children.size() == 1); @@ -110,8 +105,7 @@ public class LogicalGenerate extends LogicalUnary(generators, newGeneratorOutput, expandColumnAlias, - Optional.empty(), Optional.of(getLogicalProperties()), child()); + return new LogicalGenerate<>(generators, newGeneratorOutput, expandColumnAlias, child()); } @Override diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalJoin.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalJoin.java index 80a40024a8..d0f7063fa3 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalJoin.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalJoin.java @@ -376,6 +376,9 @@ public class LogicalJoin withJoinConjuncts(List hashJoinConjuncts, List otherJoinConjuncts) { return new LogicalJoin<>(joinType, hashJoinConjuncts, otherJoinConjuncts, markJoinConjuncts, @@ -387,7 +390,7 @@ public class LogicalJoin otherJoinConjuncts, List markJoinConjuncts) { return new LogicalJoin<>(joinType, hashJoinConjuncts, otherJoinConjuncts, markJoinConjuncts, - hint, markJoinSlotReference, Optional.empty(), Optional.empty(), + hint, markJoinSlotReference, Optional.empty(), Optional.of(getLogicalProperties()), children, null); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalPartitionTopN.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalPartitionTopN.java index 85ee1e25de..69da96e8f7 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalPartitionTopN.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalPartitionTopN.java @@ -179,7 +179,8 @@ public class LogicalPartitionTopN extends LogicalUnary< public LogicalPartitionTopN withPartitionKeysAndOrderKeys( List partitionKeys, List orderKeys) { - return new LogicalPartitionTopN<>(function, partitionKeys, orderKeys, hasGlobalLimit, partitionLimit, child()); + return new LogicalPartitionTopN<>(function, partitionKeys, orderKeys, hasGlobalLimit, partitionLimit, + Optional.empty(), Optional.of(getLogicalProperties()), child()); } @Override diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalProject.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalProject.java index 5dda7bb56a..f3a4d050b8 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalProject.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalProject.java @@ -188,7 +188,8 @@ public class LogicalProject extends LogicalUnary withEliminate(boolean isEliminate) { - return new LogicalProject<>(projects, excepts, isDistinct, isEliminate, children); + return new LogicalProject<>(projects, excepts, isDistinct, isEliminate, + Optional.empty(), Optional.of(getLogicalProperties()), children); } public LogicalProject withProjects(List projects) { 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 6312aee623..0eb866c4ae 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 @@ -74,7 +74,7 @@ public class LogicalResultSink extends LogicalSink withOutputExprs(List outputExprs) { - return new LogicalResultSink<>(outputExprs, Optional.empty(), Optional.empty(), child()); + return new LogicalResultSink<>(outputExprs, child()); } @Override diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalTopN.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalTopN.java index 5d2656eee5..7f7f9b7a40 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalTopN.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalTopN.java @@ -133,8 +133,7 @@ public class LogicalTopN extends LogicalUnary withLimitChild(long limit, long offset, Plan child) { Preconditions.checkArgument(children.size() == 1, "LogicalTopN should have 1 child, but input is %s", children.size()); - return new LogicalTopN<>(orderKeys, limit, offset, - Optional.empty(), Optional.of(getLogicalProperties()), child); + return new LogicalTopN<>(orderKeys, limit, offset, child); } @Override diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalUnion.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalUnion.java index a7120cd270..9b35f36465 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalUnion.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalUnion.java @@ -175,11 +175,6 @@ public class LogicalUnion extends LogicalSetOperation implements Union, OutputPr Optional.empty(), Optional.empty(), children); } - public LogicalUnion withHasPushedFilter() { - return new LogicalUnion(qualifier, outputs, regularChildrenOutputs, constantExprsList, true, - Optional.empty(), Optional.empty(), children); - } - @Override public LogicalUnion pruneOutputs(List prunedOutputs) { return withNewOutputs(prunedOutputs); diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalWindow.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalWindow.java index 086643e9f8..457678787b 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalWindow.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalWindow.java @@ -87,8 +87,7 @@ public class LogicalWindow extends LogicalUnary withExpression(List windowExpressions, Plan child) { - return new LogicalWindow<>(windowExpressions, isChecked, Optional.empty(), - Optional.empty(), child); + return new LogicalWindow<>(windowExpressions, isChecked, child); } public LogicalWindow withChecked(List windowExpressions, Plan child) {