Good Bye, Time Travel!
authorVadim B. Mikheev
Sun, 2 Nov 1997 15:27:14 +0000 (15:27 +0000)
committerVadim B. Mikheev
Sun, 2 Nov 1997 15:27:14 +0000 (15:27 +0000)
36 files changed:
src/backend/access/common/heaptuple.c
src/backend/access/common/indextuple.c
src/backend/access/heap/heapam.c
src/backend/access/transam/transam.c
src/backend/access/transam/transsup.c
src/backend/access/transam/varsup.c
src/backend/access/transam/xact.c
src/backend/access/transam/xid.c
src/backend/catalog/Makefile
src/backend/catalog/heap.c
src/backend/catalog/index.c
src/backend/commands/vacuum.c
src/backend/nodes/copyfuncs.c
src/backend/parser/catalog_utils.c
src/backend/parser/gram.y
src/backend/parser/parse_query.c
src/backend/storage/buffer/buf_init.c
src/backend/storage/large_object/inv_api.c
src/backend/tcop/postgres.c
src/backend/utils/adt/char.c
src/backend/utils/cache/relcache.c
src/backend/utils/init/globals.c
src/backend/utils/time/tqual.c
src/include/access/heapam.h
src/include/access/htup.h
src/include/access/transam.h
src/include/access/valid.h
src/include/access/xact.h
src/include/catalog/catname.h
src/include/catalog/pg_attribute.h
src/include/catalog/pg_class.h
src/include/catalog/pg_time.h [deleted file]
src/include/catalog/pg_type.h
src/include/parser/parse_query.h
src/include/postgres.h
src/include/utils/tqual.h

index f124e564673cbacf5e14197b72fa3a6ea8657b6e..263f29cb68eb0d848e4cb484a61e72bf9567f10b 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/access/common/heaptuple.c,v 1.27 1997/09/24 17:44:24 thomas Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/access/common/heaptuple.c,v 1.28 1997/11/02 15:24:09 vadim Exp $
  *
  * NOTES
  *   The old interface functions have been converted to macros
