diff options
author | Robin Appelman <robin@icewind.nl> | 2021-05-05 18:09:53 +0200 |
---|---|---|
committer | Robin Appelman <robin@icewind.nl> | 2021-06-14 16:11:25 +0200 |
commit | 9774fb1573d30e79eb57f8956f64b13b52b7dee9 (patch) | |
tree | f7431f41db9d421773ff23381c943c82e0471e51 /lib/private/Files/Cache/QuerySearchHelper.php | |
parent | e198dc1b200f3ade93498e0ea7b468c87d46748a (diff) | |
download | nextcloud-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.php | 24 |
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/%'))); } |