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
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to