浏览代码

fix(revisions): rename revisions table to all users stuck mid-migration process - fixes #836 (#842)

Karol Sójko 1 年之前
父节点
当前提交
a621cf1e3b

+ 12 - 0
packages/revisions/migrations/mysql/1669636497932-remove-date-indexes.ts

@@ -4,6 +4,8 @@ export class removeDateIndexes1669636497932 implements MigrationInterface {
   name = 'removeDateIndexes1669636497932'
 
   public async up(queryRunner: QueryRunner): Promise<void> {
+    await this.renameRevisionsTable(queryRunner)
+
     const indexRevisionsOnCreatedAt = await queryRunner.manager.query(
       'SHOW INDEX FROM `revisions_revisions` where `key_name` = "created_at"',
     )
@@ -25,4 +27,14 @@ export class removeDateIndexes1669636497932 implements MigrationInterface {
     await queryRunner.query('CREATE INDEX `creation_date` ON `revisions_revisions` (`creation_date`)')
     await queryRunner.query('CREATE INDEX `created_at` ON `revisions_revisions` (`created_at`)')
   }
+
+  private async renameRevisionsTable(queryRunner: QueryRunner) {
+    const revisionsTableExistsQueryResult = await queryRunner.manager.query(
+      'SELECT COUNT(*) as count FROM information_schema.tables WHERE table_schema = DATABASE() AND table_name = "revisions"',
+    )
+    const revisionsTableExists = revisionsTableExistsQueryResult[0].count === 1
+    if (revisionsTableExists) {
+      await queryRunner.query('RENAME TABLE `revisions` TO `revisions_revisions`')
+    }
+  }
 }

+ 12 - 0
packages/revisions/migrations/mysql/1669735585016-make-user-uuid-nullable.ts

@@ -4,10 +4,22 @@ export class makeUserUuidNullable1669735585016 implements MigrationInterface {
   name = 'makeUserUuidNullable1669735585016'
 
   public async up(queryRunner: QueryRunner): Promise<void> {
+    await this.renameRevisionsTable(queryRunner)
+
     await queryRunner.query('ALTER TABLE `revisions_revisions` CHANGE `user_uuid` `user_uuid` varchar(36) NULL')
   }
 
   public async down(queryRunner: QueryRunner): Promise<void> {
     await queryRunner.query('ALTER TABLE `revisions_revisions` CHANGE `user_uuid` `user_uuid` varchar(36) NOT NULL')
   }
+
+  private async renameRevisionsTable(queryRunner: QueryRunner) {
+    const revisionsTableExistsQueryResult = await queryRunner.manager.query(
+      'SELECT COUNT(*) as count FROM information_schema.tables WHERE table_schema = DATABASE() AND table_name = "revisions"',
+    )
+    const revisionsTableExists = revisionsTableExistsQueryResult[0].count === 1
+    if (revisionsTableExists) {
+      await queryRunner.query('RENAME TABLE `revisions` TO `revisions_revisions`')
+    }
+  }
 }

+ 12 - 0
packages/revisions/migrations/mysql/1693915383950-add-shared-vault-information.ts

@@ -2,6 +2,8 @@ import { MigrationInterface, QueryRunner } from 'typeorm'
 
 export class AddSharedVaultInformation1693915383950 implements MigrationInterface {
   public async up(queryRunner: QueryRunner): Promise<void> {
+    await this.renameRevisionsTable(queryRunner)
+
     await queryRunner.query('ALTER TABLE `revisions_revisions` ADD `edited_by` varchar(36) NULL')
     await queryRunner.query('ALTER TABLE `revisions_revisions` ADD `shared_vault_uuid` varchar(36) NULL')
     await queryRunner.query('ALTER TABLE `revisions_revisions` ADD `key_system_identifier` varchar(36) NULL')
@@ -16,4 +18,14 @@ export class AddSharedVaultInformation1693915383950 implements MigrationInterfac
     await queryRunner.query('ALTER TABLE `revisions_revisions` DROP COLUMN `shared_vault_uuid`')
     await queryRunner.query('ALTER TABLE `revisions_revisions` DROP COLUMN `last_edited_by`')
   }
+
+  private async renameRevisionsTable(queryRunner: QueryRunner) {
+    const revisionsTableExistsQueryResult = await queryRunner.manager.query(
+      'SELECT COUNT(*) as count FROM information_schema.tables WHERE table_schema = DATABASE() AND table_name = "revisions"',
+    )
+    const revisionsTableExists = revisionsTableExistsQueryResult[0].count === 1
+    if (revisionsTableExists) {
+      await queryRunner.query('RENAME TABLE `revisions` TO `revisions_revisions`')
+    }
+  }
 }