29 lines
794 B
Rust
29 lines
794 B
Rust
use rusqlite::{Connection, Transaction};
|
|
|
|
pub fn migrate(conn: &mut Connection) -> rusqlite::Result<()> {
|
|
let mut tx = conn.transaction()?;
|
|
|
|
let user_version: usize =
|
|
tx.query_row("SELECT * FROM pragma_user_version", [], |r| r.get(0))?;
|
|
|
|
let total = MIGRATIONS.len();
|
|
for (i, migration) in MIGRATIONS.iter().enumerate().skip(user_version) {
|
|
println!("Migrating vault from {} to {} (out of {})", i, i + 1, total);
|
|
migration(&mut tx)?;
|
|
}
|
|
|
|
tx.pragma_update(None, "user_version", total)?;
|
|
tx.commit()
|
|
}
|
|
|
|
const MIGRATIONS: [fn(&mut Transaction) -> rusqlite::Result<()>; 1] = [m1];
|
|
|
|
fn m1(tx: &mut Transaction) -> rusqlite::Result<()> {
|
|
tx.execute_batch(
|
|
"
|
|
CREATE TABLE test (
|
|
foo TEXT
|
|
);
|
|
",
|
|
)
|
|
}
|