mirror of
				https://github.com/postgres/postgres.git
				synced 2025-10-31 00:03:57 -04: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