Changeset: 95b48b249f68 for monetdb-java
URL: https://dev.monetdb.org/hg/monetdb-java?cmd=changeset;node=95b48b249f68
Modified Files:
src/main/java/nl/cwi/monetdb/jdbc/MonetResultSet.java
Branch: default
Log Message:
First fix for bug 6468
Works now for all years between 1 and 999, but not yet correct for negative
years (-33 is shown as 0034).
ToDo: also make and include test program
diffs (77 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
@@ -2830,17 +2830,18 @@ public class MonetResultSet
}
lastReadWasNull = false;
if (cal == null) {
- 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
+ // try to convert string directly to a Date
object
+ // Note: the string must be in JDBC date escape
format: yyyy-[m]m-[d]d
+ try {
return java.sql.Date.valueOf(val);
+ } catch (IllegalArgumentException iae) {
+ // this happens if string doesn't match
the format, such as for years < 1000 (including negative years)
+ // in those cases just continue and use
slower getJavaDate(cal, columnIndex, Types.DATE) method
}
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
} catch (IndexOutOfBoundsException e) {
throw newSQLInvalidColumnIndexException(columnIndex);
}
@@ -2918,17 +2919,18 @@ public class MonetResultSet
}
lastReadWasNull = false;
if (cal == null) {
- if (!val.contains("-") && val.contains(":") &&
!val.contains("+")) {
- // try to convert string in JDBC time
escape format hh:mm:ss directly to a Time object
+ // try to convert string directly to a Time
object
+ // Note: the string must be in JDBC time escape
format: hh:mm:ss
+ try {
return Time.valueOf(val);
+ } catch (IllegalArgumentException iae) {
+ // this happens if string doesn't match
the format or hh >= 24 or mm >= 60 or ss >= 60
+ // in those cases just continue and use
slower getJavaDate(cal, columnIndex, Types.TIME) method
}
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
} catch (IndexOutOfBoundsException e) {
throw newSQLInvalidColumnIndexException(columnIndex);
}
@@ -3006,9 +3008,13 @@ public class MonetResultSet
}
lastReadWasNull = false;
if (cal == null) {
- 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
+ // try to convert the string directly to a
Timestamp object
+ // Note: the string must be in JDBC timestamp
escape format: yyyy-[m]m-[d]d hh:mm:ss[.f...]
+ try {
return Timestamp.valueOf(val);
+ } catch (IllegalArgumentException iae) {
+ // this happens if string doesn't match
the format, such as for years < 1000 (including negative years)
+ // in those cases just continue and use
slower getJavaDate(cal, columnIndex, Types.TIMESTAMP) method
}
cal = Calendar.getInstance();
}
@@ -3019,9 +3025,6 @@ public class MonetResultSet
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
} catch (IndexOutOfBoundsException e) {
throw newSQLInvalidColumnIndexException(columnIndex);
}
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list