123456789_123456789_123456789_123456789_123456789_

Module: ActiveRecord::Relation::RecordFetchWarning

Relationships & Source Files
Defined in: activerecord/lib/active_record/relation/record_fetch_warning.rb

Instance Method Summary

  • #exec_queries

    When this module is prepended to ::ActiveRecord::Relation and config.active_record.warn_on_records_fetched_greater_than is set to an integer, if the number of records a query returns is greater than the value of warn_on_records_fetched_greater_than, a warning is logged.

Instance Method Details

#exec_queries

When this module is prepended to ::ActiveRecord::Relation and config.active_record.warn_on_records_fetched_greater_than is set to an integer, if the number of records a query returns is greater than the value of warn_on_records_fetched_greater_than, a warning is logged. This allows for the detection of queries that return a large number of records, which could cause memory bloat.

In most cases, fetching large number of records can be performed efficiently using the ::ActiveRecord::Batches methods. See ::ActiveRecord::Batches for more information.

[ GitHub ]

  
# File 'activerecord/lib/active_record/relation/record_fetch_warning.rb', line 16

def exec_queries
  QueryRegistry.reset

  super.tap do |records|
    if logger && warn_on_records_fetched_greater_than
      if records.length > warn_on_records_fetched_greater_than
        logger.warn "Query fetched #{records.size} #{@klass} records: #{QueryRegistry.queries.join(";")}"
      end
    end
  end
end