Skip to content

Commit 6510c83

Browse files
committed
Add some more tests on event triggers
Fabien Coelho Reviewed by Robert Haas
1 parent e3bfe6d commit 6510c83

File tree

4 files changed

+109
-2
lines changed

4 files changed

+109
-2
lines changed

src/test/modules/dummy_seclabel/expected/dummy_seclabel.out

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,3 +85,21 @@ SELECT objtype, objname, provider, label FROM pg_seclabels
8585
view | dummy_seclabel_view1 | dummy | classified
8686
(9 rows)
8787

88+
-- check for event trigger
89+
CREATE FUNCTION event_trigger_test()
90+
RETURNS event_trigger AS $$
91+
BEGIN RAISE NOTICE 'event %: %', TG_EVENT, TG_TAG; END;
92+
$$ LANGUAGE plpgsql;
93+
CREATE EVENT TRIGGER always_start ON ddl_command_start
94+
EXECUTE PROCEDURE event_trigger_test();
95+
CREATE EVENT TRIGGER always_end ON ddl_command_end
96+
EXECUTE PROCEDURE event_trigger_test();
97+
CREATE EVENT TRIGGER always_drop ON sql_drop
98+
EXECUTE PROCEDURE event_trigger_test();
99+
CREATE EVENT TRIGGER always_rewrite ON table_rewrite
100+
EXECUTE PROCEDURE event_trigger_test();
101+
-- should trigger ddl_command_{start,end}
102+
SECURITY LABEL ON TABLE dummy_seclabel_tbl1 IS 'classified';
103+
NOTICE: event ddl_command_start: SECURITY LABEL
104+
NOTICE: event ddl_command_end: SECURITY LABEL
105+
DROP EVENT TRIGGER always_start, always_end, always_drop, always_rewrite;

src/test/modules/dummy_seclabel/sql/dummy_seclabel.sql

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,3 +77,26 @@ SECURITY LABEL ON SCHEMA dummy_seclabel_test IS 'unclassified'; -- OK
7777

7878
SELECT objtype, objname, provider, label FROM pg_seclabels
7979
ORDER BY objtype, objname;
80+
81+
-- check for event trigger
82+
CREATE FUNCTION event_trigger_test()
83+
RETURNS event_trigger AS $$
84+
BEGIN RAISE NOTICE 'event %: %', TG_EVENT, TG_TAG; END;
85+
$$ LANGUAGE plpgsql;
86+
87+
CREATE EVENT TRIGGER always_start ON ddl_command_start
88+
EXECUTE PROCEDURE event_trigger_test();
89+
90+
CREATE EVENT TRIGGER always_end ON ddl_command_end
91+
EXECUTE PROCEDURE event_trigger_test();
92+
93+
CREATE EVENT TRIGGER always_drop ON sql_drop
94+
EXECUTE PROCEDURE event_trigger_test();
95+
96+
CREATE EVENT TRIGGER always_rewrite ON table_rewrite
97+
EXECUTE PROCEDURE event_trigger_test();
98+
99+
-- should trigger ddl_command_{start,end}
100+
SECURITY LABEL ON TABLE dummy_seclabel_tbl1 IS 'classified';
101+
102+
DROP EVENT TRIGGER always_start, always_end, always_drop, always_rewrite;

src/test/regress/expected/event_trigger.out

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,15 @@ BEGIN
99
RAISE NOTICE 'test_event_trigger: % %', tg_event, tg_tag;
1010
END
1111
$$ language plpgsql;
12+
-- should fail, event triggers cannot have declared arguments
13+
create function test_event_trigger_arg(name text)
14+
returns event_trigger as $$ BEGIN RETURN 1; END $$ language plpgsql;
15+
ERROR: event trigger functions cannot have declared arguments
16+
CONTEXT: compilation of PL/pgSQL function "test_event_trigger_arg" near line 1
17+
-- should fail, SQL functions cannot be event triggers
18+
create function test_event_trigger_sql() returns event_trigger as $$
19+
SELECT 1 $$ language sql;
20+
ERROR: SQL functions cannot return type event_trigger
1221
-- should fail, no elephant_bootstrap entry point
1322
create event trigger regress_event_trigger on elephant_bootstrap
1423
execute procedure test_event_trigger();
@@ -39,11 +48,32 @@ create event trigger regress_event_trigger2 on ddl_command_start
3948
when tag in ('DROP EVENT TRIGGER')
4049
execute procedure test_event_trigger();
4150
ERROR: event triggers are not supported for DROP EVENT TRIGGER
51+
-- should fail, can't have event triggers on global objects
52+
create event trigger regress_event_trigger2 on ddl_command_start
53+
when tag in ('CREATE ROLE')
54+
execute procedure test_event_trigger();
55+
ERROR: event triggers are not supported for CREATE ROLE
56+
-- should fail, can't have event triggers on global objects
57+
create event trigger regress_event_trigger2 on ddl_command_start
58+
when tag in ('CREATE DATABASE')
59+
execute procedure test_event_trigger();
60+
ERROR: event triggers are not supported for CREATE DATABASE
61+
-- should fail, can't have event triggers on global objects
62+
create event trigger regress_event_trigger2 on ddl_command_start
63+
when tag in ('CREATE TABLESPACE')
64+
execute procedure test_event_trigger();
65+
ERROR: event triggers are not supported for CREATE TABLESPACE
4266
-- should fail, can't have same filter variable twice
4367
create event trigger regress_event_trigger2 on ddl_command_start
4468
when tag in ('create table') and tag in ('CREATE FUNCTION')
4569
execute procedure test_event_trigger();
4670
ERROR: filter variable "tag" specified more than once
71+
-- should fail, can't have arguments
72+
create event trigger regress_event_trigger2 on ddl_command_start
73+
execute procedure test_event_trigger('argument not allowed');
74+
ERROR: syntax error at or near "'argument not allowed'"
75+
LINE 2: execute procedure test_event_trigger('argument not allowe...
76+
^
4777
-- OK
4878
create event trigger regress_event_trigger2 on ddl_command_start
4979
when tag in ('create table', 'CREATE FUNCTION')
@@ -71,7 +101,13 @@ alter event trigger regress_event_trigger disable;
71101
create table event_trigger_fire1 (a int);
72102
NOTICE: test_event_trigger: ddl_command_start CREATE TABLE
73103
NOTICE: test_event_trigger: ddl_command_end CREATE TABLE
74-
-- regress_event_trigger_end should fire here
104+
-- regress_event_trigger_end should fire on these commands
105+
grant all on table event_trigger_fire1 to public;
106+
NOTICE: test_event_trigger: ddl_command_end GRANT
107+
comment on table event_trigger_fire1 is 'here is a comment';
108+
NOTICE: test_event_trigger: ddl_command_end COMMENT
109+
revoke all on table event_trigger_fire1 from public;
110+
NOTICE: test_event_trigger: ddl_command_end REVOKE
75111
drop table event_trigger_fire1;
76112
NOTICE: test_event_trigger: ddl_command_end DROP TABLE
77113
-- alter owner to non-superuser should fail

src/test/regress/sql/event_trigger.sql

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,14 @@ BEGIN
1010
END
1111
$$ language plpgsql;
1212

13+
-- should fail, event triggers cannot have declared arguments
14+
create function test_event_trigger_arg(name text)
15+
returns event_trigger as $$ BEGIN RETURN 1; END $$ language plpgsql;
16+
17+
-- should fail, SQL functions cannot be event triggers
18+
create function test_event_trigger_sql() returns event_trigger as $$
19+
SELECT 1 $$ language sql;
20+
1321
-- should fail, no elephant_bootstrap entry point
1422
create event trigger regress_event_trigger on elephant_bootstrap
1523
execute procedure test_event_trigger();
@@ -42,11 +50,30 @@ create event trigger regress_event_trigger2 on ddl_command_start
4250
when tag in ('DROP EVENT TRIGGER')
4351
execute procedure test_event_trigger();
4452

53+
-- should fail, can't have event triggers on global objects
54+
create event trigger regress_event_trigger2 on ddl_command_start
55+
when tag in ('CREATE ROLE')
56+
execute procedure test_event_trigger();
57+
58+
-- should fail, can't have event triggers on global objects
59+
create event trigger regress_event_trigger2 on ddl_command_start
60+
when tag in ('CREATE DATABASE')
61+
execute procedure test_event_trigger();
62+
63+
-- should fail, can't have event triggers on global objects
64+
create event trigger regress_event_trigger2 on ddl_command_start
65+
when tag in ('CREATE TABLESPACE')
66+
execute procedure test_event_trigger();
67+
4568
-- should fail, can't have same filter variable twice
4669
create event trigger regress_event_trigger2 on ddl_command_start
4770
when tag in ('create table') and tag in ('CREATE FUNCTION')
4871
execute procedure test_event_trigger();
4972

73+
-- should fail, can't have arguments
74+
create event trigger regress_event_trigger2 on ddl_command_start
75+
execute procedure test_event_trigger('argument not allowed');
76+
5077
-- OK
5178
create event trigger regress_event_trigger2 on ddl_command_start
5279
when tag in ('create table', 'CREATE FUNCTION')
@@ -75,7 +102,10 @@ alter event trigger regress_event_trigger disable;
75102
-- regress_event_trigger
76103
create table event_trigger_fire1 (a int);
77104

78-
-- regress_event_trigger_end should fire here
105+
-- regress_event_trigger_end should fire on these commands
106+
grant all on table event_trigger_fire1 to public;
107+
comment on table event_trigger_fire1 is 'here is a comment';
108+
revoke all on table event_trigger_fire1 from public;
79109
drop table event_trigger_fire1;
80110

81111
-- alter owner to non-superuser should fail

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy