Skip to content

Commit a87ec40

Browse files
author
Nikita Glukhov
committed
Optimize JsonToJsonValue() for jsonv containers
1 parent e376b6d commit a87ec40

File tree

2 files changed

+7
-5
lines changed

2 files changed

+7
-5
lines changed

src/backend/utils/adt/json_generic.c

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -557,6 +557,9 @@ jsonvContainerOps =
557557
JsonValue *
558558
JsonToJsonValue(Json *json, JsonValue *jv)
559559
{
560+
if (JsonRoot(json)->ops == &jsonvContainerOps)
561+
return (JsonValue *) JsonRoot(json)->data;
562+
560563
if (!jv)
561564
jv = palloc(sizeof(JsonValue));
562565

@@ -766,9 +769,8 @@ jsonFlatten(Json *json)
766769
}
767770
else
768771
{
769-
JsonValue val;
770-
JsonToJsonValue(json, &val);
771-
return JsonValueToJsonb(&val);
772+
JsonValue val;
773+
return JsonValueToJsonb(JsonToJsonValue(json, &val));
772774
}
773775
}
774776
#endif

src/backend/utils/adt/jsonb.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -903,11 +903,11 @@ datum_to_jsonb(Datum val, bool is_null, JsonbInState *result,
903903
{
904904
JsonbIteratorToken type;
905905

906-
JsonToJsonValue(jsonb, &jb);
907906

908907
if (result->parseState)
909908
{
910-
pushScalarJsonbValue(&result->parseState, &jb,
909+
pushScalarJsonbValue(&result->parseState,
910+
JsonToJsonValue(jsonb, &jb),
911911
false, false);
912912
return;
913913
}

0 commit comments

Comments
 (0)