X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=app%2FDoctrineMigrations%2FVersion20170719231144.php;h=93fe7f26031c44fe426f51ff78601fbc9776b6eb;hb=f168642b5041ddd97973f15cf8da8e69ea3db5f2;hp=691eae5158e96786cb88ecc2e5e189899bae307a;hpb=bd164a75c42accdc1601a69d101e759d4326e018;p=github%2Fwallabag%2Fwallabag.git diff --git a/app/DoctrineMigrations/Version20170719231144.php b/app/DoctrineMigrations/Version20170719231144.php index 691eae51..93fe7f26 100644 --- a/app/DoctrineMigrations/Version20170719231144.php +++ b/app/DoctrineMigrations/Version20170719231144.php @@ -2,58 +2,43 @@ namespace Application\Migrations; -use Doctrine\DBAL\Migrations\AbstractMigration; use Doctrine\DBAL\Schema\Schema; -use Symfony\Component\DependencyInjection\ContainerAwareInterface; -use Symfony\Component\DependencyInjection\ContainerInterface; +use Wallabag\CoreBundle\Doctrine\WallabagMigration; /** - * Changed tags to lowercase + * Changed tags to lowercase. */ -class Version20170719231144 extends AbstractMigration implements ContainerAwareInterface +class Version20170719231144 extends WallabagMigration { - /** - * @var ContainerInterface - */ - private $container; - - public function setContainer(ContainerInterface $container = null) - { - $this->container = $container; - } - - private function getTable($tableName) - { - return $this->container->getParameter('database_table_prefix').$tableName; - } - /** * @param Schema $schema */ public function up(Schema $schema) { - $this->skipIf($this->connection->getDatabasePlatform()->getName() == 'sqlite', 'Migration can only be executed safely on \'mysql\' or \'postgresql\'.'); - + $this->skipIf('sqlite' === $this->connection->getDatabasePlatform()->getName(), 'Migration can only be executed safely on \'mysql\' or \'postgresql\'.'); + // Find tags which need to be merged - $dupTags = $this->connection->query(" - SELECT LOWER(label) - FROM ".$this->getTable('tag')." + $dupTags = $this->connection->query(' + SELECT LOWER(label) AS lower_label + FROM ' . $this->getTable('tag') . ' GROUP BY LOWER(label) - HAVING COUNT(*) > 1" + HAVING COUNT(*) > 1' ); $dupTags->execute(); foreach ($dupTags->fetchAll() as $duplicates) { - $label = $duplicates['LOWER(label)']; + $label = $duplicates['lower_label']; // Retrieve all duplicate tags for a given tag - $tags = $this->connection->query(" + $tags = $this->connection->executeQuery(' SELECT id - FROM ".$this->getTable('tag')." - WHERE LOWER(label) = '".$label."' - ORDER BY id ASC" + FROM ' . $this->getTable('tag') . ' + WHERE LOWER(label) = :label + ORDER BY id ASC', + [ + 'label' => $label, + ] ); - $tags->execute(); $first = true; $newId = null; @@ -70,26 +55,37 @@ class Version20170719231144 extends AbstractMigration implements ContainerAwareI } // Just in case... - if (count($ids) > 0) { + if (\count($ids) > 0) { // Merge tags - $this->addSql(" - UPDATE ".$this->getTable('entry_tag')." - SET tag_id = ".$newId." - WHERE tag_id IN (".implode(',', $ids).")" + $this->addSql(' + UPDATE ' . $this->getTable('entry_tag') . ' + SET tag_id = ' . $newId . ' + WHERE tag_id IN (' . implode(',', $ids) . ') + AND entry_id NOT IN ( + SELECT entry_id + FROM (SELECT * FROM ' . $this->getTable('entry_tag') . ') AS _entry_tag + WHERE tag_id = ' . $newId . ' + )' + ); + + // Delete links to unused tags + $this->addSql(' + DELETE FROM ' . $this->getTable('entry_tag') . ' + WHERE tag_id IN (' . implode(',', $ids) . ')' ); // Delete unused tags - $this->addSql(" - DELETE FROM ".$this->getTable('tag')." - WHERE id IN (".implode(',', $ids).")" + $this->addSql(' + DELETE FROM ' . $this->getTable('tag') . ' + WHERE id IN (' . implode(',', $ids) . ')' ); } } // Iterate over all tags to lowercase them - $this->addSql(" - UPDATE ".$this->getTable('tag')." - SET label = LOWER(label)" + $this->addSql(' + UPDATE ' . $this->getTable('tag') . ' + SET label = LOWER(label)' ); }