diff options
author | kennyj <kennyj@gmail.com> | 2012-07-18 03:02:11 +0900 |
---|---|---|
committer | kennyj <kennyj@gmail.com> | 2012-07-18 03:02:11 +0900 |
commit | 1b2528394385add26d5cb312891551d3c2914fe2 (patch) | |
tree | f9b34f51d0f01c824e8fc52169bd2a196f77a9fe /activerecord | |
parent | 939f014bdf7f37602941b4b67fd2015ee26b1766 (diff) | |
download | rails-1b2528394385add26d5cb312891551d3c2914fe2.tar.gz rails-1b2528394385add26d5cb312891551d3c2914fe2.tar.bz2 rails-1b2528394385add26d5cb312891551d3c2914fe2.zip |
Log query plan when we use count_by_sql method.
Diffstat (limited to 'activerecord')
-rw-r--r-- | activerecord/lib/active_record/querying.rb | 6 | ||||
-rw-r--r-- | activerecord/test/cases/explain_test.rb | 10 |
2 files changed, 14 insertions, 2 deletions
diff --git a/activerecord/lib/active_record/querying.rb b/activerecord/lib/active_record/querying.rb index 4d8283bcff..609d810654 100644 --- a/activerecord/lib/active_record/querying.rb +++ b/activerecord/lib/active_record/querying.rb @@ -62,8 +62,10 @@ module ActiveRecord # # Product.count_by_sql "SELECT COUNT(*) FROM sales s, customers c WHERE s.customer_id = c.id" def count_by_sql(sql) - sql = sanitize_conditions(sql) - connection.select_value(sql, "#{name} Count").to_i + logging_query_plan do + sql = sanitize_conditions(sql) + connection.select_value(sql, "#{name} Count").to_i + end end end end diff --git a/activerecord/test/cases/explain_test.rb b/activerecord/test/cases/explain_test.rb index cb7781f8e7..bcc488f7ee 100644 --- a/activerecord/test/cases/explain_test.rb +++ b/activerecord/test/cases/explain_test.rb @@ -68,6 +68,16 @@ if ActiveRecord::Base.connection.supports_explain? assert_equal [cars(:honda)], result end + def test_logging_query_plan_when_counting_by_sql + base.logger.expects(:warn).with do |message| + message.starts_with?('EXPLAIN for:') + end + + with_threshold(0) do + Car.count_by_sql "SELECT COUNT(*) FROM cars WHERE name = 'honda'" + end + end + def test_exec_explain_with_no_binds sqls = %w(foo bar) binds = [[], []] |