*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/storage/page/bufpage.c,v 1.31 2000/07/21 06:42:33 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/storage/page/bufpage.c,v 1.32 2000/10/20 11:28:39 vadim Exp $
*
*-------------------------------------------------------------------------
*/
ItemId itemId;
OffsetNumber limit;
bool needshuffle = false;
+ bool overwritemode = flags & OverwritePageMode;
+
+ flags &= ~OverwritePageMode;
/*
* Find first unallocated offsetNumber
/* was offsetNumber passed in? */
if (OffsetNumberIsValid(offsetNumber))
{
- needshuffle = true; /* need to increase "lower" */
- /* don't actually do the shuffle till we've checked free space! */
+ if (overwritemode)
+ {
+ if (offsetNumber > limit)
+ {
+ elog(NOTICE, "PageAddItem: tried overwrite after maxoff");
+ return InvalidOffsetNumber;
+ }
+ itemId = &((PageHeader) page)->pd_linp[offsetNumber - 1];
+ if (((*itemId).lp_flags & LP_USED) ||
+ ((*itemId).lp_len != 0))
+ {
+ elog(NOTICE, "PageAddItem: tried overwrite of used ItemId");
+ return InvalidOffsetNumber;
+ }
+ }
+ else
+ {
+ /*
+ * Don't actually do the shuffle till we've checked free space!
+ */
+ needshuffle = true; /* need to increase "lower" */
+ }
}
else
{