diff options
author | Ryuta Kamizono <kamipo@gmail.com> | 2018-03-22 03:09:46 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-03-22 03:09:46 +0900 |
commit | 57996716d7d79d4f222d79e2b0cf2a842219f2ed (patch) | |
tree | db2763dfc9ceff98af36239b104b1903c45968de /activerecord/lib | |
parent | 98224f8219ead8abdcb5dda1798b2c986dcfd565 (diff) | |
parent | da3492fdba8542db4e0541d37d9dc8b1e4064787 (diff) | |
download | rails-57996716d7d79d4f222d79e2b0cf2a842219f2ed.tar.gz rails-57996716d7d79d4f222d79e2b0cf2a842219f2ed.tar.bz2 rails-57996716d7d79d4f222d79e2b0cf2a842219f2ed.zip |
Merge pull request #32221 from composerinteralia/batch-predicate-builder
Use PredicateBuilder for bind params in Relation::Batches
Diffstat (limited to 'activerecord/lib')
-rw-r--r-- | activerecord/lib/active_record/relation/batches.rb | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/activerecord/lib/active_record/relation/batches.rb b/activerecord/lib/active_record/relation/batches.rb index 561869017a..ec4bb06c57 100644 --- a/activerecord/lib/active_record/relation/batches.rb +++ b/activerecord/lib/active_record/relation/batches.rb @@ -251,25 +251,31 @@ module ActiveRecord end end - attr = Relation::QueryAttribute.new(primary_key, primary_key_offset, klass.type_for_attribute(primary_key)) - batch_relation = relation.where(arel_attribute(primary_key).gt(Arel::Nodes::BindParam.new(attr))) + bind = primary_key_bind(primary_key_offset) + batch_relation = relation.where(arel_attribute(primary_key).gt(bind)) end end private def apply_limits(relation, start, finish) - if start - attr = Relation::QueryAttribute.new(primary_key, start, klass.type_for_attribute(primary_key)) - relation = relation.where(arel_attribute(primary_key).gteq(Arel::Nodes::BindParam.new(attr))) - end - if finish - attr = Relation::QueryAttribute.new(primary_key, finish, klass.type_for_attribute(primary_key)) - relation = relation.where(arel_attribute(primary_key).lteq(Arel::Nodes::BindParam.new(attr))) - end + relation = apply_start_limit(relation, start) if start + relation = apply_finish_limit(relation, finish) if finish relation end + def apply_start_limit(relation, start) + relation.where(arel_attribute(primary_key).gteq(primary_key_bind(start))) + end + + def apply_finish_limit(relation, finish) + relation.where(arel_attribute(primary_key).lteq(primary_key_bind(finish))) + end + + def primary_key_bind(value) + predicate_builder.build_bind_attribute(primary_key, value) + end + def batch_order arel_attribute(primary_key).asc end |