Re: Problem in AlterTableAddConstraint?
От | Philip Warner |
---|---|
Тема | Re: Problem in AlterTableAddConstraint? |
Дата | |
Msg-id | 3.0.5.32.20001129134021.022af930@mail.rhyme.com.au обсуждение исходный текст |
Ответ на | Problem in AlterTableAddConstraint? (Philip Warner <pjw@rhyme.com.au>) |
Список | pgsql-hackers |
Assuming the silence is agreement, does this look like the right solution (I assume looping through the index is the only way to count the segments): if (indexStruct->indisunique) { 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++) { int pkattno = indexStruct->indkey[i]; if (pkattno>0) { char *name = NameStr(rel_attrs[pkattno-1]->attname); if (strcmp(name, attr->name)==0) { found = true; break; } } } if (!found) + { break; + } else { + + /* Require same number of segments */ + if (i != length(fkconstraint->pk_attrs)) + { + found = false; + break; + } + } } } At 02:49 29/11/00 +1100, Philip Warner wrote: > > create table c2(f1 integer, f2 integer, unique(f1,f2)); > create table c1(f1 integer, f2 integer, > foreign key(f1) references c2(f1)); > > is allowed with current sources. > ---------------------------------------------------------------- Philip Warner | __---_____ Albatross Consulting Pty. Ltd. |----/ - \ (A.B.N. 75 008 659 498) | /(@) ______---_ Tel: (+61) 0500 83 82 81 | _________ \ Fax: (+61) 0500 83 82 82 | ___________ | Http://www.rhyme.com.au | / \| | --________-- PGP key available upon request, | / and from pgp5.ai.mit.edu:11371 |/
В списке pgsql-hackers по дате отправления: