diff options
author | Thomas Müller <thomas.mueller@tmit.eu> | 2017-02-03 16:24:53 +0100 |
---|---|---|
committer | Roeland Jago Douma <roeland@famdouma.nl> | 2017-04-28 09:35:36 +0200 |
commit | 43427e26d78123e66652741d960c14cf40342715 (patch) | |
tree | 411718cd0fb932c2fce38fb6dc879bcdbad12144 /lib | |
parent | 6d93cb74888ae0da0d2286ca1cd82179ea367513 (diff) | |
download | nextcloud-server-43427e26d78123e66652741d960c14cf40342715.tar.gz nextcloud-server-43427e26d78123e66652741d960c14cf40342715.zip |
Add console command to migrate the charset
Diffstat (limited to 'lib')
-rw-r--r-- | lib/private/DB/MySqlTools.php | 49 | ||||
-rw-r--r-- | lib/private/Setup/MySQL.php | 30 |
2 files changed, 56 insertions, 23 deletions
diff --git a/lib/private/DB/MySqlTools.php b/lib/private/DB/MySqlTools.php new file mode 100644 index 00000000000..32f1de887c3 --- /dev/null +++ b/lib/private/DB/MySqlTools.php @@ -0,0 +1,49 @@ +<?php +/** + * @author Thomas Müller <thomas.mueller@tmit.eu> + * + * @copyright Copyright (c) 2017, ownCloud GmbH + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace OC\DB; + +use OCP\IDBConnection; + +/** +* Various MySQL specific helper functions. +*/ +class MySqlTools { + + /** + * @param Connection $connection + * @return bool + */ + public function supports4ByteCharset(IDBConnection $connection) { + foreach (['innodb_file_format' => 'Barracuda', 'innodb_large_prefix' => 'ON', 'innodb_file_per_table' => 'ON'] as $var => $val) { + $result = $connection->executeQuery("SHOW VARIABLES LIKE '$var'"); + $rows = $result->fetch(); + $result->closeCursor(); + if ($rows === false) { + return false; + } + if (strcasecmp($rows['Value'], $val) !== 0) { + return false; + } + } + return true; + } +} diff --git a/lib/private/Setup/MySQL.php b/lib/private/Setup/MySQL.php index d72a106053f..3f3ad6d9589 100644 --- a/lib/private/Setup/MySQL.php +++ b/lib/private/Setup/MySQL.php @@ -27,7 +27,7 @@ */ namespace OC\Setup; -use OC\DB\ConnectionFactory; +use OC\DB\MySqlTools; use OCP\IDBConnection; class MySQL extends AbstractDatabase { @@ -38,9 +38,12 @@ class MySQL extends AbstractDatabase { $connection = $this->connect(['dbname' => null]); // detect mb4 - if (is_null($this->config->getSValue('mysql.utf8mb4', null)) && $this->supports4ByteCharset($connection)) { - $this->config->setValue('mysql.utf8mb4', true); - $connection = $this->connect(); + if (is_null($this->config->getValue('mysql.utf8mb4', null))) { + $tools = new MySqlTools(); + if ($tools->supports4ByteCharset($connection)) { + $this->config->setValue('mysql.utf8mb4', true); + $connection = $this->connect(); + } } $this->createSpecificUser($username, $connection); @@ -169,23 +172,4 @@ class MySQL extends AbstractDatabase { 'dbpassword' => $this->dbPassword, ]); } - - /** - * @param IDBConnection $connection - * @return bool - */ - private function supports4ByteCharset(IDBConnection $connection) { - foreach (['innodb_file_format' => 'Barracuda', 'innodb_large_prefix' => 'ON', 'innodb_file_per_table' => 'ON'] as $var => $val) { - $result = $connection->executeQuery("SHOW VARIABLES LIKE '$var'"); - $rows = $result->fetch(); - $result->closeCursor(); - if ($rows === false) { - return false; - } - if (strcasecmp($rows['Value'], $val) === 0) { - return false; - } - } - return true; - } } |