codekingpro/portable-devtools
114k
1/*-------------------------------------------------------------------------2 *3 * statistics.h4 * Extended statistics and selectivity estimation functions.5 *6 * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group7 * Portions Copyright (c) 1994, Regents of the University of California8 *9 * src/include/statistics/statistics.h10 *11 *-------------------------------------------------------------------------12 */13#ifndef STATISTICS_H14#define STATISTICS_H15 16#include "commands/vacuum.h"17#include "nodes/pathnodes.h"18 19#define STATS_MAX_DIMENSIONS 8 /* max number of attributes */20 21/* Multivariate distinct coefficients */22#define STATS_NDISTINCT_MAGIC 0xA352BFA4 /* struct identifier */23#define STATS_NDISTINCT_TYPE_BASIC 1 /* struct version */24 25/* MVNDistinctItem represents a single combination of columns */26typedef struct MVNDistinctItem27{28 double ndistinct; /* ndistinct value for this combination */29 int nattributes; /* number of attributes */30 AttrNumber *attributes; /* attribute numbers */31} MVNDistinctItem;32 33/* A MVNDistinct object, comprising all possible combinations of columns */34typedef struct MVNDistinct35{36 uint32 magic; /* magic constant marker */37 uint32 type; /* type of ndistinct (BASIC) */38 uint32 nitems; /* number of items in the statistic */39 MVNDistinctItem items[FLEXIBLE_ARRAY_MEMBER];40} MVNDistinct;41 42/* Multivariate functional dependencies */43#define STATS_DEPS_MAGIC 0xB4549A2C /* marks serialized bytea */44#define STATS_DEPS_TYPE_BASIC 1 /* basic dependencies type */45 46/*47 * Functional dependencies, tracking column-level relationships (values48 * in one column determine values in another one).49 */50typedef struct MVDependency51{52 double degree; /* degree of validity (0-1) */53 AttrNumber nattributes; /* number of attributes */54 AttrNumber attributes[FLEXIBLE_ARRAY_MEMBER]; /* attribute numbers */55} MVDependency;56 57typedef struct MVDependencies58{59 uint32 magic; /* magic constant marker */60 uint32 type; /* type of MV Dependencies (BASIC) */61 uint32 ndeps; /* number of dependencies */62 MVDependency *deps[FLEXIBLE_ARRAY_MEMBER]; /* dependencies */63} MVDependencies;64 65/* used to flag stats serialized to bytea */66#define STATS_MCV_MAGIC 0xE1A651C2 /* marks serialized bytea */67#define STATS_MCV_TYPE_BASIC 1 /* basic MCV list type */68 69/* max items in MCV list (should be equal to max default_statistics_target) */70#define STATS_MCVLIST_MAX_ITEMS 1000071 72/*73 * Multivariate MCV (most-common value) lists74 *75 * A straightforward extension of MCV items - i.e. a list (array) of76 * combinations of attribute values, together with a frequency and null flags.77 */78typedef struct MCVItem79{80 double frequency; /* frequency of this combination */81 double base_frequency; /* frequency if independent */82 bool *isnull; /* NULL flags */83 Datum *values; /* item values */84} MCVItem;85 86/* multivariate MCV list - essentially an array of MCV items */87typedef struct MCVList88{89 uint32 magic; /* magic constant marker */90 uint32 type; /* type of MCV list (BASIC) */91 uint32 nitems; /* number of MCV items in the array */92 AttrNumber ndimensions; /* number of dimensions */93 Oid types[STATS_MAX_DIMENSIONS]; /* OIDs of data types */94 MCVItem items[FLEXIBLE_ARRAY_MEMBER]; /* array of MCV items */95} MCVList;96 97extern MVNDistinct *statext_ndistinct_load(Oid mvoid, bool inh);98extern MVDependencies *statext_dependencies_load(Oid mvoid, bool inh);99extern MCVList *statext_mcv_load(Oid mvoid, bool inh);100 101extern void BuildRelationExtStatistics(Relation onerel, bool inh, double totalrows,102 int numrows, HeapTuple *rows,103 int natts, VacAttrStats **vacattrstats);104extern int ComputeExtStatisticsRows(Relation onerel,105 int natts, VacAttrStats **vacattrstats);106extern bool statext_is_kind_built(HeapTuple htup, char type);107extern Selectivity dependencies_clauselist_selectivity(PlannerInfo *root,108 List *clauses,109 int varRelid,110 JoinType jointype,111 SpecialJoinInfo *sjinfo,112 RelOptInfo *rel,113 Bitmapset **estimatedclauses);114extern Selectivity statext_clauselist_selectivity(PlannerInfo *root,115 List *clauses,116 int varRelid,117 JoinType jointype,118 SpecialJoinInfo *sjinfo,119 RelOptInfo *rel,120 Bitmapset **estimatedclauses,121 bool is_or);122extern bool has_stats_of_kind(List *stats, char requiredkind);123extern StatisticExtInfo *choose_best_statistics(List *stats, char requiredkind,124 bool inh,125 Bitmapset **clause_attnums,126 List **clause_exprs,127 int nclauses);128extern HeapTuple statext_expressions_load(Oid stxoid, bool inh, int idx);129 130#endif /* STATISTICS_H */131 