2dab54ffb478e852fc8a240ed156f82243773095
[anna.git] / LongBlock.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_LongBlock_hpp
10 #define anna_dbms_LongBlock_hpp
11
12 #include <string>
13
14 #include <anna/core/RuntimeException.hpp>
15 #include <anna/core/DataBlock.hpp>
16
17 #include <anna/dbms/Data.hpp>
18
19 namespace anna {
20
21 namespace dbms {
22
23 /**
24    Bloque de datos usado como entrada y/o salida de las sentencias SQL.
25
26    A diferencia del tipo de datos ShortBlock, en principio, no tiene ninguna limitacion
27    en cuanto a la longitud del campo que vamos a tratar. Por contra, dependiendo del motor
28    de base de datos que vayamos a usar puede tener un tratamiento especial a la hora de
29    grabarlo en la base de datos.
30
31    \see ShortBlock
32 */
33 class LongBlock : public Data {
34 public:
35   /**
36      Constructor.
37      \param isNulleable Indica si el dato puede tomar valores nulos.
38   */
39   explicit LongBlock(const bool isNulleable = false) :
40     Data(Type::LongBlock, 0, isNulleable),
41     a_value(true) {
42     Data::setBuffer((void*) NULL);
43   }
44
45   /**
46      Constructor copia.
47      \param other Instancia de la que copiar.
48   */
49   LongBlock(const LongBlock& other) :
50     Data(other),
51     a_value(true) {
52     a_value = other.a_value;
53   }
54
55   /**
56      Destructor.
57   */
58   virtual ~LongBlock() {;}
59
60   /**
61      Devuelve el tamao actual de este dato.
62      \return El tamao actual de este dato.
63   */
64   int getSize() const { return a_value.getSize(); }
65
66   /**
67      Devuelve el contenido de la este bloque de memoria.
68      \return  Devuelve el contenido de la este bloque de memoria.
69      \warning Si el metodo Data::isNull devolvio \em true el resultado de este metodo no esta definido.
70   */
71   const anna::DataBlock& getValue() const { return a_value; }
72
73   /**
74      Devuelve el contenido de la este bloque de memoria.
75      \return  Devuelve el contenido de la este bloque de memoria.
76      \warning Si el metodo Data::isNull devolvio \em true el resultado de este metodo no esta definido.
77   */
78   anna::DataBlock& getValue() { return a_value; }
79
80   /**
81      Operador de asignacin.
82      \param other Bloque del que copiar.
83      \return La instancia de este bloque de memoria.
84   */
85   LongBlock& operator = (const LongBlock& other) noexcept(false);
86
87   /**
88      Operador de asignacin.
89      \param value Valor que queremos a asignar.
90      \return La instancia de esta cadena.
91   */
92   LongBlock& operator = (const anna::DataBlock& value) noexcept(false);
93
94   /**
95      Operador de conversion.
96      \return El anna::DataBlock asociado a esta instancia.
97   */
98   operator anna::DataBlock& () { return a_value; }
99
100   /**
101      Operador de conversion.
102      \return El anna::DataBlock asociado a esta instancia.
103   */
104   operator const anna::DataBlock& () const { return a_value; }
105
106   /**
107      Devuelve una cadena con la informacion referente a esta instancia.
108      \return Una cadena con la informacion referente a esta instancia.
109   */
110   std::string asString() const ;
111
112 protected:
113   anna::DataBlock a_value;
114
115   void do_clear() { a_value.clear(); }
116 };
117
118 }
119 }
120
121 #endif
122