|
3 | 3 | * header file for postgres inverted index access method implementation. |
4 | 4 | * |
5 | 5 | *Copyright (c) 2006, PostgreSQL Global Development Group |
6 | | - *$PostgreSQL: pgsql/src/include/access/gin.h,v 1.10 2007/01/31 15:09:45 teodor Exp $ |
| 6 | + *$PostgreSQL: pgsql/src/include/access/gin.h,v 1.11 2007/04/09 22:04:04 tgl Exp $ |
7 | 7 | *-------------------------------------------------------------------------- |
8 | 8 | */ |
9 | 9 |
|
|
31 | 31 | #defineGIN_CONSISTENT_PROC 4 |
32 | 32 | #defineGINNProcs 4 |
33 | 33 |
|
34 | | -typedefXLogRecPtrGinNSN; |
35 | | - |
36 | 34 | /* |
37 | 35 | * Page opaque data in a inverted index page. |
| 36 | + * |
| 37 | + * Note: GIN does not include a page ID word as do the other index types. |
| 38 | + * This is OK because the opaque data is only 8 bytes and so can be reliably |
| 39 | + * distinguished by size. Revisit this if the size ever increases. |
38 | 40 | */ |
39 | 41 | typedefstructGinPageOpaqueData |
40 | 42 | { |
41 | | -uint16flags; |
| 43 | +BlockNumberrightlink;/* next page if any */ |
42 | 44 | OffsetNumbermaxoff;/* number entries on GIN_DATA page: number of |
43 | 45 | * heap ItemPointer on GIN_DATA|GIN_LEAF page |
44 | 46 | * and number of records on GIN_DATA & |
45 | 47 | * ~GIN_LEAF page */ |
46 | | -BlockNumberrightlink; |
| 48 | +uint16flags;/* see bit definitions below */ |
47 | 49 | }GinPageOpaqueData; |
48 | 50 |
|
49 | 51 | typedefGinPageOpaqueData*GinPageOpaque; |
50 | 52 |
|
51 | 53 | #defineGIN_ROOT_BLKNO(0) |
52 | 54 |
|
53 | | -typedefstruct |
54 | | -{ |
55 | | -BlockIdDatachild_blkno;/* use it instead of BlockNumber to save space |
56 | | - * on page */ |
57 | | -ItemPointerDatakey; |
58 | | -}PostingItem; |
59 | | - |
60 | | -#definePostingItemGetBlockNumber(pointer) \ |
61 | | -BlockIdGetBlockNumber(&(pointer)->child_blkno) |
62 | | - |
63 | | -#definePostingItemSetBlockNumber(pointer,blockNumber) \ |
64 | | -BlockIdSet(&((pointer)->child_blkno), (blockNumber)) |
65 | | - |
66 | | -/* |
67 | | - * Page opaque data in a inverted index page. |
68 | | - */ |
69 | 55 | #defineGIN_DATA (1 << 0) |
70 | 56 | #defineGIN_LEAF (1 << 1) |
71 | 57 | #defineGIN_DELETED (1 << 2) |
@@ -98,8 +84,21 @@ typedef struct |
98 | 84 | #defineGinItemPointerGetOffsetNumber(pointer) \ |
99 | 85 | ((pointer)->ip_posid) |
100 | 86 |
|
| 87 | +typedefstruct |
| 88 | +{ |
| 89 | +BlockIdDatachild_blkno;/* use it instead of BlockNumber to save space |
| 90 | + * on page */ |
| 91 | +ItemPointerDatakey; |
| 92 | +}PostingItem; |
| 93 | + |
| 94 | +#definePostingItemGetBlockNumber(pointer) \ |
| 95 | +BlockIdGetBlockNumber(&(pointer)->child_blkno) |
| 96 | + |
| 97 | +#definePostingItemSetBlockNumber(pointer,blockNumber) \ |
| 98 | +BlockIdSet(&((pointer)->child_blkno), (blockNumber)) |
| 99 | + |
101 | 100 | /* |
102 | | - * Support work onIndexTuuple on leaf pages |
| 101 | + * Support work onIndexTuple on leaf pages |
103 | 102 | */ |
104 | 103 | #defineGinGetNPosting(itup)GinItemPointerGetOffsetNumber(&(itup)->t_tid) |
105 | 104 | #defineGinSetNPosting(itup,n)ItemPointerSetOffsetNumber(&(itup)->t_tid,(n)) |
|