ANNA Suite  2020b
Multipurpose development suite for Telco applications
Database.hpp
Go to the documentation of this file.
1 // ANNA - Anna is Not Nothingness Anymore //
2 // //
3 // (c) Copyright 2005-2015 Eduardo Ramos Testillano & Francisco Ruiz Rayo //
4 // //
5 // See project site at http://redmine.teslayout.com/projects/anna-suite //
6 // See accompanying file LICENSE or copy at http://www.teslayout.com/projects/public/anna.LICENSE //
7 
8 
9 #ifndef anna_dbms_Database_hpp
10 #define anna_dbms_Database_hpp
11 
12 #include <vector>
13 
14 #include <anna/app/Component.hpp>
15 
16 #include <anna/dbms/Connection.hpp>
17 
18 namespace anna {
19 
20 namespace comm {
21 class INetAddress;
22 class Delivery;
23 }
24 
25 namespace dbms {
26 
27 class Statement;
28 class InputBind;
29 class OutputBind;
30 class Data;
31 class FailRecoveryHandler;
32 class StatementTranslator;
33 
37 class Database : public app::Component {
38 public:
42  static const int MaxConnection = 32;
43 
47  struct Type {
48  enum _v { Local, Remote } value;
49  Type() : value(Local) {;}
50  Type(const _v v) : value(v) {;}
51  Type(const Type& v) : value(v.value) {;}
52  operator int () const { return value; }
53  };
54 
55  typedef std::vector <Connection*>::const_iterator const_connection_iterator;
56  typedef std::vector <Statement*>::const_iterator const_statement_iterator;
61  virtual ~Database();
62 
67  const Type& getType() const { return a_type; }
68 
73  const std::string& getName() const { return a_name; }
74 
81  void setFailRecoveryHandler(FailRecoveryHandler* failRecoveryHandler) { a_failRecoveryHandler = failRecoveryHandler; }
82 
87  void setStatementTranslator(StatementTranslator* statementTranslator) { a_statementTranslator = statementTranslator; }
88 
100  Connection* createConnection(const char* name, const char* user, const char* password)
101  noexcept(false);
102 
109  Connection& findConnection(const char* name) noexcept(false);
110 
115  const_connection_iterator connection_begin() const { return a_connections.begin(); }
116 
121  const_connection_iterator connection_end() const { return a_connections.end(); }
122 
136  Statement* createStatement(const char* name, const char* expression, const bool isCritical = true)
137  noexcept(false);
138 
152  Statement* createStatement(const char* name, const std::string& expression, const bool isCritical = true)
153  noexcept(false) {
154  return createStatement(name, expression.c_str(), isCritical);
155  }
156 
163  Statement* findStatement(const char* name) ;
164 
170  void releaseStatement(Statement* statement) ;
171 
176  const_statement_iterator statement_begin() const { return a_statements.begin(); }
177 
182  const_statement_iterator statement_end() const { return a_statements.end(); }
183 
189  static Statement* statement(const_statement_iterator& ii) { return *ii; }
190 
195  virtual std::string asString() const ;
196 
202  virtual xml::Node* asXML(xml::Node* parent) const ;
203 
209  static const Connection* connection(const_connection_iterator& ii) { return *ii; }
210 
211 protected:
212  typedef std::vector <Connection*>::iterator connection_iterator;
219  Database(const char* rdbmsmsName, const char* dbmsName);
220 
228  void recover(Connection& connection, const int tryCounter) noexcept(false);
229 
236  virtual void do_initialize() noexcept(false);
237 
242  virtual void do_stop() ;
243 
248  connection_iterator connection_begin() { return a_connections.begin(); }
249 
254  connection_iterator connection_end() { return a_connections.end(); }
255 
261  static Connection* connection(connection_iterator& ii) { return *ii; }
262 
263 private:
264  const std::string a_name;
265  std::vector <Connection*> a_connections;
266  std::vector <Statement*> a_statements;
267  const Type a_type;
268  FailRecoveryHandler* a_failRecoveryHandler;
269  StatementTranslator* a_statementTranslator;
270 
271  Database(const Database&);
272 
273  void do_cloneChild() noexcept(false);
274 
275  virtual Connection* allocateConnection(const std::string& name, const char* user, const char* password)
276  noexcept(false) = 0;
277 
278  virtual Statement* allocateStatement(const char* name, const std::string& expression, const bool isCritical)
279  noexcept(false) = 0;
280 
281  virtual InputBind* allocateInputBind(const char* name, Data& data)
282  noexcept(false) = 0;
283  virtual void deallocate(InputBind* inputBind) = 0;
284 
285  virtual OutputBind* allocateOutputBind(const char* name, Data& data)
286  noexcept(false) = 0;
287  virtual void deallocate(OutputBind* outputBind) = 0;
288 
289  friend class Statement;
290  friend ResultCode Connection::execute(Statement*) noexcept(false);
291 };
292 
293 }
294 }
295 
296 #endif
_v
Definition: Database.hpp:48
connection_iterator connection_end()
Definition: Database.hpp:254
Definition: Connection.hpp:38
std::vector< Connection * >::iterator connection_iterator
Definition: Database.hpp:212
static const Connection * connection(const_connection_iterator &ii)
Definition: Database.hpp:209
const Type & getType() const
Definition: Database.hpp:67
Definition: Node.hpp:56
Type(const _v v)
Definition: Database.hpp:50
const_connection_iterator connection_end() const
Definition: Database.hpp:121
void setStatementTranslator(StatementTranslator *statementTranslator)
Definition: Database.hpp:87
Definition: Statement.hpp:43
Statement * createStatement(const char *name, const std::string &expression, const bool isCritical=true) noexcept(false)
Definition: Database.hpp:152
std::vector< Statement * >::const_iterator const_statement_iterator
Definition: Database.hpp:56
const_statement_iterator statement_begin() const
Definition: Database.hpp:176
Definition: Database.hpp:37
Definition: Data.hpp:27
Definition: Database.hpp:47
Definition: OutputBind.hpp:26
const_statement_iterator statement_end() const
Definition: Database.hpp:182
const std::string & getName() const
Definition: Database.hpp:73
void setFailRecoveryHandler(FailRecoveryHandler *failRecoveryHandler)
Definition: Database.hpp:81
const_connection_iterator connection_begin() const
Definition: Database.hpp:115
Type()
Definition: Database.hpp:49
Definition: app.hpp:12
Definition: StatementTranslator.hpp:44
Definition: Component.hpp:44
Type(const Type &v)
Definition: Database.hpp:51
static Connection * connection(connection_iterator &ii)
Definition: Database.hpp:261
static Statement * statement(const_statement_iterator &ii)
Definition: Database.hpp:189
Definition: ResultCode.hpp:29
Definition: FailRecoveryHandler.hpp:23
Definition: InputBind.hpp:18
std::vector< Connection * >::const_iterator const_connection_iterator
Definition: Database.hpp:55