Re: BUG #13805: plpgsql execute using expression evaluate wrong

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: David Gould <daveg(at)sonic(dot)net>
Cc: amutu(at)amutu(dot)com, pgsql-bugs(at)postgresql(dot)org
Subject: Re: BUG #13805: plpgsql execute using expression evaluate wrong
Date: 2015-12-08 06:36:39
Message-ID: 14234.1449556599@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

David Gould <daveg(at)sonic(dot)net> writes:
> However, it does seem a little odd that the literal syntax for
> intervals accepts the '$':
> ...
> I would have expected it to raise an error. The documentation does not shed
> any light on this. Anyone?

The datetime input parser tends to consider most non-alphanumeric
characters as being insignificant except as field separators. We could
tighten that up, but I think we should tread pretty carefully for fear of
breaking cases that used to work. A trivial example:

regression=# select '1 mon 1 day'::interval;
interval
-------------
1 mon 1 day
(1 row)

regression=# select '1 mon, 1 day'::interval;
interval
-------------
1 mon 1 day
(1 row)

If we started to reject the second case, we'd likely get complaints.
But the parser doesn't see that as any different from

regression=# select '1 mon$ 1 day'::interval;
interval
-------------
1 mon 1 day
(1 row)

Trying to decide which characters are legitimate noise and which
aren't seems like a tarbaby best not to get stuck to :-(

regards, tom lane

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message David Gould 2015-12-08 07:24:48 Re: BUG #13805: plpgsql execute using expression evaluate wrong
Previous Message Jov 2015-12-08 06:15:56 Re: BUG #13805: plpgsql execute using expression evaluate wrong