@ -3,7 +3,7 @@
* header file for postgres inverted index access method implementation .
*
* Copyright ( c ) 2006 , PostgreSQL Global Development Group
* $ PostgreSQL : pgsql / src / include / access / gin . h , v 1.10 2007 / 01 / 31 15 : 09 : 45 teodor Exp $
* $ PostgreSQL : pgsql / src / include / access / gin . h , v 1.11 2007 / 04 / 09 22 : 04 : 04 tgl Exp $
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
*/
@ -31,41 +31,27 @@
# define GIN_CONSISTENT_PROC 4
# define GINNProcs 4
typedef XLogRecPtr GinNSN ;
/*
* Page opaque data in a inverted index page .
*
* Note : GIN does not include a page ID word as do the other index types .
* This is OK because the opaque data is only 8 bytes and so can be reliably
* distinguished by size . Revisit this if the size ever increases .
*/
typedef struct GinPageOpaqueData
{
uint16 flags ;
BlockNumber rightlink ; /* next page if any */
OffsetNumber maxoff ; /* number entries on GIN_DATA page: number of
* heap ItemPointer on GIN_DATA | GIN_LEAF page
* and number of records on GIN_DATA &
* ~ GIN_LEAF page */
BlockNumber rightlink ;
uint16 flags ; /* see bit definitions below */
} GinPageOpaqueData ;
typedef GinPageOpaqueData * GinPageOpaque ;
# define GIN_ROOT_BLKNO (0)
typedef struct
{
BlockIdData child_blkno ; /* use it instead of BlockNumber to save space
* on page */
ItemPointerData key ;
} PostingItem ;
# define PostingItemGetBlockNumber(pointer) \
BlockIdGetBlockNumber ( & ( pointer ) - > child_blkno )
# define PostingItemSetBlockNumber(pointer, blockNumber) \
BlockIdSet ( & ( ( pointer ) - > child_blkno ) , ( blockNumber ) )
/*
* Page opaque data in a inverted index page .
*/
# define GIN_DATA (1 << 0)
# define GIN_LEAF (1 << 1)
# define GIN_DELETED (1 << 2)
@ -98,8 +84,21 @@ typedef struct
# define GinItemPointerGetOffsetNumber(pointer) \
( ( pointer ) - > ip_posid )
typedef struct
{
BlockIdData child_blkno ; /* use it instead of BlockNumber to save space
* on page */
ItemPointerData key ;
} PostingItem ;
# define PostingItemGetBlockNumber(pointer) \
BlockIdGetBlockNumber ( & ( pointer ) - > child_blkno )
# define PostingItemSetBlockNumber(pointer, blockNumber) \
BlockIdSet ( & ( ( pointer ) - > child_blkno ) , ( blockNumber ) )
/*
* Support work on IndexTuuple on leaf pages
* Support work on IndexTuple on leaf pages
*/
# define GinGetNPosting(itup) GinItemPointerGetOffsetNumber(&(itup)->t_tid)
# define GinSetNPosting(itup,n) ItemPointerSetOffsetNumber(&(itup)->t_tid,(n))