"""SQLite migration runner for bot-bottle stores.""" from __future__ import annotations import sqlite3 class TableMigrations: """Runs a sequential list of DDL migrations tracked by schema_key in schema_versions.""" def __init__(self, schema_key: str, migrations: list[str]) -> None: self.schema_key = schema_key self.migrations = migrations def apply(self, conn: sqlite3.Connection) -> None: conn.execute( """ CREATE TABLE IF NOT EXISTS schema_versions ( module TEXT PRIMARY KEY, version INTEGER NOT NULL DEFAULT 0 ) """ ) row = conn.execute( "SELECT version FROM schema_versions WHERE module = ?", (self.schema_key,), ).fetchone() version = row[0] if row else 0 for i, sql in enumerate(self.migrations[version:], start=version + 1): conn.execute(sql) conn.execute( "INSERT OR REPLACE INTO schema_versions (module, version) VALUES (?, ?)", (self.schema_key, i), ) __all__ = ["TableMigrations"]