This is an automated email from the ASF dual-hosted git repository.
kxiao pushed a commit to branch branch-2.0
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-2.0 by this push:
new 0496785fb67 [fix](Nereids) dphyper support evaluate join that has one
side condition (#33702) (#35268)
0496785fb67 is described below
commit 0496785fb672ad3532616bc6563fc640dc23c898
Author: 谢健 <[email protected]>
AuthorDate: Sun May 26 16:18:33 2024 +0800
[fix](Nereids) dphyper support evaluate join that has one side condition
(#33702) (#35268)
---
.../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..4265c637d7d 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 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));
+ 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 46660fa07c3..1ca771fcafc 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
@@ -669,9 +669,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]