X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=app%2FDoctrineMigrations%2FVersion20170719231144.php;h=867540331f840391e3a6d26b927bc0238ffbae75;hb=caf719f1632944c46961b58f9462ef6914f7c607;hp=0f5fa75ae527c2708ee2eec30193723ba772e447;hpb=3af5d41759c13420faa6f426491f1e95e5754908;p=github%2Fwallabag%2Fwallabag.git diff --git a/app/DoctrineMigrations/Version20170719231144.php b/app/DoctrineMigrations/Version20170719231144.php index 0f5fa75a..86754033 100644 --- a/app/DoctrineMigrations/Version20170719231144.php +++ b/app/DoctrineMigrations/Version20170719231144.php @@ -27,11 +27,11 @@ class Version20170719231144 extends AbstractMigration implements ContainerAwareI */ 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) + SELECT LOWER(label) AS lower_label FROM ' . $this->getTable('tag') . ' GROUP BY LOWER(label) HAVING COUNT(*) > 1' @@ -39,16 +39,18 @@ class Version20170719231144 extends AbstractMigration implements ContainerAwareI $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,7 +72,18 @@ class Version20170719231144 extends AbstractMigration implements ContainerAwareI $this->addSql(' UPDATE ' . $this->getTable('entry_tag') . ' SET tag_id = ' . $newId . ' - WHERE tag_id IN (' . implode(',', $ids) . ')' + 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