X-Git-Url: https://git.teslayout.com/public/public/public/?a=blobdiff_plain;f=include%2Fanna%2Fdbms%2FConnection.hpp;fp=include%2Fanna%2Fdbms%2FConnection.hpp;h=0000000000000000000000000000000000000000;hb=851ff2962362fd5bad874e8ed91445b296eaca24;hp=4744128950f6c6ac88a9af88b6957ada5609c520;hpb=78be86969d2f26a9084b0c4af6ce43d5fa4ed3fd;p=anna.git diff --git a/include/anna/dbms/Connection.hpp b/include/anna/dbms/Connection.hpp deleted file mode 100644 index 4744128..0000000 --- a/include/anna/dbms/Connection.hpp +++ /dev/null @@ -1,194 +0,0 @@ -// 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_Connection_hpp -#define anna_dbms_Connection_hpp - -#include - -#include -#include - -namespace anna { - -namespace xml { -class Node; -} - -namespace dbms { - -class Database; -class Statement; - -/** - Clase que modela la conexion con la base de datos. - - Para crear una nueva conexion hay que invocar al Metodo Database::createConnection de la base de datos - contra la que deseamos establecer la conexion. - - Para obtener una conexion a una determinada base de datos habria que instanciar dicha base de datos - e invocar al Metodo Database::createConnection. Independientemente del tipo de conexion particular que la base - de datos retorne, debemos asignarlo a un puntero de tipo anna::dbms::Connection. -*/ -class Connection : public comm::Resource { -public: - /** - Devuelve la instancia de la base de datos asociada a esta conexion. - */ - Database& getDatabase() const throw() { return a_database; } - - /** - * Devuelve el usuario con el que fué realizada esta conexión. - * \return el usuario con el que fué realizada esta conexión. - */ - const std::string& getUser() const throw() { return a_user; } - - /** - * Devuelve el password del usuario con el que fué realizada esta conexión. - * \return el password del usuario con el que fué realizada esta conexión. - */ - const std::string& getPassword() const throw() { return a_password; } - - /** - * Establece el password del usuario de esta conexión - * \param password Codigo de acceso del usuario. - */ - void setPassword(const char* password) throw() { a_password = password; } - - /** - Establece el periodo de grabacion de esta conexion. Damos la posibilidad de que la conexion confirme - cambios realizados hasta el momento sin que termine la seccion critica que debemos establecer antes - de usar la conexion. - \param maxCommitPending Numero de transacciones que pueden estar pedientes de confirmacion antes - de invocar a #commit. Un valor 0, desactiva el periodo. - \return El periodo de grabacion que habia antes de invocar a este metodo. - \warning La invocacion a este metodo debera hacerse con una seccion critica activada sobre la - esta conexion. - */ - int setMaxCommitPending(const int maxCommitPending) throw() { - const int result = a_maxCommitPending; - a_maxCommitPending = maxCommitPending; - return result; - } - - /** - Desactiva el indicador de que la conexion requiere una invocacion a #rollback. - \warning La invocacion a este metodo debera hacerse con una seccion critica activada sobre la - esta conexion. - */ - void resetRollbackPending() throw() { a_rollbackPending = false; } - - /** - Activa de forma externa el indicador de que la conexion requiere una invocacion a #rollback. - \warning La invocacion a este metodo debera hacerse con una seccion critica activada sobre la - esta conexion. - */ - void activateRollbackPending() throw() { a_rollbackPending = true; } - - /** - Ejecuta la sentencia recibida como parametro. Si la sentencia no tiene variables de salida consideraria - que es un comando \em update, \em insert o \em delete, lo cual, implica la invocacion automatica a los - #commit o #rollback cuando termine la seccion critica de esta conexion. - - \param statement Sentencia que vamos a ejecuta - - \return La estructura con el resultado de la ejecucion de la sentencia. - - \warning La invocacion a este metodo debera hacerse con una seccion critica activada sobre la - esta conexion, por ejemplo: - \code - Guard guard (connection); - connection.execute (someStatement); - \endcode - */ - ResultCode execute(Statement* statement) throw(RuntimeException, DatabaseException); - - /** - 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(); - - /** - Devuelve un documento XML con la informacion referente a esta instancia. - \param parent Nodo XML del que debe colgar la informacion. - @return un documento XML con la informacion referente a esta instancia. - */ - virtual xml::Node* asXML(xml::Node* parent) const throw(); - -protected: - /** - Instancia de la base de datos asociada a esta conexion. - Coincidiria con la indicada en el constructor. - */ - Database& a_database; - std::string a_user; /**< Nombre del usuario */ - std::string a_password; /**< Clave de acceso del usuario. */ - - /** - Contructor. - - @param database Instancia de la base de datos asociada a esta conexion. - @param name Nombre logico de la conexion. - @param user Nombre del usuario con el que realizamos la conexion. - @param password Codigo de acceso del usuario. - */ - Connection(Database& database, const std::string& name, const char* user, const char* password) : - comm::Resource(name), - a_database(database), - a_user(user), - a_password(password), - a_lockingCounter(0), - a_commitPending(0), - a_rollbackPending(false), - a_maxCommitPending(0) {} - - /** - Metodo que fija los cambios realizados en la ejecucion de los comandos SQL. - */ - void commit() throw(RuntimeException, DatabaseException); - - /** - Metodo que debemos re-escribir para descartar los cambios realizados sobre las tablas mediante - esta conexion. - */ - void rollback() throw(); - - /** - Metodo que debemos re-escribir para hacer efectiva esta conexion. - */ - virtual void open() throw(DatabaseException) = 0; - - /** - Metodo que debemos re-escribir para cerrar la conexion. - */ - virtual void close() throw() = 0; - -private: - int a_commitPending; // Numero de sentencias a las que no se han fijado cambios. - bool a_rollbackPending; - int a_maxCommitPending; - int a_lockingCounter; - - Connection(const Connection&); - - void initialize() throw(RuntimeException, DatabaseException); - void lock() throw(RuntimeException); - void unlock() throw(); - - virtual bool do_beginTransaction() throw(RuntimeException, DatabaseException) { return false;} - virtual void do_commit() throw(RuntimeException, DatabaseException) = 0; - virtual void do_rollback() throw() = 0; - - friend class Database; -}; - -} -} - -#endif