diff options
Diffstat (limited to 'app/Models/DatabaseDAO.php')
| -rw-r--r-- | app/Models/DatabaseDAO.php | 32 |
1 files changed, 20 insertions, 12 deletions
diff --git a/app/Models/DatabaseDAO.php b/app/Models/DatabaseDAO.php index 8ec3ce3ca..a33d38e76 100644 --- a/app/Models/DatabaseDAO.php +++ b/app/Models/DatabaseDAO.php @@ -435,22 +435,30 @@ SQL; $nbEntries = $entryFrom->count(); $n = 0; + $brokenEntries = 0; $entryTo->beginTransaction(); - foreach ($entryFrom->selectAll() as $entry) { - $n++; - if (!empty($idMaps['f' . $entry['id_feed']])) { - $entry['id_feed'] = $idMaps['f' . $entry['id_feed']]; - if (!$entryTo->addEntry($entry, false)) { - $error = 'Error during SQLite copy of entries!'; - return self::stdError($error); + while ($n < $nbEntries) { + foreach ($entryFrom->selectAll(offset: $n) as $entry) { + $n++; + if (!empty($idMaps['f' . $entry['id_feed']])) { + $entry['id_feed'] = $idMaps['f' . $entry['id_feed']]; + if (!$entryTo->addEntry($entry, false)) { + $error = 'Error during SQLite copy of entries!'; + return self::stdError($error); + } + } + if ($n % 100 === 1 && defined('STDERR') && $verbose) { //Display progression + fwrite(STDERR, "\033[0G" . $n . '/' . $nbEntries . ($brokenEntries > 0 ? " ($brokenEntries broken)" : '')); } } - if ($n % 100 === 1 && defined('STDERR') && $verbose) { //Display progression - fwrite(STDERR, "\033[0G" . $n . '/' . $nbEntries); + if ($n < $nbEntries) { + $brokenEntries++; + // Attempt to skip broken records in the case of corrupted database + $n++; + } + if (defined('STDERR') && $verbose) { + fwrite(STDERR, "\033[0G" . $n . '/' . $nbEntries . ($brokenEntries > 0 ? " ($brokenEntries broken)" : '') . PHP_EOL); } - } - if (defined('STDERR') && $verbose) { - fwrite(STDERR, "\033[0G" . $n . '/' . $nbEntries . "\n"); } $entryTo->commit(); $feedTo->updateCachedValues(); |
