cmd_graph, cmd_list_keys: use query language internally

Dog-food the query engine for node-property filtering.
cmd_link left unconverted — needs edge data in query results.
This commit is contained in:
ProofOfConcept 2026-03-03 11:38:11 -05:00
parent 18face7063
commit 64d2b441f0

View file

@ -319,16 +319,13 @@ fn cmd_graph() -> Result<(), String> {
let store = capnp_store::Store::load()?;
let g = store.build_graph();
// Show top-10 highest degree nodes
let mut degrees: Vec<_> = g.nodes().iter()
.map(|k| (k.clone(), g.degree(k)))
.collect();
degrees.sort_by(|a, b| b.1.cmp(&a.1));
println!("Top nodes by degree:");
for (key, deg) in degrees.iter().take(10) {
let cc = g.clustering_coefficient(key);
println!(" {:40} deg={:3} cc={:.3}", key, deg, cc);
let results = query::execute_query(
&store, &g, "* | sort degree | limit 10")?;
for r in &results {
let deg = g.degree(&r.key);
let cc = g.clustering_coefficient(&r.key);
println!(" {:40} deg={:3} cc={:.3}", r.key, deg, cc);
}
Ok(())
}
@ -1224,10 +1221,10 @@ fn cmd_spectral_suggest(args: &[String]) -> Result<(), String> {
fn cmd_list_keys() -> Result<(), String> {
let store = capnp_store::Store::load()?;
let mut keys: Vec<_> = store.nodes.keys().collect();
keys.sort();
for key in keys {
println!("{}", key);
let g = store.build_graph();
let results = query::execute_query(&store, &g, "* | sort key asc")?;
for r in &results {
println!("{}", r.key);
}
Ok(())
}