mirror of
https://github.com/clockworklabs/SpacetimeDB.git
synced 2026-05-12 10:48:19 -04:00
9989416cd3
# 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. On the host side, we handle this naively: we will perform the query, and we will act as though the view has a read dependency on the tables in the query. In follow up PRs we can make this more efficient. # 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 I've done manual testing of this with a version of the typescript bindings that returns queries.