diff options
author | Jeremy Daer <jeremydaer@gmail.com> | 2016-04-13 22:30:35 -0700 |
---|---|---|
committer | Jeremy Daer <jeremydaer@gmail.com> | 2016-04-13 22:30:35 -0700 |
commit | 53ab1ee5652ead8d5e52e5a9c177a6f8a32c75b1 (patch) | |
tree | 5376680dc357962506b982cc9b4f6f82d2d263ab | |
parent | 128923ca14eeae032c2ed72b043e2bbcda09ab9c (diff) | |
parent | 28ec8c4a57197a43e4369bfbdfa92625bd592fe0 (diff) | |
download | rails-53ab1ee5652ead8d5e52e5a9c177a6f8a32c75b1.tar.gz rails-53ab1ee5652ead8d5e52e5a9c177a6f8a32c75b1.tar.bz2 rails-53ab1ee5652ead8d5e52e5a9c177a6f8a32c75b1.zip |
Merge pull request #24542 from kamipo/add_quoted_time
Add `quoted_time` for truncating the date part of a time column value
-rw-r--r-- | activerecord/lib/active_record/connection_adapters/abstract/quoting.rb | 6 | ||||
-rw-r--r-- | activerecord/lib/active_record/type/time.rb | 12 | ||||
-rw-r--r-- | activerecord/test/cases/time_precision_test.rb | 1 |
3 files changed, 18 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/abstract/quoting.rb b/activerecord/lib/active_record/connection_adapters/abstract/quoting.rb index 2eeefb13d7..860ef17dca 100644 --- a/activerecord/lib/active_record/connection_adapters/abstract/quoting.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract/quoting.rb @@ -146,6 +146,10 @@ module ActiveRecord end end + def quoted_time(value) # :nodoc: + quoted_date(value).sub(/\A2000-01-01 /, '') + end + def prepare_binds_for_database(binds) # :nodoc: binds.map(&:value_for_database) end @@ -166,6 +170,7 @@ module ActiveRecord # BigDecimals need to be put in a non-normalized form and quoted. when BigDecimal then value.to_s('F') when Numeric, ActiveSupport::Duration then value.to_s + when Type::Time::Value then "'#{quoted_time(value)}'" when Date, Time then "'#{quoted_date(value)}'" when Symbol then "'#{quote_string(value.to_s)}'" when Class then "'#{value}'" @@ -181,6 +186,7 @@ module ActiveRecord when false then unquoted_false # BigDecimals need to be put in a non-normalized form and quoted. when BigDecimal then value.to_s('F') + when Type::Time::Value then quoted_time(value) when Date, Time then quoted_date(value) when *types_which_need_no_typecasting value diff --git a/activerecord/lib/active_record/type/time.rb b/activerecord/lib/active_record/type/time.rb index 70988d84ff..7da49e43c7 100644 --- a/activerecord/lib/active_record/type/time.rb +++ b/activerecord/lib/active_record/type/time.rb @@ -2,6 +2,18 @@ module ActiveRecord module Type class Time < ActiveModel::Type::Time include Internal::Timezone + + class Value < DelegateClass(::Time) # :nodoc: + end + + def serialize(value) + case value = super + when ::Time + Value.new(value) + else + value + end + end end end end diff --git a/activerecord/test/cases/time_precision_test.rb b/activerecord/test/cases/time_precision_test.rb index c422daa859..628a8eb771 100644 --- a/activerecord/test/cases/time_precision_test.rb +++ b/activerecord/test/cases/time_precision_test.rb @@ -44,7 +44,6 @@ class TimePrecisionTest < ActiveRecord::TestCase end def test_formatting_time_according_to_precision - skip("TIME column on MariaDB doesn't ignore the date part of the string when it coerces to time") if current_adapter?(:Mysql2Adapter) && ActiveRecord::Base.connection.mariadb? @connection.create_table(:foos, force: true) do |t| t.time :start, precision: 0 t.time :finish, precision: 4 |