27 }
catch (std::exception& e) {
29 throw std::runtime_error(
format(
"Unable to create database: ", name,
" Error: ", e.what()));
44 throw std::runtime_error(
format(
"Database ", name,
" not found"));
56 throw std::runtime_error(
format(
"Database ", name,
" not found"));
67 dbs.push_back(db.second);
77 for (
const auto& p :
puts) {
80 throw std::runtime_error(
format(
"Database ", p.name,
" not found"));
82 dbs.push_back(
it->second);
91 for (
const auto& db :
dbs) {
92 stats.push_back(db->get_stats(*tx));
102 for (
size_t i = 0;
i <
data.size();
i++) {
106 }
catch (std::exception& e) {
108 throw std::runtime_error(
format(
"Failed to commit data",
" Error: ", e.what()));
122 for (
auto&
kd : toWrite) {
123 for (
auto& p :
kd.second) {
127 for (
auto&
kd : toDelete) {
128 if (!
kd.second.has_value()) {
132 for (
auto& p :
kd.second.value()) {
139 values.reserve(keys.size());
141 if (!db->duplicate_keys_permitted()) {
143 for (
auto&
k : keys) {
154 for (
auto&
k : keys) {
155 if (!cursor->set_at_key(
k)) {
169 for (
auto&
vals :
kv.second) {
std::unique_ptr< LMDBCursor > Ptr
std::unique_ptr< LMDBDatabaseCreationTransaction > Ptr
std::shared_ptr< LMDBDatabase > SharedPtr
std::shared_ptr< LMDBReadTransaction > SharedPtr
LMDBEnvironment::SharedPtr _environment
LMDBDatabaseCreationTransaction::Ptr create_db_transaction() const
WriteTransaction::Ptr create_write_transaction() const
ReadTransaction::Ptr create_read_transaction() const
std::vector< Database::SharedPtr > get_databases() const
Database::SharedPtr get_database(const std::string &name)
void open_database(const std::string &name, bool duplicateKeysPermitted=false)
std::pair< uint64_t, uint64_t > get_stats(std::vector< DBStats > &stats) const
void close_database(const std::string &name)
LMDBStore(std::string directory, uint64_t mapSizeKb, uint64_t maxNumReaders, uint64_t maxDbs)
void put(std::vector< PutData > &data)
std::mutex databasesMutex
std::unordered_map< std::string, LMDBDatabase::SharedPtr > databases
Cursor::Ptr create_cursor(ReadTransaction::SharedPtr tx, const std::string &dbName)
void get(KeysVector &keys, OptionalValuesVector &values, const std::string &name)
std::unique_ptr< LMDBWriteTransaction > Ptr
void put_value(T &key, Value &data, const LMDBDatabase &db)
void delete_value(T &key, const LMDBDatabase &db)
std::string format(Args... args)
const std::vector< FF > data
std::vector< Key > KeysVector
std::vector< uint8_t > Value
std::vector< KeyValuesPair > KeyDupValuesVector
std::vector< OptionalValues > OptionalValuesVector
std::vector< Value > ValuesVector
std::vector< KeyOptionalValuesPair > KeyOptionalValuesVector
std::optional< ValuesVector > OptionalValues
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept