aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/relation/predicate_builder
diff options
context:
space:
mode:
authorRyuta Kamizono <kamipo@gmail.com>2018-10-24 10:31:41 +0900
committerRyuta Kamizono <kamipo@gmail.com>2018-10-24 11:26:49 +0900
commitce40073c9c321575e6b4f46dd5ac9b796a2637be (patch)
tree0e57b4f8c46ff591122cec58d248fe39125e3bbf /activerecord/lib/active_record/relation/predicate_builder
parentdc6761592009e9146552fc9d6299bf58a34e187a (diff)
downloadrails-ce40073c9c321575e6b4f46dd5ac9b796a2637be.tar.gz
rails-ce40073c9c321575e6b4f46dd5ac9b796a2637be.tar.bz2
rails-ce40073c9c321575e6b4f46dd5ac9b796a2637be.zip
Lazy checking whether or not values in IN clause are boundable
Since #33844, eager loading/preloading with too many and/or too large ids won't be broken by pre-checking whether the value is constructable or not. But the pre-checking caused the type to be evaluated at relation build time instead of at the query execution time, that is breaking an expectation for some apps. I've made the pre-cheking lazy as much as possible, that is no longer happend at relation build time.
Diffstat (limited to 'activerecord/lib/active_record/relation/predicate_builder')
-rw-r--r--activerecord/lib/active_record/relation/predicate_builder/array_handler.rb5
1 files changed, 2 insertions, 3 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 fadb3c420d..ee2ece1560 100644
--- a/activerecord/lib/active_record/relation/predicate_builder/array_handler.rb
+++ b/activerecord/lib/active_record/relation/predicate_builder/array_handler.rb
@@ -22,9 +22,8 @@ module ActiveRecord
when 1 then predicate_builder.build(attribute, values.first)
else
values.map! do |v|
- bind = predicate_builder.build_bind_attribute(attribute.name, v)
- bind if bind.value.boundable?
- end.compact!
+ predicate_builder.build_bind_attribute(attribute.name, v)
+ end
values.empty? ? NullPredicate : attribute.in(values)
end