Skip to content

Releases: dbzero-software/dbzero

0.3.7

18 Jun 06:56

Choose a tag to compare

What's Changed

Full Changelog: v0.3.6...v0.3.7

v0.3.6

16 Jun 06:10
159f381

Choose a tag to compare

dbzero v0.3.6

v0.3.6 is a stability release focused on shutdown safety and interned immutable object handling.

Fixes

  • Fixed a Python interpreter shutdown crash that could occur when durable Python wrapper objects were deallocated during or after Python finalization.
  • Added deallocation guards across Python binding wrapper types to avoid entering dbzero/Python cleanup paths once the interpreter is finalizing.
  • Fixed finalization of interned immutable objects so nested interned records correctly close their initializer state.
  • Fixed nested interned immutable references stored through singleton/list workflows, including cases that use factory/classmethod construction.
  • Improved regression coverage for nested durable objects, interned immutable hierarchies, and unhandled-exception shutdown behavior.

Package

  • Bumped Python package version from 0.3.5 to 0.3.6.

v0.3.5

03 Jun 06:47
727f647

Choose a tag to compare

Release Notes

v0.3.5

Highlights

  • Added passive tags via db0.tags(obj, passive=True).add(...).
  • Passive tags reduce tagging overhead by avoiding object lifetime refs.
  • Passive tags support:
    • simple tags
    • foreign/long tags
    • composite tags
    • batch tagging/removal from db0.find(...) results
  • Added TagAddress as the short-tag index key type, preserving backward compatibility with serialized uint64_t keys.

Passive Tag Semantics

  • Passive tags do not keep target objects durable.

  • Passive-only queries are rejected; passive tags must be queried with at least one regular positive predicate, for example:

    db0.find(MyType, "passive-tag")

  • Re-applying a regular tag over an existing passive tag does not convert it to regular.

  • Removing passive tags uses the normal remove API:

    db0.tags(obj).remove("passive-tag")

Fixes

  • Fixed enum tag collisions with passive tag bit encoding.
  • Fixed long/foreign passive tags so they work correctly with add, find, remove, and stale-object filtering.
  • Fixed composite passive tags across add/remove and query-target batch operations.
  • Fixed generator/one-shot iterable tag assignment being consumed by composite-tag pre-scan.
  • Fixed atomic iterator/threading and full-text iterator detach issues from post-v0.3.4 bugfixes.
  • Fixed a MorphingBIndex iterator crash path.

Benchmarks

  • Added benchmarks/tagging.py for comparing regular vs passive tagging performance, including focused pre-created-tag scenarios.

Validation

  • Full Python suite: 1569 passed, 15 skipped
  • C++ suite: 850 passed

Commits Since v0.3.4

  • TagAddress implemented + integration
  • passive tags
  • composite passive tags
  • long passive tags + test + fix enum tag collision
  • post-v0.3.4 atomic/threading/iterator bugfixes
  • version update to 0.3.5

v0.3.4

02 Jun 08:52
b6f99c9

Choose a tag to compare

Highlights

  • Added db0.read_only() context support to reject dbzero mutations while active.

  • Added asyncio-aware atomic operations via db0.async_atomic().

  • Added batched tag operations for query targets:

    db0.tags(db0.find("token-a", "token-b")).add("token-c")
    db0.tags(db0.find("token-a")).remove("token-a")

  • Improved atomic rollback, iterator detach/reattach, and async/thread interaction safety.

  • Fixed dbzero set behavior to better match Python set semantics and avoid a set-difference crash.

New APIs

  • db0.read_only()
    • Context manager that rejects mutations inside the active scope.
  • db0.in_read_only()
    • Returns whether execution is currently inside a read-only context.
  • db0.async_atomic()
    • Async context manager for atomic operations in asyncio tasks.
  • db0.tags(...)
    • Now accepts both memo objects and query objects:
      • db0.tags(obj).add("tag")
      • db0.tags(db0.find("source")).remove("source")

Improvements

  • Read-only context propagation works across threads and asyncio tasks using context-aware state tracking.
  • Atomic contexts become no-op inside read-only contexts, avoiding unintended mutation setup.
  • Query iterators can detach and reattach after mutations/rollbacks, improving safety for leaked or long-lived iterators.
  • Added ObjectIteratorPool integration to track and detach active iterators when storage changes.
  • Improved mutation rejection for tags, touches, indexes, collections, memo creation, and field writes under read-only mode.
  • Added benchmark coverage for read-only read overhead.

Bug Fixes

  • Fixed several atomic rollback and synchronization issues, including async rollback/threading cases.
  • Fixed allocator rollback behavior.
  • Fixed schema builder behavior in affected atomic paths.
  • Fixed range-tree iterator behavior affecting set difference.
  • Fixed PySet issues:
    • subset/superset comparisons with empty sets
    • iterable acceptance for issubset
    • no-arg copy semantics for set operations
    • binary operators rejecting non-set iterables like Python
  • Fixed crash/regression for Python set difference against memo-backed set fields.
  • Fixed immutable memo detach handling.
  • Improved protection of remote object access while in read-only mode.

Tests

  • Added broad Python coverage for read-only contexts, async atomic behavior, atomic rollback, batched tagging, and set semantics.
  • Added C++ unit coverage for iterator detach, iterator pooling, object rollback/deletion paths, prefix locking, and range-tree behavior.
  • Full Python suite result from this workspace:
    • 1542 passed, 15 skipped using ./scripts/run_tests.sh -j 6 on the debug build.

v0.3.3

29 May 19:08
1a22302

Choose a tag to compare

What's Changed

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

v0.3.2

29 May 10:05
749555d

Choose a tag to compare

What's Changed

Full Changelog: v0.3.1...v0.3.2

0.3.1

27 May 07:27
88d1fcf

Choose a tag to compare

What's Changed

New Contributors

Full Changelog: v0.3.0...v0.3.1

0.3.0

20 May 19:52

Choose a tag to compare

What's Changed

Full Changelog: v0.2.4...v0.3.0

0.2.4

07 May 19:09

Choose a tag to compare

What's Changed

Full Changelog: v0.2.3...v0.2.4

0.2.3

04 May 09:18
a9b11fe

Choose a tag to compare

What's Changed

Full Changelog: v0.2.2...v0.2.3