#include "../lmdb-safe.hh" #include #include using namespace std; using namespace LMDBSafe; void countDB(MDBEnv &env, MDBROTransaction &txn, const std::string &dbname) { CPP_UTILITIES_UNUSED(env) auto db = txn->openDB(dbname, 0); auto cursor = txn->getCursor(db); std::uint32_t count = 0; MDBOutVal key, val; while (!cursor.get(key, val, count ? MDB_NEXT : MDB_FIRST)) { cout << key.get(); if (key.d_mdbval.mv_size == 4) cout << " " << key.get(); cout << ": " << val.get(); cout << "\n"; ++count; } cout << count << endl; } int main(int argc, char **argv) { if (argc < 2) { cout << "No database file specified.\n"; return 0; } MDBEnv env(argv[1], MDB_RDONLY | MDB_NOSUBDIR, 0600); auto main = env.openDB("", 0); auto txn = env.getROTransaction(); auto cursor = txn->getCursor(main); MDBOutVal key, val; if (cursor.get(key, val, MDB_FIRST)) { cout << "Database is empty" << endl; } do { cout << key.get() << endl; countDB(env, txn, key.get()); } while (!cursor.get(key, val, MDB_NEXT)); }