Changeset: d8eae374e99d for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/d8eae374e99d
Branch: extract_types
Log Message:

Merge with default.


diffs (truncated from 1864 to 300 lines):

diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out
--- a/clients/Tests/exports.stable.out
+++ b/clients/Tests/exports.stable.out
@@ -574,7 +574,6 @@ void mo_print_options(opt *set, int setl
 int mo_system_config(opt **Set, int setlen);
 const oid oid_nil;
 log_bid old_logger_find_bat(old_logger *lg, const char *name, char tpe, oid 
id);
-gdk_return old_logger_load(logger *lg, const char *fn, const char *logdir, 
FILE *fp, int version, const char *filename);
 DIR *opendir(const char *dirname);
 void print_trace(void);
 ssize_t ptrFromStr(const char *src, size_t *len, ptr **dst, bool external);
diff --git a/common/utils/matomic.h b/common/utils/matomic.h
--- a/common/utils/matomic.h
+++ b/common/utils/matomic.h
@@ -161,7 +161,7 @@ typedef __declspec(align(8)) volatile AT
 /* should we use _InterlockedExchangeAdd64(var, 0) instead? */
 #endif
 #define ATOMIC_SET(var, val)   _InterlockedExchange64(var, (ATOMIC_BASE_TYPE) 
(val))
-#define ATOMIC_XCG(var, val)   _InterlockedExchange64(var, (ATOMIC_BASE_TYPE) 
(val))
+#define ATOMIC_XCG(var, val)   ((ATOMIC_BASE_TYPE) _InterlockedExchange64(var, 
(ATOMIC_BASE_TYPE) (val)))
 static inline bool
 ATOMIC_CAS(ATOMIC_TYPE *var, ATOMIC_BASE_TYPE *exp, ATOMIC_BASE_TYPE des)
 {
@@ -173,35 +173,35 @@ ATOMIC_CAS(ATOMIC_TYPE *var, ATOMIC_BASE
        return false;
 }
 #define ATOMIC_CAS(var, exp, des)      ATOMIC_CAS(var, exp, (ATOMIC_BASE_TYPE) 
(des))
-#define ATOMIC_ADD(var, val)   _InterlockedExchangeAdd64(var, 
(ATOMIC_BASE_TYPE) (val))
-#define ATOMIC_SUB(var, val)   _InterlockedExchangeAdd64(var, -(val))
-#define ATOMIC_INC(var)                        _InterlockedIncrement64(var)
-#define ATOMIC_DEC(var)                        _InterlockedDecrement64(var)
-#define ATOMIC_OR(var, val)            _InterlockedOr64(var, 
(ATOMIC_BASE_TYPE) (val))
-#define ATOMIC_AND(var, val)   _InterlockedAnd64(var, (ATOMIC_BASE_TYPE) (val))
+#define ATOMIC_ADD(var, val)   ((ATOMIC_BASE_TYPE) 
_InterlockedExchangeAdd64(var, (LONG64) (val)))
+#define ATOMIC_SUB(var, val)   ((ATOMIC_BASE_TYPE) 
_InterlockedExchangeAdd64(var, -(LONG64) (val)))
+#define ATOMIC_INC(var)                        ((ATOMIC_BASE_TYPE) 
_InterlockedIncrement64(var))
+#define ATOMIC_DEC(var)                        ((ATOMIC_BASE_TYPE) 
_InterlockedDecrement64(var))
+#define ATOMIC_OR(var, val)            ((ATOMIC_BASE_TYPE) 
_InterlockedOr64(var, (ATOMIC_BASE_TYPE) (val)))
+#define ATOMIC_AND(var, val)   ((ATOMIC_BASE_TYPE) _InterlockedAnd64(var, 
(ATOMIC_BASE_TYPE) (val)))
 
 #else
 
 #ifdef DECLSPEC_NOINITALL
 #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))