@@ -115,7 +115,7 @@ DataFill(char *data,
         TupleDesc tupleDesc,
         Datum value[],
         char nulls[],
-        char *infomask,
+        uint16 *infomask,
         bits8 *bit)
 {
    bits8      *bitP = 0;
@@ -246,11 +246,6 @@ heap_attisnull(HeapTuple tup, int attnum)
            case MinCommandIdAttributeNumber:
            case MaxTransactionIdAttributeNumber:
            case MaxCommandIdAttributeNumber:
-           case ChainItemPointerAttributeNumber:
-           case AnchorItemPointerAttributeNumber:
-           case MinAbsoluteTimeAttributeNumber:
-           case MaxAbsoluteTimeAttributeNumber:
-           case VersionTypeAttributeNumber:
                break;
 
            case 0:
@@ -293,18 +288,6 @@ heap_sysattrlen(AttrNumber attno)
            return sizeof f->t_xmax;
        case MaxCommandIdAttributeNumber:
            return sizeof f->t_cmax;
-       case ChainItemPointerAttributeNumber:
-           return sizeof f->t_chain;
-       case MinAbsoluteTimeAttributeNumber:
-           return sizeof f->t_tmin;
-       case MaxAbsoluteTimeAttributeNumber:
-           return sizeof f->t_tmax;
-       case VersionTypeAttributeNumber:
-           return sizeof f->t_vtype;
-
-       case AnchorItemPointerAttributeNumber:
-           elog(WARN, "heap_sysattrlen: field t_anchor does not exist!");
-           return 0;
 
        default:
            elog(WARN, "sysattrlen: System attribute number %d unknown.", attno);
@@ -343,21 +326,6 @@ heap_sysattrbyval(AttrNumber attno)
        case MaxCommandIdAttributeNumber:
            byval = true;
            break;
-       case ChainItemPointerAttributeNumber:
-           byval = false;
-           break;
-       case AnchorItemPointerAttributeNumber:
-           byval = false;
-           break;
-       case MinAbsoluteTimeAttributeNumber:
-           byval = true;
-           break;
-       case MaxAbsoluteTimeAttributeNumber:
-           byval = true;
-           break;
-       case VersionTypeAttributeNumber:
-           byval = true;
-           break;
        default:
            byval = true;
            elog(WARN, "sysattrbyval: System attribute number %d unknown.",
@@ -377,7 +345,7 @@ heap_getsysattr(HeapTuple tup, Buffer b, int attnum)
 {
    switch (attnum)
    {
-           case SelfItemPointerAttributeNumber:
+       case SelfItemPointerAttributeNumber:
            return ((Datum) &tup->t_ctid);
        case ObjectIdAttributeNumber:
            return ((Datum) (long) tup->t_oid);
@@ -389,38 +357,6 @@ heap_getsysattr(HeapTuple tup, Buffer b, int attnum)
            return ((Datum) (long) tup->t_xmax);
        case MaxCommandIdAttributeNumber:
            return ((Datum) (long) tup->t_cmax);
-       case ChainItemPointerAttributeNumber:
-           return ((Datum) &tup->t_chain);
-       case AnchorItemPointerAttributeNumber:
-           elog(WARN, "heap_getsysattr: t_anchor does not exist!");
-           break;
-
-           /*
-            * For tmin and tmax, we need to do some extra work.  These
-            * don't get filled in until the vacuum cleaner runs (or we
-            * manage to flush a page after setting the value correctly
-            * below).  If the vacuum cleaner hasn't run yet, then the
-            * times stored in the tuple are wrong, and we need to look up
-            * the commit time of the transaction. We cache this value in
-            * the tuple to avoid doing the work more than once.
-            */
-
-       case MinAbsoluteTimeAttributeNumber:
-           if (!AbsoluteTimeIsBackwardCompatiblyValid(tup->t_tmin) &&
-               TransactionIdDidCommit(tup->t_xmin))
-               tup->t_tmin = TransactionIdGetCommitTime(tup->t_xmin);
-           return ((Datum) (long) tup->t_tmin);
-       case MaxAbsoluteTimeAttributeNumber:
-           if (!AbsoluteTimeIsBackwardCompatiblyReal(tup->t_tmax))
-           {
-               if (TransactionIdDidCommit(tup->t_xmax))
-                   tup->t_tmax = TransactionIdGetCommitTime(tup->t_xmax);
-               else
-                   tup->t_tmax = CURRENT_ABSTIME;
-           }
-           return ((Datum) (long) tup->t_tmax);
-       case VersionTypeAttributeNumber:
-           return ((Datum) (long) tup->t_vtype);
        default:
            elog(WARN, "heap_getsysattr: undefined attnum %d", attnum);
    }
@@ -858,8 +794,6 @@ heap_formtuple(TupleDesc tupleDescriptor,
    tuple->t_len = len;
    tuple->t_natts = numberOfAttributes;
    tuple->t_hoff = hoff;
-   tuple->t_tmin = INVALID_ABSTIME;
-   tuple->t_tmax = CURRENT_ABSTIME;
 
    DataFill((char *) tuple + tuple->t_hoff,
             tupleDescriptor,
@@ -868,6 +802,8 @@ heap_formtuple(TupleDesc tupleDescriptor,
             &tuple->t_infomask,
             (hasnull ? tuple->t_bits : NULL));
 
+   tuple->t_infomask |= HEAP_XMAX_INVALID;
+
    return (tuple);
 }
 
@@ -970,9 +906,9 @@ heap_modifytuple(HeapTuple tuple,
     * ----------------
     */
    infomask = newTuple->t_infomask;
-   memmove((char *) &newTuple->t_ctid, /* XXX */
-           (char *) &tuple->t_ctid,
-           ((char *) &tuple->t_hoff - (char *) &tuple->t_ctid));       /* XXX */
+   memmove((char *) &newTuple->t_oid, /* XXX */
+           (char *) &tuple->t_oid,
+           ((char *) &tuple->t_hoff - (char *) &tuple->t_oid));    /* XXX */
    newTuple->t_infomask = infomask;
    newTuple->t_natts = numberOfAttributes;     /* fix t_natts just in
                                                 * case */
@@ -1013,10 +949,11 @@ heap_addheader(uint32 natts, /* max domain index */
    tup = (HeapTuple) tp;
    MemSet((char *) tup, 0, len);
 
-   tup->t_len = (short) len;   /* XXX */
+   tup->t_len = len;
    tp += tup->t_hoff = hoff;
    tup->t_natts = natts;
    tup->t_infomask = 0;
+   tup->t_infomask |= HEAP_XMAX_INVALID;
 
    memmove(tp, structure, structlen);
 
index 8d3fba5909466adb51d95349042d01cc65fef85f..273de3b4c458f808c4b4ec9fb6d52bbb6d4fac40 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/access/common/indextuple.c,v 1.19 1997/09/18 20:19:37 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/access/common/indextuple.c,v 1.20 1997/11/02 15:24:11 vadim Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -52,7 +52,7 @@ index_formtuple(TupleDesc tupleDescriptor,
    int         i;
    unsigned short infomask = 0;
    bool        hasnull = false;
-   char        tupmask = 0;
+   uint16      tupmask = 0;
    int         numberOfAttributes = tupleDescriptor->natts;
 
    if (numberOfAttributes > MaxIndexAttributeNumber)
index 2537e7e777c9472330a748db2129ad1a6fcbcf5b..cc173f4fe8b76224ac2ecc6c593a62da2d66bca0 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/access/heap/heapam.c,v 1.20 1997/09/18 14:19:30 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/access/heap/heapam.c,v 1.21 1997/11/02 15:24:26 vadim Exp $
  *
  *
  * INTERFACE ROUTINES
@@ -1174,8 +1174,8 @@ heap_insert(Relation relation, HeapTuple tup)
    TransactionIdStore(GetCurrentTransactionId(), &(tup->t_xmin));
    tup->t_cmin = GetCurrentCommandId();
    StoreInvalidTransactionId(&(tup->t_xmax));
-   tup->t_tmin = INVALID_ABSTIME;
-   tup->t_tmax = CURRENT_ABSTIME;
+   tup->t_infomask &= ~(HEAP_XACT_MASK);
+   tup->t_infomask |= HEAP_XMAX_INVALID;
 
    doinsert(relation, tup);
 
@@ -1281,7 +1281,7 @@ heap_delete(Relation relation, ItemPointer tid)
     */
    TransactionIdStore(GetCurrentTransactionId(), &(tp->t_xmax));
    tp->t_cmax = GetCurrentCommandId();
-   ItemPointerSetInvalid(&tp->t_chain);
+   tp->t_infomask &= ~(HEAP_XMAX_COMMITTED | HEAP_XMAX_INVALID);
 
    /* ----------------
     *  invalidate caches
@@ -1410,9 +1410,8 @@ heap_replace(Relation relation, ItemPointer otid, HeapTuple tup)
    TransactionIdStore(GetCurrentTransactionId(), &(tup->t_xmin));
    tup->t_cmin = GetCurrentCommandId();
    StoreInvalidTransactionId(&(tup->t_xmax));
-   tup->t_tmin = INVALID_ABSTIME;
-   tup->t_tmax = CURRENT_ABSTIME;
-   ItemPointerSetInvalid(&tup->t_chain);
+   tup->t_infomask &= ~(HEAP_XACT_MASK);
+   tup->t_infomask |= HEAP_XMAX_INVALID;
 
    /* ----------------
     *  insert new item
@@ -1438,7 +1437,7 @@ heap_replace(Relation relation, ItemPointer otid, HeapTuple tup)
     */
    TransactionIdStore(GetCurrentTransactionId(), &(tp->t_xmax));
    tp->t_cmax = GetCurrentCommandId();
-   tp->t_chain = tup->t_ctid;
+   tp->t_infomask &= ~(HEAP_XMAX_COMMITTED | HEAP_XMAX_INVALID);
 
    /* ----------------
     *  invalidate caches
index 91c7ec8a3d2d5cf1c8c86f99fd4ccfe441df2c2b..02b7fa97693e17f22367cf478d94b071fdc7f7a7 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/access/transam/transam.c,v 1.13 1997/09/08 21:41:42 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/access/transam/transam.c,v 1.14 1997/11/02 15:24:42 vadim Exp $
  *
  * NOTES
  *   This file contains the high level access-method interface to the
@@ -41,17 +41,14 @@ TransactionLogUpdate(TransactionId transactionId,
  */
 
 Relation   LogRelation = (Relation) NULL;
-Relation   TimeRelation = (Relation) NULL;
 Relation   VariableRelation = (Relation) NULL;
 
 /* ----------------
  *     global variables holding cached transaction id's and statuses.
  * ----------------
  */
-TransactionId cachedGetCommitTimeXid;
-AbsoluteTime cachedGetCommitTime;
-TransactionId cachedTestXid;
-XidStatus  cachedTestXidStatus;
+TransactionId  cachedTestXid;
+XidStatus      cachedTestXidStatus;
 
 /* ----------------
  *     transaction system constants
@@ -118,7 +115,7 @@ SetRecoveryCheckingEnabled(bool state)
 #endif
 
 /* ----------------------------------------------------------------
- *     postgres log/time access method interface
+ *     postgres log access method interface
  *
  *     TransactionLogTest
  *     TransactionLogUpdate
@@ -204,7 +201,6 @@ TransactionLogUpdate(TransactionId transactionId,       /* trans id to update */
 {
    BlockNumber blockNumber;
    bool        fail = false;   /* success/failure */
-   AbsoluteTime currentTime;   /* time of this transaction */
 
    /* ----------------
     *  during initialization we don't record any updates.
@@ -213,12 +209,6 @@ TransactionLogUpdate(TransactionId transactionId,      /* trans id to update */
    if (!RelationIsValid(LogRelation))
        return;
 
-   /* ----------------
-    *  get the transaction commit time
-    * ----------------
-    */
-   currentTime = getSystemTime();
-
    /* ----------------
     *  update the log relation
     * ----------------
@@ -234,91 +224,12 @@ TransactionLogUpdate(TransactionId transactionId,     /* trans id to update */
     *   update (invalidate) our single item TransactionLogTest cache.
     * ----------------
     */
-   TransactionIdStore(transactionId, &cachedTestXid);
-   cachedTestXidStatus = status;
-
-   /* ----------------
-    *  now we update the time relation, if necessary
-    *  (we only record commit times)
-    * ----------------
-    */
-   if (RelationIsValid(TimeRelation) && status == XID_COMMIT)
+   if (status != XID_COMMIT)
    {
-       TransComputeBlockNumber(TimeRelation, transactionId, &blockNumber);
-       TransBlockNumberSetCommitTime(TimeRelation,
-                                     blockNumber,
-                                     transactionId,
-                                     currentTime,
-                                     &fail);
-       /* ----------------
-        *   update (invalidate) our single item GetCommitTime cache.
-        * ----------------
-        */
-       TransactionIdStore(transactionId, &cachedGetCommitTimeXid);
-       cachedGetCommitTime = currentTime;
+       TransactionIdStore(transactionId, &cachedTestXid);
+       cachedTestXidStatus = status;
    }
 
-   /* ----------------
-    *  now we update the "last committed transaction" field
-    *  in the variable relation if we are recording a commit.
-    * ----------------
-    */
-   if (RelationIsValid(VariableRelation) && status == XID_COMMIT)
-       UpdateLastCommittedXid(transactionId);
-}
-
-/* --------------------------------
- *     TransactionIdGetCommitTime
- * --------------------------------
- */
-
-AbsoluteTime                   /* commit time of transaction id */
-TransactionIdGetCommitTime(TransactionId transactionId) /* transaction id to
-                                                        * test */
-{
-   BlockNumber blockNumber;
-   AbsoluteTime commitTime;    /* commit time */
-   bool        fail = false;   /* success/failure */
-
-   /* ----------------
-    *   return invalid if we aren't running yet...
-    * ----------------
-    */
-   if (!RelationIsValid(TimeRelation))
-       return INVALID_ABSTIME;
-
-   /* ----------------
-    *   before going to the buffer manager, check our single
-    *   item cache to see if we didn't just get the commit time
-    *   a moment ago.
-    * ----------------
-    */
-   if (TransactionIdEquals(transactionId, cachedGetCommitTimeXid))
-       return cachedGetCommitTime;
-
-   /* ----------------
-    *  compute the item pointer corresponding to the
-    *  page containing our transaction commit time
-    * ----------------
-    */
-   TransComputeBlockNumber(TimeRelation, transactionId, &blockNumber);
-   commitTime = TransBlockNumberGetCommitTime(TimeRelation,
-                                              blockNumber,
-                                              transactionId,
-                                              &fail);
-
-   /* ----------------
-    *  update our cache and return the transaction commit time
-    * ----------------
-    */
-   if (!fail)
-   {
-       TransactionIdStore(transactionId, &cachedGetCommitTimeXid);
-       cachedGetCommitTime = commitTime;
-       return commitTime;
-   }
-   else
-       return INVALID_ABSTIME;
 }
 
 /* ----------------------------------------------------------------
@@ -472,7 +383,6 @@ void
 InitializeTransactionLog(void)
 {
    Relation    logRelation;
-   Relation    timeRelation;
    MemoryContext oldContext;
 
    /* ----------------
@@ -503,20 +413,17 @@ InitializeTransactionLog(void)
     * ----------------
     */
    logRelation = heap_openr(LogRelationName);
-   timeRelation = heap_openr(TimeRelationName);
    VariableRelation = heap_openr(VariableRelationName);
    /* ----------------
     *   XXX TransactionLogUpdate requires that LogRelation
-    *   and TimeRelation are valid so we temporarily set
-    *   them so we can initialize things properly.
-    *   This could be done cleaner.
+    *   is valid so we temporarily set it so we can initialize 
+    *   things properly. This could be done cleaner.
     * ----------------
     */
    LogRelation = logRelation;
-   TimeRelation = timeRelation;
 
    /* ----------------
-    *   if we have a virgin database, we initialize the log and time
+    *   if we have a virgin database, we initialize the log 
     *   relation by committing the AmiTransactionId (id 512) and we
     *   initialize the variable relation by setting the next available
     *   transaction id to FirstTransactionId (id 514).  OID initialization
@@ -529,10 +436,12 @@ InitializeTransactionLog(void)
 
        /* ----------------
         *  SOMEDAY initialize the information stored in
-        *          the headers of the log/time/variable relations.
+        *          the headers of the log/variable relations.
         * ----------------
         */
        TransactionLogUpdate(AmiTransactionId, XID_COMMIT);
+       TransactionIdStore(AmiTransactionId, &cachedTestXid);
+       cachedTestXidStatus = XID_COMMIT;
        VariableRelationPutNextXid(FirstTransactionId);
 
    }
@@ -547,7 +456,6 @@ InitializeTransactionLog(void)
        TransRecover(logRelation);
    }
    LogRelation = (Relation) NULL;
-   TimeRelation = (Relation) NULL;
    SpinRelease(OidGenLockId);
 
    /* ----------------
@@ -561,7 +469,6 @@ InitializeTransactionLog(void)
     * ----------------
     */
    LogRelation = logRelation;
-   TimeRelation = timeRelation;
 
    /* ----------------
     *  restore the memory context to the previous context
@@ -651,15 +558,7 @@ TransactionIdCommit(TransactionId transactionId)
    if (AMI_OVERRIDE)
        return;
 
-   /*
-    * Within TransactionLogUpdate we call UpdateLastCommited() which
-    * assumes we have exclusive access to pg_variable. Therefore we need
-    * to get exclusive access before calling TransactionLogUpdate. -mer
-    * 18 Aug 1992
-    */
-   SpinAcquire(OidGenLockId);
    TransactionLogUpdate(transactionId, XID_COMMIT);
-   SpinRelease(OidGenLockId);
 }
 
 /*
index 227c47ef54664cbe6ac143abcf51fdaccb1fdf5d..a80b769982a7f08c2715b08771963e35c4185422 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/access/transam/Attic/transsup.c,v 1.13 1997/09/08 21:41:46 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/access/transam/Attic/transsup.c,v 1.14 1997/11/02 15:24:44 vadim Exp $
  *
  * NOTES
  *   This file contains support functions for the high
 #include 
 #include 
 
-static AbsoluteTime
-TransBlockGetCommitTime(Block tblock,
-                       TransactionId transactionId);
 static XidStatus
 TransBlockGetXidStatus(Block tblock,
                       TransactionId transactionId);
 static void
-TransBlockSetCommitTime(Block tblock,
-                  TransactionId transactionId, AbsoluteTime commitTime);
-static void
 TransBlockSetXidStatus(Block tblock,
                       TransactionId transactionId, XidStatus xstatus);
 
@@ -73,8 +67,6 @@ TransComputeBlockNumber(Relation relation,        /* relation to test */
     */
    if (relation == LogRelation)
        itemsPerBlock = TP_NumXidStatusPerBlock;
-   else if (relation == TimeRelation)
-       itemsPerBlock = TP_NumTimePerBlock;
    else
        elog(WARN, "TransComputeBlockNumber: unknown relation");
 
@@ -197,15 +189,6 @@ TransBlockGetXidStatus(Block tblock,
    bits8       bit2;
    BitIndex    offset;
 
-   /* ----------------
-    *  sanity check
-    * ----------------
-    */
-   if (tblock == NULL)
-   {
-       return XID_INVALID;
-   }
-
    /* ----------------
     *  calculate the index into the transaction data where
     *  our transaction status is located
@@ -248,13 +231,6 @@ TransBlockSetXidStatus(Block tblock,
    Index       index;
    BitIndex    offset;
 
-   /* ----------------
-    *  sanity check
-    * ----------------
-    */
-   if (tblock == NULL)
-       return;
-
    /* ----------------
     *  calculate the index into the transaction data where
     *  we sould store our transaction status.
@@ -295,90 +271,6 @@ TransBlockSetXidStatus(Block tblock,
    }
 }
 
-/* --------------------------------
- *     TransBlockGetCommitTime
- *
- *     This returns the transaction commit time for the
- *     specified transaction id in the trans block.
- * --------------------------------
- */
-static AbsoluteTime
-TransBlockGetCommitTime(Block tblock,
-                       TransactionId transactionId)
-{
-   Index       index;
-   AbsoluteTime *timeArray;
-
-   /* ----------------
-    *  sanity check
-    * ----------------
-    */
-   if (tblock == NULL)
-       return INVALID_ABSTIME;
-
-   /* ----------------
-    *  calculate the index into the transaction data where
-    *  our transaction commit time is located
-    *
-    *  XXX this will be replaced soon when we move to the
-    *      new transaction id scheme -cim 3/23/90
-    *
-    *  The new scheme is here. -mer 5/24/92
-    * ----------------
-    */
-   index = transactionId % TP_NumTimePerBlock;
-
-   /* ----------------
-    *  return the commit time to the caller
-    * ----------------
-    */
-   timeArray = (AbsoluteTime *) tblock;
-   return (AbsoluteTime)
-       timeArray[index];
-}
-
-/* --------------------------------
- *     TransBlockSetCommitTime
- *
- *     This sets the commit time of the specified transaction
- * --------------------------------
- */
-static void
-TransBlockSetCommitTime(Block tblock,
-                       TransactionId transactionId,
-                       AbsoluteTime commitTime)
-{
-   Index       index;
-   AbsoluteTime *timeArray;
-
-   /* ----------------
-    *  sanity check
-    * ----------------
-    */
-   if (tblock == NULL)
-       return;
-
-
-   /* ----------------
-    *  calculate the index into the transaction data where
-    *  we sould store our transaction status.
-    *
-    *  XXX this will be replaced soon when we move to the
-    *      new transaction id scheme -cim 3/23/90
-    *
-    *  The new scheme is here.  -mer 5/24/92
-    * ----------------
-    */
-   index = transactionId % TP_NumTimePerBlock;
-
-   /* ----------------
-    *  store the transaction commit time at the specified index
-    * ----------------
-    */
-   timeArray = (AbsoluteTime *) tblock;
-   timeArray[index] = commitTime;
-}
-
 /* ----------------------------------------------------------------
  *                transam i/o support routines
  * ----------------------------------------------------------------
@@ -494,121 +386,6 @@ TransBlockNumberSetXidStatus(Relation relation,
    RelationUnsetLockForWrite(relation);
 }
 
-/* --------------------------------
- *     TransBlockNumberGetCommitTime
- * --------------------------------
- */
-AbsoluteTime
-TransBlockNumberGetCommitTime(Relation relation,
-                             BlockNumber blockNumber,
-                             TransactionId xid,
-                             bool *failP)
-{
-   Buffer      buffer;         /* buffer associated with block */
-   Block       block;          /* block containing commit time */
-   bool        localfail;      /* bool used if failP = NULL */
-   AbsoluteTime xtime;         /* commit time */
-
-   /* ----------------
-    *  SOMEDAY place a read lock on the time relation
-    *
-    *  That someday is today 5 Aug. 1991 -mer
-    * ----------------
-    */
-   RelationSetLockForRead(relation);
-
-   /* ----------------
-    *  get the block containing the transaction information
-    * ----------------
-    */
-   buffer = ReadBuffer(relation, blockNumber);
-   block = BufferGetBlock(buffer);
-
-   /* ----------------
-    *  get the commit time from the block
-    *  note, for now we always return false in failP.
-    * ----------------
-    */
-   if (failP == NULL)
-       failP = &localfail;
-   (*failP) = false;
-
-   xtime = TransBlockGetCommitTime(block, xid);
-
-   /* ----------------
-    *  release the buffer and return the commit time
-    * ----------------
-    */
-   ReleaseBuffer(buffer);
-
-   /* ----------------
-    *  SOMEDAY release our lock on the time relation
-    * ----------------
-    */
-   RelationUnsetLockForRead(relation);
-
-   if ((*failP) == false)
-       return xtime;
-   else
-       return INVALID_ABSTIME;
-
-}
-
-/* --------------------------------
- *     TransBlockNumberSetCommitTime
- * --------------------------------
- */
-void
-TransBlockNumberSetCommitTime(Relation relation,
-                             BlockNumber blockNumber,
-                             TransactionId xid,
-                             AbsoluteTime xtime,
-                             bool *failP)
-{
-   Buffer      buffer;         /* buffer associated with block */
-   Block       block;          /* block containing commit time */
-   bool        localfail;      /* bool used if failP = NULL */
-
-   /* ----------------
-    *  SOMEDAY gain exclusive access to the time relation
-    *
-    *  That someday is today 5 Aug. 1991 -mer
-    * ----------------
-    */
-   RelationSetLockForWrite(relation);
-
-   /* ----------------
-    *  get the block containing our commit time
-    * ----------------
-    */
-   buffer = ReadBuffer(relation, blockNumber);
-   block = BufferGetBlock(buffer);
-
-   /* ----------------
-    *  attempt to update the commit time of the transaction on the block.
-    *  if we are successful, write the block. otherwise release the buffer.
-    *  note, for now we always return false in failP.
-    * ----------------
-    */
-   if (failP == NULL)
-       failP = &localfail;
-   (*failP) = false;
-
-   TransBlockSetCommitTime(block, xid, xtime);
-
-   if ((*failP) == false)
-       WriteBuffer(buffer);
-   else
-       ReleaseBuffer(buffer);
-
-   /* ----------------
-    *  SOMEDAY release our lock on the time relation
-    * ----------------
-    */
-   RelationUnsetLockForWrite(relation);
-
-}
-
 /* --------------------------------
  *     TransGetLastRecordedTransaction
  * --------------------------------
index 7fdbfd3bcc8c706b99fe78ef9bca57a5b3bf46fb..e082350cb668eaddd8a604d4ee72f2dfc7523397 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/access/transam/varsup.c,v 1.12 1997/09/08 21:41:49 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/access/transam/varsup.c,v 1.13 1997/11/02 15:24:45 vadim Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -23,9 +23,7 @@
 static void GetNewObjectIdBlock(Oid *oid_return, int oid_block_size);
 static void VariableRelationGetNextOid(Oid *oid_return);
 static void VariableRelationGetNextXid(TransactionId *xidP);
-static void VariableRelationPutLastXid(TransactionId xid);
 static void VariableRelationPutNextOid(Oid *oidP);
-static void VariableRelationGetLastXid(TransactionId *xidP);
 
 /* ---------------------
  *     spin lock for oid generation
@@ -80,49 +78,6 @@ VariableRelationGetNextXid(TransactionId *xidP)
    ReleaseBuffer(buf);
 }
 
-/* --------------------------------
- *     VariableRelationGetLastXid
- * --------------------------------
- */
-static void
-VariableRelationGetLastXid(TransactionId *xidP)
-{
-   Buffer      buf;
-   VariableRelationContents var;
-
-   /* ----------------
-    * We assume that a spinlock has been acquire to guarantee
-    * exclusive access to the variable relation.
-    * ----------------
-    */
-
-   /* ----------------
-    *  do nothing before things are initialized
-    * ----------------
-    */
-   if (!RelationIsValid(VariableRelation))
-       return;
-
-   /* ----------------
-    *  read the variable page, get the the lastXid field and
-    *  release the buffer
-    * ----------------
-    */
-   buf = ReadBuffer(VariableRelation, 0);
-
-   if (!BufferIsValid(buf))
-   {
-       SpinRelease(OidGenLockId);
-       elog(WARN, "VariableRelationGetNextXid: ReadBuffer failed");
-   }
-
-   var = (VariableRelationContents) BufferGetBlock(buf);
-
-   TransactionIdStore(var->lastXidData, xidP);
-
-   ReleaseBuffer(buf);
-}
-
 /* --------------------------------
  *     VariableRelationPutNextXid
  * --------------------------------
@@ -169,49 +124,6 @@ VariableRelationPutNextXid(TransactionId xid)
    SetBufferWriteMode(flushmode);
 }
 
-/* --------------------------------
- *     VariableRelationPutLastXid
- * --------------------------------
- */
-static void
-VariableRelationPutLastXid(TransactionId xid)
-{
-   Buffer      buf;
-   VariableRelationContents var;
-
-   /* ----------------
-    * We assume that a spinlock has been acquire to guarantee
-    * exclusive access to the variable relation.
-    * ----------------
-    */
-
-   /* ----------------
-    *  do nothing before things are initialized
-    * ----------------
-    */
-   if (!RelationIsValid(VariableRelation))
-       return;
-
-   /* ----------------
-    *  read the variable page, update the lastXid field and
-    *  force the page back out to disk.
-    * ----------------
-    */
-   buf = ReadBuffer(VariableRelation, 0);
-
-   if (!BufferIsValid(buf))
-   {
-       SpinRelease(OidGenLockId);
-       elog(WARN, "VariableRelationPutLastXid: ReadBuffer failed");
-   }
-
-   var = (VariableRelationContents) BufferGetBlock(buf);
-
-   TransactionIdStore(xid, &(var->lastXidData));
-
-   WriteBuffer(buf);
-}
-
 /* --------------------------------
  *     VariableRelationGetNextOid
  * --------------------------------
@@ -449,40 +361,6 @@ GetNewTransactionId(TransactionId *xid)
    prefetched_xid_count--;
 }
 
-/* ----------------
- *     UpdateLastCommittedXid
- * ----------------
- */
-
-void
-UpdateLastCommittedXid(TransactionId xid)
-{
-   TransactionId lastid;
-
-
-   /*
-    * we assume that spinlock OidGenLockId has been acquired prior to
-    * entering this function
-    */
-
-   /* ----------------
-    *  get the "last committed" transaction id from
-    *  the variable relation page.
-    * ----------------
-    */
-   VariableRelationGetLastXid(&lastid);
-
-   /* ----------------
-    *  if the transaction id is greater than the last committed
-    *  transaction then we update the last committed transaction
-    *  in the variable relation.
-    * ----------------
-    */
-   if (TransactionIdIsLessThan(lastid, xid))
-       VariableRelationPutLastXid(xid);
-
-}
-
 /* ----------------------------------------------------------------
  *                 object id generation support
  * ----------------------------------------------------------------
index e5e1057bba20fc8e0dab71c3e6e7b64a7e13d53a..ea5f1146d888209a5557fd45f1a1edd788cd4dd6 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/access/transam/xact.c,v 1.16 1997/09/08 21:41:52 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/access/transam/xact.c,v 1.17 1997/11/02 15:24:46 vadim Exp $
  *
  * NOTES
  *     Transaction aborts can now occur two ways:
@@ -497,7 +497,7 @@ CommandCounterIncrement()
    if (CurrentTransactionStateData.commandId == FirstCommandId)
    {
        CommandIdCounterOverflowFlag = true;
-       elog(WARN, "You may only have 65535 commands per transaction");
+       elog(WARN, "You may only have 2^32-1 commands per transaction");
    }
 
    CurrentTransactionStateData.scanCommandId =
index b60c6ba7ef36b53d63743ba5f303c44cea2170f8..4a0799ac2ca5a1b13d29fa9c040b69ca6ae955be 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/access/transam/Attic/xid.c,v 1.10 1997/09/08 21:41:56 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/access/transam/Attic/xid.c,v 1.11 1997/11/02 15:24:47 vadim Exp $
  *
  * OLD COMMENTS
  * XXX WARNING
@@ -30,18 +30,6 @@ extern TransactionId DisabledTransactionId;
 extern TransactionId AmiTransactionId;
 extern TransactionId FirstTransactionId;
 
-/* ----------------------------------------------------------------
- *     TransactionIdIsValid
- *
- *     Macro-ize me.
- * ----------------------------------------------------------------
- */
-bool
-TransactionIdIsValid(TransactionId transactionId)
-{
-   return ((bool) (transactionId != NullTransactionId));
-}
-
 /* XXX char16 name for catalogs */
 TransactionId
 xidin(char *representation)
@@ -65,32 +53,6 @@ xidout(TransactionId transactionId)
 
 }
 
-/* ----------------------------------------------------------------
- *     StoreInvalidTransactionId
- *
- *     Maybe do away with Pointer types in these routines.
- *     Macro-ize this one.
- * ----------------------------------------------------------------
- */
-void
-StoreInvalidTransactionId(TransactionId *destination)
-{
-   *destination = NullTransactionId;
-}
-
-/* ----------------------------------------------------------------
- *     TransactionIdStore
- *
- *     Macro-ize this one.
- * ----------------------------------------------------------------
- */
-void
-TransactionIdStore(TransactionId transactionId,
-                  TransactionId *destination)
-{
-   *destination = transactionId;
-}
-
 /* ----------------------------------------------------------------
  *     TransactionIdEquals
  * ----------------------------------------------------------------
index e7228199cf879957776f147fe0d2aa539884ad7b..c2d729075386329e43281e50a33896dccde05371 100644 (file)
@@ -4,7 +4,7 @@
 #    Makefile for catalog
 #
 # IDENTIFICATION
-#    $Header: /cvsroot/pgsql/src/backend/catalog/Makefile,v 1.2 1996/11/03 23:26:58 scrappy Exp $
+#    $Header: /cvsroot/pgsql/src/backend/catalog/Makefile,v 1.3 1997/11/02 15:24:52 vadim Exp $
 #
 #-------------------------------------------------------------------------
 
@@ -30,7 +30,7 @@ GENBKI= ./genbki.sh
 GLOBALBKI_SRCS= $(addprefix ../../include/catalog/, \
                   pg_database.h pg_demon.h pg_magic.h pg_defaults.h \
                   pg_variable.h pg_server.h pg_user.h pg_hosts.h \
-                  pg_group.h pg_log.h pg_time.h \
+                  pg_group.h pg_log.h \
                  )
 
 LOCALBKI_SRCS= $(addprefix ../../include/catalog/, \
index 6c485d112e24560ae8c13c632087ec9efdbd7452..9dbec5ce2ebfc34b96f6352b6b71382ec50ed43a 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.29 1997/09/18 20:20:11 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.30 1997/11/02 15:24:55 vadim Exp $
  *
  * INTERFACE ROUTINES
  *     heap_creatr()           - Create an uncataloged heap relation
@@ -108,7 +108,7 @@ static FormData_pg_attribute a3 = {
 
 static FormData_pg_attribute a4 = {
    0xffffffff, {"cmin"}, 29l, 0l, sizeof(CommandId),
-   MinCommandIdAttributeNumber, 0, -1, '\001', '\0', 's', '\0', '\0'
+   MinCommandIdAttributeNumber, 0, -1, '\001', '\0', 'i', '\0', '\0'
 };
 
 static FormData_pg_attribute a5 = {
@@ -118,36 +118,11 @@ static FormData_pg_attribute a5 = {
 
 static FormData_pg_attribute a6 = {
    0xffffffff, {"cmax"}, 29l, 0l, sizeof(CommandId),
-   MaxCommandIdAttributeNumber, 0, -1, '\001', '\0', 's', '\0', '\0'
-};
-
-static FormData_pg_attribute a7 = {
-   0xffffffff, {"chain"}, 27l, 0l, sizeof(ItemPointerData),
-   ChainItemPointerAttributeNumber, 0, -1, '\0', '\0', 'i', '\0', '\0'
-};
-
-static FormData_pg_attribute a8 = {
-   0xffffffff, {"anchor"}, 27l, 0l, sizeof(ItemPointerData),
-   AnchorItemPointerAttributeNumber, 0, -1, '\0', '\0', 'i', '\0', '\0'
-};
-
-static FormData_pg_attribute a9 = {
-   0xffffffff, {"tmin"}, 702l, 0l, sizeof(AbsoluteTime),
-   MinAbsoluteTimeAttributeNumber, 0, -1, '\001', '\0', 'i', '\0', '\0'
-};
-
-static FormData_pg_attribute a10 = {
-   0xffffffff, {"tmax"}, 702l, 0l, sizeof(AbsoluteTime),
-   MaxAbsoluteTimeAttributeNumber, 0, -1, '\001', '\0', 'i', '\0', '\0'
-};
-
-static FormData_pg_attribute a11 = {
-   0xffffffff, {"vtype"}, 18l, 0l, sizeof(char),
-   VersionTypeAttributeNumber, 0, -1, '\001', '\0', 'c', '\0', '\0'
+   MaxCommandIdAttributeNumber, 0, -1, '\001', '\0', 'i', '\0', '\0'
 };
 
 static AttributeTupleForm HeapAtt[] =
-{&a1, &a2, &a3, &a4, &a5, &a6, &a7, &a8, &a9, &a10, &a11};
+{&a1, &a2, &a3, &a4, &a5, &a6};
 
 /* ----------------------------------------------------------------
  *             XXX END OF UGLY HARD CODED BADNESS XXX
index 454a7795cc7b9922e84bc7e42b01b51eda5ad514..9ebfc53ac6c74a43814f8fdbcbd2d8224331775b 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/catalog/index.c,v 1.24 1997/10/27 11:52:43 vadim Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/catalog/index.c,v 1.25 1997/11/02 15:25:01 vadim Exp $
  *
  *
  * INTERFACE ROUTINES
@@ -119,14 +119,9 @@ static FormData_pg_attribute sysatts[] = {
    {0l, {"ctid"}, 27l, 0l, 6, -1, 0, -1, '\0', '\0', 'i', '\0', '\0'},
    {0l, {"oid"}, 26l, 0l, 4, -2, 0, -1, '\001', '\0', 'i', '\0', '\0'},
    {0l, {"xmin"}, 28l, 0l, 4, -3, 0, -1, '\0', '\0', 'i', '\0', '\0'},
-   {0l, {"cmin"}, 29l, 0l, 2, -4, 0, -1, '\001', '\0', 's', '\0', '\0'},
+   {0l, {"cmin"}, 29l, 0l, 4, -4, 0, -1, '\001', '\0', 'i', '\0', '\0'},
    {0l, {"xmax"}, 28l, 0l, 4, -5, 0, -1, '\0', '\0', 'i', '\0', '\0'},
-   {0l, {"cmax"}, 29l, 0l, 2, -6, 0, -1, '\001', '\0', 's', '\0', '\0'},
-   {0l, {"chain"}, 27l, 0l, 6, -7, 0, -1, '\0', '\0', 'i', '\0', '\0'},
-   {0l, {"anchor"}, 27l, 0l, 6, -8, 0, -1, '\0', '\0', 'i', '\0', '\0'},
-   {0l, {"tmin"}, 702l, 0l, 4, -9, 0, -1, '\001', '\0', 'i', '\0', '\0'},
-   {0l, {"tmax"}, 702l, 0l, 4, -10, 0, -1, '\001', '\0', 'i', '\0', '\0'},
-   {0l, {"vtype"}, 18l, 0l, 1, -11, 0, -1, '\001', '\0', 'c', '\0', '\0'},
+   {0l, {"cmax"}, 29l, 0l, 4, -6, 0, -1, '\001', '\0', 'i', '\0', '\0'},
 };
 
 /* ----------------------------------------------------------------
index 3af40713b305d4a906682db904cb4943f6e35d6a..1ce7b0998dbd0d8410feb7372297b41cae564f97 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.48 1997/09/22 07:12:33 vadim Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.49 1997/11/02 15:25:07 vadim Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -742,54 +742,60 @@ vc_scanheap(VRelStats *vacrelstats, Relation onerel,
            htup = (HeapTuple) PageGetItem(page, itemid);
            tupgone = false;
 
-           if (!AbsoluteTimeIsBackwardCompatiblyValid(htup->t_tmin) &&
-               TransactionIdIsValid((TransactionId) htup->t_xmin))
+           if (!(htup->t_infomask & HEAP_XMIN_COMMITTED))
            {
-
-               if (TransactionIdDidAbort(htup->t_xmin))
-               {
+               if (htup->t_infomask & HEAP_XMIN_INVALID)
                    tupgone = true;
-               }
-               else if (TransactionIdDidCommit(htup->t_xmin))
-               {
-                   htup->t_tmin = TransactionIdGetCommitTime(htup->t_xmin);
-                   pgchanged = true;
-               }
-               else if (!TransactionIdIsInProgress(htup->t_xmin))
-               {
-
-                   /*
-                    * Not Aborted, Not Committed, Not in Progress - so it
-                    * from crashed process. - vadim 11/26/96
-                    */
-                   ncrash++;
-                   tupgone = true;
-               }
                else
                {
-                   elog(NOTICE, "Rel %s: TID %u/%u: InsertTransactionInProgress %u - can't shrink relation",
-                        relname, blkno, offnum, htup->t_xmin);
-                   do_shrinking = false;
+                   if (TransactionIdDidAbort(htup->t_xmin))
+                       tupgone = true;
+                   else if (TransactionIdDidCommit(htup->t_xmin))
+                   {
+                       htup->t_infomask |= HEAP_XMIN_COMMITTED;
+                       pgchanged = true;
+                   }
+                   else if (!TransactionIdIsInProgress(htup->t_xmin))
+                   {
+                       /*
+                        * Not Aborted, Not Committed, Not in Progress - 
+                        * so it's from crashed process. - vadim 11/26/96
+                        */
+                       ncrash++;
+                       tupgone = true;
+                   }
+                   else
+                   {
+                       elog(NOTICE, "Rel %s: TID %u/%u: InsertTransactionInProgress %u - can't shrink relation",
+                            relname, blkno, offnum, htup->t_xmin);
+                       do_shrinking = false;
+                   }
                }
            }
 
-           if (TransactionIdIsValid((TransactionId) htup->t_xmax))
+           /* 
+            * here we are concerned about tuples with xmin committed 
+            * and xmax unknown or committed
+            */
+           if (htup->t_infomask & HEAP_XMIN_COMMITTED && 
+               !(htup->t_infomask & HEAP_XMAX_INVALID))
            {
-               if (TransactionIdDidAbort(htup->t_xmax))
+               if (htup->t_infomask & HEAP_XMAX_COMMITTED)
+                   tupgone = true;
+               else if (TransactionIdDidAbort(htup->t_xmax))
                {
-                   StoreInvalidTransactionId(&(htup->t_xmax));
+                   htup->t_infomask |= HEAP_XMAX_INVALID;
                    pgchanged = true;
                }
                else if (TransactionIdDidCommit(htup->t_xmax))
                    tupgone = true;
                else if (!TransactionIdIsInProgress(htup->t_xmax))
                {
-
                    /*
                     * Not Aborted, Not Committed, Not in Progress - so it
                     * from crashed process. - vadim 06/02/97
                     */
-                   StoreInvalidTransactionId(&(htup->t_xmax));
+                   htup->t_infomask |= HEAP_XMAX_INVALID;;
                    pgchanged = true;
                }
                else
@@ -800,18 +806,6 @@ vc_scanheap(VRelStats *vacrelstats, Relation onerel,
                }
            }
 
-           /*
-            * Is it possible at all ? - vadim 11/26/96
-            */
-           if (!TransactionIdIsValid((TransactionId) htup->t_xmin))
-           {
-               elog(NOTICE, "Rel %s: TID %u/%u: INSERT_TRANSACTION_ID IS INVALID. \
-DELETE_TRANSACTION_ID_VALID %d, TUPGONE %d.",
-                    relname, blkno, offnum,
-                    TransactionIdIsValid((TransactionId) htup->t_xmax),
-                    tupgone);
-           }
-
            /*
             * It's possibly! But from where it comes ? And should we fix
             * it ?  - vadim 11/28/96
@@ -973,7 +967,6 @@ vc_rpfheap(VRelStats *vacrelstats, Relation onerel,
 {
    TransactionId myXID;
    CommandId   myCID;
-   AbsoluteTime myCTM = 0;
    Buffer      buf,
                ToBuf;
    int         nblocks,
@@ -1187,9 +1180,9 @@ vc_rpfheap(VRelStats *vacrelstats, Relation onerel,
            TransactionIdStore(myXID, &(newtup->t_xmin));
            newtup->t_cmin = myCID;
            StoreInvalidTransactionId(&(newtup->t_xmax));
-           newtup->t_tmin = INVALID_ABSTIME;
-           newtup->t_tmax = CURRENT_ABSTIME;
-           ItemPointerSetInvalid(&newtup->t_chain);
+           /* set xmin to unknown and xmax to invalid */
+           newtup->t_infomask &= ~(HEAP_XACT_MASK);
+           newtup->t_infomask |= HEAP_XMAX_INVALID;
 
            /* add tuple to the page */
            newoff = PageAddItem(ToPage, (Item) newtup, tlen,
@@ -1209,7 +1202,8 @@ failed to add item with len = %u to page %u (free space %u, nusd %u, noff %u)",
            /* now logically delete end-tuple */
            TransactionIdStore(myXID, &(htup->t_xmax));
            htup->t_cmax = myCID;
-           memmove((char *) &(htup->t_chain), (char *) &(newtup->t_ctid), sizeof(newtup->t_ctid));
+           /* set xmax to unknown */
+           htup->t_infomask &= ~(HEAP_XMAX_INVALID | HEAP_XMAX_COMMITTED);
 
            ToVpd->vpd_nusd++;
            nmoved++;
@@ -1278,11 +1272,10 @@ failed to add item with len = %u to page %u (free space %u, nusd %u, noff %u)",
        FlushBufferPool(!TransactionFlushEnabled());
        TransactionIdCommit(myXID);
        FlushBufferPool(!TransactionFlushEnabled());
-       myCTM = TransactionIdGetCommitTime(myXID);
    }
 
    /*
-    * Clean uncleaned reapped pages from Vvpl list and set commit' times
+    * Clean uncleaned reapped pages from Vvpl list and set xmin committed
     * for inserted tuples
     */
    nchkmvd = 0;
@@ -1316,7 +1309,7 @@ failed to add item with len = %u to page %u (free space %u, nusd %u, noff %u)",
                htup = (HeapTuple) PageGetItem(page, itemid);
                if (TransactionIdEquals((TransactionId) htup->t_xmin, myXID))
                {
-                   htup->t_tmin = myCTM;
+                   htup->t_infomask |= HEAP_XMIN_COMMITTED;
                    ntups++;
                }
            }
index 6b86c5fffc8ef49dbfecd4b1d65b242fd037c434..4c46c03e5bdc6d5062b8bbc4cd00c615a278e4ee 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/nodes/copyfuncs.c,v 1.13 1997/09/19 06:52:49 vadim Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/nodes/copyfuncs.c,v 1.14 1997/11/02 15:25:11 vadim Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1470,21 +1470,8 @@ _copyRangeTblEntry(RangeTblEntry *from)
        newnode->relname = pstrdup(from->relname);
    if (from->refname)
        newnode->refname = pstrdup(from->refname);
-   if (from->timeRange)
-   {
-       newnode->timeRange = makeNode(TimeRange);
-       if (from->timeRange->startDate)
-           newnode->timeRange->startDate = pstrdup(from->timeRange->startDate);
-       else
-           newnode->timeRange->startDate = NULL;
-       if (from->timeRange->endDate)
-           newnode->timeRange->endDate = pstrdup(from->timeRange->endDate);
-       else
-           newnode->timeRange->endDate = NULL;
-       newnode->timeQual = makeTimeRange(newnode->timeRange->startDate,
-                                         newnode->timeRange->endDate,
-                       ((newnode->timeRange->endDate == NULL) ? 0 : 1));
-   }
+   newnode->timeRange = NULL;
+   newnode->timeQual = NULL;
 
    return newnode;
 }
index 884dece094df72705d355304bc5ea722b296bb5f..e3784597732e71e9ae7f72b642a63967f34d91c1 100644 (file)
@@ -6,7 +6,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/parser/Attic/catalog_utils.c,v 1.28 1997/09/18 20:21:05 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/parser/Attic/catalog_utils.c,v 1.29 1997/11/02 15:25:19 vadim Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -75,21 +75,6 @@ struct
    {
        "cmax", MaxCommandIdAttributeNumber
    },
-   {
-       "chain", ChainItemPointerAttributeNumber
-   },
-   {
-       "anchor", AnchorItemPointerAttributeNumber
-   },
-   {
-       "tmin", MinAbsoluteTimeAttributeNumber
-   },
-   {
-       "tmax", MaxAbsoluteTimeAttributeNumber
-   },
-   {
-       "vtype", VersionTypeAttributeNumber
-   }
 };
 
 #define SPECIALS (sizeof(special_attr)/sizeof(*special_attr))
@@ -101,11 +86,6 @@ static char *attnum_type[SPECIALS] = {
    "cid",
    "xid",
    "cid",
-   "tid",
-   "tid",
-   "abstime",
-   "abstime",
-   "char"
 };
 
 #define MAXFARGS 8             /* max # args to a c or postquel function */
index 3b52333b66e199815c11c3adac1e9d53df47a3c3..a11fcdf6646c4ae71b74a016e32435b5c31a08d2 100644 (file)
@@ -10,7 +10,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 1.61 1997/10/31 00:50:39 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 1.62 1997/11/02 15:25:26 vadim Exp $
  *
  * HISTORY
  *   AUTHOR            DATE            MAJOR EVENT
