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

Reply via email to