From 84cbf522c9e5f7de5a78a69947df0816bff42ff0 Mon Sep 17 00:00:00 2001 From: Thomas Gelf Date: Mon, 8 Feb 2016 22:26:13 +0100 Subject: [PATCH] Migrations: implement DB migration helpers --- README.md | 3 +- application/clicommands/MigrationCommand.php | 66 +++++++++ library/Director/Db/Migration.php | 60 ++++++++ library/Director/Db/Migrations.php | 136 ++++++++++++++++++ .../upgrade_1.sql | 0 .../upgrade_10.sql | 0 .../upgrade_11.sql | 0 .../upgrade_12.sql | 0 .../upgrade_13.sql | 0 .../upgrade_14.sql | 0 .../upgrade_15.sql | 0 .../upgrade_16.sql | 0 .../upgrade_17.sql | 0 .../upgrade_18.sql | 0 .../upgrade_19.sql | 0 .../upgrade_2.sql | 0 .../upgrade_20.sql | 0 .../upgrade_21.sql | 0 .../upgrade_22.sql | 0 .../upgrade_23.sql | 0 .../upgrade_24.sql | 0 .../upgrade_25.sql | 0 .../upgrade_26.sql | 0 .../upgrade_27.sql | 0 .../upgrade_28.sql | 0 .../upgrade_29.sql | 0 .../upgrade_3.sql | 0 .../upgrade_30.sql | 0 .../upgrade_31.sql | 0 .../upgrade_32.sql | 0 .../upgrade_33.sql | 0 .../upgrade_34.sql | 0 .../upgrade_35.sql | 0 .../upgrade_36.sql | 0 .../upgrade_37.sql | 0 .../upgrade_38.sql | 0 .../upgrade_39.sql | 0 .../upgrade_4.sql | 0 .../upgrade_40.sql | 0 .../upgrade_41.sql | 0 .../upgrade_42.sql | 0 .../upgrade_43.sql | 0 .../upgrade_44.sql | 0 .../upgrade_45.sql | 0 .../upgrade_46.sql | 0 .../upgrade_47.sql | 0 .../upgrade_48.sql | 0 .../upgrade_49.sql | 0 .../upgrade_5.sql | 0 .../upgrade_50.sql | 0 .../upgrade_51.sql | 0 .../upgrade_52.sql | 0 .../upgrade_53.sql | 0 .../upgrade_54.sql | 0 .../upgrade_55.sql | 0 .../upgrade_56.sql | 0 .../upgrade_57.sql | 0 .../upgrade_58.sql | 0 .../upgrade_59.sql | 0 .../upgrade_6.sql | 0 .../upgrade_60.sql | 0 .../upgrade_61.sql | 0 .../upgrade_62.sql | 0 .../upgrade_7.sql | 0 .../upgrade_8.sql | 0 .../upgrade_9.sql | 0 schema/mysql-migrations/upgrade_63.sql | 12 ++ schema/mysql.sql | 15 +- .../upgrade-10.sql | 0 .../upgrade-11.sql | 0 .../upgrade-2.sql | 0 .../upgrade-3.sql | 0 .../upgrade-4.sql | 0 .../upgrade-5.sql | 0 .../upgrade-6.sql | 0 .../upgrade-7.sql | 0 .../upgrade-8.sql | 0 .../upgrade-9.sql | 0 .../upgrade_1.sql | 0 .../upgrade_21.sql | 0 .../upgrade_22.sql | 0 .../upgrade_23.sql | 0 .../upgrade_34.sql | 0 .../upgrade_35.sql | 0 84 files changed, 286 insertions(+), 6 deletions(-) create mode 100644 application/clicommands/MigrationCommand.php create mode 100644 library/Director/Db/Migration.php create mode 100644 library/Director/Db/Migrations.php rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_1.sql (100%) rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_10.sql (100%) rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_11.sql (100%) rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_12.sql (100%) rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_13.sql (100%) rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_14.sql (100%) rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_15.sql (100%) rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_16.sql (100%) rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_17.sql (100%) rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_18.sql (100%) rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_19.sql (100%) rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_2.sql (100%) rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_20.sql (100%) rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_21.sql (100%) rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_22.sql (100%) rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_23.sql (100%) rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_24.sql (100%) rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_25.sql (100%) rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_26.sql (100%) rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_27.sql (100%) rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_28.sql (100%) rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_29.sql (100%) rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_3.sql (100%) rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_30.sql (100%) rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_31.sql (100%) rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_32.sql (100%) rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_33.sql (100%) rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_34.sql (100%) rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_35.sql (100%) rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_36.sql (100%) rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_37.sql (100%) rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_38.sql (100%) rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_39.sql (100%) rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_4.sql (100%) rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_40.sql (100%) rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_41.sql (100%) rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_42.sql (100%) rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_43.sql (100%) rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_44.sql (100%) rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_45.sql (100%) rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_46.sql (100%) rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_47.sql (100%) rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_48.sql (100%) rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_49.sql (100%) rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_5.sql (100%) rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_50.sql (100%) rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_51.sql (100%) rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_52.sql (100%) rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_53.sql (100%) rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_54.sql (100%) rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_55.sql (100%) rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_56.sql (100%) rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_57.sql (100%) rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_58.sql (100%) rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_59.sql (100%) rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_6.sql (100%) rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_60.sql (100%) rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_61.sql (100%) rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_62.sql (100%) rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_7.sql (100%) rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_8.sql (100%) rename schema/{mysql-changes => mysql-legacy-changes}/upgrade_9.sql (100%) create mode 100644 schema/mysql-migrations/upgrade_63.sql rename schema/{pgsql-changes => pgsql-legacy-changes}/upgrade-10.sql (100%) rename schema/{pgsql-changes => pgsql-legacy-changes}/upgrade-11.sql (100%) rename schema/{pgsql-changes => pgsql-legacy-changes}/upgrade-2.sql (100%) rename schema/{pgsql-changes => pgsql-legacy-changes}/upgrade-3.sql (100%) rename schema/{pgsql-changes => pgsql-legacy-changes}/upgrade-4.sql (100%) rename schema/{pgsql-changes => pgsql-legacy-changes}/upgrade-5.sql (100%) rename schema/{pgsql-changes => pgsql-legacy-changes}/upgrade-6.sql (100%) rename schema/{pgsql-changes => pgsql-legacy-changes}/upgrade-7.sql (100%) rename schema/{pgsql-changes => pgsql-legacy-changes}/upgrade-8.sql (100%) rename schema/{pgsql-changes => pgsql-legacy-changes}/upgrade-9.sql (100%) rename schema/{pgsql-changes => pgsql-legacy-changes}/upgrade_1.sql (100%) rename schema/{pgsql-changes => pgsql-legacy-changes}/upgrade_21.sql (100%) rename schema/{pgsql-changes => pgsql-legacy-changes}/upgrade_22.sql (100%) rename schema/{pgsql-changes => pgsql-legacy-changes}/upgrade_23.sql (100%) rename schema/{pgsql-changes => pgsql-legacy-changes}/upgrade_34.sql (100%) rename schema/{pgsql-changes => pgsql-legacy-changes}/upgrade_35.sql (100%) diff --git a/README.md b/README.md index 57a0c7c2..db0aba50 100644 --- a/README.md +++ b/README.md @@ -28,8 +28,7 @@ Create Icinga Director database MySQL: mysql -e "CREATE DATABASE director; - GRANT SELECT, INSERT, UPDATE, DELETE ON director.* TO director@localhost - IDENTIFIED BY 'some-password';" + GRANT ALL ON director.* TO director@localhost IDENTIFIED BY 'some-password';" mysql director < schema/mysql.sql diff --git a/application/clicommands/MigrationCommand.php b/application/clicommands/MigrationCommand.php new file mode 100644 index 00000000..f78be6f9 --- /dev/null +++ b/application/clicommands/MigrationCommand.php @@ -0,0 +1,66 @@ + 'icingacli director migration run', + * onlyif => 'icingacli director migration pending', + * } + * + * Exit code 0 means that there are pending migrations, code 1 that there + * are no such. Use --verbose + */ + public function pendingAction() + { + if ($count = $this->migrations()->countPendingMigrations()) { + if ($this->isVerbose) { + if ($count === 1) { + echo "There is 1 pending migration\n"; + } else { + printf("There are %d pending migrations\n", $count); + } + } + + exit(0); + } else { + if ($this->isVerbose) { + echo "There are no pending migrations\n"; + } + + exit(1); + } + } + + /** + * Run any pending migrations + * + * All pending migrations will be silently applied + */ + public function runAction() + { + $this->migrations()->applyPendingMigrations(); + exit(0); + } + + protected function migrations() + { + return new Migrations($this->db()); + } +} diff --git a/library/Director/Db/Migration.php b/library/Director/Db/Migration.php new file mode 100644 index 00000000..5e67224f --- /dev/null +++ b/library/Director/Db/Migration.php @@ -0,0 +1,60 @@ +version = $version; + $this->sql = $sql; + } + + public function apply(Db $connection) + { + $db = $connection->getDbAdapter(); + $queries = preg_split('/[\n\s\t]*\;[\n\s\t]*/s', $this->sql, -1, PREG_SPLIT_NO_EMPTY); + + if (empty($queries)) { + throw new IcingaException( + 'Migration %d has no queries', + $this->version + ); + } + + try { + $db->beginTransaction(); + + foreach ($queries as $query) { + $db->exec($query); + } + + $db->commit(); + + } catch (Exception $e) { + + $db->rollback(); + throw new IcingaException( + 'Migration %d failed: %s', + $this->version, + $e->getMessage() + ); + } + + return $this; + } +} diff --git a/library/Director/Db/Migrations.php b/library/Director/Db/Migrations.php new file mode 100644 index 00000000..c48b7cd4 --- /dev/null +++ b/library/Director/Db/Migrations.php @@ -0,0 +1,136 @@ +connection = $connection; + $this->db = $connection->getDbAdapter(); + } + + public function getLastMigrationNumber() + { + try { + $query = $this->db->select()->from( + array('m' => 'director_schema_migration'), + array('schema_version' => 'MAX(schema_version)') + ); + + return (int) $this->db->fetchOne($query); + } catch (Exception $e) { + return 0; + } + } + + public function hasPendingMigrations() + { + return $this->countPendingMigrations() > 0; + } + + public function countPendingMigrations() + { + return count($this->listPendingMigrations()); + } + + public function getPendingMigrations() + { + $migrations = array(); + foreach ($this->listPendingMigrations() as $version) { + $migrations[] = new Migration( + $version, + $this->loadMigrationFile($version) + ); + } + + return $migrations; + } + + public function applyPendingMigrations() + { + foreach ($this->getPendingMigrations() as $migration) { + $migration->apply($this->connection); + } + + return $this; + } + + public function listPendingMigrations() + { + return $this->listMigrationsAfter($this->getLastMigrationNumber()); + } + + public function listAllMigrations() + { + $dir = $this->getMigrationsDir(); + if (! is_readable($dir)) { + return array(); + } + + $versions = array(); + + foreach (new DirectoryIterator($this->getMigrationsDir()) as $file) { + if($file->isDot()) continue; + $filename = $file->getFilename(); + if (preg_match('/^upgrade_(\d+)\.sql$/', $filename, $match)) { + $versions[] = $match[1]; + } + } + + sort($versions); + + return $versions; + } + + public function loadMigrationFile($version) + { + $filename = sprintf( + '%s/upgrade_%d.sql', + $this->getMigrationsDir(), + $version + ); + + return file_get_contents($filename); + } + + protected function listMigrationsAfter($version) + { + $filtered = array(); + foreach ($this->listAllMigrations() as $available) { + if ($available > $version) { + $filtered[] = $available; + } + } + + return $filtered; + } + + protected function getMigrationsDir() + { + if ($this->migrationsDir === null) { + $this->migrationsDir = dirname(dirname(dirname(__DIR__))) + . '/schema/' + . $this->connection->getDbType() + . '-migrations'; + } + + return $this->migrationsDir; + } +} diff --git a/schema/mysql-changes/upgrade_1.sql b/schema/mysql-legacy-changes/upgrade_1.sql similarity index 100% rename from schema/mysql-changes/upgrade_1.sql rename to schema/mysql-legacy-changes/upgrade_1.sql diff --git a/schema/mysql-changes/upgrade_10.sql b/schema/mysql-legacy-changes/upgrade_10.sql similarity index 100% rename from schema/mysql-changes/upgrade_10.sql rename to schema/mysql-legacy-changes/upgrade_10.sql diff --git a/schema/mysql-changes/upgrade_11.sql b/schema/mysql-legacy-changes/upgrade_11.sql similarity index 100% rename from schema/mysql-changes/upgrade_11.sql rename to schema/mysql-legacy-changes/upgrade_11.sql diff --git a/schema/mysql-changes/upgrade_12.sql b/schema/mysql-legacy-changes/upgrade_12.sql similarity index 100% rename from schema/mysql-changes/upgrade_12.sql rename to schema/mysql-legacy-changes/upgrade_12.sql diff --git a/schema/mysql-changes/upgrade_13.sql b/schema/mysql-legacy-changes/upgrade_13.sql similarity index 100% rename from schema/mysql-changes/upgrade_13.sql rename to schema/mysql-legacy-changes/upgrade_13.sql diff --git a/schema/mysql-changes/upgrade_14.sql b/schema/mysql-legacy-changes/upgrade_14.sql similarity index 100% rename from schema/mysql-changes/upgrade_14.sql rename to schema/mysql-legacy-changes/upgrade_14.sql diff --git a/schema/mysql-changes/upgrade_15.sql b/schema/mysql-legacy-changes/upgrade_15.sql similarity index 100% rename from schema/mysql-changes/upgrade_15.sql rename to schema/mysql-legacy-changes/upgrade_15.sql diff --git a/schema/mysql-changes/upgrade_16.sql b/schema/mysql-legacy-changes/upgrade_16.sql similarity index 100% rename from schema/mysql-changes/upgrade_16.sql rename to schema/mysql-legacy-changes/upgrade_16.sql diff --git a/schema/mysql-changes/upgrade_17.sql b/schema/mysql-legacy-changes/upgrade_17.sql similarity index 100% rename from schema/mysql-changes/upgrade_17.sql rename to schema/mysql-legacy-changes/upgrade_17.sql diff --git a/schema/mysql-changes/upgrade_18.sql b/schema/mysql-legacy-changes/upgrade_18.sql similarity index 100% rename from schema/mysql-changes/upgrade_18.sql rename to schema/mysql-legacy-changes/upgrade_18.sql diff --git a/schema/mysql-changes/upgrade_19.sql b/schema/mysql-legacy-changes/upgrade_19.sql similarity index 100% rename from schema/mysql-changes/upgrade_19.sql rename to schema/mysql-legacy-changes/upgrade_19.sql diff --git a/schema/mysql-changes/upgrade_2.sql b/schema/mysql-legacy-changes/upgrade_2.sql similarity index 100% rename from schema/mysql-changes/upgrade_2.sql rename to schema/mysql-legacy-changes/upgrade_2.sql diff --git a/schema/mysql-changes/upgrade_20.sql b/schema/mysql-legacy-changes/upgrade_20.sql similarity index 100% rename from schema/mysql-changes/upgrade_20.sql rename to schema/mysql-legacy-changes/upgrade_20.sql diff --git a/schema/mysql-changes/upgrade_21.sql b/schema/mysql-legacy-changes/upgrade_21.sql similarity index 100% rename from schema/mysql-changes/upgrade_21.sql rename to schema/mysql-legacy-changes/upgrade_21.sql diff --git a/schema/mysql-changes/upgrade_22.sql b/schema/mysql-legacy-changes/upgrade_22.sql similarity index 100% rename from schema/mysql-changes/upgrade_22.sql rename to schema/mysql-legacy-changes/upgrade_22.sql diff --git a/schema/mysql-changes/upgrade_23.sql b/schema/mysql-legacy-changes/upgrade_23.sql similarity index 100% rename from schema/mysql-changes/upgrade_23.sql rename to schema/mysql-legacy-changes/upgrade_23.sql diff --git a/schema/mysql-changes/upgrade_24.sql b/schema/mysql-legacy-changes/upgrade_24.sql similarity index 100% rename from schema/mysql-changes/upgrade_24.sql rename to schema/mysql-legacy-changes/upgrade_24.sql diff --git a/schema/mysql-changes/upgrade_25.sql b/schema/mysql-legacy-changes/upgrade_25.sql similarity index 100% rename from schema/mysql-changes/upgrade_25.sql rename to schema/mysql-legacy-changes/upgrade_25.sql diff --git a/schema/mysql-changes/upgrade_26.sql b/schema/mysql-legacy-changes/upgrade_26.sql similarity index 100% rename from schema/mysql-changes/upgrade_26.sql rename to schema/mysql-legacy-changes/upgrade_26.sql diff --git a/schema/mysql-changes/upgrade_27.sql b/schema/mysql-legacy-changes/upgrade_27.sql similarity index 100% rename from schema/mysql-changes/upgrade_27.sql rename to schema/mysql-legacy-changes/upgrade_27.sql diff --git a/schema/mysql-changes/upgrade_28.sql b/schema/mysql-legacy-changes/upgrade_28.sql similarity index 100% rename from schema/mysql-changes/upgrade_28.sql rename to schema/mysql-legacy-changes/upgrade_28.sql diff --git a/schema/mysql-changes/upgrade_29.sql b/schema/mysql-legacy-changes/upgrade_29.sql similarity index 100% rename from schema/mysql-changes/upgrade_29.sql rename to schema/mysql-legacy-changes/upgrade_29.sql diff --git a/schema/mysql-changes/upgrade_3.sql b/schema/mysql-legacy-changes/upgrade_3.sql similarity index 100% rename from schema/mysql-changes/upgrade_3.sql rename to schema/mysql-legacy-changes/upgrade_3.sql diff --git a/schema/mysql-changes/upgrade_30.sql b/schema/mysql-legacy-changes/upgrade_30.sql similarity index 100% rename from schema/mysql-changes/upgrade_30.sql rename to schema/mysql-legacy-changes/upgrade_30.sql diff --git a/schema/mysql-changes/upgrade_31.sql b/schema/mysql-legacy-changes/upgrade_31.sql similarity index 100% rename from schema/mysql-changes/upgrade_31.sql rename to schema/mysql-legacy-changes/upgrade_31.sql diff --git a/schema/mysql-changes/upgrade_32.sql b/schema/mysql-legacy-changes/upgrade_32.sql similarity index 100% rename from schema/mysql-changes/upgrade_32.sql rename to schema/mysql-legacy-changes/upgrade_32.sql diff --git a/schema/mysql-changes/upgrade_33.sql b/schema/mysql-legacy-changes/upgrade_33.sql similarity index 100% rename from schema/mysql-changes/upgrade_33.sql rename to schema/mysql-legacy-changes/upgrade_33.sql diff --git a/schema/mysql-changes/upgrade_34.sql b/schema/mysql-legacy-changes/upgrade_34.sql similarity index 100% rename from schema/mysql-changes/upgrade_34.sql rename to schema/mysql-legacy-changes/upgrade_34.sql diff --git a/schema/mysql-changes/upgrade_35.sql b/schema/mysql-legacy-changes/upgrade_35.sql similarity index 100% rename from schema/mysql-changes/upgrade_35.sql rename to schema/mysql-legacy-changes/upgrade_35.sql diff --git a/schema/mysql-changes/upgrade_36.sql b/schema/mysql-legacy-changes/upgrade_36.sql similarity index 100% rename from schema/mysql-changes/upgrade_36.sql rename to schema/mysql-legacy-changes/upgrade_36.sql diff --git a/schema/mysql-changes/upgrade_37.sql b/schema/mysql-legacy-changes/upgrade_37.sql similarity index 100% rename from schema/mysql-changes/upgrade_37.sql rename to schema/mysql-legacy-changes/upgrade_37.sql diff --git a/schema/mysql-changes/upgrade_38.sql b/schema/mysql-legacy-changes/upgrade_38.sql similarity index 100% rename from schema/mysql-changes/upgrade_38.sql rename to schema/mysql-legacy-changes/upgrade_38.sql diff --git a/schema/mysql-changes/upgrade_39.sql b/schema/mysql-legacy-changes/upgrade_39.sql similarity index 100% rename from schema/mysql-changes/upgrade_39.sql rename to schema/mysql-legacy-changes/upgrade_39.sql diff --git a/schema/mysql-changes/upgrade_4.sql b/schema/mysql-legacy-changes/upgrade_4.sql similarity index 100% rename from schema/mysql-changes/upgrade_4.sql rename to schema/mysql-legacy-changes/upgrade_4.sql diff --git a/schema/mysql-changes/upgrade_40.sql b/schema/mysql-legacy-changes/upgrade_40.sql similarity index 100% rename from schema/mysql-changes/upgrade_40.sql rename to schema/mysql-legacy-changes/upgrade_40.sql diff --git a/schema/mysql-changes/upgrade_41.sql b/schema/mysql-legacy-changes/upgrade_41.sql similarity index 100% rename from schema/mysql-changes/upgrade_41.sql rename to schema/mysql-legacy-changes/upgrade_41.sql diff --git a/schema/mysql-changes/upgrade_42.sql b/schema/mysql-legacy-changes/upgrade_42.sql similarity index 100% rename from schema/mysql-changes/upgrade_42.sql rename to schema/mysql-legacy-changes/upgrade_42.sql diff --git a/schema/mysql-changes/upgrade_43.sql b/schema/mysql-legacy-changes/upgrade_43.sql similarity index 100% rename from schema/mysql-changes/upgrade_43.sql rename to schema/mysql-legacy-changes/upgrade_43.sql diff --git a/schema/mysql-changes/upgrade_44.sql b/schema/mysql-legacy-changes/upgrade_44.sql similarity index 100% rename from schema/mysql-changes/upgrade_44.sql rename to schema/mysql-legacy-changes/upgrade_44.sql diff --git a/schema/mysql-changes/upgrade_45.sql b/schema/mysql-legacy-changes/upgrade_45.sql similarity index 100% rename from schema/mysql-changes/upgrade_45.sql rename to schema/mysql-legacy-changes/upgrade_45.sql diff --git a/schema/mysql-changes/upgrade_46.sql b/schema/mysql-legacy-changes/upgrade_46.sql similarity index 100% rename from schema/mysql-changes/upgrade_46.sql rename to schema/mysql-legacy-changes/upgrade_46.sql diff --git a/schema/mysql-changes/upgrade_47.sql b/schema/mysql-legacy-changes/upgrade_47.sql similarity index 100% rename from schema/mysql-changes/upgrade_47.sql rename to schema/mysql-legacy-changes/upgrade_47.sql diff --git a/schema/mysql-changes/upgrade_48.sql b/schema/mysql-legacy-changes/upgrade_48.sql similarity index 100% rename from schema/mysql-changes/upgrade_48.sql rename to schema/mysql-legacy-changes/upgrade_48.sql diff --git a/schema/mysql-changes/upgrade_49.sql b/schema/mysql-legacy-changes/upgrade_49.sql similarity index 100% rename from schema/mysql-changes/upgrade_49.sql rename to schema/mysql-legacy-changes/upgrade_49.sql diff --git a/schema/mysql-changes/upgrade_5.sql b/schema/mysql-legacy-changes/upgrade_5.sql similarity index 100% rename from schema/mysql-changes/upgrade_5.sql rename to schema/mysql-legacy-changes/upgrade_5.sql diff --git a/schema/mysql-changes/upgrade_50.sql b/schema/mysql-legacy-changes/upgrade_50.sql similarity index 100% rename from schema/mysql-changes/upgrade_50.sql rename to schema/mysql-legacy-changes/upgrade_50.sql diff --git a/schema/mysql-changes/upgrade_51.sql b/schema/mysql-legacy-changes/upgrade_51.sql similarity index 100% rename from schema/mysql-changes/upgrade_51.sql rename to schema/mysql-legacy-changes/upgrade_51.sql diff --git a/schema/mysql-changes/upgrade_52.sql b/schema/mysql-legacy-changes/upgrade_52.sql similarity index 100% rename from schema/mysql-changes/upgrade_52.sql rename to schema/mysql-legacy-changes/upgrade_52.sql diff --git a/schema/mysql-changes/upgrade_53.sql b/schema/mysql-legacy-changes/upgrade_53.sql similarity index 100% rename from schema/mysql-changes/upgrade_53.sql rename to schema/mysql-legacy-changes/upgrade_53.sql diff --git a/schema/mysql-changes/upgrade_54.sql b/schema/mysql-legacy-changes/upgrade_54.sql similarity index 100% rename from schema/mysql-changes/upgrade_54.sql rename to schema/mysql-legacy-changes/upgrade_54.sql diff --git a/schema/mysql-changes/upgrade_55.sql b/schema/mysql-legacy-changes/upgrade_55.sql similarity index 100% rename from schema/mysql-changes/upgrade_55.sql rename to schema/mysql-legacy-changes/upgrade_55.sql diff --git a/schema/mysql-changes/upgrade_56.sql b/schema/mysql-legacy-changes/upgrade_56.sql similarity index 100% rename from schema/mysql-changes/upgrade_56.sql rename to schema/mysql-legacy-changes/upgrade_56.sql diff --git a/schema/mysql-changes/upgrade_57.sql b/schema/mysql-legacy-changes/upgrade_57.sql similarity index 100% rename from schema/mysql-changes/upgrade_57.sql rename to schema/mysql-legacy-changes/upgrade_57.sql diff --git a/schema/mysql-changes/upgrade_58.sql b/schema/mysql-legacy-changes/upgrade_58.sql similarity index 100% rename from schema/mysql-changes/upgrade_58.sql rename to schema/mysql-legacy-changes/upgrade_58.sql diff --git a/schema/mysql-changes/upgrade_59.sql b/schema/mysql-legacy-changes/upgrade_59.sql similarity index 100% rename from schema/mysql-changes/upgrade_59.sql rename to schema/mysql-legacy-changes/upgrade_59.sql diff --git a/schema/mysql-changes/upgrade_6.sql b/schema/mysql-legacy-changes/upgrade_6.sql similarity index 100% rename from schema/mysql-changes/upgrade_6.sql rename to schema/mysql-legacy-changes/upgrade_6.sql diff --git a/schema/mysql-changes/upgrade_60.sql b/schema/mysql-legacy-changes/upgrade_60.sql similarity index 100% rename from schema/mysql-changes/upgrade_60.sql rename to schema/mysql-legacy-changes/upgrade_60.sql diff --git a/schema/mysql-changes/upgrade_61.sql b/schema/mysql-legacy-changes/upgrade_61.sql similarity index 100% rename from schema/mysql-changes/upgrade_61.sql rename to schema/mysql-legacy-changes/upgrade_61.sql diff --git a/schema/mysql-changes/upgrade_62.sql b/schema/mysql-legacy-changes/upgrade_62.sql similarity index 100% rename from schema/mysql-changes/upgrade_62.sql rename to schema/mysql-legacy-changes/upgrade_62.sql diff --git a/schema/mysql-changes/upgrade_7.sql b/schema/mysql-legacy-changes/upgrade_7.sql similarity index 100% rename from schema/mysql-changes/upgrade_7.sql rename to schema/mysql-legacy-changes/upgrade_7.sql diff --git a/schema/mysql-changes/upgrade_8.sql b/schema/mysql-legacy-changes/upgrade_8.sql similarity index 100% rename from schema/mysql-changes/upgrade_8.sql rename to schema/mysql-legacy-changes/upgrade_8.sql diff --git a/schema/mysql-changes/upgrade_9.sql b/schema/mysql-legacy-changes/upgrade_9.sql similarity index 100% rename from schema/mysql-changes/upgrade_9.sql rename to schema/mysql-legacy-changes/upgrade_9.sql diff --git a/schema/mysql-migrations/upgrade_63.sql b/schema/mysql-migrations/upgrade_63.sql new file mode 100644 index 00000000..7d236122 --- /dev/null +++ b/schema/mysql-migrations/upgrade_63.sql @@ -0,0 +1,12 @@ +CREATE TABLE director_schema_migration ( + schema_version SMALLINT UNSIGNED NOT NULL, + migration_time DATETIME NOT NULL, + PRIMARY KEY(schema_version) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +DROP TABLE director_dbversion; + +INSERT INTO director_schema_migration + SET migration_time = NOW(), + schema_version = 63; + diff --git a/schema/mysql.sql b/schema/mysql.sql index aec5c85a..002c423c 100644 --- a/schema/mysql.sql +++ b/schema/mysql.sql @@ -16,10 +16,6 @@ SET sql_mode = 'STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,NO_ENGINE_SUBSTITUTION,PIPES_AS_CONCAT,ANSI_QUOTES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER'; -CREATE TABLE director_dbversion ( - schema_version INT(10) UNSIGNED NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - CREATE TABLE director_activity_log ( id BIGINT(20) UNSIGNED AUTO_INCREMENT NOT NULL, object_type VARCHAR(64) NOT NULL, @@ -149,6 +145,12 @@ CREATE TABLE director_datafield_setting ( ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE director_schema_migration ( + schema_version SMALLINT UNSIGNED NOT NULL, + migration_time DATETIME NOT NULL, + PRIMARY KEY(schema_version) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + CREATE TABLE icinga_zone ( id INT(10) UNSIGNED AUTO_INCREMENT NOT NULL, parent_id INT(10) UNSIGNED DEFAULT NULL, @@ -1022,3 +1024,8 @@ CREATE TABLE import_row_modifier_setting ( setting_value TEXT DEFAULT NULL, PRIMARY KEY (modifier_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +INSERT INTO director_schema_migration + SET migration_time = NOW(), + schema_version = 63; + diff --git a/schema/pgsql-changes/upgrade-10.sql b/schema/pgsql-legacy-changes/upgrade-10.sql similarity index 100% rename from schema/pgsql-changes/upgrade-10.sql rename to schema/pgsql-legacy-changes/upgrade-10.sql diff --git a/schema/pgsql-changes/upgrade-11.sql b/schema/pgsql-legacy-changes/upgrade-11.sql similarity index 100% rename from schema/pgsql-changes/upgrade-11.sql rename to schema/pgsql-legacy-changes/upgrade-11.sql diff --git a/schema/pgsql-changes/upgrade-2.sql b/schema/pgsql-legacy-changes/upgrade-2.sql similarity index 100% rename from schema/pgsql-changes/upgrade-2.sql rename to schema/pgsql-legacy-changes/upgrade-2.sql diff --git a/schema/pgsql-changes/upgrade-3.sql b/schema/pgsql-legacy-changes/upgrade-3.sql similarity index 100% rename from schema/pgsql-changes/upgrade-3.sql rename to schema/pgsql-legacy-changes/upgrade-3.sql diff --git a/schema/pgsql-changes/upgrade-4.sql b/schema/pgsql-legacy-changes/upgrade-4.sql similarity index 100% rename from schema/pgsql-changes/upgrade-4.sql rename to schema/pgsql-legacy-changes/upgrade-4.sql diff --git a/schema/pgsql-changes/upgrade-5.sql b/schema/pgsql-legacy-changes/upgrade-5.sql similarity index 100% rename from schema/pgsql-changes/upgrade-5.sql rename to schema/pgsql-legacy-changes/upgrade-5.sql diff --git a/schema/pgsql-changes/upgrade-6.sql b/schema/pgsql-legacy-changes/upgrade-6.sql similarity index 100% rename from schema/pgsql-changes/upgrade-6.sql rename to schema/pgsql-legacy-changes/upgrade-6.sql diff --git a/schema/pgsql-changes/upgrade-7.sql b/schema/pgsql-legacy-changes/upgrade-7.sql similarity index 100% rename from schema/pgsql-changes/upgrade-7.sql rename to schema/pgsql-legacy-changes/upgrade-7.sql diff --git a/schema/pgsql-changes/upgrade-8.sql b/schema/pgsql-legacy-changes/upgrade-8.sql similarity index 100% rename from schema/pgsql-changes/upgrade-8.sql rename to schema/pgsql-legacy-changes/upgrade-8.sql diff --git a/schema/pgsql-changes/upgrade-9.sql b/schema/pgsql-legacy-changes/upgrade-9.sql similarity index 100% rename from schema/pgsql-changes/upgrade-9.sql rename to schema/pgsql-legacy-changes/upgrade-9.sql diff --git a/schema/pgsql-changes/upgrade_1.sql b/schema/pgsql-legacy-changes/upgrade_1.sql similarity index 100% rename from schema/pgsql-changes/upgrade_1.sql rename to schema/pgsql-legacy-changes/upgrade_1.sql diff --git a/schema/pgsql-changes/upgrade_21.sql b/schema/pgsql-legacy-changes/upgrade_21.sql similarity index 100% rename from schema/pgsql-changes/upgrade_21.sql rename to schema/pgsql-legacy-changes/upgrade_21.sql diff --git a/schema/pgsql-changes/upgrade_22.sql b/schema/pgsql-legacy-changes/upgrade_22.sql similarity index 100% rename from schema/pgsql-changes/upgrade_22.sql rename to schema/pgsql-legacy-changes/upgrade_22.sql diff --git a/schema/pgsql-changes/upgrade_23.sql b/schema/pgsql-legacy-changes/upgrade_23.sql similarity index 100% rename from schema/pgsql-changes/upgrade_23.sql rename to schema/pgsql-legacy-changes/upgrade_23.sql diff --git a/schema/pgsql-changes/upgrade_34.sql b/schema/pgsql-legacy-changes/upgrade_34.sql similarity index 100% rename from schema/pgsql-changes/upgrade_34.sql rename to schema/pgsql-legacy-changes/upgrade_34.sql diff --git a/schema/pgsql-changes/upgrade_35.sql b/schema/pgsql-legacy-changes/upgrade_35.sql similarity index 100% rename from schema/pgsql-changes/upgrade_35.sql rename to schema/pgsql-legacy-changes/upgrade_35.sql