aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/relation/batches.rb
diff options
context:
space:
mode:
Diffstat (limited to 'activerecord/lib/active_record/relation/batches.rb')
-rw-r--r--activerecord/lib/active_record/relation/batches.rb23
1 files changed, 19 insertions, 4 deletions
diff --git a/activerecord/lib/active_record/relation/batches.rb b/activerecord/lib/active_record/relation/batches.rb
index 4f0502ae75..f7b2167ae8 100644
--- a/activerecord/lib/active_record/relation/batches.rb
+++ b/activerecord/lib/active_record/relation/batches.rb
@@ -52,7 +52,12 @@ module ActiveRecord
end
else
enum_for :find_each, options do
- options[:start] ? where(table[primary_key].gteq(options[:start])).size : size
+ # FIXME: Remove this when type casting is removed from Arel
+ # (Rails 5.1). We can pass start directly instead.
+ if options[:start]
+ quoted_start = Arel::Nodes::Quoted.new(options[:start])
+ end
+ options[:start] ? where(table[primary_key].gteq(quoted_start)).size : size
end
end
end
@@ -102,9 +107,15 @@ module ActiveRecord
start = options[:start]
batch_size = options[:batch_size] || 1000
+ if start
+ # FIXME: Remove this when type casting is removed from Arel
+ # (Rails 5.1). We can pass start directly instead.
+ quoted_start = Arel::Nodes::Quoted.new(start)
+ end
+
unless block_given?
return to_enum(:find_in_batches, options) do
- total = start ? where(table[primary_key].gteq(start)).size : size
+ total = start ? where(table[primary_key].gteq(quoted_start)).size : size
(total - 1).div(batch_size) + 1
end
end
@@ -114,7 +125,7 @@ module ActiveRecord
end
relation = relation.reorder(batch_order).limit(batch_size)
- records = start ? relation.where(table[primary_key].gteq(start)).to_a : relation.to_a
+ records = start ? relation.where(table[primary_key].gteq(quoted_start)).to_a : relation.to_a
while records.any?
records_size = records.size
@@ -125,7 +136,11 @@ module ActiveRecord
break if records_size < batch_size
- records = relation.where(table[primary_key].gt(primary_key_offset)).to_a
+ # FIXME: Remove this when type casting is removed from Arel
+ # (Rails 5.1). We can pass the offset directly instead.
+ quoted_offset = Arel::Nodes::Quoted.new(primary_key_offset)
+
+ records = relation.where(table[primary_key].gt(quoted_offset)).to_a
end
end