NAME

mimi - dbi migrations

SYNOPSIS

mimi check   --dsn=<dsn>
mimi migrate --dsn=<dsn> --schema=<directory> [--verbose] [--dry-run]
mimi setup   --dsn=<dsn> [--verbose] [--dry-run]
mimi fix     --dsn=<dsn> [--verbose] [--dry-run]
mimi set     --dsn=<dsn> <migration> [--verbose] [--dry-run]
mimi -h | --help

--dsn=<dsn>           DBI dsn string, 'dbi:SQLite:database.db' for example
--schema=<directory>  Directory with migrations
--dry-run             Do nothing, just show what's to be done
--verbose             Be verbose
-h --help             Show this screen.

DESCRIPTION

This is a migration script for small home projects. Despite of being small it's still robust. This means that all the precautions are made to not to corrupt your data.

Safety first

Every command has verbose and dry-run flags. Thus it is easy to check first what's going to happen.

Check

mimi check --dsn 'dbi:SQLite:database.db'

Check what's going on. Are migrations installed? What is the latest migration? Was there an error?

Setupping your database

mimi setup --dsn 'dbi:SQLite:database.db'

This creates mimi table in your database. This table is used as a journal for migrations.

Migrations

mimi migrate --dsn 'dbi:SQLite:database.db' --schema sql_files/

This will search sql_files for *.sql files, parse their names that usually look like 01add_column.sql, 02drop_table.sql and so on. Then it will try to find the last migration and run everything with a bigger number.

Failures and fixes

Failures do occur. Like you made a mistake in your migration (of course you should run them on a local machine first!). mimi will die but remember that last migration was with error and won't let you run next migrations dying with:

Error: Migrations are dirty. Last error was in migration 1:

    DBD::SQLite::db do failed: near "CREAT": syntax error

After fixing the problem run <fix> command

After fixing the stuff, you either can fix or set the current migration number manually:

mimi fix --dsn '...'
mimi set --dsn '...' 123

Additional checks

You will get descriptive errors when trying to do unexpected stuff, like running migrations on a fresh database or supplying a directory without migration files.