From d99d0e60eaa8334b698a070cb919202607660a65 Mon Sep 17 00:00:00 2001
From: Andrew Dunstan <andrew@dunslane.net>
Date: Thu, 25 Sep 2014 15:08:42 -0400
Subject: [PATCH] Remove ill-conceived ban on zero length json object keys.

We removed a similar ban on this in json_object recently, but the ban in
datum_to_json was left, which generate4d sprutious errors in othee json
generators, notable json_build_object.

Along the way, add an assertion that datum_to_json is not passed a null
key. All current callers comply with this rule, but the assertion will
catch any possible future misbehaviour.
---
 src/backend/utils/adt/json.c | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/src/backend/utils/adt/json.c b/src/backend/utils/adt/json.c
index 1820029fe9..d2bf640e54 100644
--- a/src/backend/utils/adt/json.c
+++ b/src/backend/utils/adt/json.c
@@ -1341,6 +1341,9 @@ datum_to_json(Datum val, bool is_null, StringInfo result,
 	bool		numeric_error;
 	JsonLexContext dummy_lex;
 
+	/* callers are expected to ensure that null keys are not passed in */
+	Assert( ! (key_scalar && is_null));
+
 	if (is_null)
 	{
 		appendStringInfoString(result, "null");
@@ -1486,10 +1489,6 @@ datum_to_json(Datum val, bool is_null, StringInfo result,
 			break;
 		default:
 			outputstr = OidOutputFunctionCall(outfuncoid, val);
-			if (key_scalar && *outputstr == '\0')
-				ereport(ERROR,
-						(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-						 errmsg("key value must not be empty")));
 			escape_json(result, outputstr);
 			pfree(outputstr);
 			break;
-- 
2.40.0