Mercurial > hg > monetdb-java
changeset 145:b18cfb312330
Improved code to fix failing tests in sql/jdbc/tests/Tests
author | Martin van Dinther <martin.van.dinther@monetdbsolutions.com> |
---|---|
date | Thu, 03 Aug 2017 20:27:09 +0200 (2017-08-03) |
parents | d6abd1ffffbb |
children | 8b40a845240c |
files | src/main/java/nl/cwi/monetdb/jdbc/MonetResultSet.java |
diffstat | 1 files changed, 28 insertions(+), 22 deletions(-) [+] |
line wrap: on
line diff
--- 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