diff options
Diffstat (limited to 'contrib')
-rw-r--r-- | contrib/hstore/hstore_io.c | 41 |
1 files changed, 17 insertions, 24 deletions
diff --git a/contrib/hstore/hstore_io.c b/contrib/hstore/hstore_io.c index 999ddad76d9..2125436e40c 100644 --- a/contrib/hstore/hstore_io.c +++ b/contrib/hstore/hstore_io.c @@ -1343,23 +1343,20 @@ hstore_to_json_loose(PG_FUNCTION_ARGS) int count = HS_COUNT(in); char *base = STRPTR(in); HEntry *entries = ARRPTR(in); - StringInfoData tmp, - dst; + StringInfoData dst; if (count == 0) PG_RETURN_TEXT_P(cstring_to_text_with_len("{}", 2)); - initStringInfo(&tmp); initStringInfo(&dst); appendStringInfoChar(&dst, '{'); for (i = 0; i < count; i++) { - resetStringInfo(&tmp); - appendBinaryStringInfo(&tmp, HSTORE_KEY(entries, base, i), - HSTORE_KEYLEN(entries, i)); - escape_json(&dst, tmp.data); + escape_json_with_len(&dst, + HSTORE_KEY(entries, base, i), + HSTORE_KEYLEN(entries, i)); appendStringInfoString(&dst, ": "); if (HSTORE_VALISNULL(entries, i)) appendStringInfoString(&dst, "null"); @@ -1372,13 +1369,13 @@ hstore_to_json_loose(PG_FUNCTION_ARGS) appendStringInfoString(&dst, "false"); else { - resetStringInfo(&tmp); - appendBinaryStringInfo(&tmp, HSTORE_VAL(entries, base, i), - HSTORE_VALLEN(entries, i)); - if (IsValidJsonNumber(tmp.data, tmp.len)) - appendBinaryStringInfo(&dst, tmp.data, tmp.len); + char *str = HSTORE_VAL(entries, base, i); + int len = HSTORE_VALLEN(entries, i); + + if (IsValidJsonNumber(str, len)) + appendBinaryStringInfo(&dst, str, len); else - escape_json(&dst, tmp.data); + escape_json_with_len(&dst, str, len); } if (i + 1 != count) @@ -1398,32 +1395,28 @@ hstore_to_json(PG_FUNCTION_ARGS) int count = HS_COUNT(in); char *base = STRPTR(in); HEntry *entries = ARRPTR(in); - StringInfoData tmp, - dst; + StringInfoData dst; if (count == 0) PG_RETURN_TEXT_P(cstring_to_text_with_len("{}", 2)); - initStringInfo(&tmp); initStringInfo(&dst); appendStringInfoChar(&dst, '{'); for (i = 0; i < count; i++) { - resetStringInfo(&tmp); - appendBinaryStringInfo(&tmp, HSTORE_KEY(entries, base, i), - HSTORE_KEYLEN(entries, i)); - escape_json(&dst, tmp.data); + escape_json_with_len(&dst, + HSTORE_KEY(entries, base, i), + HSTORE_KEYLEN(entries, i)); appendStringInfoString(&dst, ": "); if (HSTORE_VALISNULL(entries, i)) appendStringInfoString(&dst, "null"); else { - resetStringInfo(&tmp); - appendBinaryStringInfo(&tmp, HSTORE_VAL(entries, base, i), - HSTORE_VALLEN(entries, i)); - escape_json(&dst, tmp.data); + escape_json_with_len(&dst, + HSTORE_VAL(entries, base, i), + HSTORE_VALLEN(entries, i)); } if (i + 1 != count) |