Give a proper name to a parent path update metho in SyncJournal.
Signed-off-by: alex-z <blackslayer4@gmail.com>pull/6211/head
parent
4ce73b1705
commit
122ae9c961
|
@ -107,12 +107,8 @@ public:
|
|||
GetE2EeLockedFolderQuery,
|
||||
GetE2EeLockedFoldersQuery,
|
||||
DeleteE2EeLockedFolderQuery,
|
||||
<<<<<<< HEAD
|
||||
ListAllTopLevelE2eeFoldersStatusLessThanQuery,
|
||||
=======
|
||||
MoveFilesInPathQuery,
|
||||
>>>>>>> 6e3bb76cc (On folder move execute only one UPDATE query for all nested items.)
|
||||
|
||||
RelocateFolderToNewPathRecursivelyQuery,
|
||||
PreparedQueryCount
|
||||
};
|
||||
PreparedSqlQueryManager() = default;
|
||||
|
|
|
@ -1042,7 +1042,6 @@ Result<void, QString> SyncJournalDb::setFileRecord(const SyncJournalFileRecord &
|
|||
return {};
|
||||
}
|
||||
|
||||
<<<<<<< HEAD
|
||||
bool SyncJournalDb::getRootE2eFolderRecord(const QString &remoteFolderPath, SyncJournalFileRecord *rec)
|
||||
{
|
||||
Q_ASSERT(rec);
|
||||
|
@ -1088,28 +1087,13 @@ bool SyncJournalDb::listAllE2eeFoldersWithEncryptionStatusLessThan(const int sta
|
|||
|
||||
if (!checkConnect())
|
||||
return false;
|
||||
const auto query = _queryManager.get(PreparedSqlQueryManager::ListAllTopLevelE2eeFoldersStatusLessThanQuery,
|
||||
QByteArrayLiteral(GET_FILE_RECORD_QUERY " WHERE type == 2 AND isE2eEncrypted >= ?1 AND isE2eEncrypted < ?2 ORDER BY path||'/' ASC"),
|
||||
=======
|
||||
bool SyncJournalDb::updateParentForAllChildren(const QByteArray &oldParentPath, const QByteArray &newParentPath)
|
||||
{
|
||||
qCInfo(lcDb) << "Moving files from path" << oldParentPath << "to path" << newParentPath;
|
||||
|
||||
if (!checkConnect()) {
|
||||
qCWarning(lcDb) << "Failed to connect database.";
|
||||
return false;
|
||||
}
|
||||
|
||||
const auto query = _queryManager.get(PreparedSqlQueryManager::MoveFilesInPathQuery,
|
||||
QByteArrayLiteral("UPDATE metadata"
|
||||
" SET path = REPLACE(path, ?1, ?2), phash = path_hash(REPLACE(path, ?1, ?2)), pathlen = path_length(REPLACE(path, ?1, ?2))"
|
||||
" WHERE " IS_PREFIX_PATH_OF("?1", "path")),
|
||||
>>>>>>> 6e3bb76cc (On folder move execute only one UPDATE query for all nested items.)
|
||||
_db);
|
||||
const auto query =
|
||||
_queryManager.get(PreparedSqlQueryManager::ListAllTopLevelE2eeFoldersStatusLessThanQuery,
|
||||
QByteArrayLiteral(GET_FILE_RECORD_QUERY " WHERE type == 2 AND isE2eEncrypted >= ?1 AND isE2eEncrypted < ?2 ORDER BY path||'/' ASC"),
|
||||
_db);
|
||||
if (!query) {
|
||||
return false;
|
||||
}
|
||||
<<<<<<< HEAD
|
||||
query->bindValue(1, SyncJournalFileRecord::EncryptionStatus::Encrypted);
|
||||
query->bindValue(2, status);
|
||||
|
||||
|
@ -1159,21 +1143,29 @@ bool SyncJournalDb::findEncryptedAncestorForRecord(const QString &filename, Sync
|
|||
pathComponents.removeLast();
|
||||
}
|
||||
return true;
|
||||
=======
|
||||
}
|
||||
|
||||
bool SyncJournalDb::relocateFolderToNewPathRecursively(const QByteArray &oldParentPath, const QByteArray &newParentPath)
|
||||
{
|
||||
qCInfo(lcDb) << "Relocating folder recursively from path" << oldParentPath << "to path" << newParentPath;
|
||||
|
||||
if (!checkConnect()) {
|
||||
qCWarning(lcDb) << "Failed to connect database.";
|
||||
return false;
|
||||
}
|
||||
|
||||
const auto query = _queryManager.get(
|
||||
PreparedSqlQueryManager::RelocateFolderToNewPathRecursivelyQuery,
|
||||
QByteArrayLiteral("UPDATE metadata"
|
||||
" SET path = REPLACE(path, ?1, ?2), phash = path_hash(REPLACE(path, ?1, ?2)), pathlen = path_length(REPLACE(path, ?1, ?2))"
|
||||
" WHERE " IS_PREFIX_PATH_OF("?1", "path")),
|
||||
_db);
|
||||
if (!query) {
|
||||
return false;
|
||||
}
|
||||
query->bindValue(1, oldParentPath);
|
||||
query->bindValue(2, newParentPath);
|
||||
<<<<<<< HEAD
|
||||
<<<<<<< HEAD
|
||||
return query->exec();
|
||||
>>>>>>> 6e3bb76cc (On folder move execute only one UPDATE query for all nested items.)
|
||||
=======
|
||||
auto res = query->exec();
|
||||
auto numRows = query->numRowsAffected();
|
||||
return res;
|
||||
>>>>>>> eb7234f4d (Iteration.)
|
||||
=======
|
||||
return query->exec();
|
||||
>>>>>>> 3f2c9535f (Fix compile issues.)
|
||||
}
|
||||
|
||||
void SyncJournalDb::keyValueStoreSet(const QString &key, QVariant value)
|
||||
|
|
|
@ -70,14 +70,13 @@ public:
|
|||
[[nodiscard]] bool getFilesBelowPath(const QByteArray &path, const std::function<void(const SyncJournalFileRecord&)> &rowCallback);
|
||||
[[nodiscard]] bool listFilesInPath(const QByteArray &path, const std::function<void(const SyncJournalFileRecord&)> &rowCallback);
|
||||
[[nodiscard]] Result<void, QString> setFileRecord(const SyncJournalFileRecord &record);
|
||||
<<<<<<< HEAD
|
||||
|
||||
[[nodiscard]] bool getRootE2eFolderRecord(const QString &remoteFolderPath, SyncJournalFileRecord *rec);
|
||||
[[nodiscard]] bool listAllE2eeFoldersWithEncryptionStatusLessThan(const int status, const std::function<void(const SyncJournalFileRecord &)> &rowCallback);
|
||||
[[nodiscard]] bool findEncryptedAncestorForRecord(const QString &filename, SyncJournalFileRecord *rec);
|
||||
=======
|
||||
[[nodiscard]] bool updateParentForAllChildren(const QByteArray &oldParentPath, const QByteArray &newParentPath);
|
||||
>>>>>>> 6e3bb76cc (On folder move execute only one UPDATE query for all nested items.)
|
||||
|
||||
// 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);
|
||||
void keyValueStoreDelete(const QString &key);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue