aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/connection_adapters
diff options
context:
space:
mode:
authorAndrew White <pixeltrix@users.noreply.github.com>2015-02-08 13:41:22 +0000
committerAndrew White <pixeltrix@users.noreply.github.com>2015-02-08 13:41:22 +0000
commit00222bc22aeb12b35c7dc7c51dc0bed69fd67ad8 (patch)
tree32d780f568088bbfa3519a0f8ca23137ca7d533a /activerecord/lib/active_record/connection_adapters
parent31fafe0a3223b58e214c03c88a33d6ef4435f63c (diff)
parentf9839120379292cbc5da25f35311f457b08b44a8 (diff)
downloadrails-00222bc22aeb12b35c7dc7c51dc0bed69fd67ad8.tar.gz
rails-00222bc22aeb12b35c7dc7c51dc0bed69fd67ad8.tar.bz2
rails-00222bc22aeb12b35c7dc7c51dc0bed69fd67ad8.zip
Merge pull request #18850 from kamipo/fix_rounding_problem_for_postgresql_timestamp_column
Fix rounding problem for PostgreSQL timestamp column
Diffstat (limited to 'activerecord/lib/active_record/connection_adapters')
-rw-r--r--activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb16
-rw-r--r--activerecord/lib/active_record/connection_adapters/postgresql/oid/date_time.rb9
2 files changed, 13 insertions, 12 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb b/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb
index 1ce5f5ae58..c29692d6ca 100644
--- a/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb
+++ b/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb
@@ -917,18 +917,10 @@ module ActiveRecord
end
class MysqlDateTime < Type::DateTime # :nodoc:
- def type_cast_for_database(value)
- if value.acts_like?(:time) && value.respond_to?(:usec)
- result = super.to_s(:db)
- case precision
- when 1..6
- "#{result}.#{sprintf("%0#{precision}d", value.usec / 10 ** (6 - precision))}"
- else
- result
- end
- else
- super
- end
+ private
+
+ def has_precision?
+ precision || 0
end
end
diff --git a/activerecord/lib/active_record/connection_adapters/postgresql/oid/date_time.rb b/activerecord/lib/active_record/connection_adapters/postgresql/oid/date_time.rb
index b9e7894e5c..2fe61eeb77 100644
--- a/activerecord/lib/active_record/connection_adapters/postgresql/oid/date_time.rb
+++ b/activerecord/lib/active_record/connection_adapters/postgresql/oid/date_time.rb
@@ -5,6 +5,15 @@ module ActiveRecord
class DateTime < Type::DateTime # :nodoc:
include Infinity
+ def type_cast_for_database(value)
+ if has_precision? && value.acts_like?(:time) && value.year <= 0
+ bce_year = format("%04d", -value.year + 1)
+ super.sub(/^-?\d+/, bce_year) + " BC"
+ else
+ super
+ end
+ end
+
def cast_value(value)
if value.is_a?(::String)
case value