Skip to content

Commit

Permalink
Merge pull request #7699 from nextcloud/bugfix/7528/drop-owncloud-mig…
Browse files Browse the repository at this point in the history
…rations-table-and-recreate-it

Drop the ownCloud migration table instead of reusing it
  • Loading branch information
MorrisJobke authored Jan 4, 2018
2 parents e655732 + 7154050 commit e7aebcf
Showing 1 changed file with 36 additions and 3 deletions.
39 changes: 36 additions & 3 deletions lib/private/DB/MigrationService.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@

namespace OC\DB;

use Doctrine\DBAL\Schema\SchemaException;
use OC\IntegrityCheck\Helpers\AppLocator;
use OC\Migration\SimpleOutput;
use OCP\AppFramework\App;
Expand Down Expand Up @@ -96,9 +97,41 @@ private function createMigrationTable() {
return false;
}

if ($this->connection->tableExists('migrations')) {
$this->migrationTableCreated = true;
return false;
$schema = new SchemaWrapper($this->connection);

/**
* We drop the table when it has different columns or the definition does not
* match. E.g. ownCloud uses a length of 177 for app and 14 for version.
*/
try {
$table = $schema->getTable('migrations');
$columns = $table->getColumns();

if (count($columns) === 2) {
try {
$column = $table->getColumn('app');
$schemaMismatch = $column->getLength() !== 255;

if (!$schemaMismatch) {
$column = $table->getColumn('version');
$schemaMismatch = $column->getLength() !== 255;
}
} catch (SchemaException $e) {
// One of the columns is missing
$schemaMismatch = true;
}

if (!$schemaMismatch) {
// Table exists and schema matches: return back!
$this->migrationTableCreated = true;
return false;
}
}

// Drop the table, when it didn't match our expectations.
$this->connection->dropTable($this->connection->getPrefix() . 'migrations');
} catch (SchemaException $e) {
// Table not found, no need to panic, we will create it.
}

$tableName = $this->connection->getPrefix() . 'migrations';
Expand Down

0 comments on commit e7aebcf

Please sign in to comment.