mirror of
https://git.postgresql.org/git/postgresql.git
synced 2026-02-08 19:27:40 +08:00
Extra warnings and errors for PL/pgSQL
Infrastructure to allow plpgsql.extra_warnings plpgsql.extra_errors Initial extra checks only for shadowed_variables Marko Tiikkaja and Petr Jelinek Reviewed by Simon Riggs and Pavel Stěhule
This commit is contained in:
@ -2689,6 +2689,95 @@ end$$ language plpgsql;
|
||||
|
||||
select footest();
|
||||
|
||||
-- test warnings and errors
|
||||
set plpgsql.extra_warnings to 'all';
|
||||
set plpgsql.extra_warnings to 'none';
|
||||
set plpgsql.extra_errors to 'all';
|
||||
set plpgsql.extra_errors to 'none';
|
||||
|
||||
-- test warnings when shadowing a variable
|
||||
|
||||
set plpgsql.extra_warnings to 'shadowed_variables';
|
||||
|
||||
-- simple shadowing of input and output parameters
|
||||
create or replace function shadowtest(in1 int)
|
||||
returns table (out1 int) as $$
|
||||
declare
|
||||
in1 int;
|
||||
out1 int;
|
||||
begin
|
||||
end
|
||||
$$ language plpgsql;
|
||||
select shadowtest(1);
|
||||
|
||||
set plpgsql.extra_warnings to 'shadowed_variables';
|
||||
select shadowtest(1);
|
||||
create or replace function shadowtest(in1 int)
|
||||
returns table (out1 int) as $$
|
||||
declare
|
||||
in1 int;
|
||||
out1 int;
|
||||
begin
|
||||
end
|
||||
$$ language plpgsql;
|
||||
select shadowtest(1);
|
||||
drop function shadowtest(int);
|
||||
|
||||
-- shadowing in a second DECLARE block
|
||||
create or replace function shadowtest()
|
||||
returns void as $$
|
||||
declare
|
||||
f1 int;
|
||||
begin
|
||||
declare
|
||||
f1 int;
|
||||
begin
|
||||
end;
|
||||
end$$ language plpgsql;
|
||||
drop function shadowtest();
|
||||
|
||||
-- several levels of shadowing
|
||||
create or replace function shadowtest(in1 int)
|
||||
returns void as $$
|
||||
declare
|
||||
in1 int;
|
||||
begin
|
||||
declare
|
||||
in1 int;
|
||||
begin
|
||||
end;
|
||||
end$$ language plpgsql;
|
||||
drop function shadowtest(int);
|
||||
|
||||
-- shadowing in cursor definitions
|
||||
create or replace function shadowtest()
|
||||
returns void as $$
|
||||
declare
|
||||
f1 int;
|
||||
c1 cursor (f1 int) for select 1;
|
||||
begin
|
||||
end$$ language plpgsql;
|
||||
drop function shadowtest();
|
||||
|
||||
-- test errors when shadowing a variable
|
||||
|
||||
set plpgsql.extra_errors to 'shadowed_variables';
|
||||
|
||||
create or replace function shadowtest(f1 int)
|
||||
returns boolean as $$
|
||||
declare f1 int; begin return 1; end $$ language plpgsql;
|
||||
|
||||
select shadowtest(1);
|
||||
|
||||
reset plpgsql.extra_errors;
|
||||
reset plpgsql.extra_warnings;
|
||||
|
||||
create or replace function shadowtest(f1 int)
|
||||
returns boolean as $$
|
||||
declare f1 int; begin return 1; end $$ language plpgsql;
|
||||
|
||||
select shadowtest(1);
|
||||
|
||||
-- test scrollable cursor support
|
||||
|
||||
create function sc_test() returns setof integer as $$
|
||||
|
||||
Reference in New Issue
Block a user