mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +03:00 
			
		
		
		
	transformColumnDefinition failed to complain about
create table foo (bar int default null default 3); due to not thinking about the special-case handling of DEFAULT NULL. Problem noticed while investigating bug #3396.
This commit is contained in:
		@@ -6,7 +6,7 @@
 | 
				
			|||||||
 * Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
 | 
					 * Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
 | 
				
			||||||
 * Portions Copyright (c) 1994, Regents of the University of California
 | 
					 * Portions Copyright (c) 1994, Regents of the University of California
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 *	$PostgreSQL: pgsql/src/backend/parser/analyze.c,v 1.353 2006/10/11 16:42:59 tgl Exp $
 | 
					 *	$PostgreSQL: pgsql/src/backend/parser/analyze.c,v 1.353.2.1 2007/06/20 18:21:08 tgl Exp $
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 *-------------------------------------------------------------------------
 | 
					 *-------------------------------------------------------------------------
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
@@ -1033,6 +1033,7 @@ transformColumnDefinition(ParseState *pstate, CreateStmtContext *cxt,
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	bool		is_serial;
 | 
						bool		is_serial;
 | 
				
			||||||
	bool		saw_nullable;
 | 
						bool		saw_nullable;
 | 
				
			||||||
 | 
						bool		saw_default;
 | 
				
			||||||
	Constraint *constraint;
 | 
						Constraint *constraint;
 | 
				
			||||||
	ListCell   *clist;
 | 
						ListCell   *clist;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1163,6 +1164,7 @@ transformColumnDefinition(ParseState *pstate, CreateStmtContext *cxt,
 | 
				
			|||||||
	transformConstraintAttrs(column->constraints);
 | 
						transformConstraintAttrs(column->constraints);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	saw_nullable = false;
 | 
						saw_nullable = false;
 | 
				
			||||||
 | 
						saw_default = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	foreach(clist, column->constraints)
 | 
						foreach(clist, column->constraints)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@@ -1207,13 +1209,15 @@ transformColumnDefinition(ParseState *pstate, CreateStmtContext *cxt,
 | 
				
			|||||||
				break;
 | 
									break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			case CONSTR_DEFAULT:
 | 
								case CONSTR_DEFAULT:
 | 
				
			||||||
				if (column->raw_default != NULL)
 | 
									if (saw_default)
 | 
				
			||||||
					ereport(ERROR,
 | 
										ereport(ERROR,
 | 
				
			||||||
							(errcode(ERRCODE_SYNTAX_ERROR),
 | 
												(errcode(ERRCODE_SYNTAX_ERROR),
 | 
				
			||||||
							 errmsg("multiple default values specified for column \"%s\" of table \"%s\"",
 | 
												 errmsg("multiple default values specified for column \"%s\" of table \"%s\"",
 | 
				
			||||||
								  column->colname, cxt->relation->relname)));
 | 
													  column->colname, cxt->relation->relname)));
 | 
				
			||||||
 | 
									/* Note: DEFAULT NULL maps to constraint->raw_expr == NULL */
 | 
				
			||||||
				column->raw_default = constraint->raw_expr;
 | 
									column->raw_default = constraint->raw_expr;
 | 
				
			||||||
				Assert(constraint->cooked_expr == NULL);
 | 
									Assert(constraint->cooked_expr == NULL);
 | 
				
			||||||
 | 
									saw_default = true;
 | 
				
			||||||
				break;
 | 
									break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			case CONSTR_PRIMARY:
 | 
								case CONSTR_PRIMARY:
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user