Always respond to `set_server_option` since mysql2 0.5.0

https://github.com/brianmario/mysql2/pull/943
https://github.com/rails/rails/pull/37191
This commit is contained in:
Ryuta Kamizono 2020-03-10 16:59:30 +09:00
parent a3f4a62e2c
commit d5be4f1a46
2 changed files with 37 additions and 53 deletions

View File

@ -97,39 +97,27 @@ module ActiveRecord
@connection.last_id @connection.last_id
end end
def supports_set_server_option? def multi_statements_enabled?
@connection.respond_to?(:set_server_option) flags = @config[:flags]
end
def multi_statements_enabled?(flags)
if flags.is_a?(Array) if flags.is_a?(Array)
flags.include?("MULTI_STATEMENTS") flags.include?("MULTI_STATEMENTS")
else else
(flags & Mysql2::Client::MULTI_STATEMENTS) != 0 flags.anybits?(Mysql2::Client::MULTI_STATEMENTS)
end end
end end
def with_multi_statements def with_multi_statements
previous_flags = @config[:flags] multi_statements_was = multi_statements_enabled?
unless multi_statements_enabled?(previous_flags) unless multi_statements_was
if supports_set_server_option? @connection.set_server_option(Mysql2::Client::OPTION_MULTI_STATEMENTS_ON)
@connection.set_server_option(Mysql2::Client::OPTION_MULTI_STATEMENTS_ON)
else
@config[:flags] = Mysql2::Client::MULTI_STATEMENTS
reconnect!
end
end end
yield yield
ensure ensure
unless multi_statements_enabled?(previous_flags) unless multi_statements_was
if supports_set_server_option? @connection.set_server_option(Mysql2::Client::OPTION_MULTI_STATEMENTS_OFF)
@connection.set_server_option(Mysql2::Client::OPTION_MULTI_STATEMENTS_OFF)
else
@config[:flags] = previous_flags
reconnect!
end
end end
end end

View File

@ -147,28 +147,26 @@ class FixturesTest < ActiveRecord::TestCase
] ]
} }
ActiveRecord::Base.connection.stub(:supports_set_server_option?, false) do assert_nothing_raised do
assert_nothing_raised do conn = ActiveRecord::Base.connection
conn = ActiveRecord::Base.connection conn.execute("SELECT 1; SELECT 2;")
conn.execute("SELECT 1; SELECT 2;") conn.raw_connection.abandon_results!
conn.raw_connection.abandon_results! end
end
assert_difference "TrafficLight.count" do assert_difference "TrafficLight.count" do
ActiveRecord::Base.transaction 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
conn = ActiveRecord::Base.connection conn = ActiveRecord::Base.connection
conn.execute("SELECT 1; SELECT 2;") assert_equal 1, conn.open_transactions
conn.raw_connection.abandon_results! conn.insert_fixtures_set(fixtures)
assert_equal 1, conn.open_transactions
end end
end end
assert_nothing_raised do
conn = ActiveRecord::Base.connection
conn.execute("SELECT 1; SELECT 2;")
conn.raw_connection.abandon_results!
end
end 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
assert_raises(ActiveRecord::StatementInvalid) do conn = ActiveRecord::Base.connection
conn = ActiveRecord::Base.connection conn.execute("SELECT 1; SELECT 2;")
conn.execute("SELECT 1; SELECT 2;") conn.raw_connection.abandon_results!
conn.raw_connection.abandon_results! end
end
assert_difference "TrafficLight.count" do assert_difference "TrafficLight.count" do
conn = ActiveRecord::Base.connection conn = ActiveRecord::Base.connection
conn.insert_fixtures_set(fixtures) conn.insert_fixtures_set(fixtures)
end end
assert_raises(ActiveRecord::StatementInvalid) do assert_raises(ActiveRecord::StatementInvalid) do
conn = ActiveRecord::Base.connection conn = ActiveRecord::Base.connection
conn.execute("SELECT 1; SELECT 2;") conn.execute("SELECT 1; SELECT 2;")
conn.raw_connection.abandon_results! conn.raw_connection.abandon_results!
end
end end
end end
end end