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