diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/OneRangePartitionEvaluator.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/OneRangePartitionEvaluator.java index 26cc7ce84b6a25..90b5af14931be2 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/OneRangePartitionEvaluator.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/OneRangePartitionEvaluator.java @@ -63,6 +63,8 @@ import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Range; +import com.google.common.collect.RangeSet; +import com.google.common.collect.TreeRangeSet; import java.util.ArrayList; import java.util.HashMap; @@ -363,13 +365,12 @@ public EvaluateRangeResult visitInPredicate(InPredicate inPredicate, EvaluateRan if (exprRanges.containsKey(inPredicate.getCompareExpr()) && inPredicate.getOptions().stream().allMatch(Literal.class::isInstance)) { Expression compareExpr = inPredicate.getCompareExpr(); - ColumnRange unionLiteralRange = ColumnRange.empty(); ColumnRange compareExprRange = result.childrenResult.get(0).columnRanges.get(compareExpr); + RangeSet union = TreeRangeSet.create(); for (Expression expr : inPredicate.getOptions()) { - unionLiteralRange = unionLiteralRange.union( - compareExprRange.intersect(ColumnRange.singleton((Literal) expr))); + union.addAll(compareExprRange.intersect(ColumnRange.singleton((Literal) expr)).asRanges()); } - result = intersectSlotRange(result, exprRanges, compareExpr, unionLiteralRange); + result = intersectSlotRange(result, exprRanges, compareExpr, new ColumnRange(union)); } result = result.withRejectNot(false); return result;