cetane 0.1.1

Django-inspired database migrations for Diesel
Documentation

Cetane

Django-inspired database migrations for Rust with automatic reversibility.

Features

  • Backend-agnostic: SQLite, PostgreSQL, and MySQL support
  • Type-safe SQL generation: Uses sea-query for compile-time safety
  • Automatic reversibility: Most operations generate their own reverse migrations
  • Dependency ordering: Migrations declare dependencies, cetane resolves the order
  • Transaction support: Atomic migrations where backends support it (PostgreSQL, SQLite)

Usage

use cetane::prelude::*;

let mut registry = MigrationRegistry::new();

registry.register(
    Migration::new("0001_create_users")
        .operation(
            CreateTable::new("users")
                .add_field(Field::new("id", FieldType::Serial).primary_key())
                .add_field(Field::new("email", FieldType::Text).not_null().unique())
        )
);

registry.register(
    Migration::new("0002_create_posts")
        .depends_on(&["0001_create_users"])
        .operation(
            CreateTable::new("posts")
                .add_field(Field::new("id", FieldType::Serial).primary_key())
                .add_field(
                    Field::new("user_id", FieldType::Integer)
                        .not_null()
                        .references("users", "id")
                        .on_delete(ReferentialAction::Cascade)
                )
                .add_field(Field::new("title", FieldType::Text).not_null())
        )
);

// Run migrations
let state = InMemoryState::new();
let mut migrator = Migrator::new(&registry, &Sqlite, state);

migrator.migrate_forward(|sql| {
    // Execute SQL against your database
    db.execute(sql)?;
    Ok(())
})?;

Operations

Operation Description Auto-reversible
CreateTable Create a new table Yes
DropTable Drop a table With field definitions
RenameTable Rename a table Yes
AddField Add a column Yes
RemoveField Remove a column With field definition
RenameField Rename a column Yes
AlterField Modify column type/constraints With reverse changes
AddIndex Create an index Yes
RemoveIndex Drop an index With index definition
AddConstraint Add a constraint Yes
RemoveConstraint Remove a constraint With constraint definition
RunSql Execute raw SQL With reverse SQL

Feature Flags

  • sqlite - SQLite support (includes rusqlite)
  • postgres - PostgreSQL support (includes postgres)
  • mysql - MySQL support (includes mysql)

License

BSD 2-Clause License. See LICENSE for details.