# 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