@@ -354,6 +354,21 @@ jsonb_put_escaped_value(StringInfo out, JsonbValue *scalarVal)
354354 }
355355}
356356
357+ static JsonbValue *
358+ pushSingleScalarJsonbValue (JsonbParseState * * pstate , JsonbValue * jbval )
359+ {
360+ /* single root scalar */
361+ JsonbValue va ;
362+
363+ va .type = jbvArray ;
364+ va .val .array .rawScalar = true;
365+ va .val .array .nElems = 1 ;
366+
367+ pushJsonbValue (pstate , WJB_BEGIN_ARRAY , & va );
368+ pushJsonbValue (pstate , WJB_ELEM , jbval );
369+ return pushJsonbValue (pstate , WJB_END_ARRAY , NULL );
370+ }
371+
357372/*
358373 * For jsonb we always want the de-escaped value - that's what's in token
359374 */
@@ -406,16 +421,7 @@ jsonb_in_scalar(void *pstate, char *token, JsonTokenType tokentype)
406421
407422 if (_state -> parseState == NULL )
408423 {
409- /* single scalar */
410- JsonbValue va ;
411-
412- va .type = jbvArray ;
413- va .val .array .rawScalar = true;
414- va .val .array .nElems = 1 ;
415-
416- _state -> res = pushJsonbValue (& _state -> parseState , WJB_BEGIN_ARRAY , & va );
417- _state -> res = pushJsonbValue (& _state -> parseState , WJB_ELEM , & v );
418- _state -> res = pushJsonbValue (& _state -> parseState , WJB_END_ARRAY , NULL );
424+ _state -> res = pushSingleScalarJsonbValue (& _state -> parseState , & v );
419425 }
420426 else
421427 {
@@ -903,16 +909,7 @@ datum_to_jsonb(Datum val, bool is_null, JsonbInState *result,
903909 }
904910 else if (result -> parseState == NULL )
905911 {
906- /* single root scalar */
907- JsonbValue va ;
908-
909- va .type = jbvArray ;
910- va .val .array .rawScalar = true;
911- va .val .array .nElems = 1 ;
912-
913- result -> res = pushJsonbValue (& result -> parseState , WJB_BEGIN_ARRAY , & va );
914- result -> res = pushJsonbValue (& result -> parseState , WJB_ELEM , & jb );
915- result -> res = pushJsonbValue (& result -> parseState , WJB_END_ARRAY , NULL );
912+ result -> res = pushSingleScalarJsonbValue (& result -> parseState , & jb );
916913 }
917914 else
918915 {
0 commit comments