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