summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorRoeland Jago Douma <rullzer@users.noreply.github.com>2018-01-16 19:53:01 +0100
committerGitHub <noreply@github.com>2018-01-16 19:53:01 +0100
commit2b70c708abc667c3e3c4fd9a97626012bf1ded25 (patch)
tree57df2fc83daefe1c9a0dbd31f51f615322e99854 /lib
parenta159d7c28c483a2b77e2f533795f6d6d1ec720fd (diff)
parent326d55db816ffa699f5374fc4b0a75b88f6edbd1 (diff)
downloadnextcloud-server-2b70c708abc667c3e3c4fd9a97626012bf1ded25.tar.gz
nextcloud-server-2b70c708abc667c3e3c4fd9a97626012bf1ded25.zip
Merge pull request #7882 from nextcloud/search-and
Support arbitrary number of arguments for d:or and d:and in search queries
Diffstat (limited to 'lib')
-rw-r--r--lib/private/Files/Cache/QuerySearchHelper.php14
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());
}