Uploaded image for project: 'Derby'
  1. Derby
  2. DERBY-6237

PreparedStatement.execute() fails starting 10.2 when multiple rows are updated and PreparedStatement.setCharacterStream(int, Reader, int) is used

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Open
    • Major
    • Resolution: Unresolved
    • 10.2.2.1, 10.3.3.1, 10.4.2.1, 10.5.3.2, 10.6.2.4, 10.7.1.4, 10.8.3.3, 10.9.2.2, 10.10.2.0, 10.11.1.1
    • None
    • JDBC
    • Normal
    • Regression

    Description

      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.

      Attachments

        Issue Links

          Activity

            People

              Unassigned Unassigned
              mamtas Mamta A. Satoor
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated: