[
https://issues.apache.org/jira/browse/DERBY-7143?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17563246#comment-17563246
]
Richard N. Hillegas commented on DERBY-7143:
--------------------------------------------
The attached program DERBY_7143.java demonstrates this problem. The class
org.apache.derby.impl.jdbc.EmbedBlob behaves correctly, but
org.apache.derby.iapi.types.HarmonySerialBlob does not. Here is the output of
the program:
{noformat}
Blob is a org.apache.derby.impl.jdbc.EmbedBlob
It has 5 bytes.
byte 3 = 2
byte 4 = 3
byte 5 = 4
Blob is a org.apache.derby.iapi.types.HarmonySerialBlob
It has 5 bytes.
Exception in thread "main" java.sql.SQLException: Sum of position('3') and
length('3') is greater than the size of the LOB plus one.
at
org.apache.derby.iapi.types.HarmonySerialBlob.makeSQLException(Unknown Source)
at
org.apache.derby.iapi.types.HarmonySerialBlob.getBinaryStream(Unknown Source)
at DERBY_7143.testBlob(DERBY_7143.java:46)
at DERBY_7143.main(DERBY_7143.java:37)
{noformat}
> HarmonySerialBlob.getBinaryStream(long, long) makes it impossible to retrieve
> the last character of the Blob.
> -------------------------------------------------------------------------------------------------------------
>
> Key: DERBY-7143
> URL: https://issues.apache.org/jira/browse/DERBY-7143
> Project: Derby
> Issue Type: Bug
> Components: Network Client, SQL
> Affects Versions: 10.15.2.0
> Reporter: Ben
> Priority: Major
> Attachments: DERBY_7143.java
>
>
> As far as I understand it, the method HarmonySerialBlob.getBinaryStream(long,
> long) takes two arguments <pos> and <length> and is supposed to produce a
> ByteArrayInputStream() with a substring of the Blob's Contents that starts at
> <pos> and has length <length>.
> Unfortunately, the error handling in this method makes it impossible to
> retrieve a suffix of the Blobs contents as the last character is always
> missing.
> In detail:
> When calling this method with <pos>=0, then it raises the SQLException XJ087.
> Hence, <pos> must always be > 0.
> When calling this method with <pos>=1 and <length>=blob.length(), then it
> also raises the SQLException, because pos+length > blob.length(). Hence,
> <length> can at most be set to blob.length()-1.
> When calling this method with <pos>=1 and <length>=blob.length()-1, then it
> gives a ByteArrayInputStream which is missing the last character from the
> blob.
> The fact that the last character is missing makes sense, when <length> is set
> to blob.length()-1.
> But it does not make sense to prohibit setting <length>=blob.length() when
> this is the only way to include the last character in the
> ByteArrayInputStream.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)