Changeset: 5d4525349513 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/5d4525349513 Modified Files: gdk/CMakeLists.txt gdk/gdk.h gdk/gdk_bbp.c gdk/gdk_private.h sql/backends/monet5/CMakeLists.txt sql/backends/monet5/sql.c sql/scripts/CMakeLists.txt Branch: string_imprints Log Message:
Merge with default diffs (truncated from 510485 to 300 lines): diff --git a/common/utils/matomic.h b/common/utils/matomic.h --- a/common/utils/matomic.h +++ b/common/utils/matomic.h @@ -75,7 +75,7 @@ typedef volatile atomic_ulong ATOMIC_TYP #define ATOMIC_INIT(var, val) atomic_init(var, (ATOMIC_BASE_TYPE) (val)) #define ATOMIC_DESTROY(var) ((void) 0) -#define ATOMIC_GET(var) atomic_load(var) +#define ATOMIC_GET(var) ((ATOMIC_BASE_TYPE) atomic_load(var)) #define ATOMIC_SET(var, val) atomic_store(var, (ATOMIC_BASE_TYPE) (val)) #define ATOMIC_XCG(var, val) atomic_exchange(var, (ATOMIC_BASE_TYPE) (val)) #define ATOMIC_CAS(var, exp, des) atomic_compare_exchange_strong(var, exp, (ATOMIC_BASE_TYPE) (des)) @@ -134,7 +134,7 @@ typedef __declspec(align(8)) volatile AT #if SIZEOF_SIZE_T == 8 #ifdef __INTEL_COMPILER -#define ATOMIC_GET(var) _InterlockedExchangeAdd64(var, 0) +#define ATOMIC_GET(var) ((ATOMIC_BASE_TYPE) _InterlockedExchangeAdd64(var, 0)) #else #define ATOMIC_GET(var) (*(var)) /* should we use _InterlockedExchangeAdd64(var, 0) instead? */ @@ -162,7 +162,7 @@ ATOMIC_CAS(ATOMIC_TYPE *var, ATOMIC_BASE #else #ifdef DECLSPEC_NOINITALL -#define ATOMIC_GET(var) _InlineInterlockedExchangeAdd64(var, 0) +#define ATOMIC_GET(var) ((ATOMIC_BASE_TYPE) _InlineInterlockedExchangeAdd64(var, 0)) #define ATOMIC_SET(var, val) _InlineInterlockedExchange64(var, (ATOMIC_BASE_TYPE) (val)) #define ATOMIC_XCG(var, val) _InlineInterlockedExchange64(var, (ATOMIC_BASE_TYPE) (val)) #define ATOMIC_ADD(var, val) _InlineInterlockedExchangeAdd64(var, (ATOMIC_BASE_TYPE) (val)) @@ -172,7 +172,7 @@ ATOMIC_CAS(ATOMIC_TYPE *var, ATOMIC_BASE #define ATOMIC_OR(var, val) _InlineInterlockedOr64(var, (ATOMIC_BASE_TYPE) (val)) #define ATOMIC_AND(var, val) _InlineInterlockedAnd64(var, (ATOMIC_BASE_TYPE) (val)) #else -#define ATOMIC_GET(var) _InterlockedExchangeAdd64(var, 0) +#define ATOMIC_GET(var) ((ATOMIC_BASE_TYPE) _InterlockedExchangeAdd64(var, 0)) #define ATOMIC_SET(var, val) _InterlockedExchange64(var, (ATOMIC_BASE_TYPE) (val)) #define ATOMIC_XCG(var, val) _InterlockedExchange64(var, (ATOMIC_BASE_TYPE) (val)) #define ATOMIC_ADD(var, val) _InterlockedExchangeAdd64(var, (ATOMIC_BASE_TYPE) (val)) @@ -233,7 +233,7 @@ typedef volatile ATOMIC_BASE_TYPE ATOMIC #define ATOMIC_INIT(var, val) (*(var) = (val)) #define ATOMIC_DESTROY(var) ((void) 0) -#define ATOMIC_GET(var) __atomic_load_n(var, __ATOMIC_SEQ_CST) +#define ATOMIC_GET(var) ((ATOMIC_BASE_TYPE) __atomic_load_n(var, __ATOMIC_SEQ_CST)) #define ATOMIC_SET(var, val) __atomic_store_n(var, (ATOMIC_BASE_TYPE) (val), __ATOMIC_SEQ_CST) #define ATOMIC_XCG(var, val) __atomic_exchange_n(var, (ATOMIC_BASE_TYPE) (val), __ATOMIC_SEQ_CST) #define ATOMIC_CAS(var, exp, des) __atomic_compare_exchange_n(var, exp, (ATOMIC_BASE_TYPE) (des), false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST) diff --git a/gdk/CMakeLists.txt b/gdk/CMakeLists.txt --- a/gdk/CMakeLists.txt +++ b/gdk/CMakeLists.txt @@ -18,6 +18,7 @@ set(gdk_public_headers $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/gdk_utils.h> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/gdk_cand.h> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/gdk_calc.h> + $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/gdk_time.h> $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/monetdb/gdk.h> $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/monetdb/gdk_system.h> $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/monetdb/gdk_posix.h> @@ -28,7 +29,8 @@ set(gdk_public_headers $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/monetdb/gdk_bbp.h> $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/monetdb/gdk_utils.h> $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/monetdb/gdk_calc.h> - $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/monetdb/gdk_cand.h>) + $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/monetdb/gdk_cand.h> + $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/monetdb/gdk_time.h>) add_library(bat SHARED) diff --git a/gdk/gdk.h b/gdk/gdk.h --- a/gdk/gdk.h +++ b/gdk/gdk.h @@ -863,9 +863,6 @@ mskGetVal(BAT *b, BUN p) * HEAPcopy (Heap *dst,*src); * @item int * @tab - * HEAPdelete (Heap *dst, str o, str ext); - * @item int - * @tab * HEAPwarm (Heap *h); * @end multitable * diff --git a/gdk/gdk_align.c b/gdk/gdk_align.c --- a/gdk/gdk_align.c +++ b/gdk/gdk_align.c @@ -91,7 +91,7 @@ VIEWcreate(oid seq, BAT *b) return BATdense(seq, b->tseqbase, b->batCount); } - bn = BATcreatedesc(seq, b->ttype, false, TRANSIENT); + bn = BATcreatedesc(seq, b->ttype, false, TRANSIENT, 0); if (bn == NULL) return NULL; assert(bn->theap == NULL); @@ -193,8 +193,7 @@ BATmaterialize(BAT *b) .parentid = b->batCacheid, .dirty = true, }; - strconcat_len(tail->filename, sizeof(tail->filename), - BBP_physical(b->batCacheid), ".tail", NULL); + settailname(tail, BBP_physical(b->batCacheid), TYPE_oid, 0); if (HEAPalloc(tail, cnt, sizeof(oid), 0) != GDK_SUCCEED) { GDKfree(tail); return GDK_FAIL; diff --git a/gdk/gdk_atoms.c b/gdk/gdk_atoms.c --- a/gdk/gdk_atoms.c +++ b/gdk/gdk_atoms.c @@ -1148,6 +1148,8 @@ fltFromStr(const char *src, size_t *len, } else { while (src[n] && GDKisspace(src[n])) n++; + if (f == -0) + f = 0; **dst = (flt) f; } } diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c --- a/gdk/gdk_bat.c +++ b/gdk/gdk_bat.c @@ -62,7 +62,7 @@ BATinit_idents(BAT *bn) } BAT * -BATcreatedesc(oid hseq, int tt, bool heapnames, role_t role) +BATcreatedesc(oid hseq, int tt, bool heapnames, role_t role, uint16_t width) { BAT *bn; @@ -123,8 +123,7 @@ BATcreatedesc(oid hseq, int tt, bool hea }; const char *nme = BBP_physical(bn->batCacheid); - strconcat_len(bn->theap->filename, sizeof(bn->theap->filename), - nme, ".tail", NULL); + settailname(bn->theap, nme, tt, width); if (ATOMneedheap(tt)) { if ((bn->tvheap = GDKmalloc(sizeof(Heap))) == NULL) { @@ -183,20 +182,21 @@ BATsetdims(BAT *b) const char * gettailname(const BAT *b) { - if (b->ttype != TYPE_str) - return "tail"; - switch (b->twidth) { - case 1: - return "tail1"; - case 2: - return "tail2"; + if (b->ttype == TYPE_str) { + switch (b->twidth) { + case 1: + return "tail1"; + case 2: + return "tail2"; #if SIZEOF_VAR_T == 8 - case 4: - return "tail4"; + case 4: + return "tail4"; #endif - default: - return "tail"; + default: + break; + } } + return "tail"; } void @@ -264,7 +264,7 @@ COLnew_intern(oid hseq, int tt, BUN cap, if (cap > BUN_MAX) cap = BUN_MAX; - bn = BATcreatedesc(hseq, tt, true, role); + bn = BATcreatedesc(hseq, tt, true, role, width); if (bn == NULL) return NULL; @@ -274,8 +274,12 @@ COLnew_intern(oid hseq, int tt, BUN cap, if (ATOMstorage(tt) == TYPE_msk) cap /= 8; /* 8 values per byte */ else if (tt == TYPE_str) { - if (width != 0) + if (width != 0) { + /* power of two and not too large */ + assert((width & (width - 1)) == 0); + assert(width <= sizeof(var_t)); bn->twidth = width; + } settailname(bn->theap, BBP_physical(bn->batCacheid), tt, bn->twidth); } @@ -2452,6 +2456,7 @@ BATassertProps(BAT *b) int (*cmpf)(const void *, const void *); int cmp; const void *prev = NULL, *valp, *nilp; + char filename[sizeof(b->theap->filename)]; /* do the complete check within a lock */ MT_lock_set(&b->theaplock); @@ -2495,6 +2500,22 @@ BATassertProps(BAT *b) } else assert(b->theap->size >> b->tshift >= b->batCapacity); } + strconcat_len(filename, sizeof(filename), + BBP_physical(b->theap->parentid), + b->ttype == TYPE_str ? b->twidth == 1 ? ".tail1" : b->twidth == 2 ? ".tail2" : +#if SIZEOF_VAR_T == 8 + b->twidth == 4 ? ".tail4" : +#endif + ".tail" : ".tail", + NULL); + assert(strcmp(b->theap->filename, filename) == 0); + if (b->tvheap) { + strconcat_len(filename, sizeof(filename), + BBP_physical(b->tvheap->parentid), + ".theap", + NULL); + assert(strcmp(b->tvheap->filename, filename) == 0); + } /* void and str imply varsized */ if (b->ttype == TYPE_void || diff --git a/gdk/gdk_batop.c b/gdk/gdk_batop.c --- a/gdk/gdk_batop.c +++ b/gdk/gdk_batop.c @@ -23,12 +23,14 @@ unshare_varsized_heap(BAT *b) { if (ATOMvarsized(b->ttype) && b->tvheap->parentid != b->batCacheid) { - Heap *h = GDKzalloc(sizeof(Heap)); + Heap *h = GDKmalloc(sizeof(Heap)); if (h == NULL) return GDK_FAIL; MT_thread_setalgorithm("unshare vheap"); - h->parentid = b->batCacheid; - h->farmid = BBPselectfarm(b->batRole, TYPE_str, varheap); + *h = (Heap) { + .parentid = b->batCacheid, + .farmid = BBPselectfarm(b->batRole, TYPE_str, varheap), + }; strconcat_len(h->filename, sizeof(h->filename), BBP_physical(b->batCacheid), ".theap", NULL); if (HEAPcopy(h, b->tvheap, 0) != GDK_SUCCEED) { @@ -415,13 +417,15 @@ append_varsized_bat(BAT *b, BAT *n, stru /* b and n do not share their vheap, so we need to copy data */ if (b->tvheap->parentid != b->batCacheid) { /* if b shares its vheap with some other bat, unshare it */ - Heap *h = GDKzalloc(sizeof(Heap)); + Heap *h = GDKmalloc(sizeof(Heap)); if (h == NULL) { bat_iterator_end(&ni); return GDK_FAIL; } - h->parentid = b->batCacheid; - h->farmid = BBPselectfarm(b->batRole, b->ttype, varheap); + *h = (Heap) { + .parentid = b->batCacheid, + .farmid = BBPselectfarm(b->batRole, b->ttype, varheap), + }; strconcat_len(h->filename, sizeof(h->filename), BBP_physical(b->batCacheid), ".theap", NULL); if (HEAPcopy(h, b->tvheap, 0) != GDK_SUCCEED) { @@ -1167,6 +1171,13 @@ BATappend_or_update(BAT *b, BAT *p, cons } const void *old = BUNtvar(bi, updid); + + if (atomcmp(old, new) == 0) { + /* replacing with the same value: + * nothing to do */ + continue; + } + bool isnil = atomcmp(new, nil) == 0; anynil |= isnil; if (b->tnil && diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c --- a/gdk/gdk_bbp.c +++ b/gdk/gdk_bbp.c @@ -74,6 +74,9 @@ #include "gdk.h" #include "gdk_private.h" #include "mutils.h" +#ifdef HAVE_FCNTL_H +#include <fcntl.h> +#endif #ifndef F_OK #define F_OK 0 @@ -289,10 +292,8 @@ BBPunlock(void) static gdk_return -BBPinithash(int j) +BBPinithash(int j, bat size) { - bat i = (bat) ATOMIC_GET(&BBPsize); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list