Thread: BUG #8939: Cast to range type fails due to whitespaces in the text string

BUG #8939: Cast to range type fails due to whitespaces in the text string

From
Sergei.Agalakov@gmail.com
Date:
The following bug has been logged on the website:

Bug reference:      8939
Logged by:          Sergei Agalakov
Email address:      Sergei.Agalakov@gmail.com
PostgreSQL version: 9.3.2
Operating system:   Windows
Description:

According to documentation
http://www.postgresql.org/docs/9.3/interactive/rangetypes.html paragraph
8.17.5. Range Input/Output
"Whitespace is allowed before and after the range value, but any whitespace
between the parentheses or brackets is taken as part of the lower or upper
bound value. (Depending on the element type, it might or might not be
significant.)"
The real behavior is different for bounded and unbounded ranges:
SELECT '[10,)'::int4range; -- OK
SELECT '[10, )'::int4range; -- Fails
SELECT '[10,12 )'::int4range; -- OK
SELECT '(, 10]'::int4range; -- OK
SELECT '(,10 )'::int4range; -- OK
SELECT '( ,10)'::int4range; -- Fails
SELECT '( 8,10)'::int4range; -- OK


Constructor works predictably all the time trimming whitespaces:
SELECT int4range( 10 , null , '[)' ); -- OK

I would expect that for range types where white spaces can't be significant
for evaluating elements they would be trimmed before evaluating a SQL
statement with casting to a range type. Currently an implementation of
casting to range types is too peaky to the exact syntax of the text string.
Sergei.Agalakov@gmail.com writes:
> According to documentation
> http://www.postgresql.org/docs/9.3/interactive/rangetypes.html paragraph
> 8.17.5. Range Input/Output
> "Whitespace is allowed before and after the range value, but any whitespace
> between the parentheses or brackets is taken as part of the lower or upper
> bound value. (Depending on the element type, it might or might not be
> significant.)"
> The real behavior is different for bounded and unbounded ranges:
> SELECT '[10,)'::int4range; -- OK
> SELECT '[10, )'::int4range; -- Fails
> SELECT '[10,12 )'::int4range; -- OK
> SELECT '(, 10]'::int4range; -- OK
> SELECT '(,10 )'::int4range; -- OK
> SELECT '( ,10)'::int4range; -- Fails
> SELECT '( 8,10)'::int4range; -- OK

I see no bug here.  If you're omitting a value, you can't put some random
whitespace there instead.  The documentation seems clear enough about that
to me.

> I would expect that for range types where white spaces can't be significant
> for evaluating elements they would be trimmed before evaluating a SQL
> statement with casting to a range type. Currently an implementation of
> casting to range types is too peaky to the exact syntax of the text string.

Don't insert any made-up whitespace.  What's so hard about that?

            regards, tom lane