From bc898e3cdc305366e4043480280ba3a0eb2811ca Mon Sep 17 00:00:00 2001 From: Gabriel Date: Sun, 3 Mar 2024 19:21:11 +0800 Subject: [PATCH] [pipelineX](bug) Fix incorrect join operator judgement (#31690) * [pipelineX](bug) Fix incorrect join operator judgement * update --- .../translator/PhysicalPlanTranslator.java | 3 --- .../translator/PlanTranslatorContext.java | 2 -- .../apache/doris/planner/HashJoinNode.java | 24 +++++++++++++++---- .../doris/planner/MultiCastPlanFragment.java | 1 - .../apache/doris/planner/PlanFragment.java | 10 ++------ .../org/apache/doris/planner/PlanNode.java | 4 ++++ .../org/apache/doris/planner/ScanNode.java | 2 +- 7 files changed, 27 insertions(+), 19 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 c64965080f..1be1a6c763 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 @@ -1205,9 +1205,6 @@ public class PhysicalPlanTranslator extends DefaultPlanVisitor { // has colocate plan node protected boolean hasColocatePlanNode = false; - protected boolean hasNullAwareLeftAntiJoin = false; - private TResultSinkType resultSinkType = TResultSinkType.MYSQL_PROTOCAL; /** @@ -473,11 +471,7 @@ public class PlanFragment extends TreeNode { this.bucketNum = bucketNum; } - public boolean isHasNullAwareLeftAntiJoin() { - return hasNullAwareLeftAntiJoin; - } - - public void setHasNullAwareLeftAntiJoin(boolean hasNullAwareLeftAntiJoin) { - this.hasNullAwareLeftAntiJoin = hasNullAwareLeftAntiJoin; + public boolean hasNullAwareLeftAntiJoin() { + return planRoot.isNullAwareLeftAntiJoin(); } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/PlanNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/PlanNode.java index f450758834..a88925f929 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/PlanNode.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/PlanNode.java @@ -261,6 +261,10 @@ public abstract class PlanNode extends TreeNode implements PlanStats { this.fragment = fragment; } + public boolean isNullAwareLeftAntiJoin() { + return children.stream().anyMatch(PlanNode::isNullAwareLeftAntiJoin); + } + public PlanFragment getFragment() { return fragment; } diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/ScanNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/ScanNode.java index be804e8797..21f6bb07bd 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/ScanNode.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/ScanNode.java @@ -726,7 +726,7 @@ public abstract class ScanNode extends PlanNode { return context != null && context.getSessionVariable().isIgnoreStorageDataDistribution() && context.getSessionVariable().getEnablePipelineXEngine() - && !fragment.isHasNullAwareLeftAntiJoin() + && !fragment.hasNullAwareLeftAntiJoin() && getScanRangeNum() < ConnectContext.get().getSessionVariable().getParallelExecInstanceNum() * numBackends; }