mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
record migration timestamp when migrations run
This commit is contained in:
parent
c283cdd63c
commit
4e4e9ad48a
2 changed files with 58 additions and 8 deletions
|
@ -628,7 +628,7 @@ module ActiveRecord
|
|||
raise UnknownMigrationVersionError.new(@target_version) if target.nil?
|
||||
unless (up? && migrated.include?(target.version.to_i)) || (down? && !migrated.include?(target.version.to_i))
|
||||
target.migrate(@direction)
|
||||
record_version_state_after_migrating(target.version)
|
||||
record_version_state_after_migrating(target)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -664,7 +664,7 @@ module ActiveRecord
|
|||
begin
|
||||
ddl_transaction do
|
||||
migration.migrate(@direction)
|
||||
record_version_state_after_migrating(migration.version)
|
||||
record_version_state_after_migrating(migration)
|
||||
end
|
||||
rescue => e
|
||||
canceled_msg = Base.connection.supports_ddl_transactions? ? "this and " : ""
|
||||
|
@ -690,16 +690,19 @@ module ActiveRecord
|
|||
end
|
||||
|
||||
private
|
||||
def record_version_state_after_migrating(version)
|
||||
def record_version_state_after_migrating(target)
|
||||
table = Arel::Table.new(self.class.schema_migrations_table_name)
|
||||
|
||||
@migrated_versions ||= []
|
||||
if down?
|
||||
@migrated_versions.delete(version)
|
||||
table.where(table["version"].eq(version.to_s)).delete
|
||||
@migrated_versions.delete(target.version)
|
||||
table.where(table["version"].eq(target.version.to_s)).delete
|
||||
else
|
||||
@migrated_versions.push(version).sort!
|
||||
table.insert table["version"] => version.to_s
|
||||
@migrated_versions.push(target.version).sort!
|
||||
table.insert(
|
||||
table["version"] => target.version.to_s,
|
||||
table["migrated_at"] => Time.now
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -445,6 +445,43 @@ if ActiveRecord::Base.connection.supports_migrations?
|
|||
Person.connection.drop_table table_name rescue nil
|
||||
end
|
||||
|
||||
def test_create_table_with_custom_sequence_name
|
||||
return unless current_adapter? :OracleAdapter
|
||||
|
||||
# table name is 29 chars, the standard sequence name will
|
||||
# be 33 chars and fail
|
||||
assert_raise(ActiveRecord::StatementInvalid) do
|
||||
begin
|
||||
Person.connection.create_table :table_with_name_thats_just_ok do |t|
|
||||
t.column :foo, :string, :null => false
|
||||
end
|
||||
ensure
|
||||
Person.connection.drop_table :table_with_name_thats_just_ok rescue nil
|
||||
end
|
||||
end
|
||||
|
||||
# should be all good w/ a custom sequence name
|
||||
assert_nothing_raised do
|
||||
begin
|
||||
Person.connection.create_table :table_with_name_thats_just_ok,
|
||||
:sequence_name => 'suitably_short_seq' do |t|
|
||||
t.column :foo, :string, :null => false
|
||||
end
|
||||
|
||||
Person.connection.execute("select suitably_short_seq.nextval from dual")
|
||||
|
||||
ensure
|
||||
Person.connection.drop_table :table_with_name_thats_just_ok,
|
||||
:sequence_name => 'suitably_short_seq' rescue nil
|
||||
end
|
||||
end
|
||||
|
||||
# confirm the custom sequence got dropped
|
||||
assert_raise(ActiveRecord::StatementInvalid) do
|
||||
Person.connection.execute("select suitably_short_seq.nextval from dual")
|
||||
end
|
||||
end
|
||||
|
||||
# Sybase, and SQLite3 will not allow you to add a NOT NULL
|
||||
# column to a table without a default value.
|
||||
unless current_adapter?(:SybaseAdapter, :SQLite3Adapter)
|
||||
|
@ -1462,6 +1499,17 @@ if ActiveRecord::Base.connection.supports_migrations?
|
|||
ActiveRecord::Base.table_name_suffix = ""
|
||||
end
|
||||
|
||||
def test_migration_row_includes_timestamp
|
||||
conn = ActiveRecord::Base.connection
|
||||
sm_table = ActiveRecord::Migrator.schema_migrations_table_name
|
||||
|
||||
ActiveRecord::Migrator.migrate(MIGRATIONS_ROOT + "/valid")
|
||||
|
||||
conn.select_all("SELECT * FROM #{conn.quote_table_name(sm_table)}").each do |row|
|
||||
assert_match /^2\d\d\d-/, row["migrated_at"], "missing migrated_at"
|
||||
end
|
||||
end
|
||||
|
||||
def test_proper_table_name
|
||||
assert_equal "table", ActiveRecord::Migrator.proper_table_name('table')
|
||||
assert_equal "table", ActiveRecord::Migrator.proper_table_name(:table)
|
||||
|
@ -2117,4 +2165,3 @@ if ActiveRecord::Base.connection.supports_migrations?
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in a new issue