diff --git a/lib/Db/CircleRequest.php b/lib/Db/CircleRequest.php index 890145adb..06f0bae19 100644 --- a/lib/Db/CircleRequest.php +++ b/lib/Db/CircleRequest.php @@ -296,6 +296,7 @@ private function buildProbeCircle( $aliasMembership = $qb->generateAlias(CoreQueryBuilder::CIRCLE, CoreQueryBuilder::MEMBERSHIPS); + $aliasInitiator = null; if (is_null($initiator)) { // to get unique result, enforce a limit on level=owner $limit = $qb->exprLimitInt('level', Member::LEVEL_OWNER, $aliasMembership); @@ -305,10 +306,15 @@ private function buildProbeCircle( $initiator->getSingleId(), $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 5c23ff39e..22be02462 100644 --- a/lib/Db/CoreQueryBuilder.php +++ b/lib/Db/CoreQueryBuilder.php @@ -1292,15 +1292,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; @@ -1314,8 +1314,8 @@ public function completeProbeWithInitiator( $expr->eq($aliasInitiator . '.' . $field, $helperAlias . '.inheritance_first'), ) ); - // - // $this->leftJoinBasedOn($aliasInitiator); + + return $aliasInitiator; } /**