2
0

extended_stats_internal.h 4.3 KB

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