mirror of
https://github.com/postgres/postgres.git
synced 2025-06-07 11:02:12 +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:
parent
cbe8af81b2
commit
01e570e684
@ -6,7 +6,7 @@
|
|||||||
* Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
|
* Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
|
||||||
* Portions Copyright (c) 1994, Regents of the University of California
|
* Portions Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
* $Header: /cvsroot/pgsql/src/backend/parser/analyze.c,v 1.253.2.2 2003/02/13 22:50:09 tgl Exp $
|
* $Header: /cvsroot/pgsql/src/backend/parser/analyze.c,v 1.253.2.3 2007/06/20 18:21:51 tgl Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -793,6 +793,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;
|
||||||
List *clist;
|
List *clist;
|
||||||
|
|
||||||
@ -895,6 +896,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)
|
||||||
{
|
{
|
||||||
@ -935,11 +937,13 @@ transformColumnDefinition(ParseState *pstate, CreateStmtContext *cxt,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case CONSTR_DEFAULT:
|
case CONSTR_DEFAULT:
|
||||||
if (column->raw_default != NULL)
|
if (saw_default)
|
||||||
elog(ERROR, "%s/DEFAULT multiple values specified for '%s.%s'",
|
elog(ERROR, "%s/DEFAULT multiple values specified for '%s.%s'",
|
||||||
cxt->stmtType, cxt->relation->relname, column->colname);
|
cxt->stmtType, cxt->relation->relname, column->colname);
|
||||||
|
/* 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:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user