namespace OCA\Files\BackgroundJob;
use OC\BackgroundJob\TimedJob;
+use OCP\DB\QueryBuilder\IQueryBuilder;
/**
* Delete all share entries that have no matching entries in the file cache table.
*/
protected function cleanComments() {
$qb = $this->connection->getQueryBuilder();
- $deletedEntries = $this->cleanUp('comments', $qb->createFunction('CAST(`object_id` as INT)'), 'object_type');
+ $deletedEntries = $this->cleanUp('comments', $qb->expr()->castColumn('object_id', IQueryBuilder::PARAM_INT), 'object_type');
$this->logger->debug("$deletedEntries orphaned comments deleted", ['app' => 'DeleteOrphanedItems']);
return $deletedEntries;
}
*/
protected function cleanCommentMarkers() {
$qb = $this->connection->getQueryBuilder();
- $deletedEntries = $this->cleanUp('comments_read_markers', $qb->createFunction('CAST(`object_id` as INT)'), 'object_type');
+ $deletedEntries = $this->cleanUp('comments_read_markers', $qb->expr()->castColumn('object_id', IQueryBuilder::PARAM_INT), 'object_type');
$this->logger->debug("$deletedEntries orphaned comment read marks deleted", ['app' => 'DeleteOrphanedItems']);
return $deletedEntries;
}
+++ /dev/null
-<?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;
-
-use Doctrine\DBAL\Query\Expression\ExpressionBuilder as DoctrineExpressionBuilder;
-use OCP\DB\QueryBuilder\IExpressionBuilder;
-use OCP\IDBConnection;
-
-class ExpressionBuilder implements IExpressionBuilder {
- /** @var \Doctrine\DBAL\Query\Expression\ExpressionBuilder */
- protected $expressionBuilder;
-
- /** @var QuoteHelper */
- protected $helper;
-
- /**
- * Initializes a new <tt>ExpressionBuilder</tt>.
- *
- * @param \OCP\IDBConnection $connection
- */
- public function __construct(IDBConnection $connection) {
- $this->helper = new QuoteHelper();
- $this->expressionBuilder = new DoctrineExpressionBuilder($connection);
- }
-
- /**
- * Creates a conjunction of the given boolean expressions.
- *
- * Example:
- *
- * [php]
- * // (u.type = ?) AND (u.role = ?)
- * $expr->andX('u.type = ?', 'u.role = ?'));
- *
- * @param mixed $x Optional clause. Defaults = null, but requires
- * at least one defined when converting to string.
- *
- * @return \OCP\DB\QueryBuilder\ICompositeExpression
- */
- public function andX($x = null) {
- $arguments = func_get_args();
- $compositeExpression = call_user_func_array([$this->expressionBuilder, 'andX'], $arguments);
- return new CompositeExpression($compositeExpression);
- }
-
- /**
- * Creates a disjunction of the given boolean expressions.
- *
- * Example:
- *
- * [php]
- * // (u.type = ?) OR (u.role = ?)
- * $qb->where($qb->expr()->orX('u.type = ?', 'u.role = ?'));
- *
- * @param mixed $x Optional clause. Defaults = null, but requires
- * at least one defined when converting to string.
- *
- * @return \OCP\DB\QueryBuilder\ICompositeExpression
- */
- public function orX($x = null) {
- $arguments = func_get_args();
- $compositeExpression = call_user_func_array([$this->expressionBuilder, 'orX'], $arguments);
- return new CompositeExpression($compositeExpression);
- }
-
- /**
- * Creates a comparison expression.
- *
- * @param mixed $x The left expression.
- * @param string $operator One of the IExpressionBuilder::* constants.
- * @param mixed $y The right expression.
- * @param mixed|null $type one of the IQueryBuilder::PARAM_* constants
- * required when comparing text fields for oci compatibility
- *
- * @return string
- */
- public function comparison($x, $operator, $y, $type = null) {
- $x = $this->helper->quoteColumnName($x);
- $y = $this->helper->quoteColumnName($y);
- return $this->expressionBuilder->comparison($x, $operator, $y);
- }
-
- /**
- * Creates an equality comparison expression with the given arguments.
- *
- * First argument is considered the left expression and the second is the right expression.
- * When converted to string, it will generated a <left expr> = <right expr>. Example:
- *
- * [php]
- * // u.id = ?
- * $expr->eq('u.id', '?');
- *
- * @param mixed $x The left expression.
- * @param mixed $y The right expression.
- * @param mixed|null $type one of the IQueryBuilder::PARAM_* constants
- * required when comparing text fields for oci compatibility
- *
- * @return string
- */
- public function eq($x, $y, $type = null) {
- $x = $this->helper->quoteColumnName($x);
- $y = $this->helper->quoteColumnName($y);
- return $this->expressionBuilder->eq($x, $y);
- }
-
- /**
- * Creates a non equality comparison expression with the given arguments.
- * First argument is considered the left expression and the second is the right expression.
- * When converted to string, it will generated a <left expr> <> <right expr>. Example:
- *
- * [php]
- * // u.id <> 1
- * $q->where($q->expr()->neq('u.id', '1'));
- *
- * @param mixed $x The left expression.
- * @param mixed $y The right expression.
- * @param mixed|null $type one of the IQueryBuilder::PARAM_* constants
- * required when comparing text fields for oci compatibility
- *
- * @return string
- */
- public function neq($x, $y, $type = null) {
- $x = $this->helper->quoteColumnName($x);
- $y = $this->helper->quoteColumnName($y);
- return $this->expressionBuilder->neq($x, $y);
- }
-
- /**
- * Creates a lower-than comparison expression with the given arguments.
- * First argument is considered the left expression and the second is the right expression.
- * When converted to string, it will generated a <left expr> < <right expr>. Example:
- *
- * [php]
- * // u.id < ?
- * $q->where($q->expr()->lt('u.id', '?'));
- *
- * @param mixed $x The left expression.
- * @param mixed $y The right expression.
- * @param mixed|null $type one of the IQueryBuilder::PARAM_* constants
- * required when comparing text fields for oci compatibility
- *
- * @return string
- */
- public function lt($x, $y, $type = null) {
- $x = $this->helper->quoteColumnName($x);
- $y = $this->helper->quoteColumnName($y);
- return $this->expressionBuilder->lt($x, $y);
- }
-
- /**
- * Creates a lower-than-equal comparison expression with the given arguments.
- * First argument is considered the left expression and the second is the right expression.
- * When converted to string, it will generated a <left expr> <= <right expr>. Example:
- *
- * [php]
- * // u.id <= ?
- * $q->where($q->expr()->lte('u.id', '?'));
- *
- * @param mixed $x The left expression.
- * @param mixed $y The right expression.
- * @param mixed|null $type one of the IQueryBuilder::PARAM_* constants
- * required when comparing text fields for oci compatibility
- *
- * @return string
- */
- public function lte($x, $y, $type = null) {
- $x = $this->helper->quoteColumnName($x);
- $y = $this->helper->quoteColumnName($y);
- return $this->expressionBuilder->lte($x, $y);
- }
-
- /**
- * Creates a greater-than comparison expression with the given arguments.
- * First argument is considered the left expression and the second is the right expression.
- * When converted to string, it will generated a <left expr> > <right expr>. Example:
- *
- * [php]
- * // u.id > ?
- * $q->where($q->expr()->gt('u.id', '?'));
- *
- * @param mixed $x The left expression.
- * @param mixed $y The right expression.
- * @param mixed|null $type one of the IQueryBuilder::PARAM_* constants
- * required when comparing text fields for oci compatibility
- *
- * @return string
- */
- public function gt($x, $y, $type = null) {
- $x = $this->helper->quoteColumnName($x);
- $y = $this->helper->quoteColumnName($y);
- return $this->expressionBuilder->gt($x, $y);
- }
-
- /**
- * Creates a greater-than-equal comparison expression with the given arguments.
- * First argument is considered the left expression and the second is the right expression.
- * When converted to string, it will generated a <left expr> >= <right expr>. Example:
- *
- * [php]
- * // u.id >= ?
- * $q->where($q->expr()->gte('u.id', '?'));
- *
- * @param mixed $x The left expression.
- * @param mixed $y The right expression.
- * @param mixed|null $type one of the IQueryBuilder::PARAM_* constants
- * required when comparing text fields for oci compatibility
- *
- * @return string
- */
- public function gte($x, $y, $type = null) {
- $x = $this->helper->quoteColumnName($x);
- $y = $this->helper->quoteColumnName($y);
- return $this->expressionBuilder->gte($x, $y);
- }
-
- /**
- * Creates an IS NULL expression with the given arguments.
- *
- * @param string $x The field in string format to be restricted by IS NULL.
- *
- * @return string
- */
- public function isNull($x) {
- $x = $this->helper->quoteColumnName($x);
- return $this->expressionBuilder->isNull($x);
- }
-
- /**
- * Creates an IS NOT NULL expression with the given arguments.
- *
- * @param string $x The field in string format to be restricted by IS NOT NULL.
- *
- * @return string
- */
- public function isNotNull($x) {
- $x = $this->helper->quoteColumnName($x);
- return $this->expressionBuilder->isNotNull($x);
- }
-
- /**
- * Creates a LIKE() comparison expression with the given arguments.
- *
- * @param string $x Field in string format to be inspected by LIKE() comparison.
- * @param mixed $y Argument to be used in LIKE() comparison.
- * @param mixed|null $type one of the IQueryBuilder::PARAM_* constants
- * required when comparing text fields for oci compatibility
- *
- * @return string
- */
- public function like($x, $y, $type = null) {
- $x = $this->helper->quoteColumnName($x);
- $y = $this->helper->quoteColumnName($y);
- return $this->expressionBuilder->like($x, $y);
- }
-
- /**
- * Creates a NOT LIKE() comparison expression with the given arguments.
- *
- * @param string $x Field in string format to be inspected by NOT LIKE() comparison.
- * @param mixed $y Argument to be used in NOT LIKE() comparison.
- * @param mixed|null $type one of the IQueryBuilder::PARAM_* constants
- * required when comparing text fields for oci compatibility
- *
- * @return string
- */
- public function notLike($x, $y, $type = null) {
- $x = $this->helper->quoteColumnName($x);
- $y = $this->helper->quoteColumnName($y);
- return $this->expressionBuilder->notLike($x, $y);
- }
-
- /**
- * Creates a IN () comparison expression with the given arguments.
- *
- * @param string $x The field in string format to be inspected by IN() comparison.
- * @param string|array $y The placeholder or the array of values to be used by IN() comparison.
- * @param mixed|null $type one of the IQueryBuilder::PARAM_* constants
- * required when comparing text fields for oci compatibility
- *
- * @return string
- */
- public function in($x, $y, $type = null) {
- $x = $this->helper->quoteColumnName($x);
- $y = $this->helper->quoteColumnNames($y);
- return $this->expressionBuilder->in($x, $y);
- }
-
- /**
- * Creates a NOT IN () comparison expression with the given arguments.
- *
- * @param string $x The field in string format to be inspected by NOT IN() comparison.
- * @param string|array $y The placeholder or the array of values to be used by NOT IN() comparison.
- * @param mixed|null $type one of the IQueryBuilder::PARAM_* constants
- * required when comparing text fields for oci compatibility
- *
- * @return string
- */
- public function notIn($x, $y, $type = null) {
- $x = $this->helper->quoteColumnName($x);
- $y = $this->helper->quoteColumnNames($y);
- return $this->expressionBuilder->notIn($x, $y);
- }
-
- /**
- * Quotes a given input parameter.
- *
- * @param mixed $input The parameter to be quoted.
- * @param mixed|null $type One of the IQueryBuilder::PARAM_* constants
- *
- * @return Literal
- */
- public function literal($input, $type = null) {
- return new Literal($this->expressionBuilder->literal($input, $type));
- }
-}
--- /dev/null
+<?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\ExpressionBuilder;
+
+use Doctrine\DBAL\Query\Expression\ExpressionBuilder as DoctrineExpressionBuilder;
+use OC\DB\QueryBuilder\CompositeExpression;
+use OC\DB\QueryBuilder\Literal;
+use OC\DB\QueryBuilder\QueryFunction;
+use OC\DB\QueryBuilder\QuoteHelper;
+use OCP\DB\QueryBuilder\IExpressionBuilder;
+use OCP\IDBConnection;
+
+class ExpressionBuilder implements IExpressionBuilder {
+ /** @var \Doctrine\DBAL\Query\Expression\ExpressionBuilder */
+ protected $expressionBuilder;
+
+ /** @var QuoteHelper */
+ protected $helper;
+
+ /**
+ * Initializes a new <tt>ExpressionBuilder</tt>.
+ *
+ * @param \OCP\IDBConnection $connection
+ */
+ public function __construct(IDBConnection $connection) {
+ $this->helper = new QuoteHelper();
+ $this->expressionBuilder = new DoctrineExpressionBuilder($connection);
+ }
+
+ /**
+ * Creates a conjunction of the given boolean expressions.
+ *
+ * Example:
+ *
+ * [php]
+ * // (u.type = ?) AND (u.role = ?)
+ * $expr->andX('u.type = ?', 'u.role = ?'));
+ *
+ * @param mixed $x Optional clause. Defaults = null, but requires
+ * at least one defined when converting to string.
+ *
+ * @return \OCP\DB\QueryBuilder\ICompositeExpression
+ */
+ public function andX($x = null) {
+ $arguments = func_get_args();
+ $compositeExpression = call_user_func_array([$this->expressionBuilder, 'andX'], $arguments);
+ return new CompositeExpression($compositeExpression);
+ }
+
+ /**
+ * Creates a disjunction of the given boolean expressions.
+ *
+ * Example:
+ *
+ * [php]
+ * // (u.type = ?) OR (u.role = ?)
+ * $qb->where($qb->expr()->orX('u.type = ?', 'u.role = ?'));
+ *
+ * @param mixed $x Optional clause. Defaults = null, but requires
+ * at least one defined when converting to string.
+ *
+ * @return \OCP\DB\QueryBuilder\ICompositeExpression
+ */
+ public function orX($x = null) {
+ $arguments = func_get_args();
+ $compositeExpression = call_user_func_array([$this->expressionBuilder, 'orX'], $arguments);
+ return new CompositeExpression($compositeExpression);
+ }
+
+ /**
+ * Creates a comparison expression.
+ *
+ * @param mixed $x The left expression.
+ * @param string $operator One of the IExpressionBuilder::* constants.
+ * @param mixed $y The right expression.
+ * @param mixed|null $type one of the IQueryBuilder::PARAM_* constants
+ * required when comparing text fields for oci compatibility
+ *
+ * @return string
+ */
+ public function comparison($x, $operator, $y, $type = null) {
+ $x = $this->helper->quoteColumnName($x);
+ $y = $this->helper->quoteColumnName($y);
+ return $this->expressionBuilder->comparison($x, $operator, $y);
+ }
+
+ /**
+ * Creates an equality comparison expression with the given arguments.
+ *
+ * First argument is considered the left expression and the second is the right expression.
+ * When converted to string, it will generated a <left expr> = <right expr>. Example:
+ *
+ * [php]
+ * // u.id = ?
+ * $expr->eq('u.id', '?');
+ *
+ * @param mixed $x The left expression.
+ * @param mixed $y The right expression.
+ * @param mixed|null $type one of the IQueryBuilder::PARAM_* constants
+ * required when comparing text fields for oci compatibility
+ *
+ * @return string
+ */
+ public function eq($x, $y, $type = null) {
+ $x = $this->helper->quoteColumnName($x);
+ $y = $this->helper->quoteColumnName($y);
+ return $this->expressionBuilder->eq($x, $y);
+ }
+
+ /**
+ * Creates a non equality comparison expression with the given arguments.
+ * First argument is considered the left expression and the second is the right expression.
+ * When converted to string, it will generated a <left expr> <> <right expr>. Example:
+ *
+ * [php]
+ * // u.id <> 1
+ * $q->where($q->expr()->neq('u.id', '1'));
+ *
+ * @param mixed $x The left expression.
+ * @param mixed $y The right expression.
+ * @param mixed|null $type one of the IQueryBuilder::PARAM_* constants
+ * required when comparing text fields for oci compatibility
+ *
+ * @return string
+ */
+ public function neq($x, $y, $type = null) {
+ $x = $this->helper->quoteColumnName($x);
+ $y = $this->helper->quoteColumnName($y);
+ return $this->expressionBuilder->neq($x, $y);
+ }
+
+ /**
+ * Creates a lower-than comparison expression with the given arguments.
+ * First argument is considered the left expression and the second is the right expression.
+ * When converted to string, it will generated a <left expr> < <right expr>. Example:
+ *
+ * [php]
+ * // u.id < ?
+ * $q->where($q->expr()->lt('u.id', '?'));
+ *
+ * @param mixed $x The left expression.
+ * @param mixed $y The right expression.
+ * @param mixed|null $type one of the IQueryBuilder::PARAM_* constants
+ * required when comparing text fields for oci compatibility
+ *
+ * @return string
+ */
+ public function lt($x, $y, $type = null) {
+ $x = $this->helper->quoteColumnName($x);
+ $y = $this->helper->quoteColumnName($y);
+ return $this->expressionBuilder->lt($x, $y);
+ }
+
+ /**
+ * Creates a lower-than-equal comparison expression with the given arguments.
+ * First argument is considered the left expression and the second is the right expression.
+ * When converted to string, it will generated a <left expr> <= <right expr>. Example:
+ *
+ * [php]
+ * // u.id <= ?
+ * $q->where($q->expr()->lte('u.id', '?'));
+ *
+ * @param mixed $x The left expression.
+ * @param mixed $y The right expression.
+ * @param mixed|null $type one of the IQueryBuilder::PARAM_* constants
+ * required when comparing text fields for oci compatibility
+ *
+ * @return string
+ */
+ public function lte($x, $y, $type = null) {
+ $x = $this->helper->quoteColumnName($x);
+ $y = $this->helper->quoteColumnName($y);
+ return $this->expressionBuilder->lte($x, $y);
+ }
+
+ /**
+ * Creates a greater-than comparison expression with the given arguments.
+ * First argument is considered the left expression and the second is the right expression.
+ * When converted to string, it will generated a <left expr> > <right expr>. Example:
+ *
+ * [php]
+ * // u.id > ?
+ * $q->where($q->expr()->gt('u.id', '?'));
+ *
+ * @param mixed $x The left expression.
+ * @param mixed $y The right expression.
+ * @param mixed|null $type one of the IQueryBuilder::PARAM_* constants
+ * required when comparing text fields for oci compatibility
+ *
+ * @return string
+ */
+ public function gt($x, $y, $type = null) {
+ $x = $this->helper->quoteColumnName($x);
+ $y = $this->helper->quoteColumnName($y);
+ return $this->expressionBuilder->gt($x, $y);
+ }
+
+ /**
+ * Creates a greater-than-equal comparison expression with the given arguments.
+ * First argument is considered the left expression and the second is the right expression.
+ * When converted to string, it will generated a <left expr> >= <right expr>. Example:
+ *
+ * [php]
+ * // u.id >= ?
+ * $q->where($q->expr()->gte('u.id', '?'));
+ *
+ * @param mixed $x The left expression.
+ * @param mixed $y The right expression.
+ * @param mixed|null $type one of the IQueryBuilder::PARAM_* constants
+ * required when comparing text fields for oci compatibility
+ *
+ * @return string
+ */
+ public function gte($x, $y, $type = null) {
+ $x = $this->helper->quoteColumnName($x);
+ $y = $this->helper->quoteColumnName($y);
+ return $this->expressionBuilder->gte($x, $y);
+ }
+
+ /**
+ * Creates an IS NULL expression with the given arguments.
+ *
+ * @param string $x The field in string format to be restricted by IS NULL.
+ *
+ * @return string
+ */
+ public function isNull($x) {
+ $x = $this->helper->quoteColumnName($x);
+ return $this->expressionBuilder->isNull($x);
+ }
+
+ /**
+ * Creates an IS NOT NULL expression with the given arguments.
+ *
+ * @param string $x The field in string format to be restricted by IS NOT NULL.
+ *
+ * @return string
+ */
+ public function isNotNull($x) {
+ $x = $this->helper->quoteColumnName($x);
+ return $this->expressionBuilder->isNotNull($x);
+ }
+
+ /**
+ * Creates a LIKE() comparison expression with the given arguments.
+ *
+ * @param string $x Field in string format to be inspected by LIKE() comparison.
+ * @param mixed $y Argument to be used in LIKE() comparison.
+ * @param mixed|null $type one of the IQueryBuilder::PARAM_* constants
+ * required when comparing text fields for oci compatibility
+ *
+ * @return string
+ */
+ public function like($x, $y, $type = null) {
+ $x = $this->helper->quoteColumnName($x);
+ $y = $this->helper->quoteColumnName($y);
+ return $this->expressionBuilder->like($x, $y);
+ }
+
+ /**
+ * Creates a NOT LIKE() comparison expression with the given arguments.
+ *
+ * @param string $x Field in string format to be inspected by NOT LIKE() comparison.
+ * @param mixed $y Argument to be used in NOT LIKE() comparison.
+ * @param mixed|null $type one of the IQueryBuilder::PARAM_* constants
+ * required when comparing text fields for oci compatibility
+ *
+ * @return string
+ */
+ public function notLike($x, $y, $type = null) {
+ $x = $this->helper->quoteColumnName($x);
+ $y = $this->helper->quoteColumnName($y);
+ return $this->expressionBuilder->notLike($x, $y);
+ }
+
+ /**
+ * Creates a IN () comparison expression with the given arguments.
+ *
+ * @param string $x The field in string format to be inspected by IN() comparison.
+ * @param string|array $y The placeholder or the array of values to be used by IN() comparison.
+ * @param mixed|null $type one of the IQueryBuilder::PARAM_* constants
+ * required when comparing text fields for oci compatibility
+ *
+ * @return string
+ */
+ public function in($x, $y, $type = null) {
+ $x = $this->helper->quoteColumnName($x);
+ $y = $this->helper->quoteColumnNames($y);
+ return $this->expressionBuilder->in($x, $y);
+ }
+
+ /**
+ * Creates a NOT IN () comparison expression with the given arguments.
+ *
+ * @param string $x The field in string format to be inspected by NOT IN() comparison.
+ * @param string|array $y The placeholder or the array of values to be used by NOT IN() comparison.
+ * @param mixed|null $type one of the IQueryBuilder::PARAM_* constants
+ * required when comparing text fields for oci compatibility
+ *
+ * @return string
+ */
+ public function notIn($x, $y, $type = null) {
+ $x = $this->helper->quoteColumnName($x);
+ $y = $this->helper->quoteColumnNames($y);
+ return $this->expressionBuilder->notIn($x, $y);
+ }
+
+ /**
+ * Quotes a given input parameter.
+ *
+ * @param mixed $input The parameter to be quoted.
+ * @param mixed|null $type One of the IQueryBuilder::PARAM_* constants
+ *
+ * @return Literal
+ */
+ public function literal($input, $type = null) {
+ return new Literal($this->expressionBuilder->literal($input, $type));
+ }
+
+ /**
+ * Returns a IQueryFunction that casts the column to the given type
+ *
+ * @param string $column
+ * @param mixed $type One of IQueryBuilder::PARAM_*
+ * @return string
+ */
+ public function castColumn($column, $type) {
+ return new QueryFunction(
+ $this->helper->quoteColumnName($column)
+ );
+ }
+}
--- /dev/null
+<?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\ExpressionBuilder;
+
+
+use OC\DB\QueryBuilder\QueryFunction;
+use OCP\DB\QueryBuilder\ILiteral;
+use OCP\DB\QueryBuilder\IParameter;
+use OCP\DB\QueryBuilder\IQueryBuilder;
+use OCP\DB\QueryBuilder\IQueryFunction;
+
+class OCIExpressionBuilder extends ExpressionBuilder {
+
+ /**
+ * @param mixed $column
+ * @param mixed|null $type
+ * @return array|IQueryFunction|string
+ */
+ protected function prepareColumn($column, $type) {
+ if ($type === IQueryBuilder::PARAM_STR && !is_array($column) && !($column instanceof IParameter) && !($column instanceof ILiteral)) {
+ $column = $this->castColumn($column, $type);
+ } else {
+ $column = $this->helper->quoteColumnNames($column);
+ }
+ return $column;
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function comparison($x, $operator, $y, $type = null) {
+ $x = $this->prepareColumn($x, $type);
+ $y = $this->prepareColumn($y, $type);
+
+ return $this->expressionBuilder->comparison($x, $operator, $y);
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function eq($x, $y, $type = null) {
+ $x = $this->prepareColumn($x, $type);
+ $y = $this->prepareColumn($y, $type);
+
+ return $this->expressionBuilder->eq($x, $y);
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function neq($x, $y, $type = null) {
+ $x = $this->prepareColumn($x, $type);
+ $y = $this->prepareColumn($y, $type);
+
+ return $this->expressionBuilder->neq($x, $y);
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function lt($x, $y, $type = null) {
+ $x = $this->prepareColumn($x, $type);
+ $y = $this->prepareColumn($y, $type);
+
+ return $this->expressionBuilder->lt($x, $y);
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function lte($x, $y, $type = null) {
+ $x = $this->prepareColumn($x, $type);
+ $y = $this->prepareColumn($y, $type);
+
+ return $this->expressionBuilder->lte($x, $y);
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function gt($x, $y, $type = null) {
+ $x = $this->prepareColumn($x, $type);
+ $y = $this->prepareColumn($y, $type);
+
+ return $this->expressionBuilder->gt($x, $y);
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function gte($x, $y, $type = null) {
+ $x = $this->prepareColumn($x, $type);
+ $y = $this->prepareColumn($y, $type);
+
+ return $this->expressionBuilder->gte($x, $y);
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function in($x, $y, $type = null) {
+ $x = $this->prepareColumn($x, $type);
+ $y = $this->prepareColumn($y, $type);
+
+ return $this->expressionBuilder->in($x, $y);
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function notIn($x, $y, $type = null) {
+ $x = $this->prepareColumn($x, $type);
+ $y = $this->prepareColumn($y, $type);
+
+ return $this->expressionBuilder->notIn($x, $y);
+ }
+
+ /**
+ * Returns a IQueryFunction that casts the column to the given type
+ *
+ * @param string $column
+ * @param mixed $type One of IQueryBuilder::PARAM_*
+ * @return IQueryFunction
+ */
+ public function castColumn($column, $type) {
+ if ($type === IQueryBuilder::PARAM_STR) {
+ $column = $this->helper->quoteColumnName($column);
+ return new QueryFunction('to_char(' . $column . ')');
+ }
+
+ return parent::castColumn($column, $type);
+ }
+}
--- /dev/null
+<?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\ExpressionBuilder;
+
+
+use OC\DB\QueryBuilder\QueryFunction;
+use OCP\DB\QueryBuilder\IQueryBuilder;
+
+class PgSqlExpressionBuilder extends ExpressionBuilder {
+
+ /**
+ * Returns a IQueryFunction that casts the column to the given type
+ *
+ * @param string $column
+ * @param mixed $type One of IQueryBuilder::PARAM_*
+ * @return string
+ */
+ public function castColumn($column, $type) {
+ if ($type === IQueryBuilder::PARAM_INT) {
+ $column = $this->helper->quoteColumnName($column);
+ return new QueryFunction('CAST(' . $column . ' AS INT)');
+ }
+
+ return parent::castColumn($column, $type);
+ }
+}
+++ /dev/null
-<?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;
-
-
-use OCP\DB\QueryBuilder\ILiteral;
-use OCP\DB\QueryBuilder\IParameter;
-use OCP\DB\QueryBuilder\IQueryBuilder;
-
-class OCIExpressionBuilder extends ExpressionBuilder {
-
- /**
- * @param mixed $column
- * @param mixed|null $type
- * @return array|QueryFunction|string
- */
- protected function prepareColumn($column, $type) {
- if ($type === IQueryBuilder::PARAM_STR && !is_array($column) && !($column instanceof IParameter) && !($column instanceof ILiteral)) {
- $column = $this->helper->quoteColumnName($column);
- $column = new QueryFunction('to_char(' . $column . ')');
- } else {
- $column = $this->helper->quoteColumnNames($column);
- }
- return $column;
- }
-
- /**
- * @inheritdoc
- */
- public function comparison($x, $operator, $y, $type = null) {
- $x = $this->prepareColumn($x, $type);
- $y = $this->prepareColumn($y, $type);
-
- return $this->expressionBuilder->comparison($x, $operator, $y);
- }
-
- /**
- * @inheritdoc
- */
- public function eq($x, $y, $type = null) {
- $x = $this->prepareColumn($x, $type);
- $y = $this->prepareColumn($y, $type);
-
- return $this->expressionBuilder->eq($x, $y);
- }
-
- /**
- * @inheritdoc
- */
- public function neq($x, $y, $type = null) {
- $x = $this->prepareColumn($x, $type);
- $y = $this->prepareColumn($y, $type);
-
- return $this->expressionBuilder->neq($x, $y);
- }
-
- /**
- * @inheritdoc
- */
- public function lt($x, $y, $type = null) {
- $x = $this->prepareColumn($x, $type);
- $y = $this->prepareColumn($y, $type);
-
- return $this->expressionBuilder->lt($x, $y);
- }
-
- /**
- * @inheritdoc
- */
- public function lte($x, $y, $type = null) {
- $x = $this->prepareColumn($x, $type);
- $y = $this->prepareColumn($y, $type);
-
- return $this->expressionBuilder->lte($x, $y);
- }
-
- /**
- * @inheritdoc
- */
- public function gt($x, $y, $type = null) {
- $x = $this->prepareColumn($x, $type);
- $y = $this->prepareColumn($y, $type);
-
- return $this->expressionBuilder->gt($x, $y);
- }
-
- /**
- * @inheritdoc
- */
- public function gte($x, $y, $type = null) {
- $x = $this->prepareColumn($x, $type);
- $y = $this->prepareColumn($y, $type);
-
- return $this->expressionBuilder->gte($x, $y);
- }
-
- /**
- * @inheritdoc
- */
- public function in($x, $y, $type = null) {
- $x = $this->prepareColumn($x, $type);
- $y = $this->prepareColumn($y, $type);
-
- return $this->expressionBuilder->in($x, $y);
- }
-
- /**
- * @inheritdoc
- */
- public function notIn($x, $y, $type = null) {
- $x = $this->prepareColumn($x, $type);
- $y = $this->prepareColumn($y, $type);
-
- return $this->expressionBuilder->notIn($x, $y);
- }
-}
namespace OC\DB\QueryBuilder;
+use Doctrine\DBAL\Platforms\PostgreSqlPlatform;
use OC\DB\OracleConnection;
+use OC\DB\QueryBuilder\ExpressionBuilder\ExpressionBuilder;
+use OC\DB\QueryBuilder\ExpressionBuilder\OCIExpressionBuilder;
+use OC\DB\QueryBuilder\ExpressionBuilder\PgSqlExpressionBuilder;
use OCP\DB\QueryBuilder\IQueryBuilder;
use OCP\DB\QueryBuilder\IQueryFunction;
use OCP\DB\QueryBuilder\IParameter;
public function expr() {
if ($this->connection instanceof OracleConnection) {
return new OCIExpressionBuilder($this->connection);
+ } else if ($this->connection->getDatabasePlatform() instanceof PostgreSqlPlatform) {
+ return new PgSqlExpressionBuilder($this->connection);
} else {
return new ExpressionBuilder($this->connection);
}
* @since 8.2.0
*/
public function literal($input, $type = null);
+
+ /**
+ * Returns a IQueryFunction that casts the column to the given type
+ *
+ * @param string $column
+ * @param mixed $type One of IQueryBuilder::PARAM_*
+ * @return string
+ * @since 9.0.0
+ */
+ public function castColumn($column, $type);
}
namespace Test\DB\QueryBuilder;
use Doctrine\DBAL\Query\Expression\ExpressionBuilder as DoctrineExpressionBuilder;
-use OC\DB\QueryBuilder\ExpressionBuilder;
+use OC\DB\QueryBuilder\ExpressionBuilder\ExpressionBuilder;
use OCP\DB\QueryBuilder\IQueryBuilder;
use Test\TestCase;
$userSession->method('getUser')->willReturn($user);
- $ex = $this->getMockBuilder('\OC\DB\QueryBuilder\ExpressionBuilder')
+ $ex = $this->getMockBuilder('\OC\DB\QueryBuilder\ExpressionBuilder\ExpressionBuilder')
->disableOriginalConstructor()
->getMock();
$qb = $this->getMockBuilder('\OC\DB\QueryBuilder\QueryBuilder')
$userSession->method('getUser')->willReturn($user);
- $ex = $this->getMockBuilder('\OC\DB\QueryBuilder\ExpressionBuilder')
+ $ex = $this->getMockBuilder('\OC\DB\QueryBuilder\ExpressionBuilder\ExpressionBuilder')
->disableOriginalConstructor()
->getMock();
$qb = $this->getMockBuilder('\OC\DB\QueryBuilder\QueryBuilder')
$userSession->method('getUser')->willReturn($user);
- $ex = $this->getMockBuilder('\OC\DB\QueryBuilder\ExpressionBuilder')
+ $ex = $this->getMockBuilder('\OC\DB\QueryBuilder\ExpressionBuilder\ExpressionBuilder')
->disableOriginalConstructor()
->getMock();
$qb = $this->getMockBuilder('\OC\DB\QueryBuilder\QueryBuilder')
$userSession->method('getUser')->willReturn($user);
- $ex = $this->getMockBuilder('\OC\DB\QueryBuilder\ExpressionBuilder')
+ $ex = $this->getMockBuilder('\OC\DB\QueryBuilder\ExpressionBuilder\ExpressionBuilder')
->disableOriginalConstructor()
->getMock();
$qb = $this->getMockBuilder('\OC\DB\QueryBuilder\QueryBuilder')