提交 6a8a7f89 编写于 作者: Y Yves Senn

Merge pull request #9969 from divineforest/fix-find-in-batches

Fail early with "Primary key not included in the custom select clause" i...
* Fail early with "Primary key not included in the custom select clause"
in find_in_batches.
Before this patch find_in_batches raises this error only on second iteration.
So you will know about the problem only when you get the batch size threshold.
*Alexander Balashov*
* Ensure `second` through `fifth` methods act like the `first` finder.
The famous ordinal Array instance methods defined in ActiveSupport
......
......@@ -102,16 +102,13 @@ def find_in_batches(options = {})
while records.any?
records_size = records.size
primary_key_offset = records.last.id
raise "Primary key not included in the custom select clause" unless primary_key_offset
yield records
break if records_size < batch_size
if primary_key_offset
records = relation.where(table[primary_key].gt(primary_key_offset)).to_a
else
raise "Primary key not included in the custom select clause"
end
records = relation.where(table[primary_key].gt(primary_key_offset)).to_a
end
end
......
......@@ -46,7 +46,9 @@ def test_each_enumerator_should_execute_one_query_per_batch
def test_each_should_raise_if_select_is_set_without_id
assert_raise(RuntimeError) do
Post.select(:title).find_each(:batch_size => 1) { |post| post }
Post.select(:title).find_each(batch_size: 1) { |post|
flunk "should not call this block"
}
end
end
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册