Files
email-tracker/external/duckdb/test/sql/projection/test_coalesce.test_slow
2025-10-24 19:21:19 -05:00

309 lines
5.9 KiB
Plaintext

# name: test/sql/projection/test_coalesce.test_slow
# description: Test COALESCE expression
# group: [projection]
statement ok
SET default_null_order='nulls_first';
statement ok
PRAGMA enable_verification
foreach type <numeric> DECIMAL(4,0) DECIMAL(9,0) DECIMAL(18,0) DECIMAL(38,0)
statement ok
DROP TABLE IF EXISTS exprtest
statement ok
CREATE TABLE exprtest (a ${type}, b ${type})
statement ok
INSERT INTO exprtest VALUES (42, 10), (43, 100), (NULL, 1), (45, 0)
# COALESCE
statement error
SELECT COALESCE()
----
query I
SELECT COALESCE(NULL)
----
NULL
query I
SELECT COALESCE(42::${type})
----
42
query I
SELECT COALESCE(a) FROM exprtest
----
42
43
NULL
45
query I
SELECT COALESCE(NULL, NULL, 42, 43)
----
42
query I
SELECT COALESCE(NULL, NULL, 42)
----
42
query I
SELECT COALESCE(42, NULL, 43)
----
42
query I
SELECT COALESCE(NULL, NULL, NULL)
----
NULL
query I
SELECT COALESCE(a, b) FROM exprtest
----
42
43
1
45
query I
SELECT COALESCE(NULL, NULL, NULL, a, NULL, b) FROM exprtest
----
42
43
1
45
# OR/AND
query II
SELECT * FROM exprtest WHERE b=1 OR COALESCE(a, b)=42 ORDER BY 1
----
NULL 1
42 10
query II
SELECT * FROM exprtest WHERE COALESCE(a, b)=1 OR COALESCE(a, b)=43 OR COALESCE(a, b)=45 ORDER BY 1
----
NULL 1
43 100
45 0
query II
SELECT * FROM exprtest WHERE COALESCE(a, b)=1 OR COALESCE(a, b)=42 OR COALESCE(a, b)=43 OR COALESCE(a, b)=45 ORDER BY 1
----
NULL 1
42 10
43 100
45 0
query II
SELECT * FROM exprtest WHERE b=1 AND COALESCE(a, b)=1 ORDER BY 1
----
NULL 1
query II
SELECT * FROM exprtest WHERE (b=1 AND COALESCE(a, b)=1) OR (b=100 AND COALESCE(a, b)=43) ORDER BY 1
----
NULL 1
43 100
endloop
# test COALESCE on strings
statement ok
CREATE TABLE strings(n VARCHAR, s VARCHAR);
statement ok
INSERT INTO strings (s) VALUES ('thisisalongstring'), ('thisisalsoalongstring'), ('hello'), ('world'), ('duckduckduckduckduck'), (NULL)
query I
SELECT COALESCE(n, s) FROM strings
----
thisisalongstring
thisisalsoalongstring
hello
world
duckduckduckduckduck
NULL
query I
SELECT COALESCE(n, n, n, n, n, n, n, n, n, n, s, n, n, n, n, n, n, n) FROM strings
----
thisisalongstring
thisisalsoalongstring
hello
world
duckduckduckduckduck
NULL
query I
SELECT COALESCE(n, n, n, n, n, n, n, n, n, n, s, n, n, n, n, n, n, n, 'default') FROM strings
----
thisisalongstring
thisisalsoalongstring
hello
world
duckduckduckduckduck
default
query I
SELECT COALESCE(n, n, n, n, n, n, n, n, n, n, s, n, n, n, n, n, n, n) FROM strings WHERE s NOT LIKE 'this%'
----
hello
world
duckduckduckduckduck
statement ok
CREATE TABLE multistrings AS SELECT * FROM
(
VALUES
(NULL, NULL, NULL, NULL, NULL, NULL),
('thisisalongstring', NULL, NULL, NULL, NULL, NULL),
(NULL, 'thisisalsoalongstring', NULL, NULL, NULL, NULL),
(NULL, NULL, 'hello', NULL, NULL, NULL),
(NULL, NULL, NULL, 'world', NULL, NULL),
(NULL, NULL, NULL, NULL, 'duckduckduckduckduck', NULL),
(NULL, NULL, NULL, NULL, NULL, NULL)
) tbl(s1, s2, s3, s4, s5);
query I
SELECT COALESCE(s1, s2, s3, s4, s5) FROM multistrings;
----
NULL
thisisalongstring
thisisalsoalongstring
hello
world
duckduckduckduckduck
NULL
query I
SELECT COALESCE(s5, s4, s3, s2, s1) FROM multistrings;
----
NULL
thisisalongstring
thisisalsoalongstring
hello
world
duckduckduckduckduck
NULL
query I
SELECT COALESCE(s5, s4, s3, s2, s1) FROM multistrings WHERE COALESCE(s5, s4, s3, s2, s1) IS NOT NULL
----
thisisalongstring
thisisalsoalongstring
hello
world
duckduckduckduckduck
# lists
statement ok
CREATE TABLE multilists AS SELECT * FROM
(
VALUES
(NULL, NULL, NULL, NULL, NULL, NULL),
([1, 2, 3], NULL, NULL, NULL, NULL, NULL),
(NULL, [4, 5, 6, 7, 8, 9], NULL, NULL, NULL, NULL),
(NULL, NULL, [], NULL, NULL, NULL),
(NULL, NULL, NULL, [10, 11, NULL, 13, 14, 15, 16], NULL, NULL),
(NULL, NULL, NULL, NULL, [NULL, 18, NULL, 20], NULL),
(NULL, NULL, NULL, NULL, NULL, NULL)
) tbl(s1, s2, s3, s4, s5);
query I
SELECT COALESCE(s1, s2, s3, s4, s5) FROM multilists;
----
NULL
[1, 2, 3]
[4, 5, 6, 7, 8, 9]
[]
[10, 11, NULL, 13, 14, 15, 16]
[NULL, 18, NULL, 20]
NULL
query I
SELECT COALESCE(s5, s4, s3, s2, s1) FROM multilists;
----
NULL
[1, 2, 3]
[4, 5, 6, 7, 8, 9]
[]
[10, 11, NULL, 13, 14, 15, 16]
[NULL, 18, NULL, 20]
NULL
query I
SELECT COALESCE(s5, s4, s3, s2, s1) FROM multilists WHERE COALESCE(s5, s4, s3, s2, s1) IS NOT NULL
----
[1, 2, 3]
[4, 5, 6, 7, 8, 9]
[]
[10, 11, NULL, 13, 14, 15, 16]
[NULL, 18, NULL, 20]
statement ok
CREATE TABLE nestedtypes AS SELECT * FROM
(
VALUES
(NULL, NULL, NULL, NULL, NULL, NULL),
([NULL, [NULL, NULL]]::STRUCT(x INTEGER[])[][], NULL, NULL, NULL, NULL, NULL),
(NULL, [[{'x': [3, 4]}], [{'x': [17]}, {'x': [22, NULL]}]], NULL, NULL, NULL, NULL),
(NULL, NULL, [[], [], []]::STRUCT(x INTEGER[])[][], NULL, NULL, NULL),
(NULL, NULL, NULL, [[{'x': NULL}], NULL, [NULL, NULL], []]::STRUCT(x INTEGER[])[][], NULL, NULL),
(NULL, NULL, NULL, NULL, [[{'x': [10, 12, 13, 14, 15]}], [{'x': [NULL]}, NULL]], NULL),
(NULL, NULL, NULL, NULL, NULL, NULL)
) tbl(s1, s2, s3, s4, s5);
query I
SELECT COALESCE(s1, s2, s3, s4, s5) FROM nestedtypes;
----
NULL
[NULL, [NULL, NULL]]
[[{'x': [3, 4]}], [{'x': [17]}, {'x': [22, NULL]}]]
[[], [], []]
[[{'x': NULL}], NULL, [NULL, NULL], []]
[[{'x': [10, 12, 13, 14, 15]}], [{'x': [NULL]}, NULL]]
NULL
query I
SELECT COALESCE(s5, s4, s3, s2, s1) FROM nestedtypes;
----
NULL
[NULL, [NULL, NULL]]
[[{'x': [3, 4]}], [{'x': [17]}, {'x': [22, NULL]}]]
[[], [], []]
[[{'x': NULL}], NULL, [NULL, NULL], []]
[[{'x': [10, 12, 13, 14, 15]}], [{'x': [NULL]}, NULL]]
NULL
query I
SELECT COALESCE(s5, s4, s3, s2, s1) FROM nestedtypes WHERE COALESCE(s5, s4, s3, s2, s1) IS NOT NULL
----
[NULL, [NULL, NULL]]
[[{'x': [3, 4]}], [{'x': [17]}, {'x': [22, NULL]}]]
[[], [], []]
[[{'x': NULL}], NULL, [NULL, NULL], []]
[[{'x': [10, 12, 13, 14, 15]}], [{'x': [NULL]}, NULL]]
query I
SELECT UNNEST(COALESCE(s5, s4, s3, s2, s1)) FROM nestedtypes
----
NULL
[NULL, NULL]
[{'x': [3, 4]}]
[{'x': [17]}, {'x': [22, NULL]}]
[]
[]
[]
[{'x': NULL}]
NULL
[NULL, NULL]
[]
[{'x': [10, 12, 13, 14, 15]}]
[{'x': [NULL]}, NULL]