Skip to content

v0.16.1

Choose a tag to compare

@rustyconover rustyconover released this 20 Jul 17:56
· 162 commits to main since this release

Patch release.

Fixed

filter-pushdown: drop a fully-degraded AND instead of emitting WHERE () (#e3c50a6)

An AND whose children all failed to parse produced AndFilter(children=()), which rendered as (). Callers appending WHERE {clause} when the clause is truthy then built a syntactically invalid statement:

ParserException: syntax error at or near ")"
... "trade_canceled", "_partition_date" FROM src WHERE () LIMIT 50000

_parse_filter returns None for a join-key filter whose keys column cannot be resolved (graceful degradation — DuckDB filters client-side). Dropping such a child from an AND is safe on its own, but when every child dropped the conjunction was left empty. Triggering it required a query joining against a pushdown-enabled table where none of the dynamic join-key columns resolved, so it surfaced intermittently rather than reproducibly.

The OR branch already guarded this case; the AND branch now does too, returning None so the filter is reported unusable.

_filter_to_sql is additionally hardened against any other construction path: an empty AND renders as TRUE, an empty OR as FALSE — the correct identities, notably FALSE for OR so an empty disjunction cannot silently widen the result set.