Skip to content

Conversation

@rekhoff
Copy link
Contributor

@rekhoff rekhoff commented Jan 7, 2026

Description of Changes

This PR adds a regression test covering nullable reference-type view returns in C# modules (e.g. Account? where Account is a class), as reported in #3962.

public static Account? MyAccount(ViewContext ctx)
  • Updated the C# regression-test server module to include a reference-type table and views that exercise the RefOption path:
  • A new public reference-type table row:
[SpacetimeDB.Table(Name = "account", Public = true)]
public partial class Account { ... }
  • A public at-most-one view that returns a nullable reference type (Account?) via Find(...):
[SpacetimeDB.View(Name = "my_account", Public = true)]
public static Account? MyAccount(ViewContext ctx)
{
    return ctx.Db.account.Identity.Find(ctx.Sender) as Account;
}
  • A second public view that returns null to ensure the “empty result” case is exercised:
[SpacetimeDB.View(Name = "my_account_missing", Public = true)]
public static Account? MyAccountMissing(ViewContext ctx) => null;
  • Updated ClientConnected to ensure an Account row exists for the connecting identity so the “one row” case is deterministic.
  • Updated the C# regression-test client to:
    • Subscribe to the new views:
      • SELECT * FROM my_account
      • SELECT * FROM my_account_missing
    • Assert correct semantics for nullable reference-type view returns:
      • MyAccount.Count == 1
      • MyAccountMissing.Count == 0
    • Updated the regression-test server project to use local C# runtime/codegen project references so the regression module exercises the in-repo generator/runtime behavior (instead of the published SpacetimeDB.Runtime package).

API and ABI breaking changes

None.

  • No changes to public module schema/wire format semantics beyond adding regression-test-only tables/views.
  • No behavior changes outside the C# regression test module + harness.

Expected complexity level and risk

2 - Low

  • Changes are isolated to regression tests and project wiring.
  • The scenario specifically guards the nullable reference-type “Option-like view return” path against regressions.

Testing

  • Ran C# regression tests with no failures in new View tests

@rekhoff rekhoff changed the title Enable RefOption returns from Views and add regression tests Enable RefOption returns from Views to support Views returning a single class Jan 7, 2026
@rekhoff rekhoff self-assigned this Jan 7, 2026
@rekhoff rekhoff requested a review from jdetter January 7, 2026 20:51
@rekhoff rekhoff marked this pull request as ready for review January 7, 2026 20:51
Signed-off-by: Ryan <r.ekhoff@clockworklabs.io>
Signed-off-by: Ryan <r.ekhoff@clockworklabs.io>
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