2014-07-07 14:32:24 +04:00
|
|
|
<?php
|
|
|
|
/**
|
|
|
|
* Copyright (c) 2014 Thomas Müller <deepdiver@owncloud.com>
|
|
|
|
* This file is licensed under the Affero General Public License version 3 or
|
|
|
|
* later.
|
|
|
|
* See the COPYING-README file.
|
|
|
|
*/
|
|
|
|
|
|
|
|
namespace OC\Repair;
|
|
|
|
|
|
|
|
use Doctrine\DBAL\Platforms\MySqlPlatform;
|
|
|
|
use OC\Hooks\BasicEmitter;
|
|
|
|
|
|
|
|
class InnoDB extends BasicEmitter implements \OC\RepairStep {
|
|
|
|
|
|
|
|
public function getName() {
|
|
|
|
return 'Repair MySQL database engine';
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Fix mime types
|
|
|
|
*/
|
|
|
|
public function run() {
|
|
|
|
$connection = \OC_DB::getConnection();
|
|
|
|
if (!$connection->getDatabasePlatform() instanceof MySqlPlatform) {
|
|
|
|
$this->emit('\OC\Repair', 'info', array('Not a mysql database -> nothing to no'));
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
$tables = $this->getAllMyIsamTables($connection);
|
2014-07-19 22:23:38 +04:00
|
|
|
if (is_array($tables)) {
|
|
|
|
foreach ($tables as $table) {
|
|
|
|
$connection->exec("ALTER TABLE $table ENGINE=InnoDB;");
|
|
|
|
$this->emit('\OC\Repair', 'info', array("Fixed $table"));
|
|
|
|
}
|
2014-07-07 14:32:24 +04:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param \Doctrine\DBAL\Connection $connection
|
|
|
|
* @return string[]
|
|
|
|
*/
|
|
|
|
private function getAllMyIsamTables($connection) {
|
|
|
|
$dbName = \OC::$server->getConfig()->getSystemValue("dbname");
|
|
|
|
$result = $connection->fetchArray(
|
|
|
|
"SELECT table_name FROM information_schema.tables WHERE table_schema = ? AND engine = 'MyISAM'",
|
|
|
|
array($dbName)
|
|
|
|
);
|
|
|
|
|
|
|
|
return $result;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|