]> source.dussan.org Git - nextcloud-server.git/commitdiff
allow to re-run migration step when backup DB is already created
authorArthur Schiwon <blizzz@arthur-schiwon.de>
Wed, 2 Feb 2022 17:26:31 +0000 (18:26 +0100)
committerbackportbot[bot] <backportbot[bot]@users.noreply.github.com>
Thu, 10 Feb 2022 18:48:33 +0000 (18:48 +0000)
- to heal incomplete states from broken upgrades

Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
apps/user_ldap/lib/Migration/Version1130Date20211102154716.php

index 94f0f0aa82e6ec39a52630b35350442b37a64cb0..27f5f5ce504b5fb765485a352237b7d4c1b2293b 100644 (file)
@@ -57,6 +57,17 @@ class Version1130Date20211102154716 extends SimpleMigrationStep {
                foreach (['ldap_user_mapping', 'ldap_group_mapping'] as $tableName) {
                        $this->processDuplicateUUIDs($tableName);
                }
+
+               /** @var ISchemaWrapper $schema */
+               $schema = $schemaClosure();
+               if ($schema->hasTable('ldap_group_mapping_backup')) {
+                       // Previous upgrades of a broken release might have left an incomplete
+                       // ldap_group_mapping_backup table. No need to recreate, but it
+                       // should be empty.
+                       // TRUNCATE is not available from Query Builder, but faster than DELETE FROM.
+                       $sql = $this->dbc->getDatabasePlatform()->getTruncateTableSQL('ldap_group_mapping_backup', false);
+                       $this->dbc->executeStatement($sql);
+               }
        }
 
        /**
@@ -98,7 +109,7 @@ class Version1130Date20211102154716 extends SimpleMigrationStep {
                                        $table->addUniqueIndex(['directory_uuid'], 'ldap_user_directory_uuid');
                                        $changeSchema = true;
                                }
-                       } else {
+                       } else if (!$schema->hasTable('ldap_group_mapping_backup')) {
                                // We need to copy the table twice to be able to change primary key, prepare the backup table
                                $table2 = $schema->createTable('ldap_group_mapping_backup');
                                $table2->addColumn('ldap_dn', Types::STRING, [