summaryrefslogtreecommitdiff
path: root/src/pl/plperl
diff options
context:
space:
mode:
Diffstat (limited to 'src/pl/plperl')
-rw-r--r--src/pl/plperl/expected/plperl_trigger.out78
-rw-r--r--src/pl/plperl/plperl.c2
-rw-r--r--src/pl/plperl/sql/plperl_trigger.sql14
3 files changed, 94 insertions, 0 deletions
diff --git a/src/pl/plperl/expected/plperl_trigger.out b/src/pl/plperl/expected/plperl_trigger.out
index b5af566b27..8cd74cb4b9 100644
--- a/src/pl/plperl/expected/plperl_trigger.out
+++ b/src/pl/plperl/expected/plperl_trigger.out
@@ -124,6 +124,84 @@ NOTICE: $_TD->{when} = 'BEFORE'
CONTEXT: PL/Perl function "trigger_data"
DROP TRIGGER show_trigger_data_trig on trigger_test;
+insert into trigger_test values(1,'insert');
+CREATE VIEW trigger_test_view AS SELECT * FROM trigger_test;
+CREATE TRIGGER show_trigger_data_trig
+INSTEAD OF INSERT OR UPDATE OR DELETE ON trigger_test_view
+FOR EACH ROW EXECUTE PROCEDURE trigger_data(24,'skidoo view');
+insert into trigger_test_view values(2,'insert');
+NOTICE: $_TD->{argc} = '2'
+CONTEXT: PL/Perl function "trigger_data"
+NOTICE: $_TD->{args} = ['24', 'skidoo view']
+CONTEXT: PL/Perl function "trigger_data"
+NOTICE: $_TD->{event} = 'INSERT'
+CONTEXT: PL/Perl function "trigger_data"
+NOTICE: $_TD->{level} = 'ROW'
+CONTEXT: PL/Perl function "trigger_data"
+NOTICE: $_TD->{name} = 'show_trigger_data_trig'
+CONTEXT: PL/Perl function "trigger_data"
+NOTICE: $_TD->{new} = {'i' => '2', 'v' => 'insert'}
+CONTEXT: PL/Perl function "trigger_data"
+NOTICE: $_TD->{relid} = 'bogus:12345'
+CONTEXT: PL/Perl function "trigger_data"
+NOTICE: $_TD->{relname} = 'trigger_test_view'
+CONTEXT: PL/Perl function "trigger_data"
+NOTICE: $_TD->{table_name} = 'trigger_test_view'
+CONTEXT: PL/Perl function "trigger_data"
+NOTICE: $_TD->{table_schema} = 'public'
+CONTEXT: PL/Perl function "trigger_data"
+NOTICE: $_TD->{when} = 'INSTEAD OF'
+CONTEXT: PL/Perl function "trigger_data"
+update trigger_test_view set v = 'update' where i = 1;
+NOTICE: $_TD->{argc} = '2'
+CONTEXT: PL/Perl function "trigger_data"
+NOTICE: $_TD->{args} = ['24', 'skidoo view']
+CONTEXT: PL/Perl function "trigger_data"
+NOTICE: $_TD->{event} = 'UPDATE'
+CONTEXT: PL/Perl function "trigger_data"
+NOTICE: $_TD->{level} = 'ROW'
+CONTEXT: PL/Perl function "trigger_data"
+NOTICE: $_TD->{name} = 'show_trigger_data_trig'
+CONTEXT: PL/Perl function "trigger_data"
+NOTICE: $_TD->{new} = {'i' => '1', 'v' => 'update'}
+CONTEXT: PL/Perl function "trigger_data"
+NOTICE: $_TD->{old} = {'i' => '1', 'v' => 'insert'}
+CONTEXT: PL/Perl function "trigger_data"
+NOTICE: $_TD->{relid} = 'bogus:12345'
+CONTEXT: PL/Perl function "trigger_data"
+NOTICE: $_TD->{relname} = 'trigger_test_view'
+CONTEXT: PL/Perl function "trigger_data"
+NOTICE: $_TD->{table_name} = 'trigger_test_view'
+CONTEXT: PL/Perl function "trigger_data"
+NOTICE: $_TD->{table_schema} = 'public'
+CONTEXT: PL/Perl function "trigger_data"
+NOTICE: $_TD->{when} = 'INSTEAD OF'
+CONTEXT: PL/Perl function "trigger_data"
+delete from trigger_test_view;
+NOTICE: $_TD->{argc} = '2'
+CONTEXT: PL/Perl function "trigger_data"
+NOTICE: $_TD->{args} = ['24', 'skidoo view']
+CONTEXT: PL/Perl function "trigger_data"
+NOTICE: $_TD->{event} = 'DELETE'
+CONTEXT: PL/Perl function "trigger_data"
+NOTICE: $_TD->{level} = 'ROW'
+CONTEXT: PL/Perl function "trigger_data"
+NOTICE: $_TD->{name} = 'show_trigger_data_trig'
+CONTEXT: PL/Perl function "trigger_data"
+NOTICE: $_TD->{old} = {'i' => '1', 'v' => 'insert'}
+CONTEXT: PL/Perl function "trigger_data"
+NOTICE: $_TD->{relid} = 'bogus:12345'
+CONTEXT: PL/Perl function "trigger_data"
+NOTICE: $_TD->{relname} = 'trigger_test_view'
+CONTEXT: PL/Perl function "trigger_data"
+NOTICE: $_TD->{table_name} = 'trigger_test_view'
+CONTEXT: PL/Perl function "trigger_data"
+NOTICE: $_TD->{table_schema} = 'public'
+CONTEXT: PL/Perl function "trigger_data"
+NOTICE: $_TD->{when} = 'INSTEAD OF'
+CONTEXT: PL/Perl function "trigger_data"
+DROP VIEW trigger_test_view;
+delete from trigger_test;
DROP FUNCTION trigger_data();
CREATE OR REPLACE FUNCTION valid_id() RETURNS trigger AS $$
diff --git a/src/pl/plperl/plperl.c b/src/pl/plperl/plperl.c
index b4ced1ce8d..d3e746e6e8 100644
--- a/src/pl/plperl/plperl.c
+++ b/src/pl/plperl/plperl.c
@@ -1087,6 +1087,8 @@ plperl_trigger_build_args(FunctionCallInfo fcinfo)
when = "BEFORE";
else if (TRIGGER_FIRED_AFTER(tdata->tg_event))
when = "AFTER";
+ else if (TRIGGER_FIRED_INSTEAD(tdata->tg_event))
+ when = "INSTEAD OF";
else
when = "UNKNOWN";
hv_store_string(hv, "when", newSVstring(when));
diff --git a/src/pl/plperl/sql/plperl_trigger.sql b/src/pl/plperl/sql/plperl_trigger.sql
index d55f79aa7f..1e68759b0f 100644
--- a/src/pl/plperl/sql/plperl_trigger.sql
+++ b/src/pl/plperl/sql/plperl_trigger.sql
@@ -60,6 +60,20 @@ update trigger_test set v = 'update' where i = 1;
delete from trigger_test;
DROP TRIGGER show_trigger_data_trig on trigger_test;
+
+insert into trigger_test values(1,'insert');
+CREATE VIEW trigger_test_view AS SELECT * FROM trigger_test;
+
+CREATE TRIGGER show_trigger_data_trig
+INSTEAD OF INSERT OR UPDATE OR DELETE ON trigger_test_view
+FOR EACH ROW EXECUTE PROCEDURE trigger_data(24,'skidoo view');
+
+insert into trigger_test_view values(2,'insert');
+update trigger_test_view set v = 'update' where i = 1;
+delete from trigger_test_view;
+
+DROP VIEW trigger_test_view;
+delete from trigger_test;
DROP FUNCTION trigger_data();