1 // ANNA - Anna is Not Nothingness Anymore //
3 // (c) Copyright 2005-2015 Eduardo Ramos Testillano & Francisco Ruiz Rayo //
5 // See project site at http://redmine.teslayout.com/projects/anna-suite //
6 // See accompanying file LICENSE or copy at http://www.teslayout.com/projects/public/anna.LICENSE //
9 #ifndef anna_dbms_oracle_Database_hpp
10 #define anna_dbms_oracle_Database_hpp
12 #include <anna/dbms/Database.hpp>
13 #include <anna/dbms/DatabaseException.hpp>
25 Clase que modela la interaccion entre la RDMS Oracle (tm) y nuestra aplicacion.
27 \warning La definicion conexiones y clusters debe hacerse antes de invocar al metodo Application::start,
28 o bien, en el metodo Application::initialize.
30 class Database : public dbms::Database {
34 \param dbmsName Nombre de la base de datos.
36 Database(const char* dbmsName);
40 \param componentName Nombre logico de la base de datos por que el podemos buscar este compoenente.
41 \param dbmsName Nombre de la base de datos.
43 Database(const char* componentName, const char* dbmsName);
51 Devuelve el manejador de error asociado a esta base de datos.
52 \return El manejador de error asociado a esta base de datos.
54 OCIError* getErrorHandler() { return a_error; }
57 Operador de conversion.
58 \return El puntero al entorno asociado a esta base de datos.
60 operator OCIEnv*() { return a_env; }
63 Devuelve la cadena por la que podemos buscar el componente.
64 \return La cadena por la que podemos buscar el componente.
65 \see Application::find
67 static const char* getClassName() { return "anna::dbms::oracle::Database"; }
70 * Devuelve el caracter usado como punto decimal, obtenido a partir de la configuraciĆ³n establecida
71 * por la variables de entorno, LANG, LC_NUMERIC, etc, etc.
73 * \return El caracter usado como punto decimal.
75 * \warning Metodo exclusivamente de uso interno.
77 static char getDecimalPoint() { return st_decimalPoint; }
83 static char st_decimalPoint;
85 void do_initialize() noexcept(false);
87 dbms::Connection* allocateConnection(const std::string& name, const char* user, const char* password)
90 dbms::Statement* allocateStatement(const char* name, const std::string& expression, const bool isCritical)
93 dbms::InputBind* allocateInputBind(const char* name, Data&)
95 void deallocate(dbms::InputBind* inputBind) ;
97 dbms::OutputBind* allocateOutputBind(const char* name, Data&)
99 void deallocate(dbms::OutputBind* outputBind) ;
101 static void initializeDecimalPoint() noexcept(false);
104 #ifdef ANNA_RDBMS_TRACE
105 #define anna_dbms_oracle_check(a,error) \
107 Logger::write (Logger::Debug, (#a), __FILE__, __LINE__); \
108 const sword status = (a); \
109 if (status != OCI_SUCCESS) { \
110 anna::dbms::oracle::ResultCode resultCode (status, (error)); \
111 throw DatabaseException (resultCode, __FILE__, __LINE__); \
115 #define anna_dbms_oracle_check(a,error) \
117 const sword status = (a); \
118 if (status != OCI_SUCCESS) { \
119 anna::dbms::oracle::ResultCode resultCode (status, (error)); \
120 throw DatabaseException (resultCode, __FILE__, __LINE__); \