Skip to content

Define experimental RowFn contracts - #9386

Open
connortsui20 wants to merge 7 commits into
developfrom
ct/row-fn-types
Open

Define experimental RowFn contracts#9386
connortsui20 wants to merge 7 commits into
developfrom
ct/row-fn-types

Conversation

@connortsui20

@connortsui20 connortsui20 commented Aug 12, 2026

Copy link
Copy Markdown
Member

Rationale for this change

Defines the unstable author-facing RowFn contracts. The execution backend is split into #9353.

What changes are included in this PR?

Adds the unstable_row_fns feature boundary, RowFn and visitor traits, typed input and output contracts, tuple adapters, planning, and the blanket ScalarFnVTable scaffold. execute_rows remains a temporary error until #9353 adds the backend.

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

Adds vortex_array::scalar_fn::unstable::row behind the non-default unstable_row_fns feature. The API has no compatibility guarantees.

@codspeed-hq

codspeed-hq Bot commented Aug 12, 2026

Copy link
Copy Markdown

Merging this PR will degrade performance by 11.89%

⚠️ 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
✅ 1992 untouched benchmarks
⏩ 89 skipped benchmarks1

Warning

Please fix the performance issues or acknowledge them on CodSpeed.

Performance Changes

Mode Benchmark BASE HEAD Efficiency
Simulation compress_fsst[(1000, 64, 8)] 1 ms 1.2 ms -11.94%
WallTime words_gather_scalar[65536] 8.3 µs 9.4 µs -11.83%

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-types (da08e03) with develop (c17e058)

Open in CodSpeed

Footnotes

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

@connortsui20 connortsui20 added the changelog/feature A new feature label Aug 12, 2026
@connortsui20
connortsui20 marked this pull request as ready for review August 12, 2026 19:08
@connortsui20
connortsui20 marked this pull request as draft August 12, 2026 19:24
@connortsui20
connortsui20 marked this pull request as ready for review August 12, 2026 19:25
@connortsui20
connortsui20 marked this pull request as draft August 12, 2026 20:26
@connortsui20
connortsui20 marked this pull request as ready for review August 12, 2026 23:50
Comment thread vortex-array/src/scalar_fn/unstable/row/types/element/input.rs Outdated
Comment thread vortex-array/src/scalar_fn/unstable/row/types/sink.rs Outdated
Comment thread vortex-array/src/scalar_fn/unstable/row/types/sink.rs Outdated
Comment thread vortex-array/src/scalar_fn/unstable/row/types/sink.rs Outdated

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.

Can we name this differently to plan. Its more like a Execution Receiver (or accept)?

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.

I feel like these names are not that much better, really what we want to express is that it is almost like a type checking phase, but it also verifies the flags.

Maybe VerifyRows or VerifyVisitor or something similar?

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.

Sure just not plan

@connortsui20 connortsui20 Aug 13, 2026

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.

Actually no it does do more than verification, it plans how to execute everything (do we use dense, do we prefilter, how do we handle errors, etc). Though I agree that plan can be a bit misleading

Comment thread vortex-array/src/scalar_fn/unstable/row/visitor/plan.rs Outdated
Comment thread vortex-array/src/scalar_fn/unstable/row/visitor/plan.rs
Comment thread vortex-array/src/scalar_fn/unstable/row/row_fn.rs Outdated
Comment thread vortex-array/src/scalar_fn/unstable/row/mod.rs
Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

changelog/feature A new feature

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants