+++ /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_Sentence_hpp
-#define anna_dbms_Sentence_hpp
-
-#include <anna/core/mt/Mutex.hpp>
-
-#include <anna/dbms/ResultCode.hpp>
-
-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
-