Repository navigation
U4 (D-RU-4): co-addressed join operator over one JoinDomain - #1658
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VncKoyG6JkpsoqhqTGTv3f
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VncKoyG6JkpsoqhqTGTv3f
Per-side Rels at query time over one table laid out without them. 64 restricted star queries at 200k rows: 1423 ms laying out per query, 776 ms with semijoin, 12.4 ms + 30.4 ms one layout here. Answers equal the star path and a nested-loop reference; no program has a foreign hop. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VncKoyG6JkpsoqhqTGTv3f
|
Important
This repository does not receive automatic reviews because it has fewer than 10 stars. ⚙️ Run configuration
Warning Billing warning: we have not been able to collect payment for this subscription for more than 72 hours. Please update the payment method or pay any pending invoices in Billing to avoid service interruption. Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 9ad0ed3477
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…an be installed Codex P2 on #1658: with public fields a caller could put in a side laid out over another JoinDomain. Keys and generations would still match, and equal slots would then name different centers. prepare is now the only constructor; the fields are read through accessors. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VncKoyG6JkpsoqhqTGTv3f
main (#1657) removed native::bindings, the tuple builder. CoEval::bindings built the same shape (a clone per combination, sort, merge into Vec<(Vec<u64>, u64)>), so it is replaced by CoEval::matching(pattern), a fold over the joint that inverts a pinned center to its slot. The parity test compares bag totals and, per derivation the star path reads, the pinned multiplicity against native::matching; the disjunctive test compares totals and per-center / per-(x, c) counts against a counting nested-loop oracle. The entries index is regenerated. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01G22yT6htkcdyXsihxxXdrg
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01G22yT6htkcdyXsihxxXdrg
…hdrawn Every arm of examples/coaddressed.rs ran in milliseconds, the star path's included. Under CLAUDE.md P0 (2026-10-21) that is a failed gate, so the entry, the STATUS_BOARD row and the plan note no longer report timings. They name where the operator leaves the mask-risc terminals: a kept row mask per filtered side, an i64 sink of domain size, a scalar loop building the plane, and scalar per-slot products. Correctness (parity, no foreign hop, the disables) stands. bindings -> matching after 1d1c0b7. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VncKoyG6JkpsoqhqTGTv3f
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VncKoyG6JkpsoqhqTGTv3f
…main #1658's co-addressed join used Side::values(), a slot-order copy of the non-key column. #1659 removed that copy. The restriction now runs over the relation's lane in row order, and each side row reads its bit through Side::positions(); values_at reads lane()[positions()[j]]. Store is lane based (Store::from_rows) in the module, its tests and its example. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01G22yT6htkcdyXsihxxXdrg
What
crepe-plan-probe::coaddressedadds the co-addressed join as a named operator: a conjunction of per-tableRels over oneJoinDomain(pland-relalg-unified-v1.md§5.3, §6, stage U4).How a query runs:
rel_iruns as a relalg fold over that side's own rows. A mask-riscGroupReduce Countthen counts the selected rows per slot. It is keyed by the side's slot lane, which is built from the side's own offsets and is non-decreasing.Rel::Alluses its prepared presence plane and reads no rows.Andof the slot planes.matching(pattern), a fold over the joint that builds no row.CoTable's fields are private.CoTable::prepareis the only constructor, so every side is laid out over the table's own domain (Codex P2).The star path applies a restriction to the rows before layout. Here the restriction is a query-time
Relover one table laid out without it, and it can be anything relalg lowers on aU32lane, including!=,OrandNot.mork_pathmap_probe::join::Sidegains two read-only accessors,values()andoffsets().Speed: failed gate
Every arm of
examples/coaddressed.rsran in milliseconds, including the star path's per-query layout. Under theCLAUDE.mdP0 no-ms rule (2026-10-21) that is a failed gate, not a measurement, so no timing is reported here. The timings in the first version of this body are withdrawn.Where the operator leaves the mask-risc terminals (read from the code, not attributed by measurement):
GroupReducesink is ani64buffer of domain size;D-RU-4 is not shipped until that path runs in nanoseconds.
Correctness
The tests compare answers by folds, not by building rows:
parity_with_the_star_path: bag count, distinct centers and pinned per-derivation counts, againstnative::matching/distinct_centers;disjunctive_restrictions_match_the_reference:Or,Notand!=, against a counting nested-loop oracle;no_gather: every program run passes!has_foreign_hop;all_sides_read_as_preparedandrefusals;examples/coaddressed.rs: every arm agrees (now part of crepe-plan-probe CI).Five disables, each turning its target test red. The gather disable is an answer-correct
ScatterOrU32projection, and it fails onlyno_gather.Board
entries/2026-10-21-u4-coaddressed-join.md(FAILED GATE on speed, correctness measured)Open
Relinto the projection terminal, sink into a plane, and answer counts through a terminal over the kept joint.🤖 Generated with Claude Code
https://claude.ai/code/session_01VncKoyG6JkpsoqhqTGTv3f