diff --git a/migrations/Version1.php b/migrations/Version1.php index ccbe4479..f1389801 100644 --- a/migrations/Version1.php +++ b/migrations/Version1.php @@ -43,8 +43,7 @@ final class Version1 extends AbstractMultiPlatformMigration return; } - // this up() migration is auto-generated, please modify it to your needs - $this->abortIf('mysql' !== $this->connection->getDatabasePlatform()->getName(), 'Migration can only be executed safely on \'mysql\'.'); + $this->abortIf('mysql' !== $this->getDatabaseType(), 'Migration can only be executed safely on \'mysql\'.'); $this->addSql('CREATE TABLE `attachment_types` (id INT AUTO_INCREMENT NOT NULL, parent_id INT DEFAULT NULL, filetype_filter LONGTEXT NOT NULL, comment LONGTEXT NOT NULL, not_selectable TINYINT(1) NOT NULL, name VARCHAR(255) NOT NULL, last_modified DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL, datetime_added DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL, INDEX IDX_EFAED719727ACA70 (parent_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB'); $this->addSql('CREATE TABLE `categories` (id INT AUTO_INCREMENT NOT NULL, parent_id INT DEFAULT NULL, partname_hint LONGTEXT NOT NULL, partname_regex LONGTEXT NOT NULL, disable_footprints TINYINT(1) NOT NULL, disable_manufacturers TINYINT(1) NOT NULL, disable_autodatasheets TINYINT(1) NOT NULL, disable_properties TINYINT(1) NOT NULL, default_description LONGTEXT NOT NULL, default_comment LONGTEXT NOT NULL, comment LONGTEXT NOT NULL, not_selectable TINYINT(1) NOT NULL, name VARCHAR(255) NOT NULL, last_modified DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL, datetime_added DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL, INDEX IDX_3AF34668727ACA70 (parent_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB'); @@ -176,7 +175,7 @@ EOD; public function mySQLDown(Schema $schema): void { // this down() migration is auto-generated, please modify it to your needs - $this->abortIf('mysql' !== $this->connection->getDatabasePlatform()->getName(), 'Migration can only be executed safely on \'mysql\'.'); + $this->abortIf('mysql' !== $this->getDatabaseType(), 'Migration can only be executed safely on \'mysql\'.'); $this->addSql('ALTER TABLE `attachment_types` DROP FOREIGN KEY FK_EFAED719727ACA70'); $this->addSql('ALTER TABLE `attachments` DROP FOREIGN KEY FK_47C4FAD6C54C8C93'); @@ -234,6 +233,6 @@ EOD; public function sqLiteDown(Schema $schema): void { - $this->warIf(true, "Migration not needed for SQLite. Skipping..."); + $this->warnIf(true, "Migration not needed for SQLite. Skipping..."); } } diff --git a/migrations/Version20190902140506.php b/migrations/Version20190902140506.php index a2ca80d9..2238eb62 100644 --- a/migrations/Version20190902140506.php +++ b/migrations/Version20190902140506.php @@ -39,7 +39,7 @@ final class Version20190902140506 extends AbstractMultiPlatformMigration public function mySQLUp(Schema $schema): void { // this up() migration is auto-generated, please modify it to your needs - $this->abortIf('mysql' !== $this->connection->getDatabasePlatform()->getName(), 'Migration can only be executed safely on \'mysql\'.'); + $this->abortIf('mysql' !== $this->getDatabaseType(), 'Migration can only be executed safely on \'mysql\'.'); //Check if we can use this migration method: $version = $this->getOldDBVersion(); @@ -197,7 +197,7 @@ final class Version20190902140506 extends AbstractMultiPlatformMigration public function mySQLDown(Schema $schema): void { // this down() migration is auto-generated, please modify it to your needs - $this->abortIf('mysql' !== $this->connection->getDatabasePlatform()->getName(), 'Migration can only be executed safely on \'mysql\'.'); + $this->abortIf('mysql' !== $this->getDatabaseType(), 'Migration can only be executed safely on \'mysql\'.'); $this->addSql('ALTER TABLE currencies DROP FOREIGN KEY FK_37C44693727ACA70'); $this->addSql('ALTER TABLE `suppliers` DROP FOREIGN KEY FK_AC28B95CECD792C0'); diff --git a/migrations/Version20190913141126.php b/migrations/Version20190913141126.php index 2ac262a4..28b8a0cc 100644 --- a/migrations/Version20190913141126.php +++ b/migrations/Version20190913141126.php @@ -38,7 +38,7 @@ final class Version20190913141126 extends AbstractMultiPlatformMigration public function mySQLUp(Schema $schema): void { // this up() migration is auto-generated, please modify it to your needs - $this->abortIf('mysql' !== $this->connection->getDatabasePlatform()->getName(), 'Migration can only be executed safely on \'mysql\'.'); + $this->abortIf('mysql' !== $this->getDatabaseType(), 'Migration can only be executed safely on \'mysql\'.'); $this->addSql('ALTER TABLE `groups` ADD perms_parts_category SMALLINT NOT NULL, ADD perms_parts_minamount SMALLINT NOT NULL, ADD perms_parts_lots SMALLINT NOT NULL, ADD perms_parts_tags SMALLINT NOT NULL, ADD perms_parts_unit SMALLINT NOT NULL, ADD perms_parts_mass SMALLINT NOT NULL, ADD perms_parts_status SMALLINT NOT NULL, ADD perms_parts_mpn SMALLINT NOT NULL, ADD perms_currencies INT NOT NULL, ADD perms_measurement_units INT NOT NULL, DROP perms_parts_instock, DROP perms_parts_mininstock, DROP perms_parts_storelocation'); $this->addSql('ALTER TABLE users ADD currency_id INT DEFAULT NULL, ADD settings LONGTEXT NOT NULL COMMENT \'(DC2Type:json)\', ADD perms_parts_category SMALLINT NOT NULL, ADD perms_parts_minamount SMALLINT NOT NULL, ADD perms_parts_lots SMALLINT NOT NULL, ADD perms_parts_tags SMALLINT NOT NULL, ADD perms_parts_unit SMALLINT NOT NULL, ADD perms_parts_mass SMALLINT NOT NULL, ADD perms_parts_status SMALLINT NOT NULL, ADD perms_parts_mpn SMALLINT NOT NULL, ADD perms_currencies INT NOT NULL, ADD perms_measurement_units INT NOT NULL, DROP config_currency, DROP perms_parts_instock, DROP perms_parts_mininstock, DROP perms_parts_storelocation'); @@ -73,7 +73,7 @@ final class Version20190913141126 extends AbstractMultiPlatformMigration public function mySQLDown(Schema $schema): void { // this down() migration is auto-generated, please modify it to your needs - $this->abortIf('mysql' !== $this->connection->getDatabasePlatform()->getName(), 'Migration can only be executed safely on \'mysql\'.'); + $this->abortIf('mysql' !== $this->getDatabaseType(), 'Migration can only be executed safely on \'mysql\'.'); $this->addSql('ALTER TABLE `groups` ADD perms_parts_instock SMALLINT NOT NULL, ADD perms_parts_mininstock SMALLINT NOT NULL, ADD perms_parts_storelocation SMALLINT NOT NULL, DROP perms_parts_category, DROP perms_parts_minamount, DROP perms_parts_lots, DROP perms_parts_tags, DROP perms_parts_unit, DROP perms_parts_mass, DROP perms_parts_status, DROP perms_parts_mpn, DROP perms_currencies, DROP perms_measurement_units'); $this->addSql('ALTER TABLE `users` DROP FOREIGN KEY FK_1483A5E938248176'); diff --git a/migrations/Version20190924113252.php b/migrations/Version20190924113252.php index e8c3fa6f..fe7c9c8b 100644 --- a/migrations/Version20190924113252.php +++ b/migrations/Version20190924113252.php @@ -38,7 +38,7 @@ final class Version20190924113252 extends AbstractMultiPlatformMigration public function mySQLUp(Schema $schema): void { // this up() migration is auto-generated, please modify it to your needs - $this->abortIf('mysql' !== $this->connection->getDatabasePlatform()->getName(), 'Migration can only be executed safely on \'mysql\'.'); + $this->abortIf('mysql' !== $this->getDatabaseType(), 'Migration can only be executed safely on \'mysql\'.'); $this->addSql('ALTER TABLE users ADD id_preview_attachement INT DEFAULT NULL, ADD pw_reset_token VARCHAR(255) DEFAULT NULL, ADD pw_reset_expires DATETIME DEFAULT NULL, ADD disabled TINYINT(1) NOT NULL, DROP config_image_path'); $this->addSql('ALTER TABLE users ADD CONSTRAINT FK_1483A5E96DEDCEC2 FOREIGN KEY (id_preview_attachement) REFERENCES `attachments` (id)'); @@ -124,7 +124,7 @@ final class Version20190924113252 extends AbstractMultiPlatformMigration public function mySQLDown(Schema $schema): void { // this down() migration is auto-generated, please modify it to your needs - $this->abortIf('mysql' !== $this->connection->getDatabasePlatform()->getName(), 'Migration can only be executed safely on \'mysql\'.'); + $this->abortIf('mysql' !== $this->getDatabaseType(), 'Migration can only be executed safely on \'mysql\'.'); $this->addSql('ALTER TABLE `attachment_types` DROP FOREIGN KEY FK_EFAED7196DEDCEC2'); $this->addSql('DROP INDEX IDX_EFAED7196DEDCEC2 ON `attachment_types`'); diff --git a/migrations/Version20191214153125.php b/migrations/Version20191214153125.php index 6cf1ce63..9a61c10d 100644 --- a/migrations/Version20191214153125.php +++ b/migrations/Version20191214153125.php @@ -38,7 +38,7 @@ final class Version20191214153125 extends AbstractMultiPlatformMigration public function mySQLUp(Schema $schema): void { // this up() migration is auto-generated, please modify it to your needs - $this->abortIf('mysql' !== $this->connection->getDatabasePlatform()->getName(), 'Migration can only be executed safely on \'mysql\'.'); + $this->abortIf('mysql' !== $this->getDatabaseType(), 'Migration can only be executed safely on \'mysql\'.'); $this->addSql('CREATE TABLE u2f_keys (id INT AUTO_INCREMENT NOT NULL, user_id INT DEFAULT NULL, key_handle VARCHAR(64) NOT NULL, public_key VARCHAR(255) NOT NULL, certificate LONGTEXT NOT NULL, counter VARCHAR(255) NOT NULL, name VARCHAR(255) NOT NULL, last_modified DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL, datetime_added DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL, INDEX IDX_4F4ADB4BA76ED395 (user_id), UNIQUE INDEX user_unique (user_id, key_handle), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB'); $this->addSql('ALTER TABLE u2f_keys ADD CONSTRAINT FK_4F4ADB4BA76ED395 FOREIGN KEY (user_id) REFERENCES `users` (id)'); @@ -49,7 +49,7 @@ final class Version20191214153125 extends AbstractMultiPlatformMigration public function mySQLDown(Schema $schema): void { // this down() migration is auto-generated, please modify it to your needs - $this->abortIf('mysql' !== $this->connection->getDatabasePlatform()->getName(), 'Migration can only be executed safely on \'mysql\'.'); + $this->abortIf('mysql' !== $this->getDatabaseType(), 'Migration can only be executed safely on \'mysql\'.'); $this->addSql('DROP TABLE u2f_keys'); $this->addSql('ALTER TABLE `groups` DROP enforce_2fa'); diff --git a/migrations/Version20200126191823.php b/migrations/Version20200126191823.php index 058445bc..c093a4d7 100644 --- a/migrations/Version20200126191823.php +++ b/migrations/Version20200126191823.php @@ -38,7 +38,7 @@ final class Version20200126191823 extends AbstractMultiPlatformMigration public function mySQLUp(Schema $schema): void { // this up() migration is auto-generated, please modify it to your needs - $this->abortIf('mysql' !== $this->connection->getDatabasePlatform()->getName(), 'Migration can only be executed safely on \'mysql\'.'); + $this->abortIf('mysql' !== $this->getDatabaseType(), 'Migration can only be executed safely on \'mysql\'.'); $this->addSql('ALTER TABLE log CHANGE datetime datetime DATETIME NOT NULL, CHANGE level level TINYINT, CHANGE extra extra LONGTEXT NOT NULL COMMENT \'(DC2Type:json)\''); $this->addSql('DROP INDEX id_user ON log'); @@ -49,7 +49,7 @@ final class Version20200126191823 extends AbstractMultiPlatformMigration public function mySQLDown(Schema $schema): void { // this down() migration is auto-generated, please modify it to your needs - $this->abortIf('mysql' !== $this->connection->getDatabasePlatform()->getName(), 'Migration can only be executed safely on \'mysql\'.'); + $this->abortIf('mysql' !== $this->getDatabaseType(), 'Migration can only be executed safely on \'mysql\'.'); $this->addSql('ALTER TABLE log DROP FOREIGN KEY FK_8F3F68C56B3CA4B'); $this->addSql('ALTER TABLE log DROP FOREIGN KEY FK_8F3F68C56B3CA4B'); diff --git a/migrations/Version20200311204104.php b/migrations/Version20200311204104.php index be21669c..a1b13baf 100644 --- a/migrations/Version20200311204104.php +++ b/migrations/Version20200311204104.php @@ -20,7 +20,7 @@ final class Version20200311204104 extends AbstractMultiPlatformMigration public function mySQLUp(Schema $schema): void { // this up() migration is auto-generated, please modify it to your needs - $this->abortIf('mysql' !== $this->connection->getDatabasePlatform()->getName(), 'Migration can only be executed safely on \'mysql\'.'); + $this->abortIf('mysql' !== $this->getDatabaseType(), 'Migration can only be executed safely on \'mysql\'.'); $this->addSql('CREATE TABLE parameters (id INT AUTO_INCREMENT NOT NULL, name VARCHAR(255) NOT NULL, symbol VARCHAR(255) NOT NULL, value_min DOUBLE PRECISION DEFAULT NULL, value_typical DOUBLE PRECISION DEFAULT NULL, value_max DOUBLE PRECISION DEFAULT NULL, unit VARCHAR(255) NOT NULL, value_text VARCHAR(255) NOT NULL, param_group VARCHAR(255) NOT NULL, last_modified DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL, datetime_added DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL, type SMALLINT NOT NULL, element_id INT NOT NULL, INDEX IDX_69348FE1F1F2A24 (element_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); $this->addSql('ALTER TABLE `groups` ADD perms_parts_parameters SMALLINT NOT NULL'); @@ -41,7 +41,7 @@ final class Version20200311204104 extends AbstractMultiPlatformMigration public function mySQLDown(Schema $schema): void { // this down() migration is auto-generated, please modify it to your needs - $this->abortIf('mysql' !== $this->connection->getDatabasePlatform()->getName(), 'Migration can only be executed safely on \'mysql\'.'); + $this->abortIf('mysql' !== $this->getDatabaseType(), 'Migration can only be executed safely on \'mysql\'.'); $this->addSql('DROP TABLE parameters'); $this->addSql('ALTER TABLE `groups` DROP perms_parts_parameters'); diff --git a/migrations/Version20200409130946.php b/migrations/Version20200409130946.php index 9e9b7831..72bdda9c 100644 --- a/migrations/Version20200409130946.php +++ b/migrations/Version20200409130946.php @@ -20,7 +20,7 @@ final class Version20200409130946 extends AbstractMultiPlatformMigration public function mySQLUp(Schema $schema): void { // this up() migration is auto-generated, please modify it to your needs - $this->abortIf('mysql' !== $this->connection->getDatabasePlatform()->getName(), 'Migration can only be executed safely on \'mysql\'.'); + $this->abortIf('mysql' !== $this->getDatabaseType(), 'Migration can only be executed safely on \'mysql\'.'); $this->addSql('ALTER TABLE u2f_keys CHANGE key_handle key_handle VARCHAR(128) NOT NULL'); } @@ -28,7 +28,7 @@ final class Version20200409130946 extends AbstractMultiPlatformMigration public function mySQLDown(Schema $schema): void { // this down() migration is auto-generated, please modify it to your needs - $this->abortIf('mysql' !== $this->connection->getDatabasePlatform()->getName(), 'Migration can only be executed safely on \'mysql\'.'); + $this->abortIf('mysql' !== $this->getDatabaseType(), 'Migration can only be executed safely on \'mysql\'.'); $this->addSql('ALTER TABLE u2f_keys CHANGE key_handle key_handle VARCHAR(64) CHARACTER SET utf8mb4 NOT NULL COLLATE `utf8mb4_unicode_ci`'); } diff --git a/migrations/Version20200502161750.php b/migrations/Version20200502161750.php index c0fc4d7d..1b5b4f52 100644 --- a/migrations/Version20200502161750.php +++ b/migrations/Version20200502161750.php @@ -20,7 +20,7 @@ final class Version20200502161750 extends AbstractMultiPlatformMigration public function mySQLUp(Schema $schema): void { // this up() migration is auto-generated, please modify it to your needs - $this->abortIf('mysql' !== $this->connection->getDatabasePlatform()->getName(), 'Migration can only be executed safely on \'mysql\'.'); + $this->abortIf('mysql' !== $this->getDatabaseType(), 'Migration can only be executed safely on \'mysql\'.'); $this->addSql('CREATE TABLE label_profiles (id INT AUTO_INCREMENT NOT NULL, id_preview_attachement INT DEFAULT NULL, comment LONGTEXT NOT NULL, show_in_dropdown TINYINT(1) NOT NULL, name VARCHAR(255) NOT NULL, last_modified DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL, datetime_added DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL, options_width DOUBLE PRECISION NOT NULL, options_height DOUBLE PRECISION NOT NULL, options_barcode_type VARCHAR(255) NOT NULL, options_picture_type VARCHAR(255) NOT NULL, options_supported_element VARCHAR(255) NOT NULL, options_additional_css LONGTEXT NOT NULL, options_lines_mode VARCHAR(255) NOT NULL, options_lines LONGTEXT NOT NULL, INDEX IDX_C93E9CF56DEDCEC2 (id_preview_attachement), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); $this->addSql('ALTER TABLE label_profiles ADD CONSTRAINT FK_C93E9CF56DEDCEC2 FOREIGN KEY (id_preview_attachement) REFERENCES `attachments` (id)'); @@ -30,7 +30,7 @@ final class Version20200502161750 extends AbstractMultiPlatformMigration public function mySQLDown(Schema $schema): void { // this down() migration is auto-generated, please modify it to your needs - $this->abortIf('mysql' !== $this->connection->getDatabasePlatform()->getName(), 'Migration can only be executed safely on \'mysql\'.'); + $this->abortIf('mysql' !== $this->getDatabaseType(), 'Migration can only be executed safely on \'mysql\'.'); $this->addSql('DROP TABLE label_profiles'); $this->addSql('ALTER TABLE log CHANGE level level TINYINT(1) DEFAULT NULL'); @@ -40,7 +40,7 @@ final class Version20200502161750 extends AbstractMultiPlatformMigration { /* Create inital DB schema for SQLite */ // this up() migration is auto-generated, please modify it to your needs - $this->abortIf($this->connection->getDatabasePlatform()->getName() !== 'sqlite', 'Migration can only be executed safely on \'sqlite\'.'); + $this->abortIf($this->getDatabaseType() !== 'sqlite', 'Migration can only be executed safely on \'sqlite\'.'); $this->addSql('CREATE TABLE "attachments" (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, type_id INTEGER DEFAULT NULL, original_filename VARCHAR(255) DEFAULT NULL, path VARCHAR(255) NOT NULL, show_in_table BOOLEAN NOT NULL, name VARCHAR(255) NOT NULL, last_modified DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL, datetime_added DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL, class_name VARCHAR(255) NOT NULL, element_id INTEGER NOT NULL)'); $this->addSql('CREATE INDEX IDX_47C4FAD6C54C8C93 ON "attachments" (type_id)'); @@ -141,7 +141,7 @@ EOD; public function sqLiteDown(Schema $schema): void { // this down() migration is auto-generated, please modify it to your needs - $this->abortIf($this->connection->getDatabasePlatform()->getName() !== 'sqlite', 'Migration can only be executed safely on \'sqlite\'.'); + $this->abortIf($this->getDatabaseType() !== 'sqlite', 'Migration can only be executed safely on \'sqlite\'.'); $this->addSql('DROP TABLE "attachments"'); $this->addSql('DROP TABLE "attachment_types"'); diff --git a/src/Migration/AbstractMultiPlatformMigration.php b/src/Migration/AbstractMultiPlatformMigration.php index 37e52bcc..efd96107 100644 --- a/src/Migration/AbstractMultiPlatformMigration.php +++ b/src/Migration/AbstractMultiPlatformMigration.php @@ -4,7 +4,9 @@ namespace App\Migration; use Doctrine\DBAL\Connection; use Doctrine\DBAL\DBALException; +use Doctrine\DBAL\Driver\AbstractSQLiteDriver; use Doctrine\DBAL\Exception; +use Doctrine\DBAL\Platforms\AbstractMySQLPlatform; use Doctrine\DBAL\Schema\Schema; use Doctrine\Migrations\AbstractMigration; use Psr\Log\LoggerInterface; @@ -26,7 +28,7 @@ abstract class AbstractMultiPlatformMigration extends AbstractMigration public function up(Schema $schema): void { - $db_type = $this->connection->getDatabasePlatform()->getName(); + $db_type = $this->getDatabaseType(); switch ($db_type) { case 'mysql': @@ -43,7 +45,7 @@ abstract class AbstractMultiPlatformMigration extends AbstractMigration public function down(Schema $schema): void { - $db_type = $this->connection->getDatabasePlatform()->getName(); + $db_type = $this->getDatabaseType(); switch ($db_type) { case 'mysql': @@ -53,7 +55,7 @@ abstract class AbstractMultiPlatformMigration extends AbstractMigration $this->sqLiteDown($schema); break; default: - $this->abortIf(true, "Database type '$db_type' is not supported!"); + $this->abortIf(true, "Database type is not supported!"); break; } } @@ -63,7 +65,7 @@ abstract class AbstractMultiPlatformMigration extends AbstractMigration */ public function getOldDBVersion(): int { - if ('mysql' !== $this->connection->getDatabasePlatform()->getName()) { + if ('mysql' !== $this->getDatabaseType()) { //Old Part-DB version only supported MySQL therefore only return 0; } @@ -115,6 +117,23 @@ abstract class AbstractMultiPlatformMigration extends AbstractMigration } } + /** + * Returns the database type of the used database. + * @return string|null Returns 'mysql' for MySQL/MariaDB and 'sqlite' for SQLite. Returns null if unknown type + */ + public function getDatabaseType(): ?string + { + if ($this->connection->getDriver() instanceof AbstractMySQLPlatform) { + return 'mysql'; + } + + if ($this->connection->getDriver() instanceof AbstractSQLiteDriver) { + return 'sqlite'; + } + + return null; + } + abstract public function mySQLUp(Schema $schema): void; abstract public function mySQLDown(Schema $schema): void;