Changeset: 3cc8d340851a for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=3cc8d340851a Modified Files: Branch: default Log Message:
Merge with Aug2011 branch. diffs (truncated from 326 to 300 lines): diff --git a/java/src/nl/cwi/monetdb/jdbc/MonetResultSet.java b/java/src/nl/cwi/monetdb/jdbc/MonetResultSet.java --- a/java/src/nl/cwi/monetdb/jdbc/MonetResultSet.java +++ b/java/src/nl/cwi/monetdb/jdbc/MonetResultSet.java @@ -1674,10 +1674,18 @@ } if (pdate == null) { // parsing failed - addWarning("parsing failed," + - " found: '" + monetDate.charAt(ppos.getErrorIndex()) + "'" + - " in: \"" + monetDate + "\"" + - " at pos: " + ppos.getErrorIndex()); + int epos = ppos.getErrorIndex(); + if (epos == -1) { + addWarning("parsing '" + monetDate + "' failed"); + } else if (epos < monetDate.length()) { + addWarning("parsing failed," + + " found: '" + monetDate.charAt(epos) + "'" + + " in: \"" + monetDate + "\"" + + " at pos: " + ppos.getErrorIndex()); + } else { + addWarning("parsing failed, expected more data after '" + + monetDate + "'"); + } // default value cal.clear(); nanos = 0; diff --git a/java/tests/Test_Rtimedate.java b/java/tests/Test_Rtimedate.java --- a/java/tests/Test_Rtimedate.java +++ b/java/tests/Test_Rtimedate.java @@ -45,48 +45,93 @@ rs = stmt.executeQuery("SELECT * FROM table_Test_Rtimedate"); rs.next(); + readWarnings(rs.getWarnings()); + rs.clearWarnings(); // the next three should all go well System.out.println("1. " + rs.getString("id") + ", " + rs.getString("ts") + ", " + rs.getTimestamp("ts")); + readWarnings(rs.getWarnings()); + rs.clearWarnings(); System.out.println("2. " + rs.getString("id") + ", " + rs.getString("ts") + ", " + rs.getTime("ts")); + readWarnings(rs.getWarnings()); + rs.clearWarnings(); System.out.println("3. " + rs.getString("id") + ", " + rs.getString("ts") + ", " + rs.getDate("ts")); + readWarnings(rs.getWarnings()); + rs.clearWarnings(); rs.next(); + readWarnings(rs.getWarnings()); + rs.clearWarnings(); // the next two should go fine System.out.println("4. " + rs.getString("id") + ", " + rs.getString("t") + ", " + rs.getTimestamp("t")); + readWarnings(rs.getWarnings()); + rs.clearWarnings(); System.out.println("5. " + rs.getString("id") + ", " + rs.getString("t") + ", " + rs.getTime("t")); + readWarnings(rs.getWarnings()); + rs.clearWarnings(); // this one should return 0 System.out.println("6. " + rs.getString("id") + ", " + rs.getString("t") + ", " + rs.getDate("t")); + readWarnings(rs.getWarnings()); + rs.clearWarnings(); rs.next(); + readWarnings(rs.getWarnings()); + rs.clearWarnings(); // the next one passes System.out.println("7. " + rs.getString("id") + ", " + rs.getString("d") + ", " + rs.getTimestamp("d")); + readWarnings(rs.getWarnings()); + rs.clearWarnings(); // this one should return 0 System.out.println("8. " + rs.getString("id") + ", " + rs.getString("d") + ", " + rs.getTime("d")); + readWarnings(rs.getWarnings()); + rs.clearWarnings(); // and this one should pass again System.out.println("9. " + rs.getString("id") + ", " + rs.getString("d") + ", " + rs.getDate("d")); + readWarnings(rs.getWarnings()); + rs.clearWarnings(); // in the tests below a bare string is parsed // everything will fail except the ones commented on rs.next(); + readWarnings(rs.getWarnings()); + rs.clearWarnings(); // timestamp -> timestamp should go System.out.println("1. " + rs.getString("id") + ", " + rs.getString("vc") + ", " + rs.getTimestamp("vc")); + readWarnings(rs.getWarnings()); + rs.clearWarnings(); System.out.println("2. " + rs.getString("id") + ", " + rs.getString("vc") + ", " + rs.getTime("vc")); + readWarnings(rs.getWarnings()); + rs.clearWarnings(); // timestamp -> date goes because the begin is the same System.out.println("3. " + rs.getString("id") + ", " + rs.getString("vc") + ", " + rs.getDate("vc")); + readWarnings(rs.getWarnings()); + rs.clearWarnings(); rs.next(); + readWarnings(rs.getWarnings()); + rs.clearWarnings(); System.out.println("4. " + rs.getString("id") + ", " + rs.getString("vc") + ", " + rs.getTimestamp("vc")); + readWarnings(rs.getWarnings()); + rs.clearWarnings(); // time -> time should fit System.out.println("5. " + rs.getString("id") + ", " + rs.getString("vc") + ", " + rs.getTime("vc")); + readWarnings(rs.getWarnings()); + rs.clearWarnings(); System.out.println("6. " + rs.getString("id") + ", " + rs.getString("vc") + ", " + rs.getDate("vc")); + readWarnings(rs.getWarnings()); + rs.clearWarnings(); rs.next(); + readWarnings(rs.getWarnings()); + rs.clearWarnings(); System.out.println("7. " + rs.getString("id") + ", " + rs.getString("vc") + ", " + rs.getTimestamp("vc")); + readWarnings(rs.getWarnings()); + rs.clearWarnings(); System.out.println("8. " + rs.getString("id") + ", " + rs.getString("vc") + ", " + rs.getTime("vc")); + readWarnings(rs.getWarnings()); + rs.clearWarnings(); // date -> date should be fine System.out.println("9. " + rs.getString("id") + ", " + rs.getString("vc") + ", " + rs.getDate("vc")); + readWarnings(rs.getWarnings()); + rs.clearWarnings(); - SQLWarning w = con.getWarnings(); - while (w != null) { - System.out.println("warning: " + w.toString()); - w = w.getNextWarning(); - } + readWarnings(stmt.getWarnings()); + readWarnings(con.getWarnings()); } catch (SQLException e) { System.out.println("failed :( "+ e.getMessage()); System.out.println("ABORTING TEST!!!"); @@ -95,4 +140,11 @@ con.rollback(); con.close(); } + + private static void readWarnings(SQLWarning w) { + while (w != null) { + System.out.println("warning: " + w.toString()); + w = w.getNextWarning(); + } + } } diff --git a/sql/jdbc/tests/Tests/Test_Rtimedate.stable.out b/sql/jdbc/tests/Tests/Test_Rtimedate.stable.out --- a/sql/jdbc/tests/Tests/Test_Rtimedate.stable.out +++ b/sql/jdbc/tests/Tests/Test_Rtimedate.stable.out @@ -36,12 +36,17 @@ 9. 3, 2004-04-24, 2004-04-24 1. 4, 2004-04-24 11:43:53.000000, 2004-04-24 11:43:53.0 2. 4, 2004-04-24 11:43:53.000000, 00:00:00 +warning: java.sql.SQLWarning: parsing failed, found: '-' in: "2004-04-24 11:43:53.000000" at pos: 4 3. 4, 2004-04-24 11:43:53.000000, 2004-04-24 4. 5, 11:43:53, 1970-01-01 00:00:00.0 +warning: java.sql.SQLWarning: parsing failed, found: ':' in: "11:43:53" at pos: 2 5. 5, 11:43:53, 11:43:53 6. 5, 11:43:53, 1970-01-01 -7. 6, 2004-04-24, 2004-04-24 00:00:00.0 +warning: java.sql.SQLWarning: parsing failed, found: ':' in: "11:43:53" at pos: 2 +7. 6, 2004-04-24, 1970-01-01 00:00:00.0 +warning: java.sql.SQLWarning: parsing failed, expected more data after '2004-04-24' 8. 6, 2004-04-24, 00:00:00 +warning: java.sql.SQLWarning: parsing failed, found: '-' in: "2004-04-24" at pos: 4 9. 6, 2004-04-24, 2004-04-24 # 09:05:23 > 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 @@ -1228,10 +1228,11 @@ return NULL; return exp_or(sql->sa, l, r); } else if (e->flag == cmp_in || e->flag == cmp_notin) { - sql_exp *l = _exp_push_down(sql, e->l, f, t); - list *r = exps_push_down(sql, e->r, f, t); - - if (!l || !r) + list *r; + + l = _exp_push_down(sql, e->l, f, t); + r = exps_push_down(sql, e->r, f, t); + if (!l || !r) return NULL; return exp_in(sql->sa, l, r, e->flag); } else { @@ -3507,9 +3508,9 @@ } else if (e->flag == cmp_in || e->flag == cmp_notin) { list *r = e->r; node *n; - + exp_mark_used(subrel, e->l); - for (n = r->h; n != NULL; n = n->next) + for (n = r->h; n != NULL; n = n->next) exp_mark_used(subrel, n->data); } else { exp_mark_used(subrel, e->l); diff --git a/sql/server/sql_semantic.c b/sql/server/sql_semantic.c --- a/sql/server/sql_semantic.c +++ b/sql/server/sql_semantic.c @@ -653,26 +653,8 @@ rdigits = digits2bits(rdigits); } } - if (idigits && rdigits) { - if (idigits > rdigits) { - digits = idigits; - if (i->scale < scale) - digits += scale - i->scale; - } else if (idigits < rdigits) { - digits = rdigits; - if (r->scale < scale) - digits += scale - r->scale; - } else { - /* same number of digits */ - digits = idigits; - if (i->scale < r->scale) - digits += r->scale - i->scale; - else - digits += i->scale - r->scale; - } - } - - sql_find_subtype(super, tpe, digits, scale); + digits = sql_max(idigits - i->scale, rdigits - r->scale); + sql_find_subtype(super, tpe, digits+scale, scale); return super; } diff --git a/sql/test/BugTracker-2011/Tests/All b/sql/test/BugTracker-2011/Tests/All --- a/sql/test/BugTracker-2011/Tests/All +++ b/sql/test/BugTracker-2011/Tests/All @@ -16,3 +16,4 @@ crash_in_push_exp_down.Bug-2811 subquery_in_from_clause.Bug-2812 mkey-bulk_rotate_xor_hash.Bug-2825 +supertype.Bug-2830 diff --git a/sql/test/BugTracker-2011/Tests/supertype.Bug-2830.sql b/sql/test/BugTracker-2011/Tests/supertype.Bug-2830.sql new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2011/Tests/supertype.Bug-2830.sql @@ -0,0 +1,1 @@ +select 30. - 0.025; diff --git a/sql/test/BugTracker-2011/Tests/supertype.Bug-2830.stable.err b/sql/test/BugTracker-2011/Tests/supertype.Bug-2830.stable.err new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2011/Tests/supertype.Bug-2830.stable.err @@ -0,0 +1,39 @@ +stderr of test 'supertype.Bug-2830` in directory 'test/BugTracker-2011` itself: + + +# 22:35:24 > +# 22:35:24 > mserver5 --debug=10 --set gdk_nr_threads=0 --set "gdk_dbfarm=/ufs/niels/scratch/rc-clean/Linux-x86_64/var/MonetDB" --set mapi_open=true --set mapi_port=38266 --set monet_prompt= --trace --forcemito --set mal_listing=2 "--dbname=mTests_test_BugTracker-2011" --set mal_listing=0 ; echo ; echo Over.. +# 22:35:24 > + +# builtin opt gdk_dbname = demo +# builtin opt gdk_dbfarm = /ufs/niels/scratch/rc-clean/Linux-x86_64/var/monetdb5/dbfarm +# builtin opt gdk_debug = 0 +# builtin opt gdk_alloc_map = no +# builtin opt gdk_vmtrim = yes +# 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 default_pipe = inline,remap,evaluate,costModel,coercions,emptySet,aliases,mitosis,mergetable,deadcode,commonTerms,joinPath,reorder,deadcode,reduce,dataflow,history,multiplex,garbageCollector +# builtin opt minimal_pipe = inline,remap,deadcode,multiplex,garbageCollector +# builtin opt sql_optimizer = default_pipe +# builtin opt sql_debug = 0 +# cmdline opt gdk_nr_threads = 0 +# cmdline opt gdk_dbfarm = /ufs/niels/scratch/rc-clean/Linux-x86_64/var/MonetDB +# cmdline opt mapi_open = true +# cmdline opt mapi_port = 38266 +# cmdline opt monet_prompt = +# cmdline opt mal_listing = 2 +# cmdline opt gdk_dbname = mTests_test_BugTracker-2011 +# cmdline opt mal_listing = 0 + +# 22:35:24 > +# 22:35:24 > mclient -lsql -ftest -i -e --host=alf --port=38266 +# 22:35:24 > + + +# 22:35:24 > +# 22:35:24 > Done. +# 22:35:24 > + diff --git a/sql/test/BugTracker-2011/Tests/supertype.Bug-2830.stable.out b/sql/test/BugTracker-2011/Tests/supertype.Bug-2830.stable.out new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2011/Tests/supertype.Bug-2830.stable.out @@ -0,0 +1,38 @@ +stdout of test 'supertype.Bug-2830` in directory 'test/BugTracker-2011` itself: + + +# 22:35:24 > +# 22:35:24 > mserver5 --debug=10 --set gdk_nr_threads=0 --set "gdk_dbfarm=/ufs/niels/scratch/rc-clean/Linux-x86_64/var/MonetDB" --set mapi_open=true --set mapi_port=38266 --set monet_prompt= --trace --forcemito --set mal_listing=2 "--dbname=mTests_test_BugTracker-2011" --set mal_listing=0 ; echo ; echo Over.. +# 22:35:24 > + +# MonetDB 5 server v11.3.4 +# This is an unreleased version +# Serving database 'mTests_test_BugTracker-2011', using 4 threads +# Compiled for x86_64-unknown-linux-gnu/64bit with 64bit OIDs dynamically linked +# Found 7.752 GiB available main-memory. _______________________________________________ Checkin-list mailing list Checkin-list@monetdb.org http://mail.monetdb.org/mailman/listinfo/checkin-list