提交 3d2ac918 编写于 作者: T Tarmo Tänav 提交者: Jeremy Kemper

Cache migrated versions list in Migrator and use it to fetch the latest...

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: NJeremy Kemper <jeremy@bitsweat.net>
上级 4bcd64c9
......@@ -407,10 +407,9 @@ def schema_migrations_table_name
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 @@ def initialize(direction, migrations_path, target_version = nil)
end
def current_version
self.class.current_version
migrated.last || 0
end
def current_migration
......@@ -518,16 +517,19 @@ def pending_migrations
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
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册