Skip to content

v0.4.0 — Correctness & hardening (issue #5)

Choose a tag to compare

@teaguesterling teaguesterling released this 19 Jul 19:28
· 30 commits to main since this release

Correctness & hardening (issue #5)

  • Query params are now percent-decoded. ParseQueryString previously returned raw substrings, so url_search_params('...?q=hello%20world')['q'] yielded hello%20world. It now decodes %XX and +→space, matching WHATWG URLSearchParams.
  • init: serialization no longer truncates on ;. A component value containing ; (e.g. search := 'a;b') was silently cut at the delimiter; the encoding is now escaped/length-safe.
  • Case-insensitivity self-test. The provider compensates for an inverted set_case_sensitive in DuckDB's RE2 wrapper; a self-test now asserts the compensation so a future upstream fix can't silently invert ignore_case.
  • Bounded pattern cache. The per-local-state pattern cache is now size-capped (LRU) so a query with many distinct large patterns can't grow memory unbounded.
  • urlpattern_extract NULL semantics. No-match / group-absent / empty-value are now distinguishable instead of all returning ''.

(Regression tests confirming the percent-decode and init: ';' fixes have since landed on main and will roll into the next release.)

DuckDB v1.5.4

Built against DuckDB v1.5.4; ReDoS-immune by construction (patterns compile to RE2, linear-time). Stable builds green on all platforms.

Known follow-up

The duckdb-next-build leg (DuckDB main/v1.6) does not yet compile — BaseExpression::alias became a protected Identifier and needs GetAlias(). Tracked separately; does not affect this v1.5.4 release.