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:
parent
a3f4a62e2c
commit
d5be4f1a46
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue