This is an automated email from the ASF dual-hosted git repository. morrysnow pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push: new dbc2b081d7a [fix](Nereids) could not do partition prunning when predicates is NULL (#28294) dbc2b081d7a is described below commit dbc2b081d7af06bbb512ed6a41d54c1cc8f2caaa Author: morrySnow <101034200+morrys...@users.noreply.github.com> AuthorDate: Wed Dec 13 19:36:42 2023 +0800 [fix](Nereids) could not do partition prunning when predicates is NULL (#28294) --- .../rules/expression/rules/OneRangePartitionEvaluator.java | 10 ++++++++++ .../doris/nereids/rules/expression/rules/PartitionPruner.java | 3 ++- .../partition_prune/test_date_function_prune.groovy | 10 ++++++++++ .../partition_prune/test_multi_range_partition.groovy | 8 ++++---- 4 files changed, 26 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..3e08404d0be 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 4c169658348..cb4137ba5b6 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; @@ -142,7 +143,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_date_function_prune.groovy b/regression-test/suites/nereids_rules_p0/partition_prune/test_date_function_prune.groovy index 1523bbb662f..583bb48e837 100644 --- a/regression-test/suites/nereids_rules_p0/partition_prune/test_date_function_prune.groovy +++ b/regression-test/suites/nereids_rules_p0/partition_prune/test_date_function_prune.groovy @@ -74,4 +74,14 @@ suite("test_date_function_prune") { sql "select * from dp where Date(date_time) in ('2020-01-01', '2020-01-03')" contains("partitions=2/3 (p1,p3)") } + + explain { + sql "select * from dp where (date(date_time) = null and node_name = 'no sense1') or (date(date_time) = '2020-01-01' and node_name = 'no sense2')" + contains("partitions=1/3 (p1)") + } + + explain { + sql "select * from dp where date(date_time) = null or date(date_time) = '2020-01-01'" + contains("partitions=1/3 (p1)") + } } \ No newline at end of file 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 afb10263814..b12853db8a5 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 @@ -179,12 +179,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 { @@ -204,13 +204,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: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org