Skip to content

Commit ed70b4a

Browse files
committed
don't throw an exception for unsupported statements
1 parent 5dece21 commit ed70b4a

File tree

4 files changed

+86
-16
lines changed

4 files changed

+86
-16
lines changed

src/parse_tables.cpp

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -155,8 +155,6 @@ static void ExtractTablesFromSQL(const std::string &sql, std::vector<TableRefRes
155155
if (select_stmt.node) {
156156
ExtractTablesFromQueryNode(*select_stmt.node, results);
157157
}
158-
} else {
159-
throw InvalidInputException("parse_tables only supports SELECT statements");
160158
}
161159
}
162160
}
@@ -225,9 +223,7 @@ static void ParseTablesScalarFunction(DataChunk &args, ExpressionState &state, V
225223
auto query_string = query.GetString();
226224
std::vector<TableRefResult> parsed_tables;
227225
if (exclude_cte) {
228-
std::unordered_set<std::string> excluded_types;
229-
excluded_types.insert("cte");
230-
excluded_types.insert("from_cte");
226+
std::unordered_set<std::string> excluded_types = {"cte", "from_cte"};
231227
ExtractTablesFromSQL(query_string, parsed_tables, excluded_types);
232228
} else {
233229
ExtractTablesFromSQL(query_string, parsed_tables);

test/sql/parse_tools/scalar_functions/parse_table_names.test

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,4 +32,43 @@ SELECT parse_table_names('with cte_test as(select 1) select * from MyTable, cte_
3232
query I
3333
SELECT parse_table_names('with cte_test as(select 1) select * from MyTable, cte_test', false);
3434
----
35-
[cte_test, MyTable, cte_test]
35+
[cte_test, MyTable, cte_test]
36+
37+
# Unsupported
38+
# -----------
39+
40+
# INSERT INTO ... SELECT
41+
query I
42+
select parse_table_names('INSERT INTO m SELECT * FROM n;');
43+
----
44+
[]
45+
46+
# UPDATE with FROM
47+
query I
48+
select parse_table_names('UPDATE o SET x = p.x FROM p WHERE o.id = p.id;');
49+
----
50+
[]
51+
52+
# DELETE with USING
53+
query I
54+
select parse_table_names('DELETE FROM q USING r WHERE q.id = r.id;');
55+
----
56+
[]
57+
58+
# CREATE VIEW AS SELECT
59+
query I
60+
select parse_table_names('CREATE VIEW v AS SELECT * FROM s JOIN t ON s.id = t.id;');
61+
----
62+
[]
63+
64+
# CREATE TABLE AS SELECT
65+
query I
66+
select parse_table_names('CREATE TABLE u AS SELECT * FROM v;');
67+
----
68+
[]
69+
70+
# no tables
71+
query I
72+
select parse_table_names('SELECT 1;');
73+
----
74+
[]

test/sql/parse_tools/scalar_functions/parse_tables.test

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,3 +28,43 @@ query I
2828
SELECT list_filter(parse_tables('select * from MyTable t inner join Other o on o.id = t.id'),t -> t.context = 'from') AS filtered_tables;
2929
----
3030
[{'schema': main, 'table': MyTable, 'context': from}]
31+
32+
33+
# Unsupported
34+
# -----------
35+
36+
# INSERT INTO ... SELECT
37+
query I
38+
select parse_tables('INSERT INTO m SELECT * FROM n;');
39+
----
40+
[]
41+
42+
# UPDATE with FROM
43+
query I
44+
select parse_tables('UPDATE o SET x = p.x FROM p WHERE o.id = p.id;');
45+
----
46+
[]
47+
48+
# DELETE with USING
49+
query I
50+
select parse_tables('DELETE FROM q USING r WHERE q.id = r.id;');
51+
----
52+
[]
53+
54+
# CREATE VIEW AS SELECT
55+
query I
56+
select parse_tables('CREATE VIEW v AS SELECT * FROM s JOIN t ON s.id = t.id;');
57+
----
58+
[]
59+
60+
# CREATE TABLE AS SELECT
61+
query I
62+
select parse_tables('CREATE TABLE u AS SELECT * FROM v;');
63+
----
64+
[]
65+
66+
# no tables
67+
query I
68+
select parse_tables('SELECT 1;');
69+
----
70+
[]

test/sql/parse_tools/table_functions/parse_tables.test

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -81,34 +81,29 @@ main k from
8181
main l from
8282

8383
# INSERT INTO ... SELECT
84-
statement error
84+
query III
8585
SELECT * FROM parse_tables('INSERT INTO m SELECT * FROM n;');
8686
----
87-
parse_tables only supports SELECT statements
8887

8988
# UPDATE with FROM
90-
statement error
89+
query III
9190
SELECT * FROM parse_tables('UPDATE o SET x = p.x FROM p WHERE o.id = p.id;');
9291
----
93-
parse_tables only supports SELECT statements
9492

9593
# DELETE with USING
96-
statement error
94+
query III
9795
SELECT * FROM parse_tables('DELETE FROM q USING r WHERE q.id = r.id;');
9896
----
99-
parse_tables only supports SELECT statements
10097

10198
# CREATE VIEW AS SELECT
102-
statement error
99+
query III
103100
SELECT * FROM parse_tables('CREATE VIEW v AS SELECT * FROM s JOIN t ON s.id = t.id;');
104101
----
105-
parse_tables only supports SELECT statements
106102

107103
# CREATE TABLE AS SELECT
108-
statement error
104+
query III
109105
SELECT * FROM parse_tables('CREATE TABLE u AS SELECT * FROM v;');
110106
----
111-
parse_tables only supports SELECT statements
112107

113108
# no tables
114109
query III

0 commit comments

Comments
 (0)