pub struct DependencyTracker { /* private fields */ }Expand description
Tracks which cache entries depend on which views/tables.
Maintains bidirectional mappings between cache keys and the database
views/tables they access. This enables efficient lookup during invalidation:
“Which cache entries read from v_user?”
§Example
use fraiseql_core::cache::DependencyTracker;
let mut tracker = DependencyTracker::new();
// Record that cache entry accesses v_user
tracker.record_access(
"cache_key_abc123".to_string(),
vec!["v_user".to_string()]
);
// Find all caches that read from v_user
let affected = tracker.get_dependent_caches("v_user");
assert!(affected.contains(&"cache_key_abc123".to_string()));Implementations§
Source§impl DependencyTracker
impl DependencyTracker
Sourcepub fn new() -> Self
pub fn new() -> Self
Create new dependency tracker.
§Example
use fraiseql_core::cache::DependencyTracker;
let tracker = DependencyTracker::new();Sourcepub fn record_access(&mut self, cache_key: String, views: Vec<String>)
pub fn record_access(&mut self, cache_key: String, views: Vec<String>)
Record that a cache entry accesses certain views.
Updates both forward and reverse mappings.
§Arguments
cache_key- Cache key (fromgenerate_cache_key())views- List of views accessed by the query
§Example
use fraiseql_core::cache::DependencyTracker;
let mut tracker = DependencyTracker::new();
tracker.record_access(
"key1".to_string(),
vec!["v_user".to_string(), "v_post".to_string()]
);Sourcepub fn get_dependent_caches(&self, view: &str) -> Vec<String>
pub fn get_dependent_caches(&self, view: &str) -> Vec<String>
Get all cache keys that access a view.
Used during invalidation to find affected cache entries.
§Arguments
view- View/table name
§Returns
List of cache keys that read from this view
§Example
use fraiseql_core::cache::DependencyTracker;
let mut tracker = DependencyTracker::new();
tracker.record_access("key1".to_string(), vec!["v_user".to_string()]);
let affected = tracker.get_dependent_caches("v_user");
assert_eq!(affected.len(), 1);
assert!(affected.contains(&"key1".to_string()));Sourcepub fn remove_cache(&mut self, cache_key: &str)
pub fn remove_cache(&mut self, cache_key: &str)
Remove a cache entry from tracking.
Called when cache entry is evicted (LRU) or invalidated. Cleans up both forward and reverse mappings.
§Arguments
cache_key- Cache key to remove
§Example
use fraiseql_core::cache::DependencyTracker;
let mut tracker = DependencyTracker::new();
tracker.record_access("key1".to_string(), vec!["v_user".to_string()]);
tracker.remove_cache("key1");
let affected = tracker.get_dependent_caches("v_user");
assert_eq!(affected.len(), 0);Sourcepub fn clear(&mut self)
pub fn clear(&mut self)
Clear all tracking data.
Used for testing and cache flush.
§Example
use fraiseql_core::cache::DependencyTracker;
let mut tracker = DependencyTracker::new();
tracker.record_access("key1".to_string(), vec!["v_user".to_string()]);
tracker.clear();
assert_eq!(tracker.cache_count(), 0);Sourcepub fn cache_count(&self) -> usize
pub fn cache_count(&self) -> usize
Get total number of tracked cache entries.
§Example
use fraiseql_core::cache::DependencyTracker;
let mut tracker = DependencyTracker::new();
tracker.record_access("key1".to_string(), vec!["v_user".to_string()]);
tracker.record_access("key2".to_string(), vec!["v_post".to_string()]);
assert_eq!(tracker.cache_count(), 2);Sourcepub fn view_count(&self) -> usize
pub fn view_count(&self) -> usize
Get total number of tracked views.
§Example
use fraiseql_core::cache::DependencyTracker;
let mut tracker = DependencyTracker::new();
tracker.record_access("key1".to_string(), vec!["v_user".to_string()]);
tracker.record_access("key2".to_string(), vec!["v_user".to_string(), "v_post".to_string()]);
assert_eq!(tracker.view_count(), 2); // v_user and v_postSourcepub fn get_all_views(&self) -> Vec<String>
pub fn get_all_views(&self) -> Vec<String>
Get all tracked views.
Used for debugging and monitoring.
§Example
use fraiseql_core::cache::DependencyTracker;
let mut tracker = DependencyTracker::new();
tracker.record_access("key1".to_string(), vec!["v_user".to_string()]);
let views = tracker.get_all_views();
assert!(views.contains(&"v_user".to_string()));Trait Implementations§
Source§impl Debug for DependencyTracker
impl Debug for DependencyTracker
Auto Trait Implementations§
impl Freeze for DependencyTracker
impl RefUnwindSafe for DependencyTracker
impl Send for DependencyTracker
impl Sync for DependencyTracker
impl Unpin for DependencyTracker
impl UnsafeUnpin for DependencyTracker
impl UnwindSafe for DependencyTracker
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more