-#define ATOMIC_SUB(var, val)   _InlineInterlockedExchangeAdd64(var, -(val))
-#define ATOMIC_INC(var)                        
_InlineInterlockedIncrement64(var)
-#define ATOMIC_DEC(var)                        
_InlineInterlockedDecrement64(var)
-#define ATOMIC_OR(var, val)            _InlineInterlockedOr64(var, 
(ATOMIC_BASE_TYPE) (val))
-#define ATOMIC_AND(var, val)   _InlineInterlockedAnd64(var, (ATOMIC_BASE_TYPE) 
(val))
+#define ATOMIC_XCG(var, val)   ((ATOMIC_BASE_TYPE) 
_InlineInterlockedExchange64(var, (ATOMIC_BASE_TYPE) (val)))
+#define ATOMIC_ADD(var, val)   ((ATOMIC_BASE_TYPE) 
_InlineInterlockedExchangeAdd64(var, (LONG64) (val)))
+#define ATOMIC_SUB(var, val)   ((ATOMIC_BASE_TYPE) 
_InlineInterlockedExchangeAdd64(var, -(LONG64) (val)))
+#define ATOMIC_INC(var)                        ((ATOMIC_BASE_TYPE) 
_InlineInterlockedIncrement64(var))
+#define ATOMIC_DEC(var)                        ((ATOMIC_BASE_TYPE) 
_InlineInterlockedDecrement64(var))
+#define ATOMIC_OR(var, val)            ((ATOMIC_BASE_TYPE) 
_InlineInterlockedOr64(var, (ATOMIC_BASE_TYPE) (val)))
+#define ATOMIC_AND(var, val)   ((ATOMIC_BASE_TYPE) 
_InlineInterlockedAnd64(var, (ATOMIC_BASE_TYPE) (val)))
 #else
 #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))
-#define ATOMIC_SUB(var, val)   _InterlockedExchangeAdd64(var, -(val))
-#define ATOMIC_INC(var)                        _InterlockedIncrement64(var)
-#define ATOMIC_DEC(var)                        _InterlockedDecrement64(var)
-#define ATOMIC_OR(var, val)            _InterlockedOr64(var, 
(ATOMIC_BASE_TYPE) (val))
-#define ATOMIC_AND(var, val)   _InterlockedAnd64(var, (ATOMIC_BASE_TYPE) (val))
+#define ATOMIC_XCG(var, val)   ((ATOMIC_BASE_TYPE) _InterlockedExchange64(var, 
(ATOMIC_BASE_TYPE) (val)))
+#define ATOMIC_ADD(var, val)   ((ATOMIC_BASE_TYPE) 
_InterlockedExchangeAdd64(var, (LONG64) (val)))
+#define ATOMIC_SUB(var, val)   ((ATOMIC_BASE_TYPE) 
_InterlockedExchangeAdd64(var, -(LONG64) (val)))
+#define ATOMIC_INC(var)                        ((ATOMIC_BASE_TYPE) 
_InterlockedIncrement64(var))
+#define ATOMIC_DEC(var)                        ((ATOMIC_BASE_TYPE) 
_InterlockedDecrement64(var))
+#define ATOMIC_OR(var, val)            ((ATOMIC_BASE_TYPE) 
_InterlockedOr64(var, (ATOMIC_BASE_TYPE) (val)))
+#define ATOMIC_AND(var, val)   ((ATOMIC_BASE_TYPE) _InterlockedAnd64(var, 
(ATOMIC_BASE_TYPE) (val)))
 #endif
 static inline bool
 ATOMIC_CAS(ATOMIC_TYPE *var, ATOMIC_BASE_TYPE *exp, ATOMIC_BASE_TYPE des)
diff --git a/ctest/tools/monetdbe/Tests/example_proxy.SQL.py 
b/ctest/tools/monetdbe/Tests/example_proxy.SQL.py
--- a/ctest/tools/monetdbe/Tests/example_proxy.SQL.py
+++ b/ctest/tools/monetdbe/Tests/example_proxy.SQL.py
@@ -24,7 +24,7 @@ lines = results.stdout.splitlines()
 
 if len(lines) != 3:
     print(results.stdout)
-    print("Too many output lines.")
+    print("Received {} lines, expected 3".format(len(lines)))
     exit(1)
 
 def test_equal(expected, received):
diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -541,6 +541,7 @@ typedef size_t BUN;
 typedef enum {
        PERSISTENT = 0,
        TRANSIENT,
+       SYSTRANS,
 } role_t;
 
 /* Heap storage modes */
@@ -1568,46 +1569,51 @@ BATsettrivprop(BAT *b)
                b->tnosorted = b->tnorevsorted = 0;
                b->tnokey[0] = b->tnokey[1] = 0;
                b->tunique_est = (double) b->batCount;
