diff options
Diffstat (limited to 'lib/private/Files/Cache')
-rw-r--r-- | lib/private/Files/Cache/SearchBuilder.php | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/lib/private/Files/Cache/SearchBuilder.php b/lib/private/Files/Cache/SearchBuilder.php index fe021a62e9e..9d306db7748 100644 --- a/lib/private/Files/Cache/SearchBuilder.php +++ b/lib/private/Files/Cache/SearchBuilder.php @@ -37,8 +37,12 @@ use OCP\FilesMetadata\IMetadataQuery; /** * Tools for transforming search queries into database queries + * + * @psalm-import-type ParamSingleValue from ISearchComparison + * @psalm-import-type ParamValue from ISearchComparison */ class SearchBuilder { + /** @var array<string, string> */ protected static $searchOperatorMap = [ ISearchComparison::COMPARE_LIKE => 'iLike', ISearchComparison::COMPARE_LIKE_CASE_SENSITIVE => 'like', @@ -51,6 +55,7 @@ class SearchBuilder { ISearchComparison::COMPARE_IN => 'in', ]; + /** @var array<string, string> */ protected static $searchOperatorNegativeMap = [ ISearchComparison::COMPARE_LIKE => 'notLike', ISearchComparison::COMPARE_LIKE_CASE_SENSITIVE => 'notLike', @@ -63,6 +68,7 @@ class SearchBuilder { ISearchComparison::COMPARE_IN => 'notIn', ]; + /** @var array<string, string> */ protected static $fieldTypes = [ 'mimetype' => 'string', 'mtime' => 'integer', @@ -79,11 +85,14 @@ class SearchBuilder { 'owner' => 'string', ]; + /** @var array<string, int> */ protected static $paramTypeMap = [ 'string' => IQueryBuilder::PARAM_STR, 'integer' => IQueryBuilder::PARAM_INT, 'boolean' => IQueryBuilder::PARAM_BOOL, ]; + + /** @var array<string, int> */ protected static $paramArrayTypeMap = [ 'string' => IQueryBuilder::PARAM_STR_ARRAY, 'integer' => IQueryBuilder::PARAM_INT_ARRAY, @@ -186,7 +195,7 @@ class SearchBuilder { /** * @param ISearchComparison $operator - * @return list{string, string|integer|\DateTime|(\DateTime|int|string)[], string, string} + * @return list{string, ParamValue, string, string} */ private function getOperatorFieldAndValue(ISearchComparison $operator): array { $this->validateComparison($operator); @@ -199,9 +208,9 @@ class SearchBuilder { /** * @param string $field - * @param string|integer|\DateTime|(\DateTime|int|string)[] $value + * @param ParamValue $value * @param string $type - * @return list{string, string|integer|\DateTime|(\DateTime|int|string)[], string, string} + * @return list{string, ParamValue, string, string} */ private function getOperatorFieldAndValueInner(string $field, mixed $value, string $type, bool $pathEqHash): array { $paramType = self::$fieldTypes[$field]; @@ -209,7 +218,7 @@ class SearchBuilder { $resultField = $field; $values = []; foreach ($value as $arrayValue) { - /** @var string|integer|\DateTime $arrayValue */ + /** @var ParamSingleValue $arrayValue */ [$arrayField, $arrayValue] = $this->getOperatorFieldAndValueInner($field, $arrayValue, ISearchComparison::COMPARE_EQUAL, $pathEqHash); $resultField = $arrayField; $values[] = $arrayValue; @@ -297,7 +306,7 @@ class SearchBuilder { private function getExtraOperatorField(ISearchComparison $operator, IMetadataQuery $metadataQuery): array { - $paramType = self::$fieldTypes[$field]; + $paramType = self::$fieldTypes[$operator->getField()]; $field = $operator->getField(); $value = $operator->getValue(); $type = $operator->getType(); |