summaryrefslogtreecommitdiff
path: root/src/backend/tcop/utility.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/tcop/utility.c')
-rw-r--r--src/backend/tcop/utility.c357
1 files changed, 131 insertions, 226 deletions
diff --git a/src/backend/tcop/utility.c b/src/backend/tcop/utility.c
index 10a4438995f..9d1562af7dc 100644
--- a/src/backend/tcop/utility.c
+++ b/src/backend/tcop/utility.c
@@ -212,6 +212,7 @@ check_xact_readonly(Node *parsetree)
case T_AlterTSDictionaryStmt:
case T_AlterTSConfigurationStmt:
case T_CreateExtensionStmt:
+ case T_AlterExtensionAddStmt:
case T_CreateFdwStmt:
case T_AlterFdwStmt:
case T_DropFdwStmt:
@@ -600,6 +601,10 @@ standard_ProcessUtility(Node *parsetree,
CreateExtension((CreateExtensionStmt *) parsetree);
break;
+ case T_AlterExtensionAddStmt:
+ ExecAlterExtensionAddStmt((AlterExtensionAddStmt *) parsetree);
+ break;
+
case T_CreateFdwStmt:
CreateForeignDataWrapper((CreateFdwStmt *) parsetree);
break;
@@ -1422,6 +1427,123 @@ QueryReturnsTuples(Query *parsetree)
/*
+ * AlterObjectTypeCommandTag
+ * helper function for CreateCommandTag
+ *
+ * This covers most cases where ALTER is used with an ObjectType enum.
+ */
+static const char *
+AlterObjectTypeCommandTag(ObjectType objtype)
+{
+ const char *tag;
+
+ switch (objtype)
+ {
+ case OBJECT_AGGREGATE:
+ tag = "ALTER AGGREGATE";
+ break;
+ case OBJECT_ATTRIBUTE:
+ tag = "ALTER TYPE";
+ break;
+ case OBJECT_CAST:
+ tag = "ALTER CAST";
+ break;
+ case OBJECT_COLUMN:
+ tag = "ALTER TABLE";
+ break;
+ case OBJECT_CONSTRAINT:
+ tag = "ALTER TABLE";
+ break;
+ case OBJECT_CONVERSION:
+ tag = "ALTER CONVERSION";
+ break;
+ case OBJECT_DATABASE:
+ tag = "ALTER DATABASE";
+ break;
+ case OBJECT_DOMAIN:
+ tag = "ALTER DOMAIN";
+ break;
+ case OBJECT_EXTENSION:
+ tag = "ALTER EXTENSION";
+ break;
+ case OBJECT_FDW:
+ tag = "ALTER FOREIGN DATA WRAPPER";
+ break;
+ case OBJECT_FOREIGN_SERVER:
+ tag = "ALTER SERVER";
+ break;
+ case OBJECT_FOREIGN_TABLE:
+ tag = "ALTER FOREIGN TABLE";
+ break;
+ case OBJECT_FUNCTION:
+ tag = "ALTER FUNCTION";
+ break;
+ case OBJECT_INDEX:
+ tag = "ALTER INDEX";
+ break;
+ case OBJECT_LANGUAGE:
+ tag = "ALTER LANGUAGE";
+ break;
+ case OBJECT_LARGEOBJECT:
+ tag = "ALTER LARGE OBJECT";
+ break;
+ case OBJECT_OPCLASS:
+ tag = "ALTER OPERATOR CLASS";
+ break;
+ case OBJECT_OPERATOR:
+ tag = "ALTER OPERATOR";
+ break;
+ case OBJECT_OPFAMILY:
+ tag = "ALTER OPERATOR FAMILY";
+ break;
+ case OBJECT_ROLE:
+ tag = "ALTER ROLE";
+ break;
+ case OBJECT_RULE:
+ tag = "ALTER RULE";
+ break;
+ case OBJECT_SCHEMA:
+ tag = "ALTER SCHEMA";
+ break;
+ case OBJECT_SEQUENCE:
+ tag = "ALTER SEQUENCE";
+ break;
+ case OBJECT_TABLE:
+ tag = "ALTER TABLE";
+ break;
+ case OBJECT_TABLESPACE:
+ tag = "ALTER TABLESPACE";
+ break;
+ case OBJECT_TRIGGER:
+ tag = "ALTER TRIGGER";
+ break;
+ case OBJECT_TSCONFIGURATION:
+ tag = "ALTER TEXT SEARCH CONFIGURATION";
+ break;
+ case OBJECT_TSDICTIONARY:
+ tag = "ALTER TEXT SEARCH DICTIONARY";
+ break;
+ case OBJECT_TSPARSER:
+ tag = "ALTER TEXT SEARCH PARSER";
+ break;
+ case OBJECT_TSTEMPLATE:
+ tag = "ALTER TEXT SEARCH TEMPLATE";
+ break;
+ case OBJECT_TYPE:
+ tag = "ALTER TYPE";
+ break;
+ case OBJECT_VIEW:
+ tag = "ALTER VIEW";
+ break;
+ default:
+ tag = "???";
+ break;
+ }
+
+ return tag;
+}
+
+/*
* CreateCommandTag
* utility to get a string representation of the command operation,
* given either a raw (un-analyzed) parsetree or a planned query.
@@ -1558,6 +1680,10 @@ CreateCommandTag(Node *parsetree)
tag = "CREATE EXTENSION";
break;
+ case T_AlterExtensionAddStmt:
+ tag = "ALTER EXTENSION";
+ break;
+
case T_CreateFdwStmt:
tag = "CREATE FOREIGN DATA WRAPPER";
break;
@@ -1665,235 +1791,19 @@ CreateCommandTag(Node *parsetree)
break;
case T_RenameStmt:
- switch (((RenameStmt *) parsetree)->renameType)
- {
- case OBJECT_AGGREGATE:
- tag = "ALTER AGGREGATE";
- break;
- case OBJECT_CONVERSION:
- tag = "ALTER CONVERSION";
- break;
- case OBJECT_DATABASE:
- tag = "ALTER DATABASE";
- break;
- case OBJECT_FUNCTION:
- tag = "ALTER FUNCTION";
- break;
- case OBJECT_INDEX:
- tag = "ALTER INDEX";
- break;
- case OBJECT_LANGUAGE:
- tag = "ALTER LANGUAGE";
- break;
- case OBJECT_OPCLASS:
- tag = "ALTER OPERATOR CLASS";
- break;
- case OBJECT_OPFAMILY:
- tag = "ALTER OPERATOR FAMILY";
- break;
- case OBJECT_ROLE:
- tag = "ALTER ROLE";
- break;
- case OBJECT_SCHEMA:
- tag = "ALTER SCHEMA";
- break;
- case OBJECT_SEQUENCE:
- tag = "ALTER SEQUENCE";
- break;
- case OBJECT_COLUMN:
- {
- RenameStmt *stmt = (RenameStmt *) parsetree;
- if (stmt->relationType == OBJECT_FOREIGN_TABLE)
- tag = "ALTER FOREIGN TABLE";
- else
- tag = "ALTER TABLE";
- }
- break;
- case OBJECT_TABLE:
- tag = "ALTER TABLE";
- break;
- case OBJECT_TABLESPACE:
- tag = "ALTER TABLESPACE";
- break;
- case OBJECT_TRIGGER:
- tag = "ALTER TRIGGER";
- break;
- case OBJECT_VIEW:
- tag = "ALTER VIEW";
- break;
- case OBJECT_FOREIGN_TABLE:
- tag = "ALTER FOREIGN TABLE";
- break;
- case OBJECT_TSPARSER:
- tag = "ALTER TEXT SEARCH PARSER";
- break;
- case OBJECT_TSDICTIONARY:
- tag = "ALTER TEXT SEARCH DICTIONARY";
- break;
- case OBJECT_TSTEMPLATE:
- tag = "ALTER TEXT SEARCH TEMPLATE";
- break;
- case OBJECT_TSCONFIGURATION:
- tag = "ALTER TEXT SEARCH CONFIGURATION";
- break;
- case OBJECT_ATTRIBUTE:
- case OBJECT_TYPE:
- tag = "ALTER TYPE";
- break;
- default:
- tag = "???";
- break;
- }
+ tag = AlterObjectTypeCommandTag(((RenameStmt *) parsetree)->renameType);
break;
case T_AlterObjectSchemaStmt:
- switch (((AlterObjectSchemaStmt *) parsetree)->objectType)
- {
- case OBJECT_AGGREGATE:
- tag = "ALTER AGGREGATE";
- break;
- case OBJECT_CONVERSION:
- tag = "ALTER CONVERSION";
- break;
- case OBJECT_DOMAIN:
- tag = "ALTER DOMAIN";
- break;
- case OBJECT_EXTENSION:
- tag = "ALTER EXTENSION";
- break;
- case OBJECT_OPERATOR:
- tag = "ALTER OPERATOR";
- break;
- case OBJECT_OPCLASS:
- tag = "ALTER OPERATOR CLASS";
- break;
- case OBJECT_OPFAMILY:
- tag = "ALTER OPERATOR FAMILY";
- break;
- case OBJECT_FUNCTION:
- tag = "ALTER FUNCTION";
- break;
- case OBJECT_SEQUENCE:
- tag = "ALTER SEQUENCE";
- break;
- case OBJECT_TABLE:
- tag = "ALTER TABLE";
- break;
- case OBJECT_TYPE:
- tag = "ALTER TYPE";
- break;
- case OBJECT_TSPARSER:
- tag = "ALTER TEXT SEARCH PARSER";
- break;
- case OBJECT_TSDICTIONARY:
- tag = "ALTER TEXT SEARCH DICTIONARY";
- break;
- case OBJECT_TSTEMPLATE:
- tag = "ALTER TEXT SEARCH TEMPLATE";
- break;
- case OBJECT_TSCONFIGURATION:
- tag = "ALTER TEXT SEARCH CONFIGURATION";
- break;
- case OBJECT_VIEW:
- tag = "ALTER VIEW";
- break;
- case OBJECT_FOREIGN_TABLE:
- tag = "ALTER FOREIGN TABLE";
- break;
- default:
- tag = "???";
- break;
- }
+ tag = AlterObjectTypeCommandTag(((AlterObjectSchemaStmt *) parsetree)->objectType);
break;
case T_AlterOwnerStmt:
- switch (((AlterOwnerStmt *) parsetree)->objectType)
- {
- case OBJECT_AGGREGATE:
- tag = "ALTER AGGREGATE";
- break;
- case OBJECT_CONVERSION:
- tag = "ALTER CONVERSION";
- break;
- case OBJECT_DATABASE:
- tag = "ALTER DATABASE";
- break;
- case OBJECT_DOMAIN:
- tag = "ALTER DOMAIN";
- break;
- case OBJECT_FUNCTION:
- tag = "ALTER FUNCTION";
- break;
- case OBJECT_LANGUAGE:
- tag = "ALTER LANGUAGE";
- break;
- case OBJECT_LARGEOBJECT:
- tag = "ALTER LARGE OBJECT";
- break;
- case OBJECT_OPERATOR:
- tag = "ALTER OPERATOR";
- break;
- case OBJECT_OPCLASS:
- tag = "ALTER OPERATOR CLASS";
- break;
- case OBJECT_OPFAMILY:
- tag = "ALTER OPERATOR FAMILY";
- break;
- case OBJECT_SCHEMA:
- tag = "ALTER SCHEMA";
- break;
- case OBJECT_TABLESPACE:
- tag = "ALTER TABLESPACE";
- break;
- case OBJECT_TYPE:
- tag = "ALTER TYPE";
- break;
- case OBJECT_TSCONFIGURATION:
- tag = "ALTER TEXT SEARCH CONFIGURATION";
- break;
- case OBJECT_TSDICTIONARY:
- tag = "ALTER TEXT SEARCH DICTIONARY";
- break;
- case OBJECT_FDW:
- tag = "ALTER FOREIGN DATA WRAPPER";
- break;
- case OBJECT_FOREIGN_SERVER:
- tag = "ALTER SERVER";
- break;
- case OBJECT_FOREIGN_TABLE:
- tag = "ALTER FOREIGN TABLE";
- break;
- default:
- tag = "???";
- break;
- }
+ tag = AlterObjectTypeCommandTag(((AlterOwnerStmt *) parsetree)->objectType);
break;
case T_AlterTableStmt:
- switch (((AlterTableStmt *) parsetree)->relkind)
- {
- case OBJECT_TABLE:
- tag = "ALTER TABLE";
- break;
- case OBJECT_INDEX:
- tag = "ALTER INDEX";
- break;
- case OBJECT_SEQUENCE:
- tag = "ALTER SEQUENCE";
- break;
- case OBJECT_TYPE:
- tag = "ALTER TYPE";
- break;
- case OBJECT_VIEW:
- tag = "ALTER VIEW";
- break;
- case OBJECT_FOREIGN_TABLE:
- tag = "ALTER FOREIGN TABLE";
- break;
- default:
- tag = "???";
- break;
- }
+ tag = AlterObjectTypeCommandTag(((AlterTableStmt *) parsetree)->relkind);
break;
case T_AlterDomainStmt:
@@ -2391,18 +2301,13 @@ GetCommandLogLevel(Node *parsetree)
break;
case T_CreateTableSpaceStmt:
- lev = LOGSTMT_DDL;
- break;
-
case T_DropTableSpaceStmt:
- lev = LOGSTMT_DDL;
- break;
-
case T_AlterTableSpaceOptionsStmt:
lev = LOGSTMT_DDL;
break;
case T_CreateExtensionStmt:
+ case T_AlterExtensionAddStmt:
lev = LOGSTMT_DDL;
break;