From 03f4dd7086797e43db64a47b12e7ce72cb962dec Mon Sep 17 00:00:00 2001 From: Kirill Solomko Date: Mon, 25 Jan 2021 15:30:51 +0100 Subject: [PATCH] TT#109103 add voip blob preferences support * voip_preferences 'type' can be 2, means' blob' * voip_preferences data_type enum add: 'blob' * 4 new tables: - voip_dom_preferences_blob - voip_usr_preferences_blob - voip_contract_preferences_blob - voip_peer_preferences_blob (they are innodb page compressed) * triggers on insert/delete on these tables cause the 'value' field of the related voip_usr/dom/contract/peer_preferences table to be updated with the id of the record, required for kamailio to find the related blob record without replicating the blob data * procedure for adding a new blob entry: 1. insert into voip_usr_preferences with the empty value 2. insert into voip_usr_preferences_blob 3. the voip_usr_preferences value will be automatically updated with the id of the created blob record Change-Id: I9330613f50de20bc098a94f3fc28cfd4b3ad3c68 --- db_scripts/diff/15661.down | 18 +++++ db_scripts/diff/15661.up | 143 +++++++++++++++++++++++++++++++++++++ 2 files changed, 161 insertions(+) create mode 100644 db_scripts/diff/15661.down create mode 100644 db_scripts/diff/15661.up diff --git a/db_scripts/diff/15661.down b/db_scripts/diff/15661.down new file mode 100644 index 00000000..5dad1d90 --- /dev/null +++ b/db_scripts/diff/15661.down @@ -0,0 +1,18 @@ +USE provisioning; + +DROP TRIGGER IF EXISTS voip_dom_preferences_blob_insert; +DROP TRIGGER IF EXISTS voip_dom_preferences_blob_delete; +DROP TRIGGER IF EXISTS voip_contract_preferences_blob_insert; +DROP TRIGGER IF EXISTS voip_contract_preferences_blob_delete; +DROP TRIGGER IF EXISTS voip_usr_preferences_blob_insert; +DROP TRIGGER IF EXISTS voip_usr_preferences_blob_delete; +DROP TRIGGER IF EXISTS voip_peer_preferences_blob_insert; +DROP TRIGGER IF EXISTS voip_peer_preferences_blob_delete; + +DROP TABLE voip_dom_preferences_blob; +DROP TABLE voip_contract_preferences_blob; +DROP TABLE voip_usr_preferences_blob; +DROP TABLE voip_peer_preferences_blob; + +ALTER TABLE voip_preferences MODIFY COLUMN data_type enum('boolean','int','string','enum'); + diff --git a/db_scripts/diff/15661.up b/db_scripts/diff/15661.up new file mode 100644 index 00000000..febc2427 --- /dev/null +++ b/db_scripts/diff/15661.up @@ -0,0 +1,143 @@ +USE provisioning; + +CREATE TABLE voip_dom_preferences_blob ( + id INT PRIMARY KEY AUTO_INCREMENT, + preference_id INT(11) UNSIGNED NOT NULL, + content_type VARCHAR(128) NOT NULL DEFAULT 'application/data', + value MEDIUMBLOB, + UNIQUE KEY (preference_id), + FOREIGN KEY fk_dom_blob_pref_id (preference_id) REFERENCES voip_dom_preferences (id) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB PAGE_COMPRESSED=1; + +CREATE TABLE voip_contract_preferences_blob ( + id INT PRIMARY KEY AUTO_INCREMENT, + preference_id INT(11) UNSIGNED NOT NULL, + content_type VARCHAR(128) NOT NULL DEFAULT 'application/data', + value MEDIUMBLOB, + UNIQUE KEY (preference_id), + FOREIGN KEY fk_contract_blob_pref_id (preference_id) REFERENCES voip_contract_preferences (id) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB PAGE_COMPRESSED=1; + +CREATE TABLE voip_usr_preferences_blob ( + id INT PRIMARY KEY AUTO_INCREMENT, + preference_id INT(11) UNSIGNED NOT NULL, + content_type VARCHAR(128) NOT NULL DEFAULT 'application/data', + value MEDIUMBLOB, + UNIQUE KEY (preference_id), + FOREIGN KEY fk_usr_blob_pref_id (preference_id) REFERENCES voip_usr_preferences (id) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB PAGE_COMPRESSED=1; + +CREATE TABLE voip_peer_preferences_blob ( + id INT PRIMARY KEY AUTO_INCREMENT, + preference_id INT(11) UNSIGNED NOT NULL, + content_type VARCHAR(128) NOT NULL DEFAULT 'application/data', + value MEDIUMBLOB, + UNIQUE KEY (preference_id), + FOREIGN KEY fk_peer_blob_pref_id (preference_id) REFERENCES voip_peer_preferences (id) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB PAGE_COMPRESSED=1; + +ALTER TABLE voip_preferences MODIFY COLUMN data_type enum('boolean','int','string','enum','blob'); + +DROP TRIGGER IF EXISTS voip_dom_preferences_blob_insert; +DELIMITER $$ +CREATE TRIGGER voip_dom_prefences_blob_insert AFTER INSERT ON voip_dom_preferences_blob + FOR EACH ROW BEGIN + + UPDATE voip_dom_preferences + SET value = NEW.id + WHERE id = NEW.preference_id; + + END +$$ +DELIMITER ; + +DROP TRIGGER IF EXISTS voip_dom_preferences_blob_delete; +DELIMITER $$ +CREATE TRIGGER voip_dom_prefences_blob_delete AFTER DELETE ON voip_dom_preferences_blob + FOR EACH ROW BEGIN + + UPDATE voip_dom_preferences + SET value = '' + WHERE id = OLD.preference_id; + + END +$$ +DELIMITER ; + +DROP TRIGGER IF EXISTS voip_contract_preferences_blob_insert; +DELIMITER $$ +CREATE TRIGGER voip_contract_prefences_blob_insert AFTER INSERT ON voip_contract_preferences_blob + FOR EACH ROW BEGIN + + UPDATE voip_contract_preferences + SET value = NEW.id + WHERE id = NEW.preference_id; + + END +$$ +DELIMITER ; + +DROP TRIGGER IF EXISTS voip_contract_preferences_blob_delete; +DELIMITER $$ +CREATE TRIGGER voip_contract_preferences_blob_delete AFTER DELETE ON voip_contract_preferences_blob + FOR EACH ROW BEGIN + + UPDATE voip_contract_preferences + SET value = '' + WHERE preference_id = OLD.preference_id; + + END +$$ +DELIMITER ; + +DROP TRIGGER IF EXISTS voip_usr_preferences_blob_insert; +DELIMITER $$ +CREATE TRIGGER voip_usr_preferences_blob_insert AFTER INSERT ON voip_usr_preferences_blob + FOR EACH ROW BEGIN + + UPDATE voip_usr_preferences + SET value = NEW.id + WHERE id = NEW.preference_id; + + END +$$ +DELIMITER ; + +DROP TRIGGER IF EXISTS voip_usr_preferences_blob_delete; +DELIMITER $$ +CREATE TRIGGER voip_usr_preferences_blob_delete AFTER DELETE ON voip_usr_preferences_blob + FOR EACH ROW BEGIN + + UPDATE voip_usr_preferences + SET value = '' + WHERE id = OLD.preference_id; + + END +$$ +DELIMITER ; + +DROP TRIGGER IF EXISTS voip_peer_preferences_blob_insert; +DELIMITER $$ +CREATE TRIGGER voip_peer_preferences_blob_insert AFTER INSERT ON voip_peer_preferences_blob + FOR EACH ROW BEGIN + + UPDATE voip_peer_preferences + SET value = NEW.id + WHERE id = NEW.preference_id; + + END +$$ +DELIMITER ; + +DROP TRIGGER IF EXISTS voip_peer_preferences_blob_delete; +DELIMITER $$ +CREATE TRIGGER voip_peer_preferences_blob_delete AFTER DELETE ON voip_peer_preferences_blob + FOR EACH ROW BEGIN + + UPDATE voip_peer_preferences + SET value = '' + WHERE id = OLD.preference_id; + + END +$$ +DELIMITER ;