diff options
Diffstat (limited to 'common/storage_lmdb.cpp')
-rw-r--r-- | common/storage_lmdb.cpp | 48 |
1 files changed, 47 insertions, 1 deletions
diff --git a/common/storage_lmdb.cpp b/common/storage_lmdb.cpp index a247e38..e32618b 100644 --- a/common/storage_lmdb.cpp +++ b/common/storage_lmdb.cpp | |||
@@ -318,6 +318,27 @@ void Storage::NamedDatabase::findLatest(const QByteArray &k, | |||
318 | return; | 318 | return; |
319 | } | 319 | } |
320 | 320 | ||
321 | qint64 Storage::NamedDatabase::getSize() | ||
322 | { | ||
323 | if (!d || !d->transaction) { | ||
324 | return -1; | ||
325 | } | ||
326 | |||
327 | int rc; | ||
328 | MDB_stat stat; | ||
329 | rc = mdb_stat(d->transaction, d->dbi, &stat); | ||
330 | if (rc) { | ||
331 | qWarning() << "Something went wrong " << rc; | ||
332 | } | ||
333 | // std::cout << "overflow_pages: " << stat.ms_overflow_pages << std::endl; | ||
334 | // std::cout << "page size: " << stat.ms_psize << std::endl; | ||
335 | // std::cout << "branch_pages: " << stat.ms_branch_pages << std::endl; | ||
336 | // std::cout << "leaf_pages: " << stat.ms_leaf_pages << std::endl; | ||
337 | // std::cout << "depth: " << stat.ms_depth << std::endl; | ||
338 | // std::cout << "entries: " << stat.ms_entries << std::endl; | ||
339 | return stat.ms_psize * (stat.ms_leaf_pages + stat.ms_branch_pages + stat.ms_overflow_pages); | ||
340 | } | ||
341 | |||
321 | 342 | ||
322 | 343 | ||
323 | 344 | ||
@@ -428,9 +449,34 @@ Storage::NamedDatabase Storage::Transaction::openDatabase(const QByteArray &db, | |||
428 | return Storage::NamedDatabase(p); | 449 | return Storage::NamedDatabase(p); |
429 | } | 450 | } |
430 | 451 | ||
452 | QList<QByteArray> Storage::Transaction::getDatabaseNames() const | ||
453 | { | ||
454 | if (!d) { | ||
455 | qWarning() << "Invalid transaction"; | ||
456 | return QList<QByteArray>(); | ||
457 | } | ||
431 | 458 | ||
459 | int rc; | ||
460 | QList<QByteArray> list; | ||
461 | if ((rc = mdb_dbi_open(d->transaction, nullptr, 0, &d->dbi) == 0)) { | ||
462 | MDB_val key; | ||
463 | MDB_val data; | ||
464 | MDB_cursor *cursor; | ||
432 | 465 | ||
433 | 466 | rc = mdb_cursor_open(d->transaction, d->dbi, &cursor); | |
467 | if ((rc = mdb_cursor_get(cursor, &key, &data, MDB_FIRST)) == 0) { | ||
468 | list << QByteArray::fromRawData((char*)key.mv_data, key.mv_size); | ||
469 | while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT)) == 0) { | ||
470 | list << QByteArray::fromRawData((char*)key.mv_data, key.mv_size); | ||
471 | } | ||
472 | } else { | ||
473 | qWarning() << "Failed to get a value" << rc; | ||
474 | } | ||
475 | } else { | ||
476 | qWarning() << "Failed to open db" << rc << QByteArray(mdb_strerror(rc)); | ||
477 | } | ||
478 | return list; | ||
479 | } | ||
434 | 480 | ||
435 | 481 | ||
436 | 482 | ||