Remove duplicate code in planner.c.
authorTom Lane <tgl@sss.pgh.pa.us>
Tue, 14 Feb 2017 16:47:12 +0000 (11:47 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Tue, 14 Feb 2017 16:47:45 +0000 (11:47 -0500)
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.

src/backend/optimizer/plan/planner.c

index 881742f46b66d7cfcdf5161f93277a57ff39307c..abb4f12cea15c3308922de87a98ec8efa1b48afa 100644 (file)
@@ -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);