annotate MemoryDBLink.cpp @ 92:f49023c61dac

Support for bulk insertion.
author Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
date Mon, 21 Oct 2013 20:03:39 +0200
parents af7962f3274b
children 6c6f3a5f96ea
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
aae83c0a771d Refactor:
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 0
diff changeset
1 #include "MemoryDBLink.hpp"
73
c9447697609f Fixed some issues with raise.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents: 64
diff changeset
2 #include "Exception/ValueExistsException.hpp"
0
a3834af36579 Working with memory backend.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
3 #include <QtCore/QStringList>
a3834af36579 Working with memory backend.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
4
86
af7962f3274b Use quint64 for sizes, rather than qint64.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents: 73
diff changeset
5 void MemoryDBLink::addFile(const QString& path, quint64 size,
92
f49023c61dac Support for bulk insertion.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents: 86
diff changeset
6 const QDateTime& dtime, const QByteArray& hash, bool)
0
a3834af36579 Working with memory backend.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
7 {
7
d6fdca3bf24e Make sure everything works for MemoryDBLink.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
8 addFile(DBInfo(path, size, dtime, hash));
0
a3834af36579 Working with memory backend.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
9 }
a3834af36579 Working with memory backend.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
10
1
aae83c0a771d Refactor:
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 0
diff changeset
11 bool MemoryDBLink::tryAddFile(const DBInfo& dbinfo)
0
a3834af36579 Working with memory backend.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
12 {
64
b9515dc35fe4 Make sure no file has greater linewidth than 80.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 7
diff changeset
13 QMap<QString, dbinf_ptr_t >::iterator pos;
0
a3834af36579 Working with memory backend.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
14 pos = entries.find(dbinfo.path());
a3834af36579 Working with memory backend.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
15 if (pos == entries.end()) {
64
b9515dc35fe4 Make sure no file has greater linewidth than 80.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 7
diff changeset
16 entries.insert(dbinfo.path(), dbinf_ptr_t(new DBInfo(dbinfo)));
0
a3834af36579 Working with memory backend.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
17 return true;
a3834af36579 Working with memory backend.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
18 }
a3834af36579 Working with memory backend.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
19 return false;
a3834af36579 Working with memory backend.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
20 }
a3834af36579 Working with memory backend.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
21
1
aae83c0a771d Refactor:
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 0
diff changeset
22 void MemoryDBLink::addFile(const DBInfo& dbinfo)
0
a3834af36579 Working with memory backend.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
23 {
a3834af36579 Working with memory backend.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
24 if (!tryAddFile(dbinfo)) {
73
c9447697609f Fixed some issues with raise.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents: 64
diff changeset
25 QString msg = QString("Trying to add '%1', which already exists").arg(dbinfo.path());
c9447697609f Fixed some issues with raise.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents: 64
diff changeset
26 throw ValueExistsException(msg);
0
a3834af36579 Working with memory backend.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
27 }
a3834af36579 Working with memory backend.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
28 }
a3834af36579 Working with memory backend.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
29
a3834af36579 Working with memory backend.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
30
1
aae83c0a771d Refactor:
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 0
diff changeset
31 QStringList MemoryDBLink::toStringList()
0
a3834af36579 Working with memory backend.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
32 {
a3834af36579 Working with memory backend.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
33 QStringList list;
64
b9515dc35fe4 Make sure no file has greater linewidth than 80.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 7
diff changeset
34 foreach(dbinf_ptr_t info, entries) {
0
a3834af36579 Working with memory backend.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
35 list << info->serialize();
a3834af36579 Working with memory backend.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
36 }
a3834af36579 Working with memory backend.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
37 return list;
a3834af36579 Working with memory backend.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
38 }
a3834af36579 Working with memory backend.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
39
64
b9515dc35fe4 Make sure no file has greater linewidth than 80.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 7
diff changeset
40 const QList<FileDBLink::dbinf_ptr_t>
b9515dc35fe4 Make sure no file has greater linewidth than 80.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 7
diff changeset
41 MemoryDBLink::values(const QString& prefix) const
7
d6fdca3bf24e Make sure everything works for MemoryDBLink.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
42 {
d6fdca3bf24e Make sure everything works for MemoryDBLink.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
43 if (prefix.size() == 0)
d6fdca3bf24e Make sure everything works for MemoryDBLink.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
44 return entries.values();
d6fdca3bf24e Make sure everything works for MemoryDBLink.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
45
64
b9515dc35fe4 Make sure no file has greater linewidth than 80.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 7
diff changeset
46 QList<FileDBLink::dbinf_ptr_t > list;
7
d6fdca3bf24e Make sure everything works for MemoryDBLink.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
47 foreach (QString key, entries.keys()) {
d6fdca3bf24e Make sure everything works for MemoryDBLink.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
48 if (key.startsWith(prefix))
d6fdca3bf24e Make sure everything works for MemoryDBLink.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
49 list << entries[key];
d6fdca3bf24e Make sure everything works for MemoryDBLink.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
50 }
d6fdca3bf24e Make sure everything works for MemoryDBLink.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
51 return list;
d6fdca3bf24e Make sure everything works for MemoryDBLink.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
52 }
d6fdca3bf24e Make sure everything works for MemoryDBLink.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
53
d6fdca3bf24e Make sure everything works for MemoryDBLink.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
54
d6fdca3bf24e Make sure everything works for MemoryDBLink.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
55 void MemoryDBLink::deleteFileFromDB(const QString& path)
d6fdca3bf24e Make sure everything works for MemoryDBLink.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
56 {
d6fdca3bf24e Make sure everything works for MemoryDBLink.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
57 entries.remove(path);
d6fdca3bf24e Make sure everything works for MemoryDBLink.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
58 }
d6fdca3bf24e Make sure everything works for MemoryDBLink.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
59
d6fdca3bf24e Make sure everything works for MemoryDBLink.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
60
64
b9515dc35fe4 Make sure no file has greater linewidth than 80.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 7
diff changeset
61 void MemoryDBLink::keepOnlyFromPrefix(const QString& prefix,
b9515dc35fe4 Make sure no file has greater linewidth than 80.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 7
diff changeset
62 const QStringList& files)
0
a3834af36579 Working with memory backend.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
63 {
7
d6fdca3bf24e Make sure everything works for MemoryDBLink.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
64 QStringList list;
64
b9515dc35fe4 Make sure no file has greater linewidth than 80.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 7
diff changeset
65 foreach(dbinf_ptr_t info, values(prefix)) {
7
d6fdca3bf24e Make sure everything works for MemoryDBLink.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
66 if (!files.contains(info->path())) {
d6fdca3bf24e Make sure everything works for MemoryDBLink.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
67 list << info->path();
d6fdca3bf24e Make sure everything works for MemoryDBLink.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
68 }
d6fdca3bf24e Make sure everything works for MemoryDBLink.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
69 }
d6fdca3bf24e Make sure everything works for MemoryDBLink.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
70 foreach(QString path, list) {
d6fdca3bf24e Make sure everything works for MemoryDBLink.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
71 deleteFileFromDB(path);
d6fdca3bf24e Make sure everything works for MemoryDBLink.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
72 }
0
a3834af36579 Working with memory backend.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
73 }
7
d6fdca3bf24e Make sure everything works for MemoryDBLink.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
74
64
b9515dc35fe4 Make sure no file has greater linewidth than 80.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 7
diff changeset
75 FileDBLink::DBStatus MemoryDBLink::existsWithMtime(const QString& path,
b9515dc35fe4 Make sure no file has greater linewidth than 80.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 7
diff changeset
76 const QDateTime& mtime)
7
d6fdca3bf24e Make sure everything works for MemoryDBLink.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
77 {
d6fdca3bf24e Make sure everything works for MemoryDBLink.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
78 if (entries.contains(path)) {
64
b9515dc35fe4 Make sure no file has greater linewidth than 80.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 7
diff changeset
79 dbinf_ptr_t info = entries[path];
7
d6fdca3bf24e Make sure everything works for MemoryDBLink.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
80 if (info->mtime() == mtime)
d6fdca3bf24e Make sure everything works for MemoryDBLink.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
81 return SAME;
d6fdca3bf24e Make sure everything works for MemoryDBLink.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
82 return MTIME_DIFFERENT;
d6fdca3bf24e Make sure everything works for MemoryDBLink.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
83 }
d6fdca3bf24e Make sure everything works for MemoryDBLink.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
84 return NONE;
d6fdca3bf24e Make sure everything works for MemoryDBLink.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
85 }
d6fdca3bf24e Make sure everything works for MemoryDBLink.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
86
86
af7962f3274b Use quint64 for sizes, rather than qint64.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents: 73
diff changeset
87 void MemoryDBLink::updateFile(const QString& path, quint64 size,
92
f49023c61dac Support for bulk insertion.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents: 86
diff changeset
88 const QDateTime& dtime, const QByteArray& hash,
f49023c61dac Support for bulk insertion.
Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
parents: 86
diff changeset
89 bool)
7
d6fdca3bf24e Make sure everything works for MemoryDBLink.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
90 {
d6fdca3bf24e Make sure everything works for MemoryDBLink.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
91 updateFile(DBInfo(path, size, dtime, hash));
d6fdca3bf24e Make sure everything works for MemoryDBLink.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
92 }
d6fdca3bf24e Make sure everything works for MemoryDBLink.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
93
d6fdca3bf24e Make sure everything works for MemoryDBLink.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
94 void MemoryDBLink::updateFile(const DBInfo& dbinfo)
d6fdca3bf24e Make sure everything works for MemoryDBLink.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
95 {
d6fdca3bf24e Make sure everything works for MemoryDBLink.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
96 *entries[dbinfo.path()] = dbinfo;
d6fdca3bf24e Make sure everything works for MemoryDBLink.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
97 }
d6fdca3bf24e Make sure everything works for MemoryDBLink.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
98
d6fdca3bf24e Make sure everything works for MemoryDBLink.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
99