8
8
*
9
9
*
10
10
* 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 $
12
12
*
13
13
*-------------------------------------------------------------------------
14
14
*/
25
25
*
26
26
* !!! ELOG(ERROR) IS DISALLOWED HERE !!!
27
27
*
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.
30
29
*/
31
30
void
32
31
RelationPutHeapTuple (Relation relation ,
@@ -35,7 +34,6 @@ RelationPutHeapTuple(Relation relation,
35
34
{
36
35
Page pageHeader ;
37
36
OffsetNumber offnum ;
38
- Size len ;
39
37
ItemId itemId ;
40
38
Item item ;
41
39
@@ -45,24 +43,22 @@ RelationPutHeapTuple(Relation relation,
45
43
IncrHeapAccessStat (local_RelationPutHeapTuple );
46
44
IncrHeapAccessStat (global_RelationPutHeapTuple );
47
45
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 );
51
48
52
- offnum = PageAddItem (( Page ) pageHeader , (Item ) tuple -> t_data ,
49
+ offnum = PageAddItem (pageHeader , (Item ) tuple -> t_data ,
53
50
tuple -> t_len , InvalidOffsetNumber , LP_USED );
54
51
55
52
if (offnum == InvalidOffsetNumber )
56
53
elog (STOP , "RelationPutHeapTuple: failed to add tuple" );
57
54
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 );
63
57
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 ;
66
62
}
67
63
68
64
/*
0 commit comments