SqlQuery delQuery("DELETE FROM flags WHERE path != '' AND path NOT IN (SELECT path from metadata);", _db);
if (!delQuery.exec()) {
- qCWarning(lcDb) << QStringLiteral("deleteStaleFlagsEntries") << delQuery.error();
+ sqlFail(QStringLiteral("deleteStaleFlagsEntries"), delQuery);
}
}
SqlQuery query("DELETE FROM async_poll WHERE path=?", _db);
query.bindValue(1, info._file);
if (!query.exec()) {
- qCWarning(lcDb) << QStringLiteral("setPollInfo DELETE FROM async_poll") << query.error();
+ sqlFail(QStringLiteral("setPollInfo DELETE FROM async_poll"), query);
}
} else {
SqlQuery query("INSERT OR REPLACE INTO async_poll (path, modtime, filesize, pollpath) VALUES( ? , ? , ? , ? )", _db);
query.bindValue(3, info._fileSize);
query.bindValue(4, info._url);
if (!query.exec()) {
- qCWarning(lcDb) << QStringLiteral("setPollInfo INSERT OR REPLACE INTO async_poll") << query.error();
+ sqlFail(QStringLiteral("setPollInfo INSERT OR REPLACE INTO async_poll"), query);
}
}
}
query.bindValue(1, path);
if (!query.exec()) {
- qCWarning(lcDb) << QStringLiteral("avoidRenamesOnNextSync path: %1").arg(QString::fromUtf8(path)) << query.error();
+ sqlFail(QStringLiteral("avoidRenamesOnNextSync path: %1").arg(QString::fromUtf8(path)), query);
}
// We also need to remove the ETags so the update phase refreshes the directory paths
query.bindValue(1, argument);
if (!query.exec()) {
- qCWarning(lcDb) << QStringLiteral("schedulePathForRemoteDiscovery path: %11").arg(QString::fromUtf8(fileName)) << query.error();
+ sqlFail(QStringLiteral("schedulePathForRemoteDiscovery path: %1").arg(QString::fromUtf8(fileName)), query);
}
// Prevent future overwrite of the etags of this folder and all
deleteRemoteFolderEtagsQuery.prepare("UPDATE metadata SET md5='_invalid_' WHERE type=2;");
if (!deleteRemoteFolderEtagsQuery.exec()) {
- qCWarning(lcDb) << QStringLiteral("forceRemoteDiscoveryNextSyncLocked") << deleteRemoteFolderEtagsQuery.error();
+ sqlFail(QStringLiteral("forceRemoteDiscoveryNextSyncLocked"), deleteRemoteFolderEtagsQuery);
}
}
query.prepare("DELETE FROM metadata;");
if (!query.exec()) {
- qCWarning(lcDb) << QStringLiteral("clearFileTable") << query.error();
+ sqlFail(QStringLiteral("clearFileTable"), query);
}
}
query.bindValue(1, path);
if (!query.exec()) {
- qCWarning(lcDb) << QStringLiteral("markVirtualFileForDownloadRecursively UPDATE metadata SET type=5 path: %1").arg(QString::fromUtf8(path)) << query.error();
+ sqlFail(QStringLiteral("markVirtualFileForDownloadRecursively UPDATE metadata SET type=5 path: %1").arg(QString::fromUtf8(path)), query);
}
// We also must make sure we do not read the files from the database (same logic as in schedulePathForRemoteDiscovery)
query.bindValue(1, path);
if (!query.exec()) {
- qCWarning(lcDb) << QStringLiteral("markVirtualFileForDownloadRecursively UPDATE metadata SET md5='_invalid_' path: %1").arg(QString::fromUtf8(path)) << query.error();
+ sqlFail(QStringLiteral("markVirtualFileForDownloadRecursively UPDATE metadata SET md5='_invalid_' path: %1").arg(QString::fromUtf8(path)), query);
}
}
if (!query.exec()) {
qCWarning(lcDb) << "SQL Error" << "PinStateInterface::rawList" << query.error();
+ _db->close();
+ ASSERT(false);
}
QVector<QPair<QByteArray, PinState>> result;
;
if (!_journal.getFileRecord(relativepath.toUtf8(), &record)) {
qCWarning(lcFolder) << "could not get file from local DB" << relativepath;
+ return;
}
if (!record.isValid()) {
qCInfo(lcFolder) << "Did not find file in db";
const auto result = _journal.setFileRecord(record);
if (!result) {
qCWarning(lcFolder) << "Error when setting the file record to the database" << record._path << result.error();
+ return;
}
// Change the file's pin state if it's contradictory to being hydrated
// Not locally, not on the server. The entry is stale!
qCInfo(lcDisco) << "Stale DB entry";
if (!_discoveryData->_statedb->deleteFileRecord(path._original, true)) {
+ _discoveryData->fatalError(tr("Error while deleting file record %1 from the database").arg(path._original));
qCWarning(lcDisco) << "Failed to delete a file record from the local DB" << path._original;
}
return;
if (_item->_instruction == CSYNC_INSTRUCTION_RENAME && _item->_originalFile != _item->_renameTarget) {
if (!propagator()->_journal->deleteFileRecord(_item->_originalFile, true)) {
qCWarning(lcDirectory) << "could not delete file from local DB" << _item->_originalFile;
+ _state = Finished;
+ status = _item->_status = SyncFileItem::FatalError;
+ _item->_errorString = tr("could not delete file %1 from local DB").arg(_item->_originalFile);
+ qCInfo(lcPropagator) << "PropagateDirectory::slotSubJobsFinished"
+ << "emit finished" << status;
+ emit finished(status);
+ return;
}
}
SyncJournalFileRecord parentRec;
if (!propagator()->_journal->getFileRecord(parentPath, &parentRec)) {
qCWarning(lcPropagateDownload) << "could not get file from local DB" << parentPath;
+ done(SyncFileItem::NormalError, tr("could not get file %1 from local DB").arg(parentPath));
+ return;
}
const auto account = propagator()->account();
if (!propagator()->_journal->deleteFileRecord(_item->_originalFile)) {
qCWarning(lcPropagateDownload) << "could not delete file from local DB" << _item->_originalFile;
+ done(SyncFileItem::NormalError, tr("Could not delete file record %1 from local DB").arg(_item->_originalFile));
+ return;
}
updateMetadata(false);
if (!propagator()->_journal->deleteFileRecord(virtualFile)) {
qCWarning(lcPropagateDownload) << "could not delete file from local DB" << virtualFile;
+ done(SyncFileItem::NormalError, tr("Could not delete file record %1 from local DB").arg(virtualFile));
+ return;
}
// Move the pin state to the new location
if (!propagator()->_journal->deleteFileRecord(_item->_originalFile, _item->isDirectory())) {
qCWarning(lcPropagateRemoteDelete) << "could not delete file from local DB" << _item->_originalFile;
+ done(SyncFileItem::NormalError, tr("Could not delete file record %1 from local DB").arg(_item->_originalFile));
+ return;
}
propagator()->_journal->commit("Remote Remove");
SyncJournalFileRecord oldRecord;
if (!propagator()->_journal->getFileRecord(_item->_originalFile, &oldRecord)) {
qCWarning(lcPropagateRemoteMove) << "could not get file from local DB" << _item->_originalFile;
+ done(SyncFileItem::NormalError, tr("could not get file %1 from local DB").arg(_item->_originalFile));
+ return;
}
auto &vfs = propagator()->syncOptions()._vfs;
auto pinState = vfs->pinState(_item->_originalFile);
// Delete old db data.
if (!propagator()->_journal->deleteFileRecord(_item->_originalFile)) {
qCWarning(lcPropagateRemoteMove) << "could not delete file from local DB" << _item->_originalFile;
+ done(SyncFileItem::NormalError, tr("Could not delete file record %1 from local DB").arg(_item->_originalFile));
+ return;
}
if (!vfs->setPinState(_item->_originalFile, PinState::Inherited)) {
qCWarning(lcPropagateRemoteMove) << "Could not set pin state of" << _item->_originalFile << "to inherited";
propagator()->reportProgress(*_item, 0);
if (!propagator()->_journal->deleteFileRecord(_item->_originalFile, _item->isDirectory())) {
qCWarning(lcPropagateLocalRename) << "could not delete file from local DB" << _item->_originalFile;
+ done(SyncFileItem::NormalError, tr("Could not delete file record %1 from local DB").arg(_item->_originalFile));
+ return;
}
propagator()->_journal->commit("Local remove");
done(SyncFileItem::Success);
SyncJournalFileRecord oldRecord;
if (!propagator()->_journal->getFileRecord(_item->_originalFile, &oldRecord)) {
qCWarning(lcPropagateLocalRename) << "could not get file from local DB" << _item->_originalFile;
+ done(SyncFileItem::NormalError, tr("could not get file %1 from local DB").arg(_item->_originalFile));
+ return;
}
if (!propagator()->_journal->deleteFileRecord(_item->_originalFile)) {
qCWarning(lcPropagateLocalRename) << "could not delete file from local DB" << _item->_originalFile;
+ done(SyncFileItem::NormalError, tr("Could not delete file record %1 from local DB").arg(_item->_originalFile));
+ return;
}
auto &vfs = propagator()->syncOptions()._vfs;
// Updating the db happens on success
if (!_journal->setFileRecord(rec)) {
+ item->_status = SyncFileItem::Status::NormalError;
+ item->_instruction = CSYNC_INSTRUCTION_ERROR;
+ item->_errorString = tr("Could not set file record to local DB: %1").arg(rec.path());
qCWarning(lcEngine) << "Could not set file record to local DB" << rec.path();
}
SyncJournalFileRecord record;
if (!_journal->getFileRecord(_folderPath, &record)) {
qCWarning(lcHydration) << "could not get file from local DB" << _folderPath;
+ return;
}
Q_ASSERT(record.isValid());
if (!record.isValid()) {