method
perform_query
rails latest stable - Class:
ActiveRecord::ConnectionAdapters::Mysql2::DatabaseStatements
perform_query(raw_connection, sql, binds, type_casted_binds, prepare:, notification_payload:, batch: false)private
No documentation available.
# File activerecord/lib/active_record/connection_adapters/mysql2/database_statements.rb, line 41
def perform_query(raw_connection, sql, binds, type_casted_binds, prepare,, notification_payload,, batch: false)
reset_multi_statement = if batch && !multi_statements_enabled?
raw_connection.set_server_option(::Mysql2::Client::OPTION_MULTI_STATEMENTS_ON)
true
end
# Make sure we carry over any changes to ActiveRecord.default_timezone that have been
# made since we established the connection
raw_connection.query_options[:database_timezone] = default_timezone
result = if prepare
stmt = @statements[sql] ||= raw_connection.prepare(sql)
begin
ActiveSupport::Dependencies.interlock.permit_concurrent_loads do
stmt.execute(*type_casted_binds)
end
rescue ::Mysql2::Error
@statements.delete(sql)
stmt.close
raise
end
verified!
else
raw_connection.query(sql)
end
notification_payload[:row_count] = result&.size || 0
@affected_rows_before_warnings = raw_connection.affected_rows
raw_connection.abandon_results!
verified!
handle_warnings(sql)
result
ensure
if reset_multi_statement && active?
raw_connection.set_server_option(::Mysql2::Client::OPTION_MULTI_STATEMENTS_OFF)
end
end