aboutsummaryrefslogtreecommitdiffstats
path: root/lib/private/Files/Cache/QuerySearchHelper.php
diff options
context:
space:
mode:
authorRobin Appelman <robin@icewind.nl>2021-05-05 18:09:53 +0200
committerRobin Appelman <robin@icewind.nl>2021-06-14 16:11:25 +0200
commit9774fb1573d30e79eb57f8956f64b13b52b7dee9 (patch)
treef7431f41db9d421773ff23381c943c82e0471e51 /lib/private/Files/Cache/QuerySearchHelper.php
parente198dc1b200f3ade93498e0ea7b468c87d46748a (diff)
downloadnextcloud-server-9774fb1573d30e79eb57f8956f64b13b52b7dee9.tar.gz
nextcloud-server-9774fb1573d30e79eb57f8956f64b13b52b7dee9.zip
use searchoperation for storage filter instead of db expression
Signed-off-by: Robin Appelman <robin@icewind.nl>
Diffstat (limited to 'lib/private/Files/Cache/QuerySearchHelper.php')
-rw-r--r--lib/private/Files/Cache/QuerySearchHelper.php24
1 files changed, 13 insertions, 11 deletions
diff --git a/lib/private/Files/Cache/QuerySearchHelper.php b/lib/private/Files/Cache/QuerySearchHelper.php
index 0b1bffa8e94..6bf3835df6c 100644
--- a/lib/private/Files/Cache/QuerySearchHelper.php
+++ b/lib/private/Files/Cache/QuerySearchHelper.php
@@ -25,6 +25,7 @@
*/
namespace OC\Files\Cache;
+use OC\Files\Search\SearchBinaryOperator;
use OC\SystemConfig;
use OCP\DB\QueryBuilder\IQueryBuilder;
use OCP\Files\Cache\ICache;
@@ -47,7 +48,7 @@ class QuerySearchHelper {
ISearchComparison::COMPARE_GREATER_THAN => 'gt',
ISearchComparison::COMPARE_GREATER_THAN_EQUAL => 'gte',
ISearchComparison::COMPARE_LESS_THAN => 'lt',
- ISearchComparison::COMPARE_LESS_THAN_EQUAL => 'lte'
+ ISearchComparison::COMPARE_LESS_THAN_EQUAL => 'lte',
];
protected static $searchOperatorNegativeMap = [
@@ -56,7 +57,7 @@ class QuerySearchHelper {
ISearchComparison::COMPARE_GREATER_THAN => 'lte',
ISearchComparison::COMPARE_GREATER_THAN_EQUAL => 'lt',
ISearchComparison::COMPARE_LESS_THAN => 'gte',
- ISearchComparison::COMPARE_LESS_THAN_EQUAL => 'lt'
+ ISearchComparison::COMPARE_LESS_THAN_EQUAL => 'lt',
];
public const TAG_FAVORITE = '_$!<Favorite>!$_';
@@ -124,7 +125,7 @@ class QuerySearchHelper {
} else {
throw new \InvalidArgumentException('Binary operators inside "not" is not supported');
}
- // no break
+ // no break
case ISearchBinaryOperator::OPERATOR_AND:
return call_user_func_array([$expr, 'andX'], $this->searchOperatorArrayToDBExprArray($builder, $operator->getArguments()));
case ISearchBinaryOperator::OPERATOR_OR:
@@ -195,7 +196,8 @@ class QuerySearchHelper {
'size' => 'integer',
'tagname' => 'string',
'favorite' => 'boolean',
- 'fileid' => 'integer'
+ 'fileid' => 'integer',
+ 'storage' => 'integer',
];
$comparisons = [
'mimetype' => ['eq', 'like'],
@@ -205,7 +207,8 @@ class QuerySearchHelper {
'size' => ['eq', 'gt', 'lt', 'gte', 'lte'],
'tagname' => ['eq', 'like'],
'favorite' => ['eq'],
- 'fileid' => ['eq']
+ 'fileid' => ['eq'],
+ 'storage' => ['eq'],
];
if (!isset($types[$operator->getField()])) {
@@ -274,12 +277,6 @@ class QuerySearchHelper {
$query = $builder->selectFileCache('file');
- $storageFilters = array_map(function (ICache $cache) use ($builder) {
- return $cache->getQueryFilterForStorage($builder);
- }, $caches);
-
- $query->andWhere($query->expr()->orX(...$storageFilters));
-
if ($this->shouldJoinTags($searchQuery->getSearchOperation())) {
$user = $searchQuery->getUser();
if ($user === null) {
@@ -300,6 +297,11 @@ class QuerySearchHelper {
$query->andWhere($searchExpr);
}
+ $storageFilters = array_map(function (ICache $cache) {
+ return $cache->getQueryFilterForStorage();
+ }, $caches);
+ $query->andWhere($this->searchOperatorToDBExpr($builder, new SearchBinaryOperator(ISearchBinaryOperator::OPERATOR_OR, $storageFilters)));
+
if ($searchQuery->limitToHome() && ($this instanceof HomeCache)) {
$query->andWhere($builder->expr()->like('path', $query->expr()->literal('files/%')));
}