Relids relids = restrictinfo->required_relids;
RelOptInfo *rel;
- switch (bms_membership(relids))
+ if (!bms_is_empty(relids))
{
- case BMS_SINGLETON:
+ int relid;
+ if (bms_get_singleton_member(relids, &relid))
+ {
/*
* There is only one relation participating in the clause, so it
* is a restriction clause for that relation.
*/
- rel = find_base_rel(root, bms_singleton_member(relids));
+ rel = find_base_rel(root, relid);
/* Add clause to rel's restriction list */
rel->baserestrictinfo = lappend(rel->baserestrictinfo,
/* Update security level info */
rel->baserestrict_min_security = Min(rel->baserestrict_min_security,
restrictinfo->security_level);
- break;
- case BMS_MULTIPLE:
-
+ }
+ else
+ {
/*
* The clause is a join clause, since there is more than one rel
* in its relid set.
* Add clause to the join lists of all the relevant relations.
*/
add_join_clause_to_rels(root, restrictinfo, relids);
- break;
- default:
-
- /*
- * clause references no rels, and therefore we have no place to
- * attach it. Shouldn't get here if callers are working properly.
- */
- elog(ERROR, "cannot cope with variable-free clause");
- break;
+ }
+ }
+ else
+ {
+ /*
+ * clause references no rels, and therefore we have no place to attach
+ * it. Shouldn't get here if callers are working properly.
+ */
+ elog(ERROR, "cannot cope with variable-free clause");
}
}
onerel = NULL;
- switch (bms_membership(varnos))
+ if (bms_is_empty(varnos))
{
- case BMS_EMPTY_SET:
- /* No Vars at all ... must be pseudo-constant clause */
- break;
- case BMS_SINGLETON:
- if (varRelid == 0 || bms_is_member(varRelid, varnos))
+ /* No Vars at all ... must be pseudo-constant clause */
+ }
+ else
+ {
+ int relid;
+
+ if (bms_get_singleton_member(varnos, &relid))
+ {
+ if (varRelid == 0 || varRelid == relid)
{
- onerel = find_base_rel(root,
- (varRelid ? varRelid : bms_singleton_member(varnos)));
+ onerel = find_base_rel(root, relid);
vardata->rel = onerel;
node = basenode; /* strip any relabeling */
}
/* else treat it as a constant */
- break;
- case BMS_MULTIPLE:
+ }
+ else
+ {
+ /* varnos has multiple relids */
if (varRelid == 0)
{
/* treat it as a variable of a join relation */
/* note: no point in expressional-index search here */
}
/* else treat it as a constant */
- break;
+ }
}
bms_free(varnos);
{
RelOptInfo *rel = NULL;
- switch (bms_membership(relids))
+ if (!bms_is_empty(relids))
{
- case BMS_EMPTY_SET:
- /* should not happen */
- break;
- case BMS_SINGLETON:
- rel = find_base_rel(root, bms_singleton_member(relids));
- break;
- case BMS_MULTIPLE:
+ int relid;
+
+ if (bms_get_singleton_member(relids, &relid))
+ rel = find_base_rel(root, relid);
+ else
rel = find_join_rel(root, relids);
- break;
}
if (rel == NULL)