aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/connection_adapters
diff options
context:
space:
mode:
authorSean Griffin <sean@seantheprogrammer.com>2017-07-18 13:04:47 -0400
committerSean Griffin <sean@seantheprogrammer.com>2017-07-18 13:06:43 -0400
commit8ebe1f2feed30809abb3f114242dda7379e66e4b (patch)
treee74ea295436ad469fd2140ad73b057b929655ae7 /activerecord/lib/active_record/connection_adapters
parent58c567adaeba1208522640e7890db9e07cbb768a (diff)
downloadrails-8ebe1f2feed30809abb3f114242dda7379e66e4b.tar.gz
rails-8ebe1f2feed30809abb3f114242dda7379e66e4b.tar.bz2
rails-8ebe1f2feed30809abb3f114242dda7379e66e4b.zip
Don't convert dates to strings when using prepared statements in mysql
Dates are able to be natively handled by the mysql2 gem. libmysql (and the wire protocol) represent each portion of the date as an integer, which is significantly faster to encode and decode. By passing the Ruby date objects through directly, we can save a good bit of time and memory.
Diffstat (limited to 'activerecord/lib/active_record/connection_adapters')
-rw-r--r--activerecord/lib/active_record/connection_adapters/mysql/quoting.rb8
1 files changed, 8 insertions, 0 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/mysql/quoting.rb b/activerecord/lib/active_record/connection_adapters/mysql/quoting.rb
index d4f5906b33..0cc0ac74fe 100644
--- a/activerecord/lib/active_record/connection_adapters/mysql/quoting.rb
+++ b/activerecord/lib/active_record/connection_adapters/mysql/quoting.rb
@@ -39,6 +39,14 @@ module ActiveRecord
def quoted_binary(value)
"x'#{value.hex}'"
end
+
+ def _type_cast(value)
+ case value
+ when Type::Time::Value then value.__getobj__
+ when Date, Time then value
+ else super
+ end
+ end
end
end
end