Commit 92899992 authored by Teodor Sigaev's avatar Teodor Sigaev

Temporary revert 5c6110c6

It discovers one more bug in CompareIndexInfo(), should be fixed first.
parent 651cb909
...@@ -342,7 +342,6 @@ DefineIndex(Oid relationId, ...@@ -342,7 +342,6 @@ DefineIndex(Oid relationId,
Oid tablespaceId; Oid tablespaceId;
Oid createdConstraintId = InvalidOid; Oid createdConstraintId = InvalidOid;
List *indexColNames; List *indexColNames;
List *allIndexParams;
Relation rel; Relation rel;
Relation indexRelation; Relation indexRelation;
HeapTuple tuple; HeapTuple tuple;
...@@ -379,16 +378,16 @@ DefineIndex(Oid relationId, ...@@ -379,16 +378,16 @@ DefineIndex(Oid relationId,
numberOfKeyAttributes = list_length(stmt->indexParams); numberOfKeyAttributes = list_length(stmt->indexParams);
/* /*
* Calculate the new list of index columns including both key columns and * We append any INCLUDE columns onto the indexParams list so that we have
* INCLUDE columns. Later we can determine which of these are key columns, * one list with all columns. Later we can determine which of these are
* and which are just part of the INCLUDE list by checking the list * key columns, and which are just part of the INCLUDE list by checking
* position. A list item in a position less than ii_NumIndexKeyAttrs is * the list position. A list item in a position less than
* part of the key columns, and anything equal to and over is part of the * ii_NumIndexKeyAttrs is part of the key columns, and anything equal to
* INCLUDE columns. * and over is part of the INCLUDE columns.
*/ */
allIndexParams = list_concat(list_copy(stmt->indexParams), stmt->indexParams = list_concat(stmt->indexParams,
list_copy(stmt->indexIncludingParams)); stmt->indexIncludingParams);
numberOfAttributes = list_length(allIndexParams); numberOfAttributes = list_length(stmt->indexParams);
if (numberOfAttributes <= 0) if (numberOfAttributes <= 0)
ereport(ERROR, ereport(ERROR,
...@@ -545,7 +544,7 @@ DefineIndex(Oid relationId, ...@@ -545,7 +544,7 @@ DefineIndex(Oid relationId,
/* /*
* Choose the index column names. * Choose the index column names.
*/ */
indexColNames = ChooseIndexColumnNames(allIndexParams); indexColNames = ChooseIndexColumnNames(stmt->indexParams);
/* /*
* Select name for index if caller didn't specify * Select name for index if caller didn't specify
...@@ -659,7 +658,7 @@ DefineIndex(Oid relationId, ...@@ -659,7 +658,7 @@ DefineIndex(Oid relationId,
coloptions = (int16 *) palloc(numberOfAttributes * sizeof(int16)); coloptions = (int16 *) palloc(numberOfAttributes * sizeof(int16));
ComputeIndexAttrs(indexInfo, ComputeIndexAttrs(indexInfo,
typeObjectId, collationObjectId, classObjectId, typeObjectId, collationObjectId, classObjectId,
coloptions, allIndexParams, coloptions, stmt->indexParams,
stmt->excludeOpNames, relationId, stmt->excludeOpNames, relationId,
accessMethodName, accessMethodId, accessMethodName, accessMethodId,
amcanorder, stmt->isconstraint); amcanorder, stmt->isconstraint);
...@@ -887,8 +886,8 @@ DefineIndex(Oid relationId, ...@@ -887,8 +886,8 @@ DefineIndex(Oid relationId,
memcpy(part_oids, partdesc->oids, sizeof(Oid) * nparts); memcpy(part_oids, partdesc->oids, sizeof(Oid) * nparts);
parentDesc = CreateTupleDescCopy(RelationGetDescr(rel)); parentDesc = CreateTupleDescCopy(RelationGetDescr(rel));
opfamOids = palloc(sizeof(Oid) * numberOfKeyAttributes); opfamOids = palloc(sizeof(Oid) * numberOfAttributes);
for (i = 0; i < numberOfKeyAttributes; i++) for (i = 0; i < numberOfAttributes; i++)
opfamOids[i] = get_opclass_family(classObjectId[i]); opfamOids[i] = get_opclass_family(classObjectId[i]);
heap_close(rel, NoLock); heap_close(rel, NoLock);
......
...@@ -1313,27 +1313,3 @@ alter index idxpart2_a_idx attach partition idxpart22_a_idx; ...@@ -1313,27 +1313,3 @@ alter index idxpart2_a_idx attach partition idxpart22_a_idx;
create index on idxpart (a); 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 (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); 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.
...@@ -701,22 +701,3 @@ alter index idxpart2_a_idx attach partition idxpart22_a_idx; ...@@ -701,22 +701,3 @@ alter index idxpart2_a_idx attach partition idxpart22_a_idx;
create index on idxpart (a); 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 (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); 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);
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment