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 "Bernt M. Johnsen (JIRA)" <de...@db.apache.org> on 2005/11/17 13:47:43 UTC
[jira] Resolved: (DERBY-707) providing RowLocation for deleted+purged row to GenericConglomerateController causes nullpointerexception
[ http://issues.apache.org/jira/browse/DERBY-707?page=all ]
Bernt M. Johnsen resolved DERBY-707:
------------------------------------
Fix Version: 10.2.0.0
Resolution: Fixed
> 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
> Assignee: Andreas Korneliussen
> Priority: Minor
> Fix For: 10.2.0.0
> Attachments: DERBY-707.diff, DERBY-707.stat
>
> 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(..):
> java.lang.NullPointerException
> 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:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira