diff options
author | Rafael França <rafaelmfranca@gmail.com> | 2016-07-20 12:58:42 -0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-07-20 12:58:42 -0300 |
commit | f88495d519f9bdacd542d61b4e8117eb4f79c173 (patch) | |
tree | 9af8ea802786a3e8f92a554bed78b1abbad6fae0 /activerecord/lib | |
parent | b1d48d542452e5d87b42a8af513b7102d92b0684 (diff) | |
parent | 7d1dc9841cfce02b32a1a9373e1e8c08cb801269 (diff) | |
download | rails-f88495d519f9bdacd542d61b4e8117eb4f79c173.tar.gz rails-f88495d519f9bdacd542d61b4e8117eb4f79c173.tar.bz2 rails-f88495d519f9bdacd542d61b4e8117eb4f79c173.zip |
Merge pull request #25885 from kamipo/fix_explain_logging_with_binds
Fix explain logging with binds
Diffstat (limited to 'activerecord/lib')
-rw-r--r-- | activerecord/lib/active_record/explain.rb | 29 |
1 files changed, 20 insertions, 9 deletions
diff --git a/activerecord/lib/active_record/explain.rb b/activerecord/lib/active_record/explain.rb index 727a9befc1..ac27e72f2b 100644 --- a/activerecord/lib/active_record/explain.rb +++ b/activerecord/lib/active_record/explain.rb @@ -16,15 +16,14 @@ module ActiveRecord # Makes the adapter execute EXPLAIN for the tuples of queries and bindings. # Returns a formatted string ready to be logged. def exec_explain(queries) # :nodoc: - str = queries.map do |sql, bind| - [].tap do |msg| - msg << "EXPLAIN for: #{sql}" - unless bind.empty? - bind_msg = bind.map {|col, val| [col.name, val]}.inspect - msg.last << " #{bind_msg}" - end - msg << connection.explain(sql, bind) - end.join("\n") + str = queries.map do |sql, binds| + msg = "EXPLAIN for: #{sql}" + unless binds.empty? + msg << " " + msg << binds.map { |attr| render_bind(attr) }.inspect + end + msg << "\n" + msg << connection.explain(sql, binds) end.join("\n") # Overriding inspect to be more human readable, especially in the console. @@ -34,5 +33,17 @@ module ActiveRecord str end + + private + + def render_bind(attr) + value = if attr.type.binary? && attr.value + "<#{attr.value_for_database.to_s.bytesize} bytes of binary data>" + else + connection.type_cast(attr.value_for_database) + end + + [attr.name, value] + end end end |