Skip to content

Conversation

@jsdt
Copy link
Contributor

@jsdt jsdt commented Nov 18, 2025

Description of Changes

This adds some changes for how we return data from view functions. Originally, we interpreted the output of a view function as a bsatn encoding of an array of rows. Since we also want to be able to return queries from view functions, we need to be able to return different types too. At this point, this is effectively not a functional change, since we don't use the new format, and we don't actually try to parse the new format.

This introduces a new format for view returns, which is a ViewResultHeader, potentially followed by additional data. For example, if a view were returning rows directly, it would write a ViewResultHeader::RowData, followed by an array of rows. Note that we could have given that object a byte array with the rows instead of using a header an a separate object, but that would force us create an extra copy when encoding and when decoding.

To make this backward compatible with existing views, we have a different way to return the new format. For v8 views, if they return a byte array, we assume it is the old format. If they return an object, we expect the data field of that object to be the actual return data.

For wasm views, we interpret a return code of 2 to mean that it uses the new format.

There will be follow up PRs to use the new return type, and to actually handle the new format (and queries) on the host side.

API and ABI breaking changes

This is not a breaking change, but it does make the ABI more complicated (specifically to avoid breaking it).

Expected complexity level and risk

1.5. This should not affect the existing return style.

Testing

@jsdt jsdt marked this pull request as ready for review November 19, 2025 18:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants