aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb
diff options
context:
space:
mode:
authorJeremy Kemper <jeremy@bitsweat.net>2006-06-25 18:04:06 +0000
committerJeremy Kemper <jeremy@bitsweat.net>2006-06-25 18:04:06 +0000
commit42775686d2b32b66c971c0560ba2497c7f8703b2 (patch)
tree61539c008bc3690abec2349d7d0c32e0567fde44 /activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb
parentd9125093e8caaf112312d6e59052c3f20725fad2 (diff)
downloadrails-42775686d2b32b66c971c0560ba2497c7f8703b2.tar.gz
rails-42775686d2b32b66c971c0560ba2497c7f8703b2.tar.bz2
rails-42775686d2b32b66c971c0560ba2497c7f8703b2.zip
PostgreSQL: support microsecond time resolution. Closes #5492.
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@4494 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb')
-rw-r--r--activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb20
1 files changed, 15 insertions, 5 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb b/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb
index fde561d03a..3031c11267 100644
--- a/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb
+++ b/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb
@@ -1,4 +1,4 @@
-require 'parsedate'
+require 'date'
module ActiveRecord
module ConnectionAdapters #:nodoc:
@@ -109,7 +109,9 @@ module ActiveRecord
def self.string_to_time(string)
return string unless string.is_a?(String)
- time_array = ParseDate.parsedate(string)[0..5]
+ time_hash = Date._parse(string)
+ time_hash[:sec_fraction] = microseconds(time_hash)
+ time_array = time_hash.values_at(:year, :mon, :mday, :hour, :min, :sec, :sec_fraction)
# treat 0000-00-00 00:00:00 as nil
Time.send(Base.default_timezone, *time_array) rescue nil
end
@@ -117,9 +119,11 @@ module ActiveRecord
def self.string_to_dummy_time(string)
return string unless string.is_a?(String)
return nil if string.empty?
- time_array = ParseDate.parsedate(string)
+ time_hash = Date._parse(string)
+ time_hash[:sec_fraction] = microseconds(time_hash)
# pad the resulting array with dummy date information
- time_array[0] = 2000; time_array[1] = 1; time_array[2] = 1;
+ time_array = [2000, 1, 1]
+ time_array += time_hash.values_at(:hour, :min, :sec, :sec_fraction)
Time.send(Base.default_timezone, *time_array) rescue nil
end
@@ -132,7 +136,13 @@ module ActiveRecord
end
end
- private
+ private
+ # '0.123456' -> 123456
+ # '1.123456' -> 123456
+ def self.microseconds(time)
+ ((time[:sec_fraction].to_f % 1) * 1_000_000).to_i
+ end
+
def extract_limit(sql_type)
return unless sql_type
$1.to_i if sql_type =~ /\((.*)\)/