aboutsummaryrefslogtreecommitdiff
path: root/app/Models/DatabaseDAO.php
diff options
context:
space:
mode:
Diffstat (limited to 'app/Models/DatabaseDAO.php')
-rw-r--r--app/Models/DatabaseDAO.php32
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();