On Sep 20, 2008, at 8:08 AM, Todd Tyree wrote:

Ok, here's what I've come up with on the spur of the moment (goes in spec_helper.rb):

 config.after(:each) do
    result = ActiveRecord::Base.connection.execute('SHOW TABLES;')
    while table = result.fetch_row
      # Or whatever you think is appropriate.
      next if table.index('schema_migrations') or table.index('roles')
      ActiveRecord::Base.connection.execute("TRUNCATE #{table}")
    end
  end


Seems like it would be more efficient if you pull the "SHOW TABLES" statement out of the block, and then allow closure to capture that variable. This way "SHOW TABLES" would only be evaluated once (since the tables aren't changing in each example).

Also, it looks like there is no way to truncate multiple tables all in one shot (at least in mysql and sql92):

http://dev.mysql.com/doc/refman/5.0/en/truncate.html

Scott



The main problem is that it's slow. I tried batching them all up, and running them in a single execute, but foundered on the mysql_options multi-statements setting (it seems that mysql won't, by default, allow multi-statement strings unless you set the multi- statement flag after init and before connect. Not sure how to do this from Base.connect, or even if it's possible. Sorry, lost track of the article where I found the original reference).

Best,
Todd


_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to