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