method
exec_stmt_and_free
rails latest stable - Class:
ActiveRecord::ConnectionAdapters::Mysql2::DatabaseStatements
exec_stmt_and_free(sql, name, binds, cache_stmt: false, async: false)private
No documentation available.
# File activerecord/lib/active_record/connection_adapters/mysql2/database_statements.rb, line 108
def exec_stmt_and_free(sql, name, binds, cache_stmt: false, async: false)
sql = transform_query(sql)
check_if_write_query(sql)
mark_transaction_written_if_write(sql)
type_casted_binds = type_casted_binds(binds)
log(sql, name, binds, type_casted_binds, async: async) do
with_raw_connection do |conn|
sync_timezone_changes(conn)
if cache_stmt
stmt = @statements[sql] ||= conn.prepare(sql)
else
stmt = conn.prepare(sql)
end
begin
result = ActiveSupport::Dependencies.interlock.permit_concurrent_loads do
stmt.execute(*type_casted_binds)
end
verified!
result
rescue ::Mysql2::Error => e
if cache_stmt
@statements.delete(sql)
else
stmt.close
end
raise e
end
ret = yield stmt, result
result.free if result
stmt.close unless cache_stmt
ret
end
end
end