Skip to content

Commit

Permalink
fix missing fcache when fmgr hook is called in unexpected order
Browse files Browse the repository at this point in the history
  • Loading branch information
okbob committed Sep 10, 2024
1 parent be7e77e commit cced0a5
Show file tree
Hide file tree
Showing 8 changed files with 9,951 additions and 1 deletion.
4 changes: 3 additions & 1 deletion expected/README
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
plpgsql_check_passive.out PostgreSQL 14, 15, 16
plpgsql_check_passive_1.out PostgreSQL 12, 13
plpgsql_check_passive_2.out PostgreSQL 18
plpgsql_check_active_1.out PostgreSQL 12, 13
plpgsql_check_active_2.out PostgreSQL 14, 15, 16
plpgsql_check_active.out PostgreSQL 17, 18
plpgsql_check_active_3.out PostgreSQL 18
plpgsql_check_active.out PostgreSQL 17
31 changes: 31 additions & 0 deletions expected/plpgsql_check_active.out
Original file line number Diff line number Diff line change
Expand Up @@ -9396,3 +9396,34 @@ set plpgsql_check.cursors_leaks to on;
do $$ declare c cursor for select 1; begin open c; call p1(); end $$;
set plpgsql_check.cursors_leaks to default;
drop procedure p1;
-- should not crash
create or replace function nested_trace_test(a int)
returns int as $$
begin
perform plpgsql_check_pragma('enable:tracer');
return a + 1;
end;
$$ language plpgsql;
create or replace function trace_test(b int)
returns int as $$
declare r int default 0;
begin
for i in 1..b
loop
r := nested_trace_test(r);
end loop;
return r;
end;
$$ language plpgsql;
-- when plpgsql_check is not loaded yet, then plpgsql_check is
-- load by perform plpgsql_check_pragma and this is another
-- case, when fmgr hook is not called in expected order.
\c
-- should not to crash
select trace_test(3);
WARNING: late initialization of fmgr_plpgsql_cache
trace_test
------------
3
(1 row)

31 changes: 31 additions & 0 deletions expected/plpgsql_check_active_1.out
Original file line number Diff line number Diff line change
Expand Up @@ -9398,3 +9398,34 @@ set plpgsql_check.cursors_leaks to on;
do $$ declare c cursor for select 1; begin open c; call p1(); end $$;
set plpgsql_check.cursors_leaks to default;
drop procedure p1;
-- should not crash
create or replace function nested_trace_test(a int)
returns int as $$
begin
perform plpgsql_check_pragma('enable:tracer');
return a + 1;
end;
$$ language plpgsql;
create or replace function trace_test(b int)
returns int as $$
declare r int default 0;
begin
for i in 1..b
loop
r := nested_trace_test(r);
end loop;
return r;
end;
$$ language plpgsql;
-- when plpgsql_check is not loaded yet, then plpgsql_check is
-- load by perform plpgsql_check_pragma and this is another
-- case, when fmgr hook is not called in expected order.
\c
-- should not to crash
select trace_test(3);
WARNING: late initialization of fmgr_plpgsql_cache
trace_test
------------
3
(1 row)

31 changes: 31 additions & 0 deletions expected/plpgsql_check_active_2.out
Original file line number Diff line number Diff line change
Expand Up @@ -9395,3 +9395,34 @@ set plpgsql_check.cursors_leaks to on;
do $$ declare c cursor for select 1; begin open c; call p1(); end $$;
set plpgsql_check.cursors_leaks to default;
drop procedure p1;
-- should not crash
create or replace function nested_trace_test(a int)
returns int as $$
begin
perform plpgsql_check_pragma('enable:tracer');
return a + 1;
end;
$$ language plpgsql;
create or replace function trace_test(b int)
returns int as $$
declare r int default 0;
begin
for i in 1..b
loop
r := nested_trace_test(r);
end loop;
return r;
end;
$$ language plpgsql;
-- when plpgsql_check is not loaded yet, then plpgsql_check is
-- load by perform plpgsql_check_pragma and this is another
-- case, when fmgr hook is not called in expected order.
\c
-- should not to crash
select trace_test(3);
WARNING: late initialization of fmgr_plpgsql_cache
trace_test
------------
3
(1 row)

Loading

0 comments on commit cced0a5

Please sign in to comment.