Skip to content

BE-481: HashQL: Reify null and empty tuple as unit constants#8853

Open
indietyp wants to merge 1 commit into
bm/be-537-hashql-remove-old-backend-wire-up-hashql-in-the-apifrom
bm/be-481-hashql-lower-null-to-constantunit-during-reification
Open

BE-481: HashQL: Reify null and empty tuple as unit constants#8853
indietyp wants to merge 1 commit into
bm/be-537-hashql-remove-old-backend-wire-up-hashql-in-the-apifrom
bm/be-481-hashql-lower-null-to-constantunit-during-reification

Conversation

@indietyp

Copy link
Copy Markdown
Member

🌟 What is the purpose of this PR?

During MIR reification, null primitive values and empty tuples were not being lowered to the canonical unit constant (). This meant that null literals and #tuple: [] expressions were handled inconsistently compared to other unit-like values. This PR ensures both are promoted to Constant::Unit during reification, aligning them with the existing treatment of unit expressions.

🔍 What does this change?

  • Primitive::Null is now matched before the general Primitive arm in both atom.rs and rvalue.rs, lowering it directly to Constant::Unit instead of falling through to the opaque constant path.
  • Empty tuples (Tuple { fields } where fields.is_empty()) are now lowered to Constant::Unit in rvalue.rs rather than being constructed as a zero-field aggregate.
  • Existing snapshot tests for filter-aggressive have been updated to reflect that null comparisons now display as == () rather than == null in MIR output.

🛡 What tests cover this?

  • New UI test reify/null-value verifies that a null literal is reified as a unit constant.
  • New UI test reify/null-value-in-binary verifies that null values used in binary expressions (e.g. equality comparisons) are correctly promoted to ().
  • New UI test reify/empty-tuple verifies that an empty tuple expression is reified as a unit constant.

❓ How to test this?

  1. Run the MIR UI tests: cargo test -p hashql-mir
  2. Confirm all new and existing snapshot tests pass.

Pre-Merge Checklist 🚀

🚢 Has this modified a publishable library?

This PR:

  • does not modify any publishable blocks or libraries, or modifications do not need publishing

📜 Does this require a change to the docs?

The changes in this PR:

  • are internal and do not require a docs change

🕸️ Does this require a change to the Turbo Graph?

The changes in this PR:

  • do not affect the execution graph

Copilot AI review requested due to automatic review settings June 11, 2026 12:34
@vercel

vercel Bot commented Jun 11, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
hash Ready Ready Preview, Comment Jun 12, 2026 12:42pm
2 Skipped Deployments
Project Deployment Actions Updated (UTC)
hashdotdesign-tokens Ignored Ignored Preview Jun 12, 2026 12:42pm
petrinaut Skipped Skipped Jun 12, 2026 12:42pm

@cursor

cursor Bot commented Jun 11, 2026

Copy link
Copy Markdown

PR Summary

Low Risk
Scoped to MIR reification lowering and snapshot tests; aligns with existing interpretation of null as unit, with no auth or runtime graph changes.

Overview
MIR reification now treats null literals and empty tuples as the canonical unit constant (), instead of opaque null primitives or zero-field tuple aggregates.

Primitive::Null is handled in atom.rs (operand) and rvalue.rs (rvalue_data) before the general primitive path, emitting Constant::Unit. #tuple: [] in rvalue.rs loads () rather than building an empty aggregate. Snapshot output for graph filters now shows == () instead of == null. New UI tests cover standalone null, null in ==, and empty tuple reification.

Reviewed by Cursor Bugbot for commit 95715c4. Bugbot is set up for automated code reviews on this repo. Configure here.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR standardizes MIR reification so that null literals and empty tuple literals are lowered to the canonical unit constant Constant::Unit (()), aligning them with existing unit-expression handling and making MIR output consistent.

