summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArthur Schiwon <blizzz@arthur-schiwon.de>2023-06-27 22:49:08 +0200
committerArthur Schiwon <blizzz@arthur-schiwon.de>2023-07-07 17:56:10 +0200
commit6256da1ade26e803887971424e113b8183f52d2a (patch)
treeeb5950893f939a8dc6de0d9791bf3bc48efee60b
parent5cd984b76b21a10d14ee56520fbe71538e9f5ee2 (diff)
downloadnextcloud-server-6256da1ade26e803887971424e113b8183f52d2a.tar.gz
nextcloud-server-6256da1ade26e803887971424e113b8183f52d2a.zip
fix: cannot apply limit+offset on multi-tag-search
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
-rw-r--r--apps/dav/lib/Connector/Sabre/FilesReportPlugin.php12
1 files changed, 11 insertions, 1 deletions
diff --git a/apps/dav/lib/Connector/Sabre/FilesReportPlugin.php b/apps/dav/lib/Connector/Sabre/FilesReportPlugin.php
index 6122ba1bfe7..4b26d837779 100644
--- a/apps/dav/lib/Connector/Sabre/FilesReportPlugin.php
+++ b/apps/dav/lib/Connector/Sabre/FilesReportPlugin.php
@@ -338,9 +338,15 @@ class FilesReportPlugin extends ServerPlugin {
// exposed in API yet
if (!empty($systemTagIds)) {
$tags = $this->tagManager->getTagsByIds($systemTagIds, $this->userSession->getUser());
+
+ // For we run DB queries per tag and require intersection, we cannot apply limit and offset for DB queries on multi tag search.
+ $oneTagSearch = count($tags) === 1;
+ $dbLimit = $oneTagSearch ? $limit ?? 0 : 0;
+ $dbOffset = $oneTagSearch ? $offset ?? 0 : 0;
+
foreach ($tags as $tag) {
$tagName = $tag->getName();
- $tmpNodes = $this->userFolder->searchBySystemTag($tagName, $this->userSession->getUser()->getUID(), $limit ?? 0, $offset ?? 0);
+ $tmpNodes = $this->userFolder->searchBySystemTag($tagName, $this->userSession->getUser()->getUID(), $dbLimit, $dbOffset);
if (count($nodes) === 0) {
$nodes = $tmpNodes;
} else {
@@ -353,6 +359,10 @@ class FilesReportPlugin extends ServerPlugin {
return $nodes;
}
}
+
+ if (!$oneTagSearch && ($limit !== null || $offset !== null)) {
+ $nodes = array_slice($nodes, $offset, $limit);
+ }
}
return $nodes;