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_StatementTranslator_hpp
10 #define anna_dbms_StatementTranslator_hpp
12 #include <anna/core/RuntimeException.hpp>
21 * Clase que ajustar de forma transparente las diferencias de tratamiento que tiene las
22 * sentencias SQL en los distintos motores de base de datos. De esta forma una aplicación
23 * originariamente escrita para un determinado RDBMS no tendrá que hacer ningún cambio
24 * en las sentencias SQL al cambiar a otro RDBMS.
26 * Por ejemplo para indicar los parámetros de entrada en Oracle se indica con un
27 * literal precedido de ':' o '&'. Con lo que la sentencia podría quedar como:
29 * insert into foo (field1, field2) values (:f1, :f2)
32 * En PosgreSQL (tambien sorpotado en Oracle) quedaría algo así:
34 * insert into foo (field1, field2) values (&f1, &f2)
37 * Mientras que en MySQL la expresión debería ser como:
39 * insert into foo (field1, field2) values (?, ?);
42 * \see anna::dbms::Database::setStatementTranslator
44 class StatementTranslator {
46 * Devuelve el nombre lógico de este traductor.
47 * \return el nombre lógico de este traductor.
49 const char* getName() const { return a_name; }
54 * \param name Nombre lógico del traductor.
56 explicit StatementTranslator(const char* name) : a_name(name) {;}
59 * Se invoca automáticamente desde anna::dbms::Database::createStatement si la
60 * instancia de la base de datos tiene asociada alguna instancia heredada de esta clase.
62 * Ã
\89ste metodo sólo se invoca una vez para cada una de las sentencias definidas sobre
63 * la base de datos, por lo que la traducción de sentencias SQL tiene un consumo despreciable
64 * con respecto al tiempo total del proceso.
66 * \param statement Sentencia SQL original.
67 * \return La sentencia SQL correspondiente con la original, pero tratada para que
68 * pueda ser interpretada correctamente por el motor de base de datos sobre el que
71 virtual const char* apply(const char* statement) noexcept(false) = 0;
76 StatementTranslator(const StatementTranslator&);
78 friend class Database;