Revert "Remove mysql and oracle resources for anna-ericsson project"
[anna.git] / include / anna / dbms.mysql / Database.hpp
diff --git a/include/anna/dbms.mysql/Database.hpp b/include/anna/dbms.mysql/Database.hpp
new file mode 100644 (file)
index 0000000..b9ad79e
--- /dev/null
@@ -0,0 +1,105 @@
+// 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_Database_hpp
+#define anna_dbms_mysql_Database_hpp
+
+#include <anna/dbms/Database.hpp>
+#include <anna/dbms/DatabaseException.hpp>
+
+namespace anna {
+
+namespace dbms {
+
+namespace mysql {
+
+/**
+   Clase que modela la interaccion entre la RDMS MySQL (tm) y nuestra aplicacion.
+*/
+class Database : public dbms::Database {
+public:
+  /**
+     Contructor.
+     \param dbmsName Nombre de la base de datos.
+     \param host Identificador de la máquina anfitriona, que se usará para hacer las conexiones. Puede ser NULL.
+     \see http://dev.mysql.com/doc/refman/4.1/en/mysql-real-connect.html
+  */
+  Database(const char* dbmsName, const char* host);
+
+  /**
+     Contructor.
+     \param componentName Nombre logico de la base de datos por que el podemos buscar este componente.
+     \param dbmsName Nombre de la base de datos.
+     \param host Identificador de la máquina anfitriona, que se usará para hacer las conexiones. Puede ser NULL.
+     \see http://dev.mysql.com/doc/refman/4.1/en/mysql-real-connect.html
+  */
+  Database(const char* componentName, const char* dbmsName, const char* host);
+
+  /**
+     Destructor.
+  */
+  virtual ~Database();
+
+  /**
+   * Devuelve el nombre de la máquina anfitriona indicado en el constructor.
+   * \return El nombre de la máquina anfitriona indicado en el constructor.
+   */
+  const char* getHost() const throw() { return a_host; }
+
+  /**
+     Devuelve la cadena por la que podemos buscar el componente.
+     \return La cadena por la que podemos buscar el componente.
+     \see Application::find
+  */
+  static const char* getClassName() { return "anna::dbms::mysql::Database"; }
+
+private:
+  char* a_host;
+
+  void do_initialize() throw(RuntimeException);
+
+  dbms::Connection* allocateConnection(const std::string& name, const char* user, const char* password)
+  throw(RuntimeException);
+
+  dbms::Statement* allocateStatement(const char* name, const std::string& expression, const bool isCritical)
+  throw(RuntimeException);
+
+  dbms::InputBind* allocateInputBind(const char* name, Data&)
+  throw(RuntimeException);
+  void deallocate(dbms::InputBind* inputBind) throw();
+
+  dbms::OutputBind* allocateOutputBind(const char* name, Data&)
+  throw(RuntimeException);
+  void deallocate(dbms::OutputBind* outputBind) throw();
+};
+
+#ifdef ANNA_RDBMS_TRACE
+#define anna_dbms_mysql_check(a,_mysql) \
+    { \
+       Logger::write (Logger::Debug, (#a), __FILE__, __LINE__); \
+       const int status = (a); \
+       if (status != 0) { \
+          anna::dbms::mysql::ResultCode resultCode ((_mysql)); \
+          throw DatabaseException (resultCode, __FILE__, __LINE__);  \
+       } \
+    }
+#else
+#define anna_dbms_mysql_check(a,_mysql) \
+    { \
+       const int status = (a); \
+       if (status != 0) { \
+          anna::dbms::mysql::ResultCode resultCode ((_mysql)); \
+          throw DatabaseException (resultCode, __FILE__, __LINE__);  \
+       } \
+    }
+#endif
+}
+}
+}
+
+#endif