perf(caldav): also cache empty share arrays

Signed-off-by: Richard Steinmetz <richard@steinmetz.cloud>
This commit is contained in:
Richard Steinmetz 2025-08-15 14:11:47 +02:00
parent 5262bac6b5
commit 0a79bc44df
No known key found for this signature in database
GPG key ID: 27137D9E7D273FB2

View file

@ -116,8 +116,9 @@ abstract class Backend {
* @return list<array{href: string, commonName: string, status: int, readOnly: bool, '{http://owncloud.org/ns}principal': string, '{http://owncloud.org/ns}group-share': bool}>
*/
public function getShares(int $resourceId): array {
/** @var list<array{href: string, commonName: string, status: int, readOnly: bool, '{http://owncloud.org/ns}principal': string, '{http://owncloud.org/ns}group-share': bool}>|null $cached */
$cached = $this->shareCache->get((string)$resourceId);
if ($cached) {
if (is_array($cached)) {
return $cached;
}
@ -161,6 +162,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, []);
}
}
/**