1 stable release
1.0.0 | Jun 12, 2021 |
---|
#174 in #migration
Used in migra-cli
32KB
589 lines
Migra
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:
- Apache License, Version 2.0, (LICENSE-APACHE or https://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or https://opensource.org/licenses/MIT)
Dependencies
~7–24MB
~376K SLoC