diff --git a/src/common/syncjournaldb.cpp b/src/common/syncjournaldb.cpp index 59e3e3f197584..97546092254c4 100644 --- a/src/common/syncjournaldb.cpp +++ b/src/common/syncjournaldb.cpp @@ -1042,7 +1042,7 @@ Result SyncJournalDb::setFileRecord(const SyncJournalFileRecord & return {}; } -bool SyncJournalDb::updateParentForAllChildren(const QByteArray &oldParentPath, const QByteArray &newParentPath) +bool SyncJournalDb::relocateFolderToNewPathRecursively(const QByteArray &oldParentPath, const QByteArray &newParentPath) { qCInfo(lcDb) << "Moving files from path" << oldParentPath << "to path" << newParentPath; diff --git a/src/common/syncjournaldb.h b/src/common/syncjournaldb.h index 10f25b1474a23..8f6ff5ae93779 100644 --- a/src/common/syncjournaldb.h +++ b/src/common/syncjournaldb.h @@ -70,7 +70,9 @@ class OCSYNC_EXPORT SyncJournalDb : public QObject [[nodiscard]] bool getFilesBelowPath(const QByteArray &path, const std::function &rowCallback); [[nodiscard]] bool listFilesInPath(const QByteArray &path, const std::function &rowCallback); [[nodiscard]] Result setFileRecord(const SyncJournalFileRecord &record); - [[nodiscard]] bool updateParentForAllChildren(const QByteArray &oldParentPath, const QByteArray &newParentPath); + // use this after moving a folder and all its contents under new parent (e.g. "folderA" move to "parentFolder", such that "folderA" -> "parentFolder/folderA" + // all nested items will have their paths updated accordingly wiht a single UPDATE query + [[nodiscard]] bool relocateFolderToNewPathRecursively(const QByteArray &oldParentPath, const QByteArray &newParentPath); void keyValueStoreSet(const QString &key, QVariant value); [[nodiscard]] qint64 keyValueStoreGetInt(const QString &key, qint64 defaultValue); diff --git a/src/libsync/propagateremotemove.cpp b/src/libsync/propagateremotemove.cpp index b44da2e541c09..8e5b2b573101e 100644 --- a/src/libsync/propagateremotemove.cpp +++ b/src/libsync/propagateremotemove.cpp @@ -309,7 +309,7 @@ void PropagateRemoteMove::finalize() } if (_item->isDirectory()) { - if (!propagator()->_journal->updateParentForAllChildren(origin.toUtf8(), _item->_renameTarget.toUtf8())) { + if (!propagator()->_journal->relocateFolderToNewPathRecursively(origin.toUtf8(), _item->_renameTarget.toUtf8())) { done(SyncFileItem::FatalError, tr("Failed to move folder: %1").arg(_item->_file), ErrorCategory::GenericError); return; } diff --git a/test/testsyncjournaldb.cpp b/test/testsyncjournaldb.cpp index 2ab8ce20c8b8a..63054dc819cd7 100644 --- a/test/testsyncjournaldb.cpp +++ b/test/testsyncjournaldb.cpp @@ -495,9 +495,8 @@ private slots: QVERIFY(makeEntry(folder2ContentsMoved.first().first, folder2ContentsMoved.first().second, initialEtag)); // move a folder under new location, all children paths must get updated with one query - QVERIFY(_db.updateParentForAllChildren(folder1Contents.first().first, folder1ContentsMoved.first().first)); - QVERIFY(_db.updateParentForAllChildren(folder2Contents.first().first, folder2ContentsMoved.first().first)); - + QVERIFY(_db.relocateFolderToNewPathRecursively(folder1Contents.first().first, folder1ContentsMoved.first().first)); + QVERIFY(_db.relocateFolderToNewPathRecursively(folder2Contents.first().first, folder2ContentsMoved.first().first)); // verify all moved records exist under new paths for (const auto &folderItemMoved : folder1ContentsMoved) { SyncJournalFileRecord movedRecord;