db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Andreas Korneliussen (JIRA)" <derby-...@db.apache.org>
Subject [jira] Created: (DERBY-707) providing RowLocation for deleted+purged row to GenericConglomerateController causes nullpointerexception
Date Tue, 15 Nov 2005 13:25:28 GMT
providing RowLocation for deleted+purged row to GenericConglomerateController causes nullpointerexception

         Key: DERBY-707
         URL: http://issues.apache.org/jira/browse/DERBY-707
     Project: Derby
        Type: Bug
  Components: Store  
 Environment: Java 1.4
    Reporter: Andreas Korneliussen
    Priority: Minor

To provide scrollable updatable resultsets, we will store the RowLocation for every row in
the ResultSet in a temporary table (backingstore hashtable).  The RowLocation is used to reposition
the cursor before an update.

The problem is when the row for the RowLocation has been deleted and purged by another transaction.
 The update will then fail with a NullPointerException in GenericConglomerateController.replace(..):

        at org.apache.derby.impl.store.access.conglomerate.GenericConglomerateController.replace(GenericConglomerateController.java:465)
        at org.apache.derby.impl.sql.execute.RowChangerImpl.updateRow(RowChangerImpl.java:516)
        at org.apache.derby.impl.sql.execute.UpdateResultSet.collectAffectedRows(UpdateResultSet.java:577)
        at org.apache.derby.impl.sql.execute.UpdateResultSet.open(UpdateResultSet.java:276)
        at org.apache.derby.impl.sql.GenericPreparedStatement.execute(GenericPreparedStatement.java:368)
        at org.apache.derby.impl.jdbc.EmbedResultSet.updateRow(EmbedResultSet.java:3256) 

It fails when checking if the row has been deleted (not purged) , because pos.current_page
is null:

        if (pos.current_page.isDeletedAtSlot(pos.current_slot))
            ret_val = false;

The proposed fix is to use the return value from open_conglom.latchPage(..).  If it returns
false, the RowLocation is invalid (deleted+purged). 

This message is automatically generated by JIRA.
If you think it was sent incorrectly contact one of the administrators:
For more information on JIRA, see:

View raw message