From 7467422f570a44d3b3865907ba6f6f1a96d53a0b Mon Sep 17 00:00:00 2001 From: Maxence Lange Date: Wed, 15 Nov 2023 20:02:28 -0100 Subject: implements search on null/notnull metadata Signed-off-by: Maxence Lange --- apps/dav/lib/Files/FileSearchBackend.php | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) (limited to 'apps') diff --git a/apps/dav/lib/Files/FileSearchBackend.php b/apps/dav/lib/Files/FileSearchBackend.php index 3500d6b0fb3..d52eb60729a 100644 --- a/apps/dav/lib/Files/FileSearchBackend.php +++ b/apps/dav/lib/Files/FileSearchBackend.php @@ -39,6 +39,7 @@ use OCP\Files\Cache\ICacheEntry; use OCP\Files\Folder; use OCP\Files\IRootFolder; use OCP\Files\Node; +use OCP\Files\Search\ISearchComparison; use OCP\Files\Search\ISearchOperator; use OCP\Files\Search\ISearchOrder; use OCP\Files\Search\ISearchQuery; @@ -367,22 +368,30 @@ class FileSearchBackend implements ISearchBackend { if (count($operator->arguments) !== 2) { throw new \InvalidArgumentException('Invalid number of arguments for ' . $trimmedType . ' operation'); } - if (!($operator->arguments[0] instanceof SearchPropertyDefinition)) { - throw new \InvalidArgumentException('Invalid argument 1 for ' . $trimmedType . ' operation, expected property'); - } if (!($operator->arguments[1] instanceof Literal)) { throw new \InvalidArgumentException('Invalid argument 2 for ' . $trimmedType . ' operation, expected literal'); } - + $value = $operator->arguments[1]->value; + case Operator::OPERATION_IS_DEFINED: + if (!($operator->arguments[0] instanceof SearchPropertyDefinition)) { + throw new \InvalidArgumentException('Invalid argument 1 for ' . $trimmedType . ' operation, expected property'); + } $property = $operator->arguments[0]; - $value = $this->castValue($property, $operator->arguments[1]->value); + if (str_starts_with($property->name, FilesPlugin::FILE_METADATA_PREFIX)) { - return new SearchComparison($trimmedType, substr($property->name, strlen(FilesPlugin::FILE_METADATA_PREFIX)), $value, IMetadataQuery::EXTRA); + $field = substr($property->name, strlen(FilesPlugin::FILE_METADATA_PREFIX)); + $extra = IMetadataQuery::EXTRA; } else { - return new SearchComparison($trimmedType, $this->mapPropertyNameToColumn($property), $value); + $field = $this->mapPropertyNameToColumn($property); } - // no break + return new SearchComparison( + ISearchComparison::COMPARE_DEFINED, + $field, + $this->castValue($property, $value ?? ''), + $extra ?? '' + ); + case Operator::OPERATION_IS_COLLECTION: return new SearchComparison('eq', 'mimetype', ICacheEntry::DIRECTORY_MIMETYPE); default: @@ -416,7 +425,11 @@ class FileSearchBackend implements ISearchBackend { } private function castValue(SearchPropertyDefinition $property, $value) { - switch ($property->dataType) { + if ($value === '') { + return ''; + } + + switch ($property->dataType) { case SearchPropertyDefinition::DATATYPE_BOOLEAN: return $value === 'yes'; case SearchPropertyDefinition::DATATYPE_DECIMAL: -- cgit v1.2.3 From 33ac1c04337741d4c8bb4903d216c18ea5ce1d9d Mon Sep 17 00:00:00 2001 From: Louis Chemineau Date: Thu, 16 Nov 2023 09:46:07 +0100 Subject: Fix param name after Sabre\CalDAV update Signed-off-by: Louis Chemineau --- apps/dav/lib/CalDAV/CachedSubscription.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'apps') diff --git a/apps/dav/lib/CalDAV/CachedSubscription.php b/apps/dav/lib/CalDAV/CachedSubscription.php index dc7f66e59b4..4047f8dad0b 100644 --- a/apps/dav/lib/CalDAV/CachedSubscription.php +++ b/apps/dav/lib/CalDAV/CachedSubscription.php @@ -169,11 +169,11 @@ class CachedSubscription extends \Sabre\CalDAV\Calendar { /** * @param string $name - * @param null|resource|string $calendarData + * @param null|resource|string $data * @return null|string * @throws MethodNotAllowed */ - public function createFile($name, $calendarData = null) { + public function createFile($name, $data = null) { throw new MethodNotAllowed('Creating objects in cached subscription is not allowed'); } -- cgit v1.2.3 From a93af13c12fc072c8b612b72c86ea3540f19e0fd Mon Sep 17 00:00:00 2001 From: Louis Chemineau Date: Thu, 16 Nov 2023 11:10:21 +0100 Subject: Fix is-define operator Signed-off-by: Louis Chemineau --- apps/dav/lib/Files/FileSearchBackend.php | 2 +- lib/public/Files/Search/ISearchComparison.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'apps') diff --git a/apps/dav/lib/Files/FileSearchBackend.php b/apps/dav/lib/Files/FileSearchBackend.php index d52eb60729a..419a0c5ed3b 100644 --- a/apps/dav/lib/Files/FileSearchBackend.php +++ b/apps/dav/lib/Files/FileSearchBackend.php @@ -386,7 +386,7 @@ class FileSearchBackend implements ISearchBackend { } return new SearchComparison( - ISearchComparison::COMPARE_DEFINED, + $trimmedType, $field, $this->castValue($property, $value ?? ''), $extra ?? '' diff --git a/lib/public/Files/Search/ISearchComparison.php b/lib/public/Files/Search/ISearchComparison.php index e1650dabc61..ba02f39996f 100644 --- a/lib/public/Files/Search/ISearchComparison.php +++ b/lib/public/Files/Search/ISearchComparison.php @@ -35,7 +35,7 @@ interface ISearchComparison extends ISearchOperator { public const COMPARE_LESS_THAN_EQUAL = 'lte'; public const COMPARE_LIKE = 'like'; public const COMPARE_LIKE_CASE_SENSITIVE = 'clike'; - public const COMPARE_DEFINED = 'defined'; + public const COMPARE_DEFINED = 'is-defined'; public const HINT_PATH_EQ_HASH = 'path_eq_hash'; // transform `path = "$path"` into `path_hash = md5("$path")`, on by default -- cgit v1.2.3