Skip to content

Simplify RowFn execution contracts - #9496

Merged
connortsui20 merged 2 commits into
developfrom
ct/row-fn-cleanup
Aug 20, 2026
Merged

Simplify RowFn execution contracts#9496
connortsui20 merged 2 commits into
developfrom
ct/row-fn-cleanup

Conversation

@connortsui20

Copy link
Copy Markdown
Member

Rationale for this change

Separates the mechanical RowFn cleanup from batch execution in #9450.

What changes are included in this PR?

Renames the fallibility constants to the positive INFALLIBLE contract, removes RowExecution and DenseWithRetry, and returns arrays directly from the executors. The tuple guard checks every decoded view length before unchecked row access because ViewLen::len returns one member length after its debug assertion.

What APIs are changed? Are there any user-facing changes?

Renames the unstable RowFn::FALLIBLE and SinkResult::FALLIBLE associated constants to INFALLIBLE. There are no stable API changes.

Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
@@ -74,7 +74,7 @@ impl<F: RowFn> ScalarFnVTable for F {
}

fn is_fallible(&self, _options: &Self::Options) -> bool {

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

@joseph-isaacs should we change this to is_infallible

@codspeed-hq

codspeed-hq Bot commented Aug 19, 2026

Copy link
Copy Markdown

Merging this PR will degrade performance by 20.48%

⚠️ Unknown Walltime execution environment detected

Using the Walltime instrument on standard Hosted Runners will lead to inconsistent data.

For the most accurate results, we recommend using CodSpeed Macro Runners: bare-metal machines fine-tuned for performance measurement consistency.

❌ 2 regressed benchmarks
✅ 1954 untouched benchmarks
⏩ 517 skipped benchmarks1

Warning

Please fix the performance issues or acknowledge them on CodSpeed.

Performance Changes

Mode Benchmark BASE HEAD Efficiency
Simulation take_map[(0.1, 1.0)] 245.6 µs 325.7 µs -24.57%
Simulation take_map[(0.1, 0.5)] 161.5 µs 192.6 µs -16.17%

Tip

Investigate this regression by commenting @codspeedbot fix this regression on this PR, or directly use the CodSpeed MCP with your agent.


Comparing ct/row-fn-cleanup (aaf8e52) with develop (b81420e)

Open in CodSpeed

Footnotes

  1. 517 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.

let views = Args::views_if_no_consts(&columns);
if let Some(views) = views {
if Args::ARITY != 0 && views.len() != row_count {
if !Args::view_lens_match(&views, row_count) {

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

We would rather this return false and construct the error than for views.len to have to panic because one of the views doesn't have the same length as the others

@@ -74,7 +74,7 @@ impl<F: RowFn> ScalarFnVTable for F {
}

fn is_fallible(&self, _options: &Self::Options) -> bool {

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.

Yes

@connortsui20
connortsui20 merged commit b748502 into develop Aug 20, 2026
114 of 117 checks passed
@connortsui20
connortsui20 deleted the ct/row-fn-cleanup branch August 20, 2026 11:43
connortsui20 added a commit that referenced this pull request Aug 20, 2026
## Rationale for this change

- Stacked on: #9496
- Tracking issue: #9130
- API tracking: #9129
- Epic: #9128

Connects the row execution layer to the scalar-function adapter.

## What changes are included in this PR?

Adds constant handling, strict validity propagation, dense execution,
direct valid-row execution for supporting sinks, and output validation.
A partially valid signature that cannot execute directly on valid rows
panics in this layer.

Encoding-aware reductions remain in #9347. Filter-and-scatter remains in
#9349. Owned valid-row execution and its `Default` bound are in #9500.
Nullary execution is in #9469.

## What APIs are changed? Are there any user-facing changes?

Adds execution internals within the existing `unstable_row_fns`
boundary. There are no stable API changes.

---------

Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
Signed-off-by: Connor Tsui <connor@spiraldb.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

changelog/chore A trivial change

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants