Expand description
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 sqry_db::{QueryDb, QueryDbConfig};
let config = QueryDbConfig::default();
let db = QueryDb::new(snapshot, config);
let result = db.get::<CallersQuery>(&node_id);Re-exports§
pub use cache::ShardedCache;pub use comparative::ChangeType;pub use comparative::ComparativeQueryDb;pub use comparative::DiffOptions;pub use comparative::DiffOutput;pub use comparative::DiffSummary;pub use comparative::NodeChange;pub use comparative::NodeLocation;pub use config::QueryDbConfig;pub use dependency::DependencyRecorderGuard;pub use input::FileInput;pub use input::FileInputStore;pub use persistence::DERIVED_FORMAT_VERSION;pub use persistence::DERIVED_MAGIC;pub use persistence::DerivedHeader;pub use persistence::DerivedManifest;pub use persistence::LoadError;pub use persistence::LoadOutcome;pub use persistence::PersistedEntry;pub use persistence::QueryDeps;pub use persistence::SkipReason;pub use persistence::StagedEntry;pub use persistence::load_derived;pub use queries::dispatch::derived_path;pub use queries::dispatch::load_derived_opportunistic;pub use queries::dispatch::make_query_db_cold;pub use query::DerivedQuery;pub use query::QueryKey;pub use query::QueryRegistry;
Modules§
- cache
- 64-shard query cache with three-tier invalidation.
- compaction
- Async background compaction for the graph arena.
- comparative
ComparativeQueryDbfor cross-snapshot operations.- config
- Configuration for
QueryDb. - dependency
- Thread-local dependency recording with RAII cleanup.
- input
- File-level input storage with per-file revision counters.
- persistence
- Derived facts persistence to
.sqry/graph/derived.sqry. - planner
- Structural query planner for
sqry-db. - queries
- Derived queries: SCC, condensation, reachability, plus relation and
analysis queries migrated from
sqry-core::query::executor::graph_eval. - query
- Derived query trait and
TypeId-based query registry.
Structs§
- QueryDb
- The central incremental computation database.
- Query
DbMetrics - Lightweight snapshot of
QueryDbcache-usage counters.