SyncJournal: Add checksumHeader column to metadata table #3735
authorChristian Kamm <mail@ckamm.de>
Wed, 14 Oct 2015 13:03:19 +0000 (15:03 +0200)
committerChristian Kamm <mail@ckamm.de>
Wed, 28 Oct 2015 08:56:39 +0000 (09:56 +0100)
src/libsync/syncjournaldb.cpp
src/libsync/syncjournalfilerecord.cpp
src/libsync/syncjournalfilerecord.h

index aaa53a1b561b11c93bd11c8e2afeb92892c87cbc..0b099ee609cd262d450ad1b2c35bebe520a0e63b 100644 (file)
@@ -206,6 +206,7 @@ bool SyncJournalDb::checkConnect()
                          "md5 VARCHAR(32)," /* This is the etag.  Called md5 for compatibility */
                         // updateDatabaseStructure() will add a fileid column
                         // updateDatabaseStructure() will add a remotePerm column
+                        // updateDatabaseStructure() will add a checksumHeader column
                          "PRIMARY KEY(phash)"
                          ");");
 
@@ -346,13 +347,13 @@ bool SyncJournalDb::checkConnect()
     }
 
     _getFileRecordQuery.reset(new SqlQuery(_db));
-    _getFileRecordQuery->prepare("SELECT path, inode, uid, gid, mode, modtime, type, md5, fileid, remotePerm, filesize, ignoredChildrenRemote FROM "
+    _getFileRecordQuery->prepare("SELECT path, inode, uid, gid, mode, modtime, type, md5, fileid, remotePerm, filesize, ignoredChildrenRemote, checksumHeader FROM "
                                  "metadata WHERE phash=?1" );
 
     _setFileRecordQuery.reset(new SqlQuery(_db) );
     _setFileRecordQuery->prepare("INSERT OR REPLACE INTO metadata "
-                                 "(phash, pathlen, path, inode, uid, gid, mode, modtime, type, md5, fileid, remotePerm, filesize, ignoredChildrenRemote) "
-                                 "VALUES (?1 , ?2, ?3 , ?4 , ?5 , ?6 , ?7,  ?8 , ?9 , ?10, ?11, ?12, ?13, ?14);" );
+                                 "(phash, pathlen, path, inode, uid, gid, mode, modtime, type, md5, fileid, remotePerm, filesize, ignoredChildrenRemote, checksumHeader) "
+                                 "VALUES (?1 , ?2, ?3 , ?4 , ?5 , ?6 , ?7,  ?8 , ?9 , ?10, ?11, ?12, ?13, ?14, ?15);" );
 
     _getDownloadInfoQuery.reset(new SqlQuery(_db) );
     _getDownloadInfoQuery->prepare( "SELECT tmpfile, etag, errorcount FROM "
@@ -527,6 +528,17 @@ bool SyncJournalDb::updateMetadataTableStructure()
         }
         commitInternal("update database structure: add ignoredChildrenRemote col");
     }
+
+    if( columns.indexOf(QLatin1String("checksumHeader")) == -1 ) {
+        SqlQuery query(_db);
+        query.prepare("ALTER TABLE metadata ADD COLUMN checksumHeader TEXT;");
+        if( !query.exec()) {
+            sqlFail("updateMetadataTableStructure: add checksumHeader column", query);
+            re = false;
+        }
+        commitInternal("update database structure: add checksumHeader col");
+    }
+
     return re;
 }
 
@@ -642,6 +654,7 @@ bool SyncJournalDb::setFileRecord( const SyncJournalFileRecord& _record )
         _setFileRecordQuery->bindValue(12, remotePerm );
         _setFileRecordQuery->bindValue(13, record._fileSize );
         _setFileRecordQuery->bindValue(14, record._serverHasIgnoredFiles ? 1:0);
+        _setFileRecordQuery->bindValue(15, record._checksumHeader );
 
         if( !_setFileRecordQuery->exec() ) {
             qWarning() << "Error SQL statement setFileRecord: " << _setFileRecordQuery->lastQuery() <<  " :"
@@ -652,7 +665,8 @@ bool SyncJournalDb::setFileRecord( const SyncJournalFileRecord& _record )
         qDebug() <<  _setFileRecordQuery->lastQuery() << phash << plen << record._path << record._inode
                  << record._mode
                  << QString::number(Utility::qDateTimeToTime_t(record._modtime)) << QString::number(record._type)
-                 << record._etag << record._fileId << record._remotePerm << record._fileSize << (record._serverHasIgnoredFiles ? 1:0);
+                 << record._etag << record._fileId << record._remotePerm << record._fileSize << (record._serverHasIgnoredFiles ? 1:0)
+                 << record._checksumHeader;
 
         _setFileRecordQuery->reset();
         return true;
@@ -732,6 +746,7 @@ SyncJournalFileRecord SyncJournalDb::getFileRecord( const QString& filename )
             rec._remotePerm = _getFileRecordQuery->baValue(9);
             rec._fileSize   = _getFileRecordQuery->int64Value(10);
             rec._serverHasIgnoredFiles = (_getFileRecordQuery->intValue(11) > 0);
+            rec._checksumHeader = _getFileRecordQuery->baValue(12);
         } else {
             QString err = _getFileRecordQuery->error();
             qDebug() << "No journal entry found for " << filename;
index c3c5613780da68b1afc79cf13c1229d0df5b619f..22ee38b1cab4e1580c1244a4736a2704c32af42f 100644 (file)
@@ -35,7 +35,8 @@ SyncJournalFileRecord::SyncJournalFileRecord()
 SyncJournalFileRecord::SyncJournalFileRecord(const SyncFileItem &item, const QString &localFileName)
     : _path(item._file), _modtime(Utility::qDateTimeFromTime_t(item._modtime)),
       _type(item._type), _etag(item._etag), _fileId(item._fileId), _fileSize(item._size),
-      _remotePerm(item._remotePerm), _mode(0), _serverHasIgnoredFiles(item._serverHasIgnoredFiles)
+      _remotePerm(item._remotePerm), _mode(0), _serverHasIgnoredFiles(item._serverHasIgnoredFiles),
+      _checksumHeader(item._checksumHeader)
 {
     // use the "old" inode coming with the item for the case where the
     // filesystem stat fails. That can happen if the the file was removed
index f3546c536710446725c3f4a9ca8b8564857bbe73..d3a2a7013c0daba000b7d72388dc326485c8a3df 100644 (file)
@@ -47,6 +47,7 @@ public:
     QByteArray _remotePerm;
     int        _mode;
     bool       _serverHasIgnoredFiles;
+    QByteArray _checksumHeader;
 };
 
 bool OWNCLOUDSYNC_EXPORT