X-Git-Url: https://git.teslayout.com/public/public/public/?a=blobdiff_plain;f=source%2Fdbms.mysql%2FResultCode.cpp;fp=source%2Fdbms.mysql%2FResultCode.cpp;h=c4e8f2d507e3db8098c2a2067f44e6c9fddb45d2;hb=78be86969d2f26a9084b0c4af6ce43d5fa4ed3fd;hp=0000000000000000000000000000000000000000;hpb=a3b95648bd76140ef55e0b5941d423eee6c3856f;p=anna.git diff --git a/source/dbms.mysql/ResultCode.cpp b/source/dbms.mysql/ResultCode.cpp new file mode 100644 index 0000000..c4e8f2d --- /dev/null +++ b/source/dbms.mysql/ResultCode.cpp @@ -0,0 +1,63 @@ +// 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 // + + +#include +#include +#include + +#include +#include + +#include + +using namespace anna; +using namespace anna::dbms; + +mysql::ResultCode::ErrorDecoder mysql::ResultCode::st_errorDecoder; + +mysql::ResultCode::ResultCode(st_mysql* _mysql) : + dbms::ResultCode(0, NULL, &st_errorDecoder) { + int errorCode = mysql_errno(_mysql); + + if(errorCode != 0) + dbms::ResultCode::set(errorCode, mysql_error(_mysql)); +} + +mysql::ResultCode::ResultCode(st_mysql_stmt* stmt) : + dbms::ResultCode(0, NULL, &st_errorDecoder) { + int errorCode = mysql_stmt_errno(stmt); + + if(errorCode != 0) + dbms::ResultCode::set(errorCode, mysql_stmt_error(stmt)); +} + +/* + * Códigos de error obtenidos de: + * http://dev.mysql.com/doc/refman/4.1/en/error-messages-client.html + */ + +bool mysql::ResultCode::ErrorDecoder::notFound(const int errorCode) const +throw() { + return errorCode == CR_NO_DATA; +} + +bool mysql::ResultCode::ErrorDecoder::successful(const int errorCode) const +throw() { + return errorCode == 0; +} + +bool mysql::ResultCode::ErrorDecoder::locked(const int errorCode) const +throw() { + return false; // No parece que haya un código de error en MySQL para identificar esta situación ¿?¿? +} + +bool mysql::ResultCode::ErrorDecoder::lostConnection(const int errorCode) const +throw() { + return errorCode == CR_INVALID_CONN_HANDLE || errorCode == CR_SHARED_MEMORY_CONNECT_REQUEST_ERROR || errorCode == CR_SHARED_MEMORY_CONNECT_ANSWER_ERROR || + errorCode == CR_SHARED_MEMORY_CONNECT_MAP_ERROR || errorCode == CR_SHARED_MEMORY_CONNECT_SET_ERROR; +}