This patch wraps all accesses to t_xmin, t_cmin, t_xmax, and t_cmax in
authorBruce Momjian <bruce@momjian.us>
Sat, 15 Jun 2002 19:54:24 +0000 (19:54 +0000)
committerBruce Momjian <bruce@momjian.us>
Sat, 15 Jun 2002 19:54:24 +0000 (19:54 +0000)
HeapTupleHeaderData in setter and getter macros called
HeapTupleHeaderGetXmin, HeapTupleHeaderSetXmin etc.

It also introduces a "virtual" field xvac by defining
HeapTupleHeaderGetXvac and HeapTupleHeaderSetXvac.  Xvac is used by
VACUUM, in fact it is stored in t_cmin.

Manfred Koizar

14 files changed:
src/backend/access/common/heaptuple.c
src/backend/access/heap/heapam.c
src/backend/access/transam/xlogutils.c
src/backend/catalog/index.c
src/backend/commands/sequence.c
src/backend/commands/vacuum.c
src/backend/commands/vacuumlazy.c
src/backend/utils/time/tqual.c
src/include/access/htup.h
src/pl/plperl/plperl.c
src/pl/plpgsql/src/pl_comp.c
src/pl/plpgsql/src/pl_handler.c
src/pl/plpython/plpython.c
src/pl/tcl/pltcl.c

index daad2bd5370a8ba212269e1fd2833da79853edbe..724750c9f5feb5c6fd8402600aff675c7e51ac13 100644 (file)
@@ -9,7 +9,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/access/common/heaptuple.c,v 1.75 2002/05/27 19:53:33 tgl Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/access/common/heaptuple.c,v 1.76 2002/06/15 19:54:23 momjian Exp $
  *
  * NOTES
  *       The old interface functions have been converted to macros
@@ -439,16 +439,16 @@ heap_getsysattr(HeapTuple tup, int attnum, bool *isnull)
                        result = ObjectIdGetDatum(tup->t_data->t_oid);
                        break;
                case MinTransactionIdAttributeNumber:
-                       result = TransactionIdGetDatum(tup->t_data->t_xmin);
+                       result = TransactionIdGetDatum(HeapTupleHeaderGetXmin(tup->t_data));
                        break;
                case MinCommandIdAttributeNumber:
-                       result = CommandIdGetDatum(tup->t_data->t_cmin);
+                       result = CommandIdGetDatum(HeapTupleHeaderGetCmin(tup->t_data));
                        break;
                case MaxTransactionIdAttributeNumber:
-                       result = TransactionIdGetDatum(tup->t_data->t_xmax);
+                       result = TransactionIdGetDatum(HeapTupleHeaderGetXmax(tup->t_data));
                        break;
                case MaxCommandIdAttributeNumber:
-                       result = CommandIdGetDatum(tup->t_data->t_cmax);
+                       result = CommandIdGetDatum(HeapTupleHeaderGetCmax(tup->t_data));
                        break;
                case TableOidAttributeNumber:
                        result = ObjectIdGetDatum(tup->t_tableOid);
index a6f7e59fae7243c4ec475fa21b62befa12b3f840..c7ac76e853f14eabe0f91919048ecd984ef4d9d7 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/access/heap/heapam.c,v 1.137 2002/05/24 19:52:43 tgl Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/access/heap/heapam.c,v 1.138 2002/06/15 19:54:23 momjian Exp $
  *
  *
  * INTERFACE ROUTINES
@@ -1122,10 +1122,10 @@ heap_insert(Relation relation, HeapTuple tup, CommandId cid)
                        CheckMaxObjectId(tup->t_data->t_oid);
        }
 
-       TransactionIdStore(GetCurrentTransactionId(), &(tup->t_data->t_xmin));
-       tup->t_data->t_cmin = cid;
-       StoreInvalidTransactionId(&(tup->t_data->t_xmax));
-       tup->t_data->t_cmax = FirstCommandId;
+       HeapTupleHeaderSetXmin(tup->t_data, GetCurrentTransactionId());
+       HeapTupleHeaderSetCmin(tup->t_data, cid);
+       HeapTupleHeaderSetXmaxInvalid(tup->t_data);
+       HeapTupleHeaderSetCmax(tup->t_data, FirstCommandId);
        tup->t_data->t_infomask &= ~(HEAP_XACT_MASK);
        tup->t_data->t_infomask |= HEAP_XMAX_INVALID;
        tup->t_tableOid = relation->rd_id;
