diff options
Diffstat (limited to 'src/include/utils')
-rw-r--r-- | src/include/utils/snapmgmt.h | 33 | ||||
-rw-r--r-- | src/include/utils/snapshot.h | 62 | ||||
-rw-r--r-- | src/include/utils/tqual.h | 65 |
3 files changed, 97 insertions, 63 deletions
diff --git a/src/include/utils/snapmgmt.h b/src/include/utils/snapmgmt.h new file mode 100644 index 00000000000..349523ea2e1 --- /dev/null +++ b/src/include/utils/snapmgmt.h @@ -0,0 +1,33 @@ +/*------------------------------------------------------------------------- + * + * snapmgmt.h + * POSTGRES snapshot management definitions + * + * Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * $PostgreSQL: pgsql/src/include/utils/snapmgmt.h,v 1.1 2008/03/26 16:20:48 alvherre Exp $ + * + *------------------------------------------------------------------------- + */ +#ifndef SNAPMGMT_H +#define SNAPMGMT_H + +#include "utils/snapshot.h" + + +extern PGDLLIMPORT Snapshot SerializableSnapshot; +extern PGDLLIMPORT Snapshot LatestSnapshot; +extern PGDLLIMPORT Snapshot ActiveSnapshot; + +extern TransactionId TransactionXmin; +extern TransactionId RecentXmin; +extern TransactionId RecentGlobalXmin; + +extern Snapshot GetTransactionSnapshot(void); +extern Snapshot GetLatestSnapshot(void); +extern Snapshot CopySnapshot(Snapshot snapshot); +extern void FreeSnapshot(Snapshot snapshot); +extern void FreeXactSnapshot(void); + +#endif /* SNAPMGMT_H */ diff --git a/src/include/utils/snapshot.h b/src/include/utils/snapshot.h new file mode 100644 index 00000000000..7dca978ee98 --- /dev/null +++ b/src/include/utils/snapshot.h @@ -0,0 +1,62 @@ +/*------------------------------------------------------------------------- + * + * snapshot.h + * POSTGRES snapshot definition + * + * Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * $PostgreSQL: pgsql/src/include/utils/snapshot.h,v 1.1 2008/03/26 16:20:48 alvherre Exp $ + * + *------------------------------------------------------------------------- + */ +#ifndef SNAPSHOT_H +#define SNAPSHOT_H + +#include "access/htup.h" +#include "storage/buf.h" + + +typedef struct SnapshotData *Snapshot; + +#define InvalidSnapshot ((Snapshot) NULL) + +/* + * We use SnapshotData structures to represent both "regular" (MVCC) + * snapshots and "special" snapshots that have non-MVCC semantics. + * The specific semantics of a snapshot are encoded by the "satisfies" + * function. + */ +typedef bool (*SnapshotSatisfiesFunc) (HeapTupleHeader tuple, + Snapshot snapshot, Buffer buffer); + +typedef struct SnapshotData +{ + SnapshotSatisfiesFunc satisfies; /* tuple test function */ + + /* + * The remaining fields are used only for MVCC snapshots, and are normally + * just zeroes in special snapshots. (But xmin and xmax are used + * specially by HeapTupleSatisfiesDirty.) + * + * An MVCC snapshot can never see the effects of XIDs >= xmax. It can see + * the effects of all older XIDs except those listed in the snapshot. xmin + * is stored as an optimization to avoid needing to search the XID arrays + * for most tuples. + */ + TransactionId xmin; /* all XID < xmin are visible to me */ + TransactionId xmax; /* all XID >= xmax are invisible to me */ + uint32 xcnt; /* # of xact ids in xip[] */ + TransactionId *xip; /* array of xact IDs in progress */ + /* note: all ids in xip[] satisfy xmin <= xip[i] < xmax */ + int32 subxcnt; /* # of xact ids in subxip[], -1 if overflow */ + TransactionId *subxip; /* array of subxact IDs in progress */ + + /* + * note: all ids in subxip[] are >= xmin, but we don't bother filtering + * out any that are >= xmax + */ + CommandId curcid; /* in my xact, CID < curcid are visible */ +} SnapshotData; + +#endif /* SNAPSHOT_H */ diff --git a/src/include/utils/tqual.h b/src/include/utils/tqual.h index a0399bd3318..c9e078369f3 100644 --- a/src/include/utils/tqual.h +++ b/src/include/utils/tqual.h @@ -8,59 +8,16 @@ * Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/utils/tqual.h,v 1.71 2008/01/01 19:45:59 momjian Exp $ + * $PostgreSQL: pgsql/src/include/utils/tqual.h,v 1.72 2008/03/26 16:20:48 alvherre Exp $ * *------------------------------------------------------------------------- */ #ifndef TQUAL_H #define TQUAL_H -#include "access/htup.h" -#include "storage/buf.h" +#include "utils/snapshot.h" -/* - * We use SnapshotData structures to represent both "regular" (MVCC) - * snapshots and "special" snapshots that have non-MVCC semantics. - * The specific semantics of a snapshot are encoded by the "satisfies" - * function. - */ -typedef struct SnapshotData *Snapshot; - -typedef bool (*SnapshotSatisfiesFunc) (HeapTupleHeader tuple, - Snapshot snapshot, Buffer buffer); - -typedef struct SnapshotData -{ - SnapshotSatisfiesFunc satisfies; /* tuple test function */ - - /* - * The remaining fields are used only for MVCC snapshots, and are normally - * just zeroes in special snapshots. (But xmin and xmax are used - * specially by HeapTupleSatisfiesDirty.) - * - * An MVCC snapshot can never see the effects of XIDs >= xmax. It can see - * the effects of all older XIDs except those listed in the snapshot. xmin - * is stored as an optimization to avoid needing to search the XID arrays - * for most tuples. - */ - TransactionId xmin; /* all XID < xmin are visible to me */ - TransactionId xmax; /* all XID >= xmax are invisible to me */ - uint32 xcnt; /* # of xact ids in xip[] */ - TransactionId *xip; /* array of xact IDs in progress */ - /* note: all ids in xip[] satisfy xmin <= xip[i] < xmax */ - int32 subxcnt; /* # of xact ids in subxip[], -1 if overflow */ - TransactionId *subxip; /* array of subxact IDs in progress */ - - /* - * note: all ids in subxip[] are >= xmin, but we don't bother filtering - * out any that are >= xmax - */ - CommandId curcid; /* in my xact, CID < curcid are visible */ -} SnapshotData; - -#define InvalidSnapshot ((Snapshot) NULL) - /* Static variables representing various special snapshot semantics */ extern PGDLLIMPORT SnapshotData SnapshotNowData; extern PGDLLIMPORT SnapshotData SnapshotSelfData; @@ -84,15 +41,6 @@ extern PGDLLIMPORT SnapshotData SnapshotToastData; #define IsMVCCSnapshot(snapshot) \ ((snapshot)->satisfies == HeapTupleSatisfiesMVCC) - -extern PGDLLIMPORT Snapshot SerializableSnapshot; -extern PGDLLIMPORT Snapshot LatestSnapshot; -extern PGDLLIMPORT Snapshot ActiveSnapshot; - -extern TransactionId TransactionXmin; -extern TransactionId RecentXmin; -extern TransactionId RecentGlobalXmin; - /* * HeapTupleSatisfiesVisibility * True iff heap tuple satisfies a time qual. @@ -149,13 +97,4 @@ extern HTSV_Result HeapTupleSatisfiesVacuum(HeapTupleHeader tuple, extern void HeapTupleSetHintBits(HeapTupleHeader tuple, Buffer buffer, uint16 infomask, TransactionId xid); -extern Snapshot GetTransactionSnapshot(void); -extern Snapshot GetLatestSnapshot(void); -extern Snapshot CopySnapshot(Snapshot snapshot); -extern void FreeSnapshot(Snapshot snapshot); -extern void FreeXactSnapshot(void); - -/* in procarray.c; declared here to avoid including tqual.h in procarray.h: */ -extern Snapshot GetSnapshotData(Snapshot snapshot, bool serializable); - #endif /* TQUAL_H */ |