8966cf79d4b86ef997fc90553355c2fc28ab6caa
[anna.git] / ShortBlock.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_ShortBlock_hpp
10 #define anna_dbms_ShortBlock_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    La longitud del dato a tratar estara en 2048 y 4096 bytes, dependiendo
27    del RDBMS concreto con el que estemos trabajando.
28
29    \see LongBlock
30 */
31 class ShortBlock : public Data {
32 public:
33   /**
34
35      Constructor.
36      \param maxSize Tamao maximo que puede tener este bloque.
37      \param isNulleable Indica si el dato puede tomar valores nulos.
38   */
39   explicit ShortBlock(const int maxSize, const bool isNulleable = false) :
40     Data(Type::ShortBlock, maxSize, isNulleable),
41     a_value(true) {
42     a_value.allocate(maxSize);
43     Data::setBuffer((void*) a_value.getData());
44   }
45
46   /**
47      Constructor copia.
48      \param other Instancia de la que copiar.
49   */
50   ShortBlock(const ShortBlock& other) :
51     Data(other),
52     a_value(true) {
53     a_value = other.a_value;
54     Data::setBuffer((void*) a_value.getData());
55   }
56
57   /**
58      Destructor.
59   */
60   virtual ~ShortBlock() {;}
61
62   /**
63      Devuelve el tamao actual de este dato.
64      \return El tamao actual de este dato.
65   */
66   int getSize() const { return a_value.getSize(); }
67
68   /**
69      Devuelve el contenido de la este bloque de memoria.
70      \return  Devuelve el contenido de la este bloque de memoria.
71      \warning Si el metodo Data::isNull devolvio \em true el resultado de este metodo no esta definido.
72   */
73   const anna::DataBlock& getValue() const { return a_value; }
74
75   /**
76      Operador de asignacin.
77      \param other Bloque del que copiar.
78      \return La instancia de este bloque de memoria.
79   */
80   ShortBlock& operator = (const ShortBlock& other) noexcept(false);
81
82   /**
83      Operador de asignacin.
84      \param value Valor que queremos a asignar.
85      \return La instancia de esta cadena.
86   */
87   ShortBlock& operator = (const anna::DataBlock& value) noexcept(false);
88
89   /**
90      Operador de conversion.
91      \return El anna::DataBlock asociado a esta instancia.
92   */
93   operator anna::DataBlock& () { return a_value; }
94
95   /**
96      Operador de conversion.
97      \return El anna::DataBlock asociado a esta instancia.
98   */
99   operator const anna::DataBlock& () const { return a_value; }
100
101   /**
102      Devuelve una cadena con la informacion referente a esta instancia.
103      \return Una cadena con la informacion referente a esta instancia.
104   */
105   std::string asString() const ;
106
107 protected:
108   anna::DataBlock a_value;
109 };
110
111 }
112 }
113
114 #endif
115