/** * MongoDB indexes for the shared reachability store collections used by Signals/Policy/Scanner. * Run with: mongosh stellaops_db < reachability_store_indices.js * * Collections: * - func_nodes: canonical function nodes keyed by graph + symbol ID and joinable by (purl, symbolDigest) * - call_edges: canonical call edges keyed by graph and joinable by (purl, symbolDigest) * - cve_func_hits: per-subject mapping of CVE -> affected/reachable functions with evidence pointers * * Created: 2025-12-13 (SIG-STORE-401-016) */ // Switch to the target database (override via --eval "var dbName='custom'" if needed) const targetDb = typeof dbName !== 'undefined' ? dbName : 'stellaops'; db = db.getSiblingDB(targetDb); print(`Creating reachability store indexes on ${targetDb}...`); print(`- func_nodes`); db.func_nodes.createIndex( { "graphHash": 1, "symbolId": 1 }, { name: "func_nodes_by_graph_symbol", unique: true, background: true } ); db.func_nodes.createIndex( { "purl": 1, "symbolDigest": 1 }, { name: "func_nodes_by_purl_symboldigest", background: true, sparse: true } ); db.func_nodes.createIndex( { "codeId": 1 }, { name: "func_nodes_by_code_id", background: true, sparse: true } ); print(`- call_edges`); db.call_edges.createIndex( { "graphHash": 1, "sourceId": 1, "targetId": 1, "type": 1 }, { name: "call_edges_by_graph_edge", unique: true, background: true } ); db.call_edges.createIndex( { "graphHash": 1, "sourceId": 1 }, { name: "call_edges_by_graph_source", background: true } ); db.call_edges.createIndex( { "graphHash": 1, "targetId": 1 }, { name: "call_edges_by_graph_target", background: true } ); db.call_edges.createIndex( { "purl": 1, "symbolDigest": 1 }, { name: "call_edges_by_purl_symboldigest", background: true, sparse: true } ); print(`- cve_func_hits`); db.cve_func_hits.createIndex( { "subjectKey": 1, "cveId": 1 }, { name: "cve_func_hits_by_subject_cve", background: true } ); db.cve_func_hits.createIndex( { "cveId": 1, "purl": 1, "symbolDigest": 1 }, { name: "cve_func_hits_by_cve_purl_symboldigest", background: true, sparse: true } ); db.cve_func_hits.createIndex( { "graphHash": 1 }, { name: "cve_func_hits_by_graph", background: true, sparse: true } ); print("\nReachability store indexes created successfully."); print("Run db.func_nodes.getIndexes(), db.call_edges.getIndexes(), db.cve_func_hits.getIndexes() to verify.");