From 64c9ef96c4a8b205e32cdc1a38038aef18dcf4cf Mon Sep 17 00:00:00 2001
From: Joas Schilling <coding@schilljs.com>
Date: Tue, 18 Oct 2016 11:37:49 +0200
Subject: [PATCH] Fix like queries in the QueryBuilder

Signed-off-by: Joas Schilling <coding@schilljs.com>
---
 lib/private/DB/AdapterMySQL.php               | 15 +++++++++++++--
 .../MySqlExpressionBuilder.php                | 19 ++++++++++++++++---
 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);
 	}
 
 }
-- 
GitLab