Changeset: ae2d05fece48 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ae2d05fece48
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: Oct2020
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
@@ -2848,25 +2848,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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list