← All Releases
v0.2.21
STRUCTURE OVER STRINGS
The extraction engine is rebuilt around syntax trees. Identifiers carry the model's own quoting end-to-end, every extraction renders once in its target dialect, and pushdown is now formally an optimization: anything a source engine can't express is simply computed in DuckDB instead — never an error, never approximated SQL shipped to an engine. Backed by a new transpilation-limits battery pinning the guarantees across ten dialects.
CHANGED
- ▸AST-native extraction: queries are built as syntax trees end-to-end — the model's identifier quoting is recorded during column pruning and rendered natively per engine (double quotes, backticks, brackets). The string-assembly path, and the entire bug class behind 0.2.20, no longer exists.
- ▸Pushdown degrades gracefully: each predicate is checked against the source dialect strictly; inexpressible conjuncts stay in DuckDB compute where they always applied anyway. Incremental watermark deltas are the deliberate opposite — inexpressible means a hard, clear error, because skipping one would extract wrong rows.
- ▸No more 'send as-is': DVT-generated SQL that can't be expressed in a dialect is a loud error, and the single-connection direct path falls back to the federation pipeline instead of shipping approximations.
- ▸One dialect module: engine quoting, fold rules and the dialect map live in a single home shared by the federation engine and the api-portal.
FIXED
- ▸Double-quoted identifiers keep their meaning under every default target: dbt compiles relation names in the default adapter's quoting (backticks on Databricks/MySQL), which previously forced a dialect fallback that read "column 1" as a string literal — silently corrupting filters. The federation parser now accepts dbt's compiled quoting while preserving DuckDB semantics.
ADDED
- ▸Transpilation-limits test battery: 35 tests across ten dialects proving every extraction parses in its own engine's dialect, windows and subqueries never push down, and advanced bodies (CTEs, window dedup, HAVING, UNION, string ops) always render for compute.
Get it: pip install dvt-core==0.2.21 · wheels on PyPI for macOS (arm64 + x86_64) and Linux, Python 3.10–3.12.