From df5a38fc6aeb8dfaa816fcbe0efb3fe4de169833 Mon Sep 17 00:00:00 2001 From: Tatsuhiko Miyagawa Date: Mon, 12 Nov 2012 13:48:50 -0800 Subject: [PATCH 1/3] MySQL 5.6 and later supports microsecond precision in datetime. You might want to branch it to include this only for 5.6, but passing these values to < 5.6 doesn't cause issues either. --- .../active_record/connection_adapters/mysql2_adapter.rb | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb b/activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb index b07b0cb826..2b5049f5a5 100644 --- a/activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb @@ -83,6 +83,14 @@ module ActiveRecord @connection.escape(string) end + def quoted_date(value) + if value.acts_like?(:time) && value.respond_to?(:usec) + "#{super}.#{sprintf("%06d", value.usec)}" + else + super + end + end + # CONNECTION MANAGEMENT ==================================== def active? From 5a934e6787337e51d8174669ea0ca6e0c9ea8081 Mon Sep 17 00:00:00 2001 From: Arthur Neves Date: Wed, 12 Mar 2014 09:06:12 -0400 Subject: [PATCH 2/3] Test microsecond on mysql 5.6 --- activerecord/test/cases/base_test.rb | 2 +- activerecord/test/cases/helper.rb | 5 +++++ activerecord/test/schema/schema.rb | 6 +++++- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/activerecord/test/cases/base_test.rb b/activerecord/test/cases/base_test.rb index 8a0b0b9589..6acb342d0b 100644 --- a/activerecord/test/cases/base_test.rb +++ b/activerecord/test/cases/base_test.rb @@ -212,7 +212,7 @@ class BasicsTest < ActiveRecord::TestCase ) # For adapters which support microsecond resolution. - if current_adapter?(:PostgreSQLAdapter, :SQLite3Adapter) + if current_adapter?(:PostgreSQLAdapter, :SQLite3Adapter) || mysql_56? 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 diff --git a/activerecord/test/cases/helper.rb b/activerecord/test/cases/helper.rb index 3758224b0c..8a49dfbb44 100644 --- a/activerecord/test/cases/helper.rb +++ b/activerecord/test/cases/helper.rb @@ -41,6 +41,11 @@ def in_memory_db? ActiveRecord::Base.connection_pool.spec.config[:database] == ":memory:" end +def mysql_56? + current_adapter?(:Mysql2Adapter) && + ActiveRecord::Base.connection.send(:version).join(".") >= "5.6.0" +end + def supports_savepoints? ActiveRecord::Base.connection.supports_savepoints? end diff --git a/activerecord/test/schema/schema.rb b/activerecord/test/schema/schema.rb index 5f2d6acbcb..b44e72a67c 100644 --- a/activerecord/test/schema/schema.rb +++ b/activerecord/test/schema/schema.rb @@ -674,7 +674,11 @@ ActiveRecord::Schema.define do t.string :title t.string :author_name t.string :author_email_address - t.datetime :written_on + if mysql_56? + t.datetime :written_on, limit: 6 + else + t.datetime :written_on + end t.time :bonus_time t.date :last_read # use VARCHAR2(4000) instead of CLOB datatype as CLOB data type has many limitations in From 2ed1cbba5226a321be48a80f32b6d7fb988ac778 Mon Sep 17 00:00:00 2001 From: Arthur Neves Date: Wed, 12 Mar 2014 09:15:46 -0400 Subject: [PATCH 3/3] Changelog entry for mysql56 microseconds --- activerecord/CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/activerecord/CHANGELOG.md b/activerecord/CHANGELOG.md index 2e4f653ea6..e6c7d74c75 100644 --- a/activerecord/CHANGELOG.md +++ b/activerecord/CHANGELOG.md @@ -1,3 +1,7 @@ +* Support for Mysql 5.6 Fractional Seconds. + + *arthurnn*, *Tatsuhiko Miyagawa* + * Support for Postgres `citext` data type enabling case-insensitive where values without needing to wrap in UPPER/LOWER sql functions.