You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When I use Database Splitting, linq method FirstOrDefault without predicate doesn't apply Where clause.
No problem with FirstOrDefault with predicate or ToList (return generic data).
No problem without database splitting.
public class CouchDBContext : CouchContext
{
public CouchDatabase<ExampleDataCouchDB> ExampleDatas { get; set; }
public CouchDatabase<DesignDocument> Design { get; set; }
public CouchDBContext(CouchOptions<CouchDBContext> options)
: base(options) {}
protected override void OnDatabaseCreating(CouchDatabaseBuilder databaseBuilder)
{
databaseBuilder.Document<ExampleDataCouchDB>().ToDatabase("exampledata");
databaseBuilder.Document<DesignDocument>().ToDatabase("exampledata");
}
}
key = 5
var q = _couchDBContext.ExampleDatas.Where((d) => d.Id == key);
var r = q.Select(d => d.Id, d => d.Rev);
var documentId = r.FirstOrDefault(); // Use case 1 : KO
var documentId2 = r.FirstOrDefault((d) => d.Id == key); // Use case 2 : OK
var list = r.ToList(); // Use case 3 : OK
--> **documentId.Id = 1** --> should be 5
--> documentId2.Id = 5
--> list[0].Id = 5
Expected value for use case 1 : documentId.Id = 5
More debug detail there :
Use case 1 : r.FirstOrDefault();KO
class QueryOptimizer, method Optimize(Expression e, string? discriminator) :
--> e = {{"selector":{"split_discriminator":"ExampleDataCouchDB"}}.Where(d => (d.Id == value(IsiaGroup.Backend.ExampleApi.Controllers.ExamplesController+<>c__DisplayClass15_0).key)).Select(value(System.Linq.Expressions.Expression`1[System.Func`2[IsiaGroup.Backend.ExampleApi.ModelsCouchDB.ExampleDataCouchDB,System.Object]][])).FirstOrDefault()}
--> discriminator = ExampleDataCouchDB
--> return is
{{"selector":{"split_discriminator":"ExampleDataCouchDB"}}.Where(d => (d.Id == "1019")).Select(value(System.Linq.Expressions.Expression`1[System.Func`2[IsiaGroup.Backend.ExampleApi.ModelsCouchDB.ExampleDataCouchDB,System.Object]][])).Where(d => (d.SplitDiscriminator == "ExampleDataCouchDB")).Take(1).FirstOrDefault()}
class QueryCompiler, method SendRequestWithFilter, line 89
--> body = "{\"selector\":{\"_id\":\"1019\"},\"fields\":[\"_id\",\"_rev\"],\"selector\":{\"split_discriminator\":\"ExampleDataCouchDB\"},\"limit\":1}"
Expected value for body :
"{"fields":["_id","_rev"],"selector":{"$and":[{"_id":"1019"},{"split_discriminator":"ExampleDataCouchDB"}}]},"limit":1}"
Use case 2 : r.FirstOrDefault((d) => d.Id == key); : OK
class QueryOptimizer, method Optimize(Expression e, string? discriminator) :
--> e = {{"selector":{"split_discriminator":"ExampleDataCouchDB"}}.Where(d => (d.Id == value(IsiaGroup.Backend.ExampleApi.Controllers.ExamplesController+<>c__DisplayClass15_0).key)).Select(value(System.Linq.Expressions.Expression`1[System.Func`2[IsiaGroup.Backend.ExampleApi.ModelsCouchDB.ExampleDataCouchDB,System.Object]][])).FirstOrDefault(d => (d.Id == value(IsiaGroup.Backend.ExampleApi.Controllers.ExamplesController+<>c__DisplayClass15_0).key))}
--> discriminator = ExampleDataCouchDB
--> return is
{{"selector":{"split_discriminator":"ExampleDataCouchDB"}}.Select(value(System.Linq.Expressions.Expression`1[System.Func`2[IsiaGroup.Backend.ExampleApi.ModelsCouchDB.ExampleDataCouchDB,System.Object]][])).Where(d => ((d.Id == "1019") AndAlso ((d.SplitDiscriminator == "ExampleDataCouchDB") AndAlso (d.Id == "1019")))).Take(1).FirstOrDefault()}
class QueryCompiler, method SendRequestWithFilter, line 89
--> body = "{\"fields\":[\"_id\",\"_rev\"],\"selector\":{\"$and\":[{\"_id\":\"1019\"},{\"split_discriminator\":\"ExampleDataCouchDB\"},{\"_id\":\"1019\"}]},\"limit\":1}"
Use case 3 : r.ToList();OK
class QueryOptimizer, method Optimize(Expression e, string? discriminator) :
--> e = {{"selector":{"split_discriminator":"ExampleDataCouchDB"}}.Where(d => (d.Id == value(IsiaGroup.Backend.ExampleApi.Controllers.ExamplesController+<>c__DisplayClass15_0).key)).Select(value(System.Linq.Expressions.Expression`1[System.Func`2[IsiaGroup.Backend.ExampleApi.ModelsCouchDB.ExampleDataCouchDB,System.Object]][]))}
--> discriminator = ExampleDataCouchDB
--> return is
{{"selector":{"split_discriminator":"ExampleDataCouchDB"}}.Select(value(System.Linq.Expressions.Expression`1[System.Func`2[IsiaGroup.Backend.ExampleApi.ModelsCouchDB.ExampleDataCouchDB,System.Object]][])).Where(d => ((d.Id == "1019") AndAlso (d.SplitDiscriminator == "ExampleDataCouchDB")))}
class QueryCompiler, method SendRequestWithFilter, line 89
--> body = "{\"fields\":[\"_id\",\"_rev\"],\"selector\":{\"$and\":[{\"_id\":\"1019\"},{\"split_discriminator\":\"ExampleDataCouchDB\"}]}}"
The text was updated successfully, but these errors were encountered:
When I use Database Splitting, linq method FirstOrDefault without predicate doesn't apply Where clause.
No problem with FirstOrDefault with predicate or ToList (return generic data).
No problem without database splitting.
Expected value for use case 1 : documentId.Id = 5
More debug detail there :
Use case 1 : r.FirstOrDefault(); KO
Expected value for body :
"{"fields":["_id","_rev"],"selector":{"$and":[{"_id":"1019"},{"split_discriminator":"ExampleDataCouchDB"}}]},"limit":1}"
Use case 2 : r.FirstOrDefault((d) => d.Id == key); : OK
Use case 3 : r.ToList(); OK
The text was updated successfully, but these errors were encountered: