PostgreSQL Source Code git master
gist.h File Reference
#include "access/itup.h"
#include "access/stratnum.h"
#include "access/transam.h"
#include "access/xlog.h"
#include "access/xlogdefs.h"
#include "nodes/primnodes.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 GIST_STRATNUM_PROC   12
 
#define GISTNProcs   12
 
#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)
 
StrategyNumber gisttranslatecmptype (CompareType cmptype, Oid opfamily)
 

Macro Definition Documentation

◆ F_DELETED

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

Definition at line 50 of file gist.h.

◆ F_FOLLOW_RIGHT

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

Definition at line 52 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 53 of file gist.h.

◆ F_LEAF

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

Definition at line 49 of file gist.h.

◆ F_TUPLES_DELETED

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

Definition at line 51 of file gist.h.

◆ GEVHDRSZ

#define GEVHDRSZ   (offsetof(GistEntryVector, vector))

Definition at line 240 of file gist.h.

◆ GIST_COMPRESS_PROC

#define GIST_COMPRESS_PROC   3

Definition at line 34 of file gist.h.

◆ GIST_CONSISTENT_PROC

#define GIST_CONSISTENT_PROC   1

Definition at line 32 of file gist.h.

◆ GIST_DECOMPRESS_PROC

#define GIST_DECOMPRESS_PROC   4

Definition at line 35 of file gist.h.

◆ GIST_DISTANCE_PROC

#define GIST_DISTANCE_PROC   8

Definition at line 39 of file gist.h.

◆ GIST_EQUAL_PROC

#define GIST_EQUAL_PROC   7

Definition at line 38 of file gist.h.

◆ GIST_FETCH_PROC

#define GIST_FETCH_PROC   9

Definition at line 40 of file gist.h.

◆ GIST_LEAF

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

Definition at line 171 of file gist.h.

◆ GIST_OPTIONS_PROC

#define GIST_OPTIONS_PROC   10

Definition at line 41 of file gist.h.

◆ GIST_PAGE_ID

#define GIST_PAGE_ID   0xFF81

Definition at line 112 of file gist.h.

◆ GIST_PENALTY_PROC

#define GIST_PENALTY_PROC   5

Definition at line 36 of file gist.h.

◆ GIST_PICKSPLIT_PROC

#define GIST_PICKSPLIT_PROC   6

Definition at line 37 of file gist.h.

◆ GIST_SORTSUPPORT_PROC

#define GIST_SORTSUPPORT_PROC   11

Definition at line 42 of file gist.h.

◆ GIST_STRATNUM_PROC

#define GIST_STRATNUM_PROC   12

Definition at line 43 of file gist.h.

◆ GIST_UNION_PROC

#define GIST_UNION_PROC   2

Definition at line 33 of file gist.h.

◆ GistBuildLSN

#define GistBuildLSN   ((XLogRecPtr) 1)

Definition at line 70 of file gist.h.

◆ GistClearFollowRight

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

Definition at line 185 of file gist.h.

◆ GistClearPageHasGarbage

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

Definition at line 181 of file gist.h.

◆ GistClearTuplesDeleted

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

Definition at line 177 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 245 of file gist.h.

◆ GistFollowRight

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

Definition at line 183 of file gist.h.

◆ GistMarkFollowRight

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

Definition at line 184 of file gist.h.

◆ GistMarkPageHasGarbage

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

Definition at line 180 of file gist.h.

◆ GistMarkTuplesDeleted

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

Definition at line 176 of file gist.h.

◆ GISTMaxIndexKeySize

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

Definition at line 103 of file gist.h.

◆ GISTMaxIndexTupleSize

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

Definition at line 99 of file gist.h.

◆ GISTNProcs

#define GISTNProcs   12

Definition at line 44 of file gist.h.

◆ GistPageGetNSN

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

Definition at line 187 of file gist.h.

◆ GistPageGetOpaque

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

Definition at line 168 of file gist.h.

◆ GistPageHasGarbage

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

Definition at line 179 of file gist.h.

◆ GistPageIsDeleted

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

