diff options
Diffstat (limited to 'src/backend/commands/command.c')
-rw-r--r-- | src/backend/commands/command.c | 37 |
1 files changed, 22 insertions, 15 deletions
diff --git a/src/backend/commands/command.c b/src/backend/commands/command.c index 42f05f0761c..78a3d5e1a75 100644 --- a/src/backend/commands/command.c +++ b/src/backend/commands/command.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/commands/Attic/command.c,v 1.112 2000/11/16 22:30:19 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/Attic/command.c,v 1.113 2000/12/05 19:57:55 tgl Exp $ * * NOTES * The PerformAddAttribute() code, like most of the relation @@ -1287,26 +1287,33 @@ AlterTableAddConstraint(char *relationName, { List *attrl; - /* go through the fkconstraint->pk_attrs list */ - foreach(attrl, fkconstraint->pk_attrs) - { - Ident *attr=lfirst(attrl); - found = false; - for (i = 0; i < INDEX_MAX_KEYS && indexStruct->indkey[i] != 0; i++) + /* Make sure this index has the same number of keys -- It obviously + * won't match otherwise. */ + for (i = 0; i < INDEX_MAX_KEYS && indexStruct->indkey[i] != 0; i++); + if (i!=length(fkconstraint->pk_attrs)) + found=false; + else { + /* go through the fkconstraint->pk_attrs list */ + foreach(attrl, fkconstraint->pk_attrs) { - int pkattno = indexStruct->indkey[i]; - if (pkattno>0) + Ident *attr=lfirst(attrl); + found = false; + for (i = 0; i < INDEX_MAX_KEYS && indexStruct->indkey[i] != 0; i++) { - char *name = NameStr(rel_attrs[pkattno-1]->attname); - if (strcmp(name, attr->name)==0) + int pkattno = indexStruct->indkey[i]; + if (pkattno>0) { - found = true; - break; + char *name = NameStr(rel_attrs[pkattno-1]->attname); + if (strcmp(name, attr->name)==0) + { + found = true; + break; + } } } + if (!found) + break; } - if (!found) - break; } } ReleaseSysCache(indexTuple); |