diff --git a/contrib/bloom/bloom.h b/contrib/bloom/bloom.h index d5284f3725..cbf2eb7892 100644 --- a/contrib/bloom/bloom.h +++ b/contrib/bloom/bloom.h @@ -31,8 +31,13 @@ /* Opaque for bloom pages */ typedef struct BloomPageOpaqueData { - OffsetNumber maxoff; - uint16 flags; + OffsetNumber maxoff; /* number of index tuples on page */ + uint16 flags; /* see bit definitions below */ + uint16 unused; /* placeholder to force maxaligning of size + * of BloomPageOpaqueData and to place + * bloom_page_id exactly at the end of page + */ + uint16 bloom_page_id; /* for identification of BLOOM indexes */ } BloomPageOpaqueData; typedef BloomPageOpaqueData *BloomPageOpaque; @@ -41,6 +46,16 @@ typedef BloomPageOpaqueData *BloomPageOpaque; #define BLOOM_META (1<<0) #define BLOOM_DELETED (2<<0) +/* + * The page ID is for the convenience of pg_filedump and similar utilities, + * which otherwise would have a hard time telling pages of different index + * types apart. It should be the last 2 bytes on the page. This is more or + * less "free" due to alignment considerations. + * + * See comments above GinPageOpaqueData. + */ +#define BLOOM_PAGE_ID 0xFF83 + /* Macros for accessing bloom page structures */ #define BloomPageGetOpaque(page) ((BloomPageOpaque) PageGetSpecialPointer(page)) #define BloomPageGetMaxOffset(page) (BloomPageGetOpaque(page)->maxoff) diff --git a/contrib/bloom/blutils.c b/contrib/bloom/blutils.c index 6c7dc1d07d..edfdfb934f 100644 --- a/contrib/bloom/blutils.c +++ b/contrib/bloom/blutils.c @@ -359,6 +359,7 @@ BloomInitPage(Page page, uint16 flags) opaque = BloomPageGetOpaque(page); memset(opaque, 0, sizeof(BloomPageOpaqueData)); opaque->flags = flags; + opaque->bloom_page_id = BLOOM_PAGE_ID; } /*