Changeset: b18cfb312330 for monetdb-java URL: https://dev.monetdb.org/hg/monetdb-java?cmd=changeset;node=b18cfb312330 Modified Files: src/main/java/nl/cwi/monetdb/jdbc/MonetResultSet.java Branch: default Log Message:
Improved code to fix failing tests in sql/jdbc/tests/Tests diffs (91 lines): diff --git a/src/main/java/nl/cwi/monetdb/jdbc/MonetResultSet.java b/src/main/java/nl/cwi/monetdb/jdbc/MonetResultSet.java --- a/src/main/java/nl/cwi/monetdb/jdbc/MonetResultSet.java +++ b/src/main/java/nl/cwi/monetdb/jdbc/MonetResultSet.java @@ -2793,12 +2793,14 @@ public class MonetResultSet extends Mone } lastReadWasNull = false; if (cal == null) { - // convert string in JDBC date escape format yyyy-[m]m-[d]d directly to a Date object - return java.sql.Date.valueOf(val); - } else { - int ret = getJavaDate(cal, columnIndex, Types.DATE); - return ret == -1 ? null : new java.sql.Date(cal.getTimeInMillis()); + if (val.contains("-") && !val.contains(":") && !val.contains("+")) { + // try to convert string in JDBC date escape format yyyy-[m]m-[d]d directly to a Date object + return java.sql.Date.valueOf(val); + } + cal = Calendar.getInstance(); } + int ret = getJavaDate(cal, columnIndex, Types.DATE); + return ret == -1 ? null : new java.sql.Date(cal.getTimeInMillis()); } catch (IllegalArgumentException iae) { throw new SQLDataException("Could not convert value to a Date. Expected JDBC date escape format yyyy-[m]m-[d]d. " + iae.getMessage(), "22007"); // 22007 = invalid datetime format @@ -2869,7 +2871,7 @@ public class MonetResultSet extends Mone * @param columnIndex the first column is 1, the second is 2, ... * @param cal the java.util.Calendar object to use in constructing the * timestamp - * @return the column value as a java.sql.Timestamp object; if the value is + * @return the column value as a java.sql.Time object; if the value is * SQL NULL, the value returned is null in the Java programming * language * @throws SQLException if a database access error occurs @@ -2886,12 +2888,14 @@ public class MonetResultSet extends Mone } lastReadWasNull = false; if (cal == null) { - // convert string in JDBC time escape format hh:mm:ss directly to a Time object - return Time.valueOf(val); - } else { - int ret = getJavaDate(cal, columnIndex, Types.TIME); - return ret == -1 ? null : new Time(cal.getTimeInMillis()); + if (!val.contains("-") && val.contains(":") && !val.contains("+")) { + // try to convert string in JDBC time escape format hh:mm:ss directly to a Time object + return Time.valueOf(val); + } + cal = Calendar.getInstance(); } + int ret = getJavaDate(cal, columnIndex, Types.TIME); + return ret == -1 ? null : new Time(cal.getTimeInMillis()); } catch (IllegalArgumentException iae) { throw new SQLDataException("Could not convert value to a Time. Expected JDBC time escape format hh:mm:ss. " + iae.getMessage(), "22007"); // 22007 = invalid datetime format @@ -2925,7 +2929,7 @@ public class MonetResultSet extends Mone * @param columnName the SQL name of the column * @param cal the java.util.Calendar object to use in constructing the * timestamp - * @return the column value as a java.sql.Timestamp object; if the value is + * @return the column value as a java.sql.Time object; if the value is * SQL NULL, the value returned is null in the Java programming * language * @throws SQLException if a database access error occurs @@ -2979,17 +2983,19 @@ public class MonetResultSet extends Mone } lastReadWasNull = false; if (cal == null) { - // convert string in JDBC timestamp escape format yyyy-[m]m-[d]d hh:mm:ss[.f...] directly to a Timestamp object - return Timestamp.valueOf(val); - } else { - int nanos = getJavaDate(cal, columnIndex, Types.TIMESTAMP); - if (nanos == -1) - return null; - - Timestamp ts = new Timestamp(cal.getTimeInMillis()); - ts.setNanos(nanos); - return ts; + if (val.contains("-") && val.contains(":") && !val.contains("+")) { + // try to convert string in JDBC timestamp escape format yyyy-[m]m-[d]d hh:mm:ss[.f...] directly to a Timestamp object + return Timestamp.valueOf(val); + } + cal = Calendar.getInstance(); } + int nanos = getJavaDate(cal, columnIndex, Types.TIMESTAMP); + if (nanos == -1) + return null; + + Timestamp ts = new Timestamp(cal.getTimeInMillis()); + ts.setNanos(nanos); + return ts; } catch (IllegalArgumentException iae) { throw new SQLDataException("Could not convert value to a Timestamp. Expected JDBC time escape format yyyy-[m]m-[d]d hh:mm:ss[.f...]. " + iae.getMessage(), "22007"); // 22007 = invalid datetime format _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list