aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Eisentraut <peter@eisentraut.org>2022-12-30 10:59:25 +0100
committerPeter Eisentraut <peter@eisentraut.org>2022-12-30 11:05:09 +0100
commit33a33f0ba4d70a704e2d6bb8ee85f29fe18cead9 (patch)
tree20bd4f29da30156ec887e054e7a0f4db003b86a7
parentfaf3750657a8271e2a28c054fd83e47302ac1eb4 (diff)
downloadpostgresql-33a33f0ba4d70a704e2d6bb8ee85f29fe18cead9.tar.gz
postgresql-33a33f0ba4d70a704e2d6bb8ee85f29fe18cead9.zip
Use appendStringInfoString instead of appendBinaryStringInfo where possible
For the jsonpath output, we don't need to squeeze out every bit of performance, so instead use a more robust coding style. There are similar calls in jsonb.c, which we leave alone here since there is indeed a performance impact for bulk exports. Discussion: https://www.postgresql.org/message-id/flat/a0086cfc-ff0f-2827-20fe-52b591d2666c%40enterprisedb.com
-rw-r--r--src/backend/utils/adt/jsonpath.c42
1 files changed, 21 insertions, 21 deletions
diff --git a/src/backend/utils/adt/jsonpath.c b/src/backend/utils/adt/jsonpath.c
index bb9364843e6..f37d60f6935 100644
--- a/src/backend/utils/adt/jsonpath.c
+++ b/src/backend/utils/adt/jsonpath.c
@@ -221,7 +221,7 @@ jsonPathToCstring(StringInfo out, JsonPath *in, int estimated_len)
enlargeStringInfo(out, estimated_len);
if (!(in->header & JSONPATH_LAX))
- appendBinaryStringInfo(out, "strict ", 7);
+ appendStringInfoString(out, "strict ");
jspInit(&v, in);
printJsonPathItem(out, &v, false, true);
@@ -542,9 +542,9 @@ printJsonPathItem(StringInfo buf, JsonPathItem *v, bool inKey,
break;
case jpiBool:
if (jspGetBool(v))
- appendBinaryStringInfo(buf, "true", 4);
+ appendStringInfoString(buf, "true");
else
- appendBinaryStringInfo(buf, "false", 5);
+ appendStringInfoString(buf, "false");
break;
case jpiAnd:
case jpiOr:
@@ -585,13 +585,13 @@ printJsonPathItem(StringInfo buf, JsonPathItem *v, bool inKey,
operationPriority(elem.type) <=
operationPriority(v->type));
- appendBinaryStringInfo(buf, " like_regex ", 12);
+ appendStringInfoString(buf, " like_regex ");
escape_json(buf, v->content.like_regex.pattern);
if (v->content.like_regex.flags)
{
- appendBinaryStringInfo(buf, " flag \"", 7);
+ appendStringInfoString(buf, " flag \"");
if (v->content.like_regex.flags & JSP_REGEX_ICASE)
appendStringInfoChar(buf, 'i');
@@ -623,13 +623,13 @@ printJsonPathItem(StringInfo buf, JsonPathItem *v, bool inKey,
appendStringInfoChar(buf, ')');
break;
case jpiFilter:
- appendBinaryStringInfo(buf, "?(", 2);
+ appendStringInfoString(buf, "?(");
jspGetArg(v, &elem);
printJsonPathItem(buf, &elem, false, false);
appendStringInfoChar(buf, ')');
break;
case jpiNot:
- appendBinaryStringInfo(buf, "!(", 2);
+ appendStringInfoString(buf, "!(");
jspGetArg(v, &elem);
printJsonPathItem(buf, &elem, false, false);
appendStringInfoChar(buf, ')');
@@ -638,10 +638,10 @@ printJsonPathItem(StringInfo buf, JsonPathItem *v, bool inKey,
appendStringInfoChar(buf, '(');
jspGetArg(v, &elem);
printJsonPathItem(buf, &elem, false, false);
- appendBinaryStringInfo(buf, ") is unknown", 12);
+ appendStringInfoString(buf, ") is unknown");
break;
case jpiExists:
- appendBinaryStringInfo(buf, "exists (", 8);
+ appendStringInfoString(buf, "exists (");
jspGetArg(v, &elem);
printJsonPathItem(buf, &elem, false, false);
appendStringInfoChar(buf, ')');
@@ -655,10 +655,10 @@ printJsonPathItem(StringInfo buf, JsonPathItem *v, bool inKey,
appendStringInfoChar(buf, '$');
break;
case jpiLast:
- appendBinaryStringInfo(buf, "last", 4);
+ appendStringInfoString(buf, "last");
break;
case jpiAnyArray:
- appendBinaryStringInfo(buf, "[*]", 3);
+ appendStringInfoString(buf, "[*]");
break;
case jpiAnyKey:
if (inKey)
@@ -680,7 +680,7 @@ printJsonPathItem(StringInfo buf, JsonPathItem *v, bool inKey,
if (range)
{
- appendBinaryStringInfo(buf, " to ", 4);
+ appendStringInfoString(buf, " to ");
printJsonPathItem(buf, &to, false, false);
}
}
@@ -692,7 +692,7 @@ printJsonPathItem(StringInfo buf, JsonPathItem *v, bool inKey,
if (v->content.anybounds.first == 0 &&
v->content.anybounds.last == PG_UINT32_MAX)
- appendBinaryStringInfo(buf, "**", 2);
+ appendStringInfoString(buf, "**");
else if (v->content.anybounds.first == v->content.anybounds.last)
{
if (v->content.anybounds.first == PG_UINT32_MAX)
@@ -713,25 +713,25 @@ printJsonPathItem(StringInfo buf, JsonPathItem *v, bool inKey,
v->content.anybounds.last);
break;
case jpiType:
- appendBinaryStringInfo(buf, ".type()", 7);
+ appendStringInfoString(buf, ".type()");
break;
case jpiSize:
- appendBinaryStringInfo(buf, ".size()", 7);
+ appendStringInfoString(buf, ".size()");
break;
case jpiAbs:
- appendBinaryStringInfo(buf, ".abs()", 6);
+ appendStringInfoString(buf, ".abs()");
break;
case jpiFloor:
- appendBinaryStringInfo(buf, ".floor()", 8);
+ appendStringInfoString(buf, ".floor()");
break;
case jpiCeiling:
- appendBinaryStringInfo(buf, ".ceiling()", 10);
+ appendStringInfoString(buf, ".ceiling()");
break;
case jpiDouble:
- appendBinaryStringInfo(buf, ".double()", 9);
+ appendStringInfoString(buf, ".double()");
break;
case jpiDatetime:
- appendBinaryStringInfo(buf, ".datetime(", 10);
+ appendStringInfoString(buf, ".datetime(");
if (v->content.arg)
{
jspGetArg(v, &elem);
@@ -740,7 +740,7 @@ printJsonPathItem(StringInfo buf, JsonPathItem *v, bool inKey,
appendStringInfoChar(buf, ')');
break;
case jpiKeyValue:
- appendBinaryStringInfo(buf, ".keyvalue()", 11);
+ appendStringInfoString(buf, ".keyvalue()");
break;
default:
elog(ERROR, "unrecognized jsonpath item type: %d", v->type);