From 4f6c49fef0ddb568d2bf23a338645336737a32c5 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Thu, 22 Feb 2001 21:48:49 +0000 Subject: Clean up index/btree comments/macros, as approved. --- src/include/access/itup.h | 25 +++++++++++++----------- src/include/access/nbtree.h | 47 ++++++++++++++++++++++++++------------------- 2 files changed, 41 insertions(+), 31 deletions(-) (limited to 'src/include') diff --git a/src/include/access/itup.h b/src/include/access/itup.h index 7d124ef56f6..7c6adc8b261 100644 --- a/src/include/access/itup.h +++ b/src/include/access/itup.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $Id: itup.h,v 1.29 2001/02/21 19:07:04 momjian Exp $ + * $Id: itup.h,v 1.30 2001/02/22 21:48:49 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -24,12 +24,14 @@ typedef struct IndexTupleData { ItemPointerData t_tid; /* reference TID to heap tuple */ - /* + /* --------------- * t_info is layed out in the following fashion: * - * 15th (leftmost) bit: "has nulls" bit 14th bit: "has varlenas" bit 13th - * bit: "has rules" bit - (removed ay 11/94) bits 12-0 bit: size of - * tuple. + * 15th (high) bit: has nulls + * 14th bit: has varlenas + * 13th bit: unused + * 12-0 bit: size of tuple + * --------------- */ unsigned short t_info; /* various info about tuple */ @@ -69,13 +71,14 @@ typedef RetrieveIndexResultData *RetrieveIndexResult; #define INDEX_SIZE_MASK 0x1FFF #define INDEX_NULL_MASK 0x8000 #define INDEX_VAR_MASK 0x4000 +/* bit 0x2000 is not used */ -#define IndexTupleSize(itup) ((Size) (((IndexTuple) (itup))->t_info & 0x1FFF)) -#define IndexTupleDSize(itup) ((Size) ((itup).t_info & 0x1FFF)) -#define IndexTupleNoNulls(itup) (!(((IndexTuple) (itup))->t_info & 0x8000)) -#define IndexTupleAllFixed(itup) (!(((IndexTuple) (itup))->t_info & 0x4000)) +#define IndexTupleSize(itup) ((Size) (((IndexTuple) (itup))->t_info & INDEX_SIZE_MASK)) +#define IndexTupleDSize(itup) ((Size) ((itup).t_info & INDEX_SIZE_MASK)) +#define IndexTupleHasNulls(itup) ((((IndexTuple) (itup))->t_info & INDEX_NULL_MASK)) +#define IndexTupleHasVarlenas(itup) ((((IndexTuple) (itup))->t_info & INDEX_VAR_MASK)) -#define IndexTupleHasMinHeader(itup) (IndexTupleNoNulls(itup)) +#define IndexTupleHasMinHeader(itup) (!IndexTupleHasNulls(itup)) /* * Takes an infomask as argument (primarily because this needs to be usable @@ -107,7 +110,7 @@ typedef RetrieveIndexResultData *RetrieveIndexResult; ( \ AssertMacro(PointerIsValid(isnull) && (attnum) > 0), \ *(isnull) = false, \ - IndexTupleNoNulls(tup) ? \ + !IndexTupleHasNulls(tup) ? \ ( \ (tupleDesc)->attrs[(attnum)-1]->attcacheoff >= 0 ? \ ( \ diff --git a/src/include/access/nbtree.h b/src/include/access/nbtree.h index d87cf0eced4..9ca3a6f858a 100644 --- a/src/include/access/nbtree.h +++ b/src/include/access/nbtree.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $Id: nbtree.h,v 1.52 2001/02/21 19:07:04 momjian Exp $ + * $Id: nbtree.h,v 1.53 2001/02/22 21:48:49 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -21,8 +21,9 @@ /* * BTPageOpaqueData -- At the end of every page, we store a pointer - * to both siblings in the tree. See Lehman and Yao's paper for more - * info. In addition, we need to know what sort of page this is + * to both siblings in the tree. This is used to do forward/backward + * index scans. See Lehman and Yao's paper for more + * info. In addition, we need to know what type of page this is * (leaf or internal), and whether the page is available for reuse. * * We also store a back-link to the parent page, but this cannot be trusted @@ -32,31 +33,28 @@ typedef struct BTPageOpaqueData { - BlockNumber btpo_prev; - BlockNumber btpo_next; - BlockNumber btpo_parent; - uint16 btpo_flags; + BlockNumber btpo_prev; /* used for backward index scans */ + BlockNumber btpo_next; /* used for forward index scans */ + BlockNumber btpo_parent; /* pointer to parent, but not updated + on parent split */ + uint16 btpo_flags; /* LEAF?, ROOT?, FREE?, META?, REORDER? */ } BTPageOpaqueData; typedef BTPageOpaqueData *BTPageOpaque; /* Bits defined in btpo_flags */ -#define BTP_LEAF (1 << 0) /* It's a leaf page */ -#define BTP_ROOT (1 << 1) /* It's the root page (has no parent) */ -#define BTP_FREE (1 << 2) /* not currently used... */ -#define BTP_META (1 << 3) /* Set in the meta-page only */ -#define BTP_REORDER (1 << 4) /* items must be re-ordered */ +#define BTP_LEAF (1 << 0) /* leaf page, if not internal page */ +#define BTP_ROOT (1 << 1) /* root page (has no parent) */ +#define BTP_FREE (1 << 2) /* page not in use */ +#define BTP_META (1 << 3) /* meta-page */ +#define BTP_REORDER (1 << 4) /* items need reordering */ -#define BTREE_METAPAGE 0 /* first page is meta */ -#define BTREE_MAGIC 0x053162 - -#define BTreeInvalidParent(opaque) \ - (opaque->btpo_parent == InvalidBlockNumber || \ - opaque->btpo_parent == BTREE_METAPAGE) - -#define BTREE_VERSION 1 +/* + * The Meta page is always the first page in the btree index. + * Its primary purpose is to point to the location of the btree root page. + */ typedef struct BTMetaPageData { @@ -69,6 +67,15 @@ typedef struct BTMetaPageData #define BTPageGetMeta(p) \ ((BTMetaPageData *) &((PageHeader) p)->pd_linp[0]) +#define BTREE_METAPAGE 0 /* first page is meta */ +#define BTREE_MAGIC 0x053162 /* magic number of btree pages */ + +#define BTreeInvalidParent(opaque) \ + (opaque->btpo_parent == InvalidBlockNumber || \ + opaque->btpo_parent == BTREE_METAPAGE) + +#define BTREE_VERSION 1 + /* * BTScanOpaqueData is used to remember which buffers we're currently * examining in the scan. We keep these buffers pinned (but not locked, -- cgit v1.2.3