From 425449e98d0539e3fa4debb819283103cf27bce5 Mon Sep 17 00:00:00 2001 From: pavel Date: Sun, 15 Jul 2018 05:11:16 +0200 Subject: use set_server_option if possible --- .../connection_adapters/abstract_mysql_adapter.rb | 28 ++++++++++++++++++---- 1 file changed, 23 insertions(+), 5 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 07acb5425e..07206f0d01 100644 --- a/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb @@ -559,14 +559,32 @@ module ActiveRecord end def with_multi_statements - previous_flags = @config[:flags] - @config[:flags] = Mysql2::Client::MULTI_STATEMENTS - reconnect! + if supports_set_server_option? + @connection.set_server_option(Mysql2::Client::OPTION_MULTI_STATEMENTS_ON) + elsif !supports_multi_statements? + previous_flags = @config[:flags] + @config[:flags] = Mysql2::Client::MULTI_STATEMENTS + reconnect! + end yield ensure - @config[:flags] = previous_flags - reconnect! + unless supports_multi_statements? + if supports_set_server_option? + @connection.set_server_option(Mysql2::Client::OPTION_MULTI_STATEMENTS_OFF) + else + @config[:flags] = previous_flags + reconnect! + end + end + end + + def supports_multi_statements? + (@config[:flags] & Mysql2::Client::MULTI_STATEMENTS) != 0 + end + + def supports_set_server_option? + @connection.respond_to?(:set_server_option) end def initialize_type_map(m = type_map) -- cgit v1.2.3