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

Reply via email to