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

Multi-row insert fails on table without generated keys with RETURN_GENERATED_KEYS

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Minor
    • Resolution: Fixed
    • 10.7.1.1, 10.8.2.2, 10.9.1.0, 10.10.1.1
    • 10.10.2.0, 10.11.1.1
    • JDBC
    • Normal
    • Repro attached, Workaround attached

    Description

      Exeuting an insert that results in multiple rows being inserted into a table without any generated keys defined fails if the JDBC statement is configured to return generated keys. Example stack trace:

      Caused by: ERROR XSCH4: Conglomerate could not be created.
      at org.apache.derby.iapi.error.StandardException.newException(StandardException.java:268)
      at org.apache.derby.impl.store.access.heap.Heap.create(Heap.java:296)
      at org.apache.derby.impl.store.access.heap.HeapConglomerateFactory.createConglomerate(HeapConglomerateFactory.java:206)
      at org.apache.derby.impl.store.access.RAMTransaction.createConglomerate(RAMTransaction.java:820)
      at org.apache.derby.impl.sql.execute.TemporaryRowHolderImpl.insert(TemporaryRowHolderImpl.java:302)
      at org.apache.derby.impl.sql.execute.InsertResultSet.normalInsertCore(InsertResultSet.java:1007)
      at org.apache.derby.impl.sql.execute.InsertResultSet.open(InsertResultSet.java:508)
      at org.apache.derby.impl.sql.GenericPreparedStatement.executeStmt(GenericPreparedStatement.java:443)
      at org.apache.derby.impl.sql.GenericPreparedStatement.execute(GenericPreparedStatement.java:324)
      at org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(EmbedStatement.java:1242)
      ... 30 more

      This happens only with multi-row inserts, and only with the embedded driver (the client driver uses IDENTITY_VAL_LOCAL).
      The problem is that Derby tries to create a temporary conglomerate with a zero-length row template. A guard against this scenario is probably missing.

      FYI, the transition threshold (from in-memory to on-disk) is currently five rows.
      I marked versions back to 10.7 as affected, but this bug probably goes back all the way.

      Attachments

        1. derby-5823-2a.diff
          8 kB
          Knut Anders Hatlen
        2. derby-5823-1a-regression_test.diff
          3 kB
          Kristian Waagan

        Issue Links

          Activity

            People

              knutanders Knut Anders Hatlen
              kristwaa Kristian Waagan
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: