Changeset: dfce6e62c76a for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=dfce6e62c76a Added Files: sql/test/BugTracker-2016/Tests/column_name_conflict.Bug-3912.sql sql/test/BugTracker-2016/Tests/column_name_conflict.Bug-3912.stable.err sql/test/BugTracker-2016/Tests/column_name_conflict.Bug-3912.stable.out sql/test/BugTracker-2016/Tests/copy_into_with_header.Bug-3910.sql sql/test/BugTracker-2016/Tests/copy_into_with_header.Bug-3910.stable.err sql/test/BugTracker-2016/Tests/copy_into_with_header.Bug-3910.stable.out Modified Files: clients/mapiclient/stethoscope.c monetdb5/mal/mal_profiler.c sql/server/rel_updates.c sql/test/BugTracker-2016/Tests/All Branch: geo Log Message:
Merge with default branch. diffs (truncated from 445 to 300 lines): diff --git a/clients/mapiclient/stethoscope.c b/clients/mapiclient/stethoscope.c --- a/clients/mapiclient/stethoscope.c +++ b/clients/mapiclient/stethoscope.c @@ -341,6 +341,8 @@ main(int argc, char **argv) while ((n = mnstr_read(conn, buffer + len, 1, buflen - len-1)) >= 0) { buffer[len + n] = 0; response = buffer; + if( debug) + printf("%s", response); if(json) { if(trace != NULL) { fprintf(trace, "%s", response); diff --git a/monetdb5/mal/mal_profiler.c b/monetdb5/mal/mal_profiler.c --- a/monetdb5/mal/mal_profiler.c +++ b/monetdb5/mal/mal_profiler.c @@ -20,6 +20,7 @@ #include "mal_profiler.h" #include "mal_runtime.h" #include "mal_debugger.h" +#include "mal_resource.h" static void cachedProfilerEvent(MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); @@ -107,6 +108,7 @@ renderProfilerEvent(MalBlkPtr mb, MalStk str stmt, c; char *tbuf; str stmtq; + lng usec= GDKusec(); if( start) // show when instruction was started @@ -133,7 +135,7 @@ renderProfilerEvent(MalBlkPtr mb, MalStk assert(clock.tv_usec >= 0 && clock.tv_usec < 1000000); if( usrname) logadd("\"user\":\"%s\",%s",usrname, prettify); - logadd("\"clk\":"LLFMT",%s",GDKusec(),prettify); + logadd("\"clk\":"LLFMT",%s",usec,prettify); logadd("\"ctime\":\"%s.%06ld\",%s", tbuf+11, (long)clock.tv_usec, prettify); logadd("\"thread\":%d,%s", THRgettid(),prettify); @@ -242,38 +244,59 @@ renderProfilerEvent(MalBlkPtr mb, MalStk * The eventparser may assume this layout for ease of parsing { ... as above ... -"result":{"index":0,"name":"X_41","value":"0@0","count":1,"type": "void" } +"result":{"clk":"173297139,"pc":1,"index":0,,"name":"X_6","type":"void","value":"0@0","eol":0} ... -"argument":{"index":4,"value":"30","type": "int" } +"argument":{"clk":173297139,"pc":1,"index":"2","type":"str","value":"\"default_pipe\"","eol":0}, } +This information can be used to determine memory footprint and variable life times. */ +#define MALARGUMENTDETAILS #ifdef MALARGUMENTDETAILS // Also show details of the arguments for modelling + if(mb) for( j=0; j< pci->argc; j++){ int tpe = getVarType(mb, getArg(pci,j)); - str tname = getTypeName(tpe), cv; + str tname = 0, cv; + lng total = 0; + BUN cnt = 0; + str kind; + str pret = ""; // or prettify + int p = getPC(mb,pci); logadd("\"%s\":{", j< pci->retc?"result":"argument"); - logadd("\"index\":\"%d\",", j); + logadd("\"clk\":"LLFMT",%s",usec,pret); + logadd("\"pc\":%d,%s", p, pret); + logadd("\"index\":\"%d\",%s", j,pret); if( !isVarConstant(mb, getArg(pci,j))){ - logadd("\"name\":\"%s\",", getVarName(mb, getArg(pci,j))); + logadd("\"name\":\"%s\",%s", getVarName(mb, getArg(pci,j)), pret); } if( isaBatType(tpe) ){ - BAT *d= BBPquickdesc(abs(stk->stk[getArg(pci,j)].val.ival),TRUE); - if( d) - logadd("\"count\":" BUNFMT",", BATcount(d)); - GDKfree(tname); + BAT *d= BATdescriptor(abs(stk->stk[getArg(pci,j)].val.ival)); tname = getTypeName(getColumnType(tpe)); - logadd("\"type\":\"col[:%s]\"", tname); + logadd("\"type\":\"bat[:%s]\",%s", tname,pret); + if( d) { + cnt = BATcount(d); + total += heapinfo(&d->T->heap); + if ( d->T->vheap && d->T->vheap->parentid ){ + total += heapinfo(d->T->vheap); + } + kind = d->batPersistence? "persistent":"transient"; + BBPunfix(d->batCacheid); + } + logadd("\"count\":\""BUNFMT"\",%s",cnt,pret); + logadd("\"kind\":\"%s\",%s",kind,pret); + logadd("\"footprint\":" LLFMT",%s", total,pret); } else{ + tname = getTypeName(tpe); + logadd("\"type\":\"%s\",%s", tname,pret); cv = 0; VALformat(&cv, &stk->stk[getArg(pci,j)]); stmtq = mal_quote(cv, strlen(cv)); - logadd("\"value\":\"%s\",", stmtq); - logadd("\"type\":\"%s\"", tname); + logadd("\"value\":\"%s\",%s", stmtq,pret); GDKfree(cv); GDKfree(stmtq); } + logadd("\"eol\":%d%s", p == getEndOfLife(mb,getArg(pci,j)) , pret); GDKfree(tname); logadd("}%s%s", (j< pci->argc-1?",":""), prettify); } diff --git a/sql/server/rel_updates.c b/sql/server/rel_updates.c --- a/sql/server/rel_updates.c +++ b/sql/server/rel_updates.c @@ -297,7 +297,7 @@ check_table_columns(mvc *sql, sql_table } static list * -rel_inserts(mvc *sql, sql_table *t, sql_rel *r, list *collist, size_t rowcount) +rel_inserts(mvc *sql, sql_table *t, sql_rel *r, list *collist, size_t rowcount, int copy) { int len, i; sql_exp **inserts = insert_exp_array(sql, t, &len); @@ -305,11 +305,19 @@ rel_inserts(mvc *sql, sql_table *t, sql_ node *n, *m; if (r->exps) { - for (n = r->exps->h, m = collist->h; n && m; n = n->next, m = m->next) { - sql_column *c = m->data; - sql_exp *e = n->data; - - inserts[c->colnr] = rel_check_type(sql, &c->type, e, type_equal); + if (!copy) { + for (n = r->exps->h, m = collist->h; n && m; n = n->next, m = m->next) { + sql_column *c = m->data; + sql_exp *e = n->data; + + inserts[c->colnr] = rel_check_type(sql, &c->type, e, type_equal); + } + } else { + for (m = collist->h; m; m = m->next) { + sql_column *c = m->data; + + inserts[c->colnr] = exps_bind_column2( r->exps, c->t->base.name, c->base.name); + } } } for (i = 0; i < len; i++) { @@ -519,7 +527,7 @@ insert_into(mvc *sql, dlist *qname, dlis (!r->exps && collist)) return sql_error(sql, 02, "21S01!INSERT INTO: query result doesn't match number of columns in table '%s'", tname); - r->exps = rel_inserts(sql, t, r, collist, rowcount); + r->exps = rel_inserts(sql, t, r, collist, rowcount, 0); return rel_insert_table(sql, t, tname, r); } @@ -1180,6 +1188,7 @@ copyfrom(mvc *sql, dlist *qname, dlist * lng nr = (nr_offset)?nr_offset->h->data.l_val:-1; lng offset = (nr_offset)?nr_offset->h->next->data.l_val:0; list *collist; + int reorder = 0; assert(!nr_offset || nr_offset->h->type == type_lng); assert(!nr_offset || nr_offset->h->next->type == type_lng); @@ -1264,6 +1273,7 @@ copyfrom(mvc *sql, dlist *qname, dlist * } if (!has_formats) headers = NULL; + reorder = 1; } if (files) { dnode *n = files->h; @@ -1336,7 +1346,10 @@ copyfrom(mvc *sql, dlist *qname, dlist * if (!rel) return rel; - rel->exps = rel_inserts(sql, t, rel, collist, 1); + if (reorder) + rel = rel_project(sql->sa, rel, rel_inserts(sql, t, rel, collist, 1, 1)); + else + rel->exps = rel_inserts(sql, t, rel, collist, 1, 0); rel = rel_insert_table(sql, t, tname, rel); if (rel && locked) rel->flag |= UPD_LOCKED; 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 @@ -1,6 +1,8 @@ storagemodel.Bug-3923 LEFT-JOIN_with_OR_conditions_triggers_assertion.Bug-3908 incorrect_column_name_in_OR_condition_of_LEFT-JOIN_crashes_mserver.Bug-3909 +copy_into_with_header.Bug-3910 +column_name_conflict.Bug-3912 DISTINCT_with_correlated_scalar_subquery_crashes_mserver.Bug-3920 create_table_from_complex_query.Bug-3921 projectionpath-prefix.Bug diff --git a/sql/test/BugTracker-2016/Tests/column_name_conflict.Bug-3912.sql b/sql/test/BugTracker-2016/Tests/column_name_conflict.Bug-3912.sql new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2016/Tests/column_name_conflict.Bug-3912.sql @@ -0,0 +1,6 @@ +create table foo_bar (baz int); +create table foo (bar_baz int); +insert into foo values (1); +insert into foo_bar values (2); +select * from foo_bar; +drop table foo_bar; diff --git a/sql/test/BugTracker-2016/Tests/column_name_conflict.Bug-3912.stable.err b/sql/test/BugTracker-2016/Tests/column_name_conflict.Bug-3912.stable.err new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2016/Tests/column_name_conflict.Bug-3912.stable.err @@ -0,0 +1,43 @@ +stderr of test 'column_name_conflict.Bug-3912` in directory 'sql/test/BugTracker-2016` itself: + + +# 08:21:27 > +# 08:21:27 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" "mapi_open=true" "--set" "mapi_port=38022" "--set" "mapi_usock=/var/tmp/mtest-32403/.s.monetdb.38022" "--set" "monet_prompt=" "--forcemito" "--set" "mal_listing=2" "--dbpath=/home/niels/scratch/rc-monetdb/Linux-x86_64/var/MonetDB/mTests_sql_test_BugTracker-2016" "--set" "mal_listing=0" "--set" "embedded_r=yes" +# 08:21:27 > + +# 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 = 38022 +# cmdline opt mapi_usock = /var/tmp/mtest-32403/.s.monetdb.38022 +# cmdline opt monet_prompt = +# cmdline opt mal_listing = 2 +# cmdline opt gdk_dbpath = /home/niels/scratch/rc-monetdb/Linux-x86_64/var/MonetDB/mTests_sql_test_BugTracker-2016 +# cmdline opt mal_listing = 0 +# cmdline opt embedded_r = yes +# cmdline opt gdk_debug = 536870922 + +# 08:21:28 > +# 08:21:28 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-32403" "--port=38022" +# 08:21:28 > + +MAPI = (monetdb) /var/tmp/mtest-32403/.s.monetdb.38022 +QUERY = create table foo (bar_baz int); +ERROR = !CREATE TABLE: sys_foo_bar_baz conflicts +MAPI = (monetdb) /var/tmp/mtest-32403/.s.monetdb.38022 +QUERY = insert into foo values (1); +ERROR = !INSERT INTO: no such table 'foo' + +# 08:21:28 > +# 08:21:28 > "Done." +# 08:21:28 > + diff --git a/sql/test/BugTracker-2016/Tests/column_name_conflict.Bug-3912.stable.out b/sql/test/BugTracker-2016/Tests/column_name_conflict.Bug-3912.stable.out new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2016/Tests/column_name_conflict.Bug-3912.stable.out @@ -0,0 +1,46 @@ +stdout of test 'column_name_conflict.Bug-3912` in directory 'sql/test/BugTracker-2016` itself: + + +# 08:21:27 > +# 08:21:27 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" "mapi_open=true" "--set" "mapi_port=38022" "--set" "mapi_usock=/var/tmp/mtest-32403/.s.monetdb.38022" "--set" "monet_prompt=" "--forcemito" "--set" "mal_listing=2" "--dbpath=/home/niels/scratch/rc-monetdb/Linux-x86_64/var/MonetDB/mTests_sql_test_BugTracker-2016" "--set" "mal_listing=0" "--set" "embedded_r=yes" +# 08:21:27 > + +# MonetDB 5 server v11.21.12 +# 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-2015 MonetDB B.V., all rights reserved +# Visit http://www.monetdb.org/ for further information +# Listening for connection requests on mapi:monetdb://localhost.nes.nl:38022/ +# Listening for UNIX domain connection requests on mapi:monetdb:///var/tmp/mtest-32403/.s.monetdb.38022 +# MonetDB/GIS module loaded +# Start processing logs sql/sql_logs version 52200 +# Start reading the write-ahead log 'sql_logs/sql/log.5' +# Finished reading the write-ahead log 'sql_logs/sql/log.5' +# Finished processing logs sql/sql_logs +# MonetDB/SQL module loaded +# MonetDB/R module loaded + +Ready. + +# 08:21:28 > +# 08:21:28 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-32403" "--port=38022" +# 08:21:28 > + +#create table foo_bar (baz int); +#insert into foo_bar values (2); +[ 1 ] +#select * from foo_bar; +% sys.foo_bar # table_name +% baz # name +% int # type _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list