diff options
| author | Andrew Dunstan | 2006-06-16 20:23:45 +0000 |
|---|---|---|
| committer | Andrew Dunstan | 2006-06-16 20:23:45 +0000 |
| commit | bbcd01692bff099117f5afb0fe2d1ad182621766 (patch) | |
| tree | 07aebd51aac35be3e0e4471cbff7595a35350d67 /src/backend/parser | |
| parent | e79cc2db00501fb29e3e0225182147192e830fa1 (diff) | |
DROP ... IF EXISTS for the following cases:
language, tablespace, trigger, rule, opclass, function, aggregate. operator, and cast.
Diffstat (limited to 'src/backend/parser')
| -rw-r--r-- | src/backend/parser/gram.y | 99 |
1 files changed, 93 insertions, 6 deletions
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index d84f4034aba..f95a6b74cdf 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -11,7 +11,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.545 2006/05/27 17:38:45 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.546 2006/06/16 20:23:44 adunstan Exp $ * * HISTORY * AUTHOR DATE MAJOR EVENT @@ -191,7 +191,7 @@ static void doNegateFloat(Value *v); %type <ival> opt_lock lock_type cast_context %type <boolean> opt_force opt_or_replace opt_grant_grant_option opt_grant_admin_option - opt_nowait + opt_nowait opt_if_exists %type <boolean> like_including_defaults @@ -2401,6 +2401,15 @@ DropPLangStmt: DropPLangStmt *n = makeNode(DropPLangStmt); n->plname = $4; n->behavior = $5; + n->missing_ok = false; + $$ = (Node *)n; + } + | DROP opt_procedural LANGUAGE IF_P EXISTS ColId_or_Sconst opt_drop_behavior + { + DropPLangStmt *n = makeNode(DropPLangStmt); + n->plname = $6; + n->behavior = $7; + n->missing_ok = true; $$ = (Node *)n; } ; @@ -2445,6 +2454,14 @@ DropTableSpaceStmt: DROP TABLESPACE name { DropTableSpaceStmt *n = makeNode(DropTableSpaceStmt); n->tablespacename = $3; + n->missing_ok = false; + $$ = (Node *) n; + } + | DROP TABLESPACE IF_P EXISTS name + { + DropTableSpaceStmt *n = makeNode(DropTableSpaceStmt); + n->tablespacename = $5; + n->missing_ok = true; $$ = (Node *) n; } ; @@ -2630,6 +2647,17 @@ DropTrigStmt: n->property = $3; n->behavior = $6; n->removeType = OBJECT_TRIGGER; + n->missing_ok = false; + $$ = (Node *) n; + } + | DROP TRIGGER IF_P EXISTS name ON qualified_name opt_drop_behavior + { + DropPropertyStmt *n = makeNode(DropPropertyStmt); + n->relation = $7; + n->property = $5; + n->behavior = $8; + n->removeType = OBJECT_TRIGGER; + n->missing_ok = true; $$ = (Node *) n; } ; @@ -2903,6 +2931,16 @@ DropOpClassStmt: n->opclassname = $4; n->amname = $6; n->behavior = $7; + n->missing_ok = false; + $$ = (Node *) n; + } + | DROP OPERATOR CLASS IF_P EXISTS any_name USING access_method opt_drop_behavior + { + RemoveOpClassStmt *n = makeNode(RemoveOpClassStmt); + n->opclassname = $6; + n->amname = $8; + n->behavior = $9; + n->missing_ok = true; $$ = (Node *) n; } ; @@ -3912,6 +3950,17 @@ RemoveFuncStmt: n->name = $3; n->args = extractArgTypes($4); n->behavior = $5; + n->missing_ok = false; + $$ = (Node *)n; + } + | DROP FUNCTION IF_P EXISTS func_name func_args opt_drop_behavior + { + RemoveFuncStmt *n = makeNode(RemoveFuncStmt); + n->kind = OBJECT_FUNCTION; + n->name = $5; + n->args = extractArgTypes($6); + n->behavior = $7; + n->missing_ok = true; $$ = (Node *)n; } ; @@ -3924,6 +3973,17 @@ RemoveAggrStmt: n->name = $3; n->args = $4; n->behavior = $5; + n->missing_ok = false; + $$ = (Node *)n; + } + | DROP AGGREGATE IF_P EXISTS func_name aggr_args opt_drop_behavior + { + RemoveFuncStmt *n = makeNode(RemoveFuncStmt); + n->kind = OBJECT_AGGREGATE; + n->name = $5; + n->args = $6; + n->behavior = $7; + n->missing_ok = true; $$ = (Node *)n; } ; @@ -3936,6 +3996,17 @@ RemoveOperStmt: n->name = $3; n->args = $5; n->behavior = $7; + n->missing_ok = false; + $$ = (Node *)n; + } + | DROP OPERATOR IF_P EXISTS any_operator '(' oper_argtypes ')' opt_drop_behavior + { + RemoveFuncStmt *n = makeNode(RemoveFuncStmt); + n->kind = OBJECT_OPERATOR; + n->name = $5; + n->args = $7; + n->behavior = $9; + n->missing_ok = true; $$ = (Node *)n; } ; @@ -3998,16 +4069,21 @@ cast_context: AS IMPLICIT_P { $$ = COERCION_IMPLICIT; } ; -DropCastStmt: DROP CAST '(' Typename AS Typename ')' opt_drop_behavior +DropCastStmt: DROP CAST opt_if_exists '(' Typename AS Typename ')' opt_drop_behavior { DropCastStmt *n = makeNode(DropCastStmt); - n->sourcetype = $4; - n->targettype = $6; - n->behavior = $8; + n->sourcetype = $5; + n->targettype = $7; + n->behavior = $9; + n->missing_ok = $$ = (Node *)n; } ; +opt_if_exists: IF_P EXISTS { $$ = true; } + | /* empty */ { $$ = false; } + ; + /***************************************************************************** @@ -4432,6 +4508,17 @@ DropRuleStmt: n->property = $3; n->behavior = $6; n->removeType = OBJECT_RULE; + n->missing_ok = false; + $$ = (Node *) n; + } + | DROP RULE IF_P EXISTS name ON qualified_name opt_drop_behavior + { + DropPropertyStmt *n = makeNode(DropPropertyStmt); + n->relation = $7; + n->property = $5; + n->behavior = $8; + n->removeType = OBJECT_RULE; + n->missing_ok = true; $$ = (Node *) n; } ; |
