Changeset: f267b9719d1a for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f267b9719d1a Added Files: sql/test/BugTracker-2016/Tests/RELEASE_SAVEPOINT_after_ALTER_TABLE_crash.Bug-4010.sql sql/test/BugTracker-2016/Tests/RELEASE_SAVEPOINT_after_ALTER_TABLE_crash.Bug-4010.stable.err sql/test/BugTracker-2016/Tests/RELEASE_SAVEPOINT_after_ALTER_TABLE_crash.Bug-4010.stable.out sql/test/BugTracker-2016/Tests/string-length.Bug-3999.sql sql/test/BugTracker-2016/Tests/string-length.Bug-3999.stable.err sql/test/BugTracker-2016/Tests/string-length.Bug-3999.stable.out Modified Files: clients/Tests/exports.stable.out java/ChangeLog.Jul2015 java/src/main/java/nl/cwi/monetdb/jdbc/MonetResultSet.java java/src/main/java/nl/cwi/monetdb/util/SQLExporter.java monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out monetdb5/extras/mal_optimizer_template/opt_sql_append.c monetdb5/mal/mal.h monetdb5/mal/mal_debugger.c monetdb5/mal/mal_instruction.c monetdb5/mal/mal_instruction.h monetdb5/mal/mal_listing.c monetdb5/mal/mal_namespace.c monetdb5/modules/mal/Tests/inspect00.stable.out monetdb5/optimizer/Tests/dataflow3.stable.out monetdb5/optimizer/Tests/inline02.stable.out monetdb5/optimizer/Tests/inline03.stable.out monetdb5/optimizer/Tests/inline04.stable.out monetdb5/optimizer/Tests/inline06.stable.out monetdb5/optimizer/Tests/inline07.stable.out monetdb5/optimizer/Tests/inline09.stable.out monetdb5/optimizer/Tests/inline10.stable.out monetdb5/optimizer/Tests/inline12.stable.out monetdb5/optimizer/Tests/inlineCst.stable.out monetdb5/optimizer/Tests/inlineFunction2.stable.out monetdb5/optimizer/Tests/manifold2.stable.out monetdb5/optimizer/opt_support.c monetdb5/optimizer/opt_wrapper.c monetdb5/optimizer/optimizer.c monetdb5/scheduler/run_isolate.c sql/backends/monet5/sql_decimal.mal sql/backends/monet5/sql_decimal.mal.sh sql/backends/monet5/sql_decimal_hge.mal sql/backends/monet5/sql_decimal_hge.mal.sh sql/backends/monet5/sql_gencode.c sql/backends/monet5/sql_optimizer.c sql/benchmarks/ssbm/Tests/01-explain.stable.out sql/benchmarks/ssbm/Tests/01-explain.stable.out.int128 sql/benchmarks/ssbm/Tests/02-explain.stable.out sql/benchmarks/ssbm/Tests/02-explain.stable.out.int128 sql/benchmarks/ssbm/Tests/03-explain.stable.out sql/benchmarks/ssbm/Tests/03-explain.stable.out.int128 sql/benchmarks/ssbm/Tests/04-explain.stable.out sql/benchmarks/ssbm/Tests/04-explain.stable.out.int128 sql/benchmarks/ssbm/Tests/05-explain.stable.out sql/benchmarks/ssbm/Tests/05-explain.stable.out.int128 sql/benchmarks/ssbm/Tests/06-explain.stable.out sql/benchmarks/ssbm/Tests/06-explain.stable.out.int128 sql/benchmarks/ssbm/Tests/07-explain.stable.out sql/benchmarks/ssbm/Tests/07-explain.stable.out.int128 sql/benchmarks/ssbm/Tests/08-explain.stable.out sql/benchmarks/ssbm/Tests/08-explain.stable.out.int128 sql/benchmarks/ssbm/Tests/09-explain.stable.out sql/benchmarks/ssbm/Tests/09-explain.stable.out.int128 sql/benchmarks/ssbm/Tests/10-explain.stable.out sql/benchmarks/ssbm/Tests/10-explain.stable.out.int128 sql/benchmarks/tpch/Tests/01-explain.stable.out sql/benchmarks/tpch/Tests/01-explain.stable.out.32bit sql/benchmarks/tpch/Tests/01-explain.stable.out.int128 sql/benchmarks/tpch/Tests/02-explain.stable.out sql/benchmarks/tpch/Tests/03-explain.stable.out sql/benchmarks/tpch/Tests/03-explain.stable.out.int128 sql/benchmarks/tpch/Tests/05-explain.stable.out sql/benchmarks/tpch/Tests/05-explain.stable.out.32bit sql/benchmarks/tpch/Tests/05-explain.stable.out.int128 sql/benchmarks/tpch/Tests/06-explain.stable.out sql/benchmarks/tpch/Tests/06-explain.stable.out.int128 sql/benchmarks/tpch/Tests/08-explain.stable.out.int128 sql/benchmarks/tpch/Tests/09-explain.stable.out sql/benchmarks/tpch/Tests/09-explain.stable.out.int128 sql/benchmarks/tpch/Tests/10-explain.stable.out sql/benchmarks/tpch/Tests/10-explain.stable.out.int128 sql/benchmarks/tpch/Tests/12-explain.stable.out sql/benchmarks/tpch/Tests/12-explain.stable.out.int128 sql/benchmarks/tpch/Tests/14-explain.stable.out.int128 sql/benchmarks/tpch/Tests/17-explain.stable.out sql/benchmarks/tpch/Tests/17-explain.stable.out.int128 sql/jdbc/tests/Tests/Test_JdbcClient.stable.out sql/test/BugTracker-2009/Tests/explain_gives_crash.SF-2741829.stable.out sql/test/BugTracker-2009/Tests/segfault_when_quitting_debugger.SF-2538837.stable.out sql/test/BugTracker-2011/Tests/func_iter_vs_bulk.Bug-2826.stable.out sql/test/BugTracker-2012/Tests/rewrite_like_into_likesubselect.Bug-3179.stable.out sql/test/BugTracker-2013/Tests/between.Bug-3259.stable.out sql/test/BugTracker-2013/Tests/between.Bug-3259.stable.out.int128 sql/test/BugTracker-2013/Tests/between.Bug-3259.stable.out.int128.single sql/test/BugTracker-2014/Tests/querylog.Bug-3607.stable.out sql/test/BugTracker-2015/Tests/useless_casts.Bug-3756.stable.out sql/test/BugTracker-2016/Tests/All sql/test/BugTracker-2016/Tests/storagemodel.stable.out sql/test/BugTracker/Tests/authorization.SF-1430616.stable.out sql/test/BugTracker/Tests/bug_in_selection.SF-1892413.stable.out sql/test/BugTracker/Tests/explain.SF-1739353.stable.out sql/test/BugTracker/Tests/jdbc_no_debug.SF-1739356.stable.out sql/test/BugTracker/Tests/jdbc_no_debug.SF-1739356.stable.out.32bit sql/test/Users/Tests/copyinto.SQL.py sql/test/Users/Tests/copyinto.stable.err sql/test/Users/Tests/dropManyUsers.Bug-3764.SQL.py sql/test/Users/Tests/dropManyUsers.Bug-3764.stable.out sql/test/Users/Tests/test_privs2_p1.stable.out sql/test/bugs/Tests/except-union-intersect-bug-sf-1146079.stable.out sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.int128 sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.int128 sql/test/emptydb-upgrade-hge/Tests/upgrade.stable.out.int128 sql/test/emptydb-upgrade/Tests/upgrade.stable.out.int128 sql/test/mergetables/Tests/mergequery.stable.out sql/test/remote/Tests/partition_elim.stable.out testing/Mfilter.py testing/Mtest.py.in Branch: default Log Message:
merge changes diffs (truncated from 7559 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 @@ -1939,7 +1939,7 @@ str ZORDslice_int(bat *r, int *xb, int * str abortRef; str addOptimizerPipe(Client cntxt, MalBlkPtr mb, str name); str addPipeDefinition(Client cntxt, str name, str pipe); -void addtoMalBlkHistory(MalBlkPtr mb, str marker); +void addtoMalBlkHistory(MalBlkPtr mb); str affectedRowsRef; str aggrRef; str alarmRef; @@ -2116,7 +2116,6 @@ int getHgeConstant(MalBlkPtr mb, hge val int getIntConstant(MalBlkPtr mb, int val); int getLngConstant(MalBlkPtr mb, lng val); MalBlkPtr getMalBlkHistory(MalBlkPtr mb, int idx); -MalBlkPtr getMalBlkMarker(MalBlkPtr mb, str marker); lng getMemoryClaim(MalBlkPtr mb, MalStkPtr stk, InstrPtr pci, int i, int flag); str getName(const char *nme); str getNameLen(const char *nme, size_t len); @@ -2138,7 +2137,6 @@ lng getUserTime(void); str getVarName(MalBlkPtr mb, int i); lng getVolume(MalStkPtr stk, InstrPtr pci, int rd); int getWrdConstant(MalBlkPtr mb, wrd val); -MalBlkPtr gotoMalBlkMarker(MalBlkPtr mb, str marker); str grabRef; str groupRef; str groupbyRef; diff --git a/java/ChangeLog.Jul2015 b/java/ChangeLog.Jul2015 --- a/java/ChangeLog.Jul2015 +++ b/java/ChangeLog.Jul2015 @@ -1,7 +1,18 @@ # ChangeLog file for java # This file is updated with Maddlog +* Thu May 12 2016 Martin van Dinther <martin.van.dint...@monetdbsolutions.com> +- Improved JdbcClient program when presenting query data to console. + It used to send an SQL catalog query for each query result column + which slowed down the interactive response considerably. + These additional SQL catalog queries have been eliminated. + +* Thu May 12 2016 Martin van Dinther <martin.van.dint...@monetdbsolutions.com> +- Corrected MonetResultSet.getObject(String columnName). It no longer + throws a NullPointerException in cases where internally a + MonetVirtualResultSet is used. + * Sun May 8 2016 Jennie Zhang <y.zh...@cwi.nl> - Fixed Connection.isValid(): this method should never attempt to - close the connection, even an error has occurred + close the connection, even if an error has occurred. diff --git a/java/src/main/java/nl/cwi/monetdb/jdbc/MonetResultSet.java b/java/src/main/java/nl/cwi/monetdb/jdbc/MonetResultSet.java --- a/java/src/main/java/nl/cwi/monetdb/jdbc/MonetResultSet.java +++ b/java/src/main/java/nl/cwi/monetdb/jdbc/MonetResultSet.java @@ -2018,7 +2018,7 @@ public class MonetResultSet extends Mone */ @Override public Object getObject(String columnName) throws SQLException { - return getObject(columnName, this.getStatement().getConnection().getTypeMap()); + return getObject(findColumn(columnName)); } /** diff --git a/java/src/main/java/nl/cwi/monetdb/util/SQLExporter.java b/java/src/main/java/nl/cwi/monetdb/util/SQLExporter.java --- a/java/src/main/java/nl/cwi/monetdb/util/SQLExporter.java +++ b/java/src/main/java/nl/cwi/monetdb/util/SQLExporter.java @@ -402,21 +402,22 @@ public class SQLExporter extends Exporte public void resultSetToTable(ResultSet rs) throws SQLException { ResultSetMetaData md = rs.getMetaData(); int cols = md.getColumnCount(); - // find the presentation widths of the columns - int[] width = new int[cols +1]; - for (int j = 1; j <= cols; j++) { - int displaySize = md.getColumnDisplaySize(j); - int labelLength = md.getColumnLabel(j).length(); - width[j] = (displaySize > labelLength) ? displaySize : labelLength; - if (md.isNullable(j) != ResultSetMetaData.columnNoNulls) { - width[j] = Math.max("<NULL>".length(), width[j]); - } + // find the optimal display widths of the columns + int[] width = new int[cols + 1]; + boolean[] isSigned = new boolean[cols + 1]; + for (int j = 1; j < width.length; j++) { + int coldisplaysize = md.getColumnDisplaySize(j); + int collabellength = md.getColumnLabel(j).length(); + int maxwidth = (coldisplaysize > collabellength) ? coldisplaysize : collabellength; + // the minimum width should be 4 to represent: "NULL" + width[j] = (maxwidth > 4) ? maxwidth : 4; + isSigned[j] = md.isSigned(j); } - // print header + // print the header text out.print("+"); for (int j = 1; j < width.length; j++) - out.print(repeat('-', width[j] +1) + "-+"); + out.print(repeat('-', width[j] + 1) + "-+"); out.println(); out.print("|"); @@ -439,26 +440,33 @@ public class SQLExporter extends Exporte Object rdata = rs.getObject(j); String data; if (rdata == null || rs.wasNull()) { - data = "<NULL>"; + data = "NULL"; } else { data = rdata.toString(); + if (data == null) + data = "NULL"; } - String filler = repeat(' ', Math.max(width[j] - data.length(), 0)); - if (md.isSigned(j)) { - // we have a numeric type here, right align presented data - out.print(" " + filler + data + " |"); + + int filler_length = width[j] - data.length(); + if (filler_length <= 0) { + out.print(" " + data + " |"); } else { - // something else - out.print(" " + data + filler + " |"); + if (isSigned[j]) { + // we have a numeric type here, right align + out.print(" " + repeat(' ', filler_length) + data + " |"); + } else { + // all other left align + out.print(" " + data + repeat(' ', filler_length) + " |"); + } } } out.println(); } - // print footer + // print the footer text out.print("+"); for (int j = 1; j < width.length; j++) - out.print(repeat('-', width[j] +1) + "-+"); + out.print(repeat('-', width[j] + 1) + "-+"); out.println(); out.println(count + " row" + (count != 1 ? "s" : "")); diff --git a/monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out b/monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out --- a/monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out +++ b/monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out @@ -64,10 +64,10 @@ Ready. % 118 # length function user.s4_1():void; X_24:void := querylog.define("explain copy into ttt from \\'/tmp/xyz\\';","default_pipe",12); -barrier X_34 := language.dataflow(); +barrier X_53 := language.dataflow(); X_1 := sql.mvc(); (X_11:bat[:int],X_12:bat[:int],X_13:bat[:int]) := sql.copy_from(nil,"|","\\n",nil:str,"null","/tmp/xyz",-1,0,0,0); -exit X_34; +exit X_53; X_14 := sql.append(X_1,"sys","ttt","a",X_11); X_18 := sql.append(X_14,"sys","ttt","b",X_12); X_20 := sql.append(X_18,"sys","ttt","c",X_13); @@ -98,10 +98,10 @@ end user.s4_1; % 118 # length function user.s12_1():void; X_24:void := querylog.define("explain copy into ttt from \\'/tmp/xyz\\';","user_1",12); -barrier X_35 := language.dataflow(); +barrier X_54 := language.dataflow(); X_1 := sql.mvc(); (X_11:bat[:int],X_12:bat[:int],X_13:bat[:int]) := sql.copy_from(nil,"|","\\n",nil:str,"null","/tmp/xyz",-1,0,0,0); -exit X_35; +exit X_54; X_14 := sql.append(X_1,"sys","ttt","a",X_11); X_18 := sql.append(X_14,"sys","ttt","b",X_12); X_22 := aggr.count(X_13); diff --git a/monetdb5/extras/mal_optimizer_template/opt_sql_append.c b/monetdb5/extras/mal_optimizer_template/opt_sql_append.c --- a/monetdb5/extras/mal_optimizer_template/opt_sql_append.c +++ b/monetdb5/extras/mal_optimizer_template/opt_sql_append.c @@ -288,7 +288,7 @@ str OPTsql_append(Client cntxt, MalBlkPt } if( mb->errors ){ /* when we have errors, we still want to see them */ - addtoMalBlkHistory(mb,"sql_append"); + addtoMalBlkHistory(mb); return MAL_SUCCEED; } actions= OPTsql_appendImplementation(cntxt, mb,stk,p); @@ -300,6 +300,6 @@ str OPTsql_append(Client cntxt, MalBlkPt DEBUGoptimizers mnstr_printf(cntxt->fdout,"#opt_reduce: " LLFMT " ms\n",t); QOTupdateStatistics("sql_append",actions,t); - addtoMalBlkHistory(mb,"sql_append"); + addtoMalBlkHistory(mb); return msg; } diff --git a/monetdb5/mal/mal.h b/monetdb5/mal/mal.h --- a/monetdb5/mal/mal.h +++ b/monetdb5/mal/mal.h @@ -210,7 +210,6 @@ typedef struct MALBLK { struct MALBLK *history; /* of optimizer actions */ short keephistory; /* do we need the history at all */ short dotfile; /* send dot file to stethoscope? */ - str marker; /* history points are marked for backtracking */ int maxarg; /* keep track on the maximal arguments used */ ptr replica; /* for the replicator tests */ sht recycle; /* execution subject to recycler control */ diff --git a/monetdb5/mal/mal_debugger.c b/monetdb5/mal/mal_debugger.c --- a/monetdb5/mal/mal_debugger.c +++ b/monetdb5/mal/mal_debugger.c @@ -383,7 +383,7 @@ mdbCommand(Client cntxt, MalBlkPtr mb, M size_t oldpromptlength = cntxt->promptlength; MalStkPtr stk = stkbase; int first = pc; - int stepsize = 10; + int stepsize = 1000; char oldcmd[1024] = { 0 }; do { int r; 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 @@ -118,7 +118,6 @@ newMalBlk(int maxvars, int maxstmts) mb->history = NULL; mb->keephistory = 0; mb->dotfile = 0; - mb->marker = 0; mb->maxarg = MAXARG; /* the minimum for each instruction */ mb->typefixed = 0; mb->flowfixed = 0; @@ -233,7 +232,6 @@ copyMalBlk(MalBlkPtr old) mb->history = NULL; mb->keephistory = old->keephistory; mb->dotfile = old->dotfile; - mb->marker = 0; mb->var = (VarPtr *) GDKzalloc(sizeof(VarPtr) * old->vsize); mb->activeClients = 1; @@ -290,7 +288,7 @@ copyMalBlk(MalBlkPtr old) } void -addtoMalBlkHistory(MalBlkPtr mb, str marker) +addtoMalBlkHistory(MalBlkPtr mb) { MalBlkPtr cpy, h; if (mb->keephistory) { @@ -298,7 +296,6 @@ addtoMalBlkHistory(MalBlkPtr mb, str mar if (cpy == NULL) return; /* ignore history */ cpy->history = NULL; - mb->marker = GDKstrdup(marker); if (mb->history == NULL) mb->history = cpy; else { @@ -318,34 +315,6 @@ getMalBlkHistory(MalBlkPtr mb, int idx) return h ? h : mb; } -/* You can retrieve the history by its marker as well. */ -MalBlkPtr -getMalBlkMarker(MalBlkPtr mb, str marker) -{ - MalBlkPtr h = mb; - while (h && h->marker && strcmp(h->marker, marker)) - h = h->history; - return h ? h : mb; -} - -/* You can roll back the history to a specific marker. A NULL is - * returned when the marker can not be found. */ -MalBlkPtr -gotoMalBlkMarker(MalBlkPtr mb, str marker) -{ - MalBlkPtr h = mb, g; - while (h && h->marker && strcmp(h->marker, marker)) - h = h->history; - if (h == NULL) - return NULL; /* marker not found */ - while (h && h->marker && strcmp(h->marker, marker)) { - g = h; - h = h->history; - g->history = 0; - freeMalBlk(g); - } - return h; -} /* The MalBlk structures potentially consume a lot a of space, because * it is not possible to precisely estimate the default sizes of the @@ -960,7 +929,7 @@ cloneVariable(MalBlkPtr tm, MalBlkPtr mb return res; } -/* generate a new variable name based on a patter with 1 %d argument*/ +/* generate a new variable name based on a pattern with 1 %d argument*/ void renameVariable(MalBlkPtr mb, int id, str pattern, int newid) { 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 @@ -131,10 +131,8 @@ mal_export void resizeMalBlk(MalBlkPtr m mal_export void prepareMalBlk(MalBlkPtr mb, str s); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list