[Pkg-owncloud-commits] [owncloud-client] 76/211: Make the sync work with new sql implementation.
Sandro Knauß
hefee-guest at moszumanska.debian.org
Sat Oct 25 09:10:28 UTC 2014
This is an automated email from the git hooks/post-receive script.
hefee-guest pushed a commit to branch master
in repository owncloud-client.
commit 0094c1ecf5727acef09e8a58c3b7a431b01ea9a1
Author: Klaas Freitag <freitag at owncloud.com>
Date: Tue Oct 14 20:51:51 2014 +0200
Make the sync work with new sql implementation.
---
src/mirall/ownsql.cpp | 75 ++++++++++++++++++++++-----
src/mirall/ownsql.h | 10 +++-
src/mirall/syncjournaldb.cpp | 119 +++++++++++++++++++++----------------------
test/CMakeLists.txt | 2 +
4 files changed, 131 insertions(+), 75 deletions(-)
diff --git a/src/mirall/ownsql.cpp b/src/mirall/ownsql.cpp
index 6d61465..087bcda 100644
--- a/src/mirall/ownsql.cpp
+++ b/src/mirall/ownsql.cpp
@@ -14,6 +14,7 @@
#include <QDateTime>
#include <QString>
+#include <QDebug>
#include "ownsql.h"
@@ -21,6 +22,8 @@
_errId = (A); if(_errId != SQLITE_OK) { _error= QString::fromUtf8(sqlite3_errmsg(_db)); \
} }
+namespace Mirall {
+
SqlDatabase::SqlDatabase()
:_db(NULL)
{
@@ -59,6 +62,7 @@ void SqlDatabase::close()
{
if( _db ) {
SQLITE_DO(sqlite3_close_v2(_db) );
+ _db = NULL;
}
}
@@ -77,10 +81,19 @@ sqlite3* SqlDatabase::sqliteDb()
return _db;
}
+#if 0
+QStringList tableColumns(const QString& table)
+{
+ QStringList re;
+ if( !_db ) return re;
+
+}
+#endif
/* =========================================================================================== */
SqlQuery::SqlQuery( SqlDatabase db )
- :_db(db.sqliteDb())
+ :_db(db.sqliteDb()),
+ _stmt(0)
{
}
@@ -93,21 +106,54 @@ SqlQuery::~SqlQuery()
}
SqlQuery::SqlQuery(const QString& sql, SqlDatabase db)
- :_db(db.sqliteDb())
+ :_db(db.sqliteDb()),
+ _stmt(0)
{
prepare(sql);
}
-void SqlQuery::prepare( const QString& sql)
+int SqlQuery::prepare( const QString& sql)
{
- SQLITE_DO(sqlite3_prepare_v2(_db, sql.toUtf8().constData(), -1, &_stmt, NULL));
+ QString s(sql);
+ _sql = s.trimmed();
+ if(_stmt ) {
+ finish();
+ }
+ if(!_sql.isEmpty() ) {
+ SQLITE_DO(sqlite3_prepare_v2(_db, _sql.toUtf8().constData(), -1, &_stmt, NULL));
+ if( _errId != SQLITE_OK ) {
+ qDebug() << "XXXXXXXXXXXXXXXXXXXX " << _error << "in"<<_sql;
+ }
+ // Q_ASSERT(_errId == SQLITE_OK);
+ }
+ return _errId;
+}
+
+bool SqlQuery::isSelect()
+{
+ return (!_sql.isEmpty() && _sql.startsWith("SELECT", Qt::CaseInsensitive));
+}
+
+bool SqlQuery::isPragma()
+{
+ return (!_sql.isEmpty() && _sql.startsWith("PRAGMA", Qt::CaseInsensitive));
}
bool SqlQuery::exec()
{
- SQLITE_DO(sqlite3_step(_stmt));
+ // Don't do anything for selects, that is how we use the lib :-|
+ if(_stmt && !isSelect() && !isPragma() ) {
+ SQLITE_DO(sqlite3_step(_stmt));
+ return _errId == SQLITE_DONE; // either SQLITE_ROW or SQLITE_DONE
+ }
- return (_errId == SQLITE_ROW || _errId == SQLITE_DONE);
+ return true;
+}
+
+bool SqlQuery::next()
+{
+ SQLITE_DO(sqlite3_step(_stmt));
+ return _errId == SQLITE_ROW;
}
void SqlQuery::bindValue(int pos, const QVariant& value)
@@ -177,20 +223,14 @@ QByteArray SqlQuery::baValue(int index)
sqlite3_column_bytes(_stmt, index));
}
-bool SqlQuery::next()
-{
- SQLITE_DO(sqlite3_step(_stmt));
- return _errId == SQLITE_ROW;
-}
-
QString SqlQuery::error() const
{
- return QString("ERROR - not yet implemented");
+ return _error;
}
QString SqlQuery::lastQuery() const
{
- return QString("Last Query");
+ return _sql;
}
int SqlQuery::numRowsAffected()
@@ -203,3 +243,10 @@ void SqlQuery::finish()
SQLITE_DO(sqlite3_finalize(_stmt));
_stmt = NULL;
}
+
+void SqlQuery::reset()
+{
+ SQLITE_DO(sqlite3_reset(_stmt));
+}
+
+} // namespace Mirall
diff --git a/src/mirall/ownsql.h b/src/mirall/ownsql.h
index 28f822c..b1091f5 100644
--- a/src/mirall/ownsql.h
+++ b/src/mirall/ownsql.h
@@ -19,6 +19,8 @@
#include <QObject>
#include <QVariant>
+namespace Mirall {
+
class SqlDatabase
{
public:
@@ -54,12 +56,15 @@ public:
quint64 int64Value(int index);
QByteArray baValue(int index);
+ bool isSelect();
+ bool isPragma();
bool exec();
- void prepare( const QString& sql );
+ int prepare( const QString& sql );
bool next();
void bindValue(int pos, const QVariant& value);
QString lastQuery() const;
int numRowsAffected();
+ void reset();
void finish();
private:
@@ -67,6 +72,9 @@ private:
sqlite3_stmt *_stmt;
QString _error;
int _errId;
+ QString _sql;
};
+} // namespace Mirall
+
#endif // OWNSQL_H
diff --git a/src/mirall/syncjournaldb.cpp b/src/mirall/syncjournaldb.cpp
index b643c75..ad667e9 100644
--- a/src/mirall/syncjournaldb.cpp
+++ b/src/mirall/syncjournaldb.cpp
@@ -210,10 +210,10 @@ bool SyncJournalDb::checkConnect()
return sqlFail("Remove version", createQuery);
}
}
- createQuery.prepare("INSERT INTO version (major, minor, patch) VALUES ( ?1 , ?2 , ?3 );");
- createQuery.bindValue(0, MIRALL_VERSION_MAJOR);
- createQuery.bindValue(1, MIRALL_VERSION_MINOR);
- createQuery.bindValue(2, MIRALL_VERSION_PATCH);
+ createQuery.prepare("INSERT INTO version (major, minor, patch) VALUES ( ?1, ?2 , ?3 );");
+ createQuery.bindValue(1, MIRALL_VERSION_MAJOR);
+ createQuery.bindValue(2, MIRALL_VERSION_MINOR);
+ createQuery.bindValue(3, MIRALL_VERSION_PATCH);
if (!createQuery.exec()) {
return sqlFail("Insert Version", createQuery);
}
@@ -227,46 +227,46 @@ bool SyncJournalDb::checkConnect()
_getFileRecordQuery.reset(new SqlQuery(_db));
_getFileRecordQuery->prepare("SELECT path, inode, uid, gid, mode, modtime, type, md5, fileid, remotePerm FROM "
- "metadata WHERE phash=:ph" );
+ "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) "
- "VALUES ( ? , ?, ? , ? , ? , ? , ?, ? , ? , ?, ?, ? )" );
+ "VALUES (?1 , ?2, ?3 , ?4 , ?5 , ?6 , ?7, ?8 , ?9 , ?10, ?11, ?12);" );
_getDownloadInfoQuery.reset(new SqlQuery(_db) );
_getDownloadInfoQuery->prepare( "SELECT tmpfile, etag, errorcount FROM "
- "downloadinfo WHERE path=:pa" );
+ "downloadinfo WHERE path=?1" );
_setDownloadInfoQuery.reset(new SqlQuery(_db) );
_setDownloadInfoQuery->prepare( "INSERT OR REPLACE INTO downloadinfo "
"(path, tmpfile, etag, errorcount) "
- "VALUES ( ? , ?, ? , ? )" );
+ "VALUES ( ?1 , ?2, ?3, ?4 )" );
_deleteDownloadInfoQuery.reset(new SqlQuery(_db) );
- _deleteDownloadInfoQuery->prepare( "DELETE FROM downloadinfo WHERE path=?" );
+ _deleteDownloadInfoQuery->prepare( "DELETE FROM downloadinfo WHERE path=?1" );
_getUploadInfoQuery.reset(new SqlQuery(_db));
_getUploadInfoQuery->prepare( "SELECT chunk, transferid, errorcount, size, modtime FROM "
- "uploadinfo WHERE path=:pa" );
+ "uploadinfo WHERE path=?1" );
_setUploadInfoQuery.reset(new SqlQuery(_db));
_setUploadInfoQuery->prepare( "INSERT OR REPLACE INTO uploadinfo "
"(path, chunk, transferid, errorcount, size, modtime) "
- "VALUES ( ? , ?, ? , ? , ? , ? )");
+ "VALUES ( ?1 , ?2, ?3 , ?4 , ?5, ?6 )");
_deleteUploadInfoQuery.reset(new SqlQuery(_db));
- _deleteUploadInfoQuery->prepare("DELETE FROM uploadinfo WHERE path=?" );
+ _deleteUploadInfoQuery->prepare("DELETE FROM uploadinfo WHERE path=?1" );
_deleteFileRecordPhash.reset(new SqlQuery(_db));
- _deleteFileRecordPhash->prepare("DELETE FROM metadata WHERE phash=?");
+ _deleteFileRecordPhash->prepare("DELETE FROM metadata WHERE phash=?1");
_deleteFileRecordRecursively.reset(new SqlQuery(_db));
_deleteFileRecordRecursively->prepare("DELETE FROM metadata WHERE path LIKE(?||'/%')");
QString sql( "SELECT lastTryEtag, lastTryModtime, retrycount, errorstring "
- "FROM blacklist WHERE path=:path");
+ "FROM blacklist WHERE path=?1");
if( Utility::fsCasePreserving() ) {
// if the file system is case preserving we have to check the blacklist
// case insensitively
@@ -369,7 +369,7 @@ QStringList SyncJournalDb::tableColumns( const QString& table )
if( !table.isEmpty() ) {
if( checkConnect() ) {
- QString q = QString("PRAGMA table_info(%1);").arg(table);
+ QString q = QString("PRAGMA table_info('%1');").arg(table);
SqlQuery query(_db);
query.prepare(q);
@@ -433,18 +433,18 @@ bool SyncJournalDb::setFileRecord( const SyncJournalFileRecord& _record )
QString remotePerm (record._remotePerm);
if (remotePerm.isEmpty()) remotePerm = QString(); // have NULL in DB (vs empty)
- _setFileRecordQuery->bindValue(0, QString::number(phash));
- _setFileRecordQuery->bindValue(1, plen);
- _setFileRecordQuery->bindValue(2, record._path );
- _setFileRecordQuery->bindValue(3, record._inode );
- _setFileRecordQuery->bindValue(4, 0 ); // uid Not used
- _setFileRecordQuery->bindValue(5, 0 ); // gid Not used
- _setFileRecordQuery->bindValue(6, record._mode );
- _setFileRecordQuery->bindValue(7, QString::number(Utility::qDateTimeToTime_t(record._modtime)));
- _setFileRecordQuery->bindValue(8, QString::number(record._type) );
- _setFileRecordQuery->bindValue(9, etag );
- _setFileRecordQuery->bindValue(10, fileId );
- _setFileRecordQuery->bindValue(11, remotePerm );
+ _setFileRecordQuery->bindValue(1, QString::number(phash));
+ _setFileRecordQuery->bindValue(2, plen);
+ _setFileRecordQuery->bindValue(3, record._path );
+ _setFileRecordQuery->bindValue(4, record._inode );
+ _setFileRecordQuery->bindValue(5, 0 ); // uid Not used
+ _setFileRecordQuery->bindValue(6, 0 ); // gid Not used
+ _setFileRecordQuery->bindValue(7, record._mode );
+ _setFileRecordQuery->bindValue(8, QString::number(Utility::qDateTimeToTime_t(record._modtime)));
+ _setFileRecordQuery->bindValue(9, QString::number(record._type) );
+ _setFileRecordQuery->bindValue(10, etag );
+ _setFileRecordQuery->bindValue(11, fileId );
+ _setFileRecordQuery->bindValue(12, remotePerm );
if( !_setFileRecordQuery->exec() ) {
qWarning() << "Error SQL statement setFileRecord: " << _setFileRecordQuery->lastQuery() << " :"
@@ -456,7 +456,7 @@ bool SyncJournalDb::setFileRecord( const SyncJournalFileRecord& _record )
<< record._mode
<< QString::number(Utility::qDateTimeToTime_t(record._modtime)) << QString::number(record._type)
<< record._etag << record._fileId << record._remotePerm;
- _setFileRecordQuery->finish();
+ _setFileRecordQuery->reset();
return true;
} else {
@@ -474,7 +474,7 @@ bool SyncJournalDb::deleteFileRecord(const QString& filename, bool recursively)
// always delete the actual file.
qlonglong phash = getPHash(filename);
- _deleteFileRecordPhash->bindValue( 0, QString::number(phash) );
+ _deleteFileRecordPhash->bindValue( 1, QString::number(phash) );
if( !_deleteFileRecordPhash->exec() ) {
qWarning() << "Exec error of SQL statement: "
@@ -483,9 +483,9 @@ bool SyncJournalDb::deleteFileRecord(const QString& filename, bool recursively)
return false;
}
qDebug() << _deleteFileRecordPhash->lastQuery() << phash << filename;
- _deleteFileRecordPhash->finish();
+ _deleteFileRecordPhash->reset();
if( recursively) {
- _deleteFileRecordRecursively->bindValue(0, filename);
+ _deleteFileRecordRecursively->bindValue(1, filename);
if( !_deleteFileRecordRecursively->exec() ) {
qWarning() << "Exec error of SQL statement: "
<< _deleteFileRecordRecursively->lastQuery()
@@ -493,7 +493,7 @@ bool SyncJournalDb::deleteFileRecord(const QString& filename, bool recursively)
return false;
}
qDebug() << _deleteFileRecordRecursively->lastQuery() << filename;
- _deleteFileRecordRecursively->finish();
+ _deleteFileRecordRecursively->reset();
}
return true;
} else {
@@ -531,7 +531,7 @@ SyncJournalFileRecord SyncJournalDb::getFileRecord( const QString& filename )
rec._fileId = _getFileRecordQuery->baValue(8);
rec._remotePerm = _getFileRecordQuery->baValue(9);
- _getFileRecordQuery->finish();
+ _getFileRecordQuery->reset();
} else {
QString err = _getFileRecordQuery->error();
qDebug() << "No journal entry found for " << filename;
@@ -623,7 +623,7 @@ static bool deleteBatch(SqlQuery & query, const QStringList & entries, const QSt
qDebug() << "Removing stale " << qPrintable(name) << " entries: " << entries.join(", ");
// FIXME: Was ported from execBatch, check if correct!
foreach( const QString& entry, entries ) {
- query.bindValue(0, entry);
+ query.bindValue(1, entry);
if (!query.exec()) {
QString err = query.error();
qDebug() << "Error removing stale " << qPrintable(name) << " entries: "
@@ -631,7 +631,7 @@ static bool deleteBatch(SqlQuery & query, const QStringList & entries, const QSt
return false;
}
}
- query.finish();
+ query.reset();
return true;
}
@@ -653,7 +653,7 @@ SyncJournalDb::DownloadInfo SyncJournalDb::getDownloadInfo(const QString& file)
if( _getDownloadInfoQuery->next() ) {
toDownloadInfo(*_getDownloadInfoQuery, &res);
}
- _getDownloadInfoQuery->finish();
+ _getDownloadInfoQuery->reset();
}
return res;
}
@@ -667,10 +667,10 @@ void SyncJournalDb::setDownloadInfo(const QString& file, const SyncJournalDb::Do
}
if (i._valid) {
- _setDownloadInfoQuery->bindValue(0, file);
- _setDownloadInfoQuery->bindValue(1, i._tmpfile);
- _setDownloadInfoQuery->bindValue(2, i._etag );
- _setDownloadInfoQuery->bindValue(3, i._errorCount );
+ _setDownloadInfoQuery->bindValue(1, file);
+ _setDownloadInfoQuery->bindValue(2, i._tmpfile);
+ _setDownloadInfoQuery->bindValue(3, i._etag );
+ _setDownloadInfoQuery->bindValue(4, i._errorCount );
if( !_setDownloadInfoQuery->exec() ) {
qWarning() << "Exec error of SQL statement: " << _setDownloadInfoQuery->lastQuery() << " :" << _setDownloadInfoQuery->error();
@@ -678,17 +678,17 @@ void SyncJournalDb::setDownloadInfo(const QString& file, const SyncJournalDb::Do
}
qDebug() << _setDownloadInfoQuery->lastQuery() << file << i._tmpfile << i._etag << i._errorCount;
- _setDownloadInfoQuery->finish();
+ _setDownloadInfoQuery->reset();
} else {
- _deleteDownloadInfoQuery->bindValue( 0, file );
+ _deleteDownloadInfoQuery->bindValue( 1, file );
if( !_deleteDownloadInfoQuery->exec() ) {
qWarning() << "Exec error of SQL statement: " << _deleteDownloadInfoQuery->lastQuery() << " : " << _deleteDownloadInfoQuery->error();
return;
}
qDebug() << _deleteDownloadInfoQuery->lastQuery() << file;
- _deleteDownloadInfoQuery->finish();
+ _deleteDownloadInfoQuery->reset();
}
}
@@ -755,7 +755,7 @@ SyncJournalDb::UploadInfo SyncJournalDb::getUploadInfo(const QString& file)
res._modtime = Utility::qDateTimeFromTime_t(_getUploadInfoQuery->int64Value(4));
res._valid = ok;
}
- _getUploadInfoQuery->finish();
+ _getUploadInfoQuery->reset();
}
return res;
}
@@ -769,12 +769,12 @@ void SyncJournalDb::setUploadInfo(const QString& file, const SyncJournalDb::Uplo
}
if (i._valid) {
- _setUploadInfoQuery->bindValue(0, file);
- _setUploadInfoQuery->bindValue(1, i._chunk);
- _setUploadInfoQuery->bindValue(2, i._transferid );
- _setUploadInfoQuery->bindValue(3, i._errorCount );
- _setUploadInfoQuery->bindValue(4, i._size );
- _setUploadInfoQuery->bindValue(5, Utility::qDateTimeToTime_t(i._modtime) );
+ _setUploadInfoQuery->bindValue(1, file);
+ _setUploadInfoQuery->bindValue(2, i._chunk);
+ _setUploadInfoQuery->bindValue(3, i._transferid );
+ _setUploadInfoQuery->bindValue(4, i._errorCount );
+ _setUploadInfoQuery->bindValue(5, i._size );
+ _setUploadInfoQuery->bindValue(6, Utility::qDateTimeToTime_t(i._modtime) );
if( !_setUploadInfoQuery->exec() ) {
qWarning() << "Exec error of SQL statement: " << _setUploadInfoQuery->lastQuery() << " :" << _setUploadInfoQuery->error();
@@ -782,16 +782,16 @@ void SyncJournalDb::setUploadInfo(const QString& file, const SyncJournalDb::Uplo
}
qDebug() << _setUploadInfoQuery->lastQuery() << file << i._chunk << i._transferid << i._errorCount;
- _setUploadInfoQuery->finish();
+ _setUploadInfoQuery->reset();
} else {
- _deleteUploadInfoQuery->bindValue(0, file);
+ _deleteUploadInfoQuery->bindValue(1, file);
if( !_deleteUploadInfoQuery->exec() ) {
qWarning() << "Exec error of SQL statement: " << _deleteUploadInfoQuery->lastQuery() << " : " << _deleteUploadInfoQuery->error();
return;
}
qDebug() << _deleteUploadInfoQuery->lastQuery() << file;
- _deleteUploadInfoQuery->finish();
+ _deleteUploadInfoQuery->reset();
}
}
@@ -847,7 +847,7 @@ SyncJournalBlacklistRecord SyncJournalDb::blacklistEntry( const QString& file )
qWarning() << "Exec error blacklist: " << _blacklistQuery->lastQuery() << " : "
<< _blacklistQuery->error();
}
- _blacklistQuery->finish();
+ _blacklistQuery->reset();
}
return entry;
@@ -961,8 +961,8 @@ void SyncJournalDb::updateBlacklistEntry( const SyncJournalBlacklistRecord& item
retries--;
if( retries < 0 ) retries = 0;
- iQuery.prepare( "UPDATE blacklist SET lastTryEtag = ?1, lastTryModtime = ?2, "
- "retrycount = ?3, errorstring = ?4 WHERE path=?5");
+ iQuery.prepare( "UPDATE blacklist SET lastTryEtag = ?1, lastTryModtime = ?1, "
+ "retrycount = ?2, errorstring = ?3 WHERE path=?4");
iQuery.bindValue(1, item._lastTryEtag);
iQuery.bindValue(2, QString::number(item._lastTryModtime));
iQuery.bindValue(3, retries);
@@ -995,8 +995,7 @@ void SyncJournalDb::avoidRenamesOnNextSync(const QString& path)
}
SqlQuery query(_db);
- query.prepare("UPDATE metadata SET fileid = '', inode = '0' WHERE path == ? OR path LIKE(?||'/%')");
- query.bindValue(0, path);
+ query.prepare("UPDATE metadata SET fileid = '', inode = '0' WHERE path == ?1 OR path LIKE(?||'/%')");
query.bindValue(1, path);
if( !query.exec() ) {
qDebug() << Q_FUNC_INFO << "SQL error in avoidRenamesOnNextSync: "<< query.error();
@@ -1024,8 +1023,8 @@ void SyncJournalDb::avoidReadFromDbOnNextSync(const QString& fileName)
SqlQuery query(_db);
// This query will match entries for whitch the path is a prefix of fileName
- query.prepare("UPDATE metadata SET md5='_invalid_' WHERE ? LIKE(path||'/%') AND type == 2"); // CSYNC_FTW_TYPE_DIR == 2
- query.bindValue(0, fileName);
+ query.prepare("UPDATE metadata SET md5='_invalid_' WHERE ?1 LIKE(path||'/%') AND type == 2"); // CSYNC_FTW_TYPE_DIR == 2
+ query.bindValue(1, fileName);
if( !query.exec() ) {
qDebug() << Q_FUNC_INFO << "SQL error in avoidRenamesOnNextSync: "<< query.error();
} else {
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index ab0c440..ad2a1e2 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -27,5 +27,7 @@ endif(UNIX AND NOT APPLE)
owncloud_add_test(CSyncSqlite "")
owncloud_add_test(NetrcParser ../src/owncloudcmd/netrcparser.cpp)
+owncloud_add_test(OwnSql ../src/mirall/ownsql.cpp)
+
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-owncloud/owncloud-client.git
More information about the Pkg-owncloud-commits
mailing list