You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by mo...@apache.org on 2022/06/24 00:56:17 UTC
[doris] branch master updated: [fix](planner)infer predicate rule infer binary pridicate when two slot do not equal by mistake (#10356)
This is an automated email from the ASF dual-hosted git repository.
morningman 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 d5be190cf9 [fix](planner)infer predicate rule infer binary pridicate when two slot do not equal by mistake (#10356)
d5be190cf9 is described below
commit d5be190cf98e90035941a264a998ab5834a52b53
Author: morrySnow <10...@users.noreply.github.com>
AuthorDate: Fri Jun 24 08:56:12 2022 +0800
[fix](planner)infer predicate rule infer binary pridicate when two slot do not equal by mistake (#10356)
infer predicate rule infer binary predicate when two slot do not equal by mistake
---
.../org/apache/doris/rewrite/InferFiltersRule.java | 3 ++-
.../apache/doris/rewrite/InferFiltersRuleTest.java | 19 ++++++++++---------
2 files changed, 12 insertions(+), 10 deletions(-)
diff --git a/fe/fe-core/src/main/java/org/apache/doris/rewrite/InferFiltersRule.java b/fe/fe-core/src/main/java/org/apache/doris/rewrite/InferFiltersRule.java
index 4332714e31..e0c4e4d628 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/rewrite/InferFiltersRule.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/rewrite/InferFiltersRule.java
@@ -183,7 +183,8 @@ public class InferFiltersRule implements ExprRewriteRule {
}
analyzer.registerGlobalSlotToLiteralDeDuplication(pair);
}
- } else if (conjunct.getChild(0).unwrapSlotRef() instanceof SlotRef
+ } else if (((BinaryPredicate) conjunct).getOp().isEquivalence()
+ && conjunct.getChild(0).unwrapSlotRef() instanceof SlotRef
&& conjunct.getChild(1).unwrapSlotRef() instanceof SlotRef) {
Pair<Expr, Expr> pair = new Pair<>(conjunct.getChild(0).unwrapSlotRef(),
conjunct.getChild(1).unwrapSlotRef());
diff --git a/fe/fe-core/src/test/java/org/apache/doris/rewrite/InferFiltersRuleTest.java b/fe/fe-core/src/test/java/org/apache/doris/rewrite/InferFiltersRuleTest.java
index ab132491d0..92367c4b2d 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/rewrite/InferFiltersRuleTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/rewrite/InferFiltersRuleTest.java
@@ -77,7 +77,6 @@ public class InferFiltersRuleTest {
}
@Test
- //default enableInferPredicate = true;
public void testRewritten() throws Exception {
SessionVariable sessionVariable = dorisAssert.getSessionVariable();
sessionVariable.setEnableInferPredicate(true);
@@ -87,6 +86,16 @@ public class InferFiltersRuleTest {
Assert.assertTrue(planString.contains("`tb2`.`k1` = 1"));
}
+ @Test
+ public void testUnequalSlotPredicate() throws Exception {
+ SessionVariable sessionVariable = dorisAssert.getSessionVariable();
+ sessionVariable.setEnableInferPredicate(true);
+ Assert.assertTrue(sessionVariable.isEnableInferPredicate());
+ String query = "select * from tb1, tb2 where tb1.k1 = 1 and tb1.k1 > tb2.k1";
+ String planString = dorisAssert.query(query).explainQuery();
+ Assert.assertFalse(planString.contains("`tb2`.`k1` = 1"));
+ }
+
@Test
public void testOn3TablesBothInnerJoinRewritten() throws Exception {
SessionVariable sessionVariable = dorisAssert.getSessionVariable();
@@ -99,7 +108,6 @@ public class InferFiltersRuleTest {
}
@Test
- //set enableInferPredicate = true;
public void testOn2TablesLeftSemiJoinEqLiteralAt2nd() throws Exception {
SessionVariable sessionVariable = dorisAssert.getSessionVariable();
sessionVariable.setEnableInferPredicate(true);
@@ -110,7 +118,6 @@ public class InferFiltersRuleTest {
}
@Test
- //set enableInferPredicate = true;
public void testOn2TablesLeftSemiJoinEqLiteralAt1st() throws Exception {
SessionVariable sessionVariable = dorisAssert.getSessionVariable();
sessionVariable.setEnableInferPredicate(true);
@@ -121,7 +128,6 @@ public class InferFiltersRuleTest {
}
@Test
- //set enableInferPredicate = true;
public void testOn2TablesLeftAntiJoinEqLiteralAt2nd() throws Exception {
SessionVariable sessionVariable = dorisAssert.getSessionVariable();
sessionVariable.setEnableInferPredicate(true);
@@ -142,7 +148,6 @@ public class InferFiltersRuleTest {
}
@Test
- //set enableInferPredicate = true;
public void testOn3Tables1stInner2ndRightJoinEqLiteralAt2nd() throws Exception {
SessionVariable sessionVariable = dorisAssert.getSessionVariable();
sessionVariable.setEnableInferPredicate(true);
@@ -197,7 +202,6 @@ public class InferFiltersRuleTest {
}
@Test
- //set enableInferPredicate = true;
public void testWhere3TablesInnerJoinRewritten() throws Exception {
SessionVariable sessionVariable = dorisAssert.getSessionVariable();
sessionVariable.setEnableInferPredicate(true);
@@ -220,7 +224,6 @@ public class InferFiltersRuleTest {
}
@Test
- //set enableInferPredicate = true;
public void testWhere3Tables1stInner2ndLeftJoinEqLiteralAt3rd() throws Exception {
SessionVariable sessionVariable = dorisAssert.getSessionVariable();
sessionVariable.setEnableInferPredicate(true);
@@ -232,7 +235,6 @@ public class InferFiltersRuleTest {
}
@Test
- //set enableInferPredicate = true;
public void testWhere3Tables1stInner2ndLeftJoinEqLiteralAt2nd() throws Exception {
SessionVariable sessionVariable = dorisAssert.getSessionVariable();
sessionVariable.setEnableInferPredicate(true);
@@ -244,7 +246,6 @@ public class InferFiltersRuleTest {
}
@Test
- //set enableInferPredicate = true;
public void testWhere3Tables1stInner2ndRightJoinEqLiteralAt2nd() throws Exception {
SessionVariable sessionVariable = dorisAssert.getSessionVariable();
sessionVariable.setEnableInferPredicate(true);
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org