111 lines
2.5 KiB
SQL
111 lines
2.5 KiB
SQL
# 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
|