Skip to content

Commit 77216ca

Browse files
committed
Add tests for session_replication_role
This was hardly tested at all. The trigger case was lightly tested by the logical replication tests, but rules and event triggers were not tested at all.
1 parent 2082b37 commit 77216ca

File tree

6 files changed

+115
-13
lines changed

6 files changed

+115
-13
lines changed

src/test/regress/expected/event_trigger.out

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -88,16 +88,34 @@ create event trigger regress_event_trigger_noperms on ddl_command_start
8888
ERROR: permission denied to create event trigger "regress_event_trigger_noperms"
8989
HINT: Must be superuser to create an event trigger.
9090
reset role;
91-
-- all OK
92-
alter event trigger regress_event_trigger enable replica;
93-
alter event trigger regress_event_trigger enable always;
94-
alter event trigger regress_event_trigger enable;
91+
-- test enabling and disabling
9592
alter event trigger regress_event_trigger disable;
96-
-- regress_event_trigger2 and regress_event_trigger_end should fire, but not
97-
-- regress_event_trigger
93+
-- fires _trigger2 and _trigger_end should fire, but not _trigger
9894
create table event_trigger_fire1 (a int);
9995
NOTICE: test_event_trigger: ddl_command_start CREATE TABLE
10096
NOTICE: test_event_trigger: ddl_command_end CREATE TABLE
97+
alter event trigger regress_event_trigger enable;
98+
set session_replication_role = replica;
99+
-- fires nothing
100+
create table event_trigger_fire2 (a int);
101+
alter event trigger regress_event_trigger enable replica;
102+
-- fires only _trigger
103+
create table event_trigger_fire3 (a int);
104+
NOTICE: test_event_trigger: ddl_command_start CREATE TABLE
105+
alter event trigger regress_event_trigger enable always;
106+
-- fires only _trigger
107+
create table event_trigger_fire4 (a int);
108+
NOTICE: test_event_trigger: ddl_command_start CREATE TABLE
109+
reset session_replication_role;
110+
-- fires all three
111+
create table event_trigger_fire5 (a int);
112+
NOTICE: test_event_trigger: ddl_command_start CREATE TABLE
113+
NOTICE: test_event_trigger: ddl_command_start CREATE TABLE
114+
NOTICE: test_event_trigger: ddl_command_end CREATE TABLE
115+
-- clean up
116+
alter event trigger regress_event_trigger disable;
117+
drop table event_trigger_fire2, event_trigger_fire3, event_trigger_fire4, event_trigger_fire5;
118+
NOTICE: test_event_trigger: ddl_command_end DROP TABLE
101119
-- regress_event_trigger_end should fire on these commands
102120
grant all on table event_trigger_fire1 to public;
103121
NOTICE: test_event_trigger: ddl_command_end GRANT

src/test/regress/expected/rules.out

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3233,3 +3233,37 @@ CREATE RULE parted_table_insert AS ON INSERT to parted_table
32333233
DO INSTEAD INSERT INTO parted_table_1 VALUES (NEW.*);
32343234
ALTER RULE parted_table_insert ON parted_table RENAME TO parted_table_insert_redirect;
32353235
DROP TABLE parted_table;
3236+
--
3237+
-- Test enabling/disabling
3238+
--
3239+
CREATE TABLE ruletest1 (a int);
3240+
CREATE TABLE ruletest2 (b int);
3241+
CREATE RULE rule1 AS ON INSERT TO ruletest1
3242+
DO INSTEAD INSERT INTO ruletest2 VALUES (NEW.*);
3243+
INSERT INTO ruletest1 VALUES (1);
3244+
ALTER TABLE ruletest1 DISABLE RULE rule1;
3245+
INSERT INTO ruletest1 VALUES (2);
3246+
ALTER TABLE ruletest1 ENABLE RULE rule1;
3247+
SET session_replication_role = replica;
3248+
INSERT INTO ruletest1 VALUES (3);
3249+
ALTER TABLE ruletest1 ENABLE REPLICA RULE rule1;
3250+
INSERT INTO ruletest1 VALUES (4);
3251+
RESET session_replication_role;
3252+
INSERT INTO ruletest1 VALUES (5);
3253+
SELECT * FROM ruletest1;
3254+
a
3255+
---
3256+
2
3257+
3
3258+
5
3259+
(3 rows)
3260+
3261+
SELECT * FROM ruletest2;
3262+
b
3263+
---
3264+
1
3265+
4
3266+
(2 rows)
3267+
3268+
DROP TABLE ruletest1;
3269+
DROP TABLE ruletest2;

