PostgreSQL Source Code  git master
gist.h File Reference
#include "access/itup.h"
#include "access/transam.h"
#include "access/xlog.h"
#include "access/xlogdefs.h"
#include "storage/block.h"
#include "storage/bufpage.h"
#include "utils/relcache.h"
Include dependency graph for gist.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  GISTPageOpaqueData
 
struct  GIST_SPLITVEC
 
struct  GISTENTRY
 
struct  GISTDeletedPageContents
 
struct  GistEntryVector
 

Macros

#define GIST_CONSISTENT_PROC   1
 
#define GIST_UNION_PROC   2
 
#define GIST_COMPRESS_PROC   3
 
#define GIST_DECOMPRESS_PROC   4
 
#define GIST_PENALTY_PROC   5
 
#define GIST_PICKSPLIT_PROC   6
 
#define GIST_EQUAL_PROC   7
 
#define GIST_DISTANCE_PROC   8
 
#define GIST_FETCH_PROC   9
 
#define GIST_OPTIONS_PROC   10
 
#define GIST_SORTSUPPORT_PROC   11
 
#define GISTNProcs   11
 
#define F_LEAF   (1 << 0) /* leaf page */
 
#define F_DELETED   (1 << 1) /* the page has been deleted */
 
#define F_TUPLES_DELETED
 
#define F_FOLLOW_RIGHT   (1 << 3) /* page to the right has no downlink */
 
#define F_HAS_GARBAGE
 
#define GistBuildLSN   ((XLogRecPtr) 1)
 
#define GISTMaxIndexTupleSize
 
#define GISTMaxIndexKeySize    (GISTMaxIndexTupleSize - MAXALIGN(sizeof(IndexTupleData)))
 
#define GIST_PAGE_ID   0xFF81
 
#define GistPageGetOpaque(page)   ( (GISTPageOpaque) PageGetSpecialPointer(page) )
 
#define GistPageIsLeaf(page)   ( GistPageGetOpaque(page)->flags & F_LEAF)
 
#define GIST_LEAF(entry)   (GistPageIsLeaf((entry)->page))
 
#define GistPageIsDeleted(page)   ( GistPageGetOpaque(page)->flags & F_DELETED)
 
#define GistTuplesDeleted(page)   ( GistPageGetOpaque(page)->flags & F_TUPLES_DELETED)
 
#define GistMarkTuplesDeleted(page)   ( GistPageGetOpaque(page)->flags |= F_TUPLES_DELETED)
 
#define GistClearTuplesDeleted(page)   ( GistPageGetOpaque(page)->flags &= ~F_TUPLES_DELETED)
 
#define GistPageHasGarbage(page)   ( GistPageGetOpaque(page)->flags & F_HAS_GARBAGE)
 
#define GistMarkPageHasGarbage(page)   ( GistPageGetOpaque(page)->flags |= F_HAS_GARBAGE)
 
#define GistClearPageHasGarbage(page)   ( GistPageGetOpaque(page)->flags &= ~F_HAS_GARBAGE)
 
#define GistFollowRight(page)   ( GistPageGetOpaque(page)->flags & F_FOLLOW_RIGHT)
 
#define GistMarkFollowRight(page)   ( GistPageGetOpaque(page)->flags |= F_FOLLOW_RIGHT)
 
#define GistClearFollowRight(page)   ( GistPageGetOpaque(page)->flags &= ~F_FOLLOW_RIGHT)
 
#define GistPageGetNSN(page)   ( PageXLogRecPtrGet(GistPageGetOpaque(page)->nsn))
 
#define GistPageSetNSN(page, val)   ( PageXLogRecPtrSet(GistPageGetOpaque(page)->nsn, val))
 
#define GEVHDRSZ   (offsetof(GistEntryVector, vector))
 
#define gistentryinit(e, k, r, pg, o, l)
 

Typedefs

typedef XLogRecPtr GistNSN
 
typedef PageXLogRecPtr PageGistNSN
 
typedef struct GISTPageOpaqueData GISTPageOpaqueData
 
typedef GISTPageOpaqueDataGISTPageOpaque
 
typedef struct GIST_SPLITVEC GIST_SPLITVEC
 
typedef struct GISTENTRY GISTENTRY
 
typedef struct GISTDeletedPageContents GISTDeletedPageContents
 

Functions

static void GistPageSetDeleted (Page page, FullTransactionId deletexid)
 
static FullTransactionId GistPageGetDeleteXid (Page page)
 

Macro Definition Documentation

◆ F_DELETED

#define F_DELETED   (1 << 1) /* the page has been deleted */

Definition at line 47 of file gist.h.

