Changeset: 3af052afd748 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/3af052afd748 Modified Files: testing/Mz.py.in Branch: default Log Message:
Merged with Jul2021 diffs (truncated from 1433 to 300 lines): diff --git a/gdk/gdk_utils.c b/gdk/gdk_utils.c --- a/gdk/gdk_utils.c +++ b/gdk/gdk_utils.c @@ -109,7 +109,7 @@ GDKgetenv(const char *name) } MT_lock_unset(&GDKenvlock); if (GDKkey && GDKval) { - BUN b = BUNfnd(GDKkey, (ptr) name); + BUN b = BUNfnd(GDKkey, name); if (b != BUN_NONE) { BATiter GDKenvi = bat_iterator(GDKval); @@ -250,9 +250,16 @@ GDKsetenv(const char *name, const char * } MT_lock_unset(&GDKenvlock); } - gdk_return rc = BUNappend(GDKkey, name, false); - if (rc == GDK_SUCCEED) - rc = BUNappend(GDKval, conval ? conval : value, false); + BUN p = BUNfnd(GDKkey, name); + gdk_return rc; + if (p != BUN_NONE) { + rc = BUNreplace(GDKval, p + GDKval->hseqbase, + conval ? conval : value, false); + } else { + rc = BUNappend(GDKkey, name, false); + if (rc == GDK_SUCCEED) + rc = BUNappend(GDKval, conval ? conval : value, false); + } GDKfree(conval); return rc; } diff --git a/monetdb5/modules/kernel/bat5.c b/monetdb5/modules/kernel/bat5.c --- a/monetdb5/modules/kernel/bat5.c +++ b/monetdb5/modules/kernel/bat5.c @@ -781,16 +781,14 @@ BKCgetSequenceBase(oid *r, const bat *bi */ #define shrinkloop(Type) \ do { \ - Type *p = (Type*)bi.base; \ - Type *q = p + bi.count; \ - Type *r = (Type*)Tloc(bn, 0); \ - cnt=0; \ + const Type *restrict in = (Type*)bi.base; \ + Type *restrict r = (Type*)Tloc(bn, 0); \ for (;p<q; oidx++, p++) { \ if ( o < ol && *o == oidx ){ \ o++; \ } else { \ + *r++ = in[p]; \ cnt++; \ - *r++ = *p; \ } \ } \ } while (0) @@ -799,7 +797,7 @@ str BKCshrinkBAT(bat *ret, const bat *bid, const bat *did) { BAT *b, *d, *bn, *bs; - BUN cnt =0; + BUN cnt = 0, p = 0, q; oid oidx = 0, *o, *ol; gdk_return res; @@ -825,54 +823,50 @@ BKCshrinkBAT(bat *ret, const bat *bid, c } o = (oid*)Tloc(bs, 0); - ol= (oid*)Tloc(bs, BUNlast(bs)); + ol = (oid*)Tloc(bs, BUNlast(bs)); BATiter bi = bat_iterator(b); - switch(ATOMstorage(b->ttype) ){ - case TYPE_bte: shrinkloop(bte); break; - case TYPE_sht: shrinkloop(sht); break; - case TYPE_int: shrinkloop(int); break; - case TYPE_lng: shrinkloop(lng); break; + q = bi.count; + if (ATOMvarsized(bi.type)) { + for (;p<q; oidx++, p++) { + if ( o < ol && *o == oidx ){ + o++; + } else { + if (BUNappend(bn, BUNtail(bi, p), false) != GDK_SUCCEED) { + bat_iterator_end(&bi); + BBPunfix(b->batCacheid); + BBPunfix(bn->batCacheid); + throw(MAL, "bat.shrink", GDK_EXCEPTION); + } + cnt++; + } + } + } else { + uint16_t width = bi.width; + + switch (width) { + case 1:shrinkloop(bte); break; + case 2:shrinkloop(sht); break; + case 4:shrinkloop(int); break; + case 8:shrinkloop(lng); break; #ifdef HAVE_HGE - case TYPE_hge: shrinkloop(hge); break; + case 16:shrinkloop(hge); break; #endif - case TYPE_flt: shrinkloop(flt); break; - case TYPE_dbl: shrinkloop(dbl); break; - case TYPE_oid: shrinkloop(oid); break; - default: - if (ATOMvarsized(bn->ttype)) { - BUN p = 0; - BUN q = BUNlast(b); + default: { + const int8_t *restrict src = (int8_t*) bi.base; + int8_t *restrict dst = (int8_t*) Tloc(bn, 0); - cnt=0; for (;p<q; oidx++, p++) { - if ( o < ol && *o == oidx ){ + if (o < ol && *o == oidx) { o++; } else { - if (BUNappend(bn, BUNtail(bi, p), false) != GDK_SUCCEED) { - bat_iterator_end(&bi); - BBPunfix(b->batCacheid); - BBPunfix(bn->batCacheid); - throw(MAL, "bat.shrink", GDK_EXCEPTION); - } + memcpy(dst, src, width); + dst += width; cnt++; } + src += width; } - } else { - switch( bi.width){ - case 1:shrinkloop(bte); break; - case 2:shrinkloop(sht); break; - case 4:shrinkloop(int); break; - case 8:shrinkloop(lng); break; -#ifdef HAVE_HGE - case 16:shrinkloop(hge); break; -#endif - default: - bat_iterator_end(&bi); - BBPunfix(b->batCacheid); - BBPunfix(bn->batCacheid); - throw(MAL, "bat.shrink", "Illegal argument type"); - } + } } } bat_iterator_end(&bi); diff --git a/monetdb5/modules/mal/mal_mapi.c b/monetdb5/modules/mal/mal_mapi.c --- a/monetdb5/modules/mal/mal_mapi.c +++ b/monetdb5/modules/mal/mal_mapi.c @@ -627,6 +627,7 @@ SERVERlisten(int port, const char *usock SOCKET *psock; #ifdef HAVE_SYS_UN_H struct sockaddr_un userver; + char *usockfilenew = NULL; #endif SOCKLEN length = 0; MT_Id pid; @@ -664,6 +665,9 @@ SERVERlisten(int port, const char *usock if (msg != MAL_SUCCEED) { return msg; } + char sport[10]; + snprintf(sport, sizeof(sport), "%d", port); + GDKsetenv("mapi_port", sport); } #ifdef HAVE_SYS_UN_H @@ -705,11 +709,19 @@ SERVERlisten(int port, const char *usock userver.sun_family = AF_UNIX; const char *p; - if ((p = strstr(usockfile, "${PORT}")) != NULL) - snprintf(userver.sun_path, sizeof(userver.sun_path), - "%.*s%d%s", (int) (p - usockfile), usockfile, port<0?0:port, p + 7); - else - memcpy(userver.sun_path, usockfile, ulen + 1); + if ((p = strstr(usockfile, "${PORT}")) != NULL) { + usockfilenew = GDKmalloc(ulen + 1); + /* note, "${PORT}" is longer than the longest possible decimal + * representation of a port number ("65535") */ + if (usockfilenew) { + snprintf(usockfilenew, ulen + 1, + "%.*s%d%s", (int) (p - usockfile), usockfile, + port < 0 ? 0 : port, p + 7); + usockfile = usockfilenew; + ulen = strlen(usockfile); + } + } + memcpy(userver.sun_path, usockfile, ulen + 1); length = (SOCKLEN) sizeof(userver); if (MT_remove(usockfile) == -1 && errno != ENOENT) { char *e = createException(IO, "mal_mapi.listen", OPERATION_FAILED ": remove UNIX socket file: %s", @@ -719,6 +731,8 @@ SERVERlisten(int port, const char *usock if (socks[1] != INVALID_SOCKET) closesocket(socks[1]); closesocket(socks[2]); + if (usockfilenew) + GDKfree(usockfilenew); return e; } if (bind(socks[2], (struct sockaddr *) &userver, length) == SOCKET_ERROR) { @@ -733,10 +747,13 @@ SERVERlisten(int port, const char *usock closesocket(socks[1]); closesocket(socks[2]); (void) MT_remove(usockfile); - throw(IO, "mal_mapi.listen", + buf = createException(IO, "mal_mapi.listen", OPERATION_FAILED ": binding to UNIX socket file %s failed: %s", usockfile, err); + if (usockfilenew) + GDKfree(usockfilenew); + return buf; } if (listen(socks[2], maxusers) == SOCKET_ERROR) { #ifdef _MSC_VER @@ -750,11 +767,15 @@ SERVERlisten(int port, const char *usock closesocket(socks[1]); closesocket(socks[2]); (void) MT_remove(usockfile); - throw(IO, "mal_mapi.listen", + buf = createException(IO, "mal_mapi.listen", OPERATION_FAILED ": setting UNIX socket file %s to listen failed: %s", usockfile, err); + if (usockfilenew) + GDKfree(usockfilenew); + return buf; } + GDKsetenv("mapi_usock", usockfile); } #endif @@ -800,6 +821,8 @@ SERVERlisten(int port, const char *usock printf("# Listening for UNIX domain connection requests on " "mapi:monetdb://%s\n", usockfile); } + if (usockfilenew) + GDKfree(usockfilenew); #endif return MAL_SUCCEED; diff --git a/sql/storage/bat/bat_utils.c b/sql/storage/bat/bat_utils.c --- a/sql/storage/bat/bat_utils.c +++ b/sql/storage/bat/bat_utils.c @@ -71,27 +71,27 @@ log_bid temp_copy(log_bid b, bool renew, bool temp) { /* make a copy of b, if temp is set only create a empty bat */ - BAT *o = temp_descriptor(b); - BAT *c; + BAT *o, *c = NULL; log_bid r; - if (!o) - return BID_NIL; if (!renew) { - if (!(c = COLcopy(o, o->ttype, true, PERSISTENT))) { - bat_destroy(o); + if (!(o = temp_descriptor(b))) + return BID_NIL; + c = COLcopy(o, o->ttype, true, PERSISTENT); + bat_destroy(o); + if (!c) return BID_NIL; - } BATcommit(c, BUN_NONE); - } else if (!(c = bat_new(o->ttype, COLSIZE, PERSISTENT))) { - bat_destroy(o); - return BID_NIL; + } else { + if (!(o = quick_descriptor(b))) + return BID_NIL; + if (!(c = bat_new(o->ttype, COLSIZE, PERSISTENT))) + return BID_NIL; } if (!temp) bat_set_access(c, BAT_READ); r = temp_create(c); bat_destroy(c); - bat_destroy(o); return r; } diff --git a/sql/test/mserver5-sql-readonly/Tests/mserver5-sql-readonly-table.py b/sql/test/mserver5-sql-readonly/Tests/mserver5-sql-readonly-table.py --- a/sql/test/mserver5-sql-readonly/Tests/mserver5-sql-readonly-table.py +++ b/sql/test/mserver5-sql-readonly/Tests/mserver5-sql-readonly-table.py @@ -7,11 +7,12 @@ except ImportError: with process.server(args=[], + mapiport='0', stdin=process.PIPE, stdout=process.PIPE, _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list