I noticed these two calls in remove_self_join_rel():
adjust_relid_set(root->all_result_relids, toRemove->relid, toKeep->relid);
adjust_relid_set(root->leaf_result_relids, toRemove->relid, toKeep->relid);There's no comment explaining them, and as far as I can tell they do nothing: adjust_relid_set returns a Relids and does not modify the input in place. Rather than make the calls do the cleanup they pretend to do, I think a better way is to replace them with assertions: toRemove->relid is not a member of either set. This is true as these two sets contain only parse->resultRelation (rejected as an SJE candidate to preserve EvalPlanQual) and inheritance children of the target, which never appear in the joinlist that SJE scans for candidates. Thoughts? - Richard
v1-0001-Fix-bogus-calls-in-remove_self_join_rel.patch
Description: Binary data
