pub struct MigrateOptions {
pub version_storage: VersionStorage,
pub backup: bool,
pub backup_options: Option<DbOptions>,
pub forward_compatible: Option<fn(&Connection) -> bool>,
pub optimize_after: bool,
pub legacy_versions: Option<LegacyVersionTable>,
pub backup_name: Option<Arc<dyn Fn(i64, i64) -> String + Send + Sync>>,
pub verify_backup: Option<Arc<dyn Fn(&Path) -> Result<(), String> + Send + Sync>>,
pub backup_retention: Option<usize>,
}Fields§
§version_storage: VersionStorageVersion location shared by reads and transactional migration writes.
backup: boolTake a pre-migration backup when migrating an existing (version > 0) on-disk database.
backup_options: Option<DbOptions>Key source for the backup (SQLCipher); DbOptions::open_writer_migrated fills this in.
forward_compatible: Option<fn(&Connection) -> bool>For a database newer than this build: true means the subset this build reads/writes is
intact, so open it read-write without migrating.
optimize_after: boolRefresh planner statistics after migrating (PRAGMA optimize).
legacy_versions: Option<LegacyVersionTable>Adopt an existing app version table (see MigrateOptions::import_legacy_versions). Default none.
backup_name: Option<Arc<dyn Fn(i64, i64) -> String + Send + Sync>>Name of the pre-migration backup, given the current and target versions. Default
<db>.pre-v<target>.bak beside the database. Must be a plain file name that is not the
database’s own name (a name with a path separator or NUL is refused as
DbError::Backup).
verify_backup: Option<Arc<dyn Fn(&Path) -> Result<(), String> + Send + Sync>>Checks the pre-migration backup before the first step runs. Err(reason) stops the
migration with DbError::Backup. The live database is untouched and the backup is kept.
backup_retention: Option<usize>Keeps only the newest n pre-migration backups of this database, by modification time:
after each backup, older files named <db>.pre-*.bak in the same directory are removed.
The backup just taken is always kept. Removal is best effort and never fails the migration.
Default None: every backup is kept.
Implementations§
Source§impl MigrateOptions
impl MigrateOptions
Sourcepub fn import_legacy_versions(self, legacy: LegacyVersionTable) -> Self
pub fn import_legacy_versions(self, legacy: LegacyVersionTable) -> Self
Adopt the applied version of an app’s existing version table, once, so its migrations are
not re-run. Applies only when the configured storage reads version 0 and the legacy table’s
highest version is above zero. The configured storage is then seeded to that version (a
VersionTable gets one row per version up to it), and the migrations up to it are skipped.
The legacy table is only read, never written. Idempotent: once seeded, the configured
storage is above zero, so later opens do not consult the legacy table. Rolling back to
version 0 while the legacy table still exists re-adopts it on the next open, so drop or
rename that table after adoption. A legacy version above this build’s newest migration is
refused as DbError::NewerDatabase and nothing is written.