Re: BUG #14394: No error raised in IN-clause when commas are missing

From: Pantelis Theodosiou <ypercube(at)gmail(dot)com>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: andreas(dot)imboden(at)bl(dot)ch, pgsql-bugs(at)postgresql(dot)org
Subject: Re: BUG #14394: No error raised in IN-clause when commas are missing
Date: 2016-10-24 17:14:45
Message-ID: CAE3TBxxP4GG3mCeTAsfPqgT+EnnN-VJqw1w0K9EFOfy2Xjr0NA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

On Mon, Oct 24, 2016 at 5:59 PM, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> wrote:

> Pantelis Theodosiou <ypercube(at)gmail(dot)com> writes:
> > On Mon, Oct 24, 2016 at 3:46 PM, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> wrote:
> >> Two string constants that are only separated by whitespace *with
> >> at least one newline* are concatenated and effectively treated as
> >> if the string had been written as one constant.
>
> > I agree but shouldn't it run without errors when there is no newline
> (only
> > spaces or comments) as well?
>
> No, because then the syntax rule that causes the literals to be merged
> into a single literal doesn't apply, so you get a syntax error.
>
> > Which version of the standard has this "at least one newline"?
>
> All of them. SQL92 for instance says (see 5.2 <token> and <separator>
> and 5.3 <literal>):
>
> <separator> ::= { <comment> | <space> | <newline> }...
>
> <character string literal> ::=
> [ <introducer><character set specification> ]
> <quote> [ <character representation>... ] <quote>
> [ { <separator>... <quote> [ <character representation>...
> ] <quote> }... ]
>
> 1) In a <character string literal> or <national character string
> literal>, the sequence:
>
> <quote> <character representation>... <quote>
> <separator>... <quote> <character representation>... <quote>
>
> is equivalent to the sequence
>
> <quote> <character representation>... <character representa-
> tion>... <quote>
>
> 4) In a <character string literal>, <national character string
> literal>, <bit string literal>, or <hex string literal>, a
> <sep-
> arator> shall contain a <newline>.
>

Thank you, I missed that rule.

It's not consistent with this rule:

SQL text containing one or more instances of <comment> is equivalent to the
same SQL text with the
<comment> replaced with <newline>.

and I certainly agree on the rest, about the explicit syntax:

>
> The intent of allowing separators at all is evidently to allow very long
> literals to be split across lines. Which is fine, but I wish they'd
> used some explicit syntax to specify continuation. The existing
> definition is pretty error-prone, as you found out.
>
> regards, tom lane
>

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message David G. Johnston 2016-10-24 17:42:22 Re: BUG #14394: No error raised in IN-clause when commas are missing
Previous Message Tom Lane 2016-10-24 16:59:28 Re: BUG #14394: No error raised in IN-clause when commas are missing