Como comenté en el update de post anterior respecto de como usar Firebird con JRuby , me era imposible insertar registros con sentencias sql, por lo que tuve que revisar otras opciones.
Intenté compilar el adaptador fb en JRuby sin éxito por tener dependencias nativas, por lo que decidí intentar con Ruby Enterprise Edition.
Si bien pude instalar las gemas fb y fb_adapter, me era imposible realizar consultas a la db. De ActiveRecord, fb_adapter.rb recibía el nombre de la tabla entre comillas, y al parecer a mi versión de db no le gustaba.
Despues de mucho pelear, pude hacerlo editando el comportamiento de fb_adapter.rb, haciendo que omita las comillas en la sentencia.
El patch es:
def translate(sql) sql.gsub!(/\bIN\s+\(NULL\)/i, 'IS NULL') sql.sub!(/\bWHERE\s.*$/im) do |m| m.gsub(/\s=\s*NULL\b/i, ' IS NULL') end sql.gsub!(/\sIN\s+\([^\)]*\)/mi) do |m| m.gsub(/\(([^\)]*)\)/m) { |n| n.gsub(/\@(.*?)\@/m) { |n| "'#{quote_string(Base64.decode64(n[1..-1]))}'" } } end args = [] sql.gsub!(/\@(.*?)\@/m) { |m| args << Base64.decode64(m[1..-1]); '?' } sql.gsub!(/"|'/, "") unless /rdb/.match(sql) yield(sql, args) if block_given? end
lo que agregué fue
sql.gsub!(/"|'/, "") unless /rdb/.match(sql)
en donde elimino las comillas del nombre de tabla, a menos que estas formen parte del sql interno que se construye para obtener la metadata de las columnas (el patrón que más se repite es "rdb").
A partir de ahi, he podido acceder a la db firebird desde ActiveRecord sin problemas.
Agradezco a FreedomCoder por la ayuda con las expresiones regulares.
Saludos
Comentarios recientes
38 weeks 4 days ago
40 weeks 2 days ago
1 año 20 weeks ago
1 año 22 weeks ago
1 año 35 weeks ago
1 año 40 weeks ago
1 año 45 weeks ago
1 año 45 weeks ago
1 año 46 weeks ago
1 año 46 weeks ago