From a9336a67b0b1f25784f5304b4477235352fc53c5 Mon Sep 17 00:00:00 2001 From: Ryuta Kamizono Date: Sat, 25 Jul 2020 17:58:10 +0900 Subject: [PATCH] Always use faster `HomogeneousIn` in array handler --- .../predicate_builder/array_handler.rb | 20 ++++++++----------- 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/activerecord/lib/active_record/relation/predicate_builder/array_handler.rb b/activerecord/lib/active_record/relation/predicate_builder/array_handler.rb index c23a9ee387..f07afd0d0f 100644 --- a/activerecord/lib/active_record/relation/predicate_builder/array_handler.rb +++ b/activerecord/lib/active_record/relation/predicate_builder/array_handler.rb @@ -20,23 +20,19 @@ module ActiveRecord case values.length when 0 then NullPredicate when 1 then predicate_builder.build(attribute, values.first) - else - if nils.empty? && ranges.empty? - return Arel::Nodes::HomogeneousIn.new(values, attribute, :in) - else - attribute.in values.map { |v| - predicate_builder.build_bind_attribute(attribute.name, v) - } - end + else Arel::Nodes::HomogeneousIn.new(values, attribute, :in) end unless nils.empty? - values_predicate = values_predicate.or(predicate_builder.build(attribute, nil)) + values_predicate = values_predicate.or(attribute.eq(nil)) end - array_predicates = ranges.map { |range| predicate_builder.build(attribute, range) } - array_predicates.unshift(values_predicate) - array_predicates.inject(&:or) + if ranges.empty? + values_predicate + else + array_predicates = ranges.map! { |range| predicate_builder.build(attribute, range) } + array_predicates.inject(values_predicate, &:or) + end end private