should be it
This commit is contained in:
110
external/duckdb/test/sql/parser/columns_aliases.test
vendored
Normal file
110
external/duckdb/test/sql/parser/columns_aliases.test
vendored
Normal file
@@ -0,0 +1,110 @@
|
||||
# name: test/sql/parser/columns_aliases.test
|
||||
# description: Test COLUMNS(*) aliases
|
||||
# group: [parser]
|
||||
|
||||
statement ok
|
||||
PRAGMA enable_verification
|
||||
|
||||
statement ok
|
||||
CREATE TABLE integers AS SELECT 42 i, 84 j UNION ALL SELECT 13, 14
|
||||
|
||||
# verify that COLUMNS(*) maintain names
|
||||
query II
|
||||
SELECT i, j FROM (SELECT COLUMNS(*)::VARCHAR FROM integers)
|
||||
----
|
||||
42 84
|
||||
13 14
|
||||
|
||||
query IIII
|
||||
SELECT min_i, min_j, max_i, max_j FROM (SELECT MIN(COLUMNS(*)) AS "min_\0", MAX(COLUMNS(*)) AS "max_\0" FROM integers)
|
||||
----
|
||||
13 14 42 84
|
||||
|
||||
# regex
|
||||
statement ok
|
||||
CREATE TABLE numerics AS SELECT 42 a42, 84 b84, 126 c126, 1000 d
|
||||
|
||||
query III
|
||||
SELECT min_a, min_b, min_c FROM (SELECT MIN(COLUMNS('([a-z])\d+')) AS "min_\1" FROM numerics)
|
||||
----
|
||||
42 84 126
|
||||
|
||||
# out of range - RE2 just swallows it
|
||||
query III
|
||||
SELECT min_, "min__1", "min__2" FROM (SELECT MIN(COLUMNS('([a-z])\d+')) AS "min_\2" FROM numerics)
|
||||
----
|
||||
42 84 126
|
||||
|
||||
# escape
|
||||
query III
|
||||
SELECT "min_\a\", "min_\b\", "min_\c\" FROM (SELECT MIN(COLUMNS('([a-z])\d+')) AS "min_\\\1\\" FROM numerics)
|
||||
----
|
||||
42 84 126
|
||||
|
||||
# multiple captures
|
||||
query III
|
||||
SELECT "a42aa", "b84bb", "c126cc" FROM (SELECT MIN(COLUMNS('([a-z])(\d+)')) AS "\1\2\1\1" FROM numerics)
|
||||
----
|
||||
42 84 126
|
||||
|
||||
# unterminated escape \
|
||||
statement error
|
||||
SELECT MIN(COLUMNS('([a-z])\d+')) AS "\" FROM numerics
|
||||
----
|
||||
Backslashes must either be escaped or followed by a number
|
||||
|
||||
# invalid backslash code \
|
||||
statement error
|
||||
SELECT MIN(COLUMNS('([a-z])\d+')) AS "\a" FROM numerics
|
||||
----
|
||||
Backslashes must either be escaped or followed by a number
|
||||
|
||||
# no regex is supplied - cannot use \1
|
||||
statement error
|
||||
SELECT MIN(COLUMNS(*)) AS "min_\1" FROM numerics
|
||||
----
|
||||
no regex is supplied
|
||||
|
||||
# generated columns
|
||||
statement ok
|
||||
CREATE TABLE tbl (
|
||||
price INTEGER,
|
||||
amount_sold INTEGER,
|
||||
total_profit AS (price * amount_sold),
|
||||
);
|
||||
|
||||
statement ok
|
||||
INSERT INTO tbl VALUES (5,4);
|
||||
|
||||
query III
|
||||
SELECT price, amount_sold, total_profit FROM (SELECT COLUMNS(*)::VARCHAR FROM tbl)
|
||||
----
|
||||
5 4 20
|
||||
|
||||
query III
|
||||
SELECT varchar_price, varchar_amount_sold, varchar_total_profit FROM (SELECT COLUMNS(*)::VARCHAR AS "varchar_\0" FROM tbl)
|
||||
----
|
||||
5 4 20
|
||||
|
||||
# full outer join using
|
||||
statement ok
|
||||
create table a as select 42 as i, 80 as j;
|
||||
|
||||
statement ok
|
||||
create table b as select 43 as i, 84 as k;
|
||||
|
||||
statement ok
|
||||
create table c as select 44 as i, 84 as l;
|
||||
|
||||
query III
|
||||
select i, j, k from (select columns(*)::VARCHAR from a full outer join b using (i)) order by 1;
|
||||
----
|
||||
42 80 NULL
|
||||
43 NULL 84
|
||||
|
||||
query IIII
|
||||
select i, j, k, l from (select columns(*)::VARCHAR from a full outer join b using (i) full outer join c using (i)) order by 1;
|
||||
----
|
||||
42 80 NULL NULL
|
||||
43 NULL 84 NULL
|
||||
44 NULL NULL 84
|
||||
Reference in New Issue
Block a user