bool LMDBKVStore::getValue(const std::string& key, std::string& value)
{
try {
- auto transaction = d_env.getROTransaction();
+ auto transaction = d_env->getROTransaction();
MDBOutVal result;
int rc = transaction->get(d_dbi, MDBInVal(key), result);
if (rc == 0) {
bool LMDBKVStore::keyExists(const std::string& key)
{
try {
- auto transaction = d_env.getROTransaction();
+ auto transaction = d_env->getROTransaction();
MDBOutVal result;
int rc = transaction->get(d_dbi, MDBInVal(key), result);
if (rc == 0) {
bool LMDBKVStore::getRangeValue(const std::string& key, std::string& value)
{
try {
- auto transaction = d_env.getROTransaction();
+ auto transaction = d_env->getROTransaction();
auto cursor = transaction->getROCursor(d_dbi);
MDBOutVal actualKey;
MDBOutVal result;
class LMDBKVStore: public KeyValueStore
{
public:
- LMDBKVStore(const std::string& fname, const std::string& dbName, bool noLock=false): d_env(fname.c_str(), noLock ? MDB_NOSUBDIR|MDB_RDONLY|MDB_NOLOCK : MDB_NOSUBDIR|MDB_RDONLY, 0600, 0), d_dbi(d_env.openDB(dbName, 0)), d_fname(fname), d_dbName(dbName)
+ LMDBKVStore(const std::string& fname, const std::string& dbName, bool noLock=false): d_env(getMDBEnv(fname.c_str(), noLock ? MDB_NOSUBDIR|MDB_RDONLY|MDB_NOLOCK : MDB_NOSUBDIR|MDB_RDONLY, 0600, 0)), d_dbi(d_env->openDB(dbName, 0)), d_fname(fname), d_dbName(dbName)
{
}
bool getRangeValue(const std::string& key, std::string& value) override;
private:
- MDBEnv d_env;
+ std::shared_ptr<MDBEnv> d_env;
MDBDbi d_dbi;
std::string d_fname;
std::string d_dbName;