]> granicus.if.org Git - postgresql/commitdiff
Temporary revert 5c6110c6a960ad6fe1b0d0fec6ae36ef4eb913f5
authorTeodor Sigaev <teodor@sigaev.ru>
Wed, 11 Apr 2018 16:32:19 +0000 (19:32 +0300)
committerTeodor Sigaev <teodor@sigaev.ru>
Wed, 11 Apr 2018 16:32:19 +0000 (19:32 +0300)
It discovers one more bug in CompareIndexInfo(), should be fixed first.

src/backend/commands/indexcmds.c
src/test/regress/expected/indexing.out
src/test/regress/sql/indexing.sql

index ad819177d7d78a8dd1575eefacbb232075e34c72..860a60d1096d264e0d3534c50a063848e5bddc65 100644 (file)
@@ -342,7 +342,6 @@ DefineIndex(Oid relationId,
        Oid                     tablespaceId;
        Oid                     createdConstraintId = InvalidOid;
        List       *indexColNames;
-       List       *allIndexParams;
        Relation        rel;
        Relation        indexRelation;
        HeapTuple       tuple;
@@ -379,16 +378,16 @@ DefineIndex(Oid relationId,
        numberOfKeyAttributes = list_length(stmt->indexParams);
 
        /*
-        * 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.
+        * 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.
         */
-       allIndexParams = list_concat(list_copy(stmt->indexParams),
-                                                                list_copy(stmt->indexIncludingParams));
-       numberOfAttributes = list_length(allIndexParams);
+       stmt->indexParams = list_concat(stmt->indexParams,
+                                                                       stmt->indexIncludingParams);
+       numberOfAttributes = list_length(stmt->indexParams);
 
        if (numberOfAttributes <= 0)
                ereport(ERROR,
@@ -545,7 +544,7 @@ DefineIndex(Oid relationId,
        /*
         * Choose the index column names.
         */
-       indexColNames = ChooseIndexColumnNames(allIndexParams);
+       indexColNames = ChooseIndexColumnNames(stmt->indexParams);
 
        /*
         * Select name for index if caller didn't specify
@@ -659,7 +658,7 @@ DefineIndex(Oid relationId,
        coloptions = (int16 *) palloc(numberOfAttributes * sizeof(int16));
        ComputeIndexAttrs(indexInfo,
                                          typeObjectId, collationObjectId, classObjectId,
-                                         coloptions, allIndexParams,
+                                         coloptions, stmt->indexParams,
                                          stmt->excludeOpNames, relationId,
                                          accessMethodName, accessMethodId,
                                          amcanorder, stmt->isconstraint);
@@ -887,8 +886,8 @@ DefineIndex(Oid relationId,
                        memcpy(part_oids, partdesc->oids, sizeof(Oid) * nparts);
 
                        parentDesc = CreateTupleDescCopy(RelationGetDescr(rel));
-                       opfamOids = palloc(sizeof(Oid) * numberOfKeyAttributes);
-                       for (i = 0; i < numberOfKeyAttributes; i++)
+                       opfamOids = palloc(sizeof(Oid) * numberOfAttributes);
+                       for (i = 0; i < numberOfAttributes; i++)
                                opfamOids[i] = get_opclass_family(classObjectId[i]);
 
                        heap_close(rel, NoLock);
index 2c2bf44aa87d823fe73fd23dcd8814256392ba50..33f68aab7123a5ec12868e337c32b4a4f5fb6e0f 100644 (file)
@@ -1313,27 +1313,3 @@ alter index idxpart2_a_idx attach partition idxpart22_a_idx;
 create index on idxpart (a);
 create table idxpart_another (a int, b int, primary key (a, b)) partition by range (a);
 create table idxpart_another_1 partition of idxpart_another for values from (0) to (100);
--- Test that covering partitioned indexes work in various cases
-create table covidxpart (a int, b int) partition by list (a);
-create unique index on covidxpart (a) include (b);
-create table covidxpart1 partition of covidxpart for values in (1);
-create table covidxpart2 partition of covidxpart for values in (2);
-insert into covidxpart values (1, 1);
-insert into covidxpart values (1, 1);
-ERROR:  duplicate key value violates unique constraint "covidxpart1_a_b_idx"
-DETAIL:  Key (a)=(1) already exists.
-create table covidxpart3 (b int, c int, a int);
-alter table covidxpart3 drop c;
-alter table covidxpart attach partition covidxpart3 for values in (3);
-insert into covidxpart values (3, 1);
-insert into covidxpart values (3, 1);
-ERROR:  duplicate key value violates unique constraint "covidxpart3_a_b_idx"
-DETAIL:  Key (a)=(3) already exists.
-create table covidxpart4 (b int, a int);
-create unique index on covidxpart4 (a) include (b);
-create unique index on covidxpart4 (a);
-alter table covidxpart attach partition covidxpart4 for values in (4);
-insert into covidxpart values (4, 1);
-insert into covidxpart values (4, 1);
-ERROR:  duplicate key value violates unique constraint "covidxpart4_a_b_idx"
-DETAIL:  Key (a)=(4) already exists.
index 29333b31ef2067d962fab35d5b6ed984a059b423..ab7c2d147581ee85227eb10b29511eb87237f3bd 100644 (file)
@@ -701,22 +701,3 @@ alter index idxpart2_a_idx attach partition idxpart22_a_idx;
 create index on idxpart (a);
 create table idxpart_another (a int, b int, primary key (a, b)) partition by range (a);
 create table idxpart_another_1 partition of idxpart_another for values from (0) to (100);
-
--- Test that covering partitioned indexes work in various cases
-create table covidxpart (a int, b int) partition by list (a);
-create unique index on covidxpart (a) include (b);
-create table covidxpart1 partition of covidxpart for values in (1);
-create table covidxpart2 partition of covidxpart for values in (2);
-insert into covidxpart values (1, 1);
-insert into covidxpart values (1, 1);
-create table covidxpart3 (b int, c int, a int);
-alter table covidxpart3 drop c;
-alter table covidxpart attach partition covidxpart3 for values in (3);
-insert into covidxpart values (3, 1);
-insert into covidxpart values (3, 1);
-create table covidxpart4 (b int, a int);
-create unique index on covidxpart4 (a) include (b);
-create unique index on covidxpart4 (a);
-alter table covidxpart attach partition covidxpart4 for values in (4);
-insert into covidxpart values (4, 1);
-insert into covidxpart values (4, 1);