Permalink
Browse files

Respect 'ignore_tables' in SQLite structure dump

  • Loading branch information...
guilleiguaran committed May 14, 2017
1 parent 486562f commit 4b49ab66425283f4b79907873b72236c7ebec0be
@@ -38,7 +38,16 @@ def charset
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)
@@ -180,6 +180,9 @@ def setup
"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 @@ def test_structure_dump
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)

0 comments on commit 4b49ab6

Please sign in to comment.