Get cached subquery result
(
&self,
subquery_ast: &str,
outer_variables: Vec<(String, crate::storage::Value)>,
subquery_type: SubqueryType,
)
| 330 | |
| 331 | /// Get cached subquery result |
| 332 | pub fn get_subquery_result( |
| 333 | &self, |
| 334 | subquery_ast: &str, |
| 335 | outer_variables: Vec<(String, crate::storage::Value)>, |
| 336 | subquery_type: SubqueryType, |
| 337 | ) -> Option<SubqueryCacheHit> { |
| 338 | if !self.config.enabled { |
| 339 | return None; |
| 340 | } |
| 341 | |
| 342 | let graph_version = *self.graph_version.read().unwrap(); |
| 343 | let schema_version = *self.schema_version.read().unwrap(); |
| 344 | let key = create_subquery_cache_key( |
| 345 | subquery_ast, |
| 346 | outer_variables, |
| 347 | graph_version, |
| 348 | schema_version, |
| 349 | subquery_type, |
| 350 | ); |
| 351 | |
| 352 | if let Some(result) = self.subquery_cache.get(&key) { |
| 353 | // Record cache hit event |
| 354 | self.record_event(CacheEvent::ResultCacheHit { |
| 355 | key: QueryCacheKey { |
| 356 | query_hash: key.subquery_hash, |
| 357 | parameters: vec![], // Subqueries don't have parameters in the same way |
| 358 | graph_version: key.graph_version, |
| 359 | user_context: None, |
| 360 | }, |
| 361 | level: CacheLevel::L1, |
| 362 | saved_time_ms: 0, // Would need to track execution time |
| 363 | timestamp: Instant::now(), |
| 364 | }); |
| 365 | |
| 366 | Some(SubqueryCacheHit { |
| 367 | key, |
| 368 | result, |
| 369 | saved_execution_time: Duration::from_millis(0), // Would get from cache entry |
| 370 | hit_timestamp: Instant::now(), |
| 371 | }) |
| 372 | } else { |
| 373 | None |
| 374 | } |
| 375 | } |
| 376 | |
| 377 | /// Cache subquery result |
| 378 | pub fn cache_subquery_result( |
nothing calls this directly
no test coverage detected