Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 8f5b596

Browse files
committed
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
1 parent a332b36 commit 8f5b596

File tree

3 files changed

+31
-149
lines changed

3 files changed

+31
-149
lines changed

src/backend/commands/extension.c

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3269,6 +3269,25 @@ ExecAlterExtensionContentsStmt(AlterExtensionContentsStmt *stmt,
32693269
Relation relation;
32703270
Oid oldExtension;
32713271

3272+
switch (stmt->objtype)
3273+
{
3274+
case OBJECT_DATABASE:
3275+
case OBJECT_EXTENSION:
3276+
case OBJECT_INDEX:
3277+
case OBJECT_PUBLICATION:
3278+
case OBJECT_ROLE:
3279+
case OBJECT_STATISTIC_EXT:
3280+
case OBJECT_SUBSCRIPTION:
3281+
case OBJECT_TABLESPACE:
3282+
ereport(ERROR,
3283+
(errcode(ERRCODE_INVALID_OBJECT_DEFINITION),
3284+
errmsg("cannot add an object of this type to an extension")));
3285+
break;
3286+
default:
3287+
/* OK */
3288+
break;
3289+
}
3290+
32723291
extension.classId = ExtensionRelationId;
32733292
extension.objectId = get_extension_oid(stmt->extname, false);
32743293
extension.objectSubId = 0;

src/backend/parser/gram.y

Lines changed: 11 additions & 146 deletions
Original file line numberDiff line numberDiff line change
@@ -4546,50 +4546,41 @@ alter_extension_opt_item:
45464546
*****************************************************************************/
45474547

45484548
AlterExtensionContentsStmt:
4549-
ALTER EXTENSION name add_drop ACCESS METHOD name
4549+
ALTER EXTENSION name add_drop object_type_name name
45504550
{
45514551
AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
45524552
n->extname = $3;
45534553
n->action = $4;
4554-
n->objtype = OBJECT_ACCESS_METHOD;
4555-
n->object = (Node *) makeString($7);
4554+
n->objtype = $5;
4555+
n->object = (Node *) makeString($6);
45564556
$$ = (Node *)n;
45574557
}
4558-
| ALTER EXTENSION name add_drop AGGREGATE aggregate_with_argtypes
4558+
| ALTER EXTENSION name add_drop object_type_any_name any_name
45594559
{
45604560
AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
45614561
n->extname = $3;
45624562
n->action = $4;
4563-
n->objtype = OBJECT_AGGREGATE;
4563+
n->objtype = $5;
45644564
n->object = (Node *) $6;
45654565
$$ = (Node *)n;
45664566
}
4567-
| ALTER EXTENSION name add_drop CAST '(' Typename AS Typename ')'
4568-
{
4569-
AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
4570-
n->extname = $3;
4571-
n->action = $4;
4572-
n->objtype = OBJECT_CAST;
4573-
n->object = (Node *) list_make2($7, $9);
4574-
$$ = (Node *) n;
4575-
}
4576-
| ALTER EXTENSION name add_drop COLLATION any_name
4567+
| ALTER EXTENSION name add_drop AGGREGATE aggregate_with_argtypes
45774568
{
45784569
AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
45794570
n->extname = $3;
45804571
n->action = $4;
4581-
n->objtype = OBJECT_COLLATION;
4572+
n->objtype = OBJECT_AGGREGATE;
45824573
n->object = (Node *) $6;
45834574
$$ = (Node *)n;
45844575
}
4585-
| ALTER EXTENSION name add_drop CONVERSION_P any_name
4576+
| ALTER EXTENSION name add_drop CAST '(' Typename AS Typename ')'
45864577
{
45874578
AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
45884579
n->extname = $3;
45894580
n->action = $4;
4590-
n->objtype = OBJECT_CONVERSION;
4591-
n->object = (Node *) $6;
4592-
$$ = (Node *)n;
4581+
n->objtype = OBJECT_CAST;
4582+
n->object = (Node *) list_make2($7, $9);
4583+
$$ = (Node *) n;
45934584
}
45944585
| ALTER EXTENSION name add_drop DOMAIN_P Typename
45954586
{
@@ -4609,15 +4600,6 @@ AlterExtensionContentsStmt:
46094600
n->object = (Node *) $6;
46104601
$$ = (Node *)n;
46114602
}
4612-
| ALTER EXTENSION name add_drop opt_procedural LANGUAGE name
4613-
{
4614-
AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
4615-
n->extname = $3;
4616-
n->action = $4;
4617-
n->objtype = OBJECT_LANGUAGE;
4618-
n->object = (Node *) makeString($7);
4619-
$$ = (Node *)n;
4620-
}
46214603
| ALTER EXTENSION name add_drop OPERATOR operator_with_argtypes
46224604
{
46234605
AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
@@ -4663,123 +4645,6 @@ AlterExtensionContentsStmt:
46634645
n->object = (Node *) $6;
46644646
$$ = (Node *)n;
46654647
}
4666-
| ALTER EXTENSION name add_drop SCHEMA name
4667-
{
4668-
AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
4669-
n->extname = $3;
4670-
n->action = $4;
4671-
n->objtype = OBJECT_SCHEMA;
4672-
n->object = (Node *) makeString($6);
4673-
$$ = (Node *)n;
4674-
}
4675-
| ALTER EXTENSION name add_drop EVENT TRIGGER name
4676-
{
4677-
AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
4678-
n->extname = $3;
4679-
n->action = $4;
4680-
n->objtype = OBJECT_EVENT_TRIGGER;
4681-
n->object = (Node *) makeString($7);
4682-
$$ = (Node *)n;
4683-
}
4684-
| ALTER EXTENSION name add_drop TABLE any_name
4685-
{
4686-
AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
4687-
n->extname = $3;
4688-
n->action = $4;
4689-
n->objtype = OBJECT_TABLE;
4690-
n->object = (Node *) $6;
4691-
$$ = (Node *)n;
4692-
}
4693-
| ALTER EXTENSION name add_drop TEXT_P SEARCH PARSER any_name
4694-
{
4695-
AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
4696-
n->extname = $3;
4697-
n->action = $4;
4698-
n->objtype = OBJECT_TSPARSER;
4699-
n->object = (Node *) $8;
4700-
$$ = (Node *)n;
4701-
}
4702-
| ALTER EXTENSION name add_drop TEXT_P SEARCH DICTIONARY any_name
4703-
{
4704-
AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
4705-
n->extname = $3;
4706-
n->action = $4;
4707-
n->objtype = OBJECT_TSDICTIONARY;
4708-
n->object = (Node *) $8;
4709-
$$ = (Node *)n;
4710-
}
4711-
| ALTER EXTENSION name add_drop TEXT_P SEARCH TEMPLATE any_name
4712-
{
4713-
AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
4714-
n->extname = $3;
4715-
n->action = $4;
4716-
n->objtype = OBJECT_TSTEMPLATE;
4717-
n->object = (Node *) $8;
4718-
$$ = (Node *)n;
4719-
}
4720-
| ALTER EXTENSION name add_drop TEXT_P SEARCH CONFIGURATION any_name
4721-
{
4722-
AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
4723-
n->extname = $3;
4724-
n->action = $4;
4725-
n->objtype = OBJECT_TSCONFIGURATION;
4726-
n->object = (Node *) $8;
4727-
$$ = (Node *)n;
4728-
}
4729-
| ALTER EXTENSION name add_drop SEQUENCE any_name
4730-
{
4731-
AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
4732-
n->extname = $3;
4733-
n->action = $4;
4734-
n->objtype = OBJECT_SEQUENCE;
4735-
n->object = (Node *) $6;
4736-
$$ = (Node *)n;
4737-
}
4738-
| ALTER EXTENSION name add_drop VIEW any_name
4739-
{
4740-
AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
4741-
n->extname = $3;
4742-
n->action = $4;
4743-
n->objtype = OBJECT_VIEW;
4744-
n->object = (Node *) $6;
4745-
$$ = (Node *)n;
4746-
}
4747-
| ALTER EXTENSION name add_drop MATERIALIZED VIEW any_name
4748-
{
4749-
AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
4750-
n->extname = $3;
4751-
n->action = $4;
4752-
n->objtype = OBJECT_MATVIEW;
4753-
n->object = (Node *) $7;
4754-
$$ = (Node *)n;
4755-
}
4756-
| ALTER EXTENSION name add_drop FOREIGN TABLE any_name
4757-
{
4758-
AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
4759-
n->extname = $3;
4760-
n->action = $4;
4761-
n->objtype = OBJECT_FOREIGN_TABLE;
4762-
n->object = (Node *) $7;
4763-
$$ = (Node *)n;
4764-
}
4765-
| ALTER EXTENSION name add_drop FOREIGN DATA_P WRAPPER name
4766-
{
4767-
AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
4768-
n->extname = $3;
4769-
n->action = $4;
4770-
n->objtype = OBJECT_FDW;
4771-
n->object = (Node *) makeString($8);
4772-
$$ = (Node *)n;
4773-
}
4774-
| ALTER EXTENSION name add_drop SERVER name
4775-
{
4776-
AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
4777-
n->extname = $3;
4778-
n->action = $4;
4779-
n->objtype = OBJECT_FOREIGN_SERVER;
4780-
n->object = (Node *) makeString($6);
4781-
$$ = (Node *)n;
4782-
}
47834648
| ALTER EXTENSION name add_drop TRANSFORM FOR Typename LANGUAGE name
47844649
{
47854650
AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);

src/test/modules/test_pg_dump/expected/test_pg_dump.out

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
CREATE ROLE regress_dump_test_role;
22
CREATE EXTENSION test_pg_dump;
33
ALTER EXTENSION test_pg_dump ADD DATABASE postgres; -- error
4-
ERROR: syntax error at or near "DATABASE"
5-
LINE 1: ALTER EXTENSION test_pg_dump ADD DATABASE postgres;
6-
^
4+
ERROR: cannot add an object of this type to an extension
75
CREATE TABLE test_pg_dump_t1 (c1 int, junk text);
86
ALTER TABLE test_pg_dump_t1 DROP COLUMN junk; -- to exercise dropped-col cases
97
CREATE VIEW test_pg_dump_v1 AS SELECT * FROM test_pg_dump_t1;

0 commit comments

Comments
 (0)