diff --git a/crates/bindings-csharp/Codegen.Tests/fixtures/diag/snapshots/ExtraCompilationErrors.verified.txt b/crates/bindings-csharp/Codegen.Tests/fixtures/diag/snapshots/ExtraCompilationErrors.verified.txt index 95ad2de8ce..fa963722b7 100644 --- a/crates/bindings-csharp/Codegen.Tests/fixtures/diag/snapshots/ExtraCompilationErrors.verified.txt +++ b/crates/bindings-csharp/Codegen.Tests/fixtures/diag/snapshots/ExtraCompilationErrors.verified.txt @@ -461,7 +461,7 @@ public readonly struct TestTableTaggedEnum : SpacetimeDB.Internal.ITableView.ReadGenFields(System.IO.BinaryReader reader, global::TestTableTaggedEnum row) { */ - Location: SpacetimeDB.Codegen\SpacetimeDB.Codegen.Module\FFI.cs: (34,23)-(34,42), + Location: SpacetimeDB.Codegen\SpacetimeDB.Codegen.Module\FFI.cs: (33,23)-(33,42), Message: The type 'TestTableTaggedEnum' cannot be used as type parameter 'T' in the generic type or method 'ITableView'. There is no implicit reference conversion from 'TestTableTaggedEnum' to 'SpacetimeDB.Internal.ITable'., Severity: Error, Descriptor: { @@ -485,7 +485,7 @@ public readonly struct TestTableTaggedEnum : SpacetimeDB.Internal.ITableView.ReadGenFields(System.IO.BinaryReader reader, global::TestTableTaggedEnum row) { */ - Location: SpacetimeDB.Codegen\SpacetimeDB.Codegen.Module\FFI.cs: (34,23)-(34,42), + Location: SpacetimeDB.Codegen\SpacetimeDB.Codegen.Module\FFI.cs: (33,23)-(33,42), Message: 'TestTableTaggedEnum' must be a non-abstract type with a public parameterless constructor in order to use it as parameter 'T' in the generic type or method 'ITableView', Severity: Error, Descriptor: { @@ -509,7 +509,7 @@ public readonly struct TestTableTaggedEnum : SpacetimeDB.Internal.ITableView'. There is no implicit reference conversion from 'TestTableTaggedEnum' to 'SpacetimeDB.Internal.ITable'., Severity: Error, Descriptor: { @@ -533,7 +533,7 @@ public readonly struct TestTableTaggedEnum : SpacetimeDB.Internal.ITableView', Severity: Error, Descriptor: { @@ -555,9 +555,9 @@ public readonly struct TestTableTaggedEnum : SpacetimeDB.Internal.ITableView Iter() => SpacetimeDB.Internal.ITableView.Iter(); ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - public IEnumerable Query(System.Linq.Expressions.Expression> predicate) => SpacetimeDB.Internal.ITableView.Query(predicate); + public global::TestTableTaggedEnum Insert(global::TestTableTaggedEnum row) => SpacetimeDB.Internal.ITableView.Insert(row); */ - Location: SpacetimeDB.Codegen\SpacetimeDB.Codegen.Module\FFI.cs: (39,115)-(39,142), + Location: SpacetimeDB.Codegen\SpacetimeDB.Codegen.Module\FFI.cs: (38,115)-(38,142), Message: The type 'TestTableTaggedEnum' cannot be used as type parameter 'T' in the generic type or method 'ITableView'. There is no implicit reference conversion from 'TestTableTaggedEnum' to 'SpacetimeDB.Internal.ITable'., Severity: Error, Descriptor: { @@ -579,57 +579,9 @@ public readonly struct TestTableTaggedEnum : SpacetimeDB.Internal.ITableView Iter() => SpacetimeDB.Internal.ITableView.Iter(); ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - public IEnumerable Query(System.Linq.Expressions.Expression> predicate) => SpacetimeDB.Internal.ITableView.Query(predicate); -*/ - Location: SpacetimeDB.Codegen\SpacetimeDB.Codegen.Module\FFI.cs: (39,115)-(39,142), - Message: 'TestTableTaggedEnum' must be a non-abstract type with a public parameterless constructor in order to use it as parameter 'T' in the generic type or method 'ITableView', - Severity: Error, - Descriptor: { - Id: CS0310, - Title: , - HelpLink: https://msdn.microsoft.com/query/roslyn.query?appId=roslyn&k=k(CS0310), - MessageFormat: '{2}' must be a non-abstract type with a public parameterless constructor in order to use it as parameter '{1}' in the generic type or method '{0}', - Category: Compiler, - DefaultSeverity: Error, - IsEnabledByDefault: true, - CustomTags: [ - Compiler, - Telemetry, - NotConfigurable - ] - } - }, - {/* - public IEnumerable Iter() => SpacetimeDB.Internal.ITableView.Iter(); - public IEnumerable Query(System.Linq.Expressions.Expression> predicate) => SpacetimeDB.Internal.ITableView.Query(predicate); - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - public global::TestTableTaggedEnum Insert(global::TestTableTaggedEnum row) => SpacetimeDB.Internal.ITableView.Insert(row); -*/ - Location: SpacetimeDB.Codegen\SpacetimeDB.Codegen.Module\FFI.cs: (40,201)-(40,228), - Message: The type 'TestTableTaggedEnum' cannot be used as type parameter 'T' in the generic type or method 'ITableView'. There is no implicit reference conversion from 'TestTableTaggedEnum' to 'SpacetimeDB.Internal.ITable'., - Severity: Error, - Descriptor: { - Id: CS0311, - Title: , - HelpLink: https://msdn.microsoft.com/query/roslyn.query?appId=roslyn&k=k(CS0311), - MessageFormat: The type '{3}' cannot be used as type parameter '{2}' in the generic type or method '{0}'. There is no implicit reference conversion from '{3}' to '{1}'., - Category: Compiler, - DefaultSeverity: Error, - IsEnabledByDefault: true, - CustomTags: [ - Compiler, - Telemetry, - NotConfigurable - ] - } - }, - {/* - public IEnumerable Iter() => SpacetimeDB.Internal.ITableView.Iter(); - public IEnumerable Query(System.Linq.Expressions.Expression> predicate) => SpacetimeDB.Internal.ITableView.Query(predicate); - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ public global::TestTableTaggedEnum Insert(global::TestTableTaggedEnum row) => SpacetimeDB.Internal.ITableView.Insert(row); */ - Location: SpacetimeDB.Codegen\SpacetimeDB.Codegen.Module\FFI.cs: (40,201)-(40,228), + Location: SpacetimeDB.Codegen\SpacetimeDB.Codegen.Module\FFI.cs: (38,115)-(38,142), Message: 'TestTableTaggedEnum' must be a non-abstract type with a public parameterless constructor in order to use it as parameter 'T' in the generic type or method 'ITableView', Severity: Error, Descriptor: { @@ -648,12 +600,12 @@ public readonly struct TestTableTaggedEnum : SpacetimeDB.Internal.ITableView Query(System.Linq.Expressions.Expression> predicate) => SpacetimeDB.Internal.ITableView.Query(predicate); + public IEnumerable Iter() => SpacetimeDB.Internal.ITableView.Iter(); public global::TestTableTaggedEnum Insert(global::TestTableTaggedEnum row) => SpacetimeDB.Internal.ITableView.Insert(row); ^^^^^^^^^^^^^^^^^^^^^^^^^^^ public IEnumerable FilterByX(int X) => */ - Location: SpacetimeDB.Codegen\SpacetimeDB.Codegen.Module\FFI.cs: (41,135)-(41,162), + Location: SpacetimeDB.Codegen\SpacetimeDB.Codegen.Module\FFI.cs: (39,135)-(39,162), Message: The type 'TestTableTaggedEnum' cannot be used as type parameter 'T' in the generic type or method 'ITableView'. There is no implicit reference conversion from 'TestTableTaggedEnum' to 'SpacetimeDB.Internal.ITable'., Severity: Error, Descriptor: { @@ -672,12 +624,12 @@ public readonly struct TestTableTaggedEnum : SpacetimeDB.Internal.ITableView Query(System.Linq.Expressions.Expression> predicate) => SpacetimeDB.Internal.ITableView.Query(predicate); + public IEnumerable Iter() => SpacetimeDB.Internal.ITableView.Iter(); public global::TestTableTaggedEnum Insert(global::TestTableTaggedEnum row) => SpacetimeDB.Internal.ITableView.Insert(row); ^^^^^^^^^^^^^^^^^^^^^^^^^^^ public IEnumerable FilterByX(int X) => */ - Location: SpacetimeDB.Codegen\SpacetimeDB.Codegen.Module\FFI.cs: (41,135)-(41,162), + Location: SpacetimeDB.Codegen\SpacetimeDB.Codegen.Module\FFI.cs: (39,135)-(39,162), Message: 'TestTableTaggedEnum' must be a non-abstract type with a public parameterless constructor in order to use it as parameter 'T' in the generic type or method 'ITableView', Severity: Error, Descriptor: { @@ -701,7 +653,7 @@ public readonly struct TestTableTaggedEnum : SpacetimeDB.Internal.ITableView FilterByY(int Y) => */ - Location: SpacetimeDB.Codegen\SpacetimeDB.Codegen.Module\FFI.cs: (43,57)-(43,84), + Location: SpacetimeDB.Codegen\SpacetimeDB.Codegen.Module\FFI.cs: (41,57)-(41,84), Message: The type 'TestTableTaggedEnum' cannot be used as type parameter 'T' in the generic type or method 'ITableView'. There is no implicit reference conversion from 'TestTableTaggedEnum' to 'SpacetimeDB.Internal.ITable'., Severity: Error, Descriptor: { @@ -725,7 +677,7 @@ public IEnumerable FilterByY(int Y) => ^^^^^^^^^^^^^^^^^^^^^^^^^^^ public IEnumerable FilterByY(int Y) => */ - Location: SpacetimeDB.Codegen\SpacetimeDB.Codegen.Module\FFI.cs: (43,57)-(43,84), + Location: SpacetimeDB.Codegen\SpacetimeDB.Codegen.Module\FFI.cs: (41,57)-(41,84), Message: 'TestTableTaggedEnum' must be a non-abstract type with a public parameterless constructor in order to use it as parameter 'T' in the generic type or method 'ITableView', Severity: Error, Descriptor: { @@ -749,7 +701,7 @@ public IEnumerable FilterByY(int Y) => ^^^^^^^^^^^^^^^^^^^^^^^^^^^ } */ - Location: SpacetimeDB.Codegen\SpacetimeDB.Codegen.Module\FFI.cs: (45,57)-(45,84), + Location: SpacetimeDB.Codegen\SpacetimeDB.Codegen.Module\FFI.cs: (43,57)-(43,84), Message: The type 'TestTableTaggedEnum' cannot be used as type parameter 'T' in the generic type or method 'ITableView'. There is no implicit reference conversion from 'TestTableTaggedEnum' to 'SpacetimeDB.Internal.ITable'., Severity: Error, Descriptor: { @@ -773,7 +725,7 @@ public IEnumerable FilterByY(int Y) => ^^^^^^^^^^^^^^^^^^^^^^^^^^^ } */ - Location: SpacetimeDB.Codegen\SpacetimeDB.Codegen.Module\FFI.cs: (45,57)-(45,84), + Location: SpacetimeDB.Codegen\SpacetimeDB.Codegen.Module\FFI.cs: (43,57)-(43,84), Message: 'TestTableTaggedEnum' must be a non-abstract type with a public parameterless constructor in order to use it as parameter 'T' in the generic type or method 'ITableView', Severity: Error, Descriptor: { @@ -797,7 +749,7 @@ SpacetimeDB.Internal.Module.RegisterTable(); ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ SpacetimeDB.Internal.Module.RegisterTable(); */ - Location: SpacetimeDB.Codegen\SpacetimeDB.Codegen.Module\FFI.cs: (82,28)-(82,70), + Location: SpacetimeDB.Codegen\SpacetimeDB.Codegen.Module\FFI.cs: (79,28)-(79,70), Message: The type 'TestTableTaggedEnum' cannot be used as type parameter 'T' in the generic type or method 'Module.RegisterTable()'. There is no implicit reference conversion from 'TestTableTaggedEnum' to 'SpacetimeDB.Internal.ITable'., Severity: Error, Descriptor: { @@ -821,7 +773,7 @@ SpacetimeDB.Internal.Module.RegisterTable(); ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ SpacetimeDB.Internal.Module.RegisterTable(); */ - Location: SpacetimeDB.Codegen\SpacetimeDB.Codegen.Module\FFI.cs: (82,28)-(82,70), + Location: SpacetimeDB.Codegen\SpacetimeDB.Codegen.Module\FFI.cs: (79,28)-(79,70), Message: 'TestTableTaggedEnum' must be a non-abstract type with a public parameterless constructor in order to use it as parameter 'T' in the generic type or method 'Module.RegisterTable()', Severity: Error, Descriptor: { diff --git a/crates/bindings-csharp/Codegen.Tests/fixtures/diag/snapshots/Module#FFI.verified.cs b/crates/bindings-csharp/Codegen.Tests/fixtures/diag/snapshots/Module#FFI.verified.cs index 7bf04f1016..e9984fb7ae 100644 --- a/crates/bindings-csharp/Codegen.Tests/fixtures/diag/snapshots/Module#FFI.verified.cs +++ b/crates/bindings-csharp/Codegen.Tests/fixtures/diag/snapshots/Module#FFI.verified.cs @@ -48,16 +48,6 @@ public readonly struct TestAutoIncNotInteger global::TestAutoIncNotInteger >.Iter(); - public IEnumerable Query( - System.Linq.Expressions.Expression< - Func - > predicate - ) => - SpacetimeDB.Internal.ITableView< - TestAutoIncNotInteger, - global::TestAutoIncNotInteger - >.Query(predicate); - public global::TestAutoIncNotInteger Insert(global::TestAutoIncNotInteger row) => SpacetimeDB.Internal.ITableView< TestAutoIncNotInteger, @@ -96,16 +86,6 @@ public readonly struct TestTableTaggedEnum global::TestTableTaggedEnum >.Iter(); - public IEnumerable Query( - System.Linq.Expressions.Expression< - Func - > predicate - ) => - SpacetimeDB.Internal.ITableView< - TestTableTaggedEnum, - global::TestTableTaggedEnum - >.Query(predicate); - public global::TestTableTaggedEnum Insert(global::TestTableTaggedEnum row) => SpacetimeDB.Internal.ITableView< TestTableTaggedEnum, @@ -149,16 +129,6 @@ public readonly struct TestUniqueNotEquatable global::TestUniqueNotEquatable >.Iter(); - public IEnumerable Query( - System.Linq.Expressions.Expression< - Func - > predicate - ) => - SpacetimeDB.Internal.ITableView< - TestUniqueNotEquatable, - global::TestUniqueNotEquatable - >.Query(predicate); - public global::TestUniqueNotEquatable Insert(global::TestUniqueNotEquatable row) => SpacetimeDB.Internal.ITableView< TestUniqueNotEquatable, diff --git a/crates/bindings-csharp/Codegen.Tests/fixtures/diag/snapshots/Module#TestAutoIncNotInteger.verified.cs b/crates/bindings-csharp/Codegen.Tests/fixtures/diag/snapshots/Module#TestAutoIncNotInteger.verified.cs index 8da5b0a301..48f172008d 100644 --- a/crates/bindings-csharp/Codegen.Tests/fixtures/diag/snapshots/Module#TestAutoIncNotInteger.verified.cs +++ b/crates/bindings-csharp/Codegen.Tests/fixtures/diag/snapshots/Module#TestAutoIncNotInteger.verified.cs @@ -70,12 +70,4 @@ SpacetimeDB.BSATN.ITypeRegistrar registrar ).Ref_ ), ]; - - static SpacetimeDB.Internal.Filter SpacetimeDB.Internal.ITable.CreateFilter() => - new( - [ - new(nameof(AutoIncField), (w, v) => BSATN.AutoIncField.Write(w, (float)v!)), - new(nameof(IdentityField), (w, v) => BSATN.IdentityField.Write(w, (string)v!)) - ] - ); } // TestAutoIncNotInteger diff --git a/crates/bindings-csharp/Codegen.Tests/fixtures/diag/snapshots/Module#TestUniqueNotEquatable.verified.cs b/crates/bindings-csharp/Codegen.Tests/fixtures/diag/snapshots/Module#TestUniqueNotEquatable.verified.cs index b2a1f26e1f..97415fa0b5 100644 --- a/crates/bindings-csharp/Codegen.Tests/fixtures/diag/snapshots/Module#TestUniqueNotEquatable.verified.cs +++ b/crates/bindings-csharp/Codegen.Tests/fixtures/diag/snapshots/Module#TestUniqueNotEquatable.verified.cs @@ -77,15 +77,4 @@ SpacetimeDB.BSATN.ITypeRegistrar registrar ).Ref_ ), ]; - - static SpacetimeDB.Internal.Filter SpacetimeDB.Internal.ITable.CreateFilter() => - new( - [ - new(nameof(UniqueField), (w, v) => BSATN.UniqueField.Write(w, (int?)v!)), - new( - nameof(PrimaryKeyField), - (w, v) => BSATN.PrimaryKeyField.Write(w, (TestEnumWithExplicitValues)v!) - ) - ] - ); } // TestUniqueNotEquatable diff --git a/crates/bindings-csharp/Codegen.Tests/fixtures/server/snapshots/Module#FFI.verified.cs b/crates/bindings-csharp/Codegen.Tests/fixtures/server/snapshots/Module#FFI.verified.cs index 38ac21f8fe..1083854848 100644 --- a/crates/bindings-csharp/Codegen.Tests/fixtures/server/snapshots/Module#FFI.verified.cs +++ b/crates/bindings-csharp/Codegen.Tests/fixtures/server/snapshots/Module#FFI.verified.cs @@ -49,13 +49,6 @@ public readonly struct MultiTable1 public IEnumerable Iter() => SpacetimeDB.Internal.ITableView.Iter(); - public IEnumerable Query( - System.Linq.Expressions.Expression> predicate - ) => - SpacetimeDB.Internal.ITableView.Query( - predicate - ); - public global::MultiTableRow Insert(global::MultiTableRow row) => SpacetimeDB.Internal.ITableView.Insert(row); @@ -126,13 +119,6 @@ public readonly struct MultiTable2 public IEnumerable Iter() => SpacetimeDB.Internal.ITableView.Iter(); - public IEnumerable Query( - System.Linq.Expressions.Expression> predicate - ) => - SpacetimeDB.Internal.ITableView.Query( - predicate - ); - public global::MultiTableRow Insert(global::MultiTableRow row) => SpacetimeDB.Internal.ITableView.Insert(row); @@ -199,13 +185,6 @@ public readonly struct PrivateTable public IEnumerable Iter() => SpacetimeDB.Internal.ITableView.Iter(); - public IEnumerable Query( - System.Linq.Expressions.Expression> predicate - ) => - SpacetimeDB.Internal.ITableView.Query( - predicate - ); - public global::PrivateTable Insert(global::PrivateTable row) => SpacetimeDB.Internal.ITableView.Insert(row); } @@ -228,10 +207,6 @@ public readonly struct PublicTable public IEnumerable Iter() => SpacetimeDB.Internal.ITableView.Iter(); - public IEnumerable Query( - System.Linq.Expressions.Expression> predicate - ) => SpacetimeDB.Internal.ITableView.Query(predicate); - public global::PublicTable Insert(global::PublicTable row) => SpacetimeDB.Internal.ITableView.Insert(row); @@ -459,16 +434,6 @@ public readonly struct SendMessageTimer global::Timers.SendMessageTimer >.Iter(); - public IEnumerable Query( - System.Linq.Expressions.Expression< - Func - > predicate - ) => - SpacetimeDB.Internal.ITableView< - SendMessageTimer, - global::Timers.SendMessageTimer - >.Query(predicate); - public global::Timers.SendMessageTimer Insert(global::Timers.SendMessageTimer row) => SpacetimeDB.Internal.ITableView< SendMessageTimer, diff --git a/crates/bindings-csharp/Codegen.Tests/fixtures/server/snapshots/Module#MultiTableRow.verified.cs b/crates/bindings-csharp/Codegen.Tests/fixtures/server/snapshots/Module#MultiTableRow.verified.cs index 30d1b9fb8a..28f5a120fc 100644 --- a/crates/bindings-csharp/Codegen.Tests/fixtures/server/snapshots/Module#MultiTableRow.verified.cs +++ b/crates/bindings-csharp/Codegen.Tests/fixtures/server/snapshots/Module#MultiTableRow.verified.cs @@ -118,13 +118,4 @@ SpacetimeDB.BSATN.ITypeRegistrar registrar ).Ref_ ), ]; - - static SpacetimeDB.Internal.Filter SpacetimeDB.Internal.ITable.CreateFilter() => - new( - [ - new(nameof(Name), (w, v) => BSATN.Name.Write(w, (string)v!)), - new(nameof(Foo), (w, v) => BSATN.Foo.Write(w, (uint)v!)), - new(nameof(Bar), (w, v) => BSATN.Bar.Write(w, (uint)v!)) - ] - ); } // MultiTableRow diff --git a/crates/bindings-csharp/Codegen.Tests/fixtures/server/snapshots/Module#PrivateTable.verified.cs b/crates/bindings-csharp/Codegen.Tests/fixtures/server/snapshots/Module#PrivateTable.verified.cs index 3d61ab1f96..9b3c3632c0 100644 --- a/crates/bindings-csharp/Codegen.Tests/fixtures/server/snapshots/Module#PrivateTable.verified.cs +++ b/crates/bindings-csharp/Codegen.Tests/fixtures/server/snapshots/Module#PrivateTable.verified.cs @@ -49,7 +49,4 @@ SpacetimeDB.BSATN.ITypeRegistrar registrar ).Ref_ ), ]; - - static SpacetimeDB.Internal.Filter SpacetimeDB.Internal.ITable.CreateFilter() => - new([]); } // PrivateTable diff --git a/crates/bindings-csharp/Codegen.Tests/fixtures/server/snapshots/Module#PublicTable.verified.cs b/crates/bindings-csharp/Codegen.Tests/fixtures/server/snapshots/Module#PublicTable.verified.cs index 2123055d6d..e975a9352a 100644 --- a/crates/bindings-csharp/Codegen.Tests/fixtures/server/snapshots/Module#PublicTable.verified.cs +++ b/crates/bindings-csharp/Codegen.Tests/fixtures/server/snapshots/Module#PublicTable.verified.cs @@ -275,88 +275,4 @@ SpacetimeDB.BSATN.ITypeRegistrar registrar ).Ref_ ), ]; - - static SpacetimeDB.Internal.Filter SpacetimeDB.Internal.ITable.CreateFilter() => - new( - [ - new(nameof(Id), (w, v) => BSATN.Id.Write(w, (int)v!)), - new(nameof(ByteField), (w, v) => BSATN.ByteField.Write(w, (byte)v!)), - new(nameof(UshortField), (w, v) => BSATN.UshortField.Write(w, (ushort)v!)), - new(nameof(UintField), (w, v) => BSATN.UintField.Write(w, (uint)v!)), - new(nameof(UlongField), (w, v) => BSATN.UlongField.Write(w, (ulong)v!)), - new( - nameof(UInt128Field), - (w, v) => BSATN.UInt128Field.Write(w, (System.UInt128)v!) - ), - new(nameof(U128Field), (w, v) => BSATN.U128Field.Write(w, (SpacetimeDB.U128)v!)), - new(nameof(U256Field), (w, v) => BSATN.U256Field.Write(w, (SpacetimeDB.U256)v!)), - new(nameof(SbyteField), (w, v) => BSATN.SbyteField.Write(w, (sbyte)v!)), - new(nameof(ShortField), (w, v) => BSATN.ShortField.Write(w, (short)v!)), - new(nameof(IntField), (w, v) => BSATN.IntField.Write(w, (int)v!)), - new(nameof(LongField), (w, v) => BSATN.LongField.Write(w, (long)v!)), - new(nameof(Int128Field), (w, v) => BSATN.Int128Field.Write(w, (System.Int128)v!)), - new(nameof(I128Field), (w, v) => BSATN.I128Field.Write(w, (SpacetimeDB.I128)v!)), - new(nameof(I256Field), (w, v) => BSATN.I256Field.Write(w, (SpacetimeDB.I256)v!)), - new(nameof(BoolField), (w, v) => BSATN.BoolField.Write(w, (bool)v!)), - new(nameof(FloatField), (w, v) => BSATN.FloatField.Write(w, (float)v!)), - new(nameof(DoubleField), (w, v) => BSATN.DoubleField.Write(w, (double)v!)), - new(nameof(StringField), (w, v) => BSATN.StringField.Write(w, (string)v!)), - new( - nameof(IdentityField), - (w, v) => BSATN.IdentityField.Write(w, (SpacetimeDB.Identity)v!) - ), - new( - nameof(AddressField), - (w, v) => BSATN.AddressField.Write(w, (SpacetimeDB.Address)v!) - ), - new( - nameof(CustomStructField), - (w, v) => BSATN.CustomStructField.Write(w, (CustomStruct)v!) - ), - new( - nameof(CustomClassField), - (w, v) => BSATN.CustomClassField.Write(w, (CustomClass)v!) - ), - new( - nameof(CustomEnumField), - (w, v) => BSATN.CustomEnumField.Write(w, (CustomEnum)v!) - ), - new( - nameof(CustomTaggedEnumField), - (w, v) => BSATN.CustomTaggedEnumField.Write(w, (CustomTaggedEnum)v!) - ), - new( - nameof(ListField), - (w, v) => BSATN.ListField.Write(w, (System.Collections.Generic.List)v!) - ), - new( - nameof(DictionaryField), - (w, v) => - BSATN.DictionaryField.Write( - w, - (System.Collections.Generic.Dictionary)v! - ) - ), - new( - nameof(NullableValueField), - (w, v) => BSATN.NullableValueField.Write(w, (int?)v!) - ), - new( - nameof(NullableReferenceField), - (w, v) => BSATN.NullableReferenceField.Write(w, (string?)v!) - ), - new( - nameof(ComplexNestedField), - (w, v) => - BSATN.ComplexNestedField.Write( - w, - (System.Collections.Generic.Dictionary< - CustomEnum, - System.Collections.Generic.List? - >?) - v! - ) - ) - ] - ); } // PublicTable diff --git a/crates/bindings-csharp/Codegen.Tests/fixtures/server/snapshots/Module#Timers.SendMessageTimer.verified.cs b/crates/bindings-csharp/Codegen.Tests/fixtures/server/snapshots/Module#Timers.SendMessageTimer.verified.cs index 231a6db12c..89699d32ba 100644 --- a/crates/bindings-csharp/Codegen.Tests/fixtures/server/snapshots/Module#Timers.SendMessageTimer.verified.cs +++ b/crates/bindings-csharp/Codegen.Tests/fixtures/server/snapshots/Module#Timers.SendMessageTimer.verified.cs @@ -90,17 +90,5 @@ SpacetimeDB.BSATN.ITypeRegistrar registrar ).Ref_ ), ]; - - static SpacetimeDB.Internal.Filter SpacetimeDB.Internal.ITable.CreateFilter() => - new( - [ - new(nameof(Text), (w, v) => BSATN.Text.Write(w, (string)v!)), - new(nameof(ScheduledId), (w, v) => BSATN.ScheduledId.Write(w, (ulong)v!)), - new( - nameof(ScheduledAt), - (w, v) => BSATN.ScheduledAt.Write(w, (SpacetimeDB.ScheduleAt)v!) - ) - ] - ); } // SendMessageTimer } // Timers diff --git a/crates/bindings-csharp/Codegen/Module.cs b/crates/bindings-csharp/Codegen/Module.cs index 3cf329f1c9..08061be464 100644 --- a/crates/bindings-csharp/Codegen/Module.cs +++ b/crates/bindings-csharp/Codegen/Module.cs @@ -130,10 +130,6 @@ public ColumnAttrs GetAttrs(string tableName) => // For the `TableDesc` constructor. public string GenerateColumnDef() => $"new (nameof({Name}), BSATN.{Name}.GetAlgebraicType(registrar))"; - - // For the `Filter` constructor. - public string GenerateFilterEntry() => - $"new (nameof({Name}), (w, v) => BSATN.{Name}.Write(w, ({Type}) v!))"; } record TableView @@ -295,7 +291,6 @@ public IEnumerable GenerateViews() return row; } public IEnumerable<{{globalName}}> Iter() => {{iTable}}.Iter(); - public IEnumerable<{{globalName}}> Query(System.Linq.Expressions.Expression> predicate) => {{iTable}}.Query(predicate); public {{globalName}} Insert({{globalName}} row) => {{iTable}}.Insert(row); {{string.Join("\n", GenerateViewFilters(v.Name, iTable))}} } @@ -381,10 +376,6 @@ public override Scope.Extensions ToExtensions() ), """))}} ]; - - static SpacetimeDB.Internal.Filter {{iTable}}.CreateFilter() => new([ - {{string.Join(",\n", Members.Select(f => f.GenerateFilterEntry()))}} - ]); """ ); diff --git a/crates/bindings-csharp/Runtime/Internal/FFI.cs b/crates/bindings-csharp/Runtime/Internal/FFI.cs index 96cd1d543e..ee26cb8cd6 100644 --- a/crates/bindings-csharp/Runtime/Internal/FFI.cs +++ b/crates/bindings-csharp/Runtime/Internal/FFI.cs @@ -155,14 +155,6 @@ public static partial CheckedStatus delete_by_col_eq( out uint out_ ); - [LibraryImport(StdbNamespace)] - public static partial CheckedStatus iter_start_filtered( - TableId table_id, - [In] byte[] filter, - uint filter_len, - out RowIter out_ - ); - [LibraryImport(StdbNamespace)] public static partial Errno row_iter_bsatn_advance( RowIter iter_handle, diff --git a/crates/bindings-csharp/Runtime/Internal/Filter.cs b/crates/bindings-csharp/Runtime/Internal/Filter.cs deleted file mode 100644 index 8288a43d69..0000000000 --- a/crates/bindings-csharp/Runtime/Internal/Filter.cs +++ /dev/null @@ -1,186 +0,0 @@ -namespace SpacetimeDB.Internal; - -using System.Linq.Expressions; -using System.Reflection; -using SpacetimeDB.BSATN; - -public partial class Filter(KeyValuePair>[] fieldTypeInfos) -{ - readonly record struct ErasedValue(Action Write) - { - public readonly struct BSATN : IReadWrite - { - public ErasedValue Read(BinaryReader reader) => throw new NotSupportedException(); - - public void Write(BinaryWriter writer, ErasedValue value) => value.Write(writer); - - public AlgebraicType GetAlgebraicType(ITypeRegistrar _) => - throw new NotSupportedException(); - } - } - - [SpacetimeDB.Type] - partial record Rhs : SpacetimeDB.TaggedEnum<(ErasedValue Value, ushort Field)>; - - [SpacetimeDB.Type] - partial struct CmpArgs(ushort lhsField, Rhs rhs) - { - public ushort LhsField = lhsField; - public Rhs Rhs = rhs; - } - - [SpacetimeDB.Type] - enum OpCmp - { - Eq, - NotEq, - Lt, - LtEq, - Gt, - GtEq, - } - - [SpacetimeDB.Type] - partial struct Cmp(OpCmp op, CmpArgs args) - { - public OpCmp op = op; - public CmpArgs args = args; - } - - [SpacetimeDB.Type] - enum OpLogic - { - And, - Or, - } - - [SpacetimeDB.Type] - partial struct Logic(Expr lhs, OpLogic op, Expr rhs) - { - public Expr lhs = lhs; - - public OpLogic op = op; - public Expr rhs = rhs; - } - - [SpacetimeDB.Type] - enum OpUnary - { - Not, - } - - [SpacetimeDB.Type] - partial struct Unary(OpUnary op, Expr arg) - { - public OpUnary op = op; - public Expr arg = arg; - } - - [SpacetimeDB.Type] - partial record Expr : SpacetimeDB.TaggedEnum<(Cmp Cmp, Logic Logic, Unary Unary)>; - - public byte[] Compile(Expression> query) - { - var expr = HandleExpr(query.Body); - return IStructuralReadWrite.ToBytes(new Expr.BSATN(), expr); - } - - static FieldInfo ExprAsTableField(Expression expr) => - expr switch - { - // LINQ inserts spurious conversions in comparisons, so we need to unwrap them - UnaryExpression { NodeType: ExpressionType.Convert, Operand: var arg } => - ExprAsTableField(arg), - MemberExpression { Expression: ParameterExpression, Member: FieldInfo field } => field, - _ => throw new NotSupportedException( - "expected table field access in the left-hand side of a comparison" - ), - }; - - static object? ExprAsRhs(Expression expr) => - expr switch - { - ConstantExpression { Value: var value } => value, - _ => Expression.Lambda(expr).Compile().DynamicInvoke(), - }; - - Cmp HandleCmp(BinaryExpression expr) - { - var field = ExprAsTableField(expr.Left); - var lhsFieldIndex = (ushort)Array.FindIndex(fieldTypeInfos, x => x.Key == field.Name); - - var rhs = ExprAsRhs(expr.Right); - rhs = Convert.ChangeType(rhs, field.FieldType); - var erasedRhs = new ErasedValue( - (writer) => fieldTypeInfos[lhsFieldIndex].Value(writer, rhs) - ); - - var args = new CmpArgs(lhsFieldIndex, new Rhs.Value(erasedRhs)); - - var op = expr.NodeType switch - { - ExpressionType.Equal => OpCmp.Eq, - ExpressionType.NotEqual => OpCmp.NotEq, - ExpressionType.LessThan => OpCmp.Lt, - ExpressionType.LessThanOrEqual => OpCmp.LtEq, - ExpressionType.GreaterThan => OpCmp.Gt, - ExpressionType.GreaterThanOrEqual => OpCmp.GtEq, - _ => throw new NotSupportedException("unsupported comparison operation"), - }; - - return new Cmp(op, args); - } - - Logic HandleLogic(BinaryExpression expr) - { - var lhs = HandleExpr(expr.Left); - var rhs = HandleExpr(expr.Right); - - var op = expr.NodeType switch - { - ExpressionType.And => OpLogic.And, - ExpressionType.Or => OpLogic.Or, - _ => throw new NotSupportedException("unsupported logic operation"), - }; - - return new Logic(lhs, op, rhs); - } - - Expr HandleBinary(BinaryExpression expr) => - expr switch - { - BinaryExpression - { - NodeType: ExpressionType.Equal - or ExpressionType.NotEqual - or ExpressionType.LessThan - or ExpressionType.LessThanOrEqual - or ExpressionType.GreaterThan - or ExpressionType.GreaterThanOrEqual - } => new Expr.Cmp(HandleCmp(expr)), - BinaryExpression { NodeType: ExpressionType.And or ExpressionType.Or } => - new Expr.Logic(HandleLogic(expr)), - _ => throw new NotSupportedException("unsupported expression"), - }; - - Expr.Unary HandleUnary(UnaryExpression expr) - { - var arg = HandleExpr(expr.Operand); - - var op = expr.NodeType switch - { - ExpressionType.Not => OpUnary.Not, - _ => throw new NotSupportedException("unsupported unary operation"), - }; - - return new(new Unary(op, arg)); - } - - Expr HandleExpr(Expression expr) => - expr switch - { - BinaryExpression binExpr => HandleBinary(binExpr), - UnaryExpression unExpr => HandleUnary(unExpr), - _ => throw new NotSupportedException("unsupported expression"), - }; -} diff --git a/crates/bindings-csharp/Runtime/Internal/ITable.cs b/crates/bindings-csharp/Runtime/Internal/ITable.cs index d8f496648b..2c8d572a85 100644 --- a/crates/bindings-csharp/Runtime/Internal/ITable.cs +++ b/crates/bindings-csharp/Runtime/Internal/ITable.cs @@ -1,6 +1,5 @@ namespace SpacetimeDB.Internal; -using System.Linq.Expressions; using SpacetimeDB.BSATN; public interface ITable : IStructuralReadWrite @@ -8,8 +7,6 @@ public interface ITable : IStructuralReadWrite { // These are the methods that codegen needs to implement. static abstract IEnumerable MakeTableDesc(ITypeRegistrar registrar); - - static abstract Filter CreateFilter(); } public interface ITableView @@ -123,12 +120,6 @@ protected override void IterStart(out FFI.RowIter handle) => FFI.datastore_table_scan_bsatn(tableId, out handle); } - private class RawTableIterFiltered(FFI.TableId tableId, byte[] filterBytes) : RawTableIterBase - { - protected override void IterStart(out FFI.RowIter handle) => - FFI.iter_start_filtered(tableId, filterBytes, (uint)filterBytes.Length, out handle); - } - private class RawTableIterByColEq(FFI.TableId tableId, FFI.ColId colId, byte[] value) : RawTableIterBase { @@ -149,11 +140,6 @@ protected override void IterStart(out FFI.RowIter handle) => public static IEnumerable Iter() => new RawTableIter(tableId).Parse(); - private static readonly Lazy filter = new(T.CreateFilter); - - public static IEnumerable Query(Expression> query) => - new RawTableIterFiltered(tableId, filter.Value.Compile(query)).Parse(); - protected static T Insert(T row) { // Insert the row. diff --git a/modules/spacetimedb-quickstart-cs/Lib.cs b/modules/spacetimedb-quickstart-cs/Lib.cs index e5efa37090..5574a1ff23 100644 --- a/modules/spacetimedb-quickstart-cs/Lib.cs +++ b/modules/spacetimedb-quickstart-cs/Lib.cs @@ -3,7 +3,8 @@ namespace SpacetimeDB.Examples.QuickStart.Server; using SpacetimeDB; [Table(Public = true)] -public partial struct Person { +public partial struct Person +{ [AutoInc] [PrimaryKey] public uint Id; @@ -32,7 +33,8 @@ public static void SayHello(ReducerContext ctx) [Reducer("list_over_age")] public static void ListOverAge(ReducerContext ctx, byte age) { - foreach (var person in ctx.Db.Person.Query(person => person.Age >= age)) + // TODO: convert this to use BTree index. + foreach (var person in ctx.Db.Person.Iter().Where(person => person.Age >= age)) { Log.Info($"{person.Name} has age {person.Age} >= {age}"); }