From 4f6c49fef0ddb568d2bf23a338645336737a32c5 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Thu, 22 Feb 2001 21:48:49 +0000 Subject: [PATCH] Clean up index/btree comments/macros, as approved. --- src/backend/access/common/indextuple.c | 8 ++--- src/backend/access/gist/gist.c | 4 +-- src/backend/access/hash/hash.c | 6 ++-- src/backend/access/hash/hashutil.c | 4 +-- src/include/access/itup.h | 25 ++++++++------ src/include/access/nbtree.h | 47 +++++++++++++++----------- 6 files changed, 52 insertions(+), 42 deletions(-) diff --git a/src/backend/access/common/indextuple.c b/src/backend/access/common/indextuple.c index 4b46c202dc..e503d9b888 100644 --- a/src/backend/access/common/indextuple.c +++ b/src/backend/access/common/indextuple.c @@ -9,7 +9,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/access/common/indextuple.c,v 1.51 2001/02/15 20:57:01 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/common/indextuple.c,v 1.52 2001/02/22 21:48:48 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -230,7 +230,7 @@ nocache_index_getattr(IndexTuple tup, attnum--; - if (IndexTupleNoNulls(tup)) + if (!IndexTupleHasNulls(tup)) { #ifdef IN_MACRO /* This is handled in the macro */ @@ -301,7 +301,7 @@ nocache_index_getattr(IndexTuple tup, return fetchatt(att[attnum], tp + att[attnum]->attcacheoff); } - else if (!IndexTupleAllFixed(tup)) + else if (IndexTupleHasVarlenas(tup)) { int j; @@ -365,7 +365,7 @@ nocache_index_getattr(IndexTuple tup, for (i = 0; i < attnum; i++) { - if (!IndexTupleNoNulls(tup)) + if (IndexTupleHasNulls(tup)) { if (att_isnull(i, bp)) { diff --git a/src/backend/access/gist/gist.c b/src/backend/access/gist/gist.c index c631f38503..c7bfa9c962 100644 --- a/src/backend/access/gist/gist.c +++ b/src/backend/access/gist/gist.c @@ -6,7 +6,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/access/gist/gist.c,v 1.69 2001/01/29 00:39:12 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/gist/gist.c,v 1.70 2001/02/22 21:48:48 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -1102,7 +1102,7 @@ gist_tuple_replacekey(Relation r, GISTENTRY entry, IndexTuple t) { memcpy(datum, entry.pred, entry.bytes); /* clear out old size */ - t->t_info &= 0xe000; + t->t_info &= ~INDEX_SIZE_MASK; /* or in new size */ t->t_info |= MAXALIGN(entry.bytes + sizeof(IndexTupleData)); diff --git a/src/backend/access/hash/hash.c b/src/backend/access/hash/hash.c index 2f4448e107..44a8b225e8 100644 --- a/src/backend/access/hash/hash.c +++ b/src/backend/access/hash/hash.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/access/hash/hash.c,v 1.48 2001/01/29 00:39:13 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/hash/hash.c,v 1.49 2001/02/22 21:48:49 momjian Exp $ * * NOTES * This file contains only the public interface routines. @@ -170,7 +170,7 @@ hashbuild(PG_FUNCTION_ARGS) * of the way nulls are handled here. */ - if (itup->t_info & INDEX_NULL_MASK) + if (IndexTupleHasNulls(itup)) { pfree(itup); continue; @@ -256,7 +256,7 @@ hashinsert(PG_FUNCTION_ARGS) itup = index_formtuple(RelationGetDescr(rel), datum, nulls); itup->t_tid = *ht_ctid; - if (itup->t_info & INDEX_NULL_MASK) + if (IndexTupleHasNulls(itup)) PG_RETURN_POINTER((InsertIndexResult) NULL); hitem = _hash_formitem(itup); diff --git a/src/backend/access/hash/hashutil.c b/src/backend/access/hash/hashutil.c index 338ea849ca..0aac61fa02 100644 --- a/src/backend/access/hash/hashutil.c +++ b/src/backend/access/hash/hashutil.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/access/hash/hashutil.c,v 1.25 2001/01/24 19:42:47 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/hash/hashutil.c,v 1.26 2001/02/22 21:48:49 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -72,7 +72,7 @@ _hash_formitem(IndexTuple itup) Size tuplen; /* disallow nulls in hash keys */ - if (itup->t_info & INDEX_NULL_MASK) + if (IndexTupleHasNulls(itup)) elog(ERROR, "hash indices cannot include null keys"); /* make a copy of the index tuple with room for the sequence number */ diff --git a/src/include/access/itup.h b/src/include/access/itup.h index 7d124ef56f..7c6adc8b26 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 d87cf0eced..9ca3a6f858 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,