Mercurial > dedupe
annotate SqliteDBLink.hpp @ 103:6b997f4f7e19
Support for directly selecting subfolder.
| author | Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no> |
|---|---|
| date | Sat, 15 Feb 2014 13:32:46 +0100 |
| parents | 6c6f3a5f96ea |
| children | 6bc013d5788b |
| 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); |
|
96
c7da835ea912
Support for prefix in commit.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
94
diff
changeset
|
32 bool commit(const QString& prefix = QString() ); |
|
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; |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
42 }; |
|
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 class InfoOperation: public Operation { |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
45 private: |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
46 DBInfo _info; |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
47 public: |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
48 InfoOperation(const DBInfo&info) { |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
49 this->_info=info; |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
50 } |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
51 const DBInfo& info() const { |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
52 return _info; |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
53 } |
|
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 class UpdateOperation: public InfoOperation { |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
57 public: |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
58 UpdateOperation(const DBInfo&info) : InfoOperation(info) {} |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
59 |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
60 OperationType type() const |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
61 { |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
62 return Update; |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
63 } |
|
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 class AddOperation: public InfoOperation { |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
67 public: |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
68 AddOperation(const DBInfo&info) : InfoOperation(info) {} |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
69 |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
70 OperationType type() const |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
71 { |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
72 return Add; |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
73 } |
|
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 class DeleteOperation: public Operation { |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
77 private: |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
78 QString _path; |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
79 public: |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
80 DeleteOperation(const QString& path) { |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
81 _path=path; |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
82 } |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
83 OperationType type() const |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
84 { |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
85 return Delete; |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
86 } |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
87 const QString& path() const { |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
88 return _path; |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
89 } |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
90 }; |
|
93
308a718812ba
Small refactoring to allow lazy commits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
92
diff
changeset
|
91 |
|
308a718812ba
Small refactoring to allow lazy commits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
92
diff
changeset
|
92 void addFile(const DBInfo& info, bool lazy = false); |
|
2
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
93 bool tryAddFile(const DBInfo& info); |
|
93
308a718812ba
Small refactoring to allow lazy commits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
92
diff
changeset
|
94 void updateFile(const DBInfo& dbinfo, bool lazy = false); |
|
2
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
95 |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
96 QSqlDatabase db; |
|
81
69a30d9f126e
Make the DBLink reusable.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
64
diff
changeset
|
97 static const QString connectionName; |
|
88
6e1d4d2fc49b
Prepare size query only once.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
86
diff
changeset
|
98 |
|
6e1d4d2fc49b
Prepare size query only once.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
86
diff
changeset
|
99 QSqlQuery* preparedSizePrefixQuery; |
|
6e1d4d2fc49b
Prepare size query only once.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
86
diff
changeset
|
100 QSqlQuery* preparedSizeQuery; |
|
90
7b7a959c993b
Prepare some more queries.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
88
diff
changeset
|
101 QSqlQuery* preparedTryAddQuery; |
|
94
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
102 QSqlQuery* preparedUpdateQuery; |
|
101
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
103 QSqlQuery* preparedDeleteQuery; |
|
6c6f3a5f96ea
Better support for batch operations.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
96
diff
changeset
|
104 QList<Operation*> operations; |
|
94
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
105 void executeOperation(QVariantList& paths, QVariantList& sizes, |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
106 QVariantList& mtimes, QVariantList& checksums, |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
107 OperationType operation); |
|
2
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
108 }; |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
109 |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
110 #endif //MEMORYDBLINK_HPP |
