From: Alvaro Herrera Date: Thu, 25 Sep 2014 17:34:29 +0000 (-0300) Subject: deparse: Support CREATE OPERATOR FAMILY X-Git-Url: http://git.postgresql.org/gitweb/static/gitweb.js?a=commitdiff_plain;h=04800abc96eec529755f1158614beabb5d700ce1;p=2ndquadrant_bdr.git deparse: Support CREATE OPERATOR FAMILY --- diff --git a/src/backend/tcop/deparse_utility.c b/src/backend/tcop/deparse_utility.c index a4f1d71486..07daf08dfc 100644 --- a/src/backend/tcop/deparse_utility.c +++ b/src/backend/tcop/deparse_utility.c @@ -3534,6 +3534,41 @@ deparse_AlterEnumStmt(Oid objectId, Node *parsetree) return alterEnum; } +static ObjTree * +deparse_CreateOpFamily(Oid objectId, Node *parsetree) +{ + HeapTuple opfTup; + HeapTuple amTup; + Form_pg_opfamily opfForm; + Form_pg_am amForm; + ObjTree *copfStmt; + ObjTree *tmp; + + opfTup = SearchSysCache1(OPFAMILYOID, ObjectIdGetDatum(objectId)); + if (!HeapTupleIsValid(opfTup)) + elog(ERROR, "cache lookup failed for operator family with OID %u", objectId); + opfForm = (Form_pg_opfamily) GETSTRUCT(opfTup); + + amTup = SearchSysCache1(AMOID, ObjectIdGetDatum(opfForm->opfmethod)); + if (!HeapTupleIsValid(amTup)) + elog(ERROR, "cache lookup failed for access method %u", + opfForm->opfmethod); + amForm = (Form_pg_am) GETSTRUCT(amTup); + + copfStmt = new_objtree_VA("CREATE OPERATOR FAMILY %{identity}D USING %{amname}I", + 0); + + tmp = new_objtree_for_qualname(opfForm->opfnamespace, + NameStr(opfForm->opfname)); + append_object_object(copfStmt, "identity", tmp); + append_string_object(copfStmt, "amname", NameStr(amForm->amname)); + + ReleaseSysCache(amTup); + ReleaseSysCache(opfTup); + + return copfStmt; +} + static ObjTree * deparse_AlterTableStmt(StashedCommand *cmd) { @@ -4269,7 +4304,7 @@ deparse_simple_command(StashedCommand *cmd) break; case T_CreateOpFamilyStmt: - elog(ERROR, "unimplemented deparse of %s", CreateCommandTag(parsetree)); + command = deparse_CreateOpFamily(objectId, parsetree); break; case T_AlterOpFamilyStmt: