This is an automated email from the ASF dual-hosted git repository.

englefly 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 9f3f97000ad [fix](nereids) do not push '<=>' rf through nlj outer join 
(#32952)
9f3f97000ad is described below

commit 9f3f97000ad3cd354489a24670a8309685de6349
Author: minghong <engle...@gmail.com>
AuthorDate: Thu Mar 28 13:29:29 2024 +0800

    [fix](nereids) do not push '<=>' rf through nlj outer join (#32952)
---
 .../trees/plans/physical/PhysicalHashJoin.java      | 12 ++++++------
 .../plans/physical/PhysicalNestedLoopJoin.java      | 21 +++++++++++++++++++++
 2 files changed, 27 insertions(+), 6 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalHashJoin.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalHashJoin.java
index 487e42661c3..a50f6a4e0af 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalHashJoin.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalHashJoin.java
@@ -211,12 +211,12 @@ public class PhysicalHashJoin<
                 if (builderJoin == this) {
                     return false;
                 }
-                EqualPredicate equal = (EqualPredicate) 
builderNode.getHashJoinConjuncts().get(exprOrder);
-                if (equal instanceof NullSafeEqual) {
-                    if (this.joinType.isOuterJoin()) {
-                        return false;
-                    }
-                }
+            }
+        }
+        EqualPredicate equal = (EqualPredicate) 
builderNode.getHashJoinConjuncts().get(exprOrder);
+        if (equal instanceof NullSafeEqual) {
+            if (this.joinType.isOuterJoin()) {
+                return false;
             }
         }
         RuntimeFilterContext ctx = context.getRuntimeFilterContext();
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalNestedLoopJoin.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalNestedLoopJoin.java
index b8e5c17e034..d09864d0747 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalNestedLoopJoin.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalNestedLoopJoin.java
@@ -17,12 +17,17 @@
 
 package org.apache.doris.nereids.trees.plans.physical;
 
+import org.apache.doris.common.IdGenerator;
+import org.apache.doris.nereids.CascadesContext;
 import org.apache.doris.nereids.hint.DistributeHint;
 import org.apache.doris.nereids.memo.GroupExpression;
+import org.apache.doris.nereids.processor.post.RuntimeFilterGenerator;
 import org.apache.doris.nereids.properties.LogicalProperties;
 import org.apache.doris.nereids.properties.PhysicalProperties;
+import org.apache.doris.nereids.trees.expressions.EqualPredicate;
 import org.apache.doris.nereids.trees.expressions.Expression;
 import org.apache.doris.nereids.trees.expressions.MarkJoinSlotReference;
+import org.apache.doris.nereids.trees.expressions.NullSafeEqual;
 import org.apache.doris.nereids.trees.expressions.Slot;
 import org.apache.doris.nereids.trees.plans.DistributeType;
 import org.apache.doris.nereids.trees.plans.JoinType;
@@ -31,11 +36,13 @@ import org.apache.doris.nereids.trees.plans.PlanType;
 import org.apache.doris.nereids.trees.plans.visitor.PlanVisitor;
 import org.apache.doris.nereids.util.ExpressionUtils;
 import org.apache.doris.nereids.util.MutableState;
+import org.apache.doris.planner.RuntimeFilterId;
 import org.apache.doris.statistics.Statistics;
 
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Sets;
+import org.apache.doris.thrift.TRuntimeFilterType;
 
 import java.util.List;
 import java.util.Optional;
@@ -238,4 +245,18 @@ public class PhysicalNestedLoopJoin<
                 hashJoinConjuncts, otherJoinConjuncts, markJoinConjuncts, 
markJoinSlotReference, groupExpression,
                 null, physicalProperties, statistics, left(), right());
     }
+
+    @Override
+    public boolean pushDownRuntimeFilter(CascadesContext context, 
IdGenerator<RuntimeFilterId> generator,
+                                         AbstractPhysicalJoin<?, ?> 
builderNode, Expression srcExpr,
+                                         Expression probeExpr, 
TRuntimeFilterType type, long buildSideNdv,
+                                         int exprOrder) {
+        EqualPredicate equal = (EqualPredicate) 
builderNode.getHashJoinConjuncts().get(exprOrder);
+        if (equal instanceof NullSafeEqual && this.joinType.isOuterJoin()) {
+            return false;
+        }
+
+        return super.pushDownRuntimeFilter(context, generator, builderNode, 
srcExpr, probeExpr, type, buildSideNdv,
+                exprOrder);
+    }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to