@@ -340,7 +340,6 @@ static inline void
340
340
jsonAnalyzeJsonValue (JsonAnalyzeContext * ctx , JsonValueStats * vstats ,
341
341
JsonbValue * jv )
342
342
{
343
- JsonScalarStats * sstats ;
344
343
JsonbValue * jbv ;
345
344
JsonbValue jbvtmp ;
346
345
Datum value ;
@@ -364,69 +363,60 @@ jsonAnalyzeJsonValue(JsonAnalyzeContext *ctx, JsonValueStats *vstats,
364
363
JsonbPGetDatum (JsonbValueToJsonb (jbv )),
365
364
ctx -> target );
366
365
367
- /*
368
- * Maybe also update the type-specific counters.
369
- *
370
- * XXX The mix of break/return statements in this block is really
371
- * confusing.
372
- */
366
+ /* also update the type-specific counters */
373
367
switch (jv -> type )
374
368
{
375
369
case jbvNull :
376
- ++ vstats -> nnulls ;
377
- return ;
370
+ vstats -> nnulls ++ ;
371
+ break ;
378
372
379
373
case jbvBool :
380
- ++ * (jv -> val .boolean ? & vstats -> booleans .ntrue
381
- : & vstats -> booleans .nfalse );
382
- return ;
374
+ if (jv -> val .boolean )
375
+ vstats -> booleans .ntrue ++ ;
376
+ else
377
+ vstats -> booleans .nfalse ++ ;
378
+ break ;
383
379
384
380
case jbvString :
385
381
#ifdef JSON_ANALYZE_SCALARS
386
- sstats = & vstats -> strings ;
387
382
value = PointerGetDatum (
388
383
cstring_to_text_with_len (jv -> val .string .val ,
389
384
jv -> val .string .len ));
390
- break ;
391
- #else
392
- return ;
385
+ JsonValuesAppend (& vstats -> strings .values , value , ctx -> target );
393
386
#endif
387
+ break ;
394
388
395
389
case jbvNumeric :
396
390
#ifdef JSON_ANALYZE_SCALARS
397
- sstats = & vstats -> numerics ;
398
391
value = PointerGetDatum (jv -> val .numeric );
399
- break ;
400
- #else
401
- return ;
392
+ JsonValuesAppend (& vstats -> numerics .values , value , ctx -> target );
402
393
#endif
394
+ break ;
403
395
404
396
case jbvBinary :
405
397
if (JsonContainerIsObject (jv -> val .binary .data ))
406
398
{
407
399
uint32 size = JsonContainerSize (jv -> val .binary .data );
400
+
408
401
value = DatumGetInt32 (size );
409
- sstats = & vstats -> lens ;
410
402
vstats -> nobjects ++ ;
411
- break ;
403
+ JsonValuesAppend ( & vstats -> lens . values , value , ctx -> target ) ;
412
404
}
413
405
else if (JsonContainerIsArray (jv -> val .binary .data ))
414
406
{
415
407
uint32 size = JsonContainerSize (jv -> val .binary .data );
408
+
416
409
value = DatumGetInt32 (size );
417
- sstats = & vstats -> lens ;
418
410
vstats -> narrays ++ ;
419
411
JsonValuesAppend (& vstats -> arrlens .values , value , ctx -> target );
420
- break ;
412
+ JsonValuesAppend ( & vstats -> lens . values , value , ctx -> target ) ;
421
413
}
422
- return ;
414
+ break ;
423
415
424
416
default :
425
417
elog (ERROR , "invalid scalar json value type %d" , jv -> type );
426
418
break ;
427
419
}
428
-
429
- JsonValuesAppend (& sstats -> values , value , ctx -> target );
430
420
}
431
421
432
422
/*
0 commit comments