diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/properties/DistributionSpecHash.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/properties/DistributionSpecHash.java index 772dfe0544..dc146c6b6a 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/properties/DistributionSpecHash.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/properties/DistributionSpecHash.java @@ -168,14 +168,6 @@ public class DistributionSpecHash extends DistributionSpec { return containsSatisfy(requiredHash.getOrderedShuffledColumns()); } - // if (requiredHash.shuffleType == ShuffleType.JOIN) { - // return equalsSatisfy(requiredHash.getOrderedShuffledColumns()); - // } - // - // if (!this.shuffleType.equals(requiredHash.shuffleType)) { - // return false; - // } - return equalsSatisfy(requiredHash.getOrderedShuffledColumns()); } @@ -190,6 +182,9 @@ public class DistributionSpecHash extends DistributionSpec { } private boolean equalsSatisfy(List required) { + if (equivalenceExprIds.size() != required.size()) { + return false; + } for (int i = 0; i < required.size(); i++) { if (!equivalenceExprIds.get(i).contains(required.get(i))) { return false; diff --git a/fe/fe-core/src/test/java/org/apache/doris/nereids/properties/DistributionSpecHashTest.java b/fe/fe-core/src/test/java/org/apache/doris/nereids/properties/DistributionSpecHashTest.java index bfa6980cdc..f9361ea118 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/nereids/properties/DistributionSpecHashTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/nereids/properties/DistributionSpecHashTest.java @@ -450,4 +450,35 @@ public class DistributionSpecHashTest { Assertions.assertTrue(aggregate.satisfy(enforce2)); Assertions.assertTrue(natural.satisfy(enforce2)); } + + @Test + public void testHashEqualSatisfyWithDifferentLength() { + Map enforce1Map = Maps.newHashMap(); + enforce1Map.put(new ExprId(0), 0); + enforce1Map.put(new ExprId(1), 1); + enforce1Map.put(new ExprId(2), 2); + DistributionSpecHash enforce1 = new DistributionSpecHash( + Lists.newArrayList(new ExprId(0), new ExprId(1), new ExprId(2)), + ShuffleType.ENFORCE, + 0, + Sets.newHashSet(0L), + Lists.newArrayList(Sets.newHashSet(new ExprId(0)), Sets.newHashSet(new ExprId(1)), Sets.newHashSet(new ExprId(2))), + enforce1Map + ); + + Map enforce2Map = Maps.newHashMap(); + enforce2Map.put(new ExprId(0), 0); + enforce2Map.put(new ExprId(1), 1); + DistributionSpecHash enforce2 = new DistributionSpecHash( + Lists.newArrayList(new ExprId(0), new ExprId(1)), + ShuffleType.ENFORCE, + 1, + Sets.newHashSet(1L), + Lists.newArrayList(Sets.newHashSet(new ExprId(0)), Sets.newHashSet(new ExprId(1))), + enforce2Map + ); + + Assertions.assertFalse(enforce1.satisfy(enforce2)); + Assertions.assertFalse(enforce2.satisfy(enforce1)); + } }