+++ /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_dbos_Accesor_hpp
-#define anna_dbos_Accesor_hpp
-
-#include <anna/core/RuntimeException.hpp>
-#include <anna/core/mt/Mutex.hpp>
-
-#include <anna/dbms/DatabaseException.hpp>
-
-#include <anna/dbos/defines.hpp>
-
-namespace anna {
-
-namespace dbms {
-class Database;
-class Connection;
-class Statement;
-}
-
-namespace dbos {
-
-class StorageArea;
-
-/**
- Interfaz que deben cumplir los objetos encargados de acceder al objeto del medio fisico,
- que normalmente sera alguna base de datos.
-*/
-class Accesor : public Mutex {
-public:
- typedef short Id; /**< Permite identificar el tipo de accesor. */
-
- /**
- Destructor.
- */
- virtual ~Accesor();
-
- /**
- Devuelve el identificador de este accesor.
- \return El identificador de este accesor.
- */
- Id getId() const throw() { return a_id; }
-
- /**
- Devuelve la instancia de la sentencia \em statement asociada a este cargador.
- \return La instancia de la sentencia \em statement asociada a este cargador. Puede ser NULL.
- */
- dbms::Statement* getStatement()
- throw(RuntimeException) {
- return (a_statement == NULL && a_database != NULL) ? (a_statement = initialize(*a_database)) : a_statement;
- }
-
- /**
- * Devuelve \em true si el accesor fue inicializado con base de datos o \em false en otro caso.
- * \return \em true si el accesor fue inicializado con base de datos o \em false en otro caso.
- */
- bool hasDataBase() const throw() { return a_database != NULL; }
-
- /**
- Devuelve la instancia de la base de datos asociada a este cargador.
- \return La instancia de la base de datos asociada a este cargador.
-
- \warning Si el accesor fue inicializado sin base de datos lo resultados no están definidos.
- */
- dbms::Database& getDatabase() throw() { return *a_database; }
-
- /**
- Devuelve la conexion que esta usando actualmente este cargador.
- \return la conexion que esta usando actualmente este cargador.
- */
- dbms::Connection& getConnection() throw(RuntimeException) {
- if(a_connection == NULL) {
- std::string msg(asString());
- msg += " | No available database connection";
- throw RuntimeException(msg, ANNA_FILE_LOCATION);
- }
-
- return *a_connection;
- }
-
- /**
- Devuelve la representacion en forma de cadena de la clave primaria establecida.
- @return La representacion en forma de cadena de la clave primaria establecida.
- */
- virtual std::string asString() const throw() = 0;
-
- /**
- Metodo de debemos re-escribir para devolver el nombre completo del selector de recursos.
- Para evitar ambigüedades este nombre deberia incluir la lista completa de \em namespaces
- a la que pertenece la clase.
- \return Una cadena con el nombre de este selector.
- */
- virtual const char* getClassName() const throw() = 0;
-
-protected:
- /**
- Constructor.
- \param database Base de datos asociada a este cargador y que deberia servir para
- obtener los datos de un objeto. Debe tener la misma disponibilidad que este cargador.
- \param id Identificador de este accesor.
- */
- Accesor(dbms::Database& database, const Id id) :
- a_database(&database),
- a_id(id),
- a_statement(NULL),
- a_connection(NULL),
- a_emodeIsNull(true)
- {;}
-
- /**
- Constructor.
- \param database Base de datos asociada a este cargador y que deberia servir para
- obtener los datos de un objeto. Debe tener la misma disponibilidad que este cargador.
- \param id Identificador de este accesor.
- \param emode Modo de actuar en caso de no encontrar el dato buscado.
- */
- Accesor(dbms::Database& database, const Id id, const Exception::Mode::_v emode) :
- a_database(&database),
- a_id(id),
- a_statement(NULL),
- a_connection(NULL),
- a_emodeIsNull(false),
- a_exceptionMode(emode)
- {;}
-
- /**
- Constructor.
- \param id Identificador de este accesor.
- */
- Accesor(const Id id) :
- a_database(NULL),
- a_id(id),
- a_statement(NULL),
- a_connection(NULL),
- a_emodeIsNull(true)
- {;}
-
- /**
- Metodo que deben implementar todos los accesores para definir la sentencia
- SQL que los definira.
- Se invocara automaticamente desde el nucleo de anna.dbos la primera vez que
- se use este accesor, de forma que el programador solo debe preocuparse por
- definir este metodo.
- \param database Instancia de la base de datos indicada en el constructor.
- */
- virtual dbms::Statement* initialize(dbms::Database& database) throw(RuntimeException) = 0;
-
-private:
- dbms::Database* a_database;
- const Id a_id;
- dbms::Statement* a_statement;
- dbms::Connection* a_connection;
- bool a_emodeIsNull;
- Exception::Mode::_v a_exceptionMode;
-
- void setStatement(dbms::Statement* statement) throw() { a_statement = statement; }
-
- virtual bool load(dbms::Connection*, const StorageArea*) throw(RuntimeException, dbms::DatabaseException);
-
- friend class StorageArea;
-};
-
-}
-}
-
-#endif
-
-
-