From ba48beb91bfc2efdbc94836fd9c66386b6e7ce73 Mon Sep 17 00:00:00 2001 From: Rene Krenn Date: Fri, 9 Feb 2018 16:06:29 +0100 Subject: [PATCH] TT#32964 fix enum_set_default trigger + add default pref values only if not existing yet + do not add "0" default values for fromer int prefs such as "lock" Change-Id: Ia726fd66f4e3261e6f450877612ece371d744408 --- db_scripts/diff/15382.down | 30 +++++++++++++++++++++++++ db_scripts/diff/15382.up | 45 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 75 insertions(+) create mode 100644 db_scripts/diff/15382.down create mode 100644 db_scripts/diff/15382.up diff --git a/db_scripts/diff/15382.down b/db_scripts/diff/15382.down new file mode 100644 index 00000000..33af73b3 --- /dev/null +++ b/db_scripts/diff/15382.down @@ -0,0 +1,30 @@ +use provisioning; + +DROP TRIGGER IF EXISTS enum_set_default; + +DELIMITER ;; + +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; + IF (NEW.prof_pref=1 AND NEW.default_val = 1 AND NEW.value IS NOT NULL) THEN + INSERT into voip_prof_preferences (profile_id, attribute_id, value) + SELECT id, NEW.preference_id, NEW.value + FROM voip_subscriber_profiles; + END IF; +END ;; +DELIMITER ; diff --git a/db_scripts/diff/15382.up b/db_scripts/diff/15382.up new file mode 100644 index 00000000..ab37ae1a --- /dev/null +++ b/db_scripts/diff/15382.up @@ -0,0 +1,45 @@ +use provisioning; + +DROP TRIGGER IF EXISTS enum_set_default; + +DELIMITER ;; + +CREATE TRIGGER enum_set_default AFTER INSERT ON voip_preferences_enum +FOR EACH ROW BEGIN + + DECLARE do_insert tinyint(3) unsigned; + + SELECT IF(NEW.default_val = 1 AND NEW.value IS NOT NULL + AND (a.attribute NOT IN ("lock") # list of fromer int prefs, that do not store "0" + OR NEW.value != "0"),1,0) INTO do_insert FROM voip_preferences a WHERE a.id = NEW.preference_id; + + IF (NEW.dom_pref=1 AND do_insert=1) THEN + INSERT into voip_dom_preferences (domain_id, attribute_id, value) + SELECT e.id, NEW.preference_id, NEW.value + FROM voip_domains e + LEFT JOIN voip_dom_preferences v ON v.attribute_id = NEW.preference_id AND v.domain_id = e.id + WHERE v.id IS NULL; + END IF; + IF (NEW.peer_pref=1 AND do_insert=1) THEN + INSERT into voip_peer_preferences (peer_host_id, attribute_id, value) + SELECT e.id, NEW.preference_id, NEW.value + FROM voip_peer_hosts e + LEFT JOIN voip_peer_preferences v ON v.attribute_id = NEW.preference_id AND v.peer_host_id = e.id + WHERE v.id IS NULL; + END IF; + IF (NEW.usr_pref=1 AND do_insert=1) THEN + INSERT into voip_usr_preferences (subscriber_id, attribute_id, value) + SELECT e.id, NEW.preference_id, NEW.value + FROM voip_subscribers e + LEFT JOIN voip_usr_preferences v ON v.attribute_id = NEW.preference_id AND v.subscriber_id = e.id + WHERE v.id IS NULL; + END IF; + IF (NEW.prof_pref=1 AND do_insert=1) THEN + INSERT into voip_prof_preferences (profile_id, attribute_id, value) + SELECT e.id, NEW.preference_id, NEW.value + FROM voip_subscriber_profiles e + LEFT JOIN voip_prof_preferences v ON v.attribute_id = NEW.preference_id AND v.profile_id = e.id + WHERE v.id IS NULL; + END IF; +END ;; +DELIMITER ;