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.
regards, tom lane