--- /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/xml/Node.hpp>
+#include <anna/xml/Attribute.hpp>
+
+#include <anna/dbms/Database.hpp>
+#include <anna/dbms/Connection.hpp>
+#include <anna/dbms/Sentence.hpp>
+#include <anna/dbms/Statement.hpp>
+
+using namespace std;
+using namespace anna;
+
+const string& dbms::Sentence::getName() const
+throw() {
+ static string empty;
+ return (a_dbStatement == NULL) ? empty : a_dbStatement->getName();
+}
+
+void dbms::Sentence::initialize(dbms::Database& database)
+throw(RuntimeException) {
+ Guard guard(this, "anna::dbms::Sentence (initialize)");
+ a_dbStatement = do_initialize(database);
+}
+
+//-------------------------------------------------------------------------------------
+// Ojo!! No activamos la seccion critica en este metodo porque debera estar
+// activa externamente ... para recoger datos multiples, etc, etc.
+//-------------------------------------------------------------------------------------
+dbms::ResultCode dbms::Sentence::execute(dbms::Connection& connection, dbms::Statement* statement)
+throw(RuntimeException) {
+ using namespace anna::dbms;
+ ResultCode result;
+
+ try {
+ result = connection.execute(statement);
+
+ if(result.successful() == false) {
+ if(a_mode == Mode::SilentWhenNotFound && result.notFound() == true)
+ return result;
+
+ throw DatabaseException(result, ANNA_FILE_LOCATION);
+ }
+ } catch(DatabaseException& edb) {
+ string msg("Sentence: ");
+ msg += getName();
+ msg += " | ";
+ msg += edb.getText();
+ throw RuntimeException(msg, ANNA_FILE_LOCATION);
+ }
+
+ return result;
+}
+
+bool dbms::Sentence::fetch()
+throw(RuntimeException) {
+ bool result = false;
+
+ try {
+ result = a_dbStatement->fetch();
+ } catch(dbms::DatabaseException& edb) {
+ throw RuntimeException(edb);
+ }
+
+ return result;
+}
+
+string dbms::Sentence::asString() const
+/*virtual*/
+throw() {
+ string result("dbms::Sentence { Mode: ");
+ result += (a_mode == Mode::SilentWhenNotFound) ? "SilentWhenNotFound" : "ExceptionWhenNotFound";
+ result += " | ";
+
+ if(a_dbStatement != NULL)
+ result += a_dbStatement->asString();
+ else
+ result += "dbms::Statement: <null>";
+
+ return result += " }";
+}
+
+/*virtual*/
+xml::Node* dbms::Sentence::asXML(xml::Node* parent) const
+throw() {
+ xml::Node* result = parent->createChild("dbms.Sentence");
+ result->createAttribute("Mode", (a_mode == Mode::SilentWhenNotFound) ? "SilentWhenNotFound" : "ExceptionWhenNotFound");
+
+ if(a_dbStatement)
+ a_dbStatement->asXML(result);
+
+ return result;
+}