Hello 2010/10/8 Tom Lane <t...@sss.pgh.pa.us>: > Pavel Stehule <pavel.steh...@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 > -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers