--- /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_String_hpp
+#define anna_dbms_String_hpp
+
+#include <anna/core/RuntimeException.hpp>
+
+#include <anna/dbms/Data.hpp>
+
+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
+