X-Git-Url: https://git.teslayout.com/public/public/public/?a=blobdiff_plain;f=include%2Fanna%2Fdbms%2FSentence.hpp;fp=include%2Fanna%2Fdbms%2FSentence.hpp;h=39d045e4fae23dde31ff6e6f9732ada7d833537c;hb=78be86969d2f26a9084b0c4af6ce43d5fa4ed3fd;hp=0000000000000000000000000000000000000000;hpb=a3b95648bd76140ef55e0b5941d423eee6c3856f;p=anna.git diff --git a/include/anna/dbms/Sentence.hpp b/include/anna/dbms/Sentence.hpp new file mode 100644 index 0000000..39d045e --- /dev/null +++ b/include/anna/dbms/Sentence.hpp @@ -0,0 +1,122 @@ +// 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_Sentence_hpp +#define anna_dbms_Sentence_hpp + +#include + +#include + +namespace anna { + +namespace xml { +class Node; +} + +namespace dbms { + +class Database; +class Connection; +class Statement; + +/** + Clase que facilita la ejecucion de sentencias SQL compuestas y la comprobacion de errores ya que + solo devuelve excepciones de tipo anna::RuntimeException. +*/ +class Sentence : public Mutex { +public: + /** + Modos de actuar cuando se detecta un error en la ejecucion de las sentencias SQL. + \see Sentence + */ + struct Mode { enum _v { ExceptionWhenNotFound, SilentWhenNotFound }; }; + + /** + Ejecuta la sentencia SQL asociada a este instancia. Antes de invocar a este metodo debemos + activar una seccion critica sobre esta instancia. + \param connection Conexion usada para ejecutar la sentencia. Debe tener activa una seccion critica. + */ + virtual dbms::ResultCode execute(dbms::Connection& connection) throw(RuntimeException) { + return execute(connection, a_dbStatement); + } + + /** + Devuelve el nombre de la sentencia SQL asociada a esta instancia. + \return El nombre de la sentencia SQL asociada a esta instancia. + \warning Si todavia no tiene nombre asociado devolvera una cadena vacia. + */ + const std::string& getName() const throw(); + + /** + Inicializa el estado de esta instancia + \param database Instancia de la base de datos usada para definir las sentencias SQL que componen esta + instancia. + */ + void initialize(dbms::Database& database) throw(RuntimeException); + + /** + Transfiere un registro desde la base de datos a las variables del entorno C++. + \return \em false si no hay mas registros o \em true en caso contrario. + */ + bool fetch() throw(RuntimeException); + + /** + Transfiere un registro desde la base de datos a las variables del entorno C++. + \param resultCode Variable que contiene el resultado de invocar a anna::dbms::Sentence::execute + \return \em false si no hay mas registros o \em true en caso contrario. + */ + bool fetch(const ResultCode& resultCode) throw(RuntimeException) { + return (resultCode.successful() == true) ? fetch() : false; + } + + /** + Devuelve una cadena con la informacion referente a esta instancia. + \return una cadena con la informacion referente a esta instancia. + */ + virtual std::string asString() const throw(); + + /** + Devuelve un documento XML con la informacion referente a esta instancia. + \param parent Nodo XML del que dependerá la información referente a esta instancia. + \return un documento XML con la informacion referente a esta instancia. + */ + virtual xml::Node* asXML(xml::Node* parent) const throw(); + +protected: + /** + Constructor. + \param mode Modo de actuacion en caso de detectar errores. + */ + Sentence(const Mode::_v mode = Mode::ExceptionWhenNotFound) : + a_mode(mode), a_dbStatement(NULL) + {;} + + /** + Ejecuta la sentencia SQL asociada a este instancia. + \param connection Conexion usada para ejecutar la sentencia. Debe tener activa una seccion critica. + \param statement Sentencia a ejecutar. + */ + dbms::ResultCode execute(dbms::Connection& connection, dbms::Statement* statement) throw(RuntimeException); + + /** + Metodo que debe inicializar las sentencias asociadas a esta instancia (valores de entrada y salida). + \return Retorna la instancia de la sentencia asociada a esta instancia debidamente inicializada. + */ + virtual dbms::Statement* do_initialize(dbms::Database&) throw(RuntimeException) = 0; + +private: + const Mode::_v a_mode; + dbms::Statement* a_dbStatement; +}; + +} +} + +#endif +