should be it
This commit is contained in:
35
external/duckdb/test/sql/projection/coalesce_error.test
vendored
Normal file
35
external/duckdb/test/sql/projection/coalesce_error.test
vendored
Normal file
@@ -0,0 +1,35 @@
|
||||
# name: test/sql/projection/coalesce_error.test
|
||||
# description: Test COALESCE error short-circuiting
|
||||
# group: [projection]
|
||||
|
||||
statement ok
|
||||
PRAGMA enable_verification
|
||||
|
||||
# constant coalesce short-circuiting
|
||||
query I
|
||||
SELECT COALESCE(1, 'hello'::INT)
|
||||
----
|
||||
1
|
||||
|
||||
statement error
|
||||
SELECT COALESCE(NULL, 'hello'::INT)
|
||||
----
|
||||
<REGEX>:.*Conversion Error.*Could not convert string.*
|
||||
|
||||
# non-constant
|
||||
statement ok
|
||||
CREATE TABLE vals AS SELECT * FROM (
|
||||
VALUES (1, 'hello'), (NULL, '2'), (3, NULL)
|
||||
) tbl(a, b)
|
||||
|
||||
query I
|
||||
SELECT COALESCE(a, b::INT) FROM vals
|
||||
----
|
||||
1
|
||||
2
|
||||
3
|
||||
|
||||
statement error
|
||||
SELECT COALESCE(NULL, b::INT) FROM vals
|
||||
----
|
||||
<REGEX>:.*Conversion Error.*Could not convert string.*
|
||||
37
external/duckdb/test/sql/projection/coalesce_rowid.test
vendored
Normal file
37
external/duckdb/test/sql/projection/coalesce_rowid.test
vendored
Normal file
@@ -0,0 +1,37 @@
|
||||
# name: test/sql/projection/coalesce_rowid.test
|
||||
# description: SELECT * REPLACE
|
||||
# group: [projection]
|
||||
|
||||
statement ok
|
||||
PRAGMA enable_verification
|
||||
|
||||
statement ok
|
||||
create table tbl as select case when i%2=0 then null else i end as i from range(10) tbl(i);
|
||||
|
||||
query II
|
||||
select i, coalesce(rowid+i, rowid) from tbl ORDER BY rowid;
|
||||
----
|
||||
NULL 0
|
||||
1 2
|
||||
NULL 2
|
||||
3 6
|
||||
NULL 4
|
||||
5 10
|
||||
NULL 6
|
||||
7 14
|
||||
NULL 8
|
||||
9 18
|
||||
|
||||
query IIII
|
||||
select i, rowid, rowid+i, COALESCE(rowid+i, NULL) IS NULL OR rowid+3=6 from tbl ORDER BY rowid;
|
||||
----
|
||||
NULL 0 NULL True
|
||||
1 1 2 False
|
||||
NULL 2 NULL True
|
||||
3 3 6 True
|
||||
NULL 4 NULL True
|
||||
5 5 10 False
|
||||
NULL 6 NULL True
|
||||
7 7 14 False
|
||||
NULL 8 NULL True
|
||||
9 9 18 False
|
||||
150
external/duckdb/test/sql/projection/select_star_exclude.test
vendored
Normal file
150
external/duckdb/test/sql/projection/select_star_exclude.test
vendored
Normal file
@@ -0,0 +1,150 @@
|
||||
# name: test/sql/projection/select_star_exclude.test
|
||||
# description: SELECT * EXCLUDE
|
||||
# group: [projection]
|
||||
|
||||
statement ok
|
||||
PRAGMA enable_verification
|
||||
|
||||
statement ok
|
||||
CREATE TABLE integers(i INTEGER, j INTEGER, k INTEGER)
|
||||
|
||||
statement ok
|
||||
INSERT INTO integers VALUES (1, 2, 3)
|
||||
|
||||
query II
|
||||
SELECT * EXCLUDE i FROM integers
|
||||
----
|
||||
2 3
|
||||
|
||||
query I
|
||||
SELECT * EXCLUDE (i, j) FROM integers
|
||||
----
|
||||
3
|
||||
|
||||
query II
|
||||
SELECT * EXCLUDE (j) FROM integers
|
||||
----
|
||||
1 3
|
||||
|
||||
query II
|
||||
SELECT * EXCLUDE (j) FROM integers
|
||||
----
|
||||
1 3
|
||||
|
||||
# case insensitive exclude
|
||||
query II
|
||||
SELECT * EXCLUDE ("J") FROM integers
|
||||
----
|
||||
1 3
|
||||
|
||||
# no columns remaining...
|
||||
statement error
|
||||
SELECT * EXCLUDE (i, j, k) FROM integers
|
||||
----
|
||||
|
||||
# same but with integers.*
|
||||
query II
|
||||
SELECT integers.* EXCLUDE (i) FROM integers
|
||||
----
|
||||
2 3
|
||||
|
||||
query II
|
||||
SELECT integers.* EXCLUDE ('i') FROM integers
|
||||
----
|
||||
2 3
|
||||
|
||||
query I
|
||||
SELECT integers.* EXCLUDE (i, j) FROM integers
|
||||
----
|
||||
3
|
||||
|
||||
query II
|
||||
SELECT integers.* EXCLUDE (j) FROM integers
|
||||
----
|
||||
1 3
|
||||
|
||||
query III
|
||||
SELECT integers.* EXCLUDE (i, j), * EXCLUDE (i, j), * EXCLUDE (i, k) FROM integers
|
||||
----
|
||||
3 3 2
|
||||
|
||||
statement error
|
||||
SELECT integers.* EXCLUDE (i, j, k) FROM integers
|
||||
----
|
||||
|
||||
# exclude but with multiple tables
|
||||
query II
|
||||
SELECT * EXCLUDE (i, j) FROM integers i1, integers i2
|
||||
----
|
||||
3 3
|
||||
|
||||
query I
|
||||
SELECT i1.* EXCLUDE (i, j), i2.* EXCLUDE (i, j, k) FROM integers i1, integers i2
|
||||
----
|
||||
3
|
||||
|
||||
query III
|
||||
SELECT i1.* EXCLUDE (i, j), i2.* EXCLUDE (k) FROM integers i1, integers i2
|
||||
----
|
||||
3 1 2
|
||||
|
||||
query IIII
|
||||
SELECT * EXCLUDE (i) FROM integers i1 JOIN integers i2 USING (i)
|
||||
----
|
||||
2 3 2 3
|
||||
|
||||
# qualified exclude entries
|
||||
query II
|
||||
SELECT * EXCLUDE integers.i FROM integers
|
||||
----
|
||||
2 3
|
||||
|
||||
query I
|
||||
SELECT * EXCLUDE (integers.i, integers.j) FROM integers
|
||||
----
|
||||
3
|
||||
|
||||
query I
|
||||
SELECT integers.* EXCLUDE (integers.i, integers.j) FROM integers
|
||||
----
|
||||
3
|
||||
|
||||
query I
|
||||
SELECT * EXCLUDE (INTEGERS.i, integers.J) FROM integers
|
||||
----
|
||||
3
|
||||
|
||||
statement error
|
||||
SELECT * EXCLUDE (integers.i, integers.j, integers2.i) FROM integers
|
||||
----
|
||||
not found in FROM clause
|
||||
|
||||
statement error
|
||||
SELECT * EXCLUDE (integers2.i) FROM integers
|
||||
----
|
||||
not found in FROM clause
|
||||
|
||||
query IIII
|
||||
SELECT * EXCLUDE (i1.i, i2.i) FROM integers i1 JOIN integers i2 USING (i)
|
||||
----
|
||||
2 3 2 3
|
||||
|
||||
# duplicate entry in exclude list
|
||||
statement error
|
||||
SELECT * EXCLUDE (i, i) FROM integers
|
||||
----
|
||||
Duplicate entry
|
||||
|
||||
statement error
|
||||
SELECT * EXCLUDE (integers.i, i) FROM integers
|
||||
----
|
||||
Duplicate entry
|
||||
|
||||
# column name that does not exist
|
||||
statement error
|
||||
SELECT * EXCLUDE (blabla) FROM integers
|
||||
----
|
||||
|
||||
statement error
|
||||
SELECT integers.* EXCLUDE (blabla) FROM integers
|
||||
----
|
||||
107
external/duckdb/test/sql/projection/select_star_like.test
vendored
Normal file
107
external/duckdb/test/sql/projection/select_star_like.test
vendored
Normal file
@@ -0,0 +1,107 @@
|
||||
# name: test/sql/projection/select_star_like.test
|
||||
# description: SELECT * LIKE
|
||||
# group: [projection]
|
||||
|
||||
statement ok
|
||||
PRAGMA enable_verification
|
||||
|
||||
statement ok
|
||||
CREATE TABLE integers(col1 INTEGER, col2 INTEGER, k INTEGER)
|
||||
|
||||
statement ok
|
||||
INSERT INTO integers VALUES (1, 2, 3)
|
||||
|
||||
query II
|
||||
SELECT COLUMNS(lambda x: x LIKE 'col%') FROM integers
|
||||
----
|
||||
1 2
|
||||
|
||||
query II
|
||||
SELECT * LIKE 'col%' FROM integers
|
||||
----
|
||||
1 2
|
||||
|
||||
# not like
|
||||
query I
|
||||
SELECT * NOT LIKE 'col%' FROM integers
|
||||
----
|
||||
3
|
||||
|
||||
# ilike
|
||||
query II
|
||||
SELECT * ILIKE 'COL%' FROM integers
|
||||
----
|
||||
1 2
|
||||
|
||||
# regex
|
||||
query II
|
||||
SELECT * SIMILAR TO '.*col.*' FROM integers
|
||||
----
|
||||
1 2
|
||||
|
||||
# exclude
|
||||
query I
|
||||
SELECT * EXCLUDE (col1) SIMILAR TO '.*col.*' FROM integers
|
||||
----
|
||||
2
|
||||
|
||||
# SIMILAR TO alias can use regex groups
|
||||
query II
|
||||
SELECT c2, c1 FROM (
|
||||
SELECT * SIMILAR TO 'number(\d+)' AS 'c\1' FROM (SELECT 1 AS number1, 2 AS number2, 3 AS end)
|
||||
)
|
||||
----
|
||||
2 1
|
||||
|
||||
# LIKE
|
||||
query I
|
||||
SELECT val FROM (
|
||||
SELECT * NOT LIKE '%number%' AS val FROM (SELECT 1 AS number1, 2 AS number2, 3 AS end)
|
||||
)
|
||||
----
|
||||
3
|
||||
|
||||
# ESCAPE
|
||||
query I
|
||||
SELECT * LIKE '\_%' ESCAPE '\' AS val FROM (SELECT 1 AS number1, 2 AS _number2)
|
||||
----
|
||||
2
|
||||
|
||||
query I
|
||||
SELECT * NOT LIKE '\_%' ESCAPE '\' AS val FROM (SELECT 1 AS number1, 2 AS _number2)
|
||||
----
|
||||
1
|
||||
|
||||
query I
|
||||
SELECT * ILIKE '\_NUM%' ESCAPE '\' AS val FROM (SELECT 1 AS number1, 2 AS _number2)
|
||||
----
|
||||
2
|
||||
|
||||
query I
|
||||
SELECT * NOT ILIKE '\_NUM%' ESCAPE '\' AS val FROM (SELECT 1 AS number1, 2 AS _number2)
|
||||
----
|
||||
1
|
||||
|
||||
# non-constant pattern
|
||||
statement error
|
||||
SELECT * SIMILAR TO pattern FROM integers, (SELECT '.*col.*') t(pattern)
|
||||
----
|
||||
must be a constant
|
||||
|
||||
# unsupported function
|
||||
statement error
|
||||
SELECT * + 42 FROM integers
|
||||
----
|
||||
cannot be applied to a star expression
|
||||
|
||||
# replace
|
||||
statement error
|
||||
SELECT * REPLACE (col1 + 42 AS col1) SIMILAR TO '.*col.*' FROM integers
|
||||
----
|
||||
Replace list cannot be combined with a filtering operation
|
||||
|
||||
# rename
|
||||
statement error
|
||||
SELECT * RENAME (col1 AS other_) SIMILAR TO '.*col.*' FROM integers
|
||||
----
|
||||
Rename list cannot be combined with a filtering operation
|
||||
93
external/duckdb/test/sql/projection/select_star_rename.test
vendored
Normal file
93
external/duckdb/test/sql/projection/select_star_rename.test
vendored
Normal file
@@ -0,0 +1,93 @@
|
||||
# name: test/sql/projection/select_star_rename.test
|
||||
# description: SELECT * RENAME
|
||||
# group: [projection]
|
||||
|
||||
statement ok
|
||||
PRAGMA enable_verification
|
||||
|
||||
statement ok
|
||||
CREATE TABLE integers(i INTEGER, j INTEGER, k INTEGER);
|
||||
|
||||
statement ok
|
||||
INSERT INTO integers VALUES (1, 2, 3);
|
||||
|
||||
# basic rename
|
||||
query I
|
||||
SELECT renamed_col FROM (SELECT * RENAME i AS renamed_col FROM integers)
|
||||
----
|
||||
1
|
||||
|
||||
# rename with COLUMNS
|
||||
query I
|
||||
SELECT renamed_col FROM (SELECT COLUMNS(* RENAME i AS renamed_col) FROM integers)
|
||||
----
|
||||
1
|
||||
|
||||
# qualified
|
||||
query I
|
||||
SELECT renamed_col FROM (SELECT * RENAME integers.i AS renamed_col FROM integers)
|
||||
----
|
||||
1
|
||||
|
||||
# qualified star
|
||||
query I
|
||||
SELECT renamed_col FROM (SELECT integers.* RENAME integers.i AS renamed_col FROM integers)
|
||||
----
|
||||
1
|
||||
|
||||
# multiple renames
|
||||
query II
|
||||
SELECT r1, r2 FROM (SELECT * RENAME (integers.i AS r1, j AS r2) FROM integers)
|
||||
----
|
||||
1 2
|
||||
|
||||
# trailing comma
|
||||
query II
|
||||
SELECT r1, r2 FROM (SELECT * RENAME (integers.i AS r1, j AS r2,) FROM integers)
|
||||
----
|
||||
1 2
|
||||
|
||||
# exclude and rename to that same column
|
||||
query I
|
||||
SELECT i FROM (SELECT * EXCLUDE (i) RENAME (j AS i) FROM integers)
|
||||
----
|
||||
2
|
||||
|
||||
# struct
|
||||
query I
|
||||
SELECT r FROM (SELECT struct.* RENAME (i AS r) FROM (SELECT {'i': 42} AS struct))
|
||||
----
|
||||
42
|
||||
|
||||
# using
|
||||
query I
|
||||
SELECT new_col FROM (SELECT * RENAME (i AS new_col) FROM integers i1 JOIN integers i2 USING (i))
|
||||
----
|
||||
1
|
||||
|
||||
query II
|
||||
SELECT new_col, new_col2 FROM (SELECT * RENAME (i1.i AS new_col, i1.j AS new_col2) FROM integers i1 JOIN integers i2 USING (i))
|
||||
----
|
||||
1 2
|
||||
|
||||
query I
|
||||
SELECT new_col FROM (SELECT * RENAME (i AS new_col) FROM integers i1 LEFT JOIN integers i2 USING (i))
|
||||
----
|
||||
1
|
||||
|
||||
query I
|
||||
SELECT new_col FROM (SELECT * RENAME (i1.i AS new_col) FROM integers i1 FULL OUTER JOIN integers i2 USING (i))
|
||||
----
|
||||
1
|
||||
|
||||
# conflict with exclude
|
||||
statement error
|
||||
SELECT * EXCLUDE (i) RENAME (i AS renamed_col) FROM integers
|
||||
----
|
||||
Column "i" cannot occur in both EXCLUDE and RENAME list
|
||||
|
||||
# conflict with replace
|
||||
statement error
|
||||
SELECT * REPLACE (i + 1 AS i) RENAME (i AS renamed_col) FROM integers
|
||||
----
|
||||
cannot occur in both REPLACE and RENAME list
|
||||
55
external/duckdb/test/sql/projection/select_star_replace.test
vendored
Normal file
55
external/duckdb/test/sql/projection/select_star_replace.test
vendored
Normal file
@@ -0,0 +1,55 @@
|
||||
# name: test/sql/projection/select_star_replace.test
|
||||
# description: SELECT * REPLACE
|
||||
# group: [projection]
|
||||
|
||||
statement ok
|
||||
PRAGMA enable_verification
|
||||
|
||||
statement ok
|
||||
CREATE TABLE integers(i INTEGER, j INTEGER, k INTEGER)
|
||||
|
||||
statement ok
|
||||
INSERT INTO integers VALUES (1, 2, 3)
|
||||
|
||||
query III
|
||||
SELECT * REPLACE i+100 AS i FROM integers
|
||||
----
|
||||
101 2 3
|
||||
|
||||
query IIII
|
||||
SELECT * EXCLUDE (j, k) REPLACE (i+100 AS i), * EXCLUDE (j) REPLACE (i+100 AS i), * EXCLUDE (j, k) REPLACE (i+101 AS i) FROM integers
|
||||
----
|
||||
101 101 3 102
|
||||
|
||||
query III
|
||||
SELECT * REPLACE (i+100 AS i, j+200 AS "J") FROM integers
|
||||
----
|
||||
101 202 3
|
||||
|
||||
query III
|
||||
SELECT integers.* REPLACE (i+100 AS i) FROM integers
|
||||
----
|
||||
101 2 3
|
||||
|
||||
# duplicate entry in replace list
|
||||
statement error
|
||||
SELECT * REPLACE (i+100 AS i, i+200 AS i) FROM integers
|
||||
----
|
||||
<REGEX>:.*Parser Error.*Duplicate entry.*
|
||||
|
||||
# replace name that does not exist
|
||||
statement error
|
||||
SELECT * REPLACE (i+100 AS blabla) FROM integers
|
||||
----
|
||||
<REGEX>:.*Binder Error.*not found in FROM clause.*
|
||||
|
||||
statement error
|
||||
SELECT integers.* REPLACE (i+100 AS blabla) FROM integers
|
||||
----
|
||||
<REGEX>:.*Binder Error.*not found in integers.*
|
||||
|
||||
# column cannot occur in both exclude and replace list
|
||||
statement error
|
||||
SELECT * EXCLUDE (i) REPLACE (i+100 AS i) FROM integers
|
||||
----
|
||||
<REGEX>:.*Parser Error.*cannot occur in both.*
|
||||
48
external/duckdb/test/sql/projection/select_struct_star.test
vendored
Normal file
48
external/duckdb/test/sql/projection/select_struct_star.test
vendored
Normal file
@@ -0,0 +1,48 @@
|
||||
# name: test/sql/projection/select_struct_star.test
|
||||
# description: SELECT struct.*;
|
||||
# group: [projection]
|
||||
|
||||
statement ok
|
||||
PRAGMA enable_verification
|
||||
|
||||
# create table
|
||||
statement ok
|
||||
CREATE TABLE test(a STRUCT(i INT, j INT));
|
||||
|
||||
# insertion: 1 affected row
|
||||
query I
|
||||
INSERT INTO test VALUES ({i: 1, j: 2});
|
||||
----
|
||||
1
|
||||
|
||||
query II
|
||||
SELECT a.* FROM test;
|
||||
----
|
||||
1 2
|
||||
|
||||
query I
|
||||
SELECT a.* EXCLUDE(j) FROM test;
|
||||
----
|
||||
1
|
||||
|
||||
query I
|
||||
SELECT a.* EXCLUDE(i) FROM test;
|
||||
----
|
||||
2
|
||||
|
||||
query II
|
||||
SELECT a.* REPLACE(a.i + 3 AS i) FROM test;
|
||||
----
|
||||
4 2
|
||||
|
||||
statement ok
|
||||
CREATE TABLE a(i row(t int));
|
||||
|
||||
statement ok
|
||||
CREATE TABLE b(i row(t int));
|
||||
|
||||
# Binder Error: Ambiguous reference to column name "i" (use: "b.i" or "a.i")
|
||||
statement error
|
||||
SELECT i.* FROM a, b;
|
||||
----
|
||||
<REGEX>:.*Binder Error.*Ambiguous reference to column name.*
|
||||
308
external/duckdb/test/sql/projection/test_coalesce.test_slow
vendored
Normal file
308
external/duckdb/test/sql/projection/test_coalesce.test_slow
vendored
Normal file
@@ -0,0 +1,308 @@
|
||||
# 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]
|
||||
204
external/duckdb/test/sql/projection/test_complex_expressions.test
vendored
Normal file
204
external/duckdb/test/sql/projection/test_complex_expressions.test
vendored
Normal file
@@ -0,0 +1,204 @@
|
||||
# name: test/sql/projection/test_complex_expressions.test
|
||||
# description: Complex Expressions
|
||||
# group: [projection]
|
||||
|
||||
statement ok
|
||||
PRAGMA enable_verification
|
||||
|
||||
statement ok
|
||||
CREATE TABLE exprtest (a INTEGER, b INTEGER)
|
||||
|
||||
statement ok
|
||||
INSERT INTO exprtest VALUES (42, 10), (43, 100), (NULL, 1), (45, -1)
|
||||
|
||||
query II
|
||||
SELECT * FROM exprtest
|
||||
----
|
||||
42 10
|
||||
43 100
|
||||
NULL 1
|
||||
45 -1
|
||||
|
||||
# BETWEEN
|
||||
query I
|
||||
SELECT a FROM exprtest WHERE a BETWEEN 43 AND 44
|
||||
----
|
||||
43
|
||||
|
||||
query I
|
||||
SELECT a FROM exprtest WHERE a NOT BETWEEN 43 AND 44
|
||||
----
|
||||
42
|
||||
45
|
||||
|
||||
query I
|
||||
SELECT a FROM exprtest WHERE a BETWEEN b AND 44
|
||||
----
|
||||
42
|
||||
|
||||
# CASE
|
||||
query I
|
||||
SELECT CASE a WHEN 42 THEN 100 WHEN 43 THEN 200 ELSE 300 END FROM exprtest
|
||||
----
|
||||
100
|
||||
200
|
||||
300
|
||||
300
|
||||
|
||||
query I
|
||||
SELECT CASE WHEN a = 42 THEN 100 WHEN a = 43 THEN 200 ELSE 300 END FROM exprtest
|
||||
----
|
||||
100
|
||||
200
|
||||
300
|
||||
300
|
||||
|
||||
query I
|
||||
SELECT CASE WHEN a = 42 THEN 100 WHEN a = 43 THEN 200 END FROM exprtest
|
||||
----
|
||||
100
|
||||
200
|
||||
NULL
|
||||
NULL
|
||||
|
||||
# ABS
|
||||
query III
|
||||
SELECT ABS(1), ABS(-1), ABS(NULL)
|
||||
----
|
||||
1 1 NULL
|
||||
|
||||
query I
|
||||
SELECT ABS(b) FROM exprtest
|
||||
----
|
||||
10
|
||||
100
|
||||
1
|
||||
1
|
||||
|
||||
# IN
|
||||
statement ok
|
||||
CREATE TABLE intest (a INTEGER, b INTEGER, c INTEGER)
|
||||
|
||||
statement ok
|
||||
INSERT INTO intest VALUES (42, 42, 42), (43, 42, 42), (44, 41, 44);
|
||||
|
||||
query III
|
||||
SELECT * FROM intest WHERE a IN (42, 43)
|
||||
----
|
||||
42 42 42
|
||||
43 42 42
|
||||
|
||||
query T
|
||||
SELECT a IN (42, 43) FROM intest
|
||||
----
|
||||
1
|
||||
1
|
||||
0
|
||||
|
||||
query III
|
||||
SELECT * FROM intest WHERE a IN (86, 103, 162)
|
||||
----
|
||||
|
||||
query III
|
||||
SELECT * FROM intest WHERE a IN (NULL, NULL, NULL, NULL)
|
||||
----
|
||||
|
||||
query III
|
||||
SELECT * FROM intest WHERE a IN (b)
|
||||
----
|
||||
42 42 42
|
||||
|
||||
query III
|
||||
SELECT * FROM intest WHERE a IN (b, c)
|
||||
----
|
||||
42 42 42
|
||||
44 41 44
|
||||
|
||||
query III
|
||||
SELECT * FROM intest WHERE a IN (43, b) ORDER BY 1
|
||||
----
|
||||
42 42 42
|
||||
43 42 42
|
||||
|
||||
query III
|
||||
SELECT * FROM intest WHERE a NOT IN (42, 43)
|
||||
----
|
||||
44 41 44
|
||||
|
||||
query III
|
||||
SELECT * FROM intest WHERE a NOT IN (86, 103, 162) ORDER BY 1
|
||||
----
|
||||
42 42 42
|
||||
43 42 42
|
||||
44 41 44
|
||||
|
||||
query III
|
||||
SELECT * FROM intest WHERE a NOT IN (NULL, NULL)
|
||||
----
|
||||
|
||||
query III
|
||||
SELECT * FROM intest WHERE a NOT IN (b) ORDER BY 1
|
||||
----
|
||||
43 42 42
|
||||
44 41 44
|
||||
|
||||
query III
|
||||
SELECT * FROM intest WHERE a NOT IN (b, c)
|
||||
----
|
||||
43 42 42
|
||||
|
||||
query III
|
||||
SELECT * FROM intest WHERE a NOT IN (43, b)
|
||||
----
|
||||
44 41 44
|
||||
|
||||
query III
|
||||
SELECT * FROM intest WHERE NULL IN ('a', 'b')
|
||||
----
|
||||
|
||||
query III
|
||||
SELECT * FROM intest WHERE NULL NOT IN ('a', 'b')
|
||||
----
|
||||
|
||||
statement ok
|
||||
CREATE TABLE strtest (a INTEGER, b VARCHAR)
|
||||
|
||||
statement ok
|
||||
INSERT INTO strtest VALUES (1, 'a'), (2, 'h'), (3, 'd')
|
||||
|
||||
statement ok
|
||||
INSERT INTO strtest VALUES (4, NULL)
|
||||
|
||||
query I
|
||||
SELECT a FROM strtest WHERE b = 'a'
|
||||
----
|
||||
1
|
||||
|
||||
query I
|
||||
SELECT a FROM strtest WHERE b <> 'a'
|
||||
----
|
||||
2
|
||||
3
|
||||
|
||||
query I
|
||||
SELECT a FROM strtest WHERE b < 'h'
|
||||
----
|
||||
1
|
||||
3
|
||||
|
||||
query I
|
||||
SELECT a FROM strtest WHERE b <= 'h'
|
||||
----
|
||||
1
|
||||
2
|
||||
3
|
||||
|
||||
query I
|
||||
SELECT a FROM strtest WHERE b > 'h'
|
||||
----
|
||||
|
||||
query I
|
||||
SELECT a FROM strtest WHERE b >= 'h'
|
||||
----
|
||||
2
|
||||
|
||||
19
external/duckdb/test/sql/projection/test_many_values.test_slow
vendored
Normal file
19
external/duckdb/test/sql/projection/test_many_values.test_slow
vendored
Normal file
File diff suppressed because one or more lines are too long
79
external/duckdb/test/sql/projection/test_row_id.test
vendored
Normal file
79
external/duckdb/test/sql/projection/test_row_id.test
vendored
Normal file
@@ -0,0 +1,79 @@
|
||||
# name: test/sql/projection/test_row_id.test
|
||||
# description: Test Row IDs
|
||||
# group: [projection]
|
||||
|
||||
statement ok
|
||||
PRAGMA enable_verification
|
||||
|
||||
statement ok
|
||||
create table a(i integer);
|
||||
|
||||
statement ok
|
||||
insert into a values (42), (44);
|
||||
|
||||
# we can query row ids
|
||||
query II
|
||||
SELECT rowid, * FROM a
|
||||
----
|
||||
0 42
|
||||
1 44
|
||||
|
||||
query I
|
||||
SELECT rowid+1 FROM a WHERE CASE WHEN i=42 THEN rowid=0 ELSE rowid=1 END;
|
||||
----
|
||||
1
|
||||
2
|
||||
|
||||
# rowid isn't expanded in *
|
||||
query I
|
||||
SELECT * FROM a
|
||||
----
|
||||
42
|
||||
44
|
||||
|
||||
# we can't update rowids
|
||||
statement error
|
||||
UPDATE a SET rowid=5
|
||||
----
|
||||
|
||||
# we also can't insert with explicit row ids
|
||||
statement error
|
||||
INSERT INTO a (rowid, i) VALUES (5, 6)
|
||||
----
|
||||
|
||||
# we can use rowid as column name
|
||||
statement ok
|
||||
create table b(rowid integer);
|
||||
|
||||
statement ok
|
||||
insert into b values (42), (22);
|
||||
|
||||
# this rowid is expanded
|
||||
query I
|
||||
SELECT * FROM b ORDER BY 1
|
||||
----
|
||||
22
|
||||
42
|
||||
|
||||
# selecting rowid just selects the column
|
||||
query I
|
||||
SELECT rowid FROM b ORDER BY 1
|
||||
----
|
||||
22
|
||||
42
|
||||
|
||||
# now we can update
|
||||
statement ok
|
||||
UPDATE b SET rowid=5
|
||||
|
||||
# and insert
|
||||
statement ok
|
||||
INSERT INTO b (rowid) VALUES (5)
|
||||
|
||||
query I
|
||||
SELECT * FROM b
|
||||
----
|
||||
5
|
||||
5
|
||||
5
|
||||
|
||||
184
external/duckdb/test/sql/projection/test_row_id_expression.test
vendored
Normal file
184
external/duckdb/test/sql/projection/test_row_id_expression.test
vendored
Normal file
@@ -0,0 +1,184 @@
|
||||
# name: test/sql/projection/test_row_id_expression.test
|
||||
# description: Test Row IDs used in different types of operations
|
||||
# group: [projection]
|
||||
|
||||
statement ok
|
||||
PRAGMA enable_verification
|
||||
|
||||
# test row ids on different operations
|
||||
# this is interesting because rowids are emitted as compressed vectors
|
||||
# hence this is really a test of correct handling of compressed vectors in the execution engine
|
||||
statement ok
|
||||
create table a(i integer);
|
||||
|
||||
statement ok
|
||||
insert into a values (42);
|
||||
|
||||
# arithmetic
|
||||
query IIII
|
||||
SELECT rowid + 1, rowid - 1, rowid + rowid, i + rowid FROM a
|
||||
----
|
||||
1 -1 0 42
|
||||
|
||||
# unary ops
|
||||
query III
|
||||
SELECT -rowid, +rowid, abs(rowid) FROM a
|
||||
----
|
||||
0 0 0
|
||||
|
||||
# ternary ops
|
||||
query TTT
|
||||
SELECT rowid BETWEEN -1 AND 1, 0 BETWEEN rowid AND 1, 1 BETWEEN -3 AND rowid FROM a
|
||||
----
|
||||
1 1 0
|
||||
|
||||
# comparisons
|
||||
query TTTT
|
||||
SELECT rowid < i, rowid = NULL, rowid = i, rowid <> 0 FROM a
|
||||
----
|
||||
1 NULL 0 0
|
||||
|
||||
# simple (ungrouped) aggregates
|
||||
query RIIII
|
||||
SELECT SUM(rowid), MIN(rowid), MAX(rowid), COUNT(rowid), FIRST(rowid) FROM a
|
||||
----
|
||||
0.000000 0 0 1 0
|
||||
|
||||
query RIIII
|
||||
SELECT SUM(rowid), MIN(rowid), MAX(rowid), COUNT(rowid), LAST(rowid) FROM a
|
||||
----
|
||||
0.000000 0 0 1 0
|
||||
|
||||
query I
|
||||
SELECT COUNT(*) FROM a
|
||||
----
|
||||
1
|
||||
|
||||
# grouped aggregates
|
||||
query RIIIII
|
||||
SELECT SUM(rowid), MIN(rowid), MAX(rowid), COUNT(rowid), FIRST(rowid), LAST(rowid) FROM a GROUP BY i
|
||||
----
|
||||
0.000000 0 0 1 0 0
|
||||
|
||||
# group by rowid
|
||||
query R
|
||||
SELECT SUM(i) FROM a GROUP BY rowid
|
||||
----
|
||||
42.000000
|
||||
|
||||
# joins
|
||||
# equality
|
||||
query II
|
||||
SELECT * FROM a, a a2 WHERE a.rowid=a2.rowid
|
||||
----
|
||||
42 42
|
||||
|
||||
# inequality
|
||||
query II
|
||||
SELECT * FROM a, a a2 WHERE a.rowid<>a2.rowid
|
||||
----
|
||||
|
||||
# range
|
||||
query II
|
||||
SELECT * FROM a, a a2 WHERE a.rowid>=a2.rowid
|
||||
----
|
||||
42 42
|
||||
|
||||
# order by
|
||||
query I
|
||||
SELECT * FROM a ORDER BY rowid
|
||||
----
|
||||
42
|
||||
|
||||
# insert into table
|
||||
statement ok
|
||||
INSERT INTO a SELECT rowid FROM a
|
||||
|
||||
query I
|
||||
SELECT * FROM a ORDER BY 1
|
||||
----
|
||||
0
|
||||
42
|
||||
|
||||
# update value
|
||||
statement ok
|
||||
UPDATE a SET i=rowid
|
||||
|
||||
query I
|
||||
SELECT * FROM a ORDER BY 1
|
||||
----
|
||||
0
|
||||
1
|
||||
|
||||
# use rowid in filter
|
||||
query I
|
||||
SELECT * FROM a WHERE rowid=0
|
||||
----
|
||||
0
|
||||
|
||||
query I
|
||||
SELECT * FROM a WHERE rowid BETWEEN -100 AND 100 ORDER BY 1
|
||||
----
|
||||
0
|
||||
1
|
||||
|
||||
query I
|
||||
SELECT * FROM a WHERE rowid=0 OR rowid=1
|
||||
----
|
||||
0
|
||||
1
|
||||
|
||||
# window expressions
|
||||
query I
|
||||
SELECT row_number() OVER (PARTITION BY rowid) FROM a ORDER BY rowid
|
||||
----
|
||||
1
|
||||
1
|
||||
|
||||
query I
|
||||
SELECT row_number() OVER (ORDER BY rowid) FROM a ORDER BY rowid
|
||||
----
|
||||
1
|
||||
2
|
||||
|
||||
query I
|
||||
SELECT row_number() OVER (ORDER BY rowid DESC) FROM a ORDER BY rowid
|
||||
----
|
||||
2
|
||||
1
|
||||
|
||||
# uncorrelated subqueries
|
||||
query I
|
||||
SELECT (SELECT rowid FROM a LIMIT 1)
|
||||
----
|
||||
0
|
||||
|
||||
query T
|
||||
SELECT 0 IN (SELECT rowid FROM a)
|
||||
----
|
||||
1
|
||||
|
||||
query T
|
||||
SELECT EXISTS(SELECT rowid FROM a)
|
||||
----
|
||||
1
|
||||
|
||||
# correlated subqueries
|
||||
query I
|
||||
SELECT (SELECT a2.rowid FROM a a2 WHERE a.rowid=a2.rowid) FROM a
|
||||
----
|
||||
0
|
||||
1
|
||||
|
||||
query T
|
||||
SELECT a.rowid IN (SELECT a2.rowid FROM a a2 WHERE a.rowid>=a2.rowid) FROM a
|
||||
----
|
||||
1
|
||||
1
|
||||
|
||||
query T
|
||||
SELECT EXISTS(SELECT a2.rowid FROM a a2 WHERE a.rowid>=a2.rowid) FROM a
|
||||
----
|
||||
1
|
||||
1
|
||||
|
||||
64
external/duckdb/test/sql/projection/test_scalar_projection.test
vendored
Normal file
64
external/duckdb/test/sql/projection/test_scalar_projection.test
vendored
Normal file
@@ -0,0 +1,64 @@
|
||||
# name: test/sql/projection/test_scalar_projection.test
|
||||
# description: Test scalar queries
|
||||
# group: [projection]
|
||||
|
||||
statement ok
|
||||
PRAGMA enable_verification
|
||||
|
||||
query I
|
||||
SELECT 42
|
||||
----
|
||||
42
|
||||
|
||||
query I
|
||||
SELECT 42 + 1
|
||||
----
|
||||
43
|
||||
|
||||
query II
|
||||
SELECT 2 * (42 + 1), 35 - 2
|
||||
----
|
||||
86 33
|
||||
|
||||
query T
|
||||
SELECT 'hello'
|
||||
----
|
||||
hello
|
||||
|
||||
query I
|
||||
SELECT cast('3' AS INTEGER)
|
||||
----
|
||||
3
|
||||
|
||||
query T
|
||||
SELECT cast(3 AS VARCHAR)
|
||||
----
|
||||
3
|
||||
|
||||
query I
|
||||
SELECT CASE WHEN 43 > 33 THEN 43 ELSE 33 END;
|
||||
----
|
||||
43
|
||||
|
||||
query II
|
||||
SELECT 1 AS a, a * 2
|
||||
----
|
||||
1 2
|
||||
|
||||
# query without selection list
|
||||
statement error
|
||||
SELECT
|
||||
----
|
||||
Parser Error: SELECT clause without selection list
|
||||
|
||||
statement error
|
||||
SELECT FROM (SELECT 42) v1
|
||||
----
|
||||
Parser Error: SELECT clause without selection list
|
||||
|
||||
# Scalar query from SQLLogicTests
|
||||
query I
|
||||
SELECT + CASE WHEN NOT + 84 NOT BETWEEN - 78 + 98 * 51 AND - ( ( - 28 ) ) * COUNT ( * ) + + - 65 THEN NULL ELSE 16 // + 34 + + - 98 END // + 70 - ( - - CASE - COALESCE ( + 73, + - 66 * - 89 * - 72 ) WHEN COUNT ( * ) // + 4 * CAST ( - - 18 AS INTEGER ) + + + COUNT ( * ) - - 88 THEN NULL WHEN 92 THEN NULL ELSE COUNT ( * ) END ) AS col0
|
||||
----
|
||||
-2
|
||||
|
||||
78
external/duckdb/test/sql/projection/test_simple_projection.test
vendored
Normal file
78
external/duckdb/test/sql/projection/test_simple_projection.test
vendored
Normal file
@@ -0,0 +1,78 @@
|
||||
# name: test/sql/projection/test_simple_projection.test
|
||||
# description: Test simple projection statements
|
||||
# group: [projection]
|
||||
|
||||
statement ok
|
||||
PRAGMA enable_verification
|
||||
|
||||
# create table
|
||||
statement ok
|
||||
CREATE TABLE a (i integer, j integer);
|
||||
|
||||
# scan empty table
|
||||
query II
|
||||
SELECT i, j FROM a;
|
||||
----
|
||||
|
||||
query II
|
||||
SELECT * FROM a;
|
||||
----
|
||||
|
||||
# insertion: 1 affected row
|
||||
query I
|
||||
INSERT INTO a VALUES (42, 84);
|
||||
----
|
||||
1
|
||||
|
||||
query II
|
||||
SELECT * FROM a;
|
||||
----
|
||||
42 84
|
||||
|
||||
# name alias
|
||||
query II
|
||||
SELECT x, y FROM a i1(x, y);
|
||||
----
|
||||
42 84
|
||||
|
||||
# multiple insertions
|
||||
statement ok
|
||||
CREATE TABLE test (a INTEGER, b INTEGER);
|
||||
|
||||
statement ok
|
||||
INSERT INTO test VALUES (11, 22), (12, 21), (13, 22)
|
||||
|
||||
# multiple projections
|
||||
query II
|
||||
SELECT a, b FROM test;
|
||||
----
|
||||
11 22
|
||||
12 21
|
||||
13 22
|
||||
|
||||
# basic expressions and filters
|
||||
query II
|
||||
SELECT a + 2, b FROM test WHERE a = 11;
|
||||
----
|
||||
13 22
|
||||
|
||||
query II
|
||||
SELECT a + 2, b FROM test WHERE a = 12;
|
||||
----
|
||||
14 21
|
||||
|
||||
# casts
|
||||
query T
|
||||
SELECT cast(a AS VARCHAR) FROM test;
|
||||
----
|
||||
11
|
||||
12
|
||||
13
|
||||
|
||||
query I
|
||||
SELECT cast(cast(a AS VARCHAR) as INTEGER) FROM test;
|
||||
----
|
||||
11
|
||||
12
|
||||
13
|
||||
|
||||
89
external/duckdb/test/sql/projection/test_table_star.test
vendored
Normal file
89
external/duckdb/test/sql/projection/test_table_star.test
vendored
Normal file
@@ -0,0 +1,89 @@
|
||||
# name: test/sql/projection/test_table_star.test
|
||||
# description: Test table star expressions
|
||||
# group: [projection]
|
||||
|
||||
statement ok
|
||||
PRAGMA enable_verification
|
||||
|
||||
statement ok
|
||||
CREATE TABLE test (a INTEGER, b INTEGER)
|
||||
|
||||
statement ok
|
||||
INSERT INTO test VALUES (11, 22), (12, 21), (13, 22)
|
||||
|
||||
query II
|
||||
SELECT * FROM test
|
||||
----
|
||||
11 22
|
||||
12 21
|
||||
13 22
|
||||
|
||||
query II
|
||||
SELECT test.* FROM test
|
||||
----
|
||||
11 22
|
||||
12 21
|
||||
13 22
|
||||
|
||||
query II
|
||||
SELECT t.* FROM test t
|
||||
----
|
||||
11 22
|
||||
12 21
|
||||
13 22
|
||||
|
||||
statement error
|
||||
SELECT test.* FROM test t
|
||||
----
|
||||
|
||||
statement error
|
||||
SELECT xyz.* FROM test
|
||||
----
|
||||
|
||||
statement error
|
||||
SELECT xyz.*
|
||||
----
|
||||
|
||||
# issue 415
|
||||
statement ok
|
||||
create table r4 (i int, j int)
|
||||
|
||||
statement ok
|
||||
insert into r4 (i, j) values (1,1), (1,2), (1,3), (1,4), (1,5)
|
||||
|
||||
query III
|
||||
select t1.i, t1.j as a, t2.j as b from r4 t1 inner join r4 t2 using(i,j) ORDER BY a
|
||||
----
|
||||
1 1 1
|
||||
1 2 2
|
||||
1 3 3
|
||||
1 4 4
|
||||
1 5 5
|
||||
|
||||
query III
|
||||
select t1.i, t1.j as a, t2.j as b from r4 t1 inner join r4 t2 on t1.i=t2.i and t1.j=t2.j ORDER BY a
|
||||
----
|
||||
1 1 1
|
||||
1 2 2
|
||||
1 3 3
|
||||
1 4 4
|
||||
1 5 5
|
||||
|
||||
query III
|
||||
select t1.*, t2.j b from r4 t1 inner join r4 t2 using(i,j) ORDER BY t1.j
|
||||
----
|
||||
1 1 1
|
||||
1 2 2
|
||||
1 3 3
|
||||
1 4 4
|
||||
1 5 5
|
||||
|
||||
query III
|
||||
select t1.*, t2.j b from r4 t1 inner join r4 t2 on t1.i=t2.i and t1.j=t2.j ORDER BY t1.j
|
||||
----
|
||||
1 1 1
|
||||
1 2 2
|
||||
1 3 3
|
||||
1 4 4
|
||||
1 5 5
|
||||
|
||||
154
external/duckdb/test/sql/projection/test_value_list.test
vendored
Normal file
154
external/duckdb/test/sql/projection/test_value_list.test
vendored
Normal file
@@ -0,0 +1,154 @@
|
||||
# name: test/sql/projection/test_value_list.test
|
||||
# description: Test value list in selection
|
||||
# group: [projection]
|
||||
|
||||
statement ok
|
||||
SET default_null_order='nulls_first';
|
||||
|
||||
statement ok
|
||||
PRAGMA enable_verification
|
||||
|
||||
# value list can be a top-level statement
|
||||
query II
|
||||
(VALUES (1, 3), (2, 4));
|
||||
----
|
||||
1 3
|
||||
2 4
|
||||
|
||||
# nulls first and then integers
|
||||
query II
|
||||
SELECT * FROM (VALUES (NULL, NULL), (3, 4), (3, 7)) v1;
|
||||
----
|
||||
NULL NULL
|
||||
3 4
|
||||
3 7
|
||||
|
||||
# standard value list
|
||||
query III
|
||||
SELECT * FROM (VALUES (1, 2, 3), (1, 2, 3)) v1;
|
||||
----
|
||||
1 2 3
|
||||
1 2 3
|
||||
|
||||
# value list with expressions
|
||||
query III
|
||||
SELECT * FROM (VALUES (1 + 1, 2, 3), (1 + 3, 2, 3)) v1;
|
||||
----
|
||||
2 2 3
|
||||
4 2 3
|
||||
|
||||
# value list with subqueries
|
||||
query III
|
||||
SELECT * FROM (VALUES ((SELECT 42), 2, 3), (1 + 3,2,3)) v1;
|
||||
----
|
||||
42 2 3
|
||||
4 2 3
|
||||
|
||||
# value list in insert
|
||||
statement ok
|
||||
CREATE TABLE test (a INTEGER, b INTEGER);
|
||||
|
||||
statement ok
|
||||
INSERT INTO test VALUES (1, 2), (3, 4);
|
||||
|
||||
# value list with more complicated subqueries
|
||||
query III
|
||||
SELECT * FROM (VALUES ((SELECT MIN(a) FROM test), 2, 3), ((SELECT MAX(b) FROM test), 2, 3)) v1;
|
||||
----
|
||||
1 2 3
|
||||
4 2 3
|
||||
|
||||
# value list with different types
|
||||
statement error
|
||||
SELECT * FROM (VALUES ('hello', 2), (1 + 3, '5'), (DATE '1992-09-20', 3)) v1;
|
||||
----
|
||||
<REGEX>:.*Not implemented Error.*an explicit cast is required.*
|
||||
|
||||
# value list with NULLs
|
||||
query TI
|
||||
SELECT * FROM (VALUES (DATE '1992-09-20', 3), (NULL, NULL)) v1;
|
||||
----
|
||||
1992-09-20 3
|
||||
NULL NULL
|
||||
|
||||
# only NULLs
|
||||
query II
|
||||
SELECT * FROM (VALUES (NULL, NULL)) v1;
|
||||
----
|
||||
NULL NULL
|
||||
|
||||
# nulls first and then integers
|
||||
query II
|
||||
SELECT * FROM (VALUES (NULL, NULL), (3, 4)) v1;
|
||||
----
|
||||
NULL NULL
|
||||
3 4
|
||||
|
||||
query I
|
||||
SELECT * FROM (VALUES (3), ('42')) v1;
|
||||
----
|
||||
3
|
||||
42
|
||||
|
||||
statement error
|
||||
SELECT * FROM (VALUES (3), ('hello')) v1;
|
||||
----
|
||||
<REGEX>:.*Conversion Error.*hello.*
|
||||
|
||||
query I
|
||||
SELECT typeof(x) FROM (VALUES (DATE '1992-01-01'), ('1992-01-01')) v1(x) LIMIT 1;
|
||||
----
|
||||
DATE
|
||||
|
||||
query I
|
||||
SELECT * FROM (VALUES (NULL), ('hello')) v1;
|
||||
----
|
||||
NULL
|
||||
hello
|
||||
|
||||
# unbalanced value list is not allowed
|
||||
statement error
|
||||
SELECT * FROM (VALUES (1, 2, 3), (1,2)) v1;
|
||||
----
|
||||
<REGEX>:.*Parser Error.*lists must all be the same length.*
|
||||
|
||||
# default in value list is not allowed
|
||||
statement error
|
||||
SELECT * FROM (VALUES (DEFAULT, 2, 3), (1,2)) v1;
|
||||
----
|
||||
<REGEX>:.*Parser Error.*lists must all be the same length.*
|
||||
|
||||
# VALUES list for INSERT
|
||||
statement ok
|
||||
CREATE TABLE varchars(v VARCHAR);
|
||||
|
||||
statement ok
|
||||
INSERT INTO varchars VALUES (1), ('hello'), (DEFAULT);
|
||||
|
||||
query T
|
||||
SELECT * FROM varchars ORDER BY 1
|
||||
----
|
||||
NULL
|
||||
1
|
||||
hello
|
||||
|
||||
# too many columns provided
|
||||
statement error
|
||||
INSERT INTO varchars VALUES (1, 2), ('hello', 3), (DEFAULT, DEFAULT);
|
||||
----
|
||||
<REGEX>:.*Binder Error.*table varchars has 1 columns.*
|
||||
|
||||
statement error
|
||||
INSERT INTO varchars (v) VALUES (1, 2), ('hello', 3), (DEFAULT, DEFAULT);
|
||||
----
|
||||
|
||||
statement error
|
||||
INSERT INTO varchars (v) VALUES (1, 2), ('hello'), (DEFAULT, DEFAULT);
|
||||
----
|
||||
<REGEX>:.*Parser Error.*lists must all be the same length.*
|
||||
|
||||
# operation on default not allowed
|
||||
statement error
|
||||
INSERT INTO varchars (v) VALUES (DEFAULT IS NULL);
|
||||
----
|
||||
<REGEX>:.*Binder Error.*not allowed.*
|
||||
Reference in New Issue
Block a user