mirror of
https://github.com/postgres/postgres.git
synced 2025-05-15 19:15:29 +03:00
Refactor AlterExtensionContentsStmt grammar
Make use of the general object support already used by COMMENT, DROP, and SECURITY LABEL. Discussion: https://www.postgresql.org/message-id/flat/163c00a5-f634-ca52-fc7c-0e53deda8735%402ndquadrant.com
This commit is contained in:
parent
a332b366d4
commit
8f5b596744
@ -3269,6 +3269,25 @@ ExecAlterExtensionContentsStmt(AlterExtensionContentsStmt *stmt,
|
|||||||
Relation relation;
|
Relation relation;
|
||||||
Oid oldExtension;
|
Oid oldExtension;
|
||||||
|
|
||||||
|
switch (stmt->objtype)
|
||||||
|
{
|
||||||
|
case OBJECT_DATABASE:
|
||||||
|
case OBJECT_EXTENSION:
|
||||||
|
case OBJECT_INDEX:
|
||||||
|
case OBJECT_PUBLICATION:
|
||||||
|
case OBJECT_ROLE:
|
||||||
|
case OBJECT_STATISTIC_EXT:
|
||||||
|
case OBJECT_SUBSCRIPTION:
|
||||||
|
case OBJECT_TABLESPACE:
|
||||||
|
ereport(ERROR,
|
||||||
|
(errcode(ERRCODE_INVALID_OBJECT_DEFINITION),
|
||||||
|
errmsg("cannot add an object of this type to an extension")));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
/* OK */
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
extension.classId = ExtensionRelationId;
|
extension.classId = ExtensionRelationId;
|
||||||
extension.objectId = get_extension_oid(stmt->extname, false);
|
extension.objectId = get_extension_oid(stmt->extname, false);
|
||||||
extension.objectSubId = 0;
|
extension.objectSubId = 0;
|
||||||
|
@ -4546,13 +4546,22 @@ alter_extension_opt_item:
|
|||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
|
|
||||||
AlterExtensionContentsStmt:
|
AlterExtensionContentsStmt:
|
||||||
ALTER EXTENSION name add_drop ACCESS METHOD name
|
ALTER EXTENSION name add_drop object_type_name name
|
||||||
{
|
{
|
||||||
AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
|
AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
|
||||||
n->extname = $3;
|
n->extname = $3;
|
||||||
n->action = $4;
|
n->action = $4;
|
||||||
n->objtype = OBJECT_ACCESS_METHOD;
|
n->objtype = $5;
|
||||||
n->object = (Node *) makeString($7);
|
n->object = (Node *) makeString($6);
|
||||||
|
$$ = (Node *)n;
|
||||||
|
}
|
||||||
|
| ALTER EXTENSION name add_drop object_type_any_name any_name
|
||||||
|
{
|
||||||
|
AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
|
||||||
|
n->extname = $3;
|
||||||
|
n->action = $4;
|
||||||
|
n->objtype = $5;
|
||||||
|
n->object = (Node *) $6;
|
||||||
$$ = (Node *)n;
|
$$ = (Node *)n;
|
||||||
}
|
}
|
||||||
| ALTER EXTENSION name add_drop AGGREGATE aggregate_with_argtypes
|
| ALTER EXTENSION name add_drop AGGREGATE aggregate_with_argtypes
|
||||||
@ -4573,24 +4582,6 @@ AlterExtensionContentsStmt:
|
|||||||
n->object = (Node *) list_make2($7, $9);
|
n->object = (Node *) list_make2($7, $9);
|
||||||
$$ = (Node *) n;
|
$$ = (Node *) n;
|
||||||
}
|
}
|
||||||
| ALTER EXTENSION name add_drop COLLATION any_name
|
|
||||||
{
|
|
||||||
AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
|
|
||||||
n->extname = $3;
|
|
||||||
n->action = $4;
|
|
||||||
n->objtype = OBJECT_COLLATION;
|
|
||||||
n->object = (Node *) $6;
|
|
||||||
$$ = (Node *)n;
|
|
||||||
}
|
|
||||||
| ALTER EXTENSION name add_drop CONVERSION_P any_name
|
|
||||||
{
|
|
||||||
AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
|
|
||||||
n->extname = $3;
|
|
||||||
n->action = $4;
|
|
||||||
n->objtype = OBJECT_CONVERSION;
|
|
||||||
n->object = (Node *) $6;
|
|
||||||
$$ = (Node *)n;
|
|
||||||
}
|
|
||||||
| ALTER EXTENSION name add_drop DOMAIN_P Typename
|
| ALTER EXTENSION name add_drop DOMAIN_P Typename
|
||||||
{
|
{
|
||||||
AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
|
AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
|
||||||
@ -4609,15 +4600,6 @@ AlterExtensionContentsStmt:
|
|||||||
n->object = (Node *) $6;
|
n->object = (Node *) $6;
|
||||||
$$ = (Node *)n;
|
$$ = (Node *)n;
|
||||||
}
|
}
|
||||||
| ALTER EXTENSION name add_drop opt_procedural LANGUAGE name
|
|
||||||
{
|
|
||||||
AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
|
|
||||||
n->extname = $3;
|
|
||||||
n->action = $4;
|
|
||||||
n->objtype = OBJECT_LANGUAGE;
|
|
||||||
n->object = (Node *) makeString($7);
|
|
||||||
$$ = (Node *)n;
|
|
||||||
}
|
|
||||||
| ALTER EXTENSION name add_drop OPERATOR operator_with_argtypes
|
| ALTER EXTENSION name add_drop OPERATOR operator_with_argtypes
|
||||||
{
|
{
|
||||||
AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
|
AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
|
||||||
@ -4663,123 +4645,6 @@ AlterExtensionContentsStmt:
|
|||||||
n->object = (Node *) $6;
|
n->object = (Node *) $6;
|
||||||
$$ = (Node *)n;
|
$$ = (Node *)n;
|
||||||
}
|
}
|
||||||
| ALTER EXTENSION name add_drop SCHEMA name
|
|
||||||
{
|
|
||||||
AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
|
|
||||||
n->extname = $3;
|
|
||||||
n->action = $4;
|
|
||||||
n->objtype = OBJECT_SCHEMA;
|
|
||||||
n->object = (Node *) makeString($6);
|
|
||||||
$$ = (Node *)n;
|
|
||||||
}
|
|
||||||
| ALTER EXTENSION name add_drop EVENT TRIGGER name
|
|
||||||
{
|
|
||||||
AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
|
|
||||||
n->extname = $3;
|
|
||||||
n->action = $4;
|
|
||||||
n->objtype = OBJECT_EVENT_TRIGGER;
|
|
||||||
n->object = (Node *) makeString($7);
|
|
||||||
$$ = (Node *)n;
|
|
||||||
}
|
|
||||||
| ALTER EXTENSION name add_drop TABLE any_name
|
|
||||||
{
|
|
||||||
AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
|
|
||||||
n->extname = $3;
|
|
||||||
n->action = $4;
|
|
||||||
n->objtype = OBJECT_TABLE;
|
|
||||||
n->object = (Node *) $6;
|
|
||||||
$$ = (Node *)n;
|
|
||||||
}
|
|
||||||
| ALTER EXTENSION name add_drop TEXT_P SEARCH PARSER any_name
|
|
||||||
{
|
|
||||||
AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
|
|
||||||
n->extname = $3;
|
|
||||||
n->action = $4;
|
|
||||||
n->objtype = OBJECT_TSPARSER;
|
|
||||||
n->object = (Node *) $8;
|
|
||||||
$$ = (Node *)n;
|
|
||||||
}
|
|
||||||
| ALTER EXTENSION name add_drop TEXT_P SEARCH DICTIONARY any_name
|
|
||||||
{
|
|
||||||
AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
|
|
||||||
n->extname = $3;
|
|
||||||
n->action = $4;
|
|
||||||
n->objtype = OBJECT_TSDICTIONARY;
|
|
||||||
n->object = (Node *) $8;
|
|
||||||
$$ = (Node *)n;
|
|
||||||
}
|
|
||||||
| ALTER EXTENSION name add_drop TEXT_P SEARCH TEMPLATE any_name
|
|
||||||
{
|
|
||||||
AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
|
|
||||||
n->extname = $3;
|
|
||||||
n->action = $4;
|
|
||||||
n->objtype = OBJECT_TSTEMPLATE;
|
|
||||||
n->object = (Node *) $8;
|
|
||||||
$$ = (Node *)n;
|
|
||||||
}
|
|
||||||
| ALTER EXTENSION name add_drop TEXT_P SEARCH CONFIGURATION any_name
|
|
||||||
{
|
|
||||||
AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
|
|
||||||
n->extname = $3;
|
|
||||||
n->action = $4;
|
|
||||||
n->objtype = OBJECT_TSCONFIGURATION;
|
|
||||||
n->object = (Node *) $8;
|
|
||||||
$$ = (Node *)n;
|
|
||||||
}
|
|
||||||
| ALTER EXTENSION name add_drop SEQUENCE any_name
|
|
||||||
{
|
|
||||||
AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
|
|
||||||
n->extname = $3;
|
|
||||||
n->action = $4;
|
|
||||||
n->objtype = OBJECT_SEQUENCE;
|
|
||||||
n->object = (Node *) $6;
|
|
||||||
$$ = (Node *)n;
|
|
||||||
}
|
|
||||||
| ALTER EXTENSION name add_drop VIEW any_name
|
|
||||||
{
|
|
||||||
AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
|
|
||||||
n->extname = $3;
|
|
||||||
n->action = $4;
|
|
||||||
n->objtype = OBJECT_VIEW;
|
|
||||||
n->object = (Node *) $6;
|
|
||||||
$$ = (Node *)n;
|
|
||||||
}
|
|
||||||
| ALTER EXTENSION name add_drop MATERIALIZED VIEW any_name
|
|
||||||
{
|
|
||||||
AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
|
|
||||||
n->extname = $3;
|
|
||||||
n->action = $4;
|
|
||||||
n->objtype = OBJECT_MATVIEW;
|
|
||||||
n->object = (Node *) $7;
|
|
||||||
$$ = (Node *)n;
|
|
||||||
}
|
|
||||||
| ALTER EXTENSION name add_drop FOREIGN TABLE any_name
|
|
||||||
{
|
|
||||||
AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
|
|
||||||
n->extname = $3;
|
|
||||||
n->action = $4;
|
|
||||||
n->objtype = OBJECT_FOREIGN_TABLE;
|
|
||||||
n->object = (Node *) $7;
|
|
||||||
$$ = (Node *)n;
|
|
||||||
}
|
|
||||||
| ALTER EXTENSION name add_drop FOREIGN DATA_P WRAPPER name
|
|
||||||
{
|
|
||||||
AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
|
|
||||||
n->extname = $3;
|
|
||||||
n->action = $4;
|
|
||||||
n->objtype = OBJECT_FDW;
|
|
||||||
n->object = (Node *) makeString($8);
|
|
||||||
$$ = (Node *)n;
|
|
||||||
}
|
|
||||||
| ALTER EXTENSION name add_drop SERVER name
|
|
||||||
{
|
|
||||||
AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
|
|
||||||
n->extname = $3;
|
|
||||||
n->action = $4;
|
|
||||||
n->objtype = OBJECT_FOREIGN_SERVER;
|
|
||||||
n->object = (Node *) makeString($6);
|
|
||||||
$$ = (Node *)n;
|
|
||||||
}
|
|
||||||
| ALTER EXTENSION name add_drop TRANSFORM FOR Typename LANGUAGE name
|
| ALTER EXTENSION name add_drop TRANSFORM FOR Typename LANGUAGE name
|
||||||
{
|
{
|
||||||
AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
|
AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
|
||||||
|
@ -1,9 +1,7 @@
|
|||||||
CREATE ROLE regress_dump_test_role;
|
CREATE ROLE regress_dump_test_role;
|
||||||
CREATE EXTENSION test_pg_dump;
|
CREATE EXTENSION test_pg_dump;
|
||||||
ALTER EXTENSION test_pg_dump ADD DATABASE postgres; -- error
|
ALTER EXTENSION test_pg_dump ADD DATABASE postgres; -- error
|
||||||
ERROR: syntax error at or near "DATABASE"
|
ERROR: cannot add an object of this type to an extension
|
||||||
LINE 1: ALTER EXTENSION test_pg_dump ADD DATABASE postgres;
|
|
||||||
^
|
|
||||||
CREATE TABLE test_pg_dump_t1 (c1 int, junk text);
|
CREATE TABLE test_pg_dump_t1 (c1 int, junk text);
|
||||||
ALTER TABLE test_pg_dump_t1 DROP COLUMN junk; -- to exercise dropped-col cases
|
ALTER TABLE test_pg_dump_t1 DROP COLUMN junk; -- to exercise dropped-col cases
|
||||||
CREATE VIEW test_pg_dump_v1 AS SELECT * FROM test_pg_dump_t1;
|
CREATE VIEW test_pg_dump_v1 AS SELECT * FROM test_pg_dump_t1;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user