Skip to content

Commit

Permalink
Fix Oracle query limit compliance in Comments
Browse files Browse the repository at this point in the history
Signed-off-by: Simounet <[email protected]>
  • Loading branch information
Simounet committed May 27, 2021
1 parent 54f8d48 commit 6bec93f
Showing 1 changed file with 21 additions and 19 deletions.
40 changes: 21 additions & 19 deletions lib/private/Comments/Manager.php
Original file line number Diff line number Diff line change
Expand Up @@ -634,27 +634,29 @@ public function getNumberOfCommentsForObject($objectType, $objectId, \DateTime $
* @since 21.0.0
*/
public function getNumberOfUnreadCommentsForObjects(string $objectType, array $objectIds, IUser $user, $verb = ''): array {
$query = $this->dbConn->getQueryBuilder();
$query->select('c.object_id', $query->func()->count('c.id', 'num_comments'))
->from('comments', 'c')
->leftJoin('c', 'comments_read_markers', 'm', $query->expr()->andX(
$query->expr()->eq('m.user_id', $query->createNamedParameter($user->getUID())),
$query->expr()->eq('c.object_type', 'm.object_type'),
$query->expr()->eq('c.object_id', 'm.object_id')
))
->where($query->expr()->eq('c.object_type', $query->createNamedParameter($objectType)))
->andWhere($query->expr()->in('c.object_id', $query->createNamedParameter($objectIds, IQueryBuilder::PARAM_STR_ARRAY)))
->andWhere($query->expr()->orX(
$query->expr()->gt('c.creation_timestamp', 'm.marker_datetime'),
$query->expr()->isNull('m.marker_datetime')
))
->groupBy('c.object_id');
foreach (array_chunk($objectIds, 1000) as $chunk) {
$query = $this->dbConn->getQueryBuilder();
$query->select('c.object_id', $query->func()->count('c.id', 'num_comments'))
->from('comments', 'c')
->leftJoin('c', 'comments_read_markers', 'm', $query->expr()->andX(
$query->expr()->eq('m.user_id', $query->createNamedParameter($user->getUID())),
$query->expr()->eq('c.object_type', 'm.object_type'),
$query->expr()->eq('c.object_id', 'm.object_id')
))
->where($query->expr()->eq('c.object_type', $query->createNamedParameter($objectType)))
->andWhere($query->expr()->in('c.object_id', $query->createNamedParameter($chunk, IQueryBuilder::PARAM_STR_ARRAY)))
->andWhere($query->expr()->orX(
$query->expr()->gt('c.creation_timestamp', 'm.marker_datetime'),
$query->expr()->isNull('m.marker_datetime')
))
->groupBy('c.object_id');

if ($verb !== '') {
$query->andWhere($query->expr()->eq('c.verb', $query->createNamedParameter($verb)));
}

if ($verb !== '') {
$query->andWhere($query->expr()->eq('c.verb', $query->createNamedParameter($verb)));
$result = $query->execute();
}

$result = $query->execute();
$unreadComments = array_fill_keys($objectIds, 0);
while ($row = $result->fetch()) {
$unreadComments[$row['object_id']] = (int) $row['num_comments'];
Expand Down

0 comments on commit 6bec93f

Please sign in to comment.