Merge pull request #13161 from nextcloud/perf/fix_comments_in_folder_function
Rewrite getNumberOfUnreadCommentsForFolder query
This commit is contained in:
commit
aad32771f8
|
@ -581,27 +581,42 @@ class Manager implements ICommentsManager {
|
||||||
* @param int $folderId
|
* @param int $folderId
|
||||||
* @param IUser $user
|
* @param IUser $user
|
||||||
* @return array [$fileId => $unreadCount]
|
* @return array [$fileId => $unreadCount]
|
||||||
|
*
|
||||||
|
* @suppress SqlInjectionChecker
|
||||||
*/
|
*/
|
||||||
public function getNumberOfUnreadCommentsForFolder($folderId, IUser $user) {
|
public function getNumberOfUnreadCommentsForFolder($folderId, IUser $user) {
|
||||||
$qb = $this->dbConn->getQueryBuilder();
|
$qb = $this->dbConn->getQueryBuilder();
|
||||||
|
|
||||||
$query = $qb->select('f.fileid')
|
$query = $qb->select('f.fileid')
|
||||||
->addSelect($qb->func()->count('c.id', 'num_ids'))
|
->addSelect($qb->func()->count('c.id', 'num_ids'))
|
||||||
->from('comments', 'c')
|
->from('filecache', 'f')
|
||||||
->innerJoin('c', 'filecache', 'f', $qb->expr()->andX(
|
->leftJoin('f', 'comments', 'c', $qb->expr()->eq(
|
||||||
$qb->expr()->eq('c.object_type', $qb->createNamedParameter('files')),
|
'f.fileid', $qb->expr()->castColumn('c.object_id', IQueryBuilder::PARAM_INT)
|
||||||
$qb->expr()->eq('f.fileid', $qb->expr()->castColumn('c.object_id', IQueryBuilder::PARAM_INT))
|
|
||||||
))
|
))
|
||||||
->leftJoin('c', 'comments_read_markers', 'm', $qb->expr()->andX(
|
->leftJoin('c', 'comments_read_markers', 'm', $qb->expr()->eq(
|
||||||
$qb->expr()->eq('m.object_type', $qb->createNamedParameter('files')),
|
'c.object_id', 'm.object_id'
|
||||||
$qb->expr()->eq('m.object_id', 'c.object_id'),
|
|
||||||
$qb->expr()->eq('m.user_id', $qb->createNamedParameter($user->getUID()))
|
|
||||||
))
|
))
|
||||||
->andWhere($qb->expr()->eq('f.parent', $qb->createNamedParameter($folderId)))
|
->where(
|
||||||
->andWhere($qb->expr()->orX(
|
$qb->expr()->andX(
|
||||||
$qb->expr()->gt('c.creation_timestamp', 'marker_datetime'),
|
$qb->expr()->eq('f.parent', $qb->createNamedParameter($folderId)),
|
||||||
$qb->expr()->isNull('marker_datetime')
|
$qb->expr()->orX(
|
||||||
))
|
$qb->expr()->eq('c.object_type', $qb->createNamedParameter('files')),
|
||||||
->groupBy('f.fileid');
|
$qb->expr()->isNull('c.object_type')
|
||||||
|
),
|
||||||
|
$qb->expr()->orX(
|
||||||
|
$qb->expr()->eq('m.object_type', $qb->createNamedParameter('files')),
|
||||||
|
$qb->expr()->isNull('m.object_type')
|
||||||
|
),
|
||||||
|
$qb->expr()->orX(
|
||||||
|
$qb->expr()->eq('m.user_id', $qb->createNamedParameter($user->getUID())),
|
||||||
|
$qb->expr()->isNull('m.user_id')
|
||||||
|
),
|
||||||
|
$qb->expr()->orX(
|
||||||
|
$qb->expr()->gt('c.creation_timestamp', 'm.marker_datetime'),
|
||||||
|
$qb->expr()->isNull('m.marker_datetime')
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)->groupBy('f.fileid');
|
||||||
|
|
||||||
$resultStatement = $query->execute();
|
$resultStatement = $query->execute();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue