Ignore failures of collation change in the pre update step

Signed-off-by: Joas Schilling <coding@schilljs.com>
This commit is contained in:
Joas Schilling 2016-10-18 11:10:55 +02:00 committed by Morris Jobke
parent d0a3d17912
commit 15bbe02106
No known key found for this signature in database
GPG Key ID: 9CE5ED29E7FCD38A
2 changed files with 30 additions and 11 deletions

View File

@ -129,6 +129,7 @@ class Repair implements IOutput{
*/
public static function getRepairSteps() {
return [
new Collation(\OC::$server->getConfig(), \OC::$server->getLogger(), \OC::$server->getDatabaseConnection(), false),
new RepairMimeTypes(\OC::$server->getConfig()),
new RepairLegacyStorages(\OC::$server->getConfig(), \OC::$server->getDatabaseConnection()),
new AssetCache(),
@ -179,7 +180,7 @@ class Repair implements IOutput{
$connection = \OC::$server->getDatabaseConnection();
$steps = [
new InnoDB(),
new Collation(\OC::$server->getConfig(), $connection),
new Collation(\OC::$server->getConfig(), \OC::$server->getLogger(), $connection, true),
new SqliteAutoincrement($connection),
new SearchLuceneTables(),
];

View File

@ -24,28 +24,38 @@
namespace OC\Repair;
use Doctrine\DBAL\Exception\DriverException;
use Doctrine\DBAL\Platforms\MySqlPlatform;
use OCP\IConfig;
use OCP\IDBConnection;
use OCP\ILogger;
use OCP\Migration\IOutput;
use OCP\Migration\IRepairStep;
class Collation implements IRepairStep {
/**
* @var \OCP\IConfig
*/
/** @var IConfig */
protected $config;
/**
* @var \OC\DB\Connection
*/
/** @var ILogger */
protected $logger;
/** @var IDBConnection */
protected $connection;
/** @var bool */
protected $ignoreFailures;
/**
* @param \OCP\IConfig $config
* @param \OC\DB\Connection $connection
* @param IConfig $config
* @param ILogger $logger
* @param IDBConnection $connection
* @param bool $ignoreFailures
*/
public function __construct($config, $connection) {
public function __construct(IConfig $config, ILogger $logger, IDBConnection $connection, $ignoreFailures) {
$this->connection = $connection;
$this->config = $config;
$this->logger = $logger;
$this->ignoreFailures = $ignoreFailures;
}
public function getName() {
@ -67,7 +77,15 @@ class Collation implements IRepairStep {
foreach ($tables as $table) {
$output->info("Change collation for $table ...");
$query = $this->connection->prepare('ALTER TABLE `' . $table . '` CONVERT TO CHARACTER SET ' . $characterSet . ' COLLATE ' . $characterSet . '_bin;');
$query->execute();
try {
$query->execute();
} catch (DriverException $e) {
// Just log this
$this->logger->logException($e);
if (!$this->ignoreFailures) {
throw $e;
}
}
}
}