• Tom Lane's avatar
    Fix an oversight in the code that makes transitive-equality deductions from · a1feb90e
    Tom Lane authored
    outer join clauses.  Given, say,
    	... from a left join b on a.a1 = b.b1 where a.a1 = 42;
    we'll deduce a clause b.b1 = 42 and then mark the original join clause
    redundant (we can't remove it completely for reasons I don't feel like
    squeezing into this log entry).  However the original implementation of
    that wasn't bulletproof, because clause_selectivity() wouldn't honor
    this_selec if given nonzero varRelid --- which in practice meant that
    it worked as desired *except* when considering index scan quals.  Which
    resulted in bogus underestimation of the size of the indexscan result for
    an inner indexscan in an outer join, and consequently a possibly bad
    choice of indexscan vs. bitmap scan.  Fix by introducing an explicit test
    into clause_selectivity().  Also, to make sure we don't trigger that test
    in corner cases, change the convention to be that this_selec > 1, not
    this_selec = 1, means it's been marked redundant.  Per trouble report from
    Scara Maccai.
    
    Back-patch to 8.2, where the problem was introduced.
    a1feb90e
clausesel.c 21 KB