◆ F_FOLLOW_RIGHT

#define F_FOLLOW_RIGHT   (1 << 3) /* page to the right has no downlink */

Definition at line 49 of file gist.h.

◆ F_HAS_GARBAGE

#define F_HAS_GARBAGE
Value:
(1 << 4) /* some tuples on the page are dead,
* but not deleted yet */

Definition at line 50 of file gist.h.

◆ F_LEAF

#define F_LEAF   (1 << 0) /* leaf page */

Definition at line 46 of file gist.h.

◆ F_TUPLES_DELETED

#define F_TUPLES_DELETED
Value:
(1 << 2) /* some tuples on the page were
* deleted */

Definition at line 48 of file gist.h.

◆ GEVHDRSZ

#define GEVHDRSZ   (offsetof(GistEntryVector, vector))

Definition at line 237 of file gist.h.

◆ GIST_COMPRESS_PROC

#define GIST_COMPRESS_PROC   3

Definition at line 32 of file gist.h.

◆ GIST_CONSISTENT_PROC

#define GIST_CONSISTENT_PROC   1

Definition at line 30 of file gist.h.

◆ GIST_DECOMPRESS_PROC

#define GIST_DECOMPRESS_PROC   4

Definition at line 33 of file gist.h.

◆ GIST_DISTANCE_PROC

#define GIST_DISTANCE_PROC   8

Definition at line 37 of file gist.h.

◆ GIST_EQUAL_PROC

#define GIST_EQUAL_PROC   7

Definition at line 36 of file gist.h.

◆ GIST_FETCH_PROC

#define GIST_FETCH_PROC   9

Definition at line 38 of file gist.h.

◆ GIST_LEAF

#define GIST_LEAF (   entry)    (GistPageIsLeaf((entry)->page))

Definition at line 168 of file gist.h.

◆ GIST_OPTIONS_PROC

#define GIST_OPTIONS_PROC   10

Definition at line 39 of file gist.h.

◆ GIST_PAGE_ID

#define GIST_PAGE_ID   0xFF81

Definition at line 109 of file gist.h.

◆ GIST_PENALTY_PROC

#define GIST_PENALTY_PROC   5

Definition at line 34 of file gist.h.

◆ GIST_PICKSPLIT_PROC

#define GIST_PICKSPLIT_PROC   6

Definition at line 35 of file gist.h.

◆ GIST_SORTSUPPORT_PROC

#define GIST_SORTSUPPORT_PROC   11

Definition at line 40 of file gist.h.

◆ GIST_UNION_PROC

#define GIST_UNION_PROC   2

Definition at line 31 of file gist.h.

◆ GistBuildLSN

#define GistBuildLSN   ((XLogRecPtr) 1)

Definition at line 67 of file gist.h.

◆ GistClearFollowRight

#define GistClearFollowRight (   page)    ( GistPageGetOpaque(page)->flags &= ~F_FOLLOW_RIGHT)

Definition at line 182 of file gist.h.

◆ GistClearPageHasGarbage

#define GistClearPageHasGarbage (   page)    ( GistPageGetOpaque(page)->flags &= ~F_HAS_GARBAGE)

Definition at line 178 of file gist.h.

◆ GistClearTuplesDeleted

#define GistClearTuplesDeleted (   page)    ( GistPageGetOpaque(page)->flags &= ~F_TUPLES_DELETED)

Definition at line 174 of file gist.h.

◆ gistentryinit

#define gistentryinit (   e,
  k,
  r,
  pg,
  o,
 
)
Value:
do { (e).key = (k); (e).rel = (r); (e).page = (pg); \
(e).offset = (o); (e).leafkey = (l); } while (0)
e
Definition: preproc-init.c:82

Definition at line 242 of file gist.h.

◆ GistFollowRight

#define GistFollowRight (   page)    ( GistPageGetOpaque(page)->flags & F_FOLLOW_RIGHT)

Definition at line 180 of file gist.h.

◆ GistMarkFollowRight

#define GistMarkFollowRight (   page)    ( GistPageGetOpaque(page)->flags |= F_FOLLOW_RIGHT)

Definition at line 181 of file gist.h.

◆ GistMarkPageHasGarbage

#define GistMarkPageHasGarbage (   page)    ( GistPageGetOpaque(page)->flags |= F_HAS_GARBAGE)

Definition at line 177 of file gist.h.

◆ GistMarkTuplesDeleted

#define GistMarkTuplesDeleted (   page)    ( GistPageGetOpaque(page)->flags |= F_TUPLES_DELETED)

Definition at line 173 of file gist.h.

◆ GISTMaxIndexKeySize

