Changeset: 0f94f85f07bf for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/0f94f85f07bf
Branch: string_imprints
Log Message:

Merge with default


diffs (truncated from 889 to 300 lines):

diff --git a/documentation/index.rst b/documentation/index.rst
--- a/documentation/index.rst
+++ b/documentation/index.rst
@@ -16,6 +16,9 @@ Welcome to MonetDB's documentation!
    monetdbe/examples
    monetdbe/installation
    monetdbe/monetdbe_api
+   monetdbe/manual_pages/monetdbe_open
+   monetdbe/manual_pages/monetdbe_options
+   monetdbe/manual_pages/monetdbe_remote
    source/intro
    source/build
    source/build-fedora
diff --git a/gdk/gdk_cand.h b/gdk/gdk_cand.h
--- a/gdk/gdk_cand.h
+++ b/gdk/gdk_cand.h
@@ -177,6 +177,7 @@ gdk_export oid canditer_last(const struc
 gdk_export oid canditer_prev(struct canditer *ci);
 gdk_export oid canditer_peekprev(struct canditer *ci);
 gdk_export oid canditer_idx(const struct canditer *ci, BUN p);
+#define canditer_idx_dense(ci, p) ((p >= (ci)->ncand)?oid_nil:((ci)->seq + p))
 gdk_export void canditer_setidx(struct canditer *ci, BUN p);
 gdk_export void canditer_reset(struct canditer *ci);
 gdk_export BUN canditer_search(const struct canditer *ci, oid o, bool next);
diff --git a/gdk/gdk_project.c b/gdk/gdk_project.c
--- a/gdk/gdk_project.c
+++ b/gdk/gdk_project.c
@@ -20,6 +20,57 @@
  * hseqbase + its batCount.
  */
 
+#define project1_loop(TYPE)                                            \
+static gdk_return                                                      \
+project1_##TYPE(BAT *restrict bn, BAT *restrict l, BAT *restrict r1)   \
+{                                                                      \
+       BUN lo, hi;                                                     \
+       const TYPE *restrict r1t;                                       \
+       TYPE *restrict bt;                                              \
+       oid r1seq, r1end;                                               \
+                                                                       \
+       MT_thread_setalgorithm(__func__);                               \
+       r1t = (const TYPE *) Tloc(r1, 0);                               \
+       bt = (TYPE *) Tloc(bn, 0);                                      \
+       r1seq = r1->hseqbase;                                           \
+       r1end = r1seq + BATcount(r1);                                   \
+       if (BATtdense(l)) {                                             \
+               if (l->tseqbase < r1seq ||                              \
+                  (l->tseqbase+BATcount(l)) >= r1end) {                \
+                       GDKerror("does not match always\n");            \
+                       return GDK_FAIL;                                \
+               }                                                       \
+               oid off = l->tseqbase - r1seq;                          \
+               r1t += off;                                             \
+               for (lo = 0, hi = BATcount(l); lo < hi; lo++)           \
+                       bt[lo] = r1t[lo];                               \
+       } else {                                                        \
+               const oid *restrict ot = (const oid *) Tloc(l, 0);      \
+               for (lo = 0, hi = BATcount(l); lo < hi; lo++) {         \
+                       oid o = ot[lo];                                 \
+                       if (o < r1seq || o >= r1end) {                  \
+                               GDKerror("does not match always\n");    \
+                               return GDK_FAIL;                        \
+                       }                                               \
+                       bt[lo] = r1t[o - r1seq];                        \
+               }                                                       \
+       }                                                               \
+       BATsetcount(bn, lo);                                            \
+       return GDK_SUCCEED;                                             \
+}
+
+/* project type switch */
+project1_loop(bte)
+project1_loop(sht)
+project1_loop(int)
+project1_loop(flt)
+project1_loop(dbl)
+project1_loop(lng)
+#ifdef HAVE_HGE
+project1_loop(hge)
+#endif
+project1_loop(uuid)
+
 #define project_loop(TYPE)                                             \
 static gdk_return                                                      \
 project_##TYPE(BAT *restrict bn, BAT *restrict l,                      \
@@ -34,6 +85,8 @@ project_##TYPE(BAT *restrict bn, BAT *re
        oid r1seq, r1end;                                               \
        oid r2seq, r2end;                                               \
                                                                        \
+       if ((!ci || ci->tpe == cand_dense) && l->tnonil && !r2)         \
+               return project1_##TYPE(bn, l, r1);                      \
        MT_thread_setalgorithm(__func__);                               \
        r1t = (const TYPE *) Tloc(r1, 0);                               \
        r2t = r2 ? (const TYPE *) Tloc(r2, 0) : NULL;                   \
@@ -120,6 +173,12 @@ project_oid(BAT *restrict bn, BAT *restr
        const oid *restrict r2t = NULL;
        struct canditer r1ci = {0}, r2ci = {0};
 
+       if ((!lci || lci->tpe == cand_dense) && !BATtdense(r1) && !r2) {
+               if (sizeof(oid) == sizeof(lng))
+                       return project1_lng(bn, l, r1);
+               else
+                       return project1_int(bn, l, r1);
+       }
        MT_thread_setalgorithm(__func__);
        if (complex_cand(r1))
                canditer_init(&r1ci, NULL, r1);
@@ -856,13 +915,12 @@ BATprojectchain(BAT **bats)
                                        goto bunins_failed;
                                }
                                o -= ba[i].hlo;
-                               o = ba[i].ci.s ? canditer_idx(&ba[i].ci, o) : 
ba[i].t[o];
+                               o = ba[i].ci.s ?
+                                   (ba[i].ci.tpe == cand_dense) ?
+                                       canditer_idx_dense(&ba[i].ci, o) :
+                                       canditer_idx(&ba[i].ci, o) : ba[i].t[o];
                        }
-                       if (bunfastappTYPE(oid, bn, &o) != GDK_SUCCEED)
-                               goto bunins_failed;
-                       if (ATOMputFIX(bn->ttype, d, &o) != GDK_SUCCEED)
-                               goto bunins_failed;
-                       d++;
+                       *d++ = o;
                }
        } else if (!ATOMvarsized(tpe)) {
                const void *v;
@@ -883,7 +941,10 @@ BATprojectchain(BAT **bats)
                                        goto bunins_failed;
                                }
                                o -= ba[i].hlo;
-                               o = ba[i].ci.s ? canditer_idx(&ba[i].ci, o) : 
ba[i].t[o];
+                               o = ba[i].ci.s ?
+                                   (ba[i].ci.tpe == cand_dense) ?
+                                       canditer_idx_dense(&ba[i].ci, o) :
+                                       canditer_idx(&ba[i].ci, o) : ba[i].t[o];
                        }
                        if (is_oid_nil(o)) {
                                assert(!stringtrick);
@@ -934,7 +995,10 @@ BATprojectchain(BAT **bats)
                                        goto bunins_failed;
                                }
                                o -= ba[i].hlo;
-                               o = ba[i].ci.s ? canditer_idx(&ba[i].ci, o) : 
ba[i].t[o];
+                               o = ba[i].ci.s ?
+                                   (ba[i].ci.tpe == cand_dense) ?
+                                       canditer_idx_dense(&ba[i].ci, o) :
+                                       canditer_idx(&ba[i].ci, o) : ba[i].t[o];
                        }
                        if (is_oid_nil(o)) {
                                bn->tnil = true;
diff --git a/gdk/gdk_select.c b/gdk/gdk_select.c
--- a/gdk/gdk_select.c
+++ b/gdk/gdk_select.c
@@ -1,7 +1,7 @@
 /*
  * This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0.  If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+* file, You can obtain one at http://mozilla.org/MPL/2.0/.
  *
  * Copyright 1997 - July 2008 CWI, August 2008 - 2021 MonetDB B.V.
  */
@@ -628,14 +628,27 @@ fullscan_str(BAT *b, struct canditer *re
        case 1: {
                const unsigned char *ptr = (const unsigned char *) Tloc(b, 0);
                pos -= GDK_VAROFFSET;
-               for (p = 0; p < ci->ncand; p++) {
-                       o = canditer_next(ci);
-                       if (ptr[o - hseq] == pos) {
-                               buninsfix(bn, dst, cnt, o,
-                                         (BUN) ((dbl) cnt / (dbl) (p == 0 ? 1 
: p)
-                                                * (dbl) (ci->ncand-p) * 1.1 + 
1024),
-                                         maximum, BUN_NONE);
-                               cnt++;
+               if (ci->tpe == cand_dense) {
+                       for (p = 0; p < ci->ncand; p++) {
+                               o = canditer_next_dense(ci);
+                               if (ptr[o - hseq] == pos) {
+                                       buninsfix(bn, dst, cnt, o,
+                                               (BUN) ((dbl) cnt / (dbl) (p == 
0 ? 1 : p)
+                                                       * (dbl) (ci->ncand-p) * 
1.1 + 1024),
+                                               maximum, BUN_NONE);
+                                       cnt++;
+                               }
+                       }
+               } else {
+                       for (p = 0; p < ci->ncand; p++) {
+                               o = canditer_next(ci);
+                               if (ptr[o - hseq] == pos) {
+                                       buninsfix(bn, dst, cnt, o,
+                                               (BUN) ((dbl) cnt / (dbl) (p == 
0 ? 1 : p)
+                                                       * (dbl) (ci->ncand-p) * 
1.1 + 1024),
+                                               maximum, BUN_NONE);
+                                       cnt++;
+                               }
                        }
                }
                break;
@@ -643,14 +656,27 @@ fullscan_str(BAT *b, struct canditer *re
        case 2: {
                const unsigned short *ptr = (const unsigned short *) Tloc(b, 0);
                pos -= GDK_VAROFFSET;
-               for (p = 0; p < ci->ncand; p++) {
-                       o = canditer_next(ci);
-                       if (ptr[o - hseq] == pos) {
-                               buninsfix(bn, dst, cnt, o,
-                                         (BUN) ((dbl) cnt / (dbl) (p == 0 ? 1 
: p)
-                                                * (dbl) (ci->ncand-p) * 1.1 + 
1024),
-                                         maximum, BUN_NONE);
-                               cnt++;
+               if (ci->tpe == cand_dense) {
+                       for (p = 0; p < ci->ncand; p++) {
+                               o = canditer_next_dense(ci);
+                               if (ptr[o - hseq] == pos) {
+                                       buninsfix(bn, dst, cnt, o,
+                                               (BUN) ((dbl) cnt / (dbl) (p == 
0 ? 1 : p)
+                                                       * (dbl) (ci->ncand-p) * 
1.1 + 1024),
+                                               maximum, BUN_NONE);
+                                       cnt++;
+                               }
+                       }
+               } else {
+                       for (p = 0; p < ci->ncand; p++) {
+                               o = canditer_next(ci);
+                               if (ptr[o - hseq] == pos) {
+                                       buninsfix(bn, dst, cnt, o,
+                                               (BUN) ((dbl) cnt / (dbl) (p == 
0 ? 1 : p)
+                                                       * (dbl) (ci->ncand-p) * 
1.1 + 1024),
+                                               maximum, BUN_NONE);
+                                       cnt++;
+                               }
                        }
                }
                break;
@@ -658,14 +684,27 @@ fullscan_str(BAT *b, struct canditer *re
 #if SIZEOF_VAR_T == 8
        case 4: {
                const unsigned int *ptr = (const unsigned int *) Tloc(b, 0);
-               for (p = 0; p < ci->ncand; p++) {
-                       o = canditer_next(ci);
-                       if (ptr[o - hseq] == pos) {
-                               buninsfix(bn, dst, cnt, o,
-                                         (BUN) ((dbl) cnt / (dbl) (p == 0 ? 1 
: p)
-                                                * (dbl) (ci->ncand-p) * 1.1 + 
1024),
-                                         maximum, BUN_NONE);
-                               cnt++;
+               if (ci->tpe == cand_dense) {
+                       for (p = 0; p < ci->ncand; p++) {
+                               o = canditer_next_dense(ci);
+                               if (ptr[o - hseq] == pos) {
+                                       buninsfix(bn, dst, cnt, o,
+                                               (BUN) ((dbl) cnt / (dbl) (p == 
0 ? 1 : p)
+                                                       * (dbl) (ci->ncand-p) * 
1.1 + 1024),
+                                               maximum, BUN_NONE);
+                                       cnt++;
+                               }
+                       }
+               } else {
+                       for (p = 0; p < ci->ncand; p++) {
+                               o = canditer_next(ci);
+                               if (ptr[o - hseq] == pos) {
+                                       buninsfix(bn, dst, cnt, o,
+                                               (BUN) ((dbl) cnt / (dbl) (p == 
0 ? 1 : p)
+                                                       * (dbl) (ci->ncand-p) * 
1.1 + 1024),
+                                               maximum, BUN_NONE);
+                                       cnt++;
+                               }
                        }
                }
                break;
@@ -673,14 +712,27 @@ fullscan_str(BAT *b, struct canditer *re
 #endif
        default: {
                const var_t *ptr = (const var_t *) Tloc(b, 0);
-               for (p = 0; p < ci->ncand; p++) {
-                       o = canditer_next(ci);
-                       if (ptr[o - hseq] == pos) {
-                               buninsfix(bn, dst, cnt, o,
-                                         (BUN) ((dbl) cnt / (dbl) (p == 0 ? 1 
: p)
-                                                * (dbl) (ci->ncand-p) * 1.1 + 
1024),
-                                         maximum, BUN_NONE);
-                               cnt++;
+               if (ci->tpe == cand_dense) {
+                       for (p = 0; p < ci->ncand; p++) {
+                               o = canditer_next_dense(ci);
+                               if (ptr[o - hseq] == pos) {
+                                       buninsfix(bn, dst, cnt, o,
+                                               (BUN) ((dbl) cnt / (dbl) (p == 
0 ? 1 : p)
+                                                       * (dbl) (ci->ncand-p) * 
1.1 + 1024),
+                                               maximum, BUN_NONE);
+                                       cnt++;
+                               }
+                       }
+               } else {
+                       for (p = 0; p < ci->ncand; p++) {
+                               o = canditer_next(ci);
+                               if (ptr[o - hseq] == pos) {
+                                       buninsfix(bn, dst, cnt, o,
+                                               (BUN) ((dbl) cnt / (dbl) (p == 
0 ? 1 : p)
+                                                       * (dbl) (ci->ncand-p) * 
1.1 + 1024),
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to