pg, fix Infinity and NaN values conversion.
Before this patch `Infinity`, `-Infinity` and `Nan` were read as `0`.
This commit is contained in:
parent
f25f5336ee
commit
aac40bcc07
@ -1,3 +1,18 @@
|
||||
* Fix `PostgreSQLAdapter::OID::Float#type_cast` to convert Infinity and
|
||||
NaN PostgreSQL values into a native Ruby `Float::INFINITY` and `Float::NAN`
|
||||
|
||||
Example:
|
||||
|
||||
# Before
|
||||
Point.create(value: 1.0/0)
|
||||
Point.last.value # => 0.0
|
||||
|
||||
# After
|
||||
Point.create(value: 1.0/0)
|
||||
Point.last.value # => Infinity
|
||||
|
||||
*Innokenty Mikhailov*
|
||||
|
||||
* Allow the PostgreSQL adapter to handle bigserial pk types again.
|
||||
|
||||
Fixes #10410.
|
||||
|
@ -249,9 +249,14 @@ class Float < Type
|
||||
def type; :float end
|
||||
|
||||
def type_cast(value)
|
||||
return if value.nil?
|
||||
|
||||
value.to_f
|
||||
case value
|
||||
when nil; nil
|
||||
when 'Infinity'; ::Float::INFINITY
|
||||
when '-Infinity'; -::Float::INFINITY
|
||||
when 'NaN'; ::Float::NAN
|
||||
else
|
||||
value.to_f
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -50,7 +50,11 @@ def setup
|
||||
@second_money = PostgresqlMoney.find(2)
|
||||
|
||||
@connection.execute("INSERT INTO postgresql_numbers (id, single, double) VALUES (1, 123.456, 123456.789)")
|
||||
@connection.execute("INSERT INTO postgresql_numbers (id, single, double) VALUES (2, '-Infinity', 'Infinity')")
|
||||
@connection.execute("INSERT INTO postgresql_numbers (id, single, double) VALUES (3, 123.456, 'NaN')")
|
||||
@first_number = PostgresqlNumber.find(1)
|
||||
@second_number = PostgresqlNumber.find(2)
|
||||
@third_number = PostgresqlNumber.find(3)
|
||||
|
||||
@connection.execute("INSERT INTO postgresql_times (id, time_interval, scaled_time_interval) VALUES (1, '1 year 2 days ago', '3 weeks ago')")
|
||||
@first_time = PostgresqlTime.find(1)
|
||||
@ -154,6 +158,9 @@ def test_update_tsvector
|
||||
def test_number_values
|
||||
assert_equal 123.456, @first_number.single
|
||||
assert_equal 123456.789, @first_number.double
|
||||
assert_equal -::Float::INFINITY, @second_number.single
|
||||
assert_equal ::Float::INFINITY, @second_number.double
|
||||
assert_same ::Float::NAN, @third_number.double
|
||||
end
|
||||
|
||||
def test_time_values
|
||||
|
Loading…
Reference in New Issue
Block a user