1 // ANNA - Anna is Not Nothingness Anymore //
3 // (c) Copyright 2005-2015 Eduardo Ramos Testillano & Francisco Ruiz Rayo //
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 //
9 #ifndef anna_dbms_Data_hpp
10 #define anna_dbms_Data_hpp
14 #include <anna/config/defines.hpp>
15 #include <anna/core/functions.hpp>
16 #include <anna/core/RuntimeException.hpp>
25 Clase base para las variables de entrada/salida asociadas a las sentencias SQL.
31 Integer, /**< Numeros enteros */
32 String, /**< Cadenas de caracteres */
33 Float, /**< Número en coma flotante */
34 ShortBlock, /**< Tipos de dato RAW */
35 LongBlock, /**< Tipo de datos CLOB */
36 Date, /** Tipo de fecha (dependiendo del gestor de base de datos puede contener tambien la hora) */
37 TimeStamp /** Tipo para contener simultáneamente la fecha y la hora */
42 Devuelve el tamano maximo de este dato que coincidiria con el indicado en el constructor.
43 \return El tamano maximo de este dato que coincidiria con el indicado en el constructor.
45 int getMaxSize() const { return a_maxSize; }
48 Devuelve el tipo de dato.
49 \return El tipo de datos.
51 Type::_v getType() const { return a_type; }
54 Devuelve el area de memoria asociada a esta variable.
56 void* getBuffer() { return a_buffer; }
59 Devuelve el indicador de nulo de esta instancia.
60 \return El indicador de nulo de esta instancia.
62 bool isNull() const { return a_isNull; }
65 Devuelve el valor que indica si este dato puede tomar valores nulos.
66 \return El valor que indica si este dato puede tomar valores nulos.
68 bool isNulleable() const { return a_isNulleable; }
71 Establece el indicador de nulo de esta instancia.
72 \param isNull Indicador de nulo de esta instancia.
73 \warning Slo tendr�efecto en caso de haber indicado en el constructor que
74 el dato puede tomar valores nulos.
76 void setNull(const bool isNull) { if(a_isNulleable == true) a_isNull = isNull; }
79 Incorpora el método clear para todos tipos de datos con lo que podemos obtener información
82 Si el dato está definido como "nuleable" activará el indicador que indica que el dato está vacío,
83 en otro caso se asignará un valor adecuado dependiendo del tipo del dato, cero para los números,
84 "" para las cadenas, etc.
92 Devuelve una cadena con la informacion referente a esta instancia.
93 @return Una cadena con la informacion referente a esta instancia.
95 virtual std::string asString() const ;
100 \param type Tipo de dato de esta instancia.
101 \param maxSize Tamao maximo que puede tener este dato. Deberia coincidir con el indicado
102 por la columna con la que vaya a corresponder en la sentencia.
103 \param isNulleable Indica si el dato puede tomar valores nulos.
105 \warning los tipos de datos complejos deberia reimplementar los metodos #code and #decode.
107 explicit Data(const Type::_v type, const int maxSize, const bool isNulleable) :
110 a_isNulleable(isNulleable),
111 a_isNull(isNulleable),
117 \param other Instancia de la que copiar.
119 Data(const Data& other) :
120 a_type(other.a_type),
121 a_maxSize(other.a_maxSize),
122 a_isNulleable(other.a_isNulleable),
123 a_isNull(other.a_isNull),
124 a_buffer(other.a_buffer)
128 Establece el area de memoria asociada a esta variable.
129 \param buffer Direccion de memoria donde comienza el contenido esta variable.
131 void setBuffer(void* buffer) { a_buffer = buffer; }
134 const Type::_v a_type;
136 const bool a_isNulleable;
140 virtual void do_clear() = 0;