lockMode,
TransactionController.ISOLATION_SERIALIZABLE,
constants.heapSCOCI,
heapDCOCI);
CursorResultSet rs = rowHolder.getResultSet();
try
{
/*
** We need to do a fetch doing a partial row
** read. We need to shift our 1-based bit
** set to a zero based bit set like the store
** expects.
*/
FormatableBitSet readBitSet = RowUtil.shift(baseRowReadList, 1);
rs.open();
while ((defRLRow = rs.getNextRow()) != null)
{
rlColumn = defRLRow.getColumn(rlColumnNumber);
baseRowLocation =
(RowLocation) (rlColumn).getObject();
/* Get the base row at the given RowLocation */
boolean row_exists =
deferredBaseCC.fetch(
baseRowLocation, deferredSparseRow.getRowArray(),
readBitSet);
// In case of cascade delete , things like before triggers can delete
// the rows before the dependent result get a chance to delete
if(cascadeDelete && !row_exists)
continue;
if (SanityManager.DEBUG)
{
if (!row_exists)
{
SanityManager.THROWASSERT("could not find row "+baseRowLocation);
}
}
rc.deleteRow(deferredBaseRow, baseRowLocation);
source.markRowAsDeleted();
}
} finally
{
rs.close();
}
}