Releases: dbzero-software/dbzero
0.3.7
v0.3.6
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
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
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")
- Now accepts both memo objects and query objects:
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
What's Changed
- Bugfix/1332 by @wskozlowski in #772
- Bugfix/1332 by @wskozlowski in #773
Full Changelog: v0.3.2...v0.3.3
v0.3.2
What's Changed
- windows compile fixes by @wskozlowski in #769
- Feature/1304 by @wskozlowski in #771
- fix(build): fixed problem with build on Windows by @adrian-zawadzki in #770
Full Changelog: v0.3.1...v0.3.2
0.3.1
What's Changed
- Feature/1264 by @wskozlowski in #759
- feature(allocator): added findAllocation by @adrian-zawadzki in #760
- Feature/1270 by @wskozlowski in #761
- Feature/1276 by @wskozlowski in #762
- Feature/1277 by @wskozlowski in #763
- Feature/1279 by @wskozlowski in #764
- protecting immutable and embedded instances by @wskozlowski in #765
- Feature/1294 by @wskozlowski in #766
- Feature/issue 1291 by @KikiMcArron in #767
New Contributors
- @KikiMcArron made their first contribution in #767
Full Changelog: v0.3.0...v0.3.1
0.3.0
What's Changed
- Composite tags by @wskozlowski in #747
- Feature/1215 by @wskozlowski in #748
- Feature/1217 by @wskozlowski in #749
- init data masking by @wskozlowski in #750
- protecting masked fields + reset_protect_fields by @wskozlowski in #751
- nested atomic operations by @wskozlowski in #753
- feature(protect_fields): Added inheritance handling by @adrian-zawadzki in #752
- feature(protect_fields): added protect for CREATE operations by @adrian-zawadzki in #754
- Feature/1225 1223 by @adrian-zawadzki in #755
- feature(field_protect): added inheritance for getters and setters by @adrian-zawadzki in #756
- Feature/1233 1234 by @adrian-zawadzki in #757
- Feature/1257 by @wskozlowski in #758
Full Changelog: v0.2.4...v0.3.0
0.2.4
What's Changed
- fix(TagIndex): fixed problem with taging preinit objects by @adrian-zawadzki in #746
Full Changelog: v0.2.3...v0.2.4