@@ -2391,12 +2391,14 @@ time_range:  '[' opt_range_start ',' opt_range_end ']'
                    $$ = makeNode(TimeRange);
                    $$->startDate = $2;
                    $$->endDate = $4;
+                   elog (WARN, "parser: TimeRange is not supported");
                }
        | '[' date ']'
                {
                    $$ = makeNode(TimeRange);
                    $$->startDate = $2;
                    $$->endDate = NULL;
+                   elog (WARN, "parser: TimeRange is not supported");
                }
        ;
 
@@ -3387,7 +3389,6 @@ relation_name:    SpecialRuleRelation
                    /* disallow refs to magic system tables */
                    if (strcmp(LogRelationName, $1) == 0
                       || strcmp(VariableRelationName, $1) == 0
-                      || strcmp(TimeRelationName, $1) == 0
                       || strcmp(MagicRelationName, $1) == 0)
                        elog(WARN,"%s cannot be accessed by users",$1);
                    else
index 088fe180f18943af566ec03b3a0ad3bca7b51b98..70f9763e024e30e28c4dc5fea7ced9c49217c04e 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/parser/Attic/parse_query.c,v 1.21 1997/09/08 21:46:08 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/parser/Attic/parse_query.c,v 1.22 1997/11/02 15:25:30 vadim Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -243,67 +243,6 @@ expandAll(ParseState *pstate, char *relname, char *refname, int *this_resno)
    return (te_head);
 }
 
-TimeQual
-makeTimeRange(char *datestring1,
-             char *datestring2,
-             int timecode)     /* 0 = snapshot , 1 = timerange */
-{
-   TimeQual    qual = NULL;
-   AbsoluteTime t1,
-               t2;
-
-   switch (timecode)
-   {
-       case 0:
-           if (datestring1 == NULL)
-           {
-               elog(WARN, "MakeTimeRange: bad snapshot arg");
-           }
-           t1 = nabstimein(datestring1);
-           if (!AbsoluteTimeIsValid(t1))
-           {
-               elog(WARN, "bad snapshot time: \"%s\"",
-                    datestring1);
-           }
-           qual = TimeFormSnapshotTimeQual(t1);
-           break;
-       case 1:
-           if (datestring1 == NULL)
-           {
-               t1 = NOSTART_ABSTIME;
-           }
-           else
-           {
-               t1 = nabstimein(datestring1);
-               if (!AbsoluteTimeIsValid(t1))
-               {
-                   elog(WARN,
-                        "bad range start time: \"%s\"",
-                        datestring1);
-               }
-           }
-           if (datestring2 == NULL)
-           {
-               t2 = NOEND_ABSTIME;
-           }
-           else
-           {
-               t2 = nabstimein(datestring2);
-               if (!AbsoluteTimeIsValid(t2))
-               {
-                   elog(WARN,
-                        "bad range end time: \"%s\"",
-                        datestring2);
-               }
-           }
-           qual = TimeFormRangedTimeQual(t1, t2);
-           break;
-       default:
-           elog(WARN, "MakeTimeRange: internal parser error");
-   }
-   return qual;
-}
-
 static void
 disallow_setop(char *op, Type optype, Node *operand)
 {
index 738ca638def72370197460b802ae2071412a3a52..3ede3dcf59c03d9f6c437b9d197cecedbb9fadbb 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/storage/buffer/buf_init.c,v 1.14 1997/09/18 20:21:16 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/storage/buffer/buf_init.c,v 1.15 1997/11/02 15:25:36 vadim Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -70,9 +70,7 @@ extern IpcSemaphoreId WaitIOSemId;
 long      *PrivateRefCount;    /* also used in freelist.c */
 long      *LastRefCount;       /* refcounts of last ExecMain level */
 long      *CommitInfoNeedsSave;/* to write buffers where we have filled
-                                * in */
-
- /* t_tmin (or t_tmax)                      */
+                                * in t_infomask */
 
 /*
  * Data Structures:
index 337cf44e3d38f4ecdd026cf0b98ac40589ca9700..7b89ad9569ab191695eb0e7a35b7d7fb9f8d825b 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/storage/large_object/inv_api.c,v 1.18 1997/09/12 04:08:15 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/storage/large_object/inv_api.c,v 1.19 1997/11/02 15:25:40 vadim Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -25,6 +25,7 @@
 #include "access/heapam.h"
 #include "access/relscan.h"
 #include "access/tupdesc.h"
+#include "access/transam.h"
 #include "access/xact.h"
 #include "access/nbtree.h"
 #include "access/tupdesc.h"
@@ -791,6 +792,7 @@ inv_wrold(LargeObjectDesc *obj_desc,
 
    TransactionIdStore(GetCurrentTransactionId(), &(htup->t_xmax));
    htup->t_cmax = GetCurrentCommandId();
+   htup->t_infomask &= ~(HEAP_XMAX_COMMITTED | HEAP_XMAX_INVALID);
 
    /*
     * If we're overwriting the entire block, we're lucky.  All we need to
@@ -1005,18 +1007,14 @@ inv_newtuple(LargeObjectDesc *obj_desc,
 
    ntup->t_len = tupsize;
    ItemPointerSet(&(ntup->t_ctid), BufferGetBlockNumber(buffer), off);
-   ItemPointerSetInvalid(&(ntup->t_chain));
    LastOidProcessed = ntup->t_oid = newoid();
    TransactionIdStore(GetCurrentTransactionId(), &(ntup->t_xmin));
    ntup->t_cmin = GetCurrentCommandId();
    StoreInvalidTransactionId(&(ntup->t_xmax));
    ntup->t_cmax = 0;
-   ntup->t_tmin = INVALID_ABSTIME;
-   ntup->t_tmax = CURRENT_ABSTIME;
+   ntup->t_infomask = HEAP_XMAX_INVALID;
    ntup->t_natts = 2;
    ntup->t_hoff = hoff;
-   ntup->t_vtype = 0;
-   ntup->t_infomask = 0x0;
 
    /* if a NULL is passed in, avoid the calculations below */
    if (dbuf == NULL)
@@ -1132,22 +1130,20 @@ DumpPage(Page page, int blkno)
                        printf("\n\t:ctid=%s:oid=%d",
                                ItemPointerFormExternal(&tup->t_ctid),
                                tup->t_oid);
-                       printf(":natts=%d:thoff=%d:vtype=`%c' (0x%02x):",
+                       printf(":natts=%d:thoff=%d:",
                                tup->t_natts,
-                               tup->t_hoff, tup->t_vtype, tup->t_vtype);
+                               tup->t_hoff);
 
-                       printf("\n\t:tmin=%d:cmin=%u:",
-                               tup->t_tmin, tup->t_cmin);
+                       printf("\n\t:cmin=%u:",
+                               tup->t_cmin);
 
                        printf("xmin=%u:", tup->t_xmin);
 
-                       printf("\n\t:tmax=%d:cmax=%u:",
-                               tup->t_tmax, tup->t_cmax);
+                       printf("\n\t:cmax=%u:",
+                               tup->t_cmax);
 
-                       printf("xmax=%u:", tup->t_xmax);
+                       printf("xmax=%u:\n", tup->t_xmax);
 
-                       printf("\n\t:chain=%s:\n",
-                               ItemPointerFormExternal(&tup->t_chain));
                } else
                        putchar('\n');
        }
index fb5adb35abc22c6f653315e3ded4afa2150154cb..8654c11ad8bb14f2701bc14f2d1877810dd8fd8a 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.50 1997/10/25 01:10:16 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.51 1997/11/02 15:25:45 vadim Exp $
  *
  * NOTES
  *   this is the "main" module of the postgres backend and
