From d1a6e60b01649c975b3505f19ab628aa8d846263 Mon Sep 17 00:00:00 2001 From: Alejandro Celaya Date: Thu, 22 Feb 2024 09:35:14 +0100 Subject: [PATCH] Add migration to update long URLs columns to text type --- CHANGELOG.md | 3 +- .../Core/migrations/Version20240220214031.php | 31 ++++++++++++++++++- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9f51f641..f1cf0b8d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,7 +25,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com), and this * [#1786](https://github.com/shlinkio/shlink/issues/1786) Run API tests with RoadRunner by default. * [#2008](https://github.com/shlinkio/shlink/issues/2008) Update to Doctrine ORM 3.0. * [#2010](https://github.com/shlinkio/shlink/issues/2010) Update to Symfony 7.0 components. -* [#2016](https://github.com/shlinkio/shlink/issues/2016) Simplify and improve how code coverage is generated in API and CLI tests". +* [#2016](https://github.com/shlinkio/shlink/issues/2016) Simplify and improve how code coverage is generated in API and CLI tests. +* [#1674](https://github.com/shlinkio/shlink/issues/1674) Database columns persisting long URLs have now `TEXT` type, which allows for much longer values. ### Deprecated * *Nothing* diff --git a/module/Core/migrations/Version20240220214031.php b/module/Core/migrations/Version20240220214031.php index 0cf56094..b8dc12fd 100644 --- a/module/Core/migrations/Version20240220214031.php +++ b/module/Core/migrations/Version20240220214031.php @@ -6,18 +6,47 @@ namespace ShlinkMigrations; use Doctrine\DBAL\Platforms\MySQLPlatform; use Doctrine\DBAL\Schema\Schema; +use Doctrine\DBAL\Types\Type; +use Doctrine\DBAL\Types\Types; use Doctrine\Migrations\AbstractMigration; +use function in_array; + final class Version20240220214031 extends AbstractMigration { + private const DOMAINS_COLUMNS = ['base_url_redirect', 'regular_not_found_redirect', 'invalid_short_url_redirect']; + private const TEXT_COLUMNS = [ + 'domains' => self::DOMAINS_COLUMNS, + 'device_long_urls' => ['long_url'], + 'short_urls' => ['original_url'], + ]; + public function up(Schema $schema): void { + $textType = Type::getType(Types::TEXT); + foreach (self::TEXT_COLUMNS as $table => $columns) { + $t = $schema->getTable($table); + + foreach ($columns as $column) { + $c = $t->getColumn($column); + + if ($c->getType() === $textType) { + continue; + } + + if (in_array($column, self::DOMAINS_COLUMNS, true)) { + // Domain columns had an incorrect length + $t->modifyColumn($column, ['length' => 2048]); + } + $c->setType($textType); + } + } } public function down(Schema $schema): void { - + // Can't revert from TEXT to STRING, as it's bigger } public function isTransactional(): bool