Avatar for the kalynnka user
kalynnka
arcanus
BlogDocsChangelog

Performance History

Latest Results

chore(main): release 0.0.28 (#58) :robot: I have created a release *beep* *boop* --- ## [0.0.28](https://github.com/kalynnka/arcanus/compare/v0.0.27...v0.0.28) (2026-09-15) ### Bug Fixes * prevent lazy loads when peeking unloaded association proxies ([#57](https://github.com/kalynnka/arcanus/issues/57)) ([cee07e7](https://github.com/kalynnka/arcanus/commit/cee07e79816612982e5b3f514f9e864b7d2f3ed9)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
main
3 days ago
chore(main): release 0.0.28
release-please--branches--main
3 days ago
chore(main): release 0.0.27
release-please--branches--main
18 days ago
fix: make cursor pagination lossless over nullable, tied, and boolean orderings (#55) ## Problem Cursor pagination breaks whenever the user-supplied ordering does not form a total order: - A **nullable** trailing order key cannot mint a bookmark once a page ends on a null row β€” `bookmark_from_item` raised `Cursor bookmark requires a non-null unique tiebreak order key` (surfacing as a 500 downstream). - A **non-unique** order key silently skips rows tied at the page boundary (`name < 'dup'` excludes the remaining `'dup'` rows). - A **boolean** order key (e.g. `pinned DESC`) could not even compile its bookmark: SQLAlchemy refuses ordering comparators against raw Python `bool` literals (`ArgumentError: Only '=', '!=', 'is_()', ...`). ## Fix **Identity tiebreak** (`fef1f58`): `with_identity_tiebreak(entity, order_bys)` appends the entity's `Identity`-marked keys (descending, matching the newest-first default) to any ordering that lacks one, applied at the three consumption points β€” `Session.list` ORDER BY compile, `Cursor.from_expressions` minting, and `bookmark_from_item`. Empty orderings, non-transmuter entities (plain ORM classes are narrowed out via `isinstance(entity, TransmuterMetaclass)`), and orderings already naming an identity pass through unchanged; identity-less transmuters still hit the existing tiebreak error as a backstop. **Boolean literals** (`3214bf0`): `SqlalchemyExpressionCompiler.apply` wraps `bool` operands of `lt`/`le`/`gt`/`ge` in `sqlalchemy.literal()`, compiling to legal SQL such as `pinned < false`. Equality operators are untouched. Existing serialized cursors keep decoding β€” bookmarks are stored expressions, no migration needed. ## Null placement The bookmark math assumes PostgreSQL null placement (ASC NULLS LAST / DESC NULLS FIRST). `SqlalchemyExpressionCompiler.order` has emitted that placement explicitly since `674d569`, so every backend β€” including SQLite, whose own default is nulls-first β€” sorts the way the bookmarks assume. An earlier revision of this description called this out as a gap; that was wrong, and an end-to-end null-boundary walk test now pins the guarantee. ## Verification - `uv run pytest tests`: **1018 passed, 1 skipped** (baseline on main: 1009 passed, 1 skipped). - `ruff check` and `ruff format --check`: clean. - Verified end-to-end against real PostgreSQL from a downstream consumer: limit-1 cursor walks over ascending-nullable, descending-tied, and boolean orderings each visit every row exactly once.
main
18 days ago

Latest Branches

CodSpeed Performance Gauge
0%
chore(main): release 0.0.28#58
3 days ago
e82a3b4
release-please--branches--main
CodSpeed Performance Gauge
0%
3 days ago
1c79101
fix/association-proxy-peek
CodSpeed Performance Gauge
0%
Β© 2026 CodSpeed Technology
Home Terms Privacy Docs