| 1 | /*------------------------------------------------------------------------- |
| 2 | * |
| 3 | * extended_stats_internal.h |
| 4 | * POSTGRES extended statistics internal declarations |
| 5 | * |
| 6 | * Portions Copyright (c) 1996-2019, 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 | |
| 17 | #include "utils/sortsupport.h" |
| 18 | #include "statistics/statistics.h" |
| 19 | |
| 20 | |
| 21 | typedef struct |
| 22 | { |
| 23 | Oid eqopr; /* '=' operator for datatype, if any */ |
| 24 | Oid eqfunc; /* and associated function */ |
| 25 | Oid ltopr; /* '<' operator for datatype, if any */ |
| 26 | } StdAnalyzeData; |
| 27 | |
| 28 | typedef struct |
| 29 | { |
| 30 | Datum value; /* a data value */ |
| 31 | int tupno; /* position index for tuple it came from */ |
| 32 | } ScalarItem; |
| 33 | |
| 34 | /* (de)serialization info */ |
| 35 | typedef struct DimensionInfo |
| 36 | { |
| 37 | int nvalues; /* number of deduplicated values */ |
| 38 | int nbytes; /* number of bytes (serialized) */ |
| 39 | int nbytes_aligned; /* size of deserialized data with alignment */ |
| 40 | int typlen; /* pg_type.typlen */ |
| 41 | bool typbyval; /* pg_type.typbyval */ |
| 42 | } DimensionInfo; |
| 43 | |
| 44 | /* multi-sort */ |
| 45 | typedef struct MultiSortSupportData |
| 46 | { |
| 47 | int ndims; /* number of dimensions */ |
| 48 | /* sort support data for each dimension: */ |
| 49 | SortSupportData ssup[FLEXIBLE_ARRAY_MEMBER]; |
| 50 | } MultiSortSupportData; |
| 51 | |
| 52 | typedef MultiSortSupportData *MultiSortSupport; |
| 53 | |
| 54 | typedef struct SortItem |
| 55 | { |
| 56 | Datum *values; |
| 57 | bool *isnull; |
| 58 | int count; |
| 59 | } SortItem; |
| 60 | |
| 61 | extern MVNDistinct *statext_ndistinct_build(double totalrows, |
| 62 | int numrows, HeapTuple *rows, |
| 63 | Bitmapset *attrs, VacAttrStats **stats); |
| 64 | extern bytea *statext_ndistinct_serialize(MVNDistinct *ndistinct); |
| 65 | extern MVNDistinct *statext_ndistinct_deserialize(bytea *data); |
| 66 | |
| 67 | extern MVDependencies *statext_dependencies_build(int numrows, HeapTuple *rows, |
| 68 | Bitmapset *attrs, VacAttrStats **stats); |
| 69 | extern bytea *statext_dependencies_serialize(MVDependencies *dependencies); |
| 70 | extern MVDependencies *statext_dependencies_deserialize(bytea *data); |
| 71 | |
| 72 | extern MCVList *statext_mcv_build(int numrows, HeapTuple *rows, |
| 73 | Bitmapset *attrs, VacAttrStats **stats, |
| 74 | double totalrows); |
| 75 | extern bytea *statext_mcv_serialize(MCVList *mcv, VacAttrStats **stats); |
| 76 | extern MCVList *statext_mcv_deserialize(bytea *data); |
| 77 | |
| 78 | extern MultiSortSupport multi_sort_init(int ndims); |
| 79 | extern void multi_sort_add_dimension(MultiSortSupport mss, int sortdim, |
| 80 | Oid oper, Oid collation); |
| 81 | extern int multi_sort_compare(const void *a, const void *b, void *arg); |
| 82 | extern int multi_sort_compare_dim(int dim, const SortItem *a, |
| 83 | const SortItem *b, MultiSortSupport mss); |
| 84 | extern int multi_sort_compare_dims(int start, int end, const SortItem *a, |
| 85 | const SortItem *b, MultiSortSupport mss); |
| 86 | extern int compare_scalars_simple(const void *a, const void *b, void *arg); |
| 87 | extern int compare_datums_simple(Datum a, Datum b, SortSupport ssup); |
| 88 | |
| 89 | extern void *bsearch_arg(const void *key, const void *base, |
| 90 | size_t nmemb, size_t size, |
| 91 | int (*compar) (const void *, const void *, void *), |
| 92 | void *arg); |
| 93 | |
| 94 | extern AttrNumber *build_attnums_array(Bitmapset *attrs, int *numattrs); |
| 95 | |
| 96 | extern SortItem *build_sorted_items(int numrows, int *nitems, HeapTuple *rows, |
| 97 | TupleDesc tdesc, MultiSortSupport mss, |
| 98 | int numattrs, AttrNumber *attnums); |
| 99 | |
| 100 | extern bool examine_opclause_expression(OpExpr *expr, Var **varp, |
| 101 | Const **cstp, bool *varonleftp); |
| 102 | |
| 103 | extern Selectivity mcv_clauselist_selectivity(PlannerInfo *root, |
| 104 | StatisticExtInfo *stat, |
| 105 | List *clauses, |
| 106 | int varRelid, |
| 107 | JoinType jointype, |
| 108 | SpecialJoinInfo *sjinfo, |
| 109 | RelOptInfo *rel, |
| 110 | Selectivity *basesel, |
| 111 | Selectivity *totalsel); |
| 112 | |
| 113 | #endif /* EXTENDED_STATS_INTERNAL_H */ |
| 114 | |