fix(tesseract): Resolve join for hint-less member-expression measures#11136
fix(tesseract): Resolve join for hint-less member-expression measures#11136ovr wants to merge 3 commits into
Conversation
A dependency-free member-expression measure such as `count(*)`, in a
query with no dimensions or filters to seed the join, resolved an empty
join-hint set. That path calls `JoinGraph.buildJoin([])`, which returns
null, and the Rust bridge then fails to deserialize the missing
`JoinDefinitionStatic` ("invalid type: unit value, expected struct
JoinDefinitionStatic").
In the multi-fact join grouping, fall back to the measure's own cube when
its hint set is empty — but only for real, joinable cubes. View members
are left untouched: their join comes from the other query members, and
the view itself is not a joinable cube.
|
Claude finished @ovr's task in 44s —— View job Code ReviewVerdict: LGTM — focused, well-tested fix. 0 high, 0 medium, 2 low.
SummaryThe fix in The new integration test ( Low-severity notes1. let is_view = query_tools
.cube_evaluator()
.cube_from_path(cube_name.clone())
.ok()
.and_then(|cube| cube.static_data().is_view)
.unwrap_or(false);If 2. View detection happens per-measure ( Each empty-hint measure triggers an independent Nits
|
|
Claude finished @ovr's task in 37s —— View job Code ReviewVerdict: LGTM — focused fix with a tight regression test. 0 high, 0 medium, 2 low.
SummaryThe fix in The new integration test Low-severity notes1. let is_view = query_tools
.cube_evaluator()
.cube_from_path(cube_name.clone())
.ok()
.and_then(|cube| cube.static_data().is_view)
.unwrap_or(false);If 2. View detection happens per-measure ( Each empty-hint measure triggers an independent Nits
|
|
Claude finished @ovr's task in 32s —— View job Code ReviewVerdict: LGTM — focused fix with a tight regression test. 0 high, 0 medium, 2 low. Review details
SummaryThe fix in The new integration test Low-severity notes1. let is_view = query_tools
.cube_evaluator()
.cube_from_path(cube_name.clone())
.ok()
.and_then(|cube| cube.static_data().is_view)
.unwrap_or(false);If 2. View detection happens per-measure ( Each empty-hint measure triggers an independent Nits
|
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## master #11136 +/- ##
==========================================
- Coverage 83.63% 79.12% -4.51%
==========================================
Files 256 473 +217
Lines 79019 96514 +17495
Branches 0 3558 +3558
==========================================
+ Hits 66085 76368 +10283
- Misses 12934 19628 +6694
- Partials 0 518 +518
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
A dependency-free member-expression measure such as
count(*), in a query with no dimensions or filters to seed the join, resolved an empty join-hint set. That path callsJoinGraph.buildJoin([]), which returns null, and the Rust bridge then fails to deserialize the missingJoinDefinitionStatic("invalid type: unit value, expected struct JoinDefinitionStatic").In the multi-fact join grouping, fall back to the measure's own cube when its hint set is empty — but only for real, joinable cubes. View members are left untouched: their join comes from the other query members, and the view itself is not a joinable cube.