Hi,

Here's a small patch which should speedup json out functions a little bit
by removing a call to strlen for which could be a long string.
The length of the string is already known by the StringInfoData, so there's
no point in letting cstring_to_text() loop over the whole string again.

Regards

David Rowley
diff --git a/contrib/pageinspect/fsmfuncs.c b/contrib/pageinspect/fsmfuncs.c
index d0d105f..a91ff22 100644
--- a/contrib/pageinspect/fsmfuncs.c
+++ b/contrib/pageinspect/fsmfuncs.c
@@ -56,5 +56,5 @@ fsm_page_contents(PG_FUNCTION_ARGS)
        }
        appendStringInfo(&sinfo, "fp_next_slot: %d\n", fsmpage->fp_next_slot);
 
-       PG_RETURN_TEXT_P(cstring_to_text(sinfo.data));
+       PG_RETURN_TEXT_P(cstring_to_text_with_len(sinfo.data, sinfo.len));
 }

diff --git a/src/backend/utils/adt/json.c b/src/backend/utils/adt/json.c
index d8ebf4e..1486eda 100644
--- a/src/backend/utils/adt/json.c
+++ b/src/backend/utils/adt/json.c
@@ -1499,7 +1499,7 @@ array_to_json(PG_FUNCTION_ARGS)
 
        array_to_json_internal(array, result, false);
 
-       PG_RETURN_TEXT_P(cstring_to_text(result->data));
+       PG_RETURN_TEXT_P(cstring_to_text_with_len(result->data, result->len));
 }
 
 /*
@@ -1516,7 +1516,7 @@ array_to_json_pretty(PG_FUNCTION_ARGS)
 
        array_to_json_internal(array, result, use_line_feeds);
 
-       PG_RETURN_TEXT_P(cstring_to_text(result->data));
+       PG_RETURN_TEXT_P(cstring_to_text_with_len(result->data, result->len));
 }
 
 /*
@@ -1532,7 +1532,7 @@ row_to_json(PG_FUNCTION_ARGS)
 
        composite_to_json(array, result, false);
 
-       PG_RETURN_TEXT_P(cstring_to_text(result->data));
+       PG_RETURN_TEXT_P(cstring_to_text_with_len(result->data, result->len));
 }
 
 /*
@@ -1549,7 +1549,7 @@ row_to_json_pretty(PG_FUNCTION_ARGS)
 
        composite_to_json(array, result, use_line_feeds);
 
-       PG_RETURN_TEXT_P(cstring_to_text(result->data));
+       PG_RETURN_TEXT_P(cstring_to_text_with_len(result->data, result->len));
 }
 
 /*
@@ -1607,7 +1607,7 @@ to_json(PG_FUNCTION_ARGS)
 
        datum_to_json(val, false, result, tcategory, typoutput);
 
-       PG_RETURN_TEXT_P(cstring_to_text(result->data));
+       PG_RETURN_TEXT_P(cstring_to_text_with_len(result->data, result->len));
 }
 
 /*
@@ -1733,7 +1733,7 @@ json_agg_finalfn(PG_FUNCTION_ARGS)
 
        appendStringInfoChar(state, ']');
 
-       PG_RETURN_TEXT_P(cstring_to_text(state->data));
+       PG_RETURN_TEXT_P(cstring_to_text_with_len(state->data, state->len));
 }
 
 /*
-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to