Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoas Schilling <coding@schilljs.com>2016-10-18 12:37:49 +0300
committerMorris Jobke <hey@morrisjobke.de>2016-10-19 01:15:01 +0300
commit64c9ef96c4a8b205e32cdc1a38038aef18dcf4cf (patch)
tree03c1fdf534c59644c71e18b2e4c7d6a72901be9f
parent17a2723948830e30713d012f0739c336af2a12f1 (diff)
Fix like queries in the QueryBuilder
Signed-off-by: Joas Schilling <coding@schilljs.com>
-rw-r--r--lib/private/DB/AdapterMySQL.php15
-rw-r--r--lib/private/DB/QueryBuilder/ExpressionBuilder/MySqlExpressionBuilder.php19
2 files changed, 29 insertions, 5 deletions
diff --git a/lib/private/DB/AdapterMySQL.php b/lib/private/DB/AdapterMySQL.php
index 0c0c6b31021..aa784bb83dc 100644
--- a/lib/private/DB/AdapterMySQL.php
+++ b/lib/private/DB/AdapterMySQL.php
@@ -27,6 +27,9 @@ namespace OC\DB;
class AdapterMySQL extends Adapter {
+ /** @var string */
+ protected $charset;
+
/**
* @param string $tableName
*/
@@ -39,8 +42,16 @@ class AdapterMySQL extends Adapter {
}
public function fixupStatement($statement) {
- $characterSet = \OC::$server->getConfig()->getSystemValue('mysql.utf8mb4', false) ? 'utf8mb4' : 'utf8';
- $statement = str_replace(' ILIKE ', ' COLLATE ' . $characterSet . '_general_ci LIKE ', $statement);
+ $statement = str_replace(' ILIKE ', ' COLLATE ' . $this->getCharset() . '_general_ci LIKE ', $statement);
return $statement;
}
+
+ protected function getCharset() {
+ if (!$this->charset) {
+ $params = $this->conn->getParams();
+ $this->charset = isset($params['charset']) ? $params['charset'] : 'utf8';
+ }
+
+ return $this->charset;
+ }
}
diff --git a/lib/private/DB/QueryBuilder/ExpressionBuilder/MySqlExpressionBuilder.php b/lib/private/DB/QueryBuilder/ExpressionBuilder/MySqlExpressionBuilder.php
index 66d8851632f..17f7fd5aa47 100644
--- a/lib/private/DB/QueryBuilder/ExpressionBuilder/MySqlExpressionBuilder.php
+++ b/lib/private/DB/QueryBuilder/ExpressionBuilder/MySqlExpressionBuilder.php
@@ -24,18 +24,31 @@
namespace OC\DB\QueryBuilder\ExpressionBuilder;
-use OC\DB\QueryBuilder\QueryFunction;
-use OCP\DB\QueryBuilder\IQueryBuilder;
+use OC\DB\Connection;
+use OCP\IDBConnection;
class MySqlExpressionBuilder extends ExpressionBuilder {
+ /** @var string */
+ protected $charset;
+
+ /**
+ * @param \OCP\IDBConnection|Connection $connection
+ */
+ public function __construct(IDBConnection $connection) {
+ parent::__construct($connection);
+
+ $params = $connection->getParams();
+ $this->charset = isset($params['charset']) ? $params['charset'] : 'utf8';
+ }
+
/**
* @inheritdoc
*/
public function iLike($x, $y, $type = null) {
$x = $this->helper->quoteColumnName($x);
$y = $this->helper->quoteColumnName($y);
- return $this->expressionBuilder->comparison($x, ' COLLATE utf8_general_ci LIKE', $y);
+ return $this->expressionBuilder->comparison($x, ' COLLATE ' . $this->charset . '_general_ci LIKE', $y);
}
}