Revert "Remove mysql and oracle resources for anna-ericsson project"
[anna.git] / include / anna / dbms / OutputBind.hpp
diff --git a/include/anna/dbms/OutputBind.hpp b/include/anna/dbms/OutputBind.hpp
new file mode 100644 (file)
index 0000000..e0c7c70
--- /dev/null
@@ -0,0 +1,53 @@
+// 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 //
+
+
+#ifndef anna_dbms_OutputBind_hpp
+#define anna_dbms_OutputBind_hpp
+
+#include <anna/dbms/Bind.hpp>
+
+namespace anna {
+
+namespace dbms {
+
+class LongBlock;
+
+/**
+   Clase que facilita la interconexion entre las variables del ambito C++ y el ambito RDBMS.
+
+   A continuacion presentamos un ejemplo de uso detallado.
+   \include db_blob.p/main.cc
+*/
+class OutputBind : public Bind {
+public:
+  /**
+     Graba el valor de la variable anna::dbms::LongBlock asociada a esta OutputBind. Cualquier
+     modificacion que necesitemos aplicar sobre la columnna de tipo se debera hacer mediante los
+     metodos ofrecidos por la clase anna::dbms::LongBlock.
+
+     \warning Este metodo solo puede ser usado para variables de tipo dbms::Data::Type::LongBlock y
+     siempre y cuando hayamos abierto el BLOB con una sentencia SQL de seleccion.
+  */
+  void write() const throw(RuntimeException, dbms::DatabaseException);
+
+protected:
+  OutputBind(const char* name, dbms::Data& value) : Bind(name, value) {;}
+
+private:
+  // este metodo no sera invocado nunca. A partir de un Output nunca hay que
+  // convertir de C++ -> RDBMS
+  void code() const throw(RuntimeException) {;}
+
+  virtual void do_write(const dbms::LongBlock&) const throw(RuntimeException, dbms::DatabaseException) = 0;
+};
+
+}
+}
+
+#endif
+