>From fcba100ba5da8c806b0521ad6d960677219aa7c2 Mon Sep 17 00:00:00 2001 From: Abhijit Menon-Sen Date: Thu, 8 May 2014 15:35:58 +0530 Subject: [PATCH 24/27] deparse: Support ALTER EXTENSION / UPDATE TO --- src/backend/tcop/deparse_utility.c | 44 +++++++++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/src/backend/tcop/deparse_utility.c b/src/backend/tcop/deparse_utility.c index 740956f..155776d 100644 --- a/src/backend/tcop/deparse_utility.c +++ b/src/backend/tcop/deparse_utility.c @@ -1535,6 +1535,48 @@ deparse_CreateExtensionStmt(Oid objectId, Node *parsetree) return extStmt; } +static ObjTree * +deparse_AlterExtensionStmt(Oid objectId, Node *parsetree) +{ + AlterExtensionStmt *node = (AlterExtensionStmt *) parsetree; + Relation pg_extension; + HeapTuple extTup; + Form_pg_extension extForm; + ObjTree *stmt; + char *version = NULL; + ListCell *cell; + + pg_extension = heap_open(ExtensionRelationId, AccessShareLock); + extTup = get_catalog_object_by_oid(pg_extension, objectId); + if (!HeapTupleIsValid(extTup)) + elog(ERROR, "cache lookup failed for extension with OID %u", + objectId); + extForm = (Form_pg_extension) GETSTRUCT(extTup); + + stmt = new_objtree_VA("ALTER EXTENSION %{identity}I UPDATE%{to}s", 1, + "identity", ObjTypeString, + NameStr(extForm->extname)); + + foreach(cell, node->options) + { + DefElem *opt = (DefElem *) lfirst(cell); + + if (strcmp(opt->defname, "new_version") == 0) + version = defGetString(opt); + else + elog(ERROR, "unsupported option %s", opt->defname); + } + + if (version) + append_string_object(stmt, "to", psprintf(" TO '%s'", version)); + else + append_string_object(stmt, "to", ""); + + heap_close(pg_extension, AccessShareLock); + + return stmt; +} + /* * deparse_ViewStmt * deparse a ViewStmt @@ -4177,7 +4219,7 @@ deparse_simple_command(StashedCommand *cmd) break; case T_AlterExtensionStmt: - command = NULL; + command = deparse_AlterExtensionStmt(objectId, parsetree); break; case T_AlterExtensionContentsStmt: -- 1.9.1