From: Tom Lane Date: Tue, 14 Feb 2017 16:47:12 +0000 (-0500) Subject: Remove duplicate code in planner.c. X-Git-Tag: REL_10_BETA1~904 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8d396a0a7046438ced8d8ada6ceb7c0756e58351;p=postgresql 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. --- diff --git a/src/backend/optimizer/plan/planner.c b/src/backend/optimizer/plan/planner.c index 881742f46b..abb4f12cea 100644 --- a/src/backend/optimizer/plan/planner.c +++ b/src/backend/optimizer/plan/planner.c @@ -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);