@@ -495,54 +495,6 @@ pg_plan(char *query_string,        /* string to execute */
 
    querytree_list = new_list;
 
-   /* ----------------
-    * Fix time range quals
-    * this _must_ go here, because it must take place after rewrites
-    * ( if they take place ) so that time quals are usable by the executor
-    *
-    * Also, need to frob the range table entries here to plan union
-    * queries for archived relations.
-    * ----------------
-    */
-   for (i = 0; i < querytree_list->len; i++)
-   {
-       List       *l;
-       List       *rt = NULL;
-
-       querytree = querytree_list->qtrees[i];
-
-       /* ----------------
-        *  utilities don't have time ranges
-        * ----------------
-        */
-       if (querytree->commandType == CMD_UTILITY)
-           continue;
-
-       rt = querytree->rtable;
-
-       foreach(l, rt)
-       {
-           RangeTblEntry *rte = lfirst(l);
-           TimeRange  *timequal = rte->timeRange;
-
-           if (timequal)
-           {
-               int         timecode = (rte->timeRange->endDate == NULL) ? 0 : 1;
-
-               rte->timeQual = makeTimeRange(rte->timeRange->startDate,
-                                             rte->timeRange->endDate,
-                                             timecode);
-           }
-           else
-           {
-               rte->timeQual = NULL;
-           }
-       }
-
-       /* check for archived relations */
-       plan_archive(rt);
-   }
-
    if (DebugPrintRewrittenParsetree == true)
    {
        printf("\n---- \tafter rewriting:\n");
@@ -1391,7 +1343,7 @@ PostgresMain(int argc, char *argv[])
    if (IsUnderPostmaster == false)
    {
        puts("\nPOSTGRES backend interactive interface");
-       puts("$Revision: 1.50 $ $Date: 1997/10/25 01:10:16 $");
+       puts("$Revision: 1.51 $ $Date: 1997/11/02 15:25:45 $");
    }
 
    /* ----------------
index 588c052d0e79dccc20e3cab46cf4a5435b93841e..cb715cd7c7f43a319787c139a6a7fadee3ee170d 100644 (file)
@@ -12,7 +12,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/utils/adt/char.c,v 1.13 1997/10/25 05:12:38 thomas Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/utils/adt/char.c,v 1.14 1997/11/02 15:25:57 vadim Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -81,12 +81,7 @@ cidout(int32 c)
    char       *result;
    CommandId   c2;
 
-   /*
-    * cid is a number between 0 .. 2^16-1, therefore we need at most 6
-    * chars for the string (5 digits + '\0') NOTE: print it as an
-    * UNSIGNED int!
-    */
-   result = palloc(6);
+   result = palloc(12);
    c2 = (CommandId) c;
    sprintf(result, "%u", (unsigned) (c2));
    return (result);
index d1c253f95ca72ae557f861a93bb78a1731a27302..90cb42d320c3db9e3a3f1d0e87c50a9e7e94cac9 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/utils/cache/relcache.c,v 1.26 1997/10/25 05:38:52 thomas Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/utils/cache/relcache.c,v 1.27 1997/11/02 15:26:06 vadim Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -80,7 +80,6 @@
 
 #include "catalog/pg_variable.h"
 #include "catalog/pg_log.h"
-#include "catalog/pg_time.h"
 #include "catalog/pg_attrdef.h"
 #include "catalog/pg_relcheck.h"
 #include "catalog/indexing.h"
@@ -118,7 +117,6 @@ FormData_pg_attribute Desc_pg_proc[Natts_pg_proc] = {Schema_pg_proc};
 FormData_pg_attribute Desc_pg_type[Natts_pg_type] = {Schema_pg_type};
 FormData_pg_attribute Desc_pg_variable[Natts_pg_variable] = {Schema_pg_variable};
 FormData_pg_attribute Desc_pg_log[Natts_pg_log] = {Schema_pg_log};
-FormData_pg_attribute Desc_pg_time[Natts_pg_time] = {Schema_pg_time};
 
 /* ----------------
  *     global variables
@@ -1679,7 +1677,6 @@ RelationInitialize(void)
    formrdesc(TypeRelationName, Natts_pg_type, Desc_pg_type);
    formrdesc(VariableRelationName, Natts_pg_variable, Desc_pg_variable);
    formrdesc(LogRelationName, Natts_pg_log, Desc_pg_log);
-   formrdesc(TimeRelationName, Natts_pg_time, Desc_pg_time);
 
    /*
     * If this isn't initdb time, then we want to initialize some index
index 7f2aefe3d6f90c478dd893983ba0b5b1f1f13593..95e0abfd37a1c5de0a94cd7099729121c7cafb6f 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/utils/init/globals.c,v 1.14 1997/09/18 14:33:46 vadim Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/utils/init/globals.c,v 1.15 1997/11/02 15:26:12 vadim Exp $
  *
  * NOTES
  *   Globals used all over the place should be declared here and not
@@ -114,7 +114,6 @@ char       *SharedSystemRelationNames[] = {
    LogRelationName,
    MagicRelationName,
    ServerRelationName,
-   TimeRelationName,
    UserRelationName,
    VariableRelationName,
    0
index aa2cd6398ba0af0c5222b9e22f0edd478996ba3b..756d3efff91d17c3c7501f7324978d672cb729c2 100644 (file)
@@ -1,13 +1,13 @@
 /*-------------------------------------------------------------------------
  *
  * tqual.c--
- *   POSTGRES time qualification code.
+ *   POSTGRES "time" qualification code.
  *
  * Copyright (c) 1994, Regents of the University of California
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/utils/time/tqual.c,v 1.8 1997/09/12 04:08:57 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/utils/time/tqual.c,v 1.9 1997/11/02 15:26:17 vadim Exp $
  *
  *-------------------------------------------------------------------------
  */
 #include "access/transam.h"
 #include "utils/elog.h"
 #include "utils/palloc.h"
-#include "utils/nabstime.h"
 
 #include "utils/tqual.h"
 
-static AbsoluteTime TimeQualGetEndTime(TimeQual qual);
-static AbsoluteTime TimeQualGetSnapshotTime(TimeQual qual);
-static AbsoluteTime TimeQualGetStartTime(TimeQual qual);
-static bool TimeQualIncludesNow(TimeQual qual);
-static bool TimeQualIndicatesDisableValidityChecking(TimeQual qual);
-static bool TimeQualIsLegal(TimeQual qual);
-#ifndef NO_ASSERT_CHECKING
-static bool TimeQualIsRanged(TimeQual qual);
-static bool TimeQualIsValid(TimeQual qual);
-#endif
-static bool TimeQualIsSnapshot(TimeQual qual);
-
-/*
- * TimeQualMode --
- *     Mode indicator for treatment of time qualifications.
- */
-typedef uint16 TimeQualMode;
-
-#define TimeQualAt     0x1
-#define TimeQualNewer  0x2
-#define TimeQualOlder  0x4
-#define TimeQualAll        0x8
-
-#define TimeQualMask   0xf
-
-#define TimeQualEvery  0x0
-#define TimeQualRange  (TimeQualNewer | TimeQualOlder)
-#define TimeQualAllAt  (TimeQualAt | TimeQualAll)
-
-typedef struct TimeQualData
-{
-   AbsoluteTime start;
-   AbsoluteTime end;
-   TimeQualMode mode;
-} TimeQualData;
-
-typedef TimeQualData *InternalTimeQual;
-
-static TimeQualData SelfTimeQualData;
-TimeQual   SelfTimeQual = (Pointer) &SelfTimeQualData;
+static int4    SelfTimeQualData;
+TimeQual   SelfTimeQual = (TimeQual) &SelfTimeQualData;
 
 extern bool PostgresIsInitialized;
 
@@ -119,363 +80,6 @@ heapisoverride()
 
 static bool HeapTupleSatisfiesItself(HeapTuple tuple);
 static bool HeapTupleSatisfiesNow(HeapTuple tuple);
-static bool
-HeapTupleSatisfiesSnapshotInternalTimeQual(HeapTuple tuple,
-                                          InternalTimeQual qual);
-static bool
-HeapTupleSatisfiesUpperBoundedInternalTimeQual(HeapTuple tuple,
-                                              InternalTimeQual qual);
-static bool
-HeapTupleSatisfiesUpperUnboundedInternalTimeQual(HeapTuple tuple,
-                                                InternalTimeQual qual);
-
-
-
-/*
- * TimeQualIsValid --
- *     True iff time qualification is valid.
- */
-#ifndef NO_ASSERT_CHECKING
-static bool
-TimeQualIsValid(TimeQual qual)
-{
-   bool        hasStartTime;
-
-   if (!PointerIsValid(qual) || qual == SelfTimeQual)
-   {
-       return (true);
-   }
-
-   if (((InternalTimeQual) qual)->mode & ~TimeQualMask)
-   {
-       return (false);
-   }
-
-   if (((InternalTimeQual) qual)->mode & TimeQualAt)
-   {
-       return (AbsoluteTimeIsBackwardCompatiblyValid(((InternalTimeQual) qual)->start));
-   }
-
-   hasStartTime = false;
-
-   if (((InternalTimeQual) qual)->mode & TimeQualNewer)
-   {
-       if (!AbsoluteTimeIsBackwardCompatiblyValid(((InternalTimeQual) qual)->start))
-       {
-           return (false);
-       }
-       hasStartTime = true;
-   }
-
-   if (((InternalTimeQual) qual)->mode & TimeQualOlder)
-   {
-       if (!AbsoluteTimeIsBackwardCompatiblyValid(((InternalTimeQual) qual)->end))
-       {
-           return (false);
-       }
-       if (hasStartTime)
-       {
-           return ((bool) !AbsoluteTimeIsBefore(
-                                         ((InternalTimeQual) qual)->end,
-                                     ((InternalTimeQual) qual)->start));
-       }
-   }
-   return (true);
-}
-#endif
-
-/*
- * TimeQualIsLegal --
- *     True iff time qualification is legal.
- *     I.e., true iff time qualification does not intersects the future,
- *     relative to the transaction start time.
- *
- * Note:
- *     Assumes time qualification is valid.
- */
-static bool
-TimeQualIsLegal(TimeQual qual)
-{
-   Assert(TimeQualIsValid(qual));
-
-   if (qual == NowTimeQual || qual == SelfTimeQual)
-   {
-       return (true);
-   }
-
-   /* TimeQualAt */
-   if (((InternalTimeQual) qual)->mode & TimeQualAt)
-   {
-       AbsoluteTime a,
-                   b;
-
-       a = ((InternalTimeQual) qual)->start;
-       b = GetCurrentTransactionStartTime();
-
-       if (AbsoluteTimeIsAfter(a, b))
-           return (false);
-       else
-           return (true);
-   }
-
-   /* TimeQualOlder or TimeQualRange */
-   if (((InternalTimeQual) qual)->mode & TimeQualOlder)
-   {
-       AbsoluteTime a,
-                   b;
-
-       a = ((InternalTimeQual) qual)->end;
-       b = GetCurrentTransactionStartTime();
-
-       if (AbsoluteTimeIsAfter(a, b))
-           return (false);
-       else
-           return (true);
-   }
-
-   /* TimeQualNewer */
-   if (((InternalTimeQual) qual)->mode & TimeQualNewer)
-   {
-       AbsoluteTime a,
-                   b;
-
-       a = ((InternalTimeQual) qual)->start;
-       b = GetCurrentTransactionStartTime();
-
-       if (AbsoluteTimeIsAfter(a, b))
-           return (false);
-       else
-           return (true);
-   }
-
-   /* TimeQualEvery */
-   return (true);
-}
-
-/*
- * TimeQualIncludesNow --
- *     True iff time qualification includes "now."
- *
- * Note:
- *     Assumes time qualification is valid.
- */
-static bool
-TimeQualIncludesNow(TimeQual qual)
-{
-   Assert(TimeQualIsValid(qual));
-
-   if (qual == NowTimeQual || qual == SelfTimeQual)
-   {
-       return (true);
-   }
-
-   if (((InternalTimeQual) qual)->mode & TimeQualAt)
-   {
-       return (false);
-   }
-   if (((InternalTimeQual) qual)->mode & TimeQualOlder &&
-       !AbsoluteTimeIsAfter(
-                            ((InternalTimeQual) qual)->end,
-                            GetCurrentTransactionStartTime()))
-   {
-
-       return (false);
-   }
-   return (true);
-}
-
-/*
- * TimeQualIncludesPast --
- *     True iff time qualification includes some time in the past.
- *
- * Note:
- *     Assumes time qualification is valid.
- *     XXX may not be needed?
- */
-#ifdef NOT_USED
-bool
-TimeQualIncludesPast(TimeQual qual)
-{
-   Assert(TimeQualIsValid(qual));
-
-   if (qual == NowTimeQual || qual == SelfTimeQual)
-   {
-       return (false);
-   }
-
-   /* otherwise, must check archive (setting locks as appropriate) */
-   return (true);
-}
-
-#endif
-
-/*
- * TimeQualIsSnapshot --
- *     True iff time qualification is a snapshot qualification.
- *
- * Note:
- *     Assumes time qualification is valid.
- */
-static bool
-TimeQualIsSnapshot(TimeQual qual)
-{
-   Assert(TimeQualIsValid(qual));
-
-   if (qual == NowTimeQual || qual == SelfTimeQual)
-   {
-       return (false);
-   }
-
-   return ((bool) !!(((InternalTimeQual) qual)->mode & TimeQualAt));
-}
-
-/*
- * TimeQualIsRanged --
- *     True iff time qualification is a ranged qualification.
- *
- * Note:
- *     Assumes time qualification is valid.
- */
-#ifndef NO_ASSERT_CHECKING
-static bool
-TimeQualIsRanged(TimeQual qual)
-{
-   Assert(TimeQualIsValid(qual));
-
-   if (qual == NowTimeQual || qual == SelfTimeQual)
-   {
-       return (false);
-   }
-
-   return ((bool) !(((InternalTimeQual) qual)->mode & TimeQualAt));
-}
-#endif
-
-/*
- * TimeQualIndicatesDisableValidityChecking --
- *     True iff time qualification indicates validity checking should be
- *     disabled.
- *
- * Note:
- *     XXX This should not be implemented since this does not make sense.
- */
-static bool
-TimeQualIndicatesDisableValidityChecking(TimeQual qual)
-{
-   Assert(TimeQualIsValid(qual));
-
-   if (qual == NowTimeQual || qual == SelfTimeQual)
-   {
-       return (false);
-   }
-
-   if (((InternalTimeQual) qual)->mode & TimeQualAll)
-   {
-       return (true);
-   }
-   return (false);
-}
-
-/*
- * TimeQualGetSnapshotTime --
- *     Returns time for a snapshot time qual.
- *
- * Note:
- *     Assumes time qual is valid snapshot time qual.
- */
-static AbsoluteTime
-TimeQualGetSnapshotTime(TimeQual qual)
-{
-   Assert(TimeQualIsSnapshot(qual));
-
-   return (((InternalTimeQual) qual)->start);
-}
-
-/*
- * TimeQualGetStartTime --
- *     Returns start time for a ranged time qual.
- *
- * Note:
- *     Assumes time qual is valid ranged time qual.
- */
-static AbsoluteTime
-TimeQualGetStartTime(TimeQual qual)
-{
-   Assert(TimeQualIsRanged(qual));
-
-   return (((InternalTimeQual) qual)->start);
-}
-
-/*
- * TimeQualGetEndTime --
- *     Returns end time for a ranged time qual.
- *
- * Note:
- *     Assumes time qual is valid ranged time qual.
- */
-static AbsoluteTime
-TimeQualGetEndTime(TimeQual qual)
-{
-   Assert(TimeQualIsRanged(qual));
-
-   return (((InternalTimeQual) qual)->end);
-}
-
-/*
- * TimeFormSnapshotTimeQual --
- *     Returns snapshot time qual for a time.
- *
- * Note:
- *     Assumes time is valid.
- */
-TimeQual
-TimeFormSnapshotTimeQual(AbsoluteTime time)
-{
-   InternalTimeQual qual;
-
-   Assert(AbsoluteTimeIsBackwardCompatiblyValid(time));
-
-   qual = (InternalTimeQual) palloc(sizeof *qual);
-
-   qual->start = time;
-   qual->end = INVALID_ABSTIME;
-   qual->mode = TimeQualAt;
-
-   return ((TimeQual) qual);
-}
-
-/*
- * TimeFormRangedTimeQual --
- *     Returns ranged time qual for a pair of times.
- *
- * Note:
- *     If start time is invalid, it is regarded as the epoch.
- *     If end time is invalid, it is regarded as "now."
- *     Assumes start time is before (or the same as) end time.
- */
-TimeQual
-TimeFormRangedTimeQual(AbsoluteTime startTime,
-                      AbsoluteTime endTime)
-{
-   InternalTimeQual qual;
-
-   qual = (InternalTimeQual) palloc(sizeof *qual);
-
-   qual->start = startTime;
-   qual->end = endTime;
-   qual->mode = TimeQualEvery;
-
-   if (AbsoluteTimeIsBackwardCompatiblyValid(startTime))
-   {
-       qual->mode |= TimeQualNewer;
-   }
-   if (AbsoluteTimeIsBackwardCompatiblyValid(endTime))
-   {
-       qual->mode |= TimeQualOlder;
-   }
-
-   return ((TimeQual) qual);
-}
 
 /*
  * HeapTupleSatisfiesTimeQual --
@@ -484,16 +88,10 @@ TimeFormRangedTimeQual(AbsoluteTime startTime,
  * Note:
  *     Assumes heap tuple is valid.
  *     Assumes time qual is valid.
- *     XXX Many of the checks may be simplified and still remain correct.
- *     XXX Partial answers to the checks may be cached in an ItemId.
  */
 bool
 HeapTupleSatisfiesTimeQual(HeapTuple tuple, TimeQual qual)
 {
-/*   extern TransactionId AmiTransactionId; */
-
-   Assert(HeapTupleIsValid(tuple));
-   Assert(TimeQualIsValid(qual));
 
    if (TransactionIdEquals(tuple->t_xmax, AmiTransactionId))
        return (false);
@@ -508,30 +106,9 @@ HeapTupleSatisfiesTimeQual(HeapTuple tuple, TimeQual qual)
        return (HeapTupleSatisfiesNow(tuple));
    }
 
-   if (!TimeQualIsLegal(qual))
-   {
-       elog(WARN, "HeapTupleSatisfiesTimeQual: illegal time qual");
-   }
-
-   if (TimeQualIndicatesDisableValidityChecking(qual))
-   {
-       elog(WARN, "HeapTupleSatisfiesTimeQual: no disabled validity checking (yet)");
-   }
-
-   if (TimeQualIsSnapshot(qual))
-   {
-       return (HeapTupleSatisfiesSnapshotInternalTimeQual(tuple,
-                                              (InternalTimeQual) qual));
-   }
-
-   if (TimeQualIncludesNow(qual))
-   {
-       return (HeapTupleSatisfiesUpperUnboundedInternalTimeQual(tuple,
-                                              (InternalTimeQual) qual));
-   }
+   elog(WARN, "HeapTupleSatisfiesTimeQual: illegal time qual");
 
-   return (HeapTupleSatisfiesUpperBoundedInternalTimeQual(tuple,
-                                              (InternalTimeQual) qual));
+   return (false);
 }
 
 /*
@@ -560,50 +137,48 @@ static bool
 HeapTupleSatisfiesItself(HeapTuple tuple)
 {
 
-   /*
-    * XXX Several evil casts are made in this routine.  Casting XID to be
-    * TransactionId works only because TransactionId->data is the first
-    * (and only) field of the structure.
-    */
-   if (!AbsoluteTimeIsBackwardCompatiblyValid(tuple->t_tmin))
+   if (!(tuple->t_infomask & HEAP_XMIN_COMMITTED))
    {
-       if (TransactionIdIsCurrentTransactionId((TransactionId) tuple->t_xmin) &&
-           !TransactionIdIsValid((TransactionId) tuple->t_xmax))
+       if (tuple->t_infomask & HEAP_XMIN_INVALID)  /* xid invalid or aborted */
+           return (false);
+       
+       if (TransactionIdIsCurrentTransactionId(tuple->t_xmin))
        {
-           return (true);
+           if (tuple->t_infomask & HEAP_XMAX_INVALID)  /* xid invalid */
+               return (true);
+           else
+               return (false);
        }
 
-       if (!TransactionIdDidCommit((TransactionId) tuple->t_xmin))
+       if (!TransactionIdDidCommit(tuple->t_xmin))
        {
+           if (TransactionIdDidAbort(tuple->t_xmin))
+               tuple->t_infomask |= HEAP_XMIN_INVALID; /* aborted */
            return (false);
        }
 
-       tuple->t_tmin = TransactionIdGetCommitTime(tuple->t_xmin);
+       tuple->t_infomask |= HEAP_XMIN_COMMITTED;
    }
    /* the tuple was inserted validly */
 
-   if (AbsoluteTimeIsBackwardCompatiblyReal(tuple->t_tmax))
-   {
-       return (false);
-   }
-
-   if (!TransactionIdIsValid((TransactionId) tuple->t_xmax))
-   {
+   if (tuple->t_infomask & HEAP_XMAX_INVALID)  /* xid invalid or aborted */
        return (true);
-   }
 
-   if (TransactionIdIsCurrentTransactionId((TransactionId) tuple->t_xmax))
-   {
+   if (tuple->t_infomask & HEAP_XMAX_COMMITTED)
+       return (false);
+
+   if (TransactionIdIsCurrentTransactionId(tuple->t_xmax))
        return (false);
-   }
 
-   if (!TransactionIdDidCommit((TransactionId) tuple->t_xmax))
+   if (!TransactionIdDidCommit(tuple->t_xmax))
    {
+       if (TransactionIdDidAbort(tuple->t_xmax))
+           tuple->t_infomask |= HEAP_XMAX_INVALID;     /* aborted */
        return (true);
    }
 
    /* by here, deleting transaction has committed */
-   tuple->t_tmax = TransactionIdGetCommitTime(tuple->t_xmax);
+   tuple->t_infomask |= HEAP_XMAX_COMMITTED;
 
    return (false);
 }
@@ -667,295 +242,69 @@ HeapTupleSatisfiesNow(HeapTuple tuple)
     */
 
    if (!PostgresIsInitialized)
-       return ((bool) (TransactionIdIsValid((TransactionId) tuple->t_xmin) &&
-                 !TransactionIdIsValid((TransactionId) tuple->t_xmax)));
+       return ((bool) (TransactionIdIsValid(tuple->t_xmin) &&
+                 !TransactionIdIsValid(tuple->t_xmax)));
 
-   /*
-    * XXX Several evil casts are made in this routine.  Casting XID to be
-    * TransactionId works only because TransactionId->data is the first
-    * (and only) field of the structure.
-    */
-   if (!AbsoluteTimeIsBackwardCompatiblyValid(tuple->t_tmin))
+   if (!(tuple->t_infomask & HEAP_XMIN_COMMITTED))
    {
-
-       if (TransactionIdIsCurrentTransactionId((TransactionId) tuple->t_xmin)
-           && CommandIdGEScanCommandId(tuple->t_cmin))
-       {
-
+       if (tuple->t_infomask & HEAP_XMIN_INVALID)  /* xid invalid or aborted */
            return (false);
-       }
 
-       if (TransactionIdIsCurrentTransactionId((TransactionId) tuple->t_xmin)
-           && !CommandIdGEScanCommandId(tuple->t_cmin))
+       if (TransactionIdIsCurrentTransactionId(tuple->t_xmin))
        {
+           if (CommandIdGEScanCommandId(tuple->t_cmin))
+               return (false); /* inserted after scan started */
 
-           if (!TransactionIdIsValid((TransactionId) tuple->t_xmax))
-           {
+           if (tuple->t_infomask & HEAP_XMAX_INVALID)  /* xid invalid */
                return (true);
-           }
 
-           Assert(TransactionIdIsCurrentTransactionId((TransactionId) tuple->t_xmax));
+           Assert(TransactionIdIsCurrentTransactionId(tuple->t_xmax));
 
            if (CommandIdGEScanCommandId(tuple->t_cmax))
-           {
-               return (true);
-           }
+               return (true);  /* deleted after scan started */
+           else
+               return (false); /* deleted before scan started */
        }
 
        /*
         * this call is VERY expensive - requires a log table lookup.
         */
 
-       if (!TransactionIdDidCommit((TransactionId) tuple->t_xmin))
+       if (!TransactionIdDidCommit(tuple->t_xmin))
        {
+           if (TransactionIdDidAbort(tuple->t_xmin))
+               tuple->t_infomask |= HEAP_XMIN_INVALID; /* aborted */
            return (false);
        }
 
-       /*
-        * the transaction has been committed--store the commit time _now_
-        * instead of waiting for a vacuum so we avoid the expensive call
-        * next time.
-        */
-       tuple->t_tmin = TransactionIdGetCommitTime(tuple->t_xmin);
+       tuple->t_infomask |= HEAP_XMIN_COMMITTED;
    }
 
    /* by here, the inserting transaction has committed */
