From 87505e3be37ad7a208c8f77dc7d7631728d87fa4 Mon Sep 17 00:00:00 2001 From: Christian Heller Date: Thu, 25 Apr 2024 01:52:46 +0200 Subject: [PATCH] Check for database file's DB version (via user_version PRAGMA). --- plomtask/db.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/plomtask/db.py b/plomtask/db.py index 848e750..dd2ee24 100644 --- a/plomtask/db.py +++ b/plomtask/db.py @@ -6,6 +6,7 @@ from typing import Any, Dict from plomtask.exceptions import HandledException PATH_DB_SCHEMA = 'scripts/init.sql' +EXPECTED_DB_VERSION = 0 class DatabaseFile: # pylint: disable=too-few-public-methods @@ -23,11 +24,22 @@ class DatabaseFile: # pylint: disable=too-few-public-methods self._check() def _check(self) -> None: - """Check file exists, and is of proper schema.""" + """Check file exists, and is of proper DB version and schema.""" self.exists = isfile(self.path) if self.exists: + self._validate_user_version() self._validate_schema() + def _validate_user_version(self) -> None: + """Compare DB user_version with EXPECTED_DB_VERSION.""" + sql_for_db_version = 'PRAGMA user_version' + with sql_connect(self.path) as conn: + db_version = list(conn.execute(sql_for_db_version))[0][0] + if db_version != EXPECTED_DB_VERSION: + msg = f'Wrong DB version, expected '\ + f'{EXPECTED_DB_VERSION}, got {db_version}.' + raise HandledException(msg) + def _validate_schema(self) -> None: """Compare found schema with what's stored at PATH_DB_SCHEMA.""" sql_for_schema = 'SELECT sql FROM sqlite_master ORDER BY sql' -- 2.30.2