Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 3b764d2

Browse files
author
Nikita Glukhov
committed
Simplify jsonAnalyzeJsonValue()
1 parent 1b55c15 commit 3b764d2

File tree

1 file changed

+17
-27
lines changed

1 file changed

+17
-27
lines changed

src/backend/utils/adt/jsonb_typanalyze.c

Lines changed: 17 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -340,7 +340,6 @@ static inline void
340340
jsonAnalyzeJsonValue(JsonAnalyzeContext *ctx, JsonValueStats *vstats,
341341
JsonbValue *jv)
342342
{
343-
JsonScalarStats *sstats;
344343
JsonbValue *jbv;
345344
JsonbValue jbvtmp;
346345
Datum value;
@@ -364,69 +363,60 @@ jsonAnalyzeJsonValue(JsonAnalyzeContext *ctx, JsonValueStats *vstats,
364363
JsonbPGetDatum(JsonbValueToJsonb(jbv)),
365364
ctx->target);
366365

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 */
373367
switch (jv->type)
374368
{
375369
case jbvNull:
376-
++vstats->nnulls;
377-
return;
370+
vstats->nnulls++;
371+
break;
378372

379373
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;
383379

384380
case jbvString:
385381
#ifdef JSON_ANALYZE_SCALARS
386-
sstats = &vstats->strings;
387382
value = PointerGetDatum(
388383
cstring_to_text_with_len(jv->val.string.val,
389384
jv->val.string.len));
390-
break;
391-
#else
392-
return;
385+
JsonValuesAppend(&vstats->strings.values, value, ctx->target);
393386
#endif
387+
break;
394388

395389
case jbvNumeric:
396390
#ifdef JSON_ANALYZE_SCALARS
397-
sstats = &vstats->numerics;
398391
value = PointerGetDatum(jv->val.numeric);
399-
break;
400-
#else
401-
return;
392+
JsonValuesAppend(&vstats->numerics.values, value, ctx->target);
402393
#endif
394+
break;
403395

404396
case jbvBinary:
405397
if (JsonContainerIsObject(jv->val.binary.data))
406398
{
407399
uint32 size = JsonContainerSize(jv->val.binary.data);
400+
408401
value = DatumGetInt32(size);
409-
sstats = &vstats->lens;
410402
vstats->nobjects++;
411-
break;
403+
JsonValuesAppend(&vstats->lens.values, value, ctx->target);
412404
}
413405
else if (JsonContainerIsArray(jv->val.binary.data))
414406
{
415407
uint32 size = JsonContainerSize(jv->val.binary.data);
408+
416409
value = DatumGetInt32(size);
417-
sstats = &vstats->lens;
418410
vstats->narrays++;
419411
JsonValuesAppend(&vstats->arrlens.values, value, ctx->target);
420-
break;
412+
JsonValuesAppend(&vstats->lens.values, value, ctx->target);
421413
}
422-
return;
414+
break;
423415

424416
default:
425417
elog(ERROR, "invalid scalar json value type %d", jv->type);
426418
break;
427419
}
428-
429-
JsonValuesAppend(&sstats->values, value, ctx->target);
430420
}
431421

432422
/*

0 commit comments

Comments
 (0)