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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list