]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Refactor AlterExtensionContentsStmt grammar
authorPeter Eisentraut <peter@eisentraut.org>
Sat, 13 Jun 2020 07:03:28 +0000 (09:03 +0200)
committerPeter Eisentraut <peter@eisentraut.org>
Sat, 13 Jun 2020 07:19:30 +0000 (09:19 +0200)
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

src/backend/commands/extension.c
src/backend/parser/gram.y
src/test/modules/test_pg_dump/expected/test_pg_dump.out

index 9b669d95b80e0b6239f8b0d914ac7a03be607724..472e69fdaf97b5fdcff9d61c604d8df064f02191 100644 (file)
@@ -3269,6 +3269,25 @@ ExecAlterExtensionContentsStmt(AlterExtensionContentsStmt *stmt,
        Relation        relation;
        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.objectId = get_extension_oid(stmt->extname, false);
        extension.objectSubId = 0;
index b0d6ad10608bc7c0c9bdfb5e14d1dc9f2430b1bb..e669d75a5af36550ac20609fd993f8af3d02e4f3 100644 (file)
@@ -4546,50 +4546,41 @@ alter_extension_opt_item:
  *****************************************************************************/
 
 AlterExtensionContentsStmt:
-                       ALTER EXTENSION name add_drop ACCESS METHOD name
+                       ALTER EXTENSION name add_drop object_type_name name
                                {
                                        AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
                                        n->extname = $3;
                                        n->action = $4;
-                                       n->objtype = OBJECT_ACCESS_METHOD;
-                                       n->object = (Node *) makeString($7);
+                                       n->objtype = $5;
+                                       n->object = (Node *) makeString($6);
                                        $$ = (Node *)n;
                                }
-                       | ALTER EXTENSION name add_drop AGGREGATE aggregate_with_argtypes
+                       | ALTER EXTENSION name add_drop object_type_any_name any_name
                                {
                                        AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
                                        n->extname = $3;
                                        n->action = $4;
-                                       n->objtype = OBJECT_AGGREGATE;
+                                       n->objtype = $5;
                                        n->object = (Node *) $6;
                                        $$ = (Node *)n;
                                }
-                       | ALTER EXTENSION name add_drop CAST '(' Typename AS Typename ')'
-                               {
-                                       AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
-                                       n->extname = $3;
-                                       n->action = $4;
-                                       n->objtype = OBJECT_CAST;
-                                       n->object = (Node *) list_make2($7, $9);
-                                       $$ = (Node *) n;
-                               }
-                       | ALTER EXTENSION name add_drop COLLATION any_name
+                       | ALTER EXTENSION name add_drop AGGREGATE aggregate_with_argtypes
                                {
                                        AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
                                        n->extname = $3;
                                        n->action = $4;
-                                       n->objtype = OBJECT_COLLATION;
+                                       n->objtype = OBJECT_AGGREGATE;
                                        n->object = (Node *) $6;
                                        $$ = (Node *)n;
                                }
-                       | ALTER EXTENSION name add_drop CONVERSION_P any_name
+                       | ALTER EXTENSION name add_drop CAST '(' Typename AS Typename ')'
                                {
                                        AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
                                        n->extname = $3;
                                        n->action = $4;
-                                       n->objtype = OBJECT_CONVERSION;
-                                       n->object = (Node *) $6;
-                                       $$ = (Node *)n;
+                                       n->objtype = OBJECT_CAST;
+                                       n->object = (Node *) list_make2($7, $9);
+                                       $$ = (Node *) n;
                                }
                        | ALTER EXTENSION name add_drop DOMAIN_P Typename
                                {
@@ -4609,15 +4600,6 @@ AlterExtensionContentsStmt:
                                        n->object = (Node *) $6;
                                        $$ = (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
                                {
                                        AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
@@ -4663,123 +4645,6 @@ AlterExtensionContentsStmt:
                                        n->object = (Node *) $6;
                                        $$ = (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
                                {
                                        AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt);
index a50eaf6125dca66a04a547ea24bb79b8d61da0b4..f14f3a6664614da802d686b81e5b3607973019b5 100644 (file)
@@ -1,9 +1,7 @@
 CREATE ROLE regress_dump_test_role;
 CREATE EXTENSION test_pg_dump;
 ALTER EXTENSION test_pg_dump ADD DATABASE postgres; -- error
-ERROR:  syntax error at or near "DATABASE"
-LINE 1: ALTER EXTENSION test_pg_dump ADD DATABASE postgres;
-                                         ^
+ERROR:  cannot add an object of this type to an extension
 CREATE TABLE test_pg_dump_t1 (c1 int, junk text);
 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;