From fcbfa54906c3b7ef484d32f8d51a9dff8a1ce3c9 Mon Sep 17 00:00:00 2001 From: Maxence Lange Date: Wed, 11 Feb 2026 15:15:12 -0100 Subject: [PATCH] avoid desync with memberships Signed-off-by: Maxence Lange [skip ci] --- lib/Db/CircleRequest.php | 7 ++++++- lib/Db/CoreQueryBuilder.php | 10 +++++----- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/lib/Db/CircleRequest.php b/lib/Db/CircleRequest.php index af1a3a810..4aa60b8e7 100644 --- a/lib/Db/CircleRequest.php +++ b/lib/Db/CircleRequest.php @@ -308,10 +308,15 @@ private function buildProbeCircle( $aliasMembership ) ); - $qb->completeProbeWithInitiator(CoreQueryBuilder::CIRCLE, 'single_id', $aliasMembership); + $aliasInitiator = $qb->completeProbeWithInitiator(CoreQueryBuilder::CIRCLE, 'single_id', $aliasMembership); } $qb->andWhere($limit); + if (!is_null($aliasInitiator)) { + // ensure initiator is not null (desync memberships/members) + $qb->filterNull('single_id', alias: $aliasInitiator); + } + $qb->resetSqlPath(); return $qb; diff --git a/lib/Db/CoreQueryBuilder.php b/lib/Db/CoreQueryBuilder.php index 44af4c9d7..6d41b3deb 100644 --- a/lib/Db/CoreQueryBuilder.php +++ b/lib/Db/CoreQueryBuilder.php @@ -1289,15 +1289,15 @@ public function completeProbeWithInitiator( string $alias, string $field = 'single_id', string $helperAlias = '', - ): void { + ): ?string { if ($this->getType() !== QueryBuilder::SELECT) { - return; + return null; } try { $aliasInitiator = $this->generateAlias($alias, self::INITIATOR); } catch (RequestBuilderException $e) { - return; + return null; } $helperAlias = ($helperAlias === '') ? $alias : $helperAlias; @@ -1311,8 +1311,8 @@ public function completeProbeWithInitiator( $expr->eq($aliasInitiator . '.' . $field, $helperAlias . '.inheritance_first'), ) ); - // - // $this->leftJoinBasedOn($aliasInitiator); + + return $aliasInitiator; } /**