+++ /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_ResultCode_hpp
-#define anna_dbms_ResultCode_hpp
-
-#include <string>
-
-#include <string.h>
-
-#include <stdlib.h>
-
-#include <anna/config/defines.hpp>
-#include <anna/core/RuntimeException.hpp>
-
-namespace anna {
-
-namespace dbms {
-
-/**
- Clase para acceder a la informacion devuelta por el gestor de base de datos
- referente al ultimo comando realizado.
- */
-class ResultCode {
-public:
- /**
- Constructor vacio.
- \warning Antes de usarse debe asignarse a algun otro ResultCode obtenido mediante la invocacion
- a anna::dbms::Connection::execute.
- */
- ResultCode() : a_errorText(NULL), a_errorDecoder(NULL), a_errorCode(0) {;}
-
- /**
- Constructor copia.
- @param other Instancia de la que copiar los datos.
- */
- ResultCode(const ResultCode& other) :
- a_errorText(NULL),
- a_errorDecoder(other.a_errorDecoder) {
- set(other.a_errorCode, other.a_errorText);
- }
-
- /**
- Destructor.
- */
- virtual ~ResultCode() { if(a_errorText != NULL) free(a_errorText); }
-
- /**
- Devuelve el codigo de error del ultimo comando ejecutado contra la base de datos.
- @return El codigo de error del ultimo comando ejecutado contra la base de datos.
- */
- int getErrorCode() const throw() { return a_errorCode; }
-
- /**
- Devuelve el texto del error del ultimo comando ejecutado contra la base de datos.
- @return El texto del error del ultimo comando ejecutado contra la base de datos.
- */
- const char* getErrorText() const throw() { return (a_errorText != NULL) ? a_errorText : ""; }
-
- // Operadores
- /**
- Operador copia.
- @param resultCode Instancia a copiar.
- @return Una instancia de si mismo.
- */
- ResultCode& operator = (const ResultCode& resultCode)
- throw() {
- if(this != &resultCode) {
- a_errorDecoder = resultCode.a_errorDecoder;
- set(resultCode.a_errorCode, resultCode.a_errorText);
- }
-
- return *this;
- }
-
- /**
- Devuelve \em true si las condiciones de busqueda de la ultimo operacion
- no han sido satisfechas por ningun registro o \em false en otro caso.
- @return \em true si las condiciones de busqueda de la ultimo operacion
- no han sido satisfechas por ningun registro o \em false en otro caso.
- */
- bool notFound() const throw(anna::RuntimeException);
-
- /**
- Devuelve \em true si la ultima operacion solicitada fue realizada correctamente
- o \em false en otro caso.
- @return \em true si la ultima operacion solicitada fue realizada correctamente
- o \em false en otro caso.
- */
- bool successful() const throw(anna::RuntimeException);
-
- /**
- Devuelve \em true Si el registro obtenenido en una sentencia de seleccion con indicador
- de modo exclusivo ha sido bloqueada previamente por otro proceso y/o contexto de base de
- datos o \em false en otro caso.
- @return \em true Si el registro obtenenido en una sentencia de seleccion con indicador
- de modo exclusivo ha sido bloqueada previamente por otro proceso y/o contexto de base de
- datos o \em false en otro caso.
- */
- bool locked() const throw(anna::RuntimeException);
-
- /**
- Devuelve \em true si se perdio la conexion la base de datos o \em false en otro caso.
- @return \em true si se perdio la conexion la base de datos o \em false en otro caso.
- */
- bool lostConnection() const throw(anna::RuntimeException);
-
- /**
- Devuelve una cadena con la informacion sobre esta clase.
- \return Una cadena con la informacion sobre esta clase.
- */
- std::string asString() const throw();
-
-protected:
- static const int MaxErrorLen = 512;
-
- /**
- Decodificador del error devuelto por el RDBMS concreto que estemos usando.
- \warning Exclusivamente uso interno.
- */
- class ErrorDecoder {
- public:
- virtual bool notFound(const int errorCode) const throw() = 0;
- virtual bool successful(const int errorCode) const throw() = 0;
- virtual bool locked(const int errorCode) const throw() = 0;
- virtual bool lostConnection(const int errorCode) const throw() = 0;
- };
-
- /**
- Constructor.
-
- \param errorCode Codigo de error asociado a la ultima operacion realizada contra la base de datos.
- \param errorText Texto asociado al error de ultima operacion realizada contra la base de datos. Puede ser
- NULL si no hay ningun texto de error asociado al codigo recibido.
- \param errorDecoder Decofidicador de errores.
- */
- ResultCode(const int errorCode, const char* errorText, const ErrorDecoder* errorDecoder) :
- a_errorText(NULL),
- a_errorDecoder(errorDecoder) {
- set(errorCode, errorText);
- }
-
- /**
- Establece el contenido de esta clase.
-
- \param errorCode Codigo de error asociado a la ultima operacion realizada contra la base de datos.
- \param errorText Texto asociado al error de ultima operacion realizada contra la base de datos.
- */
- void set(const int errorCode, const char* errorText)
- throw() {
- a_errorCode = errorCode;
- copy(errorText);
- }
-
-private:
- int a_errorCode;
- char* a_errorText;
- const ErrorDecoder* a_errorDecoder;
-
- void copy(const char* text) throw();
-};
-
-}
-}
-
-#endif
-