mirror of
https://github.com/postgres/postgres.git
synced 2025-11-06 07:49:08 +03:00
Separate snapshot management code from tuple visibility code, create a
snapmgmt.c file for the former. The header files have also been reorganized in three parts: the most basic snapshot definitions are now in a new file snapshot.h, and the also new snapmgmt.h keeps the definitions for snapmgmt.c. tqual.h has been reduced to the bare minimum. This patch is just a first step towards managing live snapshots within a transaction; there is no functionality change. Per my proposal to pgsql-patches on 20080318191940.GB27458@alvh.no-ip.org and subsequent discussion.
This commit is contained in:
62
src/include/utils/snapshot.h
Normal file
62
src/include/utils/snapshot.h
Normal file
@@ -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 */
|
||||
Reference in New Issue
Block a user