should be it

This commit is contained in:
2025-10-24 19:21:19 -05:00
parent a4b23fc57c
commit f09560c7b1
14047 changed files with 3161551 additions and 1 deletions

View File

@@ -0,0 +1,23 @@
# name: test/sql/subquery/any_all/issue_2999.test
# description: Issue #2999: Correlated group on ANY subquery
# group: [any_all]
statement ok
PRAGMA enable_verification
statement ok
CREATE TABLE t0 (c0 INT);
statement ok
CREATE TABLE t1 (c0 INT);
statement ok
INSERT INTO t0 VALUES (1);
statement ok
INSERT INTO t1 VALUES (1);
query I
SELECT 1 = ANY(SELECT 1 FROM t1 JOIN (SELECT count(*) GROUP BY t0.c0) AS x(x) ON TRUE) FROM t0;
----
true

View File

@@ -0,0 +1,27 @@
# name: test/sql/subquery/any_all/subquery_in.test
# description: Test subquery in IN clause
# group: [any_all]
statement ok
PRAGMA enable_verification
statement ok
CREATE TABLE t0 (c0 TIME,c1 DOUBLE PRECISION);
statement ok
CREATE TABLE t1 (c0 INT);
statement ok
INSERT INTO t1 VALUES (1),(10),(7),(9),(NULL),(1),(7),(7),(0),(8),(0),(9),(NULL),(5),(3),(8),(0);
statement error
SELECT (FALSE) IN (TRUE, (SELECT TIME '13:35:07' FROM t1) BETWEEN t0.c0 AND t0.c0) FROM t0;
----
More than one row returned
statement ok
SET scalar_subquery_error_on_multiple_rows=false
query I
SELECT (FALSE) IN (TRUE, (SELECT TIME '13:35:07' FROM t1) BETWEEN t0.c0 AND t0.c0) FROM t0;
----

View File

@@ -0,0 +1,92 @@
# name: test/sql/subquery/any_all/test_any_all.test
# description: Test ANY/ALL queries
# group: [any_all]
statement ok
PRAGMA enable_verification
statement ok
CREATE TABLE integers(i INTEGER)
statement ok
INSERT INTO integers VALUES (1), (2), (3)
# ANY is like EXISTS without NULL values
query T
SELECT 2 > ANY(SELECT * FROM integers)
----
1
query T
SELECT 1 > ANY(SELECT * FROM integers)
----
0
query T
SELECT 4 > ALL(SELECT * FROM integers)
----
1
query T
SELECT 1 > ALL(SELECT * FROM integers)
----
0
# NULL input always results in NULL output
query T
SELECT NULL > ANY(SELECT * FROM integers)
----
NULL
query T
SELECT NULL > ALL(SELECT * FROM integers)
----
NULL
# now with a NULL value in the input
statement ok
INSERT INTO integers VALUES (NULL)
# ANY returns either true or NULL
query T
SELECT 2 > ANY(SELECT * FROM integers)
----
1
query T
SELECT 1 > ANY(SELECT * FROM integers)
----
NULL
# ALL returns either NULL or false
query T
SELECT 4 > ALL(SELECT * FROM integers)
----
NULL
query T
SELECT 1 > ALL(SELECT * FROM integers)
----
0
# NULL input always results in NULL
query T
SELECT NULL > ANY(SELECT * FROM integers)
----
NULL
query T
SELECT NULL > ALL(SELECT * FROM integers)
----
NULL
# unsupported comparisons
statement error
SELECT 2 ^ ANY(SELECT * FROM integers)
----
Parser Error: ANY and ALL operators require one of =,<>,>,<,>=,<= comparisons!
statement error
SELECT 2 ^ ANY([1, 2, 3])
----
Parser Error: Unsupported comparison "^" for ANY/ALL subquery

View File

