提交 8edd6dea 编写于 作者: A Aaron Patterson

explain listener does not care about time, so use evented listener

上级 b9f9951d
......@@ -2,9 +2,12 @@
module ActiveRecord
class ExplainSubscriber # :nodoc:
def call(*args)
def start(name, id, payload)
# unused
end
def finish(name, id, payload)
if queries = Thread.current[:available_queries_for_explain]
payload = args.last
queries << payload.values_at(:sql, :binds) unless ignore_payload?(payload)
end
end
......
......@@ -6,14 +6,14 @@ class ExplainSubscriberTest < ActiveRecord::TestCase
def test_collects_nothing_if_available_queries_for_explain_is_nil
with_queries(nil) do
SUBSCRIBER.call
SUBSCRIBER.finish(nil, nil, {})
assert_nil Thread.current[:available_queries_for_explain]
end
end
def test_collects_nothing_if_the_payload_has_an_exception
with_queries([]) do |queries|
SUBSCRIBER.call(:exception => Exception.new)
SUBSCRIBER.finish(nil, nil, :exception => Exception.new)
assert queries.empty?
end
end
......@@ -21,7 +21,7 @@ def test_collects_nothing_if_the_payload_has_an_exception
def test_collects_nothing_for_ignored_payloads
with_queries([]) do |queries|
ActiveRecord::ExplainSubscriber::IGNORED_PAYLOADS.each do |ip|
SUBSCRIBER.call(:name => ip)
SUBSCRIBER.finish(nil, nil, :name => ip)
end
assert queries.empty?
end
......@@ -31,7 +31,7 @@ def test_collects_pairs_of_queries_and_binds
sql = 'select 1 from users'
binds = [1, 2]
with_queries([]) do |queries|
SUBSCRIBER.call(:name => 'SQL', :sql => sql, :binds => binds)
SUBSCRIBER.finish(nil, nil, :name => 'SQL', :sql => sql, :binds => binds)
assert_equal 1, queries.size
assert_equal sql, queries[0][0]
assert_equal binds, queries[0][1]
......@@ -45,4 +45,4 @@ def with_queries(queries)
Thread.current[:available_queries_for_explain] = nil
end
end
end
\ No newline at end of file
end
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册