Re: proposal: new contrib module plpgsql's embeded sql validator - Mailing list pgsql-hackers

From Jim Nasby
Subject Re: proposal: new contrib module plpgsql's embeded sql validator
Date
Msg-id 0AA9297B-E97A-4AA0-BE1E-713ABC9D65EC@nasby.net
Whole thread Raw
In response to proposal: new contrib module plpgsql's embeded sql validator  (Pavel Stehule <pavel.stehule@gmail.com>)
Responses Re: proposal: new contrib module plpgsql's embeded sql validator
Re: proposal: new contrib module plpgsql's embeded sql validator
List pgsql-hackers
On Jul 7, 2011, at 11:31 PM, Pavel Stehule wrote:
> a lazy deep SQL validation inside plpgsq functions is interesting
> attribute. It allows to work with temporary tables and it make testing
> and debugging harder, because lot of errors in embedded queries are
> detected too late. I wrote a simple module that can to help little
> bit. It is based on plpgsql plugin API and it ensures a deep
> validation of embedded sql early - after start of execution. I am
> thinking, so this plugin is really useful and it is example of plpgsql
> pluging - that is missing in contrib.
>
> Example:
>
> buggy function - raise error when par > 10
>
>
> CREATE OR REPLACE FUNCTION public.kuku(a integer)
> RETURNS integer
> LANGUAGE plpgsql
> AS $function$
> begin
>  if (a > 10) then
>    return b + 1;
>  else
>    return a + 1;
>  end if;
> end;
> $function$
>
> but it is works for par <= 10
>
> postgres=# select kuku(1);
> kuku
> ------
>    2
> (1 row)
>
> postgres=# load 'plpgsql';
> LOAD
> postgres=# load 'plpgsql_esql_checker';
> LOAD
> postgres=# select kuku(1);
> ERROR:  column "b" does not exist
> LINE 1: SELECT b + 1
>               ^
> QUERY:  SELECT b + 1
> CONTEXT:  PL/pgSQL function "kuku" line 3 at RETURN
>
> with esql checker this bug is identified without dependency on used
> parameter's value
>
> What do you think about this idea?
>
> The code contains a plpgsql_statement_tree walker - it should be moved
> to core and used generally - statistic, coverage tests, ...

I think this should at least be a contrib module; it seems very useful.

On a somewhat related note, I'd also really like to have the ability to parse things like .sql files externally, to do
thingslike LINT checking. 
--
Jim C. Nasby, Database Architect                   jim@nasby.net
512.569.9461 (cell)                         http://jim.nasby.net




pgsql-hackers by date:

Previous
From: Jim Nasby
Date:
Subject: Re: storing TZ along timestamps
Next
From: Tatsuo Ishii
Date:
Subject: Re: Re: patch review : Add ability to constrain backend temporary file space