Changeset: 496ecd256d8e for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=496ecd256d8e
Modified Files:
sql/server/rel_select.c
sql/test/subquery/Tests/subquery4.stable.err
sql/test/subquery/Tests/subquery4.stable.out
Branch: linear-hashing
Log Message:
Disallow subqueries inside call statements
diffs (60 lines):
diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c
--- a/sql/server/rel_select.c
+++ b/sql/server/rel_select.c
@@ -2358,6 +2358,8 @@ rel_logical_value_exp(sql_query *query,
case SQL_UNION:
case SQL_EXCEPT:
case SQL_INTERSECT: {
+ if (is_psm_call(f))
+ return sql_error(sql, 02, SQLSTATE(42000) "CALL:
subqueries not allowed inside CALL statements");
if (rel && *rel)
query_push_outer(query, *rel, f);
sql_rel *sq = rel_setquery(query, sc);
@@ -5069,6 +5071,8 @@ rel_value_exp2(sql_query *query, sql_rel
case SQL_SELECT: {
sql_rel *r = NULL;
+ if (is_psm_call(f))
+ return sql_error(sql, 02, SQLSTATE(42000) "CALL:
subqueries not allowed inside CALL statements");
if (se->token == SQL_WITH) {
r = rel_with_query(query, se);
} else if (se->token == SQL_VALUES) {
diff --git a/sql/test/subquery/Tests/subquery4.stable.err
b/sql/test/subquery/Tests/subquery4.stable.err
--- a/sql/test/subquery/Tests/subquery4.stable.err
+++ b/sql/test/subquery/Tests/subquery4.stable.err
@@ -132,6 +132,18 @@ MAPI = (monetdb) /var/tmp/mtest-60261/.
QUERY = CALL crashme(COUNT(1) OVER ()); --error, not allowed
ERROR = !COUNT: window function 'count' not allowed in CALL
CODE = 42000
+MAPI = (monetdb) /var/tmp/mtest-92133/.s.monetdb.34612
+QUERY = CALL crashme((SELECT COUNT(1)));
+ERROR = !CALL: subqueries not allowed inside CALL statements
+CODE = 42000
+MAPI = (monetdb) /var/tmp/mtest-92133/.s.monetdb.34612
+QUERY = CALL crashme((SELECT COUNT(1) OVER ())); --should be allowed, it
returns exactly one row
+ERROR = !CALL: subqueries not allowed inside CALL statements
+CODE = 42000
+MAPI = (monetdb) /var/tmp/mtest-92133/.s.monetdb.34612
+QUERY = CALL crashme((SELECT 1 UNION ALL SELECT 2)); --error, returns more
than one row
+ERROR = !CALL: subqueries not allowed inside CALL statements
+CODE = 42000
# 15:41:18 >
# 15:41:18 > "Done."
diff --git a/sql/test/subquery/Tests/subquery4.stable.out
b/sql/test/subquery/Tests/subquery4.stable.out
--- a/sql/test/subquery/Tests/subquery4.stable.out
+++ b/sql/test/subquery/Tests/subquery4.stable.out
@@ -83,6 +83,13 @@ stdout of test 'subquery4` in directory
% tinyint # type
% 1 # length
[ 1 ]
+#SELECT 1 FROM evilfunction((SELECT MAX(1) OVER () UNION ALL SELECT 1));
--error, more than one row returned by a subquery used as an expression
+% . # table_name
+% single_value # name
+% tinyint # type
+% 1 # length
+[ 1 ]
+[ 1 ]
#SELECT i2.i FROM evilfunction((SELECT MAX(1) OVER ())) as i2(i);
% .i2 # table_name
% i # name
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list