27 lines
910 B
Python
27 lines
910 B
Python
from __future__ import annotations
|
|
from pathlib import Path
|
|
|
|
from chat.db.connection import open_db
|
|
|
|
MIGRATIONS_DIR = Path(__file__).parent / "migrations"
|
|
|
|
|
|
def apply_migrations(db_path: Path) -> None:
|
|
with open_db(db_path) as conn:
|
|
conn.execute(
|
|
"CREATE TABLE IF NOT EXISTS meta (key TEXT PRIMARY KEY, value TEXT)"
|
|
)
|
|
cur = conn.execute("SELECT value FROM meta WHERE key = 'schema_version'")
|
|
row = cur.fetchone()
|
|
current = int(row[0]) if row else 0
|
|
for path in sorted(MIGRATIONS_DIR.glob("*.sql")):
|
|
version = int(path.stem.split("_", 1)[0])
|
|
if version <= current:
|
|
continue
|
|
sql = path.read_text()
|
|
conn.executescript(sql)
|
|
conn.execute(
|
|
"INSERT OR REPLACE INTO meta (key, value) VALUES ('schema_version', ?)",
|
|
(str(version),),
|
|
)
|