src/test/regress/expected/triggers.out

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -569,6 +569,12 @@ insert into trigtest default values;
569569
alter table trigtest enable trigger trigtest_a_stmt_tg;
570570
insert into trigtest default values;
571571
NOTICE: trigtest INSERT AFTER STATEMENT
572+
set session_replication_role = replica;
573+
insert into trigtest default values; -- does not trigger
574+
alter table trigtest enable always trigger trigtest_a_stmt_tg;
575+
insert into trigtest default values; -- now it does
576+
NOTICE: trigtest INSERT AFTER STATEMENT
577+
reset session_replication_role;
572578
insert into trigtest2 values(1);
573579
insert into trigtest2 values(2);
574580
delete from trigtest where i=2;
@@ -595,7 +601,9 @@ select * from trigtest;
595601
3
596602
4
597603
5
598-
(3 rows)
604+
6
605+
7
606+
(5 rows)
599607

600608
drop table trigtest2;
601609
drop table trigtest;

src/test/regress/sql/event_trigger.sql

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -89,15 +89,26 @@ create event trigger regress_event_trigger_noperms on ddl_command_start
8989
execute procedure test_event_trigger();
9090
reset role;
9191

92-
-- all OK
92+
-- test enabling and disabling
93+
alter event trigger regress_event_trigger disable;
94+
-- fires _trigger2 and _trigger_end should fire, but not _trigger
95+
create table event_trigger_fire1 (a int);
96+
alter event trigger regress_event_trigger enable;
97+
set session_replication_role = replica;
98+
-- fires nothing
99+
create table event_trigger_fire2 (a int);
93100
alter event trigger regress_event_trigger enable replica;
101+
-- fires only _trigger
102+
create table event_trigger_fire3 (a int);
94103
alter event trigger regress_event_trigger enable always;
95-
alter event trigger regress_event_trigger enable;
104+
-- fires only _trigger
105+
create table event_trigger_fire4 (a int);
106+
reset session_replication_role;
107+
-- fires all three
108+
create table event_trigger_fire5 (a int);
109+
-- clean up
96110
alter event trigger regress_event_trigger disable;
97-
98-
-- regress_event_trigger2 and regress_event_trigger_end should fire, but not
99-
-- regress_event_trigger
100-
create table event_trigger_fire1 (a int);
111+
drop table event_trigger_fire2, event_trigger_fire3, event_trigger_fire4, event_trigger_fire5;
101112

102113
-- regress_event_trigger_end should fire on these commands
103114
grant all on table event_trigger_fire1 to public;

src/test/regress/sql/rules.sql

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1177,3 +1177,29 @@ CREATE RULE parted_table_insert AS ON INSERT to parted_table
11771177
DO INSTEAD INSERT INTO parted_table_1 VALUES (NEW.*);
11781178
ALTER RULE parted_table_insert ON parted_table RENAME TO parted_table_insert_redirect;
11791179
DROP TABLE parted_table;
1180+
1181+
--
1182+
-- Test enabling/disabling
1183+
--
1184+
CREATE TABLE ruletest1 (a int);
1185+
CREATE TABLE ruletest2 (b int);
1186+
1187+
CREATE RULE rule1 AS ON INSERT TO ruletest1
1188+
DO INSTEAD INSERT INTO ruletest2 VALUES (NEW.*);
1189+
1190+
INSERT INTO ruletest1 VALUES (1);
1191+
ALTER TABLE ruletest1 DISABLE RULE rule1;
1192+
INSERT INTO ruletest1 VALUES (2);
1193+
ALTER TABLE ruletest1 ENABLE RULE rule1;
1194+
SET session_replication_role = replica;
1195+
INSERT INTO ruletest1 VALUES (3);
1196+
ALTER TABLE ruletest1 ENABLE REPLICA RULE rule1;
1197+
INSERT INTO ruletest1 VALUES (4);
1198+
RESET session_replication_role;
1199+
INSERT INTO ruletest1 VALUES (5);
1200+
1201+
SELECT * FROM ruletest1;
1202+
SELECT * FROM ruletest2;
1203+
1204+
DROP TABLE ruletest1;
1205+
DROP TABLE ruletest2;

src/test/regress/sql/triggers.sql

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -401,6 +401,11 @@ alter table trigtest disable trigger user;
401401
insert into trigtest default values;
402402
alter table trigtest enable trigger trigtest_a_stmt_tg;
403403
insert into trigtest default values;
404+
set session_replication_role = replica;
405+
insert into trigtest default values; -- does not trigger
406+
alter table trigtest enable always trigger trigtest_a_stmt_tg;
407+
insert into trigtest default values; -- now it does
408+
reset session_replication_role;
404409
insert into trigtest2 values(1);
405410
insert into trigtest2 values(2);
406411
delete from trigtest where i=2;

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