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]

Reply via email to