Mercurial > dedupe
diff SqliteDBLink.hpp @ 101:6c6f3a5f96ea
Better support for batch operations.
| author | Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no> |
|---|---|
| date | Thu, 13 Feb 2014 15:19:37 +0100 |
| parents | c7da835ea912 |
| children | 6bc013d5788b |
line wrap: on
line diff
--- a/SqliteDBLink.hpp Thu Feb 13 14:55:11 2014 +0100 +++ b/SqliteDBLink.hpp Thu Feb 13 15:19:37 2014 +0100 @@ -26,13 +26,68 @@ QStringList toStringList(); const QList<dbinf_ptr_t > values(const QString& prefix = QString() ) const; virtual void keepOnlyFromPrefix(const QString& prefix, - const QStringList& files); - virtual void deleteFileFromDB(const QString& path); + const QStringList& files, + bool lazy = false); + virtual void deleteFileFromDB(const QString& path, bool lazy = false); bool commit(const QString& prefix = QString() ); private: - typedef enum {None = 0, Add, Update } OperationType; - typedef QPair<DBInfo, OperationType> Operation; + 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; + }; + + 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); @@ -45,7 +100,8 @@ QSqlQuery* preparedSizeQuery; QSqlQuery* preparedTryAddQuery; QSqlQuery* preparedUpdateQuery; - QList<Operation> operations; + QSqlQuery* preparedDeleteQuery; + QList<Operation*> operations; void executeOperation(QVariantList& paths, QVariantList& sizes, QVariantList& mtimes, QVariantList& checksums, OperationType operation);
