@@ -364,6 +364,21 @@ jsonb_put_escaped_value(StringInfo out, JsonbValue *scalarVal)
364364 }
365365}
366366
367+ static JsonbValue *
368+ pushSingleScalarJsonbValue (JsonbParseState * * pstate , JsonbValue * jbval )
369+ {
370+ /* single root scalar */
371+ JsonbValue va ;
372+
373+ va .type = jbvArray ;
374+ va .val .array .rawScalar = true;
375+ va .val .array .nElems = 1 ;
376+
377+ pushJsonbValue (pstate , WJB_BEGIN_ARRAY , & va );
378+ pushJsonbValue (pstate , WJB_ELEM , jbval );
379+ return pushJsonbValue (pstate , WJB_END_ARRAY , NULL );
380+ }
381+
367382/*
368383 * For jsonb we always want the de-escaped value - that's what's in token
369384 */
@@ -416,16 +431,7 @@ jsonb_in_scalar(void *pstate, char *token, JsonTokenType tokentype)
416431
417432 if (_state -> parseState == NULL )
418433 {
419- /* single scalar */
420- JsonbValue va ;
421-
422- va .type = jbvArray ;
423- va .val .array .rawScalar = true;
424- va .val .array .nElems = 1 ;
425-
426- _state -> res = pushJsonbValue (& _state -> parseState , WJB_BEGIN_ARRAY , & va );
427- _state -> res = pushJsonbValue (& _state -> parseState , WJB_ELEM , & v );
428- _state -> res = pushJsonbValue (& _state -> parseState , WJB_END_ARRAY , NULL );
434+ _state -> res = pushSingleScalarJsonbValue (& _state -> parseState , & v );
429435 }
430436 else
431437 {
@@ -914,16 +920,7 @@ datum_to_jsonb(Datum val, bool is_null, JsonbInState *result,
914920 }
915921 else if (result -> parseState == NULL )
916922 {
917- /* single root scalar */
918- JsonbValue va ;
919-
920- va .type = jbvArray ;
921- va .val .array .rawScalar = true;
922- va .val .array .nElems = 1 ;
923-
924- result -> res = pushJsonbValue (& result -> parseState , WJB_BEGIN_ARRAY , & va );
925- result -> res = pushJsonbValue (& result -> parseState , WJB_ELEM , & jb );
926- result -> res = pushJsonbValue (& result -> parseState , WJB_END_ARRAY , NULL );
923+ result -> res = pushSingleScalarJsonbValue (& result -> parseState , & jb );
927924 }
928925 else
929926 {
0 commit comments