Skip to content

Commit 8f340ff

Browse files
feat(file-search): add property to SearchQuery and check select fields to decide wheter to join extended cache
Signed-off-by: Cristian Scheid <cristianscheid@gmail.com>
1 parent 1b1c74e commit 8f340ff

4 files changed

Lines changed: 33 additions & 6 deletions

File tree

apps/dav/lib/Files/FileSearchBackend.php

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -347,6 +347,15 @@ private function transformQuery(Query $query, ?SearchBinaryOperator $scopeOperat
347347
}
348348
}, $query->orderBy);
349349

350+
$selectFields = [];
351+
foreach ($query->select as $searchProperty) {
352+
try {
353+
$selectFields[] = $this->mapPropertyNameToColumn($searchProperty);
354+
} catch (\InvalidArgumentException) {
355+
// property does not represent a column on DB
356+
}
357+
}
358+
350359
$limit = $query->limit;
351360
$maxResults = $limit->maxResults !== 0 ? (int)$limit->maxResults : 100;
352361
$offset = $limit->firstResult;
@@ -380,7 +389,8 @@ private function transformQuery(Query $query, ?SearchBinaryOperator $scopeOperat
380389
$offset,
381390
$orders,
382391
$this->user,
383-
$limitHome
392+
$limitHome,
393+
$selectFields
384394
);
385395
}
386396

lib/private/Files/Cache/QuerySearchHelper.php

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -151,13 +151,16 @@ public function searchInCaches(ISearchQuery $searchQuery, array $caches): array
151151

152152
$builder = $this->getQueryBuilder();
153153

154-
$requestedFields = $this->searchBuilder->extractRequestedFields($searchQuery->getSearchOperation());
155-
156-
$orderFields = array_map(fn ($order) => $order->getField(), $searchQuery->getOrder());
154+
$requestedFields = array_merge(
155+
$this->searchBuilder->extractRequestedFields($searchQuery->getSearchOperation()),
156+
array_map(fn ($order) => $order->getField(), $searchQuery->getOrder()),
157+
$searchQuery->getSelectFields(),
158+
);
157159

158-
$joinExtendedCache = in_array('creation_time', $requestedFields)
160+
$joinExtendedCache = in_array('metadata_etag', $requestedFields)
161+
|| in_array('creation_time', $requestedFields)
159162
|| in_array('upload_time', $requestedFields)
160-
|| in_array('last_activity', $orderFields);
163+
|| in_array('last_activity', $requestedFields);
161164

162165
$query = $builder->selectFileCache('file', $joinExtendedCache);
163166

lib/private/Files/Search/SearchQuery.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ public function __construct(
2424
private array $order,
2525
private ?IUser $user = null,
2626
private bool $limitToHome = false,
27+
private array $selectFields = [],
2728
) {
2829
}
2930

@@ -59,4 +60,9 @@ public function getUser(): ?IUser {
5960
public function limitToHome(): bool {
6061
return $this->limitToHome;
6162
}
63+
64+
#[\Override]
65+
public function getSelectFields(): array {
66+
return $this->selectFields;
67+
}
6268
}

lib/public/Files/Search/ISearchQuery.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,4 +57,12 @@ public function getUser();
5757
* @since 18.0.0
5858
*/
5959
public function limitToHome(): bool;
60+
61+
/**
62+
* The fields to include in the search results
63+
*
64+
* @return list<string>
65+
* @since 35.0.0
66+
*/
67+
public function getSelectFields(): array;
6068
}

0 commit comments

Comments
 (0)