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
feat(physical-expr): add DynamicFilterTracker for cheap dynamic-filter change detection
Introduce a consumer-side counterpart to the producer API on
`DynamicFilterPhysicalExpr` (`update`/`mark_complete`/`wait_*`), living in a new
`expressions::dynamic_filters` module (`dynamic_filters.rs` becomes
`dynamic_filters/mod.rs`, with the tracker in `dynamic_filters/tracker.rs`).
`DynamicFilterPhysicalExpr::subscribe()` returns a `DynamicFilterSubscription`
that observes one filter through its existing `watch` channel: steady-state
polling is a single atomic load, the lock is taken only when the filter actually
moved, and a bare `mark_complete()` (which re-broadcasts the current generation)
is distinguished from a real expression change. This subscription plumbing is
`pub(crate)` — the public surface is the tracker.
`DynamicFilterTracker` walks a (possibly composite) predicate once, subscribing
to every still-incomplete dynamic filter, then answers `changed()` by polling
only that shrinking set. `DynamicFilterTracking::classify` distinguishes
Static / AllComplete / Watching in a single traversal. Test-only constructors
are gated behind `#[cfg(test)]`.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
0 commit comments