Source code for sqlspec.migrations.tracker

"""Migration version tracking for SQLSpec.

This module provides functionality to track applied migrations in the database.
"""

import logging
from contextlib import suppress
from typing import TYPE_CHECKING, Any, cast

from rich.console import Console

from sqlspec.migrations.base import BaseMigrationTracker
from sqlspec.migrations.schema import SchemaTarget, ensure_schema_async, ensure_schema_sync
from sqlspec.observability import resolve_db_system
from sqlspec.utils.logging import get_logger, log_with_context

if TYPE_CHECKING:
    from sqlspec.driver import AsyncDriverAdapterBase, SyncDriverAdapterBase
    from sqlspec.migrations.base import AppliedMigrationRecord

__all__ = ("AsyncMigrationTracker", "SyncMigrationTracker")

logger = get_logger("sqlspec.migrations.tracker")
_console = Console()


class SyncMigrationTracker(BaseMigrationTracker["SyncDriverAdapterBase"]):
    """Synchronous migration version tracker."""

    def ensure_tracking_table(self, driver: "SyncDriverAdapterBase") -> None:
        """Create the migration tracking table if it doesn't exist.

        Also checks for and adds any missing columns to support schema migrations.

        Args:
            driver: The database driver to use.
        """
        driver.execute(self._tracking_table_ddl())
        self._safe_commit(driver)

        self._migrate_schema_if_needed(driver)
def get_current_version(self, driver: "SyncDriverAdapterBase") -> str | None: """Get the latest applied migration version. Args: driver: The database driver to use. Returns: The current version number or None if no migrations applied. """ result = driver.execute(self._current_version_query()) return _finalize_current_version(driver, result)