1
0
mirror of https://github.com/postgres/postgres.git synced 2025-10-18 04:29:09 +03:00

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.
This commit is contained in:
Tom Lane
2011-02-10 17:36:44 -05:00
parent 289d730655
commit 01467d3e4f
12 changed files with 207 additions and 112 deletions

View File

@@ -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;