Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit6510c83

Browse files
committed
Add some more tests on event triggers
Fabien CoelhoReviewed by Robert Haas
1 parente3bfe6d commit6510c83

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, labelFROM pg_seclabels
7979
ORDER BY objtype, objname;
80+
81+
-- check for event trigger
82+
CREATEFUNCTIONevent_trigger_test()
83+
RETURNS event_triggerAS $$
84+
BEGIN RAISE NOTICE'event %: %', TG_EVENT, TG_TAG; END;
85+
$$ LANGUAGE plpgsql;
86+
87+
CREATE EVENT TRIGGER always_startON ddl_command_start
88+
EXECUTE PROCEDURE event_trigger_test();
89+
90+
CREATE EVENT TRIGGER always_endON ddl_command_end
91+
EXECUTE PROCEDURE event_trigger_test();
92+
93+
CREATE EVENT TRIGGER always_dropON sql_drop
94+
EXECUTE PROCEDURE event_trigger_test();
95+
96+
CREATE EVENT TRIGGER always_rewriteON table_rewrite
97+
EXECUTE PROCEDURE event_trigger_test();
98+
99+
-- should trigger ddl_command_{start,end}
100+
SECURITY LABELON 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+
createfunctiontest_event_trigger_arg(nametext)
15+
returns event_triggeras $$BEGIN RETURN1; END $$ language plpgsql;
16+
17+
-- should fail, SQL functions cannot be event triggers
18+
createfunctiontest_event_trigger_sql() returns event_triggeras $$
19+
SELECT1 $$ language sql;
20+
1321
-- should fail, no elephant_bootstrap entry point
1422
create event trigger regress_event_triggeron elephant_bootstrap
1523
execute procedure test_event_trigger();
@@ -42,11 +50,30 @@ create event trigger regress_event_trigger2 on ddl_command_start
4250
when tagin ('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_trigger2on ddl_command_start
55+
when tagin ('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_trigger2on ddl_command_start
60+
when tagin ('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_trigger2on ddl_command_start
65+
when tagin ('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_trigger2on ddl_command_start
4770
when tagin ('create table')and tagin ('CREATE FUNCTION')
4871
execute procedure test_event_trigger();
4972

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

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

81111
-- alter owner to non-superuser should fail

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp