Skip to content

Commit

Permalink
Comment fixes for extended statistics
Browse files Browse the repository at this point in the history
Clean up some code comments in new extended statistics code, from
7b504eb.
  • Loading branch information
alvherre committed Apr 6, 2017
1 parent dc0400c commit b1fc51a
Show file tree
Hide file tree
Showing 5 changed files with 15 additions and 11 deletions.
1 change: 1 addition & 0 deletions src/backend/optimizer/util/plancat.c
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ static List *get_relation_statistics(RelOptInfo *rel, Relation relation);
* min_attr lowest valid AttrNumber
* max_attr highest valid AttrNumber
* indexlist list of IndexOptInfos for relation's indexes
* statlist list of StatisticExtInfo for relation's statistic objects
* serverid if it's a foreign table, the server OID
* fdwroutine if it's a foreign table, the FDW function pointers
* pages number of pages
Expand Down
9 changes: 7 additions & 2 deletions src/backend/statistics/dependencies.c
Original file line number Diff line number Diff line change
Expand Up @@ -900,7 +900,13 @@ find_strongest_dependency(StatisticExtInfo * stats, MVDependencies * dependencie

/*
* dependencies_clauselist_selectivity
* Attempt to estimate selectivity using functional dependency statistics
* Return the estimated selectivity of the given clauses using
* functional dependency statistics, or 1.0 if no useful functional
* dependency statistic exists.
*
* 'estimatedclauses' is an output argument that gets a bit set corresponding
* to the (zero-based) list index of clauses that are included in the
* estimated selectivity.
*
* Given equality clauses on attributes (a,b) we find the strongest dependency
* between them, i.e. either (a=>b) or (b=>a). Assuming (a=>b) is the selected
Expand Down Expand Up @@ -935,7 +941,6 @@ dependencies_clauselist_selectivity(PlannerInfo *root,
AttrNumber *list_attnums;
int listidx;


/* check if there's any stats that might be useful for us. */
if (!has_stats_of_kind(rel->statlist, STATS_EXT_DEPENDENCIES))
return 1.0;
Expand Down
7 changes: 4 additions & 3 deletions src/backend/statistics/extended_stats.c
Original file line number Diff line number Diff line change
Expand Up @@ -408,7 +408,7 @@ multi_sort_compare_dims(int start, int end,

/*
* has_stats_of_kind
* Check that the list contains statistic of a given kind
* Check that the list contains statistic of a given kind
*/
bool
has_stats_of_kind(List *stats, char requiredkind)
Expand All @@ -428,8 +428,9 @@ has_stats_of_kind(List *stats, char requiredkind)

/*
* choose_best_statistics
* Look for statistics with the specified 'requiredkind' which have keys
* that match at least two attnums.
* Look for and return statistics with the specified 'requiredkind' which
* have keys that match at least two of the given attnums. Return NULL if
* there's no match.
*
* The current selection criteria is very simple - we choose the statistics
* referencing the most attributes with the least keys.
Expand Down
1 change: 0 additions & 1 deletion src/backend/utils/cache/relcache.c
Original file line number Diff line number Diff line change
Expand Up @@ -4508,7 +4508,6 @@ RelationGetStatExtList(Relation relation)
NULL, 1, &skey);

while (HeapTupleIsValid(htup = systable_getnext(indscan)))
/* TODO maybe include only already built statistics? */
result = insert_ordered_oid(result, HeapTupleGetOid(htup));

systable_endscan(indscan);
Expand Down
8 changes: 3 additions & 5 deletions src/include/nodes/relation.h
Original file line number Diff line number Diff line change
Expand Up @@ -693,17 +693,15 @@ typedef struct ForeignKeyOptInfo
* StatisticExtInfo
* Information about extended statistics for planning/optimization
*
* This contains information about which columns are covered by the
* statistics (stakeys), which options were requested while adding the
* statistics (*_enabled), and which kinds of statistics were actually
* built and are available for the optimizer (*_built).
* Each pg_statistic_ext row is represented by one or more nodes of this
* type, or even zero if ANALYZE has not computed them.
*/
typedef struct StatisticExtInfo
{
NodeTag type;

Oid statOid; /* OID of the statistics row */
RelOptInfo *rel; /* back-link to index's table */
RelOptInfo *rel; /* back-link to statistic's table */
char kind; /* statistic kind of this entry */
Bitmapset *keys; /* attnums of the columns covered */
} StatisticExtInfo;
Expand Down

0 comments on commit b1fc51a

Please sign in to comment.