8
8
*
9
9
*
10
10
* 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 $
12
12
*
13
13
*-------------------------------------------------------------------------
14
14
*/
@@ -80,6 +80,9 @@ PageAddItem(Page page,
80
80
ItemId itemId ;
81
81
OffsetNumber limit ;
82
82
bool needshuffle = false;
83
+ bool overwritemode = flags & OverwritePageMode ;
84
+
85
+ flags &= ~OverwritePageMode ;
83
86
84
87
/*
85
88
* Find first unallocated offsetNumber
@@ -89,8 +92,28 @@ PageAddItem(Page page,
89
92
/* was offsetNumber passed in? */
90
93
if (OffsetNumberIsValid (offsetNumber ))
91
94
{
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
+ }
94
117
}
95
118
else
96
119
{
0 commit comments