hyperledger/iroha
Iroha - A simple, decentralized ledger http://iroha.tech
postgres_command_executor.hpp
Go to the documentation of this file.
1 
6 #ifndef IROHA_POSTGRES_COMMAND_EXECUTOR_HPP
7 #define IROHA_POSTGRES_COMMAND_EXECUTOR_HPP
8 
9 #include <optional>
11 
14 
15 namespace soci {
16  class session;
17 }
18 
19 namespace shared_model {
20  namespace interface {
21  class AddAssetQuantity;
22  class AddPeer;
23  class AddSignatory;
24  class AppendRole;
25  class CompareAndSetAccountDetail;
26  class CallEngine;
27  class CreateAccount;
28  class CreateAsset;
29  class CreateDomain;
30  class CreateRole;
31  class DetachRole;
32  class GrantPermission;
33  class PermissionToString;
34  class RemovePeer;
35  class RemoveSignatory;
36  class RevokePermission;
37  class SetAccountDetail;
38  class SetQuorum;
39  class SubtractAssetQuantity;
40  class TransferAsset;
41  class SetSettingValue;
42  } // namespace interface
43 } // namespace shared_model
44 
45 namespace iroha {
46  namespace ametsuchi {
47 
48  class PostgresSpecificQueryExecutor;
49  class VmCaller;
50 
52  public:
54  std::unique_ptr<soci::session> sql,
55  std::shared_ptr<shared_model::interface::PermissionToString>
56  perm_converter,
57  std::shared_ptr<PostgresSpecificQueryExecutor>
58  specific_query_executor,
59  std::optional<std::reference_wrapper<const VmCaller>> vm_caller);
60 
62 
66  &creator_account_id,
67  const std::string &tx_hash,
69  bool do_validation) override;
70 
71  void skipChanges() override;
72 
73  DatabaseTransaction &dbSession() override;
74 
75  soci::session &getSession();
76 
77  CommandResult operator()(
80  &creator_account_id,
81  const std::string &tx_hash,
83  bool do_validation);
84 
85  CommandResult operator()(
86  const shared_model::interface::AddPeer &command,
88  &creator_account_id,
89  const std::string &tx_hash,
91  bool do_validation);
92 
93  CommandResult operator()(
96  &creator_account_id,
97  const std::string &tx_hash,
99  bool do_validation);
100 
101  CommandResult operator()(
104  &creator_account_id,
105  const std::string &tx_hash,
107  bool do_validation);
108 
109  CommandResult operator()(
112  &creator_account_id,
113  const std::string &tx_hash,
115  bool do_validation);
116 
117  CommandResult operator()(
120  &creator_account_id,
121  const std::string &tx_hash,
123  bool do_validation);
124 
125  CommandResult operator()(
128  &creator_account_id,
129  const std::string &tx_hash,
131  bool do_validation);
132 
133  CommandResult operator()(
136  &creator_account_id,
137  const std::string &tx_hash,
139  bool do_validation);
140 
141  CommandResult operator()(
144  &creator_account_id,
145  const std::string &tx_hash,
147  bool do_validation);
148 
149  CommandResult operator()(
152  &creator_account_id,
153  const std::string &tx_hash,
155  bool do_validation);
156 
157  CommandResult operator()(
160  &creator_account_id,
161  const std::string &tx_hash,
163  bool do_validation);
164 
165  CommandResult operator()(
168  &creator_account_id,
169  const std::string &tx_hash,
171  bool do_validation);
172 
173  CommandResult operator()(
176  &creator_account_id,
177  const std::string &tx_hash,
179  bool do_validation);
180 
181  CommandResult operator()(
184  &creator_account_id,
185  const std::string &tx_hash,
187  bool do_validation);
188 
189  CommandResult operator()(
192  &creator_account_id,
193  const std::string &tx_hash,
195  bool do_validation);
196 
197  CommandResult operator()(
200  &creator_account_id,
201  const std::string &tx_hash,
203  bool do_validation);
204 
205  CommandResult operator()(
206  const shared_model::interface::SetQuorum &command,
208  &creator_account_id,
209  const std::string &tx_hash,
211  bool do_validation);
212 
213  CommandResult operator()(
216  &creator_account_id,
217  const std::string &tx_hash,
219  bool do_validation);
220 
221  CommandResult operator()(
224  &creator_account_id,
225  const std::string &tx_hash,
227  bool do_validation);
228 
229  CommandResult operator()(
232  &creator_account_id,
233  const std::string &,
235  bool do_validation);
236 
237  private:
238  class CommandStatements;
239  class StatementExecutor;
240 
241  void initStatements();
242 
243  std::unique_ptr<CommandStatements> makeCommandStatements(
244  const std::unique_ptr<soci::session> &session,
245  const std::string &base_statement,
246  const std::vector<std::string> &permission_checks);
247 
248  std::unique_ptr<soci::session> sql_;
249  PostgresDbTransaction db_transaction_;
250 
251  std::shared_ptr<shared_model::interface::PermissionToString>
252  perm_converter_;
253  std::shared_ptr<PostgresSpecificQueryExecutor> specific_query_executor_;
254  std::optional<std::reference_wrapper<const VmCaller>> vm_caller_;
255 
256  std::unique_ptr<CommandStatements> add_asset_quantity_statements_;
257  std::unique_ptr<CommandStatements> add_peer_statements_;
258  std::unique_ptr<CommandStatements> add_signatory_statements_;
259  std::unique_ptr<CommandStatements> append_role_statements_;
260  std::unique_ptr<CommandStatements>
261  compare_and_set_account_detail_statements_;
262  std::unique_ptr<CommandStatements> create_account_statements_;
263  std::unique_ptr<CommandStatements> create_asset_statements_;
264  std::unique_ptr<CommandStatements> create_domain_statements_;
265  std::unique_ptr<CommandStatements> create_role_statements_;
266  std::unique_ptr<CommandStatements> detach_role_statements_;
267  std::unique_ptr<CommandStatements> grant_permission_statements_;
268  std::unique_ptr<CommandStatements> remove_peer_statements_;
269  std::unique_ptr<CommandStatements> remove_signatory_statements_;
270  std::unique_ptr<CommandStatements> revoke_permission_statements_;
271  std::unique_ptr<CommandStatements> set_account_detail_statements_;
272  std::unique_ptr<CommandStatements> set_quorum_statements_;
273  std::unique_ptr<CommandStatements> store_engine_response_statements_;
274  std::unique_ptr<CommandStatements> subtract_asset_quantity_statements_;
275  std::unique_ptr<CommandStatements> transfer_asset_statements_;
276  std::unique_ptr<CommandStatements> set_setting_value_statements_;
277  };
278  } // namespace ametsuchi
279 } // namespace iroha
280 
281 #endif // IROHA_POSTGRES_COMMAND_EXECUTOR_HPP
Definition: compare_and_set_account_detail.hpp:21
Definition: add_signatory.hpp:19
Definition: block_query.hpp:17
Definition: set_quorum.hpp:18
Definition: subtract_asset_quantity.hpp:20
Definition: set_setting_value.hpp:19
Definition: result_fwd.hpp:27
Definition: postgres_command_executor.cpp:389
Definition: detach_role.hpp:19
Definition: remove_signatory.hpp:18
Definition: create_asset.hpp:18
Definition: postgres_command_executor.cpp:350
Definition: call_engine.hpp:20
Definition: remove_peer.hpp:19
Definition: append_role.hpp:19
Definition: transfer_asset.hpp:19
Definition: block_query.hpp:15
Definition: postgres_command_executor.hpp:51
std::string AccountIdType
Type of account id.
Definition: types.hpp:38
Definition: command_executor.hpp:48
Definition: create_domain.hpp:18
Definition: create_account.hpp:19
WsvCommandResult execute(soci::statement &st, Function &&error)
Definition: postgres_wsv_command.cpp:26
Definition: grant_permission.hpp:19
Definition: set_account_detail.hpp:19
Definition: db_transaction.hpp:13
Definition: revoke_permission.hpp:19
Definition: command.hpp:41
int32_t CommandIndexType
Type of command index within a transaction.
Definition: types.hpp:100
Definition: add_asset_quantity.hpp:20
Definition: create_role.hpp:19
Definition: command_executor.hpp:13
Definition: pool_wrapper.hpp:11
Definition: add_peer.hpp:20
Definition: postgres_db_transaction.hpp:15