Changeset: 83482b77a7ed for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=83482b77a7ed
Modified Files:
        clients/Tests/exports.stable.out
        clients/mapiclient/mhelp.c
        clients/mapilib/mapi.c
        common/utils/msabaoth.c
        gdk/gdk.h
        gdk/gdk_bat.c
        gdk/gdk_batop.c
        gdk/gdk_bbp.c
        gdk/gdk_group.c
        gdk/gdk_interprocess.c
        gdk/gdk_interprocess.h
        gdk/gdk_join.c
        gdk/gdk_logger.c
        gdk/gdk_logger.h
        gdk/gdk_private.h
        gdk/gdk_select.c
        gdk/gdk_storage.c
        gdk/gdk_tm.c
        gdk/gdk_unique.c
        monetdb5/mal/mal_authorize.c
        monetdb5/mal/mal_profiler.c
        monetdb5/modules/atoms/streams.c
        monetdb5/modules/kernel/algebra.c
        monetdb5/modules/kernel/bat5.c
        monetdb5/modules/kernel/bat5.h
        monetdb5/modules/kernel/status.c
        monetdb5/modules/mal/batExtensions.c
        monetdb5/modules/mal/mal_mapi.c
        monetdb5/modules/mal/querylog.c
        monetdb5/modules/mal/tablet.c
        sql/backends/monet5/UDF/pyapi/pyapi.c
        sql/backends/monet5/sql.c
        sql/backends/monet5/vaults/lidar/lidar.c
        sql/storage/bat/bat_storage.c
        sql/storage/bat/bat_utils.c
        sql/storage/bat/bat_utils.h
        testing/Mtest.py.in
        tools/merovingian/daemon/client.c
        tools/merovingian/daemon/forkmserver.c
Branch: default
Log Message:

Merge with Apr2019 branch.


