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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]