SQL-Anweisungen auf einmal ausführen?

Hallo,

ich habe einen kleinen rake-Task geschrieben, der vor dem Testen
Testdaten in
die Datenbank schreibt:
http://pastie.org/253485
Was dabei nervig ist, dass ich auf die Schleife (Zeile 6-8) angewiesen
bin, da
Zeile 9 (auskommentiert) knallt, wenn Das SQL-File mehr als eine
Anweisung
hat.
Problematisch ist nur, dass der Split (Zeile 2) bricht, wenn im SQL in
einem
Daten- oder Kommentarfeld ein ; steht.
Gibt es eine Möglichkeit, das ganze SQL-File einfach in die Datenbank zu
schreiben?

Danke,
Keep smiling
yanosz

hi,
vielleicht sind fixtures was für diese aufgabe.

http://biodegradablegeek.com/2008/07/how-to-use-fixtures-to-populate-your-database-in-rails/

besten gruß,

christian

Am 15.08.2008 um 12:53 schrieb Jan L.:

On 15.08.2008, at 12:53, Jan L. wrote:

hat.
Problematisch ist nur, dass der Split (Zeile 2) bricht, wenn im SQL
in einem
Daten- oder Kommentarfeld ein ; steht.
Gibt es eine Möglichkeit, das ganze SQL-File einfach in die
Datenbank zu
schreiben?

Wie waer’s denn mit einem einfachen Aufruf vom mysql-Client aus dem
Rake-Task heraus? Muss man sich um die Details nicht mehr kuemmern.

Alternativ versteht das Ruby/MySQL Gem auch die Option, das Ausfuehren
mehrerer Statements in einer Query zu aktivieren:
ActiveRecord
::Base.connection.set_server_option(Mysql::OPTION_MULTI_STATEMENTS_ON)
(ungetestet). Bleibt noch zu testen, wie sich das mit Kommentaren
verhaelt.

Fuer (spaerliche) Details dazu siehe MySQL/Ruby

Cheers, Mathias

// Mathias Meyer
// PAPERPLANES SOFTWARE.ENTWICKLUNG
// www.paperplanes.de
// Gabriel-Max-Str. 3, 10245 Berlin
// meyer.at.paperplanes.de, 0163.765.27.47

hallo,

sql = “BEGIN; #{File.read(‘db/test_data.sql’)}; COMMIT;”
cmd = “mysql -u user_name -D database_name -e ‘#{sql}’”
cmd

sollte funktionieren. in nem rake task fände ich das auch legitim. die
db-zugangsdaten kannst du dir aus der database.yaml holen:

rails_env = ENV[‘RAILS_ENV’] || ‘development’
db_config = YAML.load(File.read(“config/database.yml”))[rails_env]

ist natürlich nicht so schön, wie es in direkt in ruby zu machen, aber
sicher schneller. der rake-task benötigt jetzt den mysql-client auf
dem rechner.

wie schon vorgeschlagen könntest du die daten im dump auch in fixtures
konvertieren, vielleicht bieten sich hier CSV-fixtures an –
http://ar.rubyonrails.org/classes/Fixtures.html

viele
grüße,phillip

Am 15.08.2008 um 12:53 schrieb Jan L.: