mirror of
https://github.com/nextcloud/server.git
synced 2026-06-11 09:42:09 -04:00
Fix like queries in the QueryBuilder
Signed-off-by: Joas Schilling <coding@schilljs.com>
This commit is contained in:
parent
17a2723948
commit
64c9ef96c4
2 changed files with 29 additions and 5 deletions
|
|
@ -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…
Reference in a new issue