Changeset: 5128f1c24e72 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/5128f1c24e72
Modified Files:
gdk/gdk_batop.c
gdk/gdk_logger.c
gdk/gdk_project.c
monetdb5/modules/mal/mkey.c
sql/storage/bat/bat_storage.c
Branch: Jan2022
Log Message:
Merge with Jul2021 branch.
diffs (truncated from 445 to 300 lines):
diff --git a/gdk/gdk_batop.c b/gdk/gdk_batop.c
--- a/gdk/gdk_batop.c
+++ b/gdk/gdk_batop.c
@@ -1404,14 +1404,23 @@ BATappend_or_update(BAT *b, BAT *p, cons
else if (pos <= bi.minpos && bi.minpos
< pos + ni.count)
bi.minpos = BUN_NONE;
}
+ if (complex_cand(n)) {
+ for (BUN i = 0, j = ni.count; i < j;
i++)
+ o[i] = *(oid *)Tpos(&ni, i);
+ /* last value */
+ v = o[ni.count - 1];
+ } else {
+ for (BUN i = 0, j = ni.count; i < j;
i++)
+ o[i] = v++;
+ /* last value added (not one beyond) */
+ v--;
+ }
if (bi.maxpos != BUN_NONE) {
- if (v + ni.count - 1 >= BUNtoid(b,
bi.maxpos))
+ if (v >= BUNtoid(b, bi.maxpos))
bi.maxpos = pos + ni.count - 1;
else if (pos <= bi.maxpos && bi.maxpos
< pos + ni.count)
bi.maxpos = BUN_NONE;
}
- for (BUN i = 0, j = ni.count; i < j; i++)
- o[i] = v++;
}
} else {
/* if the extremes of n are at least as
diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -14,7 +14,7 @@
#include "mutils.h"
#include <string.h>
-static gdk_return logger_add_bat(logger *lg, BAT *b, log_id id);
+static gdk_return logger_add_bat(logger *lg, BAT *b, log_id id, int tid);
static gdk_return logger_del_bat(logger *lg, log_bid bid);
/*
* The logger uses a directory to store its log files. One master log
@@ -179,18 +179,33 @@ log_find(BAT *b, BAT *d, int val)
}
static log_bid
-internal_find_bat(logger *lg, log_id id)
+internal_find_bat(logger *lg, log_id id, int tid)
{
BATiter cni = bat_iterator_nolock(lg->catalog_id);
BUN p;
if (BAThash(lg->catalog_id) == GDK_SUCCEED) {
MT_rwlock_rdlock(&cni.b->thashlock);
- HASHloop_int(cni, cni.b->thash, p, &id) {
- oid pos = p;
- if (BUNfnd(lg->dcatalog, &pos) == BUN_NONE) {
+ if (tid < 0) {
+ HASHloop_int(cni, cni.b->thash, p, &id) {
+ oid pos = p;
+ if (BUNfnd(lg->dcatalog, &pos) == BUN_NONE) {
+ MT_rwlock_rdunlock(&cni.b->thashlock);
+ return *(log_bid *)
Tloc(lg->catalog_bid, p);
+ }
+ }
+ } else {
+ BUN cp = BUN_NONE;
+ HASHloop_int(cni, cni.b->thash, p, &id) {
+ lng lid = *(lng *) Tloc(lg->catalog_lid, p);
+ if (lid != lng_nil && lid <= tid) {
+ break;
+ }
+ cp = p;
+ }
+ if (cp != BUN_NONE) {
MT_rwlock_rdunlock(&cni.b->thashlock);
- return *(log_bid *) Tloc(lg->catalog_bid, p);
+ return *(log_bid *) Tloc(lg->catalog_bid, cp);
}
}
MT_rwlock_rdunlock(&cni.b->thashlock);
@@ -254,9 +269,9 @@ log_read_clear(logger *lg, trans *tr, lo
}
static gdk_return
-la_bat_clear(logger *lg, logaction *la)
+la_bat_clear(logger *lg, logaction *la, int tid)
{
- log_bid bid = internal_find_bat(lg, la->cid);
+ log_bid bid = internal_find_bat(lg, la->cid, tid);
BAT *b;
if (lg->debug & 1)
@@ -625,7 +640,7 @@ la_bat_update_count(logger *lg, log_id i
static gdk_return
la_bat_updates(logger *lg, logaction *la, int tid)
{
- log_bid bid = internal_find_bat(lg, la->cid);
+ log_bid bid = internal_find_bat(lg, la->cid, tid);
BAT *b = NULL;
if (bid == 0)
@@ -727,9 +742,9 @@ log_read_destroy(logger *lg, trans *tr,
}
static gdk_return
-la_bat_destroy(logger *lg, logaction *la)
+la_bat_destroy(logger *lg, logaction *la, int tid)
{
- log_bid bid = internal_find_bat(lg, la->cid);
+ log_bid bid = internal_find_bat(lg, la->cid, tid);
if (bid && logger_del_bat(lg, bid) != GDK_SUCCEED)
return GDK_FAIL;
@@ -762,7 +777,7 @@ log_read_create(logger *lg, trans *tr, l
}
static gdk_return
-la_bat_create(logger *lg, logaction *la)
+la_bat_create(logger *lg, logaction *la, int tid)
{
BAT *b;
@@ -774,7 +789,7 @@ la_bat_create(logger *lg, logaction *la)
BATtseqbase(b, 0);
if ((b = BATsetaccess(b, BAT_READ)) == NULL ||
- logger_add_bat(lg, b, la->cid) != GDK_SUCCEED) {
+ logger_add_bat(lg, b, la->cid, tid) != GDK_SUCCEED) {
logbat_destroy(b);
return GDK_FAIL;
}
@@ -851,15 +866,15 @@ la_apply(logger *lg, logaction *c, int t
break;
case LOG_CREATE:
if (!lg->flushing)
- ret = la_bat_create(lg, c);
+ ret = la_bat_create(lg, c, tid);
break;
case LOG_DESTROY:
if (!lg->flushing)
- ret = la_bat_destroy(lg, c);
+ ret = la_bat_destroy(lg, c, tid);
break;
case LOG_CLEAR:
if (!lg->flushing)
- ret = la_bat_clear(lg, c);
+ ret = la_bat_clear(lg, c, tid);
break;
default:
assert(0);
@@ -2545,7 +2560,7 @@ log_bat_persists(logger *lg, BAT *b, log
bte ta = find_type(lg, b->ttype);
logformat l;
- if (logger_add_bat(lg, b, id) != GDK_SUCCEED) {
+ if (logger_add_bat(lg, b, id, -1) != GDK_SUCCEED) {
logger_unlock(lg);
return GDK_FAIL;
}
@@ -2571,7 +2586,7 @@ gdk_return
log_bat_transient(logger *lg, log_id id)
{
logger_lock(lg);
- log_bid bid = internal_find_bat(lg, id);
+ log_bid bid = internal_find_bat(lg, id, -1);
logformat l;
l.flag = LOG_DESTROY;
@@ -2858,9 +2873,9 @@ bm_commit(logger *lg)
}
static gdk_return
-logger_add_bat(logger *lg, BAT *b, log_id id)
+logger_add_bat(logger *lg, BAT *b, log_id id, int tid)
{
- log_bid bid = internal_find_bat(lg, id);
+ log_bid bid = internal_find_bat(lg, id, tid);
lng cnt = 0;
lng lid = lng_nil;
@@ -2922,7 +2937,7 @@ log_bid
logger_find_bat(logger *lg, log_id id)
{
logger_lock(lg);
- log_bid bid = internal_find_bat(lg, id);
+ log_bid bid = internal_find_bat(lg, id, -1);
logger_unlock(lg);
return bid;
}
diff --git a/gdk/gdk_project.c b/gdk/gdk_project.c
--- a/gdk/gdk_project.c
+++ b/gdk/gdk_project.c
@@ -646,6 +646,10 @@ BATproject2(BAT *restrict l, BAT *restri
l = BATunmask(l);
if (l == NULL)
goto doreturn;
+ if (complex_cand(l)) {
+ lcount = canditer_init(&ci, NULL, l);
+ lci = &ci;
+ }
}
if (lcount == 0 ||
(l->ttype == TYPE_void && is_oid_nil(l->tseqbase)) ||
diff --git a/monetdb5/modules/mal/mkey.c b/monetdb5/modules/mal/mkey.c
--- a/monetdb5/modules/mal/mkey.c
+++ b/monetdb5/modules/mal/mkey.c
@@ -121,6 +121,11 @@
#define MKEYHASH_hge(valp) ((ulng) (*(const uhge *)(valp) >> 64) ^ \
(ulng) *(const uhge
*)(valp))
#endif
+#if SIZEOF_OID == SIZEOF_INT
+#define MKEYHASH_oid(valp) MKEYHASH_int(valp)
+#else
+#define MKEYHASH_oid(valp) MKEYHASH_lng(valp)
+#endif
static inline ulng
GDK_ROTATE(ulng x, int y, int z)
@@ -371,54 +376,59 @@ MKEYbulk_rotate_xor_hash(bat *res, const
BATiter bi = bat_iterator(b);
BATiter hbi = bat_iterator(hb);
h = (const ulng *) hbi.base;
- switch (ATOMstorage(b->ttype)) {
- case TYPE_bte: {
- const bte *restrict v = (const bte *) bi.base;
- for (BUN i = 0; i < n; i++) {
- r[i] = GDK_ROTATE(h[i], lbit, rbit) ^ MKEYHASH_bte(v +
i);
+ if (complex_cand(b)) {
+ for (BUN i = 0; i < n; i++)
+ r[i] = GDK_ROTATE(h[i], lbit, rbit) ^
MKEYHASH_oid(Tpos(&bi, i));
+ } else {
+ switch (ATOMstorage(b->ttype)) {
+ case TYPE_bte: {
+ const bte *restrict v = (const bte *) bi.base;
+ for (BUN i = 0; i < n; i++) {
+ r[i] = GDK_ROTATE(h[i], lbit, rbit) ^
MKEYHASH_bte(v + i);
+ }
+ break;
}
- break;
- }
- case TYPE_sht: {
- const sht *restrict v = (const sht *) bi.base;
- for (BUN i = 0; i < n; i++) {
- r[i] = GDK_ROTATE(h[i], lbit, rbit) ^ MKEYHASH_sht(v +
i);
+ case TYPE_sht: {
+ const sht *restrict v = (const sht *) bi.base;
+ for (BUN i = 0; i < n; i++) {
+ r[i] = GDK_ROTATE(h[i], lbit, rbit) ^
MKEYHASH_sht(v + i);
+ }
+ break;
}
- break;
- }
- case TYPE_int:
- case TYPE_flt: {
- const int *restrict v = (const int *) bi.base;
- for (BUN i = 0; i < n; i++) {
- r[i] = GDK_ROTATE(h[i], lbit, rbit) ^ MKEYHASH_int(v +
i);
+ case TYPE_int:
+ case TYPE_flt: {
+ const int *restrict v = (const int *) bi.base;
+ for (BUN i = 0; i < n; i++) {
+ r[i] = GDK_ROTATE(h[i], lbit, rbit) ^
MKEYHASH_int(v + i);
+ }
+ break;
}
- break;
- }
- case TYPE_lng:
- case TYPE_dbl: {
- const lng *restrict v = (const lng *) bi.base;
- for (BUN i = 0; i < n; i++) {
- r[i] = GDK_ROTATE(h[i], lbit, rbit) ^ MKEYHASH_lng(v +
i);
+ case TYPE_lng:
+ case TYPE_dbl: {
+ const lng *restrict v = (const lng *) bi.base;
+ for (BUN i = 0; i < n; i++) {
+ r[i] = GDK_ROTATE(h[i], lbit, rbit) ^
MKEYHASH_lng(v + i);
+ }
+ break;
}
- break;
- }
#ifdef HAVE_HGE
- case TYPE_hge: {
- const hge *restrict v = (const hge *) bi.base;
- for (BUN i = 0; i < n; i++) {
- r[i] = GDK_ROTATE(h[i], lbit, rbit) ^ MKEYHASH_hge(v +
i);
+ case TYPE_hge: {
+ const hge *restrict v = (const hge *) bi.base;
+ for (BUN i = 0; i < n; i++) {
+ r[i] = GDK_ROTATE(h[i], lbit, rbit) ^
MKEYHASH_hge(v + i);
+ }
+ break;
}
- break;
- }
#endif
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]