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,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.*

View 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

View 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
----

View 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

View 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

View 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.*

View 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.*

View 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]

View 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

File diff suppressed because one or more lines are too long

View 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

View 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

View 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

View 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

View 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

View 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.*