Skip to content

Commit 6c81ffc

Browse files
committed
add tests
1 parent 1178205 commit 6c81ffc

File tree

1 file changed

+107
-8
lines changed

1 file changed

+107
-8
lines changed

test/sql/parse_tables.test

Lines changed: 107 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,119 @@
44

55
# Before we load the extension, this will fail
66
statement error
7-
SELECT parse_tables('Sam');
7+
SELECT parse_tables('select 1');
88
----
99
Catalog Error: Scalar Function with name parse_tables does not exist!
1010

1111
# Require statement will ensure this test is run with this extension loaded
1212
require 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

Comments
 (0)