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