diff --git a/src/backend/access/common/indextuple.c b/src/backend/access/common/indextuple.c index 9450911ab1554b767a796058e11a98fe4f03f9f3..b4dc69df26978ae40b0936868a341ce7979d06a3 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.44 2000/07/22 11:18:45 wieck Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/common/indextuple.c,v 1.45 2000/09/23 22:40:12 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -46,8 +46,8 @@ index_formtuple(TupleDesc tupleDescriptor, uint16 tupmask = 0; int numberOfAttributes = tupleDescriptor->natts; #ifdef TOAST_INDEX_HACK - Datum untoasted_value[MaxHeapAttributeNumber]; - bool untoasted_free[MaxHeapAttributeNumber]; + Datum untoasted_value[INDEX_MAX_KEYS]; + bool untoasted_free[INDEX_MAX_KEYS]; #endif if (numberOfAttributes > INDEX_MAX_KEYS) @@ -79,10 +79,14 @@ index_formtuple(TupleDesc tupleDescriptor, } } #endif - for (i = 0; i < numberOfAttributes && !hasnull; i++) + + for (i = 0; i < numberOfAttributes; i++) { if (null[i] != ' ') + { hasnull = true; + break; + } } if (hasnull) @@ -122,23 +126,21 @@ index_formtuple(TupleDesc tupleDescriptor, /* * We do this because DataFill wants to initialize a "tupmask" which * is used for HeapTuples, but we want an indextuple infomask. The - * only "relevent" info is the "has variable attributes" field, which - * is in mask position 0x02. We have already set the null mask above. + * only relevant info is the "has variable attributes" field. + * We have already set the hasnull bit above. */ - if (tupmask & 0x02) + if (tupmask & HEAP_HASVARLENA) infomask |= INDEX_VAR_MASK; /* - * Here we make sure that we can actually hold the size. We also want - * to make sure that size is not aligned oddly. This actually is a - * rather odd way to make sure the size is not too large overall. + * Here we make sure that the size will fit in the field reserved for + * it in t_info. */ - if (size & 0xE000) + if ((size & INDEX_SIZE_MASK) != size) elog(ERROR, "index_formtuple: data takes %d bytes: too big", size); - infomask |= size; /* ----------------