#include "../lmdb-safe.hh" #include #include using namespace std; using namespace LMDBSafe; template struct Pair { First first; Second second; }; int main(int argc, char **) { auto env = getMDBEnv("./resize.lmdb", MDB_NOSUBDIR | MDB_NOSYNC, 0600); auto main = env->openDB("ahu", MDB_CREATE); MDBInVal key("counter"); auto rwtxn = env->getRWTransaction(); rwtxn->put(main, "counter", "1234"); rwtxn->put(main, MDBInVal::fromStruct(Pair{ 12, 13 }), "hoi dan 12,13"); rwtxn->put(main, MDBInVal::fromStruct(Pair{ 14, 15 }), MDBInVal::fromStruct(Pair{ 20, 23 })); MDBOutVal out; if (!rwtxn->get(main, MDBInVal::fromStruct(Pair{ 12, 13 }), out)) cout << "Got: " << out.get() << endl; else cout << "Got nothing!1" << endl; if (!rwtxn->get(main, MDBInVal::fromStruct(Pair{ 14, 15 }), out)) { auto res = out.get_struct>(); cout << "Got: " << res.first << ", " << res.second << endl; } else cout << "Got nothing!1" << endl; rwtxn->put(main, 12.12, 7.3); if (!rwtxn->get(main, 12.12, out)) { cout << "Got: " << out.get() << endl; } else cout << "Got nothing!1" << endl; rwtxn->commit(); return 0; if (argc == 1) { for (;;) { auto rotxn = env->getROTransaction(); MDBOutVal data; if (!rotxn->get(main, key, data)) { cout << "Counter is " << data.get() << endl; cout << data.get() << endl; cout << data.get() << endl; struct Bert { std::uint16_t x, y; }; auto b = data.get_struct(); cout << b.x << " " << b.y << endl; cout << data.get() << endl; } else cout << "Didn't find it" << endl; exit(1); } } else { std::size_t size = 1ULL * 4096 * 244140ULL; for (unsigned int n = 0;; ++n) { if (!(n % 16384)) { size += 16384; if (int rc = mdb_env_set_mapsize(*env.get(), size)) throw std::runtime_error("Resizing: " + string(mdb_strerror(rc))); cout << "Did resize" << endl; } auto txn = env->getRWTransaction(); txn->put(main, key, MDBInVal(n)); for (unsigned int k = 0; k < 100; ++k) txn->put(main, MDBInVal(n + 1000 * k), MDBInVal(n + 1000 * k)); txn->commit(); } } }