diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2008-07-13 21:50:04 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2008-07-13 21:50:04 +0000 |
commit | 6816577a786cd9be257f6600e3cde2d86f5adb46 (patch) | |
tree | 4b008d2476c45707b5f0df4a55927b9e039b9a7c /src/include/access/gin.h | |
parent | 9d035f425452279041c52e01cf83b2a27e121b5c (diff) | |
download | postgresql-6816577a786cd9be257f6600e3cde2d86f5adb46.tar.gz postgresql-6816577a786cd9be257f6600e3cde2d86f5adb46.zip |
Change the PageGetContents() macro to guarantee its result is maxalign'd,
thereby forestalling any problems with alignment of the data structure placed
there. Since SizeOfPageHeaderData is maxalign'd anyway in 8.3 and HEAD, this
does not actually change anything right now, but it is foreseeable that the
header size will change again someday. I had to fix a couple of places that
were assuming that the content offset is just SizeOfPageHeaderData rather than
MAXALIGN(SizeOfPageHeaderData). Per discussion of Zdenek's page-macros patch.
Diffstat (limited to 'src/include/access/gin.h')
-rw-r--r-- | src/include/access/gin.h | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/src/include/access/gin.h b/src/include/access/gin.h index f6a786d3db0..de29cff86ba 100644 --- a/src/include/access/gin.h +++ b/src/include/access/gin.h @@ -4,7 +4,7 @@ * * Copyright (c) 2006-2008, PostgreSQL Global Development Group * - * $PostgreSQL: pgsql/src/include/access/gin.h,v 1.23 2008/07/11 21:06:29 tgl Exp $ + * $PostgreSQL: pgsql/src/include/access/gin.h,v 1.24 2008/07/13 21:50:04 tgl Exp $ *-------------------------------------------------------------------------- */ @@ -121,17 +121,19 @@ typedef struct /* * Data (posting tree) pages */ +#define GinDataPageGetRightBound(page) ((ItemPointer) PageGetContents(page)) #define GinDataPageGetData(page) \ - (PageGetContents(page)+MAXALIGN(sizeof(ItemPointerData))) -#define GinDataPageGetRightBound(page) ((ItemPointer)PageGetContents(page)) -#define GinSizeOfItem(page) ( (GinPageIsLeaf(page)) ? sizeof(ItemPointerData) : sizeof(PostingItem) ) -#define GinDataPageGetItem(page,i) ( GinDataPageGetData(page) + ((i)-1) * GinSizeOfItem(page) ) + (PageGetContents(page) + MAXALIGN(sizeof(ItemPointerData))) +#define GinSizeOfItem(page) \ + (GinPageIsLeaf(page) ? sizeof(ItemPointerData) : sizeof(PostingItem)) +#define GinDataPageGetItem(page,i) \ + (GinDataPageGetData(page) + ((i)-1) * GinSizeOfItem(page)) #define GinDataPageGetFreeSpace(page) \ - ( BLCKSZ - SizeOfPageHeaderData - MAXALIGN(sizeof(GinPageOpaqueData)) - \ - GinPageGetOpaque(page)->maxoff * GinSizeOfItem(page) - \ - MAXALIGN(sizeof(ItemPointerData))) - + (BLCKSZ - MAXALIGN(SizeOfPageHeaderData) \ + - MAXALIGN(sizeof(ItemPointerData)) \ + - GinPageGetOpaque(page)->maxoff * GinSizeOfItem(page) \ + - MAXALIGN(sizeof(GinPageOpaqueData))) #define GIN_UNLOCK BUFFER_LOCK_UNLOCK |