--- /dev/null
+// 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_Statement_hpp
+#define anna_dbms_mysql_Statement_hpp
+
+#include <anna/dbms/Statement.hpp>
+
+#include <anna/dbms.mysql/forward.hpp>
+
+namespace anna {
+
+namespace dbms {
+
+class Connection;
+
+namespace mysql {
+
+class Database;
+
+/**
+ Clase que facilita la ejecucion de sentencias SQL a traves del 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::Statement.
+
+ Para obtener la instancia de un comando para una determinada base de datos habra que instanciar
+ dicha base de datos e invocar al metodo createStatement. Independientemente del tipo de comando
+ particular que la base de datos retorne, debemos asignarlo a un puntero de tipo anna::dbms::Statement.
+ */
+class Statement : public dbms::Statement {
+public:
+ /**
+ Destructor.
+ */
+ virtual ~Statement();
+
+ /**
+ Operador de conversion.
+ \return El puntero MYSQL_STMT de esta sentencia.
+ */
+ operator st_mysql_stmt*() throw() { return a_mysqlStmt; }
+
+ /**
+ * Obtiene el array asociado a los valores de entrada.
+ * \return El array asociado a los valores de entrada.
+ * \warning Exclusivamente uso interno.
+ */
+ st_mysql_bind* getBindParams() throw() { return a_params; }
+
+ /**
+ * Obtiene el array asociado a los valores de salida.
+ * \return El array asociado a los valores de salida.
+ * \warning Exclusivamente uso interno.
+ */
+ st_mysql_bind* getBindResults() throw() { return a_results; }
+
+private:
+ st_mysql_stmt* a_mysqlStmt;
+
+ st_mysql_bind* a_params;
+ st_mysql_bind* a_results;
+
+ Statement(Database& database, const char* name, const char* expression, const bool isCritical) :
+ dbms::Statement(database, name, expression, isCritical),
+ a_mysqlStmt(NULL),
+ a_params(NULL),
+ a_results(NULL) {}
+
+ Statement(Database& database, const char* name, const std::string& expression, const bool isCritical) :
+ dbms::Statement(database, name, expression, isCritical),
+ a_mysqlStmt(NULL),
+ a_params(NULL),
+ a_results(NULL) {}
+
+ st_mysql_bind* create(const int size, const char* whatis) throw(RuntimeException);
+
+ void prepare(dbms::Connection* connection) throw(RuntimeException, DatabaseException);
+ dbms::ResultCode execute(dbms::Connection* connection) throw(RuntimeException, DatabaseException);
+ bool fetch() throw(RuntimeException, DatabaseException);
+
+ friend class Database;
+};
+
+}
+}
+}
+
+#endif
+