aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDavid Rowley <drowley@postgresql.org>2020-08-26 10:51:36 +1200
committerDavid Rowley <drowley@postgresql.org>2020-08-26 10:51:36 +1200
commitc34605daed563fcade07a9f45bcf440459599c00 (patch)
tree5d6ade2b0cc2d49c5aa76c5449e8291af16095a2 /src
parentff60394a8c9a7af8b32de420ccb54a20a0f019c1 (diff)
downloadpostgresql-c34605daed563fcade07a9f45bcf440459599c00.tar.gz
postgresql-c34605daed563fcade07a9f45bcf440459599c00.zip
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
Diffstat (limited to 'src')
-rw-r--r--src/backend/optimizer/path/clausesel.c3
-rw-r--r--src/backend/statistics/dependencies.c8
2 files changed, 5 insertions, 6 deletions
diff --git a/src/backend/optimizer/path/clausesel.c b/src/backend/optimizer/path/clausesel.c
index a3ebe10592d..37a735b06bb 100644
--- a/src/backend/optimizer/path/clausesel.c
+++ b/src/backend/optimizer/path/clausesel.c
@@ -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);
diff --git a/src/backend/statistics/dependencies.c b/src/backend/statistics/dependencies.c
index 3e37e2758ca..4e30abb6743 100644
--- a/src/backend/statistics/dependencies.c
+++ b/src/backend/statistics/dependencies.c
@@ -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]