Expand description
Schema versioning and migration support for SqliteTaskStore.
This module provides a lightweight, forward-only migration runner that tracks
applied schema versions in a schema_versions table. Migrations are defined
as plain SQL strings and are executed inside transactions for atomicity.
§Concurrency
Each migration runs inside a BEGIN EXCLUSIVE transaction, which acquires
a database-level write lock before reading. This prevents concurrent
migration runners from both seeing the same version as unapplied and
attempting to apply it simultaneously.
§Built-in migrations
| Version | Description |
|---|---|
| 1 | Initial schema — tasks table with indexes on context_id and state |
| 2 | Add created_at column to tasks table |
| 3 | Add composite index on (context_id, state) for combined filter queries |
§Example
use a2a_protocol_server::store::migration::MigrationRunner;
use sqlx::sqlite::SqlitePoolOptions;
let pool = SqlitePoolOptions::new()
.connect("sqlite:tasks.db")
.await?;
let runner = MigrationRunner::new(pool);
let applied = runner.run_pending().await?;
println!("Applied migrations: {applied:?}");Structs§
- Migration
- A single schema migration.
- Migration
Runner - Runs schema migrations against a
SQLitedatabase.
Statics§
- BUILTIN_
MIGRATIONS - Built-in migrations for the
SqliteTaskStoreschema.