diff --git a/crates/bindings-csharp/SpacetimeSharpSATS.sln b/crates/bindings-csharp/SpacetimeSharpSATS.sln index bfa65de449..4879396a79 100644 --- a/crates/bindings-csharp/SpacetimeSharpSATS.sln +++ b/crates/bindings-csharp/SpacetimeSharpSATS.sln @@ -26,6 +26,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "spacetimedb-quickstart-serv EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "sdk-tests", "sdk-tests", "{D39E8203-6C3C-4C4B-9C7D-7911AA19D7CC}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "benchmarks-cs", "..\..\modules\benchmarks-cs\benchmarks-cs.csproj", "{50E1AAE1-C42C-4C2F-B708-5190B0362165}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -61,6 +63,10 @@ Global {FDACD960-168E-44F9-B036-2E29EA391BE7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {FDACD960-168E-44F9-B036-2E29EA391BE7}.Release|Any CPU.ActiveCfg = Release|Any CPU {FDACD960-168E-44F9-B036-2E29EA391BE7}.Release|Any CPU.Build.0 = Release|Any CPU + {50E1AAE1-C42C-4C2F-B708-5190B0362165}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {50E1AAE1-C42C-4C2F-B708-5190B0362165}.Debug|Any CPU.Build.0 = Debug|Any CPU + {50E1AAE1-C42C-4C2F-B708-5190B0362165}.Release|Any CPU.ActiveCfg = Release|Any CPU + {50E1AAE1-C42C-4C2F-B708-5190B0362165}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -69,6 +75,7 @@ Global {5393711C-44B0-4752-B8D0-852C73D6866F} = {D39E8203-6C3C-4C4B-9C7D-7911AA19D7CC} {40F1C615-EDD9-463F-A012-B232F6710FA5} = {D39E8203-6C3C-4C4B-9C7D-7911AA19D7CC} {FDACD960-168E-44F9-B036-2E29EA391BE7} = {D39E8203-6C3C-4C4B-9C7D-7911AA19D7CC} + {50E1AAE1-C42C-4C2F-B708-5190B0362165} = {D39E8203-6C3C-4C4B-9C7D-7911AA19D7CC} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {8A5DE392-1C9D-4806-B6C7-EDD4D33C5D1E} diff --git a/modules/benchmarks-cs/StdbModule.csproj b/modules/benchmarks-cs/benchmarks-cs.csproj similarity index 95% rename from modules/benchmarks-cs/StdbModule.csproj rename to modules/benchmarks-cs/benchmarks-cs.csproj index b39fa5240b..78bed9e34c 100644 --- a/modules/benchmarks-cs/StdbModule.csproj +++ b/modules/benchmarks-cs/benchmarks-cs.csproj @@ -1,6 +1,7 @@ + StdbModule net8.0 wasi-wasm enable diff --git a/modules/benchmarks-cs/circles.cs b/modules/benchmarks-cs/circles.cs index c13b46eb17..b620c1d375 100644 --- a/modules/benchmarks-cs/circles.cs +++ b/modules/benchmarks-cs/circles.cs @@ -1,7 +1,7 @@ - using SpacetimeDB; namespace Benchmarks; + public static partial class circles { [SpacetimeDB.Type] @@ -14,7 +14,8 @@ public partial struct Vector2(float x, float y) [SpacetimeDB.Table] public partial struct Entity(uint id, float x, float y, uint mass) { - [SpacetimeDB.Column(ColumnAttrs.PrimaryKeyAuto)] + [AutoInc] + [PrimaryKey] public uint id = id; public Vector2 position = new(x, y); public uint mass = mass; @@ -23,10 +24,10 @@ public partial struct Entity(uint id, float x, float y, uint mass) [SpacetimeDB.Table] public partial struct Circle(uint entity_id, uint player_id, float x, float y, float magnitude) { - [SpacetimeDB.Column(ColumnAttrs.PrimaryKey)] + [PrimaryKey] public uint entity_id = entity_id; - [SpacetimeDB.Column(ColumnAttrs.Indexed)] + [Indexed] public uint player_id = player_id; public Vector2 direction = new(x, y); @@ -37,7 +38,7 @@ public partial struct Circle(uint entity_id, uint player_id, float x, float y, f [SpacetimeDB.Table] public partial struct Food(uint entity_id) { - [SpacetimeDB.Column(ColumnAttrs.PrimaryKey)] + [PrimaryKey] public uint entity_id = entity_id; } @@ -59,44 +60,44 @@ public static bool IsOverlapping(Entity entity1, Entity entity2) } [SpacetimeDB.Reducer] - public static void insert_bulk_entity(uint count) + public static void insert_bulk_entity(ReducerContext ctx, uint count) { for (uint id = 0; id < count; id++) { - new Entity(0, id, id + 5, id * 5).Insert(); + ctx.Db.Entity.Insert(new(0, id, id + 5, id * 5)); } Log.Info($"INSERT ENTITY: {count}"); } [SpacetimeDB.Reducer] - public static void insert_bulk_circle(uint count) + public static void insert_bulk_circle(ReducerContext ctx, uint count) { for (uint id = 0; id < count; id++) { - new Circle(id, id, id, id + 5, id * 5).Insert(); + ctx.Db.Circle.Insert(new(id, id, id, id + 5, id * 5)); } Log.Info($"INSERT CIRCLE: {count}"); } [SpacetimeDB.Reducer] - public static void insert_bulk_food(uint count) + public static void insert_bulk_food(ReducerContext ctx, uint count) { for (uint id = 1; id <= count; id++) { - new Food(id).Insert(); + ctx.Db.Food.Insert(new(id)); } Log.Info($"INSERT FOOD: {count}"); } [SpacetimeDB.Reducer] - public static void cross_join_all(uint expected) + public static void cross_join_all(ReducerContext ctx, uint expected) { uint count = 0; - foreach (Circle circle in Circle.Iter()) + foreach (Circle circle in ctx.Db.Circle.Iter()) { - foreach (Entity entity in Entity.Iter()) + foreach (Entity entity in ctx.Db.Entity.Iter()) { - foreach (Food food in Food.Iter()) + foreach (Food food in ctx.Db.Food.Iter()) { count++; } @@ -107,21 +108,21 @@ public static void cross_join_all(uint expected) } [SpacetimeDB.Reducer] - public static void cross_join_circle_food(uint expected) + public static void cross_join_circle_food(ReducerContext ctx, uint expected) { uint count = 0; - foreach (Circle circle in Circle.Iter()) + foreach (Circle circle in ctx.Db.Circle.Iter()) { - if (Entity.FindByid(circle.entity_id) is not { } circle_entity) + if (ctx.Db.Entity.FindByid(circle.entity_id) is not { } circle_entity) { continue; } - foreach (Food food in Food.Iter()) + foreach (Food food in ctx.Db.Food.Iter()) { count++; Entity food_entity = - Entity.FindByid(food.entity_id) + ctx.Db.Entity.FindByid(food.entity_id) ?? throw new Exception($"Entity not found: {food.entity_id}"); Bench.BlackBox(IsOverlapping(circle_entity, food_entity)); } @@ -131,21 +132,21 @@ public static void cross_join_circle_food(uint expected) } [SpacetimeDB.Reducer] - public static void init_game_circles(uint initial_load) + public static void init_game_circles(ReducerContext ctx, uint initial_load) { Load load = new(initial_load); - insert_bulk_food(load.initial_load); - insert_bulk_entity(load.initial_load); - insert_bulk_circle(load.small_table); + insert_bulk_food(ctx, load.initial_load); + insert_bulk_entity(ctx, load.initial_load); + insert_bulk_circle(ctx, load.small_table); } [SpacetimeDB.Reducer] - public static void run_game_circles(uint initial_load) + public static void run_game_circles(ReducerContext ctx, uint initial_load) { Load load = new(initial_load); - cross_join_circle_food(initial_load * load.small_table); - cross_join_all(initial_load * initial_load * load.small_table); + cross_join_circle_food(ctx, initial_load * load.small_table); + cross_join_all(ctx, initial_load * initial_load * load.small_table); } } diff --git a/modules/benchmarks-cs/ia_loop.cs b/modules/benchmarks-cs/ia_loop.cs index 56a6afaf50..60754cdcc7 100644 --- a/modules/benchmarks-cs/ia_loop.cs +++ b/modules/benchmarks-cs/ia_loop.cs @@ -7,7 +7,7 @@ public static partial class ia_loop [SpacetimeDB.Table] public partial struct Velocity(uint entity_id, float x, float y, float z) { - [SpacetimeDB.Column(ColumnAttrs.PrimaryKey)] + [PrimaryKey] public uint entity_id = entity_id; public float x = x; public float y = y; @@ -17,7 +17,7 @@ public partial struct Velocity(uint entity_id, float x, float y, float z) [SpacetimeDB.Table] public partial struct Position(uint entity_id, float x, float y, float z) { - [SpacetimeDB.Column(ColumnAttrs.PrimaryKey)] + [PrimaryKey] public uint entity_id = entity_id; public float x = x; public float y = y; @@ -52,7 +52,7 @@ public partial struct GameEnemyAiAgentState( AgentAction action ) { - [SpacetimeDB.Column(ColumnAttrs.PrimaryKey)] + [PrimaryKey] public ulong entity_id = entity_id; public List last_move_timestamps = last_move_timestamps; public ulong next_action_timestamp = next_action_timestamp; @@ -62,7 +62,7 @@ AgentAction action [SpacetimeDB.Table] public partial struct GameTargetableState(ulong entity_id, long quad) { - [SpacetimeDB.Column(ColumnAttrs.PrimaryKey)] + [PrimaryKey] public ulong entity_id = entity_id; public long quad = quad; } @@ -70,10 +70,10 @@ public partial struct GameTargetableState(ulong entity_id, long quad) [SpacetimeDB.Table] public partial struct GameLiveTargetableState(ulong entity_id, long quad) { - [SpacetimeDB.Column(ColumnAttrs.Unique)] + [Unique] public ulong entity_id = entity_id; - [SpacetimeDB.Column(ColumnAttrs.Indexed)] + [Indexed] public long quad = quad; } @@ -85,10 +85,10 @@ public partial struct GameMobileEntityState( ulong timestamp ) { - [SpacetimeDB.Column(ColumnAttrs.PrimaryKey)] + [PrimaryKey] public ulong entity_id = entity_id; - [SpacetimeDB.Column(ColumnAttrs.Indexed)] + [Indexed] public int location_x = location_x; public int location_y = location_y; public ulong timestamp = timestamp; @@ -97,7 +97,7 @@ ulong timestamp [SpacetimeDB.Table] public partial struct GameEnemyState(ulong entity_id, int herd_id) { - [SpacetimeDB.Column(ColumnAttrs.PrimaryKey)] + [PrimaryKey] public ulong entity_id = entity_id; public int herd_id = herd_id; } @@ -121,7 +121,7 @@ public partial struct GameHerdCache( int roaming_distance ) { - [SpacetimeDB.Column(ColumnAttrs.PrimaryKey)] + [PrimaryKey] public int id = id; public uint dimension_id = dimension_id; public int current_population = current_population; @@ -132,30 +132,30 @@ int roaming_distance } [SpacetimeDB.Reducer] - public static void InsertBulkPosition(uint count) + public static void InsertBulkPosition(ReducerContext ctx, uint count) { for (uint id = 0; id < count; id++) { - new Position(id, id, id + 5, id * 5).Insert(); + ctx.Db.Position.Insert(new(id, id, id + 5, id * 5)); } Log.Info($"INSERT POSITION: {count}"); } [SpacetimeDB.Reducer] - public static void InsertBulkVelocity(uint count) + public static void InsertBulkVelocity(ReducerContext ctx, uint count) { for (uint id = 0; id < count; id++) { - new Velocity(id, id, id + 5, id * 5).Insert(); + ctx.Db.Velocity.Insert(new(id, id, id + 5, id * 5)); } Log.Info($"INSERT VELOCITY: {count}"); } [SpacetimeDB.Reducer] - public static void update_position_all(uint expected) + public static void update_position_all(ReducerContext ctx, uint expected) { uint count = 0; - foreach (Position position in Position.Iter()) + foreach (Position position in ctx.Db.Position.Iter()) { Position newPosition = position; @@ -163,19 +163,19 @@ public static void update_position_all(uint expected) newPosition.y += position.vy; newPosition.z += position.vz; - Position.UpdateByentity_id(position.entity_id, newPosition); + ctx.Db.Position.UpdateByentity_id(position.entity_id, newPosition); count++; } Log.Info($"UPDATE POSITION ALL: {expected}, processed: {count}"); } [SpacetimeDB.Reducer] - public static void update_position_with_velocity(uint expected) + public static void update_position_with_velocity(ReducerContext ctx, uint expected) { uint count = 0; - foreach (Velocity velocity in Velocity.Iter()) + foreach (Velocity velocity in ctx.Db.Velocity.Iter()) { - if (Position.FindByentity_id(velocity.entity_id) is not { } position) + if (ctx.Db.Position.FindByentity_id(velocity.entity_id) is not { } position) { continue; } @@ -184,49 +184,49 @@ public static void update_position_with_velocity(uint expected) position.y += velocity.y; position.z += velocity.z; - Position.UpdateByentity_id(position.entity_id, position); + ctx.Db.Position.UpdateByentity_id(position.entity_id, position); count++; } Log.Info($"UPDATE POSITION BY VELOCITY: {expected}, processed: {count}"); } [SpacetimeDB.Reducer] - public static void insert_world(ulong players) + public static void insert_world(ReducerContext ctx, ulong players) { for (ulong i = 0; i < players; i++) { ulong next_action_timestamp = (i & 2) == 2 ? MomentMilliseconds() + 2000 : MomentMilliseconds(); - new GameEnemyAiAgentState( - i, - [i, 0, i * 2], - next_action_timestamp, - AgentAction.Idle - ).Insert(); + ctx.Db.GameEnemyAiAgentState.Insert( + new(i, [i, 0, i * 2], next_action_timestamp, AgentAction.Idle) + ); - new GameLiveTargetableState(i, (long)i).Insert(); + ctx.Db.GameLiveTargetableState.Insert(new(i, (long)i)); - new GameTargetableState(i, (long)i).Insert(); + ctx.Db.GameTargetableState.Insert(new(i, (long)i)); - new GameMobileEntityState(i, (int)i, (int)i, next_action_timestamp).Insert(); + ctx.Db.GameMobileEntityState.Insert(new(i, (int)i, (int)i, next_action_timestamp)); - new GameEnemyState(i, (int)i).Insert(); + ctx.Db.GameEnemyState.Insert(new(i, (int)i)); - new GameHerdCache( - (int)i, - (uint)i, - (int)(i * 2), - new SmallHexTile((int)i, (int)i, (uint)(i * 2)), - (int)(i * 4), - i, - (int)i - ).Insert(); + ctx.Db.GameHerdCache.Insert( + new( + (int)i, + (uint)i, + (int)(i * 2), + new SmallHexTile((int)i, (int)i, (uint)(i * 2)), + (int)(i * 4), + i, + (int)i + ) + ); } Log.Info($"INSERT WORLD PLAYERS: {players}"); } public static List GetTargetablesNearQuad( + ReducerContext ctx, ulong entity_id, ulong num_players ) @@ -235,10 +235,12 @@ ulong num_players for (ulong id = entity_id; id < num_players; id++) { - foreach (GameLiveTargetableState t in GameLiveTargetableState.FilterByquad((long)id)) + foreach ( + GameLiveTargetableState t in ctx.Db.GameLiveTargetableState.FilterByquad((long)id) + ) { result.Add( - GameTargetableState.FindByentity_id(t.entity_id) + ctx.Db.GameTargetableState.FindByentity_id(t.entity_id) ?? throw new Exception("Identity not found") ); } @@ -250,6 +252,7 @@ ulong num_players private const int MAX_MOVE_TIMESTAMPS = 20; public static void MoveAgent( + ReducerContext ctx, ref GameEnemyAiAgentState agent, SmallHexTile agent_coord, ulong current_time_ms @@ -258,9 +261,9 @@ ulong current_time_ms ulong entity_id = agent.entity_id; GameEnemyState enemy = - GameEnemyState.FindByentity_id(entity_id) + ctx.Db.GameEnemyState.FindByentity_id(entity_id) ?? throw new Exception("GameEnemyState Entity ID not found"); - GameEnemyState.UpdateByentity_id(entity_id, enemy); + ctx.Db.GameEnemyState.UpdateByentity_id(entity_id, enemy); agent.next_action_timestamp = current_time_ms + 2000; @@ -271,30 +274,31 @@ ulong current_time_ms } GameTargetableState targetable = - GameTargetableState.FindByentity_id(entity_id) + ctx.Db.GameTargetableState.FindByentity_id(entity_id) ?? throw new Exception("GameTargetableState Entity ID not found"); int new_hash = targetable.quad.GetHashCode(); targetable.quad = new_hash; - GameTargetableState.UpdateByentity_id(entity_id, targetable); + ctx.Db.GameTargetableState.UpdateByentity_id(entity_id, targetable); - if (GameLiveTargetableState.FindByentity_id(entity_id) is not null) + if (ctx.Db.GameLiveTargetableState.FindByentity_id(entity_id) is not null) { - GameLiveTargetableState.UpdateByentity_id(entity_id, new(entity_id, new_hash)); + ctx.Db.GameLiveTargetableState.UpdateByentity_id(entity_id, new(entity_id, new_hash)); } GameMobileEntityState mobile_entity = - GameMobileEntityState.FindByentity_id(entity_id) + ctx.Db.GameMobileEntityState.FindByentity_id(entity_id) ?? throw new Exception("GameMobileEntityState Entity ID not found"); mobile_entity.location_x += 1; mobile_entity.location_y += 1; mobile_entity.timestamp = MomentMilliseconds(); - GameEnemyAiAgentState.UpdateByentity_id(entity_id, agent); + ctx.Db.GameEnemyAiAgentState.UpdateByentity_id(entity_id, agent); - GameMobileEntityState.UpdateByentity_id(entity_id, mobile_entity); + ctx.Db.GameMobileEntityState.UpdateByentity_id(entity_id, mobile_entity); } public static void AgentLoop( + ReducerContext ctx, GameEnemyAiAgentState agent, GameTargetableState agent_targetable, List surrounding_agents, @@ -304,29 +308,29 @@ ulong current_time_ms ulong entity_id = agent.entity_id; IEnumerable coordinates = - GameMobileEntityState.FilterByentity_id(entity_id) + ctx.Db.GameMobileEntityState.FilterByentity_id(entity_id) ?? throw new Exception("GameMobileEntityState Entity ID not found"); GameEnemyState agent_entity = - GameEnemyState.FindByentity_id(entity_id) + ctx.Db.GameEnemyState.FindByentity_id(entity_id) ?? throw new Exception("GameEnemyState Entity ID not found"); GameHerdCache agent_herd = - GameHerdCache.FindByid(agent_entity.herd_id) + ctx.Db.GameHerdCache.FindByid(agent_entity.herd_id) ?? throw new Exception("GameHerdCache Entity ID not found"); SmallHexTile agent_herd_coordinates = agent_herd.location; - MoveAgent(ref agent, agent_herd_coordinates, current_time_ms); + MoveAgent(ctx, ref agent, agent_herd_coordinates, current_time_ms); } [SpacetimeDB.Reducer] - public static void game_loop_enemy_ia(ulong players) + public static void game_loop_enemy_ia(ReducerContext ctx, ulong players) { uint count = 0; ulong current_time_ms = MomentMilliseconds(); - foreach (GameEnemyAiAgentState agent in GameEnemyAiAgentState.Iter()) + foreach (GameEnemyAiAgentState agent in ctx.Db.GameEnemyAiAgentState.Iter()) { if (agent.next_action_timestamp > current_time_ms) { @@ -334,14 +338,18 @@ public static void game_loop_enemy_ia(ulong players) } GameTargetableState agent_targetable = - GameTargetableState.FindByentity_id(agent.entity_id) + ctx.Db.GameTargetableState.FindByentity_id(agent.entity_id) ?? throw new Exception("No TargetableState for AgentState entity"); - List surrounding_agents = GetTargetablesNearQuad(agent_targetable.entity_id, players); + List surrounding_agents = GetTargetablesNearQuad( + ctx, + agent_targetable.entity_id, + players + ); GameEnemyAiAgentState newAgent = agent with { action = AgentAction.Fighting }; - AgentLoop(newAgent, agent_targetable, surrounding_agents, current_time_ms); + AgentLoop(ctx, newAgent, agent_targetable, surrounding_agents, current_time_ms); count++; } @@ -350,23 +358,23 @@ public static void game_loop_enemy_ia(ulong players) } [SpacetimeDB.Reducer] - public static void init_game_ia_loop(uint initial_load) + public static void init_game_ia_loop(ReducerContext ctx, uint initial_load) { Load load = new(initial_load); - InsertBulkPosition(load.biggest_table); - InsertBulkVelocity(load.big_table); - update_position_all(load.biggest_table); - update_position_with_velocity(load.big_table); + InsertBulkPosition(ctx, load.biggest_table); + InsertBulkVelocity(ctx, load.big_table); + update_position_all(ctx, load.biggest_table); + update_position_with_velocity(ctx, load.big_table); - insert_world(load.num_players); + insert_world(ctx, load.num_players); } [SpacetimeDB.Reducer] - public static void run_game_ia_loop(uint initial_load) + public static void run_game_ia_loop(ReducerContext ctx, uint initial_load) { Load load = new(initial_load); - game_loop_enemy_ia(load.num_players); + game_loop_enemy_ia(ctx, load.num_players); } } diff --git a/modules/benchmarks-cs/synthetic.cs b/modules/benchmarks-cs/synthetic.cs index 0ee4b181cb..9712d961aa 100644 --- a/modules/benchmarks-cs/synthetic.cs +++ b/modules/benchmarks-cs/synthetic.cs @@ -9,7 +9,7 @@ public static partial class synthetic [SpacetimeDB.Table] public partial struct unique_0_u32_u64_str { - [SpacetimeDB.Column(ColumnAttrs.Unique)] + [Unique] public uint id; public ulong age; public string name; @@ -26,20 +26,20 @@ public partial struct no_index_u32_u64_str [SpacetimeDB.Table] public partial struct btree_each_column_u32_u64_str { - [SpacetimeDB.Column(ColumnAttrs.Indexed)] + [Indexed] public uint id; - [SpacetimeDB.Column(ColumnAttrs.Indexed)] + [Indexed] public ulong age; - [SpacetimeDB.Column(ColumnAttrs.Indexed)] + [Indexed] public string name; } [SpacetimeDB.Table] public partial struct unique_0_u32_u64_u64 { - [SpacetimeDB.Column(ColumnAttrs.Unique)] + [Unique] public uint id; public ulong x; public ulong y; @@ -56,159 +56,205 @@ public partial struct no_index_u32_u64_u64 [SpacetimeDB.Table] public partial struct btree_each_column_u32_u64_u64 { - [SpacetimeDB.Column(ColumnAttrs.Indexed)] + [Indexed] public uint id; - [SpacetimeDB.Column(ColumnAttrs.Indexed)] + [Indexed] public ulong x; - [SpacetimeDB.Column(ColumnAttrs.Indexed)] + [Indexed] public ulong y; } // ---------- empty ---------- [SpacetimeDB.Reducer] - public static void empty() { } + public static void empty(ReducerContext ctx) { } // ---------- insert ---------- [SpacetimeDB.Reducer] - public static void insert_unique_0_u32_u64_str(uint id, ulong age, string name) + public static void insert_unique_0_u32_u64_str( + ReducerContext ctx, + uint id, + ulong age, + string name + ) { - new unique_0_u32_u64_str() - { - id = id, - age = age, - name = name, - }.Insert(); + ctx.Db.unique_0_u32_u64_str.Insert( + new() + { + id = id, + age = age, + name = name, + } + ); } [SpacetimeDB.Reducer] - public static void insert_no_index_u32_u64_str(uint id, ulong age, string name) + public static void insert_no_index_u32_u64_str( + ReducerContext ctx, + uint id, + ulong age, + string name + ) { - new no_index_u32_u64_str() - { - id = id, - age = age, - name = name, - }.Insert(); + ctx.Db.no_index_u32_u64_str.Insert( + new() + { + id = id, + age = age, + name = name, + } + ); } [SpacetimeDB.Reducer] - public static void insert_btree_each_column_u32_u64_str(uint id, ulong age, string name) + public static void insert_btree_each_column_u32_u64_str( + ReducerContext ctx, + uint id, + ulong age, + string name + ) { - new btree_each_column_u32_u64_str() - { - id = id, - age = age, - name = name, - }.Insert(); + ctx.Db.btree_each_column_u32_u64_str.Insert( + new() + { + id = id, + age = age, + name = name, + } + ); } [SpacetimeDB.Reducer] - public static void insert_unique_0_u32_u64_u64(uint id, ulong x, ulong y) + public static void insert_unique_0_u32_u64_u64(ReducerContext ctx, uint id, ulong x, ulong y) { - new unique_0_u32_u64_u64() - { - id = id, - x = x, - y = y, - }.Insert(); + ctx.Db.unique_0_u32_u64_u64.Insert( + new() + { + id = id, + x = x, + y = y, + } + ); } [SpacetimeDB.Reducer] - public static void insert_no_index_u32_u64_u64(uint id, ulong x, ulong y) + public static void insert_no_index_u32_u64_u64(ReducerContext ctx, uint id, ulong x, ulong y) { - new no_index_u32_u64_u64() - { - id = id, - x = x, - y = y, - }.Insert(); + ctx.Db.no_index_u32_u64_u64.Insert( + new() + { + id = id, + x = x, + y = y, + } + ); } [SpacetimeDB.Reducer] - public static void insert_btree_each_column_u32_u64_u64(uint id, ulong x, ulong y) + public static void insert_btree_each_column_u32_u64_u64( + ReducerContext ctx, + uint id, + ulong x, + ulong y + ) { - new btree_each_column_u32_u64_u64() - { - id = id, - x = x, - y = y, - }.Insert(); + ctx.Db.btree_each_column_u32_u64_u64.Insert( + new() + { + id = id, + x = x, + y = y, + } + ); } // ---------- insert bulk ---------- [SpacetimeDB.Reducer] - public static void insert_bulk_unique_0_u32_u64_u64(List locs) + public static void insert_bulk_unique_0_u32_u64_u64( + ReducerContext ctx, + List locs + ) { foreach (unique_0_u32_u64_u64 loc in locs) { - loc.Insert(); + ctx.Db.unique_0_u32_u64_u64.Insert(loc); } } [SpacetimeDB.Reducer] - public static void insert_bulk_no_index_u32_u64_u64(List locs) + public static void insert_bulk_no_index_u32_u64_u64( + ReducerContext ctx, + List locs + ) { foreach (no_index_u32_u64_u64 loc in locs) { - loc.Insert(); + ctx.Db.no_index_u32_u64_u64.Insert(loc); } } [SpacetimeDB.Reducer] public static void insert_bulk_btree_each_column_u32_u64_u64( + ReducerContext ctx, List locs ) { foreach (btree_each_column_u32_u64_u64 loc in locs) { - loc.Insert(); + ctx.Db.btree_each_column_u32_u64_u64.Insert(loc); } } [SpacetimeDB.Reducer] - public static void insert_bulk_unique_0_u32_u64_str(List people) + public static void insert_bulk_unique_0_u32_u64_str( + ReducerContext ctx, + List people + ) { foreach (unique_0_u32_u64_str u32_u64_str in people) { - u32_u64_str.Insert(); + ctx.Db.unique_0_u32_u64_str.Insert(u32_u64_str); } } [SpacetimeDB.Reducer] - public static void insert_bulk_no_index_u32_u64_str(List people) + public static void insert_bulk_no_index_u32_u64_str( + ReducerContext ctx, + List people + ) { foreach (no_index_u32_u64_str u32_u64_str in people) { - u32_u64_str.Insert(); + ctx.Db.no_index_u32_u64_str.Insert(u32_u64_str); } } [SpacetimeDB.Reducer] public static void insert_bulk_btree_each_column_u32_u64_str( + ReducerContext ctx, List people ) { foreach (btree_each_column_u32_u64_str u32_u64_str in people) { - u32_u64_str.Insert(); + ctx.Db.btree_each_column_u32_u64_str.Insert(u32_u64_str); } } // ---------- update ---------- [SpacetimeDB.Reducer] - public static void update_bulk_unique_0_u32_u64_u64(uint rowCount) + public static void update_bulk_unique_0_u32_u64_u64(ReducerContext ctx, uint rowCount) { int hit = 0; - foreach (unique_0_u32_u64_u64 loc in unique_0_u32_u64_u64.Iter().Take((int)rowCount)) + foreach (unique_0_u32_u64_u64 loc in ctx.Db.unique_0_u32_u64_u64.Iter().Take((int)rowCount)) { hit++; - unique_0_u32_u64_u64.UpdateByid( + ctx.Db.unique_0_u32_u64_u64.UpdateByid( loc.id, new() { @@ -225,15 +271,17 @@ public static void update_bulk_unique_0_u32_u64_u64(uint rowCount) } [SpacetimeDB.Reducer] - public static void update_bulk_unique_0_u32_u64_str(uint rowCount) + public static void update_bulk_unique_0_u32_u64_str(ReducerContext ctx, uint rowCount) { uint hit = 0; foreach ( - unique_0_u32_u64_str u32_u64_str in unique_0_u32_u64_str.Iter().Take((int)rowCount) + unique_0_u32_u64_str u32_u64_str in ctx + .Db.unique_0_u32_u64_str.Iter() + .Take((int)rowCount) ) { hit++; - unique_0_u32_u64_str.UpdateByid( + ctx.Db.unique_0_u32_u64_str.UpdateByid( u32_u64_str.id, new() { @@ -252,18 +300,18 @@ unique_0_u32_u64_str u32_u64_str in unique_0_u32_u64_str.Iter().Take((int)rowCou // ---------- iterate ---------- [SpacetimeDB.Reducer] - public static void iterate_unique_0_u32_u64_str() + public static void iterate_unique_0_u32_u64_str(ReducerContext ctx) { - foreach (unique_0_u32_u64_str u32_u64_str in unique_0_u32_u64_str.Iter()) + foreach (unique_0_u32_u64_str u32_u64_str in ctx.Db.unique_0_u32_u64_str.Iter()) { Bench.BlackBox(u32_u64_str); } } [SpacetimeDB.Reducer] - public static void iterate_unique_0_u32_u64_u64() + public static void iterate_unique_0_u32_u64_u64(ReducerContext ctx) { - foreach (unique_0_u32_u64_u64 u32_u64_u64 in unique_0_u32_u64_u64.Iter()) + foreach (unique_0_u32_u64_u64 u32_u64_u64 in ctx.Db.unique_0_u32_u64_u64.Iter()) { Bench.BlackBox(u32_u64_u64); } @@ -272,143 +320,143 @@ public static void iterate_unique_0_u32_u64_u64() // ---------- filtering ---------- [SpacetimeDB.Reducer] - public static void filter_unique_0_u32_u64_str_by_id(uint id) + public static void filter_unique_0_u32_u64_str_by_id(ReducerContext ctx, uint id) { - Bench.BlackBox(unique_0_u32_u64_str.FindByid(id)); + Bench.BlackBox(ctx.Db.unique_0_u32_u64_str.FindByid(id)); } [SpacetimeDB.Reducer] - public static void filter_no_index_u32_u64_str_by_id(uint id) + public static void filter_no_index_u32_u64_str_by_id(ReducerContext ctx, uint id) { - Bench.BlackBox(no_index_u32_u64_str.FilterByid(id)); + Bench.BlackBox(ctx.Db.no_index_u32_u64_str.FilterByid(id)); } [SpacetimeDB.Reducer] - public static void filter_btree_each_column_u32_u64_str_by_id(uint id) + public static void filter_btree_each_column_u32_u64_str_by_id(ReducerContext ctx, uint id) { - Bench.BlackBox(btree_each_column_u32_u64_str.FilterByid(id)); + Bench.BlackBox(ctx.Db.btree_each_column_u32_u64_str.FilterByid(id)); } [SpacetimeDB.Reducer] - public static void filter_unique_0_u32_u64_str_by_name(string name) + public static void filter_unique_0_u32_u64_str_by_name(ReducerContext ctx, string name) { - Bench.BlackBox(unique_0_u32_u64_str.FilterByname(name)); + Bench.BlackBox(ctx.Db.unique_0_u32_u64_str.FilterByname(name)); } [SpacetimeDB.Reducer] - public static void filter_no_index_u32_u64_str_by_name(string name) + public static void filter_no_index_u32_u64_str_by_name(ReducerContext ctx, string name) { - Bench.BlackBox(no_index_u32_u64_str.FilterByname(name)); + Bench.BlackBox(ctx.Db.no_index_u32_u64_str.FilterByname(name)); } [SpacetimeDB.Reducer] - public static void filter_btree_each_column_u32_u64_str_by_name(string name) + public static void filter_btree_each_column_u32_u64_str_by_name(ReducerContext ctx, string name) { - Bench.BlackBox(btree_each_column_u32_u64_str.FilterByname(name)); + Bench.BlackBox(ctx.Db.btree_each_column_u32_u64_str.FilterByname(name)); } [SpacetimeDB.Reducer] - public static void filter_unique_0_u32_u64_u64_by_id(uint id) + public static void filter_unique_0_u32_u64_u64_by_id(ReducerContext ctx, uint id) { - Bench.BlackBox(unique_0_u32_u64_u64.FindByid(id)); + Bench.BlackBox(ctx.Db.unique_0_u32_u64_u64.FindByid(id)); } [SpacetimeDB.Reducer] - public static void filter_no_index_u32_u64_u64_by_id(uint id) + public static void filter_no_index_u32_u64_u64_by_id(ReducerContext ctx, uint id) { - Bench.BlackBox(no_index_u32_u64_u64.FilterByid(id)); + Bench.BlackBox(ctx.Db.no_index_u32_u64_u64.FilterByid(id)); } [SpacetimeDB.Reducer] - public static void filter_btree_each_column_u32_u64_u64_by_id(uint id) + public static void filter_btree_each_column_u32_u64_u64_by_id(ReducerContext ctx, uint id) { - Bench.BlackBox(btree_each_column_u32_u64_u64.FilterByid(id)); + Bench.BlackBox(ctx.Db.btree_each_column_u32_u64_u64.FilterByid(id)); } [SpacetimeDB.Reducer] - public static void filter_unique_0_u32_u64_u64_by_x(ulong x) + public static void filter_unique_0_u32_u64_u64_by_x(ReducerContext ctx, ulong x) { - Bench.BlackBox(unique_0_u32_u64_u64.FilterByx(x)); + Bench.BlackBox(ctx.Db.unique_0_u32_u64_u64.FilterByx(x)); } [SpacetimeDB.Reducer] - public static void filter_no_index_u32_u64_u64_by_x(ulong x) + public static void filter_no_index_u32_u64_u64_by_x(ReducerContext ctx, ulong x) { - Bench.BlackBox(no_index_u32_u64_u64.FilterByx(x)); + Bench.BlackBox(ctx.Db.no_index_u32_u64_u64.FilterByx(x)); } [SpacetimeDB.Reducer] - public static void filter_btree_each_column_u32_u64_u64_by_x(ulong x) + public static void filter_btree_each_column_u32_u64_u64_by_x(ReducerContext ctx, ulong x) { - Bench.BlackBox(btree_each_column_u32_u64_u64.FilterByx(x)); + Bench.BlackBox(ctx.Db.btree_each_column_u32_u64_u64.FilterByx(x)); } [SpacetimeDB.Reducer] - public static void filter_unique_0_u32_u64_u64_by_y(ulong x) + public static void filter_unique_0_u32_u64_u64_by_y(ReducerContext ctx, ulong x) { - Bench.BlackBox(unique_0_u32_u64_u64.FilterByy(x)); + Bench.BlackBox(ctx.Db.unique_0_u32_u64_u64.FilterByy(x)); } [SpacetimeDB.Reducer] - public static void filter_no_index_u32_u64_u64_by_y(ulong x) + public static void filter_no_index_u32_u64_u64_by_y(ReducerContext ctx, ulong x) { - Bench.BlackBox(no_index_u32_u64_u64.FilterByy(x)); + Bench.BlackBox(ctx.Db.no_index_u32_u64_u64.FilterByy(x)); } [SpacetimeDB.Reducer] - public static void filter_btree_each_column_u32_u64_u64_by_y(ulong x) + public static void filter_btree_each_column_u32_u64_u64_by_y(ReducerContext ctx, ulong x) { - Bench.BlackBox(btree_each_column_u32_u64_u64.FilterByy(x)); + Bench.BlackBox(ctx.Db.btree_each_column_u32_u64_u64.FilterByy(x)); } // ---------- delete ---------- [SpacetimeDB.Reducer] - public static void delete_unique_0_u32_u64_str_by_id(uint id) + public static void delete_unique_0_u32_u64_str_by_id(ReducerContext ctx, uint id) { - unique_0_u32_u64_str.DeleteByid(id); + ctx.Db.unique_0_u32_u64_str.DeleteByid(id); } [SpacetimeDB.Reducer] - public static void delete_unique_0_u32_u64_u64_by_id(uint id) + public static void delete_unique_0_u32_u64_u64_by_id(ReducerContext ctx, uint id) { - unique_0_u32_u64_u64.DeleteByid(id); + ctx.Db.unique_0_u32_u64_u64.DeleteByid(id); } // ---------- clear table ---------- [SpacetimeDB.Reducer] - public static void clear_table_unique_0_u32_u64_str() + public static void clear_table_unique_0_u32_u64_str(ReducerContext ctx) { throw new NotImplementedException("Modules currently have no interface to clear a table"); } [SpacetimeDB.Reducer] - public static void clear_table_no_index_u32_u64_str() + public static void clear_table_no_index_u32_u64_str(ReducerContext ctx) { throw new NotImplementedException("Modules currently have no interface to clear a table"); } [SpacetimeDB.Reducer] - public static void clear_table_btree_each_column_u32_u64_str() + public static void clear_table_btree_each_column_u32_u64_str(ReducerContext ctx) { throw new NotImplementedException("Modules currently have no interface to clear a table"); } [SpacetimeDB.Reducer] - public static void clear_table_unique_0_u32_u64_u64() + public static void clear_table_unique_0_u32_u64_u64(ReducerContext ctx) { throw new NotImplementedException("Modules currently have no interface to clear a table"); } [SpacetimeDB.Reducer] - public static void clear_table_no_index_u32_u64_u64() + public static void clear_table_no_index_u32_u64_u64(ReducerContext ctx) { throw new NotImplementedException("Modules currently have no interface to clear a table"); } [SpacetimeDB.Reducer] - public static void clear_table_btree_each_column_u32_u64_u64() + public static void clear_table_btree_each_column_u32_u64_u64(ReducerContext ctx) { throw new NotImplementedException("Modules currently have no interface to clear a table"); } @@ -416,48 +464,49 @@ public static void clear_table_btree_each_column_u32_u64_u64() // ---------- count ---------- [SpacetimeDB.Reducer] - public static void count_unique_0_u32_u64_str() + public static void count_unique_0_u32_u64_str(ReducerContext ctx) { - Log.Info("COUNT: " + unique_0_u32_u64_str.Iter().Count()); + Log.Info("COUNT: " + ctx.Db.unique_0_u32_u64_str.Iter().Count()); } [SpacetimeDB.Reducer] - public static void count_no_index_u32_u64_str() + public static void count_no_index_u32_u64_str(ReducerContext ctx) { - Log.Info("COUNT: " + no_index_u32_u64_str.Iter().Count()); + Log.Info("COUNT: " + ctx.Db.no_index_u32_u64_str.Iter().Count()); } [SpacetimeDB.Reducer] - public static void count_btree_each_column_u32_u64_str() + public static void count_btree_each_column_u32_u64_str(ReducerContext ctx) { - Log.Info("COUNT: " + btree_each_column_u32_u64_str.Iter().Count()); + Log.Info("COUNT: " + ctx.Db.btree_each_column_u32_u64_str.Iter().Count()); } [SpacetimeDB.Reducer] - public static void count_unique_0_u32_u64_u64() + public static void count_unique_0_u32_u64_u64(ReducerContext ctx) { - Log.Info("COUNT: " + unique_0_u32_u64_u64.Iter().Count()); + Log.Info("COUNT: " + ctx.Db.unique_0_u32_u64_u64.Iter().Count()); } [SpacetimeDB.Reducer] - public static void count_no_index_u32_u64_u64() + public static void count_no_index_u32_u64_u64(ReducerContext ctx) { - Log.Info("COUNT: " + no_index_u32_u64_u64.Iter().Count()); + Log.Info("COUNT: " + ctx.Db.no_index_u32_u64_u64.Iter().Count()); } [SpacetimeDB.Reducer] - public static void count_btree_each_column_u32_u64_u64() + public static void count_btree_each_column_u32_u64_u64(ReducerContext ctx) { - Log.Info("COUNT: " + btree_each_column_u32_u64_u64.Iter().Count()); + Log.Info("COUNT: " + ctx.Db.btree_each_column_u32_u64_u64.Iter().Count()); } // ---------- module-specific stuff ---------- [SpacetimeDB.Reducer] - public static void fn_with_1_args(string arg) { } + public static void fn_with_1_args(ReducerContext ctx, string arg) { } [SpacetimeDB.Reducer] public static void fn_with_32_args( + ReducerContext ctx, string arg1, string arg2, string arg3, @@ -490,11 +539,10 @@ public static void fn_with_32_args( string arg30, string arg31, string arg32 - ) - { } + ) { } [SpacetimeDB.Reducer] - public static void print_many_things(uint n) + public static void print_many_things(ReducerContext ctx, uint n) { for (int i = 0; i < n; i++) {