drizzle-migrations 0.1.5

Migration infrastructure for drizzle-rs
Documentation

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
cargo install drizzle-cli

# Initialize config
drizzle init --dialect sqlite

# Generate migrations
drizzle generate

# Run migrations
drizzle migrate