db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Kristian Waagan (Updated) (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (DERBY-5489) getBinary() returns incorrect data after getObject() call on BLOB column
Date Thu, 19 Apr 2012 10:50:43 GMT

     [ https://issues.apache.org/jira/browse/DERBY-5489?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel

Kristian Waagan updated DERBY-5489:

    Attachment: derby-5489-2a-fixes.diff

Attaching patch 2a, which implements the checks to make getBytes, getString, and getObject
throw an exception when invoked on a LOB column after another getter has already has been
invoked, and harmoinzes the behavior for the embedded and the client driver.

As already noted, getBytes and getString currently behave differently than the rest. It is
allowed to call those two getters repeatedly because they materialize the value.
Examples of behavior with the patch:
(I'm using getObject, but it could be any of the other valid getters for LOBs)
 a) OK: getBytes - getBytes
 b) FAILS: getObject - getBytes
 c) OK: getBytes - getObject
 d) FAILS: getBytes - getObject - getBytes
 e) FAILS: getBlob - getBinaryStream

The changes to lang.UpdatableResultSetTest adjust the access pattern to be compatible with
the new rules/restrictions.

Assuming everything else is ok, it must be decided if we want to keep the special behavior
for getBytes and getString (i.e. either remove the TODOs, or modify the implementation).

I've successfully run suites.All with the patches: 
15488 tests executed
  0 errors
  0 failures

Patch ready for review.
> getBinary() returns incorrect data after getObject() call on BLOB column
> ------------------------------------------------------------------------
>                 Key: DERBY-5489
>                 URL: https://issues.apache.org/jira/browse/DERBY-5489
>             Project: Derby
>          Issue Type: Bug
>          Components: JDBC
>    Affects Versions:,
>            Reporter: Pawel Fronczak
>              Labels: derby_triage10_9
>         Attachments: SelectBlobBug.java, derby-5489-1a-test.diff, derby-5489-1b-test.diff,
derby-5489-2a-fixes.diff, repro.diff
> When ResultSet.getObject(int) is called on a BLOB column, the correct EmbedBlob object
is returned. But if afterwards the ResultSet.getBytes(int) is called on the same row, the
returned array contains invalid data - it is offset by 3 bytes and its size is incorrect.
> The problem only occurs when the stored BLOB is large enough to be internally represented
by stream and not by array of bytes (at least ~32KiB).
> It seems that the getObject method shifts the stream position and therefore the getBytes
method starts to read the data after the third byte, thus incorrectly calculating its length.

This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira


View raw message