mirror of
https://github.com/postgres/postgres.git
synced 2025-05-01 01:04:50 +03:00
I have modifed heap.c so that it won't automatically generate duplicate
constraint names. > > A reasonable interpretation of DROP CONSTRAINT "foo" is to drop *all* > > constraints named "foo" on the target table. > > Then it should probably be a good thing to avoid the automatic > generation of > duplicate names? I might take a look at that, actually... > Christopher Kings-Lynne
This commit is contained in:
parent
999a4d48d3
commit
bea7a88576
@ -8,7 +8,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.163 2001/05/07 00:43:17 tgl Exp $
|
* $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.164 2001/05/09 21:13:35 momjian Exp $
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* INTERFACE ROUTINES
|
* INTERFACE ROUTINES
|
||||||
@ -1832,8 +1832,47 @@ AddRelationRawConstraints(Relation rel,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
int i;
|
||||||
|
int j;
|
||||||
|
bool success;
|
||||||
|
List *listptr2;
|
||||||
ccname = (char *) palloc(NAMEDATALEN);
|
ccname = (char *) palloc(NAMEDATALEN);
|
||||||
snprintf(ccname, NAMEDATALEN, "$%d", numchecks + 1);
|
|
||||||
|
/* Loop until we find a non-conflicting constraint name */
|
||||||
|
/* What happens if this loops forever? */
|
||||||
|
j = numchecks + 1;
|
||||||
|
do {
|
||||||
|
success = true;
|
||||||
|
snprintf(ccname, NAMEDATALEN, "$%d", j);
|
||||||
|
|
||||||
|
/* Check against old constraints */
|
||||||
|
for (i = 0; i < numoldchecks; i++)
|
||||||
|
{
|
||||||
|
if (strcmp(oldchecks[i].ccname, ccname) == 0) {
|
||||||
|
success = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* Check against other new constraints, if the check hasn't already failed */
|
||||||
|
if (success) {
|
||||||
|
foreach(listptr2, rawConstraints)
|
||||||
|
{
|
||||||
|
Constraint *cdef2 = (Constraint *) lfirst(listptr2);
|
||||||
|
|
||||||
|
if (cdef2 == cdef ||
|
||||||
|
cdef2->contype != CONSTR_CHECK ||
|
||||||
|
cdef2->raw_expr == NULL ||
|
||||||
|
cdef2->name == NULL)
|
||||||
|
continue;
|
||||||
|
if (strcmp(cdef2->name, ccname) == 0) {
|
||||||
|
success = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
++j;
|
||||||
|
} while (!success);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user