ANNA Suite  2020b
Multipurpose development suite for Telco applications
Connection.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_Connection_hpp
10 #define anna_dbms_Connection_hpp
11 
12 #include <anna/comm/Resource.hpp>
13 
15 #include <anna/dbms/ResultCode.hpp>
16 
17 namespace anna {
18 
19 namespace xml {
20 class Node;
21 }
22 
23 namespace dbms {
24 
25 class Database;
26 class Statement;
27 
38 class Connection : public comm::Resource {
39 public:
43  Database& getDatabase() const { return a_database; }
44 
49  const std::string& getUser() const { return a_user; }
50 
55  const std::string& getPassword() const { return a_password; }
56 
61  void setPassword(const char* password) { a_password = password; }
62 
73  int setMaxCommitPending(const int maxCommitPending) {
74  const int result = a_maxCommitPending;
75  a_maxCommitPending = maxCommitPending;
76  return result;
77  }
78 
84  void resetRollbackPending() { a_rollbackPending = false; }
85 
91  void activateRollbackPending() { a_rollbackPending = true; }
92 
109  ResultCode execute(Statement* statement) noexcept(false);
110 
115  virtual std::string asString() const ;
116 
122  virtual xml::Node* asXML(xml::Node* parent) const ;
123 
124 protected:
130  std::string a_user;
131  std::string a_password;
141  Connection(Database& database, const std::string& name, const char* user, const char* password) :
142  comm::Resource(name),
143  a_database(database),
144  a_user(user),
145  a_password(password),
146  a_lockingCounter(0),
147  a_commitPending(0),
148  a_rollbackPending(false),
149  a_maxCommitPending(0) {}
150 
154  void commit() noexcept(false);
155 
160  void rollback() ;
161 
165  virtual void open() noexcept(false) = 0;
166 
170  virtual void close() = 0;
171 
172 private:
173  int a_commitPending; // Numero de sentencias a las que no se han fijado cambios.
174  bool a_rollbackPending;
175  int a_maxCommitPending;
176  int a_lockingCounter;
177 
178  Connection(const Connection&);
179 
180  void initialize() noexcept(false);
181  void lock() noexcept(false);
182  void unlock() ;
183 
184  virtual bool do_beginTransaction() noexcept(false) { return false;}
185  virtual void do_commit() noexcept(false) = 0;
186  virtual void do_rollback() = 0;
187 
188  friend class Database;
189 };
190 
191 }
192 }
193 
194 #endif
Database & a_database
Definition: Connection.hpp:129
Definition: Connection.hpp:38
Definition: Node.hpp:56
void resetRollbackPending()
Definition: Connection.hpp:84
Definition: Statement.hpp:43
const std::string & getUser() const
Definition: Connection.hpp:49
Definition: Database.hpp:37
std::string a_password
Definition: Connection.hpp:131
std::string a_user
Definition: Connection.hpp:130
int setMaxCommitPending(const int maxCommitPending)
Definition: Connection.hpp:73
xml::Node Node
Definition: Node.hpp:21
Definition: Resource.hpp:25
Definition: app.hpp:12
Definition: Resource.hpp:26
Database & getDatabase() const
Definition: Connection.hpp:43
Connection(Database &database, const std::string &name, const char *user, const char *password)
Definition: Connection.hpp:141
void activateRollbackPending()
Definition: Connection.hpp:91
void setPassword(const char *password)
Definition: Connection.hpp:61
Definition: ResultCode.hpp:29
const std::string & getPassword() const
Definition: Connection.hpp:55