diff options
author | Ryuta Kamizono <kamipo@gmail.com> | 2019-03-01 22:45:57 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-03-01 22:45:57 +0900 |
commit | c82705b15faaf12d568272e86afb6ad2c151007f (patch) | |
tree | 69edd7eb0182cb40f42be34fc7b45c71d97bd288 | |
parent | 0c4bf982e80414a5437f18f988b63885359326e7 (diff) | |
parent | dda5501e80cb98bbe119ac2f9fcf9b7049e121ce (diff) | |
download | rails-c82705b15faaf12d568272e86afb6ad2c151007f.tar.gz rails-c82705b15faaf12d568272e86afb6ad2c151007f.tar.bz2 rails-c82705b15faaf12d568272e86afb6ad2c151007f.zip |
Merge pull request #35431 from kamipo/enable_sql_cache_on_find
Enable SQL statement cache for `find` on base class as with `find_by`
-rw-r--r-- | activerecord/lib/active_record/core.rb | 2 | ||||
-rw-r--r-- | activerecord/test/cases/bind_parameter_test.rb | 25 |
2 files changed, 23 insertions, 4 deletions
diff --git a/activerecord/lib/active_record/core.rb b/activerecord/lib/active_record/core.rb index 18cfac1f2f..eb4b48bc37 100644 --- a/activerecord/lib/active_record/core.rb +++ b/activerecord/lib/active_record/core.rb @@ -161,7 +161,7 @@ module ActiveRecord return super if block_given? || primary_key.nil? || scope_attributes? || - columns_hash.include?(inheritance_column) + columns_hash.key?(inheritance_column) && !base_class? id = ids.first diff --git a/activerecord/test/cases/bind_parameter_test.rb b/activerecord/test/cases/bind_parameter_test.rb index b89f054821..03cc0dffbc 100644 --- a/activerecord/test/cases/bind_parameter_test.rb +++ b/activerecord/test/cases/bind_parameter_test.rb @@ -54,17 +54,36 @@ if ActiveRecord::Base.connection.prepared_statements @connection.disable_query_cache! end + def test_statement_cache_with_find + @connection.clear_cache! + + assert_equal 1, Topic.find(1).id + assert_raises(RecordNotFound) { SillyReply.find(2) } + + topic_sql = cached_statement(Topic, Topic.primary_key) + assert_includes statement_cache, to_sql_key(topic_sql) + + e = assert_raise { cached_statement(SillyReply, SillyReply.primary_key) } + assert_equal "SillyReply has no cached statement by \"id\"", e.message + + replies = SillyReply.where(id: 2).limit(1) + assert_includes statement_cache, to_sql_key(replies.arel) + end + def test_statement_cache_with_find_by @connection.clear_cache! assert_equal 1, Topic.find_by!(id: 1).id - assert_equal 2, Reply.find_by!(id: 2).id + assert_raises(RecordNotFound) { SillyReply.find_by!(id: 2) } topic_sql = cached_statement(Topic, [:id]) assert_includes statement_cache, to_sql_key(topic_sql) - e = assert_raise { cached_statement(Reply, [:id]) } - assert_equal "Reply has no cached statement by [:id]", e.message + e = assert_raise { cached_statement(SillyReply, [:id]) } + assert_equal "SillyReply has no cached statement by [:id]", e.message + + replies = SillyReply.where(id: 2).limit(1) + assert_includes statement_cache, to_sql_key(replies.arel) end def test_statement_cache_with_in_clause |