Hello
2010/10/8 Tom Lane <tgl@sss.pgh.pa.us>:
> Pavel Stehule <pavel.stehule@gmail.com> writes:
>> a) parser allow a labels on invalid positions with strange runtime bug:
>
>> postgres=# CREATE OR REPLACE FUNCTION foo()
>> RETURNS void AS $$
>> BEGIN
>> FOR i IN 1..2
>> <<<invalidLabel>>
>> LOOP
>> RAISE NOTICE '%',i;
>> END LOOP;
>> END;
>> $$ LANGUAGE plpgsql;
>> CREATE FUNCTION
>
>> ERROR: column "invalidlabel" does not exist
>> LINE 2: <<<invalidLabel>>
>> ^
>> QUERY: SELECT 2
>> <<<invalidLabel>>
>> CONTEXT: PL/pgSQL function "foo" line 3 at FOR with integer loop variable
>
> That isn't a bug, because the construct isn't a label, and wouldn't be
> even if you'd gotten the number of <'s right ;-). What you have is an
> expression "2 <<< invalidLabel >>", which given the right operator
> definitions could be perfectly valid. plpgsql labels can't appear in
> the middle of an SQL expression.
>
I see it now - I did a bug <<<some>>, but with correct text there is same behave
CREATE OR REPLACE FUNCTION foo()
RETURNS void AS $$
BEGIN FOR i IN 1..10 <<label>> LOOP RAISE NOTICE '%', i; END LOOP;
END;
$$ LANGUAGE plpgsql;
CREATE FUNCTION
Now I understand to interpretation. But there is little bit difficult
to understand to error message. Can be message enhanced to show a
complete expression? Some like
postgres=# select foo();
ERROR: column "label" does not exist
Detail: Expr 10 <<label>>
LINE 2: <<label>>
Regards
Pavel
> regards, tom lane
>