@@ -334,6 +334,21 @@ jsonb_put_escaped_value(StringInfo out, JsonbValue *scalarVal)
334
334
}
335
335
}
336
336
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
+
337
352
/*
338
353
* For jsonb we always want the de-escaped value - that's what's in token
339
354
*/
@@ -384,16 +399,7 @@ jsonb_in_scalar(void *pstate, char *token, JsonTokenType tokentype)
384
399
385
400
if (_state -> parseState == NULL )
386
401
{
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 );
397
403
}
398
404
else
399
405
{
@@ -926,16 +932,7 @@ datum_to_jsonb(Datum val, bool is_null, JsonbInState *result,
926
932
}
927
933
else if (result -> parseState == NULL )
928
934
{
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 );
939
936
}
940
937
else
941
938
{