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 5e35410e6e0 null-safe-eq-rf denies outer join (#32930)
5e35410e6e0 is described below

commit 5e35410e6e0a74bfb1eec4e470c16873528ae9fb
Author: minghong <[email protected]>
AuthorDate: Wed Mar 27 21:31:56 2024 +0800

    null-safe-eq-rf denies outer join (#32930)
---
 .../doris/nereids/trees/plans/physical/PhysicalHashJoin.java      | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

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 c96faed90b4..487e42661c3 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
@@ -30,6 +30,7 @@ import 
org.apache.doris.nereids.trees.expressions.EqualPredicate;
 import org.apache.doris.nereids.trees.expressions.ExprId;
 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.JoinType;
 import org.apache.doris.nereids.trees.plans.Plan;
@@ -204,13 +205,18 @@ public class PhysicalHashJoin<
     public boolean pushDownRuntimeFilter(CascadesContext context, 
IdGenerator<RuntimeFilterId> generator,
             AbstractPhysicalJoin<?, ?> builderNode, Expression srcExpr, 
Expression probeExpr,
             TRuntimeFilterType type, long buildSideNdv, int exprOrder) {
-        // currently, mark join doesn't support RF, so markJoinConjuncts is 
not processed here
         if (RuntimeFilterGenerator.DENIED_JOIN_TYPES.contains(getJoinType()) 
|| isMarkJoin()) {
             if (builderNode instanceof PhysicalHashJoin) {
                 PhysicalHashJoin<?, ?> builderJoin = (PhysicalHashJoin<?, ?>) 
builderNode;
                 if (builderJoin == this) {
                     return false;
                 }
+                EqualPredicate equal = (EqualPredicate) 
builderNode.getHashJoinConjuncts().get(exprOrder);
+                if (equal instanceof NullSafeEqual) {
+                    if (this.joinType.isOuterJoin()) {
+                        return false;
+                    }
+                }
             }
         }
         RuntimeFilterContext ctx = context.getRuntimeFilterContext();


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to