Changeset: 13e5946b3f57 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=13e5946b3f57
Added Files:
        sql/test/miscellaneous/Tests/table_udf_missing_var.py
        sql/test/miscellaneous/Tests/table_udf_missing_var.stable.err
        sql/test/miscellaneous/Tests/table_udf_missing_var.stable.out
Modified Files:
        sql/backends/monet5/rel_bin.c
        sql/test/miscellaneous/Tests/All
Branch: Jun2020
Log Message:

Remove assertion on rel2bin_table because a table returning function may not be 
well defined, so we don't have to crash the server, just throw the error


diffs (111 lines):

diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -1812,10 +1812,8 @@ rel2bin_table(backend *be, sql_rel *rel,
                        }
                } else {
                        psub = exp_bin(be, op, sub, NULL, NULL, NULL, NULL, 
NULL); /* table function */
-                       if (!psub) { 
-                               assert(sql->session->status == -10); /* Stack 
overflow errors shouldn't terminate the server */
+                       if (!psub)
                                return NULL;
-                       }
                }
                l = sa_list(sql->sa);
                if (f->func->res) {
diff --git a/sql/test/miscellaneous/Tests/All b/sql/test/miscellaneous/Tests/All
--- a/sql/test/miscellaneous/Tests/All
+++ b/sql/test/miscellaneous/Tests/All
@@ -13,3 +13,4 @@ select_groupby
 groupings
 HAVE_PYMONETDB?pk_fk_stress
 deallocate
+table_udf_missing_var
diff --git a/sql/test/miscellaneous/Tests/table_udf_missing_var.py 
b/sql/test/miscellaneous/Tests/table_udf_missing_var.py
new file mode 100644
--- /dev/null
+++ b/sql/test/miscellaneous/Tests/table_udf_missing_var.py
@@ -0,0 +1,25 @@
+import sys
+try:
+    from MonetDBtesting import process
+except ImportError:
+    import process
+
+def client(input):
+    c = process.client('sql', stdin = process.PIPE, stdout = process.PIPE, 
stderr = process.PIPE)
+    out, err = c.communicate(input)
+    sys.stdout.write(out)
+    sys.stderr.write(err)
+
+client('''
+declare myvar int;
+create function myfunc() returns table (x int) begin return select myvar; end;
+create function myfunc2() returns int begin return myvar; end;
+select * from myfunc();
+select myfunc2();
+''')
+client('''
+select * from myfunc(); --error, myvar doesn\'t exist
+select myfunc2(); --error, myvar doesn\'t exist
+drop function myfunc();
+drop function myfunc2();
+''')
diff --git a/sql/test/miscellaneous/Tests/table_udf_missing_var.stable.err 
b/sql/test/miscellaneous/Tests/table_udf_missing_var.stable.err
new file mode 100644
--- /dev/null
+++ b/sql/test/miscellaneous/Tests/table_udf_missing_var.stable.err
@@ -0,0 +1,20 @@
+stderr of test 'table_udf_missing_var` in directory 'sql/test/miscellaneous` 
itself:
+
+
+# 12:13:31 >  
+# 12:13:31 >  "/usr/bin/python3" "table_udf_missing_var.py" 
"table_udf_missing_var"
+# 12:13:31 >  
+
+MAPI  = (monetdb) /var/tmp/mtest-89042/.s.monetdb.35955
+QUERY = select * from myfunc(); --error, myvar doesn't exist
+ERROR = !SELECT: identifier 'myvar' unknown
+CODE  = 42000
+MAPI  = (monetdb) /var/tmp/mtest-89327/.s.monetdb.31365
+QUERY = select myfunc2(); --error, myvar doesn't exist
+ERROR = !SELECT: identifier 'myvar' unknown
+CODE  = 42000
+
+# 12:13:31 >  
+# 12:13:31 >  "Done."
+# 12:13:31 >  
+
diff --git a/sql/test/miscellaneous/Tests/table_udf_missing_var.stable.out 
b/sql/test/miscellaneous/Tests/table_udf_missing_var.stable.out
new file mode 100644
--- /dev/null
+++ b/sql/test/miscellaneous/Tests/table_udf_missing_var.stable.out
@@ -0,0 +1,28 @@
+stdout of test 'table_udf_missing_var` in directory 'sql/test/miscellaneous` 
itself:
+
+
+# 12:13:31 >  
+# 12:13:31 >  "/usr/bin/python3" "table_udf_missing_var.py" 
"table_udf_missing_var"
+# 12:13:31 >  
+
+#declare myvar int;
+#create function myfunc() returns table (x int) begin return select myvar; end;
+#select * from myfunc();
+% .%1 # table_name
+% x # name
+% int # type
+% 1 # length
+[ NULL ]
+#select myfunc2();
+% . # table_name
+% %1 # name
+% int # type
+% 1 # length
+[ NULL ]
+#drop function myfunc();
+#drop function myfunc2();
+
+# 12:13:31 >  
+# 12:13:31 >  "Done."
+# 12:13:31 >  
+
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to