X-Git-Url: https://git.teslayout.com/public/public/public/?a=blobdiff_plain;f=include%2Fanna%2Fdbms%2FString.hpp;fp=include%2Fanna%2Fdbms%2FString.hpp;h=a591eed43df029e796a3e045d426d1eefe154fd4;hb=78be86969d2f26a9084b0c4af6ce43d5fa4ed3fd;hp=0000000000000000000000000000000000000000;hpb=a3b95648bd76140ef55e0b5941d423eee6c3856f;p=anna.git diff --git a/include/anna/dbms/String.hpp b/include/anna/dbms/String.hpp new file mode 100644 index 0000000..a591eed --- /dev/null +++ b/include/anna/dbms/String.hpp @@ -0,0 +1,114 @@ +// 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_String_hpp +#define anna_dbms_String_hpp + +#include + +#include + +namespace anna { + +namespace dbms { + +/** + Cadena usada como entrada y/o salida de las sentencias SQL. +*/ +class String : public Data { +public: + /** + Constructor. + \param maxSize Tamao maximo que puede tener esta cadena. 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. + */ + explicit String(const int maxSize, const bool isNulleable = false) : + Data(Type::String, maxSize, isNulleable) { + Data::setBuffer(a_value = new char [maxSize + 1]); + anna_memset(a_value, 0, maxSize + 1); + } + + /** + Constructor copia. + \param other Instancia de la que copiar. + */ + String(const String& other) : + Data(other), + a_value(other.a_value) { + const int maxSize = getMaxSize(); + Data::setBuffer(a_value = new char [maxSize + 1]); + anna_memset(a_value, 0, maxSize + 1); + } + + /** + Destructor. + */ + virtual ~String() { delete [] a_value; } + + /** + Devuelve el contenido de la cadena. + \return El contenido de la cadena. + \warning Si el metodo Data::isNull devolvio \em true el resultado de este metodo no esta definido. + */ + const char* getValue() const throw() { return a_value; } + + /** + Operador de copia. + \param str Cadena de la que copiar. Si la longitud de la cadena sobrepasa el tamao maximo + indicado en el constructor obtendremos una excepcin. + \return La instancia de esta cadena. + */ + String& operator = (const String& str) throw(RuntimeException); + + /** + Operador de asignacin. + \param str Cadena de la que copiar. Si la longitud de la cadena sobrepasa el tamao maximo + indicado en el constructor obtendremos una excepcin. + \return La instancia de esta cadena. + */ + String& operator = (const char* str) throw(RuntimeException); + + /** + Operador de asignacin. + \param str Cadena de la que copiar. Si la longitud de la cadena sobrepasa el tamao maximo + indicado en el constructor obtendremos una excepcin. + \return La instancia de esta cadena. + */ + String& operator = (const std::string& str) throw(RuntimeException) { return operator= (str.c_str()); } + + /** + Operador de conversion. si el contenido de la columna sociada + fue nulo este metodo devolvera NULL. + \return El contenido de esta cadena. + */ + operator const char*() const throw() { return (Data::isNull() == true) ? NULL : a_value; } + + /** + Elimina los espacios a la derecha de la cadena recibida. + \return La misma cadena recibida pero con los espacios eliminados. + */ + static char* strip(char *str) throw(); + + /** + 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(); + +private: + char* a_value; + + void do_clear() throw() { a_value [0] = 0; } +}; + +} +} + +#endif +