@@ -0,0 +1,184 @@
# name: test/sql/subquery/any_all/test_correlated_any_all.test
# description: Test correlated ANY/ALL subqueries
# group: [any_all]
statement ok
SET default_null_order='nulls_first';
statement ok
PRAGMA enable_verification
statement ok
CREATE TABLE integers(i INTEGER)
statement ok
INSERT INTO integers VALUES (1), (2), (3), (NULL)
# correlated ANY/ALL
query T
SELECT i=ANY(SELECT i FROM integers WHERE i=i1.i) FROM integers i1 ORDER BY i;
----
0
1
1
1
query T
SELECT i>ALL(SELECT (i+i1.i-1)/2 FROM integers WHERE i IS NOT NULL) FROM integers i1 ORDER BY i;
----
NULL
0
0
1
query T
SELECT i=ALL(SELECT i FROM integers WHERE i<>i1.i) FROM integers i1 ORDER BY i;
----
1
0
0
0
# correlated ANY/ALL
query I
SELECT i FROM integers i1 WHERE i=ANY(SELECT i FROM integers WHERE i=i1.i) ORDER BY i;
----
1
2
3
query I
SELECT i FROM integers i1 WHERE i<>ANY(SELECT i FROM integers WHERE i=i1.i) ORDER BY i;
----
query I
SELECT i FROM integers i1 WHERE i=ANY(SELECT i FROM integers WHERE i<>i1.i) ORDER BY i;
----
query I
SELECT i FROM integers i1 WHERE i>ANY(SELECT i FROM integers WHERE i<>i1.i) ORDER BY i;
----
2
3
query I
SELECT i FROM integers i1 WHERE i>ALL(SELECT (i+i1.i-1)/2 FROM integers WHERE i IS NOT NULL) ORDER BY i;
----
3
# if there is i=ANY() where the subquery returns an EMPTY result set and i=NULL, the result becomes FALSE instead
# of NULL
query T
SELECT i=ALL(SELECT i FROM integers WHERE i=i1.i) FROM integers i1 ORDER BY i;
----
1
1
1
1
query T
SELECT i=ANY(SELECT i FROM integers WHERE i=i1.i) FROM integers i1 ORDER BY i;
----
0
1
1
1
query T
SELECT i<>ALL(SELECT i FROM integers WHERE i=i1.i) FROM integers i1 ORDER BY i;
----
1
0
0
0
query T
SELECT i<>ANY(SELECT i FROM integers WHERE i=i1.i) FROM integers i1 ORDER BY i;
----
0
0
0
0
query T
SELECT i=ALL(SELECT i FROM integers WHERE i<>i1.i) FROM integers i1 ORDER BY i;
----
1
0
0
0
query T
SELECT i=ANY(SELECT i FROM integers WHERE i<>i1.i) FROM integers i1 ORDER BY i;
----
0
0
0
0
query T
SELECT i>ANY(SELECT i FROM integers WHERE i<>i1.i) FROM integers i1 ORDER BY i;
----
0
0
1
1
query T
SELECT i>ALL(SELECT (i+i1.i-1)/2 FROM integers) FROM integers i1 ORDER BY i;
----
NULL
0
0
NULL
query T
SELECT i>ALL(SELECT (i+i1.i-1)/2 FROM integers WHERE i IS NOT NULL) FROM integers i1 ORDER BY i;
----
NULL
0
0
1
query T
SELECT i=ANY(SELECT i FROM integers WHERE i=i1.i OR i IS NULL) FROM integers i1 ORDER BY i;
----
NULL
1
1
1
query T
SELECT i=ALL(SELECT i FROM integers WHERE i=i1.i OR i IS NULL) FROM integers i1 ORDER BY i;
----
NULL
NULL
NULL
NULL
# correlated ANY/ALL with aggregations
query T
SELECT MIN(i)>ANY(SELECT i FROM integers WHERE i>MIN(i1.i)) FROM integers i1;
----
0
query T
SELECT SUM(i)>ANY(SELECT i FROM integers WHERE i>MIN(i1.i)) FROM integers i1;
----
1
# correlated subquery with correlated any
query T
SELECT (SELECT SUM(i)+SUM(i1.i) FROM integers)>ANY(SELECT i FROM integers WHERE i>MIN(i1.i)) FROM integers i1;
----
1
# zero results for all
query T
SELECT i=ANY(SELECT i FROM integers WHERE i=i1.i AND i>10) FROM integers i1 ORDER BY i;
----
0
0
0
0

