Changeset: cf17b423e5c4 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/cf17b423e5c4
Added Files:
        sql/test/BugTracker-2024/Tests/7582-ddl-exists.test
Modified Files:
        sql/server/rel_unnest.c
        sql/test/BugTracker-2024/Tests/All
Branch: Aug2024
Log Message:

EXISTS condition in DDL must be inside __at least__ 1 relation. Fixes #7582.


diffs (28 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
@@ -3603,7 +3603,7 @@ rewrite_exists(visitor *v, sql_rel *rel,
                                exp_label(v->sql->sa, le, ++v->sql->label);
                        le = exp_ref(v->sql, le);
 
-                       if (depth == 1 && is_ddl(rel->op)) { /* exists is at a 
ddl statement, it must be inside a relation */
+                       if (depth >= 1 && is_ddl(rel->op)) { /* exists is at a 
ddl statement, it must be inside at least a relation */
                                sq = rel_groupby(v->sql, sq, NULL);
                                sql_subfunc *ea = sql_bind_func(v->sql, "sys", 
is_exists(sf)?"exist":"not_exist", exp_subtype(le), NULL, F_AGGR, true, true);
                                le = rel_groupby_add_aggr(v->sql, sq, 
exp_aggr1(v->sql->sa, le, ea, 0, 0, CARD_AGGR, 0));
diff --git a/sql/test/BugTracker-2024/Tests/7582-ddl-exists.test 
b/sql/test/BugTracker-2024/Tests/7582-ddl-exists.test
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2024/Tests/7582-ddl-exists.test
@@ -0,0 +1,3 @@
+statement ok
+CREATE OR REPLACE FUNCTION test () RETURNS boolean
+BEGIN RETURN CASE WHEN EXISTS (SELECT id FROM sys._tables) THEN TRUE ELSE 
FALSE END; END;
diff --git a/sql/test/BugTracker-2024/Tests/All 
b/sql/test/BugTracker-2024/Tests/All
--- a/sql/test/BugTracker-2024/Tests/All
+++ b/sql/test/BugTracker-2024/Tests/All
@@ -91,3 +91,4 @@ 7572-max-length-changes
 7570-timestamp-str
 7574-startswith-bug
 7580-date-diff
+7582-ddl-exists
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to