*
*
* 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
* 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
*/
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;
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))
result = heap_delete(relation, tid,
&ctid,
- GetCurrentCommandId(), SnapshotAny,
+ GetCurrentCommandId(), InvalidSnapshot,
true /* wait for commit */ );
switch (result)
{
* 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
*/
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;
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))
result = heap_update(relation, otid, tup,
&ctid,
- GetCurrentCommandId(), SnapshotAny,
+ GetCurrentCommandId(), InvalidSnapshot,
true /* wait for commit */ );
switch (result)
{
* 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 $
*
*-------------------------------------------------------------------------
*/
*/
result = heap_update(lRel, &lTuple->t_self, rTuple,
&ctid,
- GetCurrentCommandId(), SnapshotAny,
+ GetCurrentCommandId(), InvalidSnapshot,
false /* no wait for commit */ );
switch (result)
{
*
*
* 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 $
*
*-------------------------------------------------------------------------
*/
{
/* normal query --- use query snapshot, no crosscheck */
estate->es_snapshot = CopyQuerySnapshot();
- estate->es_crosscheck_snapshot = SnapshotAny;
+ estate->es_crosscheck_snapshot = InvalidSnapshot;
}
/*
*
*
* 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 $
*
*-------------------------------------------------------------------------
*/
*/
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;
* 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 $
*
*-------------------------------------------------------------------------
*/
#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 */
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;