]> source.dussan.org Git - nextcloud-server.git/commitdiff
moving metadataquery 41446/head
authorMaxence Lange <maxence@artificial-owl.com>
Mon, 13 Nov 2023 23:25:22 +0000 (22:25 -0100)
committerMaxence Lange <maxence@artificial-owl.com>
Mon, 13 Nov 2023 23:25:37 +0000 (22:25 -0100)
Signed-off-by: Maxence Lange <maxence@artificial-owl.com>
12 files changed:
apps/dav/lib/Files/FileSearchBackend.php
lib/composer/composer/autoload_classmap.php
lib/composer/composer/autoload_static.php
lib/private/Files/Cache/CacheQueryBuilder.php
lib/private/Files/Cache/QuerySearchHelper.php
lib/private/Files/Cache/SearchBuilder.php
lib/private/FilesMetadata/FilesMetadataManager.php
lib/private/FilesMetadata/MetadataQuery.php [new file with mode: 0644]
lib/private/FilesMetadata/Model/MetadataQuery.php [deleted file]
lib/public/FilesMetadata/IFilesMetadataManager.php
lib/public/FilesMetadata/IMetadataQuery.php [new file with mode: 0644]
lib/public/FilesMetadata/Model/IMetadataQuery.php [deleted file]

index b158fde857c2d4a94c677e12f23bb9f945cf0167..3500d6b0fb3eb418a88123084dccf97c4b10b06b 100644 (file)
@@ -43,7 +43,7 @@ use OCP\Files\Search\ISearchOperator;
 use OCP\Files\Search\ISearchOrder;
 use OCP\Files\Search\ISearchQuery;
 use OCP\FilesMetadata\IFilesMetadataManager;
-use OCP\FilesMetadata\Model\IMetadataQuery;
+use OCP\FilesMetadata\IMetadataQuery;
 use OCP\FilesMetadata\Model\IMetadataValueWrapper;
 use OCP\IUser;
 use OCP\Share\IManager;
index bb1dd4b5df067d4774fe73ec87839fbb4cc98055..93feccfc4732506d3d47501db7b28bc9fed6a040 100644 (file)
@@ -295,8 +295,8 @@ return array(
     'OCP\\FilesMetadata\\Exceptions\\FilesMetadataNotFoundException' => $baseDir . '/lib/public/FilesMetadata/Exceptions/FilesMetadataNotFoundException.php',
     'OCP\\FilesMetadata\\Exceptions\\FilesMetadataTypeException' => $baseDir . '/lib/public/FilesMetadata/Exceptions/FilesMetadataTypeException.php',
     'OCP\\FilesMetadata\\IFilesMetadataManager' => $baseDir . '/lib/public/FilesMetadata/IFilesMetadataManager.php',
+    'OCP\\FilesMetadata\\IMetadataQuery' => $baseDir . '/lib/public/FilesMetadata/IMetadataQuery.php',
     'OCP\\FilesMetadata\\Model\\IFilesMetadata' => $baseDir . '/lib/public/FilesMetadata/Model/IFilesMetadata.php',
-    'OCP\\FilesMetadata\\Model\\IMetadataQuery' => $baseDir . '/lib/public/FilesMetadata/Model/IMetadataQuery.php',
     'OCP\\FilesMetadata\\Model\\IMetadataValueWrapper' => $baseDir . '/lib/public/FilesMetadata/Model/IMetadataValueWrapper.php',
     'OCP\\Files\\AlreadyExistsException' => $baseDir . '/lib/public/Files/AlreadyExistsException.php',
     'OCP\\Files\\AppData\\IAppDataFactory' => $baseDir . '/lib/public/Files/AppData/IAppDataFactory.php',
@@ -1312,8 +1312,8 @@ return array(
     'OC\\FilesMetadata\\Job\\UpdateSingleMetadata' => $baseDir . '/lib/private/FilesMetadata/Job/UpdateSingleMetadata.php',
     'OC\\FilesMetadata\\Listener\\MetadataDelete' => $baseDir . '/lib/private/FilesMetadata/Listener/MetadataDelete.php',
     'OC\\FilesMetadata\\Listener\\MetadataUpdate' => $baseDir . '/lib/private/FilesMetadata/Listener/MetadataUpdate.php',
+    'OC\\FilesMetadata\\MetadataQuery' => $baseDir . '/lib/private/FilesMetadata/MetadataQuery.php',
     'OC\\FilesMetadata\\Model\\FilesMetadata' => $baseDir . '/lib/private/FilesMetadata/Model/FilesMetadata.php',
-    'OC\\FilesMetadata\\Model\\MetadataQuery' => $baseDir . '/lib/private/FilesMetadata/Model/MetadataQuery.php',
     'OC\\FilesMetadata\\Model\\MetadataValueWrapper' => $baseDir . '/lib/private/FilesMetadata/Model/MetadataValueWrapper.php',
     'OC\\FilesMetadata\\Service\\IndexRequestService' => $baseDir . '/lib/private/FilesMetadata/Service/IndexRequestService.php',
     'OC\\FilesMetadata\\Service\\MetadataRequestService' => $baseDir . '/lib/private/FilesMetadata/Service/MetadataRequestService.php',
index 9667aa6853313c88272573a1ba576bdff81082fc..8a81ca8282765460d339cd8fe55fa3126ec20273 100644 (file)
@@ -328,8 +328,8 @@ class ComposerStaticInit749170dad3f5e7f9ca158f5a9f04f6a2
         'OCP\\FilesMetadata\\Exceptions\\FilesMetadataNotFoundException' => __DIR__ . '/../../..' . '/lib/public/FilesMetadata/Exceptions/FilesMetadataNotFoundException.php',
         'OCP\\FilesMetadata\\Exceptions\\FilesMetadataTypeException' => __DIR__ . '/../../..' . '/lib/public/FilesMetadata/Exceptions/FilesMetadataTypeException.php',
         'OCP\\FilesMetadata\\IFilesMetadataManager' => __DIR__ . '/../../..' . '/lib/public/FilesMetadata/IFilesMetadataManager.php',
+        'OCP\\FilesMetadata\\IMetadataQuery' => __DIR__ . '/../../..' . '/lib/public/FilesMetadata/IMetadataQuery.php',
         'OCP\\FilesMetadata\\Model\\IFilesMetadata' => __DIR__ . '/../../..' . '/lib/public/FilesMetadata/Model/IFilesMetadata.php',
-        'OCP\\FilesMetadata\\Model\\IMetadataQuery' => __DIR__ . '/../../..' . '/lib/public/FilesMetadata/Model/IMetadataQuery.php',
         'OCP\\FilesMetadata\\Model\\IMetadataValueWrapper' => __DIR__ . '/../../..' . '/lib/public/FilesMetadata/Model/IMetadataValueWrapper.php',
         'OCP\\Files\\AlreadyExistsException' => __DIR__ . '/../../..' . '/lib/public/Files/AlreadyExistsException.php',
         'OCP\\Files\\AppData\\IAppDataFactory' => __DIR__ . '/../../..' . '/lib/public/Files/AppData/IAppDataFactory.php',
@@ -1345,8 +1345,8 @@ class ComposerStaticInit749170dad3f5e7f9ca158f5a9f04f6a2
         'OC\\FilesMetadata\\Job\\UpdateSingleMetadata' => __DIR__ . '/../../..' . '/lib/private/FilesMetadata/Job/UpdateSingleMetadata.php',
         'OC\\FilesMetadata\\Listener\\MetadataDelete' => __DIR__ . '/../../..' . '/lib/private/FilesMetadata/Listener/MetadataDelete.php',
         'OC\\FilesMetadata\\Listener\\MetadataUpdate' => __DIR__ . '/../../..' . '/lib/private/FilesMetadata/Listener/MetadataUpdate.php',
+        'OC\\FilesMetadata\\MetadataQuery' => __DIR__ . '/../../..' . '/lib/private/FilesMetadata/MetadataQuery.php',
         'OC\\FilesMetadata\\Model\\FilesMetadata' => __DIR__ . '/../../..' . '/lib/private/FilesMetadata/Model/FilesMetadata.php',
-        'OC\\FilesMetadata\\Model\\MetadataQuery' => __DIR__ . '/../../..' . '/lib/private/FilesMetadata/Model/MetadataQuery.php',
         'OC\\FilesMetadata\\Model\\MetadataValueWrapper' => __DIR__ . '/../../..' . '/lib/private/FilesMetadata/Model/MetadataValueWrapper.php',
         'OC\\FilesMetadata\\Service\\IndexRequestService' => __DIR__ . '/../../..' . '/lib/private/FilesMetadata/Service/IndexRequestService.php',
         'OC\\FilesMetadata\\Service\\MetadataRequestService' => __DIR__ . '/../../..' . '/lib/private/FilesMetadata/Service/MetadataRequestService.php',
index 7971b5c6307152a9422538b4cc5fb87fda8892c3..a0fa7b6be4306a909e7cfd79c929977527c01ce1 100644 (file)
@@ -30,7 +30,7 @@ use OC\DB\QueryBuilder\QueryBuilder;
 use OC\SystemConfig;
 use OCP\DB\QueryBuilder\IQueryBuilder;
 use OCP\FilesMetadata\IFilesMetadataManager;
-use OCP\FilesMetadata\Model\IMetadataQuery;
+use OCP\FilesMetadata\IMetadataQuery;
 use OCP\IDBConnection;
 use Psr\Log\LoggerInterface;
 
index 6aa230c842f2dc141d427cab9da91e990cf13881..aca998cc4a79b164abc0c87020e337e9d3444de9 100644 (file)
@@ -39,7 +39,7 @@ use OCP\Files\Mount\IMountPoint;
 use OCP\Files\Search\ISearchBinaryOperator;
 use OCP\Files\Search\ISearchQuery;
 use OCP\FilesMetadata\IFilesMetadataManager;
-use OCP\FilesMetadata\Model\IMetadataQuery;
+use OCP\FilesMetadata\IMetadataQuery;
 use OCP\IDBConnection;
 use OCP\IGroupManager;
 use OCP\IUser;
index 860d5e41d89a172391e9bd83a79a98bf5d1c1512..c3699cca63d0290be023369f84686039804ddf23 100644 (file)
@@ -33,7 +33,7 @@ use OCP\Files\Search\ISearchBinaryOperator;
 use OCP\Files\Search\ISearchComparison;
 use OCP\Files\Search\ISearchOperator;
 use OCP\Files\Search\ISearchOrder;
-use OCP\FilesMetadata\Model\IMetadataQuery;
+use OCP\FilesMetadata\IMetadataQuery;
 
 /**
  * Tools for transforming search queries into database queries
index b4c91c3836a507edc25189a129f6600a87b4c384..362db3678aeac040be892ffa5d42e3e4a2c2ecca 100644 (file)
@@ -30,7 +30,6 @@ use OC\FilesMetadata\Job\UpdateSingleMetadata;
 use OC\FilesMetadata\Listener\MetadataDelete;
 use OC\FilesMetadata\Listener\MetadataUpdate;
 use OC\FilesMetadata\Model\FilesMetadata;
-use OC\FilesMetadata\Model\MetadataQuery;
 use OC\FilesMetadata\Service\IndexRequestService;
 use OC\FilesMetadata\Service\MetadataRequestService;
 use OCP\BackgroundJob\IJobList;
@@ -48,8 +47,8 @@ use OCP\FilesMetadata\Event\MetadataLiveEvent;
 use OCP\FilesMetadata\Exceptions\FilesMetadataException;
 use OCP\FilesMetadata\Exceptions\FilesMetadataNotFoundException;
 use OCP\FilesMetadata\IFilesMetadataManager;
+use OCP\FilesMetadata\IMetadataQuery;
 use OCP\FilesMetadata\Model\IFilesMetadata;
-use OCP\FilesMetadata\Model\IMetadataQuery;
 use OCP\FilesMetadata\Model\IMetadataValueWrapper;
 use OCP\IConfig;
 use Psr\Log\LoggerInterface;
diff --git a/lib/private/FilesMetadata/MetadataQuery.php b/lib/private/FilesMetadata/MetadataQuery.php
new file mode 100644 (file)
index 0000000..56ea904
--- /dev/null
@@ -0,0 +1,166 @@
+<?php
+
+declare(strict_types=1);
+/**
+ * @copyright 2023 Maxence Lange <maxence@artificial-owl.com>
+ *
+ * @author Maxence Lange <maxence@artificial-owl.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\FilesMetadata;
+
+use OC\FilesMetadata\Model\FilesMetadata;
+use OC\FilesMetadata\Service\IndexRequestService;
+use OC\FilesMetadata\Service\MetadataRequestService;
+use OCP\DB\QueryBuilder\IQueryBuilder;
+use OCP\FilesMetadata\Exceptions\FilesMetadataNotFoundException;
+use OCP\FilesMetadata\Exceptions\FilesMetadataTypeException;
+use OCP\FilesMetadata\IMetadataQuery;
+use OCP\FilesMetadata\Model\IFilesMetadata;
+use OCP\FilesMetadata\Model\IMetadataValueWrapper;
+
+/**
+ * @inheritDoc
+ * @since 28.0.0
+ */
+class MetadataQuery implements IMetadataQuery {
+       private array $knownJoinedIndex = [];
+       public function __construct(
+               private IQueryBuilder $queryBuilder,
+               private IFilesMetadata $knownMetadata,
+               private string $fileTableAlias = 'fc',
+               private string $fileIdField = 'fileid',
+               private string $alias = 'meta',
+               private string $aliasIndexPrefix = 'meta_index'
+       ) {
+       }
+
+       /**
+        * @inheritDoc
+        * @see self::extractMetadata()
+        * @since 28.0.0
+        */
+       public function retrieveMetadata(): void {
+               $this->queryBuilder->selectAlias($this->alias . '.json', 'meta_json');
+               $this->queryBuilder->leftJoin(
+                       $this->fileTableAlias, MetadataRequestService::TABLE_METADATA, $this->alias,
+                       $this->queryBuilder->expr()->eq($this->fileTableAlias . '.' . $this->fileIdField, $this->alias . '.file_id')
+               );
+       }
+
+       /**
+        * @param array $row result row
+        *
+        * @inheritDoc
+        * @return IFilesMetadata metadata
+        * @see self::retrieveMetadata()
+        * @since 28.0.0
+        */
+       public function extractMetadata(array $row): IFilesMetadata {
+               $fileId = (array_key_exists($this->fileIdField, $row)) ? $row[$this->fileIdField] : 0;
+               $metadata = new FilesMetadata((int)$fileId);
+               try {
+                       $metadata->importFromDatabase($row, $this->alias . '_');
+               } catch (FilesMetadataNotFoundException) {
+                       // can be ignored as files' metadata are optional and might not exist in database
+               }
+
+               return $metadata;
+       }
+
+       /**
+        * @param string $metadataKey metadata key
+        * @param bool $enforce limit the request only to existing metadata
+        *
+        * @inheritDoc
+        * @since 28.0.0
+        */
+       public function joinIndex(string $metadataKey, bool $enforce = false): string {
+               if (array_key_exists($metadataKey, $this->knownJoinedIndex)) {
+                       return $this->knownJoinedIndex[$metadataKey];
+               }
+
+               $aliasIndex = $this->aliasIndexPrefix . '_' . count($this->knownJoinedIndex);
+               $this->knownJoinedIndex[$metadataKey] = $aliasIndex;
+
+               $expr = $this->queryBuilder->expr();
+               $andX = $expr->andX($expr->eq($aliasIndex . '.file_id', $this->fileTableAlias . '.' . $this->fileIdField));
+               $andX->add($expr->eq($this->getMetadataKeyField($metadataKey), $this->queryBuilder->createNamedParameter($metadataKey)));
+
+               if ($enforce) {
+                       $this->queryBuilder->rightJoin(
+                               $this->fileTableAlias,
+                               IndexRequestService::TABLE_METADATA_INDEX,
+                               $aliasIndex,
+                               $andX
+                       );
+               } else {
+                       $this->queryBuilder->leftJoin(
+                               $this->fileTableAlias,
+                               IndexRequestService::TABLE_METADATA_INDEX,
+                               $aliasIndex,
+                               $andX
+                       );
+               }
+
+               return $aliasIndex;
+       }
+
+       /**
+        * @throws FilesMetadataNotFoundException
+        */
+       public function joinedTableAlias(string $metadataKey): string {
+               if (!array_key_exists($metadataKey, $this->knownJoinedIndex)) {
+                       throw new FilesMetadataNotFoundException('table related to ' . $metadataKey . ' not initiated, you need to use leftJoin() first.');
+               }
+
+               return $this->knownJoinedIndex[$metadataKey];
+       }
+
+       /**
+        * @inheritDoc
+        *
+        * @param string $metadataKey metadata key
+        *
+        * @return string table field
+        * @throws FilesMetadataNotFoundException
+        * @since 28.0.0
+        */
+       public function getMetadataKeyField(string $metadataKey): string {
+               return $this->joinedTableAlias($metadataKey) . '.meta_key';
+       }
+
+       /**
+        * @inheritDoc
+        *
+        * @param string $metadataKey metadata key
+        *
+        * @return string table field
+        * @throws FilesMetadataNotFoundException if metadataKey is not known
+        * @throws FilesMetadataTypeException is metadataKey is not set as indexed
+        * @since 28.0.0
+        */
+       public function getMetadataValueField(string $metadataKey): string {
+               return match ($this->knownMetadata->getType($metadataKey)) {
+                       IMetadataValueWrapper::TYPE_STRING => $this->joinedTableAlias($metadataKey) . '.meta_value_string',
+                       IMetadataValueWrapper::TYPE_INT, IMetadataValueWrapper::TYPE_BOOL => $this->joinedTableAlias($metadataKey) . '.meta_value_int',
+                       default => throw new FilesMetadataTypeException('metadata is not set as indexed'),
+               };
+       }
+}
diff --git a/lib/private/FilesMetadata/Model/MetadataQuery.php b/lib/private/FilesMetadata/Model/MetadataQuery.php
deleted file mode 100644 (file)
index 9ff69e9..0000000
+++ /dev/null
@@ -1,165 +0,0 @@
-<?php
-
-declare(strict_types=1);
-/**
- * @copyright 2023 Maxence Lange <maxence@artificial-owl.com>
- *
- * @author Maxence Lange <maxence@artificial-owl.com>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-namespace OC\FilesMetadata\Model;
-
-use OC\FilesMetadata\Service\IndexRequestService;
-use OC\FilesMetadata\Service\MetadataRequestService;
-use OCP\DB\QueryBuilder\IQueryBuilder;
-use OCP\FilesMetadata\Exceptions\FilesMetadataNotFoundException;
-use OCP\FilesMetadata\Exceptions\FilesMetadataTypeException;
-use OCP\FilesMetadata\Model\IFilesMetadata;
-use OCP\FilesMetadata\Model\IMetadataQuery;
-use OCP\FilesMetadata\Model\IMetadataValueWrapper;
-
-/**
- * @inheritDoc
- * @since 28.0.0
- */
-class MetadataQuery implements IMetadataQuery {
-       private array $knownJoinedIndex = [];
-       public function __construct(
-               private IQueryBuilder $queryBuilder,
-               private IFilesMetadata $knownMetadata,
-               private string $fileTableAlias = 'fc',
-               private string $fileIdField = 'fileid',
-               private string $alias = 'meta',
-               private string $aliasIndexPrefix = 'meta_index'
-       ) {
-       }
-
-       /**
-        * @inheritDoc
-        * @see self::extractMetadata()
-        * @since 28.0.0
-        */
-       public function retrieveMetadata(): void {
-               $this->queryBuilder->selectAlias($this->alias . '.json', 'meta_json');
-               $this->queryBuilder->leftJoin(
-                       $this->fileTableAlias, MetadataRequestService::TABLE_METADATA, $this->alias,
-                       $this->queryBuilder->expr()->eq($this->fileTableAlias . '.' . $this->fileIdField, $this->alias . '.file_id')
-               );
-       }
-
-       /**
-        * @param array $row result row
-        *
-        * @inheritDoc
-        * @return IFilesMetadata metadata
-        * @see self::retrieveMetadata()
-        * @since 28.0.0
-        */
-       public function extractMetadata(array $row): IFilesMetadata {
-               $fileId = (array_key_exists($this->fileIdField, $row)) ? $row[$this->fileIdField] : 0;
-               $metadata = new FilesMetadata((int)$fileId);
-               try {
-                       $metadata->importFromDatabase($row, $this->alias . '_');
-               } catch (FilesMetadataNotFoundException) {
-                       // can be ignored as files' metadata are optional and might not exist in database
-               }
-
-               return $metadata;
-       }
-
-       /**
-        * @param string $metadataKey metadata key
-        * @param bool $enforce limit the request only to existing metadata
-        *
-        * @inheritDoc
-        * @since 28.0.0
-        */
-       public function joinIndex(string $metadataKey, bool $enforce = false): string {
-               if (array_key_exists($metadataKey, $this->knownJoinedIndex)) {
-                       return $this->knownJoinedIndex[$metadataKey];
-               }
-
-               $aliasIndex = $this->aliasIndexPrefix . '_' . count($this->knownJoinedIndex);
-               $this->knownJoinedIndex[$metadataKey] = $aliasIndex;
-
-               $expr = $this->queryBuilder->expr();
-               $andX = $expr->andX($expr->eq($aliasIndex . '.file_id', $this->fileTableAlias . '.' . $this->fileIdField));
-               $andX->add($expr->eq($this->getMetadataKeyField($metadataKey), $this->queryBuilder->createNamedParameter($metadataKey)));
-
-               if ($enforce) {
-                       $this->queryBuilder->rightJoin(
-                               $this->fileTableAlias,
-                               IndexRequestService::TABLE_METADATA_INDEX,
-                               $aliasIndex,
-                               $andX
-                       );
-               } else {
-                       $this->queryBuilder->leftJoin(
-                               $this->fileTableAlias,
-                               IndexRequestService::TABLE_METADATA_INDEX,
-                               $aliasIndex,
-                               $andX
-                       );
-               }
-
-               return $aliasIndex;
-       }
-
-       /**
-        * @throws FilesMetadataNotFoundException
-        */
-       public function joinedTableAlias(string $metadataKey): string {
-               if (!array_key_exists($metadataKey, $this->knownJoinedIndex)) {
-                       throw new FilesMetadataNotFoundException('table related to ' . $metadataKey . ' not initiated, you need to use leftJoin() first.');
-               }
-
-               return $this->knownJoinedIndex[$metadataKey];
-       }
-
-       /**
-        * @inheritDoc
-        *
-        * @param string $metadataKey metadata key
-        *
-        * @return string table field
-        * @throws FilesMetadataNotFoundException
-        * @since 28.0.0
-        */
-       public function getMetadataKeyField(string $metadataKey): string {
-               return $this->joinedTableAlias($metadataKey) . '.meta_key';
-       }
-
-       /**
-        * @inheritDoc
-        *
-        * @param string $metadataKey metadata key
-        *
-        * @return string table field
-        * @throws FilesMetadataNotFoundException if metadataKey is not known
-        * @throws FilesMetadataTypeException is metadataKey is not set as indexed
-        * @since 28.0.0
-        */
-       public function getMetadataValueField(string $metadataKey): string {
-               return match ($this->knownMetadata->getType($metadataKey)) {
-                       IMetadataValueWrapper::TYPE_STRING => $this->joinedTableAlias($metadataKey) . '.meta_value_string',
-                       IMetadataValueWrapper::TYPE_INT, IMetadataValueWrapper::TYPE_BOOL => $this->joinedTableAlias($metadataKey) . '.meta_value_int',
-                       default => throw new FilesMetadataTypeException('metadata is not set as indexed'),
-               };
-       }
-}
index 61494cac37143e956ad19104c725bdac5110c143..ebebf3e806b0e5d18729684288d13480fcc76a7e 100644 (file)
@@ -30,7 +30,6 @@ use OCP\Files\Node;
 use OCP\FilesMetadata\Exceptions\FilesMetadataException;
 use OCP\FilesMetadata\Exceptions\FilesMetadataNotFoundException;
 use OCP\FilesMetadata\Model\IFilesMetadata;
-use OCP\FilesMetadata\Model\IMetadataQuery;
 
 /**
  * Manager for FilesMetadata; manage files' metadata.
diff --git a/lib/public/FilesMetadata/IMetadataQuery.php b/lib/public/FilesMetadata/IMetadataQuery.php
new file mode 100644 (file)
index 0000000..c1c649a
--- /dev/null
@@ -0,0 +1,92 @@
+<?php
+
+declare(strict_types=1);
+/**
+ * @copyright 2023 Maxence Lange <maxence@artificial-owl.com>
+ *
+ * @author Maxence Lange <maxence@artificial-owl.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCP\FilesMetadata;
+
+use OCP\FilesMetadata\Model\IFilesMetadata;
+
+/**
+ * Model that help building queries with metadata and metadata indexes
+ *
+ * @since 28.0.0
+ */
+interface IMetadataQuery {
+       /** @since 28.0.0 */
+       public const EXTRA = 'metadata';
+
+       /**
+        * Add metadata linked to file id to the query
+        *
+        * @see self::extractMetadata()
+        * @since 28.0.0
+        */
+       public function retrieveMetadata(): void;
+
+       /**
+        * extract metadata from a result row
+        *
+        * @param array $row result row
+        *
+        * @return IFilesMetadata metadata
+        * @see self::retrieveMetadata()
+        * @since 28.0.0
+        */
+       public function extractMetadata(array $row): IFilesMetadata;
+
+       /**
+        * join the metadata_index table, based on a metadataKey.
+        * This will prep the query for condition based on this specific metadataKey.
+        * If a link to the metadataKey already exists, returns known alias.
+        *
+        * TODO: investigate how to support a search done on multiple values for same key (AND).
+        *
+        * @param string $metadataKey metadata key
+        * @param bool $enforce limit the request only to existing metadata
+        *
+        * @return string generated table alias
+        * @since 28.0.0
+        */
+       public function joinIndex(string $metadataKey, bool $enforce = false): string;
+
+       /**
+        * returns the name of the field for metadata key to be used in query expressions
+        *
+        * @param string $metadataKey metadata key
+        *
+        * @return string table field
+        * @since 28.0.0
+        */
+       public function getMetadataKeyField(string $metadataKey): string;
+
+       /**
+        * returns the name of the field for metadata string value to be used in query expressions
+        *
+        * @param string $metadataKey metadata key
+        *
+        * @return string table field
+        * @since 28.0.0
+        */
+       public function getMetadataValueField(string $metadataKey): string;
+}
diff --git a/lib/public/FilesMetadata/Model/IMetadataQuery.php b/lib/public/FilesMetadata/Model/IMetadataQuery.php
deleted file mode 100644 (file)
index d3f55ce..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-<?php
-
-declare(strict_types=1);
-/**
- * @copyright 2023 Maxence Lange <maxence@artificial-owl.com>
- *
- * @author Maxence Lange <maxence@artificial-owl.com>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-namespace OCP\FilesMetadata\Model;
-
-/**
- * Model that help building queries with metadata and metadata indexes
- *
- * @since 28.0.0
- */
-interface IMetadataQuery {
-       /** @since 28.0.0 */
-       public const EXTRA = 'metadata';
-
-       /**
-        * Add metadata linked to file id to the query
-        *
-        * @see self::extractMetadata()
-        * @since 28.0.0
-        */
-       public function retrieveMetadata(): void;
-
-       /**
-        * extract metadata from a result row
-        *
-        * @param array $row result row
-        *
-        * @return IFilesMetadata metadata
-        * @see self::retrieveMetadata()
-        * @since 28.0.0
-        */
-       public function extractMetadata(array $row): IFilesMetadata;
-
-       /**
-        * join the metadata_index table, based on a metadataKey.
-        * This will prep the query for condition based on this specific metadataKey.
-        * If a link to the metadataKey already exists, returns known alias.
-        *
-        * TODO: investigate how to support a search done on multiple values for same key (AND).
-        *
-        * @param string $metadataKey metadata key
-        * @param bool $enforce limit the request only to existing metadata
-        *
-        * @return string generated table alias
-        * @since 28.0.0
-        */
-       public function joinIndex(string $metadataKey, bool $enforce = false): string;
-
-       /**
-        * returns the name of the field for metadata key to be used in query expressions
-        *
-        * @param string $metadataKey metadata key
-        *
-        * @return string table field
-        * @since 28.0.0
-        */
-       public function getMetadataKeyField(string $metadataKey): string;
-
-       /**
-        * returns the name of the field for metadata string value to be used in query expressions
-        *
-        * @param string $metadataKey metadata key
-        *
-        * @return string table field
-        * @since 28.0.0
-        */
-       public function getMetadataValueField(string $metadataKey): string;
-}