88 *
99 *
1010 * IDENTIFICATION
11- * $Header: /cvsroot/pgsql/src/backend/storage/page/bufpage.c,v 1.31 2000/07/21 06:42:33 tgl Exp $
11+ * $Header: /cvsroot/pgsql/src/backend/storage/page/bufpage.c,v 1.32 2000/10/20 11:28:39 vadim Exp $
1212 *
1313 *-------------------------------------------------------------------------
1414 */
@@ -80,6 +80,9 @@ PageAddItem(Page page,
8080 ItemId itemId ;
8181 OffsetNumber limit ;
8282 bool needshuffle = false;
83+ bool overwritemode = flags & OverwritePageMode ;
84+
85+ flags &= ~OverwritePageMode ;
8386
8487 /*
8588 * Find first unallocated offsetNumber
@@ -89,8 +92,28 @@ PageAddItem(Page page,
8992 /* was offsetNumber passed in? */
9093 if (OffsetNumberIsValid (offsetNumber ))
9194 {
92- needshuffle = true; /* need to increase "lower" */
93- /* don't actually do the shuffle till we've checked free space! */
95+ if (overwritemode )
96+ {
97+ if (offsetNumber > limit )
98+ {
99+ elog (NOTICE , "PageAddItem: tried overwrite after maxoff" );
100+ return InvalidOffsetNumber ;
101+ }
102+ itemId = & ((PageHeader ) page )-> pd_linp [offsetNumber - 1 ];
103+ if (((* itemId ).lp_flags & LP_USED ) ||
104+ ((* itemId ).lp_len != 0 ))
105+ {
106+ elog (NOTICE , "PageAddItem: tried overwrite of used ItemId" );
107+ return InvalidOffsetNumber ;
108+ }
109+ }
110+ else
111+ {
112+ /*
113+ * Don't actually do the shuffle till we've checked free space!
114+ */
115+ needshuffle = true; /* need to increase "lower" */
116+ }
94117 }
95118 else
96119 {
0 commit comments