--- /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 <mysql/mysql.h>
+#include <mysql/mysqld_error.h>
+#include <mysql/errmsg.h>
+
+#include <anna/config/defines.hpp>
+#include <anna/core/tracing/Logger.hpp>
+
+#include <anna/dbms.mysql/ResultCode.hpp>
+
+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;
+}