aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPeter Eisentraut <peter_e@gmx.net>2018-01-18 11:24:07 -0500
committerPeter Eisentraut <peter_e@gmx.net>2018-01-18 11:24:07 -0500
commit77216cae47e3ded13f36361f60ce04ec0a709e2a (patch)
tree10e5fe0748a3eef3044182d8adc868a87c672e78 /src
parent2082b3745a7165d10788d55c5b6c609a8d39d729 (diff)
downloadpostgresql-77216cae47e3ded13f36361f60ce04ec0a709e2a.tar.gz
postgresql-77216cae47e3ded13f36361f60ce04ec0a709e2a.zip
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.
Diffstat (limited to 'src')
-rw-r--r--src/test/regress/expected/event_trigger.out30
-rw-r--r--src/test/regress/expected/rules.out34
-rw-r--r--src/test/regress/expected/triggers.out10
-rw-r--r--src/test/regress/sql/event_trigger.sql23
-rw-r--r--src/test/regress/sql/rules.sql26
-rw-r--r--src/test/regress/sql/triggers.sql5
6 files changed, 115 insertions, 13 deletions
diff --git a/src/test/regress/expected/event_trigger.out b/src/test/regress/expected/event_trigger.out
index 906dcb8b319..88c68030815 100644
--- a/src/test/regress/expected/event_trigger.out
+++ b/src/test/regress/expected/event_trigger.out
@@ -88,16 +88,34 @@ create event trigger regress_event_trigger_noperms on ddl_command_start
ERROR: permission denied to create event trigger "regress_event_trigger_noperms"
HINT: Must be superuser to create an event trigger.
reset role;
--- all OK
-alter event trigger regress_event_trigger enable replica;
-alter event trigger regress_event_trigger enable always;
-alter event trigger regress_event_trigger enable;
+-- test enabling and disabling
alter event trigger regress_event_trigger disable;
--- regress_event_trigger2 and regress_event_trigger_end should fire, but not
--- regress_event_trigger
+-- fires _trigger2 and _trigger_end should fire, but not _trigger
create table event_trigger_fire1 (a int);
NOTICE: test_event_trigger: ddl_command_start CREATE TABLE
NOTICE: test_event_trigger: ddl_command_end CREATE TABLE
+alter event trigger regress_event_trigger enable;
+set session_replication_role = replica;
+-- fires nothing
+create table event_trigger_fire2 (a int);
+alter event trigger regress_event_trigger enable replica;
+-- fires only _trigger
+create table event_trigger_fire3 (a int);
+NOTICE: test_event_trigger: ddl_command_start CREATE TABLE
+alter event trigger regress_event_trigger enable always;
+-- fires only _trigger
+create table event_trigger_fire4 (a int);
+NOTICE: test_event_trigger: ddl_command_start CREATE TABLE
+reset session_replication_role;
+-- fires all three
+create table event_trigger_fire5 (a int);
+NOTICE: test_event_trigger: ddl_command_start CREATE TABLE
+NOTICE: test_event_trigger: ddl_command_start CREATE TABLE
+NOTICE: test_event_trigger: ddl_command_end CREATE TABLE
+-- clean up
+alter event trigger regress_event_trigger disable;
+drop table event_trigger_fire2, event_trigger_fire3, event_trigger_fire4, event_trigger_fire5;
+NOTICE: test_event_trigger: ddl_command_end DROP TABLE
-- regress_event_trigger_end should fire on these commands
grant all on table event_trigger_fire1 to public;
NOTICE: test_event_trigger: ddl_command_end GRANT
diff --git a/src/test/regress/expected/rules.out b/src/test/regress/expected/rules.out
index f1c1b44d6fb..5433944c6a0 100644
--- a/src/test/regress/expected/rules.out
+++ b/src/test/regress/expected/rules.out
@@ -3233,3 +3233,37 @@ CREATE RULE parted_table_insert AS ON INSERT to parted_table
DO INSTEAD INSERT INTO parted_table_1 VALUES (NEW.*);
ALTER RULE parted_table_insert ON parted_table RENAME TO parted_table_insert_redirect;
DROP TABLE parted_table;
+--
+-- Test enabling/disabling
+--
+CREATE TABLE ruletest1 (a int);
+CREATE TABLE ruletest2 (b int);
+CREATE RULE rule1 AS ON INSERT TO ruletest1
+ DO INSTEAD INSERT INTO ruletest2 VALUES (NEW.*);
+INSERT INTO ruletest1 VALUES (1);
+ALTER TABLE ruletest1 DISABLE RULE rule1;
+INSERT INTO ruletest1 VALUES (2);
+ALTER TABLE ruletest1 ENABLE RULE rule1;
+SET session_replication_role = replica;
+INSERT INTO ruletest1 VALUES (3);
+ALTER TABLE ruletest1 ENABLE REPLICA RULE rule1;
+INSERT INTO ruletest1 VALUES (4);
+RESET session_replication_role;
+INSERT INTO ruletest1 VALUES (5);
+SELECT * FROM ruletest1;
+ a
+---
+ 2
+ 3
+ 5
+(3 rows)
+
+SELECT * FROM ruletest2;
+ b
+---
+ 1
+ 4
+(2 rows)
+
+DROP TABLE ruletest1;
+DROP TABLE ruletest2;
diff --git a/src/test/regress/expected/triggers.out b/src/test/regress/expected/triggers.out
index 49cd7a13387..9a7aafcc965 100644
--- a/src/test/regress/expected/triggers.out
+++ b/src/test/regress/expected/triggers.out
@@ -569,6 +569,12 @@ insert into trigtest default values;
alter table trigtest enable trigger trigtest_a_stmt_tg;
insert into trigtest default values;
NOTICE: trigtest INSERT AFTER STATEMENT
+set session_replication_role = replica;
+insert into trigtest default values; -- does not trigger
+alter table trigtest enable always trigger trigtest_a_stmt_tg;
+insert into trigtest default values; -- now it does
+NOTICE: trigtest INSERT AFTER STATEMENT
+reset session_replication_role;
insert into trigtest2 values(1);
insert into trigtest2 values(2);
delete from trigtest where i=2;
@@ -595,7 +601,9 @@ select * from trigtest;
3
4
5
-(3 rows)
+ 6
+ 7
+(5 rows)
drop table trigtest2;
drop table trigtest;
diff --git a/src/test/regress/sql/event_trigger.sql b/src/test/regress/sql/event_trigger.sql
index b65bf3ec664..ef7faf0ab76 100644
--- a/src/test/regress/sql/event_trigger.sql
+++ b/src/test/regress/sql/event_trigger.sql
@@ -89,15 +89,26 @@ create event trigger regress_event_trigger_noperms on ddl_command_start
execute procedure test_event_trigger();
reset role;
--- all OK
+-- test enabling and disabling
+alter event trigger regress_event_trigger disable;
+-- fires _trigger2 and _trigger_end should fire, but not _trigger
+create table event_trigger_fire1 (a int);
+alter event trigger regress_event_trigger enable;
+set session_replication_role = replica;
+-- fires nothing
+create table event_trigger_fire2 (a int);
alter event trigger regress_event_trigger enable replica;
+-- fires only _trigger
+create table event_trigger_fire3 (a int);
alter event trigger regress_event_trigger enable always;
-alter event trigger regress_event_trigger enable;
+-- fires only _trigger
+create table event_trigger_fire4 (a int);
+reset session_replication_role;
+-- fires all three
+create table event_trigger_fire5 (a int);
+-- clean up
alter event trigger regress_event_trigger disable;
-
--- regress_event_trigger2 and regress_event_trigger_end should fire, but not
--- regress_event_trigger
-create table event_trigger_fire1 (a int);
+drop table event_trigger_fire2, event_trigger_fire3, event_trigger_fire4, event_trigger_fire5;
-- regress_event_trigger_end should fire on these commands
grant all on table event_trigger_fire1 to public;
diff --git a/src/test/regress/sql/rules.sql b/src/test/regress/sql/rules.sql
index 0ded0f01d29..0823c02acf0 100644
--- a/src/test/regress/sql/rules.sql
+++ b/src/test/regress/sql/rules.sql
@@ -1177,3 +1177,29 @@ CREATE RULE parted_table_insert AS ON INSERT to parted_table
DO INSTEAD INSERT INTO parted_table_1 VALUES (NEW.*);
ALTER RULE parted_table_insert ON parted_table RENAME TO parted_table_insert_redirect;
DROP TABLE parted_table;
+
+--
+-- Test enabling/disabling
+--
+CREATE TABLE ruletest1 (a int);
+CREATE TABLE ruletest2 (b int);
+
+CREATE RULE rule1 AS ON INSERT TO ruletest1
+ DO INSTEAD INSERT INTO ruletest2 VALUES (NEW.*);
+
+INSERT INTO ruletest1 VALUES (1);
+ALTER TABLE ruletest1 DISABLE RULE rule1;
+INSERT INTO ruletest1 VALUES (2);
+ALTER TABLE ruletest1 ENABLE RULE rule1;
+SET session_replication_role = replica;
+INSERT INTO ruletest1 VALUES (3);
+ALTER TABLE ruletest1 ENABLE REPLICA RULE rule1;
+INSERT INTO ruletest1 VALUES (4);
+RESET session_replication_role;
+INSERT INTO ruletest1 VALUES (5);
+
+SELECT * FROM ruletest1;
+SELECT * FROM ruletest2;
+
+DROP TABLE ruletest1;
+DROP TABLE ruletest2;
diff --git a/src/test/regress/sql/triggers.sql b/src/test/regress/sql/triggers.sql
index 81c632ef7e4..47b5bde3902 100644
--- a/src/test/regress/sql/triggers.sql
+++ b/src/test/regress/sql/triggers.sql
@@ -401,6 +401,11 @@ alter table trigtest disable trigger user;
insert into trigtest default values;
alter table trigtest enable trigger trigtest_a_stmt_tg;
insert into trigtest default values;
+set session_replication_role = replica;
+insert into trigtest default values; -- does not trigger
+alter table trigtest enable always trigger trigtest_a_stmt_tg;
+insert into trigtest default values; -- now it does
+reset session_replication_role;
insert into trigtest2 values(1);
insert into trigtest2 values(2);
delete from trigtest where i=2;