Jean-Philippe Hallot, and I, are pleased to offer the world risible-db, a new, free, really simple, 100% java open-source utility library for managing database schema migrations in a manner not wholly unlike rails migrations.
The class of interest is (somewhat unimaginatively) called
Migrations, with a convenience subclass called
WebInfMigrations that does a lot of the convention-over-configuration thing for you. Use as follows:
start(), risible-db will look in a directory called
migrationsdirectly under your application's
*.sqlfiles, order them lexicographically, and execute any that have not already been executed against the current datasource. Here's an example: In this situation, risible-db migrations will execute
004-rename-widgets-to-woggles.sql, because they are not already installed in the migrations table. Unlike Rails, risible-db considers the whole name of the migration, not just the number. So you can have multiple migrations with the same number; in fact risible doesn't care about the numbers at all, but it's a convenient way for you to keep your migrations in order. If you prefer
A-add-widgets.sql, B-add-users.sql, etc, that's ok too. We found that the strict numbering approach called for a lot of number-management overhead when working in a distributed team - when the half of the team on this continent wanted to add a migration at the same time as the other half on another continent, we needed a way to ensure we wouldn't both use the same number, while simultaneously guaranteeing that the order of migrations respected schema dependencies. Each
.sqlfile is a plain text file containing one or more sql commands, separated by semicolons. No comments, please. Notes:
- Support for Oracle is coming in the next few days - right now it works only for MySQL
- Respect and acknowledgements to Pascal Pratmarty who was the first to say, "well we could do that in java, too!"
- future enhancements include
downmigrations like rails, conditional migrations (eg data migrations only to run in a test environment), other ways to express migrations (java code, for example), and SQL comments. Please comment if there's something on this list (or not) that you can't live without.
- download here
- Don't search for documentation. This is it.
- It's LGPL licensed