name in schema_migrations, migrations in schema dump
This commit is contained in:
parent
4e4e9ad48a
commit
7139aa878c
@ -429,9 +429,13 @@ def initialize_schema_migrations_table
|
|||||||
update "UPDATE #{quote_table_name(sm_table)} SET migrated_at = '#{quoted_date(Time.now)}' WHERE migrated_at IS NULL"
|
update "UPDATE #{quote_table_name(sm_table)} SET migrated_at = '#{quoted_date(Time.now)}' WHERE migrated_at IS NULL"
|
||||||
change_column sm_table, :migrated_at, :datetime, :null => false
|
change_column sm_table, :migrated_at, :datetime, :null => false
|
||||||
end
|
end
|
||||||
|
unless cols.include?("name")
|
||||||
|
add_column sm_table, :name, :string, :null => false, :default => ""
|
||||||
|
end
|
||||||
else
|
else
|
||||||
create_table(sm_table, :id => false) do |schema_migrations_table|
|
create_table(sm_table, :id => false) do |schema_migrations_table|
|
||||||
schema_migrations_table.column :version, :string, :null => false
|
schema_migrations_table.column :version, :string, :null => false
|
||||||
|
schema_migrations_table.column :name, :string, :null => false, :default => ""
|
||||||
schema_migrations_table.column :migrated_at, :datetime, :null => false
|
schema_migrations_table.column :migrated_at, :datetime, :null => false
|
||||||
end
|
end
|
||||||
add_index sm_table, :version, :unique => true,
|
add_index sm_table, :version, :unique => true,
|
||||||
|
@ -701,6 +701,7 @@ def record_version_state_after_migrating(target)
|
|||||||
@migrated_versions.push(target.version).sort!
|
@migrated_versions.push(target.version).sort!
|
||||||
table.insert(
|
table.insert(
|
||||||
table["version"] => target.version.to_s,
|
table["version"] => target.version.to_s,
|
||||||
|
table["name"] => File.basename(target.filename,'.rb').gsub(/^\d+_/,''),
|
||||||
table["migrated_at"] => Time.now
|
table["migrated_at"] => Time.now
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
@ -49,10 +49,19 @@ def self.define(info={}, &block)
|
|||||||
schema = new
|
schema = new
|
||||||
schema.instance_eval(&block)
|
schema.instance_eval(&block)
|
||||||
|
|
||||||
unless info[:version].blank?
|
initialize_schema_migrations_table
|
||||||
initialize_schema_migrations_table
|
assume_migrated_upto_version(info[:version], schema.migrations_path) unless info[:version].blank?
|
||||||
assume_migrated_upto_version(info[:version], schema.migrations_path)
|
end
|
||||||
end
|
|
||||||
|
def self.migration(version, name="", options={})
|
||||||
|
name, options = "", name if name.is_a?(Hash)
|
||||||
|
|
||||||
|
table = Arel::Table.new(ActiveRecord::Migrator.schema_migrations_table_name)
|
||||||
|
table.insert(
|
||||||
|
table["version"] => version,
|
||||||
|
table["name"] => name,
|
||||||
|
table["migrated_at"] => Time.now
|
||||||
|
)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -24,6 +24,7 @@ def self.dump(connection=ActiveRecord::Base.connection, stream=STDOUT)
|
|||||||
|
|
||||||
def dump(stream)
|
def dump(stream)
|
||||||
header(stream)
|
header(stream)
|
||||||
|
migrations(stream)
|
||||||
tables(stream)
|
tables(stream)
|
||||||
trailer(stream)
|
trailer(stream)
|
||||||
stream
|
stream
|
||||||
@ -62,6 +63,15 @@ def trailer(stream)
|
|||||||
stream.puts "end"
|
stream.puts "end"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def migrations(stream)
|
||||||
|
rows = @connection.select_all("SELECT * FROM #{@connection.quote_table_name(ActiveRecord::Migrator.schema_migrations_table_name)}")
|
||||||
|
rows.each do |migration|
|
||||||
|
line = %Q(migration "#{migration['version']}")
|
||||||
|
line << %Q(, "#{migration['name']}") unless migration['name'].blank?
|
||||||
|
stream.puts line
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def tables(stream)
|
def tables(stream)
|
||||||
@connection.tables.sort.each do |tbl|
|
@connection.tables.sort.each do |tbl|
|
||||||
next if ['schema_migrations', ignore_tables].flatten.any? do |ignored|
|
next if ['schema_migrations', ignore_tables].flatten.any? do |ignored|
|
||||||
|
@ -39,4 +39,27 @@ def test_schema_raises_an_error_for_invalid_column_type
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
class ActiveRecordSchemaMigrationsTest < ActiveRecordSchemaTest
|
||||||
|
def setup
|
||||||
|
super
|
||||||
|
@sm_table = ActiveRecord::Migrator.schema_migrations_table_name
|
||||||
|
@connection.execute "DELETE FROM #{@connection.quote_table_name(@sm_table)}"
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_migration_adds_row_to_migrations_table
|
||||||
|
ActiveRecord::Schema.migration("123001")
|
||||||
|
ActiveRecord::Schema.migration("123002", "add_magic_power_to_unicorns")
|
||||||
|
rows = @connection.select_all("SELECT * FROM #{@connection.quote_table_name(@sm_table)}")
|
||||||
|
assert_equal 2, rows.length
|
||||||
|
|
||||||
|
assert_equal "123001", rows[0]["version"]
|
||||||
|
assert_equal "", rows[0]["name"]
|
||||||
|
assert_match /^2\d\d\d-/, rows[0]["migrated_at"]
|
||||||
|
|
||||||
|
assert_equal "123002", rows[1]["version"]
|
||||||
|
assert_equal "add_magic_power_to_unicorns", rows[1]["name"]
|
||||||
|
assert_match /^2\d\d\d-/, rows[1]["migrated_at"]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -50,10 +50,10 @@ def test_schema_migrations_columns
|
|||||||
@conn.initialize_schema_migrations_table
|
@conn.initialize_schema_migrations_table
|
||||||
|
|
||||||
columns = @conn.columns(ActiveRecord::Migrator.schema_migrations_table_name).collect(&:name)
|
columns = @conn.columns(ActiveRecord::Migrator.schema_migrations_table_name).collect(&:name)
|
||||||
%w[version migrated_at].each { |col| assert columns.include?(col) }
|
%w[version name migrated_at].each { |col| assert columns.include?(col) }
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_add_migrated_at_to_exisiting_schema_migrations
|
def test_add_name_and_migrated_at_to_exisiting_schema_migrations
|
||||||
sm_table = ActiveRecord::Migrator.schema_migrations_table_name
|
sm_table = ActiveRecord::Migrator.schema_migrations_table_name
|
||||||
@conn.create_table(sm_table, :id => false) do |schema_migrations_table|
|
@conn.create_table(sm_table, :id => false) do |schema_migrations_table|
|
||||||
schema_migrations_table.column :version, :string, :null => false
|
schema_migrations_table.column :version, :string, :null => false
|
||||||
@ -63,9 +63,9 @@ def test_add_migrated_at_to_exisiting_schema_migrations
|
|||||||
|
|
||||||
@conn.initialize_schema_migrations_table
|
@conn.initialize_schema_migrations_table
|
||||||
|
|
||||||
m_ats = @conn.select_values("SELECT migrated_at FROM #{@conn.quote_table_name(sm_table)}")
|
rows = @conn.select_all("SELECT * FROM #{@conn.quote_table_name(sm_table)}")
|
||||||
assert_equal 2, m_ats.length
|
assert rows[0].has_key?("name")
|
||||||
assert_equal 2, m_ats.compact.length
|
assert rows[0].has_key?("migrated_at")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -1499,15 +1499,19 @@ def test_schema_migrations_table_name
|
|||||||
ActiveRecord::Base.table_name_suffix = ""
|
ActiveRecord::Base.table_name_suffix = ""
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_migration_row_includes_timestamp
|
def test_migration_row_includes_name_and_timestamp
|
||||||
conn = ActiveRecord::Base.connection
|
conn = ActiveRecord::Base.connection
|
||||||
sm_table = ActiveRecord::Migrator.schema_migrations_table_name
|
sm_table = ActiveRecord::Migrator.schema_migrations_table_name
|
||||||
|
|
||||||
ActiveRecord::Migrator.migrate(MIGRATIONS_ROOT + "/valid")
|
ActiveRecord::Migrator.migrate(MIGRATIONS_ROOT + "/valid")
|
||||||
|
|
||||||
conn.select_all("SELECT * FROM #{conn.quote_table_name(sm_table)}").each do |row|
|
rows = conn.select_all("SELECT * FROM #{conn.quote_table_name(sm_table)}")
|
||||||
assert_match /^2\d\d\d-/, row["migrated_at"], "missing migrated_at"
|
rows.each do |row|
|
||||||
|
assert_match( /^2\d\d\d-/, row["migrated_at"], "missing migrated_at" )
|
||||||
end
|
end
|
||||||
|
assert_equal "people_have_last_names", rows[0]["name"]
|
||||||
|
assert_equal "we_need_reminders", rows[1]["name"]
|
||||||
|
assert_equal "innocent_jointable", rows[2]["name"]
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_proper_table_name
|
def test_proper_table_name
|
||||||
|
@ -17,6 +17,21 @@ def test_schema_dump
|
|||||||
assert_no_match %r{create_table "schema_migrations"}, output
|
assert_no_match %r{create_table "schema_migrations"}, output
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_schema_dump_includes_migrations
|
||||||
|
conn = ActiveRecord::Base.connection
|
||||||
|
sm_table = ActiveRecord::Migrator.schema_migrations_table_name
|
||||||
|
conn.execute "DELETE FROM #{conn.quote_table_name(sm_table)}"
|
||||||
|
conn.remove_column "people", "last_name" rescue nil
|
||||||
|
conn.drop_table "reminders" rescue nil
|
||||||
|
conn.drop_table "people_reminders" rescue nil
|
||||||
|
ActiveRecord::Migrator.migrate(MIGRATIONS_ROOT + "/valid")
|
||||||
|
|
||||||
|
output = standard_dump
|
||||||
|
assert_match %r{migration "1", "people_have_last_names"}, output
|
||||||
|
assert_match %r{migration "2", "we_need_reminders"}, output
|
||||||
|
assert_match %r{migration "3", "innocent_jointable"}, output
|
||||||
|
end
|
||||||
|
|
||||||
def test_schema_dump_excludes_sqlite_sequence
|
def test_schema_dump_excludes_sqlite_sequence
|
||||||
output = standard_dump
|
output = standard_dump
|
||||||
assert_no_match %r{create_table "sqlite_sequence"}, output
|
assert_no_match %r{create_table "sqlite_sequence"}, output
|
||||||
|
Loading…
Reference in New Issue
Block a user