sqflite_migrate

Proper, and traditional way to do migrations in sqflite
- Supports using plain
sqlsyntax to create migration files - A working CLI with all the necessary commands
- A programmatic approach for more fine grained control (not recommended for production)
Usage
dart pub global activate sqflitemigrate
This will give you access to global cli from pub.flutter-io.cn website
Create your migrations folder
Create migrations folder wherever you think its most suitable for your app, and fill it with migration files
-- UP --
CREATE TABLE IF NOT EXISTS my_table (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL
);
-- DOWN --
DROP TABLE my_table;
-- UP -- and -- DOWN -- are just plain sql comments required to separate the up and down queries
You can write as many queries as you want in the up and down sections, as long as the statements are separated by ; delimiter
-- UP --
CREATE TABLE IF NOT EXISTS my_table (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS my_table2 (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL
);
-- DOWN --
DROP TABLE my_table;
DROP TABLE my_table2;
Naming format
The migration files should be named in the following format
<version>_<description>.sql
Currently the version format is just a simple integer, that should be incremental, and sorted in ascending order that you want to run the migrations to run
In next releases we will add create command in the cli, with options to create it with a timestamp, or a version number
Running the migrations
sqflite_migrate cli has the following commands
migrate --database DB_PATH --path MIGRATIONS_FOLDER_PATH [OPTIONS]- Runs the migrationsrollback --database DB_PATH --path MIGRATIONS_FOLDER_PATH [OPTIONS]- Rolls back the migrationsstatus --database DB_PATH --path MIGRATIONS_FOLDER_PATH- Shows the current status of the migrationsclear --database DB_PATH- Clears all the records from migrations tabledelete-db --database DB_PATH- Deletes the database file, and all the migrations records
Programmatic usage
You can also use the MigrationRunner class to run the migrations programmatically, but it is not recommended to use it in production, as it is not properly tested for this approach
import 'package:sqflite_migrate/sqflite_migrate.dart';
void main() async {
final migrator = MigrationRunner.init(
database: 'path/to/db',
migrationsPath: 'path/to/migrations',
);
await migrator.migrate()..rollback();
}
Coming up
- Add
createcommand in the cli - Add
timestampandversionoptions in thecreatecommand - Add
--forceoption in themigratecommand to force run all the migrations - Add
--forceoption in therollbackcommand to force rollback all the migrations