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
Checkin-list@monetdb.org
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to