v1-0001-minor-change-in-datum_to_jsonb_internal.no-cfbot
application/octet-stream
Filename: v1-0001-minor-change-in-datum_to_jsonb_internal.no-cfbot
Type: application/octet-stream
Part: 0
Message:
Re: Making jsonb_agg() faster
From a0f4b18303ca76490f028a937f8feeda4cc57737 Mon Sep 17 00:00:00 2001
From: jian he <jian.universality@gmail.com>
Date: Fri, 15 Aug 2025 23:47:20 +0800
Subject: [PATCH v1 1/1] minor change in datum_to_jsonb_internal
based on v1-0003-Micro-optimize-datatype-conversions-in-datum_to_j.patch
---
src/backend/utils/adt/jsonb.c | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/src/backend/utils/adt/jsonb.c b/src/backend/utils/adt/jsonb.c
index cd911a98b98..b00a849d65b 100644
--- a/src/backend/utils/adt/jsonb.c
+++ b/src/backend/utils/adt/jsonb.c
@@ -641,7 +641,7 @@ datum_to_jsonb_internal(Datum val, bool is_null, JsonbInState *result,
bool key_scalar)
{
char *outputstr;
- Numeric numeric_val;
+ Numeric numeric_val = NULL;
bool numeric_to_string;
JsonbValue jb;
bool scalar_jsonb = false;
@@ -669,6 +669,9 @@ datum_to_jsonb_internal(Datum val, bool is_null, JsonbInState *result,
{
switch (tcategory)
{
+ case JSONTYPE_NULL:
+ Assert(false);
+ break;
case JSONTYPE_ARRAY:
array_to_jsonb_internal(val, result);
break;
@@ -694,7 +697,6 @@ datum_to_jsonb_internal(Datum val, bool is_null, JsonbInState *result,
{
/* always stringify keys */
numeric_to_string = true;
- numeric_val = NULL; /* pacify stupider compilers */
}
else
{
@@ -837,7 +839,7 @@ datum_to_jsonb_internal(Datum val, bool is_null, JsonbInState *result,
}
}
break;
- default:
+ case JSONTYPE_OTHER:
/* special-case text types to save useless palloc/memcpy ops */
if (outfuncoid == F_TEXTOUT ||
outfuncoid == F_VARCHAROUT ||
@@ -857,6 +859,9 @@ datum_to_jsonb_internal(Datum val, bool is_null, JsonbInState *result,
jb.type = jbvString;
(void) checkStringLen(jb.val.string.len, NULL);
break;
+ default :
+ elog(ERROR, "unknown JsonTypeCategory %d", (int) tcategory);
+ break;
}
}
--
2.34.1