Revert "Remove mysql and oracle resources for anna-ericsson project"
[anna.git] / include / anna / dbms.mysql / Statement.hpp
diff --git a/include/anna/dbms.mysql/Statement.hpp b/include/anna/dbms.mysql/Statement.hpp
new file mode 100644 (file)
index 0000000..48c9f86
--- /dev/null
@@ -0,0 +1,95 @@
+// 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
+