Skip to content

Commit

Permalink
Merge pull request #7352 from aripollak/microsecond-timestamp
Browse files Browse the repository at this point in the history
Fix occasional microsecond conversion inaccuracy
  • Loading branch information
rafaelfranca committed Aug 17, 2012
2 parents cbbf6bf + 53ca22f commit 8f4ee48
Show file tree
Hide file tree
Showing 4 changed files with 10 additions and 3 deletions.
6 changes: 6 additions & 0 deletions activerecord/CHANGELOG.md
@@ -1,5 +1,11 @@
## Rails 4.0.0 (unreleased) ##

* Fix Column.microseconds and Column.fast_string_to_date to avoid converting
timestamp seconds to a float, since it occasionally results in inaccuracies
with microsecond-precision times. Fixes #7352.

*Ari Pollak*

* Raise `ArgumentError` if list of attributes to change is empty in `update_all`.

*Roman Shatsov*
Expand Down
4 changes: 2 additions & 2 deletions activerecord/lib/active_record/connection_adapters/column.rb
Expand Up @@ -208,7 +208,7 @@ def value_to_decimal(value)
# '0.123456' -> 123456
# '1.123456' -> 123456
def microseconds(time)
((time[:sec_fraction].to_f % 1) * 1_000_000).to_i
time[:sec_fraction] ? (time[:sec_fraction] * 1_000_000).to_i : 0
end

def new_date(year, mon, mday)
Expand All @@ -233,7 +233,7 @@ def fast_string_to_date(string)
# Doesn't handle time zones.
def fast_string_to_time(string)
if string =~ Format::ISO_DATETIME
microsec = ($7.to_f * 1_000_000).to_i
microsec = ($7.to_r * 1_000_000).to_i
new_time $1.to_i, $2.to_i, $3.to_i, $4.to_i, $5.to_i, $6.to_i, microsec
end
end
Expand Down
1 change: 1 addition & 0 deletions activerecord/test/cases/base_test.rb
Expand Up @@ -231,6 +231,7 @@ def test_preserving_time_objects
assert_equal 11, Topic.find(1).written_on.sec
assert_equal 223300, Topic.find(1).written_on.usec
assert_equal 9900, Topic.find(2).written_on.usec
assert_equal 129346, Topic.find(3).written_on.usec
end
end

Expand Down
2 changes: 1 addition & 1 deletion activerecord/test/fixtures/topics.yml
Expand Up @@ -25,7 +25,7 @@ third:
id: 3
title: The Third Topic of the day
author_name: Carl
written_on: 2005-07-15t15:28:00.0099+01:00
written_on: 2012-08-12t20:24:22.129346+00:00
content: I'm a troll
approved: true
replies_count: 1
Expand Down

0 comments on commit 8f4ee48

Please sign in to comment.