Add no-deprecated to warnings due to dynamic exceptions.
[anna.git] / include / anna / dbms.mysql / Statement.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_Statement_hpp
10 #define anna_dbms_mysql_Statement_hpp
11
12 #include <anna/dbms/Statement.hpp>
13
14 #include <anna/dbms.mysql/forward.hpp>
15
16 namespace anna {
17
18 namespace dbms {
19
20 class Connection;
21
22 namespace mysql {
23
24 class Database;
25
26 /**
27    Clase que facilita la ejecucion de sentencias SQL a traves del RDBMS MySQL (tm).
28
29    Esta clase no puede usarse directamente, ya que la capa ANNA.dbms obliga a que todas las peticiones
30    se hagan atraves de una instancia anna::dbms::Statement.
31
32    Para obtener la instancia de un comando para una determinada base de datos habra que instanciar
33    dicha base de datos e invocar al metodo createStatement. Independientemente del tipo de comando
34    particular que la base de datos retorne, debemos asignarlo a un puntero de tipo anna::dbms::Statement.
35  */
36 class Statement : public dbms::Statement {
37 public:
38   /**
39      Destructor.
40   */
41   virtual ~Statement();
42
43   /**
44      Operador de conversion.
45      \return El puntero MYSQL_STMT de esta sentencia.
46   */
47   operator st_mysql_stmt*() throw() { return a_mysqlStmt; }
48
49   /**
50    * Obtiene el array asociado a los valores de entrada.
51    * \return El array asociado a los valores de entrada.
52    * \warning Exclusivamente uso interno.
53    */
54   st_mysql_bind* getBindParams() throw() { return a_params; }
55
56   /**
57    * Obtiene el array asociado a los valores de salida.
58    * \return El array asociado a los valores de salida.
59    * \warning Exclusivamente uso interno.
60    */
61   st_mysql_bind* getBindResults() throw() { return a_results; }
62
63 private:
64   st_mysql_stmt* a_mysqlStmt;
65
66   st_mysql_bind* a_params;
67   st_mysql_bind* a_results;
68
69   Statement(Database& database, const char* name, const char* expression, const bool isCritical) :
70     dbms::Statement(database, name, expression, isCritical),
71     a_mysqlStmt(NULL),
72     a_params(NULL),
73     a_results(NULL) {}
74
75   Statement(Database& database, const char* name, const std::string& expression, const bool isCritical) :
76     dbms::Statement(database, name, expression, isCritical),
77     a_mysqlStmt(NULL),
78     a_params(NULL),
79     a_results(NULL) {}
80
81   st_mysql_bind* create(const int size, const char* whatis) throw(RuntimeException);
82
83   void prepare(dbms::Connection* connection) throw(RuntimeException, DatabaseException);
84   dbms::ResultCode execute(dbms::Connection* connection) throw(RuntimeException, DatabaseException);
85   bool fetch() throw(RuntimeException, DatabaseException);
86
87   friend class Database;
88 };
89
90 }
91 }
92 }
93
94 #endif
95