Add tests for session_replication_role
authorPeter Eisentraut <peter_e@gmx.net>
Thu, 18 Jan 2018 16:24:07 +0000 (11:24 -0500)
committerPeter Eisentraut <peter_e@gmx.net>
Thu, 18 Jan 2018 16:24:07 +0000 (11:24 -0500)
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.

src/test/regress/expected/event_trigger.out
src/test/regress/expected/rules.out
src/test/regress/expected/triggers.out
src/test/regress/sql/event_trigger.sql
src/test/regress/sql/rules.sql
src/test/regress/sql/triggers.sql

index 906dcb8b319bad03f85563c580a087d1bd71f6eb..88c680308155207b2996dd259eb13541bb5e27ea 100644 (file)
@@ -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
index f1c1b44d6fbdeca943508f5595cb73014351db8c..5433944c6a0780e267d634470b14fe73b2a7b611 100644 (file)
@@ -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;
index 49cd7a13387f5e1b5948f7b9cbfd1d8b2005ae83..9a7aafcc965a0b3c2fa1b800c173d741d2b31c6c 100644 (file)
@@ -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;
index b65bf3ec664f068a1e337eb92c755fb5e329819b..ef7faf0ab76324b610a20b455d73fa4aa22e62ae 100644 (file)
@@ -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;
index 0ded0f01d29119419a4de8a971579b8eba00aefe..0823c02acf0babf72cb9a6207f2b16bb006c0034 100644 (file)
@@ -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;
index 81c632ef7e4a81a3d4c25ec83e2d90be3fc522a2..47b5bde390263bd82c57ccc3d56858a524e72a32 100644 (file)
@@ -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;