29 }
catch (std::exception& e) {
31 throw std::runtime_error(
format(
"Unable to create database: ", name,
" Error: ", e.what()));
46 throw std::runtime_error(
format(
"Database ", name,
" not found"));
58 throw std::runtime_error(
format(
"Database ", name,
" not found"));
69 dbs.push_back(db.second);
79 for (
const auto& p :
puts) {
82 throw std::runtime_error(
format(
"Database ", p.name,
" not found"));
84 dbs.push_back(
it->second);
93 for (
const auto& db :
dbs) {
94 stats.push_back(db->get_stats(*tx));
104 for (
size_t i = 0;
i <
data.size();
i++) {
108 }
catch (std::exception& e) {
110 throw std::runtime_error(
format(
"Failed to commit data",
" Error: ", e.what()));
124 for (
auto&
kd : toWrite) {
125 for (
auto& p :
kd.second) {
129 for (
auto&
kd : toDelete) {
130 if (!
kd.second.has_value()) {
134 for (
auto& p :
kd.second.value()) {
141 values.reserve(keys.size());
143 if (!db->duplicate_keys_permitted()) {
145 for (
auto& k : keys) {
156 for (
auto& k : keys) {
157 if (!cursor->set_at_key(k)) {
171 for (
auto&
vals :
kv.second) {
188 for (
const auto&
entry : entries) {
196 results.reserve(entries.size());
198 for (
const auto&
entry : entries) {
203 if (
key_it == keys.end()) {
204 results.push_back(
false);
208 const auto& values =
vals[
static_cast<size_t>(
key_it - keys.begin())];
210 if (!values.has_value()) {
211 results.push_back(
false);
216 results.push_back(
true);
221 return std::find(values->begin(), values->end(), val) != values->end();
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
void has(const KeyOptionalValuesVector &entries, std::vector< bool > &results, const std::string &name)
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< MemoryValue > data
std::vector< Key > KeysVector
std::vector< uint8_t > Key
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