summaryrefslogtreecommitdiff
path: root/src/include/access/spgist_private.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/include/access/spgist_private.h')
-rw-r--r--src/include/access/spgist_private.h234
1 files changed, 2 insertions, 232 deletions
diff --git a/src/include/access/spgist_private.h b/src/include/access/spgist_private.h
index cb8fa9c0b5..4072c050de 100644
--- a/src/include/access/spgist_private.h
+++ b/src/include/access/spgist_private.h
@@ -4,7 +4,7 @@
* Private declarations for SP-GiST access method.
*
*
- * Portions Copyright (c) 1996-2016, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1996-2017, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
* src/include/access/spgist_private.h
@@ -159,7 +159,7 @@ typedef struct SpGistScanOpaqueData
int iPtr; /* index for scanning through same */
ItemPointerData heapPtrs[MaxIndexTuplesPerPage]; /* TIDs from cur page */
bool recheck[MaxIndexTuplesPerPage]; /* their recheck flags */
- IndexTuple indexTups[MaxIndexTuplesPerPage]; /* reconstructed tuples */
+ HeapTuple reconTups[MaxIndexTuplesPerPage]; /* reconstructed tuples */
/*
* Note: using MaxIndexTuplesPerPage above is a bit hokey since
@@ -354,28 +354,6 @@ typedef SpGistDeadTupleData *SpGistDeadTuple;
* XLOG stuff
*/
-/* XLOG record types for SPGiST */
-#define XLOG_SPGIST_CREATE_INDEX 0x00
-#define XLOG_SPGIST_ADD_LEAF 0x10
-#define XLOG_SPGIST_MOVE_LEAFS 0x20
-#define XLOG_SPGIST_ADD_NODE 0x30
-#define XLOG_SPGIST_SPLIT_TUPLE 0x40
-#define XLOG_SPGIST_PICKSPLIT 0x50
-#define XLOG_SPGIST_VACUUM_LEAF 0x60
-#define XLOG_SPGIST_VACUUM_ROOT 0x70
-#define XLOG_SPGIST_VACUUM_REDIRECT 0x80
-
-/*
- * Some redo functions need an SpGistState, although only a few of its fields
- * need to be valid. spgxlogState carries the required info in xlog records.
- * (See fillFakeState in spgxlog.c for more comments.)
- */
-typedef struct spgxlogState
-{
- TransactionId myXid;
- bool isBuild;
-} spgxlogState;
-
#define STORE_STATE(s, d) \
do { \
(d).myXid = (s)->myXid; \
@@ -383,214 +361,6 @@ typedef struct spgxlogState
} while(0)
/*
- * Backup Blk 0: destination page for leaf tuple
- * Backup Blk 1: parent page (if any)
- */
-typedef struct spgxlogAddLeaf
-{
- bool newPage; /* init dest page? */
- bool storesNulls; /* page is in the nulls tree? */
- OffsetNumber offnumLeaf; /* offset where leaf tuple gets placed */
- OffsetNumber offnumHeadLeaf; /* offset of head tuple in chain, if any */
-
- OffsetNumber offnumParent; /* where the parent downlink is, if any */
- uint16 nodeI;
-
- /* new leaf tuple follows (unaligned!) */
-} spgxlogAddLeaf;
-
-/*
- * Backup Blk 0: source leaf page
- * Backup Blk 1: destination leaf page
- * Backup Blk 2: parent page
- */
-typedef struct spgxlogMoveLeafs
-{
- uint16 nMoves; /* number of tuples moved from source page */
- bool newPage; /* init dest page? */
- bool replaceDead; /* are we replacing a DEAD source tuple? */
- bool storesNulls; /* pages are in the nulls tree? */
-
- /* where the parent downlink is */
- OffsetNumber offnumParent;
- uint16 nodeI;
-
- spgxlogState stateSrc;
-
- /*----------
- * data follows:
- * array of deleted tuple numbers, length nMoves
- * array of inserted tuple numbers, length nMoves + 1 or 1
- * list of leaf tuples, length nMoves + 1 or 1 (unaligned!)
- *
- * Note: if replaceDead is true then there is only one inserted tuple
- * number and only one leaf tuple in the data, because we are not copying
- * the dead tuple from the source
- *----------
- */
- OffsetNumber offsets[FLEXIBLE_ARRAY_MEMBER];
-} spgxlogMoveLeafs;
-
-#define SizeOfSpgxlogMoveLeafs offsetof(spgxlogMoveLeafs, offsets)
-
-/*
- * Backup Blk 0: original page
- * Backup Blk 1: where new tuple goes, if not same place
- * Backup Blk 2: where parent downlink is, if updated and different from
- * the old and new
- */
-typedef struct spgxlogAddNode
-{
- /*
- * Offset of the original inner tuple, in the original page (on backup
- * block 0).
- */
- OffsetNumber offnum;
-
- /*
- * Offset of the new tuple, on the new page (on backup block 1). Invalid,
- * if we overwrote the old tuple in the original page).
- */
- OffsetNumber offnumNew;
- bool newPage; /* init new page? */
-
- /*----
- * Where is the parent downlink? parentBlk indicates which page it's on,
- * and offnumParent is the offset within the page. The possible values for
- * parentBlk are:
- *
- * 0: parent == original page
- * 1: parent == new page
- * 2: parent == different page (blk ref 2)
- * -1: parent not updated
- *----
- */
- int8 parentBlk;
- OffsetNumber offnumParent; /* offset within the parent page */
-
- uint16 nodeI;
-
- spgxlogState stateSrc;
-
- /*
- * updated inner tuple follows (unaligned!)
- */
-} spgxlogAddNode;
-
-/*
- * Backup Blk 0: where the prefix tuple goes
- * Backup Blk 1: where the postfix tuple goes (if different page)
- */
-typedef struct spgxlogSplitTuple
-{
- /* where the prefix tuple goes */
- OffsetNumber offnumPrefix;
-
- /* where the postfix tuple goes */
- OffsetNumber offnumPostfix;
- bool newPage; /* need to init that page? */
- bool postfixBlkSame; /* was postfix tuple put on same page as
- * prefix? */
-
- /*
- * new prefix inner tuple follows, then new postfix inner tuple (both are
- * unaligned!)
- */
-} spgxlogSplitTuple;
-
-/*
- * Buffer references in the rdata array are:
- * Backup Blk 0: Src page (only if not root)
- * Backup Blk 1: Dest page (if used)
- * Backup Blk 2: Inner page
- * Backup Blk 3: Parent page (if any, and different from Inner)
- */
-typedef struct spgxlogPickSplit
-{
- bool isRootSplit;
-
- uint16 nDelete; /* n to delete from Src */
- uint16 nInsert; /* n to insert on Src and/or Dest */
- bool initSrc; /* re-init the Src page? */
- bool initDest; /* re-init the Dest page? */
-
- /* where to put new inner tuple */
- OffsetNumber offnumInner;
- bool initInner; /* re-init the Inner page? */
-
- bool storesNulls; /* pages are in the nulls tree? */
-
- /* where the parent downlink is, if any */
- bool innerIsParent; /* is parent the same as inner page? */
- OffsetNumber offnumParent;
- uint16 nodeI;
-
- spgxlogState stateSrc;
-
- /*----------
- * data follows:
- * array of deleted tuple numbers, length nDelete
- * array of inserted tuple numbers, length nInsert
- * array of page selector bytes for inserted tuples, length nInsert
- * new inner tuple (unaligned!)
- * list of leaf tuples, length nInsert (unaligned!)
- *----------
- */
- OffsetNumber offsets[FLEXIBLE_ARRAY_MEMBER];
-} spgxlogPickSplit;
-
-#define SizeOfSpgxlogPickSplit offsetof(spgxlogPickSplit, offsets)
-
-typedef struct spgxlogVacuumLeaf
-{
- uint16 nDead; /* number of tuples to become DEAD */
- uint16 nPlaceholder; /* number of tuples to become PLACEHOLDER */
- uint16 nMove; /* number of tuples to move */
- uint16 nChain; /* number of tuples to re-chain */
-
- spgxlogState stateSrc;
-
- /*----------
- * data follows:
- * tuple numbers to become DEAD
- * tuple numbers to become PLACEHOLDER
- * tuple numbers to move from (and replace with PLACEHOLDER)
- * tuple numbers to move to (replacing what is there)
- * tuple numbers to update nextOffset links of
- * tuple numbers to insert in nextOffset links
- *----------
- */
- OffsetNumber offsets[FLEXIBLE_ARRAY_MEMBER];
-} spgxlogVacuumLeaf;
-
-#define SizeOfSpgxlogVacuumLeaf offsetof(spgxlogVacuumLeaf, offsets)
-
-typedef struct spgxlogVacuumRoot
-{
- /* vacuum a root page when it is also a leaf */
- uint16 nDelete; /* number of tuples to delete */
-
- spgxlogState stateSrc;
-
- /* offsets of tuples to delete follow */
- OffsetNumber offsets[FLEXIBLE_ARRAY_MEMBER];
-} spgxlogVacuumRoot;
-
-#define SizeOfSpgxlogVacuumRoot offsetof(spgxlogVacuumRoot, offsets)
-
-typedef struct spgxlogVacuumRedirect
-{
- uint16 nToPlaceholder; /* number of redirects to make placeholders */
- OffsetNumber firstPlaceholder; /* first placeholder tuple to remove */
- TransactionId newestRedirectXid; /* newest XID of removed redirects */
-
- /* offsets of redirect tuples to make placeholders follow */
- OffsetNumber offsets[FLEXIBLE_ARRAY_MEMBER];
-} spgxlogVacuumRedirect;
-
-#define SizeOfSpgxlogVacuumRedirect offsetof(spgxlogVacuumRedirect, offsets)
-
-/*
* The "flags" argument for SpGistGetBuffer should be either GBUF_LEAF to
* get a leaf page, or GBUF_INNER_PARITY(blockNumber) to get an inner
* page in the same triple-parity group as the specified block number.