MonetDB: default - Use ATOMIC_VAR_INIT and ATOMIC_PTR_VAR_INIT w...
Changeset: fef11c1d442c for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/fef11c1d442c Modified Files: gdk/gdk_align.c gdk/gdk_bat.c gdk/gdk_batop.c gdk/gdk_cand.c gdk/gdk_heap.c gdk/gdk_logger.c gdk/gdk_orderidx.c gdk/gdk_rtree.c gdk/gdk_system.c monetdb5/mal/mal_dataflow.c monetdb5/mal/mal_instruction.c sql/common/sql_types.c sql/storage/bat/bat_storage.c Branch: default Log Message: Use ATOMIC_VAR_INIT and ATOMIC_PTR_VAR_INIT where it makes sense. diffs (truncated from 524 to 300 lines): diff --git a/gdk/gdk_align.c b/gdk/gdk_align.c --- a/gdk/gdk_align.c +++ b/gdk/gdk_align.c @@ -258,6 +258,7 @@ BATmaterialize(BAT *b, BUN cap) .farmid = BBPselectfarm(b->batRole, TYPE_oid, offheap), .parentid = b->batCacheid, .dirty = true, + .refs = ATOMIC_VAR_INIT(1), }; settailname(tail, BBP_physical(b->batCacheid), TYPE_oid, 0); if (HEAPalloc(tail, cap, sizeof(oid)) != GDK_SUCCEED) { @@ -273,7 +274,6 @@ BATmaterialize(BAT *b, BUN cap) for (p = 0; p < q; p++) x[p] = t++; } - ATOMIC_INIT(>refs, 1); /* point of no return */ MT_lock_set(>theaplock); assert((ATOMIC_GET(>theap->refs) & HEAPREFS) > 0); diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c --- a/gdk/gdk_bat.c +++ b/gdk/gdk_bat.c @@ -74,6 +74,7 @@ BATcreatedesc(oid hseq, int tt, bool hea *h = (Heap) { .farmid = BBPselectfarm(role, tt, offheap), .dirty = true, + .refs = ATOMIC_VAR_INIT(1), }; if (ATOMneedheap(tt)) { @@ -84,6 +85,7 @@ BATcreatedesc(oid hseq, int tt, bool hea *vh = (Heap) { .farmid = BBPselectfarm(role, tt, varheap), .dirty = true, + .refs = ATOMIC_VAR_INIT(1), }; } } @@ -124,13 +126,11 @@ BATcreatedesc(oid hseq, int tt, bool hea if (bn->theap) { bn->theap->parentid = bn->batCacheid; - ATOMIC_INIT(>theap->refs, 1); const char *nme = BBP_physical(bn->batCacheid); settailname(bn->theap, nme, tt, width); if (bn->tvheap) { bn->tvheap->parentid = bn->batCacheid; - ATOMIC_INIT(>tvheap->refs, 1); strconcat_len(bn->tvheap->filename, sizeof(bn->tvheap->filename), nme, ".theap", NULL); @@ -603,6 +603,7 @@ BATclear(BAT *b, bool force) .parentid = b->tvheap->parentid, .dirty = true, .hasfile = b->tvheap->hasfile, + .refs = ATOMIC_VAR_INIT(1), }; strcpy_len(th->filename, b->tvheap->filename, sizeof(th->filename)); if (ATOMheap(b->ttype, th, 0) != GDK_SUCCEED) { @@ -610,7 +611,6 @@ BATclear(BAT *b, bool force) return GDK_FAIL; } tvp = b->tvheap->parentid; - ATOMIC_INIT(>refs, 1); HEAPdecref(b->tvheap, false); b->tvheap = th; } diff --git a/gdk/gdk_batop.c b/gdk/gdk_batop.c --- a/gdk/gdk_batop.c +++ b/gdk/gdk_batop.c @@ -34,6 +34,7 @@ unshare_varsized_heap(BAT *b) *h = (Heap) { .parentid = b->batCacheid, .farmid = BBPselectfarm(b->batRole, TYPE_str, varheap), + .refs = ATOMIC_VAR_INIT(1), }; strconcat_len(h->filename, sizeof(h->filename), BBP_physical(b->batCacheid), ".theap", NULL); @@ -42,7 +43,6 @@ unshare_varsized_heap(BAT *b) GDKfree(h); return GDK_FAIL; } - ATOMIC_INIT(>refs, 1); MT_lock_set(>theaplock); Heap *oh = b->tvheap; b->tvheap = h; @@ -415,6 +415,7 @@ append_varsized_bat(BAT *b, BATiter *ni, *h = (Heap) { .parentid = b->batCacheid, .farmid = BBPselectfarm(b->batRole, b->ttype, varheap), + .refs = ATOMIC_VAR_INIT(1), }; strconcat_len(h->filename, sizeof(h->filename), BBP_physical(b->batCacheid), ".theap", NULL); @@ -423,7 +424,6 @@ append_varsized_bat(BAT *b, BATiter *ni, GDKfree(h); return GDK_FAIL; } - ATOMIC_INIT(>refs,
MonetDB: default - Get rid of ATOMIC_DESTROY. All versions were...
Changeset: a860e78c6ec8 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/a860e78c6ec8 Modified Files: common/utils/matomic.h gdk/gdk_bat.c gdk/gdk_heap.c gdk/gdk_imprints.c gdk/gdk_logger.c gdk/gdk_rtree.c gdk/gdk_strimps.c gdk/gdk_system.c gdk/gdk_system.h monetdb5/mal/mal_client.c monetdb5/mal/mal_instruction.c sql/storage/bat/bat_storage.c sql/storage/objectset.c sql/storage/store.c Branch: default Log Message: Get rid of ATOMIC_DESTROY. All versions were just ((void)0). diffs (232 lines): diff --git a/common/utils/matomic.h b/common/utils/matomic.h --- a/common/utils/matomic.h +++ b/common/utils/matomic.h @@ -18,7 +18,6 @@ * The following operations are defined: * ATOMIC_VAR_INIT -- initializer for the variable (not necessarily atomic!); * ATOMIC_INIT -- initialize the variable (not necessarily atomic!); - * ATOMIC_DESTROY -- destroy the variable * ATOMIC_GET -- return the value of a variable; * ATOMIC_SET -- set the value of a variable; * ATOMIC_XCG -- set the value of a variable, return original value; @@ -114,7 +113,6 @@ typedef unsigned long ATOMIC_BASE_TYPE; #endif #define ATOMIC_INIT(var, val) atomic_init(var, (ATOMIC_BASE_TYPE) (val)) -#define ATOMIC_DESTROY(var)((void) 0) #define ATOMIC_GET(var)((ATOMIC_BASE_TYPE) *(var)) #define ATOMIC_SET(var, val) (*(var) = (ATOMIC_BASE_TYPE) (val)) #define ATOMIC_XCG(var, val) atomic_exchange(var, (ATOMIC_BASE_TYPE) (val)) @@ -173,7 +171,6 @@ typedef __declspec(align(8)) volatile AT #define ATOMIC_VAR_INIT(val) (val) #define ATOMIC_INIT(var, val) (*(var) = (val)) -#define ATOMIC_DESTROY(var)((void) 0) #if SIZEOF_SIZE_T == 8 @@ -276,7 +273,6 @@ typedef volatile ATOMIC_BASE_TYPE ATOMIC #define ATOMIC_VAR_INIT(val) (val) #define ATOMIC_INIT(var, val) (*(var) = (val)) -#define ATOMIC_DESTROY(var)((void) 0) #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) diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c --- a/gdk/gdk_bat.c +++ b/gdk/gdk_bat.c @@ -708,7 +708,6 @@ void BATdestroy(BAT *b) { if (b->tvheap) { - ATOMIC_DESTROY(>tvheap->refs); GDKfree(b->tvheap); } PROPdestroy_nolock(b); @@ -716,7 +715,6 @@ BATdestroy(BAT *b) MT_lock_destroy(>batIdxLock); MT_rwlock_destroy(>thashlock); if (b->theap) { - ATOMIC_DESTROY(>theap->refs); GDKfree(b->theap); } if (b->oldtail) { diff --git a/gdk/gdk_heap.c b/gdk/gdk_heap.c --- a/gdk/gdk_heap.c +++ b/gdk/gdk_heap.c @@ -697,7 +697,6 @@ HEAPdecref(Heap *h, bool remove) //printf("dec ref(%d) %p %d\n", (int)h->refs, h, h->parentid); switch (refs & HEAPREFS) { case 0: - ATOMIC_DESTROY(>refs); HEAPfree(h, (bool) (refs & HEAPREMOVE)); GDKfree(h); break; diff --git a/gdk/gdk_imprints.c b/gdk/gdk_imprints.c --- a/gdk/gdk_imprints.c +++ b/gdk/gdk_imprints.c @@ -837,7 +837,6 @@ IMPSdecref(Imprints *imprints, bool remo ATOMIC_OR(>imprints.refs, HEAPREMOVE); ATOMIC_BASE_TYPE refs = ATOMIC_DEC(>imprints.refs); if ((refs & HEAPREFS) == 0) { - ATOMIC_DESTROY(>imprints.refs); HEAPfree(>imprints, (bool) (refs & HEAPREMOVE)); GDKfree(imprints); } diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c --- a/gdk/gdk_logger.c +++ b/gdk/gdk_logger.c @@ -2319,8 +2319,6 @@ log_load(const char *fn, const char *log logbat_destroy(lg->seqs_id); logbat_destroy(lg->seqs_val); logbat_destroy(lg->dseqs); - ATOMIC_DESTROY(>current->refcount); - ATOMIC_DESTROY(>nr_flushers); MT_lock_destroy(>lock); MT_lock_destroy(>rotation_lock); GDKfree(lg->fn); @@ -2462,10 +2460,6 @@ log_destroy(logger *lg) log_close_output(lg); for (logged_range * p = lg->pending; p; p = lg->pending) { lg->pending = p->next; - ATOMIC_DESTROY(>refcount); - ATOMIC_DESTROY(>last_ts); - ATOMIC_DESTROY(>flushed_ts); - ATOMIC_DESTROY(>drops); GDKfree(p); } if (LOG_DISABLED(lg)) { @@ -2500,7 +2494,6 @@ log_destroy(logger *lg) MT_lock_destroy(>lock); MT_lock_destroy(>rotation_lock); MT_lock_destroy(>flush_lock); - ATOMIC_DESTROY(>nr_flushers); GDKfree(lg->fn); GDKfree(lg->dir); GDKfree(lg->rbuf); diff --git a/gdk/gdk_rtree.c b/gdk/gdk_rtree.c --- a/gdk/gdk_rtree.c +++ b/gdk/gdk_rtree.c @@ -61,7 +61,6 @@ RTREEdecref(BAT *b) ATOMIC_BASE_TYPE refs = ATOMIC_DEC(>trtree->refs); //If RTree is marked for
MonetDB: Dec2023 - Use simple counter for internal thread id, pr...
Changeset: e68cf8d63398 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/e68cf8d63398 Modified Files: cmake/monetdb-defines.cmake gdk/gdk_system.c monetdb5/mal/mal_dataflow.c monetdb_config.h.in Branch: Dec2023 Log Message: Use simple counter for internal thread id, print pthread/LWP values in dump. diffs (193 lines): diff --git a/cmake/monetdb-defines.cmake b/cmake/monetdb-defines.cmake --- a/cmake/monetdb-defines.cmake +++ b/cmake/monetdb-defines.cmake @@ -85,6 +85,7 @@ function(monetdb_configure_defines) check_symbol_exists("getopt_long" "getopt.h" HAVE_GETOPT_LONG) cmake_pop_check_state() check_function_exists("getrlimit" HAVE_GETRLIMIT) + check_function_exists("gettid" HAVE_GETTID) check_function_exists("gettimeofday" HAVE_GETTIMEOFDAY) check_function_exists("getuid" HAVE_GETUID) check_symbol_exists("gmtime_r" "time.h" HAVE_GMTIME_R) diff --git a/gdk/gdk_system.c b/gdk/gdk_system.c --- a/gdk/gdk_system.c +++ b/gdk/gdk_system.c @@ -52,6 +52,8 @@ #include "mutils.h" +static ATOMIC_TYPE GDKthreadid = ATOMIC_VAR_INIT(1); + #ifdef LOCK_STATS ATOMIC_TYPE GDKlockcnt = ATOMIC_VAR_INIT(0); @@ -218,6 +220,9 @@ static struct mtthread { HANDLE hdl; DWORD wtid; #endif +#ifdef HAVE_GETTID + pid_t lwptid; +#endif MT_Id tid; uintptr_t sp; char *errbuf; @@ -227,6 +232,7 @@ struct mtthread mainthread = { .threadname = "main thread", .exited = ATOMIC_VAR_INIT(0), .refs = 1, + .tid = 1, }; #ifdef HAVE_PTHREAD_H static pthread_mutex_t posthread_lock = PTHREAD_MUTEX_INITIALIZER; @@ -285,9 +291,22 @@ dump_threads(void) MT_Cond *cn = t->condwait; struct mtthread *jn = t->joinwait; int pos = snprintf(buf, sizeof(buf), - "%s, tid %zu, %"PRIu32" free bats, waiting for %s%s, working on %.200s", + "%s, tid %zu, " +#ifdef HAVE_PTHREAD_H + "Thread 0x%lx, " +#endif +#ifdef HAVE_GETTID + "LWP %ld, " +#endif + "%"PRIu32" free bats, waiting for %s%s, working on %.200s", t->threadname, t->tid, +#ifdef HAVE_PTHREAD_H + (long) t->hdl, +#endif +#ifdef HAVE_GETTID + (long) t->lwptid, +#endif t->freebats.nfreebats, lk ? "lock " : sm ? "semaphore " : cn ? "condvar " : jn ? "thread " : "", lk ? lk->name : sm ? sm->name : cn ? cn->name : jn ? jn->threadname : "nothing", @@ -330,6 +349,9 @@ MT_thread_init(void) { if (thread_initialized) return true; +#ifdef HAVE_GETTID + mainthread.lwptid = gettid(); +#endif #ifdef HAVE_PTHREAD_H int ret; @@ -357,7 +379,6 @@ MT_thread_init(void) } InitializeCriticalSection(_cs); #endif - mainthread.tid = (MT_Id) mainthread.next = NULL; mtthreads = thread_initialized = true; @@ -366,8 +387,6 @@ MT_thread_init(void) bool MT_thread_register(void) { - MT_Id mtid; - assert(thread_initialized); if (!thread_initialized) return false; @@ -387,7 +406,6 @@ MT_thread_register(void) if (self == NULL) return false; - mtid = (MT_Id) self; *self = (struct mtthread) { .detached = false, #ifdef HAVE_PTHREAD_H @@ -396,7 +414,7 @@ MT_thread_register(void) .wtid = GetCurrentThreadId(), #endif .refs = 1, - .tid = mtid, + .tid = ATOMIC_INC(), }; snprintf(self->threadname, sizeof(self->threadname), "foreign %zu", self->tid); ATOMIC_INIT(>exited, 0); @@ -736,6 +754,9 @@ thread_starter(void *arg) struct mtthread *self = (struct mtthread *) arg; void *data = self->data; +#ifdef HAVE_GETTID + self->lwptid = gettid(); +#endif #ifdef HAVE_PTHREAD_H #ifdef HAVE_PTHREAD_SETNAME_NP /* name can be at most 16 chars including \0 */ @@ -849,7 +870,6 @@ int MT_create_thread(MT_Id *t, void (*f) (void *), void *arg, enum MT_thr_detach d, const char *threadname) { struct mtthread *self; - MT_Id mtid; assert(thread_initialized); join_threads(); @@ -883,7 +903,6 @@ MT_create_thread(MT_Id *t, void (*f) (vo #endif return -1; } - mtid = (MT_Id) self; *self = (struct mtthread) { .func = f, @@ -891,7 +910,7 @@ MT_create_thread(MT_Id *t, void (*f) (vo .waiting = false, .detached = (d == MT_THR_DETACHED), .refs = 1, - .tid = mtid, + .tid = ATOMIC_INC(), };
MonetDB: default - Merge with Dec2023 branch.
Changeset: d03ca7aa07a0 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/d03ca7aa07a0 Modified Files: gdk/gdk_bbp.c Branch: default Log Message: Merge with Dec2023 branch. diffs (163 lines): diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c --- a/gdk/gdk_bbp.c +++ b/gdk/gdk_bbp.c @@ -4875,9 +4875,14 @@ BBPprintinfo(void) ATOMIC_BASE_TYPE status = BBP_status(i); struct counters *bt = [r > 0][BATdirty(b)][(status & BBPPERSISTENT) != 0][(status & BBPLOADED) != 0][(status & BBPHOT) != 0]; bt->nr++; - bt->sz += HEAPmemsize(b->theap) + HEAPmemsize(b->tvheap); - bt->vmsz += HEAPvmsize(b->theap) + HEAPvmsize(b->tvheap); - MT_lock_unset(>theaplock); + if (b->theap && b->batCacheid == b->theap->parentid) { + bt->sz += HEAPmemsize(b->theap); + bt->vmsz += HEAPvmsize(b->theap); + } + if (b->tvheap && b->batCacheid == b->tvheap->parentid) { + bt->sz += HEAPmemsize(b->tvheap); + bt->vmsz += HEAPvmsize(b->tvheap); + } MT_lock_unset(>theaplock); } MT_lock_unset((i)); diff --git a/misc/python/fixlicense.py b/misc/python/fixlicense.py --- a/misc/python/fixlicense.py +++ b/misc/python/fixlicense.py @@ -141,7 +141,7 @@ def getcomments(file, pre=None, post=Non f = open(file) # can raise IOError line = f.readline() f.close() -if line[:2] == '#!': +if line.startswith('#!'): if 'bash' in line or '/sh' in line: ext = '.sh' elif 'python' in line or 'PYTHON' in line: @@ -236,7 +236,7 @@ def addlicense(file, pre=None, post=None if pre: g.write(pre + '\n') for l in license: -if l[:1] == '\t' or (not l and (not end or end[:1] == '\t')): +if l.startswith('\t') or (not l and (not end or end.startswith('\t'))): # if text after start begins with tab, remove spaces from start g.write(start.rstrip() + l + end + '\n') else: diff --git a/sql/test/concurrent/Tests/crash_on_concurrent_use.SF-1411926.SQL.py b/sql/test/concurrent/Tests/crash_on_concurrent_use.SF-1411926.SQL.py --- a/sql/test/concurrent/Tests/crash_on_concurrent_use.SF-1411926.SQL.py +++ b/sql/test/concurrent/Tests/crash_on_concurrent_use.SF-1411926.SQL.py @@ -36,7 +36,8 @@ class Client(threading.Thread): def output(self): if self.error == 0 and self.result != [(1,), (2,), (3,), (4,), (5,), (6,), (7,), (8,), (9,), (0,)]: -sys.stderr.write('[(1,), (2,), (3,), (4,), (5,), (6,), (7,), (8,), (9,), (0,)] expected') +print(f'received: {self.result}', file=sys.stderr) +print('expected: [(1,), (2,), (3,), (4,), (5,), (6,), (7,), (8,), (9,), (0,)]', file=sys.stderr) def main(): C = [] diff --git a/sql/test/mapi/Tests/python3_dec38.SQL.bat b/sql/test/mapi/Tests/python3_dec38.SQL.bat deleted file mode 100755 --- a/sql/test/mapi/Tests/python3_dec38.SQL.bat +++ /dev/null @@ -1,9 +0,0 @@ -@echo off - -rem must be aligned with the installation directory chosen in -rem clients/python/test/Makefile.ag -set testpath=%TSTSRCDIR% - -prompt # $t $g - -"%PYTHON%" "%testpath%/python_dec38.py %MAPIPORT% %TSTDB% %MAPIHOST%" diff --git a/sql/test/mapi/Tests/python_dec38.py b/sql/test/mapi/Tests/python3_dec38.SQL.py rename from sql/test/mapi/Tests/python_dec38.py rename to sql/test/mapi/Tests/python3_dec38.SQL.py --- a/sql/test/mapi/Tests/python_dec38.py +++ b/sql/test/mapi/Tests/python3_dec38.SQL.py @@ -11,10 +11,10 @@ # Copyright 1997 - July 2008 CWI. import pymonetdb -import sys +import sys, os from decimal import Decimal -dbh = pymonetdb.connect(port=int(sys.argv[1]),database=sys.argv[2],hostname=sys.argv[3],autocommit=True) +dbh = pymonetdb.connect(port=int(os.getenv('MAPIPORT')),database=os.getenv('TSTDB'),hostname=os.getenv('MAPIHOST'),autocommit=True) cursor = dbh.cursor() diff --git a/sql/test/mapi/Tests/python3_dec38.SQL.sh b/sql/test/mapi/Tests/python3_dec38.SQL.sh deleted file mode 100755 --- a/sql/test/mapi/Tests/python3_dec38.SQL.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh - -# must be aligned with the installation directory chosen in -# clients/python/test/Makefile.ag -testpath="$TSTSRCDIR" - -${PYTHON} $testpath/python_dec38.py $MAPIPORT $TSTDB $MAPIHOST diff --git a/sql/test/mapi/Tests/python3_int128.SQL.bat b/sql/test/mapi/Tests/python3_int128.SQL.bat deleted file mode 100755 --- a/sql/test/mapi/Tests/python3_int128.SQL.bat +++ /dev/null @@ -1,9 +0,0 @@ -@echo off - -rem must be aligned with the installation directory chosen in -rem
MonetDB: Dec2023 - Use startswith method.
Changeset: 88b675fa0430 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/88b675fa0430 Modified Files: misc/python/fixlicense.py testing/malmapi.py Branch: Dec2023 Log Message: Use startswith method. diffs (42 lines): diff --git a/misc/python/fixlicense.py b/misc/python/fixlicense.py --- a/misc/python/fixlicense.py +++ b/misc/python/fixlicense.py @@ -141,7 +141,7 @@ def getcomments(file, pre=None, post=Non f = open(file) # can raise IOError line = f.readline() f.close() -if line[:2] == '#!': +if line.startswith('#!'): if 'bash' in line or '/sh' in line: ext = '.sh' elif 'python' in line or 'PYTHON' in line: @@ -236,7 +236,7 @@ def addlicense(file, pre=None, post=None if pre: g.write(pre + '\n') for l in license: -if l[:1] == '\t' or (not l and (not end or end[:1] == '\t')): +if l.startswith('\t') or (not l and (not end or end.startswith('\t'))): # if text after start begins with tab, remove spaces from start g.write(start.rstrip() + l + end + '\n') else: diff --git a/testing/malmapi.py b/testing/malmapi.py --- a/testing/malmapi.py +++ b/testing/malmapi.py @@ -69,7 +69,7 @@ def handle_error(error): """ -if error[:13] == 'SQLException:': +if error.startswith('SQLException:'): idx = str.index(error, ':', 14) error = error[idx + 10:] if len(error) > 5 and error[:5] in errors: @@ -104,7 +104,7 @@ class Connection(object): unix_socket is used if hostname is not defined. """ -if hostname and hostname[:1] == '/' and not unix_socket: +if hostname and hostname.startswith('/') and not unix_socket: unix_socket = '%s/.s.monetdb.%d' % (hostname, port) hostname = None if not unix_socket and os.path.exists("/tmp/.s.monetdb.%i" % port): ___ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org
MonetDB: Dec2023 - Tests should never just tell you what was exp...
Changeset: 86e1e0413567 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/86e1e0413567 Modified Files: sql/test/concurrent/Tests/crash_on_concurrent_use.SF-1411926.SQL.py Branch: Dec2023 Log Message: Tests should never just tell you what was expected. Give actual results too! diffs (13 lines): diff --git a/sql/test/concurrent/Tests/crash_on_concurrent_use.SF-1411926.SQL.py b/sql/test/concurrent/Tests/crash_on_concurrent_use.SF-1411926.SQL.py --- a/sql/test/concurrent/Tests/crash_on_concurrent_use.SF-1411926.SQL.py +++ b/sql/test/concurrent/Tests/crash_on_concurrent_use.SF-1411926.SQL.py @@ -36,7 +36,8 @@ class Client(threading.Thread): def output(self): if self.error == 0 and self.result != [(1,), (2,), (3,), (4,), (5,), (6,), (7,), (8,), (9,), (0,)]: -sys.stderr.write('[(1,), (2,), (3,), (4,), (5,), (6,), (7,), (8,), (9,), (0,)] expected') +print(f'received: {self.result}', file=sys.stderr) +print('expected: [(1,), (2,), (3,), (4,), (5,), (6,), (7,), (8,), (9,), (0,)]', file=sys.stderr) def main(): C = [] ___ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org
MonetDB: check - merge with default
Changeset: b9e1b9936232 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/b9e1b9936232 Modified Files: sql/server/sql_mvc.c sql/storage/store.c Branch: check Log Message: merge with default diffs (truncated from 1294 to 300 lines): diff --git a/.hgtags b/.hgtags --- a/.hgtags +++ b/.hgtags @@ -824,3 +824,4 @@ 95d8feaa1167b5ba87bd99253c3f4e62ebf528a1 dcc8c702e685a4faf21ccf663028d1bc3d1165d1 Dec2023_5 dcc8c702e685a4faf21ccf663028d1bc3d1165d1 Dec2023_SP1_release d656785f49ee62c19705722aa6b7c171904c64d5 Dec2023_7 +d656785f49ee62c19705722aa6b7c171904c64d5 Dec2023_SP2_release diff --git a/MonetDB.spec b/MonetDB.spec --- a/MonetDB.spec +++ b/MonetDB.spec @@ -151,7 +151,6 @@ BuildRequires: pkgconfig(libR) # BuildRequires: pkgconfig(gdal)# -DSHP=ON # BuildRequires: pkgconfig(netcdf) # -DNETCDF=ON # BuildRequires: pkgconfig(proj)# -DWITH_PROJ=ON -# BuildRequires: pkgconfig(snappy) # -DWITH_SNAPPY=ON # BuildRequires: pkgconfig(valgrind)# -DWITH_VALGRIND=ON %if (0%{?fedora} >= 22) @@ -868,7 +867,6 @@ sed -i 's/1\.2/1.1/' misc/selinux/monetd -DWITH_PCRE=ON \ -DWITH_PROJ=OFF \ -DWITH_READLINE=ON \ --DWITH_SNAPPY=OFF \ -DWITH_VALGRIND=OFF \ -DWITH_XML2=ON \ -DWITH_ZLIB=ON @@ -895,9 +893,6 @@ install -d -m 0775 %{buildroot}%{_locals install -d -m 0775 %{buildroot}%{_rundir}/monetdb # remove unwanted stuff -# .la files -rm -f %{buildroot}%{_libdir}/*.la -rm -f %{buildroot}%{_libdir}/monetdb5/*.la rm -f %{buildroot}%{_libdir}/monetdb5/lib_opt_sql_append.so rm -f %{buildroot}%{_libdir}/monetdb5/lib_microbenchmark*.so rm -f %{buildroot}%{_libdir}/monetdb5/lib_udf*.so diff --git a/README.rst b/README.rst --- a/README.rst +++ b/README.rst @@ -69,8 +69,8 @@ CINTEGRATIONEnable support for C CMAKE_SUMMARY Show a summary of the cmake configuration (for debug purposes, default=OFF) CMAKE_UNITTESTS Build and run the unittest for the build system (default=OFF) FITSEnable support for FITS -GEOMEnable support for geom module -INT128 Enable support for 128-bit integers +GEOMEnable support for geom module (using libgeos library) +INT128 Enable support for 128-bit integers (if compiler supports them) NETCDF Enable support for netcdf ODBCCompile the MonetDB ODBC driver PY3INTEGRATION Enable support for Python 3 integration into MonetDB @@ -82,7 +82,9 @@ TESTING Enable support for t WITH_BZ2Include bz2 support WITH_CMOCKA Include cmocka support (default=OFF) WITH_CURL Include curl support +WITH_LZ4Include lz4 support WITH_LZMA Include lzma support +WITH_OPENSSLInclude TLS support (secure client/server connection) WITH_PCRE Include pcre support WITH_PROJ Include proj support WITH_READLINE Include readline support @@ -98,27 +100,27 @@ On Fedora, the following packages are re ``bison``, ``cmake``, ``gcc``, ``pkgconf``, ``python3``. The following packages are optional but recommended: -``bzip2-devel``, ``pcre-devel``, ``readline-devel``, -``xz-devel``, ``zlib-devel``. +``bzip2-devel``, ``lz4-devel``, ``openssl-devel``, ``pcre-devel``, +``readline-devel``, ``xz-devel``, ``zlib-devel``. The following packages are optional: ``cfitsio-devel``, ``gdal-devel``, ``geos-devel``, ``libasan``, -``libcurl-devel``, ``libxml2-devel``, ``netcdf-devel``, ``proj-devel``, -``python3-devel``, ``python3-numpy``, ``R-core-devel``, -``unixODBC-devel``, ``valgrind-devel``. +``libcmocka-devel``, ``libcurl-devel``, ``libxml2-devel``, +``netcdf-devel``, ``proj-devel``, ``python3-devel``, ``python3-numpy``, +``R-core-devel``, ``unixODBC-devel``, ``valgrind-devel``. On Ubuntu and Debian the following packages are required: ``bison``, ``cmake``, ``gcc``, ``pkg-config``, ``python3``. The following packages are optional but recommended: -``libbz2-dev``, ``libpcre3-dev``, ``libreadline-dev``, -``liblzma-dev``, ``zlib1g-dev``. +``libbz2-dev``, ``liblz4-dev``, ``libpcre3-dev``, ``libreadline-dev``, +``liblzma-dev``, ``libssl-dev``, ``zlib1g-dev``. The following packages are optional: -``libasan5``, ``libcfitsio-dev``, ``libcurl4-gnutls-dev``, -``libgdal-dev``, ``libgeos-dev``, ``libnetcdf-dev``, ``libproj-dev``, -``libxml2-dev``, ``python3-dev``, ``python3-numpy``, ``r-base-dev``, -``unixodbc-dev``, ``valgrind``. +``libasan5``, ``libcfitsio-dev``, ``libcmocka-dev``, +``libcurl4-gnutls-dev``, ``libgdal-dev``, ``libgeos-dev``, +``libnetcdf-dev``, ``libproj-dev``, ``libxml2-dev``, ``python3-dev``, +``python3-numpy``, ``r-base-dev``, ``unixodbc-dev``, ``valgrind``. ``cmake`` must be at least version 3.12, ``python`` must be at least version 3.5. diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out --- a/clients/Tests/exports.stable.out +++
MonetDB: check - extend key_types table.
Changeset: 809397ccd000 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/809397ccd000 Modified Files: sql/scripts/10_sys_schema_extension.sql Branch: check Log Message: extend key_types table. diffs (22 lines): diff --git a/sql/scripts/10_sys_schema_extension.sql b/sql/scripts/10_sys_schema_extension.sql --- a/sql/scripts/10_sys_schema_extension.sql +++ b/sql/scripts/10_sys_schema_extension.sql @@ -396,14 +396,16 @@ GRANT SELECT ON sys.function_languages T CREATE TABLE sys.key_types ( key_type_id SMALLINT NOT NULL PRIMARY KEY, -key_type_name VARCHAR(15) NOT NULL UNIQUE); +key_type_name VARCHAR(35) NOT NULL UNIQUE); -- Values taken from sql/include/sql_catalog.h see typedef enum -- key_type: pkey, ukey, fkey. INSERT INTO sys.key_types (key_type_id, key_type_name) VALUES (0, 'Primary Key'), (1, 'Unique Key'), - (2, 'Foreign Key'); + (2, 'Foreign Key'), + (3, 'Unique Key With Nulls Not Distinct'), + (4, 'Check Constraint'); ALTER TABLE sys.key_types SET READ ONLY; GRANT SELECT ON sys.key_types TO PUBLIC; ___ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org
MonetDB: check - implement CHECK constraint as a key type instea...
Changeset: 49dcdaff8bf0 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/49dcdaff8bf0 Modified Files: sql/backends/monet5/rel_bin.c sql/include/sql_catalog.h sql/server/rel_schema.c sql/server/sql_mvc.c sql/server/sql_mvc.h sql/server/sql_parser.y sql/server/sql_partition.c sql/storage/sql_storage.h sql/storage/store.c Branch: check Log Message: implement CHECK constraint as a key type instead of as a column property diffs (truncated from 695 to 300 lines): diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c --- a/sql/backends/monet5/rel_bin.c +++ b/sql/backends/monet5/rel_bin.c @@ -4923,7 +4923,7 @@ sql_insert_triggers(backend *be, sql_tab } static void -sql_insert_check(backend *be, sql_table *t, sql_rel *inserts, list *refs) +sql_insert_check(backend *be, sql_key *key, sql_rel *inserts, list *refs) { mvc *sql = be->mvc; node *m, *n; @@ -4933,25 +4933,23 @@ sql_insert_check(backend *be, sql_table sql_subtype *bt = sql_bind_localtype("bit"); - for (n = ol_first_node(t->columns), m = exps->h; n && m; + for (n = key->columns->h, m = exps->h; n && m; n = n->next, m = m->next) { sql_exp *i = m->data; - sql_column *c = n->data; - if (c->check) { - i->alias.rname= sa_strdup(sql->sa, t->base.name); - i->alias.name= sa_strdup(sql->sa, c->base.name); - - int pos = 0; - sql_rel* rel = rel_read(sql, sa_strdup(sql->sa, c->check), , sa_list(sql->sa)); - rel->l = inserts; - stmt* s = subrel_bin(be, rel, refs); - s = stmt_uselect(be, column(be, s), stmt_atom(be, atom_zero_value(sql->sa, bt)), cmp_equal, NULL, 0, 1); - sql_subfunc *cnt = sql_bind_func(sql, "sys", "count", sql_bind_localtype("void"), NULL, F_AGGR, true, true); - s = stmt_aggr(be, s, NULL, NULL, cnt, 1, 0, 1); - char *msg = sa_message(sql->sa, SQLSTATE(40002) "INSERT INTO: CHECK constraint violated for column %s.%s", c->t->base.name, c->base.name); - (void)stmt_exception(be, s, msg, 1); - } - } + sql_column *c = ((sql_kc*) n->data)->c; + i->alias.rname= sa_strdup(sql->sa, c->t->base.name); + i->alias.name= sa_strdup(sql->sa, c->base.name); + } + + int pos = 0; + sql_rel* rel = rel_read(sql, sa_strdup(sql->sa, key->check), , sa_list(sql->sa)); + rel->l = inserts; + stmt* s = subrel_bin(be, rel, refs); + s = stmt_uselect(be, column(be, s), stmt_atom(be, atom_zero_value(sql->sa, bt)), cmp_equal, NULL, 0, 1); + sql_subfunc *cnt = sql_bind_func(sql, "sys", "count", sql_bind_localtype("void"), NULL, F_AGGR, true, true); + s = stmt_aggr(be, s, NULL, NULL, cnt, 1, 0, 1); + char *msg = sa_message(sql->sa, SQLSTATE(40002) "INSERT INTO: CHECK constraint violated: %s", key->base.name); + (void)stmt_exception(be, s, msg, 1); } static sql_table * @@ -5032,7 +5030,11 @@ rel2bin_insert(backend *be, sql_rel *rel if (idx_ins) pin = refs_find_rel(refs, prel); - sql_insert_check(be, t, rel->r, refs); + for (n = ol_first_node(t->keys); n; n = n->next) { + sql_key * key = n->data; + if (key->type == ckey) + sql_insert_check(be, key, rel->r, refs); + } if (!sql_insert_check_null(be, t, inserts->op4.lval)) return NULL; @@ -5916,28 +5918,22 @@ sql_update_triggers(backend *be, sql_tab } static void -sql_update_check(backend *be, sql_table *t, sql_rel *rupdates, stmt **updates, list *refs) +sql_update_check(backend *be, sql_key * key, sql_rel *rupdates, list *refs) { + /* TODO: this won't work for general table check constraints involving updates to a strict subset of check columns*/ mvc *sql = be->mvc; - node *n; sql_subfunc *cnt = sql_bind_func(sql, "sys", "count", sql_bind_localtype("void"), NULL, F_AGGR, true, true); sql_subtype *bt = sql_bind_localtype("bit"); - for (n = ol_first_node(t->columns); n; n = n->next) { - sql_column *c = n->data; - - if (updates[c->colnr] && c->check) { - - int pos = 0; - sql_rel* rel = rel_read(sql, sa_strdup(sql->sa, c->check), , sa_list(sql->sa)); - rel->l = rupdates; - stmt* s = subrel_bin(be, rel, refs); - s = stmt_uselect(be, column(be, s), stmt_atom(be, atom_zero_value(sql->sa, bt)), cmp_equal, NULL, 0, 1); - s = stmt_aggr(be, s, NULL, NULL, cnt, 1, 0, 1); - char *msg = sa_message(sql->sa, SQLSTATE(40002)
MonetDB: check - add tests for check constraint
Changeset: 7b5630309f11 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/7b5630309f11 Added Files: sql/test/2024/Tests/check.test Modified Files: sql/test/2024/Tests/All Branch: check Log Message: add tests for check constraint diffs (32 lines): diff --git a/sql/test/2024/Tests/All b/sql/test/2024/Tests/All --- a/sql/test/2024/Tests/All +++ b/sql/test/2024/Tests/All @@ -1,2 +1,3 @@ groupby_primary_key_project_unique_key distinct_from +check diff --git a/sql/test/2024/Tests/check.test b/sql/test/2024/Tests/check.test new file mode 100644 --- /dev/null +++ b/sql/test/2024/Tests/check.test @@ -0,0 +1,20 @@ +statement ok +create table bar (i int, j int CHECK (j > 0)); + +statement ok +insert into bar values (1,10), (2, 20), (3, 30); + +statement error +update bar set j = -30 where i = 3; + +statement error +update bar set j = -j; + +statement error +insert into bar values (4, -40); + +statement ok +insert into bar select * from bar + +statement error +insert into bar select 4, -40; ___ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org