This is an automated email from the ASF dual-hosted git repository. yiguolei pushed a commit to branch branch-2.1 in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-2.1 by this push: new b1a71fab2ce branch-2.1: [fix](pipelinex) fix null aware left anti join instance num #51053 (#51067) b1a71fab2ce is described below commit b1a71fab2cef5a83af986f6b2893b593b376f8d7 Author: yujun <yu...@selectdb.com> AuthorDate: Wed May 21 11:51:20 2025 +0800 branch-2.1: [fix](pipelinex) fix null aware left anti join instance num #51053 (#51067) cherry pick from #51053 --- .../src/main/java/org/apache/doris/common/TreeNode.java | 14 ++++++++++++++ .../main/java/org/apache/doris/planner/HashJoinNode.java | 8 -------- .../main/java/org/apache/doris/planner/PlanFragment.java | 4 +++- .../src/main/java/org/apache/doris/planner/PlanNode.java | 4 ---- 4 files changed, 17 insertions(+), 13 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/common/TreeNode.java b/fe/fe-core/src/main/java/org/apache/doris/common/TreeNode.java index e0651644e59..37814ea0a00 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/common/TreeNode.java +++ b/fe/fe-core/src/main/java/org/apache/doris/common/TreeNode.java @@ -237,4 +237,18 @@ public class TreeNode<NodeType extends TreeNode<NodeType>> { return null; } + /** anyMatch */ + public boolean anyMatch(Predicate<TreeNode<? extends NodeType>> func) { + if (func.apply(this)) { + return true; + } + + for (NodeType child : children) { + if (child.anyMatch(func)) { + return true; + } + } + return false; + } + } diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/HashJoinNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/HashJoinNode.java index c3cbf2afce1..b664b7a26c8 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/HashJoinNode.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/HashJoinNode.java @@ -959,12 +959,4 @@ public class HashJoinNode extends JoinNodeBase { return slotRef; } } - - @Override - public boolean isNullAwareLeftAntiJoin() { - if (joinOp == JoinOperator.NULL_AWARE_LEFT_ANTI_JOIN) { - return true; - } - return children.stream().anyMatch(PlanNode::isNullAwareLeftAntiJoin); - } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/PlanFragment.java b/fe/fe-core/src/main/java/org/apache/doris/planner/PlanFragment.java index 2469d087cdd..877a0b91dcd 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/PlanFragment.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/PlanFragment.java @@ -21,6 +21,7 @@ package org.apache.doris.planner; import org.apache.doris.analysis.Expr; +import org.apache.doris.analysis.JoinOperator; import org.apache.doris.analysis.QueryStmt; import org.apache.doris.analysis.SlotDescriptor; import org.apache.doris.analysis.SlotRef; @@ -472,6 +473,7 @@ public class PlanFragment extends TreeNode<PlanFragment> { } public boolean hasNullAwareLeftAntiJoin() { - return planRoot.isNullAwareLeftAntiJoin(); + return planRoot.anyMatch(plan -> plan instanceof JoinNodeBase + && ((JoinNodeBase) plan).getJoinOp() == JoinOperator.NULL_AWARE_LEFT_ANTI_JOIN); } } 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 b5ef5f8148f..238fc4251b5 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 @@ -269,10 +269,6 @@ public abstract class PlanNode extends TreeNode<PlanNode> implements PlanStats { this.fragment = fragment; } - public boolean isNullAwareLeftAntiJoin() { - return children.stream().anyMatch(PlanNode::isNullAwareLeftAntiJoin); - } - public PlanFragment getFragment() { return fragment; } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org