>From 123218f95605c8f63ad96fc85aa6f96b54658df1 Mon Sep 17 00:00:00 2001
From: Alvaro Herrera <alvherre@alvh.no-ip.org>
Date: Wed, 18 Feb 2015 13:12:24 -0300
Subject: [PATCH 5/7] deparse/core: have ALTER EXTENSION ADD/DROP report
 ObjAddr of affected object

---
 src/backend/commands/extension.c | 10 +++++++++-
 src/backend/tcop/utility.c       |  3 ++-
 src/include/commands/extension.h |  3 ++-
 3 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/src/backend/commands/extension.c b/src/backend/commands/extension.c
index 8a47b12..71c5d68 100644
--- a/src/backend/commands/extension.c
+++ b/src/backend/commands/extension.c
@@ -2887,9 +2887,13 @@ ApplyExtensionUpdates(Oid extensionOid,
 
 /*
  * Execute ALTER EXTENSION ADD/DROP
+ *
+ * Return value is the address of the altered extension; objAddr, if not NULL,
+ * is set to the address of the added/dropped object.
  */
 ObjectAddress
-ExecAlterExtensionContentsStmt(AlterExtensionContentsStmt *stmt)
+ExecAlterExtensionContentsStmt(AlterExtensionContentsStmt *stmt,
+							   ObjectAddress *objAddr)
 {
 	ObjectAddress extension;
 	ObjectAddress object;
@@ -2914,6 +2918,10 @@ ExecAlterExtensionContentsStmt(AlterExtensionContentsStmt *stmt)
 	object = get_object_address(stmt->objtype, stmt->objname, stmt->objargs,
 								&relation, ShareUpdateExclusiveLock, false);
 
+	Assert(object.objectSubId == 0);
+	if (objAddr)
+		*objAddr = object;
+
 	/* Permission check: must own target object, too */
 	check_object_ownership(GetUserId(), stmt->objtype, object,
 						   stmt->objname, stmt->objargs, relation);
diff --git a/src/backend/tcop/utility.c b/src/backend/tcop/utility.c
index 7627d43..33b20b8 100644
--- a/src/backend/tcop/utility.c
+++ b/src/backend/tcop/utility.c
@@ -1191,7 +1191,8 @@ ProcessUtilitySlow(Node *parsetree,
 				break;
 
 			case T_AlterExtensionContentsStmt:
-				ExecAlterExtensionContentsStmt((AlterExtensionContentsStmt *) parsetree);
+				ExecAlterExtensionContentsStmt((AlterExtensionContentsStmt *) parsetree,
+											   NULL);
 				break;
 
 			case T_CreateFdwStmt:
diff --git a/src/include/commands/extension.h b/src/include/commands/extension.h
index e004d56..5640cac 100644
--- a/src/include/commands/extension.h
+++ b/src/include/commands/extension.h
@@ -39,7 +39,8 @@ extern ObjectAddress InsertExtensionTuple(const char *extName, Oid extOwner,
 
 extern ObjectAddress ExecAlterExtensionStmt(AlterExtensionStmt *stmt);
 
-extern ObjectAddress ExecAlterExtensionContentsStmt(AlterExtensionContentsStmt *stmt);
+extern ObjectAddress ExecAlterExtensionContentsStmt(AlterExtensionContentsStmt *stmt,
+							   ObjectAddress *objAddress);
 
 extern Oid	get_extension_oid(const char *extname, bool missing_ok);
 extern char *get_extension_name(Oid ext_oid);
-- 
2.1.4

