From f25904bd6e05292652fb6d04e8497f62e4408e98 Mon Sep 17 00:00:00 2001
From: Alvaro Herrera <alvherre@alvh.no-ip.org>
Date: Mon, 9 Feb 2015 20:41:51 -0300
Subject: [PATCH 32/44] deparse: support ALTER EXTENSION ADD/DROP

---
 src/backend/tcop/deparse_utility.c | 27 ++++++++++++++++++++++++++-
 1 file changed, 26 insertions(+), 1 deletion(-)

diff --git a/src/backend/tcop/deparse_utility.c b/src/backend/tcop/deparse_utility.c
index 17e6c08..75e3c31 100644
--- a/src/backend/tcop/deparse_utility.c
+++ b/src/backend/tcop/deparse_utility.c
@@ -1667,6 +1667,30 @@ deparse_AlterDomainStmt(Oid objectId, Node *parsetree, Oid secondaryOid)
 }
 
 static ObjTree *
+deparse_AlterExtensionContentsStmt(Oid objectId, Node *parsetree, Oid secondaryOid)
+{
+	AlterExtensionContentsStmt *node = (AlterExtensionContentsStmt *) parsetree;
+	ObjTree	   *stmt;
+	char	   *fmt;
+	ObjectAddress addr;
+
+	Assert(node->action == +1 || node->action == -1);
+
+	fmt = psprintf("ALTER EXTENSION %%{extidentity}I %s %s %%{objidentity}s",
+				   node->action == +1 ? "ADD" : "DROP",
+				   stringify_objtype(node->objtype));
+	addr.classId = get_objtype_catalog_oid(node->objtype);
+	addr.objectId = secondaryOid;
+	addr.objectSubId = 0;
+
+	stmt = new_objtree_VA(fmt, 2, "extidentity", ObjTypeString, node->extname,
+						  "objidentity", ObjTypeString,
+						  getObjectIdentity(&addr));
+
+	return stmt;
+}
+
+static ObjTree *
 deparse_AlterExtensionStmt(Oid objectId, Node *parsetree)
 {
 	AlterExtensionStmt *node = (AlterExtensionStmt *) parsetree;
@@ -5118,7 +5142,8 @@ deparse_simple_command(StashedCommand *cmd)
 			break;
 
 		case T_AlterExtensionContentsStmt:
-			elog(ERROR, "unimplemented deparse of %s", CreateCommandTag(parsetree));
+			command = deparse_AlterExtensionContentsStmt(objectId, parsetree,
+														 cmd->d.simple.secondaryOid);
 			break;
 
 		case T_CreateFdwStmt:
-- 
2.1.4