@@ -1270,7 +1270,7 @@ l1:
        }
        else if (result == HeapTupleBeingUpdated)
        {
-               TransactionId xwait = tp.t_data->t_xmax;
+               TransactionId xwait = HeapTupleHeaderGetXmax(tp.t_data);
 
                /* sleep until concurrent transaction ends */
                LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
@@ -1285,7 +1285,7 @@ l1:
                 * update then some other xaction could update this tuple before
                 * we got to this point.
                 */
-               if (!TransactionIdEquals(tp.t_data->t_xmax, xwait))
+               if (!TransactionIdEquals(HeapTupleHeaderGetXmax(tp.t_data), xwait))
                        goto l1;
                if (!(tp.t_data->t_infomask & HEAP_XMAX_COMMITTED))
                {
@@ -1309,10 +1309,10 @@ l1:
 
        START_CRIT_SECTION();
        /* store transaction information of xact deleting the tuple */
-       TransactionIdStore(GetCurrentTransactionId(), &(tp.t_data->t_xmax));
-       tp.t_data->t_cmax = cid;
        tp.t_data->t_infomask &= ~(HEAP_XMAX_COMMITTED |
                                                         HEAP_XMAX_INVALID | HEAP_MARKED_FOR_UPDATE);
+       HeapTupleHeaderSetXmax(tp.t_data, GetCurrentTransactionId());
+       HeapTupleHeaderSetCmax(tp.t_data, cid);
        /* XLOG stuff */
        {
                xl_heap_delete xlrec;
@@ -1461,7 +1461,7 @@ l2:
        }
        else if (result == HeapTupleBeingUpdated)
        {
-               TransactionId xwait = oldtup.t_data->t_xmax;
+               TransactionId xwait = HeapTupleHeaderGetXmax(oldtup.t_data);
 
                /* sleep untill concurrent transaction ends */
                LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
@@ -1476,7 +1476,7 @@ l2:
                 * update then some other xaction could update this tuple before
                 * we got to this point.
                 */
-               if (!TransactionIdEquals(oldtup.t_data->t_xmax, xwait))
+               if (!TransactionIdEquals(HeapTupleHeaderGetXmax(oldtup.t_data), xwait))
                        goto l2;
                if (!(oldtup.t_data->t_infomask & HEAP_XMAX_COMMITTED))
                {
@@ -1500,11 +1500,11 @@ l2:
 
        /* Fill in OID and transaction status data for newtup */
        newtup->t_data->t_oid = oldtup.t_data->t_oid;
-       TransactionIdStore(GetCurrentTransactionId(), &(newtup->t_data->t_xmin));
-       newtup->t_data->t_cmin = cid;
-       StoreInvalidTransactionId(&(newtup->t_data->t_xmax));
        newtup->t_data->t_infomask &= ~(HEAP_XACT_MASK);
        newtup->t_data->t_infomask |= (HEAP_XMAX_INVALID | HEAP_UPDATED);
+       HeapTupleHeaderSetXmin(newtup->t_data, GetCurrentTransactionId());
+       HeapTupleHeaderSetCmin(newtup->t_data, cid);
+       HeapTupleHeaderSetXmaxInvalid(newtup->t_data);
 
        /*
         * If the toaster needs to be activated, OR if the new tuple will not
@@ -1538,13 +1538,12 @@ l2:
                _locked_tuple_.tid = oldtup.t_self;
                XactPushRollback(_heap_unlock_tuple, (void *) &_locked_tuple_);
 
-               TransactionIdStore(GetCurrentTransactionId(),
-                                                  &(oldtup.t_data->t_xmax));
-               oldtup.t_data->t_cmax = cid;
                oldtup.t_data->t_infomask &= ~(HEAP_XMAX_COMMITTED |
                                                                           HEAP_XMAX_INVALID |
                                                                           HEAP_MARKED_FOR_UPDATE);
                oldtup.t_data->t_infomask |= HEAP_XMAX_UNLOGGED;
+               HeapTupleHeaderSetXmax(oldtup.t_data, GetCurrentTransactionId());
+               HeapTupleHeaderSetCmax(oldtup.t_data, cid);
                already_marked = true;
                LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
 
@@ -1630,12 +1629,11 @@ l2:
        }
        else
        {
-               TransactionIdStore(GetCurrentTransactionId(),
-                                                  &(oldtup.t_data->t_xmax));
-               oldtup.t_data->t_cmax = cid;
                oldtup.t_data->t_infomask &= ~(HEAP_XMAX_COMMITTED |
                                                                           HEAP_XMAX_INVALID |
                                                                           HEAP_MARKED_FOR_UPDATE);
+               HeapTupleHeaderSetXmax(oldtup.t_data, GetCurrentTransactionId());
+               HeapTupleHeaderSetCmax(oldtup.t_data, cid);
        }
 
        /* record address of new tuple in t_ctid of old one */
@@ -1759,7 +1757,7 @@ l3:
        }
        else if (result == HeapTupleBeingUpdated)
        {
-               TransactionId xwait = tuple->t_data->t_xmax;
+               TransactionId xwait = HeapTupleHeaderGetXmax(tuple->t_data);
 
                /* sleep untill concurrent transaction ends */
                LockBuffer(*buffer, BUFFER_LOCK_UNLOCK);
@@ -1774,7 +1772,7 @@ l3:
                 * update then some other xaction could update this tuple before
                 * we got to this point.
                 */
-               if (!TransactionIdEquals(tuple->t_data->t_xmax, xwait))
+               if (!TransactionIdEquals(HeapTupleHeaderGetXmax(tuple->t_data), xwait))
                        goto l3;
                if (!(tuple->t_data->t_infomask & HEAP_XMAX_COMMITTED))
                {
@@ -1802,10 +1800,10 @@ l3:
        ((PageHeader) BufferGetPage(*buffer))->pd_sui = ThisStartUpID;
 
        /* store transaction information of xact marking the tuple */
-       TransactionIdStore(GetCurrentTransactionId(), &(tuple->t_data->t_xmax));
-       tuple->t_data->t_cmax = cid;
        tuple->t_data->t_infomask &= ~(HEAP_XMAX_COMMITTED | HEAP_XMAX_INVALID);
        tuple->t_data->t_infomask |= HEAP_MARKED_FOR_UPDATE;
+       HeapTupleHeaderSetXmax(tuple->t_data, GetCurrentTransactionId());
+       HeapTupleHeaderSetCmax(tuple->t_data, cid);
 
        LockBuffer(*buffer, BUFFER_LOCK_UNLOCK);
 
@@ -1981,15 +1979,17 @@ log_heap_update(Relation reln, Buffer oldbuf, ItemPointerData from,
        if (move)                                       /* remember xmin & xmax */
        {
                TransactionId xmax;
+               TransactionId xmin;
 
                if (newtup->t_data->t_infomask & HEAP_XMAX_INVALID ||
                        newtup->t_data->t_infomask & HEAP_MARKED_FOR_UPDATE)
                        xmax = InvalidTransactionId;
                else
-                       xmax = newtup->t_data->t_xmax;
+                       xmax = HeapTupleHeaderGetXmax(newtup->t_data);
+               xmin = HeapTupleHeaderGetXmin(newtup->t_data);
                memcpy((char *) &xlhdr + hsize, &xmax, sizeof(TransactionId));
                memcpy((char *) &xlhdr + hsize + sizeof(TransactionId),
-                          &(newtup->t_data->t_xmin), sizeof(TransactionId));
+                          &xmin, sizeof(TransactionId));
                hsize += 2 * sizeof(TransactionId);
        }
        rdata[2].buffer = newbuf;
@@ -2126,10 +2126,10 @@ heap_xlog_delete(bool redo, XLogRecPtr lsn, XLogRecord *record)
 
        if (redo)
        {
-               htup->t_xmax = record->xl_xid;
-               htup->t_cmax = FirstCommandId;
                htup->t_infomask &= ~(HEAP_XMAX_COMMITTED |
                                                          HEAP_XMAX_INVALID | HEAP_MARKED_FOR_UPDATE);
+               HeapTupleHeaderSetXmax(htup, record->xl_xid);
+               HeapTupleHeaderSetCmax(htup, FirstCommandId);
                PageSetLSN(page, lsn);
                PageSetSUI(page, ThisStartUpID);
                UnlockAndWriteBuffer(buffer);
@@ -2201,11 +2201,11 @@ heap_xlog_insert(bool redo, XLogRecPtr lsn, XLogRecord *record)
                htup->t_oid = xlhdr.t_oid;
                htup->t_natts = xlhdr.t_natts;
                htup->t_hoff = xlhdr.t_hoff;
-               htup->t_xmin = record->xl_xid;
-               htup->t_cmin = FirstCommandId;
-               htup->t_xmax = InvalidTransactionId;
-               htup->t_cmax = FirstCommandId;
                htup->t_infomask = HEAP_XMAX_INVALID | xlhdr.mask;
+               HeapTupleHeaderSetXmin(htup, record->xl_xid);
+               HeapTupleHeaderSetCmin(htup, FirstCommandId);
+               HeapTupleHeaderSetXmax(htup, InvalidTransactionId);
+               HeapTupleHeaderSetCmax(htup, FirstCommandId);
 
                offnum = PageAddItem(page, (Item) htup, newlen, offnum,
                                                         LP_USED | OverwritePageMode);
@@ -2286,17 +2286,17 @@ heap_xlog_update(bool redo, XLogRecPtr lsn, XLogRecord *record, bool move)
        {
                if (move)
                {
-                       TransactionIdStore(record->xl_xid, (TransactionId *) &(htup->t_cmin));
                        htup->t_infomask &=
                                ~(HEAP_XMIN_COMMITTED | HEAP_XMIN_INVALID | HEAP_MOVED_IN);
                        htup->t_infomask |= HEAP_MOVED_OFF;
+                       HeapTupleHeaderSetXvac(htup, record->xl_xid);
                }
                else
                {
-                       htup->t_xmax = record->xl_xid;
-                       htup->t_cmax = FirstCommandId;
                        htup->t_infomask &= ~(HEAP_XMAX_COMMITTED |
                                                         HEAP_XMAX_INVALID | HEAP_MARKED_FOR_UPDATE);
+                       HeapTupleHeaderSetXmax(htup, record->xl_xid);
+                       HeapTupleHeaderSetCmax(htup, FirstCommandId);
                }
                if (samepage)
                        goto newsame;
@@ -2372,26 +2372,27 @@ newsame:;
                htup->t_hoff = xlhdr.t_hoff;
                if (move)
                {
+                       TransactionId xmax;
+                       TransactionId xmin;
+                       
                        hsize = SizeOfHeapUpdate + SizeOfHeapHeader;
-                       memcpy(&(htup->t_xmax),
-                                  (char *) xlrec + hsize,
-                                  sizeof(TransactionId));
-                       memcpy(&(htup->t_xmin),
-                                  (char *) xlrec + hsize + sizeof(TransactionId),
-                                  sizeof(TransactionId));
-                       TransactionIdStore(record->xl_xid, (TransactionId *) &(htup->t_cmin));
+                       memcpy(&xmax, (char *) xlrec + hsize, sizeof(TransactionId));
+                       memcpy(&xmin, (char *) xlrec + hsize + sizeof(TransactionId), sizeof(TransactionId));
                        htup->t_infomask = xlhdr.mask;
                        htup->t_infomask &= ~(HEAP_XMIN_COMMITTED |
                                                                  HEAP_XMIN_INVALID | HEAP_MOVED_OFF);
                        htup->t_infomask |= HEAP_MOVED_IN;
+                       HeapTupleHeaderSetXmin(htup, xmin);
+                       HeapTupleHeaderSetXmax(htup, xmax);
+                       HeapTupleHeaderSetXvac(htup, record->xl_xid);
                }
                else
                {
-                       htup->t_xmin = record->xl_xid;
-                       htup->t_cmin = FirstCommandId;
-                       htup->t_xmax = InvalidTransactionId;
-                       htup->t_cmax = FirstCommandId;
                        htup->t_infomask = HEAP_XMAX_INVALID | xlhdr.mask;
+                       HeapTupleHeaderSetXmin(htup, record->xl_xid);
+                       HeapTupleHeaderSetCmin(htup, FirstCommandId);
+                       HeapTupleHeaderSetXmaxInvalid(htup);
+                       HeapTupleHeaderSetCmax(htup, FirstCommandId);
                }
 
                offnum = PageAddItem(page, (Item) htup, newlen, offnum,
@@ -2445,7 +2446,7 @@ _heap_unlock_tuple(void *data)
 
        htup = (HeapTupleHeader) PageGetItem(page, lp);
 
-       if (!TransactionIdEquals(htup->t_xmax, GetCurrentTransactionId()))
+       if (!TransactionIdEquals(HeapTupleHeaderGetXmax(htup), GetCurrentTransactionId()))
                elog(PANIC, "_heap_unlock_tuple: invalid xmax in rollback");
        htup->t_infomask &= ~HEAP_XMAX_UNLOGGED;
        htup->t_infomask |= HEAP_XMAX_INVALID;
index ae79ba85b1d3c456553a7a6df3cee9f455cae0db..d7d2ae85ec86e786d1a5f946afcbfac2a7377f00 100644 (file)
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Header: /cvsroot/pgsql/src/backend/access/transam/xlogutils.c,v 1.23 2002/03/31 06:26:29 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/access/transam/xlogutils.c,v 1.24 2002/06/15 19:54:23 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -73,7 +73,8 @@ XLogIsOwnerOfTuple(RelFileNode hnode, ItemPointer iptr,
        htup = (HeapTupleHeader) PageGetItem(page, lp);
 
        Assert(PageGetSUI(page) == ThisStartUpID);
-       if (!TransactionIdEquals(htup->t_xmin, xid) || htup->t_cmin != cid)
+       if (!TransactionIdEquals(HeapTupleHeaderGetXmin(htup), xid) ||
+               HeapTupleHeaderGetCmin(htup) != cid)
        {
                UnlockAndReleaseBuffer(buffer);
                return (-1);
@@ -137,8 +138,8 @@ XLogIsValidTuple(RelFileNode hnode, ItemPointer iptr)
        {
                if (htup->t_infomask & HEAP_XMIN_INVALID ||
                        (htup->t_infomask & HEAP_MOVED_IN &&
-                        TransactionIdDidAbort((TransactionId) htup->t_cmin)) ||
-                       TransactionIdDidAbort(htup->t_xmin))
+                        TransactionIdDidAbort(HeapTupleHeaderGetXvac(htup))) ||
+                       TransactionIdDidAbort(HeapTupleHeaderGetXmin(htup)))
                {
                        UnlockAndReleaseBuffer(buffer);
                        return (false);
index a0f7f9b4cdf6dccc73d531905e882b2487e74851..7522318acecd756de61970e380ee821218803eea 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/catalog/index.c,v 1.179 2002/05/21 22:05:53 tgl Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/catalog/index.c,v 1.180 2002/06/15 19:54:23 momjian Exp $
  *
  *
  * INTERFACE ROUTINES
@@ -1621,7 +1621,8 @@ IndexBuildHeapScan(Relation heapRelation,
                                         * (Consider INSERT followed by CREATE INDEX within a
                                         * transaction.)
                                         */
-                                       if (!TransactionIdIsCurrentTransactionId(heapTuple->t_data->t_xmin))
+                                       if (!TransactionIdIsCurrentTransactionId(
+                                                       HeapTupleHeaderGetXmin(heapTuple->t_data)))
                                                elog(ERROR, "IndexBuildHeapScan: concurrent insert in progress");
                                        indexIt = true;
                                        tupleIsAlive = true;
@@ -1635,7 +1636,8 @@ IndexBuildHeapScan(Relation heapRelation,
                                         * (Consider DELETE followed by CREATE INDEX within a
                                         * transaction.)
                                         */
-                                       if (!TransactionIdIsCurrentTransactionId(heapTuple->t_data->t_xmax))
+                                       if (!TransactionIdIsCurrentTransactionId(
+                                                       HeapTupleHeaderGetXmax(heapTuple->t_data)))
                                                elog(ERROR, "IndexBuildHeapScan: concurrent delete in progress");
                                        indexIt = true;
                                        tupleIsAlive = false;
index 8d90c81d3cbc847be21f381b6ec75994204dd320..71a5a561dea06555ded4a73ce8f223e4a08bb6a5 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/commands/sequence.c,v 1.79 2002/05/22 21:40:55 tgl Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/commands/sequence.c,v 1.80 2002/06/15 19:54:23 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -249,10 +249,10 @@ DefineSequence(CreateSeqStmt *seq)
                itemId = PageGetItemId((Page) page, FirstOffsetNumber);
                item = PageGetItem((Page) page, itemId);
 
-               ((HeapTupleHeader) item)->t_xmin = FrozenTransactionId;
+               HeapTupleHeaderSetXmin((HeapTupleHeader) item, FrozenTransactionId);
                ((HeapTupleHeader) item)->t_infomask |= HEAP_XMIN_COMMITTED;
 
-               tuple->t_data->t_xmin = FrozenTransactionId;
+               HeapTupleHeaderSetXmin(tuple->t_data, FrozenTransactionId);
                tuple->t_data->t_infomask |= HEAP_XMIN_COMMITTED;
        }
 
index 8bb66f0799d330c95d6e6232cef21eaa1fd7635c..acbcd4ce11331c00b4d2c2fee93a9bf145d7c3b9 100644 (file)
@@ -13,7 +13,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.227 2002/06/13 19:52:02 momjian Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.228 2002/06/15 19:54:23 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1080,11 +1080,11 @@ scan_heap(VRelStats *vacrelstats, Relation onerel,
                                         * Tuple is good.  Consider whether to replace its
                                         * xmin value with FrozenTransactionId.
                                         */
-                                       if (TransactionIdIsNormal(tuple.t_data->t_xmin) &&
-                                               TransactionIdPrecedes(tuple.t_data->t_xmin,
+                                       if (TransactionIdIsNormal(HeapTupleHeaderGetXmin(tuple.t_data)) &&
+                                               TransactionIdPrecedes(HeapTupleHeaderGetXmin(tuple.t_data),
                                                                                          FreezeLimit))
                                        {
-                                               tuple.t_data->t_xmin = FrozenTransactionId;
+                                               HeapTupleHeaderSetXmin(tuple.t_data, FrozenTransactionId);
                                                /* infomask should be okay already */
                                                Assert(tuple.t_data->t_infomask & HEAP_XMIN_COMMITTED);
                                                pgchanged = true;
@@ -1127,7 +1127,7 @@ scan_heap(VRelStats *vacrelstats, Relation onerel,
                                         * lock on the relation; shouldn't we raise an error?
                                         */
                                        elog(WARNING, "Rel %s: TID %u/%u: InsertTransactionInProgress %u - can't shrink relation",
-                                                relname, blkno, offnum, tuple.t_data->t_xmin);
+                                                relname, blkno, offnum, HeapTupleHeaderGetXmin(tuple.t_data));
                                        do_shrinking = false;
                                        break;
                                case HEAPTUPLE_DELETE_IN_PROGRESS:
@@ -1137,7 +1137,7 @@ scan_heap(VRelStats *vacrelstats, Relation onerel,
                                         * lock on the relation; shouldn't we raise an error?
                                         */
                                        elog(WARNING, "Rel %s: TID %u/%u: DeleteTransactionInProgress %u - can't shrink relation",
-                                                relname, blkno, offnum, tuple.t_data->t_xmax);
+                                                relname, blkno, offnum, HeapTupleHeaderGetXmax(tuple.t_data));
                                        do_shrinking = false;
                                        break;
                                default:
@@ -1513,8 +1513,8 @@ repair_frag(VRelStats *vacrelstats, Relation onerel,
 
                        if (!(tuple.t_data->t_infomask & HEAP_XMIN_COMMITTED))
                        {
-                               if ((TransactionId) tuple.t_data->t_cmin != myXID)
-                                       elog(ERROR, "Invalid XID in t_cmin");
+                               if (HeapTupleHeaderGetXvac(tuple.t_data) != myXID)
+                                       elog(ERROR, "Invalid XVAC in tuple header");
                                if (tuple.t_data->t_infomask & HEAP_MOVED_IN)
                                        elog(ERROR, "HEAP_MOVED_IN was not expected");
 
@@ -1558,7 +1558,8 @@ repair_frag(VRelStats *vacrelstats, Relation onerel,
                         * tuples to another places.
                         */
                        if ((tuple.t_data->t_infomask & HEAP_UPDATED &&
-                        !TransactionIdPrecedes(tuple.t_data->t_xmin, OldestXmin)) ||
+                        !TransactionIdPrecedes(HeapTupleHeaderGetXmin(tuple.t_data),
+                                               OldestXmin)) ||
                                (!(tuple.t_data->t_infomask & HEAP_XMAX_INVALID) &&
                                 !(ItemPointerEquals(&(tuple.t_self),
                                                                         &(tuple.t_data->t_ctid)))))
@@ -1675,7 +1676,8 @@ repair_frag(VRelStats *vacrelstats, Relation onerel,
 
                                        /* All done ? */
                                        if (!(tp.t_data->t_infomask & HEAP_UPDATED) ||
-                                       TransactionIdPrecedes(tp.t_data->t_xmin, OldestXmin))
+                                           TransactionIdPrecedes(HeapTupleHeaderGetXmin(tp.t_data),
+                                                                 OldestXmin))
                                                break;
 
                                        /* Well, try to find tuple with old row version */
@@ -1723,8 +1725,8 @@ repair_frag(VRelStats *vacrelstats, Relation onerel,
                                                 * latter, and we are too close to 6.5 release. -
                                                 * vadim 06/11/99
                                                 */
-                                               if (!(TransactionIdEquals(Ptp.t_data->t_xmax,
-                                                                                                 tp.t_data->t_xmin)))
+                                               if (!(TransactionIdEquals(HeapTupleHeaderGetXmax(Ptp.t_data),
+                                                                                                 HeapTupleHeaderGetXmin(tp.t_data))))
                                                {
                                                        if (freeCbuf)
                                                                ReleaseBuffer(Cbuf);
@@ -1749,14 +1751,13 @@ repair_frag(VRelStats *vacrelstats, Relation onerel,
                                                 * removed.
                                                 */
                                                if (Ptp.t_data->t_infomask & HEAP_UPDATED &&
-                                                       TransactionIdEquals(Ptp.t_data->t_xmin,
-                                                                                               Ptp.t_data->t_xmax))
+                                                       TransactionIdEquals(HeapTupleHeaderGetXmin(Ptp.t_data),
+                                                                                               HeapTupleHeaderGetXmax(Ptp.t_data)))
                                                {
-                                                       TransactionIdStore(myXID,
-                                                               (TransactionId *) &(Ptp.t_data->t_cmin));
                                                        Ptp.t_data->t_infomask &=
                                                                ~(HEAP_XMIN_COMMITTED | HEAP_XMIN_INVALID | HEAP_MOVED_IN);
                                                        Ptp.t_data->t_infomask |= HEAP_MOVED_OFF;
+                                                       HeapTupleHeaderSetXvac(Ptp.t_data, myXID);
                                                        WriteBuffer(Pbuf);
                                                        continue;
                                                }
@@ -1820,10 +1821,10 @@ repair_frag(VRelStats *vacrelstats, Relation onerel,
                                        /* NO ELOG(ERROR) TILL CHANGES ARE LOGGED */
                                        START_CRIT_SECTION();
 
-                                       TransactionIdStore(myXID, (TransactionId *) &(tuple.t_data->t_cmin));
                                        tuple.t_data->t_infomask &=
                                                ~(HEAP_XMIN_COMMITTED | HEAP_XMIN_INVALID | HEAP_MOVED_IN);
                                        tuple.t_data->t_infomask |= HEAP_MOVED_OFF;
+                                       HeapTupleHeaderSetXvac(tuple.t_data, myXID);
 
                                        /*
                                         * If this page was not used before - clean it.
@@ -1860,10 +1861,10 @@ repair_frag(VRelStats *vacrelstats, Relation onerel,
                                         * Update the state of the copied tuple, and store it
                                         * on the destination page.
                                         */
-                                       TransactionIdStore(myXID, (TransactionId *) &(newtup.t_data->t_cmin));
                                        newtup.t_data->t_infomask &=
                                                ~(HEAP_XMIN_COMMITTED | HEAP_XMIN_INVALID | HEAP_MOVED_OFF);
                                        newtup.t_data->t_infomask |= HEAP_MOVED_IN;
+                                       HeapTupleHeaderSetXvac(newtup.t_data, myXID);
                                        newoff = PageAddItem(ToPage, (Item) newtup.t_data, tuple_len,
                                                                                 InvalidOffsetNumber, LP_USED);
                                        if (newoff == InvalidOffsetNumber)
@@ -1989,10 +1990,10 @@ repair_frag(VRelStats *vacrelstats, Relation onerel,
                         * Mark new tuple as moved_in by vacuum and store vacuum XID
                         * in t_cmin !!!
                         */
-                       TransactionIdStore(myXID, (TransactionId *) &(newtup.t_data->t_cmin));
                        newtup.t_data->t_infomask &=
                                ~(HEAP_XMIN_COMMITTED | HEAP_XMIN_INVALID | HEAP_MOVED_OFF);
                        newtup.t_data->t_infomask |= HEAP_MOVED_IN;
+                       HeapTupleHeaderSetXvac(newtup.t_data, myXID);
 
                        /* add tuple to the page */
                        newoff = PageAddItem(ToPage, (Item) newtup.t_data, tuple_len,
@@ -2015,10 +2016,10 @@ repair_frag(VRelStats *vacrelstats, Relation onerel,
                         * Mark old tuple as moved_off by vacuum and store vacuum XID
                         * in t_cmin !!!
                         */
-                       TransactionIdStore(myXID, (TransactionId *) &(tuple.t_data->t_cmin));
                        tuple.t_data->t_infomask &=
                                ~(HEAP_XMIN_COMMITTED | HEAP_XMIN_INVALID | HEAP_MOVED_IN);
                        tuple.t_data->t_infomask |= HEAP_MOVED_OFF;
+                       HeapTupleHeaderSetXvac(tuple.t_data, myXID);
 
                        {
                                XLogRecPtr      recptr =
@@ -2066,8 +2067,8 @@ repair_frag(VRelStats *vacrelstats, Relation onerel,
                                tuple.t_data = (HeapTupleHeader) PageGetItem(page, itemid);
                                if (tuple.t_data->t_infomask & HEAP_XMIN_COMMITTED)
                                        continue;
-                               if ((TransactionId) tuple.t_data->t_cmin != myXID)
-                                       elog(ERROR, "Invalid XID in t_cmin (4)");
+                               if (HeapTupleHeaderGetXvac(tuple.t_data) != myXID)
+                                       elog(ERROR, "Invalid XVAC in tuple header (4)");
                                if (tuple.t_data->t_infomask & HEAP_MOVED_IN)
                                        elog(ERROR, "HEAP_MOVED_IN was not expected (2)");
                                if (tuple.t_data->t_infomask & HEAP_MOVED_OFF)
@@ -2204,8 +2205,8 @@ repair_frag(VRelStats *vacrelstats, Relation onerel,
                        tuple.t_data = (HeapTupleHeader) PageGetItem(page, itemid);
                        if (!(tuple.t_data->t_infomask & HEAP_XMIN_COMMITTED))
                        {
-                               if ((TransactionId) tuple.t_data->t_cmin != myXID)
-                                       elog(ERROR, "Invalid XID in t_cmin (2)");
+                               if (HeapTupleHeaderGetXvac(tuple.t_data) != myXID)
+                                       elog(ERROR, "Invalid XVAC in tuple header (2)");
                                if (tuple.t_data->t_infomask & HEAP_MOVED_IN)
                                {
                                        tuple.t_data->t_infomask |= HEAP_XMIN_COMMITTED;
@@ -2283,8 +2284,8 @@ repair_frag(VRelStats *vacrelstats, Relation onerel,
 
                                if (!(tuple.t_data->t_infomask & HEAP_XMIN_COMMITTED))
                                {
-                                       if ((TransactionId) tuple.t_data->t_cmin != myXID)
-                                               elog(ERROR, "Invalid XID in t_cmin (3)");
+                                       if (HeapTupleHeaderGetXvac(tuple.t_data) != myXID)
+                                               elog(ERROR, "Invalid XVAC in tuple header (3)");
                                        if (tuple.t_data->t_infomask & HEAP_MOVED_OFF)
                                        {
                                                itemid->lp_flags &= ~LP_USED;
index b7da9f5bbb05542c66e905c7586046e50a67d71b..4712c70cf92be9578f6837ef63d6985fc5a20554 100644 (file)
@@ -31,7 +31,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/commands/vacuumlazy.c,v 1.14 2002/04/02 01:03:05 tgl Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/commands/vacuumlazy.c,v 1.15 2002/06/15 19:54:24 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -332,11 +332,11 @@ lazy_scan_heap(Relation onerel, LVRelStats *vacrelstats,
                                         * assumption by momentarily acquiring exclusive lock,
                                         * but for the moment I see no need to.
                                         */
-                                       if (TransactionIdIsNormal(tuple.t_data->t_xmin) &&
-                                               TransactionIdPrecedes(tuple.t_data->t_xmin,
+                                       if (TransactionIdIsNormal(HeapTupleHeaderGetXmin(tuple.t_data)) &&
+                                               TransactionIdPrecedes(HeapTupleHeaderGetXmin(tuple.t_data),
                                                                                          FreezeLimit))
                                        {
-                                               tuple.t_data->t_xmin = FrozenTransactionId;
+                                               HeapTupleHeaderSetXmin(tuple.t_data, FrozenTransactionId);
                                                /* infomask should be okay already */
                                                Assert(tuple.t_data->t_infomask & HEAP_XMIN_COMMITTED);
                                                pgchanged = true;
index 31a2894b0ad5bd2ecea125210b1851e002ba8c57..284a5c7e5309e1d6c28b0558ca95b394886e4ba0 100644 (file)
@@ -16,7 +16,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/utils/time/tqual.c,v 1.54 2002/05/25 20:00:12 tgl Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/utils/time/tqual.c,v 1.55 2002/06/15 19:54:24 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -73,11 +73,11 @@ HeapTupleSatisfiesItself(HeapTupleHeader tuple)
 
                if (tuple->t_infomask & HEAP_MOVED_OFF)
                {
-                       if (TransactionIdIsCurrentTransactionId((TransactionId) tuple->t_cmin))
+                       if (TransactionIdIsCurrentTransactionId(HeapTupleHeaderGetXvac(tuple)))
                                return false;
-                       if (!TransactionIdIsInProgress((TransactionId) tuple->t_cmin))
+                       if (!TransactionIdIsInProgress(HeapTupleHeaderGetXvac(tuple)))
                        {
-                               if (TransactionIdDidCommit((TransactionId) tuple->t_cmin))
+                               if (TransactionIdDidCommit(HeapTupleHeaderGetXvac(tuple)))
                                {
                                        tuple->t_infomask |= HEAP_XMIN_INVALID;
                                        return false;
@@ -87,11 +87,11 @@ HeapTupleSatisfiesItself(HeapTupleHeader tuple)
                }
                else if (tuple->t_infomask & HEAP_MOVED_IN)
                {
-                       if (!TransactionIdIsCurrentTransactionId((TransactionId) tuple->t_cmin))
+                       if (!TransactionIdIsCurrentTransactionId(HeapTupleHeaderGetXvac(tuple)))
                        {
-                               if (TransactionIdIsInProgress((TransactionId) tuple->t_cmin))
+                               if (TransactionIdIsInProgress(HeapTupleHeaderGetXvac(tuple)))
                                        return false;
-                               if (TransactionIdDidCommit((TransactionId) tuple->t_cmin))
+                               if (TransactionIdDidCommit(HeapTupleHeaderGetXvac(tuple)))
                                        tuple->t_infomask |= HEAP_XMIN_COMMITTED;
                                else
                                {
@@ -100,21 +100,21 @@ HeapTupleSatisfiesItself(HeapTupleHeader tuple)
                                }
                        }
                }
-               else if (TransactionIdIsCurrentTransactionId(tuple->t_xmin))
+               else if (TransactionIdIsCurrentTransactionId(HeapTupleHeaderGetXmin(tuple)))
                {
                        if (tuple->t_infomask & HEAP_XMAX_INVALID)      /* xid invalid */
                                return true;
 
-                       Assert(TransactionIdIsCurrentTransactionId(tuple->t_xmax));
+                       Assert(TransactionIdIsCurrentTransactionId(HeapTupleHeaderGetXmax(tuple)));
 
                        if (tuple->t_infomask & HEAP_MARKED_FOR_UPDATE)
                                return true;
 
                        return false;
                }
-               else if (!TransactionIdDidCommit(tuple->t_xmin))
+               else if (!TransactionIdDidCommit(HeapTupleHeaderGetXmin(tuple)))
                {
-                       if (TransactionIdDidAbort(tuple->t_xmin))
+                       if (TransactionIdDidAbort(HeapTupleHeaderGetXmin(tuple)))
                                tuple->t_infomask |= HEAP_XMIN_INVALID; /* aborted */
                        return false;
                }
@@ -134,16 +134,16 @@ HeapTupleSatisfiesItself(HeapTupleHeader tuple)
                return false;                   /* updated by other */
        }
 
-       if (TransactionIdIsCurrentTransactionId(tuple->t_xmax))
+       if (TransactionIdIsCurrentTransactionId(HeapTupleHeaderGetXmax(tuple)))
        {
                if (tuple->t_infomask & HEAP_MARKED_FOR_UPDATE)
                        return true;
                return false;
        }
 
-       if (!TransactionIdDidCommit(tuple->t_xmax))
+       if (!TransactionIdDidCommit(HeapTupleHeaderGetXmax(tuple)))
        {
-               if (TransactionIdDidAbort(tuple->t_xmax))
+               if (TransactionIdDidAbort(HeapTupleHeaderGetXmax(tuple)))
                        tuple->t_infomask |= HEAP_XMAX_INVALID;         /* aborted */
                return true;
        }
@@ -209,11 +209,11 @@ HeapTupleSatisfiesNow(HeapTupleHeader tuple)
 
                if (tuple->t_infomask & HEAP_MOVED_OFF)
                {
-                       if (TransactionIdIsCurrentTransactionId((TransactionId) tuple->t_cmin))
+                       if (TransactionIdIsCurrentTransactionId(HeapTupleHeaderGetXvac(tuple)))
                                return false;
-                       if (!TransactionIdIsInProgress((TransactionId) tuple->t_cmin))
+                       if (!TransactionIdIsInProgress(HeapTupleHeaderGetXvac(tuple)))
                        {
-                               if (TransactionIdDidCommit((TransactionId) tuple->t_cmin))
+                               if (TransactionIdDidCommit(HeapTupleHeaderGetXvac(tuple)))
                                {
                                        tuple->t_infomask |= HEAP_XMIN_INVALID;
                                        return false;
@@ -223,11 +223,11 @@ HeapTupleSatisfiesNow(HeapTupleHeader tuple)
                }
                else if (tuple->t_infomask & HEAP_MOVED_IN)
                {
-                       if (!TransactionIdIsCurrentTransactionId((TransactionId) tuple->t_cmin))
+                       if (!TransactionIdIsCurrentTransactionId(HeapTupleHeaderGetXvac(tuple)))
                        {
-                               if (TransactionIdIsInProgress((TransactionId) tuple->t_cmin))
+                               if (TransactionIdIsInProgress(HeapTupleHeaderGetXvac(tuple)))
                                        return false;
-                               if (TransactionIdDidCommit((TransactionId) tuple->t_cmin))
+                               if (TransactionIdDidCommit(HeapTupleHeaderGetXvac(tuple)))
                                        tuple->t_infomask |= HEAP_XMIN_COMMITTED;
                                else
                                {
@@ -236,27 +236,27 @@ HeapTupleSatisfiesNow(HeapTupleHeader tuple)
                                }
                        }
                }
-               else if (TransactionIdIsCurrentTransactionId(tuple->t_xmin))
+               else if (TransactionIdIsCurrentTransactionId(HeapTupleHeaderGetXmin(tuple)))
                {
-                       if (tuple->t_cmin >= GetCurrentCommandId())
+                       if (HeapTupleHeaderGetCmin(tuple) >= GetCurrentCommandId())
                                return false;   /* inserted after scan started */
 
                        if (tuple->t_infomask & HEAP_XMAX_INVALID)      /* xid invalid */
                                return true;
 
-                       Assert(TransactionIdIsCurrentTransactionId(tuple->t_xmax));
+                       Assert(TransactionIdIsCurrentTransactionId(HeapTupleHeaderGetXmax(tuple)));
 
                        if (tuple->t_infomask & HEAP_MARKED_FOR_UPDATE)
                                return true;
 
-                       if (tuple->t_cmax >= GetCurrentCommandId())
+                       if (HeapTupleHeaderGetCmax(tuple) >= GetCurrentCommandId())
                                return true;    /* deleted after scan started */
                        else
                                return false;   /* deleted before scan started */
                }
-               else if (!TransactionIdDidCommit(tuple->t_xmin))
+               else if (!TransactionIdDidCommit(HeapTupleHeaderGetXmin(tuple)))
                {
-                       if (TransactionIdDidAbort(tuple->t_xmin))
+                       if (TransactionIdDidAbort(HeapTupleHeaderGetXmin(tuple)))
                                tuple->t_infomask |= HEAP_XMIN_INVALID; /* aborted */
                        return false;
                }
@@ -276,19 +276,19 @@ HeapTupleSatisfiesNow(HeapTupleHeader tuple)
                return false;
        }
 
-       if (TransactionIdIsCurrentTransactionId(tuple->t_xmax))
+       if (TransactionIdIsCurrentTransactionId(HeapTupleHeaderGetXmax(tuple)))
        {
                if (tuple->t_infomask & HEAP_MARKED_FOR_UPDATE)
                        return true;
-               if (tuple->t_cmax >= GetCurrentCommandId())
+               if (HeapTupleHeaderGetCmax(tuple) >= GetCurrentCommandId())
                        return true;            /* deleted after scan started */
                else
                        return false;           /* deleted before scan started */
        }
 
-       if (!TransactionIdDidCommit(tuple->t_xmax))
+       if (!TransactionIdDidCommit(HeapTupleHeaderGetXmax(tuple)))
        {
-               if (TransactionIdDidAbort(tuple->t_xmax))
+               if (TransactionIdDidAbort(HeapTupleHeaderGetXmax(tuple)))
                        tuple->t_infomask |= HEAP_XMAX_INVALID;         /* aborted */
                return true;
        }
@@ -326,11 +326,11 @@ HeapTupleSatisfiesToast(HeapTupleHeader tuple)
 
                if (tuple->t_infomask & HEAP_MOVED_OFF)
                {
-                       if (TransactionIdIsCurrentTransactionId((TransactionId) tuple->t_cmin))
+                       if (TransactionIdIsCurrentTransactionId(HeapTupleHeaderGetXvac(tuple)))
                                return false;
-                       if (!TransactionIdIsInProgress((TransactionId) tuple->t_cmin))
+                       if (!TransactionIdIsInProgress(HeapTupleHeaderGetXvac(tuple)))
                        {
-                               if (TransactionIdDidCommit((TransactionId) tuple->t_cmin))
+                               if (TransactionIdDidCommit(HeapTupleHeaderGetXvac(tuple)))
                                {
                                        tuple->t_infomask |= HEAP_XMIN_INVALID;
                                        return false;
@@ -340,11 +340,11 @@ HeapTupleSatisfiesToast(HeapTupleHeader tuple)
                }
                else if (tuple->t_infomask & HEAP_MOVED_IN)
                {
-                       if (!TransactionIdIsCurrentTransactionId((TransactionId) tuple->t_cmin))
+                       if (!TransactionIdIsCurrentTransactionId(HeapTupleHeaderGetXvac(tuple)))
                        {
-                               if (TransactionIdIsInProgress((TransactionId) tuple->t_cmin))
+                               if (TransactionIdIsInProgress(HeapTupleHeaderGetXvac(tuple)))
                                        return false;
-                               if (TransactionIdDidCommit((TransactionId) tuple->t_cmin))
+                               if (TransactionIdDidCommit(HeapTupleHeaderGetXvac(tuple)))
                                        tuple->t_infomask |= HEAP_XMIN_COMMITTED;
                                else
                                {
@@ -379,11 +379,11 @@ HeapTupleSatisfiesUpdate(HeapTuple htuple, CommandId curcid)
 
                if (tuple->t_infomask & HEAP_MOVED_OFF)
                {
-                       if (TransactionIdIsCurrentTransactionId((TransactionId) tuple->t_cmin))
+                       if (TransactionIdIsCurrentTransactionId(HeapTupleHeaderGetXvac(tuple)))
                                return HeapTupleInvisible;
-                       if (!TransactionIdIsInProgress((TransactionId) tuple->t_cmin))
+                       if (!TransactionIdIsInProgress(HeapTupleHeaderGetXvac(tuple)))
                        {
-                               if (TransactionIdDidCommit((TransactionId) tuple->t_cmin))
+                               if (TransactionIdDidCommit(HeapTupleHeaderGetXvac(tuple)))
                                {
                                        tuple->t_infomask |= HEAP_XMIN_INVALID;
                                        return HeapTupleInvisible;
@@ -393,11 +393,11 @@ HeapTupleSatisfiesUpdate(HeapTuple htuple, CommandId curcid)
                }
                else if (tuple->t_infomask & HEAP_MOVED_IN)
                {
-                       if (!TransactionIdIsCurrentTransactionId((TransactionId) tuple->t_cmin))
+                       if (!TransactionIdIsCurrentTransactionId(HeapTupleHeaderGetXvac(tuple)))
                        {
-                               if (TransactionIdIsInProgress((TransactionId) tuple->t_cmin))
+                               if (TransactionIdIsInProgress(HeapTupleHeaderGetXvac(tuple)))
                                        return HeapTupleInvisible;
-                               if (TransactionIdDidCommit((TransactionId) tuple->t_cmin))
+                               if (TransactionIdDidCommit(HeapTupleHeaderGetXvac(tuple)))
                                        tuple->t_infomask |= HEAP_XMIN_COMMITTED;
                                else
                                {
@@ -406,30 +406,30 @@ HeapTupleSatisfiesUpdate(HeapTuple htuple, CommandId curcid)
                                }
                        }
                }
-               else if (TransactionIdIsCurrentTransactionId(tuple->t_xmin))
+               else if (TransactionIdIsCurrentTransactionId(HeapTupleHeaderGetXmin(tuple)))
                {
-                       if (tuple->t_cmin >= curcid)
+                       if (HeapTupleHeaderGetCmin(tuple) >= curcid)
                                return HeapTupleInvisible;              /* inserted after scan
                                                                                                 * started */
 
                        if (tuple->t_infomask & HEAP_XMAX_INVALID)              /* xid invalid */
                                return HeapTupleMayBeUpdated;
 
-                       Assert(TransactionIdIsCurrentTransactionId(tuple->t_xmax));
+                       Assert(TransactionIdIsCurrentTransactionId(HeapTupleHeaderGetXmax(tuple)));
 
                        if (tuple->t_infomask & HEAP_MARKED_FOR_UPDATE)
                                return HeapTupleMayBeUpdated;
 
-                       if (tuple->t_cmax >= curcid)
+                       if (HeapTupleHeaderGetCmax(tuple) >= curcid)
                                return HeapTupleSelfUpdated;    /* updated after scan
                                                                                                 * started */
                        else
                                return HeapTupleInvisible;              /* updated before scan
                                                                                                 * started */
                }
-               else if (!TransactionIdDidCommit(tuple->t_xmin))
+               else if (!TransactionIdDidCommit(HeapTupleHeaderGetXmin(tuple)))
                {
-                       if (TransactionIdDidAbort(tuple->t_xmin))
+                       if (TransactionIdDidAbort(HeapTupleHeaderGetXmin(tuple)))
                                tuple->t_infomask |= HEAP_XMIN_INVALID; /* aborted */
                        return HeapTupleInvisible;
                }
@@ -449,20 +449,20 @@ HeapTupleSatisfiesUpdate(HeapTuple htuple, CommandId curcid)
                return HeapTupleUpdated;        /* updated by other */
        }
 
-       if (TransactionIdIsCurrentTransactionId(tuple->t_xmax))
+       if (TransactionIdIsCurrentTransactionId(HeapTupleHeaderGetXmax(tuple)))
        {
                if (tuple->t_infomask & HEAP_MARKED_FOR_UPDATE)
                        return HeapTupleMayBeUpdated;
-               if (tuple->t_cmax >= curcid)
+               if (HeapTupleHeaderGetCmax(tuple) >= curcid)
                        return HeapTupleSelfUpdated;            /* updated after scan
                                                                                                 * started */
                else
                        return HeapTupleInvisible;      /* updated before scan started */
        }
 
-       if (!TransactionIdDidCommit(tuple->t_xmax))
+       if (!TransactionIdDidCommit(HeapTupleHeaderGetXmax(tuple)))
        {
-               if (TransactionIdDidAbort(tuple->t_xmax))
+               if (TransactionIdDidAbort(HeapTupleHeaderGetXmax(tuple)))
                {
                        tuple->t_infomask |= HEAP_XMAX_INVALID;         /* aborted */
                        return HeapTupleMayBeUpdated;
@@ -510,11 +510,11 @@ HeapTupleSatisfiesDirty(HeapTupleHeader tuple)
 
                if (tuple->t_infomask & HEAP_MOVED_OFF)
                {
-                       if (TransactionIdIsCurrentTransactionId((TransactionId) tuple->t_cmin))
+                       if (TransactionIdIsCurrentTransactionId(HeapTupleHeaderGetXvac(tuple)))
                                return false;
-                       if (!TransactionIdIsInProgress((TransactionId) tuple->t_cmin))
+                       if (!TransactionIdIsInProgress(HeapTupleHeaderGetXvac(tuple)))
                        {
-                               if (TransactionIdDidCommit((TransactionId) tuple->t_cmin))
+                               if (TransactionIdDidCommit(HeapTupleHeaderGetXvac(tuple)))
                                {
                                        tuple->t_infomask |= HEAP_XMIN_INVALID;
                                        return false;
@@ -524,11 +524,11 @@ HeapTupleSatisfiesDirty(HeapTupleHeader tuple)
                }
                else if (tuple->t_infomask & HEAP_MOVED_IN)
                {
-                       if (!TransactionIdIsCurrentTransactionId((TransactionId) tuple->t_cmin))
+                       if (!TransactionIdIsCurrentTransactionId(HeapTupleHeaderGetXvac(tuple)))
                        {
-                               if (TransactionIdIsInProgress((TransactionId) tuple->t_cmin))
+                               if (TransactionIdIsInProgress(HeapTupleHeaderGetXvac(tuple)))
                                        return false;
-                               if (TransactionIdDidCommit((TransactionId) tuple->t_cmin))
+                               if (TransactionIdDidCommit(HeapTupleHeaderGetXvac(tuple)))
                                        tuple->t_infomask |= HEAP_XMIN_COMMITTED;
                                else
                                {
@@ -537,26 +537,26 @@ HeapTupleSatisfiesDirty(HeapTupleHeader tuple)
                                }
                        }
                }
-               else if (TransactionIdIsCurrentTransactionId(tuple->t_xmin))
+               else if (TransactionIdIsCurrentTransactionId(HeapTupleHeaderGetXmin(tuple)))
                {
                        if (tuple->t_infomask & HEAP_XMAX_INVALID)      /* xid invalid */
                                return true;
 
-                       Assert(TransactionIdIsCurrentTransactionId(tuple->t_xmax));
+                       Assert(TransactionIdIsCurrentTransactionId(HeapTupleHeaderGetXmax(tuple)));
 
                        if (tuple->t_infomask & HEAP_MARKED_FOR_UPDATE)
                                return true;
 
                        return false;
                }
-               else if (!TransactionIdDidCommit(tuple->t_xmin))
+               else if (!TransactionIdDidCommit(HeapTupleHeaderGetXmin(tuple)))
                {
-                       if (TransactionIdDidAbort(tuple->t_xmin))
+                       if (TransactionIdDidAbort(HeapTupleHeaderGetXmin(tuple)))
                        {
                                tuple->t_infomask |= HEAP_XMIN_INVALID;
                                return false;
                        }
-                       SnapshotDirty->xmin = tuple->t_xmin;
+                       SnapshotDirty->xmin = HeapTupleHeaderGetXmin(tuple);
                        /* XXX shouldn't we fall through to look at xmax? */
                        return true;            /* in insertion by other */
                }
@@ -577,22 +577,22 @@ HeapTupleSatisfiesDirty(HeapTupleHeader tuple)
                return false;                   /* updated by other */
        }
 
-       if (TransactionIdIsCurrentTransactionId(tuple->t_xmax))
+       if (TransactionIdIsCurrentTransactionId(HeapTupleHeaderGetXmax(tuple)))
        {
                if (tuple->t_infomask & HEAP_MARKED_FOR_UPDATE)
                        return true;
                return false;
        }
 
-       if (!TransactionIdDidCommit(tuple->t_xmax))
+       if (!TransactionIdDidCommit(HeapTupleHeaderGetXmax(tuple)))
        {
-               if (TransactionIdDidAbort(tuple->t_xmax))
+               if (TransactionIdDidAbort(HeapTupleHeaderGetXmax(tuple)))
                {
                        tuple->t_infomask |= HEAP_XMAX_INVALID;         /* aborted */
                        return true;
                }
                /* running xact */
-               SnapshotDirty->xmax = tuple->t_xmax;
+               SnapshotDirty->xmax = HeapTupleHeaderGetXmax(tuple);
                return true;                    /* in updation by other */
        }
 
@@ -641,11 +641,11 @@ HeapTupleSatisfiesSnapshot(HeapTupleHeader tuple, Snapshot snapshot)
 
                if (tuple->t_infomask & HEAP_MOVED_OFF)
                {
-                       if (TransactionIdIsCurrentTransactionId((TransactionId) tuple->t_cmin))
+                       if (TransactionIdIsCurrentTransactionId(HeapTupleHeaderGetXvac(tuple)))
                                return false;
-                       if (!TransactionIdIsInProgress((TransactionId) tuple->t_cmin))
+                       if (!TransactionIdIsInProgress(HeapTupleHeaderGetXvac(tuple)))
                        {
-                               if (TransactionIdDidCommit((TransactionId) tuple->t_cmin))
+                               if (TransactionIdDidCommit(HeapTupleHeaderGetXvac(tuple)))
                                {
                                        tuple->t_infomask |= HEAP_XMIN_INVALID;
                                        return false;
@@ -655,11 +655,11 @@ HeapTupleSatisfiesSnapshot(HeapTupleHeader tuple, Snapshot snapshot)
                }
                else if (tuple->t_infomask & HEAP_MOVED_IN)
                {
-                       if (!TransactionIdIsCurrentTransactionId((TransactionId) tuple->t_cmin))
+                       if (!TransactionIdIsCurrentTransactionId(HeapTupleHeaderGetXvac(tuple)))
                        {
-                               if (TransactionIdIsInProgress((TransactionId) tuple->t_cmin))
+                               if (TransactionIdIsInProgress(HeapTupleHeaderGetXvac(tuple)))
                                        return false;
-                               if (TransactionIdDidCommit((TransactionId) tuple->t_cmin))
+                               if (TransactionIdDidCommit(HeapTupleHeaderGetXvac(tuple)))
                                        tuple->t_infomask |= HEAP_XMIN_COMMITTED;
                                else
                                {
@@ -668,27 +668,27 @@ HeapTupleSatisfiesSnapshot(HeapTupleHeader tuple, Snapshot snapshot)
                                }
                        }
                }
-               else if (TransactionIdIsCurrentTransactionId(tuple->t_xmin))
+               else if (TransactionIdIsCurrentTransactionId(HeapTupleHeaderGetXmin(tuple)))
                {
-                       if (tuple->t_cmin >= snapshot->curcid)
+                       if (HeapTupleHeaderGetCmin(tuple) >= snapshot->curcid)
                                return false;   /* inserted after scan started */
 
                        if (tuple->t_infomask & HEAP_XMAX_INVALID)      /* xid invalid */
                                return true;
 
-                       Assert(TransactionIdIsCurrentTransactionId(tuple->t_xmax));
+                       Assert(TransactionIdIsCurrentTransactionId(HeapTupleHeaderGetXmax(tuple)));
 
                        if (tuple->t_infomask & HEAP_MARKED_FOR_UPDATE)
                                return true;
 
-                       if (tuple->t_cmax >= snapshot->curcid)
+                       if (HeapTupleHeaderGetCmax(tuple) >= snapshot->curcid)
                                return true;    /* deleted after scan started */
                        else
                                return false;   /* deleted before scan started */
                }
-               else if (!TransactionIdDidCommit(tuple->t_xmin))
+               else if (!TransactionIdDidCommit(HeapTupleHeaderGetXmin(tuple)))
                {
-                       if (TransactionIdDidAbort(tuple->t_xmin))
+                       if (TransactionIdDidAbort(HeapTupleHeaderGetXmin(tuple)))
                                tuple->t_infomask |= HEAP_XMIN_INVALID;
                        return false;
                }
@@ -700,15 +700,19 @@ HeapTupleSatisfiesSnapshot(HeapTupleHeader tuple, Snapshot snapshot)
         * By here, the inserting transaction has committed - have to check
         * when...
         */
-       if (TransactionIdFollowsOrEquals(tuple->t_xmin, snapshot->xmin))
+       if (TransactionIdFollowsOrEquals(HeapTupleHeaderGetXmin(tuple),
+                                        snapshot->xmin))
        {
                uint32          i;
 
-               if (TransactionIdFollowsOrEquals(tuple->t_xmin, snapshot->xmax))
+               if (TransactionIdFollowsOrEquals(HeapTupleHeaderGetXmin(tuple),
+                                                                                snapshot->xmax))
                        return false;
+
                for (i = 0; i < snapshot->xcnt; i++)
                {
-                       if (TransactionIdEquals(tuple->t_xmin, snapshot->xip[i]))
+                       if (TransactionIdEquals(HeapTupleHeaderGetXmin(tuple),
+                                               snapshot->xip[i]))
                                return false;
                }
        }
@@ -721,17 +725,17 @@ HeapTupleSatisfiesSnapshot(HeapTupleHeader tuple, Snapshot snapshot)
 
        if (!(tuple->t_infomask & HEAP_XMAX_COMMITTED))
        {
-               if (TransactionIdIsCurrentTransactionId(tuple->t_xmax))
+               if (TransactionIdIsCurrentTransactionId(HeapTupleHeaderGetXmax(tuple)))
                {
-                       if (tuple->t_cmax >= snapshot->curcid)
+                       if (HeapTupleHeaderGetCmax(tuple) >= snapshot->curcid)
                                return true;    /* deleted after scan started */
                        else
                                return false;   /* deleted before scan started */
                }
 
-               if (!TransactionIdDidCommit(tuple->t_xmax))
+               if (!TransactionIdDidCommit(HeapTupleHeaderGetXmax(tuple)))
                {
-                       if (TransactionIdDidAbort(tuple->t_xmax))
+                       if (TransactionIdDidAbort(HeapTupleHeaderGetXmax(tuple)))
                                tuple->t_infomask |= HEAP_XMAX_INVALID; /* aborted */
                        return true;
                }
@@ -743,15 +747,16 @@ HeapTupleSatisfiesSnapshot(HeapTupleHeader tuple, Snapshot snapshot)
        /*
         * OK, the deleting transaction committed too ... but when?
         */
-       if (TransactionIdFollowsOrEquals(tuple->t_xmax, snapshot->xmin))
+       if (TransactionIdFollowsOrEquals(HeapTupleHeaderGetXmax(tuple), snapshot->xmin))
        {
                uint32          i;
 
-               if (TransactionIdFollowsOrEquals(tuple->t_xmax, snapshot->xmax))
+               if (TransactionIdFollowsOrEquals(HeapTupleHeaderGetXmax(tuple),
+                                                snapshot->xmax))
                        return true;
                for (i = 0; i < snapshot->xcnt; i++)
                {
-                       if (TransactionIdEquals(tuple->t_xmax, snapshot->xip[i]))
+                       if (TransactionIdEquals(HeapTupleHeaderGetXmax(tuple), snapshot->xip[i]))
                                return true;
                }
        }
@@ -794,11 +799,11 @@ HeapTupleSatisfiesVacuum(HeapTupleHeader tuple, TransactionId OldestXmin)
                        return HEAPTUPLE_DEAD;
                else if (tuple->t_infomask & HEAP_MOVED_OFF)
                {
-                       if (TransactionIdIsCurrentTransactionId((TransactionId) tuple->t_cmin))
+                       if (TransactionIdIsCurrentTransactionId(HeapTupleHeaderGetXvac(tuple)))
                                return HEAPTUPLE_DELETE_IN_PROGRESS;
-                       if (TransactionIdIsInProgress((TransactionId) tuple->t_cmin))
+                       if (TransactionIdIsInProgress(HeapTupleHeaderGetXvac(tuple)))
                                return HEAPTUPLE_DELETE_IN_PROGRESS;
-                       if (TransactionIdDidCommit((TransactionId) tuple->t_cmin))
+                       if (TransactionIdDidCommit(HeapTupleHeaderGetXvac(tuple)))
                        {
                                tuple->t_infomask |= HEAP_XMIN_INVALID;
                                return HEAPTUPLE_DEAD;
@@ -807,11 +812,11 @@ HeapTupleSatisfiesVacuum(HeapTupleHeader tuple, TransactionId OldestXmin)
                }
                else if (tuple->t_infomask & HEAP_MOVED_IN)
                {
-                       if (TransactionIdIsCurrentTransactionId((TransactionId) tuple->t_cmin))
+                       if (TransactionIdIsCurrentTransactionId(HeapTupleHeaderGetXvac(tuple)))
                                return HEAPTUPLE_INSERT_IN_PROGRESS;
-                       if (TransactionIdIsInProgress((TransactionId) tuple->t_cmin))
+                       if (TransactionIdIsInProgress(HeapTupleHeaderGetXvac(tuple)))
                                return HEAPTUPLE_INSERT_IN_PROGRESS;
-                       if (TransactionIdDidCommit((TransactionId) tuple->t_cmin))
+                       if (TransactionIdDidCommit(HeapTupleHeaderGetXvac(tuple)))
                                tuple->t_infomask |= HEAP_XMIN_COMMITTED;
                        else
                        {
@@ -819,11 +824,11 @@ HeapTupleSatisfiesVacuum(HeapTupleHeader tuple, TransactionId OldestXmin)
                                return HEAPTUPLE_DEAD;
                        }
                }
-               else if (TransactionIdIsInProgress(tuple->t_xmin))
+               else if (TransactionIdIsInProgress(HeapTupleHeaderGetXmin(tuple)))
                        return HEAPTUPLE_INSERT_IN_PROGRESS;
-               else if (TransactionIdDidCommit(tuple->t_xmin))
+               else if (TransactionIdDidCommit(HeapTupleHeaderGetXmin(tuple)))
                        tuple->t_infomask |= HEAP_XMIN_COMMITTED;
-               else if (TransactionIdDidAbort(tuple->t_xmin))
+               else if (TransactionIdDidAbort(HeapTupleHeaderGetXmin(tuple)))
                {
                        tuple->t_infomask |= HEAP_XMIN_INVALID;
                        return HEAPTUPLE_DEAD;
@@ -858,9 +863,9 @@ HeapTupleSatisfiesVacuum(HeapTupleHeader tuple, TransactionId OldestXmin)
                 */
                if (!(tuple->t_infomask & HEAP_XMAX_COMMITTED))
                {
-                       if (TransactionIdIsInProgress(tuple->t_xmax))
+                       if (TransactionIdIsInProgress(HeapTupleHeaderGetXmax(tuple)))
                                return HEAPTUPLE_LIVE;
-                       if (TransactionIdDidCommit(tuple->t_xmax))
+                       if (TransactionIdDidCommit(HeapTupleHeaderGetXmax(tuple)))
                                tuple->t_infomask |= HEAP_XMAX_COMMITTED;
                        else                            /* it's either aborted or crashed */
                                tuple->t_infomask |= HEAP_XMAX_INVALID;
@@ -870,11 +875,11 @@ HeapTupleSatisfiesVacuum(HeapTupleHeader tuple, TransactionId OldestXmin)
 
        if (!(tuple->t_infomask & HEAP_XMAX_COMMITTED))
        {
-               if (TransactionIdIsInProgress(tuple->t_xmax))
+               if (TransactionIdIsInProgress(HeapTupleHeaderGetXmax(tuple)))
                        return HEAPTUPLE_DELETE_IN_PROGRESS;
-               else if (TransactionIdDidCommit(tuple->t_xmax))
+               else if (TransactionIdDidCommit(HeapTupleHeaderGetXmax(tuple)))
                        tuple->t_infomask |= HEAP_XMAX_COMMITTED;
-               else if (TransactionIdDidAbort(tuple->t_xmax))
+               else if (TransactionIdDidAbort(HeapTupleHeaderGetXmax(tuple)))
                {
                        tuple->t_infomask |= HEAP_XMAX_INVALID;
                        return HEAPTUPLE_LIVE;
@@ -896,7 +901,8 @@ HeapTupleSatisfiesVacuum(HeapTupleHeader tuple, TransactionId OldestXmin)
         * Deleter committed, but check special cases.
         */
 
-       if (TransactionIdEquals(tuple->t_xmin, tuple->t_xmax))
+       if (TransactionIdEquals(HeapTupleHeaderGetXmin(tuple),
+                               HeapTupleHeaderGetXmax(tuple)))
        {
                /*
                 * inserter also deleted it, so it was never visible to anyone
@@ -905,7 +911,7 @@ HeapTupleSatisfiesVacuum(HeapTupleHeader tuple, TransactionId OldestXmin)
                return HEAPTUPLE_DEAD;
        }
 
-       if (!TransactionIdPrecedes(tuple->t_xmax, OldestXmin))
+       if (!TransactionIdPrecedes(HeapTupleHeaderGetXmax(tuple), OldestXmin))
        {
                /* deleting xact is too recent, tuple could still be visible */
                return HEAPTUPLE_RECENTLY_DEAD;
index 4860c4ec57781c92a263b93e3123b5a663c28501..7806692f29a4baff7e8e5171ec8c45d97f74ad65 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: htup.h,v 1.52 2002/05/27 19:53:33 tgl Exp $
+ * $Id: htup.h,v 1.53 2002/06/15 19:54:24 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -16,6 +16,7 @@
 
 #include "storage/bufpage.h"
 #include "storage/relfilenode.h"
+#include "access/transam.h"
 
 
 /*
@@ -83,6 +84,87 @@ typedef struct HeapTupleHeaderData
 
 typedef HeapTupleHeaderData *HeapTupleHeader;
 
+/*
+ * information stored in t_infomask:
+ */
+#define HEAP_HASNULL                   0x0001  /* has null attribute(s) */
+#define HEAP_HASVARLENA                        0x0002  /* has variable length
+                                                                                * attribute(s) */
+#define HEAP_HASEXTERNAL               0x0004  /* has external stored
+                                                                                * attribute(s) */
+#define HEAP_HASCOMPRESSED             0x0008  /* has compressed stored
+                                                                                * attribute(s) */
+#define HEAP_HASEXTENDED               0x000C  /* the two above combined */
+
+#define HEAP_XMAX_UNLOGGED             0x0080  /* to lock tuple for update */
+                                                                               /* without logging */
+#define HEAP_XMIN_COMMITTED            0x0100  /* t_xmin committed */
+#define HEAP_XMIN_INVALID              0x0200  /* t_xmin invalid/aborted */
+#define HEAP_XMAX_COMMITTED            0x0400  /* t_xmax committed */
+#define HEAP_XMAX_INVALID              0x0800  /* t_xmax invalid/aborted */
+#define HEAP_MARKED_FOR_UPDATE 0x1000  /* marked for UPDATE */
+#define HEAP_UPDATED                   0x2000  /* this is UPDATEd version of row */
+#define HEAP_MOVED_OFF                 0x4000  /* moved to another place by
+                                                                                * vacuum */
+#define HEAP_MOVED_IN                  0x8000  /* moved from another place by
+                                                                                * vacuum */
+
+#define HEAP_XACT_MASK                 0xFFF0  /* visibility-related bits */
+
+
+
+/* HeapTupleHeader accessor macros */
+
+#define HeapTupleHeaderGetXmin(tup) \
+       ((tup)->t_xmin)
+
+#define HeapTupleHeaderGetXmax(tup) \
+       ((tup)->t_xmax)
+
+/* no AssertMacro, because this is read as a system-defined attribute also */
+#define HeapTupleHeaderGetCmin(tup) \
+( \
+       (tup)->t_cmin \
+)
+
+#define HeapTupleHeaderGetCmax(tup) \
+       ((tup)->t_cmax)
+
+#define HeapTupleHeaderGetXvac(tup) \
+( \
+       AssertMacro((tup)->t_infomask & (HEAP_MOVED_IN | HEAP_MOVED_OFF)), \
+       (TransactionId) (tup)->t_cmin \
+)
+
+
+#define HeapTupleHeaderSetXmin(tup, xid) \
+       (TransactionIdStore((xid), &(tup)->t_xmin))
+
+#define HeapTupleHeaderSetXminInvalid(tup) \
+       (StoreInvalidTransactionId(&(tup)->t_xmin))
+
+#define HeapTupleHeaderSetXmax(tup, xid) \
+       (TransactionIdStore((xid), &(tup)->t_xmax))
+
+#define HeapTupleHeaderSetXmaxInvalid(tup) \
+       (StoreInvalidTransactionId(&(tup)->t_xmax))
+
+#define HeapTupleHeaderSetCmin(tup, cid) \
+( \
+       AssertMacro(!((tup)->t_infomask & (HEAP_MOVED_IN | HEAP_MOVED_OFF))), \
+       (tup)->t_cmin = (cid) \
+)
+
+#define HeapTupleHeaderSetCmax(tup, cid) \
+       ((tup)->t_cmax = (cid))
+
+#define HeapTupleHeaderSetXvac(tup, xid) \
+( \
+       AssertMacro((tup)->t_infomask & (HEAP_MOVED_IN | HEAP_MOVED_OFF)), \
+       TransactionIdStore((xid), (TransactionId *) &((tup)->t_cmin)) \
+)
+
+
 /*
  * XLOG allows to store some information in high 4 bits of log
  * record xl_info field
@@ -250,33 +332,6 @@ typedef HeapTupleData *HeapTuple;
  */
 #define HeapTupleIsValid(tuple) PointerIsValid(tuple)
 
-/*
- * information stored in t_infomask:
- */
-#define HEAP_HASNULL                   0x0001  /* has null attribute(s) */
-#define HEAP_HASVARLENA                        0x0002  /* has variable length
-                                                                                * attribute(s) */
-#define HEAP_HASEXTERNAL               0x0004  /* has external stored
-                                                                                * attribute(s) */
-#define HEAP_HASCOMPRESSED             0x0008  /* has compressed stored
-                                                                                * attribute(s) */
-#define HEAP_HASEXTENDED               0x000C  /* the two above combined */
-
-#define HEAP_XMAX_UNLOGGED             0x0080  /* to lock tuple for update
-                                                                                * without logging */
-#define HEAP_XMIN_COMMITTED            0x0100  /* t_xmin committed */
-#define HEAP_XMIN_INVALID              0x0200  /* t_xmin invalid/aborted */
-#define HEAP_XMAX_COMMITTED            0x0400  /* t_xmax committed */
-#define HEAP_XMAX_INVALID              0x0800  /* t_xmax invalid/aborted */
-#define HEAP_MARKED_FOR_UPDATE 0x1000  /* marked for UPDATE */
-#define HEAP_UPDATED                   0x2000  /* this is UPDATEd version of row */
-#define HEAP_MOVED_OFF                 0x4000  /* moved to another place by
-                                                                                * vacuum */
-#define HEAP_MOVED_IN                  0x8000  /* moved from another place by
-                                                                                * vacuum */
-
-#define HEAP_XACT_MASK                 0xFFF0  /* visibility-related bits */
-
 #define HeapTupleNoNulls(tuple) \
                (!(((HeapTuple) (tuple))->t_data->t_infomask & HEAP_HASNULL))
 
index d33188ae285574d23ce3efe5ea7191c5bba17c8e..7533e5784361a404cf1d62e7e39303663204e108 100644 (file)
@@ -33,7 +33,7 @@
  *       ENHANCEMENTS, OR MODIFICATIONS.
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/pl/plperl/plperl.c,v 1.30 2002/05/05 00:03:29 tgl Exp $
+ *       $Header: /cvsroot/pgsql/src/pl/plperl/plperl.c,v 1.31 2002/06/15 19:54:24 momjian Exp $
  *
  **********************************************************************/
 
@@ -552,8 +552,8 @@ compile_plperl_function(Oid fn_oid, bool is_trigger)
                 * This is needed because CREATE OR REPLACE FUNCTION can modify the
                 * function's pg_proc entry without changing its OID.
                 ************************************************************/
-               uptodate = (prodesc->fn_xmin == procTup->t_data->t_xmin &&
-                                       prodesc->fn_cmin == procTup->t_data->t_cmin);
+               uptodate = (prodesc->fn_xmin == HeapTupleHeaderGetXmin(procTup->t_data) &&
+                                       prodesc->fn_cmin == HeapTupleHeaderGetCmin(procTup->t_data));
 
                if (!uptodate)
                {
@@ -586,8 +586,8 @@ compile_plperl_function(Oid fn_oid, bool is_trigger)
                        elog(ERROR, "plperl: out of memory");
                MemSet(prodesc, 0, sizeof(plperl_proc_desc));
                prodesc->proname = strdup(internal_proname);
-               prodesc->fn_xmin = procTup->t_data->t_xmin;
-               prodesc->fn_cmin = procTup->t_data->t_cmin;
+               prodesc->fn_xmin = HeapTupleHeaderGetXmin(procTup->t_data);
+               prodesc->fn_cmin = HeapTupleHeaderGetCmin(procTup->t_data);
 
                /************************************************************
                 * Lookup the pg_language tuple by Oid
index bb000b2aa93910a69917a4e1c13a4ab994f78cec..8f6ff87cf6caca506175b74a58288303c0a333d3 100644 (file)
@@ -3,7 +3,7 @@
  *                       procedural language
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/pl/plpgsql/src/pl_comp.c,v 1.41 2002/05/03 00:32:18 tgl Exp $
+ *       $Header: /cvsroot/pgsql/src/pl/plpgsql/src/pl_comp.c,v 1.42 2002/06/15 19:54:24 momjian Exp $
  *
  *       This software is copyrighted by Jan Wieck - Hamburg.
  *
@@ -188,8 +188,8 @@ plpgsql_compile(Oid fn_oid, int functype)
 
        function->fn_name = strdup(NameStr(procStruct->proname));
        function->fn_oid = fn_oid;
-       function->fn_xmin = procTup->t_data->t_xmin;
-       function->fn_cmin = procTup->t_data->t_cmin;
+       function->fn_xmin = HeapTupleHeaderGetXmin(procTup->t_data);
+       function->fn_cmin = HeapTupleHeaderGetCmin(procTup->t_data);
        function->fn_functype = functype;
 
        switch (functype)
index 75ace2e8854c6cd77c93002cac7bdc305ffe8526..3ca0b13ffd1f3b12d432089cf36069ac5527e094 100644 (file)
@@ -3,7 +3,7 @@
  *                       procedural language
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/pl/plpgsql/src/pl_handler.c,v 1.10 2001/10/25 05:50:20 momjian Exp $
+ *       $Header: /cvsroot/pgsql/src/pl/plpgsql/src/pl_handler.c,v 1.11 2002/06/15 19:54:24 momjian Exp $
  *
  *       This software is copyrighted by Jan Wieck - Hamburg.
  *
@@ -167,8 +167,8 @@ func_up_to_date(PLpgSQL_function * func)
                elog(ERROR, "plpgsql: cache lookup for proc %u failed",
                         func->fn_oid);
 
-       result = (func->fn_xmin == procTup->t_data->t_xmin &&
-                         func->fn_cmin == procTup->t_data->t_cmin);
+       result = (func->fn_xmin == HeapTupleHeaderGetXmin(procTup->t_data) &&
+                         func->fn_cmin == HeapTupleHeaderGetCmin(procTup->t_data));
 
        ReleaseSysCache(procTup);
 
index 9821f75335b4285c738fc4b70f83c8f6846a881c..4c88d93153520e4a24460fa165674617adbaca7c 100644 (file)
@@ -29,7 +29,7 @@
  * MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
  *
  * IDENTIFICATION
- *     $Header: /cvsroot/pgsql/src/pl/plpython/plpython.c,v 1.17 2002/03/29 19:06:27 tgl Exp $
+ *     $Header: /cvsroot/pgsql/src/pl/plpython/plpython.c,v 1.18 2002/06/15 19:54:24 momjian Exp $
  *
  *********************************************************************
  */
@@ -1030,8 +1030,8 @@ PLy_procedure_get(FunctionCallInfo fcinfo, bool is_trigger)
                if (proc->me != plproc)
                        elog(FATAL, "plpython: Aiieee, proc->me != plproc");
                /* did we find an up-to-date cache entry? */
-               if (proc->fn_xmin != procTup->t_data->t_xmin ||
-                       proc->fn_cmin != procTup->t_data->t_cmin)
+               if (proc->fn_xmin != HeapTupleHeaderGetXmin(procTup->t_data) ||
+                       proc->fn_cmin != HeapTupleHeaderGetCmin(procTup->t_data))
                {
                        Py_DECREF(plproc);
                        proc = NULL;
@@ -1075,8 +1075,8 @@ PLy_procedure_create(FunctionCallInfo fcinfo, bool is_trigger,
        proc = PLy_malloc(sizeof(PLyProcedure));
        proc->proname = PLy_malloc(strlen(procName) + 1);
        strcpy(proc->proname, procName);
-       proc->fn_xmin = procTup->t_data->t_xmin;
-       proc->fn_cmin = procTup->t_data->t_cmin;
+       proc->fn_xmin = HeapTupleHeaderGetXmin(procTup->t_data);
+       proc->fn_cmin = HeapTupleHeaderGetCmin(procTup->t_data);
        PLy_typeinfo_init(&proc->result);
        for (i = 0; i < FUNC_MAX_ARGS; i++)
                PLy_typeinfo_init(&proc->args[i]);
index ba17dc52b96f89b7537b3cf6257b0ad3a860e384..9e67e913ea48147521795ae72b807d2968160fbd 100644 (file)
@@ -31,7 +31,7 @@
  *       ENHANCEMENTS, OR MODIFICATIONS.
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/pl/tcl/pltcl.c,v 1.55 2002/05/24 21:04:34 tgl Exp $
+ *       $Header: /cvsroot/pgsql/src/pl/tcl/pltcl.c,v 1.56 2002/06/15 19:54:24 momjian Exp $
  *
  **********************************************************************/
 
@@ -987,8 +987,8 @@ compile_pltcl_function(Oid fn_oid, bool is_trigger)
 
                prodesc = (pltcl_proc_desc *) Tcl_GetHashValue(hashent);
 
-               uptodate = (prodesc->fn_xmin == procTup->t_data->t_xmin &&
-                                       prodesc->fn_cmin == procTup->t_data->t_cmin);
+               uptodate = (prodesc->fn_xmin == HeapTupleHeaderGetXmin(procTup->t_data) &&
+                                       prodesc->fn_cmin == HeapTupleHeaderGetCmin(procTup->t_data));
 
                if (!uptodate)
                {
@@ -1025,8 +1025,8 @@ compile_pltcl_function(Oid fn_oid, bool is_trigger)
                        elog(ERROR, "pltcl: out of memory");
                MemSet(prodesc, 0, sizeof(pltcl_proc_desc));
                prodesc->proname = strdup(internal_proname);
-               prodesc->fn_xmin = procTup->t_data->t_xmin;
-               prodesc->fn_cmin = procTup->t_data->t_cmin;
+               prodesc->fn_xmin = HeapTupleHeaderGetXmin(procTup->t_data);
+               prodesc->fn_cmin = HeapTupleHeaderGetCmin(procTup->t_data);
 
                /************************************************************
                 * Lookup the pg_language tuple by Oid