Changeset 7238
- Timestamp:
- 07/25/07 03:48:30 (1 year ago)
- Files:
-
- trunk/activerecord/CHANGELOG (modified) (1 diff)
- trunk/activerecord/lib/active_record/query_cache.rb (modified) (1 diff)
- trunk/activerecord/test/query_cache_test.rb (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/activerecord/CHANGELOG
r7237 r7238 1 1 *SVN* 2 3 * Perform a deep #dup on query cache results so that modifying activerecord attributes does not modify the cached attributes. [Rick] 2 4 3 5 # Ensure that has_many :through associations use a count query instead of loading the target when #size is called. Closes #8800 [lifo] trunk/activerecord/lib/active_record/query_cache.rb
r6202 r7238 59 59 @query_cache[sql] = yield 60 60 end 61 62 result ? result.dup : nil 61 62 if result 63 # perform a deep #dup in case result is an array 64 result = result.collect { |row| row.dup } if result.respond_to?(:collect) 65 result.dup 66 else 67 nil 68 end 63 69 end 64 70 trunk/activerecord/test/query_cache_test.rb
r6195 r7238 9 9 10 10 def test_find_queries 11 assert_queries(2) { Task.find(1); Task.find(1) } 11 assert_queries(2) { Task.find(1); Task.find(1) } 12 12 end 13 13 14 14 def test_find_queries_with_cache 15 15 Task.cache do 16 assert_queries(1) { Task.find(1); Task.find(1) } 16 assert_queries(1) { Task.find(1); Task.find(1) } 17 17 end 18 18 end 19 19 20 def test_find_queries_with_cache 20 def test_query_cache_returned 21 assert_not_equal ActiveRecord::QueryCache, Task.connection.class 21 22 Task.cache do 22 assert_queries(1) { Task.find(1); Task.find(1) } 23 assert_equal ActiveRecord::QueryCache, Task.connection.class 24 end 25 end 26 27 def test_query_cache_dups_results_correctly 28 Task.cache do 29 now = Time.now.utc 30 task = Task.find 1 31 assert_not_equal now, task.starting 32 task.starting = now 33 task.reload 34 assert_not_equal now, task.starting 35 end 36 end 37 38 def test_cache_is_scoped_on_actual_class_only 39 Task.cache do 40 Topic.columns # don't count this query 41 assert_queries(2) { Topic.find(1); Topic.find(1); } 23 42 end 24 43 end 25 44 26 def test_query_cache_returned27 assert_not_equal ActiveRecord::QueryCache, Task.connection.class28 Task.cache do29 assert_equal ActiveRecord::QueryCache, Task.connection.class30 end31 end32 33 34 def test_cache_is_scoped_on_actual_class_only35 Task.cache do36 assert_queries(2) { Topic.find(1); Topic.find(1) }37 end38 end39 40 41 45 def test_cache_is_scoped_on_all_descending_classes 42 46 ActiveRecord::Base.cache do 43 assert_queries(1) { Task.find(1); Task.find(1) } 47 assert_queries(1) { Task.find(1); Task.find(1) } 44 48 end 45 49 end … … 54 58 end 55 59 end 56 57 58 60 end 59 60 61 61 62 uses_mocha('QueryCacheExpiryTest') do