Robert Haas wrote:
On Wed, Jul 28, 2010 at 6:55 AM, Dimitri Fontaine
<dfonta...@hi-media.com> wrote:
Robert Haas <robertmh...@gmail.com> writes:
 But here you want to have different paths for
the same relation that generate *different output*, and the planner
doesn't understand that concept.
Sorry? I though what Equivalence Class provides is the "proving" that
using this qualification or another will *not* affect the output.

In a query like...

 SELECT d1.ID, d2.ID
 FROM DocPrimary d1
   JOIN DocPrimary d2 ON d2.BasedOn=d1.ID
 WHERE (d1.ID=234409763) or (d2.ID=234409763)

...you're going to scan d1, scan d2, and then join the results.  The
scan of d1 is going to produce different results depending on whether
you evaluate or not d1.ID=234409763, and the scan of d2 is going to
produce different results depending on whether or not you evaluate
d2.BasedOn=234409763.
Wouldn't it be relatively easy, to rewrite the filter expression by adding expressions, instead of replacing constants, in the disjunctive case, so the example at hand would become:

WHERE (d1.ID=234409763) or (d2.ID=234409763)
AND (d2.BasedOnID=234409763) or (d2.ID=234409763)

regards,
Yeb Havinga


--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to