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