#define GISTMaxIndexKeySize    (GISTMaxIndexTupleSize - MAXALIGN(sizeof(IndexTupleData)))

Definition at line 100 of file gist.h.

◆ GISTMaxIndexTupleSize

#define GISTMaxIndexTupleSize
Value:
4 - sizeof(ItemIdData))
#define SizeOfPageHeaderData
Definition: bufpage.h:216
#define MAXALIGN_DOWN(LEN)
Definition: c.h:823

Definition at line 96 of file gist.h.

◆ GISTNProcs

#define GISTNProcs   11

Definition at line 41 of file gist.h.

◆ GistPageGetNSN

#define GistPageGetNSN (   page)    ( PageXLogRecPtrGet(GistPageGetOpaque(page)->nsn))

Definition at line 184 of file gist.h.

◆ GistPageGetOpaque

#define GistPageGetOpaque (   page)    ( (GISTPageOpaque) PageGetSpecialPointer(page) )

Definition at line 165 of file gist.h.

◆ GistPageHasGarbage

#define GistPageHasGarbage (   page)    ( GistPageGetOpaque(page)->flags & F_HAS_GARBAGE)

Definition at line 176 of file gist.h.

◆ GistPageIsDeleted

#define GistPageIsDeleted (   page)    ( GistPageGetOpaque(page)->flags & F_DELETED)

Definition at line 170 of file gist.h.

◆ GistPageIsLeaf

#define GistPageIsLeaf (   page)    ( GistPageGetOpaque(page)->flags & F_LEAF)

Definition at line 167 of file gist.h.

◆ GistPageSetNSN

#define GistPageSetNSN (   page,
  val 
)    ( PageXLogRecPtrSet(GistPageGetOpaque(page)->nsn, val))

Definition at line 185 of file gist.h.

◆ GistTuplesDeleted

#define GistTuplesDeleted (   page)    ( GistPageGetOpaque(page)->flags & F_TUPLES_DELETED)

Definition at line 172 of file gist.h.

Typedef Documentation

◆ GIST_SPLITVEC

typedef struct GIST_SPLITVEC GIST_SPLITVEC

◆ GISTDeletedPageContents

◆ GISTENTRY

typedef struct GISTENTRY GISTENTRY

◆ GistNSN

Definition at line 60 of file gist.h.

◆ GISTPageOpaque

Definition at line 83 of file gist.h.

◆ GISTPageOpaqueData

◆ PageGistNSN

Definition at line 73 of file gist.h.

Function Documentation

◆ GistPageGetDeleteXid()

static FullTransactionId GistPageGetDeleteXid ( Page  page)
inlinestatic

Definition at line 213 of file gist.h.

216 {
217  Assert(GistPageIsDeleted(page));
218 
219  /* Is the deleteXid field present? */
220  if (((PageHeader) page)->pd_lower >= MAXALIGN(SizeOfPageHeaderData) +
221  offsetof(GISTDeletedPageContents, deleteXid) + sizeof(FullTransactionId))
222  {
223  return ((GISTDeletedPageContents *) PageGetContents(page))->deleteXid;
224  }
225  else
static char * PageGetContents(Page page)
Definition: bufpage.h:257
#define MAXALIGN(LEN)
Definition: c.h:811
#define Assert(condition)
Definition: c.h:858
#define GistPageIsDeleted(page)
Definition: gist.h:170

References Assert, FirstNormalTransactionId, FullTransactionIdFromEpochAndXid(), GistPageIsDeleted, MAXALIGN, PageGetContents(), and SizeOfPageHeaderData.

Referenced by gistNewBuffer(), and gistPageRecyclable().

◆ GistPageSetDeleted()

static void GistPageSetDeleted ( Page  page,
FullTransactionId  deletexid 
)
inlinestatic

Definition at line 202 of file gist.h.

205 {
206  Assert(PageIsEmpty(page));
207 
208  GistPageGetOpaque(page)->flags |= F_DELETED;
209  ((PageHeader) page)->pd_lower = MAXALIGN(SizeOfPageHeaderData) + sizeof(GISTDeletedPageContents);
210 
PageHeaderData * PageHeader
Definition: bufpage.h:173
static bool PageIsEmpty(Page page)
Definition: bufpage.h:223
struct GISTDeletedPageContents GISTDeletedPageContents
#define GistPageGetOpaque(page)
Definition: gist.h:165
#define F_DELETED
Definition: gist.h:47

References Assert, F_DELETED, GistPageGetOpaque, MAXALIGN, PageGetContents(), PageIsEmpty(), and SizeOfPageHeaderData.

Referenced by gistdeletepage(), and gistRedoPageDelete().