On Sun, Jul 27, 2014 at 2:35 AM, Tom Lane <t...@sss.pgh.pa.us> wrote:
> David Rowley <dgrowle...@gmail.com> writes: > > In order to get my patch working with an Assert enabled build I've had to > > apply the attached patch. > > That patch is entirely bogus. What you should be asking is why > get_loop_count is being applied to a relation that's supposedly been > removed from the query. It should only get applied to rels that are > required outer rels for a parameterized path, and thus certainly > not dead. > > hmm ok. After further investigation it seems that this is down to the EquivalenceClass still containing references to the dead rel. What seems to be happening is match_eclass_clauses_to_index() is calling generate_implied_equalities_for_column() which is generating RestrictInfo clauses which make reference to the dead relation. With the existing left join removal code, in all the test cases I've thrown at it, match_eclass_clauses_to_index() seems to early exit on if (!index->rel->has_eclass_joins), but this is not the case when I'm removing SEMI and ANTI joins. So likely this is something I'll have to tackle in that patch, perhaps by stripping out the equivalence class members which belong to the newly dead rel in remove_rel_from_query(). Apologies for the noise Regards David Rowley