Index: heap.c =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/catalog/heap.c,v retrieving revision 1.163 diff -c -r1.163 heap.c *** heap.c 2001/05/07 00:43:17 1.163 --- heap.c 2001/05/08 05:09:15 *************** *** 1832,1839 **** } else { ccname = (char *) palloc(NAMEDATALEN); ! snprintf(ccname, NAMEDATALEN, "$%d", numchecks + 1); } /* --- 1832,1877 ---- } else { + int j; + bool success; + List *listptr2; ccname = (char *) palloc(NAMEDATALEN); ! ! /* 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); } /*