Replace has_multiple_baserels() with a bitmap test on all_baserels.

Since we added the PlannerInfo.all_baserels set, it's not really
necessary to grovel over the rangetable to count baserels in the
current query.  So let's drop has_multiple_baserels() in favor
of a bms_membership() test.  This might be microscopically
faster, but the main point is to remove some unnecessary code.

Richard Guo

Discussion: https://postgr.es/m/CAMbWs4_8RcSbbfs1ASZLrMuL0c0EQgXWcoLTQD8swBRY_pQQiA@mail.gmail.com
This commit is contained in:
Tom Lane 2023-10-10 13:08:29 -04:00
parent 98e89740e5
commit 14661ba1a7

View File

@ -2190,28 +2190,6 @@ set_dummy_rel_pathlist(RelOptInfo *rel)
set_cheapest(rel); set_cheapest(rel);
} }
/* quick-and-dirty test to see if any joining is needed */
static bool
has_multiple_baserels(PlannerInfo *root)
{
int num_base_rels = 0;
Index rti;
for (rti = 1; rti < root->simple_rel_array_size; rti++)
{
RelOptInfo *brel = root->simple_rel_array[rti];
if (brel == NULL)
continue;
/* ignore RTEs that are "other rels" */
if (brel->reloptkind == RELOPT_BASEREL)
if (++num_base_rels > 1)
return true;
}
return false;
}
/* /*
* find_window_run_conditions * find_window_run_conditions
* Determine if 'wfunc' is really a WindowFunc and call its prosupport * Determine if 'wfunc' is really a WindowFunc and call its prosupport
@ -2661,7 +2639,7 @@ set_subquery_pathlist(PlannerInfo *root, RelOptInfo *rel,
root->hasHavingQual || root->hasHavingQual ||
parse->distinctClause || parse->distinctClause ||
parse->sortClause || parse->sortClause ||
has_multiple_baserels(root)) bms_membership(root->all_baserels) == BMS_MULTIPLE)
tuple_fraction = 0.0; /* default case */ tuple_fraction = 0.0; /* default case */
else else
tuple_fraction = root->tuple_fraction; tuple_fraction = root->tuple_fraction;