Changes:

  • Reify Primitive::Null directly into Constant::Unit in both atom and rvalue lowering.
  • Reify empty tuple literals (#tuple: []) into Constant::Unit instead of a zero-field tuple aggregate.
  • Add new MIR UI tests for null and empty tuple reification, and update an existing snapshot to reflect == () comparisons.

Reviewed changes

Copilot reviewed 9 out of 9 changed files in this pull request and generated no comments.

Show a summary per file
File Description
libs/@local/hashql/mir/src/reify/rvalue.rs Lowers null primitives and empty tuple data nodes to Constant::Unit during rvalue reification.
libs/@local/hashql/mir/src/reify/atom.rs Lowers null primitives to Constant::Unit when reifying atom operands.
libs/@local/hashql/mir/tests/ui/reify/null-value.jsonc Adds UI test input asserting null literal is promoted to unit.
libs/@local/hashql/mir/tests/ui/reify/null-value.stdout Adds expected MIR output showing return () for null.
libs/@local/hashql/mir/tests/ui/reify/null-value-in-binary.jsonc Adds UI test input asserting null promotion inside a binary expression.
libs/@local/hashql/mir/tests/ui/reify/null-value-in-binary.stdout Adds expected MIR output showing null operands lowered to () before comparison.
libs/@local/hashql/mir/tests/ui/reify/empty-tuple.jsonc Adds UI test input asserting empty tuple literal is promoted to unit.
libs/@local/hashql/mir/tests/ui/reify/empty-tuple.stdout Adds expected MIR output showing empty tuple lowered to ().
libs/@local/hashql/mir/tests/ui/pass/inline/filter-aggressive.stdout Updates snapshot output to reflect null comparisons now printing as == ().

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@codspeed-hq

codspeed-hq Bot commented Jun 11, 2026

Copy link
Copy Markdown

Merging this PR will not alter performance

✅ 24 untouched benchmarks
⏩ 56 skipped benchmarks1


Comparing bm/be-481-hashql-lower-null-to-constantunit-during-reification (95715c4) with bm/be-537-hashql-remove-old-backend-wire-up-hashql-in-the-api (c541263)

Open in CodSpeed

Footnotes

  1. 56 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports.

@codecov

codecov Bot commented Jun 11, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 71.10%. Comparing base (c541263) to head (95715c4).

Additional details and impacted files
@@                                        Coverage Diff                                        @@
##           bm/be-537-hashql-remove-old-backend-wire-up-hashql-in-the-api    #8853      +/-   ##
=================================================================================================
- Coverage                                                          80.50%   71.10%   -9.41%     
=================================================================================================
  Files                                                                503      386     -117     
  Lines                                                              68311    53945   -14366     
  Branches                                                            1923     1330     -593     
=================================================================================================
- Hits                                                               54996    38357   -16639     
- Misses                                                             12700    15170    +2470     
+ Partials                                                             615      418     -197     
Flag Coverage Δ
rust.harpc-wire-protocol ?
rust.hash-graph-api 7.81% <ø> (?)
rust.hashql-eval 79.44% <ø> (ø)
rust.hashql-mir ?

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@indietyp indietyp force-pushed the bm/be-481-hashql-lower-null-to-constantunit-during-reification branch from 9bd6d9b to 912034f Compare June 12, 2026 11:08
@indietyp indietyp force-pushed the bm/be-537-hashql-remove-old-backend-wire-up-hashql-in-the-api branch from 585c91d to 1622d96 Compare June 12, 2026 11:08
@vercel vercel Bot temporarily deployed to Preview – petrinaut June 12, 2026 11:08 Inactive
@indietyp indietyp force-pushed the bm/be-481-hashql-lower-null-to-constantunit-during-reification branch from 912034f to 95715c4 Compare June 12, 2026 12:33
Copilot AI review requested due to automatic review settings June 12, 2026 12:33
@indietyp indietyp force-pushed the bm/be-537-hashql-remove-old-backend-wire-up-hashql-in-the-api branch from 1622d96 to c541263 Compare June 12, 2026 12:33

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 9 out of 9 changed files in this pull request and generated no new comments.

@github-actions

Copy link
Copy Markdown
Contributor

Benchmark results

@rust/hash-graph-benches – Integrations

policy_resolution_large

Function Value Mean Flame graphs
resolve_policies_for_actor user: empty, selectivity: high, policies: 2002 $$27.5 \mathrm{ms} \pm 225 \mathrm{μs}\left({\color{lightgreen}-5.329 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: low, policies: 1 $$3.55 \mathrm{ms} \pm 19.8 \mathrm{μs}\left({\color{gray}0.344 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: medium, policies: 1001 $$14.5 \mathrm{ms} \pm 92.0 \mathrm{μs}\left({\color{gray}4.36 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: high, policies: 3314 $$43.3 \mathrm{ms} \pm 364 \mathrm{μs}\left({\color{gray}-3.702 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: low, policies: 1 $$15.0 \mathrm{ms} \pm 138 \mathrm{μs}\left({\color{gray}0.718 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: medium, policies: 1526 $$23.9 \mathrm{ms} \pm 199 \mathrm{μs}\left({\color{lightgreen}-5.348 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: high, policies: 2078 $$29.0 \mathrm{ms} \pm 195 \mathrm{μs}\left({\color{gray}-3.617 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: low, policies: 1 $$3.89 \mathrm{ms} \pm 23.4 \mathrm{μs}\left({\color{gray}-0.707 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: medium, policies: 1033 $$13.9 \mathrm{ms} \pm 141 \mathrm{μs}\left({\color{lightgreen}-7.480 \mathrm{\%}}\right) $$ Flame Graph

policy_resolution_medium

Function Value Mean Flame graphs
resolve_policies_for_actor user: empty, selectivity: high, policies: 102 $$3.84 \mathrm{ms} \pm 27.6 \mathrm{μs}\left({\color{gray}-0.484 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: low, policies: 1 $$3.04 \mathrm{ms} \pm 16.7 \mathrm{μs}\left({\color{gray}-0.219 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: medium, policies: 51 $$3.42 \mathrm{ms} \pm 35.8 \mathrm{μs}\left({\color{gray}0.109 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: high, policies: 269 $$5.25 \mathrm{ms} \pm 32.0 \mathrm{μs}\left({\color{gray}0.027 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: low, policies: 1 $$3.66 \mathrm{ms} \pm 20.6 \mathrm{μs}\left({\color{gray}2.39 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: medium, policies: 107 $$4.27 \mathrm{ms} \pm 26.7 \mathrm{μs}\left({\color{gray}-0.775 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: high, policies: 133 $$4.45 \mathrm{ms} \pm 26.3 \mathrm{μs}\left({\color{gray}-2.079 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: low, policies: 1 $$3.47 \mathrm{ms} \pm 18.6 \mathrm{μs}\left({\color{gray}-2.608 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: medium, policies: 63 $$4.17 \mathrm{ms} \pm 32.3 \mathrm{μs}\left({\color{gray}-2.235 \mathrm{\%}}\right) $$ Flame Graph

policy_resolution_none

Function Value Mean Flame graphs
resolve_policies_for_actor user: empty, selectivity: high, policies: 2 $$2.62 \mathrm{ms} \pm 15.1 \mathrm{μs}\left({\color{gray}-3.487 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: low, policies: 1 $$2.54 \mathrm{ms} \pm 15.5 \mathrm{μs}\left({\color{gray}0.735 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: medium, policies: 1 $$2.59 \mathrm{ms} \pm 18.2 \mathrm{μs}\left({\color{gray}-3.235 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: high, policies: 8 $$2.87 \mathrm{ms} \pm 16.9 \mathrm{μs}\left({\color{gray}-2.577 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: low, policies: 1 $$2.79 \mathrm{ms} \pm 18.5 \mathrm{μs}\left({\color{gray}1.48 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: medium, policies: 3 $$2.91 \mathrm{ms} \pm 18.4 \mathrm{μs}\left({\color{gray}-1.290 \mathrm{\%}}\right) $$ Flame Graph

policy_resolution_small

Function Value Mean Flame graphs
resolve_policies_for_actor user: empty, selectivity: high, policies: 52 $$3.09 \mathrm{ms} \pm 18.7 \mathrm{μs}\left({\color{gray}0.999 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: low, policies: 1 $$2.79 \mathrm{ms} \pm 17.3 \mathrm{μs}\left({\color{gray}0.388 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: medium, policies: 25 $$2.99 \mathrm{ms} \pm 14.3 \mathrm{μs}\left({\color{gray}-0.228 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: high, policies: 94 $$3.51 \mathrm{ms} \pm 27.8 \mathrm{μs}\left({\color{gray}0.690 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: low, policies: 1 $$2.97 \mathrm{ms} \pm 15.4 \mathrm{μs}\left({\color{gray}-1.465 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: medium, policies: 26 $$3.30 \mathrm{ms} \pm 17.9 \mathrm{μs}\left({\color{gray}-0.781 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: high, policies: 66 $$3.39 \mathrm{ms} \pm 22.8 \mathrm{μs}\left({\color{gray}-0.536 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: low, policies: 1 $$2.98 \mathrm{ms} \pm 17.1 \mathrm{μs}\left({\color{gray}-2.128 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: medium, policies: 29 $$3.54 \mathrm{ms} \pm 22.3 \mathrm{μs}\left({\color{gray}3.67 \mathrm{\%}}\right) $$ Flame Graph

read_scaling_complete

Function Value Mean Flame graphs
entity_by_id;one_depth 1 entities $$56.7 \mathrm{ms} \pm 392 \mathrm{μs}\left({\color{gray}-0.840 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;one_depth 10 entities $$47.3 \mathrm{ms} \pm 232 \mathrm{μs}\left({\color{gray}-0.839 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;one_depth 25 entities $$51.4 \mathrm{ms} \pm 326 \mathrm{μs}\left({\color{gray}-4.473 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;one_depth 5 entities $$45.8 \mathrm{ms} \pm 237 \mathrm{μs}\left({\color{gray}-0.255 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;one_depth 50 entities $$62.1 \mathrm{ms} \pm 446 \mathrm{μs}\left({\color{gray}-4.195 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;two_depth 1 entities $$63.9 \mathrm{ms} \pm 409 \mathrm{μs}\left({\color{gray}0.191 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;two_depth 10 entities $$57.9 \mathrm{ms} \pm 292 \mathrm{μs}\left({\color{gray}-0.557 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;two_depth 25 entities $$105 \mathrm{ms} \pm 515 \mathrm{μs}\left({\color{gray}-1.643 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;two_depth 5 entities $$47.7 \mathrm{ms} \pm 217 \mathrm{μs}\left({\color{gray}-1.215 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;two_depth 50 entities $$278 \mathrm{ms} \pm 1.15 \mathrm{ms}\left({\color{lightgreen}-7.097 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;zero_depth 1 entities $$20.0 \mathrm{ms} \pm 119 \mathrm{μs}\left({\color{gray}-0.809 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;zero_depth 10 entities $$20.6 \mathrm{ms} \pm 133 \mathrm{μs}\left({\color{gray}-0.237 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;zero_depth 25 entities $$21.1 \mathrm{ms} \pm 151 \mathrm{μs}\left({\color{gray}0.182 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;zero_depth 5 entities $$20.2 \mathrm{ms} \pm 127 \mathrm{μs}\left({\color{gray}0.574 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;zero_depth 50 entities $$25.3 \mathrm{ms} \pm 161 \mathrm{μs}\left({\color{gray}-3.283 \mathrm{\%}}\right) $$ Flame Graph

read_scaling_linkless

Function Value Mean Flame graphs
entity_by_id 1 entities $$20.0 \mathrm{ms} \pm 131 \mathrm{μs}\left({\color{gray}1.28 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id 10 entities $$20.0 \mathrm{ms} \pm 145 \mathrm{μs}\left({\color{gray}-0.093 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id 100 entities $$20.1 \mathrm{ms} \pm 143 \mathrm{μs}\left({\color{gray}1.58 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id 1000 entities $$20.5 \mathrm{ms} \pm 154 \mathrm{μs}\left({\color{gray}0.119 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id 10000 entities $$27.0 \mathrm{ms} \pm 257 \mathrm{μs}\left({\color{gray}0.500 \mathrm{\%}}\right) $$ Flame Graph

representative_read_entity

Function Value Mean Flame graphs
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/block/v/1 $$35.0 \mathrm{ms} \pm 306 \mathrm{μs}\left({\color{gray}-3.835 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/book/v/1 $$35.0 \mathrm{ms} \pm 305 \mathrm{μs}\left({\color{gray}-0.567 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/building/v/1 $$35.2 \mathrm{ms} \pm 448 \mathrm{μs}\left({\color{gray}-3.868 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/organization/v/1 $$35.5 \mathrm{ms} \pm 400 \mathrm{μs}\left({\color{gray}0.061 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/page/v/2 $$35.4 \mathrm{ms} \pm 452 \mathrm{μs}\left({\color{gray}1.41 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/person/v/1 $$35.7 \mathrm{ms} \pm 338 \mathrm{μs}\left({\color{gray}-1.059 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/playlist/v/1 $$34.8 \mathrm{ms} \pm 404 \mathrm{μs}\left({\color{gray}-3.940 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/song/v/1 $$34.1 \mathrm{ms} \pm 313 \mathrm{μs}\left({\color{lightgreen}-5.150 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/uk-address/v/1 $$34.5 \mathrm{ms} \pm 318 \mathrm{μs}\left({\color{lightgreen}-6.296 \mathrm{\%}}\right) $$ Flame Graph

representative_read_entity_type

Function Value Mean Flame graphs
get_entity_type_by_id Account ID: bf5a9ef5-dc3b-43cf-a291-6210c0321eba $$8.77 \mathrm{ms} \pm 58.5 \mathrm{μs}\left({\color{gray}-0.409 \mathrm{\%}}\right) $$ Flame Graph

representative_read_multiple_entities

Function Value Mean Flame graphs
entity_by_property traversal_paths=0 0 $$94.5 \mathrm{ms} \pm 750 \mathrm{μs}\left({\color{gray}0.256 \mathrm{\%}}\right) $$
entity_by_property traversal_paths=255 1,resolve_depths=inherit:1;values:255;properties:255;links:127;link_dests:126;type:true $$150 \mathrm{ms} \pm 775 \mathrm{μs}\left({\color{gray}-1.921 \mathrm{\%}}\right) $$
entity_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:0;properties:0;links:0;link_dests:0;type:false $$102 \mathrm{ms} \pm 849 \mathrm{μs}\left({\color{gray}0.185 \mathrm{\%}}\right) $$
entity_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:0;properties:0;links:1;link_dests:0;type:true $$113 \mathrm{ms} \pm 721 \mathrm{μs}\left({\color{gray}-0.288 \mathrm{\%}}\right) $$
entity_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:0;properties:2;links:1;link_dests:0;type:true $$120 \mathrm{ms} \pm 769 \mathrm{μs}\left({\color{gray}0.566 \mathrm{\%}}\right) $$
entity_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:2;properties:2;links:1;link_dests:0;type:true $$129 \mathrm{ms} \pm 702 \mathrm{μs}\left({\color{gray}-2.450 \mathrm{\%}}\right) $$
link_by_source_by_property traversal_paths=0 0 $$104 \mathrm{ms} \pm 792 \mathrm{μs}\left({\color{gray}-4.406 \mathrm{\%}}\right) $$
link_by_source_by_property traversal_paths=255 1,resolve_depths=inherit:1;values:255;properties:255;links:127;link_dests:126;type:true $$134 \mathrm{ms} \pm 709 \mathrm{μs}\left({\color{gray}-0.939 \mathrm{\%}}\right) $$
link_by_source_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:0;properties:0;links:0;link_dests:0;type:false $$112 \mathrm{ms} \pm 694 \mathrm{μs}\left({\color{gray}-2.848 \mathrm{\%}}\right) $$
link_by_source_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:0;properties:0;links:1;link_dests:0;type:true $$121 \mathrm{ms} \pm 692 \mathrm{μs}\left({\color{gray}-1.224 \mathrm{\%}}\right) $$
link_by_source_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:0;properties:2;links:1;link_dests:0;type:true $$124 \mathrm{ms} \pm 856 \mathrm{μs}\left({\color{gray}-0.132 \mathrm{\%}}\right) $$
link_by_source_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:2;properties:2;links:1;link_dests:0;type:true $$124 \mathrm{ms} \pm 711 \mathrm{μs}\left({\color{gray}0.369 \mathrm{\%}}\right) $$

scenarios

Function Value Mean Flame graphs
full_test query-limited $$182 \mathrm{ms} \pm 897 \mathrm{μs}\left({\color{gray}-0.700 \mathrm{\%}}\right) $$ Flame Graph
full_test query-unlimited $$197 \mathrm{ms} \pm 1.04 \mathrm{ms}\left({\color{red}9.34 \mathrm{\%}}\right) $$ Flame Graph
linked_queries query-limited $$108 \mathrm{ms} \pm 666 \mathrm{μs}\left({\color{red}151 \mathrm{\%}}\right) $$ Flame Graph
linked_queries query-unlimited $$599 \mathrm{ms} \pm 3.67 \mathrm{ms}\left({\color{red}10.3 \mathrm{\%}}\right) $$ Flame Graph

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/libs Relates to first-party libraries/crates/packages (area) area/tests New or updated tests type/eng > backend Owned by the @backend team

Development

Successfully merging this pull request may close these issues.

2 participants