Thread: Arbitrary whitespace restrictions on range types

Arbitrary whitespace restrictions on range types

From
Josh Berkus
Date:
Jeff, Hackers:

Is there a strong reason why this has to error?

postgres=# select '[,]'::TSTZRANGE
postgres-# ;
 tstzrange
-----------
 (,)
(1 row)

postgres=# select '[, ]'::TSTZRANGE;
ERROR:  invalid input syntax for type timestamp with time zone: " "
LINE 1: select '[, ]'::TSTZRANGE

--Josh

--
Josh Berkus
PostgreSQL Experts Inc.
http://pgexperts.com

Re: Arbitrary whitespace restrictions on range types

From
Peter Geoghegan
Date:
On 18 December 2012 23:31, Josh Berkus <josh@agliodbs.com> wrote:
> Jeff, Hackers:
>
> Is there a strong reason why this has to error?

Having taken a look at the range I/O routines, I surmise that it was
just easier to write range_parse() such that whitespace is included
within <string> tokens:

 * Whitespace before or after <range> is ignored.  Whitespace within a <string>
 * is taken literally and becomes part of the input string for that bound.

I think that escaping the underlying literal values for parsing is a
surprisingly difficult task, so I can see why the implementation would
shrug in this case. This behaviour may be astonishing, but that
doesn't make it a POLA violation. I don't have time to check now, but
I'm pretty sure that doing something else would break a whole bunch of
other common cases.

--
Peter Geoghegan       http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training and Services

Re: Arbitrary whitespace restrictions on range types

From
Jeff Davis
Date:
On Wed, 2012-12-19 at 00:06 +0000, Peter Geoghegan wrote:
> On 18 December 2012 23:31, Josh Berkus <josh@agliodbs.com> wrote:
> > Jeff, Hackers:
> >
> > Is there a strong reason why this has to error?
>
> Having taken a look at the range I/O routines, I surmise that it was
> just easier to write range_parse() such that whitespace is included
> within <string> tokens:

There was some discussion about it, and the decision was made to match
record literal parsing for the sake of consistency. In a record literal,
spaces are considered to be a part of the value, so they are for range
types, as well.

Regards,
    Jeff Davis