*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/access/transam/transam.c,v 1.50 2001/11/05 17:46:24 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/access/transam/transam.c,v 1.51 2002/05/25 20:00:11 tgl Exp $
*
* NOTES
* This file contains the high level access-method interface to the
#include "access/transam.h"
+/* ----------------
+ * Flag indicating that we are bootstrapping.
+ *
+ * Transaction ID generation is disabled during bootstrap; we just use
+ * BootstrapTransactionId. Also, the transaction ID status-check routines
+ * are short-circuited; they claim that BootstrapTransactionId has already
+ * committed, allowing tuples already inserted to be seen immediately.
+ * ----------------
+ */
+bool AMI_OVERRIDE = false;
+
+
static bool TransactionLogTest(TransactionId transactionId, XidStatus status);
static void TransactionLogUpdate(TransactionId transactionId,
XidStatus status);
TransactionIdDidCommit(TransactionId transactionId)
{
if (AMI_OVERRIDE)
+ {
+ Assert(transactionId == BootstrapTransactionId);
return true;
+ }
return TransactionLogTest(transactionId, TRANSACTION_STATUS_COMMITTED);
}
TransactionIdDidAbort(TransactionId transactionId)
{
if (AMI_OVERRIDE)
+ {
+ Assert(transactionId == BootstrapTransactionId);
return false;
+ }
return TransactionLogTest(transactionId, TRANSACTION_STATUS_ABORTED);
}
TransactionIdIsInProgress(TransactionId transactionId)
{
if (AMI_OVERRIDE)
+ {
+ Assert(transactionId == BootstrapTransactionId);
return false;
+ }
return TransactionLogTest(transactionId, TRANSACTION_STATUS_IN_PROGRESS);
}
void
TransactionIdCommit(TransactionId transactionId)
{
- if (AMI_OVERRIDE)
- return;
-
TransactionLogUpdate(transactionId, TRANSACTION_STATUS_COMMITTED);
}
void
TransactionIdAbort(TransactionId transactionId)
{
- if (AMI_OVERRIDE)
- return;
-
TransactionLogUpdate(transactionId, TRANSACTION_STATUS_ABORTED);
}
* Copyright (c) 2000, PostgreSQL Global Development Group
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/access/transam/varsup.c,v 1.48 2001/10/28 06:25:42 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/access/transam/varsup.c,v 1.49 2002/05/25 20:00:11 tgl Exp $
*
*-------------------------------------------------------------------------
*/
{
TransactionId xid;
- /*
- * During bootstrap initialization, we return the special bootstrap
- * transaction id.
- */
- if (AMI_OVERRIDE)
- return BootstrapTransactionId;
-
LWLockAcquire(XidGenLock, LW_SHARED);
xid = ShmemVariableCache->nextXid;
LWLockRelease(XidGenLock);
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/access/transam/xact.c,v 1.124 2002/05/22 21:40:55 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/access/transam/xact.c,v 1.125 2002/05/25 20:00:12 tgl Exp $
*
* NOTES
* Transaction aborts can now occur two ways:
static void (*_RollbackFunc) (void *) = NULL;
static void *_RollbackData = NULL;
-/* ----------------
- * catalog creation transaction bootstrapping flag.
- * This should be eliminated and added to the transaction
- * state stuff. -cim 3/19/90
- * ----------------
- */
-bool AMI_OVERRIDE = false;
/* ----------------------------------------------------------------
* transaction state accessors
/* --------------------------------
* TransactionIdIsCurrentTransactionId
+ *
+ * During bootstrap, we cheat and say "it's not my transaction ID" even though
+ * it is. Along with transam.c's cheat to say that the bootstrap XID is
+ * already committed, this causes the tqual.c routines to see previously
+ * inserted tuples as committed, which is what we need during bootstrap.
* --------------------------------
*/
bool
TransactionState s = CurrentTransactionState;
if (AMI_OVERRIDE)
+ {
+ Assert(xid == BootstrapTransactionId);
return false;
+ }
return TransactionIdEquals(xid, s->transactionIdData);
}
{
TransactionState s = CurrentTransactionState;
- if (AMI_OVERRIDE)
- return false;
-
return (cid == s->commandId) ? true : false;
}
* Portions Copyright (c) 1994, Regents of the University of California
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/time/tqual.c,v 1.53 2002/05/24 18:57:56 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/time/tqual.c,v 1.54 2002/05/25 20:00:12 tgl Exp $
*
*-------------------------------------------------------------------------
*/
bool
HeapTupleSatisfiesNow(HeapTupleHeader tuple)
{
- if (AMI_OVERRIDE)
- return true;
-
if (!(tuple->t_infomask & HEAP_XMIN_COMMITTED))
{
if (tuple->t_infomask & HEAP_XMIN_INVALID)
{
HeapTupleHeader tuple = htuple->t_data;
- if (AMI_OVERRIDE)
- return HeapTupleMayBeUpdated;
-
if (!(tuple->t_infomask & HEAP_XMIN_COMMITTED))
{
if (tuple->t_infomask & HEAP_XMIN_INVALID)
SnapshotDirty->xmin = SnapshotDirty->xmax = InvalidTransactionId;
ItemPointerSetInvalid(&(SnapshotDirty->tid));
- if (AMI_OVERRIDE)
- return true;
-
if (!(tuple->t_infomask & HEAP_XMIN_COMMITTED))
{
if (tuple->t_infomask & HEAP_XMIN_INVALID)
bool
HeapTupleSatisfiesSnapshot(HeapTupleHeader tuple, Snapshot snapshot)
{
- if (AMI_OVERRIDE)
- return true;
-
/* XXX this is horribly ugly: */
if (ReferentialIntegritySnapshotOverride)
return HeapTupleSatisfiesNow(tuple);
* Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: transam.h,v 1.44 2001/11/05 17:46:31 momjian Exp $
+ * $Id: transam.h,v 1.45 2002/05/25 20:00:12 tgl Exp $
*
*-------------------------------------------------------------------------
*/
* ----------------
*/
+/* in transam/transam.c */
+extern bool AMI_OVERRIDE;
+
+/* in transam/varsup.c */
+extern VariableCache ShmemVariableCache;
+
+
/*
* prototypes for functions in transam/transam.c
*/
extern Oid GetNewObjectId(void);
extern void CheckMaxObjectId(Oid assigned_oid);
-/* ----------------
- * global variable extern declarations
- * ----------------
- */
-
-/* in xact.c */
-extern bool AMI_OVERRIDE;
-
-/* in varsup.c */
-extern VariableCache ShmemVariableCache;
-
#endif /* TRAMSAM_H */