diff options
| author | Bruce Momjian <bruce@momjian.us> | 2002-12-06 03:28:34 +0000 |
|---|---|---|
| committer | Bruce Momjian <bruce@momjian.us> | 2002-12-06 03:28:34 +0000 |
| commit | 853153ca6dfdf2bdf6ce800216de75b2fefbb4f1 (patch) | |
| tree | a9911b35cf84db7bc101dc97a5e788bc3484f69c /src/backend/parser | |
| parent | 36580c8e2112e808f5847c4021fabe458096b134 (diff) | |
| download | postgresql-853153ca6dfdf2bdf6ce800216de75b2fefbb4f1.tar.gz | |
ALTER DOMAIN .. SET / DROP NOT NULL
ALTER DOMAIN .. SET / DROP DEFAULT
ALTER DOMAIN .. ADD / DROP CONSTRAINT
New files:
- doc/src/sgml/ref/alter_domain.sgml
Rod Taylor
Diffstat (limited to 'src/backend/parser')
| -rw-r--r-- | src/backend/parser/gram.y | 52 | ||||
| -rw-r--r-- | src/backend/parser/parse_expr.c | 10 |
2 files changed, 59 insertions, 3 deletions
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index d4c879f770..e1fad41b0e 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -11,7 +11,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.383 2002/11/25 21:29:40 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.384 2002/12/06 03:28:33 momjian Exp $ * * HISTORY * AUTHOR DATE MAJOR EVENT @@ -128,7 +128,7 @@ static void doNegateFloat(Value *v); } %type <node> stmt schema_stmt - AlterDatabaseSetStmt AlterGroupStmt + AlterDatabaseSetStmt AlterDomainStmt AlterGroupStmt AlterTableStmt AlterUserStmt AlterUserSetStmt AnalyzeStmt ClosePortalStmt ClusterStmt CommentStmt ConstraintsSetStmt CopyStmt CreateAsStmt CreateCastStmt @@ -479,6 +479,7 @@ stmtmulti: stmtmulti ';' stmt stmt : AlterDatabaseSetStmt + | AlterDomainStmt | AlterGroupStmt | AlterTableStmt | AlterUserStmt @@ -3729,6 +3730,53 @@ CreateDomainStmt: } ; +AlterDomainStmt: + /* ALTER DOMAIN <domain> {SET DEFAULT <expr>|DROP DEFAULT} */ + ALTER DOMAIN_P any_name alter_column_default + { + AlterDomainStmt *n = makeNode(AlterDomainStmt); + n->subtype = 'T'; + n->typename = $3; + n->def = $4; + $$ = (Node *)n; + } + /* ALTER DOMAIN <domain> DROP NOT NULL */ + | ALTER DOMAIN_P any_name DROP NOT NULL_P + { + AlterDomainStmt *n = makeNode(AlterDomainStmt); + n->subtype = 'N'; + n->typename = $3; + $$ = (Node *)n; + } + /* ALTER DOMAIN <domain> SET NOT NULL */ + | ALTER DOMAIN_P any_name SET NOT NULL_P + { + AlterDomainStmt *n = makeNode(AlterDomainStmt); + n->subtype = 'O'; + n->typename = $3; + $$ = (Node *)n; + } + /* ALTER DOMAIN <domain> ADD CONSTRAINT ... */ + | ALTER DOMAIN_P any_name ADD TableConstraint + { + AlterDomainStmt *n = makeNode(AlterDomainStmt); + n->subtype = 'C'; + n->typename = $3; + n->def = $5; + $$ = (Node *)n; + } + /* ALTER DOMAIN <domain> DROP CONSTRAINT <name> [RESTRICT|CASCADE] */ + | ALTER DOMAIN_P any_name DROP CONSTRAINT name opt_drop_behavior + { + AlterDomainStmt *n = makeNode(AlterDomainStmt); + n->subtype = 'X'; + n->typename = $3; + n->name = $6; + n->behavior = $7; + $$ = (Node *)n; + } + ; + opt_as: AS {} | /* EMPTY */ {} ; diff --git a/src/backend/parser/parse_expr.c b/src/backend/parser/parse_expr.c index b620c7116b..834cc9c82d 100644 --- a/src/backend/parser/parse_expr.c +++ b/src/backend/parser/parse_expr.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/parse_expr.c,v 1.132 2002/11/30 21:25:05 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/parse_expr.c,v 1.133 2002/12/06 03:28:33 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -629,6 +629,14 @@ transformExpr(ParseState *pstate, Node *expr, ConstraintTestValue *domVal) case T_DomainConstraintValue: { + /* + * If domVal is NULL, we are not translating an expression that + * can use it + */ + if (domVal == NULL) + elog(ERROR, "VALUE is not allowed in expression for node %d", + nodeTag(expr)); + result = (Node *) copyObject(domVal); break; |
