@@ -364,6 +364,21 @@ jsonb_put_escaped_value(StringInfo out, JsonbValue *scalarVal)
364
364
}
365
365
}
366
366
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
+
367
382
/*
368
383
* For jsonb we always want the de-escaped value - that's what's in token
369
384
*/
@@ -416,16 +431,7 @@ jsonb_in_scalar(void *pstate, char *token, JsonTokenType tokentype)
416
431
417
432
if (_state -> parseState == NULL )
418
433
{
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 );
429
435
}
430
436
else
431
437
{
@@ -914,16 +920,7 @@ datum_to_jsonb(Datum val, bool is_null, JsonbInState *result,
914
920
}
915
921
else if (result -> parseState == NULL )
916
922
{
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 );
927
924
}
928
925
else
929
926
{