Changeset: 2ee1d8519a68 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/2ee1d8519a68
Branch: default
Log Message:

Merge with Dec2023 branch.


diffs (truncated from 329 to 300 lines):

diff --git a/debian/control b/debian/control
--- a/debian/control
+++ b/debian/control
@@ -11,7 +11,7 @@ Build-Depends: debhelper (>= 12), cmake 
  libxml2-dev, pkg-config,
  python3, python3-dev, python3-numpy,
  unixodbc-dev, zlib1g-dev, r-base-dev,
- libcfitsio-dev, openssl-dev (>= 1.1.1)
+ libcfitsio-dev, libssl-dev (>= 1.1.1)
 Standards-Version: 3.8.0
 X-Python-Version: >= 2.6
 
diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c
--- a/gdk/gdk_bat.c
+++ b/gdk/gdk_bat.c
@@ -1292,12 +1292,12 @@ BUNappendmulti(BAT *b, const void *value
                                    (count > 1 ||
                                     b->tseqbase + b->batCount != ((oid *) 
values)[0]))
                                        b->tseqbase = oid_nil;
-                               if (b->tsorted && ((oid *) 
b->theap->base)[b->batCount - 1] > ((oid *) values)[0]) {
+                               if (b->tsorted && !is_oid_nil(((oid *) 
b->theap->base)[b->batCount - 1]) && ((oid *) b->theap->base)[b->batCount - 1] 
> ((oid *) values)[0]) {
                                        b->tsorted = false;
                                        if (b->tnosorted == 0)
                                                b->tnosorted = b->batCount;
                                }
-                               if (b->trevsorted && ((oid *) 
b->theap->base)[b->batCount - 1] < ((oid *) values)[0]) {
+                               if (b->trevsorted && !is_oid_nil(((oid *) 
values)[0]) && ((oid *) b->theap->base)[b->batCount - 1] < ((oid *) values)[0]) 
{
                                        b->trevsorted = false;
                                        if (b->tnorevsorted == 0)
                                                b->tnorevsorted = b->batCount;
diff --git a/gdk/gdk_calc.c b/gdk/gdk_calc.c
--- a/gdk/gdk_calc.c
+++ b/gdk/gdk_calc.c
@@ -4028,6 +4028,13 @@ bailout:
        return NULL;
 }
 
+#define HANDLE_TIMEOUT                                                 \
+       do {                                                            \
+               GDKerror("%s\n", GDKexiting() ? EXITING_MSG : TIMEOUT_MSG); \
+               BBPreclaim(bn);                                         \
+               bn = NULL;                                              \
+       } while (0)
+
 BAT *
 BATcalcbetween(BAT *b, BAT *lo, BAT *hi, BAT *s, BAT *slo, BAT *shi,
               bool symmetric, bool linc, bool hinc, bool nils_false, bool anti)
@@ -4064,20 +4071,50 @@ BATcalcbetween(BAT *b, BAT *lo, BAT *hi,
        BATiter bi = bat_iterator(b);
        BATiter loi = bat_iterator(lo);
        BATiter hii = bat_iterator(hi);
-       bn = BATcalcbetween_intern(bi.base, 1,
-                                  bi.vh ? bi.vh->base : NULL,
-                                  bi.width,
-                                  loi.base, 1,
-                                  loi.vh ? loi.vh->base : NULL,
-                                  loi.width,
-                                  hii.base, 1,
-                                  hii.vh ? hii.vh->base : NULL,
-                                  hii.width,
-                                  bi.type,
-                                  &ci, &cilo, &cihi,
-                                  b->hseqbase, lo->hseqbase, hi->hseqbase,
-                                  symmetric, anti, linc, hinc,
-                                  nils_false, __func__);
+       if (b->ttype == TYPE_void || lo->ttype == TYPE_void || hi->ttype == 
TYPE_void) {
+               lng timeoffset = 0;
+               QryCtx *qry_ctx = MT_thread_get_qry_ctx();
+               if (qry_ctx != NULL) {
+                       timeoffset = (qry_ctx->starttime && 
qry_ctx->querytimeout) ? (qry_ctx->starttime + qry_ctx->querytimeout) : 0;
+               }
+               bn = COLnew(ci.seq, TYPE_bit, ci.ncand, TRANSIENT);
+               if (bn) {
+                       bit *restrict dst = (bit *) Tloc(bn, 0);
+                       BUN i, j, k, l;
+                       BUN nils = 0;
+                       TIMEOUT_LOOP_IDX(l, ci.ncand, timeoffset) {
+                               i = canditer_next(&ci) - b->hseqbase;
+                               j = canditer_next(&cilo) - lo->hseqbase;
+                               k = canditer_next(&cihi) - hi->hseqbase;
+                               dst[l] = BETWEEN(BUNtoid(b, i),
+                                                BUNtoid(lo, j),
+                                                BUNtoid(hi, k), oid);
+                               nils += is_bit_nil(dst[l]);
+                       }
+                       BATsetcount(bn, ci.ncand);
+                       bn->tsorted = ci.ncand <= 1 || nils == ci.ncand;
+                       bn->trevsorted = ci.ncand <= 1 || nils == ci.ncand;
+                       bn->tkey = ci.ncand <= 1;
+                       bn->tnil = nils != 0;
+                       bn->tnonil = nils == 0;
+                       TIMEOUT_CHECK(timeoffset, HANDLE_TIMEOUT);
+               }
+       } else {
+               bn = BATcalcbetween_intern(bi.base, 1,
+                                          bi.vh ? bi.vh->base : NULL,
+                                          bi.width,
+                                          loi.base, 1,
+                                          loi.vh ? loi.vh->base : NULL,
+                                          loi.width,
+                                          hii.base, 1,
+                                          hii.vh ? hii.vh->base : NULL,
+                                          hii.width,
+                                          bi.type,
+                                          &ci, &cilo, &cihi,
+                                          b->hseqbase, lo->hseqbase, 
hi->hseqbase,
+                                          symmetric, anti, linc, hinc,
+                                          nils_false, __func__);
+       }
        bat_iterator_end(&bi);
        bat_iterator_end(&loi);
        bat_iterator_end(&hii);
@@ -4115,18 +4152,45 @@ BATcalcbetweencstcst(BAT *b, const ValRe
        canditer_init(&ci, b, s);
 
        BATiter bi = bat_iterator(b);
-       bn = BATcalcbetween_intern(bi.base, 1,
-                                  bi.vh ? bi.vh->base : NULL,
-                                  bi.width,
-                                  VALptr(lo), 0, NULL, 0,
-                                  VALptr(hi), 0, NULL, 0,
-                                  bi.type,
-                                  &ci,
-                                  &(struct canditer){.tpe=cand_dense, 
.ncand=ci.ncand},
-                                  &(struct canditer){.tpe=cand_dense, 
.ncand=ci.ncand},
-                                  b->hseqbase, 0, 0, symmetric, anti,
-                                  linc, hinc, nils_false,
-                                  __func__);
+       if (b->ttype == TYPE_void) {
+               lng timeoffset = 0;
+               QryCtx *qry_ctx = MT_thread_get_qry_ctx();
+               if (qry_ctx != NULL) {
+                       timeoffset = (qry_ctx->starttime && 
qry_ctx->querytimeout) ? (qry_ctx->starttime + qry_ctx->querytimeout) : 0;
+               }
+               bn = COLnew(ci.seq, TYPE_bit, ci.ncand, TRANSIENT);
+               if (bn) {
+                       bit *restrict dst = (bit *) Tloc(bn, 0);
+                       BUN i, l;
+                       BUN nils = 0;
+                       TIMEOUT_LOOP_IDX(l, ci.ncand, timeoffset) {
+                               i = canditer_next(&ci) - b->hseqbase;
+                               dst[l] = BETWEEN(BUNtoid(b, i), lo->val.oval,
+                                                hi->val.oval, oid);
+                               nils += is_bit_nil(dst[l]);
+                       }
+                       BATsetcount(bn, ci.ncand);
+                       bn->tsorted = ci.ncand <= 1 || nils == ci.ncand;
+                       bn->trevsorted = ci.ncand <= 1 || nils == ci.ncand;
+                       bn->tkey = ci.ncand <= 1;
+                       bn->tnil = nils != 0;
+                       bn->tnonil = nils == 0;
+                       TIMEOUT_CHECK(timeoffset, HANDLE_TIMEOUT);
+               }
+       } else {
+               bn = BATcalcbetween_intern(bi.base, 1,
+                                          bi.vh ? bi.vh->base : NULL,
+                                          bi.width,
+                                          VALptr(lo), 0, NULL, 0,
+                                          VALptr(hi), 0, NULL, 0,
+                                          bi.type,
+                                          &ci,
+                                          &(struct canditer){.tpe=cand_dense, 
.ncand=ci.ncand},
+                                          &(struct canditer){.tpe=cand_dense, 
.ncand=ci.ncand},
+                                          b->hseqbase, 0, 0, symmetric, anti,
+                                          linc, hinc, nils_false,
+                                          __func__);
+       }
        bat_iterator_end(&bi);
 
        TRC_DEBUG(ALGO, "b=" ALGOBATFMT ",s=" ALGOOPTBATFMT
@@ -4165,21 +4229,49 @@ BATcalcbetweenbatcst(BAT *b, BAT *lo, co
 
        BATiter bi = bat_iterator(b);
        BATiter loi = bat_iterator(lo);
-       bn = BATcalcbetween_intern(bi.base, 1,
-                                  bi.vh ? bi.vh->base : NULL,
-                                  bi.width,
-                                  loi.base, 1,
-                                  loi.vh ? loi.vh->base : NULL,
-                                  loi.width,
-                                  VALptr(hi), 0, NULL, 0,
-                                  bi.type,
-                                  &ci,
-                                  &cilo,
-                                  &(struct canditer){.tpe=cand_dense, 
.ncand=ci.ncand},
-                                  b->hseqbase, lo->hseqbase, 0,
-                                  symmetric, anti,
-                                  linc, hinc, nils_false,
-                                  __func__);
+       if (b->ttype == TYPE_void || lo->ttype == TYPE_void) {
+               lng timeoffset = 0;
+               QryCtx *qry_ctx = MT_thread_get_qry_ctx();
+               if (qry_ctx != NULL) {
+                       timeoffset = (qry_ctx->starttime && 
qry_ctx->querytimeout) ? (qry_ctx->starttime + qry_ctx->querytimeout) : 0;
+               }
+               bn = COLnew(ci.seq, TYPE_bit, ci.ncand, TRANSIENT);
+               if (bn) {
+                       bit *restrict dst = (bit *) Tloc(bn, 0);
+                       BUN i, j, l;
+                       BUN nils = 0;
+                       TIMEOUT_LOOP_IDX(l, ci.ncand, timeoffset) {
+                               i = canditer_next(&ci) - b->hseqbase;
+                               j = canditer_next(&cilo) - lo->hseqbase;
+                               dst[l] = BETWEEN(BUNtoid(b, i), BUNtoid(lo, j),
+                                                hi->val.oval, oid);
+                               nils += is_bit_nil(dst[l]);
+                       }
+                       BATsetcount(bn, ci.ncand);
+                       bn->tsorted = ci.ncand <= 1 || nils == ci.ncand;
+                       bn->trevsorted = ci.ncand <= 1 || nils == ci.ncand;
+                       bn->tkey = ci.ncand <= 1;
+                       bn->tnil = nils != 0;
+                       bn->tnonil = nils == 0;
+                       TIMEOUT_CHECK(timeoffset, HANDLE_TIMEOUT);
+               }
+       } else {
+               bn = BATcalcbetween_intern(bi.base, 1,
+                                          bi.vh ? bi.vh->base : NULL,
+                                          bi.width,
+                                          loi.base, 1,
+                                          loi.vh ? loi.vh->base : NULL,
+                                          loi.width,
+                                          VALptr(hi), 0, NULL, 0,
+                                          bi.type,
+                                          &ci,
+                                          &cilo,
+                                          &(struct canditer){.tpe=cand_dense, 
.ncand=ci.ncand},
+                                          b->hseqbase, lo->hseqbase, 0,
+                                          symmetric, anti,
+                                          linc, hinc, nils_false,
+                                          __func__);
+       }
        bat_iterator_end(&bi);
        bat_iterator_end(&loi);
 
@@ -4221,21 +4313,49 @@ BATcalcbetweencstbat(BAT *b, const ValRe
 
        BATiter bi = bat_iterator(b);
        BATiter hii = bat_iterator(hi);
-       bn = BATcalcbetween_intern(bi.base, 1,
-                                  bi.vh ? bi.vh->base : NULL,
-                                  bi.width,
-                                  VALptr(lo), 0, NULL, 0,
-                                  hii.base, 1,
-                                  hii.vh ? hii.vh->base : NULL,
-                                  hii.width,
-                                  bi.type,
-                                  &ci,
-                                  &(struct canditer){.tpe=cand_dense, 
.ncand=ci.ncand},
-                                  &cihi,
-                                  b->hseqbase, 0, hi->hseqbase,
-                                  symmetric, anti,
-                                  linc, hinc, nils_false,
-                                  __func__);
+       if (b->ttype == TYPE_void || hi->ttype == TYPE_void) {
+               lng timeoffset = 0;
+               QryCtx *qry_ctx = MT_thread_get_qry_ctx();
+               if (qry_ctx != NULL) {
+                       timeoffset = (qry_ctx->starttime && 
qry_ctx->querytimeout) ? (qry_ctx->starttime + qry_ctx->querytimeout) : 0;
+               }
+               bn = COLnew(ci.seq, TYPE_bit, ci.ncand, TRANSIENT);
+               if (bn) {
+                       bit *restrict dst = (bit *) Tloc(bn, 0);
+                       BUN i, k, l;
+                       BUN nils = 0;
+                       TIMEOUT_LOOP_IDX(l, ci.ncand, timeoffset) {
+                               i = canditer_next(&ci) - b->hseqbase;
+                               k = canditer_next(&cihi) - hi->hseqbase;
+                               dst[l] = BETWEEN(BUNtoid(b, i), lo->val.oval,
+                                                BUNtoid(hi, k), oid);
+                               nils += is_bit_nil(dst[l]);
+                       }
+                       BATsetcount(bn, ci.ncand);
+                       bn->tsorted = ci.ncand <= 1 || nils == ci.ncand;
+                       bn->trevsorted = ci.ncand <= 1 || nils == ci.ncand;
+                       bn->tkey = ci.ncand <= 1;
+                       bn->tnil = nils != 0;
+                       bn->tnonil = nils == 0;
+                       TIMEOUT_CHECK(timeoffset, HANDLE_TIMEOUT);
+               }
+       } else {
+               bn = BATcalcbetween_intern(bi.base, 1,
+                                          bi.vh ? bi.vh->base : NULL,
+                                          bi.width,
+                                          VALptr(lo), 0, NULL, 0,
+                                          hii.base, 1,
+                                          hii.vh ? hii.vh->base : NULL,
+                                          hii.width,
+                                          bi.type,
+                                          &ci,
+                                          &(struct canditer){.tpe=cand_dense, 
.ncand=ci.ncand},
+                                          &cihi,
+                                          b->hseqbase, 0, hi->hseqbase,
+                                          symmetric, anti,
+                                          linc, hinc, nils_false,
+                                          __func__);
+       }
        bat_iterator_end(&bi);
        bat_iterator_end(&hii);
 
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to