hyperledger/iroha
Iroha - A simple, decentralized ledger http://iroha.tech
postgres_block_storage.hpp
Go to the documentation of this file.
1 
6 #ifndef IROHA_POSTGRES_BLOCK_STORAGE_HPP
7 #define IROHA_POSTGRES_BLOCK_STORAGE_HPP
8 
10 
15 #include "common/result_fwd.hpp"
17 #include "logger/logger_fwd.hpp"
18 
19 namespace iroha {
20  namespace ametsuchi {
22  public:
24 
26  std::string>
27  create(std::shared_ptr<PoolWrapper> pool_wrapper,
28  std::shared_ptr<BlockTransportFactory> block_factory,
29  std::string table_name,
30  // IR-910 23.09.2020 @lebdron: refactor with separate classes
31  bool drop_table_at_destruction,
32  logger::LoggerPtr log);
33 
34  ~PostgresBlockStorage() override;
35 
36  bool insert(
37  std::shared_ptr<const shared_model::interface::Block> block) override;
38 
39  boost::optional<std::unique_ptr<shared_model::interface::Block>> fetch(
40  shared_model::interface::types::HeightType height) const override;
41 
42  size_t size() const override;
43 
44  void reload() override;
45 
46  void clear() override;
47 
49  FunctionType function) const override;
50 
51  private:
52  struct HeightRange {
55  };
56 
57  PostgresBlockStorage(std::shared_ptr<PoolWrapper> pool_wrapper,
58  std::shared_ptr<BlockTransportFactory> block_factory,
59  std::string table,
60  bool drop_table_at_destruction,
61  boost::optional<HeightRange> height_range,
62  logger::LoggerPtr log);
63 
65  queryBlockHeightsRange(soci::session &sql, const std::string &table_name);
66 
67  void dropTable();
68 
69  mutable boost::optional<HeightRange> block_height_range_;
70  std::shared_ptr<PoolWrapper> pool_wrapper_;
71  std::shared_ptr<BlockTransportFactory> block_factory_;
72  std::string table_name_;
73  bool drop_table_at_destruction_;
74  logger::LoggerPtr log_;
75  };
76 
77  } // namespace ametsuchi
78 } // namespace iroha
79 
80 #endif // IROHA_POSTGRES_BLOCK_STORAGE_HPP
void reload() override
Definition: postgres_block_storage.cpp:149
uint64_t HeightType
Type of height (for Block, Proposal etc)
Definition: types.hpp:48
static const model::converters::PbBlockFactory block_factory
Definition: sha3_hash.cpp:15
std::function< expected::Result< void, std::string >(std::shared_ptr< const shared_model::interface::Block >)> FunctionType
type of function which can be applied to the elements of the storage
Definition: block_storage.hpp:56
size_t size() const override
Definition: postgres_block_storage.cpp:141
Definition: block_storage.hpp:23
bool insert(std::shared_ptr< const shared_model::interface::Block > block) override
Definition: postgres_block_storage.cpp:55
expected::Result< void, std::string > forEach(FunctionType function) const override
Definition: postgres_block_storage.cpp:164
static iroha::expected::Result< std::unique_ptr< PostgresBlockStorage >, std::string > create(std::shared_ptr< PoolWrapper > pool_wrapper, std::shared_ptr< BlockTransportFactory > block_factory, std::string table_name, bool drop_table_at_destruction, logger::LoggerPtr log)
Definition: postgres_block_storage.cpp:17
Definition: result_fwd.hpp:27
std::shared_ptr< Logger > LoggerPtr
Definition: logger_fwd.hpp:22
boost::optional< std::unique_ptr< shared_model::interface::Block > > fetch(shared_model::interface::types::HeightType height) const override
Definition: postgres_block_storage.cpp:99
Definition: block_query.hpp:15
Definition: postgres_block_storage.hpp:21
void clear() override
Definition: postgres_block_storage.cpp:153
~PostgresBlockStorage() override
Definition: postgres_block_storage.cpp:49
Definition: proto_block_factory.hpp:21