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