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  (Tom Lane <tgl@sss.pgh.pa.us>)
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:

Previous
From: Dave Page
Date:
Subject: ODBC Driver regedit file.
Next
From: Tom Lane
Date:
Subject: Re: Fixes to index pages