From 0a79bc44dfc4d7e4e99b23477c10ef8f9cf2531e Mon Sep 17 00:00:00 2001 From: Richard Steinmetz Date: Fri, 15 Aug 2025 14:11:47 +0200 Subject: [PATCH] perf(caldav): also cache empty share arrays Signed-off-by: Richard Steinmetz --- apps/dav/lib/DAV/Sharing/Backend.php | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) 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, []); + } } /**