diff --git a/activerecord/CHANGELOG.md b/activerecord/CHANGELOG.md index be3b6564b000a68e6200961237bd93d9810844a1..595bf4db728278c6d69a0bc6b8fb65a9f2087335 100644 --- a/activerecord/CHANGELOG.md +++ b/activerecord/CHANGELOG.md @@ -1,5 +1,9 @@ ## Rails 4.0.0 (unreleased) ## +* Do not log the binding values for binary columns. + + *Matthew M. Boedicker* + * Fix counter cache columns not updated when replacing `has_many :through` associations. diff --git a/activerecord/lib/active_record/log_subscriber.rb b/activerecord/lib/active_record/log_subscriber.rb index ca799500499493367d9f04e2f28d98ca17f6bb47..11ec2eaf796f8889aae4a6fad77160f652555c9f 100644 --- a/activerecord/lib/active_record/log_subscriber.rb +++ b/activerecord/lib/active_record/log_subscriber.rb @@ -20,6 +20,16 @@ def initialize @odd_or_even = false end + def render_bind(column, value) + if column.type == :binary + rendered_value = "<#{value.bytesize} bytes of binary data>" + else + rendered_value = value + end + + [column.name, rendered_value] + end + def sql(event) self.class.runtime += event.duration return unless logger.debug? @@ -34,7 +44,7 @@ def sql(event) unless (payload[:binds] || []).empty? binds = " " + payload[:binds].map { |col,v| - [col.name, v] + render_bind(col, v) }.inspect end diff --git a/activerecord/test/cases/log_subscriber_test.rb b/activerecord/test/cases/log_subscriber_test.rb index 70d00aecf97d61d5132019ca64c1eb6d3d81fa04..8f42c8ef7bb0d91e07d36ce48a6fe5b5c1240785 100644 --- a/activerecord/test/cases/log_subscriber_test.rb +++ b/activerecord/test/cases/log_subscriber_test.rb @@ -1,4 +1,5 @@ require "cases/helper" +require "models/binary" require "models/developer" require "models/post" require "active_support/log_subscriber/test_helper" @@ -100,4 +101,11 @@ def test_cached_queries_doesnt_log_when_level_is_not_debug def test_initializes_runtime Thread.new { assert_equal 0, ActiveRecord::LogSubscriber.runtime }.join end + + def test_binary_data_is_not_logged + Binary.create(:data => 'some binary data') + wait + assert_equal 3, @logger.logged(:debug).size + assert_match(/<16 bytes of binary data>/, @logger.logged(:debug)[-2]) + end end