88 *
99 *
1010 * IDENTIFICATION
11- * $Id: hio.c,v 1.41 2001/06/29 21:08:23 tgl Exp $
11+ * $Id: hio.c,v 1.42 2001/07/13 22:52:58 tgl Exp $
1212 *
1313 *-------------------------------------------------------------------------
1414 */
2525 *
2626 * !!! ELOG(ERROR) IS DISALLOWED HERE !!!
2727 *
28- * Note - we assume that caller hold BUFFER_LOCK_EXCLUSIVE on the buffer.
29- *
28+ * Note - caller must hold BUFFER_LOCK_EXCLUSIVE on the buffer.
3029 */
3130void
3231RelationPutHeapTuple (Relation relation ,
@@ -35,7 +34,6 @@ RelationPutHeapTuple(Relation relation,
3534{
3635Page pageHeader ;
3736OffsetNumber offnum ;
38- Size len ;
3937ItemId itemId ;
4038Item item ;
4139
@@ -45,24 +43,22 @@ RelationPutHeapTuple(Relation relation,
4543IncrHeapAccessStat (local_RelationPutHeapTuple );
4644IncrHeapAccessStat (global_RelationPutHeapTuple );
4745
48- pageHeader = (Page )BufferGetPage (buffer );
49- len = MAXALIGN (tuple -> t_len );/* be conservative */
50- Assert (len <=PageGetFreeSpace (pageHeader ));
46+ /* Add the tuple to the page */
47+ pageHeader = BufferGetPage (buffer );
5148
52- offnum = PageAddItem (( Page ) pageHeader , (Item )tuple -> t_data ,
49+ offnum = PageAddItem (pageHeader , (Item )tuple -> t_data ,
5350tuple -> t_len ,InvalidOffsetNumber ,LP_USED );
5451
5552if (offnum == InvalidOffsetNumber )
5653elog (STOP ,"RelationPutHeapTuple: failed to add tuple" );
5754
58- itemId = PageGetItemId ((Page )pageHeader ,offnum );
59- item = PageGetItem ((Page )pageHeader ,itemId );
60-
61- ItemPointerSet (& ((HeapTupleHeader )item )-> t_ctid ,
62- BufferGetBlockNumber (buffer ),offnum );
55+ /* Update tuple->t_self to the actual position where it was stored */
56+ ItemPointerSet (& (tuple -> t_self ),BufferGetBlockNumber (buffer ),offnum );
6357
64- /* return an accurate tuple */
65- ItemPointerSet (& tuple -> t_self ,BufferGetBlockNumber (buffer ),offnum );
58+ /* Insert the correct position into CTID of the stored tuple, too */
59+ itemId = PageGetItemId (pageHeader ,offnum );
60+ item = PageGetItem (pageHeader ,itemId );
61+ ((HeapTupleHeader )item )-> t_ctid = tuple -> t_self ;
6662}
6763
6864/*