MCPcopy Create free account
hub / github.com/GraphLite-AI/GraphLite / get

Method get

graphlite/src/cache/subquery_cache.rs:394–445  ·  view source on GitHub ↗

Get cached subquery result

(&self, key: &SubqueryCacheKey)

Source from the content-addressed store, hash-verified

392
393 /// Get cached subquery result
394 pub fn get(&self, key: &SubqueryCacheKey) -> Option<SubqueryResult> {
395 let mut entries = self.entries.write().unwrap();
396
397 if let Some(entry) = entries.get_mut(key) {
398 if entry.is_valid() {
399 // Update access info
400 entry.metadata.update_access();
401 entry.hit_count += 1;
402 entry.last_hit = Instant::now();
403
404 // Update stats
405 {
406 let mut stats = self.stats.write().unwrap();
407 stats.hits += 1;
408 stats.total_execution_time_saved_ms += entry.execution_time.as_millis() as u64;
409
410 // Track by subquery type
411 match &entry.result {
412 SubqueryResult::Boolean(_) => stats.boolean_cache_hits += 1,
413 SubqueryResult::Scalar(_) => stats.scalar_cache_hits += 1,
414 SubqueryResult::Set(_) => stats.set_cache_hits += 1,
415 SubqueryResult::FullResult(_) => stats.full_result_cache_hits += 1,
416 }
417 }
418
419 Some(entry.result.clone())
420 } else {
421 // Remove expired entry
422 let removed_entry = entries.remove(key).unwrap();
423 let size = removed_entry.size_bytes();
424
425 {
426 let mut current_memory = self.current_memory.write().unwrap();
427 *current_memory = current_memory.saturating_sub(size);
428 }
429
430 {
431 let mut stats = self.stats.write().unwrap();
432 stats.misses += 1;
433 stats.current_entries = entries.len();
434 stats.memory_bytes = *self.current_memory.read().unwrap();
435 }
436
437 None
438 }
439 } else {
440 // Cache miss
441 let mut stats = self.stats.write().unwrap();
442 stats.misses += 1;
443 None
444 }
445 }
446
447 /// Insert subquery result into cache
448 pub fn insert(

Callers 1

find_boolean_matchesMethod · 0.45

Calls 8

unwrapMethod · 0.80
get_mutMethod · 0.80
update_accessMethod · 0.80
cloneMethod · 0.80
is_validMethod · 0.45
removeMethod · 0.45
size_bytesMethod · 0.45
lenMethod · 0.45

Tested by

no test coverage detected