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