diff options
author | Yves Senn <yves.senn@gmail.com> | 2015-06-19 10:45:57 +0200 |
---|---|---|
committer | Yves Senn <yves.senn@gmail.com> | 2015-06-19 10:45:57 +0200 |
commit | ee066afd188edb4c30a40f736c5f9bd0e9960fb3 (patch) | |
tree | 163ef38e4f576d981864250658479e50afd787dc /activerecord | |
parent | 27026804e20e6467e86013e1dbc2dac5511c8bd5 (diff) | |
parent | acdb006ad0e3926702e9df13effd4577db4dd0ad (diff) | |
download | rails-ee066afd188edb4c30a40f736c5f9bd0e9960fb3.tar.gz rails-ee066afd188edb4c30a40f736c5f9bd0e9960fb3.tar.bz2 rails-ee066afd188edb4c30a40f736c5f9bd0e9960fb3.zip |
Merge pull request #19843 from marshall-lee/explain_cte_queries
Let WITH (CTE) queries be explainable
Conflicts:
activerecord/CHANGELOG.md
Diffstat (limited to 'activerecord')
-rw-r--r-- | activerecord/CHANGELOG.md | 4 | ||||
-rw-r--r-- | activerecord/lib/active_record/explain_subscriber.rb | 2 | ||||
-rw-r--r-- | activerecord/test/cases/explain_subscriber_test.rb | 5 |
3 files changed, 10 insertions, 1 deletions
diff --git a/activerecord/CHANGELOG.md b/activerecord/CHANGELOG.md index d570f8e965..99c78ad934 100644 --- a/activerecord/CHANGELOG.md +++ b/activerecord/CHANGELOG.md @@ -1,3 +1,7 @@ +* Let `WITH` queries (Common Table Expressions) be explainable. + + *Vladimir Kochnev* + * Make `remove_index :table, :column` reversible. *Yves Senn* diff --git a/activerecord/lib/active_record/explain_subscriber.rb b/activerecord/lib/active_record/explain_subscriber.rb index 6a49936644..9adabd7819 100644 --- a/activerecord/lib/active_record/explain_subscriber.rb +++ b/activerecord/lib/active_record/explain_subscriber.rb @@ -19,7 +19,7 @@ module ActiveRecord # On the other hand, we want to monitor the performance of our real database # queries, not the performance of the access to the query cache. IGNORED_PAYLOADS = %w(SCHEMA EXPLAIN CACHE) - EXPLAINED_SQLS = /\A\s*(select|update|delete|insert)\b/i + EXPLAINED_SQLS = /\A\s*(with|select|update|delete|insert)\b/i def ignore_payload?(payload) payload[:exception] || IGNORED_PAYLOADS.include?(payload[:name]) || payload[:sql] !~ EXPLAINED_SQLS end diff --git a/activerecord/test/cases/explain_subscriber_test.rb b/activerecord/test/cases/explain_subscriber_test.rb index 8de2ddb10d..2dee8a26a5 100644 --- a/activerecord/test/cases/explain_subscriber_test.rb +++ b/activerecord/test/cases/explain_subscriber_test.rb @@ -48,6 +48,11 @@ if ActiveRecord::Base.connection.supports_explain? assert queries.empty? end + def test_collects_cte_queries + SUBSCRIBER.finish(nil, nil, name: 'SQL', sql: 'with s as (values(3)) select 1 from s') + assert_equal 1, queries.size + end + teardown do ActiveRecord::ExplainRegistry.reset end |