309 lines
5.9 KiB
Plaintext
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]
|