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 bde9dc9dfbd [fix](Nereids) could not do partition prunning when
predicates is NULL (#28294) (#28422)
bde9dc9dfbd is described below
commit bde9dc9dfbd2a83e69f7b75e0312536cee1dfcfe
Author: morrySnow <[email protected]>
AuthorDate: Fri Dec 15 11:42:00 2023 +0800
[fix](Nereids) could not do partition prunning when predicates is NULL
(#28294) (#28422)
pick from master
PR: #28294
commit id: dbc2b081d7af06bbb512ed6a41d54c1cc8f2caaa
---
.../rules/expression/rules/OneRangePartitionEvaluator.java | 10 ++++++++++
.../doris/nereids/rules/expression/rules/PartitionPruner.java | 3 ++-
.../partition_prune/test_multi_range_partition.groovy | 8 ++++----
3 files changed, 16 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 de1f9aa3eb7..e6c2d92c8e2 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
@@ -44,6 +44,7 @@ import org.apache.doris.nereids.trees.expressions.Slot;
import org.apache.doris.nereids.trees.expressions.functions.scalar.Date;
import org.apache.doris.nereids.trees.expressions.literal.BooleanLiteral;
import org.apache.doris.nereids.trees.expressions.literal.Literal;
+import org.apache.doris.nereids.trees.expressions.literal.NullLiteral;
import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
import org.apache.doris.nereids.types.BooleanType;
import org.apache.doris.nereids.types.DataType;
@@ -231,6 +232,15 @@ public class OneRangePartitionEvaluator
return result;
}
+ @Override
+ public EvaluateRangeResult visitNullLiteral(NullLiteral nullLiteral,
EvaluateRangeInput context) {
+ Map<Slot, ColumnRange> emptyRanges = Maps.newHashMap();
+ for (Slot key : context.defaultColumnRanges.keySet()) {
+ emptyRanges.put(key, new ColumnRange());
+ }
+ return new EvaluateRangeResult(nullLiteral, emptyRanges,
ImmutableList.of());
+ }
+
@Override
public EvaluateRangeResult visitSlot(Slot slot, EvaluateRangeInput
context) {
// try to replace partition slot to literal
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 bccd0f9b31e..f05805bb8e0 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
@@ -29,6 +29,7 @@ import
org.apache.doris.nereids.trees.expressions.SlotReference;
import org.apache.doris.nereids.trees.expressions.literal.BooleanLiteral;
import org.apache.doris.nereids.trees.expressions.literal.DateLiteral;
import org.apache.doris.nereids.trees.expressions.literal.DateTimeLiteral;
+import org.apache.doris.nereids.trees.expressions.literal.NullLiteral;
import
org.apache.doris.nereids.trees.expressions.visitor.DefaultExpressionRewriter;
import org.apache.doris.nereids.types.DateTimeType;
@@ -143,7 +144,7 @@ public class PartitionPruner extends
DefaultExpressionRewriter<Void> {
List<Map<Slot, PartitionSlotInput>> onePartitionInputs =
evaluator.getOnePartitionInputs();
for (Map<Slot, PartitionSlotInput> currentInputs : onePartitionInputs)
{
Expression result =
evaluator.evaluateWithDefaultPartition(partitionPredicate, currentInputs);
- if (!result.equals(BooleanLiteral.FALSE)) {
+ if (!result.equals(BooleanLiteral.FALSE) && !(result instanceof
NullLiteral)) {
return false;
}
}
diff --git
a/regression-test/suites/nereids_rules_p0/partition_prune/test_multi_range_partition.groovy
b/regression-test/suites/nereids_rules_p0/partition_prune/test_multi_range_partition.groovy
index d24972c6b5f..49570682ea2 100644
---
a/regression-test/suites/nereids_rules_p0/partition_prune/test_multi_range_partition.groovy
+++
b/regression-test/suites/nereids_rules_p0/partition_prune/test_multi_range_partition.groovy
@@ -169,12 +169,12 @@ suite("test_multi_range_partition") {
explain {
sql "select * from pt where k1=7 and k2 in (null);"
- contains "partitions=2/3 (p2,p3)"
+ contains "VEMPTYSET"
}
explain {
sql "select * from pt where k1=7 and k2 not in (null);"
- contains "partitions=2/3 (p2,p3)"
+ contains "VEMPTYSET"
}
explain {
@@ -189,13 +189,13 @@ suite("test_multi_range_partition") {
explain {
sql "select * from pt where k2 in (null);"
- contains "partitions=3/3 (p1,p2,p3)"
+ contains "VEMPTYSET"
}
// p1/p2/p3 NOT pruned
explain {
sql "select * from pt where k2 not in (null)"
- contains "partitions=3/3 (p1,p2,p3)"
+ contains "VEMPTYSET"
}
explain {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]