comparison 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
comparison
equal deleted inserted replaced
100:f4ebbfa3ffae 101:6c6f3a5f96ea
24 24
25 25
26 QStringList toStringList(); 26 QStringList toStringList();
27 const QList<dbinf_ptr_t > values(const QString& prefix = QString() ) const; 27 const QList<dbinf_ptr_t > values(const QString& prefix = QString() ) const;
28 virtual void keepOnlyFromPrefix(const QString& prefix, 28 virtual void keepOnlyFromPrefix(const QString& prefix,
29 const QStringList& files); 29 const QStringList& files,
30 virtual void deleteFileFromDB(const QString& path); 30 bool lazy = false);
31 virtual void deleteFileFromDB(const QString& path, bool lazy = false);
31 bool commit(const QString& prefix = QString() ); 32 bool commit(const QString& prefix = QString() );
32 33
33 private: 34 private:
34 typedef enum {None = 0, Add, Update } OperationType; 35 typedef enum {None = 0, Add, Update, Delete } OperationType;
35 typedef QPair<DBInfo, OperationType> Operation; 36 static const char* typeString(OperationType);
37
38 //typedef QPair<DBInfo, OperationType> Operation;
39 class Operation {
40 public:
41 virtual OperationType type() const = 0;
42 };
43
44 class InfoOperation: public Operation {
45 private:
46 DBInfo _info;
47 public:
48 InfoOperation(const DBInfo&info) {
49 this->_info=info;
50 }
51 const DBInfo& info() const {
52 return _info;
53 }
54 };
55
56 class UpdateOperation: public InfoOperation {
57 public:
58 UpdateOperation(const DBInfo&info) : InfoOperation(info) {}
59
60 OperationType type() const
61 {
62 return Update;
63 }
64 };
65
66 class AddOperation: public InfoOperation {
67 public:
68 AddOperation(const DBInfo&info) : InfoOperation(info) {}
69
70 OperationType type() const
71 {
72 return Add;
73 }
74 };
75
76 class DeleteOperation: public Operation {
77 private:
78 QString _path;
79 public:
80 DeleteOperation(const QString& path) {
81 _path=path;
82 }
83 OperationType type() const
84 {
85 return Delete;
86 }
87 const QString& path() const {
88 return _path;
89 }
90 };
36 91
37 void addFile(const DBInfo& info, bool lazy = false); 92 void addFile(const DBInfo& info, bool lazy = false);
38 bool tryAddFile(const DBInfo& info); 93 bool tryAddFile(const DBInfo& info);
39 void updateFile(const DBInfo& dbinfo, bool lazy = false); 94 void updateFile(const DBInfo& dbinfo, bool lazy = false);
40 95
43 98
44 QSqlQuery* preparedSizePrefixQuery; 99 QSqlQuery* preparedSizePrefixQuery;
45 QSqlQuery* preparedSizeQuery; 100 QSqlQuery* preparedSizeQuery;
46 QSqlQuery* preparedTryAddQuery; 101 QSqlQuery* preparedTryAddQuery;
47 QSqlQuery* preparedUpdateQuery; 102 QSqlQuery* preparedUpdateQuery;
48 QList<Operation> operations; 103 QSqlQuery* preparedDeleteQuery;
104 QList<Operation*> operations;
49 void executeOperation(QVariantList& paths, QVariantList& sizes, 105 void executeOperation(QVariantList& paths, QVariantList& sizes,
50 QVariantList& mtimes, QVariantList& checksums, 106 QVariantList& mtimes, QVariantList& checksums,
51 OperationType operation); 107 OperationType operation);
52 }; 108 };
53 109