--- title: "Changelog" description: "Practical release history for RoomSharp, QueryExtensions, and related packages." canonical: "https://roomsharp.dev/docs/v0.5.4/changelog" source: "src/content/v0.5.4/changelog.mdx" --- # Changelog This page tracks the practical release history for the RoomSharp package family. Entries are ordered newest first and call out the changes that affect generated code, runtime behavior, QueryExtensions, dependency injection, and CLI usage. RoomSharp uses synchronized package versions for the core package family where possible so users do not have to guess compatibility between `RoomSharp`, provider packages, `RoomSharp.DependencyInjection`, and related runtime packages. See the [Release Model](/docs/v0.5.4/release-model) for how ecosystem and stabilization releases are handled. ## v0.5.4 ### Core Runtime - Strengthened transaction command reuse for generated DAO paths. - Transactional seeders now run through the same transaction/session model used by the rest of RoomSharp. - Serialized async transactions now honor caller cancellation while waiting and opening the transaction. - Global filter disable scopes now behave predictably across nested and async flows. - `Pager` enumeration is repeatable and uses the paging source default page size. - MySQL and SQL Server FTS SQL generation now emits provider-appropriate, quoted column predicates. ### QueryExtensions - `DbSession.InTransaction*` now has consistent ownership semantics across sync and async overloads. - Compound `Where(Expression)` predicates preserve boolean grouping and SQL precedence. - Fluent string-based table/column paths now use validation and dialect quoting where RoomSharp can safely identify identifiers. - Filtered includes can pass relation-load filters into relation SQL while retaining assignment-time filtering behavior. - Async raw multi-mapping now reports unsupported provider command/reader shapes clearly. - `LockForUpdate()` and filtered includes are documented as first-class QueryExtensions features. ### Documentation - Added a dedicated [v0.5.4 technical details](/docs/v0.5.4/release-notes-0-5-4-details) page for implementation notes that matter to maintainers. ## v0.5.3 ### Source Generator - Added compile-time validation for `[Transaction]` on streaming DAO methods so transaction lifetimes stay explicit. - Generated `[Transaction]` wrappers now pass the DAO method `CancellationToken` into `RunInTransactionAsync` and `RunInTransaction`. - Query parameter rewriting now uses a SQL-aware helper instead of plain string replacement, preserving PostgreSQL casts such as `created_at::date`, SQL Server variables such as `@@ROWCOUNT`, quoted strings, and comments. - Entity and view resolution now prefers fully-qualified type names before falling back to simple class names. This avoids incorrect generated SQL when two entities share the same class name in different namespaces. - Generated DAO code keeps the high-performance command strategy introduced in the 0.5 line: session-scoped commands in parallel mode, cached command clones in serialized transactions, and minimal disposal overhead. ### Runtime - Improved transaction command caching identity for cloned commands inside transactions. - Hardened seeder transaction flow so raw seeding commands, DAO calls, and journal writes participate in the same transaction/session. - Improved SQL helper behavior for provider-specific parameter syntax. ### Tests and Verification - Added source-generator tests for transaction wrapping, transaction diagnostics, safe SQL parameter replacement, and fully-qualified entity resolution. - Added SQL scanner tests for PostgreSQL casts and SQL Server system variables. ## v0.5.2 ### Runtime Stability - Improved `RoomDatabase` transaction behavior, async cancellation handling, and serialized-mode transaction locking. - Hardened seeding, journal writes, migration-related helpers, global filter disabling scopes, and pager enumeration behavior. - Improved FTS SQL generation for providers that require column-aware search expressions. ### Source Generator - Reduced generated DAO command ownership complexity. - Improved generated disposal paths and command reuse behavior. - Kept generated code provider-aware across serialized and parallel concurrency modes. ### Dependency Injection - Improved cleanup behavior for DI-managed databases through async disposal support. - Better alignment between database lifetime, DAO resolution, and transaction/session-aware runtime behavior. ## v0.5.0 ### Smart Entity Lifecycle - `[SoftDelete]` entities now get generated `RestoreAsync`, `Restore`, `HardDeleteAsync`, and `HardDelete` methods directly inside their DAO classes. - `[SoftDelete]` query filtering is automatically injected for matching `[Query]` methods: - `deleted_at IS NULL` for timestamp-based soft delete. - `is_deleted = 0` for bool-based soft delete. - `[Encrypted]` properties are automatically decrypted after SELECT queries for single-entity and collection results, including parallel and serialized concurrency modes. - `[Auditable]` entities automatically populate `CreatedAt` and `UpdatedAt` on insert/update. When user tracking is enabled, RoomSharp reads the current user from `IAuditContext.GetCurrentUser()`. ### Compatibility - Improved QueryExtensions cache invalidation integration. - Improved `[Auditable]` generated code integration with `IAuditContext.GetCurrentUser()`. ## v0.4.8 ### Runtime Improvements - Added `IAsyncDisposable` support to `RoomDatabase` for async cleanup in DI containers. - Added `ClearAllTablesAsync()`. - `ClearAllTables()` now supports SQLite, SQL Server, PostgreSQL, and MySQL. - `ClearAllTables()` now uses dialect identifier formatting for safer table names. - Added `CancellationToken` support to sync transaction overloads. - Adopted central package management with low compatible dependency versions to reduce conflicts in consuming projects. ### Reliability - Improved transient exception detection by inspecting provider exception types and inner exceptions. - Simplified connection-opening paths. ## v0.4.7 ### Baseline This version remains available from the version switcher for reference. ## v0.4.4 See [v0.4.4 release notes](/docs/v0.5.4/release-notes-0-4-4). ## v0.4.3 See [v0.4.3 release notes](/docs/v0.5.4/release-notes-0-4-3). ## QueryExtensions v0.1.10 ### Fluent Query Architecture - Introduced the `FluentQueryCore` composition layer to reduce duplicated query-building behavior across database and session-backed query APIs. - Improved expression grouping so compound `Where` expressions preserve boolean precedence. - Hardened string-based identifiers with validation/quoting paths where the fluent API can safely do so. ### Filtered Includes - Added filtered include support for relationship loading. - Pushes filters into relation loading paths where possible instead of relying only on in-memory filtering. ### Transactions - `DbSession.InTransaction*` now owns commit, rollback, and cleanup consistently when it starts the transaction. - Improved raw query and multi-mapping command handling for provider robustness. Native AOT work remains intentionally deferred. The current focus is runtime stability, source generator correctness, and generated-code performance.