feat(testing): implement template database cloning for MySQL #4131
+684
−20
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
This PR implements template database cloning for
sqlx::testto significantly speed up test runs when using migrations. Instead of running migrations for every test, a template database is created once and cloned for each test.Before (slow)
After (fast)
Implementation Details
Core Infrastructure (
sqlx-core/src/testing/mod.rs)migrations_hash()- computes SHA256 hash of all migration checksums for template namingtemplate_db_name()- generates template database name from hashTestContextwithfrom_template: boolfieldsetup_test_db()to skip migrations when cloned from templateMySQL Implementation (
sqlx-mysql/src/testing/mod.rs)_sqlx_test_templatestracking table for template metadataGET_LOCK()for synchronization during template creationmysqldump/mysqlcommands (fast) with in-process SQL fallbackConfiguration
SQLX_TEST_NO_TEMPLATE=1to disable template cloningTest Plan
migrations_hash()andtemplate_db_name()functionsFuture Work
CREATE DATABASE ... TEMPLATE(follow-up PR)🤖 Generated with Claude Code