summaryrefslogtreecommitdiffstats
path: root/common/storage_lmdb.cpp
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2015-10-29 17:52:45 +0100
committerChristian Mollekopf <chrigi_1@fastmail.fm>2015-10-29 17:52:45 +0100
commit0a2d20c474206553d5c981fd2a772188083101e9 (patch)
tree37a46837b4fa93834a9380ee02ef4188786e9acd /common/storage_lmdb.cpp
parent70faf80be4146b17a59f9616404b21625d7400f6 (diff)
downloadsink-0a2d20c474206553d5c981fd2a772188083101e9.tar.gz
sink-0a2d20c474206553d5c981fd2a772188083101e9.zip
Updated the index on modifications and removals.
Misses tests.
Diffstat (limited to 'common/storage_lmdb.cpp')
-rw-r--r--common/storage_lmdb.cpp17
1 files changed, 14 insertions, 3 deletions
diff --git a/common/storage_lmdb.cpp b/common/storage_lmdb.cpp
index be5a9da..1516e69 100644
--- a/common/storage_lmdb.cpp
+++ b/common/storage_lmdb.cpp
@@ -149,6 +149,12 @@ bool Storage::NamedDatabase::write(const QByteArray &sKey, const QByteArray &sVa
149void Storage::NamedDatabase::remove(const QByteArray &k, 149void Storage::NamedDatabase::remove(const QByteArray &k,
150 const std::function<void(const Storage::Error &error)> &errorHandler) 150 const std::function<void(const Storage::Error &error)> &errorHandler)
151{ 151{
152 remove(k, QByteArray(), errorHandler);
153}
154
155void Storage::NamedDatabase::remove(const QByteArray &k, const QByteArray &value,
156 const std::function<void(const Storage::Error &error)> &errorHandler)
157{
152 if (!d || !d->transaction) { 158 if (!d || !d->transaction) {
153 Error error(d->name.toLatin1(), ErrorCodes::GenericError, "Not open"); 159 Error error(d->name.toLatin1(), ErrorCodes::GenericError, "Not open");
154 if (d) { 160 if (d) {
@@ -161,14 +167,19 @@ void Storage::NamedDatabase::remove(const QByteArray &k,
161 MDB_val key; 167 MDB_val key;
162 key.mv_size = k.size(); 168 key.mv_size = k.size();
163 key.mv_data = const_cast<void*>(static_cast<const void*>(k.data())); 169 key.mv_data = const_cast<void*>(static_cast<const void*>(k.data()));
164 rc = mdb_del(d->transaction, d->dbi, &key, 0); 170 if (value.isEmpty()) {
171 rc = mdb_del(d->transaction, d->dbi, &key, 0);
172 } else {
173 MDB_val data;
174 data.mv_size = value.size();
175 data.mv_data = const_cast<void*>(static_cast<const void*>(value.data()));
176 rc = mdb_del(d->transaction, d->dbi, &key, &data);
177 }
165 178
166 if (rc) { 179 if (rc) {
167 Error error(d->name.toLatin1(), ErrorCodes::GenericError, QString("Error on mdb_del: %1 %2").arg(rc).arg(mdb_strerror(rc)).toLatin1()); 180 Error error(d->name.toLatin1(), ErrorCodes::GenericError, QString("Error on mdb_del: %1 %2").arg(rc).arg(mdb_strerror(rc)).toLatin1());
168 errorHandler ? errorHandler(error) : d->defaultErrorHandler(error); 181 errorHandler ? errorHandler(error) : d->defaultErrorHandler(error);
169 } 182 }
170
171 return;
172} 183}
173 184
174int Storage::NamedDatabase::scan(const QByteArray &k, 185int Storage::NamedDatabase::scan(const QByteArray &k,