44
55# Before we load the extension, this will fail
66statement error
7- SELECT parse_tables('Sam ');
7+ SELECT parse_tables('select 1 ');
88----
99Catalog Error: Scalar Function with name parse_tables does not exist!
1010
1111# Require statement will ensure this test is run with this extension loaded
1212require parse_tables
1313
14- # Confirm the extension works
15- query I
16- SELECT parse_tables('Sam ');
14+ # simple FROM
15+ query III
16+ SELECT * FROM parse_tables('SELECT * FROM my_table; ');
1717----
18- ParseTables Sam 🐥
18+ main my_table from
1919
20- query I
21- SELECT parse_tables_openssl_version('Michael') ILIKE 'ParseTables Michael, my linked OpenSSL version is OpenSSL%';
20+ # schema-qualified FROM
21+ query III
22+ SELECT * FROM parse_tables('SELECT * FROM my_schema.my_table;');
2223----
23- true
24+ my_schema my_table from
25+
26+ # CTE usage
27+ query III
28+ SELECT * FROM parse_tables('WITH x AS (SELECT * FROM d JOIN e ON d.id = e.id) SELECT * FROM x;');
29+ ----
30+ (empty) x cte
31+ main d from
32+ main e join_right
33+ main x from_cte
34+
35+ # JOIN between two tables
36+ query III
37+ SELECT * FROM parse_tables('SELECT * FROM a JOIN b ON a.id = b.id;');
38+ ----
39+ main a from
40+ main b join_right
41+
42+ # chained JOINs
43+ query III
44+ SELECT * FROM parse_tables('SELECT * FROM a JOIN b ON a.id = b.id JOIN c ON b.id = c.id;');
45+ ----
46+ main a from
47+ main b join_right
48+ main c join_right
49+
50+ # subquery and join
51+ query III
52+ SELECT * FROM parse_tables('SELECT * FROM (SELECT * FROM f) sub JOIN g ON sub.id = g.id;');
53+ ----
54+ main f from
55+ main g join_right
56+
57+ # mixed qualified and unqualified
58+ query III
59+ SELECT * FROM parse_tables('SELECT * FROM h JOIN schema1.i ON h.id = i.id;');
60+ ----
61+ main h from
62+ schema1 i join_right
63+
64+ # duplicate references
65+ query III
66+ SELECT * FROM parse_tables('SELECT * FROM j JOIN j ON j.id = j.id;');
67+ ----
68+ main j from
69+ main j join_right
70+
71+ # deeply nested subqueries
72+ query III
73+ SELECT * FROM parse_tables($$
74+ SELECT * FROM (
75+ SELECT * FROM (SELECT * FROM k) inner1
76+ JOIN (SELECT * FROM l) inner2 ON inner1.id = inner2.id
77+ ) final;
78+ $$);
79+ ----
80+ main k from
81+ main l from
82+
83+ # INSERT INTO ... SELECT
84+ statement error
85+ SELECT * FROM parse_tables('INSERT INTO m SELECT * FROM n;');
86+ ----
87+ parse_tables only supports SELECT statements
88+
89+ # UPDATE with FROM
90+ statement error
91+ SELECT * FROM parse_tables('UPDATE o SET x = p.x FROM p WHERE o.id = p.id;');
92+ ----
93+ parse_tables only supports SELECT statements
94+
95+ # DELETE with USING
96+ statement error
97+ SELECT * FROM parse_tables('DELETE FROM q USING r WHERE q.id = r.id;');
98+ ----
99+ parse_tables only supports SELECT statements
100+
101+ # CREATE VIEW AS SELECT
102+ statement error
103+ SELECT * FROM parse_tables('CREATE VIEW v AS SELECT * FROM s JOIN t ON s.id = t.id;');
104+ ----
105+ parse_tables only supports SELECT statements
106+
107+ # CREATE TABLE AS SELECT
108+ statement error
109+ SELECT * FROM parse_tables('CREATE TABLE u AS SELECT * FROM v;');
110+ ----
111+ parse_tables only supports SELECT statements
112+
113+ # no tables
114+ query III
115+ SELECT * FROM parse_tables('SELECT 1;');
116+ ----
117+
118+ # malformed SQL should error
119+ statement error
120+ SELECT * FROM parse_tables('SELECT * FROM WHERE');
121+ ----
122+ syntax error at or near \"WHERE\"","position":"14","error_subtype":"SYNTAX_ERROR
0 commit comments