diff options
author | Joas Schilling <coding@schilljs.com> | 2019-07-11 12:11:07 +0200 |
---|---|---|
committer | Joas Schilling <coding@schilljs.com> | 2019-07-11 12:14:25 +0200 |
commit | 0d4ca0e754bc9dfeffac68e80af33fff3713c915 (patch) | |
tree | e0913e66557943da500060d48333d9f2604e6838 /lib/private/Repair | |
parent | 13e0a950639d74d97fb971009f4fe821bdc39acc (diff) | |
download | nextcloud-server-0d4ca0e754bc9dfeffac68e80af33fff3713c915.tar.gz nextcloud-server-0d4ca0e754bc9dfeffac68e80af33fff3713c915.zip |
Drop foreign key before trying to drop the accounts table
Signed-off-by: Joas Schilling <coding@schilljs.com>
Diffstat (limited to 'lib/private/Repair')
-rw-r--r-- | lib/private/Repair/Owncloud/SaveAccountsTableData.php | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/lib/private/Repair/Owncloud/SaveAccountsTableData.php b/lib/private/Repair/Owncloud/SaveAccountsTableData.php index c9e67356fb9..f62f8b56b26 100644 --- a/lib/private/Repair/Owncloud/SaveAccountsTableData.php +++ b/lib/private/Repair/Owncloud/SaveAccountsTableData.php @@ -44,6 +44,8 @@ class SaveAccountsTableData implements IRepairStep { /** @var IConfig */ protected $config; + protected $hasForeignKeyOnPersistentLocks = false; + /** * @param IDBConnection $db * @param IConfig $config @@ -77,6 +79,9 @@ class SaveAccountsTableData implements IRepairStep { } // Remove the table + if ($this->hasForeignKeyOnPersistentLocks) { + $this->db->dropTable('persistent_locks'); + } $this->db->dropTable('accounts'); } @@ -85,14 +90,29 @@ class SaveAccountsTableData implements IRepairStep { */ protected function shouldRun() { $schema = $this->db->createSchema(); + $prefix = $this->config->getSystemValue('dbtableprefix', 'oc_'); - $tableName = $this->config->getSystemValue('dbtableprefix', 'oc_') . 'accounts'; + $tableName = $prefix . 'accounts'; if (!$schema->hasTable($tableName)) { return false; } $table = $schema->getTable($tableName); - return $table->hasColumn('user_id'); + if (!$table->hasColumn('user_id')) { + return false; + } + + if ($schema->hasTable($prefix . 'persistent_locks')) { + $locksTable = $schema->getTable($prefix . 'persistent_locks'); + $foreignKeys = $locksTable->getForeignKeys(); + foreach ($foreignKeys as $foreignKey) { + if ($tableName === $foreignKey->getForeignTableName()) { + $this->hasForeignKeyOnPersistentLocks = true; + } + } + } + + return true; } /** |