Skip to content

Commit 6f1a4f7

Browse files
committed
fix: Metadata field search
Signed-off-by: Louis Chemineau <louis@chmn.me>
1 parent 101c757 commit 6f1a4f7

File tree

1 file changed

+11
-6
lines changed

1 file changed

+11
-6
lines changed

lib/private/Files/Cache/SearchBuilder.php

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
use OCP\Files\Search\ISearchComparison;
1313
use OCP\Files\Search\ISearchOperator;
1414
use OCP\Files\Search\ISearchOrder;
15+
use OCP\FilesMetadata\IFilesMetadataManager;
1516
use OCP\FilesMetadata\IMetadataQuery;
1617

1718
/**
@@ -80,13 +81,10 @@ class SearchBuilder {
8081

8182
public const TAG_FAVORITE = '_$!<Favorite>!$_';
8283

83-
/** @var IMimeTypeLoader */
84-
private $mimetypeLoader;
85-
8684
public function __construct(
87-
IMimeTypeLoader $mimetypeLoader,
85+
private IMimeTypeLoader $mimetypeLoader,
86+
private IFilesMetadataManager $filesMetadataManager,
8887
) {
89-
$this->mimetypeLoader = $mimetypeLoader;
9088
}
9189

9290
/**
@@ -285,11 +283,18 @@ private function validateComparison(ISearchComparison $operator) {
285283

286284

287285
private function getExtraOperatorField(ISearchComparison $operator, IMetadataQuery $metadataQuery): array {
288-
$paramType = self::$fieldTypes[$operator->getField()];
289286
$field = $operator->getField();
290287
$value = $operator->getValue();
291288
$type = $operator->getType();
292289

290+
$knownMetadata = $this->filesMetadataManager->getKnownMetadata();
291+
$isIndex = $knownMetadata->isIndex($field);
292+
$paramType = $knownMetadata->getType($field) === 'int' ? 'integer' : 'string';
293+
294+
if (!$isIndex) {
295+
throw new \InvalidArgumentException('Cannot search non indexed metadata key');
296+
}
297+
293298
switch ($operator->getExtra()) {
294299
case IMetadataQuery::EXTRA:
295300
$metadataQuery->joinIndex($field); // join index table if not joined yet

0 commit comments

Comments
 (0)