77 *
88 *
99 * IDENTIFICATION
10- * $Header: /cvsroot/pgsql/src/backend/access/heap/heapam.c,v 1.60 1999/11/24 00:44:28 momjian Exp $
10+ * $Header: /cvsroot/pgsql/src/backend/access/heap/heapam.c,v 1.61 1999/12/16 22:19:36 wieck Exp $
1111 *
1212 *
1313 * INTERFACE ROUTINES
@@ -117,6 +117,8 @@ initscan(HeapScanDesc scan,
117117 *relation is empty
118118 * ----------------
119119 */
120+ scan -> rs_ntup .t_datamcxt = scan -> rs_ctup .t_datamcxt =
121+ scan -> rs_ptup .t_datamcxt = NULL ;
120122scan -> rs_ntup .t_data = scan -> rs_ctup .t_data =
121123scan -> rs_ptup .t_data = NULL ;
122124scan -> rs_nbuf = scan -> rs_cbuf = scan -> rs_pbuf = InvalidBuffer ;
@@ -127,8 +129,10 @@ initscan(HeapScanDesc scan,
127129 *reverse scan
128130 * ----------------
129131 */
132+ scan -> rs_ntup .t_datamcxt = scan -> rs_ctup .t_datamcxt = NULL ;
130133scan -> rs_ntup .t_data = scan -> rs_ctup .t_data = NULL ;
131134scan -> rs_nbuf = scan -> rs_cbuf = InvalidBuffer ;
135+ scan -> rs_ptup .t_datamcxt = NULL ;
132136scan -> rs_ptup .t_data = NULL ;
133137scan -> rs_pbuf = UnknownBuffer ;
134138}
@@ -138,8 +142,10 @@ initscan(HeapScanDesc scan,
138142 *forward scan
139143 * ----------------
140144 */
145+ scan -> rs_ctup .t_datamcxt = scan -> rs_ptup .t_datamcxt = NULL ;
141146scan -> rs_ctup .t_data = scan -> rs_ptup .t_data = NULL ;
142147scan -> rs_cbuf = scan -> rs_pbuf = InvalidBuffer ;
148+ scan -> rs_ntup .t_datamcxt = NULL ;
143149scan -> rs_ntup .t_data = NULL ;
144150scan -> rs_nbuf = UnknownBuffer ;
145151}/* invalid too */
@@ -272,6 +278,7 @@ heapgettup(Relation relation,
272278 */
273279if (!(pages = relation -> rd_nblocks ))
274280{
281+ tuple -> t_datamcxt = NULL ;
275282tuple -> t_data = NULL ;
276283return ;
277284}
@@ -290,6 +297,7 @@ heapgettup(Relation relation,
290297if (ItemPointerIsValid (tid )== false)
291298{
292299* buffer = InvalidBuffer ;
300+ tuple -> t_datamcxt = NULL ;
293301tuple -> t_data = NULL ;
294302return ;
295303}
@@ -306,6 +314,7 @@ heapgettup(Relation relation,
306314lineoff = ItemPointerGetOffsetNumber (tid );
307315lpp = PageGetItemId (dp ,lineoff );
308316
317+ tuple -> t_datamcxt = NULL ;
309318tuple -> t_data = (HeapTupleHeader )PageGetItem ((Page )dp ,lpp );
310319tuple -> t_len = ItemIdGetLength (lpp );
311320LockBuffer (* buffer ,BUFFER_LOCK_UNLOCK );
@@ -376,6 +385,7 @@ heapgettup(Relation relation,
376385if (page >=pages )
377386{
378387* buffer = InvalidBuffer ;
388+ tuple -> t_datamcxt = NULL ;
379389tuple -> t_data = NULL ;
380390return ;
381391}
@@ -415,6 +425,7 @@ heapgettup(Relation relation,
415425{
416426if (ItemIdIsUsed (lpp ))
417427{
428+ tuple -> t_datamcxt = NULL ;
418429tuple -> t_data = (HeapTupleHeader )PageGetItem ((Page )dp ,lpp );
419430tuple -> t_len = ItemIdGetLength (lpp );
420431ItemPointerSet (& (tuple -> t_self ),page ,lineoff );
@@ -466,6 +477,7 @@ heapgettup(Relation relation,
466477if (BufferIsValid (* buffer ))
467478ReleaseBuffer (* buffer );
468479* buffer = InvalidBuffer ;
480+ tuple -> t_datamcxt = NULL ;
469481tuple -> t_data = NULL ;
470482return ;
471483}
@@ -836,6 +848,7 @@ heap_getnext(HeapScanDesc scandesc, int backw)
836848{
837849if (BufferIsValid (scan -> rs_nbuf ))
838850ReleaseBuffer (scan -> rs_nbuf );
851+ scan -> rs_ntup .t_datamcxt = NULL ;
839852scan -> rs_ntup .t_data = NULL ;
840853scan -> rs_nbuf = UnknownBuffer ;
841854return NULL ;
@@ -892,17 +905,20 @@ heap_getnext(HeapScanDesc scandesc, int backw)
892905{
893906if (BufferIsValid (scan -> rs_pbuf ))
894907ReleaseBuffer (scan -> rs_pbuf );
908+ scan -> rs_ptup .t_datamcxt = NULL ;
895909scan -> rs_ptup .t_data = NULL ;
896910scan -> rs_pbuf = InvalidBuffer ;
897911if (BufferIsValid (scan -> rs_nbuf ))
898912ReleaseBuffer (scan -> rs_nbuf );
913+ scan -> rs_ntup .t_datamcxt = NULL ;
899914scan -> rs_ntup .t_data = NULL ;
900915scan -> rs_nbuf = InvalidBuffer ;
901916return NULL ;
902917}
903918
904919if (BufferIsValid (scan -> rs_pbuf ))
905920ReleaseBuffer (scan -> rs_pbuf );
921+ scan -> rs_ptup .t_datamcxt = NULL ;
906922scan -> rs_ptup .t_data = NULL ;
907923scan -> rs_pbuf = UnknownBuffer ;
908924
@@ -918,6 +934,7 @@ heap_getnext(HeapScanDesc scandesc, int backw)
918934{
919935if (BufferIsValid (scan -> rs_pbuf ))
920936ReleaseBuffer (scan -> rs_pbuf );
937+ scan -> rs_ptup .t_datamcxt = NULL ;
921938scan -> rs_ptup .t_data = NULL ;
922939scan -> rs_pbuf = UnknownBuffer ;
923940HEAPDEBUG_3 ;/* heap_getnext returns NULL at end */
@@ -976,10 +993,12 @@ heap_getnext(HeapScanDesc scandesc, int backw)
976993{
977994if (BufferIsValid (scan -> rs_nbuf ))
978995ReleaseBuffer (scan -> rs_nbuf );
996+ scan -> rs_ntup .t_datamcxt = NULL ;
979997scan -> rs_ntup .t_data = NULL ;
980998scan -> rs_nbuf = InvalidBuffer ;
981999if (BufferIsValid (scan -> rs_pbuf ))
9821000ReleaseBuffer (scan -> rs_pbuf );
1001+ scan -> rs_ptup .t_datamcxt = NULL ;
9831002scan -> rs_ptup .t_data = NULL ;
9841003scan -> rs_pbuf = InvalidBuffer ;
9851004HEAPDEBUG_6 ;/* heap_getnext returning EOS */
@@ -988,6 +1007,7 @@ heap_getnext(HeapScanDesc scandesc, int backw)
9881007
9891008if (BufferIsValid (scan -> rs_nbuf ))
9901009ReleaseBuffer (scan -> rs_nbuf );
1010+ scan -> rs_ntup .t_datamcxt = NULL ;
9911011scan -> rs_ntup .t_data = NULL ;
9921012scan -> rs_nbuf = UnknownBuffer ;
9931013}
@@ -1066,10 +1086,12 @@ heap_fetch(Relation relation,
10661086{
10671087ReleaseBuffer (buffer );
10681088* userbuf = InvalidBuffer ;
1089+ tuple -> t_datamcxt = NULL ;
10691090tuple -> t_data = NULL ;
10701091return ;
10711092}
10721093
1094+ tuple -> t_datamcxt = NULL ;
10731095tuple -> t_data = (HeapTupleHeader )PageGetItem ((Page )dp ,lp );
10741096tuple -> t_len = ItemIdGetLength (lp );
10751097
@@ -1156,6 +1178,7 @@ heap_get_latest_tid(Relation relation,
11561178 * ----------------
11571179 */
11581180
1181+ tp .t_datamcxt = NULL ;
11591182t_data = tp .t_data = (HeapTupleHeader )PageGetItem ((Page )dp ,lp );
11601183tp .t_len = ItemIdGetLength (lp );
11611184tp .t_self = * tid ;
@@ -1270,6 +1293,7 @@ heap_delete(Relation relation, ItemPointer tid, ItemPointer ctid)
12701293
12711294dp = (PageHeader )BufferGetPage (buffer );
12721295lp = PageGetItemId (dp ,ItemPointerGetOffsetNumber (tid ));
1296+ tp .t_datamcxt = NULL ;
12731297tp .t_data = (HeapTupleHeader )PageGetItem ((Page )dp ,lp );
12741298tp .t_len = ItemIdGetLength (lp );
12751299tp .t_self = * tid ;
@@ -1365,6 +1389,7 @@ heap_update(Relation relation, ItemPointer otid, HeapTuple newtup,
13651389dp = (PageHeader )BufferGetPage (buffer );
13661390lp = PageGetItemId (dp ,ItemPointerGetOffsetNumber (otid ));
13671391
1392+ oldtup .t_datamcxt = NULL ;
13681393oldtup .t_data = (HeapTupleHeader )PageGetItem (dp ,lp );
13691394oldtup .t_len = ItemIdGetLength (lp );
13701395oldtup .t_self = * otid ;
@@ -1488,6 +1513,7 @@ heap_mark4update(Relation relation, HeapTuple tuple, Buffer *buffer)
14881513
14891514dp = (PageHeader )BufferGetPage (* buffer );
14901515lp = PageGetItemId (dp ,ItemPointerGetOffsetNumber (tid ));
1516+ tuple -> t_datamcxt = NULL ;
14911517tuple -> t_data = (HeapTupleHeader )PageGetItem ((Page )dp ,lp );
14921518tuple -> t_len = ItemIdGetLength (lp );
14931519
@@ -1665,10 +1691,14 @@ heap_restrpos(HeapScanDesc scan)
16651691scan -> rs_nbuf = InvalidBuffer ;
16661692
16671693if (!ItemPointerIsValid (& scan -> rs_mptid ))
1694+ {
1695+ scan -> rs_ptup .t_datamcxt = NULL ;
16681696scan -> rs_ptup .t_data = NULL ;
1697+ }
16691698else
16701699{
16711700scan -> rs_ptup .t_self = scan -> rs_mptid ;
1701+ scan -> rs_ptup .t_datamcxt = NULL ;
16721702scan -> rs_ptup .t_data = (HeapTupleHeader )0x1 ;/* for heapgettup */
16731703heapgettup (scan -> rs_rd ,
16741704& (scan -> rs_ptup ),
@@ -1680,10 +1710,14 @@ heap_restrpos(HeapScanDesc scan)
16801710}
16811711
16821712if (!ItemPointerIsValid (& scan -> rs_mctid ))
1713+ {
1714+ scan -> rs_ctup .t_datamcxt = NULL ;
16831715scan -> rs_ctup .t_data = NULL ;
1716+ }
16841717else
16851718{
16861719scan -> rs_ctup .t_self = scan -> rs_mctid ;
1720+ scan -> rs_ctup .t_datamcxt = NULL ;
16871721scan -> rs_ctup .t_data = (HeapTupleHeader )0x1 ;/* for heapgettup */
16881722heapgettup (scan -> rs_rd ,
16891723& (scan -> rs_ctup ),
@@ -1695,9 +1729,13 @@ heap_restrpos(HeapScanDesc scan)
16951729}
16961730
16971731if (!ItemPointerIsValid (& scan -> rs_mntid ))
1732+ {
1733+ scan -> rs_ntup .t_datamcxt = NULL ;
16981734scan -> rs_ntup .t_data = NULL ;
1735+ }
16991736else
17001737{
1738+ scan -> rs_ntup .t_datamcxt = NULL ;
17011739scan -> rs_ntup .t_self = scan -> rs_mntid ;
17021740scan -> rs_ntup .t_data = (HeapTupleHeader )0x1 ;/* for heapgettup */
17031741heapgettup (scan -> rs_rd ,