Fix like queries in the QueryBuilder

Signed-off-by: Joas Schilling <coding@schilljs.com>
pull/1773/head
Joas Schilling 8 years ago committed by Morris Jobke
parent 17a2723948
commit 64c9ef96c4
No known key found for this signature in database
GPG Key ID: 9CE5ED29E7FCD38A

@ -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;
}
}

@ -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);
}
}

Loading…
Cancel
Save