From 4f6c49fef0ddb568d2bf23a338645336737a32c5 Mon Sep 17 00:00:00 2001
From: Bruce Momjian <bruce@momjian.us>
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 4b46c202dcd..e503d9b888d 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 c631f385037..c7bfa9c9626 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 2f4448e107e..44a8b225e8f 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 338ea849ca1..0aac61fa025 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 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,
-- 
GitLab