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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list