diff options
author | Robin Appelman <robin@icewind.nl> | 2018-01-16 13:22:28 +0100 |
---|---|---|
committer | Robin Appelman <robin@icewind.nl> | 2018-01-16 13:27:52 +0100 |
commit | 3a1390fdb7fec732b7d69706e3221d956ce18609 (patch) | |
tree | 7ae1dcdebe4fbdcd97dbcceca40a676475efb613 /lib | |
parent | c25da25180bd446c0068a0155a5a386ac05d2d51 (diff) | |
download | nextcloud-server-3a1390fdb7fec732b7d69706e3221d956ce18609.tar.gz nextcloud-server-3a1390fdb7fec732b7d69706e3221d956ce18609.zip |
Support arbitrary number of arguments for d:or and d:and in search queries
Signed-off-by: Robin Appelman <robin@icewind.nl>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/private/Files/Cache/QuerySearchHelper.php | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/lib/private/Files/Cache/QuerySearchHelper.php b/lib/private/Files/Cache/QuerySearchHelper.php index 51ecb12a06a..ac64ba5c592 100644 --- a/lib/private/Files/Cache/QuerySearchHelper.php +++ b/lib/private/Files/Cache/QuerySearchHelper.php @@ -83,6 +83,16 @@ class QuerySearchHelper { return false; } + /** + * @param IQueryBuilder $builder + * @param ISearchOperator $operator + */ + public function searchOperatorArrayToDBExprArray(IQueryBuilder $builder, array $operators) { + return array_map(function ($operator) use ($builder) { + return $this->searchOperatorToDBExpr($builder, $operator); + }, $operators); + } + public function searchOperatorToDBExpr(IQueryBuilder $builder, ISearchOperator $operator) { $expr = $builder->expr(); if ($operator instanceof ISearchBinaryOperator) { @@ -95,9 +105,9 @@ class QuerySearchHelper { throw new \InvalidArgumentException('Binary operators inside "not" is not supported'); } case ISearchBinaryOperator::OPERATOR_AND: - return $expr->andX($this->searchOperatorToDBExpr($builder, $operator->getArguments()[0]), $this->searchOperatorToDBExpr($builder, $operator->getArguments()[1])); + return call_user_func_array([$expr, 'andX'], $this->searchOperatorArrayToDBExprArray($builder, $operator->getArguments())); case ISearchBinaryOperator::OPERATOR_OR: - return $expr->orX($this->searchOperatorToDBExpr($builder, $operator->getArguments()[0]), $this->searchOperatorToDBExpr($builder, $operator->getArguments()[1])); + return call_user_func_array([$expr, 'orX'], $this->searchOperatorArrayToDBExprArray($builder, $operator->getArguments())); default: throw new \InvalidArgumentException('Invalid operator type: ' . $operator->getType()); } |