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 
13 
14 namespace soci {
15  class session;
16 }
17 
18 namespace shared_model {
19  namespace interface {
20  class AddAssetQuantity;
21  class AddPeer;
22  class AddSignatory;
23  class AppendRole;
24  class CompareAndSetAccountDetail;
25  class CallEngine;
26  class CreateAccount;
27  class CreateAsset;
28  class CreateDomain;
29  class CreateRole;
30  class DetachRole;
31  class GrantPermission;
32  class PermissionToString;
33  class RemovePeer;
34  class RemoveSignatory;
35  class RevokePermission;
36  class SetAccountDetail;
37  class SetQuorum;
38  class SubtractAssetQuantity;
39  class TransferAsset;
40  class SetSettingValue;
41  } // namespace interface
42 } // namespace shared_model
43 
44 namespace iroha {
45  namespace ametsuchi {
46 
47  class PostgresSpecificQueryExecutor;
48  class VmCaller;
49 
51  public:
53  std::unique_ptr<soci::session> sql,
54  std::shared_ptr<shared_model::interface::PermissionToString>
55  perm_converter,
56  std::shared_ptr<PostgresSpecificQueryExecutor>
57  specific_query_executor,
58  std::optional<std::reference_wrapper<const VmCaller>> vm_caller);
59 
61 
65  &creator_account_id,
66  const std::string &tx_hash,
68  bool do_validation) override;
69 
70  soci::session &getSession();
71 
72  CommandResult operator()(
75  &creator_account_id,
76  const std::string &tx_hash,
78  bool do_validation);
79 
80  CommandResult operator()(
81  const shared_model::interface::AddPeer &command,
83  &creator_account_id,
84  const std::string &tx_hash,
86  bool do_validation);
87 
88  CommandResult operator()(
91  &creator_account_id,
92  const std::string &tx_hash,
94  bool do_validation);
95 
96  CommandResult operator()(
99  &creator_account_id,
100  const std::string &tx_hash,
102  bool do_validation);
103 
104  CommandResult operator()(
107  &creator_account_id,
108  const std::string &tx_hash,
110  bool do_validation);
111 
112  CommandResult operator()(
115  &creator_account_id,
116  const std::string &tx_hash,
118  bool do_validation);
119 
120  CommandResult operator()(
123  &creator_account_id,
124  const std::string &tx_hash,
126  bool do_validation);
127 
128  CommandResult operator()(
131  &creator_account_id,
132  const std::string &tx_hash,
134  bool do_validation);
135 
136  CommandResult operator()(
139  &creator_account_id,
140  const std::string &tx_hash,
142  bool do_validation);
143 
144  CommandResult operator()(
147  &creator_account_id,
148  const std::string &tx_hash,
150  bool do_validation);
151 
152  CommandResult operator()(
155  &creator_account_id,
156  const std::string &tx_hash,
158  bool do_validation);
159 
160  CommandResult operator()(
163  &creator_account_id,
164  const std::string &tx_hash,
166  bool do_validation);
167 
168  CommandResult operator()(
171  &creator_account_id,
172  const std::string &tx_hash,
174  bool do_validation);
175 
176  CommandResult operator()(
179  &creator_account_id,
180  const std::string &tx_hash,
182  bool do_validation);
183 
184  CommandResult operator()(
187  &creator_account_id,
188  const std::string &tx_hash,
190  bool do_validation);
191 
192  CommandResult operator()(
195  &creator_account_id,
196  const std::string &tx_hash,
198  bool do_validation);
199 
200  CommandResult operator()(
201  const shared_model::interface::SetQuorum &command,
203  &creator_account_id,
204  const std::string &tx_hash,
206  bool do_validation);
207 
208  CommandResult operator()(
211  &creator_account_id,
212  const std::string &tx_hash,
214  bool do_validation);
215 
216  CommandResult operator()(
219  &creator_account_id,
220  const std::string &tx_hash,
222  bool do_validation);
223 
224  CommandResult operator()(
227  &creator_account_id,
228  const std::string &,
230  bool do_validation);
231 
232  private:
233  class CommandStatements;
234  class StatementExecutor;
235 
236  void initStatements();
237 
238  std::unique_ptr<CommandStatements> makeCommandStatements(
239  const std::unique_ptr<soci::session> &session,
240  const std::string &base_statement,
241  const std::vector<std::string> &permission_checks);
242 
243  std::unique_ptr<soci::session> sql_;
244 
245  std::shared_ptr<shared_model::interface::PermissionToString>
246  perm_converter_;
247  std::shared_ptr<PostgresSpecificQueryExecutor> specific_query_executor_;
248  std::optional<std::reference_wrapper<const VmCaller>> vm_caller_;
249 
250  std::unique_ptr<CommandStatements> add_asset_quantity_statements_;
251  std::unique_ptr<CommandStatements> add_peer_statements_;
252  std::unique_ptr<CommandStatements> add_signatory_statements_;
253  std::unique_ptr<CommandStatements> append_role_statements_;
254  std::unique_ptr<CommandStatements>
255  compare_and_set_account_detail_statements_;
256  std::unique_ptr<CommandStatements> create_account_statements_;
257  std::unique_ptr<CommandStatements> create_asset_statements_;
258  std::unique_ptr<CommandStatements> create_domain_statements_;
259  std::unique_ptr<CommandStatements> create_role_statements_;
260  std::unique_ptr<CommandStatements> detach_role_statements_;
261  std::unique_ptr<CommandStatements> grant_permission_statements_;
262  std::unique_ptr<CommandStatements> remove_peer_statements_;
263  std::unique_ptr<CommandStatements> remove_signatory_statements_;
264  std::unique_ptr<CommandStatements> revoke_permission_statements_;
265  std::unique_ptr<CommandStatements> set_account_detail_statements_;
266  std::unique_ptr<CommandStatements> set_quorum_statements_;
267  std::unique_ptr<CommandStatements> store_engine_response_statements_;
268  std::unique_ptr<CommandStatements> subtract_asset_quantity_statements_;
269  std::unique_ptr<CommandStatements> transfer_asset_statements_;
270  std::unique_ptr<CommandStatements> set_setting_value_statements_;
271  };
272  } // namespace ametsuchi
273 } // namespace iroha
274 
275 #endif // IROHA_POSTGRES_COMMAND_EXECUTOR_HPP
Definition: compare_and_set_account_detail.hpp:21
Definition: add_signatory.hpp:19
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:388
Definition: detach_role.hpp:19
Definition: remove_signatory.hpp:18
Definition: create_asset.hpp:18
Definition: postgres_command_executor.cpp:349
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:50
std::string AccountIdType
Type of account id.
Definition: types.hpp:38
Definition: command_executor.hpp:43
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: revoke_permission.hpp:19
Definition: command.hpp:41
int32_t CommandIndexType
Type of command index within a transaction.
Definition: types.hpp:97
Definition: add_asset_quantity.hpp:20
Definition: create_role.hpp:19
Definition: command_executor.hpp:12
Definition: pool_wrapper.hpp:11
Definition: add_peer.hpp:20