mirror of
https://github.com/postgres/postgres.git
synced 2025-10-21 02:52:47 +03:00
Add macros in hash and btree AMs to get the special area of their pages
This makes the code more consistent with SpGiST, GiST and GIN, that already use this style, and the idea is to make easier the introduction of more sanity checks for each of these AM-specific macros. BRIN uses a different set of macros to get a page's type and flags, so it has no need for something similar. Author: Matthias van de Meent Discussion: https://postgr.es/m/CAEze2WjE3+tGO9Fs9+iZMU+z6mMZKo54W1Zt98WKqbEUHbHOBg@mail.gmail.com
This commit is contained in:
@@ -85,6 +85,8 @@ typedef struct HashPageOpaqueData
|
||||
|
||||
typedef HashPageOpaqueData *HashPageOpaque;
|
||||
|
||||
#define HashPageGetOpaque(page) ((HashPageOpaque) PageGetSpecialPointer(page))
|
||||
|
||||
#define H_NEEDS_SPLIT_CLEANUP(opaque) (((opaque)->hasho_flag & LH_BUCKET_NEEDS_SPLIT_CLEANUP) != 0)
|
||||
#define H_BUCKET_BEING_SPLIT(opaque) (((opaque)->hasho_flag & LH_BUCKET_BEING_SPLIT) != 0)
|
||||
#define H_BUCKET_BEING_POPULATED(opaque) (((opaque)->hasho_flag & LH_BUCKET_BEING_POPULATED) != 0)
|
||||
|
@@ -70,6 +70,8 @@ typedef struct BTPageOpaqueData
|
||||
|
||||
typedef BTPageOpaqueData *BTPageOpaque;
|
||||
|
||||
#define BTPageGetOpaque(page) ((BTPageOpaque) PageGetSpecialPointer(page))
|
||||
|
||||
/* Bits defined in btpo_flags */
|
||||
#define BTP_LEAF (1 << 0) /* leaf page, i.e. not internal page */
|
||||
#define BTP_ROOT (1 << 1) /* root page (has no parent) */
|
||||
@@ -241,7 +243,7 @@ BTPageSetDeleted(Page page, FullTransactionId safexid)
|
||||
PageHeader header;
|
||||
BTDeletedPageData *contents;
|
||||
|
||||
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
|
||||
opaque = BTPageGetOpaque(page);
|
||||
header = ((PageHeader) page);
|
||||
|
||||
opaque->btpo_flags &= ~BTP_HALF_DEAD;
|
||||
@@ -263,7 +265,7 @@ BTPageGetDeleteXid(Page page)
|
||||
|
||||
/* We only expect to be called with a deleted page */
|
||||
Assert(!PageIsNew(page));
|
||||
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
|
||||
opaque = BTPageGetOpaque(page);
|
||||
Assert(P_ISDELETED(opaque));
|
||||
|
||||
/* pg_upgrade'd deleted page -- must be safe to delete now */
|
||||
@@ -294,7 +296,7 @@ BTPageIsRecyclable(Page page)
|
||||
Assert(!PageIsNew(page));
|
||||
|
||||
/* Recycling okay iff page is deleted and safexid is old enough */
|
||||
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
|
||||
opaque = BTPageGetOpaque(page);
|
||||
if (P_ISDELETED(opaque))
|
||||
{
|
||||
/*
|
||||
|
Reference in New Issue
Block a user