Add support for query parameters, JOINs, SELECT * and three-part table names

This commit is contained in:
Jan Doubravský
2026-06-04 18:25:47 +02:00
parent b044ca43f8
commit 530c2618cf
14 changed files with 511 additions and 106 deletions
+5 -4
View File
@@ -1,4 +1,5 @@
import sqlite3
from typing import cast
from loguru import logger
from sqlalchemy.engine import Engine
@@ -6,7 +7,7 @@ from sqlalchemy.engine import Engine
from .cache import CacheManager
from .config import BACKUP_INTERVAL_SECONDS, CACHE_DB_PATH
from .executor import QueryExecutor
from .parser import parse
from .parser import Params, parse
from .registry import ColumnRegistry
from .stats import Stats, StatsCollector
@@ -25,10 +26,10 @@ class CachingEngine:
def stats(self) -> Stats:
return self._stats.snapshot(self._cache.connection)
def execute(self, sql: str) -> list[dict]:
parsed = parse(sql)
def execute(self, sql: str, params: Params = None) -> list[dict]:
parsed = parse(sql, params)
with self._source_engine.connect() as sa_conn:
raw_conn: sqlite3.Connection = sa_conn.connection.dbapi_connection
raw_conn = cast(sqlite3.Connection, sa_conn.connection.dbapi_connection)
executor = QueryExecutor(self._cache, self._registry, raw_conn, self._stats)
return executor.execute(parsed)