@@ -634,27 +634,29 @@ public function getNumberOfCommentsForObject($objectType, $objectId, \DateTime $
634634 * @since 21.0.0
635635 */
636636 public function getNumberOfUnreadCommentsForObjects (string $ objectType , array $ objectIds , IUser $ user , $ verb = '' ): array {
637- $ query = $ this ->dbConn ->getQueryBuilder ();
638- $ query ->select ('c.object_id ' , $ query ->func ()->count ('c.id ' , 'num_comments ' ))
639- ->from ('comments ' , 'c ' )
640- ->leftJoin ('c ' , 'comments_read_markers ' , 'm ' , $ query ->expr ()->andX (
641- $ query ->expr ()->eq ('m.user_id ' , $ query ->createNamedParameter ($ user ->getUID ())),
642- $ query ->expr ()->eq ('c.object_type ' , 'm.object_type ' ),
643- $ query ->expr ()->eq ('c.object_id ' , 'm.object_id ' )
644- ))
645- ->where ($ query ->expr ()->eq ('c.object_type ' , $ query ->createNamedParameter ($ objectType )))
646- ->andWhere ($ query ->expr ()->in ('c.object_id ' , $ query ->createNamedParameter ($ objectIds , IQueryBuilder::PARAM_STR_ARRAY )))
647- ->andWhere ($ query ->expr ()->orX (
648- $ query ->expr ()->gt ('c.creation_timestamp ' , 'm.marker_datetime ' ),
649- $ query ->expr ()->isNull ('m.marker_datetime ' )
650- ))
651- ->groupBy ('c.object_id ' );
637+ foreach (array_chunk ($ objectIds , 1000 ) as $ chunk ) {
638+ $ query = $ this ->dbConn ->getQueryBuilder ();
639+ $ query ->select ('c.object_id ' , $ query ->func ()->count ('c.id ' , 'num_comments ' ))
640+ ->from ('comments ' , 'c ' )
641+ ->leftJoin ('c ' , 'comments_read_markers ' , 'm ' , $ query ->expr ()->andX (
642+ $ query ->expr ()->eq ('m.user_id ' , $ query ->createNamedParameter ($ user ->getUID ())),
643+ $ query ->expr ()->eq ('c.object_type ' , 'm.object_type ' ),
644+ $ query ->expr ()->eq ('c.object_id ' , 'm.object_id ' )
645+ ))
646+ ->where ($ query ->expr ()->eq ('c.object_type ' , $ query ->createNamedParameter ($ objectType )))
647+ ->andWhere ($ query ->expr ()->in ('c.object_id ' , $ query ->createNamedParameter ($ chunk , IQueryBuilder::PARAM_STR_ARRAY )))
648+ ->andWhere ($ query ->expr ()->orX (
649+ $ query ->expr ()->gt ('c.creation_timestamp ' , 'm.marker_datetime ' ),
650+ $ query ->expr ()->isNull ('m.marker_datetime ' )
651+ ))
652+ ->groupBy ('c.object_id ' );
653+
654+ if ($ verb !== '' ) {
655+ $ query ->andWhere ($ query ->expr ()->eq ('c.verb ' , $ query ->createNamedParameter ($ verb )));
656+ }
652657
653- if ($ verb !== '' ) {
654- $ query ->andWhere ($ query ->expr ()->eq ('c.verb ' , $ query ->createNamedParameter ($ verb )));
658+ $ result = $ query ->execute ();
655659 }
656-
657- $ result = $ query ->execute ();
658660 $ unreadComments = array_fill_keys ($ objectIds , 0 );
659661 while ($ row = $ result ->fetch ()) {
660662 $ unreadComments [$ row ['object_id ' ]] = (int ) $ row ['num_comments ' ];
0 commit comments