From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
---|---|
To: | Jeff Davis <pgsql(at)j-davis(dot)com> |
Cc: | Heikki Linnakangas <heikki(at)enterprisedb(dot)com>, pgsql-hackers(at)postgreSQL(dot)org |
Subject: | Re: Are range_before and range_after commutator operators? |
Date: | 2011-11-17 22:10:47 |
Message-ID: | 8393.1321567847@sss.pgh.pa.us |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Jeff Davis <pgsql(at)j-davis(dot)com> writes:
> Yikes! While commenting the code, it turns out that I missed the case
> where the values match and they are both exclusive; but one is upper and
> the other lower. Worse than that, there were apparently some bogus test
> results that expected the wrong output. Mea culpa.
> Patch attached. I'll do another pass over some of the comments in other
> parts of the code.
Applied, thanks. These comments aren't quite what I'd hoped for though.
What I'm lacking is the conceptual context, ie, why is a
less-equal-greater primitive for bounds a good thing? It seems like
when you consider the four possible directional (lower/upper)
combinations, the same result from range_cmp_bounds means something
different in each case, and I find that confusing. I wonder whether
functions defined along set-theoretic lines (this bound is strictly
weaker or stronger than this other one, or these bounds together define
an empty or singleton or non-singleton set) might be more transparent.
Maybe it would be enough just to document what the results mean in
set-theoretic terms for each of the four cases.
> And to your original question, it seems that << and >> should be
> commutators. Perhaps I had a reason earlier, but it is escaping me now.
> What edge cases did you have in mind?
Well, I was (and remain) sufficiently unclear about the behavior of
range_cmp_bounds to not be totally sure that they are commutators ---
it's the dependency on the "lower" flags that makes this so unobvious
for me. In particular, it seems like this reduces to the statement that
range_cmp_bounds(x, y) > 0 is equivalent to range_cmp_bounds(y, x) < 0,
at least when x and y have different directionality. After working
through the code again I guess that's true, but it's less than obvious.
regards, tom lane
From | Date | Subject | |
---|---|---|---|
Next Message | Robert Haas | 2011-11-17 22:14:30 | Re: Refactoring on DROP/ALTER SET SCHEMA/ALTER RENAME TO statement |
Previous Message | Alvaro Herrera | 2011-11-17 21:26:09 | Re: Refactoring on DROP/ALTER SET SCHEMA/ALTER RENAME TO statement |