| """SqlCompiler — IR → (SQL string, parameters list). |
| |
| Identifiers (table, column names) come from the catalog (trusted). |
| Values come from IR.filters and are ALWAYS parameterized — never inlined. |
| Output is validated by sqlglot before reaching the executor. |
| """ |
|
|
| from dataclasses import dataclass |
|
|
| from ...catalog.models import Catalog |
| from ..ir.models import QueryIR |
| from .base import BaseCompiler |
|
|
|
|
| @dataclass |
| class CompiledSql: |
| sql: str |
| params: list[object] |
|
|
|
|
| class SqlCompiler(BaseCompiler): |
| """Deterministic IR → SQL. No LLM.""" |
|
|
| def __init__(self, catalog: Catalog) -> None: |
| self._catalog = catalog |
|
|
| def compile(self, ir: QueryIR) -> CompiledSql: |
| raise NotImplementedError |
|
|