Hello,

Daniel John Debrunner (JIRA) wrote:
[ https://issues.apache.org/jira/browse/DERBY-2386?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12479347 ]
Daniel John Debrunner commented on DERBY-2386:
----------------------------------------------

I think the change to BIGINT is more involved than the patch. Doesn't some 
compile time code have to change to indicate at bind time that this is 
returning a BIGINT?

I did not quite follow this comment. I looked at the code around this issue and tried a lot of different combinations but did not see any failures, I guess, I am still missing the point here. Dan, I would really appreciate if you could elaborate a little more on the comment ??

Thanks
Mayuresh
This test can never be true:

if (ldiff > Long.MAX_VALUE || ldiff < Long.MIN_VALUE)

since ldiff was already a long it cannot be outside its own range.

FYI - the old check & code that was there:

                if (ldiff > Integer.MAX_VALUE || ldiff < Integer.MIN_VALUE)
                        throw 
StandardException.newException(SQLState.LANG_OUTSIDE_RANGE_FOR_DATATYPE, 
"INTEGER");
        resultHolder.setValue( (int) ldiff);

is not required, it could be simply

          resultHolder.setValue(ldiff);


timestampdiff function fails when using SQL_TSI_FRAC_SECOND for datepart 
parameter, except for very small intervals
-------------------------------------------------------------------------------------------------------------------

                Key: DERBY-2386
                URL: https://issues.apache.org/jira/browse/DERBY-2386
            Project: Derby
         Issue Type: Bug
         Components: SQL
   Affects Versions: 10.2.2.0
        Environment: SUSE Linux Enterprise Desktop 10
           Reporter: Don Smith
        Assigned To: Mayuresh Nirhali
            Fix For: 10.2.2.1, 10.2.3.0, 10.3.0.0

        Attachments: derby2386.diff


Using the timestampdiff function produces and integer overflow except for very 
small intervals. Error message is:
[Error Code: -1, SQL State: 22003]  The resulting value is outside the range 
for the data type INTEGER.
I inserted the following row into my test table:
insert into datetest (ID, startdate, enddate) values ( 5, '2006-11-20 04:20:00.0', '2006-11-20 04:20:00.2');
This test row works:
select {fn timestampdiff(SQL_TSI_FRAC_SECOND, startdate, enddate)} as diff from 
datetest where id = 5
DIFF
200000000
The value also looks too large, which could be exacerbating the problem.


Reply via email to