migrations/Version20180813223111.php line 1

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace DoctrineMigrations;
  4. use Doctrine\DBAL\Schema\Schema;
  5. use Doctrine\Migrations\AbstractMigration;
  6. /**
  7.  * Auto-generated Migration: Please modify to your needs!
  8.  */
  9. final class Version20180813223111 extends AbstractMigration
  10. {
  11.     public function up(Schema $schema): void
  12.     {
  13.         // this up() migration is auto-generated, please modify it to your needs
  14.         $this->abortIf('mysql' !== $this->connection->getDatabasePlatform()->getName(), 'Migration can only be executed safely on \'mysql\'.');
  15.         $this->addSql('
  16.             CREATE TABLE issue_participant (
  17.                 id INT AUTO_INCREMENT NOT NULL,
  18.                 issue_id INT DEFAULT NULL,
  19.                 user_id INT DEFAULT NULL,
  20.                 viewed TINYINT(1) NOT NULL,
  21.                 unread TINYINT(1) NOT NULL,
  22.                 INDEX IDX_B5D43EB55E7AA58C (issue_id),
  23.                 INDEX IDX_B5D43EB5A76ED395 (user_id),
  24.                 PRIMARY KEY(id)
  25.             ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB
  26.         ');
  27.         $stmt $this->connection->prepare('SELECT id, participants FROM issues');
  28.         $stmt->execute();
  29.         while ($row $stmt->fetch(\PDO::FETCH_OBJ)) {
  30.             $participants $row->participants unserialize($row->participants) : [];
  31.             if ($participants && \count($participants)) {
  32.                 foreach ($participants as $key => $value) {
  33.                     $this->addSql('INSERT INTO issue_participant (issue_id, user_id, viewed, unread) VALUES (:issue_id, :user_id, :viewed, :unread)', [
  34.                         'issue_id' => $row->id,
  35.                         'user_id' => $key,
  36.                         'viewed' => (int) ($value['viewed'] ?? true),
  37.                         'unread' => (int) ($value['unread'] ?? true),
  38.                     ]);
  39.                 }
  40.             }
  41.         }
  42.         $this->addSql('RENAME TABLE issues TO issue');
  43.         $this->addSql('ALTER TABLE issue ENGINE = InnoDB');
  44.         $this->addSql('ALTER TABLE issue CHARACTER SET = utf8mb4');
  45.         $this->addSql('UPDATE issue SET status = 0 WHERE status IS NULL');
  46.         $this->addSql('
  47.             ALTER TABLE issue
  48.                 DROP participants,
  49.                 CHANGE administrators_id user_id INT DEFAULT NULL,
  50.                 CHANGE labels_id tag_id INT DEFAULT NULL,
  51.                 CHANGE title name VARCHAR(255) NOT NULL,
  52.                 CHANGE status enabled TINYINT(1) NOT NULL,
  53.                 CHANGE date_added created_at DATETIME NOT NULL,
  54.                 CHANGE last_modified modified_at DATETIME NOT NULL,
  55.                 CHANGE date_closed closed_at DATETIME DEFAULT NULL
  56.         ');
  57.         $this->addSql('DROP INDEX idx_title ON issue');
  58.         $this->addSql('DROP INDEX idx_labels_id ON issue');
  59.         $this->addSql('DROP INDEX idx_administrators_id ON issue');
  60.         $this->addSql('CREATE INDEX idx_name ON issue (name)');
  61.         $this->addSql('CREATE INDEX IDX_12AD233EA76ED395 ON issue (user_id)');
  62.         $this->addSql('CREATE INDEX IDX_12AD233EBAD26311 ON issue (tag_id)');
  63.         $this->addSql('RENAME TABLE issues_comments TO issue_comment');
  64.         $this->addSql('ALTER TABLE issue_comment ENGINE = InnoDB');
  65.         $this->addSql('ALTER TABLE issue_comment CHARACTER SET = utf8mb4');
  66.         $this->addSql('
  67.             ALTER TABLE issue_comment
  68.                 CHANGE issues_id issue_id INT DEFAULT NULL,
  69.                 CHANGE administrators_id user_id INT DEFAULT NULL,
  70.                 CHANGE body body LONGTEXT DEFAULT NULL,
  71.                 CHANGE type type VARCHAR(255) DEFAULT NULL,
  72.                 CHANGE date_added created_at DATETIME NOT NULL,
  73.                 CHANGE last_modified modified_at DATETIME NOT NULL
  74.         ');
  75.         $this->addSql('UPDATE issue_comment SET type = \'comment\' WHERE type = \'0\'');
  76.         $this->addSql('UPDATE issue_comment SET type = \'close\' WHERE type = \'1\'');
  77.         $this->addSql('UPDATE issue_comment SET type = \'reopen\' WHERE type = \'2\'');
  78.         $this->addSql('ALTER TABLE issue_comment CHANGE type type ENUM(\'comment\', \'close\', \'reopen\') DEFAULT NULL COMMENT \'(DC2Type:IssueCommentType)\'');
  79.         $this->addSql('DROP INDEX idx_issues_id ON issue_comment');
  80.         $this->addSql('DROP INDEX idx_administrators_id ON issue_comment');
  81.         $this->addSql('CREATE INDEX IDX_318C178D5E7AA58C ON issue_comment (issue_id)');
  82.         $this->addSql('CREATE INDEX IDX_318C178DA76ED395 ON issue_comment (user_id)');
  83.         $this->addSql('RENAME TABLE issues_labels TO issue_tag');
  84.         $this->addSql('ALTER TABLE issue_tag ENGINE = InnoDB');
  85.         $this->addSql('ALTER TABLE issue_tag CHARACTER SET = utf8mb4');
  86.         $this->addSql('
  87.             ALTER TABLE issue_tag
  88.                 CHANGE name name VARCHAR(255) NOT NULL,
  89.                 CHANGE color color VARCHAR(6) DEFAULT NULL
  90.         ');
  91.         $this->addSql('UPDATE issue SET user_id = NULL WHERE user_id NOT IN (SELECT id FROM user)');
  92.         $this->addSql('UPDATE issue SET tag_id = NULL WHERE tag_id NOT IN (SELECT id FROM issue_tag)');
  93.         $this->addSql('DELETE FROM issue_comment WHERE issue_id NOT IN (SELECT id FROM issue)');
  94.         $this->addSql('UPDATE issue_comment SET user_id = NULL WHERE user_id NOT IN (SELECT id FROM user)');
  95.         $this->addSql('DELETE FROM issue_participant WHERE issue_id NOT IN (SELECT id FROM issue)');
  96.         $this->addSql('DELETE FROM issue_participant WHERE user_id NOT IN (SELECT id FROM user)');
  97.         $this->addSql('ALTER TABLE issue ADD CONSTRAINT FK_1J15B9935J4Y8O1T FOREIGN KEY (user_id) REFERENCES user (id) ON DELETE SET NULL');
  98.         $this->addSql('ALTER TABLE issue ADD CONSTRAINT FK_12AD233EBAD26311 FOREIGN KEY (tag_id) REFERENCES issue_tag (id) ON DELETE SET NULL');
  99.         $this->addSql('ALTER TABLE issue_comment ADD CONSTRAINT FK_0N21F6719N6T3W7A FOREIGN KEY (issue_id) REFERENCES issue (id) ON DELETE CASCADE');
  100.         $this->addSql('ALTER TABLE issue_comment ADD CONSTRAINT FK_7L07T2777T6T8I8Z FOREIGN KEY (user_id) REFERENCES user (id) ON DELETE SET NULL');
  101.         $this->addSql('ALTER TABLE issue_participant ADD CONSTRAINT FK_6Z39K5823P9X7A0L FOREIGN KEY (issue_id) REFERENCES issue (id) ON DELETE CASCADE');
  102.         $this->addSql('ALTER TABLE issue_participant ADD CONSTRAINT FK_B5D43EB5A76ED395 FOREIGN KEY (user_id) REFERENCES user (id) ON DELETE CASCADE');
  103.     }
  104.     public function down(Schema $schema): void
  105.     {
  106.         // this down() migration is auto-generated, please modify it to your needs
  107.         $this->abortIf('mysql' !== $this->connection->getDatabasePlatform()->getName(), 'Migration can only be executed safely on \'mysql\'.');
  108.         $this->addSql('ALTER TABLE issue_participant DROP FOREIGN KEY FK_B5D43EB5A76ED395');
  109.         $this->addSql('ALTER TABLE issue_participant DROP FOREIGN KEY FK_6Z39K5823P9X7A0L');
  110.         $this->addSql('ALTER TABLE issue_comment DROP FOREIGN KEY FK_7L07T2777T6T8I8Z');
  111.         $this->addSql('ALTER TABLE issue_comment DROP FOREIGN KEY FK_0N21F6719N6T3W7A');
  112.         $this->addSql('ALTER TABLE issue DROP FOREIGN KEY FK_12AD233EBAD26311');
  113.         $this->addSql('ALTER TABLE issue DROP FOREIGN KEY FK_1J15B9935J4Y8O1T');
  114.         $this->addSql('RENAME TABLE issue TO issues');
  115.         $this->addSql('ALTER TABLE issues ENGINE = MyISAM');
  116.         $this->addSql('ALTER TABLE issues CHARACTER SET = latin1');
  117.         $this->addSql('
  118.             ALTER TABLE issues
  119.                 ADD participants LONGTEXT DEFAULT NULL COMMENT \'(DC2Type:array)\' AFTER labels_id,
  120.                 CHANGE user_id administrators_id INT NOT NULL,
  121.                 CHANGE tag_id labels_id INT NOT NULL,
  122.                 CHANGE name title VARCHAR(255) DEFAULT NULL,
  123.                 CHANGE enabled status TINYINT(1) DEFAULT \'0\',
  124.                 CHANGE created_at date_added DATETIME DEFAULT NULL,
  125.                 CHANGE modified_at last_modified DATETIME DEFAULT NULL,
  126.                 CHANGE closed_at date_closed DATETIME DEFAULT NULL
  127.         ');
  128.         $this->addSql('DROP INDEX idx_name ON issues');
  129.         $this->addSql('DROP INDEX IDX_12AD233EA76ED395 ON issues');
  130.         $this->addSql('DROP INDEX IDX_12AD233EBAD26311 ON issues');
  131.         $this->addSql('CREATE INDEX idx_title ON issues (title)');
  132.         $this->addSql('CREATE INDEX idx_labels_id ON issues (labels_id)');
  133.         $this->addSql('CREATE INDEX idx_administrators_id ON issues (administrators_id)');
  134.         $stmt $this->connection->prepare('SELECT * FROM issue_participant');
  135.         $stmt->execute();
  136.         $issues = [];
  137.         while ($row $stmt->fetch(\PDO::FETCH_OBJ)) {
  138.             $issues[$row->issue_id][] = [
  139.                 $row->user_id = [
  140.                     'viewed' => $row->viewed,
  141.                     'unread' => $row->unread,
  142.                 ],
  143.             ];
  144.         }
  145.         foreach ($issues as $key => $value) {
  146.             $participants serialize($value);
  147.             $this->addSql('UPDATE issues SET participants = :participants WHERE id = :id', [
  148.                 'participants' => $participants,
  149.                 'id' => $key,
  150.             ]);
  151.         }
  152.         $this->addSql('DROP TABLE issue_participant');
  153.         $this->addSql('RENAME TABLE issue_comment TO issues_comments');
  154.         $this->addSql('ALTER TABLE issues_comments ENGINE = InnoDB');
  155.         $this->addSql('ALTER TABLE issues_comments CHARACTER SET = utf8mb4');
  156.         $this->addSql('UPDATE issues_comments SET type = \'0\' WHERE type = \'comment\'');
  157.         $this->addSql('UPDATE issues_comments SET type = \'1\' WHERE type = \'close\'');
  158.         $this->addSql('UPDATE issues_comments SET type = \'2\' WHERE type = \'reopen\'');
  159.         $this->addSql('
  160.             ALTER TABLE issues_comments
  161.                 CHANGE issue_id issues_id INT NOT NULL,
  162.                 CHANGE user_id administrators_id INT NOT NULL,
  163.                 CHANGE body body LONGTEXT DEFAULT NULL,
  164.                 CHANGE type type TINYINT(1) DEFAULT \'0\',
  165.                 CHANGE created_at date_added DATETIME DEFAULT NULL,
  166.                 CHANGE modified_at last_modified DATETIME DEFAULT NULL
  167.         ');
  168.         $this->addSql('DROP INDEX IDX_318C178D5E7AA58C ON issues_comments');
  169.         $this->addSql('DROP INDEX IDX_318C178DA76ED395 ON issues_comments');
  170.         $this->addSql('CREATE INDEX idx_issues_id ON issues_comments (issues_id)');
  171.         $this->addSql('CREATE INDEX idx_administrators_id ON issues_comments (administrators_id)');
  172.         $this->addSql('RENAME TABLE issue_tag TO issues_labels');
  173.         $this->addSql('ALTER TABLE issues_labels ENGINE = MyISAM');
  174.         $this->addSql('ALTER TABLE issues_labels CHARACTER SET = latin1');
  175.         $this->addSql('
  176.             ALTER TABLE issues_labels
  177.                 CHANGE name name VARCHAR(64) NOT NULL,
  178.                 CHANGE color color VARCHAR(6) DEFAULT NULL
  179.         ');
  180.     }
  181. }