feat(compiler,engine): edge bindings to filter and project edge properties - #447
Merged
aaltshuler merged 4 commits intoAug 6, 2026
Merged
Conversation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: c7ed8b88ae
ℹ️ 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".
aaltshuler
force-pushed
the
gq-edge-property-projection
branch
from
August 6, 2026 21:03
bb0a736 to
0990444
Compare
This was referenced Aug 6, 2026
Merged
azimafroozeh
pushed a commit
to azimafroozeh/omnigraph
that referenced
this pull request
Aug 8, 2026
Adds the missing user-visible changes to the v0.9.0 release notes: edge property bindings (ModernRelay#447), standalone filter pushdown (ModernRelay#450), the keyed per-transaction write bound with the Overwrite exemption (ModernRelay#454), strict cluster policy-bundle validation (ModernRelay#444), and developer-facing lines for RFC-030/031/032 and the rustfmt baseline.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR adds an optional edge binding to GQ traversals:
$p $w:knows $fnames the matched edge row, and$w.sincethen works anywhere a node field works. Edges have always carried declared properties (role, confidence, provenance fields); until now they were stored and written but unreachable from queries, which could use edges only as connectors.$w.since >= date("2023-01-01")return { $f.name, $w.since }return { $f.name, count($w.since) }not { }$a $w:<related> $b; in-block use insidenot { }Semantics: a bound traversal returns one row per matching edge row, so parallel edges between the same endpoints stay distinct; unbound traversals keep their existing set-of-pairs semantics. Constructions without a per-row meaning are rejected with a new typecheck code,
T23: a binding on a{min,max}multi-hop, rebinding a taken name, bare$win return, and text and rank functions (search,bm25,nearest, ...) on an edge-bound field, which execute against node scans and would otherwise be silently ignored.Execution: a bound traversal always resolves the hop by scanning the edge table (the in-memory CSR adjacency index stores no property columns) and attaches the edge's declared columns to the result rows, where the existing filter and projection machinery picks them up.
Future work
Edge-property filter pushdown into the edge-table scan, and Cypher-style bracket syntax as pure parser surface over the same internals.
Testing
Adds parser coverage (directed, undirected, omitted binding), the
T23typecheck family including the search and rank rejections, and an engine end-to-end test covering filtering on real values, null-property flow, parallel-edge cardinality, and aggregation.cargo test -p omnigraph-compilerandcargo test -p omnigraph-engine --test traversalclean. Docs updated in the same change:docs/user/queries/index.mdanddocs/dev/execution.md.Greptile Summary
The PR adds optional edge bindings throughout the query compiler and execution engine, making declared edge properties available to filters, projections, and aggregates.
Confidence Score: 5/5
The PR appears safe to merge because no blocking failure remains in the review’s eligible finding set.
No blocking failure remains.
Important Files Changed
Flowchart
%%{init: {'theme': 'neutral'}}%% flowchart LR Q["GQ traversal<br/>$p $w:knows $f"] --> P[Parser and AST] P --> T[Typecheck edge binding] T --> I["Expand IR<br/>edge_binding = w"] I --> S[Scan matching edge rows] S --> A["Attach w.id and w.* properties"] A --> H[Hydrate destination nodes] H --> F[Filter / project / aggregate]Reviews (4): Last reviewed commit: "test(query): register projected edge sca..." | Re-trigger Greptile
Context used: