Unreal SDK query builder by JasonAtClockwork · Pull Request #4810 · clockworklabs/SpacetimeDB

Description of Changes

  • Added a client-side query builder for the Unreal SDK
    • Added typed query-builder subscriptions for Unreal C++ via SubscriptionBuilder.AddQuery(...).Subscribe()
    • Added generated Blueprint query-builder support with source query nodes, column nodes, predicates, Where, AddQuery, and Subscribe
    • Added Blueprint autocasts at the AddQuery boundary so source-specific Blueprint queries can connect cleanly into the generic subscription builder for better devex in Blueprint
  • Synced the Unreal query-builder core with the C++ module implementation
    • Updated the copied Unreal core query-builder headers to match the shared C++
    • Moved Unreal-specific literal/type adapters out of the shared core copy and into Unreal-specific expansion code
  • Added Unreal SDK test coverage and documentation for the new query-builder surface
    • Added new test harnesses to start to match the View/ViewPk tests
  • Added documentation for the Unreal query builder

API and ABI breaking changes

  • No intended API or ABI breaking changes to released Unreal SDK behavior
  • Adds a new public client-side query-builder API to the Unreal SDK for C++ and Blueprint
  • Raw SQL subscriptions remain available

Expected complexity level and risk

3 - Adds new query-builder surface with large changes to the code-gen, the risk here is keeping the C++ module core mirrored to the SDK in the future

Testing

What I've done so far:

  • Updated and ran the following tests:
    • TestClientEditor
    • TestViewClientEditor
    • TestViewPkClientEditor
  • Ran the Unreal harness suites covering the query-builder client paths
  • Verified the generated Unreal query-builder surface in both C++ and Blueprint testing supported fields with a small sample project

Should be done at least once by a reviewer:

  • Re-run the full sdk-unreal-test-harness as it's disabled in CI
  • Play with the C++ and Blueprint versions in a small Unreal project