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

Reply via email to