Definition at line 173 of file gist.h.

◆ GistPageIsLeaf

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

Definition at line 170 of file gist.h.

◆ GistPageSetNSN

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

Definition at line 188 of file gist.h.

◆ GistTuplesDeleted

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

Definition at line 175 of file gist.h.

Typedef Documentation

◆ GIST_SPLITVEC

typedef struct GIST_SPLITVEC GIST_SPLITVEC

◆ GISTDeletedPageContents

◆ GISTENTRY

typedef struct GISTENTRY GISTENTRY

◆ GistNSN

Definition at line 63 of file gist.h.

◆ GISTPageOpaque

Definition at line 86 of file gist.h.

◆ GISTPageOpaqueData

◆ PageGistNSN

Definition at line 76 of file gist.h.

Function Documentation

◆ GistPageGetDeleteXid()

static FullTransactionId GistPageGetDeleteXid ( Page  page)
inlinestatic

Definition at line 216 of file gist.h.

219{
221
222 /* Is the deleteXid field present? */
223 if (((PageHeader) page)->pd_lower >= MAXALIGN(SizeOfPageHeaderData) +
224 offsetof(GISTDeletedPageContents, deleteXid) + sizeof(FullTransactionId))
225 {
226 return ((GISTDeletedPageContents *) PageGetContents(page))->deleteXid;
227 }
228 else
static char * PageGetContents(Page page)
Definition: bufpage.h:258
#define MAXALIGN(LEN)
Definition: c.h:782
#define GistPageIsDeleted(page)
Definition: gist.h:173
Assert(PointerIsAligned(start, uint64))

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 205 of file gist.h.

208{
209 Assert(PageIsEmpty(page));
210
211 GistPageGetOpaque(page)->flags |= F_DELETED;
212 ((PageHeader) page)->pd_lower = MAXALIGN(SizeOfPageHeaderData) + sizeof(GISTDeletedPageContents);
213
static bool PageIsEmpty(const PageData *page)
Definition: bufpage.h:224
PageHeaderData * PageHeader
Definition: bufpage.h:174
struct GISTDeletedPageContents GISTDeletedPageContents
#define GistPageGetOpaque(page)
Definition: gist.h:168
#define F_DELETED
Definition: gist.h:50

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

Referenced by gistdeletepage(), and gistRedoPageDelete().

◆ gisttranslatecmptype()

StrategyNumber gisttranslatecmptype ( CompareType  cmptype,
Oid  opfamily 
)

Definition at line 1098 of file gistutil.c.

1099{
1100 Oid funcid;
1101 Datum result;
1102
1103 /* Check whether the function is provided. */
1104 funcid = get_opfamily_proc(opfamily, ANYOID, ANYOID, GIST_STRATNUM_PROC);
1105 if (!OidIsValid(funcid))
1106 return InvalidStrategy;
1107
1108 /* Ask the translation function */
1109 result = OidFunctionCall1Coll(funcid, InvalidOid, Int32GetDatum(cmptype));
1110 return DatumGetUInt16(result);
1111}
#define OidIsValid(objectId)
Definition: c.h:746
Datum OidFunctionCall1Coll(Oid functionId, Oid collation, Datum arg1)
Definition: fmgr.c:1411
#define GIST_STRATNUM_PROC
Definition: gist.h:43
Oid get_opfamily_proc(Oid opfamily, Oid lefttype, Oid righttype, int16 procnum)
Definition: lsyscache.c:831
uintptr_t Datum
Definition: postgres.h:69
static uint16 DatumGetUInt16(Datum X)
Definition: postgres.h:187
static Datum Int32GetDatum(int32 X)
Definition: postgres.h:217
#define InvalidOid
Definition: postgres_ext.h:37
unsigned int Oid
Definition: postgres_ext.h:32
#define InvalidStrategy
Definition: stratnum.h:24

References DatumGetUInt16(), get_opfamily_proc(), GIST_STRATNUM_PROC, Int32GetDatum(), InvalidOid, InvalidStrategy, OidFunctionCall1Coll(), and OidIsValid.

Referenced by gisthandler().