summaryrefslogtreecommitdiff
path: root/src/backend/catalog/indexing.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/catalog/indexing.c')
-rw-r--r--src/backend/catalog/indexing.c27
1 files changed, 16 insertions, 11 deletions
diff --git a/src/backend/catalog/indexing.c b/src/backend/catalog/indexing.c
index ad31265f50..2fae397900 100644
--- a/src/backend/catalog/indexing.c
+++ b/src/backend/catalog/indexing.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/catalog/indexing.c,v 1.30 1998/09/02 23:05:23 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/catalog/indexing.c,v 1.31 1998/09/07 05:35:39 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -129,25 +129,29 @@ CatalogIndexInsert(Relation *idescs,
Assert(index_tup);
index_form = (Form_pg_index) GETSTRUCT(index_tup);
- /*
- * Compute the number of attributes we are indexing upon.
- */
- for (attnumP = index_form->indkey, natts = 0;
- *attnumP != InvalidAttrNumber;
- attnumP++, natts++)
- ;
-
if (index_form->indproc != InvalidOid)
{
- FIgetnArgs(&finfo) = natts;
+ int fatts;
+
+ /*
+ * Compute the number of attributes we are indexing upon.
+ */
+ for (attnumP = index_form->indkey, fatts = 0;
+ *attnumP != InvalidAttrNumber && fatts < INDEX_MAX_KEYS;
+ attnumP++, fatts++)
+ ;
+ FIgetnArgs(&finfo) = fatts;
natts = 1;
FIgetProcOid(&finfo) = index_form->indproc;
*(FIgetname(&finfo)) = '\0';
finfoP = &finfo;
}
else
+ {
+ natts = RelationGetDescr(idescs[i])->natts;
finfoP = (FuncIndexInfo *) NULL;
-
+ }
+
FormIndexDatum(natts,
(AttrNumber *) index_form->indkey,
heapTuple,
@@ -160,6 +164,7 @@ CatalogIndexInsert(Relation *idescs,
&heapTuple->t_ctid, heapRelation);
if (indexRes)
pfree(indexRes);
+
pfree(index_tup);
}
}