Crate rusqlite_migration[−][src]
Rusqlite Migration is a simple schema migration tool for rusqlite using user_version instead of an SQL table to maintain the current schema version.
It aims for:
- simplicity: define a set of SQL statements. Just add more SQL statement to change the schema. No external CLI, no macro.
- performance: no need to add a table to be parsed, the
user_version
field is at a fixed offset in the sqlite file format.
Example
Here, we define SQL statements to run with Migrations::new and run these (if necessary) with .to_latest().
use lazy_static::lazy_static; use rusqlite::{params, Connection}; use rusqlite_migration::{Migrations, M}; // 1️⃣ Define migrations lazy_static! { static ref MIGRATIONS: Migrations<'static> = Migrations::new(vec![ M::up(r#" CREATE TABLE friend( name TEXT NOT NULL, email TEXT UNIQUE ); "#), // In the future, add more migrations here: //M::up("ALTER TABLE friend ADD COLUMN birthday TEXT;"), ]); } fn main() { let mut conn = Connection::open_in_memory().unwrap(); // Apply some PRAGMA, often better to do it outside of migrations conn.pragma_update(None, "journal_mode", &"WAL").unwrap(); // 2️⃣ Update the database schema, atomically MIGRATIONS.to_latest(&mut conn).unwrap(); // Use the database 🥳 conn.execute( "INSERT INTO friend (name, email) \ VALUES (?1, ?2)", params!["John", "john@example.org"], ) .unwrap(); }
Built-in tests
To test that the migrations are working, you can add this in your test module:
#[test] fn migrations_test() { assert!(MIGRATIONS.validate().is_ok()); }
Migrations to previous versions, more detailed examples…
Please see the examples folder for more.
Structs
M | One migration |
Migrations | Set of migrations |
Enums
Error | Enum listing possible errors. |
MigrationDefinitionError | Errors related to schema versions |
SchemaVersion | Schema version, in the context of Migrations |
SchemaVersionError | Errors related to schema versions |
Type Definitions
Result | A typedef of the result returned by many methods. |