+++ /dev/null
-// 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_Data_hpp
-#define anna_dbms_Data_hpp
-
-#include <string>
-
-#include <anna/config/defines.hpp>
-#include <anna/core/functions.hpp>
-#include <anna/core/RuntimeException.hpp>
-
-namespace anna {
-
-namespace dbms {
-
-class Bind;
-
-/**
- Clase base para las variables de entrada/salida asociadas a las sentencias SQL.
-*/
-class Data {
-public:
- struct Type {
- enum _v {
- Integer, /**< Numeros enteros */
- String, /**< Cadenas de caracteres */
- Float, /**< Número en coma flotante */
- ShortBlock, /**< Tipos de dato RAW */
- LongBlock, /**< Tipo de datos CLOB */
- Date, /** Tipo de fecha (dependiendo del gestor de base de datos puede contener tambien la hora) */
- TimeStamp /** Tipo para contener simultáneamente la fecha y la hora */
- };
- };
-
- /**
- Devuelve el tamano maximo de este dato que coincidiria con el indicado en el constructor.
- \return El tamano maximo de este dato que coincidiria con el indicado en el constructor.
- */
- int getMaxSize() const throw() { return a_maxSize; }
-
- /**
- Devuelve el tipo de dato.
- \return El tipo de datos.
- */
- Type::_v getType() const throw() { return a_type; }
-
- /**
- Devuelve el area de memoria asociada a esta variable.
- */
- void* getBuffer() throw() { return a_buffer; }
-
- /**
- Devuelve el indicador de nulo de esta instancia.
- \return El indicador de nulo de esta instancia.
- */
- bool isNull() const throw() { return a_isNull; }
-
- /**
- Devuelve el valor que indica si este dato puede tomar valores nulos.
- \return El valor que indica si este dato puede tomar valores nulos.
- */
- bool isNulleable() const throw() { return a_isNulleable; }
-
- /**
- Establece el indicador de nulo de esta instancia.
- \param isNull Indicador de nulo de esta instancia.
- \warning Slo tendr�efecto en caso de haber indicado en el constructor que
- el dato puede tomar valores nulos.
- */
- void setNull(const bool isNull) throw() { if(a_isNulleable == true) a_isNull = isNull; }
-
- /**
- Incorpora el método clear para todos tipos de datos con lo que podemos obtener información
- del medio físico.
-
- Si el dato está definido como "nuleable" activará el indicador que indica que el dato está vacío,
- en otro caso se asignará un valor adecuado dependiendo del tipo del dato, cero para los números,
- "" para las cadenas, etc.
- */
- void clear() throw() {
- setNull(true);
- do_clear();
- }
-
- /**
- Devuelve una cadena con la informacion referente a esta instancia.
- @return Una cadena con la informacion referente a esta instancia.
- */
- virtual std::string asString() const throw();
-
-protected:
- /**
- Constructor.
- \param type Tipo de dato de esta instancia.
- \param maxSize Tamao maximo que puede tener este dato. Deberia coincidir con el indicado
- por la columna con la que vaya a corresponder en la sentencia.
- \param isNulleable Indica si el dato puede tomar valores nulos.
-
- \warning los tipos de datos complejos deberia reimplementar los metodos #code and #decode.
- */
- explicit Data(const Type::_v type, const int maxSize, const bool isNulleable) :
- a_type(type),
- a_maxSize(maxSize),
- a_isNulleable(isNulleable),
- a_isNull(isNulleable),
- a_buffer(NULL)
- {;}
-
- /**
- Constructor copia.
- \param other Instancia de la que copiar.
- */
- Data(const Data& other) :
- a_type(other.a_type),
- a_maxSize(other.a_maxSize),
- a_isNulleable(other.a_isNulleable),
- a_isNull(other.a_isNull),
- a_buffer(other.a_buffer)
- {;}
-
- /**
- Establece el area de memoria asociada a esta variable.
- \param buffer Direccion de memoria donde comienza el contenido esta variable.
- */
- void setBuffer(void* buffer) throw() { a_buffer = buffer; }
-
-private:
- const Type::_v a_type;
- const int a_maxSize;
- const bool a_isNulleable;
- void* a_buffer;
- bool a_isNull;
-
- virtual void do_clear() throw() = 0;
-};
-
-}
-}
-
-#endif
-