Files
email-tracker/external/duckdb/test/sql/parser/columns_aliases.test
2025-10-24 19:21:19 -05:00

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