340b5f9645d643884914158eea9657ed86a52d43
[anna.git] / Connection.hpp
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_oracle_Connection_hpp
10 #define anna_dbms_oracle_Connection_hpp
11
12 struct OCIServer;
13 struct OCISession;
14 struct OCISvcCtx;
15
16 #include <anna/dbms/Connection.hpp>
17 #include <anna/dbms/DatabaseException.hpp>
18
19 namespace anna {
20
21 namespace dbms {
22
23 class Database;
24
25 namespace oracle {
26
27 class Database;
28
29 /**
30    Clase que modela la conexion con el RDBMS Oracle (tm).
31
32    Esta clase no puede usarse directamente, ya que la capa ANNA.dbms obliga a que todas las peticiones
33    se hagan atraves de una instancia anna::dbms::Connection.
34
35    Para obtener una conexion a una determinada base de datos habra que instanciar dicha base de datos
36    e invocar al metodo createConnection. Independientemente del tipo de conexion particular que la
37    base de datos retorne, debemos asignarlo a un puntero de tipo anna::dbms::Connection.
38 */
39 class Connection : public dbms::Connection {
40 public:
41   /**
42      Devuelve una cadena con la informacion referente a esta instancia.
43      @return Una cadena con la informacion referente a esta instancia.
44   */
45   std::string asString() const ;
46
47   /**
48      Operador de conversion.
49      \return El puntero al contexto asociado a este conexion.
50   */
51   operator OCISvcCtx*() { return a_context; }
52
53 private:
54   Database& a_oracleDatabase;
55   OCISvcCtx* a_context;
56   OCISession* a_session;
57   OCIServer* a_server;
58
59   Connection(Database& database, const std::string& name, const char* user, const char* password);
60   bool isAvailable() const noexcept(false) { return a_context != NULL && a_session != NULL && a_server != NULL; }
61   void do_commit() noexcept(false);
62   void do_rollback() ;
63   void open() noexcept(false);
64   void close() ;
65
66   friend class anna::dbms::oracle::Database;
67 };
68
69 }
70 }
71 }
72
73 #endif