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: 谢健 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]