From eb411a38fbc29e4f90b06e843ad5bc5b33ca98bd Mon Sep 17 00:00:00 2001 From: Christian Veigl Date: Tue, 18 Sep 2012 09:45:04 +0000 Subject: [PATCH] fix broken triggers (discovered by dtiefnig; see mantis:2123 and mantis:2121) fix trigger enum_set_default introduced with r9086 to correctly update voip_*_preferences with default values for preferences that cover more than one in (usr|dom|peer)_preferences. fix trigger enum_update introduced with r9149 to only update values of enum preferences in voip_(usr|dom|peer)_preferences that where actually set to that value (previously all preferences were updated). --- db_scripts/diff/11062.down | 39 ++++++++++++++++++++++++++++++ db_scripts/diff/11062.up | 49 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 88 insertions(+) create mode 100644 db_scripts/diff/11062.down create mode 100644 db_scripts/diff/11062.up diff --git a/db_scripts/diff/11062.down b/db_scripts/diff/11062.down new file mode 100644 index 00000000..b6d46447 --- /dev/null +++ b/db_scripts/diff/11062.down @@ -0,0 +1,39 @@ +USE provisioning; + +DROP TRIGGER enum_set_default; + +DELIMITER | + +-- update preferences for existing domains / peer hosts /subscribers +-- when enum preferences are created that use a default value +-- (does not care about reseller_id) +CREATE TRIGGER enum_set_default AFTER INSERT ON voip_preferences_enum +FOR EACH ROW BEGIN + IF (NEW.dom_pref=1 AND NEW.default_val = 1 AND NEW.value IS NOT NULL) THEN + INSERT into voip_dom_preferences (domain_id, attribute_id, value) + SELECT id, NEW.preference_id, NEW.value + FROM voip_domains; + ELSEIF (NEW.peer_pref=1 AND NEW.default_val = 1 AND NEW.value IS NOT NULL) THEN + INSERT into voip_peer_preferences (peer_host_id, attribute_id, value) + SELECT id, NEW.preference_id, NEW.value + FROM voip_peer_hosts; + ELSEIF (NEW.usr_pref=1 AND NEW.default_val = 1 AND NEW.value IS NOT NULL) THEN + INSERT into voip_usr_preferences (subscriber_id, attribute_id, value) + SELECT id, NEW.preference_id, NEW.value + FROM voip_subscribers; + END IF; +END | + +DROP TRIGGER enum_update; + +CREATE TRIGGER enum_update AFTER UPDATE ON voip_preferences_enum +FOR EACH ROW BEGIN + UPDATE voip_usr_preferences SET value=NEW.value + WHERE attribute_id=NEW.preference_id; + UPDATE voip_dom_preferences SET value=NEW.value + WHERE attribute_id=NEW.preference_id; + UPDATE voip_peer_preferences SET value=NEW.value + WHERE attribute_id=NEW.preference_id; +END | + +DELIMITER ; diff --git a/db_scripts/diff/11062.up b/db_scripts/diff/11062.up new file mode 100644 index 00000000..3a5f1920 --- /dev/null +++ b/db_scripts/diff/11062.up @@ -0,0 +1,49 @@ +USE provisioning; + +DROP TRIGGER enum_set_default; + +DELIMITER | + +-- fix trigger enum_set_default introduced with r9086 +-- to correctly update voip_*_preferences with default values +-- for preferences that cover more than one in (usr|dom|peer)_preferences. + +-- update preferences for existing domains / peer hosts /subscribers +-- when enum preferences are created that use a default value +-- (does not care about reseller_id) +CREATE TRIGGER enum_set_default AFTER INSERT ON voip_preferences_enum +FOR EACH ROW BEGIN + IF (NEW.dom_pref=1 AND NEW.default_val = 1 AND NEW.value IS NOT NULL) THEN + INSERT into voip_dom_preferences (domain_id, attribute_id, value) + SELECT id, NEW.preference_id, NEW.value + FROM voip_domains; + END IF; + IF (NEW.peer_pref=1 AND NEW.default_val = 1 AND NEW.value IS NOT NULL) THEN + INSERT into voip_peer_preferences (peer_host_id, attribute_id, value) + SELECT id, NEW.preference_id, NEW.value + FROM voip_peer_hosts; + END IF; + IF (NEW.usr_pref=1 AND NEW.default_val = 1 AND NEW.value IS NOT NULL) THEN + INSERT into voip_usr_preferences (subscriber_id, attribute_id, value) + SELECT id, NEW.preference_id, NEW.value + FROM voip_subscribers; + END IF; +END | + +-- fix trigger enum_update introduced with r9149 to only update values of +-- enum preferences in voip_(usr|dom|peer)_preferences that where actually +-- set to that value (previously all preferences were updated). + +DROP TRIGGER enum_update; + +CREATE TRIGGER enum_update AFTER UPDATE ON voip_preferences_enum +FOR EACH ROW BEGIN + UPDATE voip_usr_preferences SET value=NEW.value + WHERE attribute_id=NEW.preference_id AND value=OLD.value; + UPDATE voip_dom_preferences SET value=NEW.value + WHERE attribute_id=NEW.preference_id AND value=OLD.value; + UPDATE voip_peer_preferences SET value=NEW.value + WHERE attribute_id=NEW.preference_id AND value=OLD.value; +END | + +DELIMITER ;