PostgreSQL Source Code git master
extended_stats_internal.h
Go to the documentation of this file.
1/*-------------------------------------------------------------------------
2 *
3 * extended_stats_internal.h
4 * POSTGRES extended statistics internal declarations
5 *
6 * Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
7 * Portions Copyright (c) 1994, Regents of the University of California
8 *
9 * IDENTIFICATION
10 * src/include/statistics/extended_stats_internal.h
11 *
12 *-------------------------------------------------------------------------
13 */
14#ifndef EXTENDED_STATS_INTERNAL_H
15#define EXTENDED_STATS_INTERNAL_H
16
18#include "utils/sortsupport.h"
19
20typedef struct
21{
22 Oid eqopr; /* '=' operator for datatype, if any */
23 Oid eqfunc; /* and associated function */
24 Oid ltopr; /* '<' operator for datatype, if any */
26
27typedef struct
28{
29 Datum value; /* a data value */
30 int tupno; /* position index for tuple it came from */
32
33/* (de)serialization info */
34typedef struct DimensionInfo
35{
36 int nvalues; /* number of deduplicated values */
37 int nbytes; /* number of bytes (serialized) */
38 int nbytes_aligned; /* size of deserialized data with alignment */
39 int typlen; /* pg_type.typlen */
40 bool typbyval; /* pg_type.typbyval */
42
43/* multi-sort */
45{
46 int ndims; /* number of dimensions */
47 /* sort support data for each dimension: */
50
52
53typedef struct SortItem
54{
56 bool *isnull;
57 int count;
59
60/* a unified representation of the data the statistics is built on */
61typedef struct StatsBuildData
62{
68 bool **nulls;
70
71
72extern MVNDistinct *statext_ndistinct_build(double totalrows, StatsBuildData *data);
75extern bool statext_ndistinct_validate(const MVNDistinct *ndistinct,
76 const int2vector *stxkeys,
77 int numexprs, int elevel);
78extern void statext_ndistinct_free(MVNDistinct *ndistinct);
79
83extern bool statext_dependencies_validate(const MVDependencies *dependencies,
84 const int2vector *stxkeys,
85 int numexprs, int elevel);
86extern void statext_dependencies_free(MVDependencies *dependencies);
87
89 double totalrows, int stattarget);
90extern bytea *statext_mcv_serialize(MCVList *mcvlist, VacAttrStats **stats);
92
93extern MultiSortSupport multi_sort_init(int ndims);
94extern void multi_sort_add_dimension(MultiSortSupport mss, int sortdim,
95 Oid oper, Oid collation);
96extern int multi_sort_compare(const void *a, const void *b, void *arg);
97extern int multi_sort_compare_dim(int dim, const SortItem *a,
98 const SortItem *b, MultiSortSupport mss);
99extern int multi_sort_compare_dims(int start, int end, const SortItem *a,
100 const SortItem *b, MultiSortSupport mss);
101extern int compare_scalars_simple(const void *a, const void *b, void *arg);
103
104extern AttrNumber *build_attnums_array(Bitmapset *attrs, int nexprs, int *numattrs);
105
108 int numattrs, AttrNumber *attnums);
109
110extern bool examine_opclause_args(List *args, Node **exprp,
111 Const **cstp, bool *expronleftp);
112
114 Selectivity mcv_sel,
115 Selectivity mcv_basesel,
116 Selectivity mcv_totalsel);
117
120 List *clauses,
121 int varRelid,
122 JoinType jointype,
123 SpecialJoinInfo *sjinfo,
124 RelOptInfo *rel,
125 Selectivity *basesel,
126 Selectivity *totalsel);
127
130 MCVList *mcv,
131 Node *clause,
132 bool **or_matches,
133 Selectivity *basesel,
134 Selectivity *overlap_mcvsel,
135 Selectivity *overlap_basesel,
136 Selectivity *totalsel);
137
138#endif /* EXTENDED_STATS_INTERNAL_H */
int16 AttrNumber
Definition: attnum.h:21
#define FLEXIBLE_ARRAY_MEMBER
Definition: c.h:480
void statext_ndistinct_free(MVNDistinct *ndistinct)
Definition: mvdistinct.c:332
MVDependencies * statext_dependencies_deserialize(bytea *data)
Definition: dependencies.c:492
int multi_sort_compare_dims(int start, int end, const SortItem *a, const SortItem *b, MultiSortSupport mss)
MultiSortSupportData * MultiSortSupport
MCVList * statext_mcv_deserialize(bytea *data)
Definition: mcv.c:994
Selectivity mcv_clauselist_selectivity(PlannerInfo *root, StatisticExtInfo *stat, List *clauses, int varRelid, JoinType jointype, SpecialJoinInfo *sjinfo, RelOptInfo *rel, Selectivity *basesel, Selectivity *totalsel)
Definition: mcv.c:2046
struct DimensionInfo DimensionInfo
int multi_sort_compare_dim(int dim, const SortItem *a, const SortItem *b, MultiSortSupport mss)
MVDependencies * statext_dependencies_build(StatsBuildData *data)
Definition: dependencies.c:342
int compare_scalars_simple(const void *a, const void *b, void *arg)
struct SortItem SortItem
AttrNumber * build_attnums_array(Bitmapset *attrs, int nexprs, int *numattrs)
int compare_datums_simple(Datum a, Datum b, SortSupport ssup)
MVNDistinct * statext_ndistinct_deserialize(bytea *data)
Definition: mvdistinct.c:247
bytea * statext_ndistinct_serialize(MVNDistinct *ndistinct)
Definition: mvdistinct.c:176
struct StatsBuildData StatsBuildData
bool statext_dependencies_validate(const MVDependencies *dependencies, const int2vector *stxkeys, int numexprs, int elevel)
Definition: dependencies.c:606
bytea * statext_dependencies_serialize(MVDependencies *dependencies)
Definition: dependencies.c:437
void statext_dependencies_free(MVDependencies *dependencies)
Definition: dependencies.c:586
Selectivity mcv_combine_selectivities(Selectivity simple_sel, Selectivity mcv_sel, Selectivity mcv_basesel, Selectivity mcv_totalsel)
Definition: mcv.c:2004
Selectivity mcv_clause_selectivity_or(PlannerInfo *root, StatisticExtInfo *stat, MCVList *mcv, Node *clause, bool **or_matches, Selectivity *basesel, Selectivity *overlap_mcvsel, Selectivity *overlap_basesel, Selectivity *totalsel)
Definition: mcv.c:2124
MVNDistinct * statext_ndistinct_build(double totalrows, StatsBuildData *data)
Definition: mvdistinct.c:85
SortItem * build_sorted_items(StatsBuildData *data, int *nitems, MultiSortSupport mss, int numattrs, AttrNumber *attnums)
MCVList * statext_mcv_build(StatsBuildData *data, double totalrows, int stattarget)
Definition: mcv.c:178
int multi_sort_compare(const void *a, const void *b, void *arg)
MultiSortSupport multi_sort_init(int ndims)
bool statext_ndistinct_validate(const MVNDistinct *ndistinct, const int2vector *stxkeys, int numexprs, int elevel)
Definition: mvdistinct.c:352
struct MultiSortSupportData MultiSortSupportData
void multi_sort_add_dimension(MultiSortSupport mss, int sortdim, Oid oper, Oid collation)
bool examine_opclause_args(List *args, Node **exprp, Const **cstp, bool *expronleftp)
bytea * statext_mcv_serialize(MCVList *mcvlist, VacAttrStats **stats)
Definition: mcv.c:619
return str start
#define nitems(x)
Definition: indent.h:31
int b
Definition: isn.c:74
int a
Definition: isn.c:73
double Selectivity
Definition: nodes.h:260
JoinType
Definition: nodes.h:298
Operator oper(ParseState *pstate, List *opname, Oid ltypeId, Oid rtypeId, bool noError, int location)
Definition: parse_oper.c:371
void * arg
const void * data
uint64_t Datum
Definition: postgres.h:70
unsigned int Oid
Definition: postgres_ext.h:32
tree ctl root
Definition: radixtree.h:1857
Definition: pg_list.h:54
SortSupportData ssup[FLEXIBLE_ARRAY_MEMBER]
Definition: nodes.h:135
VacAttrStats ** stats
Definition: c.h:734
Definition: c.h:706