Error message with plpgsql CONTINUE - Mailing list pgsql-hackers

From Jim Nasby
Subject Error message with plpgsql CONTINUE
Date
Msg-id 55D160C1.6040508@BlueTreble.com
Whole thread Raw
Responses Re: Error message with plpgsql CONTINUE  (Pavel Stehule <pavel.stehule@gmail.com>)
Re: Error message with plpgsql CONTINUE  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-hackers
Calling CONTINUE with a label that's not a loop produces an error 
message with no context info [1]. This is because of
rc = exec_stmt_block(&estate, func->action);if (rc != PLPGSQL_RC_RETURN){    estate.err_stmt = NULL;    estate.err_text
=NULL;
 

I trawled through git blame a bit and it looks like it's been that way 
for a very long time.

I think err_stmt should probably only be reset in the non-return case a 
bit below that. I'm not sure about err_text though. Also, the code 
treats PLPGSQL_RC_OK and PLPGSQL_RC_EXIT the same, which seems like a 
bug; I would think PLPGSQL_RC_EXIT should be handled the same way as 
CONTINUE.

If someone can confirm this and tell me what to do about err_text I'll 
submit a patch.

[1]
decibel@decina.attlocal/50703=# do $$
begin    <<outer>>    for a in 1..3 loop    <<sub>>    BEGIN        <<inner>>        for b in 8..9 loop            if
a=2then                continue sub;            end if;            raise notice '% %', a, b;        end loop inner;
ENDsub;    end loop outer;
 
end;
$$;
NOTICE:  1 8
NOTICE:  1 9
ERROR:  CONTINUE cannot be used outside a loop
CONTEXT:  PL/pgSQL function inline_code_block
decibel@decina.attlocal/50703=#

[2] 
https://github.com/postgres/postgres/blob/83604cc42353b6c0de2a3f3ac31f94759a9326ae/src/pl/plpgsql/src/pl_exec.c#L438
-- 
Jim Nasby, Data Architect, Blue Treble Consulting, Austin TX
Data in Trouble? Get it in Treble! http://BlueTreble.com



pgsql-hackers by date:

Previous
From: Michael Paquier
Date:
Subject: Re: TAP tests are badly named
Next
From: Neil Conway
Date:
Subject: Memory allocation in spi_printtup()