Tom Lane wrote:
> Bruce Momjian <pgman@candle.pha.pa.us> writes:
> > Tom Lane wrote:
> >> Yup, that's one place that will need to be taught about it.
>
> > That was actually a reason I was wondering if it was worth changing our
> > current BETWEEN code. The optimizer already is complicated and trying
> > to do BETWEEN rather than the more simpler statements didn't seem like a
> > win.
>
> Actually, an explicit representation of BETWEEN will *help* the
> optimizer; right now it has to try to recognize range restrictions
> by matching up '>' and '<' clauses. That's a mess already, and I
> had no intention of trying to extend that logic to recognize the
> clause structures that BETWEEN SYMMETRIC would put out if it weren't
> a primitive node type. But if it's a node then recognizing it is
> a no-brainer. See clausesel.c.
Oh, good. Another issue is that "nocachefunc() BETWEEN 1 and 2" should
call the function only once, which my AND/OR hack didn't do. I can
imagine random() working strangely with BETWEEN.
I just tried:
test=> select 1 where random() between 0.49999 and 0.5000;
in current CVS and it clearly is printing 1 more often that it should. :-(
--
Bruce Momjian | http://candle.pha.pa.us
pgman@candle.pha.pa.us | (610) 853-3000
+ If your life is a hard drive, | 830 Blythe Avenue
+ Christ can be your backup. | Drexel Hill, Pennsylvania 19026