Add no-deprecated to warnings due to dynamic exceptions.
[anna.git] / include / anna / dbms.mysql / Database.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_mysql_Database_hpp
10 #define anna_dbms_mysql_Database_hpp
11
12 #include <anna/dbms/Database.hpp>
13 #include <anna/dbms/DatabaseException.hpp>
14
15 namespace anna {
16
17 namespace dbms {
18
19 namespace mysql {
20
21 /**
22    Clase que modela la interaccion entre la RDMS MySQL (tm) y nuestra aplicacion.
23 */
24 class Database : public dbms::Database {
25 public:
26   /**
27      Contructor.
28      \param dbmsName Nombre de la base de datos.
29      \param host Identificador de la máquina anfitriona, que se usará para hacer las conexiones. Puede ser NULL.
30      \see http://dev.mysql.com/doc/refman/4.1/en/mysql-real-connect.html
31   */
32   Database(const char* dbmsName, const char* host);
33
34   /**
35      Contructor.
36      \param componentName Nombre logico de la base de datos por que el podemos buscar este componente.
37      \param dbmsName Nombre de la base de datos.
38      \param host Identificador de la máquina anfitriona, que se usará para hacer las conexiones. Puede ser NULL.
39      \see http://dev.mysql.com/doc/refman/4.1/en/mysql-real-connect.html
40   */
41   Database(const char* componentName, const char* dbmsName, const char* host);
42
43   /**
44      Destructor.
45   */
46   virtual ~Database();
47
48   /**
49    * Devuelve el nombre de la máquina anfitriona indicado en el constructor.
50    * \return El nombre de la máquina anfitriona indicado en el constructor.
51    */
52   const char* getHost() const throw() { return a_host; }
53
54   /**
55      Devuelve la cadena por la que podemos buscar el componente.
56      \return La cadena por la que podemos buscar el componente.
57      \see Application::find
58   */
59   static const char* getClassName() { return "anna::dbms::mysql::Database"; }
60
61 private:
62   char* a_host;
63
64   void do_initialize() throw(RuntimeException);
65
66   dbms::Connection* allocateConnection(const std::string& name, const char* user, const char* password)
67   throw(RuntimeException);
68
69   dbms::Statement* allocateStatement(const char* name, const std::string& expression, const bool isCritical)
70   throw(RuntimeException);
71
72   dbms::InputBind* allocateInputBind(const char* name, Data&)
73   throw(RuntimeException);
74   void deallocate(dbms::InputBind* inputBind) throw();
75
76   dbms::OutputBind* allocateOutputBind(const char* name, Data&)
77   throw(RuntimeException);
78   void deallocate(dbms::OutputBind* outputBind) throw();
79 };
80
81 #ifdef ANNA_RDBMS_TRACE
82 #define anna_dbms_mysql_check(a,_mysql) \
83     { \
84        Logger::write (Logger::Debug, (#a), __FILE__, __LINE__); \
85        const int status = (a); \
86        if (status != 0) { \
87           anna::dbms::mysql::ResultCode resultCode ((_mysql)); \
88           throw DatabaseException (resultCode, __FILE__, __LINE__);  \
89        } \
90     }
91 #else
92 #define anna_dbms_mysql_check(a,_mysql) \
93     { \
94        const int status = (a); \
95        if (status != 0) { \
96           anna::dbms::mysql::ResultCode resultCode ((_mysql)); \
97           throw DatabaseException (resultCode, __FILE__, __LINE__);  \
98        } \
99     }
100 #endif
101 }
102 }
103 }
104
105 #endif