diff options
author | Sean Griffin <sean@thoughtbot.com> | 2014-10-31 11:23:24 -0600 |
---|---|---|
committer | Sean Griffin <sean@thoughtbot.com> | 2014-10-31 12:15:36 -0600 |
commit | e62fff40edde10bd04bbb91ce242f4a7f7ea64a8 (patch) | |
tree | f984582034b23691663a54fa978d5cbf4d8e403e /activerecord/lib/active_record/type/big_integer.rb | |
parent | 9b9f0197b7e645ae5b05a5581ba82f32f0971183 (diff) | |
download | rails-e62fff40edde10bd04bbb91ce242f4a7f7ea64a8.tar.gz rails-e62fff40edde10bd04bbb91ce242f4a7f7ea64a8.tar.bz2 rails-e62fff40edde10bd04bbb91ce242f4a7f7ea64a8.zip |
Treat strings greater than int max value as out of range
Sufficiently large integers cause `find` and `find_by` to raise
`StatementInvalid` instead of `RecordNotFound` or just returning `nil`.
Given that we can't cast to `nil` for `Integer` like we would with junk
data for other types, we raise a `RangeError` instead, and rescue in
places where it would be highly unexpected to get an exception from
casting.
Fixes #17380
Diffstat (limited to 'activerecord/lib/active_record/type/big_integer.rb')
-rw-r--r-- | activerecord/lib/active_record/type/big_integer.rb | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/activerecord/lib/active_record/type/big_integer.rb b/activerecord/lib/active_record/type/big_integer.rb new file mode 100644 index 0000000000..0c72d8914f --- /dev/null +++ b/activerecord/lib/active_record/type/big_integer.rb @@ -0,0 +1,13 @@ +require 'active_record/type/integer' + +module ActiveRecord + module Type + class BigInteger < Integer # :nodoc: + private + + def max_value + ::Float::INFINITY + end + end + end +end |