diff options
author | Tarmo Tänav <tarmo@itech.ee> | 2008-08-26 04:55:57 +0300 |
---|---|---|
committer | Jeremy Kemper <jeremy@bitsweat.net> | 2008-08-25 22:03:47 -0700 |
commit | 3d2ac918b987ef0cff34f6a7fdd20926b7a9e5d9 (patch) | |
tree | c59dd78994dd9892c0707947d4e02d6c79b2556d /activerecord | |
parent | 4bcd64c9e93af2f13dc7309cd76bb764e4d7d23d (diff) | |
download | rails-3d2ac918b987ef0cff34f6a7fdd20926b7a9e5d9.tar.gz rails-3d2ac918b987ef0cff34f6a7fdd20926b7a9e5d9.tar.bz2 rails-3d2ac918b987ef0cff34f6a7fdd20926b7a9e5d9.zip |
Cache migrated versions list in Migrator and use it to fetch the latest migrated version name [#845 state:resolved]
Also optimized Migrator#current_version class method to fetch
only the latest version number and not all of them.
With this change no matter how many migrations there are the
schema_migrations table is only SELECTed from once.
Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
Diffstat (limited to 'activerecord')
-rw-r--r-- | activerecord/lib/active_record/migration.rb | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/activerecord/lib/active_record/migration.rb b/activerecord/lib/active_record/migration.rb index c7bc76264d..7a1fd7cfbc 100644 --- a/activerecord/lib/active_record/migration.rb +++ b/activerecord/lib/active_record/migration.rb @@ -407,10 +407,9 @@ module ActiveRecord end def current_version - version = Base.connection.select_values( - "SELECT version FROM #{schema_migrations_table_name}" - ).map(&:to_i).max rescue nil - version || 0 + Base.connection.select_value( + "SELECT MAX(CAST(version AS integer)) FROM #{schema_migrations_table_name}" + ).to_i rescue 0 end def proper_table_name(name) @@ -426,7 +425,7 @@ module ActiveRecord end def current_version - self.class.current_version + migrated.last || 0 end def current_migration @@ -518,16 +517,19 @@ module ActiveRecord def migrated sm_table = self.class.schema_migrations_table_name - Base.connection.select_values("SELECT version FROM #{sm_table}").map(&:to_i).sort + @migrated_versions ||= Base.connection.select_values("SELECT version FROM #{sm_table}").map(&:to_i).sort end private def record_version_state_after_migrating(version) sm_table = self.class.schema_migrations_table_name + @migrated_versions ||= [] if down? + @migrated_versions.delete(version.to_i) Base.connection.update("DELETE FROM #{sm_table} WHERE version = '#{version}'") else + @migrated_versions.push(version.to_i).sort! Base.connection.insert("INSERT INTO #{sm_table} (version) VALUES ('#{version}')") end end |