You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-dev@db.apache.org by "Mamta A. Satoor (JIRA)" <ji...@apache.org> on 2013/06/01 00:14:21 UTC

[jira] [Commented] (DERBY-6237) PreparedStatement.execute() fails starting 10.2 when multiple rows are updated and PreparedStatement.setCharacterStream(int, Reader, int) is used

    [ https://issues.apache.org/jira/browse/DERBY-6237?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13671853#comment-13671853 ] 

Mamta A. Satoor commented on DERBY-6237:
----------------------------------------

Committed the test into 10.2(revision 1488411) with following commit comments
********************************
        DERBY-6237(PreparedStatement.execute() fails starting 10.2 when multiple rows are updated and PreparedStatement.setCharacterStream(int, Reader, int) is used)

        Adding test for PreparedStatement.setCharacterStream on CLOB column and using that prepared statement to update more than one row of the table

        In 10.1, setCharacterStream to update CLOB and varchar columns work even when update is going to update more than one row but in 10.2, PreparedStatement.setCharacterStream on CLOB column fails when running in embedded mode. Client server case works fine on 10.2. I have commented out the test for embedded in 10.2 Once this jira is fixed in 10.2, we should uncomment these tests.
********************************

                
> PreparedStatement.execute() fails starting 10.2 when multiple rows are updated and PreparedStatement.setCharacterStream(int, Reader, int) is used
> -------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: DERBY-6237
>                 URL: https://issues.apache.org/jira/browse/DERBY-6237
>             Project: Derby
>          Issue Type: Bug
>          Components: JDBC
>    Affects Versions: 10.2.2.1, 10.3.3.1, 10.4.2.1
>            Reporter: Mamta A. Satoor
>
> PreparedStatement.execute() worked on 10.1(both embedded and network server) when multiple rows are updated and PreparedStatement.setCharacterStream(int, Reader, int) is used. In 10.2, the embedded case stopped working for multi-row update using a prepared statement which used PreparedStatement.setCharacterStream(int, Reader, int) with exception
> java.io.EOFException: Stream has already been read and end-of-file reached and cannot be re-used.
> 	at org.apache.derby.iapi.types.ReaderToUTF8Stream.read(ReaderToUTF8Stream.java:185)
> 	at org.apache.derby.impl.store.raw.data.MemByteHolder.write(MemByteHolder.java:146)
> 	at org.apache.derby.impl.store.raw.data.RememberBytesInputStream.fillBuf(RememberBytesInputStream.java:135)
> 	at org.apache.derby.impl.store.raw.data.StoredPage.logColumn(StoredPage.java:6167)
> 	at org.apache.derby.impl.store.raw.data.StoredPage.logRow(StoredPage.java:3971)
> 	at org.apache.derby.impl.store.raw.data.UpdateOperation.writeOptionalDataToBuffer(UpdateOperation.java:255)
> 	at org.apache.derby.impl.store.raw.data.UpdateOperation.<init>(UpdateOperation.java:106)
> 	at org.apache.derby.impl.store.raw.data.LoggableActions.actionUpdate(LoggableActions.java:80)
> 	at org.apache.derby.impl.store.raw.data.StoredPage.doUpdateAtSlot(StoredPage.java:8549)
> 	at org.apache.derby.impl.store.raw.data.BasePage.updateAtSlot(BasePage.java:1178)
> 	at org.apache.derby.impl.store.access.conglomerate.GenericConglomerateController.replace(GenericConglomerateController.java:479)
> 	at org.apache.derby.impl.sql.execute.RowChangerImpl.updateRow(RowChangerImpl.java:523)
> 	at org.apache.derby.impl.sql.execute.UpdateResultSet.collectAffectedRows(UpdateResultSet.java:579)
> 	at org.apache.derby.impl.sql.execute.UpdateResultSet.open(UpdateResultSet.java:273)
> 	at org.apache.derby.impl.sql.GenericPreparedStatement.execute(GenericPreparedStatement.java:358)
> 	at org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(EmbedStatement.java:1182)
> 	at org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeStatement(EmbedPreparedStatement.java:1635)
> 	at org.apache.derby.impl.jdbc.EmbedPreparedStatement.execute(EmbedPreparedStatement.java:1304)
> 	at org.apache.derbyTesting.functionTests.tests.lang.MamtaJDBC.main(MamtaJDBC.java:91)
> In 10.3 and 10.4, both the embedded and network server cases are broken for multi-row update using a prepared statement which used PreparedStatement.setCharacterStream(int, Reader, int).I still need to test 10.5 and higher. I will also add junit test cases for each of these releases on incremental basis.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira