Nitrite allows you to define Migration objects to evolve your database schema. Migrations are applied during database initialization using .addMigrations(...). You must specify a .schemaVersion(int) in the builder for migrations to be active.
Migration migration1 = new Migration(Constants.INITIAL_SCHEMA_VERSION, 2) {
@Override
public void migrate(InstructionSet instructions) {
instructions.forDatabase()
.addUser("test-user", "test-password");
instructions.forRepository(OldClass.class, "demo1")
.renameRepository("migrated", null)
.changeDataType("empId", (TypeConverter<String, Long>) Long::parseLong)
.changeIdField(Fields.withNames("uuid"), Fields.withNames("empId"))
.deleteField("uuid")
.renameField("lastName", "familyName")
.addField("fullName", document -> document.get("firstName", String.class) + " "
+ document.get("familyName", String.class))
.dropIndex("firstName")
.dropIndex("literature.text")
.changeDataType("literature.ratings", (TypeConverter<Float, Integer>) Math::round);
}
};
// ... (migration2 definition)
// Applying migrations during initialization
db = Nitrite.builder()
.loadModule(storeModule)
.schemaVersion(2)
.addMigrations(migration1, migration2)
.openOrCreate();