summaryrefslogtreecommitdiff
path: root/src/backend/parser/gram.y
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/parser/gram.y')
-rw-r--r--src/backend/parser/gram.y170
1 files changed, 94 insertions, 76 deletions
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y
index c135465fbd..7ea38e4663 100644
--- a/src/backend/parser/gram.y
+++ b/src/backend/parser/gram.y
@@ -3255,16 +3255,19 @@ opt_validator:
DropPLangStmt:
DROP opt_procedural LANGUAGE ColId_or_Sconst opt_drop_behavior
{
- DropPLangStmt *n = makeNode(DropPLangStmt);
- n->plname = $4;
+ DropStmt *n = makeNode(DropStmt);
+ n->removeType = OBJECT_LANGUAGE;
+ n->objects = list_make1(list_make1(makeString($4)));
+ n->arguments = NIL;
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;
+ DropStmt *n = makeNode(DropStmt);
+ n->removeType = OBJECT_LANGUAGE;
+ n->objects = list_make1(list_make1(makeString($6)));
n->behavior = $7;
n->missing_ok = true;
$$ = (Node *)n;
@@ -3656,16 +3659,20 @@ opt_fdw_options:
DropFdwStmt: DROP FOREIGN DATA_P WRAPPER name opt_drop_behavior
{
- DropFdwStmt *n = makeNode(DropFdwStmt);
- n->fdwname = $5;
+ DropStmt *n = makeNode(DropStmt);
+ n->removeType = OBJECT_FDW;
+ n->objects = list_make1(list_make1(makeString($5)));
+ n->arguments = NIL;
n->missing_ok = false;
n->behavior = $6;
$$ = (Node *) n;
}
| DROP FOREIGN DATA_P WRAPPER IF_P EXISTS name opt_drop_behavior
- {
- DropFdwStmt *n = makeNode(DropFdwStmt);
- n->fdwname = $7;
+ {
+ DropStmt *n = makeNode(DropStmt);
+ n->removeType = OBJECT_FDW;
+ n->objects = list_make1(list_make1(makeString($7)));
+ n->arguments = NIL;
n->missing_ok = true;
n->behavior = $8;
$$ = (Node *) n;
@@ -3812,16 +3819,20 @@ opt_foreign_server_version:
DropForeignServerStmt: DROP SERVER name opt_drop_behavior
{
- DropForeignServerStmt *n = makeNode(DropForeignServerStmt);
- n->servername = $3;
+ DropStmt *n = makeNode(DropStmt);
+ n->removeType = OBJECT_FOREIGN_SERVER;
+ n->objects = list_make1(list_make1(makeString($3)));
+ n->arguments = NIL;
n->missing_ok = false;
n->behavior = $4;
$$ = (Node *) n;
}
| DROP SERVER IF_P EXISTS name opt_drop_behavior
- {
- DropForeignServerStmt *n = makeNode(DropForeignServerStmt);
- n->servername = $5;
+ {
+ DropStmt *n = makeNode(DropStmt);
+ n->removeType = OBJECT_FOREIGN_SERVER;
+ n->objects = list_make1(list_make1(makeString($5)));
+ n->arguments = NIL;
n->missing_ok = true;
n->behavior = $6;
$$ = (Node *) n;
@@ -4193,23 +4204,23 @@ ConstraintAttributeElem:
DropTrigStmt:
- DROP TRIGGER name ON qualified_name opt_drop_behavior
+ DROP TRIGGER name ON any_name opt_drop_behavior
{
- DropPropertyStmt *n = makeNode(DropPropertyStmt);
- n->relation = $5;
- n->property = $3;
- n->behavior = $6;
+ DropStmt *n = makeNode(DropStmt);
n->removeType = OBJECT_TRIGGER;
+ n->objects = list_make1(lappend($5, makeString($3)));
+ n->arguments = NIL;
+ n->behavior = $6;
n->missing_ok = false;
$$ = (Node *) n;
}
- | DROP TRIGGER IF_P EXISTS name ON qualified_name opt_drop_behavior
+ | DROP TRIGGER IF_P EXISTS name ON any_name opt_drop_behavior
{
- DropPropertyStmt *n = makeNode(DropPropertyStmt);
- n->relation = $7;
- n->property = $5;
- n->behavior = $8;
+ DropStmt *n = makeNode(DropStmt);
n->removeType = OBJECT_TRIGGER;
+ n->objects = list_make1(lappend($7, makeString($5)));
+ n->arguments = NIL;
+ n->behavior = $8;
n->missing_ok = true;
$$ = (Node *) n;
}
@@ -4247,9 +4258,9 @@ CreateAssertStmt:
DropAssertStmt:
DROP ASSERTION name opt_drop_behavior
{
- DropPropertyStmt *n = makeNode(DropPropertyStmt);
- n->relation = NULL;
- n->property = $3;
+ DropStmt *n = makeNode(DropStmt);
+ n->objects = NIL;
+ n->arguments = NIL;
n->behavior = $4;
n->removeType = OBJECT_TRIGGER; /* XXX */
ereport(ERROR,
@@ -4665,18 +4676,20 @@ opclass_drop:
DropOpClassStmt:
DROP OPERATOR CLASS any_name USING access_method opt_drop_behavior
{
- RemoveOpClassStmt *n = makeNode(RemoveOpClassStmt);
- n->opclassname = $4;
- n->amname = $6;
+ DropStmt *n = makeNode(DropStmt);
+ n->objects = list_make1($4);
+ n->arguments = list_make1(list_make1(makeString($6)));
+ n->removeType = OBJECT_OPCLASS;
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;
+ DropStmt *n = makeNode(DropStmt);
+ n->objects = list_make1($6);
+ n->arguments = list_make1(list_make1(makeString($8)));
+ n->removeType = OBJECT_OPCLASS;
n->behavior = $9;
n->missing_ok = true;
$$ = (Node *) n;
@@ -4686,18 +4699,20 @@ DropOpClassStmt:
DropOpFamilyStmt:
DROP OPERATOR FAMILY any_name USING access_method opt_drop_behavior
{
- RemoveOpFamilyStmt *n = makeNode(RemoveOpFamilyStmt);
- n->opfamilyname = $4;
- n->amname = $6;
+ DropStmt *n = makeNode(DropStmt);
+ n->objects = list_make1($4);
+ n->arguments = list_make1(list_make1(makeString($6)));
+ n->removeType = OBJECT_OPFAMILY;
n->behavior = $7;
n->missing_ok = false;
$$ = (Node *) n;
}
| DROP OPERATOR FAMILY IF_P EXISTS any_name USING access_method opt_drop_behavior
{
- RemoveOpFamilyStmt *n = makeNode(RemoveOpFamilyStmt);
- n->opfamilyname = $6;
- n->amname = $8;
+ DropStmt *n = makeNode(DropStmt);
+ n->objects = list_make1($6);
+ n->arguments = list_make1(list_make1(makeString($8)));
+ n->removeType = OBJECT_OPFAMILY;
n->behavior = $9;
n->missing_ok = true;
$$ = (Node *) n;
@@ -4748,6 +4763,7 @@ DropStmt: DROP drop_type IF_P EXISTS any_name_list opt_drop_behavior
n->removeType = $2;
n->missing_ok = TRUE;
n->objects = $5;
+ n->arguments = NIL;
n->behavior = $6;
$$ = (Node *)n;
}
@@ -4757,6 +4773,7 @@ DropStmt: DROP drop_type IF_P EXISTS any_name_list opt_drop_behavior
n->removeType = $2;
n->missing_ok = FALSE;
n->objects = $3;
+ n->arguments = NIL;
n->behavior = $4;
$$ = (Node *)n;
}
@@ -6173,20 +6190,20 @@ opt_restrict:
RemoveFuncStmt:
DROP FUNCTION func_name func_args opt_drop_behavior
{
- RemoveFuncStmt *n = makeNode(RemoveFuncStmt);
- n->kind = OBJECT_FUNCTION;
- n->name = $3;
- n->args = extractArgTypes($4);
+ DropStmt *n = makeNode(DropStmt);
+ n->removeType = OBJECT_FUNCTION;
+ n->objects = list_make1($3);
+ n->arguments = list_make1(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);
+ DropStmt *n = makeNode(DropStmt);
+ n->removeType = OBJECT_FUNCTION;
+ n->objects = list_make1($5);
+ n->arguments = list_make1(extractArgTypes($6));
n->behavior = $7;
n->missing_ok = true;
$$ = (Node *)n;
@@ -6196,20 +6213,20 @@ RemoveFuncStmt:
RemoveAggrStmt:
DROP AGGREGATE func_name aggr_args opt_drop_behavior
{
- RemoveFuncStmt *n = makeNode(RemoveFuncStmt);
- n->kind = OBJECT_AGGREGATE;
- n->name = $3;
- n->args = $4;
+ DropStmt *n = makeNode(DropStmt);
+ n->removeType = OBJECT_AGGREGATE;
+ n->objects = list_make1($3);
+ n->arguments = list_make1($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;
+ DropStmt *n = makeNode(DropStmt);
+ n->removeType = OBJECT_AGGREGATE;
+ n->objects = list_make1($5);
+ n->arguments = list_make1($6);
n->behavior = $7;
n->missing_ok = true;
$$ = (Node *)n;
@@ -6219,20 +6236,20 @@ RemoveAggrStmt:
RemoveOperStmt:
DROP OPERATOR any_operator oper_argtypes opt_drop_behavior
{
- RemoveFuncStmt *n = makeNode(RemoveFuncStmt);
- n->kind = OBJECT_OPERATOR;
- n->name = $3;
- n->args = $4;
+ DropStmt *n = makeNode(DropStmt);
+ n->removeType = OBJECT_OPERATOR;
+ n->objects = list_make1($3);
+ n->arguments = list_make1($4);
n->behavior = $5;
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 = $6;
+ DropStmt *n = makeNode(DropStmt);
+ n->removeType = OBJECT_OPERATOR;
+ n->objects = list_make1($5);
+ n->arguments = list_make1($6);
n->behavior = $7;
n->missing_ok = true;
$$ = (Node *)n;
@@ -6345,9 +6362,10 @@ cast_context: AS IMPLICIT_P { $$ = COERCION_IMPLICIT; }
DropCastStmt: DROP CAST opt_if_exists '(' Typename AS Typename ')' opt_drop_behavior
{
- DropCastStmt *n = makeNode(DropCastStmt);
- n->sourcetype = $5;
- n->targettype = $7;
+ DropStmt *n = makeNode(DropStmt);
+ n->removeType = OBJECT_CAST;
+ n->objects = list_make1(list_make1($5));
+ n->arguments = list_make1(list_make1($7));
n->behavior = $9;
n->missing_ok = $3;
$$ = (Node *)n;
@@ -7063,23 +7081,23 @@ opt_instead:
DropRuleStmt:
- DROP RULE name ON qualified_name opt_drop_behavior
+ DROP RULE name ON any_name opt_drop_behavior
{
- DropPropertyStmt *n = makeNode(DropPropertyStmt);
- n->relation = $5;
- n->property = $3;
- n->behavior = $6;
+ DropStmt *n = makeNode(DropStmt);
n->removeType = OBJECT_RULE;
+ n->objects = list_make1(lappend($5, makeString($3)));
+ n->arguments = NIL;
+ n->behavior = $6;
n->missing_ok = false;
$$ = (Node *) n;
}
- | DROP RULE IF_P EXISTS name ON qualified_name opt_drop_behavior
+ | DROP RULE IF_P EXISTS name ON any_name opt_drop_behavior
{
- DropPropertyStmt *n = makeNode(DropPropertyStmt);
- n->relation = $7;
- n->property = $5;
- n->behavior = $8;
+ DropStmt *n = makeNode(DropStmt);
n->removeType = OBJECT_RULE;
+ n->objects = list_make1(lappend($7, makeString($5)));
+ n->arguments = NIL;
+ n->behavior = $8;
n->missing_ok = true;
$$ = (Node *) n;
}