X-Git-Url: https://git.teslayout.com/public/public/public/?a=blobdiff_plain;f=include%2Fanna%2Fdbms.mysql%2FDatabase.hpp;fp=include%2Fanna%2Fdbms.mysql%2FDatabase.hpp;h=b9ad79eb9cf5373a79b1f781233768eafc7124b5;hb=78be86969d2f26a9084b0c4af6ce43d5fa4ed3fd;hp=0000000000000000000000000000000000000000;hpb=a3b95648bd76140ef55e0b5941d423eee6c3856f;p=anna.git diff --git a/include/anna/dbms.mysql/Database.hpp b/include/anna/dbms.mysql/Database.hpp new file mode 100644 index 0000000..b9ad79e --- /dev/null +++ b/include/anna/dbms.mysql/Database.hpp @@ -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 +#include + +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