|
Home > Archive > PostgreSQL JDBC > September 2005 > TimestampUtils.loadCalendar failes for interval type
You are viewing an archived Text-only version of the thread.
To view this thread in it's original format and/or if you want to reply to
this thread please [click here]
| Author |
TimestampUtils.loadCalendar failes for interval type
|
|
| Gil G 2005-09-11, 11:23 am |
| Hi,
I've executed following query:
select t.date-t.date2 from table as t
The query should return a single row of type interval. Indeed,
resultSet.getObject(1) returns a PGInterval instance with the correct value
(the returned interval is 2 days and several hours).
When I call resultSet.getString(1) the string representation of interval is
"2 days 14:08:55.8246".
The problem arises when I call resultSet.getTimestamp(1).
As I saw in org.postgresql.jdbc2.TimestampUtils. loadCalendar(Gregori
anCalendar
cal, String s, String type) it fails to parse correctly
the string, which is returned by resultSet.getString(1) call. since it
expects only the "14:08:55.8246" part and does not expect the "2 days " part.
Please note that in case the interval between two dates is smaller than 24
hours everything works correctly.
This is important since, generic products such as Hibernate that work over
different jdbc drivers, refer to the interval data type as a
java.sql.Timestamp object and call getTimestamp(int) method on the resultset
to get the instance.
Thanks,
Gil
| |
| Dave Cramer 2005-09-12, 7:23 am |
| I would suggest you send a bug note to Hibernate. An inteval is not a
timestamp, nor can it be construed as such.
Dave
On 8-Sep-05, at 7:26 AM, Gil G wrote:
> Hi,
>
> I've executed following query:
> select t.date-t.date2 from table as t
>
> The query should return a single row of type interval. Indeed,
> resultSet.getObject(1) returns a PGInterval instance with the
> correct value (the returned interval is 2 days and several hours).
>
> When I call resultSet.getString(1) the string representation of
> interval is "2 days 14:08:55.8246".
> The problem arises when I call resultSet.getTimestamp(1).
> As I saw in org.postgresql.jdbc2.TimestampUtils.loadCalendar
> (GregorianCalendar cal, String s, String type) it fails to parse
> correctly
> the string, which is returned by resultSet.getString(1) call. since
> it expects only the "14:08:55.8246" part and does not expect the "2
> days " part. Please note that in case the interval between two
> dates is smaller than 24 hours everything works correctly.
>
> This is important since, generic products such as Hibernate that
> work over different jdbc drivers, refer to the interval data type
> as a java.sql.Timestamp object and call getTimestamp(int) method
> on the resultset to get the instance.
>
> Thanks,
> Gil
| |
| Oliver Jowett 2005-09-12, 7:23 am |
| Gil G wrote:
> This is important since, generic products such as Hibernate that work
> over different jdbc drivers, refer to the interval data type as a
> java.sql.Timestamp object and call getTimestamp(int) method on the
> resultset to get the instance.
AFAIK there's no standard mapping for 'interval' in JDBC so I don't
think you should be too suprised that trying to represent it as a
Timestamp fails.
However your email implies that there are other JDBC drivers that do
represent an interval as a Timestamp. Can you provide some examples of
drivers that do this, and details of how code such as Hibernate is
expecting the interval to be represented? Maybe we can do an appropriate
conversion as a nonstandard extension.
-O
---------------------------(end of broadcast)---------------------------
TIP 9: In versions below 8.0, the planner will ignore your desire to
choose an index scan if your joining column's datatypes do not
match
|
|
|
|
|