Comment exécuter manuellement des commandes SQL dans Ruby On Rails à l’aide de NuoDB

J’essaie d’exécuter manuellement des commandes SQL pour pouvoir accéder aux procédures de NuoDB.

J’utilise Ruby on Rails et j’utilise la commande suivante:

ActiveRecord::Base.connection.execute("SQL query") 

La “requête SQL” peut être toute commande SQL.

Comme par exemple j’ai une table appelée “Feedback” et quand j’exécute la commande:

 ActiveRecord::Base.connection.execute("SELECT `feedbacks`.* FROM `feedbacks`") 

Cela ne renverrait qu’une réponse “vraie” au lieu de m’envoyer toutes les données demandées.

Ceci est la sortie sur la console Rails est:

 SQL (0.4ms) SELECT `feedbacks`.* FROM `feedbacks` => true 

Je voudrais utiliser ceci pour appeler des procédures stockées dans NuoDB mais en appelant les procédures, cela renverrait également une réponse “vraie”.

Est-il possible d’exécuter des commandes SQL et d’obtenir les données demandées au lieu d’obtenir une “vraie” réponse?

La commande de travail que j’utilise pour exécuter des instructions SQL personnalisées est la suivante:

 results = ActiveRecord::Base.connection.execute("foo") 

avec “foo” étant l’instruction SQL (c.-à-d. “SELECT * FROM table”).

Cette commande renvoie un ensemble de valeurs sous forme de hachage et les place dans la variable de résultat.

Donc sur mes rails application_controller.rb j’ai ajouté ceci:

  def execute_statement(sql) results = ActiveRecord::Base.connection.execute(sql) if results.present? return results else return nil end end 

Utiliser execute_statement renverra les enregistrements trouvés et s’il n’y en a pas, il retournera nul.

De cette façon, je peux l’appeler n’importe où sur l’application des rails, comme par exemple:

 records = execute_statement("select * from table") 

“execute_statement” peut également appeler des procédures, fonctions et vues de firebase database NuoDB.

Pour moi, je ne pouvais pas obtenir ceci pour retourner un hash.

 results = ActiveRecord::Base.connection.execute(sql) 

Mais en utilisant la méthode exec_query travaillée.

 results = ActiveRecord::Base.connection.exec_query(sql) 

Republier la réponse de notre forum pour aider les autres avec un problème similaire:

 @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;" ) } 

Le code ci-dessus est un exemple pour

  1. exécuter du SQL arbitraire sur votre firebase database
  2. le retour de la connexion au pool de connexion après