Module: CassandraObject::Scope::Batches

Included in:
CassandraObject::Scope
Defined in:
lib/cassandra_object/scope/batches.rb

Instance Method Summary collapse

Instance Method Details

#find_each(options = {}) ⇒ Object



4
5
6
7
8
# File 'lib/cassandra_object/scope/batches.rb', line 4

def find_each(options = {})
  find_in_batches(options) do |records|
    records.each { |record| yield record }
  end
end

#find_in_batches(options = {}) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/cassandra_object/scope/batches.rb', line 10

def find_in_batches(options = {})
  batch_size = options.delete(:batch_size) || 1000
  start_key = nil

  scope = limit(batch_size + 1)
  records = scope.to_a

  while records.any?
    if records.size > batch_size
      next_record = records.pop
    else
       next_record = nil
    end

    yield records
    break if next_record.nil?

    records = scope.where("#{adapter.primary_key_column} >= '#{next_record.id}'").to_a
  end
end