Skip to content

v0.3.3

Choose a tag to compare

@grrowl grrowl released this 13 Jun 06:29
· 96 commits to main since this release

Patch release: filtered-subscription predicate parity (ADR-0013).

Fixed

  • A filtered subscription's membership no longer depends on which path decided it. The SQL snapshot and the JS delta/catch-up evaluators disagreed on two operators, so two clients could see different rows for the same where depending on connection timing:
    • ne crashed the delta path and hung the client. The SQL floor accepted ne but @tanstack/db's evaluator has no ne (not-equal is not(eq(...))); its compile error escaped handleSub uncaught, so no reset was sent. ne is now off the floor and rejected with reset, and a defensive guard turns any predicate-compile failure into a reset rather than a hang. Use not(eq(...)) for not-equal (unchanged for real clients).
    • like was case-insensitive in the snapshot but case-sensitive in deltas. The DO now sets PRAGMA case_sensitive_like = ON, making SQLite LIKE match @tanstack/db's case-sensitive like on every path. The like pattern must be a string literal.

Changed

  • Operator floor for server-side filtering dropped ne — now eq, gt, gte, lt, lte, like, in, and, or, not, exactly the set the SQL and JS evaluators agree on row-for-row. like is now case-sensitive.

Full Changelog: v0.3.2...v0.3.3