Schema Migrations
Automatic schema evolution with version tracking and embedded migrations.
Overview
SchemaLang automatically generates migration files when struct versions change, embedding migration SQL directly in generated code.
Struct Versioning
Add versions using semantic versioning:
struct User: version(1.2.0) {
int64: id: primary_key: required: auto_increment:
description("User ID");
string: username: required:
description("Username");
}
Version format: major.minor.patch
Automatic Migration Generation
Enable with -migrationsPath:
./SchemaLangTranspiler \
-schema=./schemas \
-outputDirectory=./output \
-migrationsPath=./migrations \
-cpp -sqlite
SchemaLang automatically creates migration files when versions change.
Embedded Migrations
Migrations are embedded in generated code as functions:
std::string SQLiteDB::migrate_User_1_0_0_to_1_1_0() {
return R"SQL(
ALTER TABLE User ADD COLUMN email VARCHAR(255);
UPDATE User SET email = '';
)SQL";
}
Auto-applied on database connect—no runtime migration files needed!
Migration Workflow
- Update schema and increment version
- Run transpiler with
-migrationsPath - Migration files generated automatically
- Recompile application
- Migrations apply automatically on next database connection