Skip to content

Releases: Bobris/BTDB

35.1.0

28 May 10:26

Choose a tag to compare

Added

  • Relations now expose a Query<T>() API returning IQueryable<T> with initial interpreted Where support over
    expression equality, boolean conjunction, and boolean disjunction.
  • The low-level interpreter now supports try/catch/finally metadata, exception throw/rethrow opcodes, stack struct
    allocation via resolved RawData stack allocators, stack byte allocation, resolved metadata getter/setter calls,
    resolved type converters, and finally-aware nested Stop handling.
  • The low-level interpreter builder now rejects non-empty programs that do not end with Stop and programs with
    unclosed try blocks, and automatically wraps stack allocation nested programs in try/finally Stop blocks.
  • Relations can now expose an AllocateId() method that allocates persisted ulong identifiers independently per
    relation, starting at 1.
  • Added low-level RoaringBitmaps helpers for 16-bit bitmap containers over Span<byte> and ReadOnlySpan<byte>,
    including bit updates, compression, boolean operations, negation, tests, and BenchmarkDotNet scenarios.
  • RoaringBitmaps can now enumerate encoded 16-bit containers as ulong values with a caller-provided offset through
    a concrete struct enumerable.
  • RoaringBitmaps now has an allocation-free dense bitmap iterator over ReadOnlySpan<byte> for callers that already
    have the raw 8192-byte bitmap.
  • RoaringBitmaps now exposes in-place dense bitmap mutation operations for negation, union, intersection, union with
    complement, and difference against encoded containers.
  • RoaringBitmaps now exposes optimized encoded-container truncation for dropping values above a 16-bit maximum.
  • ObjectDB relations now support lazy IRoaringBitmap fields backed by the existing external-content keyspace, with
    explicit flushing and automatic free-content cleanup on normal relation removes and updates.
  • IRoaringBitmap now supports command-buffer initialization through RoaringBitmap.BuildAsync(...), including
    sorted enumerable sources and fused boolean operations.

Changed

  • RoaringBitmap.BuildAsync(...) now writes generated page payloads directly into the command buffer with fixed
    UInt16 page lengths, aligned page data, optimized array-source Or, And, and Not paths, and direct reuse of
    stored IRoaringBitmap page payloads, reducing temporary allocations during bulk IRoaringBitmap initialization.
  • Raw object-data copying now calls Buffer.BulkMoveWithWriteBarrier through UnsafeAccessor instead of resolving it
    with reflection during RawData initialization.
  • RawData.GetOffsets now supports tuple layouts with three or more fields.
  • BonSerializer now supports Tuple and ValueTuple values with three or more items.

35.0.5

15 Apr 15:19

Choose a tag to compare

Fixed

  • BTDB.AzureStorage now reopens existing transaction-log cache files without holding a write handle open until an
    append is actually requested, which fixes Windows startup scenarios that needed to read a locally longer .trl
    file while AzureBlobFileCollection queued its initial synchronization.

35.0.4

15 Apr 14:51

Choose a tag to compare

Released 35.0.4

35.0.3

14 Apr 22:45

Choose a tag to compare

Added

  • UseBtdbIoc(...) and BTDB's internal IServiceProvider integration now expose IRootContainer as a singleton so
    the BTDB root container can be resolved safely from the ASP.NET root IServiceProvider while IContainer remains
    scope-bound.

Changed

  • BTDB IOC now caches IServiceProvider fallback factories and removes redundant service-provider availability checks,
    which reduces overhead when BTDB resolves services from Microsoft.Extensions.DependencyInjection.
  • BTDB IOC no longer tracks cross-container dependency cycles at runtime when resolving through
    Microsoft.Extensions.DependencyInjection, which reduces bridge resolve overhead but leaves such cycles to recurse
    until one of the containers fails naturally.
  • BTDB IOC now uses a root-provider fast path for exported registrations resolved from the ASP.NET root
    IServiceProvider, avoiding extra RootScopeIdentity and ContainerImpl lookups on the steady-state root path.
  • BTDB IOC now bypasses export enumeration bookkeeping for the common single-registration registrationIndex == 0
    path, which further reduces steady-state resolve overhead for BTDB services exposed through
    Microsoft.Extensions.DependencyInjection.
  • BTDB IOC now keeps three distinct integration modes: pure BTDB, BTDB resolving services from
    ContainerBuilder.ServiceCollection, and full bidirectional BTDB <-> ASP.NET DI bridging only through
    UseBtdbIoc(...). Building a plain ContainerBuilder no longer auto-exports BTDB registrations into an internal
    IServiceProvider.

