datum_to_json_internal.patch.txt

text/plain

Filename: datum_to_json_internal.patch.txt
Type: text/plain
Part: 0
Message: Re: Speed up JSON escape processing with SIMD plus other optimisations
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;
 	}
 }