1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Respect 'ignore_tables' in SQLite structure dump

This commit is contained in:
Guillermo Iguaran 2017-05-13 23:01:13 -05:00
parent 486562fa95
commit 4b49ab6642
2 changed files with 30 additions and 1 deletions

View file

@ -38,7 +38,16 @@ module ActiveRecord
def structure_dump(filename, extra_flags)
dbfile = configuration["database"]
flags = extra_flags.join(" ") if extra_flags
`sqlite3 #{flags} #{dbfile} .schema > #{filename}`
ignore_tables = ActiveRecord::SchemaDumper.ignore_tables
if ignore_tables.any?
tables = `sqlite3 #{dbfile} .tables`.split - ignore_tables
condition = tables.map { |table| "tbl_name = '#{table}'" }.join(" OR ")
statement = "SELECT sql FROM sqlite_master WHERE #{condition} ORDER BY tbl_name, type DESC, name"
`sqlite3 #{flags} #{dbfile} "#{statement}" > #{filename}`
else
`sqlite3 #{flags} #{dbfile} .schema > #{filename}`
end
end
def structure_load(filename, extra_flags)

View file

@ -180,6 +180,9 @@ if current_adapter?(:SQLite3Adapter)
"adapter" => "sqlite3",
"database" => @database
}
`sqlite3 #{@database} 'CREATE TABLE bar(id INTEGER)'`
`sqlite3 #{@database} 'CREATE TABLE foo(id INTEGER)'`
end
def test_structure_dump
@ -189,6 +192,23 @@ if current_adapter?(:SQLite3Adapter)
ActiveRecord::Tasks::DatabaseTasks.structure_dump @configuration, filename, "/rails/root"
assert File.exist?(dbfile)
assert File.exist?(filename)
assert_match(/CREATE TABLE foo/, File.read(filename))
assert_match(/CREATE TABLE bar/, File.read(filename))
ensure
FileUtils.rm_f(filename)
FileUtils.rm_f(dbfile)
end
def test_structure_dump_with_ignore_tables
dbfile = @database
filename = "awesome-file.sql"
ActiveRecord::SchemaDumper.expects(:ignore_tables).returns(["foo"])
ActiveRecord::Tasks::DatabaseTasks.structure_dump(@configuration, filename, "/rails/root")
assert File.exist?(dbfile)
assert File.exist?(filename)
assert_match(/bar/, File.read(filename))
assert_no_match(/foo/, File.read(filename))
ensure
FileUtils.rm_f(filename)
FileUtils.rm_f(dbfile)