Fixes to index pages - Mailing list pgsql-patches
From | Bruce Momjian |
---|---|
Subject | Fixes to index pages |
Date | |
Msg-id | 200102220001.TAA28101@candle.pha.pa.us Whole thread Raw |
Responses |
Re: Fixes to index pages
|
List | pgsql-patches |
Tom, here are the changes I was thinking about to clean up a few areas in index pages tables. I will hold the patch until 7.2. -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 853-3000 + If your life is a hard drive, | 830 Blythe Avenue + Christ can be your backup. | Drexel Hill, Pennsylvania 19026 Index: src/backend/access/common/indextuple.c =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/access/common/indextuple.c,v retrieving revision 1.51 diff -c -w -r1.51 indextuple.c *** src/backend/access/common/indextuple.c 2001/02/15 20:57:01 1.51 --- src/backend/access/common/indextuple.c 2001/02/21 23:23:27 *************** *** 230,236 **** attnum--; ! if (IndexTupleNoNulls(tup)) { #ifdef IN_MACRO /* This is handled in the macro */ --- 230,236 ---- attnum--; ! if (!IndexTupleHasNulls(tup)) { #ifdef IN_MACRO /* This is handled in the macro */ *************** *** 301,307 **** return fetchatt(att[attnum], tp + att[attnum]->attcacheoff); } ! else if (!IndexTupleAllFixed(tup)) { int j; --- 301,307 ---- return fetchatt(att[attnum], tp + att[attnum]->attcacheoff); } ! else if (IndexTupleHasVars(tup)) { int j; *************** *** 365,371 **** for (i = 0; i < attnum; i++) { ! if (!IndexTupleNoNulls(tup)) { if (att_isnull(i, bp)) { --- 365,371 ---- for (i = 0; i < attnum; i++) { ! if (IndexTupleHasNulls(tup)) { if (att_isnull(i, bp)) { Index: src/backend/access/gist/gist.c =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/access/gist/gist.c,v retrieving revision 1.69 diff -c -w -r1.69 gist.c *** src/backend/access/gist/gist.c 2001/01/29 00:39:12 1.69 --- src/backend/access/gist/gist.c 2001/02/21 23:23:27 *************** *** 1102,1108 **** { memcpy(datum, entry.pred, entry.bytes); /* clear out old size */ ! t->t_info &= 0xe000; /* or in new size */ t->t_info |= MAXALIGN(entry.bytes + sizeof(IndexTupleData)); --- 1102,1108 ---- { memcpy(datum, entry.pred, entry.bytes); /* clear out old size */ ! t->t_info &= ~INDEX_SIZE_MASK; /* or in new size */ t->t_info |= MAXALIGN(entry.bytes + sizeof(IndexTupleData)); Index: src/backend/access/hash/hash.c =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/access/hash/hash.c,v retrieving revision 1.48 diff -c -w -r1.48 hash.c *** src/backend/access/hash/hash.c 2001/01/29 00:39:13 1.48 --- src/backend/access/hash/hash.c 2001/02/21 23:23:28 *************** *** 170,176 **** * of the way nulls are handled here. */ ! if (itup->t_info & INDEX_NULL_MASK) { pfree(itup); continue; --- 170,176 ---- * of the way nulls are handled here. */ ! if (IndexTupleHasNulls(itup)) { pfree(itup); continue; *************** *** 256,262 **** itup = index_formtuple(RelationGetDescr(rel), datum, nulls); itup->t_tid = *ht_ctid; ! if (itup->t_info & INDEX_NULL_MASK) PG_RETURN_POINTER((InsertIndexResult) NULL); hitem = _hash_formitem(itup); --- 256,262 ---- itup = index_formtuple(RelationGetDescr(rel), datum, nulls); itup->t_tid = *ht_ctid; ! if (IndexTupleHasNulls(itup)) PG_RETURN_POINTER((InsertIndexResult) NULL); hitem = _hash_formitem(itup); Index: src/backend/access/hash/hashutil.c =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/access/hash/hashutil.c,v retrieving revision 1.25 diff -c -w -r1.25 hashutil.c *** src/backend/access/hash/hashutil.c 2001/01/24 19:42:47 1.25 --- src/backend/access/hash/hashutil.c 2001/02/21 23:23:28 *************** *** 72,78 **** Size tuplen; /* disallow nulls in hash keys */ ! if (itup->t_info & INDEX_NULL_MASK) elog(ERROR, "hash indices cannot include null keys"); /* make a copy of the index tuple with room for the sequence number */ --- 72,78 ---- Size tuplen; /* disallow nulls in hash keys */ ! if (IndexTupleHasNulls(itup)) elog(ERROR, "hash indices cannot include null keys"); /* make a copy of the index tuple with room for the sequence number */ Index: src/include/access/itup.h =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/include/access/itup.h,v retrieving revision 1.29 diff -c -w -r1.29 itup.h *** src/include/access/itup.h 2001/02/21 19:07:04 1.29 --- src/include/access/itup.h 2001/02/21 23:23:34 *************** *** 27,35 **** /* * 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. */ unsigned short t_info; /* various info about tuple */ --- 27,35 ---- /* * t_info is layed out in the following fashion: * ! * 15th (leftmost) bit: has nulls ! * 14th bit: has varlenas ! * 13-0 bit: size of tuple */ unsigned short t_info; /* various info about tuple */ *************** *** 66,81 **** * ---------------- */ ! #define INDEX_SIZE_MASK 0x1FFF #define INDEX_NULL_MASK 0x8000 #define INDEX_VAR_MASK 0x4000 ! #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 IndexTupleHasMinHeader(itup) (IndexTupleNoNulls(itup)) /* * Takes an infomask as argument (primarily because this needs to be usable --- 66,81 ---- * ---------------- */ ! #define INDEX_SIZE_MASK 0x3FFF #define INDEX_NULL_MASK 0x8000 #define INDEX_VAR_MASK 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 IndexTupleHasVars(itup) ((((IndexTuple) (itup))->t_info & INDEX_VAR_MASK)) ! #define IndexTupleHasMinHeader(itup) (!IndexTupleHasNulls(itup)) /* * Takes an infomask as argument (primarily because this needs to be usable *************** *** 107,113 **** ( \ AssertMacro(PointerIsValid(isnull) && (attnum) > 0), \ *(isnull) = false, \ ! IndexTupleNoNulls(tup) ? \ ( \ (tupleDesc)->attrs[(attnum)-1]->attcacheoff >= 0 ? \ ( \ --- 107,113 ---- ( \ AssertMacro(PointerIsValid(isnull) && (attnum) > 0), \ *(isnull) = false, \ ! !IndexTupleHasNulls(tup) ? \ ( \ (tupleDesc)->attrs[(attnum)-1]->attcacheoff >= 0 ? \ ( \ Index: src/include/access/nbtree.h =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/include/access/nbtree.h,v retrieving revision 1.52 diff -c -w -r1.52 nbtree.h *** src/include/access/nbtree.h 2001/02/21 19:07:04 1.52 --- src/include/access/nbtree.h 2001/02/21 23:23:34 *************** *** 50,56 **** #define BTREE_METAPAGE 0 /* first page is meta */ ! #define BTREE_MAGIC 0x053162 #define BTreeInvalidParent(opaque) \ (opaque->btpo_parent == InvalidBlockNumber || \ --- 50,56 ---- #define BTREE_METAPAGE 0 /* first page is meta */ ! #define BTREE_MAGIC 0x053162 /* magic number of btree pages */ #define BTreeInvalidParent(opaque) \ (opaque->btpo_parent == InvalidBlockNumber || \
pgsql-patches by date: