datum_to_json_internal.patch.txt
text/plain
Filename: datum_to_json_internal.patch.txt
Type: text/plain
Part: 0
diff --git a/src/backend/utils/adt/json.c b/src/backend/utils/adt/json.c
index a266f60ff3..b15f6c5e64 100644
--- a/src/backend/utils/adt/json.c
+++ b/src/backend/utils/adt/json.c
@@ -24,6 +24,7 @@
#include "utils/builtins.h"
#include "utils/date.h"
#include "utils/datetime.h"
+#include "utils/fmgroids.h"
#include "utils/json.h"
#include "utils/jsonfuncs.h"
#include "utils/lsyscache.h"
@@ -286,9 +287,15 @@ datum_to_json_internal(Datum val, bool is_null, StringInfo result,
pfree(jsontext);
break;
default:
- outputstr = OidOutputFunctionCall(outfuncoid, val);
- escape_json_cstring(result, outputstr);
- pfree(outputstr);
+ /* special case common case for text types */
+ if (outfuncoid == F_TEXTOUT)
+ escape_json_from_text(result, (text *) DatumGetPointer(val));
+ else
+ {
+ outputstr = OidOutputFunctionCall(outfuncoid, val);
+ escape_json_cstring(result, outputstr);
+ pfree(outputstr);
+ }
break;
}
}