This is an automated email from the ASF dual-hosted git repository.

yiguolei pushed a commit to branch branch-2.1
in repository https://gitbox.apache.org/repos/asf/doris.git

commit f1462f6cf48f712703c8c8ec4d6af048097754b5
Author: 谢健 <jianx...@gmail.com>
AuthorDate: Thu Jan 18 15:55:34 2024 +0800

    [fix](Nereids): eliminate redundant join condition after inferring 
condition (#30093)
    
    eliminate redundant join when find hashing join condition
    such as for plan:
    ```
    T1 join T2 on T1.id = T2.id join T3 on T1.id = T3.id and T2.id = T3.id
    ```
    we infer a new predicate T1.id = T2.id which is redundant. Therefore we 
need to eliminate it when find hash condition
---
 .../doris/nereids/rules/rewrite/FindHashConditionForJoin.java    | 9 +++++----
 .../nereids/jobs/joinorder/hypergraph/CompareOuterJoinTest.java  | 5 ++++-
 2 files changed, 9 insertions(+), 5 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/FindHashConditionForJoin.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/FindHashConditionForJoin.java
index fe51a7d830b..aeeeefb593b 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/FindHashConditionForJoin.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/FindHashConditionForJoin.java
@@ -28,6 +28,7 @@ import 
org.apache.doris.nereids.trees.plans.logical.LogicalJoin;
 import org.apache.doris.nereids.util.JoinUtils;
 
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Streams;
 
 import java.util.List;
 
@@ -61,10 +62,10 @@ public class FindHashConditionForJoin extends 
OneRewriteRuleFactory {
                 return join;
             }
 
-            List<Expression> combinedHashJoinConjuncts = new 
ImmutableList.Builder<Expression>()
-                    .addAll(join.getHashJoinConjuncts())
-                    .addAll(extractedHashJoinConjuncts)
-                    .build();
+            List<Expression> combinedHashJoinConjuncts = Streams
+                    .concat(join.getHashJoinConjuncts().stream(), 
extractedHashJoinConjuncts.stream())
+                    .distinct()
+                    .collect(ImmutableList.toImmutableList());
             JoinType joinType = join.getJoinType();
             if (joinType == JoinType.CROSS_JOIN && 
!combinedHashJoinConjuncts.isEmpty()) {
                 joinType = JoinType.INNER_JOIN;
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/jobs/joinorder/hypergraph/CompareOuterJoinTest.java
 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/jobs/joinorder/hypergraph/CompareOuterJoinTest.java
index f73d8a2923e..bbf7746ec6a 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/jobs/joinorder/hypergraph/CompareOuterJoinTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/jobs/joinorder/hypergraph/CompareOuterJoinTest.java
@@ -28,10 +28,12 @@ import 
org.apache.doris.nereids.rules.exploration.mv.mapping.RelationMapping;
 import org.apache.doris.nereids.rules.exploration.mv.mapping.SlotMapping;
 import org.apache.doris.nereids.sqltest.SqlTestBase;
 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.util.HyperGraphBuilder;
 import org.apache.doris.nereids.util.PlanChecker;
 
+import com.google.common.collect.Sets;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
@@ -69,7 +71,8 @@ class CompareOuterJoinTest extends SqlTestBase {
 
     @Test
     void testRandomQuery() {
-        Plan p1 = new HyperGraphBuilder().randomBuildPlanWith(3, 3);
+        Plan p1 = new HyperGraphBuilder(Sets.newHashSet(JoinType.INNER_JOIN))
+                .randomBuildPlanWith(3, 3);
         p1 = PlanChecker.from(connectContext, p1)
                 .analyze()
                 .rewrite()


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to