From: Nikita Glukhov Date: Thu, 21 Feb 2019 03:08:44 +0300 Subject: [PATCH 3/5] Optimize JsonbContainer type recognition in get_jsonb_path_all() --- src/backend/utils/adt/jsonfuncs.c | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/backend/utils/adt/jsonfuncs.c b/src/backend/utils/adt/jsonfuncs.c index 162dffa..cfbd89b 100644 --- a/src/backend/utils/adt/jsonfuncs.c +++ b/src/backend/utils/adt/jsonfuncs.c @@ -1488,18 +1488,16 @@ get_jsonb_path_all(FunctionCallInfo fcinfo, bool as_text) if (jbvp->type == jbvBinary) { - JsonbIterator *it = JsonbIteratorInit((JsonbContainer *) jbvp->val.binary.data); - JsonbIteratorToken r; - - r = JsonbIteratorNext(&it, &tv, true); - container = (JsonbContainer *) jbvp->val.binary.data; - have_object = r == WJB_BEGIN_OBJECT; - have_array = r == WJB_BEGIN_ARRAY; + container = jbvp->val.binary.data; + have_object = JsonContainerIsObject(container); + have_array = JsonContainerIsArray(container); + Assert(!JsonbContainerIsScalar(container)); } else { - have_object = jbvp->type == jbvObject; - have_array = jbvp->type == jbvArray; + Assert(IsAJsonbScalar(jbvp)); + have_object = false; + have_array = false; } } -- 2.7.4 --------------55D1241744B27FF04177252F Content-Type: text/x-patch; name="0004-Extract-findJsonbKeyInObject-v01.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="0004-Extract-findJsonbKeyInObject-v01.patch"