From a7f29f05fd8b3136d1f254a9c376b4096538c716 Mon Sep 17 00:00:00 2001 From: Kostiantyn Miakshyn Date: Sun, 16 Mar 2025 22:54:59 +0100 Subject: [PATCH] Speedup circles fetching Signed-off-by: Kostiantyn Miakshyn --- lib/Db/MemberRequest.php | 4 ++++ lib/Model/Circle.php | 4 ++-- lib/Model/ModelManager.php | 4 ++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/lib/Db/MemberRequest.php b/lib/Db/MemberRequest.php index 0252df651..637d4df41 100644 --- a/lib/Db/MemberRequest.php +++ b/lib/Db/MemberRequest.php @@ -198,6 +198,7 @@ public function getMembers( string $singleId, ?IFederatedUser $initiator = null, ?MemberProbe $probe = null, + int $limit = 0, ): array { if (is_null($probe)) { $probe = new MemberProbe(); @@ -205,6 +206,9 @@ public function getMembers( $qb = $this->getMemberSelectSql($initiator); $qb->limitToCircleId($singleId); + if ($limit > 0) { + $qb->chunk(0, $limit); + } $qb->setOptions( [CoreQueryBuilder::MEMBER], diff --git a/lib/Model/Circle.php b/lib/Model/Circle.php index 5730cd2f3..ef4ddf5e5 100644 --- a/lib/Model/Circle.php +++ b/lib/Model/Circle.php @@ -430,9 +430,9 @@ public function setMembers(array $members): self { /** * @return Member[] */ - public function getMembers(): array { + public function getMembers(int $limit = 0): array { if (!$this->hasMembers()) { - $this->getManager()->getMembers($this); + $this->getManager()->getMembers($this, $limit); } return $this->members; diff --git a/lib/Model/ModelManager.php b/lib/Model/ModelManager.php index 6c82242ab..721c6683c 100644 --- a/lib/Model/ModelManager.php +++ b/lib/Model/ModelManager.php @@ -117,9 +117,9 @@ public function getConfigService(): ConfigService { /** * @param Circle $circle */ - public function getMembers(Circle $circle): void { + public function getMembers(Circle $circle, int $limit = 0): void { try { - $circle->setMembers($this->memberRequest->getMembers($circle->getSingleId())); + $circle->setMembers($this->memberRequest->getMembers($circle->getSingleId(), limit: $limit)); } catch (RequestBuilderException $e) { // TODO: debug log }