PostGIS  2.5.0dev-r@@SVN_REVISION@@

◆ nd_stats_to_json()

static char* nd_stats_to_json ( const ND_STATS nd_stats)
static

Convert an ND_STATS to a JSON representation for external use.

Definition at line 472 of file gserialized_estimate.c.

References ND_STATS_T::cells_covered, ND_STATS_T::extent, ND_STATS_T::histogram_cells, ND_STATS_T::histogram_features, nd_box_to_json(), ND_STATS_T::ndims, ND_STATS_T::not_null_features, ND_STATS_T::sample_features, ND_STATS_T::size, stringbuffer_append(), stringbuffer_aprintf(), stringbuffer_create(), stringbuffer_destroy(), stringbuffer_getstringcopy(), and ND_STATS_T::table_features.

Referenced by _postgis_gserialized_stats(), compute_gserialized_stats_mode(), estimate_join_selectivity(), and gserialized_gist_sel().

473 {
474  char *json_extent, *str;
475  int d;
477  int ndims = (int)roundf(nd_stats->ndims);
478 
479  stringbuffer_append(sb, "{");
480  stringbuffer_aprintf(sb, "\"ndims\":%d,", ndims);
481 
482  /* Size */
483  stringbuffer_append(sb, "\"size\":[");
484  for ( d = 0; d < ndims; d++ )
485  {
486  if ( d ) stringbuffer_append(sb, ",");
487  stringbuffer_aprintf(sb, "%d", (int)roundf(nd_stats->size[d]));
488  }
489  stringbuffer_append(sb, "],");
490 
491  /* Extent */
492  json_extent = nd_box_to_json(&(nd_stats->extent), ndims);
493  stringbuffer_aprintf(sb, "\"extent\":%s,", json_extent);
494  pfree(json_extent);
495 
496  stringbuffer_aprintf(sb, "\"table_features\":%d,", (int)roundf(nd_stats->table_features));
497  stringbuffer_aprintf(sb, "\"sample_features\":%d,", (int)roundf(nd_stats->sample_features));
498  stringbuffer_aprintf(sb, "\"not_null_features\":%d,", (int)roundf(nd_stats->not_null_features));
499  stringbuffer_aprintf(sb, "\"histogram_features\":%d,", (int)roundf(nd_stats->histogram_features));
500  stringbuffer_aprintf(sb, "\"histogram_cells\":%d,", (int)roundf(nd_stats->histogram_cells));
501  stringbuffer_aprintf(sb, "\"cells_covered\":%d", (int)roundf(nd_stats->cells_covered));
502  stringbuffer_append(sb, "}");
503 
504  str = stringbuffer_getstringcopy(sb);
506  return str;
507 }
stringbuffer_t * stringbuffer_create(void)
Allocate a new stringbuffer_t.
Definition: stringbuffer.c:35
char * stringbuffer_getstringcopy(stringbuffer_t *s)
Returns a newly allocated string large enough to contain the current state of the string...
Definition: stringbuffer.c:160
int stringbuffer_aprintf(stringbuffer_t *s, const char *fmt,...)
Appends a formatted string to the current string buffer, using the format and argument list provided...
Definition: stringbuffer.c:253
float4 size[ND_DIMS]
static char * nd_box_to_json(const ND_BOX *nd_box, int ndims)
Convert an ND_BOX to a JSON string for printing.
void stringbuffer_append(stringbuffer_t *s, const char *a)
Append the specified string to the stringbuffer_t.
Definition: stringbuffer.c:134
void stringbuffer_destroy(stringbuffer_t *s)
Free the stringbuffer_t and all memory managed within it.
Definition: stringbuffer.c:78
Here is the call graph for this function:
Here is the caller graph for this function: