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 02:19:38 UTC
[doris] 02/04: [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 dev-1.0.1
in repository https://gitbox.apache.org/repos/asf/doris.git
commit 398bf24d45d0618f0587c9964456a412a3ff94b1
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 0dd90ed502..47f8153485 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 bfaefc8287..1ceb7f63d9 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
@@ -80,7 +80,6 @@ public class InferFiltersRuleTest {
}
@Test
- //default enableInferPredicate = true;
public void testRewritten() throws Exception {
SessionVariable sessionVariable = dorisAssert.getSessionVariable();
sessionVariable.setEnableInferPredicate(true);
@@ -90,6 +89,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();
@@ -102,7 +111,6 @@ public class InferFiltersRuleTest {
}
@Test
- //set enableInferPredicate = true;
public void testOn2TablesLeftSemiJoinEqLiteralAt2nd() throws Exception {
SessionVariable sessionVariable = dorisAssert.getSessionVariable();
sessionVariable.setEnableInferPredicate(true);
@@ -113,7 +121,6 @@ public class InferFiltersRuleTest {
}
@Test
- //set enableInferPredicate = true;
public void testOn2TablesLeftSemiJoinEqLiteralAt1st() throws Exception {
SessionVariable sessionVariable = dorisAssert.getSessionVariable();
sessionVariable.setEnableInferPredicate(true);
@@ -124,7 +131,6 @@ public class InferFiltersRuleTest {
}
@Test
- //set enableInferPredicate = true;
public void testOn2TablesLeftAntiJoinEqLiteralAt2nd() throws Exception {
SessionVariable sessionVariable = dorisAssert.getSessionVariable();
sessionVariable.setEnableInferPredicate(true);
@@ -144,7 +150,6 @@ public class InferFiltersRuleTest {
}
@Test
- //set enableInferPredicate = true;
public void testOn3Tables1stInner2ndRightJoinEqLiteralAt2nd() throws Exception {
SessionVariable sessionVariable = dorisAssert.getSessionVariable();
sessionVariable.setEnableInferPredicate(true);
@@ -199,7 +204,6 @@ public class InferFiltersRuleTest {
}
@Test
- //set enableInferPredicate = true;
public void testWhere3TablesInnerJoinRewritten() throws Exception {
SessionVariable sessionVariable = dorisAssert.getSessionVariable();
sessionVariable.setEnableInferPredicate(true);
@@ -222,7 +226,6 @@ public class InferFiltersRuleTest {
}
@Test
- //set enableInferPredicate = true;
public void testWhere3Tables1stInner2ndLeftJoinEqLiteralAt3rd() throws Exception {
SessionVariable sessionVariable = dorisAssert.getSessionVariable();
sessionVariable.setEnableInferPredicate(true);
@@ -234,7 +237,6 @@ public class InferFiltersRuleTest {
}
@Test
- //set enableInferPredicate = true;
public void testWhere3Tables1stInner2ndLeftJoinEqLiteralAt2nd() throws Exception {
SessionVariable sessionVariable = dorisAssert.getSessionVariable();
sessionVariable.setEnableInferPredicate(true);
@@ -246,7 +248,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