Commit daa80a9
* docs: add Wave 1 performance design spec (#208, #202, #203, #204)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* docs: add Wave 1 implementation plans for #208 and #202/#203/#204
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* refactor: promote get_facts_by_entity/attribute to production code (#208)
Move get_facts_by_entity, get_facts_by_attribute, and
get_facts_by_entity_attribute from #[cfg(test)] to a production impl
block so they can be called from the query executor. Also promote the
resolve_fact_ref and next_string_prefix helper functions to production
scope. The five remaining test-only helpers stay in #[cfg(test)].
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* test: add selective lookup correctness tests (#208)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat: selective B+Tree lookup in filter_facts_for_query (#208)
Add `selective_fact_fetch` to `DatalogExecutor` and wire it into the
`(None, None)` arm of `filter_facts_for_query`. For rule-free queries
with ≤4 distinct bound entities/attributes, this skips the full
`get_all_facts()` scan in favour of targeted index lookups. Patterns
inside `not`/`not-join`/`or`/`or-join` bodies are included via
`collect_all_patterns` so the snapshot is always complete. Rule queries
continue to use the full scan since rules require the entire fact base.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* bench: add btree_lookup/entity_point and attribute_scan benchmarks (#208)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* style: apply rustfmt formatting to #208 changes
* fix: resolve clippy lints in promoted storage methods (#208)
* fix: collapse nested if in next_string_prefix per clippy
---------
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 2f156f0 commit daa80a9
7 files changed
Lines changed: 2290 additions & 33 deletions
File tree
- benches
- helpers
- docs/superpowers
- plans
- specs
- src
- graph
- query/datalog
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
331 | 331 | | |
332 | 332 | | |
333 | 333 | | |
| 334 | + | |
| 335 | + | |
| 336 | + | |
| 337 | + | |
| 338 | + | |
| 339 | + | |
| 340 | + | |
| 341 | + | |
| 342 | + | |
| 343 | + | |
| 344 | + | |
| 345 | + | |
| 346 | + | |
| 347 | + | |
| 348 | + | |
| 349 | + | |
| 350 | + | |
| 351 | + | |
| 352 | + | |
| 353 | + | |
| 354 | + | |
334 | 355 | | |
335 | 356 | | |
336 | 357 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1465 | 1465 | | |
1466 | 1466 | | |
1467 | 1467 | | |
| 1468 | + | |
| 1469 | + | |
| 1470 | + | |
| 1471 | + | |
| 1472 | + | |
| 1473 | + | |
| 1474 | + | |
| 1475 | + | |
| 1476 | + | |
| 1477 | + | |
| 1478 | + | |
| 1479 | + | |
| 1480 | + | |
| 1481 | + | |
| 1482 | + | |
| 1483 | + | |
| 1484 | + | |
| 1485 | + | |
| 1486 | + | |
| 1487 | + | |
| 1488 | + | |
| 1489 | + | |
| 1490 | + | |
| 1491 | + | |
| 1492 | + | |
| 1493 | + | |
| 1494 | + | |
| 1495 | + | |
| 1496 | + | |
| 1497 | + | |
| 1498 | + | |
| 1499 | + | |
| 1500 | + | |
| 1501 | + | |
| 1502 | + | |
| 1503 | + | |
| 1504 | + | |
| 1505 | + | |
1468 | 1506 | | |
1469 | 1507 | | |
1470 | 1508 | | |
| |||
1488 | 1526 | | |
1489 | 1527 | | |
1490 | 1528 | | |
| 1529 | + | |
1491 | 1530 | | |
1492 | 1531 | | |
0 commit comments