Merge pull request #7699 from nextcloud/bugfix/7528/drop-owncloud-migrations-table-and-recreate-it
Drop the ownCloud migration table instead of reusing it
This commit is contained in:
commit
e7aebcfd6b
|
@ -23,6 +23,7 @@
|
||||||
|
|
||||||
namespace OC\DB;
|
namespace OC\DB;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Schema\SchemaException;
|
||||||
use OC\IntegrityCheck\Helpers\AppLocator;
|
use OC\IntegrityCheck\Helpers\AppLocator;
|
||||||
use OC\Migration\SimpleOutput;
|
use OC\Migration\SimpleOutput;
|
||||||
use OCP\AppFramework\App;
|
use OCP\AppFramework\App;
|
||||||
|
@ -96,9 +97,41 @@ class MigrationService {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($this->connection->tableExists('migrations')) {
|
$schema = new SchemaWrapper($this->connection);
|
||||||
$this->migrationTableCreated = true;
|
|
||||||
return false;
|
/**
|
||||||
|
* 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';
|
$tableName = $this->connection->getPrefix() . 'migrations';
|
||||||
|
|
Loading…
Reference in New Issue