Revert "Remove mysql and oracle resources for anna-ericsson project"
[anna.git] / include / anna / dbms.oracle / Connection.hpp
diff --git a/include/anna/dbms.oracle/Connection.hpp b/include/anna/dbms.oracle/Connection.hpp
new file mode 100644 (file)
index 0000000..2259d9e
--- /dev/null
@@ -0,0 +1,73 @@
+// ANNA - Anna is Not Nothingness Anymore                                                         //
+//                                                                                                //
+// (c) Copyright 2005-2015 Eduardo Ramos Testillano & Francisco Ruiz Rayo                         //
+//                                                                                                //
+// See project site at http://redmine.teslayout.com/projects/anna-suite                           //
+// See accompanying file LICENSE or copy at http://www.teslayout.com/projects/public/anna.LICENSE //
+
+
+#ifndef anna_dbms_oracle_Connection_hpp
+#define anna_dbms_oracle_Connection_hpp
+
+struct OCIServer;
+struct OCISession;
+struct OCISvcCtx;
+
+#include <anna/dbms/Connection.hpp>
+#include <anna/dbms/DatabaseException.hpp>
+
+namespace anna {
+
+namespace dbms {
+
+class Database;
+
+namespace oracle {
+
+class Database;
+
+/**
+   Clase que modela la conexion con el RDBMS Oracle (tm).
+
+   Esta clase no puede usarse directamente, ya que la capa ANNA.dbms obliga a que todas las peticiones
+   se hagan atraves de una instancia anna::dbms::Connection.
+
+   Para obtener una conexion a una determinada base de datos habra que instanciar dicha base de datos
+   e invocar al metodo createConnection. Independientemente del tipo de conexion particular que la
+   base de datos retorne, debemos asignarlo a un puntero de tipo anna::dbms::Connection.
+*/
+class Connection : public dbms::Connection {
+public:
+  /**
+     Devuelve una cadena con la informacion referente a esta instancia.
+     @return Una cadena con la informacion referente a esta instancia.
+  */
+  std::string asString() const throw();
+
+  /**
+     Operador de conversion.
+     \return El puntero al contexto asociado a este conexion.
+  */
+  operator OCISvcCtx*() throw() { return a_context; }
+
+private:
+  Database& a_oracleDatabase;
+  OCISvcCtx* a_context;
+  OCISession* a_session;
+  OCIServer* a_server;
+
+  Connection(Database& database, const std::string& name, const char* user, const char* password);
+  bool isAvailable() const throw(RuntimeException) { return a_context != NULL && a_session != NULL && a_server != NULL; }
+  void do_commit() throw(RuntimeException, DatabaseException);
+  void do_rollback() throw();
+  void open() throw(DatabaseException);
+  void close() throw();
+
+  friend class anna::dbms::oracle::Database;
+};
+
+}
+}
+}
+
+#endif