From: Abhijit Menon-Sen Date: Wed, 30 Apr 2014 12:00:07 +0000 (+0530) Subject: deparse: Support CREATE CONVERSION X-Git-Url: http://git.postgresql.org/gitweb/static/%7B%7Bpguslink%28?a=commitdiff_plain;h=28e1746e94e55544e711386b29212a7c7ff2dd7b;p=2ndquadrant_bdr.git deparse: Support CREATE CONVERSION --- diff --git a/src/backend/tcop/deparse_utility.c b/src/backend/tcop/deparse_utility.c index 07daf08dfc..3439d15f99 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_CreateConversion(Oid objectId, Node *parsetree) +{ + HeapTuple conTup; + Relation convrel; + Form_pg_conversion conForm; + ObjTree *ccStmt; + + convrel = heap_open(ConversionRelationId, AccessShareLock); + conTup = get_catalog_object_by_oid(convrel, objectId); + if (!HeapTupleIsValid(conTup)) + elog(ERROR, "cache lookup failed for conversion with OID %u", objectId); + conForm = (Form_pg_conversion) GETSTRUCT(conTup); + + ccStmt = new_objtree_VA("CREATE %{default}s CONVERSION %{identity}D FOR " + "%{source}L TO %{dest}L FROM %{function}D", 0); + + append_string_object(ccStmt, "default", + conForm->condefault ? "DEFAULT" : ""); + append_object_object(ccStmt, "identity", + new_objtree_for_qualname(conForm->connamespace, + NameStr(conForm->conname))); + append_string_object(ccStmt, "source", (char *) + pg_encoding_to_char(conForm->conforencoding)); + append_string_object(ccStmt, "dest", (char *) + pg_encoding_to_char(conForm->contoencoding)); + append_object_object(ccStmt, "function", + new_objtree_for_qualname_id(ProcedureRelationId, + conForm->conproc)); + + heap_close(convrel, AccessShareLock); + + return ccStmt; +} + static ObjTree * deparse_CreateOpFamily(Oid objectId, Node *parsetree) { @@ -4292,7 +4327,7 @@ deparse_simple_command(StashedCommand *cmd) break; case T_CreateConversionStmt: - elog(ERROR, "unimplemented deparse of %s", CreateCommandTag(parsetree)); + command = deparse_CreateConversion(objectId, parsetree); break; case T_CreateCastStmt: