Permalink
Browse files

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

Fail early with "Primary key not included in the custom select clause" i...
  • Loading branch information...
2 parents 9322e07 + 691709d commit 6a8a7f89aee25042b795fbfc8689a6db05549c7d @senny senny committed Jan 21, 2014
@@ -1,3 +1,11 @@
+* 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

0 comments on commit 6a8a7f8

Please sign in to comment.