+               b->tkey = true;
                if (ATOMlinear(b->ttype)) {
                        b->tsorted = true;
                        b->trevsorted = true;
-               }
-               b->tkey = true;
-               if (b->batCount == 0) {
-                       b->tminpos = BUN_NONE;
-                       b->tmaxpos = BUN_NONE;
-                       b->tnonil = true;
-                       b->tnil = false;
-                       if (b->ttype == TYPE_oid) {
-                               b->tseqbase = 0;
-                       }
-               } else if (b->ttype == TYPE_oid) {
-                       oid sqbs = ((const oid *) b->theap->base)[b->tbaseoff];
-                       if (is_oid_nil(sqbs)) {
-                               b->tnonil = false;
-                               b->tnil = true;
+                       if (b->batCount == 0) {
+                               b->tminpos = BUN_NONE;
+                               b->tmaxpos = BUN_NONE;
+                               b->tnonil = true;
+                               b->tnil = false;
+                               if (b->ttype == TYPE_oid) {
+                                       b->tseqbase = 0;
+                               }
+                       } else if (b->ttype == TYPE_oid) {
+                               oid sqbs = ((const oid *) 
b->theap->base)[b->tbaseoff];
+                               if (is_oid_nil(sqbs)) {
+                                       b->tnonil = false;
+                                       b->tnil = true;
+                                       b->tminpos = BUN_NONE;
+                                       b->tmaxpos = BUN_NONE;
+                               } else {
+                                       b->tnonil = true;
+                                       b->tnil = false;
+                                       b->tminpos = 0;
+                                       b->tmaxpos = 0;
+                               }
+                               b->tseqbase = sqbs;
+                       } else if ((b->tvheap
+                                   ? ATOMcmp(b->ttype,
+                                             b->tvheap->base + 
VarHeapVal(Tloc(b, 0), 0, b->twidth),
+                                             ATOMnilptr(b->ttype))
+                                   : ATOMcmp(b->ttype, Tloc(b, 0),
+                                             ATOMnilptr(b->ttype))) == 0) {
+                               /* the only value is NIL */
                                b->tminpos = BUN_NONE;
                                b->tmaxpos = BUN_NONE;
                        } else {
-                               b->tnonil = true;
-                               b->tnil = false;
+                               /* the only value is both min and max */
                                b->tminpos = 0;
                                b->tmaxpos = 0;
                        }
-                       b->tseqbase = sqbs;
-               } else if ((b->tvheap
-                           ? ATOMcmp(b->ttype,
-                                     b->tvheap->base + VarHeapVal(Tloc(b, 0), 
0, b->twidth),
-                                     ATOMnilptr(b->ttype))
-                           : ATOMcmp(b->ttype, Tloc(b, 0),
-                                     ATOMnilptr(b->ttype))) == 0) {
-                       /* the only value is NIL */
+               } else {
+                       b->tsorted = false;
+                       b->trevsorted = false;
                        b->tminpos = BUN_NONE;
                        b->tmaxpos = BUN_NONE;
-               } else {
-                       /* the only value is both min and max */
-                       b->tminpos = 0;
-                       b->tmaxpos = 0;
                }
        } else if (b->batCount == 2 && ATOMlinear(b->ttype)) {
                int c;
@@ -1628,6 +1634,8 @@ BATsettrivprop(BAT *b)
        } else if (!ATOMlinear(b->ttype)) {
                b->tsorted = false;
                b->trevsorted = false;
+               b->tminpos = BUN_NONE;
+               b->tmaxpos = BUN_NONE;
        }
 }
 
diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c
--- a/gdk/gdk_bat.c
+++ b/gdk/gdk_bat.c
@@ -2808,6 +2808,8 @@ BATassertProps(BAT *b)
                                mask = (BUN) 1 << 16;
                        else
                                mask = HASHmask(b->batCount);
