This is an automated email from the ASF dual-hosted git repository.
starocean999 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 4cb192dc61a [fix](nereids)collect all correlated slots from subquery
in correct way (#31340)
4cb192dc61a is described below
commit 4cb192dc61a3668f9ff8df7f316751f190ebda7b
Author: starocean999 <[email protected]>
AuthorDate: Mon Feb 26 09:47:47 2024 +0800
[fix](nereids)collect all correlated slots from subquery in correct way
(#31340)
---
.../java/org/apache/doris/nereids/util/Utils.java | 19 ++-----------------
.../data/nereids_p0/subquery/test_subquery.out | 12 ++++++++++++
.../suites/nereids_p0/subquery/test_subquery.groovy | 13 +++++++++++++
3 files changed, 27 insertions(+), 17 deletions(-)
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/util/Utils.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/util/Utils.java
index 6ac9ffd9513..d259e348042 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/util/Utils.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/util/Utils.java
@@ -17,10 +17,8 @@
package org.apache.doris.nereids.util;
-import org.apache.doris.nereids.exceptions.AnalysisException;
import org.apache.doris.nereids.trees.expressions.Cast;
import org.apache.doris.nereids.trees.expressions.Expression;
-import org.apache.doris.nereids.trees.expressions.Not;
import org.apache.doris.nereids.trees.expressions.SlotReference;
import org.apache.doris.nereids.trees.expressions.shape.BinaryExpression;
@@ -159,21 +157,8 @@ public class Utils {
*/
public static List<Expression> getCorrelatedSlots(List<Expression>
correlatedPredicates,
List<Expression> correlatedSlots) {
- List<Expression> slots = new ArrayList<>();
- correlatedPredicates.forEach(predicate -> {
- if (!(predicate instanceof BinaryExpression) && !(predicate
instanceof Not)) {
- throw new AnalysisException("UnSupported expr type: " +
correlatedPredicates);
- }
-
- BinaryExpression binaryExpression;
- if (predicate instanceof Not) {
- binaryExpression = (BinaryExpression) ((Not)
predicate).child();
- } else {
- binaryExpression = (BinaryExpression) predicate;
- }
- slots.addAll(collectCorrelatedSlotsFromChildren(binaryExpression,
correlatedSlots));
- });
- return slots;
+ return ExpressionUtils.getInputSlotSet(correlatedPredicates).stream()
+ .filter(slot ->
!correlatedSlots.contains(slot)).collect(Collectors.toList());
}
private static List<Expression> collectCorrelatedSlotsFromChildren(
diff --git a/regression-test/data/nereids_p0/subquery/test_subquery.out
b/regression-test/data/nereids_p0/subquery/test_subquery.out
index 7e44c264f5b..ca61be79456 100644
--- a/regression-test/data/nereids_p0/subquery/test_subquery.out
+++ b/regression-test/data/nereids_p0/subquery/test_subquery.out
@@ -30,6 +30,18 @@ true 15 1992 3021 11011920 0.000 true
9999-12-12 2015-04-02T00:00 3.141592653 2
1 9
2 \N
+-- !select60 --
+\N 1
+\N 2
+1 2
+1 3
+2 4
+3 3
+3 4
+20 2
+22 3
+24 4
+
-- !select61 --
-- !select62 --
diff --git a/regression-test/suites/nereids_p0/subquery/test_subquery.groovy
b/regression-test/suites/nereids_p0/subquery/test_subquery.groovy
index 1c8078ebc6f..21dd257a274 100644
--- a/regression-test/suites/nereids_p0/subquery/test_subquery.groovy
+++ b/regression-test/suites/nereids_p0/subquery/test_subquery.groovy
@@ -244,6 +244,7 @@ suite("test_subquery") {
sql """drop table if exists table_9_undef_undef"""
sql "drop table if exists t1"
+ sql "drop table if exists t2"
sql """create table t1
(k1 bigint, k2 bigint)
ENGINE=OLAP
@@ -253,8 +254,20 @@ suite("test_subquery") {
PROPERTIES (
"replication_num" = "1"
);"""
+ sql """create table t2
+ (k1 int, k2 varchar(128), k3 bigint, v1 bigint, v2 bigint)
+ ENGINE=OLAP
+ DUPLICATE KEY(k1, k2)
+ COMMENT 'OLAP'
+ DISTRIBUTED BY HASH(k2) BUCKETS 1
+ PROPERTIES (
+ "replication_num" = "1"
+ );"""
sql """insert into t1 values (1,null),(null,1),(1,2), (null,2),(1,3),
(2,4), (2,5), (3,3), (3,4), (20,2), (22,3), (24,4),(null,null);"""
+ sql """insert into t2 values (1,'abc',2,3,4), (1,'abcd',3,3,4),
(2,'xyz',2,4,2), (2,'uvw',3,4,2), (2,'uvw',3,4,2), (3,'abc',4,5,3),
(3,'abc',4,5,3), (null,null,null,null,null);"""
+ qt_select60 """select * from t1 where exists(select distinct k1 from
t2 where t1.k1 > t2.k3 or t1.k2 < t2.v1) order by t1.k1, t1.k2;"""
qt_select61 """SELECT * FROM t1 AS t1 WHERE EXISTS (SELECT k1 FROM t1 AS
t2 WHERE t1.k1 <> t2.k1 + 7 GROUP BY k1 HAVING k1 >= 100);"""
qt_select62 """select * from t1 left semi join ( select * from t1 where
t1.k1 < -1 ) l on true;"""
sql "drop table if exists t1"
+ sql "drop table if exists t2"
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]