[ 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)