diff options
Diffstat (limited to 'src/backend/parser/analyze.c')
-rw-r--r-- | src/backend/parser/analyze.c | 61 |
1 files changed, 37 insertions, 24 deletions
diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c index dcd52347544..e4834158765 100644 --- a/src/backend/parser/analyze.c +++ b/src/backend/parser/analyze.c @@ -6,7 +6,7 @@ * Portions Copyright (c) 1996-2000, PostgreSQL, Inc * Portions Copyright (c) 1994, Regents of the University of California * - * $Id: analyze.c,v 1.169 2000/12/05 19:15:10 tgl Exp $ + * $Id: analyze.c,v 1.170 2000/12/05 19:57:55 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -1209,18 +1209,26 @@ transformCreateStmt(ParseState *pstate, CreateStmt *stmt) List *pkattrs; Ident *pkattr; if (ind->unique) { - foreach(pkattrs, fkconstraint->pk_attrs) { + int count=0; + foreach(indparms, ind->indexParams) { + count++; + } + if (count!=length(fkconstraint->pk_attrs)) found=0; - pkattr=lfirst(pkattrs); - foreach(indparms, ind->indexParams) { - indparm=lfirst(indparms); - if (strcmp(indparm->name, pkattr->name)==0) { - found=1; - break; + else { + foreach(pkattrs, fkconstraint->pk_attrs) { + found=0; + pkattr=lfirst(pkattrs); + foreach(indparms, ind->indexParams) { + indparm=lfirst(indparms); + if (strcmp(indparm->name, pkattr->name)==0) { + found=1; + break; + } } + if (!found) + break; } - if (!found) - break; } } if (found) @@ -2634,26 +2642,31 @@ transformFkeyCheckAttrs(FkConstraint *fkconstraint) { 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++) + 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(pkrel_attrs[pkattno - 1]->attname); - if (strcmp(name, attr->name)==0) + int pkattno = indexStruct->indkey[i]; + if (pkattno>0) { - found = true; - break; + char *name = NameStr(pkrel_attrs[pkattno - 1]->attname); + if (strcmp(name, attr->name)==0) + { + found = true; + break; + } } } + if (!found) + break; } - if (!found) - break; } } ReleaseSysCache(indexTuple); |