From cd35770d262eb30b4cc2f42128037daafa4851ed Mon Sep 17 00:00:00 2001 From: Alejandro Celaya <alejandro@alejandrocelaya.com> Date: Sat, 23 Oct 2021 16:02:29 +0200 Subject: [PATCH] Ensured migrations are not transactional when run in mysql --- CHANGELOG.md | 1 + config/test/bootstrap_db_tests.php | 2 +- data/migrations/Version20160819142757.php | 7 ++++++- data/migrations/Version20160820191203.php | 5 +++++ data/migrations/Version20171021093246.php | 5 +++++ data/migrations/Version20171022064541.php | 5 +++++ data/migrations/Version20180801183328.php | 5 +++++ data/migrations/Version20180913205455.php | 5 +++++ data/migrations/Version20180915110857.php | 5 +++++ data/migrations/Version20181020060559.php | 5 +++++ data/migrations/Version20181020065148.php | 5 +++++ data/migrations/Version20181110175521.php | 5 +++++ data/migrations/Version20190824075137.php | 5 +++++ data/migrations/Version20190930165521.php | 5 +++++ data/migrations/Version20191001201532.php | 5 +++++ data/migrations/Version20191020074522.php | 5 +++++ data/migrations/Version20200105165647.php | 5 +++++ data/migrations/Version20200106215144.php | 5 +++++ data/migrations/Version20200110182849.php | 5 +++++ data/migrations/Version20200323190014.php | 5 +++++ data/migrations/Version20200503170404.php | 5 +++++ data/migrations/Version20201023090929.php | 5 +++++ data/migrations/Version20201102113208.php | 5 +++++ data/migrations/Version20210102174433.php | 5 +++++ data/migrations/Version20210118153932.php | 5 +++++ data/migrations/Version20210202181026.php | 5 +++++ data/migrations/Version20210207100807.php | 5 +++++ data/migrations/Version20210306165711.php | 5 +++++ data/migrations/Version20210522051601.php | 5 +++++ data/migrations/Version20210522124633.php | 5 +++++ data/migrations/Version20210720143824.php | 5 +++++ data/migrations/Version20211002072605.php | 5 +++++ data/migrations_template.txt | 5 +++++ 33 files changed, 158 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index baa31e0c..2e8dae6f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com), and this ### Fixed * [#1210](https://github.com/shlinkio/shlink/issues/1210) Fixed real time updates not being notified. +* [#1211](https://github.com/shlinkio/shlink/issues/1211) Fixed `There is no active transaction` error when running migrations in MySQL/Mariadb after updating to doctrine-migrations 3.3. ## [2.9.1] - 2021-10-11 diff --git a/config/test/bootstrap_db_tests.php b/config/test/bootstrap_db_tests.php index 0237d741..9f14c38d 100644 --- a/config/test/bootstrap_db_tests.php +++ b/config/test/bootstrap_db_tests.php @@ -8,5 +8,5 @@ use Psr\Container\ContainerInterface; /** @var ContainerInterface $container */ $container = require __DIR__ . '/../container.php'; -$container->get(Helper\TestHelper::class)->createTestDb(['bin/cli', 'db:create'], ['bin/cli', 'db:migrate']); +$container->get(Helper\TestHelper::class)->createTestDb(); DbTest\DatabaseTestCase::setEntityManager($container->get('em')); diff --git a/data/migrations/Version20160819142757.php b/data/migrations/Version20160819142757.php index 2901836e..773a4d9b 100644 --- a/data/migrations/Version20160819142757.php +++ b/data/migrations/Version20160819142757.php @@ -39,6 +39,11 @@ class Version20160819142757 extends AbstractMigration */ public function down(Schema $schema): void { - $db = $this->connection->getDatabasePlatform()->getName(); + $this->connection->getDatabasePlatform()->getName(); + } + + public function isTransactional(): bool + { + return false; } } diff --git a/data/migrations/Version20160820191203.php b/data/migrations/Version20160820191203.php index d0a4d673..592e556e 100644 --- a/data/migrations/Version20160820191203.php +++ b/data/migrations/Version20160820191203.php @@ -73,4 +73,9 @@ class Version20160820191203 extends AbstractMigration $schema->dropTable('short_urls_in_tags'); $schema->dropTable('tags'); } + + public function isTransactional(): bool + { + return $this->connection->getDatabasePlatform()->getName() !== 'mysql'; + } } diff --git a/data/migrations/Version20171021093246.php b/data/migrations/Version20171021093246.php index 83f08e41..92c078fa 100644 --- a/data/migrations/Version20171021093246.php +++ b/data/migrations/Version20171021093246.php @@ -45,4 +45,9 @@ class Version20171021093246 extends AbstractMigration $shortUrls->dropColumn('valid_since'); $shortUrls->dropColumn('valid_until'); } + + public function isTransactional(): bool + { + return $this->connection->getDatabasePlatform()->getName() !== 'mysql'; + } } diff --git a/data/migrations/Version20171022064541.php b/data/migrations/Version20171022064541.php index 7ff39666..88b5f468 100644 --- a/data/migrations/Version20171022064541.php +++ b/data/migrations/Version20171022064541.php @@ -42,4 +42,9 @@ class Version20171022064541 extends AbstractMigration $shortUrls->dropColumn('max_visits'); } + + public function isTransactional(): bool + { + return $this->connection->getDatabasePlatform()->getName() !== 'mysql'; + } } diff --git a/data/migrations/Version20180801183328.php b/data/migrations/Version20180801183328.php index 24bcd825..14f2b22c 100644 --- a/data/migrations/Version20180801183328.php +++ b/data/migrations/Version20180801183328.php @@ -39,4 +39,9 @@ final class Version20180801183328 extends AbstractMigration { $schema->getTable('short_urls')->getColumn('short_code')->setLength($size); } + + public function isTransactional(): bool + { + return $this->connection->getDatabasePlatform()->getName() !== 'mysql'; + } } diff --git a/data/migrations/Version20180913205455.php b/data/migrations/Version20180913205455.php index 727e4400..23d51d79 100644 --- a/data/migrations/Version20180913205455.php +++ b/data/migrations/Version20180913205455.php @@ -66,4 +66,9 @@ final class Version20180913205455 extends AbstractMigration { // Nothing to rollback } + + public function isTransactional(): bool + { + return $this->connection->getDatabasePlatform()->getName() !== 'mysql'; + } } diff --git a/data/migrations/Version20180915110857.php b/data/migrations/Version20180915110857.php index 73a36597..8b83053b 100644 --- a/data/migrations/Version20180915110857.php +++ b/data/migrations/Version20180915110857.php @@ -47,4 +47,9 @@ final class Version20180915110857 extends AbstractMigration { // Nothing to run } + + public function isTransactional(): bool + { + return $this->connection->getDatabasePlatform()->getName() !== 'mysql'; + } } diff --git a/data/migrations/Version20181020060559.php b/data/migrations/Version20181020060559.php index 78cd8614..85d2c9ba 100644 --- a/data/migrations/Version20181020060559.php +++ b/data/migrations/Version20181020060559.php @@ -65,4 +65,9 @@ final class Version20181020060559 extends AbstractMigration { // No down } + + public function isTransactional(): bool + { + return $this->connection->getDatabasePlatform()->getName() !== 'mysql'; + } } diff --git a/data/migrations/Version20181020065148.php b/data/migrations/Version20181020065148.php index 62b14ccf..e7b3cf5f 100644 --- a/data/migrations/Version20181020065148.php +++ b/data/migrations/Version20181020065148.php @@ -38,4 +38,9 @@ final class Version20181020065148 extends AbstractMigration { // No down } + + public function isTransactional(): bool + { + return $this->connection->getDatabasePlatform()->getName() !== 'mysql'; + } } diff --git a/data/migrations/Version20181110175521.php b/data/migrations/Version20181110175521.php index aae8d419..6e26837e 100644 --- a/data/migrations/Version20181110175521.php +++ b/data/migrations/Version20181110175521.php @@ -34,4 +34,9 @@ final class Version20181110175521 extends AbstractMigration { return $schema->getTable('visits')->getColumn('user_agent'); } + + public function isTransactional(): bool + { + return $this->connection->getDatabasePlatform()->getName() !== 'mysql'; + } } diff --git a/data/migrations/Version20190824075137.php b/data/migrations/Version20190824075137.php index 208d85a3..0681e6fe 100644 --- a/data/migrations/Version20190824075137.php +++ b/data/migrations/Version20190824075137.php @@ -34,4 +34,9 @@ final class Version20190824075137 extends AbstractMigration { return $schema->getTable('visits')->getColumn('referer'); } + + public function isTransactional(): bool + { + return $this->connection->getDatabasePlatform()->getName() !== 'mysql'; + } } diff --git a/data/migrations/Version20190930165521.php b/data/migrations/Version20190930165521.php index 2e4e8f50..5699863c 100644 --- a/data/migrations/Version20190930165521.php +++ b/data/migrations/Version20190930165521.php @@ -52,4 +52,9 @@ final class Version20190930165521 extends AbstractMigration $schema->getTable('short_urls')->dropColumn('domain_id'); $schema->dropTable('domains'); } + + public function isTransactional(): bool + { + return $this->connection->getDatabasePlatform()->getName() !== 'mysql'; + } } diff --git a/data/migrations/Version20191001201532.php b/data/migrations/Version20191001201532.php index d067101c..20de0486 100644 --- a/data/migrations/Version20191001201532.php +++ b/data/migrations/Version20191001201532.php @@ -46,4 +46,9 @@ final class Version20191001201532 extends AbstractMigration $shortUrls->dropIndex('unique_short_code_plus_domain'); $shortUrls->addUniqueIndex(['short_code']); } + + public function isTransactional(): bool + { + return $this->connection->getDatabasePlatform()->getName() !== 'mysql'; + } } diff --git a/data/migrations/Version20191020074522.php b/data/migrations/Version20191020074522.php index baf1ce7a..b225f733 100644 --- a/data/migrations/Version20191020074522.php +++ b/data/migrations/Version20191020074522.php @@ -34,4 +34,9 @@ final class Version20191020074522 extends AbstractMigration { return $schema->getTable('short_urls')->getColumn('original_url'); } + + public function isTransactional(): bool + { + return $this->connection->getDatabasePlatform()->getName() !== 'mysql'; + } } diff --git a/data/migrations/Version20200105165647.php b/data/migrations/Version20200105165647.php index e0e31f55..ed68850a 100644 --- a/data/migrations/Version20200105165647.php +++ b/data/migrations/Version20200105165647.php @@ -93,4 +93,9 @@ final class Version20200105165647 extends AbstractMigration $visitLocations->dropColumn($colName); } } + + public function isTransactional(): bool + { + return $this->connection->getDatabasePlatform()->getName() !== 'mysql'; + } } diff --git a/data/migrations/Version20200106215144.php b/data/migrations/Version20200106215144.php index 5682baaf..0b760ced 100644 --- a/data/migrations/Version20200106215144.php +++ b/data/migrations/Version20200106215144.php @@ -44,4 +44,9 @@ final class Version20200106215144 extends AbstractMigration ]); } } + + public function isTransactional(): bool + { + return $this->connection->getDatabasePlatform()->getName() !== 'mysql'; + } } diff --git a/data/migrations/Version20200110182849.php b/data/migrations/Version20200110182849.php index 16b858f9..6c66788e 100644 --- a/data/migrations/Version20200110182849.php +++ b/data/migrations/Version20200110182849.php @@ -50,4 +50,9 @@ final class Version20200110182849 extends AbstractMigration { // No need (and no way) to undo this migration } + + public function isTransactional(): bool + { + return $this->connection->getDatabasePlatform()->getName() !== 'mysql'; + } } diff --git a/data/migrations/Version20200323190014.php b/data/migrations/Version20200323190014.php index 47cf402a..92abb87c 100644 --- a/data/migrations/Version20200323190014.php +++ b/data/migrations/Version20200323190014.php @@ -42,4 +42,9 @@ final class Version20200323190014 extends AbstractMigration $visitLocations->dropColumn('is_empty'); } + + public function isTransactional(): bool + { + return $this->connection->getDatabasePlatform()->getName() !== 'mysql'; + } } diff --git a/data/migrations/Version20200503170404.php b/data/migrations/Version20200503170404.php index a102c2c8..418cbea3 100644 --- a/data/migrations/Version20200503170404.php +++ b/data/migrations/Version20200503170404.php @@ -24,4 +24,9 @@ final class Version20200503170404 extends AbstractMigration $this->skipIf(! $visits->hasIndex(self::INDEX_NAME)); $visits->dropIndex(self::INDEX_NAME); } + + public function isTransactional(): bool + { + return $this->connection->getDatabasePlatform()->getName() !== 'mysql'; + } } diff --git a/data/migrations/Version20201023090929.php b/data/migrations/Version20201023090929.php index 05d16c22..0a36f06a 100644 --- a/data/migrations/Version20201023090929.php +++ b/data/migrations/Version20201023090929.php @@ -41,4 +41,9 @@ final class Version20201023090929 extends AbstractMigration $shortUrls->dropColumn('import_original_short_code'); $shortUrls->dropIndex('unique_imports'); } + + public function isTransactional(): bool + { + return $this->connection->getDatabasePlatform()->getName() !== 'mysql'; + } } diff --git a/data/migrations/Version20201102113208.php b/data/migrations/Version20201102113208.php index 405ca5c7..79cec197 100644 --- a/data/migrations/Version20201102113208.php +++ b/data/migrations/Version20201102113208.php @@ -83,4 +83,9 @@ final class Version20201102113208 extends AbstractMigration $shortUrls->removeForeignKey('FK_' . self::API_KEY_COLUMN); $shortUrls->dropColumn(self::API_KEY_COLUMN); } + + public function isTransactional(): bool + { + return $this->connection->getDatabasePlatform()->getName() !== 'mysql'; + } } diff --git a/data/migrations/Version20210102174433.php b/data/migrations/Version20210102174433.php index 835fcbda..60ce36cf 100644 --- a/data/migrations/Version20210102174433.php +++ b/data/migrations/Version20210102174433.php @@ -49,4 +49,9 @@ final class Version20210102174433 extends AbstractMigration $schema->getTable(self::TABLE_NAME)->dropIndex('UQ_role_plus_api_key'); $schema->dropTable(self::TABLE_NAME); } + + public function isTransactional(): bool + { + return $this->connection->getDatabasePlatform()->getName() !== 'mysql'; + } } diff --git a/data/migrations/Version20210118153932.php b/data/migrations/Version20210118153932.php index e17ff533..d81c4857 100644 --- a/data/migrations/Version20210118153932.php +++ b/data/migrations/Version20210118153932.php @@ -23,4 +23,9 @@ final class Version20210118153932 extends AbstractMigration public function down(Schema $schema): void { } + + public function isTransactional(): bool + { + return $this->connection->getDatabasePlatform()->getName() !== 'mysql'; + } } diff --git a/data/migrations/Version20210202181026.php b/data/migrations/Version20210202181026.php index ccf69572..4ecfa8de 100644 --- a/data/migrations/Version20210202181026.php +++ b/data/migrations/Version20210202181026.php @@ -33,4 +33,9 @@ final class Version20210202181026 extends AbstractMigration $shortUrls->dropColumn(self::TITLE); $shortUrls->dropColumn('title_was_auto_resolved'); } + + public function isTransactional(): bool + { + return $this->connection->getDatabasePlatform()->getName() !== 'mysql'; + } } diff --git a/data/migrations/Version20210207100807.php b/data/migrations/Version20210207100807.php index 4c4509c4..6d9e9822 100644 --- a/data/migrations/Version20210207100807.php +++ b/data/migrations/Version20210207100807.php @@ -40,4 +40,9 @@ final class Version20210207100807 extends AbstractMigration $visits->dropColumn('visited_url'); $visits->dropColumn('type'); } + + public function isTransactional(): bool + { + return $this->connection->getDatabasePlatform()->getName() !== 'mysql'; + } } diff --git a/data/migrations/Version20210306165711.php b/data/migrations/Version20210306165711.php index 5b4bd166..cb69741f 100644 --- a/data/migrations/Version20210306165711.php +++ b/data/migrations/Version20210306165711.php @@ -34,4 +34,9 @@ final class Version20210306165711 extends AbstractMigration $apiKeys->dropColumn(self::COLUMN); } + + public function isTransactional(): bool + { + return $this->connection->getDatabasePlatform()->getName() !== 'mysql'; + } } diff --git a/data/migrations/Version20210522051601.php b/data/migrations/Version20210522051601.php index 9e2bd19e..70e0fb34 100644 --- a/data/migrations/Version20210522051601.php +++ b/data/migrations/Version20210522051601.php @@ -23,4 +23,9 @@ final class Version20210522051601 extends AbstractMigration $this->skipIf(! $shortUrls->hasColumn('crawlable')); $shortUrls->dropColumn('crawlable'); } + + public function isTransactional(): bool + { + return $this->connection->getDatabasePlatform()->getName() !== 'mysql'; + } } diff --git a/data/migrations/Version20210522124633.php b/data/migrations/Version20210522124633.php index ea486e93..f56b8a92 100644 --- a/data/migrations/Version20210522124633.php +++ b/data/migrations/Version20210522124633.php @@ -25,4 +25,9 @@ final class Version20210522124633 extends AbstractMigration $this->skipIf(! $visits->hasColumn(self::POTENTIAL_BOT_COLUMN)); $visits->dropColumn(self::POTENTIAL_BOT_COLUMN); } + + public function isTransactional(): bool + { + return $this->connection->getDatabasePlatform()->getName() !== 'mysql'; + } } diff --git a/data/migrations/Version20210720143824.php b/data/migrations/Version20210720143824.php index 66e03be5..09e97cfa 100644 --- a/data/migrations/Version20210720143824.php +++ b/data/migrations/Version20210720143824.php @@ -38,4 +38,9 @@ final class Version20210720143824 extends AbstractMigration $domainsTable->dropColumn('regular_not_found_redirect'); $domainsTable->dropColumn('invalid_short_url_redirect'); } + + public function isTransactional(): bool + { + return $this->connection->getDatabasePlatform()->getName() !== 'mysql'; + } } diff --git a/data/migrations/Version20211002072605.php b/data/migrations/Version20211002072605.php index 5f8db987..03c98885 100644 --- a/data/migrations/Version20211002072605.php +++ b/data/migrations/Version20211002072605.php @@ -23,4 +23,9 @@ final class Version20211002072605 extends AbstractMigration $this->skipIf(! $shortUrls->hasColumn('forward_query')); $shortUrls->dropColumn('forward_query'); } + + public function isTransactional(): bool + { + return $this->connection->getDatabasePlatform()->getName() !== 'mysql'; + } } diff --git a/data/migrations_template.txt b/data/migrations_template.txt index 482236e6..fa671070 100644 --- a/data/migrations_template.txt +++ b/data/migrations_template.txt @@ -18,4 +18,9 @@ final class <className> extends AbstractMigration { <down> } + + public function isTransactional(): bool + { + return $this->connection->getDatabasePlatform()->getName() !== 'mysql'; + } }