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