View File

@@ -0,0 +1,49 @@
# name: test/sql/subquery/any_all/test_scalar_any_all.test
# description: Test scalar ANY/ALL queries
# group: [any_all]
statement ok
PRAGMA enable_verification
# scalar ANY
query T
SELECT 1 = ANY(SELECT 1)
----
1
query T
SELECT 1 = ANY(SELECT NULL)
----
NULL
query T
SELECT 1 = ANY(SELECT 2)
----
0
query T
SELECT NULL = ANY(SELECT 2)
----
NULL
# scalar ALL
query T
SELECT 1 = ALL(SELECT 1)
----
1
query T
SELECT 1 = ALL(SELECT NULL)
----
NULL
query T
SELECT 1 = ALL(SELECT 2)
----
0
query T
SELECT NULL = ALL(SELECT 2)
----
NULL

View File

@@ -0,0 +1,79 @@
# name: test/sql/subquery/any_all/test_scalar_in.test
# description: Test scalar IN query
# group: [any_all]
statement ok
SET default_null_order='nulls_first';
statement ok
PRAGMA enable_verification
query T
SELECT 1 IN (SELECT 1)
----
1
query T
SELECT NULL IN (SELECT 1)
----
NULL
query T
SELECT 1 IN (SELECT NULL)
----
NULL
query T
SELECT 1 IN (SELECT 2)
----
0
statement ok
CREATE TABLE integers(i INTEGER)
statement ok
INSERT INTO integers VALUES (1), (2), (3)
query T
SELECT 4 IN (SELECT * FROM integers)
----
0
query T
SELECT 1 IN (SELECT * FROM integers)
----
1
query T
SELECT 1 IN (SELECT * FROM integers) FROM integers
----
1
1
1
statement ok
INSERT INTO integers VALUES (NULL)
query T
SELECT 4 IN (SELECT * FROM integers)
----
NULL
query T
SELECT 1 IN (SELECT * FROM integers)
----
1
query I
SELECT * FROM integers WHERE (4 IN (SELECT * FROM integers)) IS NULL ORDER BY 1
----
NULL
1
2
3
query I
SELECT * FROM integers WHERE (i IN (SELECT * FROM integers)) IS NULL ORDER BY 1
----
NULL

View File

@@ -0,0 +1,36 @@
# name: test/sql/subquery/any_all/test_simple_not_in.test
# description: Test subqueries with (NOT) IN clause
# group: [any_all]
statement ok
PRAGMA enable_verification
# scalar subquery
query I
SELECT 1 AS one WHERE 1 IN (SELECT 1);
----
1
statement ok
CREATE TABLE test (id INTEGER, b INTEGER);
statement ok
INSERT INTO test VALUES (1, 22)
statement ok
INSERT INTO test VALUES (2, 21)
statement ok
INSERT INTO test VALUES (3, 23)
query II
SELECT * FROM test WHERE b IN (SELECT b FROM test WHERE b * id < 30) ORDER BY id, b
----
1 22
query II
SELECT * FROM test WHERE b NOT IN (SELECT b FROM test WHERE b * id < 30) ORDER BY id, b
----
2 21
3 23

View File

@@ -0,0 +1,219 @@
# name: test/sql/subquery/any_all/test_uncorrelated_all_subquery.test
# description: Test uncorrelated ALL subqueries
# group: [any_all]
statement ok
SET default_null_order='nulls_first';
statement ok
PRAGMA enable_verification
statement ok
CREATE TABLE integers(i INTEGER)
statement ok
INSERT INTO integers VALUES (1), (2), (3), (NULL)
# uncorrelated ALL
query I
SELECT i FROM integers WHERE i >= ALL(SELECT i FROM integers)
----
query IT
SELECT i, i >= ALL(SELECT i FROM integers) FROM integers ORDER BY i
----
NULL NULL
1 0
2 0
3 NULL
query I
SELECT i FROM integers WHERE i >= ALL(SELECT i FROM integers WHERE i IS NOT NULL)
----
3
query IT
SELECT i, i >= ALL(SELECT i FROM integers WHERE i IS NOT NULL) FROM integers ORDER BY i
----
NULL NULL
1 0
2 0
3 1
query I
SELECT i FROM integers WHERE i >= ALL(SELECT i FROM integers WHERE i IS NOT NULL)
----
3
query I
SELECT i FROM integers WHERE i > ALL(SELECT MIN(i) FROM integers)
----
2
3
query I
SELECT i FROM integers WHERE i < ALL(SELECT MAX(i) FROM integers) ORDER BY 1
----
1
2
query I
SELECT i FROM integers WHERE i <= ALL(SELECT i FROM integers)
----
query I
SELECT i FROM integers WHERE i <= ALL(SELECT i FROM integers WHERE i IS NOT NULL)
----
1
query I
SELECT i FROM integers WHERE i = ALL(SELECT i FROM integers WHERE i=1)
----
1
query I
SELECT i FROM integers WHERE i <> ALL(SELECT i FROM integers WHERE i=1)
----
2
3
query I
SELECT i FROM integers WHERE i = ALL(SELECT i FROM integers WHERE i IS NOT NULL)
----
query I
SELECT i FROM integers WHERE i <> ALL(SELECT i FROM integers WHERE i IS NOT NULL)
----
# zero results always results in TRUE for ALL, even if "i" is NULL
query I
SELECT i FROM integers WHERE i <> ALL(SELECT i FROM integers WHERE i>10) ORDER BY i;
----
NULL
1
2
3
query IT
SELECT i, i <> ALL(SELECT i FROM integers WHERE i>10) FROM integers ORDER BY i;
----
NULL 1
1 1
2 1
3 1
# zero results always results in FALSE for ANY
query IT
SELECT i, i > ANY(SELECT i FROM integers WHERE i>10) FROM integers ORDER BY i;
----
NULL 0
1 0
2 0
3 0
query IT
SELECT i, i = ANY(SELECT i FROM integers WHERE i>10) FROM integers ORDER BY i;
----
NULL 0
1 0
2 0
3 0
query IT
SELECT i, i >= ANY(SELECT i FROM integers WHERE i>10) FROM integers ORDER BY i;
----
NULL 0
1 0
2 0
3 0
query IT
SELECT i, i <= ANY(SELECT i FROM integers WHERE i>10) FROM integers ORDER BY i;
----
NULL 0
1 0
2 0
3 0
query IT
SELECT i, i < ANY(SELECT i FROM integers WHERE i>10) FROM integers ORDER BY i;
----
NULL 0
1 0
2 0
3 0
query IT
SELECT i, i <> ANY(SELECT i FROM integers WHERE i>10) FROM integers ORDER BY i;
----
NULL 0
1 0
2 0
3 0
# nested uncorrelated subqueries
query I
SELECT (SELECT (SELECT (SELECT 42)))
----
42
query T
SELECT (SELECT EXISTS(SELECT * FROM integers WHERE i>2)) FROM integers;
----
1
1
1
1
query IR
SELECT (SELECT MAX(i) FROM integers) AS k, SUM(i) FROM integers GROUP BY k;
----
3 6.000000
# subqueries in GROUP BY clause
query TR
SELECT i >= ALL(SELECT i FROM integers WHERE i IS NOT NULL) AS k, SUM(i) FROM integers GROUP BY k ORDER BY k;
----
NULL NULL
0 3.000000
1 3.000000
query R
SELECT SUM(i) FROM integers GROUP BY (i >= ALL(SELECT i FROM integers WHERE i IS NOT NULL)) ORDER BY 1;
----
NULL
3.000000
3.000000
query TR
SELECT i >= ALL(SELECT MIN(i) FROM integers WHERE i IS NOT NULL) AS k, SUM(i) FROM integers GROUP BY k ORDER BY k;
----
NULL NULL
1 6.000000
# subquery in CASE statement
query IR
SELECT i, SUM(CASE WHEN (i >= ALL(SELECT i FROM integers WHERE i=2)) THEN 1 ELSE 0 END) FROM integers GROUP BY i ORDER BY i;
----
NULL 0.000000
1 0.000000
2 1.000000
3 1.000000
# subquery in HAVING
query IR
SELECT i % 2 AS k, SUM(i) FROM integers GROUP BY k HAVING SUM(i) > (SELECT MAX(i) FROM integers)
----
1 4.000000
query I
SELECT i FROM integers WHERE NOT(i IN (SELECT i FROM integers WHERE i>1));
----
1
# multiple subqueries in select without FROM
query RI
SELECT (SELECT SUM(i) FROM integers), (SELECT 42)
----
6.000000 42

