Skip to content

Commit 87019e0

Browse files
authored
Merge pull request #13335 from nextcloud/backport/13161/stable15
[stable15] Rewrite getNumberOfUnreadCommentsForFolder query
2 parents eaa8e7c + 241ec07 commit 87019e0

File tree

1 file changed

+29
-14
lines changed

1 file changed

+29
-14
lines changed

lib/private/Comments/Manager.php

Lines changed: 29 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -581,27 +581,42 @@ public function getNumberOfCommentsForObject($objectType, $objectId, \DateTime $
581581
* @param int $folderId
582582
* @param IUser $user
583583
* @return array [$fileId => $unreadCount]
584+
*
585+
* @suppress SqlInjectionChecker
584586
*/
585587
public function getNumberOfUnreadCommentsForFolder($folderId, IUser $user) {
586588
$qb = $this->dbConn->getQueryBuilder();
589+
587590
$query = $qb->select('f.fileid')
588591
->addSelect($qb->func()->count('c.id', 'num_ids'))
589-
->from('comments', 'c')
590-
->innerJoin('c', 'filecache', 'f', $qb->expr()->andX(
591-
$qb->expr()->eq('c.object_type', $qb->createNamedParameter('files')),
592-
$qb->expr()->eq('f.fileid', $qb->expr()->castColumn('c.object_id', IQueryBuilder::PARAM_INT))
592+
->from('filecache', 'f')
593+
->leftJoin('f', 'comments', 'c', $qb->expr()->eq(
594+
'f.fileid', $qb->expr()->castColumn('c.object_id', IQueryBuilder::PARAM_INT)
593595
))
594-
->leftJoin('c', 'comments_read_markers', 'm', $qb->expr()->andX(
595-
$qb->expr()->eq('m.object_type', $qb->createNamedParameter('files')),
596-
$qb->expr()->eq('m.object_id', 'c.object_id'),
597-
$qb->expr()->eq('m.user_id', $qb->createNamedParameter($user->getUID()))
596+
->leftJoin('c', 'comments_read_markers', 'm', $qb->expr()->eq(
597+
'c.object_id', 'm.object_id'
598598
))
599-
->andWhere($qb->expr()->eq('f.parent', $qb->createNamedParameter($folderId)))
600-
->andWhere($qb->expr()->orX(
601-
$qb->expr()->gt('c.creation_timestamp', 'marker_datetime'),
602-
$qb->expr()->isNull('marker_datetime')
603-
))
604-
->groupBy('f.fileid');
599+
->where(
600+
$qb->expr()->andX(
601+
$qb->expr()->eq('f.parent', $qb->createNamedParameter($folderId)),
602+
$qb->expr()->orX(
603+
$qb->expr()->eq('c.object_type', $qb->createNamedParameter('files')),
604+
$qb->expr()->isNull('c.object_type')
605+
),
606+
$qb->expr()->orX(
607+
$qb->expr()->eq('m.object_type', $qb->createNamedParameter('files')),
608+
$qb->expr()->isNull('m.object_type')
609+
),
610+
$qb->expr()->orX(
611+
$qb->expr()->eq('m.user_id', $qb->createNamedParameter($user->getUID())),
612+
$qb->expr()->isNull('m.user_id')
613+
),
614+
$qb->expr()->orX(
615+
$qb->expr()->gt('c.creation_timestamp', 'm.marker_datetime'),
616+
$qb->expr()->isNull('m.marker_datetime')
617+
)
618+
)
619+
)->groupBy('f.fileid');
605620

606621
$resultStatement = $query->execute();
607622

0 commit comments

Comments
 (0)