OperationStatus deleteInternal__wrappee__base(Locker locker, DatabaseEntry key) throws DatabaseException { Cursor cursor = null; try { cursor = new Cursor(this, locker, null); cursor.setNonCloning(true); OperationStatus commitStatus = OperationStatus.NOTFOUND; DatabaseEntry oldData = new DatabaseEntry(); OperationStatus searchStatus = cursor.search(key, oldData, LockMode.RMW, SearchMode.SET); if (searchStatus == OperationStatus.SUCCESS) { do { if (hasTriggers()) { notifyTriggers(locker, key, oldData, null); } commitStatus = cursor.deleteNoNotify(); if (commitStatus != OperationStatus.SUCCESS) { return commitStatus; } if (databaseImpl.getSortedDuplicates()) { searchStatus = cursor.retrieveNext(key, oldData, LockMode.RMW, GetMode.NEXT_DUP); } else { searchStatus = OperationStatus.NOTFOUND; } } while (searchStatus == OperationStatus.SUCCESS); commitStatus = OperationStatus.SUCCESS; } return commitStatus; } finally { if (cursor != null) { cursor.close(); } } }
/** * Internal version of delete() that does no parameter checking. Notify triggers. Deletes all * duplicates. */ OperationStatus deleteInternal(Locker locker, DatabaseEntry key) throws DatabaseException { Cursor cursor = null; try { cursor = new Cursor(this, locker, null); cursor.setNonCloning(true); OperationStatus commitStatus = OperationStatus.NOTFOUND; /* Position a cursor at the specified data record. */ DatabaseEntry oldData = new DatabaseEntry(); OperationStatus searchStatus = cursor.search(key, oldData, LockMode.RMW, SearchMode.SET); /* Delete all records with that key. */ if (searchStatus == OperationStatus.SUCCESS) { do { /* * Notify triggers before the actual deletion so that a * primary record never exists while secondary keys refer * to it. This is relied on by secondary read-uncommitted. */ if (hasTriggers()) { notifyTriggers(locker, key, oldData, null); } /* The actual deletion. */ commitStatus = cursor.deleteNoNotify(); if (commitStatus != OperationStatus.SUCCESS) { return commitStatus; } /* Get another duplicate. */ if (databaseImpl.getSortedDuplicates()) { searchStatus = cursor.retrieveNext(key, oldData, LockMode.RMW, GetMode.NEXT_DUP); } else { searchStatus = OperationStatus.NOTFOUND; } } while (searchStatus == OperationStatus.SUCCESS); commitStatus = OperationStatus.SUCCESS; } return commitStatus; } finally { if (cursor != null) { cursor.close(); } } }