Commit c9a73452 authored by Bruce Momjian's avatar Bruce Momjian

>the extra level of struct naming for pd_opaque has no obvious

>usefulness.
>
>> [...] should I post a patch that puts pagesize directly into
>> PageHeaderData?
>
>If you're so inclined.  Given that pd_opaque is hidden in those macros,
>there wouldn't be much of any gain in readability either, so I haven't
>worried about changing the declaration.

Thanks for the clarification.  Here is the patch.  Not much gain, but at
least it saves the next junior hacker from scratching his head ...


Manfred Koizar
parent 22347d69
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/access/hash/hashutil.c,v 1.30 2002/06/20 20:29:24 momjian Exp $ * $Header: /cvsroot/pgsql/src/backend/access/hash/hashutil.c,v 1.31 2002/07/02 06:18:57 momjian Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -131,13 +131,13 @@ _hash_checkpage(Page page, int flags) ...@@ -131,13 +131,13 @@ _hash_checkpage(Page page, int flags)
HashPageOpaque opaque; HashPageOpaque opaque;
Assert(page); Assert(page);
Assert(((PageHeader) (page))->pd_lower >= (sizeof(PageHeaderData) - sizeof(ItemIdData))); Assert(((PageHeader) (page))->pd_lower >= SizeOfPageHeaderData);
#if 1 #if 1
Assert(((PageHeader) (page))->pd_upper <= Assert(((PageHeader) (page))->pd_upper <=
(BLCKSZ - MAXALIGN(sizeof(HashPageOpaqueData)))); (BLCKSZ - MAXALIGN(sizeof(HashPageOpaqueData))));
Assert(((PageHeader) (page))->pd_special == Assert(((PageHeader) (page))->pd_special ==
(BLCKSZ - MAXALIGN(sizeof(HashPageOpaqueData)))); (BLCKSZ - MAXALIGN(sizeof(HashPageOpaqueData))));
Assert(((PageHeader) (page))->pd_opaque.od_pagesize == BLCKSZ); Assert(PageGetPageSize(page) == BLCKSZ);
#endif #endif
if (flags) if (flags)
{ {
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group * Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* $Id: bufpage.h,v 1.49 2002/07/02 05:48:44 momjian Exp $ * $Id: bufpage.h,v 1.50 2002/07/02 06:18:57 momjian Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -65,8 +65,7 @@ ...@@ -65,8 +65,7 @@
* byte-offset position, tuples can be physically shuffled on a page * byte-offset position, tuples can be physically shuffled on a page
* whenever the need arises. * whenever the need arises.
* *
* AM-generic per-page information is kept in the pd_opaque field of * AM-generic per-page information is kept in PageHeaderData.
* the PageHeaderData. (Currently, only the page size is kept here.)
* *
* AM-specific per-page data (if any) is kept in the area marked "special * AM-specific per-page data (if any) is kept in the area marked "special
* space"; each AM has an "opaque" structure defined somewhere that is * space"; each AM has an "opaque" structure defined somewhere that is
...@@ -92,26 +91,19 @@ typedef uint16 LocationIndex; ...@@ -92,26 +91,19 @@ typedef uint16 LocationIndex;
/* /*
* disk page organization
* space management information generic to any page * space management information generic to any page
* *
* od_pagesize - size in bytes. * pd_lower - offset to start of free space.
* pd_upper - offset to end of free space.
* pd_special - offset to start of special space.
* pd_pagesize - size in bytes.
* Minimum possible page size is perhaps 64B to fit * Minimum possible page size is perhaps 64B to fit
* page header, opaque space and a minimal tuple; * page header, opaque space and a minimal tuple;
* of course, in reality you want it much bigger. * of course, in reality you want it much bigger.
* On the high end, we can only support pages up * On the high end, we can only support pages up
* to 32KB because lp_off/lp_len are 15 bits. * to 32KB because lp_off/lp_len are 15 bits.
*/ */
typedef struct OpaqueData
{
uint16 od_pagesize;
} OpaqueData;
typedef OpaqueData *Opaque;
/*
* disk page organization
*/
typedef struct PageHeaderData typedef struct PageHeaderData
{ {
/* XXX LSN is member of *any* block, not */ /* XXX LSN is member of *any* block, not */
...@@ -124,7 +116,7 @@ typedef struct PageHeaderData ...@@ -124,7 +116,7 @@ typedef struct PageHeaderData
LocationIndex pd_lower; /* offset to start of free space */ LocationIndex pd_lower; /* offset to start of free space */
LocationIndex pd_upper; /* offset to end of free space */ LocationIndex pd_upper; /* offset to end of free space */
LocationIndex pd_special; /* offset to start of special space */ LocationIndex pd_special; /* offset to start of special space */
OpaqueData pd_opaque; /* AM-generic information */ uint16 pd_pagesize;
ItemIdData pd_linp[1]; /* beginning of line pointer array */ ItemIdData pd_linp[1]; /* beginning of line pointer array */
} PageHeaderData; } PageHeaderData;
...@@ -216,14 +208,14 @@ typedef enum ...@@ -216,14 +208,14 @@ typedef enum
* however, it can be called on a page for which there is no buffer. * however, it can be called on a page for which there is no buffer.
*/ */
#define PageGetPageSize(page) \ #define PageGetPageSize(page) \
((Size) ((PageHeader) (page))->pd_opaque.od_pagesize) ((Size) ((PageHeader) (page))->pd_pagesize)
/* /*
* PageSetPageSize * PageSetPageSize
* Sets the page size of a page. * Sets the page size of a page.
*/ */
#define PageSetPageSize(page, size) \ #define PageSetPageSize(page, size) \
(((PageHeader) (page))->pd_opaque.od_pagesize = (size)) (((PageHeader) (page))->pd_pagesize = (size))
/* ---------------- /* ----------------
* page special data macros * page special data macros
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment