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

Reply via email to