Revert "Remove mysql and oracle resources for anna-ericsson project"
[anna.git] / source / dbms / Statement.cpp
diff --git a/source/dbms/Statement.cpp b/source/dbms/Statement.cpp
new file mode 100644 (file)
index 0000000..e2895e0
--- /dev/null
@@ -0,0 +1,86 @@
+// 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/tracing/TraceMethod.hpp>
+
+#include <anna/xml/Node.hpp>
+#include <anna/xml/Attribute.hpp>
+
+#include <anna/dbms/Statement.hpp>
+#include <anna/dbms/InputBind.hpp>
+#include <anna/dbms/OutputBind.hpp>
+#include <anna/dbms/Database.hpp>
+
+using namespace std;
+using namespace anna;
+using namespace anna::dbms;
+
+Statement::~Statement() {
+  InputBind* ibind;
+  OutputBind* obind;
+
+  for(input_iterator ii = input_begin(), maxii = input_end(); ii != maxii; ii ++) {
+    ibind = inputBind(ii);
+    ibind->release(this);
+    a_database.deallocate(ibind);
+  }
+
+  for(output_iterator ii = output_begin(), maxii = output_end(); ii != maxii; ii ++) {
+    obind = outputBind(ii);
+    obind->release(this);
+    a_database.deallocate(obind);
+  }
+}
+
+string Statement::asString() const
+throw() {
+  string result("dbms::Statement { Nombre: ");
+  result += a_name;
+  result += functions::asText(" | Var.Entrada: ", input_size());
+  result += functions::asText(" | Var.Salida: ",  output_size());
+  result += " | ";
+  result += a_measureTiming.asString();
+  result += " | Expresion: ";
+  result += a_expression;
+  return result += " }";
+}
+
+xml::Node* dbms::Statement::asXML(xml::Node* parent) const
+throw() {
+  xml::Node* result = parent->createChild("dbms.Statement");
+  result->createAttribute("Name", a_name);
+  xml::Node* node = result->createChild("Timing");
+  node->createAttribute("N", a_measureTiming.size());
+  node->createAttribute("Accumulator", a_measureTiming.getAccumulator());
+  node->createAttribute("Timing", a_measureTiming.asString());
+  result->createChild("Expression")->createText(a_expression);
+  return result;
+}
+
+void Statement::bindInput(const char* name, Data& data)
+throw() {
+  a_inputBinds.push_back(a_database.allocateInputBind(name, data));
+}
+
+const OutputBind* Statement::bindOutput(const char* name, Data& i)
+throw() {
+  OutputBind* result = a_database.allocateOutputBind(name, i);
+  a_outputBinds.push_back(result);
+  return result;
+}
+
+Data& Statement::input(input_iterator& ii)
+throw() {
+  return (*ii)->getData();
+}
+
+Data& Statement::output(output_iterator& ii)
+throw() {
+  return (*ii)->getData();
+}
+