diff --git a/apps/dav/lib/DAV/Sharing/Backend.php b/apps/dav/lib/DAV/Sharing/Backend.php index d60f5cca7c6fb..86553c30b537f 100644 --- a/apps/dav/lib/DAV/Sharing/Backend.php +++ b/apps/dav/lib/DAV/Sharing/Backend.php @@ -116,8 +116,9 @@ public function deleteAllSharesByUser(string $principaluri): void { * @return list */ public function getShares(int $resourceId): array { + /** @var list|null $cached */ $cached = $this->shareCache->get((string)$resourceId); - if ($cached) { + if (is_array($cached)) { return $cached; } @@ -161,6 +162,23 @@ public function preloadShares(array $resourceIds): void { ]; $this->shareCache->set((string)$resourceId, $sharesByResource[$resourceId]); } + + // Also remember resources with no shares to prevent superfluous (empty) queries later on + foreach ($resourceIds as $resourceId) { + $hasShares = false; + foreach ($rows as $row) { + if ((int)$row['resourceid'] === $resourceId) { + $hasShares = true; + break; + } + } + + if ($hasShares) { + continue; + } + + $this->shareCache->set((string)$resourceId, []); + } } /**