76c78fa7239cb697572349ba090054a42e8944c3
[anna.git] / OutputBind.hpp
1 // ANNA - Anna is Not Nothingness Anymore                                                         //
2 //                                                                                                //
3 // (c) Copyright 2005-2015 Eduardo Ramos Testillano & Francisco Ruiz Rayo                         //
4 //                                                                                                //
5 // See project site at http://redmine.teslayout.com/projects/anna-suite                           //
6 // See accompanying file LICENSE or copy at http://www.teslayout.com/projects/public/anna.LICENSE //
7
8
9 #ifndef anna_dbms_OutputBind_hpp
10 #define anna_dbms_OutputBind_hpp
11
12 #include <anna/dbms/Bind.hpp>
13
14 namespace anna {
15
16 namespace dbms {
17
18 class LongBlock;
19
20 /**
21    Clase que facilita la interconexion entre las variables del ambito C++ y el ambito RDBMS.
22
23    A continuacion presentamos un ejemplo de uso detallado.
24    \include db_blob.p/main.cc
25 */
26 class OutputBind : public Bind {
27 public:
28   /**
29      Graba el valor de la variable anna::dbms::LongBlock asociada a esta OutputBind. Cualquier
30      modificacion que necesitemos aplicar sobre la columnna de tipo se debera hacer mediante los
31      metodos ofrecidos por la clase anna::dbms::LongBlock.
32
33      \warning Este metodo solo puede ser usado para variables de tipo dbms::Data::Type::LongBlock y
34      siempre y cuando hayamos abierto el BLOB con una sentencia SQL de seleccion.
35   */
36   void write() const noexcept(false);
37
38 protected:
39   OutputBind(const char* name, dbms::Data& value) : Bind(name, value) {;}
40
41 private:
42   // este metodo no sera invocado nunca. A partir de un Output nunca hay que
43   // convertir de C++ -> RDBMS
44   void code() const noexcept(false) {;}
45
46   virtual void do_write(const dbms::LongBlock&) const noexcept(false) = 0;
47 };
48
49 }
50 }
51
52 #endif
53