Re: Fixes to index pages - Mailing list pgsql-patches

From Bruce Momjian
Subject Re: Fixes to index pages
Date
Msg-id 200102220031.TAA00868@candle.pha.pa.us
Whole thread Raw
In response to Re: Fixes to index pages  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: Fixes to index pages  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-patches
> Bruce Momjian <pgman@candle.pha.pa.us> writes:
> > 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.
>
> What happened to our discussion about keeping t_info bit 13 unused??

I wasn't going to reserve it in the patch. I figured I would make all
the items/flags match, and if someone wants to reserve it, it is easy to
do in one place.  I imagine 7.2 is going to be dump/reload anyway so the
decision can be made during development cycle.  I basically didn't want
to leave a bit gap and leave it unnamed because it could cause
confusion.


> Still don't like the name "IndexTupleHasVars" ... sounds to me like that
> means it has variables in it, which is not very sensical.  Maybe
> "IndexTupleHasVarlenas"?

Done.  Patch attached.

> Also, if you don't put some dashes around the comment in itup.h line
> 27ff, pgindent will munge it for you, just like it did for the last guy.
> (Have I mentioned that I really hate pgindent's handling of comment
> blocks?)

I see.  Done.  That comment wrapping is a _feature_ of BSD indent.  I
can easily disable it if people don't want it.  I have seen it clean up
some pretty ugly comments, but I have seen it mess a few too.  I think
it does better good than harm, but others may disagree.

--
  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 00:27: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 00:27: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 00:27: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 00:27: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 00:27:59
***************
*** 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,36 ----
  {
      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
!      * 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
--- 67,82 ----
   * ----------------
   */

! #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 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 ? \
          ( \
--- 108,114 ----
  ( \
      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 00:27:59
***************
*** 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:

Previous
From: Tom Lane
Date:
Subject: Re: Fixes to index pages
Next
From: Hiroshi Inoue
Date:
Subject: Re: Re: Fixes to index pages