summaryrefslogtreecommitdiffstats
path: root/common/storage_lmdb.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'common/storage_lmdb.cpp')
-rw-r--r--common/storage_lmdb.cpp48
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
321qint64 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
452QList<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