Skip to content

Commit 520ae2a

Browse files
ArtificialOwlbackportbot[bot]
authored andcommitted
avoid desync with memberships
Signed-off-by: Maxence Lange <maxence@artificial-owl.com>
1 parent 1414cca commit 520ae2a

2 files changed

Lines changed: 12 additions & 6 deletions

File tree

lib/Db/CircleRequest.php

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -296,6 +296,7 @@ private function buildProbeCircle(
296296

297297
$aliasMembership = $qb->generateAlias(CoreQueryBuilder::CIRCLE, CoreQueryBuilder::MEMBERSHIPS);
298298

299+
$aliasInitiator = null;
299300
if (is_null($initiator)) {
300301
// to get unique result, enforce a limit on level=owner
301302
$limit = $qb->exprLimitInt('level', Member::LEVEL_OWNER, $aliasMembership);
@@ -305,10 +306,15 @@ private function buildProbeCircle(
305306
$initiator->getSingleId(),
306307
$aliasMembership
307308
);
308-
$qb->completeProbeWithInitiator(CoreQueryBuilder::CIRCLE, 'single_id', $aliasMembership);
309+
$aliasInitiator = $qb->completeProbeWithInitiator(CoreQueryBuilder::CIRCLE, 'single_id', $aliasMembership);
309310
}
310311

311312
$qb->andWhere($limit);
313+
if (!is_null($aliasInitiator)) {
314+
// ensure initiator is not null (desync memberships/members)
315+
$qb->filterNull('single_id', alias: $aliasInitiator);
316+
}
317+
312318
$qb->resetSqlPath();
313319

314320
return $qb;

lib/Db/CoreQueryBuilder.php

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1268,15 +1268,15 @@ public function completeProbeWithInitiator(
12681268
string $alias,
12691269
string $field = 'single_id',
12701270
string $helperAlias = '',
1271-
): void {
1271+
): ?string {
12721272
if ($this->getType() !== QueryBuilder::SELECT) {
1273-
return;
1273+
return null;
12741274
}
12751275

12761276
try {
12771277
$aliasInitiator = $this->generateAlias($alias, self::INITIATOR);
12781278
} catch (RequestBuilderException $e) {
1279-
return;
1279+
return null;
12801280
}
12811281

12821282
$helperAlias = ($helperAlias === '') ? $alias : $helperAlias;
@@ -1290,8 +1290,8 @@ public function completeProbeWithInitiator(
12901290
$expr->eq($aliasInitiator . '.' . $field, $helperAlias . '.inheritance_first'),
12911291
)
12921292
);
1293-
//
1294-
// $this->leftJoinBasedOn($aliasInitiator);
1293+
1294+
return $aliasInitiator;
12951295
}
12961296

12971297
/**

0 commit comments

Comments
 (0)