Re: Range Types: << >> -|- ops vs empty range
Erik Rijkers <er@xs4all.nl>
From: "Erik Rijkers" <er@xs4all.nl>
To: "Josh Berkus" <josh@agliodbs.com>
Cc: "Kevin Grittner" <kevin.grittner@wicourts.gov>, "Robert Haas" <robertmhaas@gmail.com>, "Jeff Davis" <pgsql@j-davis.com>, pgsql-hackers@postgresql.org
Date: 2011-02-11T18:08:43Z
Lists: pgsql-hackers
On Fri, February 11, 2011 19:02, Josh Berkus wrote: > >> "empty range" >> ============= >> Zero length? >> If so, is it fixed at some point, but empty? >> '(x,x)'? >> '[x,x)'? > > Neither of the above should be possible, I think. The expression "(x" > logically excludes the expression "x)". > > However, "[x,x]" would be valid, and would be a zero-length interval at > the point "x". > >> Is it everything? >> '[-inf,+inf]'? > > No, that's "everything" which is a different concept. The above also > ought to be possible, and overlap everything. > >> Is it really meaningfully distinct from NULL? > > Yes. NULL means "I don't know". If a range type IS NULL, then any > operation performed with it ought to be NULL. Hence: > > IF y > x, THEN: > > [x,x] << [y,z) == TRUE > [x,x] -|- (x,y] == TRUE > NULL << [y,z} IS NULL > [-inf,+inf] << [y,z) == FALSE > > I can imagine using all of these constructs in actual applications. In > fact, I have *already* used [-inf,+inf] > You say yes, but you don't mention "empty range". Maybe we can indeed do without the concept of an empty-range?; it might simplify implementation as well as usage. I'm not decided, but I do find it hard to find a plausible use-case for it.