mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-03-19 20:00:51 +08:00
Remove duplicate code in planner.c.
I noticed while hacking on join UNION transforms that planner.c's function get_base_rel_indexes() just duplicates the functionality of get_relids_in_jointree(). It doesn't even have the excuse of being older code :-(. Drop it and use the latter function instead.
This commit is contained in:
parent
0dfa89ba29
commit
8d396a0a70
@ -2098,52 +2098,6 @@ is_dummy_plan(Plan *plan)
|
||||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
* Create a bitmapset of the RT indexes of live base relations
|
||||
*
|
||||
* Helper for preprocess_rowmarks ... at this point in the proceedings,
|
||||
* the only good way to distinguish baserels from appendrel children
|
||||
* is to see what is in the join tree.
|
||||
*/
|
||||
static Bitmapset *
|
||||
get_base_rel_indexes(Node *jtnode)
|
||||
{
|
||||
Bitmapset *result;
|
||||
|
||||
if (jtnode == NULL)
|
||||
return NULL;
|
||||
if (IsA(jtnode, RangeTblRef))
|
||||
{
|
||||
int varno = ((RangeTblRef *) jtnode)->rtindex;
|
||||
|
||||
result = bms_make_singleton(varno);
|
||||
}
|
||||
else if (IsA(jtnode, FromExpr))
|
||||
{
|
||||
FromExpr *f = (FromExpr *) jtnode;
|
||||
ListCell *l;
|
||||
|
||||
result = NULL;
|
||||
foreach(l, f->fromlist)
|
||||
result = bms_join(result,
|
||||
get_base_rel_indexes(lfirst(l)));
|
||||
}
|
||||
else if (IsA(jtnode, JoinExpr))
|
||||
{
|
||||
JoinExpr *j = (JoinExpr *) jtnode;
|
||||
|
||||
result = bms_join(get_base_rel_indexes(j->larg),
|
||||
get_base_rel_indexes(j->rarg));
|
||||
}
|
||||
else
|
||||
{
|
||||
elog(ERROR, "unrecognized node type: %d",
|
||||
(int) nodeTag(jtnode));
|
||||
result = NULL; /* keep compiler quiet */
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/*
|
||||
* preprocess_rowmarks - set up PlanRowMarks if needed
|
||||
*/
|
||||
@ -2183,7 +2137,7 @@ preprocess_rowmarks(PlannerInfo *root)
|
||||
* make a bitmapset of all base rels and then remove the items we don't
|
||||
* need or have FOR [KEY] UPDATE/SHARE marks for.
|
||||
*/
|
||||
rels = get_base_rel_indexes((Node *) parse->jointree);
|
||||
rels = get_relids_in_jointree((Node *) parse->jointree, false);
|
||||
if (parse->resultRelation)
|
||||
rels = bms_del_member(rels, parse->resultRelation);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user