X-Git-Url: https://git.teslayout.com/public/public/public/?a=blobdiff_plain;f=source%2Fdbms.oracle%2FResultCode.cpp;fp=source%2Fdbms.oracle%2FResultCode.cpp;h=d9a220082291309019be4734f0ca771d0f9ed071;hb=78be86969d2f26a9084b0c4af6ce43d5fa4ed3fd;hp=0000000000000000000000000000000000000000;hpb=a3b95648bd76140ef55e0b5941d423eee6c3856f;p=anna.git diff --git a/source/dbms.oracle/ResultCode.cpp b/source/dbms.oracle/ResultCode.cpp new file mode 100644 index 0000000..d9a2200 --- /dev/null +++ b/source/dbms.oracle/ResultCode.cpp @@ -0,0 +1,65 @@ +// 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; + +oracle::ResultCode::ErrorDecoder oracle::ResultCode::st_errorDecoder; + +oracle::ResultCode::ResultCode(const int status, OCIError* error) : + dbms::ResultCode(0, NULL, &st_errorDecoder) { + char errorText [dbms::ResultCode::MaxErrorLen]; + int errorCode = status; + + if(status == OCI_SUCCESS) { + dbms::ResultCode::set(OCI_SUCCESS, NULL); + return; + } else if(status == OCI_SUCCESS_WITH_INFO) { + OCIErrorGet(error, (ub4) 1, (text*) 0, &errorCode, (unsigned char*) errorText, (ub4) sizeof(errorText), OCI_HTYPE_ERROR); + dbms::ResultCode::set(OCI_SUCCESS, errorText); + LOGINFORMATION(Logger::information(asString(), ANNA_FILE_LOCATION)); + return; + } + + switch(status) { + case OCI_ERROR: + OCIErrorGet(error, (ub4) 1, (text*) 0, &errorCode, (unsigned char*) errorText, (ub4) sizeof(errorText), OCI_HTYPE_ERROR); + break; + case OCI_NEED_DATA: anna_strcpy(errorText, "OCI | Need data"); break; + case OCI_NO_DATA: anna_strcpy(errorText, "OCI | Data not found"); break; + case OCI_INVALID_HANDLE: anna_strcpy(errorText, "OCI | Invalid handle"); break; + default: sprintf(errorText, "OCI | Error code: %d", status); break; + } + + dbms::ResultCode::set(errorCode, errorText); +} + +bool oracle::ResultCode::ErrorDecoder::notFound(const int errorCode) const +throw() { + return errorCode == OCI_NO_DATA; +} + +bool oracle::ResultCode::ErrorDecoder::successful(const int errorCode) const +throw() { + return errorCode == OCI_SUCCESS; +} + +bool oracle::ResultCode::ErrorDecoder::lostConnection(const int errorCode) const +throw() { + return errorCode == 28 || errorCode == 3113 || errorCode == 3114 || errorCode == 1012 || errorCode == 12570 || errorCode == 12571; +}