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
*/
* 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);