From 36f6327b75820e19b0018c1e7afd4b30d1218002 Mon Sep 17 00:00:00 2001 From: Ryuta Kamizono Date: Tue, 23 Apr 2019 22:35:28 +0900 Subject: Put all `explain` methods into `DatabaseStatements` module Almost all database statements methods except `explain` was moved into `DatabaseStatements` at #35922. This moves the last one method. --- .../connection_adapters/mysql/database_statements.rb | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'activerecord/lib/active_record/connection_adapters/mysql') diff --git a/activerecord/lib/active_record/connection_adapters/mysql/database_statements.rb b/activerecord/lib/active_record/connection_adapters/mysql/database_statements.rb index 2132e5d248..bbcdc96cdc 100644 --- a/activerecord/lib/active_record/connection_adapters/mysql/database_statements.rb +++ b/activerecord/lib/active_record/connection_adapters/mysql/database_statements.rb @@ -26,6 +26,15 @@ module ActiveRecord !READ_QUERY.match?(sql) end + def explain(arel, binds = []) + sql = "EXPLAIN #{to_sql(arel, binds)}" + start = Concurrent.monotonic_time + result = exec_query(sql, "EXPLAIN", binds) + elapsed = Concurrent.monotonic_time - start + + MySQL::ExplainPrettyPrinter.new.pp(result, elapsed) + end + # Executes the SQL statement in the context of this connection. def execute(sql, name = nil) if preventing_writes? && write_query?(sql) -- cgit v1.2.3