Remove dependency on pluck_each gem (#16012)
parent
619fad6cf8
commit
ad61265268
@ -0,0 +1,44 @@ |
||||
# frozen_string_literal: true |
||||
|
||||
module ActiveRecord |
||||
module Batches |
||||
def pluck_each(*column_names) |
||||
relation = self |
||||
|
||||
options = column_names.extract_options! |
||||
|
||||
flatten = column_names.size == 1 |
||||
batch_limit = options[:batch_limit] || 1_000 |
||||
order = options[:order] || :asc |
||||
|
||||
column_names.unshift(primary_key) |
||||
|
||||
relation = relation.reorder(batch_order(order)).limit(batch_limit) |
||||
relation.skip_query_cache! |
||||
|
||||
batch_relation = relation |
||||
|
||||
loop do |
||||
batch = batch_relation.pluck(*column_names) |
||||
|
||||
break if batch.empty? |
||||
|
||||
primary_key_offset = batch.last[0] |
||||
|
||||
batch.each do |record| |
||||
if flatten |
||||
yield record[1] |
||||
else |
||||
yield record[1..-1] |
||||
end |
||||
end |
||||
|
||||
break if batch.size < batch_limit |
||||
|
||||
batch_relation = relation.where( |
||||
predicate_builder[primary_key, primary_key_offset, order == :desc ? :lt : :gt] |
||||
) |
||||
end |
||||
end |
||||
end |
||||
end |
Loading…
Reference in new issue