Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
This commit is contained in:
Matthieu Gallien 2024-09-19 17:56:34 +02:00 коммит произвёл Matthieu Gallien
Родитель 66a1ddabdd
Коммит 948a3716c6
2 изменённых файлов: 15 добавлений и 10 удалений

Просмотреть файл

@ -49,7 +49,7 @@ Q_LOGGING_CATEGORY(lcDb, "nextcloud.sync.database", QtInfoMsg)
#define GET_FILE_RECORD_QUERY \ #define GET_FILE_RECORD_QUERY \
"SELECT path, inode, modtime, type, md5, fileid, remotePerm, filesize," \ "SELECT path, inode, modtime, type, md5, fileid, remotePerm, filesize," \
" ignoredChildrenRemote, contentchecksumtype.name || ':' || contentChecksum, e2eMangledName, isE2eEncrypted, " \ " ignoredChildrenRemote, contentchecksumtype.name || ':' || contentChecksum, e2eMangledName, isE2eEncrypted, " \
" lock, lockOwnerDisplayName, lockOwnerId, lockType, lockOwnerEditor, lockTime, lockTimeout, isShared, lastShareStateFetchedTimestmap, sharedByMe" \ " lock, lockOwnerDisplayName, lockOwnerId, lockType, lockOwnerEditor, lockTime, lockTimeout, lockToken, isShared, lastShareStateFetchedTimestmap, sharedByMe" \
" FROM metadata" \ " FROM metadata" \
" LEFT JOIN checksumtype as contentchecksumtype ON metadata.contentChecksumTypeId == contentchecksumtype.id" " LEFT JOIN checksumtype as contentchecksumtype ON metadata.contentChecksumTypeId == contentchecksumtype.id"
@ -74,9 +74,10 @@ static void fillFileRecordFromGetQuery(SyncJournalFileRecord &rec, SqlQuery &que
rec._lockstate._lockEditorApp = query.stringValue(16); rec._lockstate._lockEditorApp = query.stringValue(16);
rec._lockstate._lockTime = query.int64Value(17); rec._lockstate._lockTime = query.int64Value(17);
rec._lockstate._lockTimeout = query.int64Value(18); rec._lockstate._lockTimeout = query.int64Value(18);
rec._isShared = query.intValue(19) > 0; rec._lockstate._lockToken = query.stringValue(19);
rec._lastShareStateFetchedTimestamp = query.int64Value(20); rec._isShared = query.intValue(20) > 0;
rec._sharedByMe = query.intValue(21) > 0; rec._lastShareStateFetchedTimestamp = query.int64Value(21);
rec._sharedByMe = query.intValue(22) > 0;
} }
static QByteArray defaultJournalMode(const QString &dbPath) static QByteArray defaultJournalMode(const QString &dbPath)
@ -826,6 +827,7 @@ bool SyncJournalDb::updateMetadataTableStructure()
addColumn(QStringLiteral("lockOwnerEditor"), QStringLiteral("TEXT")); addColumn(QStringLiteral("lockOwnerEditor"), QStringLiteral("TEXT"));
addColumn(QStringLiteral("lockTime"), QStringLiteral("INTEGER")); addColumn(QStringLiteral("lockTime"), QStringLiteral("INTEGER"));
addColumn(QStringLiteral("lockTimeout"), QStringLiteral("INTEGER")); addColumn(QStringLiteral("lockTimeout"), QStringLiteral("INTEGER"));
addColumn(QStringLiteral("lockToken"), QStringLiteral("TEXT"));
SqlQuery query(_db); SqlQuery query(_db);
query.prepare("CREATE INDEX IF NOT EXISTS caseconflicts_basePath ON caseconflicts(basePath);"); query.prepare("CREATE INDEX IF NOT EXISTS caseconflicts_basePath ON caseconflicts(basePath);");
@ -987,8 +989,8 @@ Result<void, QString> SyncJournalDb::setFileRecord(const SyncJournalFileRecord &
const auto query = _queryManager.get(PreparedSqlQueryManager::SetFileRecordQuery, QByteArrayLiteral("INSERT OR REPLACE INTO metadata " const auto query = _queryManager.get(PreparedSqlQueryManager::SetFileRecordQuery, QByteArrayLiteral("INSERT OR REPLACE INTO metadata "
"(phash, pathlen, path, inode, uid, gid, mode, modtime, type, md5, fileid, remotePerm, filesize, ignoredChildrenRemote, " "(phash, pathlen, path, inode, uid, gid, mode, modtime, type, md5, fileid, remotePerm, filesize, ignoredChildrenRemote, "
"contentChecksum, contentChecksumTypeId, e2eMangledName, isE2eEncrypted, lock, lockType, lockOwnerDisplayName, lockOwnerId, " "contentChecksum, contentChecksumTypeId, e2eMangledName, isE2eEncrypted, lock, lockType, lockOwnerDisplayName, lockOwnerId, "
"lockOwnerEditor, lockTime, lockTimeout, isShared, lastShareStateFetchedTimestmap, sharedByMe) " "lockOwnerEditor, lockTime, lockTimeout, lockToken, isShared, lastShareStateFetchedTimestmap, sharedByMe) "
"VALUES (?1 , ?2, ?3 , ?4 , ?5 , ?6 , ?7, ?8 , ?9 , ?10, ?11, ?12, ?13, ?14, ?15, ?16, ?17, ?18, ?19, ?20, ?21, ?22, ?23, ?24, ?25, ?26, ?27, ?28);"), "VALUES (?1 , ?2, ?3 , ?4 , ?5 , ?6 , ?7, ?8 , ?9 , ?10, ?11, ?12, ?13, ?14, ?15, ?16, ?17, ?18, ?19, ?20, ?21, ?22, ?23, ?24, ?25, ?26, ?27, ?28, ?29);"),
_db); _db);
if (!query) { if (!query) {
qCDebug(lcDb) << "database error:" << query->error(); qCDebug(lcDb) << "database error:" << query->error();
@ -1020,9 +1022,10 @@ Result<void, QString> SyncJournalDb::setFileRecord(const SyncJournalFileRecord &
query->bindValue(23, record._lockstate._lockEditorApp); query->bindValue(23, record._lockstate._lockEditorApp);
query->bindValue(24, record._lockstate._lockTime); query->bindValue(24, record._lockstate._lockTime);
query->bindValue(25, record._lockstate._lockTimeout); query->bindValue(25, record._lockstate._lockTimeout);
query->bindValue(26, record._isShared); query->bindValue(26, record._lockstate._lockToken);
query->bindValue(27, record._lastShareStateFetchedTimestamp); query->bindValue(27, record._isShared);
query->bindValue(28, record._sharedByMe); query->bindValue(28, record._lastShareStateFetchedTimestamp);
query->bindValue(29, record._sharedByMe);
if (!query->exec()) { if (!query->exec()) {
qCDebug(lcDb) << "database error:" << query->error(); qCDebug(lcDb) << "database error:" << query->error();
@ -1616,7 +1619,7 @@ bool SyncJournalDb::updateLocalMetadata(const QString &filename,
const auto query = _queryManager.get(PreparedSqlQueryManager::SetFileRecordLocalMetadataQuery, QByteArrayLiteral("UPDATE metadata" const auto query = _queryManager.get(PreparedSqlQueryManager::SetFileRecordLocalMetadataQuery, QByteArrayLiteral("UPDATE metadata"
" SET inode=?2, modtime=?3, filesize=?4, lock=?5, lockType=?6," " SET inode=?2, modtime=?3, filesize=?4, lock=?5, lockType=?6,"
" lockOwnerDisplayName=?7, lockOwnerId=?8, lockOwnerEditor = ?9," " lockOwnerDisplayName=?7, lockOwnerId=?8, lockOwnerEditor = ?9,"
" lockTime=?10, lockTimeout=?11" " lockTime=?10, lockTimeout=?11, lockToken=?12"
" WHERE phash == ?1;"), " WHERE phash == ?1;"),
_db); _db);
if (!query) { if (!query) {
@ -1635,6 +1638,7 @@ bool SyncJournalDb::updateLocalMetadata(const QString &filename,
query->bindValue(9, lockInfo._lockEditorApp); query->bindValue(9, lockInfo._lockEditorApp);
query->bindValue(10, lockInfo._lockTime); query->bindValue(10, lockInfo._lockTime);
query->bindValue(11, lockInfo._lockTimeout); query->bindValue(11, lockInfo._lockTimeout);
query->bindValue(12, lockInfo._lockToken);
if (!query->exec()) { if (!query->exec()) {
qCDebug(lcDb) << "database error:" << query->error(); qCDebug(lcDb) << "database error:" << query->error();
return false; return false;

Просмотреть файл

@ -39,6 +39,7 @@ struct SyncJournalFileLockInfo {
QString _lockEditorApp; QString _lockEditorApp;
qint64 _lockTime = 0; qint64 _lockTime = 0;
qint64 _lockTimeout = 0; qint64 _lockTimeout = 0;
QString _lockToken;
}; };
/** /**