@@ -334,6 +334,21 @@ jsonb_put_escaped_value(StringInfo out, JsonbValue *scalarVal)
334334}
335335}
336336
337+ static JsonbValue *
338+ pushSingleScalarJsonbValue (JsonbParseState * * pstate ,JsonbValue * jbval )
339+ {
340+ /* single root scalar */
341+ JsonbValue va ;
342+
343+ va .type = jbvArray ;
344+ va .val .array .rawScalar = true;
345+ va .val .array .nElems = 1 ;
346+
347+ pushJsonbValue (pstate ,WJB_BEGIN_ARRAY ,& va );
348+ pushJsonbValue (pstate ,WJB_ELEM ,jbval );
349+ return pushJsonbValue (pstate ,WJB_END_ARRAY ,NULL );
350+ }
351+
337352/*
338353 * For jsonb we always want the de-escaped value - that's what's in token
339354 */
@@ -384,16 +399,7 @@ jsonb_in_scalar(void *pstate, char *token, JsonTokenType tokentype)
384399
385400if (_state -> parseState == NULL )
386401{
387- /* single scalar */
388- JsonbValue va ;
389-
390- va .type = jbvArray ;
391- va .val .array .rawScalar = true;
392- va .val .array .nElems = 1 ;
393-
394- _state -> res = pushJsonbValue (& _state -> parseState ,WJB_BEGIN_ARRAY ,& va );
395- _state -> res = pushJsonbValue (& _state -> parseState ,WJB_ELEM ,& v );
396- _state -> res = pushJsonbValue (& _state -> parseState ,WJB_END_ARRAY ,NULL );
402+ _state -> res = pushSingleScalarJsonbValue (& _state -> parseState ,& v );
397403}
398404else
399405{
@@ -926,16 +932,7 @@ datum_to_jsonb(Datum val, bool is_null, JsonbInState *result,
926932}
927933else if (result -> parseState == NULL )
928934{
929- /* single root scalar */
930- JsonbValue va ;
931-
932- va .type = jbvArray ;
933- va .val .array .rawScalar = true;
934- va .val .array .nElems = 1 ;
935-
936- result -> res = pushJsonbValue (& result -> parseState ,WJB_BEGIN_ARRAY ,& va );
937- result -> res = pushJsonbValue (& result -> parseState ,WJB_ELEM ,& jb );
938- result -> res = pushJsonbValue (& result -> parseState ,WJB_END_ARRAY ,NULL );
935+ result -> res = pushSingleScalarJsonbValue (& result -> parseState ,& jb );
939936}
940937else
941938{