Mercurial > dedupe
view SqliteDBLink.hpp @ 107:d434137e296d
Sort the prepared queries and add end and begin queries.
| author | Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no> |
|---|---|
| date | Tue, 18 Feb 2014 17:07:01 +0100 |
| parents | 6bc013d5788b |
| children |
line wrap: on
line source
#ifndef SQLITEDBLINK_HPP #define SQLITEDBLINK_HPP #include "FileDBLink.hpp" #include <QtSql/QSqlDatabase> #include <QtCore/QPair> #include <QtCore/QVariant> class SqliteDBLink : public FileDBLink { public: SqliteDBLink(const QString& dbpath); ~SqliteDBLink(); virtual void addFile(const QString& path, quint64 size, const QDateTime& dtime, const QByteArray& hash, bool lazy = false); virtual void updateFile(const QString& path, quint64 size, const QDateTime& dtime, const QByteArray& hash, bool lazy = false); bool exists(const QString& path); DBStatus existsWithMtime(const QString& path, const QDateTime& mtime); virtual const QList<dbinf_ptr_t> filesWithSize(quint64 size, const QString& prefix = QString()) const; QStringList toStringList(); const QList<dbinf_ptr_t > values(const QString& prefix = QString() ) const; virtual void keepOnlyFromPrefix(const QString& prefix, const QStringList& files, bool lazy = false); virtual void deleteFileFromDB(const QString& path, bool lazy = false); bool commit(const QString& prefix = QString(), bool dirty = true ); private: typedef enum {None = 0, Add, Update, Delete } OperationType; static const char* typeString(OperationType); //typedef QPair<DBInfo, OperationType> Operation; class Operation { public: virtual OperationType type() const = 0; virtual ~Operation() {} }; class InfoOperation: public Operation { private: DBInfo _info; public: InfoOperation(const DBInfo&info) { this->_info=info; } const DBInfo& info() const { return _info; } }; class UpdateOperation: public InfoOperation { public: UpdateOperation(const DBInfo&info) : InfoOperation(info) {} OperationType type() const { return Update; } }; class AddOperation: public InfoOperation { public: AddOperation(const DBInfo&info) : InfoOperation(info) {} OperationType type() const { return Add; } }; class DeleteOperation: public Operation { private: QString _path; public: DeleteOperation(const QString& path) { _path=path; } OperationType type() const { return Delete; } const QString& path() const { return _path; } }; void addFile(const DBInfo& info, bool lazy = false); bool tryAddFile(const DBInfo& info); void updateFile(const DBInfo& dbinfo, bool lazy = false); QSqlDatabase db; static const QString connectionName; QSqlQuery* preparedBeginQuery; QSqlQuery* preparedDeleteQuery; QSqlQuery* preparedEndQuery; QSqlQuery* preparedSizePrefixQuery; QSqlQuery* preparedSizeQuery; QSqlQuery* preparedTryAddQuery; QSqlQuery* preparedUpdateQuery; QList<Operation*> operations; void executeOperation(QVariantList& paths, QVariantList& sizes, QVariantList& mtimes, QVariantList& checksums, OperationType operation); }; #endif //MEMORYDBLINK_HPP
