Re: Are range_before and range_after commutator operators?
От | Tom Lane |
---|---|
Тема | Re: Are range_before and range_after commutator operators? |
Дата | |
Msg-id | 8393.1321567847@sss.pgh.pa.us обсуждение исходный текст |
Ответ на | Re: Are range_before and range_after commutator operators? (Jeff Davis <pgsql@j-davis.com>) |
Ответы |
Re: Are range_before and range_after commutator operators?
|
Список | pgsql-hackers |
Jeff Davis <pgsql@j-davis.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
В списке pgsql-hackers по дате отправления: