From 1468ca2a0bc8b3769cf5cd3ca56dcb24ba16f1b0 Mon Sep 17 00:00:00 2001 From: "Chao Li (Evan)" Date: Tue, 26 Aug 2025 13:14:18 +0800 Subject: [PATCH v1] jsonb: Optimize JsonbContainerTypeName by reordering type checks The JsonbContainerTypeName() function currently checks for the less common scalar container type before checking for objects and arrays. This commit reorders the checks to prioritize the most common cases. The macros JsonContainerIsArray() and JsonContainerIsObject() are simple bit checks and are now evaluated first. This avoids the overhead of calling the JsonbExtractScalar() function in the vast majority of use cases. Author: Chao Li --- src/backend/utils/adt/jsonb.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/backend/utils/adt/jsonb.c b/src/backend/utils/adt/jsonb.c index da94d424d61..4da4f8fb45c 100644 --- a/src/backend/utils/adt/jsonb.c +++ b/src/backend/utils/adt/jsonb.c @@ -160,12 +160,12 @@ JsonbContainerTypeName(JsonbContainer *jbc) { JsonbValue scalar; - if (JsonbExtractScalar(jbc, &scalar)) - return JsonbTypeName(&scalar); - else if (JsonContainerIsArray(jbc)) - return "array"; - else if (JsonContainerIsObject(jbc)) + if (JsonContainerIsObject(jbc)) return "object"; + else if (JsonContainerIsArray(jbc) && !JsonContainerIsScalar(jbc)) + return "array"; + else if (JsonbExtractScalar(jbc, &scalar)) + return JsonbTypeName(&scalar); else { elog(ERROR, "invalid jsonb container type: 0x%08x", jbc->header); -- 2.39.5 (Apple Git-154)