Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
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)