mirror of
https://github.com/nextcloud/server.git
synced 2026-02-20 00:12:30 -05:00
allow comparing clob using expressionbuilder->eq if you explicitly say you're comparing strings
This commit is contained in:
parent
15451b29da
commit
58afddfaa5
5 changed files with 50 additions and 6 deletions
|
|
@ -284,7 +284,9 @@ class Connection extends \Doctrine\DBAL\Connection implements IDBConnection {
|
|||
$whereValues = array_merge($keys, $updatePreconditionValues);
|
||||
foreach ($whereValues as $name => $value) {
|
||||
$where->add($updateQb->expr()->eq(
|
||||
$name, $updateQb->createNamedParameter($value, $this->getType($value))
|
||||
$name,
|
||||
$updateQb->createNamedParameter($value, $this->getType($value)),
|
||||
$this->getType($value)
|
||||
));
|
||||
}
|
||||
$updateQb->where($where);
|
||||
|
|
|
|||
|
|
@ -27,10 +27,10 @@ use OCP\IDBConnection;
|
|||
|
||||
class ExpressionBuilder implements IExpressionBuilder {
|
||||
/** @var \Doctrine\DBAL\Query\Expression\ExpressionBuilder */
|
||||
private $expressionBuilder;
|
||||
protected $expressionBuilder;
|
||||
|
||||
/** @var QuoteHelper */
|
||||
private $helper;
|
||||
protected $helper;
|
||||
|
||||
/**
|
||||
* Initializes a new <tt>ExpressionBuilder</tt>.
|
||||
|
|
@ -109,10 +109,12 @@ class ExpressionBuilder implements IExpressionBuilder {
|
|||
*
|
||||
* @param mixed $x The left expression.
|
||||
* @param mixed $y The right expression.
|
||||
* @param int|null $type one of the \PDO::PARAM_* constants
|
||||
* required when comparing text fields for oci compatibility
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function eq($x, $y) {
|
||||
public function eq($x, $y, $type = null) {
|
||||
$x = $this->helper->quoteColumnName($x);
|
||||
$y = $this->helper->quoteColumnName($y);
|
||||
return $this->expressionBuilder->eq($x, $y);
|
||||
|
|
|
|||
33
lib/private/db/querybuilder/ociexpressionbuilder.php
Normal file
33
lib/private/db/querybuilder/ociexpressionbuilder.php
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
<?php
|
||||
/**
|
||||
* @author Joas Schilling <nickvergessen@owncloud.com>
|
||||
*
|
||||
* @copyright Copyright (c) 2016, ownCloud, Inc.
|
||||
* @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\QueryBuilder;
|
||||
|
||||
class OCIExpressionBuilder extends ExpressionBuilder {
|
||||
public function eq($x, $y, $type = null) {
|
||||
$x = $this->helper->quoteColumnName($x);
|
||||
$y = $this->helper->quoteColumnName($y);
|
||||
if ($type === \PDO::PARAM_STR) {
|
||||
$x = new QueryFunction('to_char(' . $x . ')');
|
||||
}
|
||||
return $this->expressionBuilder->eq($x, $y);
|
||||
}
|
||||
}
|
||||
|
|
@ -21,6 +21,7 @@
|
|||
|
||||
namespace OC\DB\QueryBuilder;
|
||||
|
||||
use OC\DB\OracleConnection;
|
||||
use OCP\DB\QueryBuilder\IQueryBuilder;
|
||||
use OCP\DB\QueryBuilder\IQueryFunction;
|
||||
use OCP\DB\QueryBuilder\IParameter;
|
||||
|
|
@ -82,7 +83,11 @@ class QueryBuilder implements IQueryBuilder {
|
|||
* @return \OCP\DB\QueryBuilder\IExpressionBuilder
|
||||
*/
|
||||
public function expr() {
|
||||
return new ExpressionBuilder($this->connection);
|
||||
if ($this->connection instanceof OracleConnection) {
|
||||
return new OCIExpressionBuilder($this->connection);
|
||||
} else {
|
||||
return new ExpressionBuilder($this->connection);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -84,11 +84,13 @@ interface IExpressionBuilder {
|
|||
*
|
||||
* @param mixed $x The left expression.
|
||||
* @param mixed $y The right expression.
|
||||
* @param int|null $type @since 9.0.0 one of the \PDO::PARAM_* constants
|
||||
* required when comparing text fields for oci compatibility.
|
||||
*
|
||||
* @return string
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function eq($x, $y);
|
||||
public function eq($x, $y, $type = null);
|
||||
|
||||
/**
|
||||
* Creates a non equality comparison expression with the given arguments.
|
||||
|
|
|
|||
Loading…
Reference in a new issue