Skip to main content

Module migration

Module migration 

Source
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

VersionDescription
1Initial schema — tasks table with indexes on context_id and state
2Add created_at column to tasks table
3Add 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.
MigrationRunner
Runs schema migrations against a SQLite database.

Statics§

BUILTIN_MIGRATIONS
Built-in migrations for the SqliteTaskStore schema.