This is an automated email from the ASF dual-hosted git repository. kxiao pushed a commit to branch branch-2.0 in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-2.0 by this push: new d59fff4a746 [fix](Planner): don't push down isNull predicate into view (#26288) (#26773) d59fff4a746 is described below commit d59fff4a746377cb2b444bf79ff569fd5b68ca53 Author: 谢健 <jianx...@gmail.com> AuthorDate: Sun Nov 12 12:11:36 2023 +0800 [fix](Planner): don't push down isNull predicate into view (#26288) (#26773) --- .../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 | 8 +++++--- 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, 33 insertions(+), 17 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 5f41faa3c40..3a193213171 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 @@ -726,8 +726,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 cdb55cec3ca..dc21eff6563 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 d73fa1ee9a2..ecf1f29f97a 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 @@ -2177,10 +2177,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 3542160741d..c67ca1b0602 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,10 +155,12 @@ 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 (inView || !(childValue instanceof LiteralExpr)) { + if (forPushDownPredicatesToView || !(childValue instanceof LiteralExpr)) { return this; } return childValue instanceof NullLiteral ? new BoolLiteral(!isNotNull) : new BoolLiteral(isNotNull); 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 ae8eeabe63a..cf945f540d0 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 @@ -607,8 +607,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) { @@ -620,7 +620,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 d1a1b51fd69..b19f33e2939 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