diff --git a/lib/private/Repair/RepairInvalidShares.php b/lib/private/Repair/RepairInvalidShares.php index 1793ef55f30e9..2634b805a3ddb 100644 --- a/lib/private/Repair/RepairInvalidShares.php +++ b/lib/private/Repair/RepairInvalidShares.php @@ -8,6 +8,7 @@ namespace OC\Repair; use OCP\Constants; +use OCP\DB\QueryBuilder\IQueryBuilder; use OCP\IConfig; use OCP\IDBConnection; use OCP\Migration\IOutput; @@ -67,18 +68,20 @@ private function removeSharesNonExistingParent(IOutput $output): void { $deleteQuery = $this->connection->getQueryBuilder(); $deleteQuery->delete('share') - ->where($deleteQuery->expr()->eq('parent', $deleteQuery->createParameter('parent'))); + ->where($deleteQuery->expr()->in('parent', $deleteQuery->createParameter('parent'))); - $deletedInLastChunk = self::CHUNK_SIZE; - while ($deletedInLastChunk === self::CHUNK_SIZE) { - $deletedInLastChunk = 0; + while (true) { $result = $query->executeQuery(); - while ($row = $result->fetch()) { - $deletedInLastChunk++; - $deletedEntries += $deleteQuery->setParameter('parent', (int)$row['parent']) - ->executeStatement(); - } + $parents = $result->fetchFirstColumn(); + $parents = array_unique($parents); $result->closeCursor(); + + if ($parents === []) { + break; + } + + $deletedEntries += $deleteQuery->setParameter('parent', $parents, IQueryBuilder::PARAM_INT_ARRAY) + ->executeStatement(); } if ($deletedEntries) {