Re: CASE control block broken by a single line comment

Поиск
Список
Период
Сортировка
От Erik Wienhold
Тема Re: CASE control block broken by a single line comment
Дата
Msg-id utvbxgxkzflf2tn73iejt3qn4devu3f3kbhqvwxm6qkeboe7wf@mg4gzyufd547
обсуждение исходный текст
Ответ на [MASSMAIL]CASE control block broken by a single line comment  (Michal Bartak <maxym.srpl@gmail.com>)
Ответы Re: CASE control block broken by a single line comment  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-hackers
On 2024-04-06 20:14 +0200, Michal Bartak wrote:
> The issue described bellow exists in postgresql ver 16.2 (found in some
> previous major versions)

Can confirm also on master.

> The documentation defines a comment as:
> 
> > A comment is a sequence of characters beginning with double dashes and
> > extending to the end of the line
> 
> 
> When using such a comment within CASE control block, it ends up with an
> error:
> 
> DO LANGUAGE plpgsql $$
> DECLARE
>     t TEXT = 'a';
> BEGIN
>     CASE t
>         WHEN 'a'  -- my comment
>         THEN RAISE NOTICE 'a';
>         WHEN 'b'
>         THEN RAISE NOTICE 'b';
>         ELSE NULL;
>     END CASE;
> END;$$;
> 
> ERROR:  syntax error at end of input
> LINE 1: "__Case__Variable_2__" IN ('a'  -- my comment)
>                                                       ^
> QUERY:  "__Case__Variable_2__" IN ('a'  -- my comment)
> CONTEXT:  PL/pgSQL function inline_code_block line 5 at CASE

I'm surprised that the comment is not skipped by the scanner at this
point.  Maybe because the parser just reads the raw expression between
WHEN and THEN with plpgsql_append_source_text via read_sql_construct.

How about the attached patch?  It's a workaround by simply adding a line
feed character between the raw expression and the closing parenthesis.

-- 
Erik

Вложения

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

Предыдущее
От: Andres Freund
Дата:
Сообщение: Re: Flushing large data immediately in pqcomm
Следующее
От: Corey Huinker
Дата:
Сообщение: Re: Statistics Import and Export