1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

disable automatic explain if there is no logger [closes #4671]

This commit is contained in:
Xavier Noria 2012-01-26 02:50:46 -08:00
parent d11347df72
commit f251437415
3 changed files with 20 additions and 1 deletions

View file

@ -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?

View file

@ -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] = []

View file

@ -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+: