--- /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/Connection.hpp>
+#include <anna/dbms/Database.hpp>
+#include <anna/dbms/functions.hpp>
+#include <anna/dbms/String.hpp>
+#include <anna/dbms/Statement.hpp>
+
+using namespace std;
+using namespace anna;
+
+/*static*/
+void dbms::functions::verifyDataScheme(dbms::Connection& connection, const char* tableName, const char* requiredPatch, const char* columnID, const char* columnDate)
+throw(RuntimeException) {
+ dbms::Database& database = connection.getDatabase();
+ dbms::Statement* statement = NULL;
+ dbms::String id(8);
+ string sql = anna::functions::asString(
+ "select max(%s) from %s where %s in (select max(%s) from %s)",
+ columnID, tableName, columnDate,
+ columnDate, tableName
+ );
+
+ try {
+ statement = database.createStatement("dbms::functions::VerifyDataScheme", sql);
+ statement->bindOutput("max_id", id);
+ dbms::ResultCode resultCode = connection.execute(statement);
+
+ if(resultCode.successful() == false)
+ throw dbms::DatabaseException(resultCode, ANNA_FILE_LOCATION);
+
+ statement->fetch();
+ const string _id(id.getValue());
+ const string _required(requiredPatch);
+
+ if(_required != _id) {
+ std::string msg("DataScheme is out of date | Current patch: ");
+ msg += id;
+ msg += " | Required patch: ";
+ msg += requiredPatch;
+ throw RuntimeException(msg, ANNA_FILE_LOCATION);
+ }
+
+ database.releaseStatement(statement);
+ } catch(dbms::DatabaseException& edb) {
+ database.releaseStatement(statement);
+ throw RuntimeException(edb);
+ } catch(RuntimeException&) {
+ database.releaseStatement(statement);
+ throw;
+ }
+}