try
{
int columnId = work.getColumnId();
StoredRecordHeader recordHeader = getHeaderAtSlot(slot);
if (SanityManager.DEBUG)
SanityManager.ASSERT(recordHeader.getFirstField() == 0,
"Head row piece should start at field 0 but is not");
// See if columnId is on pageInRowChain.
while ((recordHeader.getNumberFields() +
recordHeader.getFirstField()) <= columnId)
{
// The column in question is not on pageInRowChain.
if (pageInRowChain != this)
{
// Keep the head page latched.
pageInRowChain.unlatch();
pageInRowChain = null;
}
if (recordHeader.hasOverflow())
{
// Go to the next row piece
pageInRowChain =
getOverflowPage(recordHeader.getOverflowPage());
recordHeader =
pageInRowChain.getHeaderAtSlot(
getOverflowSlot(pageInRowChain, recordHeader));
}
else
{
// Don't know why, but this is the last column.
// Anyway, the column chain is definite orphaned.
// This can happen if the update, or subsequent
// updates, shrink the number of columns in the row.
break;
}
}
if ((recordHeader.getNumberFields() +
recordHeader.getFirstField()) > columnId)
{
// RecordHeader is the record header of the row piece on
// pageInRowChain. The column in question exists and is in
// that row piece.
if (!pageInRowChain.isColumnOrphaned(