Commit Graph

12 Commits

Author SHA1 Message Date
rekhoff 39f01289e5 C# implementation of Transactions for Procedures (#3809)
# Description of Changes

Implements the C# equivalent of #3638

This implement uses inheritance, where abstract base classes (like
`ProcedureContextBase` in `ProcedureContext.cs`) store the core of the
implementation, and then generated wrappers (like `ProcedureContext` in
the generated FFI.cs file) inherit from them.

For error handling, we work like Rust's implementation of `Result<T,E>`
but we require `where E : Exception` because of how exceptions work in
C#. Transaction-level failures come back as a `TxOutcome` and user
errors should follow the `Result<T,E>` pattern. In this implementation,
we have `UnwrapOrThrow()` throws exceptions directly because of C#'s
error handling pattern.

Unlike the Rust implementation's direct `Result` propagation, we are
using an `AbortGuard` pattern (in `ProcedureContext.cs`) for exception
handling, which uses `IDisposable` for automatic cleanup.

Most changes should have fairly similar Rust-equivalents beyond that.
For module authors, the changes here allow for the transation logic to
work like:
```csharp
ctx.TryWithTx<ResultType, Exception>(tx => {
    // transaction logic
    return Result<ResultType, Exception>.Ok(result);
});
```
This change includes a number of tests added to the
`sdks/csharp/examples~/regression-tests/`'s `server` and `client` to
validate the behavior of the changes. `server` changes provide further
usage examples for module authors.

# API and ABI breaking changes

Should not be a breaking change

# Expected complexity level and risk

2

# Testing

- [x] Created Regression Tests that show transitions in procedures
working in various ways, all of which pass.
2025-12-18 18:41:47 +00:00
Noa 207e559859 Noa/ts module host changes (#3388)
# Description of Changes

Host-side changes extracted from #3327 

I added AUTO_INC_OVERFLOW even though we don't currently ever return it,
in order to future-proof so it's already there when we start emitting
it.

Prepublish was failing because it was expecting a wasm module
unconditionally, so now it takes ?host_type.

I tweaked JS deser to accept null/undefined when the unit type or an
option type is expected.

I switched to bsatn, because the native sats->js translator wasn't
matching what js was expecting.

I renamed the sys module: my thinking is that `spacetime:` as a scheme
will help disambiguate it, and maybe it could also be used for IMC in
the future or something? And I believe we had discussed wanting this to
be versioned, similar to wasm imports.

Trying to get a borrowed str from deserialize_js doesn't work, because
v8 strings don't store utf8.

# Testing

<!-- Describe any testing you've done, and any testing you'd like your
reviewers to do,
so that you're confident that all the changes work as expected! -->

- [x] All this was done in the course of getting an actual typescript
module to successfully publish.
2025-10-10 18:25:26 +00:00
Mazdak Farrokhzad 5ad2a2efe8 add signature of datastore_update_bsatn host call (#2102) 2025-01-13 16:41:39 +00:00
Jeremie Pelletier 02b70d5c94 c# client generate (#1707) 2024-10-04 04:12:15 +00:00
SteveGibson 14e509859e Stopwatch and reducer rng (#1681)
Signed-off-by: Ingvar Stepanyan <me@rreverser.com>
Co-authored-by: Steve Boytsun <steve@clockwokrlabs.io>
Co-authored-by: Ingvar Stepanyan <me@rreverser.com>
2024-09-18 10:19:32 +00:00
Mazdak Farrokhzad da71d0f9b1 WASM ABI: insert -> datastore_insert_bsatn & impl new semantics (#1639) 2024-09-05 19:32:26 +00:00
Mazdak Farrokhzad b62569462d WASM ABI: delete_by_rel -> datastore_delete_all_by_eq_bsatn (#1638) 2024-09-02 17:43:40 +00:00
Mazdak Farrokhzad 2b69583f76 WASM ABI: get_table_id -> table_id_from_name (#1634) 2024-08-27 22:33:47 +00:00
Mazdak Farrokhzad 1dd1e633f3 WASM ABI: implement row_iter_bsatn_advance & row_iter_bsatn_close (#1622) 2024-08-27 22:01:06 +00:00
Mazdak Farrokhzad 4c086fef96 [WASM ABI 1.0] impl __call_reducer__ & __describe_module__ using bytes_sink_write (#1615) 2024-08-27 15:48:40 +00:00
Mazdak Farrokhzad 9ea5a2f243 [WASM ABI 1.0] impl __call_reducer__ using bytes_source_read (#1609) 2024-08-20 09:33:29 +00:00
Ingvar Stepanyan 6f0f20bf7a Restructure C# SpacetimeDB runtime (#1455) 2024-07-12 17:12:21 +00:00