I uploaded a bugfix version of plpgsql_lint.
http://kix.fsv.cvut.cz/~stehule/download/plpgsql_lint_2011-07-20.tgz
It support a functions with OUT parameters now:
CREATE OR REPLACE FUNCTION public.gg(OUT a integer, OUT b integer) RETURNS record LANGUAGE sql AS $function$ select 10,20 $function$ CREATE OR REPLACE FUNCTION public.t1() RETURNS void LANGUAGE plpgsql AS $function$ declare r record; begin raise notice 'start'; r := gg(); raise notice '% %', r.a, r.x; -- bug function returns (a,b) return; end; $function$ postgres=# select t1(); ERROR: record "r" has no field "x" -- this bug was found before own execution, there is no message "start" CONTEXT: SQL statement "SELECT r.x" PL/pgSQL function "t1" line 5 at RAISEit running after fixing:
postgres=# select t1(); NOTICE: start NOTICE: 10 20 t1 ──── (1 row) Time: 10.287 ms
This is great. I think it should be even built-in PostgreSQL itself.
ReplyDelete