diff options
Diffstat (limited to 'src/pl/plperl')
| -rw-r--r-- | src/pl/plperl/expected/plperl_trigger.out | 78 | ||||
| -rw-r--r-- | src/pl/plperl/plperl.c | 2 | ||||
| -rw-r--r-- | src/pl/plperl/sql/plperl_trigger.sql | 14 |
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(); |
