Database migrations for MoonBit with SQLite and PostgreSQL support.
///|
async test "SQLite quick start" {
let db = @sqlite3.Connection::open_async(":memory:")
defer db.close()
let migrator : @migrate.Migrator[@sqlite3.Connection] = @migrate.Migrator({
"create_users": {
upgrade: db => {
let statement = db.prepare_async(
"CREATE TABLE users(id INTEGER PRIMARY KEY)",
)
defer statement.finalize()
statement.step_async() |> ignore
},
downgrade: db => {
let statement = db.prepare_async("DROP TABLE users")
defer statement.finalize()
statement.step_async() |> ignore
},
},
})
migrator.run(db)
assert_eq(
@migrate.Migrate::list_migrations(db, table="_moonbit_migrations"),
["create_users"],
)
migrator.revert(db)
assert_eq(
@migrate.Migrate::list_migrations(db, table="_moonbit_migrations"),
[],
)
}moon test --target native
sh scripts/test-postgres.shpub(open) trait Migrate {
async fn ensure_migration_table(Self, table~ : String) -> Unit
async fn list_migrations(Self, table~ : String) -> Array[String]
async fn record_migration(Self, String, Bool, table~ : String) -> Unit
}impl Migrate for Transactionasync fn record_migration(self : Transaction, version : String, applied : Bool, table~ : String) -> Unitimpl Migrate for Transactionasync fn record_migration(self : Transaction, version : String, applied : Bool, table~ : String) -> Unitimpl Migrate for Connectionasync fn record_migration(self : Connection, version : String, applied : Bool, table~ : String) -> Unitpub(all) struct Migration[T] {
upgrade : async (T) -> Unit
downgrade : async (T) -> Unit
}type Migrator[T]Install
Download zipDatabase migrations for MoonBit with SQLite and PostgreSQL support.