postgres.git / summary / log / commit / refs

commit    b0bbcbe7d3e14f5af0184b203dc8b321303d12e7
Author:   Tom Lane <tgl@sss.pgh.pa.us>
Date:     Wed Jun 20 18:21:25 2007 +0000
First released in: 8.3.0, 7.3.20, 7.4.18, 8.0.14, 8.1.10, 8.2.5

    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.


src/backend/parser/analyze.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c index d8487293287..3761d031355 100644 --- a/src/backend/parser/analyze.c +++ b/src/backend/parser/analyze.c @@ -6,7 +6,7 @@ * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/backend/parser/analyze.c,v 1.314.4.2 2006/10/11 20:03:18 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/parser/analyze.c,v 1.314.4.3 2007/06/20 18:21:25 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -841,6 +841,7 @@ transformColumnDefinition(ParseState *pstate, CreateStmtContext *cxt, { bool is_serial; bool saw_nullable; + bool saw_default; Constraint *constraint; ListCell *clist; @@ -957,6 +958,7 @@ transformColumnDefinition(ParseState *pstate, CreateStmtContext *cxt, transformConstraintAttrs(column->constraints); saw_nullable = false; + saw_default = false; foreach(clist, column->constraints) { @@ -1001,13 +1003,15 @@ transformColumnDefinition(ParseState *pstate, CreateStmtContext *cxt, break; case CONSTR_DEFAULT: - if (column->raw_default != NULL) + if (saw_default) ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("multiple default values specified for column \"%s\" of table \"%s\"", column->colname, cxt->relation->relname))); + /* Note: DEFAULT NULL maps to constraint->raw_expr == NULL */ column->raw_default = constraint->raw_expr; Assert(constraint->cooked_expr == NULL); + saw_default = true; break; case CONSTR_PRIMARY: [parent: db6159bcd9f0]