aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/adt/selfuncs.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/utils/adt/selfuncs.c')
-rw-r--r--src/backend/utils/adt/selfuncs.c42
1 files changed, 22 insertions, 20 deletions
diff --git a/src/backend/utils/adt/selfuncs.c b/src/backend/utils/adt/selfuncs.c
index 35c9e3c86fe..e11d022827a 100644
--- a/src/backend/utils/adt/selfuncs.c
+++ b/src/backend/utils/adt/selfuncs.c
@@ -5028,22 +5028,27 @@ examine_variable(PlannerInfo *root, Node *node, int varRelid,
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 */
@@ -5058,7 +5063,7 @@ examine_variable(PlannerInfo *root, Node *node, int varRelid,
/* note: no point in expressional-index search here */
}
/* else treat it as a constant */
- break;
+ }
}
bms_free(varnos);
@@ -6381,17 +6386,14 @@ find_join_input_rel(PlannerInfo *root, Relids relids)
{
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)