"""Direct PostgreSQL implementation of the DWH port.""" from tht.config import DatabaseConfig from sqlalchemy.exc import SQLAlchemyError from tht.db import execute, sampling from tht.db.connection import make_engine, ping from tht.db.introspect import introspect from tht.execute import ExecResult, PlanSummary from tht.mschema.models import PhysicalSchema from tht.ports.dwh import DistinctValues, DwhCapabilities, DwhHealth class PostgresDwhAdapter: capabilities = DwhCapabilities() def __init__(self, config: DatabaseConfig): self._config = config self._engine = make_engine(config) def health(self) -> DwhHealth: try: ping(self._engine) except SQLAlchemyError as exc: return DwhHealth(ok=False, detail=str(exc)) return DwhHealth(ok=True) def introspect(self) -> PhysicalSchema: return introspect(self._engine, self._config.database, self._config.db_schema) def run_query(self, sql: str, *, limit: int) -> ExecResult: return execute.run_query(self._engine, sql, limit=limit) def explain(self, sql: str) -> PlanSummary: return execute.explain(self._engine, sql) def sample_column(self, table: str, column: str, *, limit: int) -> list[object]: return sampling.sample_column( self._engine, self._config.db_schema, table, column, limit=limit ) def distinct_values(self, table: str, column: str) -> DistinctValues: return sampling.distinct_values( self._engine, self._config.db_schema, table, column )