From 6584fb3939dd3892834ed93fa791064d5299cda2 Mon Sep 17 00:00:00 2001 From: Ali Ibrahim Date: Wed, 10 Apr 2019 14:13:21 -0400 Subject: Cache full MySQL version in schema cache * The database version is cached in all the adapters, but this didn't include the full MySQL version. Anything that uses the full MySQL version would need to query the database to get that data even if they're using the schema cache. * Now the full MySQL version will be cached in the schema cache via the Version object. --- .../active_record/connection_adapters/abstract_adapter.rb | 5 ++++- .../connection_adapters/abstract_mysql_adapter.rb | 14 +++++++++++--- .../active_record/connection_adapters/mysql2_adapter.rb | 8 ++++++-- 3 files changed, 21 insertions(+), 6 deletions(-) (limited to 'activerecord/lib/active_record') diff --git a/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb b/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb index 200184c2f9..bf0bb84c93 100644 --- a/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb @@ -170,8 +170,11 @@ module ActiveRecord class Version include Comparable - def initialize(version_string) + attr_reader :full_version_string + + def initialize(version_string, full_version_string = nil) @version = version_string.split(".").map(&:to_i) + @full_version_string = full_version_string end def <=>(version_string) diff --git a/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb b/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb index ca8bbc14da..75bc94c49c 100644 --- a/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb @@ -51,12 +51,20 @@ module ActiveRecord end end + class Version < AbstractAdapter::Version # :nodoc: + def initialize(version_string, full_version_string) + super + end + end + def initialize(connection, logger, connection_options, config) super(connection, logger, config) end def get_database_version #:nodoc: - Version.new(version_string) + full_version_string = get_full_version + version_string = version_string(full_version_string) + Version.new(version_string, full_version_string) end def mariadb? # :nodoc: @@ -801,8 +809,8 @@ module ActiveRecord MismatchedForeignKey.new(options) end - def version_string - full_version.match(/^(?:5\.5\.5-)?(\d+\.\d+\.\d+)/)[1] + def version_string(full_version_string) # :nodoc: + full_version_string.match(/^(?:5\.5\.5-)?(\d+\.\d+\.\d+)/)[1] end class MysqlString < Type::String # :nodoc: diff --git a/activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb b/activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb index 0dc880c731..2ff411a058 100644 --- a/activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb @@ -125,8 +125,12 @@ module ActiveRecord super end - def full_version - @full_version ||= @connection.server_info[:version] + def full_version # :nodoc: + schema_cache.database_version.full_version_string + end + + def get_full_version # :nodoc: + @connection.server_info[:version] end end end -- cgit v1.2.3 From b381e43a12fdf10c93f45939b4fa4689cfbda559 Mon Sep 17 00:00:00 2001 From: Ali Ibrahim Date: Fri, 12 Apr 2019 09:28:48 -0400 Subject: Make changes per PR feedback * Remove AbstractMysqlAdapter::Version since full_version_string will always be set. * Remove nodoc on private methods because private methods are not exposed in the docs. --- .../active_record/connection_adapters/abstract_mysql_adapter.rb | 8 +------- .../lib/active_record/connection_adapters/mysql2_adapter.rb | 4 ++-- 2 files changed, 3 insertions(+), 9 deletions(-) (limited to 'activerecord/lib/active_record') diff --git a/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb b/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb index 75bc94c49c..a7be475618 100644 --- a/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb @@ -51,12 +51,6 @@ module ActiveRecord end end - class Version < AbstractAdapter::Version # :nodoc: - def initialize(version_string, full_version_string) - super - end - end - def initialize(connection, logger, connection_options, config) super(connection, logger, config) end @@ -809,7 +803,7 @@ module ActiveRecord MismatchedForeignKey.new(options) end - def version_string(full_version_string) # :nodoc: + def version_string(full_version_string) full_version_string.match(/^(?:5\.5\.5-)?(\d+\.\d+\.\d+)/)[1] end diff --git a/activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb b/activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb index 2ff411a058..5b0335c22b 100644 --- a/activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb @@ -125,11 +125,11 @@ module ActiveRecord super end - def full_version # :nodoc: + def full_version schema_cache.database_version.full_version_string end - def get_full_version # :nodoc: + def get_full_version @connection.server_info[:version] end end -- cgit v1.2.3