This is an automated email from the ASF dual-hosted git repository.
morrysnow pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new 7797ec9215e [fix](Nereids) dphyper support evaluate join that has one
side condition (#33702)
7797ec9215e is described below
commit 7797ec9215e2bb2c9824a7eec014f716089f2413
Author: 谢健 <[email protected]>
AuthorDate: Wed Apr 17 20:41:15 2024 +0800
[fix](Nereids) dphyper support evaluate join that has one side condition
(#33702)
---
.../jobs/joinorder/hypergraph/OtherJoinTest.java | 18 ++++++++++++++++++
.../apache/doris/nereids/util/HyperGraphBuilder.java | 5 ++++-
2 files changed, 22 insertions(+), 1 deletion(-)
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/nereids/jobs/joinorder/hypergraph/OtherJoinTest.java
b/fe/fe-core/src/test/java/org/apache/doris/nereids/jobs/joinorder/hypergraph/OtherJoinTest.java
index a4062d2edff..561e624e917 100644
---
a/fe/fe-core/src/test/java/org/apache/doris/nereids/jobs/joinorder/hypergraph/OtherJoinTest.java
+++
b/fe/fe-core/src/test/java/org/apache/doris/nereids/jobs/joinorder/hypergraph/OtherJoinTest.java
@@ -19,12 +19,17 @@ package org.apache.doris.nereids.jobs.joinorder.hypergraph;
import org.apache.doris.nereids.CascadesContext;
import org.apache.doris.nereids.datasets.tpch.TPCHTestBase;
+import org.apache.doris.nereids.trees.expressions.EqualTo;
+import org.apache.doris.nereids.trees.expressions.Expression;
+import org.apache.doris.nereids.trees.plans.JoinType;
import org.apache.doris.nereids.trees.plans.Plan;
+import org.apache.doris.nereids.trees.plans.logical.LogicalJoin;
import org.apache.doris.nereids.trees.plans.logical.LogicalProject;
import org.apache.doris.nereids.util.HyperGraphBuilder;
import org.apache.doris.nereids.util.MemoTestUtils;
import org.apache.doris.nereids.util.PlanChecker;
+import avro.shaded.com.google.common.collect.ImmutableList;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
@@ -68,4 +73,17 @@ public class OtherJoinTest extends TPCHTestBase {
Assertions.assertTrue(res1.equals(res2));
}
+
+ @Test
+ void testOneSideJoin() {
+ HyperGraphBuilder hyperGraphBuilder = new HyperGraphBuilder();
+ Plan plan = hyperGraphBuilder.init(1, 2, 3)
+ .addEdge(JoinType.LEFT_OUTER_JOIN, 0, 1)
+ .addEdge(JoinType.LEFT_OUTER_JOIN, 0, 2)
+ .buildPlan();
+ Expression oneSideCond = new EqualTo(plan.child(0).getOutput().get(0),
plan.child(0).getOutput().get(2));
+ plan = ((LogicalJoin<?, ?>)
plan).withJoinConjuncts(ImmutableList.of(), ImmutableList.of(oneSideCond),
((LogicalJoin<?, ?>) plan).getJoinReorderContext());
+ Set<List<String>> res = hyperGraphBuilder.evaluate(plan);
+ Assertions.assertEquals(4, res.size());
+ }
}
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/nereids/util/HyperGraphBuilder.java
b/fe/fe-core/src/test/java/org/apache/doris/nereids/util/HyperGraphBuilder.java
index b3df12bc086..6a1da5a994c 100644
---
a/fe/fe-core/src/test/java/org/apache/doris/nereids/util/HyperGraphBuilder.java
+++
b/fe/fe-core/src/test/java/org/apache/doris/nereids/util/HyperGraphBuilder.java
@@ -672,9 +672,12 @@ public class HyperGraphBuilder {
Integer rv;
if (left.containsKey(slots.get(0))) {
lv = left.get(slots.get(0)).get(leftIndex);
- rv = right.get(slots.get(1)).get(rightIndex);
} else {
lv = right.get(slots.get(0)).get(rightIndex);
+ }
+ if (right.containsKey(slots.get(1))) {
+ rv = right.get(slots.get(1)).get(rightIndex);
+ } else {
rv = left.get(slots.get(1)).get(leftIndex);
}
Boolean res = (lv == rv) && (lv != null) && (rv != null);
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]