migra

Crates.iomigra
lib.rsmigra
version1.0.0
sourcesrc
created_at2021-06-12 22:43:35.83039
updated_at2021-06-12 22:43:35.83039
descriptionMigra is a simple library for managing SQL in your application
homepagehttps://github.com/pleshevskiy/migra
repositoryhttps://github.com/pleshevskiy/migra
max_upload_size
id409444
size31,661
(pleshevskiy)

documentation

README

Migra

CI unsafe forbidden Crates.io Crates.io

Migra is a simple library for managing SQL in your application.

For example, if you have a task list application, you can update the local user database from version to version.

This is main crate for migra-cli, which allows you to manege SQL for web servers in any program language without being bound to SQL frameworks.

Installation

Add migra = { version = "1.0" } as a dependency in Cargo.toml.

This crate has not required predefined database clients in features with similar name. If you want to add them, just install crate with additional features (postgres, mysql, sqlite).

Cargo.toml example:

[package]
name = "my-crate"
version = "0.1.0"
authors = ["Me <user@rust-lang.org>"]

[dependencies]
migra = { version = "1.0", features = ["postgres"] }

Basic usage

Note: This example requires to enable sqlite feature.

use migra::clients::{OpenDatabaseConnection, SqliteClient};
use migra::managers::{ManageTransaction, ManageMigrations};

fn main() -> migra::Result<()> {
    let mut client = SqliteClient::new("./tasks.db")?;

    client.create_migrations_table()?;

    let mut migrations = client.get_applied_migrations()?;

    client
        .begin_transaction()
        .and_then(|_| {
            migrations.should_run_upgrade_migration(
                &mut client,
                "20210615_initial_migration",
                r#"CREATE TABLE IF NOT EXISTS tasks (
                    title TEXT NOT NULL
                );"#,
            )?;

            Ok(())
        })
        .and_then(|res| client.commit_transaction().and(Ok(res)))
        .or_else(|err| client.rollback_transaction().and(Err(err)));

    Ok(())
}

Supported databases

Database Feature
Postgres postgres
MySQL mysql
Sqlite sqlite

License

Licensed under either of these:

Commit count: 137

cargo fmt