Skip to content

Commit 756e204

Browse files
Merge pull request #2365 from nextcloud/backport/2357/stable33
[stable33] avoid desync with memberships
2 parents 2604872 + 9d79cb4 commit 756e204

File tree

2 files changed

+12
-6
lines changed

2 files changed

+12
-6
lines changed

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
@@ -1292,15 +1292,15 @@ public function completeProbeWithInitiator(
12921292
string $alias,
12931293
string $field = 'single_id',
12941294
string $helperAlias = '',
1295-
): void {
1295+
): ?string {
12961296
if ($this->getType() !== QueryBuilder::SELECT) {
1297-
return;
1297+
return null;
12981298
}
12991299

13001300
try {
13011301
$aliasInitiator = $this->generateAlias($alias, self::INITIATOR);
13021302
} catch (RequestBuilderException $e) {
1303-
return;
1303+
return null;
13041304
}
13051305

13061306
$helperAlias = ($helperAlias === '') ? $alias : $helperAlias;
@@ -1314,8 +1314,8 @@ public function completeProbeWithInitiator(
13141314
$expr->eq($aliasInitiator . '.' . $field, $helperAlias . '.inheritance_first'),
13151315
)
13161316
);
1317-
//
1318-
// $this->leftJoinBasedOn($aliasInitiator);
1317+
1318+
return $aliasInitiator;
13191319
}
13201320

13211321
/**

0 commit comments

Comments
 (0)