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 fe51a7d830..aeeeefb593 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 combinedHashJoinConjuncts = new ImmutableList.Builder() - .addAll(join.getHashJoinConjuncts()) - .addAll(extractedHashJoinConjuncts) - .build(); + List 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 f73d8a2923..bbf7746ec6 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()