+                       hs->heapbckt.parentid = b->batCacheid;
+                       hs->heaplink.parentid = b->batCacheid;
                        if ((hs->heaplink.farmid = BBPselectfarm(
                                     TRANSIENT, b->ttype, hashheap)) < 0 ||
                            (hs->heapbckt.farmid = BBPselectfarm(
diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -960,7 +960,8 @@ BBPcheckbats(unsigned bbpversion)
                        if (statb.st_size > (off_t) hfree) {
                                int fd;
                                if ((fd = MT_open(path, O_RDWR | O_CLOEXEC | 
O_BINARY)) >= 0) {
-                                       (void) ftruncate(fd, hfree);
+                                       if (ftruncate(fd, hfree) == -1)
+                                               perror("ftruncate");
                                        (void) close(fd);
                                }
                        }
@@ -988,7 +989,8 @@ BBPcheckbats(unsigned bbpversion)
                        if (statb.st_size > (off_t) hfree) {
                                int fd;
                                if ((fd = MT_open(path, O_RDWR | O_CLOEXEC | 
O_BINARY)) >= 0) {
-                                       (void) ftruncate(fd, hfree);
+                                       if (ftruncate(fd, hfree) == -1)
+                                               perror("ftruncate");
                                        (void) close(fd);
                                }
                        }
@@ -1108,7 +1110,7 @@ BBPaddfarm(const char *dirname, uint32_t
                        GDKerror("no newline allowed in directory name\n");
                return GDK_FAIL;
        }
-       if (rolemask == 0 || (rolemask & 1 && BBPfarms[0].dirname != NULL)) {
+       if (rolemask == 0 || (rolemask & 1 && BBPfarms[0].roles != 0)) {
                if (logerror)
                        GDKerror("bad rolemask\n");
                return GDK_FAIL;
@@ -1181,6 +1183,36 @@ BBPaddfarm(const char *dirname, uint32_t
        return GDK_FAIL;
 }
 
+gdk_return
+BBPchkfarms(void)
+{
+       const char *dir = NULL;
+       uint32_t rolemask = 0;
+       if ((BBPfarms[0].roles & 1) == 0) {
+               GDKerror("Must at least call BBPaddfarms for once for 
persistent data\n");
+               return GDK_FAIL;
+       }
+       for (int i = 0; i < MAXFARMS; i++) {
+               if (BBPfarms[i].roles != 0) {
+                       dir = BBPfarms[i].dirname;
+                       rolemask |= BBPfarms[i].roles;
+               }
+       }
+       if (dir == NULL)
+               dir = "in-memory";
+       if ((rolemask & (1U << TRANSIENT)) == 0) {
+               gdk_return rc = BBPaddfarm(dir, 1U << TRANSIENT, true);
+               if (rc != GDK_SUCCEED)
+                       return rc;
+       }
+       if ((rolemask & (1U << SYSTRANS)) == 0) {
+               gdk_return rc = BBPaddfarm(dir, 1U << SYSTRANS, true);
+               if (rc != GDK_SUCCEED)
+                       return rc;
+       }
+       return GDK_SUCCEED;
+}
+
 #ifdef GDKLIBRARY_HASHASH
 static gdk_return
 fixhashashbat(BAT *b)
diff --git a/gdk/gdk_cand.c b/gdk/gdk_cand.c
--- a/gdk/gdk_cand.c
+++ b/gdk/gdk_cand.c
@@ -1308,6 +1308,7 @@ BATnegcands(BUN nr, BAT *odels)
        }
        strconcat_len(dels->filename, sizeof(dels->filename),
                      nme, ".theap", NULL);
+       dels->parentid = bn->batCacheid;
 
        if (HEAPalloc(dels, hi - lo + (sizeof(ccand_t)/sizeof(oid)), 
sizeof(oid)) != GDK_SUCCEED) {
                GDKfree(dels);
@@ -1319,7 +1320,6 @@ BATnegcands(BUN nr, BAT *odels)
        *c = (ccand_t) {
                .type = CAND_NEGOID,
        };
-       dels->parentid = bn->batCacheid;
        dels->free = sizeof(ccand_t) + sizeof(oid) * (hi - lo);
        dels->dirty = true;
        BATiter bi = bat_iterator(odels);
@@ -1374,6 +1374,7 @@ BATmaskedcands(oid hseq, BUN nr, BAT *ma
        }
        strconcat_len(msks->filename, sizeof(msks->filename),
                      nme, ".theap", NULL);
+       msks->parentid = bn->batCacheid;
 
        nmask = (nr + 31) / 32;
        if (HEAPalloc(msks, nmask + (sizeof(ccand_t)/sizeof(uint32_t)), 
sizeof(uint32_t)) != GDK_SUCCEED) {
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to