BUG #12568: upper of int4range unexpected value - Mailing list pgsql-bugs
| From | damian@sepczuk.pl |
|---|---|
| Subject | BUG #12568: upper of int4range unexpected value |
| Date | |
| Msg-id | 20150116152713.2582.10294@wrigleys.postgresql.org Whole thread Raw |
| Responses |
Re: BUG #12568: upper of int4range unexpected value
|
| List | pgsql-bugs |
The following bug has been logged on the website:
Bug reference: 12568
Logged by: Damian Sepczuk
Email address: damian@sepczuk.pl
PostgreSQL version: 9.4.0
Operating system: Linux Mint 17.1 Cinnamon 64-bit 3.13.0-24-generic
Description:
While technically 3 is an upper bound of the integer range [1,3) â© â = {1,
2}, so are all natural numbers ⥠2. I would expect the 'upper' function to
return the supremum (least upper bound) of the range.
In my opinion the result of upper('[1,2]'::int4range) = 3 is unexpected.
>From pg documentation:
upper(anyrange) | range's element type | upper bound of range |
upper(numrange(1.1,2.2)) | 2.2
upper_inc(anyrange) | boolean | is the upper bound inclusive? |
upper_inc(numrange(1.1,2.2)) | false
and
"The built-in range types int4range, int8range, and daterange all use a
canonical form that includes the lower bound and excludes the upper bound;
that is, [)."
I understand, that the canonical form of the discrete range is [1,3) but,
still, 3 is not the supremum of [1,3) in the discrete domain of int4
numbers. Supremum of [1,3) in int4 is 2.
It seems that the upper and upper_inc functions don't take into account the
fact the range is discrete.
> SELECT version();
PostgreSQL 9.4.0 on x86_64-unknown-linux-gnu, compiled by gcc (Ubuntu
4.8.2-19ubuntu1) 4.8.2, 64-bit
> SELECT x, lower(x), upper(x), lower_inc(x), upper_inc(x) FROM (SELECT
'[1,2]'::int4range x) q;
x | lower | upper | lower_inc | upper_inc
-------+-------+-------+-----------+-----------
[1,3) | 1 | 3 | t | f
^^^^^^^_____________^^^-----------> Unexpected!
> SELECT x, lower(x), upper(x), lower_inc(x), upper_inc(x) FROM (SELECT
'(1,2]'::int4range x) q;
x | lower | upper | lower_inc | upper_inc
-------+-------+-------+-----------+-----------
[2,3) | 2 | 3 | t | f
^^^^^^^_____________^^^-----------> Unexpected!
SELECT x, lower(x), upper(x), lower_inc(x), upper_inc(x) FROM (SELECT
'(1,3)'::int4range x) q;
x | lower | upper | lower_inc | upper_inc
-------+-------+-------+-----------+-----------
[2,3) | 2 | 3 | t | f
^^^^^^^_____________^^^-----------> Unexpected!
SELECT x, lower(x), upper(x), lower_inc(x), upper_inc(x) FROM (SELECT
'(1,2)'::int4range x) q;
x | lower | upper | lower_inc | upper_inc
-------+-------+-------+-----------+-----------
empty | | | f | f
> SELECT x, lower(x), upper(x), lower_inc(x), upper_inc(x) FROM (SELECT
'[1,2]'::numrange x) q;
x | lower | upper | lower_inc | upper_inc
-------+-------+-------+-----------+-----------
[1,2] | 1 | 2 | t | t
> SELECT x, lower(x), upper(x), lower_inc(x), upper_inc(x) FROM (SELECT
'[1,2)'::numrange x) q1;
x | lower | upper | lower_inc | upper_inc
-------+-------+-------+-----------+-----------
[1,2) | 1 | 2 | t | f
> SELECT x, lower(x), upper(x), lower_inc(x), upper_inc(x) FROM (SELECT
'[1,3]'::numrange x) q1;
x | lower | upper | lower_inc | upper_inc
-------+-------+-------+-----------+-----------
[1,3] | 1 | 3 | t | t
pgsql-bugs by date: