Re: Minor irritant with comment parsing in a function (SQL)

Поиск
Список
Период
Сортировка
От Richard Huxton
Тема Re: Minor irritant with comment parsing in a function (SQL)
Дата
Msg-id 200310082134.38535.dev@archonet.com
обсуждение исходный текст
Ответ на Re: Minor irritant with comment parsing in a function (SQL)  (Peter Eisentraut <peter_e@gmx.net>)
Список pgsql-bugs
On Wednesday 08 October 2003 20:56, Peter Eisentraut wrote:
> Richard Huxton writes:
> > CREATE OR REPLACE FUNCTION zzz_test () RETURNS text AS '
> >   SELECT ''hello world''
> > -- SELECT ''goodbye world''
> >
> > ::text;
> >
> > ' LANGUAGE 'SQL';
> >
> > ERROR:  parser: unterminated quoted string at or near "'hello world'
> > -- SELECT 'goodbye world'
> >
> > ::text;
>
> That's a good one.

Well, I try ;-)

> The bug is actually independent of the function
> definition, but you cannot easily reproduce it in psql, because psql cuts
> out -- comment before sending the command to the server.  Here's how one
> could do it:

You intrigue me sir...

> cmd=$(echo -e "SELECT 'hello world'\n-- SELECT 'goodbye world'\n::text;")
> psql -c "$cmd"
>
> The problem is strings of this form:
>
> 'foo'
>    'bar'
>
> This is equivalent to 'foobar'.

Ah - now if I ever new that, I'd forgotten it.

[snip]
> In your case it's scanning the string
> similar to
>
> 'hello world'
>   -- SELECT 'goodbye world
>     '\n::text;
>
> Hence the complain the the string is not terminated.

So given the "comment" defn in scan.l, it's seeing the quote as the next token
in the input stream? (Wracks brain thinking back to compiler technologies
class in a decade a long, long way from here).

> The bug here is that the scanner doesn't know that a newline (or end of
> input) is a required as part of a -- comment.  If I change the rule
>
> comment            ("--"{non_newline}*)
>
> in scan.l to
>
> comment            ("--"{non_newline}*){newline}
>
> then the example works.  This does not cover the case of a comment at the
> end of the input, but a solution shall be forthcoming.

Ah - in perl you'd be looking for a pattern anchored with a $ - I see what you
mean.

Thanks for the explanation Peter.

--
  Richard Huxton
  Archonet Ltd

В списке pgsql-bugs по дате отправления:

Предыдущее
От: Peter Eisentraut
Дата:
Сообщение: Re: Minor irritant with comment parsing in a function (SQL)
Следующее
От: Peter Eisentraut
Дата:
Сообщение: Re: pg_resetxlog and pgscripts italian translation