aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorXavier Noria <fxn@hashref.com>2012-01-26 02:50:46 -0800
committerXavier Noria <fxn@hashref.com>2012-01-26 02:50:46 -0800
commitf251437415f7b803f7a84118fcc970a111ace266 (patch)
treec4a86b401027742fe78ab6087af8ed91eb53c280
parentd11347df7203cb5c82caad5c9949830980e3eb6a (diff)
downloadrails-f251437415f7b803f7a84118fcc970a111ace266.tar.gz
rails-f251437415f7b803f7a84118fcc970a111ace266.tar.bz2
rails-f251437415f7b803f7a84118fcc970a111ace266.zip
disable automatic explain if there is no logger [closes #4671]
-rw-r--r--activerecord/lib/active_record/explain.rb2
-rw-r--r--activerecord/test/cases/explain_test.rb16
-rw-r--r--railties/guides/source/active_record_querying.textile3
3 files changed, 20 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/explain.rb b/activerecord/lib/active_record/explain.rb
index e502d7e52b..01cacf6153 100644
--- a/activerecord/lib/active_record/explain.rb
+++ b/activerecord/lib/active_record/explain.rb
@@ -19,6 +19,8 @@ module ActiveRecord
# currently collected. A false value indicates collecting is turned
# off. Otherwise it is an array of queries.
def logging_query_plan # :nodoc:
+ return yield unless logger
+
threshold = auto_explain_threshold_in_seconds
current = Thread.current
if threshold && current[:available_queries_for_explain].nil?
diff --git a/activerecord/test/cases/explain_test.rb b/activerecord/test/cases/explain_test.rb
index 6ae6f83446..83c9b6e107 100644
--- a/activerecord/test/cases/explain_test.rb
+++ b/activerecord/test/cases/explain_test.rb
@@ -14,7 +14,7 @@ if ActiveRecord::Base.connection.supports_explain?
base.connection
end
- def test_logging_query_plan
+ def test_logging_query_plan_with_logger
base.logger.expects(:warn).with do |message|
message.starts_with?('EXPLAIN for:')
end
@@ -24,6 +24,20 @@ if ActiveRecord::Base.connection.supports_explain?
end
end
+ def test_logging_query_plan_without_logger
+ original = base.logger
+ base.logger = nil
+
+ base.logger.expects(:warn).never
+
+ with_threshold(0) do
+ car = Car.where(:name => 'honda').first
+ assert_equal 'honda', car.name
+ end
+ ensure
+ base.logger = original
+ end
+
def test_collect_queries_for_explain
base.auto_explain_threshold_in_seconds = nil
queries = Thread.current[:available_queries_for_explain] = []
diff --git a/railties/guides/source/active_record_querying.textile b/railties/guides/source/active_record_querying.textile
index 84687e2e4f..8517f6fb19 100644
--- a/railties/guides/source/active_record_querying.textile
+++ b/railties/guides/source/active_record_querying.textile
@@ -1400,6 +1400,9 @@ A threshold of +nil+ disables automatic EXPLAINs.
The default threshold in development mode is 0.5 seconds, and +nil+ in test and
production modes.
+INFO. Automatic EXPLAIN gets disabled if Active Record has no logger, regardless
+of the value of the threshold.
+
h5. Disabling Automatic EXPLAIN
Automatic EXPLAIN can be selectively silenced with +ActiveRecord::Base.silence_auto_explain+: