--- title: "Changelog" description: "Practical release history for RoomSharp, QueryExtensions, and related packages." canonical: "https://roomsharp.dev/docs/v0.5.3/changelog" source: "src/content/v0.5.3/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. `RoomSharp.QueryExtensions` can have its own package version when its release cadence differs. ## v0.5.3 ### Source Generator - Added compile-time validation for `[Transaction]` on `IAsyncEnumerable` DAO methods. Streaming results cannot safely inherit a transaction lifetime from a method wrapper, so the generator now reports a diagnostic instead of silently ignoring the transaction. - 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. - Fixed 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()`. ### Fixes - Fixed `QueryCache.InvalidateByPrefix()` return type so `FluentQuery.InvalidateTableCache()` compiles correctly. - Fixed `[Auditable]` generated code to call `IAuditContext.GetCurrentUser()` instead of a non-existent property. ## 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. ### Fixes - Improved transient exception detection by inspecting provider exception types and inner exceptions. - Removed duplicated connection-opening code paths. ## v0.4.7 ### Baseline Documentation Version The website previously documented the 0.4.7-era API. This version remains available from the version switcher for reference, while current documentation now defaults to v0.5.3. ## v0.4.4 See [v0.4.4 release notes](/docs/v0.5.3/release-notes-0-4-4). ## v0.4.3 See [v0.4.3 release notes](/docs/v0.5.3/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 - Fixed `DbSession.InTransaction*` ownership so transactions commit, roll back, and clear correctly. - 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.