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()));