aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRyuta Kamizono <kamipo@gmail.com>2019-03-01 22:45:57 +0900
committerGitHub <noreply@github.com>2019-03-01 22:45:57 +0900
commitc82705b15faaf12d568272e86afb6ad2c151007f (patch)
tree69edd7eb0182cb40f42be34fc7b45c71d97bd288
parent0c4bf982e80414a5437f18f988b63885359326e7 (diff)
parentdda5501e80cb98bbe119ac2f9fcf9b7049e121ce (diff)
downloadrails-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.rb2
-rw-r--r--activerecord/test/cases/bind_parameter_test.rb25
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