aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/statement_cache.rb
diff options
context:
space:
mode:
authorRyuta Kamizono <kamipo@gmail.com>2017-07-21 12:26:09 +0900
committerRyuta Kamizono <kamipo@gmail.com>2019-01-18 16:01:14 +0900
commitc196ca72a0dfbea5f1730f830ea20a9e02a3c737 (patch)
tree2017197758672519af2a2ef44eb674af35491a99 /activerecord/lib/active_record/statement_cache.rb
parent31ffbf8d5056137717da3f11d28c4fbd7fbc8f07 (diff)
downloadrails-c196ca72a0dfbea5f1730f830ea20a9e02a3c737.tar.gz
rails-c196ca72a0dfbea5f1730f830ea20a9e02a3c737.tar.bz2
rails-c196ca72a0dfbea5f1730f830ea20a9e02a3c737.zip
Ensure `StatementCache#execute` never raises `RangeError`
Since 31ffbf8d, finder methods no longer raise `RangeError`. So `StatementCache#execute` is the only place to raise the exception for finder queries. `StatementCache` is used for simple equality queries in the codebase. This means that if `StatementCache#execute` raises `RangeError`, the result could always be regarded as empty. So `StatementCache#execute` just return nil in that range error case, and treat that as empty in the caller side, then we can avoid catching the exception in much places.
Diffstat (limited to 'activerecord/lib/active_record/statement_cache.rb')
-rw-r--r--activerecord/lib/active_record/statement_cache.rb2
1 files changed, 2 insertions, 0 deletions
diff --git a/activerecord/lib/active_record/statement_cache.rb b/activerecord/lib/active_record/statement_cache.rb
index 1b1736dcab..95984e7ada 100644
--- a/activerecord/lib/active_record/statement_cache.rb
+++ b/activerecord/lib/active_record/statement_cache.rb
@@ -132,6 +132,8 @@ module ActiveRecord
sql = query_builder.sql_for bind_values, connection
klass.find_by_sql(sql, bind_values, preparable: true, &block)
+ rescue ::RangeError
+ nil
end
def self.unsupported_value?(value)