diff options
-rw-r--r-- | lib/Db/FeedMapperV2.php | 39 |
1 files changed, 23 insertions, 16 deletions
diff --git a/lib/Db/FeedMapperV2.php b/lib/Db/FeedMapperV2.php index c80bf118b..55478198e 100644 --- a/lib/Db/FeedMapperV2.php +++ b/lib/Db/FeedMapperV2.php @@ -186,21 +186,28 @@ class FeedMapperV2 extends NewsMapperV2 }, $this->db->executeQuery($idBuilder->getSQL(), $idBuilder->getParameters())->fetchAll() ); - $time = new Time(); - $builder = $this->db->getQueryBuilder(); - $builder->update(ItemMapperV2::TABLE_NAME) - ->set('unread', $builder->createParameter('unread')) - ->set('last_modified', $builder->createParameter('last_modified')) - ->andWhere('id IN (:idList)') - ->andWhere('unread != :unread') - ->setParameter('unread', false, IQueryBuilder::PARAM_BOOL) - ->setParameter('idList', $idList, IQueryBuilder::PARAM_INT_ARRAY) - ->setParameter('last_modified', $time->getMicroTime(), IQueryBuilder::PARAM_STR); - - return $this->db->executeStatement( - $builder->getSQL(), - $builder->getParameters(), - $builder->getParameterTypes() - ); + + $chunked_idList = array_chunk($idList,65500,true); + $res = 0; + foreach ($chunked_idList as $idList_chunk) + { + $time = new Time(); + $builder = $this->db->getQueryBuilder(); + $builder->update(ItemMapperV2::TABLE_NAME) + ->set('unread', $builder->createParameter('unread')) + ->set('last_modified', $builder->createParameter('last_modified')) + ->andWhere('id IN (:idList)') + ->andWhere('unread != :unread') + ->setParameter('unread', false, IQueryBuilder::PARAM_BOOL) + ->setParameter('idList', $idList_chunk, IQueryBuilder::PARAM_INT_ARRAY) + ->setParameter('last_modified', $time->getMicroTime(), IQueryBuilder::PARAM_STR); + + $res += $this->db->executeStatement( + $builder->getSQL(), + $builder->getParameters(), + $builder->getParameterTypes() + ); + } + return $res; } } |