Changeset: 835da2f0a020 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/835da2f0a020
Added Files:
        sql/test/BugTracker-2026/Tests/7865-unnest-cte-crash.test
Modified Files:
        sql/server/rel_unnest.c
        sql/test/BugTracker-2026/Tests/All
Branch: Dec2025
Log Message:

fixed issue unnesting recursive cte with except on base side, see issue #7865


diffs (44 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
@@ -1737,6 +1737,8 @@ push_up_munion(mvc *sql, sql_rel *rel, l
                        if (rec) {
                                sql_rel *sl = rlist->h->data;
                                set_has_freevar(sl);
+                               if (!is_simple_project(sl->op))
+                                       sl = rel_inplace_project(sql->sa, sl, 
NULL, rel_projections(sql, sl, NULL, 1, 1));
                                list *exps = exps_copy(sql, ad);
                                for(node *n = exps->h; n; n = n->next) {
                                        sql_exp *e = n->data;
diff --git a/sql/test/BugTracker-2026/Tests/7865-unnest-cte-crash.test 
b/sql/test/BugTracker-2026/Tests/7865-unnest-cte-crash.test
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2026/Tests/7865-unnest-cte-crash.test
@@ -0,0 +1,17 @@
+query I
+SELECT 1
+FROM (SELECT 1) as x(x)
+WHERE x IN
+(
+    WITH RECURSIVE t(row_number) AS
+    (
+        SELECT 1
+        EXCEPT
+        SELECT 2
+        UNION
+        SELECT 1 AS x WHERE EXISTS (SELECT * FROM t WHERE x = x)
+    )
+    SELECT x FROM t
+)
+----
+1
diff --git a/sql/test/BugTracker-2026/Tests/All 
b/sql/test/BugTracker-2026/Tests/All
--- a/sql/test/BugTracker-2026/Tests/All
+++ b/sql/test/BugTracker-2026/Tests/All
@@ -59,4 +59,5 @@ KNOWNFAIL?7774-insert-into-renamed-table
 7855-ntile
 7856-crash-exp-match
 7857-rollup-crash
-7862-rel_has_freevar-crash
+KNOWNFAIL?7862-rel_has_freevar-crash
+7865-unnest-cte-crash
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to