Changeset: a98a4bd12842 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a98a4bd12842 Added Files: sql/test/BugTracker-2016/Tests/crash.Bug-6081.sql sql/test/BugTracker-2016/Tests/crash.Bug-6081.stable.err sql/test/BugTracker-2016/Tests/crash.Bug-6081.stable.out Modified Files: clients/Tests/exports.stable.out monetdb5/ChangeLog.Dec2016 monetdb5/mal/mal_instruction.c monetdb5/mal/mal_instruction.h monetdb5/mal/mal_type.c monetdb5/mal/mal_type.h sql/backends/monet5/sql_gencode.c sql/common/sql_mem.c sql/server/rel_optimizer.c sql/test/BugTracker-2016/Tests/All Branch: default Log Message:
Merge with Dec2016 branch. diffs (291 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 @@ -2066,7 +2066,7 @@ str generatorRef; MALfcn getAddress(stream *out, str filename, str fcnname, int silent); str getArgDefault(MalBlkPtr mb, InstrPtr p, int idx); ptr getArgReference(MalStkPtr stk, InstrPtr pci, int k); -int getAtomIndex(str nme, int len, int deftpe); +int getAtomIndex(const char *nme, int len, int deftpe); lng getBatSpace(BAT *b); int getBitConstant(MalBlkPtr mb, bit val); int getBlockBegin(MalBlkPtr mb, int pc); @@ -2344,7 +2344,7 @@ str projectionRef; str projectionpathRef; void promptInstruction(stream *fd, MalBlkPtr mb, MalStkPtr stk, InstrPtr p, int flg); InstrPtr pushArgument(MalBlkPtr mb, InstrPtr p, int varid); -InstrPtr pushArgumentId(MalBlkPtr mb, InstrPtr p, str name); +InstrPtr pushArgumentId(MalBlkPtr mb, InstrPtr p, const char *name); InstrPtr pushBit(MalBlkPtr mb, InstrPtr q, bit val); InstrPtr pushBte(MalBlkPtr mb, InstrPtr q, bte val); InstrPtr pushDbl(MalBlkPtr mb, InstrPtr q, dbl val); diff --git a/monetdb5/ChangeLog.Dec2016 b/monetdb5/ChangeLog.Dec2016 --- a/monetdb5/ChangeLog.Dec2016 +++ b/monetdb5/ChangeLog.Dec2016 @@ -22,7 +22,7 @@ where "wrd" was used. * Wed Apr 6 2016 Martin Kersten <m...@cwi.nl> -- Keep a collection of full traces Each time the SQL user applies +- Keep a collection of full traces. Each time the SQL user applies the TRACE option, the full json trace is retained within the <dbpath>/<dbname>/sql_traces 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 @@ -1359,22 +1359,19 @@ pushReturn(MalBlkPtr mb, InstrPtr p, int * TODO */ /* swallows name argument */ InstrPtr -pushArgumentId(MalBlkPtr mb, InstrPtr p, str name) +pushArgumentId(MalBlkPtr mb, InstrPtr p, const char *name) { int v; - if (p == NULL) { - GDKfree(name); + if (p == NULL) return NULL; - } v = findVariable(mb, name); if (v < 0) { if ((v = newVariable(mb, name, strlen(name), getAtomIndex(name, -1, TYPE_any))) < 0) { freeInstruction(p); return NULL; } - } else - GDKfree(name); + } return pushArgument(mb, p, v); } diff --git a/monetdb5/mal/mal_instruction.h b/monetdb5/mal/mal_instruction.h --- a/monetdb5/mal/mal_instruction.h +++ b/monetdb5/mal/mal_instruction.h @@ -164,7 +164,7 @@ mal_export void pushInstruction(MalBlkPt mal_export InstrPtr pushArgument(MalBlkPtr mb, InstrPtr p, int varid); mal_export InstrPtr setArgument(MalBlkPtr mb, InstrPtr p, int idx, int varid); mal_export InstrPtr pushReturn(MalBlkPtr mb, InstrPtr p, int varid); -mal_export InstrPtr pushArgumentId(MalBlkPtr mb, InstrPtr p, str name); +mal_export InstrPtr pushArgumentId(MalBlkPtr mb, InstrPtr p, const char *name); mal_export void delArgument(InstrPtr p, int varid); mal_export void setVarType(MalBlkPtr mb, int i, int tpe); mal_export void clrAllTypes(MalBlkPtr mb); diff --git a/monetdb5/mal/mal_type.c b/monetdb5/mal/mal_type.c --- a/monetdb5/mal/mal_type.c +++ b/monetdb5/mal/mal_type.c @@ -101,11 +101,16 @@ getTypeIdentifier(malType tpe){ #define qt(x) (nme[1]==x[1] && nme[2]==x[2] ) int -getAtomIndex(str nme, int len, int deftype) +getAtomIndex(const char *nme, int len, int deftype) { - int i,k=0; - char old=0; + int i; + if (len < 0) + len = (int) strlen(nme); + if (len >= IDLENGTH) { + /* name too long: cannot match any atom name */ + return deftype; + } if (len == 3) switch (*nme) { case 'a': @@ -157,20 +162,14 @@ getAtomIndex(str nme, int len, int defty return TYPE_sht; break; } - if( nme[0]=='v' && qt("voi") && nme[3] == 'd') - return TYPE_void; - if( len > 0 ){ - old= nme[k = MIN(IDLENGTH, len)]; - nme[k] = 0; - } - for(i= TYPE_str; i< GDKatomcnt; i++) - if( BATatoms[i].name[0]==nme[0] && - strcmp(nme,BATatoms[i].name)==0) break; - if( len > 0) - nme[k]=old; - if (i == GDKatomcnt) - i = deftype; - return i; + else if (len == 4 && nme[0]=='v' && qt("voi") && nme[3] == 'd') + return TYPE_void; + for (i = TYPE_str; i < GDKatomcnt; i++) + if (BATatoms[i].name[0] == nme[0] && + strncmp(nme, BATatoms[i].name, len) == 0 && + BATatoms[i].name[len] == 0) + return i; + return deftype; } inline int diff --git a/monetdb5/mal/mal_type.h b/monetdb5/mal/mal_type.h --- a/monetdb5/mal/mal_type.h +++ b/monetdb5/mal/mal_type.h @@ -62,7 +62,7 @@ mal_export str getTypeName(malType tpe); mal_export str getTypeIdentifier(malType tpe); -mal_export int getAtomIndex(str nme, int len, int deftpe); +mal_export int getAtomIndex(const char *nme, int len, int deftpe); #define idcmp(n, m) strcmp(n, m) mal_export int isIdentifier(str s); mal_export int findGDKtype(int type); /* used in src/mal/mal_interpreter.c */ diff --git a/sql/common/sql_mem.c b/sql/common/sql_mem.c --- a/sql/common/sql_mem.c +++ b/sql/common/sql_mem.c @@ -44,15 +44,20 @@ sql_ref_dec(sql_ref *r) sql_allocator *sa_create(void) { sql_allocator *sa = MNEW(sql_allocator); - if (!sa) { + if (sa == NULL) { return NULL; } sa->size = 64; sa->nr = 1; sa->blks = NEW_ARRAY(char*,sa->size); + if (sa->blks == NULL) { + _DELETE(sa); + return NULL; + } sa->blks[0] = NEW_ARRAY(char,SA_BLOCK); sa->usedmem = SA_BLOCK; - if (!sa->blks[0]) { + if (sa->blks[0] == NULL) { + _DELETE(sa->blks); _DELETE(sa); return NULL; } diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c --- a/sql/server/rel_optimizer.c +++ b/sql/server/rel_optimizer.c @@ -2123,7 +2123,7 @@ exps_unique( list *exps ) if (e && (p = find_prop(e->p, PROP_HASHCOL)) != NULL) { sql_ukey *k = p->value; - if (list_length(k->k.columns) <= 1) + if (k && list_length(k->k.columns) <= 1) return 1; } } diff --git a/sql/test/BugTracker-2016/Tests/All b/sql/test/BugTracker-2016/Tests/All --- a/sql/test/BugTracker-2016/Tests/All +++ b/sql/test/BugTracker-2016/Tests/All @@ -59,4 +59,5 @@ ifthenelse-void.Bug-6075 assert-on-table-producing-function.Bug-6076 assert-on-push-project-up.Bug-6077 assert-on-project.Bug-6078 +crash.Bug-6081 merge-table-edit.Bug-6084 diff --git a/sql/test/BugTracker-2016/Tests/crash.Bug-6081.sql b/sql/test/BugTracker-2016/Tests/crash.Bug-6081.sql new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2016/Tests/crash.Bug-6081.sql @@ -0,0 +1,10 @@ +select distinct + ref_1.dependency_type_name as c0, + ref_1.dependency_type_id as c1, + ref_1.dependency_type_name as c2, + ref_1.dependency_type_name as c3, + ref_1.dependency_type_id as c4 +from + sys.dependency_types as ref_1 +where ref_1.dependency_type_name is NULL +limit 96; diff --git a/sql/test/BugTracker-2016/Tests/crash.Bug-6081.stable.err b/sql/test/BugTracker-2016/Tests/crash.Bug-6081.stable.err new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2016/Tests/crash.Bug-6081.stable.err @@ -0,0 +1,35 @@ +stderr of test 'crash.Bug-6081` in directory 'sql/test/BugTracker-2016` itself: + + +# 10:17:31 > +# 10:17:31 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" "mapi_open=true" "--set" "mapi_port=36589" "--set" "mapi_usock=/var/tmp/mtest-6720/.s.monetdb.36589" "--set" "monet_prompt=" "--forcemito" "--dbpath=/home/niels/scratch/rc-monetdb/Linux-x86_64/var/MonetDB/mTests_sql_test_BugTracker-2016" "--set" "embedded_r=yes" +# 10:17:31 > + +# builtin opt gdk_dbpath = /home/niels/scratch/rc-monetdb/Linux-x86_64/var/monetdb5/dbfarm/demo +# builtin opt gdk_debug = 0 +# builtin opt gdk_vmtrim = no +# builtin opt monet_prompt = > +# builtin opt monet_daemon = no +# builtin opt mapi_port = 50000 +# builtin opt mapi_open = false +# builtin opt mapi_autosense = false +# builtin opt sql_optimizer = default_pipe +# builtin opt sql_debug = 0 +# cmdline opt gdk_nr_threads = 0 +# cmdline opt mapi_open = true +# cmdline opt mapi_port = 36589 +# cmdline opt mapi_usock = /var/tmp/mtest-6720/.s.monetdb.36589 +# cmdline opt monet_prompt = +# cmdline opt gdk_dbpath = /home/niels/scratch/rc-monetdb/Linux-x86_64/var/MonetDB/mTests_sql_test_BugTracker-2016 +# cmdline opt embedded_r = yes +# cmdline opt gdk_debug = 536870922 + +# 10:17:32 > +# 10:17:32 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-6720" "--port=36589" +# 10:17:32 > + + +# 10:17:32 > +# 10:17:32 > "Done." +# 10:17:32 > + diff --git a/sql/test/BugTracker-2016/Tests/crash.Bug-6081.stable.out b/sql/test/BugTracker-2016/Tests/crash.Bug-6081.stable.out new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2016/Tests/crash.Bug-6081.stable.out @@ -0,0 +1,46 @@ +stdout of test 'crash.Bug-6081` in directory 'sql/test/BugTracker-2016` itself: + + +# 10:17:31 > +# 10:17:31 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" "mapi_open=true" "--set" "mapi_port=36589" "--set" "mapi_usock=/var/tmp/mtest-6720/.s.monetdb.36589" "--set" "monet_prompt=" "--forcemito" "--dbpath=/home/niels/scratch/rc-monetdb/Linux-x86_64/var/MonetDB/mTests_sql_test_BugTracker-2016" "--set" "embedded_r=yes" +# 10:17:31 > + +# MonetDB 5 server v11.23.14 +# This is an unreleased version +# Serving database 'mTests_sql_test_BugTracker-2016', using 4 threads +# Compiled for x86_64-unknown-linux-gnu/64bit with 64bit OIDs and 128bit integers dynamically linked +# Found 7.332 GiB available main-memory. +# Copyright (c) 1993-July 2008 CWI. +# Copyright (c) August 2008-2016 MonetDB B.V., all rights reserved +# Visit http://www.monetdb.org/ for further information +# Listening for connection requests on mapi:monetdb://localhost.nes.nl:36589/ +# Listening for UNIX domain connection requests on mapi:monetdb:///var/tmp/mtest-6720/.s.monetdb.36589 +# MonetDB/GIS module loaded +# MonetDB/SQL module loaded +# MonetDB/R module loaded + +Ready. + +# 10:17:32 > +# 10:17:32 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-6720" "--port=36589" +# 10:17:32 > + +#select distinct +# ref_1.dependency_type_name as c0, +# ref_1.dependency_type_id as c1, +# ref_1.dependency_type_name as c2, +# ref_1.dependency_type_name as c3, +# ref_1.dependency_type_id as c4 +#from +# sys.dependency_types as ref_1 +#where ref_1.dependency_type_name is NULL +#limit 96; +% sys.L1, sys.L2, sys.L3, sys.L4, sys.L5 # table_name +% c0, c1, c2, c3, c4 # name +% varchar, smallint, varchar, varchar, smallint # type +% 0, 1, 0, 0, 1 # length + +# 10:17:32 > +# 10:17:32 > "Done." +# 10:17:32 > + _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list