Revert "Remove mysql and oracle resources for anna-ericsson project"
[anna.git] / include / anna / dbms.mysql / Connection.hpp
diff --git a/include/anna/dbms.mysql/Connection.hpp b/include/anna/dbms.mysql/Connection.hpp
new file mode 100644 (file)
index 0000000..ea817c3
--- /dev/null
@@ -0,0 +1,72 @@
+// 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_mysql_Connection_hpp
+#define anna_dbms_mysql_Connection_hpp
+
+
+#include <anna/dbms/Connection.hpp>
+#include <anna/dbms/DatabaseException.hpp>
+
+#include <anna/dbms.mysql/forward.hpp>
+
+namespace anna {
+
+namespace dbms {
+
+class Database;
+
+namespace mysql {
+
+class Database;
+
+/**
+   Clase que modela la conexion con el RDBMS MySQL (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 entorno asociado a esta base de datos.
+  */
+  operator st_mysql*() throw() { return a_mysql; }
+
+private:
+  Database& a_mysqlDatabase;
+  st_mysql* a_mysql;
+
+  Connection(Database& database, const std::string& name, const char* user, const char* password);
+
+  bool isAvailable() const throw(RuntimeException) { return a_mysql != NULL; }
+
+  void do_commit() throw(RuntimeException, DatabaseException);
+  void do_rollback() throw();
+  void open() throw(DatabaseException);
+  void close() throw();
+
+  friend class anna::dbms::mysql::Database;
+};
+
+}
+}
+}
+
+#endif