Method: OccamsRecord::Query#find_each

Defined in:
lib/occams-record/query.rb

#find_each(batch_size: 1000, use_transaction: true, append_order_by: nil) {|OccamsRecord::Results::Row| ... } ⇒ Enumerator

Load records in batches of N and yield each record to a block if given. If no block is given, returns an Enumerator.

NOTE Unlike ActiveRecord’s find_each, ORDER BY is respected. The primary key will be appended to the ORDER BY clause to help ensure consistent batches. Additionally, it will be run inside of a transaction.

Parameters:

  • batch_size (Integer) (defaults to: 1000)
  • use_transaction (Boolean) (defaults to: true)

    Ensure it runs inside of a database transaction

  • append_order_by (String) (defaults to: nil)

    Append this column to ORDER BY to ensure consistent results. Defaults to the primary key. Pass false to disable.

Yields:

Returns:

  • (Enumerator)

    will yield each record



177
178
179
180
181
182
183
184
185
186
187
188
# File 'lib/occams-record/query.rb', line 177

def find_each(batch_size: 1000, use_transaction: true, append_order_by: nil)
  enum = Enumerator.new { |y|
    find_in_batches(batch_size: 1000, use_transaction: use_transaction, append_order_by: append_order_by).each { |batch|
      batch.each { |record| y.yield record }
    }
  }
  if block_given?
    enum.each { |record| yield record }
  else
    enum
  end
end