Skip to content

Commit d694606

Browse files
committed
don't try to calculate queryid from dynamic empty query #176
1 parent 9dcdedc commit d694606

6 files changed

+64
-1
lines changed

expected/README

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@ plpgsql_check_passive.out PostgreSQL 14, 15, 16
22
plpgsql_check_passive_1.out PostgreSQL 12, 13
33
plpgsql_check_active_1.out PostgreSQL 12, 13
44
plpgsql_check_active_2.out PostgreSQL 14, 15, 16
5-
plpgsql_check_active.out PostgreSQL 17
5+
plpgsql_check_active.out PostgreSQL 17, 18

expected/plpgsql_check_active.out

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,20 @@ select plpgsql_profiler_remove_fake_queryid_hook();
250250

251251
(1 row)
252252

253+
drop function f1();
254+
-- don't crash on empty dynamic query
255+
create or replace function f1()
256+
returns void as $$
257+
begin
258+
execute '';
259+
end;
260+
$$ language plpgsql;
261+
select f1();
262+
f1
263+
----
264+
265+
(1 row)
266+
253267
drop function f1();
254268
set plpgsql_check.profiler to off;
255269
create function f1()

expected/plpgsql_check_active_1.out

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,20 @@ select plpgsql_profiler_remove_fake_queryid_hook();
250250

251251
(1 row)
252252

253+
drop function f1();
254+
-- don't crash on empty dynamic query
255+
create or replace function f1()
256+
returns void as $$
257+
begin
258+
execute '';
259+
end;
260+
$$ language plpgsql;
261+
select f1();
262+
f1
263+
----
264+
265+
(1 row)
266+
253267
drop function f1();
254268
set plpgsql_check.profiler to off;
255269
create function f1()

expected/plpgsql_check_active_2.out

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,20 @@ select plpgsql_profiler_remove_fake_queryid_hook();
250250

251251
(1 row)
252252

253+
drop function f1();
254+
-- don't crash on empty dynamic query
255+
create or replace function f1()
256+
returns void as $$
257+
begin
258+
execute '';
259+
end;
260+
$$ language plpgsql;
261+
select f1();
262+
f1
263+
----
264+
265+
(1 row)
266+
253267
drop function f1();
254268
set plpgsql_check.profiler to off;
255269
create function f1()

sql/plpgsql_check_active.sql

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,18 @@ select plpgsql_profiler_remove_fake_queryid_hook();
125125

126126
drop function f1();
127127

128+
-- don't crash on empty dynamic query
129+
create or replace function f1()
130+
returns void as $$
131+
begin
132+
execute '';
133+
end;
134+
$$ language plpgsql;
135+
136+
select f1();
137+
138+
drop function f1();
139+
128140
set plpgsql_check.profiler to off;
129141

130142
create function f1()

src/profiler.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1643,6 +1643,15 @@ profiler_get_dyn_queryid(PLpgSQL_execstate *estate, PLpgSQL_expr *expr, query_pa
16431643
*/
16441644
parsetree_list = pg_parse_query(query_string);
16451645

1646+
1647+
/* The query can be empty. Returns NOQUERYID is this case. */
1648+
if (!parsetree_list)
1649+
{
1650+
MemoryContextSwitchTo(oldcxt);
1651+
MemoryContextReset(profiler_queryid_mcxt);
1652+
return NOQUERYID;
1653+
}
1654+
16461655
/*
16471656
* There should not be more than one query, silently ignore rather than
16481657
* error out in that case.

0 commit comments

Comments
 (0)