diff --git a/apps/dav/lib/DAV/Sharing/Backend.php b/apps/dav/lib/DAV/Sharing/Backend.php index 281063bfa09..4907d6ed358 100644 --- a/apps/dav/lib/DAV/Sharing/Backend.php +++ b/apps/dav/lib/DAV/Sharing/Backend.php @@ -131,8 +131,9 @@ abstract class Backend { * @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; } @@ -176,6 +177,23 @@ abstract class Backend { ]; $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, []); + } } /**