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