aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruce Momjian <bruce@momjian.us>2001-02-22 21:48:49 +0000
committerBruce Momjian <bruce@momjian.us>2001-02-22 21:48:49 +0000
commit4f6c49fef0ddb568d2bf23a338645336737a32c5 (patch)
tree01d7752a305dd367323086eabba921838366ea34
parent660ca3e01c0ac2cd27d07979d026263ff9e4b1bd (diff)
downloadpostgresql-4f6c49fef0ddb568d2bf23a338645336737a32c5.tar.gz
postgresql-4f6c49fef0ddb568d2bf23a338645336737a32c5.zip
Clean up index/btree comments/macros, as approved.
-rw-r--r--src/backend/access/common/indextuple.c8
-rw-r--r--src/backend/access/gist/gist.c4
-rw-r--r--src/backend/access/hash/hash.c6
-rw-r--r--src/backend/access/hash/hashutil.c4
-rw-r--r--src/include/access/itup.h25
-rw-r--r--src/include/access/nbtree.h47
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,