Changeset: 75d52fe05398 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=75d52fe05398 Modified Files: sql/backends/monet5/sql_cat.c sql/include/sql_catalog.h sql/server/rel_optimizer.c sql/server/rel_propagate.c sql/server/rel_schema.c sql/storage/sql_catalog.c Branch: scoping2 Log Message:
Merged with default diffs (truncated from 1034 to 300 lines): diff --git a/MonetDB.spec b/MonetDB.spec --- a/MonetDB.spec +++ b/MonetDB.spec @@ -868,6 +868,15 @@ else fi %endif +%if %{?rhel:0}%{!?rhel:1} || 0%{?rhel} >= 7 +# fix up some paths (/var/run -> /run) +# needed because CMAKE_INSTALL_RUNSTATEDIR refers to /var/run +sed -i 's|/var/run|/run|' \ + %{buildroot}%{_tmpfilesdir}/monetdbd.conf \ + %{buildroot}%{_localstatedir}/monetdb5/dbfarm/.merovingian_properties \ + %{buildroot}%{_unitdir}/monetdbd.service +%endif + %post -p /sbin/ldconfig %postun -p /sbin/ldconfig 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 @@ -664,6 +664,7 @@ MapiHdl mapi_send(Mapi mid, const char * MapiMsg mapi_setAutocommit(Mapi mid, bool autocommit) __attribute__((__nonnull__(1))); MapiMsg mapi_set_columnar_protocol(Mapi mid, bool columnar_protocol) __attribute__((__nonnull__(1))); MapiMsg mapi_set_size_header(Mapi mid, bool value) __attribute__((__nonnull__(1))); +MapiMsg mapi_set_timeout(Mapi mid, unsigned int timeout, bool (*callback)(void *), void *callback_data) __attribute__((__nonnull__(1))); void mapi_setfilecallback(Mapi mid, char *(*getfunc)(void *priv, const char *filename, bool binary, uint64_t offset, size_t *size), char *(*putfunc)(void *priv, const char *filename, const void *data, size_t size), void *priv) __attribute__((__nonnull__(1))); int mapi_split_line(MapiHdl hdl) __attribute__((__nonnull__(1))); @@ -1783,7 +1784,7 @@ int mnstr_readStr(stream *restrict s, ch ssize_t mnstr_read_block(stream *restrict s, void *restrict buf, size_t elmsize, size_t cnt); ssize_t mnstr_readline(stream *restrict s, void *restrict buf, size_t maxcnt); void mnstr_set_bigendian(stream *s, bool bigendian); -void mnstr_settimeout(stream *s, unsigned int ms, bool (*func)(void)); +void mnstr_settimeout(stream *s, unsigned int ms, bool (*func)(void *), void *data); ssize_t mnstr_write(stream *restrict s, const void *restrict buf, size_t elmsize, size_t cnt); int mnstr_writeBte(stream *s, int8_t val); int mnstr_writeBteArray(stream *restrict s, const int8_t *restrict val, size_t cnt); diff --git a/clients/mapiclient/mclient.c b/clients/mapiclient/mclient.c --- a/clients/mapiclient/mclient.c +++ b/clients/mapiclient/mclient.c @@ -3678,8 +3678,9 @@ main(int argc, char **argv) s = open_rastream(arg); } if (s == NULL) { - fprintf(stderr, "%s: cannot open: %s", arg, mnstr_peek_error(NULL)); + fprintf(stderr, "%s: cannot open: %s\n", arg, mnstr_peek_error(NULL)); c |= 1; + optind++; continue; } // doFile closes 's'. diff --git a/clients/mapilib/mapi.c b/clients/mapilib/mapi.c --- a/clients/mapilib/mapi.c +++ b/clients/mapilib/mapi.c @@ -3279,16 +3279,22 @@ prepareQuery(MapiHdl hdl, const char *cm MapiMsg -mapi_timeout(Mapi mid, unsigned int timeout) +mapi_set_timeout(Mapi mid, unsigned int timeout, bool (*callback)(void *), void *callback_data) { mapi_check(mid); if (mid->trace) printf("Set timeout to %u\n", timeout); - mnstr_settimeout(mid->to, timeout, NULL); - mnstr_settimeout(mid->from, timeout, NULL); + mnstr_settimeout(mid->to, timeout, callback, callback_data); + mnstr_settimeout(mid->from, timeout, callback, callback_data); return MOK; } +MapiMsg +mapi_timeout(Mapi mid, unsigned int timeout) +{ + return mapi_set_timeout(mid, timeout, NULL, NULL); +} + static MapiMsg mapi_Xcommand(Mapi mid, const char *cmdname, const char *cmdvalue) { diff --git a/clients/mapilib/mapi.h b/clients/mapilib/mapi.h --- a/clients/mapilib/mapi.h +++ b/clients/mapilib/mapi.h @@ -177,6 +177,8 @@ mapi_export MapiMsg mapi_cache_freeup(Ma mapi_export MapiMsg mapi_seek_row(MapiHdl hdl, int64_t rowne, int whence) __attribute__((__nonnull__(1))); +mapi_export MapiMsg mapi_set_timeout(Mapi mid, unsigned int timeout, bool (*callback)(void *), void *callback_data) + __attribute__((__nonnull__(1))); mapi_export MapiMsg mapi_timeout(Mapi mid, unsigned int time) __attribute__((__nonnull__(1))); mapi_export int mapi_fetch_row(MapiHdl hdl) diff --git a/common/stream/bs2.c b/common/stream/bs2.c --- a/common/stream/bs2.c +++ b/common/stream/bs2.c @@ -594,6 +594,7 @@ bs2_update_timeout(stream *ss) if ((s = ss->stream_data.p) != NULL && s->s) { s->s->timeout = ss->timeout; s->s->timeout_func = ss->timeout_func; + s->s->timeout_data = ss->timeout_data; if (s->s->update_timeout) s->s->update_timeout(s->s); } diff --git a/common/stream/socket_stream.c b/common/stream/socket_stream.c --- a/common/stream/socket_stream.c +++ b/common/stream/socket_stream.c @@ -53,7 +53,7 @@ socket_write(stream *restrict s, const v ) && /* it was! */ #endif s->timeout_func != NULL && /* callback function exists */ - !s->timeout_func()) /* callback says don't stop */ + !s->timeout_func(s->timeout_data)) /* callback says don't stop */ ||(nr < 0 && #ifdef _MSC_VER WSAGetLastError() == WSAEINTR @@ -153,7 +153,7 @@ socket_read(stream *restrict s, void *re } #endif if (ret == 0) { - if (s->timeout_func == NULL || s->timeout_func()) { + if (s->timeout_func == NULL || s->timeout_func(s->timeout_data)) { mnstr_set_error(s, MNSTR_TIMEOUT, NULL); return -1; } @@ -388,4 +388,3 @@ socket_wstream(SOCKET sock, const char * s->binary = true; return s; } - diff --git a/common/stream/stream.c b/common/stream/stream.c --- a/common/stream/stream.c +++ b/common/stream/stream.c @@ -259,11 +259,12 @@ mnstr_readline(stream *restrict s, void void -mnstr_settimeout(stream *s, unsigned int ms, bool (*func)(void)) +mnstr_settimeout(stream *s, unsigned int ms, bool (*func)(void *), void *data) { if (s) { s->timeout = ms; s->timeout_func = func; + s->timeout_data = data; if (s->update_timeout) s->update_timeout(s); } @@ -788,6 +789,7 @@ wrapper_update_timeout(stream *s) { s->inner->timeout = s->timeout; s->inner->timeout_func = s->timeout_func; + s->inner->timeout_data = s->timeout_data; s->inner->update_timeout(s->inner); } diff --git a/common/stream/stream.h b/common/stream/stream.h --- a/common/stream/stream.h +++ b/common/stream/stream.h @@ -154,7 +154,7 @@ stream_export char *mnstr_name(const str stream_export bool mnstr_isbinary(const stream *s); // unused stream_export bool mnstr_get_swapbytes(const stream *s); // sql_result.c/mapi10 stream_export void mnstr_set_bigendian(stream *s, bool bigendian); // used in mapi.c and mal_session.c -stream_export void mnstr_settimeout(stream *s, unsigned int ms, bool (*func)(void)); // used in mapi.c and mal_session.c +stream_export void mnstr_settimeout(stream *s, unsigned int ms, bool (*func)(void *), void *data); // used in mapi.c and mal_session.c stream_export int mnstr_isalive(const stream *s); // used once in mal_interpreter.c stream_export stream *open_rstream(const char *filename); // used in mclient.c, gdk_logger.c, store.c, snapshot.c diff --git a/common/stream/stream_internal.h b/common/stream/stream_internal.h --- a/common/stream/stream_internal.h +++ b/common/stream/stream_internal.h @@ -152,7 +152,8 @@ struct stream { bool isutf8; /* known to be UTF-8 due to BOM */ bool binary; /* text/binary */ unsigned int timeout; /* timeout in ms */ - bool (*timeout_func)(void); /* callback function: NULL/true -> return */ + bool (*timeout_func)(void *); /* callback function: NULL/true -> return */ + void *timeout_data; /* data for the above */ union { void *p; int i; diff --git a/monetdb5/mal/mal_builder.c b/monetdb5/mal/mal_builder.c --- a/monetdb5/mal/mal_builder.c +++ b/monetdb5/mal/mal_builder.c @@ -26,7 +26,8 @@ newAssignment(MalBlkPtr mb) InstrPtr q = newInstruction(mb,NULL,NULL); int k; - assert(q); + if (q == NULL) + return NULL; k = newTmpVariable(mb,TYPE_any); if (k < 0) { // construct an exception message to be passed to upper layers using ->errors @@ -46,7 +47,8 @@ newStmt(MalBlkPtr mb, const char *module str mName = putName(module), nName = putName(name); q = newInstruction(mb, mName, nName); - assert(q); + if (q == NULL) + return NULL; setDestVar(q, newTmpVariable(mb, TYPE_any)); if (getDestVar(q) < 0 ){ str msg = createException(MAL, "newStmt", "Can not allocate variable"); @@ -64,7 +66,8 @@ newStmtArgs(MalBlkPtr mb, const char *mo str mName = putName(module), nName = putName(name); q = newInstructionArgs(mb, mName, nName, args); - assert(q); + if (q == NULL) + return NULL; setDestVar(q, newTmpVariable(mb, TYPE_any)); if (getDestVar(q) < 0 || mb->errors != MAL_SUCCEED) { @@ -82,7 +85,8 @@ newReturnStmt(MalBlkPtr mb) InstrPtr q = newInstruction(mb, NULL, NULL); int k; - assert(q); + if (q == NULL) + return NULL; k = newTmpVariable(mb,TYPE_any); if (k < 0 ){ str msg = createException(MAL, "newReturnStmt", "Can not allocate return variable"); @@ -115,7 +119,8 @@ newComment(MalBlkPtr mb, const char *val ValRecord cst; int k; - assert(q); + if (q == NULL) + return NULL; q->token = REMsymbol; q->barrier = 0; cst.vtype= TYPE_str; @@ -143,7 +148,8 @@ newCatchStmt(MalBlkPtr mb, str nme) int i= findVariable(mb,nme); int k; - assert(q); + if (q == NULL) + return NULL; q->barrier = CATCHsymbol; if ( i< 0) { k = newVariable(mb, nme, strlen(nme),TYPE_str); @@ -166,7 +172,8 @@ newRaiseStmt(MalBlkPtr mb, str nme) int i= findVariable(mb,nme); int k; - assert(q); + if (q == NULL) + return NULL; q->barrier = RAISEsymbol; if ( i< 0) { k = newVariable(mb, nme, strlen(nme),TYPE_str); @@ -188,7 +195,8 @@ newExitStmt(MalBlkPtr mb, str nme) int i= findVariable(mb,nme); int k; - assert(q); + if (q == NULL) + return NULL; q->barrier = EXITsymbol; if ( i< 0) { k= newVariable(mb, nme,strlen(nme),TYPE_str); @@ -208,7 +216,8 @@ pushEndInstruction(MalBlkPtr mb) { InstrPtr q = newInstruction(mb,NULL, NULL); - assert(q); + if (q == NULL) + return NULL; q->token = ENDsymbol; q->barrier = 0; q->argc = 0; @@ -273,7 +282,8 @@ pushBte(MalBlkPtr mb, InstrPtr q, bte va int _t; ValRecord cst; - assert(q); + if (q == NULL) + return NULL; cst.vtype= TYPE_bte; cst.val.btval= val; cst.len = 0; @@ -305,7 +315,8 @@ pushOid(MalBlkPtr mb, InstrPtr q, oid va int _t; ValRecord cst; - assert(q); + if (q == NULL) + return NULL; cst.vtype= TYPE_oid; cst.val.oval= val; cst.len = 0; @@ -321,7 +332,8 @@ pushVoid(MalBlkPtr mb, InstrPtr q) int _t; ValRecord cst; - assert(q); + if (q == NULL) _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list