Changeset: c3c1bab63fec for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/c3c1bab63fec
Modified Files:
        gdk/gdk_join.c
        monetdb5/modules/atoms/str.c
        sql/server/rel_unnest.c
        sql/test/BugTracker-2026/Tests/All
Branch: default
Log Message:

Merge with Dec2025 branch.


diffs (262 lines):

diff --git a/gdk/gdk_join.c b/gdk/gdk_join.c
--- a/gdk/gdk_join.c
+++ b/gdk/gdk_join.c
@@ -3994,11 +3994,10 @@ fetchjoin(BAT **r1p, BAT **r2p, BAT *l, 
        r1->trevsorted = ri.revsorted || e - b <= 1;
        r1->tseqbase = e == b ? 0 : e - b == 1 ? *(const oid *)Tloc(r1, 0) : 
oid_nil;
        bat_iterator_end(&ri);
-       TRC_DEBUG(ALGO, "%s(l=" ALGOBATFMT ","
+       TRC_DEBUG(ALGO, "l=" ALGOBATFMT ","
                  "r=" ALGOBATFMT ",sl=" ALGOOPTBATFMT ","
-                 "sr=" ALGOOPTBATFMT ") %s "
-                 "-> (" ALGOBATFMT "," ALGOOPTBATFMT ") " LLFMT "us\n",
-                 __func__,
+                 "sr=" ALGOOPTBATFMT " %s "
+                 "-> " ALGOBATFMT "," ALGOOPTBATFMT " (" LLFMT " usec)\n",
                  ALGOBATPAR(l), ALGOBATPAR(r),
                  ALGOOPTBATPAR(sl), ALGOOPTBATPAR(sr),
                  reason,
@@ -4588,9 +4587,9 @@ BATjoin(BAT **r1p, BAT **r2p, BAT *l, BA
        }
 
        if (lci.ncand == 0 || rci.ncand == 0) {
-               TRC_DEBUG(ALGO, "BATjoin(l=" ALGOBATFMT ","
+               TRC_DEBUG(ALGO, "l=" ALGOBATFMT ","
                          "r=" ALGOBATFMT ",sl=" ALGOOPTBATFMT ","
-                         "sr=" ALGOOPTBATFMT ",nil_matches=%d)\n",
+                         "sr=" ALGOOPTBATFMT ",nil_matches=%d\n",
                          ALGOBATPAR(l), ALGOBATPAR(r),
                          ALGOOPTBATPAR(sl), ALGOOPTBATPAR(sr),
                          nil_matches);
diff --git a/monetdb5/mal/mal_interpreter.c b/monetdb5/mal/mal_interpreter.c
--- a/monetdb5/mal/mal_interpreter.c
+++ b/monetdb5/mal/mal_interpreter.c
@@ -697,9 +697,9 @@ runMALsequence(Client cntxt, MalBlkPtr m
                                                                          
"address of pattern %s.%s missing",
                                                                          
pci->modname, pci->fcnname);
                        } else {
-                               TRC_DEBUG(ALGO, "calling %s.%s\n",
-                                                 pci->modname ? pci->modname : 
"<null>",
-                                                 pci->fcnname ? pci->fcnname : 
"<null>");
+                               TRC_INFO(ALGO, "calling %s.%s\n",
+                                                pci->modname ? pci->modname : 
"<null>",
+                                                pci->fcnname ? pci->fcnname : 
"<null>");
                                ret = (*(str (*) (Client, MalBlkPtr, MalStkPtr, 
InstrPtr)) pci->
                                           fcn) (cntxt, mb, stk, pci);
 #ifndef NDEBUG
diff --git a/monetdb5/modules/atoms/str.c b/monetdb5/modules/atoms/str.c
--- a/monetdb5/modules/atoms/str.c
+++ b/monetdb5/modules/atoms/str.c
@@ -751,8 +751,8 @@ STRrevstr_search(Client ctx, MalBlkPtr m
        (void) ctx;
        (void) mb;
        int *res = getArgReference_int(stk, pci, 0);
-       const str haystack = *getArgReference_str(stk, pci, 1);
-       const str needle = *getArgReference_str(stk, pci, 2);
+       const char *haystack = *getArgReference_str(stk, pci, 1);
+       const char *needle = *getArgReference_str(stk, pci, 2);
        bit icase = pci->argc == 4 && *getArgReference_bit(stk, pci, 3);
 
        if (strNil(haystack) || strNil(needle)) {
@@ -1962,17 +1962,17 @@ scan_loop_strselect(BAT *rl, BATiter *li
                rl->tnil = false;
        }
 
-       TRC_DEBUG(ALGO, "(%s, %s, l=%s #%zu [%s], cl=%s #%zu, 
time="LLFMT"usecs)\n",
-                         fname, "scan_loop_strselect",
+       TRC_DEBUG(ALGO, "%s, l=%s #%zu [%s], cl=%s #%zu, time="LLFMT"usecs)\n",
+                         fname,
                          BATgetId(li->b), li->count, ATOMname(li->b->ttype),
-                         lci ? BATgetId(lci->s) : "NULL", lci ? lci->ncand : 0,
+                         lci->s ? BATgetId(lci->s) : "NULL", lci->ncand,
                          GDKusec() - t0);
 
        return MAL_SUCCEED;
 }
 
 static str
-STRselect(MalStkPtr stk, InstrPtr pci, const str fname,
+STRselect(MalStkPtr stk, InstrPtr pci, const char *fname,
                  int (*str_cmp)(const char *, const char *, size_t))
 {
        str msg = MAL_SUCCEED;
@@ -2217,8 +2217,8 @@ nested_loop_strjoin(BAT *rl, BAT *rr, BA
                          fname, "nested_loop_strjoin",
                          BATgetId(li->b), li->count, ATOMname(li->b->ttype),
                          BATgetId(ri->b), ri->count, ATOMname(ri->b->ttype),
-                         lci ? BATgetId(lci->s) : "NULL", lci ? lci->ncand : 0,
-                         rci ? BATgetId(rci->s) : "NULL", rci ? rci->ncand : 0,
+                         lci->s ? BATgetId(lci->s) : "NULL", lci->ncand,
+                         rci->s ? BATgetId(rci->s) : "NULL", rci->ncand,
                          GDKusec() - t0);
 
        return MAL_SUCCEED;
@@ -2458,8 +2458,8 @@ bigram_strjoin(BAT *rl, BAT *rr, BATiter
                          fname, "bigram_strjoin",
                          BATgetId(li->b), li->count, ATOMname(li->b->ttype),
                          BATgetId(ri->b), ri->count, ATOMname(ri->b->ttype),
-                         lci ? BATgetId(lci->s) : "NULL", lci ? lci->ncand : 0,
-                         rci ? BATgetId(rci->s) : "NULL", rci ? rci->ncand : 0,
+                         lci->s ? BATgetId(lci->s) : "NULL", lci->ncand,
+                         rci->s ? BATgetId(rci->s) : "NULL", rci->ncand,
                          GDKusec() - t0);
 
        return msg;
@@ -2634,7 +2634,7 @@ sorted_strjoin(BAT **rl_ptr, BAT **rr_pt
 }
 
 static inline str
-ignorecase(const bat IC, bool *icase, const str fname)
+ignorecase(bat IC, bool *icase, const char *fname)
 {
        str msg = MAL_SUCCEED;
        BAT *b = BATdescriptor(IC);
@@ -2653,7 +2653,7 @@ ignorecase(const bat IC, bool *icase, co
 }
 
 static str
-STRjoin(MalStkPtr stk, InstrPtr pci, const str fname,
+STRjoin(MalStkPtr stk, InstrPtr pci, const char *fname,
                int (*str_cmp)(const char *, const char *, size_t))
 {
        str msg = MAL_SUCCEED;
diff --git a/monetdb5/modules/mal/batcalc.c b/monetdb5/modules/mal/batcalc.c
--- a/monetdb5/modules/mal/batcalc.c
+++ b/monetdb5/modules/mal/batcalc.c
@@ -1937,21 +1937,28 @@ CALCbat_to_hex_int(Client ctx, bat *resb
 
        assert(BATttype(values) == TYPE_int);
        int *p = Tloc(values, 0); // always 0 regardless of hseqbase, is that 
correct?
+       res->tnil = false;
+       res->tnonil = true;
        for (BUN i = 0; i < BATcount(values); i++) {
                char buf[50];
                int n = *p++;
                const char *s;
-               if (is_int_nil(n))
+               if (is_int_nil(n)) {
                        s = str_nil;
-               else {
+                       res->tnil = true;
+                       res->tnonil = false;
+               } else {
                        snprintf(buf, sizeof(buf), "%" PRIx32, (uint32_t)n);
                        s = buf;
                }
-               if (BUNappend(res, s, false) != GDK_SUCCEED) {
+               if (bunfastapp_nocheckVAR(res, s) != GDK_SUCCEED) {
                        msg = createException(MAL, "CALCbat_to_hex_int", 
GDK_EXCEPTION);
                        goto end;
                }
        }
+       res->tsorted = false;
+       res->trevsorted = false;
+       res->tkey = false;
 
        msg = MAL_SUCCEED;
 end:
@@ -1993,21 +2000,28 @@ CALCbat_to_hex_lng(Client ctx, bat *resb
 
        assert(BATttype(values) == TYPE_lng);
        lng *p = Tloc(values, 0); // always 0 regardless of hseqbase, is that 
correct?
+       res->tnil = false;
+       res->tnonil = true;
        for (BUN i = 0; i < BATcount(values); i++) {
                char buf[50];
                lng n = *p++;
                const char *s;
-               if (is_lng_nil(n))
+               if (is_lng_nil(n)) {
                        s = str_nil;
-               else {
+                       res->tnil = true;
+                       res->tnonil = false;
+               } else {
                        snprintf(buf, sizeof(buf), "%" PRIx64, (uint64_t)n);
                        s = buf;
                }
-               if (BUNappend(res, s, false) != GDK_SUCCEED) {
+               if (bunfastapp_nocheckVAR(res, s) != GDK_SUCCEED) {
                        msg = createException(MAL, "CALCbat_to_hex_lng", 
GDK_EXCEPTION);
                        goto end;
                }
        }
+       res->tsorted = false;
+       res->trevsorted = false;
+       res->tkey = false;
 
        msg = MAL_SUCCEED;
 end:
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
@@ -754,6 +754,10 @@ move_join_exps(mvc *sql, sql_rel *j, sql
        node *n;
        list *exps = rel->exps;
 
+       if (j->attr && exps_uses_exp(rel->exps, j->attr->h->data)) {
+               assert(0);
+       }
+
        if (list_empty(exps))
                return;
        rel->exps = sa_list(sql->sa);
@@ -1177,7 +1181,7 @@ push_up_select(mvc *sql, sql_rel *rel, l
        if (inner && is_left(rel->op) && !need_distinct(d))
                return rel_general_unnest(sql, rel, ad);
        /* input rel is dependent join with on the right a select */
-       if ((!inner || is_semi(rel->op)) && rel && is_dependent(rel)) {
+       if ((!inner || is_semi(rel->op) || (is_left(rel->op) && 
!list_empty(rel->attr))) && rel && is_dependent(rel)) {
                sql_rel *r = rel->r;
 
                if (r && is_select(r->op)) { /* move into join */
diff --git 
a/sql/test/BugTracker-2026/Tests/7876-rel2bin_select-assertion-failure.test 
b/sql/test/BugTracker-2026/Tests/7876-rel2bin_select-assertion-failure.test
--- a/sql/test/BugTracker-2026/Tests/7876-rel2bin_select-assertion-failure.test
+++ b/sql/test/BugTracker-2026/Tests/7876-rel2bin_select-assertion-failure.test
@@ -111,6 +111,34 @@ ON (
 WHERE ref_0.score IS NULL
 LIMIT 95
 ----
+NULL
+NULL
+NULL
+carol
+2022-01-03 12:00:00
+NULL
+Empty
+NULL
+NULL
+NULL
+carol
+2022-01-03 12:00:00
+NULL
+First post
+NULL
+NULL
+NULL
+carol
+2022-01-03 12:00:00
+NULL
+Last
+NULL
+NULL
+NULL
+carol
+2022-01-03 12:00:00
+NULL
+banned
 
 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
@@ -66,7 +66,7 @@ KNOWNFAIL?7774-insert-into-renamed-table
 7873-push_up_join-assertion-failure
 7874-rel2bin_join-assertion-failure
 KNOWNFAIL?7875-rel2bin_groupjoin-assertion-failure
-KNOWNFAIL?7876-rel2bin_select-assertion-failure
+7876-rel2bin_select-assertion-failure
 7877-push_up_join-assertion-failure
 7878-exp_bin-assertion-failure
 7879-crash
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to