+++ /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_oracle_Database_hpp
-#define anna_dbms_oracle_Database_hpp
-
-#include <anna/dbms/Database.hpp>
-#include <anna/dbms/DatabaseException.hpp>
-
-struct OCIEnv;
-struct OCIError;
-
-namespace anna {
-
-namespace dbms {
-
-namespace oracle {
-
-/**
- Clase que modela la interaccion entre la RDMS Oracle (tm) y nuestra aplicacion.
-
- \warning La definicion conexiones y clusters debe hacerse antes de invocar al metodo Application::start,
- o bien, en el metodo Application::initialize.
-*/
-class Database : public dbms::Database {
-public:
- /**
- Contructor.
- \param dbmsName Nombre de la base de datos.
- */
- Database(const char* dbmsName);
-
- /**
- Contructor.
- \param componentName Nombre logico de la base de datos por que el podemos buscar este compoenente.
- \param dbmsName Nombre de la base de datos.
- */
- Database(const char* componentName, const char* dbmsName);
-
- /**
- Destructor.
- */
- virtual ~Database();
-
- /**
- Devuelve el manejador de error asociado a esta base de datos.
- \return El manejador de error asociado a esta base de datos.
- */
- OCIError* getErrorHandler() throw() { return a_error; }
-
- /**
- Operador de conversion.
- \return El puntero al entorno asociado a esta base de datos.
- */
- operator OCIEnv*() throw() { return a_env; }
-
- /**
- Devuelve la cadena por la que podemos buscar el componente.
- \return La cadena por la que podemos buscar el componente.
- \see Application::find
- */
- static const char* getClassName() { return "anna::dbms::oracle::Database"; }
-
- /**
- * Devuelve el caracter usado como punto decimal, obtenido a partir de la configuraciĆ³n establecida
- * por la variables de entorno, LANG, LC_NUMERIC, etc, etc.
- *
- * \return El caracter usado como punto decimal.
- *
- * \warning Metodo exclusivamente de uso interno.
- */
- static char getDecimalPoint() throw() { return st_decimalPoint; }
-
-private:
- OCIEnv* a_env;
- OCIError* a_error;
-
- static char st_decimalPoint;
-
- void do_initialize() throw(RuntimeException);
-
- dbms::Connection* allocateConnection(const std::string& name, const char* user, const char* password)
- throw(RuntimeException);
-
- dbms::Statement* allocateStatement(const char* name, const std::string& expression, const bool isCritical)
- throw(RuntimeException);
-
- dbms::InputBind* allocateInputBind(const char* name, Data&)
- throw(RuntimeException);
- void deallocate(dbms::InputBind* inputBind) throw();
-
- dbms::OutputBind* allocateOutputBind(const char* name, Data&)
- throw(RuntimeException);
- void deallocate(dbms::OutputBind* outputBind) throw();
-
- static void initializeDecimalPoint() throw(RuntimeException);
-};
-
-#ifdef ANNA_RDBMS_TRACE
-#define anna_dbms_oracle_check(a,error) \
- { \
- Logger::write (Logger::Debug, (#a), __FILE__, __LINE__); \
- const sword status = (a); \
- if (status != OCI_SUCCESS) { \
- anna::dbms::oracle::ResultCode resultCode (status, (error)); \
- throw DatabaseException (resultCode, __FILE__, __LINE__); \
- } \
- }
-#else
-#define anna_dbms_oracle_check(a,error) \
- { \
- const sword status = (a); \
- if (status != OCI_SUCCESS) { \
- anna::dbms::oracle::ResultCode resultCode (status, (error)); \
- throw DatabaseException (resultCode, __FILE__, __LINE__); \
- } \
- }
-#endif
-}
-}
-}
-
-#endif