aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/relation/query_attribute.rb
diff options
context:
space:
mode:
authorRyuta Kamizono <kamipo@gmail.com>2018-02-19 03:38:50 +0900
committerRyuta Kamizono <kamipo@gmail.com>2018-02-23 11:15:00 +0900
commit5d78256ee31edddf9e5deb9a50f2633482279bc3 (patch)
tree80e51a75de8f179c2b397abc79ae281130d4d2a5 /activerecord/lib/active_record/relation/query_attribute.rb
parent6d63b5e49a399fe246afcebad45c3c962de268fa (diff)
downloadrails-5d78256ee31edddf9e5deb9a50f2633482279bc3.tar.gz
rails-5d78256ee31edddf9e5deb9a50f2633482279bc3.tar.bz2
rails-5d78256ee31edddf9e5deb9a50f2633482279bc3.zip
PostgreSQL: Treat infinite values in date like datetime consistently
The values infinity and -infinity are supported by both date and timestamp types. https://www.postgresql.org/docs/current/static/datatype-datetime.html#DATATYPE-DATETIME-SPECIAL-TABLE And also, it can not be known whether a value is infinity correctly unless cast a value. I've added `QueryAttribute#infinity?` to handle that case. Closes #27585.
Diffstat (limited to 'activerecord/lib/active_record/relation/query_attribute.rb')
-rw-r--r--activerecord/lib/active_record/relation/query_attribute.rb17
1 files changed, 17 insertions, 0 deletions
diff --git a/activerecord/lib/active_record/relation/query_attribute.rb b/activerecord/lib/active_record/relation/query_attribute.rb
index 3532f28858..f64bd30d38 100644
--- a/activerecord/lib/active_record/relation/query_attribute.rb
+++ b/activerecord/lib/active_record/relation/query_attribute.rb
@@ -21,6 +21,23 @@ module ActiveRecord
!value_before_type_cast.is_a?(StatementCache::Substitute) &&
(value_before_type_cast.nil? || value_for_database.nil?)
end
+
+ def boundable?
+ return @_boundable if defined?(@_boundable)
+ nil?
+ @_boundable = true
+ rescue ::RangeError
+ @_boundable = false
+ end
+
+ def infinity?
+ _infinity?(value_before_type_cast) || boundable? && _infinity?(value_for_database)
+ end
+
+ private
+ def _infinity?(value)
+ value.respond_to?(:infinite?) && value.infinite?
+ end
end
end
end