35.0.2

07 Apr 15:13

Choose a tag to compare

Fixed

  • BTDB IOC singletons are now resolved correctly from the ASP.NET root IServiceProvider when scope validation is
    enabled, which fixes UseBtdbIoc(...) root-provider resolutions that previously failed because ContainerScope
    could not be resolved from the root scope.

35.0.1

07 Apr 14:48

Choose a tag to compare

Fixed

  • BTDB IOC singleton factories resolved through Microsoft.Extensions.DependencyInjection now always use the root
    container for singleton storage and follow-up resolutions, which fixes failures when a singleton first created from a
    disposed DI scope later resolves additional services.
  • ObjectDB relation upgrades now report field-handler incompatibilities for UseNoEmitForRelations loaders with the
    concrete destination handler when available, which fixes missing diagnostics for cases like
    ODBDictionaryFieldHandler to DictionaryFieldHandler.

33.6.13

07 Apr 14:44

Choose a tag to compare

Fixed

  • ObjectDB relation upgrades now report field-handler incompatibilities with more detail, including the concrete
    destination handler when available and nested handler differences for cases like dictionary key mismatches.

35.0.0

06 Apr 16:47

Choose a tag to compare

Added

  • Added the BTDB.AzureStorage package with AzureBlobFileCollection, an IFileCollection implementation that
    maintains a local memory-mapped cache synchronized with Azure Blob Storage, reconciles local and remote file lengths
    on startup, uploads regular files as block blobs, batches transaction-log block commits on a configurable timer, and
    drains uploads and deletes through a FIFO background queue.
  • AzureBlobFileCollectionOptions.DeleteLocalCacheDirectoryOnDispose makes removal of the local cache directory on
    dispose an explicit opt-in behavior.
  • AzureBlobStorageBackend now accepts an optional path prefix, allowing BTDB files to be scoped under a subdirectory
    within a shared blob container.
  • BTDB IOC registrations are now automatically available from Microsoft.Extensions.DependencyInjection, including
    keyed registrations, per-scope IContainer resolution, and cycle detection for dependency chains that cross between
    BTDB IOC and the ASP.NET service provider.

Changed

  • AzureBlobFileCollection is now intentionally optimized only for BTDB KeyValueDB file types (trl, pvl, kvi),
    uses specialized file implementations per type, and writes pvl/kvi data through a 128 KB buffered exclusive
    writer instead of the previous memory-mapped writer path.
  • AzureBlobFileCollectionOptions.Logger can now observe enqueue, execution, retry failures, and queue length for the
    Azure Blob FIFO worker, plus startup downloads from Azure Blob Storage.
  • Transaction-log synchronization now passes only the target length plus a random-access reader into the blob backend;
    AzureBlobStorageBackend computes the committed block plan itself with an internal 128 KB preferred block size,
    reuses existing committed blocks only when their IDs and lengths exactly match the expected layout, and otherwise
    rebuilds the blob so committed block counts stay bounded even under very small flush increments.

Fixed

  • ObjectDB relation helper methods now accept a nullable collection placeholder for FirstById/LastById primary-key
    lookups, which removes nullable warnings from generated relation code that intentionally passes null.

34.5.1

30 Mar 23:33

Choose a tag to compare

Added

  • IOC now supports Scoped() registrations and IContainer.CreateScope(). IContainer is now
    IAsyncDisposable-only, child scopes own scoped instances, the root container owns singletons and registered
    instances, and BTDB scopes now align with ContainerBuilder.ServiceCollection scoped services. CreateScope()
    is forbidden after disposal, while disposal only blocks tracking of newly created owned disposable instances.

34.5.0

30 Mar 22:26

Choose a tag to compare

Added

Constraint.NullableDateTime.Predicate and Constraint.NullableDateTime.UpTo for filtering nullable DateTime
relation keys.

  • IOC now supports Scoped() registrations and IContainer.CreateScope(). IContainer is now
    IAsyncDisposable-only, child scopes own scoped instances, the root container owns singletons and registered
    instances, and BTDB scopes now align with ContainerBuilder.ServiceCollection scoped services.