|
PostgreSQL Source Code git master
|
#include "postgres.h"#include <math.h>#include "catalog/pg_statistic_ext.h"#include "catalog/pg_statistic_ext_data.h"#include "statistics/extended_stats_internal.h"#include "utils/syscache.h"#include "utils/typcache.h"#include "varatt.h"
Go to the source code of this file.
Data Structures | |
| struct | CombinationGenerator |
Macros | |
| #define | SizeOfHeader (3 * sizeof(uint32)) |
| #define | SizeOfItem(natts) (sizeof(double) + sizeof(int) + (natts) * sizeof(AttrNumber)) |
| #define | MinSizeOfItem SizeOfItem(2) |
| #define | MinSizeOfItems(nitems) (SizeOfHeader + (nitems) * MinSizeOfItem) |
Typedefs | |
| typedef struct CombinationGenerator | CombinationGenerator |
Functions | |
| static double | ndistinct_for_combination (double totalrows, StatsBuildData *data, int k, int *combination) |
| static double | estimate_ndistinct (double totalrows, int numrows, int d, int f1) |
| static int | n_choose_k (int n, int k) |
| static int | num_combinations (int n) |
| static CombinationGenerator * | generator_init (int n, int k) |
| static void | generator_free (CombinationGenerator *state) |
| static int * | generator_next (CombinationGenerator *state) |
| static void | generate_combinations (CombinationGenerator *state) |
| MVNDistinct * | statext_ndistinct_build (double totalrows, StatsBuildData *data) |
| MVNDistinct * | statext_ndistinct_load (Oid mvoid, bool inh) |
| bytea * | statext_ndistinct_serialize (MVNDistinct *ndistinct) |
| MVNDistinct * | statext_ndistinct_deserialize (bytea *data) |
| static void | generate_combinations_recurse (CombinationGenerator *state, int index, int start, int *current) |
| #define MinSizeOfItem SizeOfItem(2) |
Definition at line 49 of file mvdistinct.c.
| #define MinSizeOfItems | ( | nitems | ) | (SizeOfHeader + (nitems) * MinSizeOfItem) |
Definition at line 52 of file mvdistinct.c.
| #define SizeOfHeader (3 * sizeof(uint32)) |
Definition at line 42 of file mvdistinct.c.
| #define SizeOfItem | ( | natts | ) | (sizeof(double) + sizeof(int) + (natts) * sizeof(AttrNumber)) |
Definition at line 45 of file mvdistinct.c.
| typedef struct CombinationGenerator CombinationGenerator |
|
static |
Definition at line 436 of file mvdistinct.c.
References f1.
Referenced by ndistinct_for_combination().
|
static |
Definition at line 607 of file mvdistinct.c.
References generate_combinations_recurse(), palloc0(), and pfree().
Referenced by generator_init().
|
static |
Definition at line 572 of file mvdistinct.c.
References generate_combinations_recurse(), i, and start.
Referenced by generate_combinations(), and generate_combinations_recurse().
|
static |
Definition at line 557 of file mvdistinct.c.
References pfree().
Referenced by statext_ndistinct_build().
|
static |
Definition at line 504 of file mvdistinct.c.
References Assert(), generate_combinations(), n_choose_k(), and palloc().
Referenced by statext_ndistinct_build().
|
static |
Definition at line 542 of file mvdistinct.c.
Referenced by statext_ndistinct_build().
|
static |
Definition at line 465 of file mvdistinct.c.
Referenced by generator_init().
|
static |
Definition at line 340 of file mvdistinct.c.
References VacAttrStats::attrcollid, VacAttrStats::attrtypid, collid, data, elog, ERROR, estimate_ndistinct(), f1, i, InvalidOid, items, j, lookup_type_cache(), multi_sort_add_dimension(), multi_sort_compare(), multi_sort_init(), palloc(), palloc0(), qsort_interruptible(), type, TYPECACHE_LT_OPR, and values.
Referenced by statext_ndistinct_build().
|
static |
Definition at line 490 of file mvdistinct.c.
Referenced by statext_ndistinct_build().
| MVNDistinct * statext_ndistinct_build | ( | double | totalrows, |
| StatsBuildData * | data | ||
| ) |
Definition at line 85 of file mvdistinct.c.
References Assert(), AttributeNumberIsValid, MVNDistinctItem::attributes, data, generator_free(), generator_init(), generator_next(), MVNDistinct::items, items, j, MVNDistinct::magic, MVNDistinctItem::nattributes, MVNDistinctItem::ndistinct, ndistinct_for_combination(), MVNDistinct::nitems, nitems, num_combinations(), palloc(), STATS_NDISTINCT_MAGIC, STATS_NDISTINCT_TYPE_BASIC, and MVNDistinct::type.
Referenced by BuildRelationExtStatistics().
| MVNDistinct * statext_ndistinct_deserialize | ( | bytea * | data | ) |
Definition at line 247 of file mvdistinct.c.
References Assert(), MVNDistinctItem::attributes, data, elog, ERROR, i, MVNDistinct::items, items, MVNDistinct::magic, MAXALIGN, MinSizeOfItems, MVNDistinctItem::nattributes, MVNDistinctItem::ndistinct, MVNDistinct::nitems, palloc(), palloc0(), SizeOfHeader, STATS_MAX_DIMENSIONS, STATS_NDISTINCT_MAGIC, STATS_NDISTINCT_TYPE_BASIC, MVNDistinct::type, VARDATA_ANY(), VARSIZE_ANY(), and VARSIZE_ANY_EXHDR().
Referenced by pg_ndistinct_out(), and statext_ndistinct_load().
| MVNDistinct * statext_ndistinct_load | ( | Oid | mvoid, |
| bool | inh | ||
| ) |
Definition at line 145 of file mvdistinct.c.
References BoolGetDatum(), DatumGetByteaPP, elog, ERROR, HeapTupleIsValid, ObjectIdGetDatum(), ReleaseSysCache(), SearchSysCache2(), statext_ndistinct_deserialize(), and SysCacheGetAttr().
Referenced by estimate_multivariate_ndistinct().
| bytea * statext_ndistinct_serialize | ( | MVNDistinct * | ndistinct | ) |
Definition at line 176 of file mvdistinct.c.
References Assert(), MVNDistinctItem::attributes, i, MVNDistinct::items, len, MVNDistinct::magic, MVNDistinctItem::nattributes, MVNDistinctItem::ndistinct, MVNDistinct::nitems, output, palloc(), SET_VARSIZE(), SizeOfHeader, SizeOfItem, STATS_NDISTINCT_MAGIC, STATS_NDISTINCT_TYPE_BASIC, MVNDistinct::type, VARDATA(), and VARHDRSZ.
Referenced by build_mvndistinct(), and statext_store().