View File

@@ -0,0 +1,134 @@
# name: test/sql/subquery/any_all/test_uncorrelated_any_subquery.test
# description: Test uncorrelated ANY subqueries
# group: [any_all]
statement ok
SET default_null_order='nulls_first';
statement ok
PRAGMA enable_verification
statement ok
CREATE TABLE integers(i INTEGER)
statement ok
INSERT INTO integers VALUES (1), (2), (3), (NULL)
# uncorrelated ANY
query I
SELECT i FROM integers WHERE i <= ANY(SELECT i FROM integers)
----
1
2
3
query I
SELECT i FROM integers WHERE i > ANY(SELECT i FROM integers) ORDER BY 1
----
2
3
query IT
SELECT i, i > ANY(SELECT i FROM integers) FROM integers ORDER BY i
----
NULL NULL
1 NULL
2 1
3 1
query IT
SELECT i, i > ANY(SELECT i FROM integers WHERE i IS NOT NULL) FROM integers ORDER BY i
----
NULL NULL
1 0
2 1
3 1
query IT
SELECT i, NULL > ANY(SELECT i FROM integers) FROM integers ORDER BY i
----
NULL NULL
1 NULL
2 NULL
3 NULL
query IT
SELECT i, NULL > ANY(SELECT i FROM integers WHERE i IS NOT NULL) FROM integers ORDER BY i
----
NULL NULL
1 NULL
2 NULL
3 NULL
query I
SELECT i FROM integers WHERE i = ANY(SELECT i FROM integers) order by i
----
1
2
3
query IT
SELECT i, i = ANY(SELECT i FROM integers WHERE i>2) FROM integers ORDER BY i
----
NULL NULL
1 0
2 0
3 1
query IT
SELECT i, i = ANY(SELECT i FROM integers WHERE i>2 OR i IS NULL) FROM integers ORDER BY i
----
NULL NULL
1 NULL
2 NULL
3 1
query IT
SELECT i, i <> ANY(SELECT i FROM integers WHERE i>2) FROM integers ORDER BY i
----
NULL NULL
1 1
2 1
3 0
query IT
SELECT i, i <> ANY(SELECT i FROM integers WHERE i>2 OR i IS NULL) FROM integers ORDER BY i
----
NULL NULL
1 1
2 1
3 NULL
# use a bunch of cross products to make bigger data sets (> STANDARD_VECTOR_SIZE)
query IT
SELECT i, i = ANY(SELECT i1.i FROM integers i1, integers i2, integers i3, integers i4, integers i5, integers i6 WHERE i1.i IS NOT NULL) FROM integers ORDER BY i
----
NULL NULL
1 1
2 1
3 1
query IT
SELECT i, i = ANY(SELECT i1.i FROM integers i1, integers i2, integers i3, integers i4, integers i5, integers i6 WHERE i1.i IS NOT NULL AND i1.i <> 2) FROM integers ORDER BY i
----
NULL NULL
1 1
2 0
3 1
query IT
SELECT i, i >= ANY(SELECT i1.i FROM integers i1, integers i2, integers i3, integers i4, integers i5, integers i6 WHERE i1.i IS NOT NULL) FROM integers ORDER BY i
----
NULL NULL
1 1
2 1
3 1
query IT
SELECT i, i >= ANY(SELECT i1.i FROM integers i1, integers i2, integers i3, integers i4, integers i5, integers i6 WHERE i1.i IS NOT NULL AND i1.i <> 1 LIMIT 1) FROM integers ORDER BY i
----
NULL NULL
1 0
2 1
3 1