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