* Delete specific resolved references by (fromNodeId, referenceName, referenceKind) tuples. * More precise than deleteResolvedReferences — only removes refs that were actually resolved.
(refs: Array<{ fromNodeId: string; referenceName: string; referenceKind: string }>)
| 2487 | * More precise than deleteResolvedReferences — only removes refs that were actually resolved. |
| 2488 | */ |
| 2489 | deleteSpecificResolvedReferences(refs: Array<{ fromNodeId: string; referenceName: string; referenceKind: string }>): number { |
| 2490 | if (refs.length === 0) return 0; |
| 2491 | const stmt = this.db.prepare( |
| 2492 | 'DELETE FROM unresolved_refs WHERE from_node_id = ? AND reference_name = ? AND reference_kind = ?' |
| 2493 | ); |
| 2494 | // Returns rows actually removed (SQLite `changes`, summed): the batched |
| 2495 | // resolution loop's non-progress guard keys on this — zero removals from |
| 2496 | // a batch that claimed work is the direct runaway signal (§7a.2). |
| 2497 | let changed = 0; |
| 2498 | const deleteMany = this.db.transaction((items: typeof refs) => { |
| 2499 | for (const ref of items) { |
| 2500 | changed += stmt.run(ref.fromNodeId, ref.referenceName, ref.referenceKind).changes; |
| 2501 | } |
| 2502 | }); |
| 2503 | deleteMany(refs); |
| 2504 | return changed; |
| 2505 | } |
| 2506 | |
| 2507 | /** |
| 2508 | * Delete unresolved-ref rows by row id — the precise cleanup for refs a |
no test coverage detected