Skip to content

chore: upgrade to HawDB 0.30 and qualify row-page v2 - #11

Merged
hawkingrei merged 1 commit into
mainfrom
feat/hawdb-0.30
Nov 11, 2026
Merged

hawkingrei merged 1 commit into
mainfrom
feat/hawdb-0.30

Conversation

@hawkingrei

@hawkingrei hawkingrei commented Nov 11, 2026 •

Copy link
Copy Markdown
Contributor

Summary

HawDB 0.30 replaces fixed-slot relational row pages with exact-length v2 pages and explicitly refuses v1 checkpoints. The dialect's previous cross-version reopen claims no longer describe the engine's storage contract.

  • Upgrade to 0.30.0 with hawdb>=0.30.0,<0.31.0, including package metadata, dependency hints, source builds, published-wheel CI, and documentation.
  • Preserve PostgreSQL PGTypeCompiler/PGIdentifierPreparer reuse and the existing timestamp/Decimal reflection. Python DB-API and relational SQL interfaces are unchanged from 0.29; no speculative compiler or connection options are needed.
  • Generate real checkpoint-plus-WAL-tail fixtures with each of HawDB 0.25-0.29. Verify both read-only and writable admission refuse v1 as StorageError(kind="unsupported_storage_format") through SQLAlchemy's DBAPIError, with all .hawdb file digests unchanged.
  • Retain the existing logical data, index, Decimal, keyless duplicate, legacy TEXT, continued-write, and reopen assertions on v2 fixtures created by 0.30. Cover clean close and process exit.
  • Add a SQLAlchemy checkpoint/reopen case for narrow rows, wide text/binary rows above the 32 KiB writer target, NULLs, updates, and deletes.

Compatibility

This does not migrate or recreate any user database. Existing databases containing v1 row-page manifests must be exported using their matching old reader and imported into a separately recreated 0.30 database. Metadata open alone does not prove branch data admission. The README replaces the old direct-upgrade promise with this explicit boundary and preserves the driver's typed error.

The new JSON_VALUE(... NULL ON NONSCALAR) syntax is Cypher-only. The LlamaIndex graph store and Bun FFI adapter are separate integrations; graph optimizer and search changes do not require dialect flags.

Related changes

Validation

  • Validated head: f0996a4ecb4c487404b2653f1aed0be9416279b3.
  • Branch CI: all 10 jobs passed. All seven combinations report 78 passed, no skips.
  • PR CI: all 10 jobs passed. All seven combinations also report 78 passed, no skips.
  • The source build checked out 2d814740161f7e5cba0527ab3b1427d6eb8ac08b; the PyPI lane independently downloaded hawdb-0.30.0-cp311-abi3-manylinux_2_28_x86_64.whl. Tested SQLAlchemy versions are 2.0.57 and 2.1.8.
  • The suite includes 20 v1 refusal cases (five older versions x two close modes x read-only/writable), two v2 checkpoint-plus-tail cases, and one wide-row mutation/checkpoint case, while retaining existing Core/ORM/Decimal/timestamp/range/budget coverage.
  • Formatting, Ruff, whitespace, and actionlint checks passed.
  • Functional tests ran in CI rather than being duplicated locally.
  • The seven Linux combinations cover Python 3.11-3.13 x SQLAlchemy 2.0/2.1 on a source-built HawDB wheel, plus Python 3.11 / SQLAlchemy 2.1 on the official PyPI wheel. Each lane installs isolated 0.25/0.26/0.27/0.28/0.29 interpreters for the v1 boundary tests. Version 0.26 remains source-built because it was not published to PyPI.

This is the project's targeted compatibility suite, not the full SQLAlchemy external-dialect suite or all storage/platform configurations. No package publication is performed by this PR.

@hawkingrei
hawkingrei merged commit 0a81867 into main Nov 11, 2026
20 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant