From: Christian Heller Date: Wed, 24 Apr 2024 23:52:46 +0000 (+0200) Subject: Check for database file's DB version (via user_version PRAGMA). X-Git-Url: https://plomlompom.com/repos/%7B%7Bprefix%7D%7D/static/%7B%7B%20web_path%20%7D%7D/blog?a=commitdiff_plain;h=87505e3be37ad7a208c8f77dc7d7631728d87fa4;p=plomtask Check for database file's DB version (via user_version PRAGMA). --- 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'