Teach planner about some cases where a restriction clause can be

Tom Lane <tgl@sss.pgh.pa.us>

Commit: cc5e80b8d1c4bf86aa99b54c938e9048e10bf93a
Author: Tom Lane <tgl@sss.pgh.pa.us>
Date: 2005-07-02T23:00:42Z
Releases: 8.1.0
Teach planner about some cases where a restriction clause can be
propagated inside an outer join.  In particular, given
LEFT JOIN ON (A = B) WHERE A = constant, we cannot conclude that
B = constant at the top level (B might be null instead), but we
can nonetheless put a restriction B = constant into the quals for
B's relation, since no inner-side rows not meeting that condition
can contribute to the final result.  Similarly, given
FULL JOIN USING (J) WHERE J = constant, we can't directly conclude
that either input J variable = constant, but it's OK to push such
quals into each input rel.  Per recent gripe from Kim Bisgaard.
Along the way, remove 'valid_everywhere' flag from RestrictInfo,
as on closer analysis it was not being used for anything, and was
defined backwards anyway.

Files