Revert "Remove mysql and oracle resources for anna-ericsson project"
[anna.git] / include / anna / dbms / String.hpp
diff --git a/include/anna/dbms/String.hpp b/include/anna/dbms/String.hpp
new file mode 100644 (file)
index 0000000..a591eed
--- /dev/null
@@ -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 <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
+