Skip to content

Commit 0ed3cd4

Browse files
authored
Merge pull request rails#54960 from flavorjones/flavorjones/stable-sort-schema-cache
Sort schema cache columns and indexes per table when dumping
2 parents 556881c + 9aae457 commit 0ed3cd4

File tree

2 files changed

+10
-6
lines changed

2 files changed

+10
-6
lines changed

activerecord/lib/active_record/connection_adapters/schema_cache.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -271,10 +271,10 @@ def initialize_dup(other) # :nodoc:
271271
end
272272

273273
def encode_with(coder) # :nodoc:
274-
coder["columns"] = @columns.sort.to_h
274+
coder["columns"] = @columns.sort.to_h.transform_values { _1.sort_by(&:name) }
275275
coder["primary_keys"] = @primary_keys.sort.to_h
276276
coder["data_sources"] = @data_sources.sort.to_h
277-
coder["indexes"] = @indexes.sort.to_h
277+
coder["indexes"] = @indexes.sort.to_h.transform_values { _1.sort_by(&:name) }
278278
coder["version"] = @version
279279
end
280280

activerecord/test/cases/connection_adapters/schema_cache_test.rb

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -467,22 +467,26 @@ def test_when_lazily_load_schema_cache_is_set_cache_is_lazily_populated_when_est
467467
values = [["z", nil], ["y", nil], ["x", nil]]
468468
expected = values.sort.to_h
469469

470+
named = Struct.new(:name)
471+
named_values = [["z", [named.new("c"), named.new("b")]], ["y", [named.new("c"), named.new("b")]], ["x", [named.new("c"), named.new("b")]]]
472+
named_expected = named_values.sort.to_h.transform_values { _1.sort_by(&:name) }
473+
470474
coder = {
471-
"columns" => values,
475+
"columns" => named_values,
472476
"primary_keys" => values,
473477
"data_sources" => values,
474-
"indexes" => values,
478+
"indexes" => named_values,
475479
"deduplicated" => true
476480
}
477481

478482
schema_cache = SchemaCache.allocate
479483
schema_cache.init_with(coder)
480484
schema_cache.encode_with(coder)
481485

482-
assert_equal expected, coder["columns"]
486+
assert_equal named_expected, coder["columns"]
483487
assert_equal expected, coder["primary_keys"]
484488
assert_equal expected, coder["data_sources"]
485-
assert_equal expected, coder["indexes"]
489+
assert_equal named_expected, coder["indexes"]
486490
assert coder.key?("version")
487491
end
488492

0 commit comments

Comments
 (0)