1 // ANNA - Anna is Not Nothingness Anymore //
3 // (c) Copyright 2005-2015 Eduardo Ramos Testillano & Francisco Ruiz Rayo //
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 //
9 #ifndef anna_dbms_Sentence_hpp
10 #define anna_dbms_Sentence_hpp
12 #include <anna/core/mt/Mutex.hpp>
14 #include <anna/dbms/ResultCode.hpp>
29 Clase que facilita la ejecucion de sentencias SQL compuestas y la comprobacion de errores ya que
30 solo devuelve excepciones de tipo anna::RuntimeException.
32 class Sentence : public Mutex {
35 Modos de actuar cuando se detecta un error en la ejecucion de las sentencias SQL.
38 struct Mode { enum _v { ExceptionWhenNotFound, SilentWhenNotFound }; };
41 Ejecuta la sentencia SQL asociada a este instancia. Antes de invocar a este metodo debemos
42 activar una seccion critica sobre esta instancia.
43 \param connection Conexion usada para ejecutar la sentencia. Debe tener activa una seccion critica.
45 virtual dbms::ResultCode execute(dbms::Connection& connection) noexcept(false) {
46 return execute(connection, a_dbStatement);
50 Devuelve el nombre de la sentencia SQL asociada a esta instancia.
51 \return El nombre de la sentencia SQL asociada a esta instancia.
52 \warning Si todavia no tiene nombre asociado devolvera una cadena vacia.
54 const std::string& getName() const ;
57 Inicializa el estado de esta instancia
58 \param database Instancia de la base de datos usada para definir las sentencias SQL que componen esta
61 void initialize(dbms::Database& database) noexcept(false);
64 Transfiere un registro desde la base de datos a las variables del entorno C++.
65 \return \em false si no hay mas registros o \em true en caso contrario.
67 bool fetch() noexcept(false);
70 Transfiere un registro desde la base de datos a las variables del entorno C++.
71 \param resultCode Variable que contiene el resultado de invocar a anna::dbms::Sentence::execute
72 \return \em false si no hay mas registros o \em true en caso contrario.
74 bool fetch(const ResultCode& resultCode) noexcept(false) {
75 return (resultCode.successful() == true) ? fetch() : false;
79 Devuelve una cadena con la informacion referente a esta instancia.
80 \return una cadena con la informacion referente a esta instancia.
82 virtual std::string asString() const ;
85 Devuelve un documento XML con la informacion referente a esta instancia.
86 \param parent Nodo XML del que dependerá la información referente a esta instancia.
87 \return un documento XML con la informacion referente a esta instancia.
89 virtual xml::Node* asXML(xml::Node* parent) const ;
94 \param mode Modo de actuacion en caso de detectar errores.
96 Sentence(const Mode::_v mode = Mode::ExceptionWhenNotFound) :
97 a_mode(mode), a_dbStatement(NULL)
101 Ejecuta la sentencia SQL asociada a este instancia.
102 \param connection Conexion usada para ejecutar la sentencia. Debe tener activa una seccion critica.
103 \param statement Sentencia a ejecutar.
105 dbms::ResultCode execute(dbms::Connection& connection, dbms::Statement* statement) noexcept(false);
108 Metodo que debe inicializar las sentencias asociadas a esta instancia (valores de entrada y salida).
109 \return Retorna la instancia de la sentencia asociada a esta instancia debidamente inicializada.
111 virtual dbms::Statement* do_initialize(dbms::Database&) noexcept(false) = 0;
114 const Mode::_v a_mode;
115 dbms::Statement* a_dbStatement;