]> granicus.if.org Git - postgresql/commitdiff
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);