Re: Re: Fixes to index pages - Mailing list pgsql-patches
From | Bruce Momjian |
---|---|
Subject | Re: Re: Fixes to index pages |
Date | |
Msg-id | 200102220221.VAA07423@candle.pha.pa.us Whole thread Raw |
In response to | Re: Re: Fixes to index pages (Hiroshi Inoue <Inoue@tpf.co.jp>) |
List | pgsql-patches |
> > I don't think it's a good idea to fill bit 13 by force. > There's only 1 bit unused. IMHO there must be a discussion > about how to use the bit. OK, attached is a patch that just documents the bit as unused and changes some poorly chosen macro names. Do people want this committed to the current tree? Seems there is some interest in updating this area of the code. -- 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/22 02:17:56 *************** *** 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 (IndexTupleHasVarlenas(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/22 02:17:57 *************** *** 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/22 02:17:57 *************** *** 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/22 02:17:57 *************** *** 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/22 02:17:58 *************** *** 24,35 **** { 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. */ unsigned short t_info; /* various info about tuple */ --- 24,37 ---- { ItemPointerData t_tid; /* reference TID to heap tuple */ ! /* --------------- * t_info is layed out in the following fashion: * ! * 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,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 --- 71,84 ---- #define INDEX_SIZE_MASK 0x1FFF #define INDEX_NULL_MASK 0x8000 #define INDEX_VAR_MASK 0x4000 + #define INDEX_UNUSED 0x2000 ! #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) (!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 ? \ ( \ --- 110,116 ---- ( \ 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/22 02:17:58 *************** *** 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: