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 64d61a4b61c [enhancement](nereids)convert or to inpredicate and 
optimize inpredicate partition prune #28316 (#28407)
64d61a4b61c is described below

commit 64d61a4b61c08fdce8139e31fa51c6058f1ed3b5
Author: starocean999 <[email protected]>
AuthorDate: Thu Dec 14 19:46:50 2023 +0800

    [enhancement](nereids)convert or to inpredicate and optimize inpredicate 
partition prune #28316 (#28407)
---
 .../rules/expression/rules/OneRangePartitionEvaluator.java    | 11 ++++++-----
 .../doris/nereids/rules/expression/rules/PartitionPruner.java |  1 +
 2 files changed, 7 insertions(+), 5 deletions(-)

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 b4fb931ec1e..de1f9aa3eb7 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
@@ -386,11 +386,12 @@ public class OneRangePartitionEvaluator
         if (inPredicate.getCompareExpr() instanceof Slot
                 && 
inPredicate.getOptions().stream().allMatch(Literal.class::isInstance)) {
             Slot slot = (Slot) inPredicate.getCompareExpr();
-            ColumnRange unionLiteralRange = inPredicate.getOptions()
-                    .stream()
-                    .map(Literal.class::cast)
-                    .map(ColumnRange::singleton)
-                    .reduce(ColumnRange.empty(), ColumnRange::union);
+            ColumnRange unionLiteralRange = ColumnRange.empty();
+            ColumnRange slotRange = 
result.childrenResult.get(0).columnRanges.get(slot);
+            for (Expression expr : inPredicate.getOptions()) {
+                unionLiteralRange = unionLiteralRange.union(
+                        slotRange.intersect(ColumnRange.singleton((Literal) 
expr)));
+            }
             Map<Slot, ColumnRange> slotRanges = 
result.childrenResult.get(0).columnRanges;
             result = intersectSlotRange(result, slotRanges, slot, 
unionLiteralRange);
         }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/PartitionPruner.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/PartitionPruner.java
index ae3a5add083..bccd0f9b31e 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/PartitionPruner.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/PartitionPruner.java
@@ -112,6 +112,7 @@ public class PartitionPruner extends 
DefaultExpressionRewriter<Void> {
                         partitionTableType))
                 .collect(ImmutableList.toImmutableList());
 
+        partitionPredicate = OrToIn.INSTANCE.rewrite(partitionPredicate, null);
         PartitionPruner partitionPruner = new PartitionPruner(evaluators, 
partitionPredicate);
         //TODO: we keep default partition because it's too hard to prune it, 
we return false in canPrune().
         return partitionPruner.prune();


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to