⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rtree.h

📁 关系型数据库 Postgresql 6.5.2
💻 H
字号:
/*------------------------------------------------------------------------- * * rtree.h *	  common declarations for the rtree access method code. * * * Copyright (c) 1994, Regents of the University of California * * $Id: rtree.h,v 1.14.2.1 1999/08/02 05:25:22 scrappy Exp $ * *------------------------------------------------------------------------- */#ifndef RTREE_H#define RTREE_H#include "access/funcindex.h"#include "access/itup.h"#include "access/relscan.h"#include "access/sdir.h"/* see rtstrat.c for what all this is about */#define RTNStrategies					8#define RTLeftStrategyNumber			1#define RTOverLeftStrategyNumber		2#define RTOverlapStrategyNumber			3#define RTOverRightStrategyNumber		4#define RTRightStrategyNumber			5#define RTSameStrategyNumber			6#define RTContainsStrategyNumber		7#define RTContainedByStrategyNumber		8#define RTNProcs						3#define RT_UNION_PROC					1#define RT_INTER_PROC					2#define RT_SIZE_PROC					3#define F_LEAF			(1 << 0)typedef struct RTreePageOpaqueData{	uint32		flags;} RTreePageOpaqueData;typedef RTreePageOpaqueData *RTreePageOpaque;/* *	When we descend a tree, we keep a stack of parent pointers. */typedef struct RTSTACK{	struct RTSTACK *rts_parent;	OffsetNumber rts_child;	BlockNumber rts_blk;} RTSTACK;/* *	When we're doing a scan, we need to keep track of the parent stack *	for the marked and current items.  Also, rtrees have the following *	property:  if you're looking for the box (1,1,2,2), on the internal *	nodes you have to search for all boxes that *contain* (1,1,2,2), and *	not the ones that match it.  We have a private scan key for internal *	nodes in the opaque structure for rtrees for this reason.  See *	access/index-rtree/rtscan.c and rtstrat.c for how it gets initialized. */typedef struct RTreeScanOpaqueData{	struct RTSTACK *s_stack;	struct RTSTACK *s_markstk;	uint16		s_flags;	uint16		s_internalNKey;	ScanKey		s_internalKey;} RTreeScanOpaqueData;typedef RTreeScanOpaqueData *RTreeScanOpaque;/* *	When we're doing a scan and updating a tree at the same time, the *	updates may affect the scan.  We use the flags entry of the scan's *	opaque space to record our actual position in response to updates *	that we can't handle simply by adjusting pointers. */#define RTS_CURBEFORE	((uint16) (1 << 0))#define RTS_MRKBEFORE	((uint16) (1 << 1))/* root page of an rtree */#define P_ROOT			0/* *	When we update a relation on which we're doing a scan, we need to *	check the scan and fix it if the update affected any of the pages it *	touches.  Otherwise, we can miss records that we should see.  The only *	times we need to do this are for deletions and splits.	See the code in *	rtscan.c for how the scan is fixed.  These two contants tell us what sort *	of operation changed the index. */#define RTOP_DEL		0#define RTOP_SPLIT		1/* defined in rtree.c */extern void freestack(RTSTACK *s);/* rget.c */extern RetrieveIndexResult rtgettuple(IndexScanDesc s, ScanDirection dir);/* *		RTree code. *		Defined in access/index-rtree/ */extern InsertIndexResult rtinsert(Relation r, Datum *datum, char *nulls,		 ItemPointer ht_ctid, Relation heapRel);extern char *rtdelete(Relation r, ItemPointer tid);extern RetrieveIndexResult rtgettuple(IndexScanDesc s, ScanDirection dir);extern IndexScanDesc rtbeginscan(Relation r, bool fromEnd, uint16 nkeys,			ScanKey key);extern void rtendscan(IndexScanDesc s);extern void rtmarkpos(IndexScanDesc s);extern void rtrestrpos(IndexScanDesc s);extern void rtrescan(IndexScanDesc s, bool fromEnd, ScanKey key);extern void rtbuild(Relation heap, Relation index, int natts,		AttrNumber *attnum, IndexStrategy istrat, uint16 pcount,		Datum *params, FuncIndexInfo *finfo, PredInfo *predInfo);extern void _rtdump(Relation r);/* rtscan.c */extern void rtadjscans(Relation r, int op, BlockNumber blkno,		   OffsetNumber offnum);/* rtstrat.h */extern RegProcedure RTMapOperator(Relation r, AttrNumber attnum,			  RegProcedure proc);#endif	 /* RTREE_H */

⌨️ 快捷键说明

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