DynamicByteArrayOutputStream out)
throws StandardException, IOException
{
setOutputStream(out);
StoredRecordHeader pageRecordHeader = getHeaderAtSlot(slot);
StoredRecordHeader overflow_rh = getOverFlowRecordHeader();
overflow_rh.setOverflowFields(pageRecordHeader);
if (SanityManager.DEBUG)
{
SanityManager.ASSERT(overflow_rh.getOverflowPage() != 0);
}
/*
// #1 situation,
// we want to update the header to just an overflow pointer with no data
// so, update the recordHeader, and we are done...
if (!overflow_rh.isPartialOverflow()) {
// this recordHeader becomes just a overflow pointer,
// we need to make sure that the number of fields is set to 0.
overflow_rh.setNumberFields(0);
spaceAvailable -= overflow_rh.write(logicalDataOut);
if (spaceAvailable < 0) {
throw new NoSpaceOnPage(isOverflowPage());
}
resetOutputStream();
return (-1);
}
*/
// #2 situation,
// we want to only update the recordheader of the page, while leaving
// the data of the record on the page. Just update the header part and
// then arrange for the data part to move to after the new header.
int oldSize = pageRecordHeader.size();
int newSize = overflow_rh.size();
if (oldSize < newSize)
{
// need extra room...
int delta = newSize - oldSize;
if (spaceAvailable < delta)
{
throw new NoSpaceOnPage(isOverflowPage());
}
}
// write the new overflow_rh for the record.
overflow_rh.write(logicalDataOut);
// now, log the data
logRecordDataPortion(
slot, LOG_RECORD_DEFAULT, pageRecordHeader,
(FormatableBitSet) null, logicalDataOut, (RecordHandle)null);