I committed this patch, svn # 292830 Sunitha Kambhampati (JIRA) wrote:
> [ http://issues.apache.org/jira/browse/DERBY-562?page=all ] > > Sunitha Kambhampati updated DERBY-562: > -------------------------------------- > > Attachment: Derby562.diff.txt > > This patch > - changes the error message thrown when the stream is either less or greater > than the requested length to > 'Input stream did not have exact amount of data as the requested length.' > - enhances the characterStreams.out test, to print out the nested sql > exceptions to ensure that the proper error message is returned. > - updates to the master files. > > Ran derbyall with no failures on jdk1.4.2/windows. > > svn stat > M java\engine\org\apache\derby\impl\jdbc\RawToBinaryFormatStream.java > M java\engine\org\apache\derby\impl\jdbc\ReaderToUTF8Stream.java > M java\engine\org\apache\derby\iapi\reference\SQLState.java > M java\engine\org\apache\derby\loc\messages_en.properties > M > java\testing\org\apache\derbyTesting\functionTests\tests\jdbcapi\characterStreams.java > M > java\testing\org\apache\derbyTesting\functionTests\master\characterStreams.out > M > java\testing\org\apache\derbyTesting\functionTests\master\resultsetStream.out > > I verified that we are testing for these two error cases (ie stream has less > or more data than requested length), for the following supported stream > related api - setCharacterStream, setAsciiStream, setBinaryStream on > PreparedStatement. Derby does not support setUnicodeStream api that is > deprecated in jdbc 3.0. > > Can someone please review it and commit it. Thanks. > > I would like this patch to also be ported to 10.1. I'll submit the merge > command once this gets committed on trunk. > > >>Derby incorrectly throws Exception when streaming to BLOB field >>--------------------------------------------------------------- >> >> Key: DERBY-562 >> URL: http://issues.apache.org/jira/browse/DERBY-562 >> Project: Derby >> Type: Bug >> Versions: 10.1.1.0 >> Reporter: Holger Rehn >> Attachments: Derby562.diff.txt >> >>Derby incorrectly throws an Exception when streaming to a BLOB in case the >>used InputStream actually could provide more data than I want to write to the >>BLOB field. >> PreparedStatement statement = connection.prepareStatement( "insert into >> FOO(ID,DATA) values(?, ?)" ); >> statement.setLong( 1, someValue ); >> statement.setBinaryStream( 2, someInputStream, amountOfData ); // >> amountOfData < amount of data readable from someInputStream >> statement.executeUpdate(); >>executeUpdate() throws an SQLException with detail message: "Input stream >>held less data than requested length.: java.io.IOException" >>In my case this was first caused by writing an internal buffer (byte[]) to >>the data base through a ByteArrayInputStream while not limiting the >>ByteArrayInputStream to the useful data within the buffer but setting >>amountOfData to the number of useful bytes. So the 2 problems are: >>1. the error text is definitly incorrect since I provide more data than >>neccessary, not less >>2. in my opinion this shouldn't throw an exception at all (I checked against >>4 other DBMS, all of them worked as intended) > >