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).
remotes/svn/2.7
Christian Veigl 13 years ago
parent 42696be053
commit eb411a38fb

@ -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 ;

@ -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 ;
Loading…
Cancel
Save