aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2010-12-01 17:08:01 -0800
committerAaron Patterson <aaron.patterson@gmail.com>2010-12-01 17:08:01 -0800
commit3ec212e3c9c815e9993cbea409c60774ea75cd30 (patch)
tree56f77db136192f65eb4e3a1417d8b989e56cfe37 /activerecord
parentc15c14563e6604aab232336b16e14f1f235cc19d (diff)
downloadrails-3ec212e3c9c815e9993cbea409c60774ea75cd30.tar.gz
rails-3ec212e3c9c815e9993cbea409c60774ea75cd30.tar.bz2
rails-3ec212e3c9c815e9993cbea409c60774ea75cd30.zip
rolling out migrated_at until I can fix the build
Diffstat (limited to 'activerecord')
-rw-r--r--activerecord/CHANGELOG4
-rw-r--r--activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb18
-rw-r--r--activerecord/lib/active_record/migration.rb18
-rw-r--r--activerecord/lib/active_record/schema.rb19
-rw-r--r--activerecord/lib/active_record/schema_dumper.rb16
-rw-r--r--activerecord/test/cases/ar_schema_test.rb35
-rw-r--r--activerecord/test/cases/migration_test.rb52
-rw-r--r--activerecord/test/cases/schema_dumper_test.rb19
8 files changed, 25 insertions, 156 deletions
diff --git a/activerecord/CHANGELOG b/activerecord/CHANGELOG
index e6c6883fc7..f46db909ba 100644
--- a/activerecord/CHANGELOG
+++ b/activerecord/CHANGELOG
@@ -1,9 +1,5 @@
*Rails 3.1.0 (unreleased)*
-* The `schema_migrations` table now contains a column `name` which stores the
-name of the migration that was executed, and `migrated_at` which stores the date
-when the migration was executed. (Thanks Josh Susser!)
-
* ActiveRecord::Base#dup and ActiveRecord::Base#clone semantics have changed
to closer match normal Ruby dup and clone semantics.
diff --git a/activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb b/activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb
index de7d358df9..4e770c37da 100644
--- a/activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb
+++ b/activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb
@@ -422,21 +422,9 @@ module ActiveRecord
def initialize_schema_migrations_table
sm_table = ActiveRecord::Migrator.schema_migrations_table_name
- if table_exists?(sm_table)
- cols = columns(sm_table).collect { |col| col.name }
- unless cols.include?("migrated_at")
- add_column sm_table, :migrated_at, :datetime
- 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
- end
- unless cols.include?("name")
- add_column sm_table, :name, :string, :null => false, :default => ""
- end
- else
+ unless table_exists?(sm_table)
create_table(sm_table, :id => false) do |schema_migrations_table|
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
end
add_index sm_table, :version, :unique => true,
:name => "#{Base.table_name_prefix}unique_schema_migrations#{Base.table_name_suffix}"
@@ -464,7 +452,7 @@ module ActiveRecord
end
unless migrated.include?(version)
- execute "INSERT INTO #{sm_table} (version,migrated_at) VALUES ('#{version}','#{Time.now.to_s(:db)}')"
+ execute "INSERT INTO #{sm_table} (version) VALUES ('#{version}')"
end
inserted = Set.new
@@ -472,7 +460,7 @@ module ActiveRecord
if inserted.include?(v)
raise "Duplicate migration #{v}. Please renumber your migrations to resolve the conflict."
elsif v < version
- execute "INSERT INTO #{sm_table} (version,migrated_at) VALUES ('#{v}','#{Time.now.to_s(:db)}')"
+ execute "INSERT INTO #{sm_table} (version) VALUES ('#{v}')"
inserted << v
end
end
diff --git a/activerecord/lib/active_record/migration.rb b/activerecord/lib/active_record/migration.rb
index d2ebf656cb..f6321f1499 100644
--- a/activerecord/lib/active_record/migration.rb
+++ b/activerecord/lib/active_record/migration.rb
@@ -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)
+ record_version_state_after_migrating(target.version)
end
end
@@ -664,7 +664,7 @@ module ActiveRecord
begin
ddl_transaction do
migration.migrate(@direction)
- record_version_state_after_migrating(migration)
+ record_version_state_after_migrating(migration.version)
end
rescue => e
canceled_msg = Base.connection.supports_ddl_transactions? ? "this and " : ""
@@ -690,20 +690,16 @@ module ActiveRecord
end
private
- def record_version_state_after_migrating(target)
+ def record_version_state_after_migrating(version)
table = Arel::Table.new(self.class.schema_migrations_table_name)
@migrated_versions ||= []
if down?
- @migrated_versions.delete(target.version)
- table.where(table["version"].eq(target.version.to_s)).delete
+ @migrated_versions.delete(version)
+ table.where(table["version"].eq(version.to_s)).delete
else
- @migrated_versions.push(target.version).sort!
- table.insert(
- table["version"] => target.version.to_s,
- table["name"] => File.basename(target.filename,'.rb').gsub(/^\d+_/,''),
- table["migrated_at"] => Time.now
- )
+ @migrated_versions.push(version).sort!
+ table.insert table["version"] => version.to_s
end
end
diff --git a/activerecord/lib/active_record/schema.rb b/activerecord/lib/active_record/schema.rb
index 9a47fd3b84..c6bb5c1961 100644
--- a/activerecord/lib/active_record/schema.rb
+++ b/activerecord/lib/active_record/schema.rb
@@ -46,24 +46,13 @@ module ActiveRecord
# ...
# end
def self.define(info={}, &block)
- Base.connection.drop_table(ActiveRecord::Migrator.schema_migrations_table_name)
- initialize_schema_migrations_table
-
schema = new
schema.instance_eval(&block)
- assume_migrated_upto_version(info[:version], schema.migrations_path) unless info[:version].blank?
- end
-
- def 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
- )
+ unless info[:version].blank?
+ initialize_schema_migrations_table
+ assume_migrated_upto_version(info[:version], schema.migrations_path)
+ end
end
end
end
diff --git a/activerecord/lib/active_record/schema_dumper.rb b/activerecord/lib/active_record/schema_dumper.rb
index 794a354917..e30b481fe1 100644
--- a/activerecord/lib/active_record/schema_dumper.rb
+++ b/activerecord/lib/active_record/schema_dumper.rb
@@ -24,7 +24,6 @@ module ActiveRecord
def dump(stream)
header(stream)
- migrations(stream)
tables(stream)
trailer(stream)
stream
@@ -35,9 +34,12 @@ module ActiveRecord
def initialize(connection)
@connection = connection
@types = @connection.native_database_types
+ @version = Migrator::current_version rescue nil
end
def header(stream)
+ define_params = @version ? ":version => #{@version}" : ""
+
stream.puts <<HEADER
# This file is auto-generated from the current state of the database. Instead
# of editing this file, please use the migrations feature of Active Record to
@@ -51,7 +53,7 @@ module ActiveRecord
#
# It's strongly recommended to check this file into your version control system.
-ActiveRecord::Schema.define do
+ActiveRecord::Schema.define(#{define_params}) do
HEADER
end
@@ -60,16 +62,6 @@ HEADER
stream.puts "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
- stream.puts ""
- end
-
def tables(stream)
@connection.tables.sort.each do |tbl|
next if ['schema_migrations', ignore_tables].flatten.any? do |ignored|
diff --git a/activerecord/test/cases/ar_schema_test.rb b/activerecord/test/cases/ar_schema_test.rb
index df51a6e4ba..588adc38e3 100644
--- a/activerecord/test/cases/ar_schema_test.rb
+++ b/activerecord/test/cases/ar_schema_test.rb
@@ -39,39 +39,4 @@ if ActiveRecord::Base.connection.supports_migrations?
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
- schema = ActiveRecord::Schema.new
- schema.migration("123001")
- 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_not_nil(rows[0]["migrated_at"])
-
- assert_equal "123002", rows[1]["version"]
- assert_equal "add_magic_power_to_unicorns", rows[1]["name"]
- assert_not_nil(rows[1]["migrated_at"])
- end
-
- def test_define_clears_schema_migrations
- assert_nothing_raised do
- ActiveRecord::Schema.define do
- migration("123001")
- end
- ActiveRecord::Schema.define do
- migration("123001")
- end
- end
- end
- end
-
end
diff --git a/activerecord/test/cases/migration_test.rb b/activerecord/test/cases/migration_test.rb
index b698a5a3cf..3037d73a1b 100644
--- a/activerecord/test/cases/migration_test.rb
+++ b/activerecord/test/cases/migration_test.rb
@@ -27,46 +27,22 @@ if ActiveRecord::Base.connection.supports_migrations?
end
class MigrationTableAndIndexTest < ActiveRecord::TestCase
- def setup
- @conn = ActiveRecord::Base.connection
- @conn.drop_table(ActiveRecord::Migrator.schema_migrations_table_name) if @conn.table_exists?(ActiveRecord::Migrator.schema_migrations_table_name)
- end
+ def test_add_schema_info_respects_prefix_and_suffix
+ conn = ActiveRecord::Base.connection
- def test_add_schema_migrations_respects_prefix_and_suffix
+ conn.drop_table(ActiveRecord::Migrator.schema_migrations_table_name) if conn.table_exists?(ActiveRecord::Migrator.schema_migrations_table_name)
# Use shorter prefix and suffix as in Oracle database identifier cannot be larger than 30 characters
ActiveRecord::Base.table_name_prefix = 'p_'
ActiveRecord::Base.table_name_suffix = '_s'
- @conn.drop_table(ActiveRecord::Migrator.schema_migrations_table_name) if @conn.table_exists?(ActiveRecord::Migrator.schema_migrations_table_name)
+ conn.drop_table(ActiveRecord::Migrator.schema_migrations_table_name) if conn.table_exists?(ActiveRecord::Migrator.schema_migrations_table_name)
- @conn.initialize_schema_migrations_table
+ conn.initialize_schema_migrations_table
- assert_equal "p_unique_schema_migrations_s", @conn.indexes(ActiveRecord::Migrator.schema_migrations_table_name)[0][:name]
+ assert_equal "p_unique_schema_migrations_s", conn.indexes(ActiveRecord::Migrator.schema_migrations_table_name)[0][:name]
ensure
ActiveRecord::Base.table_name_prefix = ""
ActiveRecord::Base.table_name_suffix = ""
end
-
- def test_schema_migrations_columns
- @conn.initialize_schema_migrations_table
-
- columns = @conn.columns(ActiveRecord::Migrator.schema_migrations_table_name).collect(&:name)
- %w[version name migrated_at].each { |col| assert columns.include?(col) }
- end
-
- def test_add_name_and_migrated_at_to_exisiting_schema_migrations
- sm_table = ActiveRecord::Migrator.schema_migrations_table_name
- @conn.create_table(sm_table, :id => false) do |schema_migrations_table|
- schema_migrations_table.column :version, :string, :null => false
- end
- @conn.insert "INSERT INTO #{@conn.quote_table_name(sm_table)} (version) VALUES (100)"
- @conn.insert "INSERT INTO #{@conn.quote_table_name(sm_table)} (version) VALUES (200)"
-
- @conn.initialize_schema_migrations_table
-
- rows = @conn.select_all("SELECT * FROM #{@conn.quote_table_name(sm_table)}")
- assert rows[0].has_key?("name")
- assert rows[0].has_key?("migrated_at")
- end
end
class MigrationTest < ActiveRecord::TestCase
@@ -1462,21 +1438,6 @@ if ActiveRecord::Base.connection.supports_migrations?
ActiveRecord::Base.table_name_suffix = ""
end
- def test_migration_row_includes_name_and_timestamp
- conn = ActiveRecord::Base.connection
- sm_table = ActiveRecord::Migrator.schema_migrations_table_name
-
- ActiveRecord::Migrator.migrate(MIGRATIONS_ROOT + "/valid")
-
- rows = conn.select_all("SELECT * FROM #{conn.quote_table_name(sm_table)}")
- rows.each do |row|
- assert_not_nil(row["migrated_at"], "missing migrated_at")
- 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
-
def test_proper_table_name
assert_equal "table", ActiveRecord::Migrator.proper_table_name('table')
assert_equal "table", ActiveRecord::Migrator.proper_table_name(:table)
@@ -2132,3 +2093,4 @@ if ActiveRecord::Base.connection.supports_migrations?
end
end
end
+
diff --git a/activerecord/test/cases/schema_dumper_test.rb b/activerecord/test/cases/schema_dumper_test.rb
index 7914ee0a6f..9b2c7c00df 100644
--- a/activerecord/test/cases/schema_dumper_test.rb
+++ b/activerecord/test/cases/schema_dumper_test.rb
@@ -17,25 +17,6 @@ class SchemaDumperTest < ActiveRecord::TestCase
assert_no_match %r{create_table "schema_migrations"}, output
end
- def test_schema_dump_includes_migrations
- $".delete_if do |fname|
- fname == (MIGRATIONS_ROOT + "/valid/1_people_have_last_names.rb")
- end
-
- 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
output = standard_dump
assert_no_match %r{create_table "sqlite_sequence"}, output