diff --git a/library/Director/Db/Migration.php b/library/Director/Db/Migration.php index c85adf0b..bc7aa6d0 100644 --- a/library/Director/Db/Migration.php +++ b/library/Director/Db/Migration.php @@ -40,7 +40,7 @@ class Migration try { foreach ($queries as $query) { - if (preg_match('/^OPTIMIZE /i', $query)) { + if (preg_match('/^(?:OPTIMIZE|EXECUTE) /i', $query)) { $db->query($query); } else { $db->exec($query); diff --git a/schema/mysql-migrations/upgrade_124.sql b/schema/mysql-migrations/upgrade_124.sql index 471c13c6..c7e218f4 100644 --- a/schema/mysql-migrations/upgrade_124.sql +++ b/schema/mysql-migrations/upgrade_124.sql @@ -1,21 +1,3 @@ -ALTER TABLE icinga_service_set - DROP FOREIGN KEY icinga_service_set_host; - -ALTER TABLE icinga_service_set - ADD FOREIGN KEY icinga_service_set_host (host_id) - REFERENCES icinga_host (id) - ON DELETE CASCADE - ON UPDATE CASCADE; - -ALTER TABLE icinga_service - DROP FOREIGN KEY icinga_service_service_set; - -ALTER TABLE icinga_service - ADD CONSTRAINT icinga_service_service_set FOREIGN KEY (service_set_id) - REFERENCES icinga_service_set (id) - ON DELETE CASCADE - ON UPDATE CASCADE; - INSERT INTO director_schema_migration (schema_version, migration_time) VALUES (124, NOW()); diff --git a/schema/mysql-migrations/upgrade_126.sql b/schema/mysql-migrations/upgrade_126.sql new file mode 100644 index 00000000..3df3144c --- /dev/null +++ b/schema/mysql-migrations/upgrade_126.sql @@ -0,0 +1,193 @@ +SET @stmt = (SELECT IF( + (SELECT EXISTS( + SELECT * FROM information_schema.table_constraints + WHERE + table_schema = DATABASE() + AND table_name = 'icinga_service_set' + AND constraint_name = 'icinga_service_set_host' + )), + 'ALTER TABLE icinga_service_set DROP FOREIGN KEY icinga_service_set_host', + 'SELECT 1' +)); + +PREPARE stmt FROM @stmt; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; +SET @stmt = NULL; + +SET @stmt = (SELECT IF( + (SELECT EXISTS( + SELECT 1 + FROM information_schema.statistics + WHERE table_schema = SCHEMA() + AND table_name = 'icinga_service_set' + AND index_name = 'icinga_service_set_host' + )), + 'ALTER TABLE icinga_service_set DROP INDEX icinga_service_set_host', + 'SELECT 1' +)); + +PREPARE stmt FROM @stmt; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; +SET @stmt = NULL; + + +SET @stmt = (SELECT IF( + (SELECT EXISTS( + SELECT * FROM information_schema.table_constraints + WHERE + table_schema = DATABASE() + AND table_name = 'icinga_service_set' + AND constraint_name = 'icinga_service_set_ibfk_1' + )), + 'ALTER TABLE icinga_service_set DROP FOREIGN KEY icinga_service_set_ibfk_1', + 'SELECT 1' +)); + +PREPARE stmt FROM @stmt; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; +SET @stmt = NULL; + +SET @stmt = (SELECT IF( + (SELECT EXISTS( + SELECT 1 + FROM information_schema.statistics + WHERE table_schema = SCHEMA() + AND table_name = 'icinga_service_set' + AND index_name = 'icinga_service_set_ibfk_1' + )), + 'ALTER TABLE icinga_service_set DROP INDEX icinga_service_set_ibfk_1', + 'SELECT 1' +)); + +PREPARE stmt FROM @stmt; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; +SET @stmt = NULL; + + +SET @stmt = (SELECT IF( + (SELECT EXISTS( + SELECT * FROM information_schema.table_constraints + WHERE + table_schema = DATABASE() + AND table_name = 'icinga_service_set' + AND constraint_name = 'icinga_service_set_ibfk_2' + )), + 'ALTER TABLE icinga_service_set DROP FOREIGN KEY icinga_service_set_ibfk_2', + 'SELECT 1' +)); + +PREPARE stmt FROM @stmt; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; +SET @stmt = NULL; + +SET @stmt = (SELECT IF( + (SELECT EXISTS( + SELECT 1 + FROM information_schema.statistics + WHERE table_schema = SCHEMA() + AND table_name = 'icinga_service_set' + AND index_name = 'icinga_service_set_ibfk_2' + )), + 'ALTER TABLE icinga_service_set DROP INDEX icinga_service_set_ibfk_2', + 'SELECT 1' +)); + +PREPARE stmt FROM @stmt; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; +SET @stmt = NULL; + + + +SET @stmt = (SELECT IF( + (SELECT EXISTS( + SELECT * FROM information_schema.table_constraints + WHERE + table_schema = DATABASE() + AND table_name = 'icinga_service' + AND constraint_name = 'icinga_service_service_set' + )), + 'ALTER TABLE icinga_service DROP FOREIGN KEY icinga_service_service_set', + 'SELECT 1' +)); + +PREPARE stmt FROM @stmt; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; +SET @stmt = NULL; + +SET @stmt = (SELECT IF( + (SELECT EXISTS( + SELECT 1 + FROM information_schema.statistics + WHERE table_schema = SCHEMA() + AND table_name = 'icinga_service' + AND index_name = 'icinga_service_service_set' + )), + 'ALTER TABLE icinga_service DROP INDEX icinga_service_service_set', + 'SELECT 1' +)); + +PREPARE stmt FROM @stmt; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; +SET @stmt = NULL; + + +SET @stmt = (SELECT IF( + (SELECT EXISTS( + SELECT * FROM information_schema.table_constraints + WHERE + table_schema = DATABASE() + AND table_name = 'icinga_service' + AND constraint_name = 'icinga_service_ibfk_1' + )), + 'ALTER TABLE icinga_service DROP FOREIGN KEY icinga_service_ibfk_1', + 'SELECT 1' +)); + +PREPARE stmt FROM @stmt; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; +SET @stmt = NULL; + +SET @stmt = (SELECT IF( + (SELECT EXISTS( + SELECT 1 + FROM information_schema.statistics + WHERE table_schema = SCHEMA() + AND table_name = 'icinga_service' + AND index_name = 'icinga_service_ibfk_1' + )), + 'ALTER TABLE icinga_service_set DROP INDEX icinga_service_ibfk_1', + 'SELECT 1' +)); + +PREPARE stmt FROM @stmt; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; +SET @stmt = NULL; + + +ALTER TABLE icinga_service_set + ADD CONSTRAINT icinga_service_set_host + FOREIGN KEY host (host_id) + REFERENCES icinga_host (id) + ON DELETE CASCADE + ON UPDATE CASCADE; + +ALTER TABLE icinga_service + ADD CONSTRAINT icinga_service_service_set + FOREIGN KEY service_set (service_set_id) + REFERENCES icinga_service_set (id) + ON DELETE CASCADE + ON UPDATE CASCADE; + +INSERT INTO director_schema_migration + (schema_version, migration_time) + VALUES (126, NOW()); diff --git a/schema/mysql.sql b/schema/mysql.sql index adb65376..62e35b02 100644 --- a/schema/mysql.sql +++ b/schema/mysql.sql @@ -541,8 +541,8 @@ CREATE TABLE icinga_service_set ( PRIMARY KEY (id), UNIQUE KEY object_key (object_name, host_id), CONSTRAINT icinga_service_set_host - FOREIGN KEY host (host_id) - REFERENCES icinga_host (id) + FOREIGN KEY host (host_id) + REFERENCES icinga_host (id) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; @@ -1370,4 +1370,4 @@ CREATE TABLE sync_run ( INSERT INTO director_schema_migration (schema_version, migration_time) - VALUES (125, NOW()); + VALUES (126, NOW());