aboutsummaryrefslogtreecommitdiff
path: root/src/backend/commands/indexcmds.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/commands/indexcmds.c')
-rw-r--r--src/backend/commands/indexcmds.c27
1 files changed, 14 insertions, 13 deletions
diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c
index 860a60d1096..ad819177d7d 100644
--- a/src/backend/commands/indexcmds.c
+++ b/src/backend/commands/indexcmds.c
@@ -342,6 +342,7 @@ DefineIndex(Oid relationId,
Oid tablespaceId;
Oid createdConstraintId = InvalidOid;
List *indexColNames;
+ List *allIndexParams;
Relation rel;
Relation indexRelation;
HeapTuple tuple;
@@ -378,16 +379,16 @@ DefineIndex(Oid relationId,
numberOfKeyAttributes = list_length(stmt->indexParams);
/*
- * We append any INCLUDE columns onto the indexParams list so that we have
- * one list with all columns. Later we can determine which of these are
- * key columns, and which are just part of the INCLUDE list by checking
- * the list position. A list item in a position less than
- * ii_NumIndexKeyAttrs is part of the key columns, and anything equal to
- * and over is part of the INCLUDE columns.
+ * Calculate the new list of index columns including both key columns and
+ * INCLUDE columns. Later we can determine which of these are key columns,
+ * and which are just part of the INCLUDE list by checking the list
+ * position. A list item in a position less than ii_NumIndexKeyAttrs is
+ * part of the key columns, and anything equal to and over is part of the
+ * INCLUDE columns.
*/
- stmt->indexParams = list_concat(stmt->indexParams,
- stmt->indexIncludingParams);
- numberOfAttributes = list_length(stmt->indexParams);
+ allIndexParams = list_concat(list_copy(stmt->indexParams),
+ list_copy(stmt->indexIncludingParams));
+ numberOfAttributes = list_length(allIndexParams);
if (numberOfAttributes <= 0)
ereport(ERROR,
@@ -544,7 +545,7 @@ DefineIndex(Oid relationId,
/*
* Choose the index column names.
*/
- indexColNames = ChooseIndexColumnNames(stmt->indexParams);
+ indexColNames = ChooseIndexColumnNames(allIndexParams);
/*
* Select name for index if caller didn't specify
@@ -658,7 +659,7 @@ DefineIndex(Oid relationId,
coloptions = (int16 *) palloc(numberOfAttributes * sizeof(int16));
ComputeIndexAttrs(indexInfo,
typeObjectId, collationObjectId, classObjectId,
- coloptions, stmt->indexParams,
+ coloptions, allIndexParams,
stmt->excludeOpNames, relationId,
accessMethodName, accessMethodId,
amcanorder, stmt->isconstraint);
@@ -886,8 +887,8 @@ DefineIndex(Oid relationId,
memcpy(part_oids, partdesc->oids, sizeof(Oid) * nparts);
parentDesc = CreateTupleDescCopy(RelationGetDescr(rel));
- opfamOids = palloc(sizeof(Oid) * numberOfAttributes);
- for (i = 0; i < numberOfAttributes; i++)
+ opfamOids = palloc(sizeof(Oid) * numberOfKeyAttributes);
+ for (i = 0; i < numberOfKeyAttributes; i++)
opfamOids[i] = get_opclass_family(classObjectId[i]);
heap_close(rel, NoLock);