sqry-db: Salsa-style incremental computation engine for sqry.
This crate provides a demand-driven memoized query engine with file-level
dependency tracking, three-tier cache invalidation, and incremental indexing
support. All analysis queries (callers, callees, dependency impact, unused
detection, etc.) are expressed as [DerivedQuery] implementations whose
results are cached in a 64-shard [ShardedCache] and automatically
invalidated when their input dependencies change.
Architecture
┌─────────────┐ ┌──────────────────┐ ┌──────────────���─┐
│ MCP / CLI │─────▶│ QueryDb │─────▶│ GraphSnapshot │
│ handlers │ │ (ShardedCache) │ │ (immutable) │
└─────────────┘ └──────────────────┘ └────���───────────┘
│ │
┌─────┴──────┐ ┌──────┴───────┐
│ FileInput │ │ NodeArena │
│ Store │ │ EdgeStore │
└────────────┘ └──────────────┘
Three-Tier Invalidation
- Tier 1 — File-level deps: Every query records the
FileIdof every node it reads. Invalidated when any recorded file's revision bumps. - Tier 2 — Global edge revision: A single
AtomicU64that increments when any file's edges change. Reverse queries (callers_of,is_node_in_cycle) setTRACKS_EDGE_REVISION = true. - Tier 3 — Global metadata revision: A single
AtomicU64that increments when node metadata changes.find_unusedsetsTRACKS_METADATA_REVISION = true.
Usage
use ;
let config = default;
let db = new;
let result = db.;