X-Git-Url: https://git.teslayout.com/public/public/public/?a=blobdiff_plain;f=include%2Fanna%2Fdbms.oracle%2FStatement.hpp;fp=include%2Fanna%2Fdbms.oracle%2FStatement.hpp;h=d959c0b4e5ed8b61d68270193927e081b9c90f5b;hb=78be86969d2f26a9084b0c4af6ce43d5fa4ed3fd;hp=0000000000000000000000000000000000000000;hpb=a3b95648bd76140ef55e0b5941d423eee6c3856f;p=anna.git diff --git a/include/anna/dbms.oracle/Statement.hpp b/include/anna/dbms.oracle/Statement.hpp new file mode 100644 index 0000000..d959c0b --- /dev/null +++ b/include/anna/dbms.oracle/Statement.hpp @@ -0,0 +1,75 @@ +// 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_oracle_Statement_hpp +#define anna_dbms_oracle_Statement_hpp + +#include + +struct OCIStmt; +struct OCIError; + +namespace anna { + +namespace dbms { + +class Connection; + +namespace oracle { + +/** + Clase que facilita la ejecucion de sentencias SQL a traves del RDBMS Oracle (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 OCI de esta sentencia. + */ + operator OCIStmt*() throw() { return a_ociStmt; } + +private: + OCIStmt* a_ociStmt; + OCIError* a_ociError; + bool a_firstFetch; + + Statement(Database& database, const char* name, const char* expression, const bool isCritical) : + dbms::Statement(database, name, expression, isCritical), + a_ociStmt(NULL), + a_ociError(NULL) {} + + Statement(Database& database, const char* name, const std::string& expression, const bool isCritical) : + dbms::Statement(database, name, expression, isCritical), + a_ociStmt(NULL), + a_ociError(NULL) {} + + 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 +