Changeset: 7d37c99df22b for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/7d37c99df22b
Modified Files:
        sql/include/sql_relation.h
        sql/server/rel_dump.c
        sql/server/rel_unnest.c
        sql/test/BugTracker-2026/Tests/7873-push_up_join-assertion-failure.test
        sql/test/BugTracker-2026/Tests/7874-rel2bin_join-assertion-failure.test
        sql/test/BugTracker-2026/Tests/All
Branch: Dec2025
Log Message:

fixes for issues #7873 and #7874
in case of multiple selects push_up correctly pushes these up but _rel_unnest
didn't go down until the next dependend operator.


diffs (132 lines):

diff --git a/sql/include/sql_relation.h b/sql/include/sql_relation.h
--- a/sql/include/sql_relation.h
+++ b/sql/include/sql_relation.h
@@ -278,6 +278,7 @@ typedef enum operator_type {
 #define reset_single(rel)      (rel)->single = 0
 #define set_recursive(rel)     (rel)->recursive = 1
 #define is_recursive(rel)      ((rel)->recursive)
+#define set_dynamic(rel)       (rel)->dynamic = 1
 #define is_dynamic(rel)        ((rel)->dynamic)
 
 #define is_freevar(e)          ((e)->freevar)
diff --git a/sql/server/rel_dump.c b/sql/server/rel_dump.c
--- a/sql/server/rel_dump.c
+++ b/sql/server/rel_dump.c
@@ -153,6 +153,7 @@ exp_print(mvc *sql, stream *fout, sql_ex
        allocator_state ta_state = ma_open(ta);
        // mnstr_printf(fout, "%p ", e);
        if (mvc_debug_on(sql, 4) && e->alias.label < 0)
+       //if (sql->show_details && e->alias.label < 0)
                mnstr_printf(fout, "%d: ", e->alias.label);
        switch(e->type) {
        case e_psm: {
@@ -287,6 +288,7 @@ exp_print(mvc *sql, stream *fout, sql_ex
        case e_column: {
                if (is_freevar(e))
                        mnstr_printf(fout, "!!!FREE!!! ");
+               //if (sql->show_details && e->nid)
                if (mvc_debug_on(sql, 4) && e->nid)
                        mnstr_printf(fout, "<%d", e->nid);
                if (e->l)
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
@@ -1477,8 +1477,7 @@ push_up_join(mvc *sql, sql_rel *rel, lis
                                int single = is_single(j);
 
                                if (attr && exps_uses_exp(rel->exps, 
attr->h->data)) {
-                                       if (!rel_is_ref(rel) && !rel_is_ref(j) 
&&
-                                               rel->op == op_left && j->op == 
op_left) {
+                                       if (!rel_is_ref(rel) && !rel_is_ref(j) 
&& j->op == op_left) {
 
                                                j->l = rel->l;
                                                rel->l = jl;
@@ -2199,9 +2198,10 @@ _rel_unnest(visitor *v, sql_rel *rel)
            (is_join(rel->op) && l && is_select(l->op) && 
exps_have_freevar(v->sql, l->exps) && !rel_is_ref(l)) ||
            (is_join(rel->op) && r && is_select(r->op) && 
exps_have_freevar(v->sql, r->exps) && !rel_is_ref(r)))) {
                rel = push_up_select2(v, rel);
-               if (rel && is_select(rel->op)) {
-                       sql_rel *l = rel->l;
-                       if (is_dependent(l)) {
+               sql_rel *l = rel;
+               while (l && is_select(l->op)) {
+                       l = l->l;
+                       if (l && is_dependent(l)) {
                                rel->l = l = rel_unnest_dependent(v->sql, l);
                                v->changes++;
                        }
diff --git 
a/sql/test/BugTracker-2026/Tests/7873-push_up_join-assertion-failure.test 
b/sql/test/BugTracker-2026/Tests/7873-push_up_join-assertion-failure.test
--- a/sql/test/BugTracker-2026/Tests/7873-push_up_join-assertion-failure.test
+++ b/sql/test/BugTracker-2026/Tests/7873-push_up_join-assertion-failure.test
@@ -155,6 +155,11 @@ where EXISTS (
              OR false))
     limit 107)
 ----
+102
+102
+102
+102
+102
 
 statement ok
 DROP TABLE orders
diff --git 
a/sql/test/BugTracker-2026/Tests/7874-rel2bin_join-assertion-failure.test 
b/sql/test/BugTracker-2026/Tests/7874-rel2bin_join-assertion-failure.test
--- a/sql/test/BugTracker-2026/Tests/7874-rel2bin_join-assertion-failure.test
+++ b/sql/test/BugTracker-2026/Tests/7874-rel2bin_join-assertion-failure.test
@@ -81,6 +81,7 @@ INSERT INTO orders VALUES
 -- query triggers assertion failure in rel2bin_join (be=0x7ff0701a61b0, 
rel=0x7ff07015b800, refs=0x7ff07023cf60) at sql/backends/monet5/rel_bin.c:3463
 query TT rowsort
 select
+  distinct
   subq_0.c0,
   subq_3.c0
 from
@@ -137,7 +138,36 @@ from
           where ref_4.user_id < ref_4.id)
     ) as subq_3
 ----
-
+alice
+NULL
+alice
+alice
+alice
+bob
+alice
+carol
+alice
+dave
+bob
+NULL
+bob
+alice
+bob
+bob
+bob
+carol
+bob
+dave
+dave
+NULL
+dave
+alice
+dave
+bob
+dave
+carol
+dave
+dave
 
 statement ok
 DROP TABLE orders
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
@@ -63,5 +63,5 @@ KNOWNFAIL?7774-insert-into-renamed-table
 7865-unnest-cte-crash
 7867-push-groupby-down
 7872-exp-type-check-failed
-KNOWNFAIL?7873-push_up_join-assertion-failure
-KNOWNFAIL?7874-rel2bin_join-assertion-failure
+7873-push_up_join-assertion-failure
+7874-rel2bin_join-assertion-failure
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to