You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
IVersioned / IRevisioned — optimistic concurrency with IVersioned (Guid-based) and IRevisioned (int-based), ConcurrencyException, UpdateExpectedVersion(), UpdateRevision(), version synced on Load and LINQ queries
Event archiving — ArchiveStream(), UnArchiveStream(), archived events excluded from FetchStreamAsync() and daemon loading, append-to-archived-stream prevention
FetchLatest — FetchLatest<T>(id) for quick aggregate state retrieval
Metadata LINQ helpers — ModifiedSince() / ModifiedBefore() for filtering by last_modified column
Eject methods — Eject<T>(), EjectAllOfType(), EjectAllPendingChanges() for removing documents from session tracking and pending operations
Session listeners — IDocumentSessionListener with BeforeSaveChangesAsync / AfterCommitAsync hooks, registered globally or per-session
Tombstone streams — TombstoneStream(Guid/string) for permanent hard DELETE of stream and all events
OpenSessionAsync — OpenSessionAsync(SessionOptions) with configurable IsolationLevel (eagerly opens connection + begins transaction for non-ReadCommitted)
Composite projections — CompositeProjectionFor() for multi-stage async projection pipelines with parallel execution within stages
Session logging — IPolecatLogger / IPolecatSessionLogger with SQL command logging, RequestCount per session
Schema diagnostics — ToDatabaseScript() and WriteCreationScriptToFileAsync() for full DDL export
IInitialData seeding — IInitialData interface with InitialDataCollection on StoreOptions, executed by PolecatActivator on startup
Event snapshots — Snapshot<T>(SnapshotLifecycle) caches aggregate state on pc_streams.snapshot; AggregateStreamAsync loads from snapshot for partial replay
Query plans — IQueryPlan<T>, IBatchQueryPlan<T>, QueryListPlan<T> specification pattern; QueryByPlanAsync() on IQuerySession, QueryByPlan() on IBatchedQuery with proper deferred batch integration
Will Not Implement
The following Marten features are out of scope for Polecat by design:
Dirty Tracking — DirtyTrackedSession() is not supported. Polecat only supports Lightweight and IdentityMap sessions per CLAUDE.md architecture decisions.
GIN Indexes — [GinIndexed] is a PostgreSQL-specific feature with no SQL Server equivalent.
Includes/Joins — IMartenQueryable<T>.Include<TInclude>() for eager-loading related documents is not planned.
Compiled Queries — ICompiledQuery<TDoc, TOut> is not needed; SQL Server query plan caching handles this natively.
Advanced SQL APIs — IAdvancedSql, MatchesSql — raw SQL can be executed directly via ADO.NET; no need for a wrapper abstraction.
Priority Assessment
Lower priority (PostgreSQL-specific or niche):
Full-text search (needs SQL Server alternative approach)
Duplicated fields / relational column indexing
Completed or Will Not Implement:
Compiled queries — Will Not Implement (SQL Server query plan caching)
Event snapshots — Done
Advanced SQL / MatchesSql — Will Not Implement (use ADO.NET directly)