diffs (truncated from 2077 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
@@ -19,7 +19,7 @@ int ATOMprint(int id, const void *val, s
 gdk_return BATappend(BAT *b, BAT *n, BAT *s, bool force) 
__attribute__((__warn_unused_result__));
 void BATassertProps(BAT *b);
 atomDesc BATatoms[];
-BAT *BATattach(int tt, const char *heapfile, int role);
+BAT *BATattach(int tt, const char *heapfile, role_t role);
 gdk_return BATbandjoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, 
const void *c1, const void *c2, bool li, bool hi, BUN estimate) 
__attribute__((__warn_unused_result__));
 BAT *BATcalcabsolute(BAT *b, BAT *s);
 BAT *BATcalcadd(BAT *b1, BAT *b2, BAT *s, int tp, bool abort_on_error);
@@ -108,7 +108,7 @@ BAT *BATcalcxor(BAT *b1, BAT *b2, BAT *s
 BAT *BATcalcxorcst(BAT *b, const ValRecord *v, BAT *s);
 gdk_return BATclear(BAT *b, bool force);
 void BATcommit(BAT *b);
-BAT *BATconstant(oid hseq, int tt, const void *val, BUN cnt, int role);
+BAT *BATconstant(oid hseq, int tt, const void *val, BUN cnt, role_t role);
 BAT *BATconvert(BAT *b, BAT *s, int tp, bool abort_on_error);
 BUN BATcount_no_nil(BAT *b);
 gdk_return BATdel(BAT *b, BAT *d) __attribute__((__warn_unused_result__));
@@ -148,7 +148,7 @@ gdk_return BATleftjoin(BAT **r1p, BAT **
 void *BATmax(BAT *b, void *aggr);
 BAT *BATmergecand(BAT *a, BAT *b);
 void *BATmin(BAT *b, void *aggr);
-gdk_return BATmode(BAT *b, int mode);
+gdk_return BATmode(BAT *b, bool transient);
 void BATmsync(BAT *b);
 bool BATordered(BAT *b);
 bool BATordered_rev(BAT *b);
@@ -207,8 +207,8 @@ gdk_return BUNappend(BAT *b, const void 
 gdk_return BUNdelete(BAT *b, oid o) __attribute__((__warn_unused_result__));
 BUN BUNfnd(BAT *b, const void *right);
 gdk_return BUNinplace(BAT *b, BUN p, const void *right, bool force) 
__attribute__((__warn_unused_result__));
-BAT *COLcopy(BAT *b, int tt, bool writable, int role);
-BAT *COLnew(oid hseq, int tltype, BUN capacity, int role) 
__attribute__((__warn_unused_result__));
+BAT *COLcopy(BAT *b, int tt, bool writable, role_t role);
+BAT *COLnew(oid hseq, int tltype, BUN capacity, role_t role) 
__attribute__((__warn_unused_result__));
 size_t GDK_mem_maxsize;
 size_t GDK_vm_maxsize;
 int GDK_vm_trim;
@@ -230,11 +230,11 @@ int GDKatomcnt;
 size_t GDKbatcopy(char *dest, BAT *bat, str colname);
 size_t GDKbatcopysize(BAT *bat, str colname);
 size_t GDKbatread(char *src, BAT **bat, str *colname);
-gdk_return GDKchangesemval(int sem_id, int number, int change, str *msg);
-gdk_return GDKchangesemval_timeout(int sem_id, int number, int change, int 
timeout_mseconds, bool *succeed, str *msg);
+gdk_return GDKchangesemval(int sem_id, int number, int change);
+gdk_return GDKchangesemval_timeout(int sem_id, int number, int change, int 
timeout_mseconds, bool *succeed);
 void GDKclrerr(void);
 gdk_return GDKcreatedir(const char *nme);
-gdk_return GDKcreatesem(int id, int count, int *semid, str *msg);
+gdk_return GDKcreatesem(int id, int count, int *semid);
 int GDKdebug;
 void GDKerror(_In_z_ _Printf_format_string_ const char *format, ...) 
__attribute__((__format__(__printf__, 1, 2)));
 void GDKexit(int status) __attribute__((__noreturn__));
@@ -253,10 +253,10 @@ int GDKgetenv_int(const char *name, int 
 bool GDKgetenv_istext(const char *name, const char *text);
 bool GDKgetenv_istrue(const char *name);
 bool GDKgetenv_isyes(const char *name);
-gdk_return GDKgetsem(int sem_id, int count, int *semid, str *msg);
-gdk_return GDKgetsemval(int sem_id, int number, int *semval, str *msg);
+gdk_return GDKgetsem(int sem_id, int count, int *semid);
+gdk_return GDKgetsemval(int sem_id, int number, int *semval);
 bool GDKinit(opt *set, int setlen);
-gdk_return GDKinitmmap(size_t id, size_t size, void **return_ptr, size_t 
*return_size, str *msg);
+void *GDKinitmmap(size_t id, size_t size, size_t *return_size);
 BAT *GDKkey;
 ATOMIC_TYPE volatile GDKlockcnt;
 ATOMIC_TYPE volatile GDKlockcontentioncnt;
@@ -275,8 +275,8 @@ void GDKprepareExit(void);
 void GDKqsort(void *restrict h, void *restrict t, const void *restrict base, 
size_t n, int hs, int ts, int tpe, bool reverse, bool nilslast);
 void *GDKrealloc(void *pold, size_t size) __attribute__((__alloc_size__(2))) 
__attribute__((__warn_unused_result__));
 void GDKregister(MT_Id pid);
-gdk_return GDKreleasemmap(void *ptr, size_t size, size_t id, str *msg);
-gdk_return GDKreleasesem(int sem_id, str *msg);
+gdk_return GDKreleasemmap(void *ptr, size_t size, size_t id);
+gdk_return GDKreleasesem(int sem_id);
 void GDKreset(int status, int exit);
 gdk_return GDKsetenv(const char *name, const char *value);
 void GDKsetmallocsuccesscount(lng count);
@@ -437,7 +437,7 @@ gdk_return logger_del_bat(logger *lg, lo
 void logger_destroy(logger *lg);
 gdk_return logger_exit(logger *lg);
 log_bid logger_find_bat(logger *lg, const char *name, char tpe, oid id);
-lng logger_read_last_transaction_id(logger *lg, char *dir, char *logger_file, 
int role);
+lng logger_read_last_transaction_id(logger *lg, char *dir, char *logger_file, 
role_t role);
 gdk_return logger_reload(logger *lg);
 gdk_return logger_restart(logger *lg);
 int logger_sequence(logger *lg, int seq, lng *id);
@@ -833,7 +833,7 @@ str BKCisSynced(bit *ret, const bat *bid
 str BKCisTransient(bit *res, const bat *bid);
 str BKCmergecand(bat *ret, const bat *aid, const bat *bid);
 str BKCmirror(bat *ret, const bat *bid);
-str BKCnewBAT(bat *res, const int *tt, const BUN *cap, int role);
+str BKCnewBAT(bat *res, const int *tt, const BUN *cap, role_t role);
 str BKCreuseBAT(bat *ret, const bat *bid, const bat *did);
 str BKCreuseBATmap(bat *ret, const bat *bid, const bat *did);
 str BKCsave(bit *res, const char *const *input);
diff --git a/clients/mapiclient/mhelp.c b/clients/mapiclient/mhelp.c
--- a/clients/mapiclient/mhelp.c
+++ b/clients/mapiclient/mhelp.c
@@ -53,8 +53,8 @@ SQLhelp sqlhelp1[] = {
         "ALTER TABLE [ IF EXISTS ] qname RENAME [ COLUMN ] ident TO ident\n"
         "ALTER TABLE [ IF EXISTS ] qname DROP [ COLUMN ] ident [ RESTRICT | 
CASCADE ]\n"
         "ALTER TABLE [ IF EXISTS ] qname DROP CONSTRAINT ident [ RESTRICT | 
CASCADE ]\n"
+        "ALTER TABLE [ IF EXISTS ] qname RENAME TO ident\n"
         "ALTER TABLE [ IF EXISTS ] qname SET { { READ | INSERT } ONLY | READ 
WRITE }\n"
-        "ALTER TABLE [ IF EXISTS ] qname RENAME TO ident\n"
         "ALTER TABLE [ IF EXISTS ] qname SET SCHEMA ident",
         "qname,column_def,table_constraint,ident",
         "See also https://www.monetdb.org/Documentation/SQLreference/Alter"},
@@ -542,9 +542,9 @@ SQLhelp sqlhelp2[] = {
         NULL},
        {"column_constraint",
         NULL,
-        "NULL | NOT NULL | UNIQUE | PRIMARY KEY | CHECK '(' search_condition 
')' |\n"
-        " REFERENCES qname [ column_list ] [ MATCH {FULL|PARTIAL|SIMPLE} ] 
reference_action ...\n",
-        "column_list,search_condition,reference_action",
+        "[ CONSTRAINT ident ] { NOT NULL | NULL | UNIQUE | PRIMARY KEY | CHECK 
'(' search_condition ')' |\n"
+        "    REFERENCES qname [ column_list ] [ match_options ] [ 
reference_action ] }\n",
+        "column_list,search_condition,match_options,reference_action",
         "See also 
https://www.monetdb.org/Documentation/SQLreference/TableIdentityColumn"},
        {"control_statement",
         NULL,
@@ -636,7 +636,12 @@ SQLhelp sqlhelp2[] = {
         NULL},
        {"isolevel",
         NULL,
-        "READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE ",
+        "READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE",
+        NULL,
+        NULL},
+       {"match_options",
+        NULL,
+        "MATCH { FULL | PARTIAL | SIMPLE }",
         NULL,
         NULL},
        {"merge_clause",
@@ -744,9 +749,9 @@ SQLhelp sqlhelp2[] = {
         NULL,},
        {"table_constraint",
         NULL,
-        "CONSTRAINT [ ident ] { PRIMARY KEY column_list | UNIQUE column_list 
|\n"
-        "    FOREIGN KEY column_list REFERENCES qname [ column_list ] [ MATCH 
{FULL|PARTIAL|SIMPLE} ] }",
-        "column_list",
+        "[ CONSTRAINT ident ] { PRIMARY KEY column_list | UNIQUE column_list 
|\n"
+        "    FOREIGN KEY column_list REFERENCES qname [ column_list ] [ 
match_options ] [ reference_action ] }",
+        "column_list,match_options,reference_action",
         "See also 
https://www.monetdb.org/Documentation/SQLreference/TableIdentityColumn"},
        {"table_element",
         NULL,
diff --git a/clients/mapilib/mapi.c b/clients/mapilib/mapi.c
--- a/clients/mapilib/mapi.c
+++ b/clients/mapilib/mapi.c
@@ -2328,7 +2328,6 @@ mapi_reconnect(Mapi mid)
                userver.sun_path[sizeof(userver.sun_path) - 1] = 0;
 
                if (connect(s, serv, sizeof(struct sockaddr_un)) == 
SOCKET_ERROR) {
-                       closesocket(s);
                        snprintf(errbuf, sizeof(errbuf),
                                 "initiating connection on socket failed: %s",
 #ifdef _MSC_VER
@@ -2337,6 +2336,7 @@ mapi_reconnect(Mapi mid)
                                 strerror(errno)
 #endif
                                );
+                       closesocket(s);
                        return mapi_setError(mid, errbuf, "mapi_reconnect", 
MERROR);
                }
 
@@ -2353,7 +2353,6 @@ mapi_reconnect(Mapi mid)
                msg.msg_flags = 0;
 
                if (sendmsg(s, &msg, 0) < 0) {
-                       closesocket(s);
                        snprintf(errbuf, sizeof(errbuf), "could not send 
initial byte: %s",
 #ifdef _MSC_VER
                                 wsaerror(WSAGetLastError())
@@ -2361,6 +2360,7 @@ mapi_reconnect(Mapi mid)
                                 strerror(errno)
 #endif
                                );
+                       closesocket(s);
                        return mapi_setError(mid, errbuf, "mapi_reconnect", 
MERROR);
                }
        } else
@@ -2385,14 +2385,25 @@ mapi_reconnect(Mapi mid)
                        snprintf(errbuf, sizeof(errbuf), "getaddrinfo failed: 
%s", gai_strerror(ret));
                        return mapi_setError(mid, errbuf, "mapi_reconnect", 
MERROR);
                }
+               errbuf[0] = 0;
                for (rp = res; rp; rp = rp->ai_next) {
                        s = socket(rp->ai_family, rp->ai_socktype
 #ifdef SOCK_CLOEXEC
                                   | SOCK_CLOEXEC
 #endif
                                   , rp->ai_protocol);
-                       if (s == INVALID_SOCKET)
+                       if (s == INVALID_SOCKET) {
+                               snprintf(errbuf, sizeof(errbuf),
+                                        "could not connect to %s:%s: %s",
+                                        mid->hostname, port,
+#ifdef _MSC_VER
+                                        wsaerror(WSAGetLastError())
+#else
+                                        strerror(errno)
+#endif
+                                       );
                                continue;
+                       }
 #if !defined(SOCK_CLOEXEC) && defined(HAVE_FCNTL)
                        (void) fcntl(s, F_SETFD, FD_CLOEXEC);
 #endif
@@ -2402,14 +2413,11 @@ mapi_reconnect(Mapi mid)
                }
                freeaddrinfo(res);
                if (rp == NULL) {
-                       snprintf(errbuf, sizeof(errbuf), "could not connect to 
%s:%s: %s",
-                                mid->hostname, port,
-#ifdef _MSC_VER
-                                wsaerror(WSAGetLastError())
-#else
-                                strerror(errno)
-#endif
-                               );
+                       if (errbuf[0] == 0) {
+                               /* should not happen */
+                               snprintf(errbuf, sizeof(errbuf),
+                                        "getaddrinfo succeeded but did not 
return a result");
+                       }
                        return mapi_setError(mid, errbuf, "mapi_reconnect", 
MERROR);
                }
 #else
diff --git a/common/utils/msabaoth.c b/common/utils/msabaoth.c
--- a/common/utils/msabaoth.c
+++ b/common/utils/msabaoth.c
@@ -327,9 +327,9 @@ msab_retreatScenario(const char *lang)
                                rewind(f);
                                len = strlen(buf) + 1;
                                if (fwrite(buf, 1, len, f) < len) {
-                                       (void)fclose(f);
                                        snprintf(buf, sizeof(buf), "failed to 
write: %s (%s)",
                                                        strerror(errno), 
pathbuf);
+                                       (void)fclose(f);
                                        return(strdup(buf));
                                }
                                fflush(f);
diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -555,6 +555,11 @@ typedef enum { GDK_FAIL, GDK_SUCCEED } g
 
 #define ATOMextern(t)  (ATOMstorage(t) >= TYPE_str)
 
+typedef enum {
+       PERSISTENT = 0,
+       TRANSIENT,
+} role_t;
+
 /* Heap storage modes */
 typedef enum {
        STORE_MEM     = 0,      /* load into GDKmalloced memory */
@@ -691,7 +696,7 @@ gdk_export int VALisnil(const ValRecord 
  * typedef struct {
  *           // static BAT properties
  *           bat    batCacheid;       // bat id: index in BBPcache
- *           int    batPersistence;   // persistence mode
+ *           bool   batTransient;     // persistence mode
  *           bool   batCopiedtodisk;  // BAT is saved on disk?
  *           // dynamic BAT properties
  *           int    batHeat;          // heat of BAT in the BBP
@@ -781,11 +786,11 @@ typedef struct BAT {
        bool
         batCopiedtodisk:1,     /* once written */
         batDirtyflushed:1,     /* was dirty before commit started? */
-        batDirtydesc:1;        /* bat descriptor dirty marker */
+        batDirtydesc:1,        /* bat descriptor dirty marker */
+        batTransient:1;        /* should the BAT persist on disk? */
        uint8_t /* adjacent bit fields are packed together (if they fit) */
-        batRestricted:2,       /* access privileges */
-        batPersistence:1;      /* should the BAT persist on disk? */
-       uint8_t batRole;        /* role of the bat */
+        batRestricted:2;       /* access privileges */
+       role_t batRole;         /* role of the bat */
        uint16_t unused;        /* value=0 for now (sneakily used by mat.c) */
        int batSharecnt;        /* incoming view count */
 
@@ -912,7 +917,7 @@ gdk_export void HEAP_free(Heap *heap, va
  * @- BAT construction
  * @multitable @columnfractions 0.08 0.7
  * @item @code{BAT* }
- * @tab COLnew (oid headseq, int tailtype, BUN cap, int role)
+ * @tab COLnew (oid headseq, int tailtype, BUN cap, role_t role)
  * @item @code{BAT* }
  * @tab BATextend (BAT *b, BUN newcap)
  * @end multitable
@@ -930,7 +935,7 @@ gdk_export void HEAP_free(Heap *heap, va
  */
 #define BATDELETE      (-9999)
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to