¿Cómo se ejecutan manualmente comandos SQL en Ruby On Rails usando NuoDB?
Estoy intentando ejecutar manualmente comandos SQL para poder acceder a los procedimientos en NuoDB.
Estoy usando Ruby on Rails y estoy usando el siguiente comando:
ActiveRecord::Base.connection.execute("SQL query")
La "consulta SQL" podría ser cualquier comando SQL.
Por ejemplo, tengo una tabla llamada "Comentarios" y cuando ejecuto el comando:
ActiveRecord::Base.connection.execute("SELECT `feedbacks`.* FROM `feedbacks`")
Esto solo devolvería una respuesta "verdadera" en lugar de enviarme todos los datos solicitados.
Este es el resultado en Rails Console:
SQL (0.4ms) SELECT `feedbacks`.* FROM `feedbacks`
=> true
Me gustaría usar esto para llamar a procedimientos almacenados en NuoDB, pero al llamar a los procedimientos, esto también devolvería una respuesta "verdadera".
¿Hay alguna manera de ejecutar comandos SQL y obtener los datos solicitados en lugar de obtener una respuesta "verdadera"?
El comando de trabajo que estoy usando para ejecutar declaraciones SQL personalizadas es:
results = ActiveRecord::Base.connection.execute("foo")
siendo "foo" la declaración SQL (es decir, "SELECCIONAR * DE la tabla").
Este comando devolverá un conjunto de valores como hash y los colocará en la variable de resultados.
Entonces, en mis rieles application_controller.rb agregué esto:
def execute_statement(sql)
results = ActiveRecord::Base.connection.execute(sql)
if results.present?
return results
else
return nil
end
end
El uso de enable_statement devolverá los registros encontrados y, si no hay ninguno, devolverá nulo.
De esta manera puedo llamarlo en cualquier lugar de la aplicación Rails, como por ejemplo:
records = execute_statement("select * from table")
"execute_statement" también puede llamar a procedimientos, funciones y también vistas de bases de datos de NuoDB.
Para mí, no pude lograr que esto devolviera un hash.
results = ActiveRecord::Base.connection.execute(sql)
Pero usar el método exec_query funcionó.
results = ActiveRecord::Base.connection.exec_query(sql)
Volviendo a publicar la respuesta de nuestro foro para ayudar a otros con un problema similar:
@connection = ActiveRecord::Base.connection
result = @connection.exec_query('select tablename from system.tables')
result.each do |row|
puts row
end
res = ActiveRecord::Base.connection_pool.with_connection { |con| con.exec_query( "SELECT 1;" ) }
El código anterior es un ejemplo de
- ejecutar SQL arbitrario en su conexión de base de datos
- devolver la conexión al grupo de conexiones después