Changeset: 741c94abe09d for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=741c94abe09d Added Files: sql/test/BugTracker-2019/Tests/view-too-few-rows.Bug-6736.sql sql/test/BugTracker-2019/Tests/view-too-few-rows.Bug-6736.stable.err sql/test/BugTracker-2019/Tests/view-too-few-rows.Bug-6736.stable.out Modified Files: clients/Tests/MAL-signatures.stable.out clients/Tests/MAL-signatures.stable.out.int128 gdk/gdk_bbp.c gdk/gdk_system.c gdk/gdk_system.h monetdb5/mal/mal_instruction.c monetdb5/modules/mal/mal_mapi.c sql/backends/monet5/UDF/capi/Tests/capi09.stable.out sql/backends/monet5/UDF/pyapi/pyapi.c sql/backends/monet5/rel_bin.c sql/backends/monet5/sql.c sql/backends/monet5/sql.h sql/backends/monet5/sql.mal sql/backends/monet5/sql_gencode.c sql/backends/monet5/sql_result.c sql/backends/monet5/sql_upgrades.c sql/backends/monet5/vaults/bam/Tests/query2.1.stable.out sql/backends/monet5/vaults/bam/Tests/query2.10.stable.out sql/backends/monet5/vaults/bam/Tests/query2.11.stable.out sql/backends/monet5/vaults/bam/Tests/query2.2.stable.out sql/backends/monet5/vaults/bam/Tests/query2.2.stable.out.int128 sql/backends/monet5/vaults/bam/Tests/query2.8.stable.out sql/backends/monet5/vaults/bam/bam_loader.c sql/backends/monet5/wlr.c sql/include/sql_relation.h sql/scripts/25_debug.sql sql/server/rel_distribute.c sql/server/rel_dump.c sql/server/rel_exp.c sql/server/rel_exp.h sql/server/rel_optimizer.c sql/server/rel_propagate.c sql/server/rel_rel.c sql/server/rel_rel.h sql/server/rel_schema.c sql/server/rel_select.c sql/server/rel_updates.c sql/server/sql_mvc.h sql/storage/bat/bat_storage.c sql/storage/sql_storage.h sql/storage/store.c sql/test/BugTracker-2011/Tests/crash_on_alias.Bug-2798.stable.out sql/test/BugTracker-2011/Tests/crash_on_alias.Bug-2798.stable.out.int128 sql/test/BugTracker-2012/Tests/order_by_on_column_exp.Bug-3193.stable.out sql/test/BugTracker-2013/Tests/restore-uuid.Bug-3407.stable.out sql/test/BugTracker-2014/Tests/crash_on_groupby_distinct_serial.Bug-3463.stable.out sql/test/BugTracker-2014/Tests/groupby_distict.Bug-3423.stable.out sql/test/BugTracker-2014/Tests/type_resolution.Bug-3622.stable.out sql/test/BugTracker-2014/Tests/typecast_error.Bug-3622.stable.out sql/test/BugTracker-2015/Tests/uuid-compare.Bug-3827.stable.out sql/test/BugTracker-2016/Tests/column_alias_in_where_clause.Bug-3947.stable.out sql/test/BugTracker-2016/Tests/column_alias_in_where_clause.Bug-3947.stable.out.int128 sql/test/BugTracker-2016/Tests/isaUUID_function.Bug-3997.stable.out sql/test/BugTracker-2016/Tests/min-max-uuid-column-wrong-results.Bug-3953.stable.out sql/test/BugTracker-2018/Tests/count_from_commented_function_signatures.Bug-6542.stable.out sql/test/BugTracker-2018/Tests/remote-table-where-is-null.Bug-6601.stable.out sql/test/BugTracker-2018/Tests/remote-table-where-not-equal.Bug-6621.stable.out sql/test/BugTracker-2019/Tests/All sql/test/BugTracker-2019/Tests/merge-statement-aliases.Bug-6715.stable.err sql/test/BugTracker-2019/Tests/merge-statement-aliases.Bug-6715.stable.out sql/test/BugTracker/Tests/groupby_with_alias.SF-1520575.stable.out.int128 sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-explain-1join-query.stable.out sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-explain-2join-query.stable.out sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-explain-2join-view.stable.out sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-plan-1join-query.stable.out sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-plan-2join-query.stable.out sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-plan-2join-view.stable.out sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-prologue.stable.out sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.int128 sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.powerpc64.int128 sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.32bit sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.int128 sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.powerpc64.int128 sql/test/emptydb-upgrade-hge/Tests/upgrade.stable.out.int128 sql/test/emptydb-upgrade/Tests/upgrade.stable.out sql/test/emptydb-upgrade/Tests/upgrade.stable.out.32bit sql/test/emptydb-upgrade/Tests/upgrade.stable.out.int128 sql/test/emptydb/Tests/check.stable.out sql/test/emptydb/Tests/check.stable.out.32bit sql/test/emptydb/Tests/check.stable.out.int128 sql/test/orderidx/Tests/imprints_all_types.stable.out sql/test/orderidx/Tests/oidx_all_types.stable.out sql/test/pg_regress/Tests/numerology.stable.out sql/test/sys-schema/Tests/systemfunctions.stable.out sql/test/sys-schema/Tests/systemfunctions.stable.out.int128 sql/test/testdb-upgrade-chain-hge/Tests/upgrade.stable.out.int128 sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out.32bit sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out.int128 sql/test/testdb-upgrade-hge/Tests/upgrade.stable.out.int128 sql/test/testdb-upgrade/Tests/upgrade.stable.out sql/test/testdb-upgrade/Tests/upgrade.stable.out.32bit sql/test/testdb-upgrade/Tests/upgrade.stable.out.int128 Branch: cmake-monetdblite Log Message:
Merge with cmake-fun. diffs (truncated from 5232 to 300 lines): diff --git a/clients/Tests/MAL-signatures.stable.out b/clients/Tests/MAL-signatures.stable.out --- a/clients/Tests/MAL-signatures.stable.out +++ b/clients/Tests/MAL-signatures.stable.out @@ -56,10 +56,9 @@ stdout of test 'MAL-signatures` in direc # MonetDB/Python2 module loaded # MonetDB/R module loaded - -# 14:39:22 > -# 14:39:22 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-23085" "--port=30158" -# 14:39:22 > +# 16:19:19 > +# 16:19:19 > "mclient" "-lsql" "-ftest" "-tnone" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-28001" "--port=38663" +# 16:19:19 > #select * from sys.malfunctions() order by module, "function", address, signature, comment; % .L1, .L1, .L1, .L1, .L1 # table_name @@ -11631,7 +11630,9 @@ stdout of test 'MAL-signatures` in direc [ "sql", "delete", "unsafe pattern sql.delete(mvc:int, sname:str, tname:str, b:any):int ", "mvc_delete_wrap;", "Delete a row from a table. Returns sequence number for order dependece." ] [ "sql", "delta", "command sql.delta(col:bat[:any_3], uid:bat[:oid], uval:bat[:any_3]):bat[:any_3] ", "DELTAbat2;", "Return column bat with delta's applied." ] [ "sql", "delta", "command sql.delta(col:bat[:any_3], uid:bat[:oid], uval:bat[:any_3], ins:bat[:any_3]):bat[:any_3] ", "DELTAbat;", "Return column bat with delta's applied." ] -[ "sql", "deltas", "pattern sql.deltas(schema:str, table:str, column:str):bat[:lng] ", "mvc_delta_values;", "Return the delta values sizes of a bat, plus the current transaction level" ] +[ "sql", "deltas", "pattern sql.deltas(schema:str) (ids:bat[:int], cleared:bat[:bit], readonly:bat[:lng], inserted:bat[:lng], updated:bat[:lng], deleted:bat[:lng], tr_level:bat[:int]) ", "mvc_delta_values;", "Return the delta values sizes of all columns of the schema's tables, plus the current transaction level" ] +[ "sql", "deltas", "pattern sql.deltas(schema:str, table:str) (ids:bat[:int], cleared:bat[:bit], readonly:bat[:lng], inserted:bat[:lng], updated:bat[:lng], deleted:bat[:lng], tr_level:bat[:int]) ", "mvc_delta_values;", "Return the delta values sizes from the table's columns, plus the current transaction level" ] +[ "sql", "deltas", "pattern sql.deltas(schema:str, table:str, column:str) (ids:bat[:int], cleared:bat[:bit], readonly:bat[:lng], inserted:bat[:lng], updated:bat[:lng], deleted:bat[:lng], tr_level:bat[:int]) ", "mvc_delta_values;", "Return the delta values sizes of a column, plus the current transaction level" ] [ "sql", "dense_rank", "pattern sql.dense_rank(b:any_1, p:bit, o:bit):int ", "SQLdense_rank;", "return the densely ranked groups" ] [ "sql", "diff", "pattern sql.diff(b:any_1):bit ", "SQLdiff;", "return true if cur != prev row" ] [ "sql", "diff", "pattern sql.diff(p:bit, b:any_1):bit ", "SQLdiff;", "return true if cur != prev row" ] diff --git a/clients/Tests/MAL-signatures.stable.out.int128 b/clients/Tests/MAL-signatures.stable.out.int128 --- a/clients/Tests/MAL-signatures.stable.out.int128 +++ b/clients/Tests/MAL-signatures.stable.out.int128 @@ -60,10 +60,9 @@ stdout of test 'MAL-signatures` in direc # MonetDB/Python2 module loaded # MonetDB/R module loaded - -# 16:09:44 > -# 16:09:44 > "mclient" "-lsql" "-ftest" "-tnone" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-1158" "--port=39285" -# 16:09:44 > +# 16:10:29 > +# 16:10:29 > "mclient" "-lsql" "-ftest" "-tnone" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-29643" "--port=32888" +# 16:10:29 > #select * from sys.malfunctions() order by module, "function", address, signature, comment; % .L1, .L1, .L1, .L1, .L1 # table_name @@ -16045,7 +16044,9 @@ stdout of test 'MAL-signatures` in direc [ "sql", "delete", "unsafe pattern sql.delete(mvc:int, sname:str, tname:str, b:any):int ", "mvc_delete_wrap;", "Delete a row from a table. Returns sequence number for order dependece." ] [ "sql", "delta", "command sql.delta(col:bat[:any_3], uid:bat[:oid], uval:bat[:any_3]):bat[:any_3] ", "DELTAbat2;", "Return column bat with delta's applied." ] [ "sql", "delta", "command sql.delta(col:bat[:any_3], uid:bat[:oid], uval:bat[:any_3], ins:bat[:any_3]):bat[:any_3] ", "DELTAbat;", "Return column bat with delta's applied." ] -[ "sql", "deltas", "pattern sql.deltas(schema:str, table:str, column:str):bat[:lng] ", "mvc_delta_values;", "Return the delta values sizes of a bat, plus the current transaction level" ] +[ "sql", "deltas", "pattern sql.deltas(schema:str) (ids:bat[:int], cleared:bat[:bit], readonly:bat[:lng], inserted:bat[:lng], updated:bat[:lng], deleted:bat[:lng], tr_level:bat[:int]) ", "mvc_delta_values;", "Return the delta values sizes of all columns of the schema's tables, plus the current transaction level" ] +[ "sql", "deltas", "pattern sql.deltas(schema:str, table:str) (ids:bat[:int], cleared:bat[:bit], readonly:bat[:lng], inserted:bat[:lng], updated:bat[:lng], deleted:bat[:lng], tr_level:bat[:int]) ", "mvc_delta_values;", "Return the delta values sizes from the table's columns, plus the current transaction level" ] +[ "sql", "deltas", "pattern sql.deltas(schema:str, table:str, column:str) (ids:bat[:int], cleared:bat[:bit], readonly:bat[:lng], inserted:bat[:lng], updated:bat[:lng], deleted:bat[:lng], tr_level:bat[:int]) ", "mvc_delta_values;", "Return the delta values sizes of a column, plus the current transaction level" ] [ "sql", "dense_rank", "pattern sql.dense_rank(b:any_1, p:bit, o:bit):int ", "SQLdense_rank;", "return the densely ranked groups" ] [ "sql", "diff", "pattern sql.diff(b:any_1):bit ", "SQLdiff;", "return true if cur != prev row" ] [ "sql", "diff", "pattern sql.diff(p:bit, b:any_1):bit ", "SQLdiff;", "return true if cur != prev row" ] diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c --- a/gdk/gdk_bbp.c +++ b/gdk/gdk_bbp.c @@ -3284,6 +3284,7 @@ BBPbackup(BAT *b, bool subcommit) char *srcdir; long_str nme; const char *s = BBP_physical(b->batCacheid); + size_t slen; if (BBPprepare(subcommit) != GDK_SUCCEED) { return GDK_FAIL; @@ -3297,8 +3298,11 @@ BBPbackup(BAT *b, bool subcommit) s = strrchr(srcdir, DIR_SEP); if (!s) goto fail; - strncpy(nme, ++s, sizeof(nme)); - nme[sizeof(nme) - 1] = 0; + + slen = strlen(++s); + if (slen >= sizeof(nme)) + goto fail; + memcpy(nme, s, slen + 1); srcdir[s - srcdir] = 0; if (b->ttype != TYPE_void && diff --git a/gdk/gdk_system.c b/gdk/gdk_system.c --- a/gdk/gdk_system.c +++ b/gdk/gdk_system.c @@ -713,8 +713,18 @@ MT_create_thread(MT_Id *t, void (*f) (vo int ret; struct posthread *p; sigset_t new_mask, orig_mask; + size_t tlen; join_threads(); + if (threadname == NULL) { + fprintf(stderr, "#MT_create_thread: thread must have a name\n"); + return -1; + } + tlen = strlen(threadname); + if (tlen >= sizeof(p->threadname)) { + fprintf(stderr, "#MT_create_thread: thread's name is too large\n"); + return -1; + } if ((ret = pthread_attr_init(&attr)) != 0) { MT_fprintf(stderr, "#MT_create_thread: cannot init pthread attr: %s\n", @@ -743,8 +753,8 @@ MT_create_thread(MT_Id *t, void (*f) (vo .detached = (d == MT_THR_DETACHED), }; ATOMIC_INIT(&p->exited, 0); - strncpy(p->threadname, threadname, sizeof(p->threadname)); - p->threadname[sizeof(p->threadname) - 1] = 0; + + memcpy(p->threadname, threadname, tlen + 1); pthread_mutex_lock(&posthread_lock); p->next = posthreads; posthreads = p; diff --git a/gdk/gdk_system.h b/gdk/gdk_system.h --- a/gdk/gdk_system.h +++ b/gdk/gdk_system.h @@ -440,12 +440,16 @@ typedef struct MT_Lock { _DBG_LOCK_COUNT_2(l); \ } while (0) -#define MT_lock_init(l, n) \ - do { \ - ATOMIC_CLEAR(&(l)->lock); \ - strncpy((l)->name, (n), sizeof((l)->name)); \ - (l)->name[sizeof((l)->name) - 1] = 0; \ - _DBG_LOCK_INIT(l); \ +#define MT_lock_init(l, n) \ + do { \ + size_t nlen; \ + ATOMIC_CLEAR(&(l)->lock); \ + nlen = strlen(n); \ + if (nlen >= sizeof((l)->name)) \ + nlen = sizeof((l)->name) - 1; \ + memcpy((l)->name, (n), nlen + 1); \ + (l)->name[sizeof((l)->name) - 1] = 0; \ + _DBG_LOCK_INIT(l); \ } while (0) #define MT_lock_unset(l) \ diff --git a/monetdb5/mal/mal_instruction.c b/monetdb5/mal/mal_instruction.c --- a/monetdb5/mal/mal_instruction.c +++ b/monetdb5/mal/mal_instruction.c @@ -387,14 +387,20 @@ getMalBlkOptimized(MalBlkPtr mb, str nam InstrPtr p; int i= 0; char buf[IDLENGTH]= {0}, *n; + size_t nlen; if( name == 0) return mb; - strncpy(buf,name, IDLENGTH); - buf[IDLENGTH - 1] = 0; + + nlen = strlen(name); + if (nlen >= sizeof(buf)) { + mb->errors = createMalException(mb,0, TYPE, "Optimizer name is too large"); + return NULL; + } + memcpy(buf, name, nlen + 1); n = strchr(buf,']'); if( n) *n = 0; - + while (h ){ for( i = 1; i< h->stop; i++){ p = getInstrPtr(h,i); 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 @@ -282,11 +282,9 @@ SERVERlistenThread(SOCKET *Sock) MT_Id tid; stream *s; - if (*Sock) { - sock = Sock[0]; - usock = Sock[1]; - GDKfree(Sock); - } + sock = Sock[0]; + usock = Sock[1]; + GDKfree(Sock); (void) ATOMIC_INC(&nlistener); @@ -499,7 +497,7 @@ static const struct in6_addr ipv6_loopba static const struct in6_addr ipv6_any_addr = IN6ADDR_ANY_INIT; static str -SERVERlisten(int *Port, const char *Usockfile, int *Maxusers) +SERVERlisten(int port, const char *usockfile, int maxusers) { struct sockaddr* server = NULL; struct sockaddr_in server_ipv4; @@ -517,9 +515,6 @@ SERVERlisten(int *Port, const char *Usoc int on = 1; int i = 0; MT_Id pid; - int port; - int maxusers; - char *usockfile; str buf; char host[128]; const char *listenaddr; @@ -538,33 +533,18 @@ SERVERlisten(int *Port, const char *Usoc return MAL_SUCCEED; } - if (listenaddr && accept_any) - throw(ILLARG,"mal_mapi.listen", OPERATION_FAILED - ": mapi_open and mapi_listenaddr cannot be set at the same time"); - - psock = GDKmalloc(sizeof(SOCKET) * 3); + psock = GDKmalloc(sizeof(SOCKET) * 2); if (psock == NULL) throw(MAL,"mal_mapi.listen", SQLSTATE(HY001) MAL_MALLOC_FAIL); - port = *Port; - if (Usockfile == NULL || *Usockfile == 0 || - strcmp(Usockfile, str_nil) == 0) - { + if (usockfile == NULL || strcmp(usockfile, str_nil) == 0) { usockfile = NULL; } else { -#ifndef NATIVE_WIN32 - usockfile = GDKstrdup(Usockfile); - if (usockfile == NULL) { - GDKfree(psock); - throw(MAL,"mal_mapi.listen", SQLSTATE(HY001) MAL_MALLOC_FAIL); - } -#else - usockfile = NULL; +#ifdef NATIVE_WIN32 GDKfree(psock); throw(IO, "mal_mapi.listen", OPERATION_FAILED ": UNIX domain sockets are not supported"); #endif } - maxusers = *Maxusers; maxusers = (maxusers ? maxusers : SERVERMAXUSERS); if (port <= 0 && usockfile == NULL) { @@ -574,7 +554,6 @@ SERVERlisten(int *Port, const char *Usoc if (port > 65535) { GDKfree(psock); - GDKfree(usockfile); throw(ILLARG, "mal_mapi.listen", OPERATION_FAILED ": port number should be between 1 and 65535"); } @@ -598,7 +577,6 @@ SERVERlisten(int *Port, const char *Usoc continue; } GDKfree(psock); - GDKfree(usockfile); throw(IO, "mal_mapi.listen", OPERATION_FAILED ": bind to stream socket on address %s and port %d failed: %s", listenaddr, port, gai_strerror(check)); @@ -641,7 +619,6 @@ SERVERlisten(int *Port, const char *Usoc if (port > 65535) { GDKfree(psock); - GDKfree(usockfile); throw(IO, "mal_mapi.listen", OPERATION_FAILED ": bind to stream socket port %d failed", port); } else if ( #ifdef _MSC_VER @@ -657,7 +634,6 @@ SERVERlisten(int *Port, const char *Usoc continue; } GDKfree(psock); - GDKfree(usockfile); errno = e; throw(IO, "mal_mapi.listen", OPERATION_FAILED ": bind to stream socket port %d failed: %s", port, #ifdef _MSC_VER @@ -676,7 +652,6 @@ SERVERlisten(int *Port, const char *Usoc if (sock == INVALID_SOCKET) { int e = errno; GDKfree(psock); - GDKfree(usockfile); errno = e; throw(IO, "mal_mapi.listen", OPERATION_FAILED ": bind to stream socket port %d " @@ -700,7 +675,6 @@ SERVERlisten(int *Port, const char *Usoc const char *err = strerror(errno); #endif GDKfree(psock); - GDKfree(usockfile); closesocket(sock); errno = e; throw(IO, "mal_mapi.listen", OPERATION_FAILED ": setsockptr failed %s", err); @@ -751,7 +725,6 @@ SERVERlisten(int *Port, const char *Usoc } closesocket(sock); GDKfree(psock); - GDKfree(usockfile); errno = e; throw(IO, "mal_mapi.listen", OPERATION_FAILED ": bind to stream socket port %d failed: %s", port, #ifdef _MSC_VER @@ -769,7 +742,6 @@ SERVERlisten(int *Port, const char *Usoc int e = errno; closesocket(sock); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list