Skip to content

Commit

Permalink
fix: Metadata field search
Browse files Browse the repository at this point in the history
Signed-off-by: Louis Chemineau <louis@chmn.me>
  • Loading branch information
artonge committed Jan 20, 2025
1 parent 101c757 commit 6f1a4f7
Showing 1 changed file with 11 additions and 6 deletions.
17 changes: 11 additions & 6 deletions lib/private/Files/Cache/SearchBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
use OCP\Files\Search\ISearchComparison;
use OCP\Files\Search\ISearchOperator;
use OCP\Files\Search\ISearchOrder;
use OCP\FilesMetadata\IFilesMetadataManager;
use OCP\FilesMetadata\IMetadataQuery;

/**
Expand Down Expand Up @@ -80,13 +81,10 @@ class SearchBuilder {

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

/** @var IMimeTypeLoader */
private $mimetypeLoader;

public function __construct(
IMimeTypeLoader $mimetypeLoader,
private IMimeTypeLoader $mimetypeLoader,
private IFilesMetadataManager $filesMetadataManager,
) {
$this->mimetypeLoader = $mimetypeLoader;
}

/**
Expand Down Expand Up @@ -285,11 +283,18 @@ private function validateComparison(ISearchComparison $operator) {


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

$knownMetadata = $this->filesMetadataManager->getKnownMetadata();
$isIndex = $knownMetadata->isIndex($field);
$paramType = $knownMetadata->getType($field) === 'int' ? 'integer' : 'string';

if (!$isIndex) {
throw new \InvalidArgumentException('Cannot search non indexed metadata key');
}

switch ($operator->getExtra()) {
case IMetadataQuery::EXTRA:
$metadataQuery->joinIndex($field); // join index table if not joined yet
Expand Down

0 comments on commit 6f1a4f7

Please sign in to comment.