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

Commit 7af8e69

Browse files
author
Nikita Glukhov
committed
Store intermediate non-root stats in temporary context
1 parent a1c737f commit 7af8e69

File tree

1 file changed

+9
-7
lines changed

1 file changed

+9
-7
lines changed

src/backend/utils/adt/jsonb_typanalyze.c

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -786,7 +786,7 @@ jsonAnalyzePathFetch(VacAttrStatsP stats, int rownum, bool *isnull)
786786
*/
787787
static void
788788
jsonAnalyzePathValues(JsonAnalyzeContext *ctx, JsonScalarStats *sstats,
789-
Oid typid, double freq)
789+
Oid typid, double freq, bool use_anl_context)
790790
{
791791
JsonValues *values = &sstats->values;
792792
VacAttrStats *stats = &sstats->stats;
@@ -805,7 +805,7 @@ jsonAnalyzePathValues(JsonAnalyzeContext *ctx, JsonScalarStats *sstats,
805805
stats->attrtypid = typid;
806806
stats->attrtypmod = -1;
807807
stats->attrtype = &type;
808-
stats->anl_context = ctx->stats->anl_context;
808+
stats->anl_context = use_anl_context ? ctx->stats->anl_context : CurrentMemoryContext;
809809

810810
stats->exprvals = values->buf;
811811

@@ -1064,23 +1064,25 @@ jsonAnalyzePath(JsonAnalyzeContext *ctx, JsonPathAnlStats *pstats,
10641064
jsonAnalyzeCalcPathFreq(ctx, pstats, parent_stats);
10651065

10661066
/* values combining all object types */
1067-
jsonAnalyzePathValues(ctx, &vstats->jsons, JSONBOID, pstats->freq);
1067+
jsonAnalyzePathValues(ctx, &vstats->jsons, JSONBOID, pstats->freq,
1068+
/* store root stats in analyze context */
1069+
!parent_stats);
10681070

10691071
/*
10701072
* Lengths and array lengths. We divide counts by the total number of json
10711073
* values to compute correct nullfrac (i.e. not all jsons have lengths).
10721074
*/
10731075
jsonAnalyzePathValues(ctx, &vstats->arrlens, INT4OID,
10741076
pstats->freq * vstats->arrlens.values.count /
1075-
vstats->jsons.values.count);
1077+
vstats->jsons.values.count, false);
10761078
jsonAnalyzePathValues(ctx, &vstats->objlens, INT4OID,
10771079
pstats->freq * vstats->objlens.values.count /
1078-
vstats->jsons.values.count);
1080+
vstats->jsons.values.count, false);
10791081

10801082
#ifdef JSON_ANALYZE_SCALARS
10811083
/* stats for values of string/numeric types only */
1082-
jsonAnalyzePathValues(ctx, &vstats->strings, TEXTOID, pstats->freq);
1083-
jsonAnalyzePathValues(ctx, &vstats->numerics, NUMERICOID, pstats->freq);
1084+
jsonAnalyzePathValues(ctx, &vstats->strings, TEXTOID, pstats->freq, false);
1085+
jsonAnalyzePathValues(ctx, &vstats->numerics, NUMERICOID, pstats->freq, false);
10841086
#endif
10851087

10861088
/* Build jsonb with path stats */

0 commit comments

Comments
 (0)