Re: ResultSet.getObject(..., LocalTime.class) not working withPostgres timetz type - Mailing list pgsql-jdbc

From Dave Cramer
Subject Re: ResultSet.getObject(..., LocalTime.class) not working withPostgres timetz type
Date
Msg-id CADK3HH+Z6M+sf_U6mfmuL+o1ZDhJKvaMMnBej2WC4HqSk5yQtw@mail.gmail.com
Whole thread Raw
In response to Re: ResultSet.getObject(..., LocalTime.class) not working withPostgres timetz type  (Mark Rotteveel <mark@lawinegevaar.nl>)
Responses Re: ResultSet.getObject(..., LocalTime.class) not working withPostgres timetz type  (Mark Rotteveel <mark@lawinegevaar.nl>)
Re: ResultSet.getObject(..., LocalTime.class) not working withPostgres timetz type  (Philippe Marschall <philippe.marschall@netcetera.com>)
Re: ResultSet.getObject(..., LocalTime.class) not working withPostgres timetz type  (Philippe Marschall <pm@netcetera.ch>)
List pgsql-jdbc


On Wed, 10 Apr 2019 at 08:43, Mark Rotteveel <mark@lawinegevaar.nl> wrote:
On 9-4-2019 13:20, pm@netcetera.ch wrote:
> On 06.04.19 19:40, Thomas Kellerer wrote:
>> I think the driver should then support getObject(1, OffsetTime.class),
>> shouldn't it?
>
> It was originally not implemented out of laziness, somewhat justified by
> the fact that the documentation recommends against using the type saying
> it's only present because of legacy and standards compliance reasons.
>  From a functional point of view there is nothing wrong with
> implementing it. Again, in practice it's hard to find a use for the type.
>
> Yes the type should be Types.TIME_WITH_TIMEZONE. However in #695 [2] it
> was decided that following the JDBC specification would break frameworks
> and it would be better to instead go against the JDBC specification and
> instead having each framework implement driver specific hacks.

This decision will still mean that frameworks will have to implement
driver-specific hacks though: That is those tools or frameworks that do
follow the guidance of the JDBC 4.2 or higher specification and expect
to be able to obtain the LocalXXX types here.

If you declare that a column is Types.TIME(STAMP), then you should also
be able to return java.time.LocalTime, java.time.LocalDateTime (and of
course java.sql.Time/java.sql.Timestamp).

Declaring Types.TIME(STAMP), but not supporting java.time.LocalXXX is in
my opinion a worse 'violation' of the JDBC specification compared to
declaring Types.TIME(STAMP) instead of Types.TIME(STAMP)_WITH_TIMEZONE.
By saying you are Types.TIMESTAMP, you implicitly promise to deliver the
type conversions defined in Appendix B of JDBC 4.3 (B.4/B.5). Supporting
java.time.OffsetDateTime / java.time.OffsetTime on Types.TIME(STAMP) is
then just a non-standard extension.

That of course leaves the problem of ambiguity what local means in the
context of a type with time zone information.

Mark
--
Mark Rotteveel

The whole time, timestamp, timezone thing was not well thought out and is the bane of all driver implementers existence...


 

pgsql-jdbc by date:

Previous
From: Philippe Ebersohl
Date:
Subject: Re: A method to asynchronously LISTEN ?
Next
From: Mark Rotteveel
Date:
Subject: Re: ResultSet.getObject(..., LocalTime.class) not working withPostgres timetz type