diff options
Diffstat (limited to 'common/storage_lmdb.cpp')
-rw-r--r-- | common/storage_lmdb.cpp | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/common/storage_lmdb.cpp b/common/storage_lmdb.cpp index 95af3a2..2bffcd7 100644 --- a/common/storage_lmdb.cpp +++ b/common/storage_lmdb.cpp | |||
@@ -204,19 +204,18 @@ void Storage::read(const std::string &sKey, | |||
204 | const std::string resultValue(static_cast<char*>(ptr), size); | 204 | const std::string resultValue(static_cast<char*>(ptr), size); |
205 | return resultHandler(resultValue); | 205 | return resultHandler(resultValue); |
206 | }, errorHandler); | 206 | }, errorHandler); |
207 | // std::cout << "key: " << resultKey << " data: " << resultValue << std::endl; | ||
208 | } | 207 | } |
209 | 208 | ||
210 | void Storage::read(const std::string &sKey, | 209 | void Storage::read(const std::string &sKey, |
211 | const std::function<bool(void *ptr, int size)> &resultHandler, | 210 | const std::function<bool(void *ptr, int size)> &resultHandler, |
212 | const std::function<void(const Storage::Error &error)> &errorHandler) | 211 | const std::function<void(const Storage::Error &error)> &errorHandler) |
213 | { | 212 | { |
214 | scan(sKey, [resultHandler](void *keyPtr, int keySize, void *valuePtr, int valueSize) { | 213 | scan(sKey.data(), sKey.size(), [resultHandler](void *keyPtr, int keySize, void *valuePtr, int valueSize) { |
215 | return resultHandler(valuePtr, valueSize); | 214 | return resultHandler(valuePtr, valueSize); |
216 | }, errorHandler); | 215 | }, errorHandler); |
217 | } | 216 | } |
218 | 217 | ||
219 | void Storage::scan(const std::string &sKey, | 218 | void Storage::scan(const char *keyData, uint keySize, |
220 | const std::function<bool(void *keyPtr, int keySize, void *valuePtr, int valueSize)> &resultHandler, | 219 | const std::function<bool(void *keyPtr, int keySize, void *valuePtr, int valueSize)> &resultHandler, |
221 | const std::function<void(const Storage::Error &error)> &errorHandler) | 220 | const std::function<void(const Storage::Error &error)> &errorHandler) |
222 | { | 221 | { |
@@ -231,8 +230,8 @@ void Storage::scan(const std::string &sKey, | |||
231 | MDB_val data; | 230 | MDB_val data; |
232 | MDB_cursor *cursor; | 231 | MDB_cursor *cursor; |
233 | 232 | ||
234 | key.mv_size = sKey.size(); | 233 | key.mv_data = (void*)keyData; |
235 | key.mv_data = (void*)sKey.data(); | 234 | key.mv_size = keySize; |
236 | 235 | ||
237 | const bool implicitTransaction = !d->transaction; | 236 | const bool implicitTransaction = !d->transaction; |
238 | if (implicitTransaction) { | 237 | if (implicitTransaction) { |
@@ -251,11 +250,13 @@ void Storage::scan(const std::string &sKey, | |||
251 | return; | 250 | return; |
252 | } | 251 | } |
253 | 252 | ||
254 | if (sKey.empty()) { | 253 | if (!keyData || keySize == 0) { |
255 | rc = mdb_cursor_get(cursor, &key, &data, MDB_FIRST); | 254 | if ((rc = mdb_cursor_get(cursor, &key, &data, MDB_FIRST)) == 0 && |
256 | while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT)) == 0) { | 255 | resultHandler(key.mv_data, key.mv_size, data.mv_data, data.mv_size)) { |
257 | if (!resultHandler(key.mv_data, key.mv_size, data.mv_data, data.mv_size)) { | 256 | while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT)) == 0) { |
258 | break; | 257 | if (!resultHandler(key.mv_data, key.mv_size, data.mv_data, data.mv_size)) { |
258 | break; | ||
259 | } | ||
259 | } | 260 | } |
260 | } | 261 | } |
261 | 262 | ||
@@ -267,7 +268,7 @@ void Storage::scan(const std::string &sKey, | |||
267 | if ((rc = mdb_cursor_get(cursor, &key, &data, MDB_SET)) == 0) { | 268 | if ((rc = mdb_cursor_get(cursor, &key, &data, MDB_SET)) == 0) { |
268 | resultHandler(key.mv_data, key.mv_size, data.mv_data, data.mv_size); | 269 | resultHandler(key.mv_data, key.mv_size, data.mv_data, data.mv_size); |
269 | } else { | 270 | } else { |
270 | std::cout << "couldn't find value " << sKey << " " << std::endl; | 271 | std::cout << "couldn't find value " << std::string(keyData, keySize) << std::endl; |
271 | } | 272 | } |
272 | } | 273 | } |
273 | 274 | ||