Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
lmdb_transaction.hpp
Go to the documentation of this file.
1#pragma once
4#include "lmdb.h"
5#include <cstdint>
6#include <functional>
7#include <vector>
8
9namespace bb::lmdblib {
10
11/*
12 * Abstract base class to represent and LMDB transaction.
13 * Needs to be sub-classed to be either a read or write transaction.
14 */
15
21
22class LMDBDatabase;
23
25 public:
26 LMDBTransaction(LMDBEnvironment::SharedPtr env, bool readOnly = false);
27 LMDBTransaction(const LMDBTransaction& other) = delete;
29 LMDBTransaction& operator=(const LMDBTransaction& other) = delete;
31
32 virtual ~LMDBTransaction() = 0;
33
34 MDB_txn* underlying() const;
35
36 uint64_t id() const;
37
38 /*
39 * Rolls back the transaction.
40 * Must be called by read transactions to signal the end of the transaction.
41 * Must be called by write transactions if the changes are not to be committed.
42 */
43 virtual void abort();
44
45 template <typename T, typename K>
47 K& data,
48 const LMDBDatabase& db,
49 const std::function<bool(const MDB_val&)>& is_valid) const;
50
51 template <typename T, typename K> bool get_value_or_previous(T& key, K& data, const LMDBDatabase& db) const;
52
53 template <typename T, typename K> bool get_value_or_greater(T& key, K& data, const LMDBDatabase& db) const;
54
55 template <typename T> bool get_value(T& key, std::vector<uint8_t>& data, const LMDBDatabase& db) const;
56
57 template <typename T> bool get_value(T& key, uint64_t& data, const LMDBDatabase& db) const;
58
59 template <typename T>
61 std::vector<std::vector<uint8_t>>& data,
62 const LMDBDatabase& db) const;
63
64 template <typename T>
66 std::vector<std::vector<uint8_t>>& data,
67 const LMDBDatabase& db) const;
68
69 bool get_value(std::vector<uint8_t>& key, std::vector<uint8_t>& data, const LMDBDatabase& db) const;
70
71 bool get_value(std::vector<uint8_t>& key, uint64_t& data, const LMDBDatabase& db) const;
72
73 protected:
74 std::shared_ptr<LMDBEnvironment> _environment;
75 uint64_t _id;
76 MDB_txn* _transaction;
78};
79
80template <typename T> bool LMDBTransaction::get_value(T& key, std::vector<uint8_t>& data, const LMDBDatabase& db) const
81{
82 std::vector<uint8_t> keyBuffer = serialise_key(key);
83 return get_value(keyBuffer, data, db);
84}
85
86template <typename T> bool LMDBTransaction::get_value(T& key, uint64_t& data, const LMDBDatabase& db) const
87{
88 std::vector<uint8_t> keyBuffer = serialise_key(key);
89 return get_value(keyBuffer, data, db);
90}
91
92template <typename T, typename K>
94{
96}
97
98template <typename T, typename K>
100{
101 return lmdb_queries::get_value_or_greater(key, data, db, *this);
102}
103
104template <typename T, typename K>
106 K& data,
107 const LMDBDatabase& db,
108 const std::function<bool(const MDB_val&)>& is_valid) const
109{
110 return lmdb_queries::get_value_or_previous(key, data, db, is_valid, *this);
111}
112
113template <typename T>
115 std::vector<std::vector<uint8_t>>& data,
116 const LMDBDatabase& db) const
117{
119}
120
121template <typename T>
123 std::vector<std::vector<uint8_t>>& data,
124 const LMDBDatabase& db) const
125{
127}
128} // namespace bb::lmdblib
std::shared_ptr< LMDBEnvironment > SharedPtr
bool get_value_or_greater(T &key, K &data, const LMDBDatabase &db) const
bool get_value(T &key, std::vector< uint8_t > &data, const LMDBDatabase &db) const
void get_all_values_greater_or_equal_key(const T &key, std::vector< std::vector< uint8_t > > &data, const LMDBDatabase &db) const
void get_all_values_lesser_or_equal_key(const T &key, std::vector< std::vector< uint8_t > > &data, const LMDBDatabase &db) const
LMDBTransaction(LMDBEnvironment::SharedPtr env, bool readOnly=false)
LMDBTransaction(const LMDBTransaction &other)=delete
LMDBTransaction & operator=(const LMDBTransaction &other)=delete
LMDBTransaction & operator=(LMDBTransaction &&other)=delete
std::shared_ptr< LMDBEnvironment > _environment
bool get_value_or_previous(T &key, K &data, const LMDBDatabase &db, const std::function< bool(const MDB_val &)> &is_valid) const
LMDBTransaction(LMDBTransaction &&other)=delete
const std::vector< FF > data
void get_all_values_greater_or_equal_key(const TKey &key, ValuesVector &data, const LMDBDatabase &db, const TxType &tx)
Definition queries.hpp:222
bool get_value_or_greater(TKey &key, Value &data, const LMDBDatabase &db, const TxType &tx)
Definition queries.hpp:183
bool get_value_or_previous(TKey &key, TValue &data, const LMDBDatabase &db, const TxType &tx)
Definition queries.hpp:20
void get_all_values_lesser_or_equal_key(const TKey &key, ValuesVector &data, const LMDBDatabase &db, const TxType &tx)
Definition queries.hpp:312
std::vector< uint8_t > serialise_key(uint8_t key)