diff options
Diffstat (limited to 'src/include/access/rtree.h')
-rw-r--r-- | src/include/access/rtree.h | 167 |
1 files changed, 88 insertions, 79 deletions
diff --git a/src/include/access/rtree.h b/src/include/access/rtree.h index c134d3dbbed..98699eba37f 100644 --- a/src/include/access/rtree.h +++ b/src/include/access/rtree.h @@ -1,12 +1,12 @@ /*------------------------------------------------------------------------- * * rtree.h-- - * common declarations for the rtree access method code. + * common declarations for the rtree access method code. * * * Copyright (c) 1994, Regents of the University of California * - * $Id: rtree.h,v 1.6 1997/08/19 21:37:36 momjian Exp $ + * $Id: rtree.h,v 1.7 1997/09/07 04:56:09 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -23,116 +23,125 @@ #include <storage/off.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; +#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. + * When we descend a tree, we keep a stack of parent pointers. */ -typedef struct RTSTACK { - struct RTSTACK *rts_parent; +typedef struct RTSTACK +{ + struct RTSTACK *rts_parent; OffsetNumber rts_child; - BlockNumber rts_blk; -} RTSTACK; + 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. + * 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 struct RTreeScanOpaqueData +{ + struct RTSTACK *s_stack; + struct RTSTACK *s_markstk; + uint16 s_flags; + uint16 s_internalNKey; + ScanKey s_internalKey; +} RTreeScanOpaqueData; -typedef RTreeScanOpaqueData *RTreeScanOpaque; +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. + * 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 +#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. + * 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 +#define RTOP_DEL 0 +#define RTOP_SPLIT 1 /* defined in rtree.c */ -extern void freestack(RTSTACK *s); +extern void freestack(RTSTACK * s); /* rget.c */ extern RetrieveIndexResult rtgettuple(IndexScanDesc s, ScanDirection dir); /* - * RTree code. - * Defined in access/index-rtree/ + * 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 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); +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); +extern void +rtadjscans(Relation r, int op, BlockNumber blkno, + OffsetNumber offnum); + /* rtstrat.h */ -extern RegProcedure RTMapOperator(Relation r, AttrNumber attnum, - RegProcedure proc); +extern RegProcedure +RTMapOperator(Relation r, AttrNumber attnum, + RegProcedure proc); -#endif /* RTREE_H */ +#endif /* RTREE_H */ |