-   if (!TransactionIdIsValid((TransactionId) tuple->t_xmax))
-   {
-       return (true);
-   }
 
-   if (TransactionIdIsCurrentTransactionId((TransactionId) tuple->t_xmax))
-   {
-       return (false);
-   }
-
-   if (AbsoluteTimeIsBackwardCompatiblyReal(tuple->t_tmax))
-   {
-       return (false);
-   }
-
-   if (!TransactionIdDidCommit((TransactionId) tuple->t_xmax))
-   {
+   if (tuple->t_infomask & HEAP_XMAX_INVALID)  /* xid invalid or aborted */
        return (true);
-   }
-
-   /* xmax transaction committed, but no tmax set.  so set it. */
-   tuple->t_tmax = TransactionIdGetCommitTime(tuple->t_xmax);
-
-   return (false);
-}
-
-/*
- * HeapTupleSatisfiesSnapshotInternalTimeQual --
- *     True iff heap tuple is valid at the snapshot time qualification.
- *
- * Note:
- *     Assumes heap tuple is valid.
- *     Assumes internal time qualification is valid snapshot qualification.
- */
-/*
- * The satisfaction of Rel[T] requires the following:
- *
- * (Xmin is committed && Tmin <= T &&
- *     (Xmax is null || (Xmax is not committed && Xmax != my-transaction) ||
- *             Tmax >= T))
- */
-static bool
-HeapTupleSatisfiesSnapshotInternalTimeQual(HeapTuple tuple,
-                                          InternalTimeQual qual)
-{
-
-   /*
-    * XXX Several evil casts are made in this routine.  Casting XID to be
-    * TransactionId works only because TransactionId->data is the first
-    * (and only) field of the structure.
-    */
-   if (!AbsoluteTimeIsBackwardCompatiblyValid(tuple->t_tmin))
-   {
-
-       if (!TransactionIdDidCommit((TransactionId) tuple->t_xmin))
-       {
-           return (false);
-       }
-
-       tuple->t_tmin = TransactionIdGetCommitTime(tuple->t_xmin);
-   }
 
-   if (AbsoluteTimeIsBefore(TimeQualGetSnapshotTime((TimeQual) qual), tuple->t_tmin))
-   {
-       return (false);
-   }
-   /* the tuple was inserted validly before the snapshot time */
-
-   if (!AbsoluteTimeIsBackwardCompatiblyReal(tuple->t_tmax))
-   {
-
-       if (!TransactionIdIsValid((TransactionId) tuple->t_xmax) ||
-           !TransactionIdDidCommit((TransactionId) tuple->t_xmax))
-       {
-
-           return (true);
-       }
-
-       tuple->t_tmax = TransactionIdGetCommitTime(tuple->t_xmax);
-   }
-
-   return ((bool)
-           AbsoluteTimeIsAfter(tuple->t_tmax,
-                             TimeQualGetSnapshotTime((TimeQual) qual)));
-}
-
-/*
- * HeapTupleSatisfiesUpperBoundedInternalTimeQual --
- *     True iff heap tuple is valid within a upper bounded time qualification.
- *
- * Note:
- *     Assumes heap tuple is valid.
- *     Assumes time qualification is valid ranged qualification with fixed
- *     upper bound.
- */
-/*
- * The satisfaction of [T1,T2] requires the following:
- *
- * (Xmin is committed && Tmin <= T2 &&
- *     (Xmax is null || (Xmax is not committed && Xmax != my-transaction) ||
- *             T1 is null || Tmax >= T1))
- */
-static bool
-HeapTupleSatisfiesUpperBoundedInternalTimeQual(HeapTuple tuple,
-                                              InternalTimeQual qual)
-{
-
-   /*
-    * XXX Several evil casts are made in this routine.  Casting XID to be
-    * TransactionId works only because TransactionId->data is the first
-    * (and only) field of the structure.
-    */
-   if (!AbsoluteTimeIsBackwardCompatiblyValid(tuple->t_tmin))
-   {
-
-       if (!TransactionIdDidCommit((TransactionId) tuple->t_xmin))
-       {
-           return (false);
-       }
-
-       tuple->t_tmin = TransactionIdGetCommitTime(tuple->t_xmin);
-   }
-
-   if (AbsoluteTimeIsBefore(TimeQualGetEndTime((TimeQual) qual), tuple->t_tmin))
-   {
+   if (tuple->t_infomask & HEAP_XMAX_COMMITTED)
        return (false);
-   }
-   /* the tuple was inserted validly before the range end */
-
-   if (!AbsoluteTimeIsBackwardCompatiblyValid(TimeQualGetStartTime((TimeQual) qual)))
-   {
-       return (true);
-   }
 
-   if (!AbsoluteTimeIsBackwardCompatiblyReal(tuple->t_tmax))
+   if (TransactionIdIsCurrentTransactionId(tuple->t_xmax))
    {
-
-       if (!TransactionIdIsValid((TransactionId) tuple->t_xmax) ||
-           !TransactionIdDidCommit((TransactionId) tuple->t_xmax))
-       {
-
-           return (true);
-       }
-
-       tuple->t_tmax = TransactionIdGetCommitTime(tuple->t_xmax);
-   }
-
-   return ((bool) AbsoluteTimeIsAfter(tuple->t_tmax,
-                                TimeQualGetStartTime((TimeQual) qual)));
-}
-
-/*
- * HeapTupleSatisfiesUpperUnboundedInternalTimeQual --
- *     True iff heap tuple is valid within a upper bounded time qualification.
- *
- * Note:
- *     Assumes heap tuple is valid.
- *     Assumes time qualification is valid ranged qualification with no
- *     upper bound.
- */
-/*
- * The satisfaction of [T1,] requires the following:
- *
- * ((Xmin == my-transaction && Cmin != my-command &&
- *     (Xmax is null || (Xmax == my-transaction && Cmax != my-command)))
- * ||
- *
- * (Xmin is committed &&
- *     (Xmax is null || (Xmax == my-transaction && Cmax == my-command) ||
- *             (Xmax is not committed && Xmax != my-transaction) ||
- *             T1 is null || Tmax >= T1)))
- */
-static bool
-HeapTupleSatisfiesUpperUnboundedInternalTimeQual(HeapTuple tuple,
-                                                InternalTimeQual qual)
-{
-   if (!AbsoluteTimeIsBackwardCompatiblyValid(tuple->t_tmin))
-   {
-
-       if (TransactionIdIsCurrentTransactionId((TransactionId) tuple->t_xmin) &&
-           CommandIdGEScanCommandId(tuple->t_cmin))
-       {
-
-           return (false);
-       }
-
-       if (TransactionIdIsCurrentTransactionId((TransactionId) tuple->t_xmin) &&
-           !CommandIdGEScanCommandId(tuple->t_cmin))
-       {
-
-           if (!TransactionIdIsValid((TransactionId) tuple->t_xmax))
-           {
-               return (true);
-           }
-
-           Assert(TransactionIdIsCurrentTransactionId((TransactionId) tuple->t_xmax));
-
-           return ((bool) !CommandIdGEScanCommandId(tuple->t_cmax));
-       }
-
-       if (!TransactionIdDidCommit((TransactionId) tuple->t_xmin))
-       {
-           return (false);
-       }
-
-       tuple->t_tmin = TransactionIdGetCommitTime(tuple->t_xmin);
+       if (CommandIdGEScanCommandId(tuple->t_cmax))
+           return (true);  /* deleted after scan started */
+       else
+           return (false); /* deleted before scan started */
    }
-   /* the tuple was inserted validly */
 
-   if (!AbsoluteTimeIsBackwardCompatiblyValid(TimeQualGetStartTime((TimeQual) qual)))
+   if (!TransactionIdDidCommit(tuple->t_xmax))
    {
+       if (TransactionIdDidAbort(tuple->t_xmax))
+           tuple->t_infomask |= HEAP_XMAX_INVALID;     /* aborted */
        return (true);
    }
 
-   if (!AbsoluteTimeIsBackwardCompatiblyReal(tuple->t_tmax))
-   {
+   /* xmax transaction committed */
+   tuple->t_infomask |= HEAP_XMAX_COMMITTED;
 
-       if (!TransactionIdIsValid((TransactionId) tuple->t_xmax))
-       {
-           return (true);
-       }
-
-       if (TransactionIdIsCurrentTransactionId((TransactionId) tuple->t_xmax))
-       {
-           return (CommandIdGEScanCommandId(tuple->t_cmin));
-           /* it looks like error                    ^^^^ */
-       }
-
-       if (!TransactionIdDidCommit((TransactionId) tuple->t_xmax))
-       {
-           return (true);
-       }
-
-       tuple->t_tmax = TransactionIdGetCommitTime(tuple->t_xmax);
-   }
-
-   return ((bool) AbsoluteTimeIsAfter(tuple->t_tmax,
-                                TimeQualGetStartTime((TimeQual) qual)));
+   return (false);
 }
index 4621d8367139b838b9583b1d06aed105a1587ab9..a66fcab073a25082c30c1660aff4e68e9f2e9cb0 100644 (file)
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: heapam.h,v 1.20 1997/10/30 23:37:01 momjian Exp $
+ * $Id: heapam.h,v 1.21 1997/11/02 15:26:37 vadim Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -142,7 +142,7 @@ extern void heap_restrpos(HeapScanDesc sdesc);
 extern Size ComputeDataSize(TupleDesc tupleDesc, Datum value[], char nulls[]);
 extern void
 DataFill(char *data, TupleDesc tupleDesc,
-        Datum value[], char nulls[], char *infomask,
+        Datum value[], char nulls[], uint16 *infomask,
         bits8 *bit);
 extern int heap_attisnull(HeapTuple tup, int attnum);
 extern int heap_sysattrlen(AttrNumber attno);
