should be it
This commit is contained in:
129
external/duckdb/test/sql/subquery/exists/test_correlated_exists.test
vendored
Normal file
129
external/duckdb/test/sql/subquery/exists/test_correlated_exists.test
vendored
Normal file
@@ -0,0 +1,129 @@
|
||||
# name: test/sql/subquery/exists/test_correlated_exists.test
|
||||
# description: Test correlated exists
|
||||
# group: [exists]
|
||||
|
||||
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 EXISTS
|
||||
query IT
|
||||
SELECT i, EXISTS(SELECT i FROM integers WHERE i1.i>2) FROM integers i1 ORDER BY i;
|
||||
----
|
||||
NULL 0
|
||||
1 0
|
||||
2 0
|
||||
3 1
|
||||
|
||||
query IT
|
||||
SELECT i, EXISTS(SELECT i FROM integers WHERE i=i1.i) FROM integers i1 ORDER BY i;
|
||||
----
|
||||
NULL 0
|
||||
1 1
|
||||
2 1
|
||||
3 1
|
||||
|
||||
query IT
|
||||
SELECT i, EXISTS(SELECT i FROM integers WHERE i IS NULL OR i>i1.i*10) FROM integers i1 ORDER BY i;
|
||||
----
|
||||
NULL 1
|
||||
1 1
|
||||
2 1
|
||||
3 1
|
||||
|
||||
query IT
|
||||
SELECT i, EXISTS(SELECT i FROM integers WHERE i1.i>i OR i1.i IS NULL) FROM integers i1 ORDER BY i;
|
||||
----
|
||||
NULL 1
|
||||
1 0
|
||||
2 1
|
||||
3 1
|
||||
|
||||
query I
|
||||
SELECT i FROM integers i1 WHERE EXISTS(SELECT i FROM integers WHERE i=i1.i) ORDER BY i;
|
||||
----
|
||||
1
|
||||
2
|
||||
3
|
||||
|
||||
# correlated EXISTS with aggregations
|
||||
query T
|
||||
SELECT EXISTS(SELECT i FROM integers WHERE i>MIN(i1.i)) FROM integers i1;
|
||||
----
|
||||
1
|
||||
|
||||
query IR
|
||||
SELECT i, SUM(i) FROM integers i1 GROUP BY i HAVING EXISTS(SELECT i FROM integers WHERE i>MIN(i1.i)) ORDER BY i;
|
||||
----
|
||||
1 1.000000
|
||||
2 2.000000
|
||||
|
||||
query T
|
||||
SELECT EXISTS(SELECT i+MIN(i1.i) FROM integers WHERE i=3) FROM integers i1;
|
||||
----
|
||||
1
|
||||
|
||||
query T
|
||||
SELECT EXISTS(SELECT i+MIN(i1.i) FROM integers WHERE i=5) FROM integers i1;
|
||||
----
|
||||
0
|
||||
|
||||
# GROUP BY correlated exists
|
||||
query TI
|
||||
SELECT EXISTS(SELECT i FROM integers WHERE i=i1.i) AS g, COUNT(*) FROM integers i1 GROUP BY g ORDER BY g;
|
||||
----
|
||||
0 1
|
||||
1 3
|
||||
|
||||
# SUM on exists
|
||||
query R
|
||||
SELECT SUM(CASE WHEN EXISTS(SELECT i FROM integers WHERE i=i1.i) THEN 1 ELSE 0 END) FROM integers i1;
|
||||
----
|
||||
3.000000
|
||||
|
||||
# aggregates with multiple parameters
|
||||
query R
|
||||
SELECT (SELECT COVAR_POP(i1.i, i2.i) FROM integers i2) FROM integers i1 ORDER BY 1
|
||||
----
|
||||
NULL
|
||||
0.000000
|
||||
0.000000
|
||||
0.000000
|
||||
|
||||
query R
|
||||
SELECT (SELECT COVAR_POP(i2.i, i1.i) FROM integers i2) FROM integers i1 ORDER BY 1
|
||||
----
|
||||
NULL
|
||||
0.000000
|
||||
0.000000
|
||||
0.000000
|
||||
|
||||
query R
|
||||
SELECT (SELECT COVAR_POP(i1.i+i2.i, i1.i+i2.i) FROM integers i2) FROM integers i1 ORDER BY 1
|
||||
----
|
||||
NULL
|
||||
0.666667
|
||||
0.666667
|
||||
0.666667
|
||||
|
||||
query R
|
||||
SELECT (SELECT COVAR_POP(i2.i, i2.i) FROM integers i2) FROM integers i1 ORDER BY 1;
|
||||
----
|
||||
0.666667
|
||||
0.666667
|
||||
0.666667
|
||||
0.666667
|
||||
|
||||
query R
|
||||
SELECT (SELECT COVAR_POP(i1.i, i1.i) FROM integers i2 LIMIT 1) FROM integers i1 ORDER BY 1;
|
||||
----
|
||||
0.666667
|
||||
|
||||
24
external/duckdb/test/sql/subquery/exists/test_exists_union_by_name.test
vendored
Normal file
24
external/duckdb/test/sql/subquery/exists/test_exists_union_by_name.test
vendored
Normal file
@@ -0,0 +1,24 @@
|
||||
# name: test/sql/subquery/exists/test_exists_union_by_name.test
|
||||
# description: Test exists subquery with union by name
|
||||
# group: [exists]
|
||||
|
||||
statement ok
|
||||
create table all_types as select * exclude(small_enum, medium_enum, large_enum) from test_all_types() limit 0;
|
||||
|
||||
statement ok
|
||||
SELECT (
|
||||
EXISTS(
|
||||
(
|
||||
SELECT
|
||||
DISTINCT outer_alltypes."BIGINT", outer_alltypes."INT"
|
||||
FROM all_types inner_alltypes_1
|
||||
WHERE inner_alltypes_1."BIGINT" GROUP BY NULL
|
||||
)
|
||||
UNION BY NAME
|
||||
(
|
||||
SELECT inner2."FLOAT" from all_types inner2
|
||||
)
|
||||
) IS DISTINCT FROM outer_alltypes."struct"
|
||||
)
|
||||
FROM all_types outer_alltypes GROUP BY ALL;
|
||||
|
||||
30
external/duckdb/test/sql/subquery/exists/test_issue_9308.test
vendored
Normal file
30
external/duckdb/test/sql/subquery/exists/test_issue_9308.test
vendored
Normal file
@@ -0,0 +1,30 @@
|
||||
# name: test/sql/subquery/exists/test_issue_9308.test
|
||||
# description: Issue #9308: wrong result: NOT EXISTS predicate with correlated non-equality comparison
|
||||
# group: [exists]
|
||||
|
||||
statement ok
|
||||
PRAGMA enable_verification
|
||||
|
||||
statement ok
|
||||
create or replace table t1(c1 int64);
|
||||
|
||||
statement ok
|
||||
insert into t1 values (1);
|
||||
|
||||
statement ok
|
||||
create or replace table t2(c1 int64);
|
||||
|
||||
query II
|
||||
select c1, not exists (select 1 from t2 where t1.c1 <= t2.c1) from t1;
|
||||
----
|
||||
1 true
|
||||
|
||||
query I
|
||||
select c1 from t1 where not exists (select 1 from t2 where t1.c1 <= t2.c1);
|
||||
----
|
||||
1
|
||||
|
||||
query I
|
||||
select c1 from t1 anti join t2 on (t1.c1 <= t2.c1)
|
||||
----
|
||||
1
|
||||
36
external/duckdb/test/sql/subquery/exists/test_scalar_exists.test
vendored
Normal file
36
external/duckdb/test/sql/subquery/exists/test_scalar_exists.test
vendored
Normal file
@@ -0,0 +1,36 @@
|
||||
# name: test/sql/subquery/exists/test_scalar_exists.test
|
||||
# description: Test scalar EXISTS query
|
||||
# group: [exists]
|
||||
|
||||
statement ok
|
||||
PRAGMA enable_verification
|
||||
|
||||
query T
|
||||
SELECT EXISTS(SELECT 1)
|
||||
----
|
||||
1
|
||||
|
||||
statement ok
|
||||
CREATE TABLE integers(i INTEGER)
|
||||
|
||||
statement ok
|
||||
INSERT INTO integers VALUES (1), (2), (3), (NULL)
|
||||
|
||||
query T
|
||||
SELECT EXISTS(SELECT 1) FROM integers
|
||||
----
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
|
||||
query T
|
||||
SELECT EXISTS(SELECT * FROM integers)
|
||||
----
|
||||
1
|
||||
|
||||
query T
|
||||
SELECT EXISTS(SELECT * FROM integers WHERE i IS NULL)
|
||||
----
|
||||
1
|
||||
|
||||
118
external/duckdb/test/sql/subquery/exists/test_uncorrelated_exists_subquery.test
vendored
Normal file
118
external/duckdb/test/sql/subquery/exists/test_uncorrelated_exists_subquery.test
vendored
Normal file
@@ -0,0 +1,118 @@
|
||||
# name: test/sql/subquery/exists/test_uncorrelated_exists_subquery.test
|
||||
# description: Test uncorrelated exists subqueries
|
||||
# group: [exists]
|
||||
|
||||
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 EXISTS
|
||||
query I
|
||||
SELECT * FROM integers WHERE EXISTS(SELECT 1) ORDER BY i
|
||||
----
|
||||
NULL
|
||||
1
|
||||
2
|
||||
3
|
||||
|
||||
query I
|
||||
SELECT * FROM integers WHERE EXISTS(SELECT * FROM integers) ORDER BY i
|
||||
----
|
||||
NULL
|
||||
1
|
||||
2
|
||||
3
|
||||
|
||||
query I
|
||||
SELECT * FROM integers WHERE NOT EXISTS(SELECT * FROM integers) ORDER BY i
|
||||
----
|
||||
|
||||
query I
|
||||
SELECT * FROM integers WHERE EXISTS(SELECT NULL) ORDER BY i
|
||||
----
|
||||
NULL
|
||||
1
|
||||
2
|
||||
3
|
||||
|
||||
# exists in SELECT clause
|
||||
query T
|
||||
SELECT EXISTS(SELECT * FROM integers)
|
||||
----
|
||||
1
|
||||
|
||||
query T
|
||||
SELECT EXISTS(SELECT * FROM integers WHERE i>10)
|
||||
----
|
||||
0
|
||||
|
||||
# multiple exists
|
||||
query TT
|
||||
SELECT EXISTS(SELECT * FROM integers), EXISTS(SELECT * FROM integers)
|
||||
----
|
||||
1 1
|
||||
|
||||
# exists used in operations
|
||||
query T
|
||||
SELECT EXISTS(SELECT * FROM integers) AND EXISTS(SELECT * FROM integers)
|
||||
----
|
||||
1
|
||||
|
||||
# nested EXISTS
|
||||
query T
|
||||
SELECT EXISTS(SELECT EXISTS(SELECT * FROM integers))
|
||||
----
|
||||
1
|
||||
|
||||
# uncorrelated IN
|
||||
query I
|
||||
SELECT * FROM integers WHERE 1 IN (SELECT 1) ORDER BY i
|
||||
----
|
||||
NULL
|
||||
1
|
||||
2
|
||||
3
|
||||
|
||||
query I
|
||||
SELECT * FROM integers WHERE 1 IN (SELECT * FROM integers) ORDER BY i
|
||||
----
|
||||
NULL
|
||||
1
|
||||
2
|
||||
3
|
||||
|
||||
query I
|
||||
SELECT * FROM integers WHERE 1 IN (SELECT NULL::INTEGER) ORDER BY i
|
||||
----
|
||||
|
||||
# scalar NULL results
|
||||
query T
|
||||
SELECT 1 IN (SELECT NULL::INTEGER) FROM integers
|
||||
----
|
||||
NULL
|
||||
NULL
|
||||
NULL
|
||||
NULL
|
||||
|
||||
query T
|
||||
SELECT NULL IN (SELECT * FROM integers) FROM integers
|
||||
----
|
||||
NULL
|
||||
NULL
|
||||
NULL
|
||||
NULL
|
||||
|
||||
# add aggregations after the subquery
|
||||
query R
|
||||
SELECT SUM(i) FROM integers WHERE 1 IN (SELECT * FROM integers)
|
||||
----
|
||||
6.000000
|
||||
|
||||
Reference in New Issue
Block a user