diff --git a/activerecord/lib/active_record/connection_adapters/mysql/database_statements.rb b/activerecord/lib/active_record/connection_adapters/mysql/database_statements.rb index 03f9a0c2b1..c389363682 100644 --- a/activerecord/lib/active_record/connection_adapters/mysql/database_statements.rb +++ b/activerecord/lib/active_record/connection_adapters/mysql/database_statements.rb @@ -97,39 +97,27 @@ module ActiveRecord @connection.last_id end - def supports_set_server_option? - @connection.respond_to?(:set_server_option) - end + def multi_statements_enabled? + flags = @config[:flags] - def multi_statements_enabled?(flags) if flags.is_a?(Array) flags.include?("MULTI_STATEMENTS") else - (flags & Mysql2::Client::MULTI_STATEMENTS) != 0 + flags.anybits?(Mysql2::Client::MULTI_STATEMENTS) end end def with_multi_statements - previous_flags = @config[:flags] + multi_statements_was = multi_statements_enabled? - unless multi_statements_enabled?(previous_flags) - if supports_set_server_option? - @connection.set_server_option(Mysql2::Client::OPTION_MULTI_STATEMENTS_ON) - else - @config[:flags] = Mysql2::Client::MULTI_STATEMENTS - reconnect! - end + unless multi_statements_was + @connection.set_server_option(Mysql2::Client::OPTION_MULTI_STATEMENTS_ON) end yield ensure - unless multi_statements_enabled?(previous_flags) - if supports_set_server_option? - @connection.set_server_option(Mysql2::Client::OPTION_MULTI_STATEMENTS_OFF) - else - @config[:flags] = previous_flags - reconnect! - end + unless multi_statements_was + @connection.set_server_option(Mysql2::Client::OPTION_MULTI_STATEMENTS_OFF) end end diff --git a/activerecord/test/cases/fixtures_test.rb b/activerecord/test/cases/fixtures_test.rb index 805e43fbb8..3ad0cf7ecb 100644 --- a/activerecord/test/cases/fixtures_test.rb +++ b/activerecord/test/cases/fixtures_test.rb @@ -147,28 +147,26 @@ class FixturesTest < ActiveRecord::TestCase ] } - ActiveRecord::Base.connection.stub(:supports_set_server_option?, false) do - assert_nothing_raised do - conn = ActiveRecord::Base.connection - conn.execute("SELECT 1; SELECT 2;") - conn.raw_connection.abandon_results! - end + assert_nothing_raised do + conn = ActiveRecord::Base.connection + conn.execute("SELECT 1; SELECT 2;") + conn.raw_connection.abandon_results! + end - assert_difference "TrafficLight.count" do - ActiveRecord::Base.transaction do - conn = ActiveRecord::Base.connection - assert_equal 1, conn.open_transactions - conn.insert_fixtures_set(fixtures) - assert_equal 1, conn.open_transactions - end - end - - assert_nothing_raised do + assert_difference "TrafficLight.count" do + ActiveRecord::Base.transaction do conn = ActiveRecord::Base.connection - conn.execute("SELECT 1; SELECT 2;") - conn.raw_connection.abandon_results! + assert_equal 1, conn.open_transactions + conn.insert_fixtures_set(fixtures) + assert_equal 1, conn.open_transactions end end + + assert_nothing_raised do + conn = ActiveRecord::Base.connection + conn.execute("SELECT 1; SELECT 2;") + conn.raw_connection.abandon_results! + end end end @@ -184,23 +182,21 @@ class FixturesTest < ActiveRecord::TestCase ] } - ActiveRecord::Base.connection.stub(:supports_set_server_option?, false) do - assert_raises(ActiveRecord::StatementInvalid) do - conn = ActiveRecord::Base.connection - conn.execute("SELECT 1; SELECT 2;") - conn.raw_connection.abandon_results! - end + assert_raises(ActiveRecord::StatementInvalid) do + conn = ActiveRecord::Base.connection + conn.execute("SELECT 1; SELECT 2;") + conn.raw_connection.abandon_results! + end - assert_difference "TrafficLight.count" do - conn = ActiveRecord::Base.connection - conn.insert_fixtures_set(fixtures) - end + assert_difference "TrafficLight.count" do + conn = ActiveRecord::Base.connection + conn.insert_fixtures_set(fixtures) + end - assert_raises(ActiveRecord::StatementInvalid) do - conn = ActiveRecord::Base.connection - conn.execute("SELECT 1; SELECT 2;") - conn.raw_connection.abandon_results! - end + assert_raises(ActiveRecord::StatementInvalid) do + conn = ActiveRecord::Base.connection + conn.execute("SELECT 1; SELECT 2;") + conn.raw_connection.abandon_results! end end end