This is an automated email from the ASF dual-hosted git repository.

jakevin 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 265c83d9124 [fix](Planner): don't push down isNull predicate into view 
(#26288)
265c83d9124 is described below

commit 265c83d91245decf5cbc36e11f293bff19a04730
Author: 谢健 <jianx...@gmail.com>
AuthorDate: Fri Nov 3 16:30:12 2023 +0800

    [fix](Planner): don't push down isNull predicate into view (#26288)
    
    We can't push down `isNull` predicate into view
---
 .../src/main/java/org/apache/doris/analysis/BinaryPredicate.java | 4 ++--
 fe/fe-core/src/main/java/org/apache/doris/analysis/CastExpr.java | 4 ++--
 .../main/java/org/apache/doris/analysis/CompoundPredicate.java   | 4 ++--
 fe/fe-core/src/main/java/org/apache/doris/analysis/Expr.java     | 4 ++--
 .../src/main/java/org/apache/doris/analysis/InPredicate.java     | 4 ++--
 .../src/main/java/org/apache/doris/analysis/IsNullPredicate.java | 6 ++++--
 fe/fe-core/src/main/java/org/apache/doris/analysis/SlotRef.java  | 6 +++---
 .../src/main/java/org/apache/doris/analysis/VariableExpr.java    | 2 +-
 regression-test/data/query_p0/literal_view/lietral_test.out      | 5 +++++
 regression-test/suites/query_p0/literal_view/lietral_test.groovy | 9 +++++++++
 10 files changed, 32 insertions(+), 16 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/analysis/BinaryPredicate.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/BinaryPredicate.java
index f99bcacf441..3064065539e 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/BinaryPredicate.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/BinaryPredicate.java
@@ -799,8 +799,8 @@ public class BinaryPredicate extends Predicate implements 
Writable {
     }
 
     @Override
-    public Expr getResultValue(boolean inView) throws AnalysisException {
-        recursiveResetChildrenResult(inView);
+    public Expr getResultValue(boolean forPushDownPredicatesToView) throws 
AnalysisException {
+        recursiveResetChildrenResult(forPushDownPredicatesToView);
         final Expr leftChildValue = getChild(0);
         final Expr rightChildValue = getChild(1);
         if (!(leftChildValue instanceof LiteralExpr)
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/CastExpr.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/CastExpr.java
index 590c87427a0..68a6da391af 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/CastExpr.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/CastExpr.java
@@ -399,8 +399,8 @@ public class CastExpr extends Expr {
     }
 
     @Override
-    public Expr getResultValue(boolean inView) throws AnalysisException {
-        recursiveResetChildrenResult(inView);
+    public Expr getResultValue(boolean forPushDownPredicatesToView) throws 
AnalysisException {
+        recursiveResetChildrenResult(forPushDownPredicatesToView);
         final Expr value = children.get(0);
         if (!(value instanceof LiteralExpr)) {
             return this;
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/analysis/CompoundPredicate.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/CompoundPredicate.java
index e20ec98b756..78e28da6ed9 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/CompoundPredicate.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/CompoundPredicate.java
@@ -230,8 +230,8 @@ public class CompoundPredicate extends Predicate {
     }
 
     @Override
-    public Expr getResultValue(boolean inView) throws AnalysisException {
-        recursiveResetChildrenResult(inView);
+    public Expr getResultValue(boolean forPushDownPredicatesToView) throws 
AnalysisException {
+        recursiveResetChildrenResult(forPushDownPredicatesToView);
         boolean compoundResult = false;
         if (op == Operator.NOT) {
             final Expr childValue = getChild(0);
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/Expr.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/Expr.java
index 1b32033ea88..f0558e5333d 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/Expr.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/Expr.java
@@ -2190,10 +2190,10 @@ public abstract class Expr extends TreeNode<Expr> 
implements ParseNode, Cloneabl
     }
 
 
-    protected void recursiveResetChildrenResult(boolean inView) throws 
AnalysisException {
+    protected void recursiveResetChildrenResult(boolean 
forPushDownPredicatesToView) throws AnalysisException {
         for (int i = 0; i < children.size(); i++) {
             final Expr child = children.get(i);
-            final Expr newChild = child.getResultValue(inView);
+            final Expr newChild = 
child.getResultValue(forPushDownPredicatesToView);
             if (newChild != child) {
                 setChild(i, newChild);
             }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/analysis/InPredicate.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/InPredicate.java
index c110b2e6ea3..3a08359a75a 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/InPredicate.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/InPredicate.java
@@ -308,8 +308,8 @@ public class InPredicate extends Predicate {
     }
 
     @Override
-    public Expr getResultValue(boolean inView) throws AnalysisException {
-        recursiveResetChildrenResult(inView);
+    public Expr getResultValue(boolean forPushDownPredicatesToView) throws 
AnalysisException {
+        recursiveResetChildrenResult(forPushDownPredicatesToView);
         final Expr leftChildValue = getChild(0);
         if (!(leftChildValue instanceof LiteralExpr) || !isLiteralChildren()) {
             return this;
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/analysis/IsNullPredicate.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/IsNullPredicate.java
index 087b4a7c399..bf81cb48100 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/IsNullPredicate.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/IsNullPredicate.java
@@ -155,8 +155,10 @@ public class IsNullPredicate extends Predicate {
      * fix issue 6390
      */
     @Override
-    public Expr getResultValue(boolean inView) throws AnalysisException {
-        recursiveResetChildrenResult(inView);
+    public Expr getResultValue(boolean forPushDownPredicatesToView) throws 
AnalysisException {
+        // Don't push down predicate to view for is null predicate because the 
value can contain null
+        // after outer join
+        recursiveResetChildrenResult(!forPushDownPredicatesToView);
         final Expr childValue = getChild(0);
         if (!(childValue instanceof LiteralExpr)) {
             return this;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/SlotRef.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/SlotRef.java
index 944c398de9a..9b664d8b42a 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/SlotRef.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/SlotRef.java
@@ -613,8 +613,8 @@ public class SlotRef extends Expr {
     }
 
     @Override
-    public Expr getResultValue(boolean foldSlot) throws AnalysisException {
-        if (!foldSlot) {
+    public Expr getResultValue(boolean forPushDownPredicatesToView) throws 
AnalysisException {
+        if (!forPushDownPredicatesToView) {
             return this;
         }
         if (!isConstant() || desc == null) {
@@ -626,7 +626,7 @@ public class SlotRef extends Expr {
         }
         Expr expr = exprs.get(0);
         if (expr instanceof SlotRef) {
-            return expr.getResultValue(foldSlot);
+            return expr.getResultValue(forPushDownPredicatesToView);
         }
         if (expr.isConstant()) {
             return expr;
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/analysis/VariableExpr.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/VariableExpr.java
index 8e657d6418d..093a7861173 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/VariableExpr.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/VariableExpr.java
@@ -137,7 +137,7 @@ public class VariableExpr extends Expr {
     }
 
     @Override
-    public Expr getResultValue(boolean inView) throws AnalysisException {
+    public Expr getResultValue(boolean forPushDownPredicatesToView) throws 
AnalysisException {
         if (!Strings.isNullOrEmpty(name) && 
VariableVarConverters.hasConverter(name)) {
             // Return the string type here so that it can correctly match the 
subsequent function signature.
             // And we also set `beConverted` to session variable name in 
StringLiteral, so that it can be cast back
diff --git a/regression-test/data/query_p0/literal_view/lietral_test.out 
b/regression-test/data/query_p0/literal_view/lietral_test.out
index daa91d59cd1..0c46e0b270f 100644
--- a/regression-test/data/query_p0/literal_view/lietral_test.out
+++ b/regression-test/data/query_p0/literal_view/lietral_test.out
@@ -1,5 +1,10 @@
 -- This file is automatically generated. You should know what you did if you 
want to edit this
 -- !sql --
 
+-- !left --
+1      doris   10      \N
+2      spark   2       \N
+3      flink   20      \N
+
 -- !sql1 --
 
diff --git a/regression-test/suites/query_p0/literal_view/lietral_test.groovy 
b/regression-test/suites/query_p0/literal_view/lietral_test.groovy
index 0c5f8bcec00..905ed6696dd 100644
--- a/regression-test/suites/query_p0/literal_view/lietral_test.groovy
+++ b/regression-test/suites/query_p0/literal_view/lietral_test.groovy
@@ -106,6 +106,15 @@ suite("literal_view_test") {
         insert into test_insert values 
(1,'doris',10),(2,'spark',2),(3,'flink',20);
     """
 
+    sql "set enable_nereids_planner=false"
+    order_qt_left """select * 
+        from test_insert 
+        left join (select 1 as v1) t1 
+        on false 
+        where t1.v1 is null
+    """
+    sql "set enable_nereids_planner=true"
+
     qt_sql1 """
         select id, name
         from (


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to