Mercurial > dedupe
annotate SqliteDBLink.cpp @ 96:c7da835ea912
Support for prefix in commit.
| author | Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no> |
|---|---|
| date | Tue, 22 Oct 2013 14:40:08 +0200 |
| parents | 7c935d3d5b74 |
| children | 6c6f3a5f96ea |
| rev | line source |
|---|---|
|
2
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
1 #include "SqliteDBLink.hpp" |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
2 |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
3 #include <QtCore/QStringList> |
|
31
bf3dce7fedcb
Remove all references to QDebug
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
16
diff
changeset
|
4 #include <QtCore/QVariant> |
|
bf3dce7fedcb
Remove all references to QDebug
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
16
diff
changeset
|
5 |
|
2
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
6 |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
7 #include <QtSql/QSqlQuery> |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
8 #include <QtSql/QSqlRecord> |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
9 |
|
31
bf3dce7fedcb
Remove all references to QDebug
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
16
diff
changeset
|
10 #include "Exception/SQLException.hpp" |
|
32
c978d4a6514d
Replace unnecessary asserts with exceptions.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
31
diff
changeset
|
11 #include "Exception/IOException.hpp" |
|
9
b5943e4bf676
Fix up header includes.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
7
diff
changeset
|
12 |
|
94
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
13 #include <cassert> |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
14 |
|
81
69a30d9f126e
Make the DBLink reusable.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
64
diff
changeset
|
15 const QString SqliteDBLink::connectionName("SqliteDBLink"); |
|
69a30d9f126e
Make the DBLink reusable.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
64
diff
changeset
|
16 |
|
69a30d9f126e
Make the DBLink reusable.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
64
diff
changeset
|
17 |
|
2
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
18 SqliteDBLink::SqliteDBLink(const QString& dbPath) |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
19 { |
|
81
69a30d9f126e
Make the DBLink reusable.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
64
diff
changeset
|
20 if (!QSqlDatabase::contains(connectionName)) |
|
69a30d9f126e
Make the DBLink reusable.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
64
diff
changeset
|
21 db = QSqlDatabase::addDatabase("QSQLITE", connectionName); |
|
69a30d9f126e
Make the DBLink reusable.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
64
diff
changeset
|
22 else { |
|
69a30d9f126e
Make the DBLink reusable.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
64
diff
changeset
|
23 db = QSqlDatabase::database(connectionName); |
|
69a30d9f126e
Make the DBLink reusable.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
64
diff
changeset
|
24 } |
|
2
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
25 db.setDatabaseName(dbPath); |
|
32
c978d4a6514d
Replace unnecessary asserts with exceptions.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
31
diff
changeset
|
26 if (!db.open()) |
|
64
b9515dc35fe4
Make sure no file has greater linewidth than 80.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
62
diff
changeset
|
27 throw |
|
b9515dc35fe4
Make sure no file has greater linewidth than 80.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
62
diff
changeset
|
28 IOException(QString("Unable to open SQLite database with path '%1'") |
|
b9515dc35fe4
Make sure no file has greater linewidth than 80.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
62
diff
changeset
|
29 .arg(dbPath)); |
|
16
06166d6c083b
Add configuration processing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
9
diff
changeset
|
30 QSqlQuery query(db); |
|
2
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
31 if (!query.exec(QString("SELECT * FROM files;"))) { |
|
64
b9515dc35fe4
Make sure no file has greater linewidth than 80.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
62
diff
changeset
|
32 query.exec("CREATE TABLE files(path VARCHAR PRIMARY KEY ASC," |
|
b9515dc35fe4
Make sure no file has greater linewidth than 80.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
62
diff
changeset
|
33 " size INTEGER, mtime TEXT, checksum TEXT);"); |
|
2
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
34 } |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
35 if (!query.exec(QString("SELECT * FROM files;"))) { |
|
31
bf3dce7fedcb
Remove all references to QDebug
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
16
diff
changeset
|
36 throw SQLException("No database"); |
|
2
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
37 } |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
38 |
|
88
6e1d4d2fc49b
Prepare size query only once.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
87
diff
changeset
|
39 |
|
6e1d4d2fc49b
Prepare size query only once.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
87
diff
changeset
|
40 preparedSizePrefixQuery = new QSqlQuery(db); |
|
6e1d4d2fc49b
Prepare size query only once.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
87
diff
changeset
|
41 preparedSizePrefixQuery->prepare("SELECT * FROM files WHERE path LIKE :prefix AND size = :size"); |
|
6e1d4d2fc49b
Prepare size query only once.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
87
diff
changeset
|
42 |
|
6e1d4d2fc49b
Prepare size query only once.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
87
diff
changeset
|
43 preparedSizeQuery = new QSqlQuery(db); |
|
6e1d4d2fc49b
Prepare size query only once.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
87
diff
changeset
|
44 preparedSizeQuery->prepare("SELECT * FROM files WHERE size = :size"); |
|
6e1d4d2fc49b
Prepare size query only once.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
87
diff
changeset
|
45 |
|
90
7b7a959c993b
Prepare some more queries.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
88
diff
changeset
|
46 preparedTryAddQuery = new QSqlQuery(db); |
|
7b7a959c993b
Prepare some more queries.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
88
diff
changeset
|
47 preparedTryAddQuery->prepare("INSERT INTO files (path, size, mtime, checksum)" |
|
7b7a959c993b
Prepare some more queries.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
88
diff
changeset
|
48 " VALUES (:path, :size, :mtime, :checksum)"); |
|
7b7a959c993b
Prepare some more queries.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
88
diff
changeset
|
49 |
|
94
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
50 preparedUpdateQuery = new QSqlQuery(db); |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
51 preparedUpdateQuery->prepare( |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
52 "UPDATE files " |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
53 "SET size=:size, mtime=:mtime, checksum=:checksum " |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
54 "WHERE path=:path"); |
|
2
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
55 } |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
56 |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
57 SqliteDBLink::~SqliteDBLink() |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
58 { |
|
88
6e1d4d2fc49b
Prepare size query only once.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
87
diff
changeset
|
59 delete preparedSizePrefixQuery; |
|
6e1d4d2fc49b
Prepare size query only once.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
87
diff
changeset
|
60 delete preparedSizeQuery; |
|
94
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
61 delete preparedTryAddQuery; |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
62 delete preparedUpdateQuery; |
|
2
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
63 db.close(); |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
64 } |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
65 |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
66 bool SqliteDBLink::exists(const QString& path) |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
67 { |
|
16
06166d6c083b
Add configuration processing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
9
diff
changeset
|
68 QSqlQuery query(db); |
|
2
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
69 query.prepare("SELECT path FROM files WHERE path = :path;"); |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
70 query.bindValue(":path", path); |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
71 if (!query.exec()) { |
|
31
bf3dce7fedcb
Remove all references to QDebug
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
16
diff
changeset
|
72 throw SQLException(query); |
|
2
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
73 } |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
74 return query.last(); |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
75 } |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
76 |
|
64
b9515dc35fe4
Make sure no file has greater linewidth than 80.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
62
diff
changeset
|
77 FileDBLink::DBStatus SqliteDBLink::existsWithMtime(const QString& path, |
|
b9515dc35fe4
Make sure no file has greater linewidth than 80.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
62
diff
changeset
|
78 const QDateTime& mtime) |
|
2
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
79 { |
|
16
06166d6c083b
Add configuration processing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
9
diff
changeset
|
80 QSqlQuery query(db); |
|
2
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
81 query.prepare("SELECT mtime FROM files WHERE path = :path;"); |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
82 query.bindValue(":path", path); |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
83 if (!query.exec()) { |
|
31
bf3dce7fedcb
Remove all references to QDebug
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
16
diff
changeset
|
84 throw SQLException(query); |
|
2
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
85 } |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
86 if (query.next()) { |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
87 int dateIndex = query.record().indexOf("mtime"); |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
88 QDateTime mtimeEntry = query.value(dateIndex).toDateTime(); |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
89 if (mtimeEntry == mtime) |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
90 return SAME; |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
91 return MTIME_DIFFERENT; |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
92 } |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
93 return NONE; |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
94 } |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
95 |
|
86
af7962f3274b
Use quint64 for sizes, rather than qint64.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
85
diff
changeset
|
96 void SqliteDBLink::addFile(const QString& path, quint64 size, |
|
92
f49023c61dac
Support for bulk insertion.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
90
diff
changeset
|
97 const QDateTime& dtime, const QByteArray& hash, |
|
f49023c61dac
Support for bulk insertion.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
90
diff
changeset
|
98 bool lazy) |
|
2
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
99 { |
|
92
f49023c61dac
Support for bulk insertion.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
90
diff
changeset
|
100 addFile(DBInfo(path, size, dtime, hash), lazy); |
|
2
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
101 } |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
102 |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
103 bool SqliteDBLink::tryAddFile(const DBInfo& dbinfo) |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
104 { |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
105 if (exists(dbinfo.path())) |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
106 return false; |
|
90
7b7a959c993b
Prepare some more queries.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
88
diff
changeset
|
107 preparedTryAddQuery->bindValue(":path", dbinfo.path()); |
|
7b7a959c993b
Prepare some more queries.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
88
diff
changeset
|
108 preparedTryAddQuery->bindValue(":size", dbinfo.size()); |
|
7b7a959c993b
Prepare some more queries.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
88
diff
changeset
|
109 preparedTryAddQuery->bindValue(":mtime", dbinfo.mtime()); |
|
7b7a959c993b
Prepare some more queries.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
88
diff
changeset
|
110 preparedTryAddQuery->bindValue(":checksum", dbinfo.checksum()); |
|
7b7a959c993b
Prepare some more queries.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
88
diff
changeset
|
111 if (!preparedTryAddQuery->exec()) { |
|
7b7a959c993b
Prepare some more queries.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
88
diff
changeset
|
112 throw SQLException(*preparedTryAddQuery); |
|
2
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 return true; |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
115 } |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
116 |
|
64
b9515dc35fe4
Make sure no file has greater linewidth than 80.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
62
diff
changeset
|
117 void SqliteDBLink::updateFile(const QString& path, |
|
86
af7962f3274b
Use quint64 for sizes, rather than qint64.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
85
diff
changeset
|
118 quint64 size, const QDateTime& dtime, |
|
92
f49023c61dac
Support for bulk insertion.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
90
diff
changeset
|
119 const QByteArray& hash, bool lazy) |
|
7
d6fdca3bf24e
Make sure everything works for MemoryDBLink.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
5
diff
changeset
|
120 { |
|
92
f49023c61dac
Support for bulk insertion.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
90
diff
changeset
|
121 updateFile(DBInfo(path, size, dtime, hash), lazy); |
|
7
d6fdca3bf24e
Make sure everything works for MemoryDBLink.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
5
diff
changeset
|
122 } |
|
d6fdca3bf24e
Make sure everything works for MemoryDBLink.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
5
diff
changeset
|
123 |
|
92
f49023c61dac
Support for bulk insertion.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
90
diff
changeset
|
124 void SqliteDBLink::updateFile(const DBInfo& dbinfo, bool lazy) |
|
2
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
125 { |
|
93
308a718812ba
Small refactoring to allow lazy commits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
92
diff
changeset
|
126 if (lazy) { |
|
308a718812ba
Small refactoring to allow lazy commits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
92
diff
changeset
|
127 operations.push_back(Operation(dbinfo, Update)); |
|
308a718812ba
Small refactoring to allow lazy commits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
92
diff
changeset
|
128 } |
|
308a718812ba
Small refactoring to allow lazy commits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
92
diff
changeset
|
129 else { |
|
94
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
130 preparedUpdateQuery->bindValue(":path", dbinfo.path()); |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
131 preparedUpdateQuery->bindValue(":size", dbinfo.size()); |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
132 preparedUpdateQuery->bindValue(":mtime", dbinfo.mtime()); |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
133 preparedUpdateQuery->bindValue(":checksum", dbinfo.checksum()); |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
134 if (!preparedUpdateQuery->exec()) { |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
135 throw SQLException(*preparedUpdateQuery); |
|
93
308a718812ba
Small refactoring to allow lazy commits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
92
diff
changeset
|
136 } |
|
2
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
137 } |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
138 } |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
139 |
|
92
f49023c61dac
Support for bulk insertion.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
90
diff
changeset
|
140 void SqliteDBLink::addFile(const DBInfo& dbinfo, bool lazy) |
|
2
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
141 { |
|
93
308a718812ba
Small refactoring to allow lazy commits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
92
diff
changeset
|
142 if (lazy) { |
|
308a718812ba
Small refactoring to allow lazy commits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
92
diff
changeset
|
143 operations.push_back(Operation(dbinfo, Add)); |
|
308a718812ba
Small refactoring to allow lazy commits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
92
diff
changeset
|
144 } |
|
308a718812ba
Small refactoring to allow lazy commits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
92
diff
changeset
|
145 else { |
|
308a718812ba
Small refactoring to allow lazy commits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
92
diff
changeset
|
146 if (!tryAddFile(dbinfo)) { |
|
308a718812ba
Small refactoring to allow lazy commits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
92
diff
changeset
|
147 abort(); //Should throw exception |
|
308a718812ba
Small refactoring to allow lazy commits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
92
diff
changeset
|
148 } |
|
2
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
149 } |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
150 } |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
151 |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
152 |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
153 QStringList SqliteDBLink::toStringList() |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
154 { |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
155 abort(); |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
156 QStringList list; |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
157 /* |
|
64
b9515dc35fe4
Make sure no file has greater linewidth than 80.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
62
diff
changeset
|
158 foreach(dbinf_ptr_t info, entries) { |
|
2
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
159 list << info->serialize(); |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
160 } |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
161 */ |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
162 return list; |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
163 } |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
164 |
|
64
b9515dc35fe4
Make sure no file has greater linewidth than 80.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
62
diff
changeset
|
165 const QList<FileDBLink::dbinf_ptr_t > |
|
b9515dc35fe4
Make sure no file has greater linewidth than 80.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
62
diff
changeset
|
166 SqliteDBLink::values(const QString& prefix) const |
|
2
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
167 { |
|
64
b9515dc35fe4
Make sure no file has greater linewidth than 80.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
62
diff
changeset
|
168 QList<FileDBLink::dbinf_ptr_t > values; |
|
2
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
169 |
|
16
06166d6c083b
Add configuration processing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
9
diff
changeset
|
170 QSqlQuery query(db); |
|
2
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
171 |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
172 if (prefix.size() > 0) { |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
173 query.prepare("SELECT * FROM files WHERE path LIKE :prefix"); |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
174 query.bindValue(":prefix", QString("%1%").arg(prefix)); |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
175 } |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
176 else { |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
177 query.prepare("SELECT * FROM files"); |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
178 } |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
179 |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
180 if (!query.exec()) { |
|
31
bf3dce7fedcb
Remove all references to QDebug
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
16
diff
changeset
|
181 throw SQLException(query); |
|
2
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
182 } |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
183 |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
184 int pathIndex = query.record().indexOf("path"); |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
185 int sizeIndex = query.record().indexOf("size"); |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
186 int dateIndex = query.record().indexOf("mtime"); |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
187 int checksumIndex = query.record().indexOf("checksum"); |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
188 while (query.next()) { |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
189 QString path = query.value(pathIndex).toString(); |
|
86
af7962f3274b
Use quint64 for sizes, rather than qint64.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
85
diff
changeset
|
190 quint64 size = query.value(sizeIndex).toInt(); |
|
2
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
191 QDateTime mtime = query.value(dateIndex).toDateTime(); |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
192 QByteArray checksum = query.value(checksumIndex).toByteArray(); |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
193 |
|
64
b9515dc35fe4
Make sure no file has greater linewidth than 80.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
62
diff
changeset
|
194 values << |
|
b9515dc35fe4
Make sure no file has greater linewidth than 80.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
62
diff
changeset
|
195 FileDBLink::dbinf_ptr_t(new FileDBLink::DBInfo(path, |
|
b9515dc35fe4
Make sure no file has greater linewidth than 80.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
62
diff
changeset
|
196 size, mtime, checksum)); |
|
2
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
197 } |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
198 |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
199 return values; |
|
2833b7f8884a
Sql backend is working.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
200 } |
|
5
5e4985407feb
Add commandline tool updateDeDupe.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
2
diff
changeset
|
201 |
|
5e4985407feb
Add commandline tool updateDeDupe.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
2
diff
changeset
|
202 void SqliteDBLink::deleteFileFromDB(const QString& path) |
|
5e4985407feb
Add commandline tool updateDeDupe.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
2
diff
changeset
|
203 { |
|
16
06166d6c083b
Add configuration processing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
9
diff
changeset
|
204 QSqlQuery query(db); |
|
06166d6c083b
Add configuration processing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
9
diff
changeset
|
205 query.prepare("DELETE FROM files WHERE path = :path"); |
|
06166d6c083b
Add configuration processing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
9
diff
changeset
|
206 query.bindValue(":path", path); |
|
06166d6c083b
Add configuration processing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
9
diff
changeset
|
207 if (!query.exec()) { |
|
31
bf3dce7fedcb
Remove all references to QDebug
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
16
diff
changeset
|
208 throw SQLException(query); |
|
16
06166d6c083b
Add configuration processing.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
9
diff
changeset
|
209 } |
|
5
5e4985407feb
Add commandline tool updateDeDupe.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
2
diff
changeset
|
210 } |
|
5e4985407feb
Add commandline tool updateDeDupe.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
2
diff
changeset
|
211 |
|
5e4985407feb
Add commandline tool updateDeDupe.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
2
diff
changeset
|
212 |
|
64
b9515dc35fe4
Make sure no file has greater linewidth than 80.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
62
diff
changeset
|
213 void SqliteDBLink::keepOnlyFromPrefix(const QString& prefix, |
|
b9515dc35fe4
Make sure no file has greater linewidth than 80.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
62
diff
changeset
|
214 const QStringList& files) |
|
5
5e4985407feb
Add commandline tool updateDeDupe.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
2
diff
changeset
|
215 { |
|
5e4985407feb
Add commandline tool updateDeDupe.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
2
diff
changeset
|
216 QStringList list; |
|
64
b9515dc35fe4
Make sure no file has greater linewidth than 80.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
62
diff
changeset
|
217 foreach(dbinf_ptr_t info, values(prefix)) { |
|
5
5e4985407feb
Add commandline tool updateDeDupe.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
2
diff
changeset
|
218 if (!files.contains(info->path())) { |
|
5e4985407feb
Add commandline tool updateDeDupe.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
2
diff
changeset
|
219 list << info->path(); |
|
5e4985407feb
Add commandline tool updateDeDupe.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
2
diff
changeset
|
220 } |
|
5e4985407feb
Add commandline tool updateDeDupe.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
2
diff
changeset
|
221 } |
|
5e4985407feb
Add commandline tool updateDeDupe.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
2
diff
changeset
|
222 foreach(QString path, list) { |
|
5e4985407feb
Add commandline tool updateDeDupe.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
2
diff
changeset
|
223 deleteFileFromDB(path); |
|
5e4985407feb
Add commandline tool updateDeDupe.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
2
diff
changeset
|
224 } |
|
5e4985407feb
Add commandline tool updateDeDupe.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
2
diff
changeset
|
225 } |
|
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
|
226 |
|
86
af7962f3274b
Use quint64 for sizes, rather than qint64.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
85
diff
changeset
|
227 const QList<FileDBLink::dbinf_ptr_t> |
|
af7962f3274b
Use quint64 for sizes, rather than qint64.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
85
diff
changeset
|
228 SqliteDBLink::filesWithSize(quint64 size, const QString& prefix) 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
|
229 { |
|
88
6e1d4d2fc49b
Prepare size query only once.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
87
diff
changeset
|
230 QList<dbinf_ptr_t > values; |
|
87
9e337bd96bd3
Improve efficiency of SqliteDBLink::filesWithSize
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
86
diff
changeset
|
231 |
|
88
6e1d4d2fc49b
Prepare size query only once.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
87
diff
changeset
|
232 QSqlQuery & query = (prefix.size() > 0) ? *preparedSizePrefixQuery : *preparedSizeQuery; |
|
87
9e337bd96bd3
Improve efficiency of SqliteDBLink::filesWithSize
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
86
diff
changeset
|
233 |
|
9e337bd96bd3
Improve efficiency of SqliteDBLink::filesWithSize
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
86
diff
changeset
|
234 if (prefix.size() > 0) { |
|
9e337bd96bd3
Improve efficiency of SqliteDBLink::filesWithSize
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
86
diff
changeset
|
235 query.bindValue(":prefix", QString("%1%").arg(prefix)); |
|
9e337bd96bd3
Improve efficiency of SqliteDBLink::filesWithSize
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
86
diff
changeset
|
236 } |
|
9e337bd96bd3
Improve efficiency of SqliteDBLink::filesWithSize
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
86
diff
changeset
|
237 query.bindValue(":size", QString("%1%").arg(size)); |
|
9e337bd96bd3
Improve efficiency of SqliteDBLink::filesWithSize
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
86
diff
changeset
|
238 |
|
9e337bd96bd3
Improve efficiency of SqliteDBLink::filesWithSize
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
86
diff
changeset
|
239 |
|
9e337bd96bd3
Improve efficiency of SqliteDBLink::filesWithSize
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
86
diff
changeset
|
240 if (!query.exec()) { |
|
9e337bd96bd3
Improve efficiency of SqliteDBLink::filesWithSize
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
86
diff
changeset
|
241 throw SQLException(query); |
|
9e337bd96bd3
Improve efficiency of SqliteDBLink::filesWithSize
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
86
diff
changeset
|
242 } |
|
9e337bd96bd3
Improve efficiency of SqliteDBLink::filesWithSize
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
86
diff
changeset
|
243 |
|
9e337bd96bd3
Improve efficiency of SqliteDBLink::filesWithSize
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
86
diff
changeset
|
244 int pathIndex = query.record().indexOf("path"); |
|
9e337bd96bd3
Improve efficiency of SqliteDBLink::filesWithSize
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
86
diff
changeset
|
245 int sizeIndex = query.record().indexOf("size"); |
|
9e337bd96bd3
Improve efficiency of SqliteDBLink::filesWithSize
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
86
diff
changeset
|
246 int dateIndex = query.record().indexOf("mtime"); |
|
9e337bd96bd3
Improve efficiency of SqliteDBLink::filesWithSize
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
86
diff
changeset
|
247 int checksumIndex = query.record().indexOf("checksum"); |
|
9e337bd96bd3
Improve efficiency of SqliteDBLink::filesWithSize
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
86
diff
changeset
|
248 while (query.next()) { |
|
9e337bd96bd3
Improve efficiency of SqliteDBLink::filesWithSize
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
86
diff
changeset
|
249 QString path = query.value(pathIndex).toString(); |
|
9e337bd96bd3
Improve efficiency of SqliteDBLink::filesWithSize
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
86
diff
changeset
|
250 quint64 size = query.value(sizeIndex).toInt(); |
|
9e337bd96bd3
Improve efficiency of SqliteDBLink::filesWithSize
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
86
diff
changeset
|
251 QDateTime mtime = query.value(dateIndex).toDateTime(); |
|
9e337bd96bd3
Improve efficiency of SqliteDBLink::filesWithSize
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
86
diff
changeset
|
252 QByteArray checksum = query.value(checksumIndex).toByteArray(); |
|
9e337bd96bd3
Improve efficiency of SqliteDBLink::filesWithSize
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
86
diff
changeset
|
253 |
|
9e337bd96bd3
Improve efficiency of SqliteDBLink::filesWithSize
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
86
diff
changeset
|
254 values << |
|
9e337bd96bd3
Improve efficiency of SqliteDBLink::filesWithSize
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
86
diff
changeset
|
255 FileDBLink::dbinf_ptr_t(new FileDBLink::DBInfo(path, |
|
9e337bd96bd3
Improve efficiency of SqliteDBLink::filesWithSize
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
86
diff
changeset
|
256 size, mtime, checksum)); |
|
9e337bd96bd3
Improve efficiency of SqliteDBLink::filesWithSize
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
86
diff
changeset
|
257 } |
|
9e337bd96bd3
Improve efficiency of SqliteDBLink::filesWithSize
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
86
diff
changeset
|
258 |
|
9e337bd96bd3
Improve efficiency of SqliteDBLink::filesWithSize
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
86
diff
changeset
|
259 return values; |
|
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
|
260 } |
|
93
308a718812ba
Small refactoring to allow lazy commits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
92
diff
changeset
|
261 |
|
94
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
262 void SqliteDBLink::executeOperation(QVariantList& paths, |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
263 QVariantList& sizes, |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
264 QVariantList& mtimes, |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
265 QVariantList& checksums, |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
266 OperationType operation) |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
267 { |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
268 assert(paths.size() == sizes.size()); |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
269 assert(paths.size() == mtimes.size()); |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
270 assert(paths.size() == checksums.size()); |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
271 QSqlQuery* query; |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
272 switch (operation) { |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
273 case Add: |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
274 query = preparedTryAddQuery; |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
275 break; |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
276 case Update: |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
277 query = preparedUpdateQuery; |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
278 break; |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
279 case None: |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
280 assert(paths.size() == 0); |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
281 return; |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
282 } |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
283 query->bindValue("path", paths); |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
284 query->bindValue("size", sizes); |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
285 query->bindValue("mtime", mtimes); |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
286 query->bindValue("checksum", checksums); |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
287 |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
288 if (!query->execBatch()) |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
289 throw SQLException(*query); |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
290 |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
291 paths.clear(); |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
292 sizes.clear(); |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
293 mtimes.clear(); |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
294 checksums.clear(); |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
295 } |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
296 |
|
96
c7da835ea912
Support for prefix in commit.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
95
diff
changeset
|
297 bool SqliteDBLink::commit(const QString& prefix) |
|
93
308a718812ba
Small refactoring to allow lazy commits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
92
diff
changeset
|
298 { |
|
94
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
299 OperationType last = None; |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
300 QVariantList paths, sizes, mtimes, hashes; |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
301 |
|
93
308a718812ba
Small refactoring to allow lazy commits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
92
diff
changeset
|
302 foreach(const Operation& operation, operations) { |
|
94
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
303 if (operation.second != last) { |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
304 executeOperation(paths, sizes, mtimes, hashes, last); |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
305 } |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
306 |
|
93
308a718812ba
Small refactoring to allow lazy commits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
92
diff
changeset
|
307 switch (operation.second) { |
|
308a718812ba
Small refactoring to allow lazy commits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
92
diff
changeset
|
308 case Add: |
|
94
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
309 case Update: |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
310 paths.push_back(operation.first.path()); |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
311 sizes.push_back(operation.first.size()); |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
312 mtimes.push_back(operation.first.mtime()); |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
313 hashes.push_back(operation.first.checksum()); |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
314 case None: |
|
93
308a718812ba
Small refactoring to allow lazy commits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
92
diff
changeset
|
315 break; |
|
308a718812ba
Small refactoring to allow lazy commits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
92
diff
changeset
|
316 } |
|
94
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
317 last = operation.second; |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
318 } |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
319 if (last != None) { |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
320 executeOperation(paths, sizes, mtimes, hashes, last); |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
321 } |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
322 |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
323 QSqlQuery whatToUpdate(db); |
|
96
c7da835ea912
Support for prefix in commit.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
95
diff
changeset
|
324 QString whatToUpdateQuery = "SELECT path FROM files WHERE checksum is NULL AND size in (SELECT size FROM files WHERE size <> 0 GROUP BY size HAVING count(*) > 1 ORDER BY SIZE) %1 ORDER BY size"; |
|
c7da835ea912
Support for prefix in commit.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
95
diff
changeset
|
325 if (prefix.isEmpty()) { |
|
c7da835ea912
Support for prefix in commit.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
95
diff
changeset
|
326 whatToUpdateQuery = whatToUpdateQuery.arg(""); |
|
c7da835ea912
Support for prefix in commit.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
95
diff
changeset
|
327 } |
|
c7da835ea912
Support for prefix in commit.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
95
diff
changeset
|
328 else { |
|
c7da835ea912
Support for prefix in commit.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
95
diff
changeset
|
329 whatToUpdateQuery = whatToUpdateQuery.arg("AND path LIKE :prefix"); |
|
c7da835ea912
Support for prefix in commit.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
95
diff
changeset
|
330 } |
|
c7da835ea912
Support for prefix in commit.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
95
diff
changeset
|
331 whatToUpdate.prepare(whatToUpdateQuery); |
|
c7da835ea912
Support for prefix in commit.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
95
diff
changeset
|
332 if (!prefix.isEmpty()) { |
|
c7da835ea912
Support for prefix in commit.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
95
diff
changeset
|
333 whatToUpdate.bindValue("prefix", QString("%1%").arg(prefix)); |
|
c7da835ea912
Support for prefix in commit.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
95
diff
changeset
|
334 } |
|
c7da835ea912
Support for prefix in commit.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
95
diff
changeset
|
335 |
|
94
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
336 if (!whatToUpdate.exec()) { |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
337 throw SQLException(whatToUpdate); |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
338 } |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
339 |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
340 int pathIndex = whatToUpdate.record().indexOf("path"); |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
341 QStringList updatePaths; |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
342 while (whatToUpdate.next()) { |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
343 updatePaths << whatToUpdate.value(pathIndex).toString(); |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
344 } |
|
95
7c935d3d5b74
Better signify when starting update of checksums.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
94
diff
changeset
|
345 int n = 0; |
|
94
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
346 int max = updatePaths.size(); |
|
95
7c935d3d5b74
Better signify when starting update of checksums.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
94
diff
changeset
|
347 emit progressUpdate(0, max); |
|
94
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
348 QSqlQuery updateChecksum(db); |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
349 updateChecksum.prepare("UPDATE files " |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
350 "SET checksum=:checksum " |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
351 "WHERE path=:path"); |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
352 |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
353 foreach (const QString& path, updatePaths) { |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
354 QByteArray ohash = computeHash(path); |
|
93
308a718812ba
Small refactoring to allow lazy commits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
92
diff
changeset
|
355 emit progressUpdate(++n, max); |
|
94
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
356 updateChecksum.bindValue("checksum", ohash); |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
357 updateChecksum.bindValue("path", path); |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
358 if (!updateChecksum.exec()) |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
359 throw SQLException(updateChecksum); |
|
93981e675d67
Full support for bulkcommits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
93
diff
changeset
|
360 |
|
93
308a718812ba
Small refactoring to allow lazy commits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
92
diff
changeset
|
361 } |
|
308a718812ba
Small refactoring to allow lazy commits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
92
diff
changeset
|
362 return true; |
|
308a718812ba
Small refactoring to allow lazy commits.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents:
92
diff
changeset
|
363 } |
