Skip to content

Commit

Permalink
Merge pull request #39759 from kamipo/marshal_load_legacy_ar_object
Browse files Browse the repository at this point in the history
Backward compatibility to work `Marshal.load(legacy_record.dump)` for MySQL
  • Loading branch information
kamipo committed Jul 1, 2020
2 parents 0f4258f + 6a9301d commit 4fe1452
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -844,6 +844,10 @@ def version_string(full_version_string)
full_version_string.match(/^(?:5\.5\.5-)?(\d+\.\d+\.\d+)/)[1]
end

# Alias MysqlString to work Mashal.load(File.read("legacy_record.dump")).
# TODO: Remove the constant alias once Rails 6.1 has released.
MysqlString = Type::String # :nodoc:

ActiveRecord::Type.register(:immutable_string, adapter: :mysql2) do |_, **args|
Type::ImmutableString.new(true: "1", false: "0", **args)
end
Expand Down
15 changes: 15 additions & 0 deletions activerecord/test/cases/base_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -1226,6 +1226,21 @@ def test_marshalling_with_associations
assert_equal 1, post.comments.length
end

if current_adapter?(:Mysql2Adapter)
def test_marshal_load_legacy_6_0_record_mysql
path = File.expand_path(
"support/marshal_compatibility_fixtures/legacy_6_0_record_mysql.dump",
TEST_ROOT
)
topic = Marshal.load(File.read(path))

assert_not_predicate topic, :new_record?
assert_equal 1, topic.id
assert_equal "The First Topic", topic.title
assert_equal "Have a nice day", topic.content
end
end

if Process.respond_to?(:fork) && !in_memory_db?
def test_marshal_between_processes
# Define a new model to ensure there are no caches
Expand Down
Binary file not shown.

0 comments on commit 4fe1452

Please sign in to comment.