diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c index 6dd0c357fb..e5284d0b8c 100644 --- a/src/backend/access/heap/heapam.c +++ b/src/backend/access/heap/heapam.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/access/heap/heapam.c,v 1.173 2004/08/29 05:06:40 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/access/heap/heapam.c,v 1.174 2004/09/11 18:28:32 tgl Exp $ * * * INTERFACE ROUTINES @@ -1262,7 +1262,7 @@ simple_heap_insert(Relation relation, HeapTuple tup) * tid - TID of tuple to be deleted * ctid - output parameter, used only for failure case (see below) * cid - delete command ID to use in verifying tuple visibility - * crosscheck - if not SnapshotAny, also check tuple against this + * crosscheck - if not InvalidSnapshot, also check tuple against this * wait - true if should wait for any conflicting update to commit/abort * * Normal, successful return value is HeapTupleMayBeUpdated, which @@ -1274,7 +1274,8 @@ simple_heap_insert(Relation relation, HeapTuple tup) */ int heap_delete(Relation relation, ItemPointer tid, - ItemPointer ctid, CommandId cid, Snapshot crosscheck, bool wait) + ItemPointer ctid, CommandId cid, + Snapshot crosscheck, bool wait) { ItemId lp; HeapTupleData tp; @@ -1339,7 +1340,7 @@ l1: result = HeapTupleUpdated; } - if (crosscheck != SnapshotAny && result == HeapTupleMayBeUpdated) + if (crosscheck != InvalidSnapshot && result == HeapTupleMayBeUpdated) { /* Perform additional check for serializable RI updates */ if (!HeapTupleSatisfiesSnapshot(tp.t_data, crosscheck)) @@ -1443,7 +1444,7 @@ simple_heap_delete(Relation relation, ItemPointer tid) result = heap_delete(relation, tid, &ctid, - GetCurrentCommandId(), SnapshotAny, + GetCurrentCommandId(), InvalidSnapshot, true /* wait for commit */ ); switch (result) { @@ -1477,7 +1478,7 @@ simple_heap_delete(Relation relation, ItemPointer tid) * newtup - newly constructed tuple data to store * ctid - output parameter, used only for failure case (see below) * cid - update command ID to use in verifying old tuple visibility - * crosscheck - if not SnapshotAny, also check old tuple against this + * crosscheck - if not InvalidSnapshot, also check old tuple against this * wait - true if should wait for any conflicting update to commit/abort * * Normal, successful return value is HeapTupleMayBeUpdated, which @@ -1491,7 +1492,8 @@ simple_heap_delete(Relation relation, ItemPointer tid) */ int heap_update(Relation relation, ItemPointer otid, HeapTuple newtup, - ItemPointer ctid, CommandId cid, Snapshot crosscheck, bool wait) + ItemPointer ctid, CommandId cid, + Snapshot crosscheck, bool wait) { ItemId lp; HeapTupleData oldtup; @@ -1566,7 +1568,7 @@ l2: result = HeapTupleUpdated; } - if (crosscheck != SnapshotAny && result == HeapTupleMayBeUpdated) + if (crosscheck != InvalidSnapshot && result == HeapTupleMayBeUpdated) { /* Perform additional check for serializable RI updates */ if (!HeapTupleSatisfiesSnapshot(oldtup.t_data, crosscheck)) @@ -1804,7 +1806,7 @@ simple_heap_update(Relation relation, ItemPointer otid, HeapTuple tup) result = heap_update(relation, otid, tup, &ctid, - GetCurrentCommandId(), SnapshotAny, + GetCurrentCommandId(), InvalidSnapshot, true /* wait for commit */ ); switch (result) { diff --git a/src/backend/commands/async.c b/src/backend/commands/async.c index f25b857045..c964f8d9fa 100644 --- a/src/backend/commands/async.c +++ b/src/backend/commands/async.c @@ -7,7 +7,7 @@ * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/commands/async.c,v 1.116 2004/09/06 23:32:54 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/commands/async.c,v 1.117 2004/09/11 18:28:33 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -544,7 +544,7 @@ AtCommit_Notify(void) */ result = heap_update(lRel, &lTuple->t_self, rTuple, &ctid, - GetCurrentCommandId(), SnapshotAny, + GetCurrentCommandId(), InvalidSnapshot, false /* no wait for commit */ ); switch (result) { diff --git a/src/backend/executor/execMain.c b/src/backend/executor/execMain.c index d77bc7054a..b009e73e10 100644 --- a/src/backend/executor/execMain.c +++ b/src/backend/executor/execMain.c @@ -26,7 +26,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/executor/execMain.c,v 1.236 2004/08/29 05:06:42 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/executor/execMain.c,v 1.237 2004/09/11 18:28:34 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -176,7 +176,7 @@ ExecutorStart(QueryDesc *queryDesc, bool useCurrentSnapshot, bool explainOnly) { /* normal query --- use query snapshot, no crosscheck */ estate->es_snapshot = CopyQuerySnapshot(); - estate->es_crosscheck_snapshot = SnapshotAny; + estate->es_crosscheck_snapshot = InvalidSnapshot; } /* diff --git a/src/backend/executor/execUtils.c b/src/backend/executor/execUtils.c index 79ab787b07..a1736766b2 100644 --- a/src/backend/executor/execUtils.c +++ b/src/backend/executor/execUtils.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/executor/execUtils.c,v 1.114 2004/08/29 05:06:42 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/executor/execUtils.c,v 1.115 2004/09/11 18:28:34 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -179,7 +179,7 @@ CreateExecutorState(void) */ estate->es_direction = ForwardScanDirection; estate->es_snapshot = SnapshotNow; - estate->es_crosscheck_snapshot = SnapshotAny; /* means no crosscheck */ + estate->es_crosscheck_snapshot = InvalidSnapshot; /* no crosscheck */ estate->es_range_table = NIL; estate->es_result_relations = NULL; diff --git a/src/include/utils/tqual.h b/src/include/utils/tqual.h index e378e444da..627bcaf75a 100644 --- a/src/include/utils/tqual.h +++ b/src/include/utils/tqual.h @@ -8,7 +8,7 @@ * Portions Copyright (c) 1996-2004, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/utils/tqual.h,v 1.50 2004/08/29 04:13:11 momjian Exp $ + * $PostgreSQL: pgsql/src/include/utils/tqual.h,v 1.51 2004/09/11 18:28:34 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -19,6 +19,20 @@ #include "access/xact.h" +/* + * "Regular" snapshots are pointers to a SnapshotData structure. + * + * We also have some "special" snapshot values that have fixed meanings + * and don't need any backing SnapshotData. These are encoded by small + * integer values, which of course is a gross violation of ANSI C, but + * it works fine on all known platforms. + * + * SnapshotDirty is an even more special case: its semantics are fixed, + * but there is a backing SnapshotData struct for it. That struct is + * actually used as *output* data from tqual.c, not input into it. + * (But hey, SnapshotDirty ought to have a dirty implementation, no? ;-)) + */ + typedef struct SnapshotData { TransactionId xmin; /* XID < xmin are visible to me */ @@ -32,10 +46,12 @@ typedef struct SnapshotData typedef SnapshotData *Snapshot; -#define SnapshotNow ((Snapshot) 0x0) -#define SnapshotSelf ((Snapshot) 0x1) -#define SnapshotAny ((Snapshot) 0x2) -#define SnapshotToast ((Snapshot) 0x3) +/* Special snapshot values: */ +#define InvalidSnapshot ((Snapshot) 0x0) /* same as NULL */ +#define SnapshotNow ((Snapshot) 0x1) +#define SnapshotSelf ((Snapshot) 0x2) +#define SnapshotAny ((Snapshot) 0x3) +#define SnapshotToast ((Snapshot) 0x4) extern DLLIMPORT Snapshot SnapshotDirty; extern DLLIMPORT Snapshot QuerySnapshot;