summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authormartinko2013-03-19 15:04:49 +0000
committermartinko2013-03-19 15:04:49 +0000
commit05e2eabfb67d439e1922647dc1bd7f086dc9c021 (patch)
tree1bd941cf562fad575fcff77f978551b8e9b9194c /sql
parentf43936a82500dae8e82f05d050cd71de9124d974 (diff)
londiste.create_trigger: added check for after-trigger being overshadowed by skip-trigger
Diffstat (limited to 'sql')
-rw-r--r--sql/londiste/functions/londiste.create_trigger.sql22
1 files changed, 16 insertions, 6 deletions
diff --git a/sql/londiste/functions/londiste.create_trigger.sql b/sql/londiste/functions/londiste.create_trigger.sql
index 01cf6e4f..863bcadc 100644
--- a/sql/londiste/functions/londiste.create_trigger.sql
+++ b/sql/londiste/functions/londiste.create_trigger.sql
@@ -150,14 +150,24 @@ begin
_extra_args := array_append(_extra_args, quote_literal('deny'));
end if;
- -- if skip param given, rename previous skip triggers and prefix current
- if _skip then
+ if _skip or lg_pos = 'after' then
-- get count and name of existing skip triggers
select count(*), min(t.tgname)
- into _skip_trg_count, _skip_trg_name
- from pg_catalog.pg_trigger t
- where t.tgrelid = londiste.find_table_oid(i_dest_table)
- and position(E'\\000SKIP\\000'::bytea in tgargs) > 0;
+ into _skip_trg_count, _skip_trg_name
+ from pg_catalog.pg_trigger t
+ where t.tgrelid = londiste.find_table_oid(i_dest_table)
+ and position(E'\\000SKIP\\000'::bytea in tgargs) > 0;
+ end if;
+
+ -- make sure new trigger won't be effectively inactive
+ if lg_pos = 'after' and _skip_trg_count > 0 then
+ select 403, 'AFTER trigger cannot work with SKIP trigger(s)'
+ into ret_code, ret_note;
+ return;
+ end if;
+
+ -- if skip param given, rename previous skip triggers and prefix current
+ if _skip then
-- if no previous skip triggers, prefix name and add SKIP to args
if _skip_trg_count = 0 then
trigger_name := _skip_prefix || trigger_name;