diff options
Diffstat (limited to 'src/backend/parser/gram.y')
| -rw-r--r-- | src/backend/parser/gram.y | 66 |
1 files changed, 60 insertions, 6 deletions
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index a8aba404e7..c1b4665091 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.285 2002/03/06 06:09:53 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.286 2002/03/06 20:34:49 momjian Exp $ * * HISTORY * AUTHOR DATE MAJOR EVENT @@ -135,7 +135,8 @@ static void doNegateFloat(Value *v); ClosePortalStmt, ClusterStmt, CommentStmt, ConstraintsSetStmt, CopyStmt, CreateAsStmt, CreateGroupStmt, CreatePLangStmt, CreateSchemaStmt, CreateSeqStmt, CreateStmt, CreateTrigStmt, - CreateUserStmt, CreatedbStmt, CursorStmt, DefineStmt, DeleteStmt, + CreateUserStmt, CreateDomainStmt, CreatedbStmt, CursorStmt, + DefineStmt, DeleteStmt, DropGroupStmt, DropPLangStmt, DropSchemaStmt, DropStmt, DropTrigStmt, DropUserStmt, DropdbStmt, ExplainStmt, FetchStmt, GrantStmt, IndexStmt, InsertStmt, ListenStmt, LoadStmt, LockStmt, @@ -289,6 +290,8 @@ static void doNegateFloat(Value *v); %type <list> constraints_set_namelist %type <boolean> constraints_set_mode +%type <boolean> opt_as + /* * If you make any token changes, remember to: * - use "yacc -d" and update parse.h @@ -343,7 +346,7 @@ static void doNegateFloat(Value *v); WITHOUT /* Keywords (in SQL92 non-reserved words) */ -%token COMMITTED, SERIALIZABLE, TYPE_P +%token COMMITTED, SERIALIZABLE, TYPE_P, DOMAIN_P /* Keywords for Postgres support (not in SQL92 reserved words) * @@ -446,6 +449,7 @@ stmt : AlterDatabaseSetStmt | CopyStmt | CreateStmt | CreateAsStmt + | CreateDomainStmt | CreateSchemaStmt | CreateGroupStmt | CreateSeqStmt @@ -776,7 +780,10 @@ DropSchemaStmt: DROP SCHEMA UserId n->dbname = $3; $$ = (Node *)n; } + ; + + /***************************************************************************** * @@ -1461,7 +1468,10 @@ ColConstraintElem: n->name = NULL; if (exprIsNullConstant($2)) { - /* DEFAULT NULL should be reported as empty expr */ + /* + * DEFAULT NULL should be reported as empty expr + * Required for NOT NULL Domain overrides + */ n->raw_expr = NULL; } else @@ -2043,7 +2053,16 @@ def_list: def_elem { $$ = makeList1($1); } | def_list ',' def_elem { $$ = lappend($1, $3); } ; -def_elem: ColLabel '=' def_arg +def_elem: DEFAULT '=' b_expr + { + $$ = makeNode(DefElem); + $$->defname = "default"; + if (exprIsNullConstant($3)) + $$->arg = (Node *)NULL; + else + $$->arg = $3; + } + | ColLabel '=' def_arg { $$ = makeNode(DefElem); $$->defname = $1; @@ -2078,6 +2097,15 @@ DropStmt: DROP drop_type name_list DropStmt *n = makeNode(DropStmt); n->removeType = $2; n->names = $3; + n->behavior = RESTRICT; /* Restricted by default */ + $$ = (Node *)n; + } + | DROP DOMAIN_P name_list drop_behavior + { + DropStmt *n = makeNode(DropStmt); + n->removeType = DROP_DOMAIN_P; + n->names = $3; + n->behavior = $4; $$ = (Node *)n; } ; @@ -2110,7 +2138,7 @@ TruncateStmt: TRUNCATE opt_table relation_name * The COMMENT ON statement can take different forms based upon the type of * the object associated with the comment. The form of the statement is: * - * COMMENT ON [ [ DATABASE | INDEX | RULE | SEQUENCE | TABLE | TYPE | VIEW ] + * COMMENT ON [ [ DATABASE | DOMAIN | INDEX | RULE | SEQUENCE | TABLE | TYPE | VIEW ] * <objname> | AGGREGATE <aggname> (<aggtype>) | FUNCTION * <funcname> (arg1, arg2, ...) | OPERATOR <op> * (leftoperand_typ rightoperand_typ) | TRIGGER <triggername> ON @@ -2196,6 +2224,7 @@ comment_type: DATABASE { $$ = DATABASE; } | RULE { $$ = RULE; } | SEQUENCE { $$ = SEQUENCE; } | TABLE { $$ = TABLE; } + | DOMAIN_P { $$ = TYPE_P; } | TYPE_P { $$ = TYPE_P; } | VIEW { $$ = VIEW; } ; @@ -3222,6 +3251,30 @@ AlterDatabaseSetStmt: ALTER DATABASE database_name VariableSetStmt } ; +/***************************************************************************** + * + * Manipulate a domain + * + * + *****************************************************************************/ + +CreateDomainStmt: CREATE DOMAIN_P name opt_as Typename ColQualList opt_collate + { + CreateDomainStmt *n = makeNode(CreateDomainStmt); + n->domainname = $3; + n->typename = $5; + n->constraints = $6; + + if ($7 != NULL) + elog(NOTICE,"CREATE DOMAIN / COLLATE %s not yet " + "implemented; clause ignored", $7); + $$ = (Node *)n; + } + ; + +opt_as: AS {$$ = TRUE; } + | /* EMPTY */ {$$ = FALSE; } + ; /***************************************************************************** * @@ -5879,6 +5932,7 @@ unreserved_keyword: | DEFERRED { $$ = "deferred"; } | DELETE { $$ = "delete"; } | DELIMITERS { $$ = "delimiters"; } + | DOMAIN_P { $$ = "domain"; } | DOUBLE { $$ = "double"; } | DROP { $$ = "drop"; } | EACH { $$ = "each"; } |
