Changeset: 4ce07d8ca4bd for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=4ce07d8ca4bd Added Files: sql/test/subquery/Tests/subquery7.sql sql/test/subquery/Tests/subquery7.stable.err sql/test/subquery/Tests/subquery7.stable.out sql/test/subquery/Tests/subquery8.sql sql/test/subquery/Tests/subquery8.stable.err sql/test/subquery/Tests/subquery8.stable.out Modified Files: sql/server/rel_unnest.c sql/test/subquery/Tests/All Branch: monetdbe-proxy Log Message:
Also check for free variables in non-rel-containing expressions. diffs (180 lines): diff --git a/sql/server/rel_unnest.c b/sql/server/rel_unnest.c --- a/sql/server/rel_unnest.c +++ b/sql/server/rel_unnest.c @@ -2987,25 +2987,25 @@ rewrite_ifthenelse(visitor *v, sql_rel * sql_rel *lsq = NULL, *rsq = NULL, *usq = NULL; if (exp_has_rel(then_exp)) { - exp_set_freevar(v->sql, then_exp, lsq); lsq = exp_rel_get_rel(v->sql->sa, then_exp); then_exp = exp_rel_update_exp(v->sql, then_exp); if (is_single(lsq)) single = true; reset_single(lsq); } + exp_set_freevar(v->sql, then_exp, lsq); lsq = rel_project(v->sql->sa, lsq, append(sa_list(v->sql->sa), then_exp)); exp_set_freevar(v->sql, cond, lsq); set_processed(lsq); lsq = rel_select(v->sql->sa, lsq, cond); if (exp_has_rel(else_exp)) { - exp_set_freevar(v->sql, else_exp, rsq); rsq = exp_rel_get_rel(v->sql->sa, else_exp); else_exp = exp_rel_update_exp(v->sql, else_exp); if (is_single(rsq)) single = true; reset_single(rsq); } + exp_set_freevar(v->sql, else_exp, rsq); rsq = rel_project(v->sql->sa, rsq, append(sa_list(v->sql->sa), else_exp)); cond = exp_copy(v->sql, cond); exp_set_freevar(v->sql, cond, rsq); diff --git a/sql/test/subquery/Tests/All b/sql/test/subquery/Tests/All --- a/sql/test/subquery/Tests/All +++ b/sql/test/subquery/Tests/All @@ -10,3 +10,5 @@ subquery3 subquery4 subquery5 subquery6 +subquery7 +subquery8 diff --git a/sql/test/subquery/Tests/subquery7.sql b/sql/test/subquery/Tests/subquery7.sql new file mode 100644 --- /dev/null +++ b/sql/test/subquery/Tests/subquery7.sql @@ -0,0 +1,15 @@ +START TRANSACTION; +CREATE TABLE foo (i INT, s STRING); +CREATE TABLE bar (i INT, s STRING); + +SELECT + CASE + WHEN f.i % 2 THEN + f.s + ELSE + (SELECT b.s FROM bar b WHERE b.i = f.i) + END + FROM foo f; + + +ROLLBACK; diff --git a/sql/test/subquery/Tests/subquery7.stable.err b/sql/test/subquery/Tests/subquery7.stable.err new file mode 100644 --- /dev/null +++ b/sql/test/subquery/Tests/subquery7.stable.err @@ -0,0 +1,12 @@ +stderr of test 'subquery7` in directory 'sql/test/subquery` itself: + + +# 10:45:14 > +# 10:45:14 > "mclient" "-lsql" "-ftest" "-tnone" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-9121" "--port=39316" +# 10:45:14 > + + +# 10:45:14 > +# 10:45:14 > "Done." +# 10:45:14 > + diff --git a/sql/test/subquery/Tests/subquery7.stable.out b/sql/test/subquery/Tests/subquery7.stable.out new file mode 100644 --- /dev/null +++ b/sql/test/subquery/Tests/subquery7.stable.out @@ -0,0 +1,28 @@ +stdout of test 'subquery7` in directory 'sql/test/subquery` itself: + + +# 10:45:14 > +# 10:45:14 > "mclient" "-lsql" "-ftest" "-tnone" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-9121" "--port=39316" +# 10:45:14 > + +#START TRANSACTION; +#CREATE TABLE foo (i INT, s STRING); +#CREATE TABLE bar (i INT, s STRING); +#SELECT +# CASE +# WHEN f.i % 2 THEN +# f.s +# ELSE +# (SELECT b.s FROM bar b WHERE b.i = f.i) +# END +# FROM foo f; +% .%2 # table_name +% %2 # name +% clob # type +% 0 # length +#ROLLBACK; + +# 10:45:14 > +# 10:45:14 > "Done." +# 10:45:14 > + diff --git a/sql/test/subquery/Tests/subquery8.sql b/sql/test/subquery/Tests/subquery8.sql new file mode 100644 --- /dev/null +++ b/sql/test/subquery/Tests/subquery8.sql @@ -0,0 +1,15 @@ +START TRANSACTION; +CREATE TABLE foo (i INT, s STRING); +CREATE TABLE bar (i INT, s STRING); + +SELECT + CASE + WHEN f.i % 2 THEN + (SELECT b.s FROM bar b WHERE b.i = f.i) + ELSE + f.s + END + FROM foo f; + + +ROLLBACK; diff --git a/sql/test/subquery/Tests/subquery8.stable.err b/sql/test/subquery/Tests/subquery8.stable.err new file mode 100644 --- /dev/null +++ b/sql/test/subquery/Tests/subquery8.stable.err @@ -0,0 +1,12 @@ +stderr of test 'subquery8` in directory 'sql/test/subquery` itself: + + +# 10:45:14 > +# 10:45:14 > "mclient" "-lsql" "-ftest" "-tnone" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-9121" "--port=39316" +# 10:45:14 > + + +# 10:45:14 > +# 10:45:14 > "Done." +# 10:45:14 > + diff --git a/sql/test/subquery/Tests/subquery8.stable.out b/sql/test/subquery/Tests/subquery8.stable.out new file mode 100644 --- /dev/null +++ b/sql/test/subquery/Tests/subquery8.stable.out @@ -0,0 +1,28 @@ +stdout of test 'subquery8` in directory 'sql/test/subquery` itself: + + +# 10:45:14 > +# 10:45:14 > "mclient" "-lsql" "-ftest" "-tnone" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-9121" "--port=39316" +# 10:45:14 > + +#START TRANSACTION; +#CREATE TABLE foo (i INT, s STRING); +#CREATE TABLE bar (i INT, s STRING); +#SELECT +# CASE +# WHEN f.i % 2 THEN +# (SELECT b.s FROM bar b WHERE b.i = f.i) +# ELSE +# f.s +# END +# FROM foo f; +% .%2 # table_name +% %2 # name +% clob # type +% 0 # length +#ROLLBACK; + +# 10:45:14 > +# 10:45:14 > "Done." +# 10:45:14 > + _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list