Skip to content

v0.0.25

Fixes

  • lythonic.state: a None filter value now means NULL. Previously it bound as = NULL / != NULL, which never matches, so select, select_count, exists, update and delete silently returned nothing for nullable columns. All five share DbModel._prepare_where, which now emits:
  • field IS NULL for field=None
  • field IS NOT NULL for ne__field=None
  • (field IN (...) OR field IS NULL) for a list containing None
  • ValueError for gt, lt, gte or lte with None, since a comparison with NULL is never true

This is a behaviour change: queries that returned nothing now return the NULL or non-NULL rows, and ordering filters with None now raise. - lythonic.state: the filter operator is a prefix. The suffix form (instrument__ne) now raises a ValueError pointing to ne__instrument instead of Unknown filter operator: instrument, and error messages print filters in prefix form.

Documentation

  • "Portable data type" names the family FrameData, ExposureMatrix, SymmetricMatrix and KeyedVector, which is now listed as one feature in the README. The how-to pages choose-a-keyed-type and compose-keyed-types are renamed to choose-a-portable-type and compose-portable-types.
  • The domain glossary CONTEXT.md is renamed to GLOSSARY.md, and the agent-skill configuration under docs/agents/ is refreshed.

Decisions and tickets

Closed tickets:

  • 11 state: a None filter silently matches nothing; need IS NULL support in select