Drizzle Migrations - DDL and migration infrastructure for drizzle-rs
This crate provides types and utilities for:
- Schema snapshots compatible with drizzle-kit format
- Migration diffing and SQL generation
- Runtime migration execution with embedded or filesystem migrations
Runtime Migrations
Using db.migrate() (recommended)
The simplest way to run migrations is using the migrate() method on your Drizzle instance:
use drizzle::sqlite::rusqlite::Drizzle;
use drizzle_migrations::{migrations, MigrationSet};
use drizzle_types::Dialect;
// Embed migrations at compile time
const MIGRATIONS: &[Migration] = migrations![
("0000_init", include_str!("../drizzle/0000_init/migration.sql")),
("0001_users", include_str!("../drizzle/0001_users/migration.sql")),
];
fn main() -> drizzle::Result<()> {
let conn = rusqlite::Connection::open("./dev.db")?;
let (mut db, _) = Drizzle::new(conn, ());
let set = MigrationSet::new(MIGRATIONS.iter().cloned(), Dialect::SQLite);
db.migrate(&set)?;
Ok(())
}
Loading from Filesystem
During development, load migrations from the migrations directory:
use drizzle_migrations::MigrationSet;
use drizzle_types::Dialect;
let set = MigrationSet::from_dir("./drizzle", Dialect::SQLite)?;
db.migrate(&set)?;
CLI Usage
For generating migrations, use the drizzle-cli crate:
# Install
# Initialize config
# Generate migrations
# Run migrations