summaryrefslogtreecommitdiff
path: root/src/backend/parser
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2011-02-10 17:36:44 -0500
committerTom Lane <tgl@sss.pgh.pa.us>2011-02-10 17:37:22 -0500
commit01467d3e4f51fe304c0160c9895484ad696d1e87 (patch)
tree6ce04b83da1f5c472281b3970eab67e2b8fc0d6a /src/backend/parser
parent289d7306555b2446d145c7e098c91b6ca20bd54c (diff)
Extend "ALTER EXTENSION ADD object" to permit "DROP object" as well.
Per discussion, this is something we should have sooner rather than later, and it doesn't take much additional code to support it.
Diffstat (limited to 'src/backend/parser')
-rw-r--r--src/backend/parser/gram.y113
1 files changed, 67 insertions, 46 deletions
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y
index e2d7d6a02f3..82ff9accc72 100644
--- a/src/backend/parser/gram.y
+++ b/src/backend/parser/gram.y
@@ -185,7 +185,7 @@ static RangeVar *makeRangeVarFromAnyName(List *names, int position, core_yyscan_
AlterDatabaseStmt AlterDatabaseSetStmt AlterDomainStmt AlterEnumStmt
AlterFdwStmt AlterForeignServerStmt AlterGroupStmt
AlterObjectSchemaStmt AlterOwnerStmt AlterSeqStmt AlterTableStmt
- AlterExtensionAddStmt AlterForeignTableStmt
+ AlterExtensionContentsStmt AlterForeignTableStmt
AlterCompositeTypeStmt AlterUserStmt AlterUserMappingStmt AlterUserSetStmt
AlterRoleStmt AlterRoleSetStmt
AlterDefaultPrivilegesStmt DefACLAction
@@ -664,7 +664,7 @@ stmt :
| AlterDefaultPrivilegesStmt
| AlterDomainStmt
| AlterEnumStmt
- | AlterExtensionAddStmt
+ | AlterExtensionContentsStmt
| AlterFdwStmt
| AlterForeignServerStmt
| AlterForeignTableStmt
@@ -3251,181 +3251,202 @@ create_extension_opt_item:
/*****************************************************************************
*
- * ALTER EXTENSION name ADD object-identifier
+ * ALTER EXTENSION name ADD/DROP object-identifier
*
*****************************************************************************/
-AlterExtensionAddStmt:
- ALTER EXTENSION name ADD_P AGGREGATE func_name aggr_args
+AlterExtensionContentsStmt:
+ ALTER EXTENSION name add_drop AGGREGATE func_name aggr_args
{
- AlterExtensionAddStmt *n = makeNode(AlterExtensionAddStmt);
+ AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
n->extname = $3;
+ n->action = $4;
n->objtype = OBJECT_AGGREGATE;
n->objname = $6;
n->objargs = $7;
$$ = (Node *)n;
}
- | ALTER EXTENSION name ADD_P CAST '(' Typename AS Typename ')'
+ | ALTER EXTENSION name add_drop CAST '(' Typename AS Typename ')'
{
- AlterExtensionAddStmt *n = makeNode(AlterExtensionAddStmt);
+ AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
n->extname = $3;
+ n->action = $4;
n->objtype = OBJECT_CAST;
n->objname = list_make1($7);
n->objargs = list_make1($9);
$$ = (Node *) n;
}
- | ALTER EXTENSION name ADD_P CONVERSION_P any_name
+ | ALTER EXTENSION name add_drop CONVERSION_P any_name
{
- AlterExtensionAddStmt *n = makeNode(AlterExtensionAddStmt);
+ AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
n->extname = $3;
+ n->action = $4;
n->objtype = OBJECT_CONVERSION;
n->objname = $6;
$$ = (Node *)n;
}
- | ALTER EXTENSION name ADD_P DOMAIN_P any_name
+ | ALTER EXTENSION name add_drop DOMAIN_P any_name
{
- AlterExtensionAddStmt *n = makeNode(AlterExtensionAddStmt);
+ AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
n->extname = $3;
+ n->action = $4;
n->objtype = OBJECT_DOMAIN;
n->objname = $6;
$$ = (Node *)n;
}
- | ALTER EXTENSION name ADD_P FUNCTION function_with_argtypes
+ | ALTER EXTENSION name add_drop FUNCTION function_with_argtypes
{
- AlterExtensionAddStmt *n = makeNode(AlterExtensionAddStmt);
+ AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
n->extname = $3;
+ n->action = $4;
n->objtype = OBJECT_FUNCTION;
n->objname = $6->funcname;
n->objargs = $6->funcargs;
$$ = (Node *)n;
}
- | ALTER EXTENSION name ADD_P opt_procedural LANGUAGE name
+ | ALTER EXTENSION name add_drop opt_procedural LANGUAGE name
{
- AlterExtensionAddStmt *n = makeNode(AlterExtensionAddStmt);
+ AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
n->extname = $3;
+ n->action = $4;
n->objtype = OBJECT_LANGUAGE;
n->objname = list_make1(makeString($7));
$$ = (Node *)n;
}
- | ALTER EXTENSION name ADD_P OPERATOR any_operator oper_argtypes
+ | ALTER EXTENSION name add_drop OPERATOR any_operator oper_argtypes
{
- AlterExtensionAddStmt *n = makeNode(AlterExtensionAddStmt);
+ AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
n->extname = $3;
+ n->action = $4;
n->objtype = OBJECT_OPERATOR;
n->objname = $6;
n->objargs = $7;
$$ = (Node *)n;
}
- | ALTER EXTENSION name ADD_P OPERATOR CLASS any_name USING access_method
+ | ALTER EXTENSION name add_drop OPERATOR CLASS any_name USING access_method
{
- AlterExtensionAddStmt *n = makeNode(AlterExtensionAddStmt);
+ AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
n->extname = $3;
+ n->action = $4;
n->objtype = OBJECT_OPCLASS;
n->objname = $7;
n->objargs = list_make1(makeString($9));
$$ = (Node *)n;
}
- | ALTER EXTENSION name ADD_P OPERATOR FAMILY any_name USING access_method
+ | ALTER EXTENSION name add_drop OPERATOR FAMILY any_name USING access_method
{
- AlterExtensionAddStmt *n = makeNode(AlterExtensionAddStmt);
+ AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
n->extname = $3;
+ n->action = $4;
n->objtype = OBJECT_OPFAMILY;
n->objname = $7;
n->objargs = list_make1(makeString($9));
$$ = (Node *)n;
}
- | ALTER EXTENSION name ADD_P SCHEMA name
+ | ALTER EXTENSION name add_drop SCHEMA name
{
- AlterExtensionAddStmt *n = makeNode(AlterExtensionAddStmt);
+ AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
n->extname = $3;
+ n->action = $4;
n->objtype = OBJECT_SCHEMA;
n->objname = list_make1(makeString($6));
$$ = (Node *)n;
}
- | ALTER EXTENSION name ADD_P TABLE any_name
+ | ALTER EXTENSION name add_drop TABLE any_name
{
- AlterExtensionAddStmt *n = makeNode(AlterExtensionAddStmt);
+ AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
n->extname = $3;
+ n->action = $4;
n->objtype = OBJECT_TABLE;
n->objname = $6;
$$ = (Node *)n;
}
- | ALTER EXTENSION name ADD_P TEXT_P SEARCH PARSER any_name
+ | ALTER EXTENSION name add_drop TEXT_P SEARCH PARSER any_name
{
- AlterExtensionAddStmt *n = makeNode(AlterExtensionAddStmt);
+ AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
n->extname = $3;
+ n->action = $4;
n->objtype = OBJECT_TSPARSER;
n->objname = $8;
$$ = (Node *)n;
}
- | ALTER EXTENSION name ADD_P TEXT_P SEARCH DICTIONARY any_name
+ | ALTER EXTENSION name add_drop TEXT_P SEARCH DICTIONARY any_name
{
- AlterExtensionAddStmt *n = makeNode(AlterExtensionAddStmt);
+ AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
n->extname = $3;
+ n->action = $4;
n->objtype = OBJECT_TSDICTIONARY;
n->objname = $8;
$$ = (Node *)n;
}
- | ALTER EXTENSION name ADD_P TEXT_P SEARCH TEMPLATE any_name
+ | ALTER EXTENSION name add_drop TEXT_P SEARCH TEMPLATE any_name
{
- AlterExtensionAddStmt *n = makeNode(AlterExtensionAddStmt);
+ AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
n->extname = $3;
+ n->action = $4;
n->objtype = OBJECT_TSTEMPLATE;
n->objname = $8;
$$ = (Node *)n;
}
- | ALTER EXTENSION name ADD_P TEXT_P SEARCH CONFIGURATION any_name
+ | ALTER EXTENSION name add_drop TEXT_P SEARCH CONFIGURATION any_name
{
- AlterExtensionAddStmt *n = makeNode(AlterExtensionAddStmt);
+ AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
n->extname = $3;
+ n->action = $4;
n->objtype = OBJECT_TSCONFIGURATION;
n->objname = $8;
$$ = (Node *)n;
}
- | ALTER EXTENSION name ADD_P SEQUENCE any_name
+ | ALTER EXTENSION name add_drop SEQUENCE any_name
{
- AlterExtensionAddStmt *n = makeNode(AlterExtensionAddStmt);
+ AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
n->extname = $3;
+ n->action = $4;
n->objtype = OBJECT_SEQUENCE;
n->objname = $6;
$$ = (Node *)n;
}
- | ALTER EXTENSION name ADD_P VIEW any_name
+ | ALTER EXTENSION name add_drop VIEW any_name
{
- AlterExtensionAddStmt *n = makeNode(AlterExtensionAddStmt);
+ AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
n->extname = $3;
+ n->action = $4;
n->objtype = OBJECT_VIEW;
n->objname = $6;
$$ = (Node *)n;
}
- | ALTER EXTENSION name ADD_P FOREIGN TABLE any_name
+ | ALTER EXTENSION name add_drop FOREIGN TABLE any_name
{
- AlterExtensionAddStmt *n = makeNode(AlterExtensionAddStmt);
+ AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
n->extname = $3;
+ n->action = $4;
n->objtype = OBJECT_FOREIGN_TABLE;
n->objname = $7;
$$ = (Node *)n;
}
- | ALTER EXTENSION name ADD_P FOREIGN DATA_P WRAPPER name
+ | ALTER EXTENSION name add_drop FOREIGN DATA_P WRAPPER name
{
- AlterExtensionAddStmt *n = makeNode(AlterExtensionAddStmt);
+ AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
n->extname = $3;
+ n->action = $4;
n->objtype = OBJECT_FDW;
n->objname = list_make1(makeString($8));
$$ = (Node *)n;
}
- | ALTER EXTENSION name ADD_P SERVER name
+ | ALTER EXTENSION name add_drop SERVER name
{
- AlterExtensionAddStmt *n = makeNode(AlterExtensionAddStmt);
+ AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
n->extname = $3;
+ n->action = $4;
n->objtype = OBJECT_FOREIGN_SERVER;
n->objname = list_make1(makeString($6));
$$ = (Node *)n;
}
- | ALTER EXTENSION name ADD_P TYPE_P any_name
+ | ALTER EXTENSION name add_drop TYPE_P any_name
{
- AlterExtensionAddStmt *n = makeNode(AlterExtensionAddStmt);
+ AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
n->extname = $3;
+ n->action = $4;
n->objtype = OBJECT_TYPE;
n->objname = $6;
$$ = (Node *)n;