--- /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 //
+
+
+#include <anna/core/functions.hpp>
+
+#include <anna/dbms/ResultCode.hpp>
+
+using namespace std;
+using namespace anna::dbms;
+
+bool ResultCode::notFound() const
+throw(anna::RuntimeException) {
+ if(a_errorDecoder == NULL) {
+ string msg(asString());
+ msg += " | Has no decoder for associated error";
+ throw anna::RuntimeException(msg, ANNA_FILE_LOCATION);
+ }
+
+ return a_errorDecoder->notFound(a_errorCode);
+}
+
+bool ResultCode::successful() const
+throw(anna::RuntimeException) {
+ if(a_errorDecoder == NULL) {
+ string msg(asString());
+ msg += " | Has no decoder for associated error";
+ throw anna::RuntimeException(msg, ANNA_FILE_LOCATION);
+ }
+
+ return a_errorDecoder->successful(a_errorCode);
+}
+
+bool ResultCode::locked() const
+throw(anna::RuntimeException) {
+ if(a_errorDecoder == NULL) {
+ string msg(asString());
+ msg += " | Has no decoder for associated error";
+ throw anna::RuntimeException(msg, ANNA_FILE_LOCATION);
+ }
+
+ return a_errorDecoder->locked(a_errorCode);
+}
+
+bool ResultCode::lostConnection() const
+throw(anna::RuntimeException) {
+ if(a_errorDecoder == NULL) {
+ string msg(asString());
+ msg += " | Has no decoder for associated error";
+ throw anna::RuntimeException(msg, ANNA_FILE_LOCATION);
+ }
+
+ return a_errorDecoder->lostConnection(a_errorCode);
+}
+
+//
+// No usamos la std::string porque la gran mayoría de las veces la ejecución de las sentencias SQL será
+// correcta => no hará falta reservar ninguna memoria.
+//
+void ResultCode::copy(const char* text)
+throw() {
+ if(text == NULL) {
+ if(a_errorText != NULL) {
+ free(a_errorText);
+ a_errorText = NULL;
+ }
+ } else {
+ char* aux;
+
+ if((aux = anna_strchr((char*) text, '\n')) != NULL)
+ * aux = 0;
+
+ const int textLen = anna_strlen(text);
+
+ if(a_errorText == NULL)
+ a_errorText = strdup(text);
+ else if(anna_strlen(a_errorText) >= textLen)
+ anna_strcpy(a_errorText, text);
+ else {
+ free(a_errorText);
+ a_errorText = strdup(text);
+ }
+ }
+}
+
+std::string ResultCode::asString() const
+throw() {
+ std::string result("dbms::ResultCode { Error: ");
+ result += functions::asString(a_errorCode);
+ result += " | Error: ";
+ result += (a_errorText == NULL) ? "(null)" : a_errorText;
+ result += " | Correct: ";
+
+ if(a_errorDecoder != NULL)
+ result += functions::asString(successful());
+ else
+ result += "<No ErrorDecoder>";
+
+ return result += " }";
+}