aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorThomas Müller <thomas.mueller@tmit.eu>2017-02-03 16:24:53 +0100
committerRoeland Jago Douma <roeland@famdouma.nl>2017-04-28 09:35:36 +0200
commit43427e26d78123e66652741d960c14cf40342715 (patch)
tree411718cd0fb932c2fce38fb6dc879bcdbad12144 /lib
parent6d93cb74888ae0da0d2286ca1cd82179ea367513 (diff)
downloadnextcloud-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.php49
-rw-r--r--lib/private/Setup/MySQL.php30
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;
- }
}