--- /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 //
+
+
+#include <ctype.h>
+
+#include <anna/config/defines.hpp>
+
+#include <anna/dbms.mysql/OracleTranslator.hpp>
+
+using namespace std;
+using namespace anna;
+using namespace anna::dbms;
+
+mysql::OracleTranslator mysql::OracleTranslator::st_this;
+
+/*
+ * Pone las sentencias SQL escritas para Oracle en el formato que necesita el
+ * MySQL.
+ *
+ * La sentencia Oracle podría ser algo así como:
+ * insert into foo (a, b, c) values (:x, :y, :zzzz)
+ * update goo set xx=&value where yy=:zzz
+ *
+ * Y Debería quedar algo así:
+ * insert into foo (a, b, c) values (?,?,?)
+ * update goo set xx=? where yy=?
+ */
+const char* mysql::OracleTranslator::apply(const char* statement)
+throw(RuntimeException) {
+ bool makeit = false;
+
+ if(anna_strchr(statement, ':') != NULL)
+ makeit = true;
+ else if(anna_strchr(statement, '&') != NULL)
+ makeit = true;
+
+ if(makeit == false)
+ return statement;
+
+ allocate(statement);
+ enum { Copying, Filtering };
+ int mode(Copying);
+ char* w = a_buffer;
+ char character;
+
+ while((character = *statement) != 0) {
+ switch(mode) {
+ case Copying:
+
+ if(character == ':' || character == '&') {
+ *w ++ = '?';
+ mode = Filtering;
+ } else
+ *w ++ = character;
+
+ break;
+ case Filtering:
+
+ if(character == ',' || character == ')' || isspace(character) || iscntrl(character)) {
+ *w ++ = character;
+ mode = Copying;
+ }
+
+ break;
+ }
+
+ statement ++;
+ }
+
+ *w = 0;
+ return a_buffer;
+}
+
+void mysql::OracleTranslator::allocate(const char* statement)
+throw() {
+ const int size = anna_strlen(statement);
+
+ if(size > a_size) {
+ if(a_size > 0) {
+ delete a_buffer;
+ a_buffer = NULL;
+ }
+
+ a_buffer = new char [a_size = size + 1];
+ }
+
+ a_buffer [0] = 0;
+}
+