|
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))
|
|