X-Git-Url: https://git.teslayout.com/public/public/public/?a=blobdiff_plain;f=include%2Fanna%2Fdbms%2FResultCode.hpp;fp=include%2Fanna%2Fdbms%2FResultCode.hpp;h=64895945f856bec6e84c35f4befdd2153d8e30fa;hb=78be86969d2f26a9084b0c4af6ce43d5fa4ed3fd;hp=0000000000000000000000000000000000000000;hpb=a3b95648bd76140ef55e0b5941d423eee6c3856f;p=anna.git diff --git a/include/anna/dbms/ResultCode.hpp b/include/anna/dbms/ResultCode.hpp new file mode 100644 index 0000000..6489594 --- /dev/null +++ b/include/anna/dbms/ResultCode.hpp @@ -0,0 +1,172 @@ +// 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 + +#include + +#include + +#include +#include + +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 +