This is an automated email from the ASF dual-hosted git repository.
englefly 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 af3e6f604ae [fix](nereids) prune partition bug in pattern ColA <> ColB
#25769
af3e6f604ae is described below
commit af3e6f604ae349a698edebf26abfc51f80ab64ed
Author: minghong <[email protected]>
AuthorDate: Thu Oct 26 12:06:37 2023 +0800
[fix](nereids) prune partition bug in pattern ColA <> ColB #25769
in predicate rewrite phase, we eliminate some conjuncts which contains
un-interested columns.
for example: T (a, b) partition by (a)
interest cols: a
uninsterest cols: b
for parition prune,
filter "a=1 and a>b" is equivalent to "a=1",
filter "a=1 or a>b" is equivalent to "TRUE"
---
.../rules/TryEliminateUninterestedPredicates.java | 22 ++++++++++++++++++++++
.../rules/rewrite/PruneOlapScanPartitionTest.java | 2 ++
2 files changed, 24 insertions(+)
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/TryEliminateUninterestedPredicates.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/TryEliminateUninterestedPredicates.java
index 6db101a4cac..79bd0a54bf5 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/TryEliminateUninterestedPredicates.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/TryEliminateUninterestedPredicates.java
@@ -20,6 +20,7 @@ package org.apache.doris.nereids.rules.expression.rules;
import org.apache.doris.nereids.CascadesContext;
import org.apache.doris.nereids.rules.expression.ExpressionRewriteContext;
import
org.apache.doris.nereids.rules.expression.rules.TryEliminateUninterestedPredicates.Context;
+import org.apache.doris.nereids.trees.expressions.And;
import org.apache.doris.nereids.trees.expressions.Expression;
import org.apache.doris.nereids.trees.expressions.Slot;
import org.apache.doris.nereids.trees.expressions.literal.BooleanLiteral;
@@ -104,6 +105,27 @@ public class TryEliminateUninterestedPredicates extends
DefaultExpressionRewrite
return expr;
}
+ @Override
+ public Expression visitAnd(And and, Context parentContext) {
+ Expression left = and.left();
+ Context leftContext = new Context();
+ Expression newLeft = this.visit(left, leftContext);
+ if (leftContext.childrenContainsNonInterestedSlots) {
+ newLeft = BooleanLiteral.TRUE;
+ }
+
+ Expression right = and.right();
+ Context rightContext = new Context();
+ Expression newRight = this.visit(right, rightContext);
+ if (rightContext.childrenContainsNonInterestedSlots) {
+ newRight = BooleanLiteral.TRUE;
+ }
+ Expression expr = new And(newLeft,
newRight).accept(FoldConstantRuleOnFE.INSTANCE, expressionRewriteContext);
+ parentContext.childrenContainsInterestedSlots =
+ rightContext.childrenContainsInterestedSlots ||
leftContext.childrenContainsInterestedSlots;
+ return expr;
+ }
+
@Override
public Expression visitSlot(Slot slot, Context context) {
boolean isInterestedSlot = interestedSlots.contains(slot);
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/PruneOlapScanPartitionTest.java
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/PruneOlapScanPartitionTest.java
index 85fde57b517..de54a05bc5e 100644
---
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/PruneOlapScanPartitionTest.java
+++
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/PruneOlapScanPartitionTest.java
@@ -228,6 +228,8 @@ class PruneOlapScanPartitionTest extends TestWithFeService
implements MemoPatter
public void canNotPruneComplexPredicate() {
test("test_range_parts", "(part = 10) or (part + id = 1)", 4);
test("test_range_parts", "(part + id = 1) and (part = 4)", 1);
+ test("test_range_parts", "(part = 2) and (part <> id)", 1);
+ test("test_range_parts", "(part = 2) or (part <> id)", 4);
}
@Test
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]