diff --git a/lib/private/Files/Cache/StorageGlobal.php b/lib/private/Files/Cache/StorageGlobal.php index 8835dbf9f8c..53a40c034ce 100644 --- a/lib/private/Files/Cache/StorageGlobal.php +++ b/lib/private/Files/Cache/StorageGlobal.php @@ -42,21 +42,23 @@ class StorageGlobal { $builder = $this->connection->getQueryBuilder(); $query = $builder->select(['id', 'numeric_id', 'available', 'last_checked']) ->from('storages') - ->where($builder->expr()->in('id', $builder->createNamedParameter(array_values($storageIds), IQueryBuilder::PARAM_STR_ARRAY))); + ->where($builder->expr()->in('id', $builder->createParameter('ids'), IQueryBuilder::PARAM_STR_ARRAY)); - $result = $query->executeQuery(); - while (($row = $result->fetch()) !== false) { - $normalizedRow = [ - 'id' => (string)$row['id'], - 'numeric_id' => (int)$row['numeric_id'], - 'available' => (bool)$row['available'], - 'last_checked' => (int)$row['last_checked'], - ]; + foreach (array_chunk($storageIds, 1000) as $chunk) { + $query->setParameter('ids', $chunk, IQueryBuilder::PARAM_STR_ARRAY); - $this->cache[$normalizedRow['id']] = $normalizedRow; + $result = $query->executeQuery(); + while (($row = $result->fetch()) !== false) { + $normalizedRow = [ + 'id' => (string)$row['id'], + 'numeric_id' => (int)$row['numeric_id'], + 'available' => (bool)$row['available'], + 'last_checked' => (int)$row['last_checked'], + ]; + + $this->cache[$normalizedRow['id']] = $normalizedRow; + } } - - $result->closeCursor(); } /**