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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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