Skip to content

Commit cb47c12

Browse files
authored
Merge pull request rails#51175 from Shopify/fixtures-connection-pool
Refactor FixtureSet to deal with connection pools
2 parents 3c6adf2 + 2cbedfd commit cb47c12

File tree

2 files changed

+32
-32
lines changed

2 files changed

+32
-32
lines changed

activerecord/lib/active_record/fixtures.rb

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -553,24 +553,24 @@ def reset_cache
553553
@@all_cached_fixtures.clear
554554
end
555555

556-
def cache_for_connection(connection)
557-
@@all_cached_fixtures[connection]
556+
def cache_for_connection_pool(connection_pool)
557+
@@all_cached_fixtures[connection_pool]
558558
end
559559

560-
def fixture_is_cached?(connection, table_name)
561-
cache_for_connection(connection)[table_name]
560+
def fixture_is_cached?(connection_pool, table_name)
561+
cache_for_connection_pool(connection_pool)[table_name]
562562
end
563563

564-
def cached_fixtures(connection, keys_to_fetch = nil)
564+
def cached_fixtures(connection_pool, keys_to_fetch = nil)
565565
if keys_to_fetch
566-
cache_for_connection(connection).values_at(*keys_to_fetch)
566+
cache_for_connection_pool(connection_pool).values_at(*keys_to_fetch)
567567
else
568-
cache_for_connection(connection).values
568+
cache_for_connection_pool(connection_pool).values
569569
end
570570
end
571571

572-
def cache_fixtures(connection, fixtures_map)
573-
cache_for_connection(connection).update(fixtures_map)
572+
def cache_fixtures(connection_pool, fixtures_map)
573+
cache_for_connection_pool(connection_pool).update(fixtures_map)
574574
end
575575

576576
def instantiate_fixtures(object, fixture_set, load_instances = true)
@@ -588,27 +588,25 @@ def instantiate_all_loaded_fixtures(object, load_instances = true)
588588
end
589589
end
590590

591-
def create_fixtures(fixtures_directories, fixture_set_names, class_names = {}, config = ActiveRecord::Base, &block)
591+
def create_fixtures(fixtures_directories, fixture_set_names, class_names = {}, config = ActiveRecord::Base)
592592
fixture_set_names = Array(fixture_set_names).map(&:to_s)
593593
class_names.stringify_keys!
594594

595-
# FIXME: Apparently JK uses this.
596-
connection = block_given? ? block : lambda { ActiveRecord::Base.connection }
597-
595+
connection_pool = config.connection_pool
598596
fixture_files_to_read = fixture_set_names.reject do |fs_name|
599-
fixture_is_cached?(connection.call, fs_name)
597+
fixture_is_cached?(connection_pool, fs_name)
600598
end
601599

602600
if fixture_files_to_read.any?
603601
fixtures_map = read_and_insert(
604602
Array(fixtures_directories),
605603
fixture_files_to_read,
606604
class_names,
607-
connection,
605+
connection_pool,
608606
)
609-
cache_fixtures(connection.call, fixtures_map)
607+
cache_fixtures(connection_pool, fixtures_map)
610608
end
611-
cached_fixtures(connection.call, fixture_set_names)
609+
cached_fixtures(connection_pool, fixture_set_names)
612610
end
613611

614612
# Returns a consistent, platform-independent identifier for +label+.
@@ -641,7 +639,7 @@ def context_class
641639
end
642640

643641
private
644-
def read_and_insert(fixtures_directories, fixture_files, class_names, connection) # :nodoc:
642+
def read_and_insert(fixtures_directories, fixture_files, class_names, connection_pool) # :nodoc:
645643
fixtures_map = {}
646644
directory_glob = "{#{fixtures_directories.join(",")}}"
647645
fixture_sets = fixture_files.map do |fixture_set_name|
@@ -655,21 +653,21 @@ def read_and_insert(fixtures_directories, fixture_files, class_names, connection
655653
end
656654
update_all_loaded_fixtures(fixtures_map)
657655

658-
insert(fixture_sets, connection)
656+
insert(fixture_sets, connection_pool)
659657

660658
fixtures_map
661659
end
662660

663-
def insert(fixture_sets, connection) # :nodoc:
664-
fixture_sets_by_connection = fixture_sets.group_by do |fixture_set|
661+
def insert(fixture_sets, connection_pool) # :nodoc:
662+
fixture_sets_by_pool = fixture_sets.group_by do |fixture_set|
665663
if fixture_set.model_class
666-
fixture_set.model_class.connection
664+
fixture_set.model_class.connection_pool
667665
else
668-
connection.call
666+
connection_pool
669667
end
670668
end
671669

672-
fixture_sets_by_connection.each do |conn, set|
670+
fixture_sets_by_pool.each do |pool, set|
673671
table_rows_for_connection = Hash.new { |h, k| h[k] = [] }
674672

675673
set.each do |fixture_set|
@@ -678,13 +676,15 @@ def insert(fixture_sets, connection) # :nodoc:
678676
end
679677
end
680678

681-
conn.insert_fixtures_set(table_rows_for_connection, table_rows_for_connection.keys)
679+
pool.with_connection do |conn|
680+
conn.insert_fixtures_set(table_rows_for_connection, table_rows_for_connection.keys)
682681

683-
check_all_foreign_keys_valid!(conn)
682+
check_all_foreign_keys_valid!(conn)
684683

685-
# Cap primary key sequences to max(pk).
686-
if conn.respond_to?(:reset_pk_sequence!)
687-
set.each { |fs| conn.reset_pk_sequence!(fs.table_name) }
684+
# Cap primary key sequences to max(pk).
685+
if conn.respond_to?(:reset_pk_sequence!)
686+
set.each { |fs| conn.reset_pk_sequence!(fs.table_name) }
687+
end
688688
end
689689
end
690690
end

activerecord/test/cases/fixtures_test.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1242,16 +1242,16 @@ def load_extra_fixture(name)
12421242
end
12431243

12441244
def test_cache
1245-
assert ActiveRecord::FixtureSet.fixture_is_cached?(ActiveRecord::Base.connection, "categories")
1246-
assert ActiveRecord::FixtureSet.fixture_is_cached?(ActiveRecord::Base.connection, "authors")
1245+
assert ActiveRecord::FixtureSet.fixture_is_cached?(ActiveRecord::Base.connection_pool, "categories")
1246+
assert ActiveRecord::FixtureSet.fixture_is_cached?(ActiveRecord::Base.connection_pool, "authors")
12471247

12481248
assert_no_queries do
12491249
create_fixtures("categories")
12501250
create_fixtures("authors")
12511251
end
12521252

12531253
load_extra_fixture("posts")
1254-
assert ActiveRecord::FixtureSet.fixture_is_cached?(ActiveRecord::Base.connection, "posts")
1254+
assert ActiveRecord::FixtureSet.fixture_is_cached?(ActiveRecord::Base.connection_pool, "posts")
12551255
self.class.setup_fixture_accessors :posts
12561256
assert_equal "Welcome to the weblog", posts(:welcome).title
12571257
end

0 commit comments

Comments
 (0)