index 0b6653f3865a584ef97218930bac7deb3bd9d270..72fb5a8d314c4a3fab91e37e0a2c6d15362bdf43 100644 (file)
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: htup.h,v 1.6 1997/09/08 21:50:46 momjian Exp $
+ * $Id: htup.h,v 1.7 1997/11/02 15:26:42 vadim Exp $
  *
  *-------------------------------------------------------------------------
  */
  */
 typedef struct HeapTupleData
 {
+   unsigned int    t_len;          /* length of entire tuple */
 
-   unsigned int t_len;         /* length of entire tuple */
+   Oid             t_oid;          /* OID of this tuple -- 4 bytes */
 
-   ItemPointerData t_ctid;     /* current TID of this tuple */
+   CommandId       t_cmin;         /* insert CID stamp -- 4 bytes each */
+   CommandId       t_cmax;         /* delete CommandId stamp */
 
-   ItemPointerData t_chain;    /* replaced tuple TID */
+   TransactionId   t_xmin;         /* insert XID stamp -- 4 bytes each */
+   TransactionId   t_xmax;         /* delete XID stamp */
 
-   Oid         t_oid;          /* OID of this tuple -- 4 bytes */
+   ItemPointerData t_ctid;         /* current TID of this tuple */
+   
+   int16           t_natts;        /* number of attributes */
 
-   CommandId   t_cmin;         /* insert CID stamp -- 2 bytes each */
-   CommandId   t_cmax;         /* delete CommandId stamp */
+   uint16          t_infomask;     /* various infos */
 
-   TransactionId t_xmin;       /* insert XID stamp -- 4 bytes each */
-   TransactionId t_xmax;       /* delete XID stamp */
+   uint8           t_hoff;         /* sizeof tuple header */
 
-   AbsoluteTime t_tmin;        /* time stamps -- 4 bytes each */
-   AbsoluteTime t_tmax;
-
-   int16       t_natts;        /* number of attributes */
-   char        t_vtype;        /* not used - padding */
-
-   char        t_infomask;     /* whether tuple as null or variable
-                                * length attributes */
-
-   uint8       t_hoff;         /* sizeof tuple header */
-
-   bits8       t_bits[MinHeapTupleBitmapSize / 8];
+   bits8           t_bits[MinHeapTupleBitmapSize / 8];
    /* bit map of domains */
 
    /* MORE DATA FOLLOWS AT END OF STRUCT */
@@ -69,12 +61,7 @@ typedef HeapTupleData *HeapTuple;
 #define MinCommandIdAttributeNumber                (-4)
 #define MaxTransactionIdAttributeNumber            (-5)
 #define MaxCommandIdAttributeNumber                (-6)
-#define ChainItemPointerAttributeNumber            (-7)
-#define AnchorItemPointerAttributeNumber       (-8)
-#define MinAbsoluteTimeAttributeNumber         (-9)
-#define MaxAbsoluteTimeAttributeNumber         (-10)
-#define VersionTypeAttributeNumber             (-11)
-#define FirstLowInvalidHeapAttributeNumber     (-12)
+#define FirstLowInvalidHeapAttributeNumber     (-7)
 
 
 /* ----------------
@@ -101,9 +88,15 @@ typedef HeapTupleData *HeapTuple;
 /*
  * information stored in t_infomask:
  */
-#define HEAP_HASNULL           0x01    /* has null attribute(s) */
-#define HEAP_HASVARLENA            0x02    /* has variable length
+#define HEAP_HASNULL           0x0001  /* has null attribute(s) */
+#define HEAP_HASVARLENA            0x0002  /* has variable length
                                         * attribute(s) */
+#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_XACT_MASK         0x0F00  /* */
 
 #define HeapTupleNoNulls(tuple) \
        (!(((HeapTuple) (tuple))->t_infomask & HEAP_HASNULL))
index efb6e824a7ab82cb942775c35bc96e33c47d510e..fb4a6cd72425e2f46028fff5e4be7563e55bfb7f 100644 (file)
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: transam.h,v 1.11 1997/09/08 21:51:03 momjian Exp $
+ * $Id: transam.h,v 1.12 1997/11/02 15:26:44 vadim Exp $
  *
  *  NOTES
  *     Transaction System Version 101 now support proper oid
@@ -18,7 +18,6 @@
 #define TRANSAM_H
 
 #include 
-#include 
 
 /* ----------------
  *     transaction system version id
  *     even if their minor versions differ.
  * ----------------
  */
-#define TRANS_SYSTEM_VERSION   101
+#define TRANS_SYSTEM_VERSION   200
 
 /* ----------------
  *     transaction id status values
  *
- *     someday we will use "11" = 3 = XID_INVALID to mean the
- *     starting of run-length encoded log data.
+ *     someday we will use "11" = 3 = XID_COMMIT_CHILD to mean the
+ *     commiting of child xactions.
  * ----------------
  */
-#define XID_COMMIT     2       /* transaction commited */
-#define XID_ABORT      1       /* transaction aborted */
-#define XID_INPROGRESS 0       /* transaction in progress */
-#define XID_INVALID        3       /* other */
+#define XID_COMMIT         2       /* transaction commited */
+#define XID_ABORT          1       /* transaction aborted */
+#define XID_INPROGRESS     0       /* transaction in progress */
+#define XID_COMMIT_CHILD   3       /* child xact commited */
 
 typedef unsigned char XidStatus;/* (2 bits) */
 
@@ -69,7 +68,6 @@ typedef unsigned char XidStatus;/* (2 bits) */
  */
 #define TP_DataSize                BLCKSZ
 #define TP_NumXidStatusPerBlock (TP_DataSize * 4)
-#define TP_NumTimePerBlock     (TP_DataSize / 4)
 
 /* ----------------
  *     LogRelationContents structure
@@ -90,25 +88,6 @@ typedef struct LogRelationContentsData
 
 typedef LogRelationContentsData *LogRelationContents;
 
-/* ----------------
- *     TimeRelationContents structure
- *
- *     This structure describes the storage of the data in the
- *     first 2048 bytes of the time relation.  This storage is never
- *     used for transaction commit times because transaction id's begin
- *     their numbering at 512.
- *
- *     The first 4 bytes of this relation store the version
- *     number of the transction system.
- * ----------------
- */
-typedef struct TimeRelationContentsData
-{
-   int         TransSystemVersion;
-} TimeRelationContentsData;
-
-typedef TimeRelationContentsData *TimeRelationContents;
-
 /* ----------------
  *     VariableRelationContents structure
  *
@@ -127,10 +106,10 @@ typedef TimeRelationContentsData *TimeRelationContents;
  */
 typedef struct VariableRelationContentsData
 {
-   int         TransSystemVersion;
-   TransactionId nextXidData;
-   TransactionId lastXidData;
-   Oid         nextOid;
+   int             TransSystemVersion;
+   TransactionId   nextXidData;
+   TransactionId   lastXidData;            /* unused */
+   Oid             nextOid;
 } VariableRelationContentsData;
 
 typedef VariableRelationContentsData *VariableRelationContents;
@@ -143,7 +122,6 @@ typedef VariableRelationContentsData *VariableRelationContents;
 /*
  * prototypes for functions in transam/transam.c
  */
-extern AbsoluteTime TransactionIdGetCommitTime(TransactionId transactionId);
 extern void InitializeTransactionLog(void);
 extern bool TransactionIdDidCommit(TransactionId transactionId);
 extern bool TransactionIdDidAbort(TransactionId transactionId);
@@ -162,18 +140,10 @@ extern void
 TransBlockNumberSetXidStatus(Relation relation,
           BlockNumber blockNumber, TransactionId xid, XidStatus xstatus,
                             bool *failP);
-extern AbsoluteTime
-TransBlockNumberGetCommitTime(Relation relation,
-               BlockNumber blockNumber, TransactionId xid, bool *failP);
-extern void
-TransBlockNumberSetCommitTime(Relation relation,
-         BlockNumber blockNumber, TransactionId xid, AbsoluteTime xtime,
-                             bool *failP);
 
 /* in transam/varsup.c */
 extern void VariableRelationPutNextXid(TransactionId xid);
 extern void GetNewTransactionId(TransactionId *xid);
-extern void UpdateLastCommittedXid(TransactionId xid);
 extern void GetNewObjectId(Oid *oid_return);
 extern void CheckMaxObjectId(Oid assigned_oid);
 
@@ -184,11 +154,8 @@ extern void CheckMaxObjectId(Oid assigned_oid);
 
 /* in transam.c */
 extern Relation LogRelation;
-extern Relation TimeRelation;
 extern Relation VariableRelation;
 
-extern TransactionId cachedGetCommitTimeXid;
-extern AbsoluteTime cachedGetCommitTime;
 extern TransactionId cachedTestXid;
 extern XidStatus cachedTestXidStatus;
 
index a37258c62a61817cbc38edebe1a04ede8a7ba2d2..d7707fa495bdd7a579462bcb7256fbe0443575ee 100644 (file)
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: valid.h,v 1.8 1997/09/18 14:20:45 momjian Exp $
+ * $Id: valid.h,v 1.9 1997/11/02 15:26:46 vadim Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -122,8 +122,6 @@ do \
 /* We use underscores to protect the variable passed in as parameters */ \
    HeapTuple   _tuple; \
    bool        _res; \
-   TransactionId _old_tmin, \
-               _old_tmax; \
  \
    if (!ItemIdIsUsed(itemId)) \
        (result) = (HeapTuple) NULL; \
@@ -144,11 +142,10 @@ do \
                (result) = _tuple; \
            else \
            { \
-               _old_tmin = _tuple->t_tmin; \
-               _old_tmax = _tuple->t_tmax; \
+               uint16  _infomask = _tuple->t_infomask; \
+               \
                _res = HeapTupleSatisfiesTimeQual(_tuple, (qual)); \
-               if (_tuple->t_tmin != _old_tmin || \
-                   _tuple->t_tmax != _old_tmax) \
+               if (_tuple->t_infomask != _infomask) \
                    SetBufferCommitInfoNeedsSave(buffer); \
                if (_res) \
                    (result) = _tuple; \
index 67f594253617c2af6316c65847efa716443db5c0..80d220bc8053e085c564c29c350e765872f34423 100644 (file)
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: xact.h,v 1.9 1997/09/08 21:51:06 momjian Exp $
+ * $Id: xact.h,v 1.10 1997/11/02 15:26:48 vadim Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -53,6 +53,12 @@ typedef struct TransactionStateData
 
 typedef TransactionStateData *TransactionState;
 
+#define TransactionIdIsValid(xid)      ((bool) (xid != NullTransactionId))
+#define TransactionIdStore(xid, dest)  \
+   (*((TransactionId*)dest) = (TransactionId)xid)
+#define StoreInvalidTransactionId(dest)    \
+   (*((TransactionId*)dest) = NullTransactionId)
+
 /* ----------------
  *     extern definitions
  * ----------------
@@ -88,11 +94,6 @@ extern TransactionId DisabledTransactionId;
 extern TransactionId xidin(char *representation);
 extern char *xidout(TransactionId transactionId);
 extern bool xideq(TransactionId xid1, TransactionId xid2);
-extern bool TransactionIdIsValid(TransactionId transactionId);
-extern void StoreInvalidTransactionId(TransactionId *destination);
-extern void
-TransactionIdStore(TransactionId transactionId,
-                  TransactionId *destination);
 extern bool TransactionIdEquals(TransactionId id1, TransactionId id2);
 extern bool TransactionIdIsLessThan(TransactionId id1, TransactionId id2);
 extern void TransactionIdAdd(TransactionId *xid, int value);
index 2130a472d076cfd7ee8eb2e0c8e0b57ffa816456..d48dc07021df90d3627e9c85027175c46729fd32 100644 (file)
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: catname.h,v 1.6 1997/09/08 02:34:47 momjian Exp $
+ * $Id: catname.h,v 1.7 1997/11/02 15:26:50 vadim Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -40,7 +40,6 @@
 #define  RewriteRelationName "pg_rewrite"
 #define  ServerRelationName "pg_server"
 #define  StatisticRelationName "pg_statistic"
-#define  TimeRelationName "pg_time"
 #define  TypeRelationName "pg_type"
 #define  UserRelationName "pg_user"
 #define  VariableRelationName "pg_variable"
index 1729aeb2cdb90ae205808298874c8fc7bd5a4a34..2e3897c372d51a1873e2e054fc1b267cc31ee2a7 100644 (file)
@@ -7,7 +7,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pg_attribute.h,v 1.16 1997/09/08 02:35:02 momjian Exp $
+ * $Id: pg_attribute.h,v 1.17 1997/11/02 15:26:56 vadim Exp $
  *
  * NOTES
  *   the genbki.sh script reads this file and generates .bki
@@ -208,14 +208,9 @@ DATA(insert OID = 0 ( 1247 typdefault      25 0 -1  16 0 -1 f f i f f));
 DATA(insert OID = 0 ( 1247 ctid                27 0  6  -1 0 -1 f f i f f));
 DATA(insert OID = 0 ( 1247 oid             26 0  4  -2 0 -1 t f i f f));
 DATA(insert OID = 0 ( 1247 xmin                28 0  4  -3 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1247 cmin                29 0  2  -4 0 -1 t f s f f));
+DATA(insert OID = 0 ( 1247 cmin                29 0  4  -4 0 -1 t f i f f));
 DATA(insert OID = 0 ( 1247 xmax                28 0  4  -5 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1247 cmax                29 0  2  -6 0 -1 t f s f f));
-DATA(insert OID = 0 ( 1247 chain           27 0  6  -7 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1247 anchor          27 0  6  -8 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1247 tmin               702 0  4  -9 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1247 tmax               702 0  4 -10 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1247 vtype           18 0  1 -11 0 -1 t f c f f));
+DATA(insert OID = 0 ( 1247 cmax                29 0  4  -6 0 -1 t f i f f));
 
 /* ----------------
  *     pg_database
@@ -227,14 +222,9 @@ DATA(insert OID = 0 ( 1262 datpath         25 0 -1   3 0 -1 f f i f f));
 DATA(insert OID = 0 ( 1262 ctid                27 0  6  -1 0 -1 f f i f f));
 DATA(insert OID = 0 ( 1262 oid             26 0  4  -2 0 -1 t f i f f));
 DATA(insert OID = 0 ( 1262 xmin                28 0  4  -3 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1262 cmin                29 0  2  -4 0 -1 t f s f f));
+DATA(insert OID = 0 ( 1262 cmin                29 0  4  -4 0 -1 t f i f f));
 DATA(insert OID = 0 ( 1262 xmax                28 0  4  -5 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1262 cmax                29 0  2  -6 0 -1 t f s f f));
-DATA(insert OID = 0 ( 1262 chain           27 0  6  -7 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1262 anchor          27 0  6  -8 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1262 tmin               702 0  4  -9 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1262 tmax               702 0  4 -10 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1262 vtype           18 0  1 -11 0 -1 t f c f f));
+DATA(insert OID = 0 ( 1262 cmax                29 0  4  -6 0 -1 t f i f f));
 
 /* ----------------
  *     pg_demon
@@ -248,14 +238,9 @@ DATA(insert OID = 0 ( 1251 ctid                27 0  6  -1 0 -1 f f i f f));
 
 DATA(insert OID = 0 ( 1251 oid             26 0  4  -2 0 -1 t f i f f));
 DATA(insert OID = 0 ( 1251 xmin                28 0  4  -3 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1251 cmin                29 0  2  -4 0 -1 t f s f f));
+DATA(insert OID = 0 ( 1251 cmin                29 0  4  -4 0 -1 t f i f f));
 DATA(insert OID = 0 ( 1251 xmax                28 0  4  -5 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1251 cmax                29 0  2  -6 0 -1 t f s f f));
-DATA(insert OID = 0 ( 1251 chain           27 0  6  -7 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1251 anchor          27 0  6  -8 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1251 tmin               702 0  4  -9 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1251 tmax               702 0  4 -10 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1251 vtype           18 0  1 -11 0 -1 t f c f f));
+DATA(insert OID = 0 ( 1251 cmax                29 0  4  -6 0 -1 t f i f f));
 
 /* ----------------
  *     pg_proc
@@ -298,14 +283,9 @@ DATA(insert OID = 0 ( 1255 probin          17 0 -1  16 0 -1 f f i f f));
 DATA(insert OID = 0 ( 1255 ctid                27 0  6  -1 0 -1 f f i f f));
 DATA(insert OID = 0 ( 1255 oid             26 0  4  -2 0 -1 t f i f f));
 DATA(insert OID = 0 ( 1255 xmin                28 0  4  -3 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1255 cmin                29 0  2  -4 0 -1 t f s f f));
+DATA(insert OID = 0 ( 1255 cmin                29 0  4  -4 0 -1 t f i f f));
 DATA(insert OID = 0 ( 1255 xmax                28 0  4  -5 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1255 cmax                29 0  2  -6 0 -1 t f s f f));
-DATA(insert OID = 0 ( 1255 chain           27 0  6  -7 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1255 anchor          27 0  6  -8 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1255 tmin               702 0  4  -9 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1255 tmax               702 0  4 -10 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1255 vtype           18 0  1 -11 0 -1 t f c f f));
+DATA(insert OID = 0 ( 1255 cmax                29 0  4  -6 0 -1 t f i f f));
 
 /* ----------------
  *     pg_server
@@ -317,14 +297,9 @@ DATA(insert OID = 0 ( 1257 serport         21 0  2   3 0 -1 t f s f f));
 DATA(insert OID = 0 ( 1257 ctid                27 0  6  -1 0 -1 f f i f f));
 DATA(insert OID = 0 ( 1257 oid             26 0  4  -2 0 -1 t f i f f));
 DATA(insert OID = 0 ( 1257 xmin                28 0  4  -3 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1257 cmin                29 0  2  -4 0 -1 t f s f f));
+DATA(insert OID = 0 ( 1257 cmin                29 0  4  -4 0 -1 t f i f f));
 DATA(insert OID = 0 ( 1257 xmax                28 0  4  -5 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1257 cmax                29 0  2  -6 0 -1 t f s f f));
-DATA(insert OID = 0 ( 1257 chain           27 0  6  -7 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1257 anchor          27 0  6  -8 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1257 tmin               702 0  4  -9 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1257 tmax               702 0  4 -10 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1257 vtype           18 0  1 -11 0 -1 t f c f f));
+DATA(insert OID = 0 ( 1257 cmax                29 0  4  -6 0 -1 t f i f f));
 
 /* ----------------
  *     pg_user
@@ -339,14 +314,9 @@ DATA(insert OID = 0 ( 1260 usecatupd       16 0  1   6 0 -1 t f c f f));
 DATA(insert OID = 0 ( 1260 ctid                27 0  6  -1 0 -1 f f i f f));
 DATA(insert OID = 0 ( 1260 oid             26 0  4  -2 0 -1 t f i f f));
 DATA(insert OID = 0 ( 1260 xmin                28 0  4  -3 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1260 cmin                29 0  2  -4 0 -1 t f s f f));
+DATA(insert OID = 0 ( 1260 cmin                29 0  4  -4 0 -1 t f i f f));
 DATA(insert OID = 0 ( 1260 xmax                28 0  4  -5 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1260 cmax                29 0  2  -6 0 -1 t f s f f));
-DATA(insert OID = 0 ( 1260 chain           27 0  6  -7 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1260 anchor          27 0  6  -8 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1260 tmin               702 0  4  -9 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1260 tmax               702 0  4 -10 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1260 vtype           18 0  1 -11 0 -1 t f c f f));
+DATA(insert OID = 0 ( 1260 cmax                29 0  4  -6 0 -1 t f i f f));
 
 /* ----------------
  *     pg_group
@@ -358,14 +328,9 @@ DATA(insert OID = 0 ( 1261 grolist       1007 0 -1   3 0 -1 f f i f f));
 DATA(insert OID = 0 ( 1261 ctid                27 0  6  -1 0 -1 f f i f f));
 DATA(insert OID = 0 ( 1261 oid             26 0  4  -2 0 -1 t f i f f));
 DATA(insert OID = 0 ( 1261 xmin                28 0  4  -3 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1261 cmin                29 0  2  -4 0 -1 t f s f f));
+DATA(insert OID = 0 ( 1261 cmin                29 0  4  -4 0 -1 t f i f f));
 DATA(insert OID = 0 ( 1261 xmax                28 0  4  -5 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1261 cmax                29 0  2  -6 0 -1 t f s f f));
-DATA(insert OID = 0 ( 1261 chain           27 0  6  -7 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1261 anchor          27 0  6  -8 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1261 tmin               702 0  4  -9 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1261 tmax               702 0  4 -10 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1261 vtype           18 0  1 -11 0 -1 t f c f f));
+DATA(insert OID = 0 ( 1261 cmax                29 0  4  -6 0 -1 t f i f f));
 
 /* ----------------
  *     pg_attribute
@@ -402,14 +367,9 @@ DATA(insert OID = 0 ( 1249 atthasdef       16 0  1  13 0 -1 t f c f f));
 DATA(insert OID = 0 ( 1249 ctid                27 0  6  -1 0 -1 f f i f f));
 DATA(insert OID = 0 ( 1249 oid             26 0  4  -2 0 -1 t f i f f));
 DATA(insert OID = 0 ( 1249 xmin                28 0  4  -3 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1249 cmin                29 0  2  -4 0 -1 t f s f f));
+DATA(insert OID = 0 ( 1249 cmin                29 0  4  -4 0 -1 t f i f f));
 DATA(insert OID = 0 ( 1249 xmax                28 0  4  -5 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1249 cmax                29 0  2  -6 0 -1 t f s f f));
-DATA(insert OID = 0 ( 1249 chain           27 0  6  -7 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1249 anchor          27 0  6  -8 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1249 tmin               702 0  4  -9 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1249 tmax               702 0  4 -10 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1249 vtype           18 0  1 -11 0 -1 t f c f f));
+DATA(insert OID = 0 ( 1249 cmax                29 0  4  -6 0 -1 t f i f f));
 
 /* ----------------
  *     pg_class
@@ -456,14 +416,9 @@ DATA(insert OID = 0 ( 1259 relacl        1034 0 -1  17 0 -1 f f i f f));
 DATA(insert OID = 0 ( 1259 ctid                27 0  6  -1 0 -1 f f i f f));
 DATA(insert OID = 0 ( 1259 oid             26 0  4  -2 0 -1 t f i f f));
 DATA(insert OID = 0 ( 1259 xmin                28 0  4  -3 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1259 cmin                29 0  2  -4 0 -1 t f s f f));
+DATA(insert OID = 0 ( 1259 cmin                29 0  4  -4 0 -1 t f i f f));
 DATA(insert OID = 0 ( 1259 xmax                28 0  4  -5 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1259 cmax                29 0  2  -6 0 -1 t f s f f));
-DATA(insert OID = 0 ( 1259 chain           27 0  6  -7 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1259 anchor          27 0  6  -8 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1259 tmin               702 0  4  -9 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1259 tmax               702 0  4 -10 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1259 vtype           18 0  1 -11 0 -1 t f c f f));
+DATA(insert OID = 0 ( 1259 cmax                29 0  4  -6 0 -1 t f i f f));
 
 /* ----------------
  *     pg_magic
@@ -474,14 +429,9 @@ DATA(insert OID = 0 ( 1253 magvalue            19 0 NAMEDATALEN   2 0 -1 f f i f f));
 DATA(insert OID = 0 ( 1253 ctid                27 0  6  -1 0 -1 f f i f f));
 DATA(insert OID = 0 ( 1253 oid             26 0  4  -2 0 -1 t f i f f));
 DATA(insert OID = 0 ( 1253 xmin                28 0  4  -3 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1253 cmin                29 0  2  -4 0 -1 t f s f f));
+DATA(insert OID = 0 ( 1253 cmin                29 0  4  -4 0 -1 t f i f f));
 DATA(insert OID = 0 ( 1253 xmax                28 0  4  -5 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1253 cmax                29 0  2  -6 0 -1 t f s f f));
-DATA(insert OID = 0 ( 1253 chain           27 0  6  -7 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1253 anchor          27 0  6  -8 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1253 tmin               702 0  4  -9 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1253 tmax               702 0  4 -10 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1253 vtype           18 0  1 -11 0 -1 t f c f f));
+DATA(insert OID = 0 ( 1253 cmax                29 0  4  -6 0 -1 t f i f f));
 
 /* ----------------
  *     pg_defaults
@@ -492,14 +442,9 @@ DATA(insert OID = 0 ( 1263 defvalue            19 0 NAMEDATALEN   2 0 -1 f f i f f));
 DATA(insert OID = 0 ( 1263 ctid                27 0  6  -1 0 -1 f f i f f));
 DATA(insert OID = 0 ( 1263 oid             26 0  4  -2 0 -1 t f i f f));
 DATA(insert OID = 0 ( 1263 xmin                28 0  4  -3 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1263 cmin                29 0  2  -4 0 -1 t f s f f));
+DATA(insert OID = 0 ( 1263 cmin                29 0  4  -4 0 -1 t f i f f));
 DATA(insert OID = 0 ( 1263 xmax                28 0  4  -5 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1263 cmax                29 0  2  -6 0 -1 t f s f f));
-DATA(insert OID = 0 ( 1263 chain           27 0  6  -7 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1263 anchor          27 0  6  -8 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1263 tmin               702 0  4  -9 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1263 tmax               702 0  4 -10 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1263 vtype           18 0  1 -11 0 -1 t f c f f));
+DATA(insert OID = 0 ( 1263 cmax                29 0  4  -6 0 -1 t f i f f));
 
 /* ----------------
  *     pg_attrdef
@@ -512,14 +457,9 @@ DATA(insert OID = 0 ( 1215 adsrc           25 0 -1   4 0 -1 f f i f f));
 DATA(insert OID = 0 ( 1215 ctid                27 0  6  -1 0 -1 f f i f f));
 DATA(insert OID = 0 ( 1215 oid             26 0  4  -2 0 -1 t f i f f));
 DATA(insert OID = 0 ( 1215 xmin                28 0  4  -3 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1215 cmin                29 0  2  -4 0 -1 t f s f f));
+DATA(insert OID = 0 ( 1215 cmin                29 0  4  -4 0 -1 t f i f f));
 DATA(insert OID = 0 ( 1215 xmax                28 0  4  -5 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1215 cmax                29 0  2  -6 0 -1 t f s f f));
-DATA(insert OID = 0 ( 1215 chain           27 0  6  -7 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1215 anchor          27 0  6  -8 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1215 tmin               702 0  4  -9 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1215 tmax               702 0  4 -10 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1215 vtype           18 0  1 -11 0 -1 t f c f f));
+DATA(insert OID = 0 ( 1215 cmax                29 0  4  -6 0 -1 t f i f f));
 
 /* ----------------
  *     pg_relcheck
@@ -532,14 +472,9 @@ DATA(insert OID = 0 ( 1216 rcsrc           25 0 -1   4 0 -1 f f i f f));
 DATA(insert OID = 0 ( 1216 ctid                27 0  6  -1 0 -1 f f i f f));
 DATA(insert OID = 0 ( 1216 oid             26 0  4  -2 0 -1 t f i f f));
 DATA(insert OID = 0 ( 1216 xmin                28 0  4  -3 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1216 cmin                29 0  2  -4 0 -1 t f s f f));
+DATA(insert OID = 0 ( 1216 cmin                29 0  4  -4 0 -1 t f i f f));
 DATA(insert OID = 0 ( 1216 xmax                28 0  4  -5 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1216 cmax                29 0  2  -6 0 -1 t f s f f));
-DATA(insert OID = 0 ( 1216 chain           27 0  6  -7 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1216 anchor          27 0  6  -8 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1216 tmin               702 0  4  -9 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1216 tmax               702 0  4 -10 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1216 vtype           18 0  1 -11 0 -1 t f c f f));
+DATA(insert OID = 0 ( 1216 cmax                29 0  4  -6 0 -1 t f i f f));
 
 /* ----------------
  *     pg_trigger
@@ -555,14 +490,9 @@ DATA(insert OID = 0 ( 1219 tgargs          17 0 -1   7 0 -1 f f i f f));
 DATA(insert OID = 0 ( 1219 ctid                27 0  6  -1 0 -1 f f i f f));
 DATA(insert OID = 0 ( 1219 oid             26 0  4  -2 0 -1 t f i f f));
 DATA(insert OID = 0 ( 1219 xmin                28 0  4  -3 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1219 cmin                29 0  2  -4 0 -1 t f s f f));
+DATA(insert OID = 0 ( 1219 cmin                29 0  4  -4 0 -1 t f i f f));
 DATA(insert OID = 0 ( 1219 xmax                28 0  4  -5 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1219 cmax                29 0  2  -6 0 -1 t f s f f));
-DATA(insert OID = 0 ( 1219 chain           27 0  6  -7 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1219 anchor          27 0  6  -8 0 -1 f f i f f));
-DATA(insert OID = 0 ( 1219 tmin               702 0  4  -9 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1219 tmax               702 0  4 -10 0 -1 t f i f f));
-DATA(insert OID = 0 ( 1219 vtype           18 0  1 -11 0 -1 t f c f f));
+DATA(insert OID = 0 ( 1219 cmax                29 0  4  -6 0 -1 t f i f f));
 
 /* ----------------
  *     pg_hosts - this relation is used to store host based authentication
@@ -596,15 +526,4 @@ DATA(insert OID = 0 ( 1264 varfoo          26 0  4   1 0 -1 t f i f f));
 
 DATA(insert OID = 0 ( 1269 logfoo          26 0  4   1 0 -1 t f i f f));
 
-/* ----------------
- *     pg_time - this relation is modified by special purpose access
- *               method code.  The following is garbage but is needed
- *               so that the reldesc code works properly.
- * ----------------
- */
-#define Schema_pg_time \
-{ 1271l, {"timefoo"},  26l, 0l, 4, 1, 0l, -1l, '\001', '\0', 'i', '\0', '\0' }
-
-DATA(insert OID = 0 (  1271 timefoo            26 0  4   1 0 -1 t f i f f));
-
 #endif                         /* PG_ATTRIBUTE_H */
index 837511528978eefbd7b59fac60e512276313cc6a..dad9f5c9541f1afc0ac331c7ae3f56c297e5a9f1 100644 (file)
@@ -7,7 +7,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pg_class.h,v 1.11 1997/09/08 02:35:03 momjian Exp $
+ * $Id: pg_class.h,v 1.12 1997/11/02 15:26:59 vadim Exp $
  *
  * NOTES
  *   ``pg_relation'' is being replaced by ``pg_class''.  currently
@@ -141,7 +141,6 @@ DATA(insert OID = 1262 (  pg_database 88      PGUID 0 0 0 0 0 f t r n 3 0 0 0 f _nu
 DATA(insert OID = 1263 (  pg_defaults 89     PGUID 0 0 0 0 0 f t r n 2 0 0 0 f _null_ ));
 DATA(insert OID = 1264 (  pg_variable 90     PGUID 0 0 0 0 0 f t s n 2 0 0 0 f _null_ ));
 DATA(insert OID = 1269 (  pg_log  99         PGUID 0 0 0 0 0 f t s n 1 0 0 0 f _null_ ));
-DATA(insert OID = 1271 (  pg_time 100        PGUID 0 0 0 0 0 f t s n 1 0 0 0 f _null_ ));
 DATA(insert OID = 1273 (  pg_hosts 101       PGUID 0 0 0 0 0 f t s n 3 0 0 0 f _null_ ));
 DATA(insert OID = 1215 (  pg_attrdef 109     PGUID 0 0 0 0 0 t t r n 4 0 0 0 f _null_ ));
 DATA(insert OID = 1216 (  pg_relcheck 110    PGUID 0 0 0 0 0 t t r n 4 0 0 0 f _null_ ));
@@ -160,7 +159,6 @@ DATA(insert OID = 1219 (  pg_trigger 111      PGUID 0 0 0 0 0 t t r n 7 0 0 0 f _nu
 #define RelOid_pg_defaults     1263
 #define RelOid_pg_variable     1264
 #define RelOid_pg_log          1269
-#define RelOid_pg_time         1271
 #define RelOid_pg_hosts            1273
 #define RelOid_pg_attrdef      1215
 #define RelOid_pg_relcheck     1216
diff --git a/src/include/catalog/pg_time.h b/src/include/catalog/pg_time.h
deleted file mode 100644 (file)
index 5767511..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/*-------------------------------------------------------------------------
- *
- * pg_time.h--
- *   the system commit-time relation "pg_time" is not a "heap" relation.
- *   it is automatically created by the transam/ code and the
- *   information here is all bogus and is just here to make the
- *   relcache code happy.
- *
- *
- * Copyright (c) 1994, Regents of the University of California
- *
- * $Id: pg_time.h,v 1.4 1997/09/08 02:35:28 momjian Exp $
- *
- * NOTES
- *   The structures and macros used by the transam/ code
- *   to access pg_time should some day go here -cim 6/18/90
- *
- *-------------------------------------------------------------------------
- */
-#ifndef PG_TIME_H
-#define PG_TIME_H
-
-/* ----------------
- *     postgres.h contains the system type definintions and the
- *     CATALOG(), BOOTSTRAP and DATA() sugar words so this file
- *     can be read by both genbki.sh and the C compiler.
- * ----------------
- */
-
-CATALOG(pg_time) BOOTSTRAP
-{
-   Oid         timefoo;
-} FormData_pg_time;
-
-typedef FormData_pg_time *Form_pg_time;
-
-#define Natts_pg_time          1
-#define Anum_pg_time_timefoo   1
-
-
-#endif                         /* PG_TIME_H */
index bbddb4da8ae97d6413a61359f3f16f0da0eb9905..0fde6eafe130dffedafd627d869252726797159d 100644 (file)
@@ -7,7 +7,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pg_type.h,v 1.19 1997/09/08 21:51:31 momjian Exp $
+ * $Id: pg_type.h,v 1.20 1997/11/02 15:27:03 vadim Exp $
  *
  * NOTES
  *   the genbki.sh script reads this file and generates .bki
@@ -186,7 +186,7 @@ DATA(insert OID = 26 (  oid        PGUID  4  10 t b t \054 0   0 int4in int4out int4
 
 DATA(insert OID = 27 ( tid        PGUID  6  19 f b t \054 0   0 tidin tidout tidin tidout i _null_ ));
 DATA(insert OID = 28 ( xid        PGUID  4  12 t b t \054 0   0 xidin xidout xidin xidout i _null_ ));
-DATA(insert OID = 29 ( cid        PGUID  2   3 t b t \054 0   0 cidin cidout cidin cidout s _null_ ));
+DATA(insert OID = 29 ( cid        PGUID  4  10 t b t \054 0   0 cidin cidout cidin cidout i _null_ ));
 DATA(insert OID = 30 ( oid8       PGUID 32  89 f b t \054 0  26 oid8in oid8out oid8in oid8out i _null_ ));
 DATA(insert OID = 32 ( SET        PGUID -1  -1 f r t \054 0  -1 textin textout textin textout i _null_ ));
 
@@ -206,7 +206,6 @@ DATA(insert OID = 99 (  pg_log       PGUID 1 1 t b t \054 1269 0 foo bar foo bar c _n
 
 /* OIDS 100 - 199 */
 
-DATA(insert OID = 100 (  pg_time    PGUID 1 1 t b t \054 1271 0 foo bar foo bar c _null_));
 DATA(insert OID = 101 (  pg_hosts   PGUID 1 1 t b t \054 1273 0 foo bar foo bar c _null_));
 DATA(insert OID = 109 (  pg_attrdef  PGUID 1 1 t b t \054 1215 0 foo bar foo bar c _null_));
 DATA(insert OID = 110 (  pg_relcheck PGUID 1 1 t b t \054 1216 0 foo bar foo bar c _null_));
index 7775ec0260f1f7b4d71c633083e6a1aac8fa4f6b..fbc06f2d7b0a747f337dfc1cffe288c19ffdd3c2 100644 (file)
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: parse_query.h,v 1.12 1997/09/08 21:53:39 momjian Exp $
+ * $Id: parse_query.h,v 1.13 1997/11/02 15:27:08 vadim Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -34,9 +34,6 @@ addRangeTableEntry(ParseState *pstate,
 extern List *
 expandAll(ParseState *pstate, char *relname, char *refname,
          int *this_resno);
-extern TimeQual
-makeTimeRange(char *datestring1, char *datestring2,
-             int timecode);
 extern Expr *make_op(char *opname, Node *ltree, Node *rtree);
 
 extern Oid find_atttype(Oid relid, char *attrname);
index 37d966cf2f4cbd186f5a866eda032dee3caefde7..504bb1aaad86970408f8abdcbd9cc827e1fe68a2 100644 (file)
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1995, Regents of the University of California
  *
- * $Id: postgres.h,v 1.9 1997/09/08 21:50:28 momjian Exp $
+ * $Id: postgres.h,v 1.10 1997/11/02 15:26:28 vadim Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -163,7 +163,7 @@ typedef struct OidNameData *OidName;
 typedef uint32 TransactionId;
 
 #define InvalidTransactionId   0
-typedef uint16 CommandId;
+typedef uint32 CommandId;
 
 #define FirstCommandId 0
 
index 11253891a98bed9943892b9cc90de36589c0050a..e07750bd3d6ab20965201eb09a4793ef4ad64ce4 100644 (file)
@@ -1,16 +1,12 @@
 /*-------------------------------------------------------------------------
  *
  * tqual.h--
- *   POSTGRES time qualification definitions.
+ *   POSTGRES "time" qualification definitions.
  *
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: tqual.h,v 1.9 1997/09/08 21:55:19 momjian Exp $
- *
- * NOTE
- *   It may be desirable to allow time qualifications to indicate
- *   relative times.
+ * $Id: tqual.h,v 1.10 1997/11/02 15:27:14 vadim Exp $
  *
  *-------------------------------------------------------------------------
  */
 
 #include 
 
-typedef struct TimeQualSpace
-{
-   char        data[12];
-} TimeQualSpace;
-
 typedef Pointer TimeQual;
 
 /* Tuples valid as of StartTransactionCommand */
@@ -35,10 +26,6 @@ extern TimeQual SelfTimeQual;
 extern void setheapoverride(bool on);
 extern bool heapisoverride(void);
 
-extern TimeQual TimeFormSnapshotTimeQual(AbsoluteTime time);
-extern TimeQual
-TimeFormRangedTimeQual(AbsoluteTime startTime,
-                      AbsoluteTime endTime);
 extern bool HeapTupleSatisfiesTimeQual(HeapTuple tuple, TimeQual qual);