mirror of
https://github.com/postgres/postgres.git
synced 2025-06-11 20:28:21 +03:00
Fixup some misusages of bms_num_members()
It's a bit inefficient to test if a Bitmapset is empty by counting all the members and seeing if that number is zero. It's much better just to use bms_is_empty(). Likewise for checking if there are at least two members, just use bms_membership(), which does not need to do anything more after finding two members. Discussion: https://postgr.es/m/CAApHDvpvwm_QjbDOb5xga%2BKmX9XkN9xQavNGm3SvDbVnCYOerQ%40mail.gmail.com Reviewed-by: Tomas Vondra
This commit is contained in:
@ -164,8 +164,7 @@ clauselist_selectivity_simple(PlannerInfo *root,
|
||||
* directly to clause_selectivity(). None of what we might do below is
|
||||
* relevant.
|
||||
*/
|
||||
if ((list_length(clauses) == 1) &&
|
||||
bms_num_members(estimatedclauses) == 0)
|
||||
if (list_length(clauses) == 1 && bms_is_empty(estimatedclauses))
|
||||
return clause_selectivity(root, (Node *) linitial(clauses),
|
||||
varRelid, jointype, sjinfo);
|
||||
|
||||
|
@ -1246,7 +1246,7 @@ dependencies_clauselist_selectivity(PlannerInfo *root,
|
||||
* of clauses. We must return 1.0 so the calling function's selectivity is
|
||||
* unaffected.
|
||||
*/
|
||||
if (bms_num_members(clauses_attnums) < 2)
|
||||
if (bms_membership(clauses_attnums) != BMS_MULTIPLE)
|
||||
{
|
||||
bms_free(clauses_attnums);
|
||||
pfree(list_attnums);
|
||||
@ -1273,18 +1273,18 @@ dependencies_clauselist_selectivity(PlannerInfo *root,
|
||||
{
|
||||
StatisticExtInfo *stat = (StatisticExtInfo *) lfirst(l);
|
||||
Bitmapset *matched;
|
||||
int num_matched;
|
||||
BMS_Membership membership;
|
||||
|
||||
/* skip statistics that are not of the correct type */
|
||||
if (stat->kind != STATS_EXT_DEPENDENCIES)
|
||||
continue;
|
||||
|
||||
matched = bms_intersect(clauses_attnums, stat->keys);
|
||||
num_matched = bms_num_members(matched);
|
||||
membership = bms_membership(matched);
|
||||
bms_free(matched);
|
||||
|
||||
/* skip objects matching fewer than two attributes from clauses */
|
||||
if (num_matched < 2)
|
||||
if (membership != BMS_MULTIPLE)
|
||||
continue;
|
||||
|
||||
func_dependencies[nfunc_dependencies]
|
||||
|
Reference in New Issue
Block a user