Changeset: 73d13c2176e7 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=73d13c2176e7
Modified Files:
Branch: default
Log Message:
Merge with default
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
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list