gist.h

来自「PostgreSQL 8.2中增加了很多企业用户所需要的功能和性能上的提高,其开」· C头文件 代码 · 共 148 行

H
148
字号
/*------------------------------------------------------------------------- * * gist.h *	  The public API for GiST indexes. This API is exposed to *	  individuals implementing GiST indexes, so backward-incompatible *	  changes should be made with care. * * * Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * $PostgreSQL: pgsql/src/include/access/gist.h,v 1.56 2006/10/04 00:30:06 momjian Exp $ * *------------------------------------------------------------------------- */#ifndef GIST_H#define GIST_H#include "access/xlog.h"#include "access/xlogdefs.h"#include "storage/bufpage.h"#include "storage/off.h"#include "utils/rel.h"/* * amproc indexes for GiST indexes. */#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 GISTNProcs						7/* * strategy numbers for GiST opclasses that want to implement the old * RTREE behavior. */#define RTLeftStrategyNumber			1#define RTOverLeftStrategyNumber		2#define RTOverlapStrategyNumber			3#define RTOverRightStrategyNumber		4#define RTRightStrategyNumber			5#define RTSameStrategyNumber			6#define RTContainsStrategyNumber		7		/* for @> */#define RTContainedByStrategyNumber		8		/* for <@ */#define RTOverBelowStrategyNumber		9#define RTBelowStrategyNumber			10#define RTAboveStrategyNumber			11#define RTOverAboveStrategyNumber		12#define RTOldContainsStrategyNumber		13		/* for old spelling of @> */#define RTOldContainedByStrategyNumber	14		/* for old spelling of <@ *//* * Page opaque data in a GiST index page. */#define F_LEAF			(1 << 0)#define F_DELETED		(1 << 1)#define F_TUPLES_DELETED	(1 << 2)typedef XLogRecPtr GistNSN;typedef struct GISTPageOpaqueData{	uint32		flags;			/* 29 bits are unused for now */	BlockNumber rightlink;	/*	 * the only meaning - change this value if page split.	 */	GistNSN		nsn;} GISTPageOpaqueData;typedef GISTPageOpaqueData *GISTPageOpaque;/* * This is the Split Vector to be returned by the PickSplit method. * PickSplit should check spl_(r|l)datum_exists. If it is 'true', * that corresponding spl_(r|l)datum already defined and * PickSplit should use that value. PickSplit should always set * spl_(r|l)datum_exists to false: GiST will check value to * control supportng this feature by PickSplit... */typedef struct GIST_SPLITVEC{	OffsetNumber *spl_left;		/* array of entries that go left */	int			spl_nleft;		/* size of this array */	Datum		spl_ldatum;		/* Union of keys in spl_left */	bool		spl_ldatum_exists;		/* true, if spl_ldatum already exists. */	OffsetNumber *spl_right;	/* array of entries that go right */	int			spl_nright;		/* size of the array */	Datum		spl_rdatum;		/* Union of keys in spl_right */	bool		spl_rdatum_exists;		/* true, if spl_rdatum already exists. */} GIST_SPLITVEC;/* * An entry on a GiST node.  Contains the key, as well as its own * location (rel,page,offset) which can supply the matching pointer. * leafkey is a flag to tell us if the entry is in a leaf node. */typedef struct GISTENTRY{	Datum		key;	Relation	rel;	Page		page;	OffsetNumber offset;	bool		leafkey;} GISTENTRY;#define GistPageGetOpaque(page) ( (GISTPageOpaque) PageGetSpecialPointer(page) )#define GistPageIsLeaf(page)	( GistPageGetOpaque(page)->flags & F_LEAF)#define GIST_LEAF(entry) (GistPageIsLeaf((entry)->page))#define GistPageSetLeaf(page)	( GistPageGetOpaque(page)->flags |= F_LEAF)#define GistPageSetNonLeaf(page)	( GistPageGetOpaque(page)->flags &= ~F_LEAF)#define GistPageIsDeleted(page) ( GistPageGetOpaque(page)->flags & F_DELETED)#define GistPageSetDeleted(page)	( GistPageGetOpaque(page)->flags |= F_DELETED)#define GistPageSetNonDeleted(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)/* * Vector of GISTENTRY structs; user-defined methods union and pick * split takes it as one of their arguments */typedef struct{	int32		n;				/* number of elements */	GISTENTRY	vector[1];} GistEntryVector;#define GEVHDRSZ	(offsetof(GistEntryVector, vector))/* * macro to initialize a GISTENTRY */#define gistentryinit(e, k, r, pg, o, l) \	do { (e).key = (k); (e).rel = (r); (e).page = (pg); \		 (e).offset = (o); (e).leafkey = (l); } while (0)#endif   /* GIST_H */

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?