* Delete resolved references by their IDs
(fromNodeIds: string[])
| 2469 | * Delete resolved references by their IDs |
| 2470 | */ |
| 2471 | deleteResolvedReferences(fromNodeIds: string[]): void { |
| 2472 | if (fromNodeIds.length === 0) return; |
| 2473 | // Chunk under SQLite's parameter limit, matching every other IN-list in |
| 2474 | // this file. The internal resolution path uses deleteSpecificResolvedReferences |
| 2475 | // instead, but QueryBuilder is part of the public API, so a library consumer |
| 2476 | // passing more ids than SQLITE_MAX_VARIABLE_NUMBER (32766 on the bundled |
| 2477 | // node:sqlite) would otherwise hit "too many SQL variables". (#540, #1001) |
| 2478 | for (let i = 0; i < fromNodeIds.length; i += SQLITE_PARAM_CHUNK_SIZE) { |
| 2479 | const chunk = fromNodeIds.slice(i, i + SQLITE_PARAM_CHUNK_SIZE); |
| 2480 | const placeholders = chunk.map(() => '?').join(','); |
| 2481 | this.db.prepare(`DELETE FROM unresolved_refs WHERE from_node_id IN (${placeholders})`).run(...chunk); |
| 2482 | } |
| 2483 | } |
| 2484 | |
| 2485 | /** |
| 2486 | * Delete specific resolved references by (fromNodeId, referenceName, referenceKind) tuples. |
no test coverage detected