[
https://issues.apache.org/jira/browse/DERBY-3856?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12876242#action_12876242
]
Knut Anders Hatlen commented on DERBY-3856:
-------------------------------------------
IJ uses getString() and not getTimestamp() to fetch the timestamps.
SQLTimestamp.getString() uses a cached string value, or generates a new string
representing the timestamp if a cached string value is not available. The
method that parses the timestamp for the TIMESTAMP function
(SQLTimestamp.parseTimestamp()) initializes the cached string value to the
input string.
The reason why the result is different on embedded and client, is that the
network server uses getTimestamp() instead of getString() to access the value
that it sends to the client, so a normalized timestamp string is seen on the
client.
The two statements that give different results on the embedded driver, differ
because the statement without a cast parses the timestamp at compile time and
the one with a cast parses the timestamp at execution time. The timestamp in
the first statement is represented by a java.sql.Timestamp in the execution
plan, so that the input string is not preserved and a normalized timestamp
string will be returned instead. The statement with the cast will do the
parsing at execution time and return the SQLTimestamp returned from the parse
method, which has cached the original input string.
> difference between Embedded vs DerbyNetClient in format of return from
> timestamp(cast(? as varchar(32)))
> --------------------------------------------------------------------------------------------------------
>
> Key: DERBY-3856
> URL: https://issues.apache.org/jira/browse/DERBY-3856
> Project: Derby
> Issue Type: Bug
> Components: SQL
> Affects Versions: 10.3.3.1, 10.4.2.0, 10.5.1.1
> Reporter: Myrna van Lunteren
>
> There is a slight difference in how Embedded vs. DerbyNetClient return a
> specific cast.
> This showed up during conversion of the test lang/datetime.sql which before
> was only run with Embedded...
> The following sql:
> prepare dateTimePS as 'values( date(cast(? as integer)),timestamp(cast(? as
> varchar(32))))';
> execute dateTimePS using 'values(cast(1 as integer),
> ''2003-03-05-17.05.43.111111'')';
> gives:
> 1 |2
> -------------------------------------
> Embedded: 1970-01-01|2003-03-05-17.05.43.111111
> DerbyNetClient: 1970-01-01|2003-03-05 17:05:43.111111
> (in Embedded there's a '-' between date and time part, with DerbyNetClient a
> space; with Embedded the separator between time elements is ., with
> DerbyNetClient :. Embedded reflects the data as passed in, with
> DerbyNetClient it seems to be the default timestamp format).
> I am not sure which is correct at this point, but I confirmed the behavior is
> like this in latest builds of trunk and 10.3 and 10.4 branches.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.