Mercurial > dedupe
annotate SqliteDBLink.hpp @ 115:404795616b1e default tip
Added a lot of common files to ignore
| author | Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no> |
|---|---|
| date | Sat, 25 Mar 2017 17:43:57 +0100 |
| parents | d434137e296d |
| children |
| rev | line source |
|---|---|
|
2
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
1 #ifndef SQLITEDBLINK_HPP |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
2 #define SQLITEDBLINK_HPP |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
3 #include "FileDBLink.hpp" |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
4 |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
5 #include <QtSql/QSqlDatabase> |
|
93
308a718812ba
Small refactoring to allow lazy commits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
92
diff
changeset
|
6 #include <QtCore/QPair> |
|
94
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
7 #include <QtCore/QVariant> |
|
2
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
8 |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
9 class SqliteDBLink : public FileDBLink { |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
10 public: |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
11 SqliteDBLink(const QString& dbpath); |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
12 ~SqliteDBLink(); |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
13 |
|
86
af7962f3274b
Use quint64 for sizes, rather than qint64.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
85
diff
changeset
|
14 virtual void addFile(const QString& path, quint64 size, |
|
92
f49023c61dac
Support for bulk insertion.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
90
diff
changeset
|
15 const QDateTime& dtime, const QByteArray& hash, |
|
f49023c61dac
Support for bulk insertion.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
90
diff
changeset
|
16 bool lazy = false); |
|
86
af7962f3274b
Use quint64 for sizes, rather than qint64.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
85
diff
changeset
|
17 virtual void updateFile(const QString& path, quint64 size, |
|
92
f49023c61dac
Support for bulk insertion.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
90
diff
changeset
|
18 const QDateTime& dtime, const QByteArray& hash, |
|
f49023c61dac
Support for bulk insertion.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
90
diff
changeset
|
19 bool lazy = false); |
|
2
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
20 bool exists(const QString& path); |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
21 DBStatus existsWithMtime(const QString& path, const QDateTime& mtime); |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
22 |
|
86
af7962f3274b
Use quint64 for sizes, rather than qint64.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
85
diff
changeset
|
23 virtual const QList<dbinf_ptr_t> filesWithSize(quint64 size, const QString& prefix = QString()) const; |
|
85
1f9e27a0bd7f
Allow for lazy calculation of checksums, ignore them, if only one file of given size.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
81
diff
changeset
|
24 |
|
1f9e27a0bd7f
Allow for lazy calculation of checksums, ignore them, if only one file of given size.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
81
diff
changeset
|
25 |
|
2
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
26 QStringList toStringList(); |
|
64
b9515dc35fe4
Make sure no file has greater linewidth than 80.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
61
diff
changeset
|
27 const QList<dbinf_ptr_t > values(const QString& prefix = QString() ) const; |
|
b9515dc35fe4
Make sure no file has greater linewidth than 80.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
61
diff
changeset
|
28 virtual void keepOnlyFromPrefix(const QString& prefix, |
|
101
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
29 const QStringList& files, |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
30 bool lazy = false); |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
31 virtual void deleteFileFromDB(const QString& path, bool lazy = false); |
|
104
6bc013d5788b
Avoid unnecessary updates.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
101
diff
changeset
|
32 bool commit(const QString& prefix = QString(), bool dirty = true ); |
|
2
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
33 |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
34 private: |
|
101
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
35 typedef enum {None = 0, Add, Update, Delete } OperationType; |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
36 static const char* typeString(OperationType); |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
37 |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
38 //typedef QPair<DBInfo, OperationType> Operation; |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
39 class Operation { |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
40 public: |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
41 virtual OperationType type() const = 0; |
|
104
6bc013d5788b
Avoid unnecessary updates.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
101
diff
changeset
|
42 virtual ~Operation() {} |
|
101
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
43 }; |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
44 |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
45 class InfoOperation: public Operation { |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
46 private: |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
47 DBInfo _info; |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
48 public: |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
49 InfoOperation(const DBInfo&info) { |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
50 this->_info=info; |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
51 } |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
52 const DBInfo& info() const { |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
53 return _info; |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
54 } |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
55 }; |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
56 |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
57 class UpdateOperation: public InfoOperation { |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
58 public: |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
59 UpdateOperation(const DBInfo&info) : InfoOperation(info) {} |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
60 |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
61 OperationType type() const |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
62 { |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
63 return Update; |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
64 } |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
65 }; |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
66 |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
67 class AddOperation: public InfoOperation { |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
68 public: |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
69 AddOperation(const DBInfo&info) : InfoOperation(info) {} |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
70 |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
71 OperationType type() const |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
72 { |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
73 return Add; |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
74 } |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
75 }; |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
76 |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
77 class DeleteOperation: public Operation { |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
78 private: |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
79 QString _path; |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
80 public: |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
81 DeleteOperation(const QString& path) { |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
82 _path=path; |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
83 } |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
84 OperationType type() const |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
85 { |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
86 return Delete; |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
87 } |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
88 const QString& path() const { |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
89 return _path; |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
90 } |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
91 }; |
|
93
308a718812ba
Small refactoring to allow lazy commits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
92
diff
changeset
|
92 |
|
308a718812ba
Small refactoring to allow lazy commits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
92
diff
changeset
|
93 void addFile(const DBInfo& info, bool lazy = false); |
|
2
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
94 bool tryAddFile(const DBInfo& info); |
|
93
308a718812ba
Small refactoring to allow lazy commits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
92
diff
changeset
|
95 void updateFile(const DBInfo& dbinfo, bool lazy = false); |
|
2
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
96 |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
97 QSqlDatabase db; |
|
81
69a30d9f126e
Make the DBLink reusable.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
64
diff
changeset
|
98 static const QString connectionName; |
|
88
6e1d4d2fc49b
Prepare size query only once.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
86
diff
changeset
|
99 |
|
107
d434137e296d
Sort the prepared queries and add end and begin queries.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
104
diff
changeset
|
100 QSqlQuery* preparedBeginQuery; |
|
d434137e296d
Sort the prepared queries and add end and begin queries.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
104
diff
changeset
|
101 QSqlQuery* preparedDeleteQuery; |
|
d434137e296d
Sort the prepared queries and add end and begin queries.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
104
diff
changeset
|
102 QSqlQuery* preparedEndQuery; |
|
88
6e1d4d2fc49b
Prepare size query only once.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
86
diff
changeset
|
103 QSqlQuery* preparedSizePrefixQuery; |
|
6e1d4d2fc49b
Prepare size query only once.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
86
diff
changeset
|
104 QSqlQuery* preparedSizeQuery; |
|
90
7b7a959c993b
Prepare some more queries.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
88
diff
changeset
|
105 QSqlQuery* preparedTryAddQuery; |
|
94
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
106 QSqlQuery* preparedUpdateQuery; |
|
107
d434137e296d
Sort the prepared queries and add end and begin queries.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
104
diff
changeset
|
107 |
|
101
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
108 QList<Operation*> operations; |
|
94
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
109 void executeOperation(QVariantList& paths, QVariantList& sizes, |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
110 QVariantList& mtimes, QVariantList& checksums, |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
111 OperationType operation); |
|
2
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
112 }; |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
113 |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
114 #endif //MEMORYDBLINK_HPP |
