diff --git a/src/EFCore.Relational/Query/RelationalQueryableMethodTranslatingExpressionVisitor.ExecuteUpdate.cs b/src/EFCore.Relational/Query/RelationalQueryableMethodTranslatingExpressionVisitor.ExecuteUpdate.cs index bd5133f7c3f..f3843a9dbcb 100644 --- a/src/EFCore.Relational/Query/RelationalQueryableMethodTranslatingExpressionVisitor.ExecuteUpdate.cs +++ b/src/EFCore.Relational/Query/RelationalQueryableMethodTranslatingExpressionVisitor.ExecuteUpdate.cs @@ -89,7 +89,7 @@ public partial class RelationalQueryableMethodTranslatingExpressionVisitor RemapLambdaBody(source, firstPropertySelector).UnwrapTypeConversion(out _), RelationalDependencies.Model, out var baseExpression) - || baseExpression.UnwrapTypeConversion(out _) is not StructuralTypeShaperExpression shaper) + || _sqlTranslator.TranslateProjection(baseExpression) is not StructuralTypeShaperExpression shaper) { AddTranslationErrorDetails(RelationalStrings.InvalidPropertyInSetProperty(firstPropertySelector)); return null; @@ -270,14 +270,65 @@ protected virtual bool TryTranslateSetters( var (propertySelector, valueSelector) = setter; var propertySelectorBody = RemapLambdaBody(source, propertySelector).UnwrapTypeConversion(out _); - // The top-most node on the property selector must be a member access; chop it off to get the base expression and member. - // We'll bind the member manually below, so as to get the IPropertyBase it represents - that's important for later. - if (!IsMemberAccess(propertySelectorBody, QueryCompilationContext.Model, out var baseExpression, out var member) - || !_sqlTranslator.TryBindMember( - _sqlTranslator.Visit(baseExpression), member, out var target, out var targetProperty)) + // First, translate the property selector of the selector (left-hand side). + // The top-most node on the property selector must generally be a member access which corresponds to the property + // we will be updating (we also support ElementAt over that for indexing into collections). + // Later down we'll need the model property, so we can't just translate the entire expression as-is; we instead + // specifically recognize member access expressions and manually bind the member access to get the property out. + Expression target; + IPropertyBase targetProperty; + + switch (propertySelectorBody) { - AddTranslationErrorDetails(RelationalStrings.InvalidPropertyInSetProperty(propertySelector.Print())); - return false; + // Regular member access (common case) + case var _ when TryTranslateMemberAccess(propertySelectorBody, out var tempTarget, out var tempTargetProperty): + target = tempTarget; + targetProperty = tempTargetProperty; + break; + + // Index access inside collections - we get a property selector with .AsQueryable().ElementAt(6) + case MethodCallExpression + { + Method: { Name: nameof(Enumerable.ElementAt), IsGenericMethod: true } elementAtMethod, + Arguments: + [ + MethodCallExpression + { + Method: { Name: nameof(Queryable.AsQueryable), IsGenericMethod: true } asQueryableMethod, + Arguments: [var elementAtSource] + }, + _ + ] + } methodCall + when elementAtMethod.GetGenericMethodDefinition() == QueryableMethods.ElementAt + && asQueryableMethod.GetGenericMethodDefinition() == QueryableMethods.AsQueryable + && TryTranslateMemberAccess(elementAtSource, out var translatedMember, out var tempTargetProperty) + && Visit(methodCall) is Expression tempTarget: + target = tempTarget; + targetProperty = tempTargetProperty; + break; + + default: + AddTranslationErrorDetails(RelationalStrings.InvalidPropertyInSetProperty(propertySelector.Print())); + return false; + + bool TryTranslateMemberAccess( + Expression expression, + [NotNullWhen(true)] out Expression? translation, + [NotNullWhen(true)] out IPropertyBase? property) + { + if (IsMemberAccess(expression, QueryCompilationContext.Model, out var baseExpression, out var member) + && _sqlTranslator.TryBindMember(_sqlTranslator.Visit(baseExpression), member, out var target, out var targetProperty)) + { + translation = target; + property = targetProperty; + return true; + } + + translation = null; + property = null; + return false; + } } if (targetProperty.DeclaringType is IEntityType entityType && entityType.IsMappedToJson()) @@ -291,7 +342,15 @@ protected virtual bool TryTranslateSetters( // Call TranslateProjection to unwrap it (need to look into getting rid StructuralTypeReferenceExpression altogether). if (target is not CollectionResultExpression) { - target = _sqlTranslator.TranslateProjection(target); + if (_sqlTranslator.TranslateProjection(target) is { } unwrappedTarget) + { + target = unwrappedTarget; + } + else + { + AddTranslationErrorDetails(RelationalStrings.InvalidPropertyInSetProperty(propertySelector.Print())); + return false; + } } switch (target) diff --git a/src/EFCore.SqlServer/Query/Internal/SqlServerQueryableMethodTranslatingExpressionVisitor.cs b/src/EFCore.SqlServer/Query/Internal/SqlServerQueryableMethodTranslatingExpressionVisitor.cs index f73e4f4589e..d4c634aea00 100644 --- a/src/EFCore.SqlServer/Query/Internal/SqlServerQueryableMethodTranslatingExpressionVisitor.cs +++ b/src/EFCore.SqlServer/Query/Internal/SqlServerQueryableMethodTranslatingExpressionVisitor.cs @@ -443,8 +443,8 @@ bool TryTranslate( // JSON_VALUE within JSON_VALUE. var (json, path) = jsonArrayColumn is JsonScalarExpression innerJsonScalarExpression ? (innerJsonScalarExpression.Json, - innerJsonScalarExpression.Path.Append(new PathSegment(translatedIndex)).ToArray()) - : (jsonArrayColumn, new PathSegment[] { new(translatedIndex) }); + innerJsonScalarExpression.Path.Append(new(translatedIndex)).ToArray()) + : (jsonArrayColumn, [new(translatedIndex)]); var translation = new JsonScalarExpression( json, @@ -581,10 +581,11 @@ protected override bool TryTranslateSetters( SqlExpression value, ref SqlExpression? existingSetterValue) { - var (jsonColumn, path) = target switch + var (jsonColumn, path, isJsonScalar) = target switch { - JsonScalarExpression j => ((ColumnExpression)j.Json, j.Path), - JsonQueryExpression j => (j.JsonColumn, j.Path), + JsonScalarExpression { TypeMapping.ElementTypeMapping: null } j => ((ColumnExpression)j.Json, j.Path, true), + JsonScalarExpression { TypeMapping.ElementTypeMapping: not null } j => ((ColumnExpression)j.Json, j.Path, false), + JsonQueryExpression j => (j.JsonColumn, j.Path, false), _ => throw new UnreachableException(), }; @@ -612,14 +613,14 @@ protected override bool TryTranslateSetters( // as a constant argument; it will be unpacked and handled in SQL generation. _sqlExpressionFactory.Constant(path, RelationalTypeMapping.NullMapping), - // If an inline JSON object (complex type) is being assigned, it would be rendered here as a simple string: - // [column].modify('$.foo', '{ "x": 8 }') - // Since it's untyped, modify would treat is as a string rather than a JSON object, and insert it as such into - // the enclosing object, escaping all the special JSON characters - that's not what we want. - // We add a cast to JSON to have it interpreted as a JSON object. - value is SqlConstantExpression { TypeMapping.StoreType: "json" } - ? _sqlExpressionFactory.Convert(value, value.Type, _typeMappingSource.FindMapping("json")!) - : value + // If an inline JSON object (complex type) is being assigned, it would be rendered here as a simple string: + // [column].modify('$.foo', '{ "x": 8 }') + // Since it's untyped, modify would treat is as a string rather than a JSON object, and insert it as such into + // the enclosing object, escaping all the special JSON characters - that's not what we want. + // We add a cast to JSON to have it interpreted as a JSON object. + value is SqlConstantExpression { TypeMapping.StoreType: "json" } + ? _sqlExpressionFactory.Convert(value, value.Type, _typeMappingSource.FindMapping("json")!) + : value ], nullable: true, instancePropagatesNullability: true, @@ -642,11 +643,12 @@ protected override bool TryTranslateSetters( // as a constant argument; it will be unpacked and handled in SQL generation. _sqlExpressionFactory.Constant(path, RelationalTypeMapping.NullMapping), // JSON_MODIFY by default assumes nvarchar(max) is text and escapes it. - // In order to set a JSON fragment (for nested JSON objects), we need to wrap the JSON text with JSON_QUERY(), which makes - // JSON_MODIFY understand that it's JSON content and prevents escaping. - target is JsonQueryExpression && value is not JsonScalarExpression - ? _sqlExpressionFactory.Function("JSON_QUERY", [value], nullable: true, argumentsPropagateNullability: [true], typeof(string), value.TypeMapping) - : value + // In order to set a JSON fragment (for nested JSON objects, primitive collections), we need to wrap the JSON text with + // JSON_QUERY(), which makes JSON_MODIFY understand that it's JSON content and prevents escaping. + // If the value expression happens to be JsonScalarExpression (i.e. another JSON property), we don't need to do this. + isJsonScalar || value is JsonScalarExpression + ? value + : _sqlExpressionFactory.Function("JSON_QUERY", [value], nullable: true, argumentsPropagateNullability: [true], typeof(string), value.TypeMapping) ], nullable: true, argumentsPropagateNullability: [true, true, true], diff --git a/src/EFCore.Sqlite.Core/Query/Internal/SqliteQueryableMethodTranslatingExpressionVisitor.cs b/src/EFCore.Sqlite.Core/Query/Internal/SqliteQueryableMethodTranslatingExpressionVisitor.cs index a8e4f39d377..89ee3a15224 100644 --- a/src/EFCore.Sqlite.Core/Query/Internal/SqliteQueryableMethodTranslatingExpressionVisitor.cs +++ b/src/EFCore.Sqlite.Core/Query/Internal/SqliteQueryableMethodTranslatingExpressionVisitor.cs @@ -554,9 +554,16 @@ bool TryTranslate( if (shaperExpression is ProjectionBindingExpression projectionBindingExpression && selectExpression.GetProjection(projectionBindingExpression) is ColumnExpression projectionColumn) { + // If the inner expression happens to itself be a JsonScalarExpression, simply append the two paths to avoid creating + // JSON_VALUE within JSON_VALUE. + var (json, path) = jsonArrayColumn is JsonScalarExpression innerJsonScalarExpression + ? (innerJsonScalarExpression.Json, + innerJsonScalarExpression.Path.Append(new(translatedIndex)).ToArray()) + : (jsonArrayColumn, [new(translatedIndex)]); + SqlExpression translation = new JsonScalarExpression( - jsonArrayColumn, - [new PathSegment(translatedIndex)], + json, + path, projectionColumn.Type, projectionColumn.TypeMapping, projectionColumn.IsNullable); @@ -642,10 +649,11 @@ protected override bool TrySerializeScalarToJson( SqlExpression value, ref SqlExpression? existingSetterValue) { - var (jsonColumn, path) = target switch + var (jsonColumn, path, isJsonScalar) = target switch { - JsonScalarExpression j => ((ColumnExpression)j.Json, j.Path), - JsonQueryExpression j => (j.JsonColumn, j.Path), + JsonScalarExpression { TypeMapping.ElementTypeMapping: null } j => ((ColumnExpression)j.Json, j.Path, true), + JsonScalarExpression { TypeMapping.ElementTypeMapping: not null } j => ((ColumnExpression)j.Json, j.Path, false), + JsonQueryExpression j => (j.JsonColumn, j.Path, false), _ => throw new UnreachableException(), }; @@ -661,9 +669,9 @@ protected override bool TrySerializeScalarToJson( // json_set by default assumes text and escapes it. // In order to set a JSON fragment (for nested JSON objects), we need to wrap the JSON text with json(), which makes // json_set understand that it's JSON content and prevents escaping. - target is JsonQueryExpression - ? _sqlExpressionFactory.Function("json", [value], nullable: true, argumentsPropagateNullability: [true], typeof(string), value.TypeMapping) - : value + isJsonScalar + ? value + : _sqlExpressionFactory.Function("json", [value], nullable: true, argumentsPropagateNullability: [true], typeof(string), value.TypeMapping) ], nullable: true, argumentsPropagateNullability: [true, true, true], diff --git a/src/EFCore/Query/Internal/NavigationExpandingExpressionVisitor.cs b/src/EFCore/Query/Internal/NavigationExpandingExpressionVisitor.cs index 39e6d83cdbf..6a5c7715f08 100644 --- a/src/EFCore/Query/Internal/NavigationExpandingExpressionVisitor.cs +++ b/src/EFCore/Query/Internal/NavigationExpandingExpressionVisitor.cs @@ -1,6 +1,7 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. +using System.Runtime.CompilerServices; using Microsoft.EntityFrameworkCore.Internal; using Microsoft.EntityFrameworkCore.Metadata.Internal; using ExpressionExtensions = Microsoft.EntityFrameworkCore.Infrastructure.ExpressionExtensions; @@ -582,13 +583,15 @@ when QueryableMethods.IsSumWithSelector(method): thenInclude: false, setLoaded: false); - // Handled by relational/provider even though method is on `EntityFrameworkQueryableExtensions` - case nameof(EntityFrameworkQueryableExtensions.ExecuteDelete): - case nameof(EntityFrameworkQueryableExtensions.ExecuteDeleteAsync): - case nameof(EntityFrameworkQueryableExtensions.ExecuteUpdate): - case nameof(EntityFrameworkQueryableExtensions.ExecuteUpdateAsync): + // Nothing to do (no arguments), the generic unknown method logic handles the source. + case nameof(EntityFrameworkQueryableExtensions.ExecuteDelete) + when genericMethod == EntityFrameworkQueryableExtensions.ExecuteDeleteMethodInfo: return ProcessUnknownMethod(methodCallExpression); + case nameof(EntityFrameworkQueryableExtensions.ExecuteUpdate) + when genericMethod == EntityFrameworkQueryableExtensions.ExecuteUpdateMethodInfo: + return ProcessExecuteUpdate(source, genericMethod, methodCallExpression.Arguments[1]); + case nameof(Queryable.GroupBy) when genericMethod == QueryableMethods.GroupByWithKeySelector: return ProcessGroupBy( @@ -1057,6 +1060,47 @@ private NavigationExpansionExpression ProcessElementAt( return source; } + private Expression ProcessExecuteUpdate(NavigationExpansionExpression source, MethodInfo method, Expression setters) + { + source = (NavigationExpansionExpression)_pendingSelectorExpandingExpressionVisitor.Visit(source); + + NewArrayExpression settersArray; + switch (setters) + { + case NewArrayExpression e: + settersArray = e; + break; + // Empty setters - nothing to do here (we'll throw an error later in the query pipeline) + case ConstantExpression { Value: ITuple[] { Length: 0 } }: + return Expression.Call(method.MakeGenericMethod(source.SourceElementType), source.Source, setters); + default: + throw new UnreachableException(); + } + + var newSetters = new Expression[settersArray.Expressions.Count]; + + for (var i = 0; i < settersArray.Expressions.Count; i++) + { + var setter = (NewExpression)settersArray.Expressions[i]; + + Check.DebugAssert(setter.Type == typeof(Tuple)); + + var (propertySelector, valueSelector) = ((LambdaExpression)setter.Arguments[0], setter.Arguments[1]); + + var processedPropertySelector = ProcessLambdaExpression(source, propertySelector); + var processedValueSelector = valueSelector is LambdaExpression valueSelectorLambda + ? ProcessLambdaExpression(source, valueSelectorLambda) + : Visit(valueSelector); + + newSetters[i] = Expression.New(setter.Constructor!, processedPropertySelector, processedValueSelector); + } + + return Expression.Call( + method.MakeGenericMethod(source.SourceElementType), + source.Source, + Expression.NewArrayInit(typeof(Tuple), newSetters)); + } + // This returns Expression since it can also return a deferred GroupBy operation private Expression ProcessGroupBy( NavigationExpansionExpression source, @@ -2316,6 +2360,7 @@ private static Expression SnapshotExpression(Expression selector) { EntityReference entityReference => entityReference, ComplexTypeReference complexTypeReference => complexTypeReference, + ComplexPropertyReference complexPropertyReference => complexPropertyReference.ComplexTypeReference, NavigationTreeExpression navigationTreeExpression => UnwrapStructuralTypeReference(navigationTreeExpression.Value), NavigationExpansionExpression navigationExpansionExpression when navigationExpansionExpression.CardinalityReducingGenericMethodInfo is not null diff --git a/test/EFCore.Cosmos.FunctionalTests/Query/Associations/OwnedNavigations/OwnedNavigationsPrimitiveCollectionCosmosTest.cs b/test/EFCore.Cosmos.FunctionalTests/Query/Associations/OwnedNavigations/OwnedNavigationsPrimitiveCollectionCosmosTest.cs new file mode 100644 index 00000000000..54f8cc24f8a --- /dev/null +++ b/test/EFCore.Cosmos.FunctionalTests/Query/Associations/OwnedNavigations/OwnedNavigationsPrimitiveCollectionCosmosTest.cs @@ -0,0 +1,97 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace Microsoft.EntityFrameworkCore.Query.Associations.OwnedNavigations; + +public class OwnedNavigationsPrimitiveCollectionCosmosTest : OwnedNavigationsPrimitiveCollectionTestBase +{ + public OwnedNavigationsPrimitiveCollectionCosmosTest(OwnedNavigationsCosmosFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + public override async Task Count() + { + await base.Count(); + + AssertSql( + """ +SELECT VALUE c +FROM root c +WHERE (ARRAY_LENGTH(c["RequiredRelated"]["Ints"]) = 3) +"""); + } + + public override async Task Index() + { + await base.Index(); + + AssertSql( + """ +SELECT VALUE c +FROM root c +WHERE (c["RequiredRelated"]["Ints"][0] = 1) +"""); + } + + public override async Task Contains() + { + await base.Contains(); + + AssertSql( + """ +SELECT VALUE c +FROM root c +WHERE ARRAY_CONTAINS(c["RequiredRelated"]["Ints"], 3) +"""); + } + + public override async Task Any_predicate() + { + await base.Any_predicate(); + + AssertSql( + """ +SELECT VALUE c +FROM root c +WHERE ARRAY_CONTAINS(c["RequiredRelated"]["Ints"], 2) +"""); + } + + public override async Task Nested_Count() + { + await base.Nested_Count(); + + AssertSql( + """ +SELECT VALUE c +FROM root c +WHERE (ARRAY_LENGTH(c["RequiredRelated"]["RequiredNested"]["Ints"]) = 3) +"""); + } + + public override async Task Select_Sum() + { + await base.Select_Sum(); + + AssertSql( + """ +SELECT VALUE ( + SELECT VALUE SUM(i0) + FROM i0 IN c["RequiredRelated"]["Ints"]) +FROM root c +WHERE (( + SELECT VALUE SUM(i) + FROM i IN c["RequiredRelated"]["Ints"]) >= 6) +"""); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); +} diff --git a/test/EFCore.InMemory.FunctionalTests/InMemoryComplianceTest.cs b/test/EFCore.InMemory.FunctionalTests/InMemoryComplianceTest.cs index cb629ea7d55..936daf32e3d 100644 --- a/test/EFCore.InMemory.FunctionalTests/InMemoryComplianceTest.cs +++ b/test/EFCore.InMemory.FunctionalTests/InMemoryComplianceTest.cs @@ -34,12 +34,14 @@ public class InMemoryComplianceTest : ComplianceTestBase // Relationships tests - not implemented for InMemory typeof(AssociationsCollectionTestBase<>), typeof(AssociationsMiscellaneousTestBase<>), + typeof(AssociationsPrimitiveCollectionTestBase<>), typeof(AssociationsProjectionTestBase<>), typeof(AssociationsSetOperationsTestBase<>), typeof(AssociationsStructuralEqualityTestBase<>), typeof(AssociationsBulkUpdateTestBase<>), typeof(ComplexPropertiesCollectionTestBase<>), typeof(ComplexPropertiesMiscellaneousTestBase<>), + typeof(ComplexPropertiesPrimitiveCollectionTestBase<>), typeof(ComplexPropertiesProjectionTestBase<>), typeof(ComplexPropertiesSetOperationsTestBase<>), typeof(ComplexPropertiesStructuralEqualityTestBase<>), @@ -47,11 +49,13 @@ public class InMemoryComplianceTest : ComplianceTestBase typeof(NavigationsCollectionTestBase<>), typeof(NavigationsIncludeTestBase<>), typeof(NavigationsMiscellaneousTestBase<>), + typeof(NavigationsPrimitiveCollectionTestBase<>), typeof(NavigationsProjectionTestBase<>), typeof(NavigationsSetOperationsTestBase<>), typeof(NavigationsStructuralEqualityTestBase<>), typeof(OwnedNavigationsCollectionTestBase<>), typeof(OwnedNavigationsMiscellaneousTestBase<>), + typeof(OwnedNavigationsPrimitiveCollectionTestBase<>), typeof(OwnedNavigationsProjectionTestBase<>), typeof(OwnedNavigationsSetOperationsTestBase<>), typeof(OwnedNavigationsStructuralEqualityTestBase<>) diff --git a/test/EFCore.Relational.Specification.Tests/BulkUpdates/NorthwindBulkUpdatesRelationalTestBase.cs b/test/EFCore.Relational.Specification.Tests/BulkUpdates/NorthwindBulkUpdatesRelationalTestBase.cs index 627df2a3344..2db7d066f6d 100644 --- a/test/EFCore.Relational.Specification.Tests/BulkUpdates/NorthwindBulkUpdatesRelationalTestBase.cs +++ b/test/EFCore.Relational.Specification.Tests/BulkUpdates/NorthwindBulkUpdatesRelationalTestBase.cs @@ -63,12 +63,12 @@ public override Task Update_without_property_to_set_throws(bool async) public override Task Update_with_invalid_lambda_in_set_property_throws(bool async) => AssertTranslationFailed( RelationalStrings.InvalidPropertyInSetProperty( - new ExpressionPrinter().PrintExpression((OrderDetail e) => e.MaybeScalar(e => e.OrderID))), + new ExpressionPrinter().PrintExpression((OrderDetail o) => o.MaybeScalar(e => e.OrderID))), () => base.Update_with_invalid_lambda_in_set_property_throws(async)); public override Task Update_multiple_tables_throws(bool async) => AssertTranslationFailed( - RelationalStrings.MultipleTablesInExecuteUpdate("c => c.e.OrderDate", "c => c.Customer.ContactName"), + RelationalStrings.MultipleTablesInExecuteUpdate("o => o.Outer.OrderDate", "o => o.Inner.ContactName"), () => base.Update_multiple_tables_throws(async)); public override Task Update_unmapped_property_throws(bool async) diff --git a/test/EFCore.Relational.Specification.Tests/BulkUpdates/TPTFiltersInheritanceBulkUpdatesTestBase.cs b/test/EFCore.Relational.Specification.Tests/BulkUpdates/TPTFiltersInheritanceBulkUpdatesTestBase.cs index 3fbb93703b5..8fb8a516f9b 100644 --- a/test/EFCore.Relational.Specification.Tests/BulkUpdates/TPTFiltersInheritanceBulkUpdatesTestBase.cs +++ b/test/EFCore.Relational.Specification.Tests/BulkUpdates/TPTFiltersInheritanceBulkUpdatesTestBase.cs @@ -35,7 +35,7 @@ public override Task Delete_GroupBy_Where_Select_First_3(bool async) public override Task Update_base_and_derived_types(bool async) => AssertTranslationFailed( - RelationalStrings.MultipleTablesInExecuteUpdate("e => e.FoundOn", "e => e.Name"), + RelationalStrings.MultipleTablesInExecuteUpdate("k => k.FoundOn", "k => k.Name"), () => base.Update_base_and_derived_types(async)); // Keyless entities are mapped as TPH only diff --git a/test/EFCore.Relational.Specification.Tests/BulkUpdates/TPTInheritanceBulkUpdatesTestBase.cs b/test/EFCore.Relational.Specification.Tests/BulkUpdates/TPTInheritanceBulkUpdatesTestBase.cs index 72cf1ca20b5..4a3582db096 100644 --- a/test/EFCore.Relational.Specification.Tests/BulkUpdates/TPTInheritanceBulkUpdatesTestBase.cs +++ b/test/EFCore.Relational.Specification.Tests/BulkUpdates/TPTInheritanceBulkUpdatesTestBase.cs @@ -49,7 +49,7 @@ public override Task Delete_where_using_hierarchy_derived(bool async) public override Task Update_base_and_derived_types(bool async) => AssertTranslationFailed( - RelationalStrings.MultipleTablesInExecuteUpdate("e => e.FoundOn", "e => e.Name"), + RelationalStrings.MultipleTablesInExecuteUpdate("k => k.FoundOn", "k => k.Name"), () => base.Update_base_and_derived_types(async)); // Keyless entities are mapped as TPH only diff --git a/test/EFCore.Relational.Specification.Tests/Query/Associations/ComplexJson/ComplexJsonBulkUpdateRelationalTestBase.cs b/test/EFCore.Relational.Specification.Tests/Query/Associations/ComplexJson/ComplexJsonBulkUpdateRelationalTestBase.cs index 815b7ecdb59..ae63aa116f0 100644 --- a/test/EFCore.Relational.Specification.Tests/Query/Associations/ComplexJson/ComplexJsonBulkUpdateRelationalTestBase.cs +++ b/test/EFCore.Relational.Specification.Tests/Query/Associations/ComplexJson/ComplexJsonBulkUpdateRelationalTestBase.cs @@ -33,6 +33,10 @@ public override Task Update_property_on_projected_association_with_OrderBy_Skip( public override Task Update_collection_referencing_the_original_collection() => Assert.ThrowsAsync(base.Update_collection_referencing_the_original_collection); + // #36722: support ExecuteUpdate inside structural collections mapped to JSON + public override Task Update_inside_structural_collection() + => Assert.ThrowsAsync(base.Update_inside_structural_collection); + protected void AssertSql(params string[] expected) => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); diff --git a/test/EFCore.Relational.Specification.Tests/Query/Associations/ComplexJson/ComplexJsonPrimitiveCollectionRelationalTestBase.cs b/test/EFCore.Relational.Specification.Tests/Query/Associations/ComplexJson/ComplexJsonPrimitiveCollectionRelationalTestBase.cs new file mode 100644 index 00000000000..d7c0387c3c7 --- /dev/null +++ b/test/EFCore.Relational.Specification.Tests/Query/Associations/ComplexJson/ComplexJsonPrimitiveCollectionRelationalTestBase.cs @@ -0,0 +1,20 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Microsoft.EntityFrameworkCore.Query.Associations.ComplexProperties; + +namespace Microsoft.EntityFrameworkCore.Query.Associations.ComplexJson; + +public abstract class ComplexJsonPrimitiveCollectionRelationalTestBase : ComplexPropertiesPrimitiveCollectionTestBase + where TFixture : ComplexJsonRelationalFixtureBase, new() +{ + public ComplexJsonPrimitiveCollectionRelationalTestBase(TFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + protected void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); +} diff --git a/test/EFCore.Relational.Specification.Tests/Query/Associations/ComplexTableSplitting/ComplexTableSplittingBulkUpdateRelationalTestBase.cs b/test/EFCore.Relational.Specification.Tests/Query/Associations/ComplexTableSplitting/ComplexTableSplittingBulkUpdateRelationalTestBase.cs index d90f17ad099..c4e4079eb4e 100644 --- a/test/EFCore.Relational.Specification.Tests/Query/Associations/ComplexTableSplitting/ComplexTableSplittingBulkUpdateRelationalTestBase.cs +++ b/test/EFCore.Relational.Specification.Tests/Query/Associations/ComplexTableSplitting/ComplexTableSplittingBulkUpdateRelationalTestBase.cs @@ -71,6 +71,14 @@ public override async Task Update_nested_collection_to_another_nested_collection AssertExecuteUpdateSql(); } + // Collections are not supported with table splitting, only JSON + public override async Task Update_inside_structural_collection() + { + await Assert.ThrowsAsync(base.Update_inside_structural_collection); + + AssertExecuteUpdateSql(); + } + #endregion Update collection protected void AssertSql(params string[] expected) diff --git a/test/EFCore.Relational.Specification.Tests/Query/Associations/ComplexTableSplitting/ComplexTableSplittingPrimitiveCollectionRelationalTestBase.cs b/test/EFCore.Relational.Specification.Tests/Query/Associations/ComplexTableSplitting/ComplexTableSplittingPrimitiveCollectionRelationalTestBase.cs new file mode 100644 index 00000000000..ffc569d8047 --- /dev/null +++ b/test/EFCore.Relational.Specification.Tests/Query/Associations/ComplexTableSplitting/ComplexTableSplittingPrimitiveCollectionRelationalTestBase.cs @@ -0,0 +1,20 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Microsoft.EntityFrameworkCore.Query.Associations.ComplexProperties; + +namespace Microsoft.EntityFrameworkCore.Query.Associations.ComplexTableSplitting; + +public abstract class ComplexTableSplittingPrimitiveCollectionRelationalTestBase : ComplexPropertiesPrimitiveCollectionTestBase + where TFixture : ComplexTableSplittingRelationalFixtureBase, new() +{ + public ComplexTableSplittingPrimitiveCollectionRelationalTestBase(TFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + protected void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); +} diff --git a/test/EFCore.Relational.Specification.Tests/Query/Associations/Navigations/NavigationsPrimitiveCollectionRelationalTestBase.cs b/test/EFCore.Relational.Specification.Tests/Query/Associations/Navigations/NavigationsPrimitiveCollectionRelationalTestBase.cs new file mode 100644 index 00000000000..f1651e85ba5 --- /dev/null +++ b/test/EFCore.Relational.Specification.Tests/Query/Associations/Navigations/NavigationsPrimitiveCollectionRelationalTestBase.cs @@ -0,0 +1,18 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace Microsoft.EntityFrameworkCore.Query.Associations.Navigations; + +public abstract class NavigationsPrimitiveCollectionRelationalTestBase : NavigationsPrimitiveCollectionTestBase + where TFixture : NavigationsRelationalFixtureBase, new() +{ + public NavigationsPrimitiveCollectionRelationalTestBase(TFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + protected void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); +} diff --git a/test/EFCore.Relational.Specification.Tests/Query/Associations/OwnedJson/OwnedJsonBulkUpdateRelationalTestBase.cs b/test/EFCore.Relational.Specification.Tests/Query/Associations/OwnedJson/OwnedJsonBulkUpdateRelationalTestBase.cs index dc2f6d627c1..9df308020d9 100644 --- a/test/EFCore.Relational.Specification.Tests/Query/Associations/OwnedJson/OwnedJsonBulkUpdateRelationalTestBase.cs +++ b/test/EFCore.Relational.Specification.Tests/Query/Associations/OwnedJson/OwnedJsonBulkUpdateRelationalTestBase.cs @@ -42,14 +42,16 @@ public virtual async Task Update_association() { var newNested = new NestedType { + Id = 1000, Name = "Updated nested name", Int = 80, - String = "Updated nested string" + String = "Updated nested string", + Ints = [1, 2, 4] }; await AssertTranslationFailedWithDetails( - RelationalStrings.InvalidPropertyInSetProperty("x => x.RequiredRelated.RequiredNested"), - // RelationalStrings.ExecuteOperationOnOwnedJsonIsNotSupported("ExecuteUpdate", "RootEntity.RequiredRelated#RelatedType"), + RelationalStrings.InvalidPropertyInSetProperty( + """r => EF.Property(EF.Property(r, "RequiredRelated"), "RequiredNested")"""), () => AssertUpdate( ss => ss.Set(), c => c, diff --git a/test/EFCore.Relational.Specification.Tests/Query/Associations/OwnedJson/OwnedJsonPrimitiveCollectionRelationalTestBase.cs b/test/EFCore.Relational.Specification.Tests/Query/Associations/OwnedJson/OwnedJsonPrimitiveCollectionRelationalTestBase.cs new file mode 100644 index 00000000000..933dee195b9 --- /dev/null +++ b/test/EFCore.Relational.Specification.Tests/Query/Associations/OwnedJson/OwnedJsonPrimitiveCollectionRelationalTestBase.cs @@ -0,0 +1,20 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Microsoft.EntityFrameworkCore.Query.Associations.OwnedNavigations; + +namespace Microsoft.EntityFrameworkCore.Query.Associations.OwnedJson; + +public abstract class OwnedJsonPrimitiveCollectionRelationalTestBase : OwnedNavigationsPrimitiveCollectionTestBase + where TFixture : OwnedJsonRelationalFixtureBase, new() +{ + public OwnedJsonPrimitiveCollectionRelationalTestBase(TFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + protected void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); +} diff --git a/test/EFCore.Relational.Specification.Tests/Query/Associations/OwnedNavigations/OwnedNavigationsPrimitiveCollectionRelationalTestBase.cs b/test/EFCore.Relational.Specification.Tests/Query/Associations/OwnedNavigations/OwnedNavigationsPrimitiveCollectionRelationalTestBase.cs new file mode 100644 index 00000000000..94553b997ab --- /dev/null +++ b/test/EFCore.Relational.Specification.Tests/Query/Associations/OwnedNavigations/OwnedNavigationsPrimitiveCollectionRelationalTestBase.cs @@ -0,0 +1,18 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace Microsoft.EntityFrameworkCore.Query.Associations.OwnedNavigations; + +public abstract class OwnedNavigationsPrimitiveCollectionRelationalTestBase : OwnedNavigationsPrimitiveCollectionTestBase + where TFixture : OwnedNavigationsRelationalFixtureBase, new() +{ + public OwnedNavigationsPrimitiveCollectionRelationalTestBase(TFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + protected void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); +} diff --git a/test/EFCore.Relational.Specification.Tests/Query/Associations/OwnedTableSplitting/OwnedTableSplittingPrimitiveCollectionRelationalTestBase.cs b/test/EFCore.Relational.Specification.Tests/Query/Associations/OwnedTableSplitting/OwnedTableSplittingPrimitiveCollectionRelationalTestBase.cs new file mode 100644 index 00000000000..efceaa12890 --- /dev/null +++ b/test/EFCore.Relational.Specification.Tests/Query/Associations/OwnedTableSplitting/OwnedTableSplittingPrimitiveCollectionRelationalTestBase.cs @@ -0,0 +1,20 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Microsoft.EntityFrameworkCore.Query.Associations.OwnedNavigations; + +namespace Microsoft.EntityFrameworkCore.Query.Associations.OwnedTableSplitting; + +public abstract class OwnedTableSplittingPrimitiveCollectionRelationalTestBase : OwnedNavigationsPrimitiveCollectionTestBase + where TFixture : OwnedTableSplittingRelationalFixtureBase, new() +{ + public OwnedTableSplittingPrimitiveCollectionRelationalTestBase(TFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + + protected void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); +} diff --git a/test/EFCore.Specification.Tests/Query/Associations/AssociationsBulkUpdateTestBase.cs b/test/EFCore.Specification.Tests/Query/Associations/AssociationsBulkUpdateTestBase.cs index 89dda5fd1c4..c350d781dd8 100644 --- a/test/EFCore.Specification.Tests/Query/Associations/AssociationsBulkUpdateTestBase.cs +++ b/test/EFCore.Specification.Tests/Query/Associations/AssociationsBulkUpdateTestBase.cs @@ -88,13 +88,19 @@ public virtual Task Update_association_to_parameter() { var newRelated = new RelatedType { + Id = 1000, Name = "Updated related name", + Int = 80, + String = "Updated nested string", + Ints = [1, 2, 3], RequiredNested = new NestedType { + Id = 1000, Name = "Updated nested name", Int = 80, - String = "Updated nested string" + String = "Updated nested string", + Ints = [1, 2, 3] }, OptionalNested = null, NestedCollection = [] @@ -112,9 +118,11 @@ public virtual Task Update_nested_association_to_parameter() { var newNested = new NestedType { + Id = 1000, Name = "Updated nested name", Int = 80, - String = "Updated nested string" + String = "Updated nested string", + Ints = [1, 2, 4] }; return AssertUpdate( @@ -149,15 +157,19 @@ public virtual Task Update_association_to_inline() x => x.RequiredRelated, new RelatedType { + Id = 1000, Name = "Updated related name", Int = 70, String = "Updated related string", + Ints = [1, 2, 4], RequiredNested = new NestedType { + Id = 1000, Name = "Updated nested name", Int = 80, - String = "Updated nested string" + String = "Updated nested string", + Ints = [1, 2, 4] }, OptionalNested = null, NestedCollection = [] @@ -173,15 +185,19 @@ public virtual Task Update_association_to_inline_with_lambda() x => x.RequiredRelated, x => new RelatedType { + Id = 1000, Name = "Updated related name", Int = 70, String = "Updated related string", + Ints = new() { 1, 2, 4 }, RequiredNested = new NestedType { + Id = 1000, Name = "Updated nested name", Int = 80, - String = "Updated nested string" + String = "Updated nested string", + Ints = new() { 1, 2, 4 } }, OptionalNested = null, NestedCollection = new List() @@ -197,9 +213,11 @@ public virtual Task Update_nested_association_to_inline_with_lambda() x => x.RequiredRelated.RequiredNested, x => new NestedType { + Id = 1000, Name = "Updated nested name", Int = 80, - String = "Updated nested string" + String = "Updated nested string", + Ints = new() { 1, 2, 4 } }), rowsAffectedCount: 7); @@ -242,26 +260,38 @@ public virtual Task Update_collection_to_parameter() [ new() { + Id = 1000, Name = "Updated related name1", + Int = 80, + String = "Updated related string1", + Ints = [1, 2, 4], RequiredNested = new() { + Id = 1000, Name = "Updated nested name1", Int = 80, - String = "Updated nested string1" + String = "Updated nested string1", + Ints = [1, 2, 4] }, OptionalNested = null, NestedCollection = [] }, new() { + Id = 1001, Name = "Updated related name2", + Int = 81, + String = "Updated related string2", + Ints = [1, 2, 4], RequiredNested = new() { + Id = 1001, Name = "Updated nested name2", Int = 81, - String = "Updated nested string2" + String = "Updated nested string2", + Ints = [1, 2, 4] }, OptionalNested = null, NestedCollection = [] @@ -282,15 +312,19 @@ public virtual Task Update_nested_collection_to_parameter() [ new() { + Id = 1000, Name = "Updated nested name1", Int = 80, - String = "Updated nested string1" + String = "Updated nested string1", + Ints = [1, 2, 4] }, new() { + Id = 1001, Name = "Updated nested name2", Int = 81, - String = "Updated nested string2" + String = "Updated nested string2", + Ints = [1, 2, 4] }, ]; @@ -312,15 +346,19 @@ public virtual Task Update_nested_collection_to_inline_with_lambda() { new() { + Id = 1000, Name = "Updated nested name1", Int = 80, - String = "Updated nested string1" + String = "Updated nested string1", + Ints = new() { 1, 2, 4 } }, new() { + Id = 1001, Name = "Updated nested name2", Int = 81, - String = "Updated nested string2" + String = "Updated nested string2", + Ints = new() { 1, 2, 4 } } }), rowsAffectedCount: 7); @@ -345,8 +383,65 @@ public virtual Task Update_nested_collection_to_another_nested_collection() x => x.OptionalRelated!.NestedCollection), rowsAffectedCount: 6); + [ConditionalFact] + public virtual async Task Update_inside_structural_collection() + { + var nested = Fixture.Data.RootEntities.Single(e => e.Id == 1).RequiredRelated.NestedCollection[1]; + nested.String += " Updated"; + + await AssertUpdate( + ss => ss.Set().Where(e => e.RequiredRelated.NestedCollection.Count >= 2), + c => c, + s => s.SetProperty(x => x.RequiredRelated.NestedCollection[1], nested), + rowsAffectedCount: 7); + } + #endregion Update collection + #region Update primitive collection + + [ConditionalFact] + public virtual Task Update_primitive_collection_to_constant() + => AssertUpdate( + ss => ss.Set(), + c => c, + s => s.SetProperty(x => x.RequiredRelated.Ints, x => new List { 1, 2, 4 }), + rowsAffectedCount: 7); + + [ConditionalFact] + public virtual async Task Update_primitive_collection_to_parameter() + { + List ints = [1, 2, 4]; + + await AssertUpdate( + ss => ss.Set(), + c => c, + s => s.SetProperty(x => x.RequiredRelated.Ints, x => ints), + rowsAffectedCount: 7); + } + + [ConditionalFact] + public virtual async Task Update_primitive_collection_to_another_collection() + { + List ints = [1, 2, 4]; + + await AssertUpdate( + ss => ss.Set(), + c => c, + s => s.SetProperty(x => x.RequiredRelated.OptionalNested!.Ints, x => x.RequiredRelated.RequiredNested.Ints), + rowsAffectedCount: 7); + } + + [ConditionalFact] + public virtual Task Update_inside_primitive_collection() + => AssertUpdate( + ss => ss.Set().Where(e => e.RequiredRelated.Ints.Count >= 2), + c => c, + s => s.SetProperty(x => x.RequiredRelated.Ints[1], 99), + rowsAffectedCount: 7); + + #endregion Update primitive collection + #region Multiple updates [ConditionalFact] diff --git a/test/EFCore.Specification.Tests/Query/Associations/AssociationsData.cs b/test/EFCore.Specification.Tests/Query/Associations/AssociationsData.cs index f1eadc2b7f7..fc06a72e786 100644 --- a/test/EFCore.Specification.Tests/Query/Associations/AssociationsData.cs +++ b/test/EFCore.Specification.Tests/Query/Associations/AssociationsData.cs @@ -54,15 +54,22 @@ void SetRelatedValues(RelatedType related) { related.Int = 9; related.String = "bar"; + related.Ints = [4, 5, 6, 6]; related.RequiredNested.Int = 9; related.RequiredNested.String = "bar"; + related.RequiredNested.Ints = [4, 5, 6, 6]; related.OptionalNested?.Int = 9; related.OptionalNested?.String = "bar"; + if (related.OptionalNested is not null) + { + related.OptionalNested.Ints = [4, 5, 6, 6]; + } foreach (var nested in related.NestedCollection) { nested.Int = 9; nested.String = "bar"; + nested.Ints = [4, 5, 6, 6]; } } }), @@ -90,15 +97,22 @@ void SetRelatedValues(RelatedType related) { related.Int = intValue++; related.String = $"foo{stringValue++}"; + related.Ints = [8, 9, intValue++]; related.RequiredNested.Int = intValue++; related.RequiredNested.String = $"foo{stringValue++}"; + related.RequiredNested.Ints = [8, 9, intValue++]; related.OptionalNested?.Int = intValue++; related.OptionalNested?.String = $"foo{stringValue++}"; + if (related.OptionalNested is not null) + { + related.OptionalNested.Ints = [8, 9, intValue++]; + } foreach (var nested in related.NestedCollection) { nested.Int = intValue++; nested.String = $"foo{stringValue++}"; + nested.Ints = [8, 9, intValue++]; } } }), @@ -157,16 +171,12 @@ void SetRelatedValues(RelatedType related) void SetRelatedValues(RelatedType related) { - related.Int = 10; related.String = "{ this may/look:like JSON but it [isn't]: ממש ממש לאéèéè }"; - related.RequiredNested.Int = 10; related.RequiredNested.String = "{ this may/look:like JSON but it [isn't]: ממש ממש לאéèéè }"; - related.OptionalNested?.Int = 10; related.OptionalNested?.String = "{ this may/look:like JSON but it [isn't]: ממש ממש לאéèéè }"; foreach (var nested in related.NestedCollection) { - nested.Int = 10; nested.String = "{ this may/look:like JSON but it [isn't]: ממש ממש לאéèéè }"; } } @@ -183,6 +193,7 @@ RootEntity CreateRootEntity(int id, string? description, Action? cus const int intValue = 8; const string stringValue = "foo"; + List intsValue = [1, 2, 3]; var rootEntity = new RootEntity { @@ -194,19 +205,23 @@ RootEntity CreateRootEntity(int id, string? description, Action? cus Name = $"{shortName}_RequiredRelated", Int = intValue, String = stringValue, + Ints = intsValue, + RequiredNested = new NestedType { Id = nestedId++, Name = $"{shortName}_RequiredRelated_RequiredNested", Int = intValue, - String = stringValue + String = stringValue, + Ints = intsValue }, OptionalNested = new NestedType { Id = nestedId++, Name = $"{shortName}_RequiredRelated_OptionalNested", Int = intValue, - String = stringValue + String = stringValue, + Ints = intsValue }, NestedCollection = [ @@ -215,14 +230,16 @@ RootEntity CreateRootEntity(int id, string? description, Action? cus Id = nestedId++, Name = $"{shortName}_RequiredRelated_NestedCollection_1", Int = intValue, - String = stringValue + String = stringValue, + Ints = intsValue }, new NestedType { Id = nestedId++, Name = $"{shortName}_RequiredRelated_NestedCollection_2", Int = intValue, - String = stringValue + String = stringValue, + Ints = intsValue } ] }, @@ -232,19 +249,23 @@ RootEntity CreateRootEntity(int id, string? description, Action? cus Name = $"{shortName}_OptionalRelated", Int = intValue, String = stringValue, + Ints = [1, 2, 3], + RequiredNested = new NestedType { Id = nestedId++, Name = $"{shortName}_OptionalRelated_RequiredNested", Int = intValue, - String = stringValue + String = stringValue, + Ints = intsValue }, OptionalNested = new NestedType { Id = nestedId++, Name = $"{shortName}_OptionalRelated_OptionalNested", Int = intValue, - String = stringValue + String = stringValue, + Ints = [1, 2, 3] }, NestedCollection = [ @@ -253,14 +274,16 @@ RootEntity CreateRootEntity(int id, string? description, Action? cus Id = nestedId++, Name = $"{shortName}_OptionalRelated_NestedCollection_1", Int = intValue, - String = stringValue + String = stringValue, + Ints = intsValue.ToList() }, new NestedType { Id = nestedId++, Name = $"{shortName}_OptionalRelated_NestedCollection_2", Int = intValue, - String = stringValue + String = stringValue, + Ints = intsValue.ToList() } ] }, @@ -272,19 +295,23 @@ RootEntity CreateRootEntity(int id, string? description, Action? cus Name = $"{shortName}_RelatedCollection_1", Int = intValue, String = stringValue, + Ints = [1, 2, 3], + RequiredNested = new NestedType { Id = nestedId++, Name = $"{shortName}_RelatedCollection_1_RequiredNested", Int = intValue, - String = stringValue + String = stringValue, + Ints = [1, 2, 3] }, OptionalNested = new NestedType { Id = nestedId++, Name = $"{shortName}_RelatedCollection_1_OptionalNested", Int = intValue, - String = stringValue + String = stringValue, + Ints = [1, 2, 3] }, NestedCollection = [ @@ -293,14 +320,16 @@ RootEntity CreateRootEntity(int id, string? description, Action? cus Id = nestedId++, Name = $"{shortName}_RelatedCollection_1_NestedCollection_1", Int = intValue, - String = stringValue + String = stringValue, + Ints = [1, 2, 3] }, new NestedType { Id = nestedId++, Name = $"{shortName}_RelatedCollection_1_NestedCollection_2", Int = intValue, - String = stringValue + String = stringValue, + Ints = [1, 2, 3] } ] }, @@ -310,19 +339,23 @@ RootEntity CreateRootEntity(int id, string? description, Action? cus Name = $"{shortName}_RelatedCollection_2", Int = intValue, String = stringValue, + Ints = [1, 2, 3], + RequiredNested = new NestedType { Id = nestedId++, Name = $"{shortName}_RelatedCollection_2_RequiredNested", Int = intValue, - String = stringValue + String = stringValue, + Ints = [1, 2, 3] }, OptionalNested = new NestedType { Id = nestedId++, Name = $"{shortName}_RelatedCollection_2_OptionalNested", Int = intValue, - String = stringValue + String = stringValue, + Ints = [1, 2, 3] }, NestedCollection = [ @@ -331,14 +364,16 @@ RootEntity CreateRootEntity(int id, string? description, Action? cus Id = nestedId++, Name = $"{shortName}_RelatedCollection_2_NestedCollection_1", Int = intValue, - String = stringValue + String = stringValue, + Ints = [1, 2, 3] }, new NestedType { Id = nestedId++, Name = $"{shortName}_Root1_RelatedCollection_2_NestedCollection_2", Int = intValue, - String = stringValue + String = stringValue, + Ints = [1, 2, 3] } ] } diff --git a/test/EFCore.Specification.Tests/Query/Associations/AssociationsModel.cs b/test/EFCore.Specification.Tests/Query/Associations/AssociationsModel.cs index c7dc6b33444..4408c2fdd00 100644 --- a/test/EFCore.Specification.Tests/Query/Associations/AssociationsModel.cs +++ b/test/EFCore.Specification.Tests/Query/Associations/AssociationsModel.cs @@ -38,11 +38,12 @@ public override string ToString() /// public class RelatedType : IEquatable { - public int Id { get; set; } + public required int Id { get; set; } public required string Name { get; set; } - public int Int { get; set; } - public string String { get; set; } = null!; + public required int Int { get; set; } + public required string String { get; set; } + public required List Ints { get; set; } public required NestedType RequiredNested { get; set; } public NestedType? OptionalNested { get; set; } @@ -74,9 +75,10 @@ public bool Equals(RelatedType? other) && Name == other.Name && Int == other.Int && String == other.String + && (Ints is null ? other.Ints is null : other.Ints is not null && Ints.SequenceEqual(other.Ints)) && RequiredNested.Equals(other.RequiredNested) && (OptionalNested is null ? other.OptionalNested is null : OptionalNested.Equals(other.OptionalNested)) - // NestedCollection is annotated non-nullable, but ComplexTableSplitting doesn't support collections so we null-bang it + // NestedCollection is annotated non-nullable, but ComplexTableSplitting doesn't support collections so we check it && (NestedCollection is null ? other.NestedCollection is null : NestedCollection.SequenceEqual(other.NestedCollection)); public RelatedType DeepClone() @@ -86,6 +88,7 @@ public RelatedType DeepClone() Name = Name, Int = Int, String = String, + Ints = Ints is null ? null! : Ints.ToList(), RequiredNested = RequiredNested.DeepClone(), OptionalNested = OptionalNested?.DeepClone(), @@ -103,11 +106,13 @@ public override string ToString() /// public class NestedType : IEquatable { - public int Id { get; set; } + public required int Id { get; set; } public required string Name { get; set; } - public int Int { get; set; } - public string String { get; set; } = null!; + public required int Int { get; set; } + public required string String { get; set; } + + public required List Ints { get; set; } // Foreign keys and inverse navigations are unmapped by default, and are explicitly mapped via // the Fluent API for navigation tests only. @@ -128,7 +133,8 @@ public bool Equals(NestedType? other) && Id == other.Id && Name == other.Name && Int == other.Int - && String == other.String; + && String == other.String + && (Ints is null ? other.Ints is null : other.Ints is not null && Ints.SequenceEqual(other.Ints)); public NestedType DeepClone() => new() @@ -136,7 +142,8 @@ public NestedType DeepClone() Id = Id, Name = Name, Int = Int, - String = String + String = String, + Ints = Ints?.ToList()! }; public override string ToString() diff --git a/test/EFCore.Specification.Tests/Query/Associations/AssociationsPrimitiveCollectionTestBase.cs b/test/EFCore.Specification.Tests/Query/Associations/AssociationsPrimitiveCollectionTestBase.cs new file mode 100644 index 00000000000..1b6140a1c45 --- /dev/null +++ b/test/EFCore.Specification.Tests/Query/Associations/AssociationsPrimitiveCollectionTestBase.cs @@ -0,0 +1,32 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace Microsoft.EntityFrameworkCore.Query.Associations; + +public abstract class AssociationsPrimitiveCollectionTestBase(TFixture fixture) : QueryTestBase(fixture) + where TFixture : AssociationsQueryFixtureBase, new() +{ + [ConditionalFact] + public virtual Task Count() + => AssertQuery(ss => ss.Set().Where(e => e.RequiredRelated.Ints.Count == 3)); + + [ConditionalFact] + public virtual Task Index() + => AssertQuery(ss => ss.Set().Where(e => e.RequiredRelated.Ints[0] == 1)); + + [ConditionalFact] + public virtual Task Contains() + => AssertQuery(ss => ss.Set().Where(e => e.RequiredRelated.Ints.Contains(3))); + + [ConditionalFact] + public virtual Task Any_predicate() + => AssertQuery(ss => ss.Set().Where(e => e.RequiredRelated.Ints.Any(i => i == 2))); + + [ConditionalFact] + public virtual Task Nested_Count() + => AssertQuery(ss => ss.Set().Where(e => e.RequiredRelated.RequiredNested.Ints.Count == 3)); + + [ConditionalFact] + public virtual Task Select_Sum() + => AssertQuery(ss => ss.Set().Select(e => e.RequiredRelated.Ints.Sum()).Where(sum => sum >= 6)); +} diff --git a/test/EFCore.Specification.Tests/Query/Associations/AssociationsProjectionTestBase.cs b/test/EFCore.Specification.Tests/Query/Associations/AssociationsProjectionTestBase.cs index c7a7a39ea32..0084750d432 100644 --- a/test/EFCore.Specification.Tests/Query/Associations/AssociationsProjectionTestBase.cs +++ b/test/EFCore.Specification.Tests/Query/Associations/AssociationsProjectionTestBase.cs @@ -259,9 +259,9 @@ public virtual Task Select_subquery_required_related_FirstOrDefault(QueryTrackin => AssertQuery( ss => ss.Set() .Select(x => ss.Set() - .OrderBy(e => e.Id) - .Select(e => e.RequiredRelated) - .FirstOrDefault()!.RequiredNested), + .OrderBy(e => e.Id) + .Select(e => e.RequiredRelated) + .FirstOrDefault()!.RequiredNested), queryTrackingBehavior: queryTrackingBehavior); [ConditionalTheory, MemberData(nameof(TrackingData))] @@ -269,9 +269,9 @@ public virtual Task Select_subquery_optional_related_FirstOrDefault(QueryTrackin => AssertQuery( ss => ss.Set() .Select(x => ss.Set() - .OrderBy(e => e.Id) - .Select(e => e.OptionalRelated) - .FirstOrDefault()!.RequiredNested), + .OrderBy(e => e.Id) + .Select(e => e.OptionalRelated) + .FirstOrDefault()!.RequiredNested), queryTrackingBehavior: queryTrackingBehavior); // [ConditionalTheory] diff --git a/test/EFCore.Specification.Tests/Query/Associations/AssociationsQueryFixtureBase.cs b/test/EFCore.Specification.Tests/Query/Associations/AssociationsQueryFixtureBase.cs index 0655c8d587f..a1e791350c3 100644 --- a/test/EFCore.Specification.Tests/Query/Associations/AssociationsQueryFixtureBase.cs +++ b/test/EFCore.Specification.Tests/Query/Associations/AssociationsQueryFixtureBase.cs @@ -11,6 +11,7 @@ public abstract class AssociationsQueryFixtureBase : SharedStoreFixtureBase true; + public virtual void UseTransaction(DatabaseFacade facade, IDbContextTransaction transaction) => throw new NotSupportedException(); @@ -157,6 +158,7 @@ protected virtual void AssertNestedType(NestedType e, NestedType a) Assert.Equal(e.Int, a.Int); Assert.Equal(e.String, a.String); + Assert.Equal(e.Ints, a.Ints); } private void AssertPreRootEntity(RootReferencingEntity e, RootReferencingEntity a) diff --git a/test/EFCore.Specification.Tests/Query/Associations/AssociationsStructuralEqualityTestBase.cs b/test/EFCore.Specification.Tests/Query/Associations/AssociationsStructuralEqualityTestBase.cs index f0afede8edc..efbb6ee9457 100644 --- a/test/EFCore.Specification.Tests/Query/Associations/AssociationsStructuralEqualityTestBase.cs +++ b/test/EFCore.Specification.Tests/Query/Associations/AssociationsStructuralEqualityTestBase.cs @@ -56,7 +56,8 @@ public virtual Task Nested_with_inline() Id = 1000, Name = "Root1_RequiredRelated_RequiredNested", Int = 8, - String = "foo" + String = "foo", + Ints = new() { 1, 2, 3 } }), ss => ss.Set() .Where(e => e.RequiredRelated.RequiredNested.Equals( @@ -65,19 +66,14 @@ public virtual Task Nested_with_inline() Id = 1000, Name = "Root1_RequiredRelated_RequiredNested", Int = 8, - String = "foo" + String = "foo", + Ints = new() { 1, 2, 3 } }))); // TODO: Rewrite equality to Equals for the entire test suite for complex [ConditionalFact] public virtual async Task Nested_with_parameter() { - var nested = new NestedType - { - Id = 1000, - Name = "Root1_RequiredRelated_RequiredNested", - Int = 8, - String = "foo" - }; + var nested = Fixture.Data.RootEntities.Single(e => e.Id == 1).RequiredRelated.RequiredNested; await AssertQuery( ss => ss.Set().Where(e => e.RequiredRelated.RequiredNested == nested), @@ -107,14 +103,16 @@ public virtual Task Nested_collection_with_inline() Id = 1002, Name = "Root1_RequiredRelated_NestedCollection_1", Int = 8, - String = "foo" + String = "foo", + Ints = new() { 1, 2, 3 } }, new() { Id = 1003, Name = "Root1_RequiredRelated_NestedCollection_2", Int = 8, - String = "foo" + String = "foo", + Ints = new() { 1, 2, 3 } } }), ss => ss.Set() @@ -126,14 +124,16 @@ public virtual Task Nested_collection_with_inline() Id = 1002, Name = "Root1_RequiredRelated_NestedCollection_1", Int = 8, - String = "foo" + String = "foo", + Ints = new() { 1, 2, 3 } }, new() { Id = 1003, Name = "Root1_RequiredRelated_NestedCollection_2", Int = 8, - String = "foo" + String = "foo", + Ints = new() { 1, 2, 3 } } }))); // TODO: Rewrite equality to Equals for the entire test suite for complex @@ -147,14 +147,16 @@ public virtual async Task Nested_collection_with_parameter() Id = 1002, Name = "Root1_RequiredRelated_NestedCollection_1", Int = 8, - String = "foo" + String = "foo", + Ints = new() { 1, 2, 3 } }, new() { Id = 1003, Name = "Root1_RequiredRelated_NestedCollection_2", Int = 8, - String = "foo" + String = "foo", + Ints = new() { 1, 2, 3 } } }; @@ -176,7 +178,8 @@ public virtual Task Contains_with_inline() Id = 1002, Name = "Root1_RequiredRelated_NestedCollection_1", Int = 8, - String = "foo" + String = "foo", + Ints = new() { 1, 2, 3 } }))); [ConditionalFact] @@ -187,7 +190,8 @@ public virtual async Task Contains_with_parameter() Id = 1002, Name = "Root1_RequiredRelated_NestedCollection_1", Int = 8, - String = "foo" + String = "foo", + Ints = [1, 2, 3] }; await AssertQuery(ss => ss.Set().Where(e => e.RequiredRelated.NestedCollection.Contains(nested))); diff --git a/test/EFCore.Specification.Tests/Query/Associations/ComplexProperties/ComplexPropertiesPrimitiveCollectionTestBase.cs b/test/EFCore.Specification.Tests/Query/Associations/ComplexProperties/ComplexPropertiesPrimitiveCollectionTestBase.cs new file mode 100644 index 00000000000..c5d2d1a484c --- /dev/null +++ b/test/EFCore.Specification.Tests/Query/Associations/ComplexProperties/ComplexPropertiesPrimitiveCollectionTestBase.cs @@ -0,0 +1,8 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace Microsoft.EntityFrameworkCore.Query.Associations.ComplexProperties; + +public abstract class ComplexPropertiesPrimitiveCollectionTestBase(TFixture fixture) + : AssociationsPrimitiveCollectionTestBase(fixture) + where TFixture : ComplexPropertiesFixtureBase, new(); diff --git a/test/EFCore.Specification.Tests/Query/Associations/ComplexProperties/ComplexPropertiesStructuralEqualityTestBase.cs b/test/EFCore.Specification.Tests/Query/Associations/ComplexProperties/ComplexPropertiesStructuralEqualityTestBase.cs index 0ca4e33360c..8e3bfa2df06 100644 --- a/test/EFCore.Specification.Tests/Query/Associations/ComplexProperties/ComplexPropertiesStructuralEqualityTestBase.cs +++ b/test/EFCore.Specification.Tests/Query/Associations/ComplexProperties/ComplexPropertiesStructuralEqualityTestBase.cs @@ -35,7 +35,8 @@ public override Task Nested_with_inline() Id = 1000, Name = "Root1_RequiredRelated_RequiredNested", Int = 8, - String = "foo" + String = "foo", + Ints = new() { 1, 2, 3 } }), ss => ss.Set() .Where(e => e.RequiredRelated.RequiredNested.Equals( @@ -44,18 +45,13 @@ public override Task Nested_with_inline() Id = 1000, Name = "Root1_RequiredRelated_RequiredNested", Int = 8, - String = "foo" + String = "foo", + Ints = new() { 1, 2, 3 } }))); public override async Task Nested_with_parameter() { - var nested = new NestedType - { - Id = 1000, - Name = "Root1_RequiredRelated_RequiredNested", - Int = 8, - String = "foo" - }; + var nested = Fixture.Data.RootEntities.Single(e => e.Id == 1).RequiredRelated.RequiredNested; await AssertQuery( ss => ss.Set().Where(e => e.RequiredRelated.RequiredNested == nested), @@ -79,14 +75,16 @@ public override Task Nested_collection_with_inline() Id = 1002, Name = "Root1_RequiredRelated_NestedCollection_1", Int = 8, - String = "foo" + String = "foo", + Ints = new List { 1, 2, 3 } }, new() { Id = 1003, Name = "Root1_RequiredRelated_NestedCollection_2", Int = 8, - String = "foo" + String = "foo", + Ints = new List { 1, 2, 3 } } }), ss => ss.Set() @@ -98,36 +96,22 @@ public override Task Nested_collection_with_inline() Id = 1002, Name = "Root1_RequiredRelated_NestedCollection_1", Int = 8, - String = "foo" + String = "foo", + Ints = new List { 1, 2, 3 } }, new() { Id = 1003, Name = "Root1_RequiredRelated_NestedCollection_2", Int = 8, - String = "foo" + String = "foo", + Ints = new List { 1, 2, 3 } } }))); public override async Task Nested_collection_with_parameter() { - var nestedCollection = new List - { - new() - { - Id = 1002, - Name = "Root1_RequiredRelated_NestedCollection_1", - Int = 8, - String = "foo" - }, - new() - { - Id = 1003, - Name = "Root1_RequiredRelated_NestedCollection_2", - Int = 8, - String = "foo" - } - }; + var nestedCollection = Fixture.Data.RootEntities.Single(e => e.Id == 1).RequiredRelated.NestedCollection; await AssertQuery( ss => ss.Set().Where(e => e.RequiredRelated.NestedCollection == nestedCollection), diff --git a/test/EFCore.Specification.Tests/Query/Associations/Navigations/NavigationsPrimitiveCollectionTestBase.cs b/test/EFCore.Specification.Tests/Query/Associations/Navigations/NavigationsPrimitiveCollectionTestBase.cs new file mode 100644 index 00000000000..71565d66cc7 --- /dev/null +++ b/test/EFCore.Specification.Tests/Query/Associations/Navigations/NavigationsPrimitiveCollectionTestBase.cs @@ -0,0 +1,8 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace Microsoft.EntityFrameworkCore.Query.Associations.Navigations; + +public abstract class NavigationsPrimitiveCollectionTestBase(TFixture fixture) + : AssociationsPrimitiveCollectionTestBase(fixture) + where TFixture : NavigationsFixtureBase, new(); diff --git a/test/EFCore.Specification.Tests/Query/Associations/OwnedNavigations/OwnedNavigationsMiscellaneousTestBase.cs b/test/EFCore.Specification.Tests/Query/Associations/OwnedNavigations/OwnedNavigationsMiscellaneousTestBase.cs index e5cd4cfa156..45c759c2acb 100644 --- a/test/EFCore.Specification.Tests/Query/Associations/OwnedNavigations/OwnedNavigationsMiscellaneousTestBase.cs +++ b/test/EFCore.Specification.Tests/Query/Associations/OwnedNavigations/OwnedNavigationsMiscellaneousTestBase.cs @@ -5,6 +5,4 @@ namespace Microsoft.EntityFrameworkCore.Query.Associations.OwnedNavigations; public abstract class OwnedNavigationsMiscellaneousTestBase(TFixture fixture) : AssociationsMiscellaneousTestBase(fixture) - where TFixture : OwnedNavigationsFixtureBase, new() -{ -} + where TFixture : OwnedNavigationsFixtureBase, new(); diff --git a/test/EFCore.Specification.Tests/Query/Associations/OwnedNavigations/OwnedNavigationsPrimitiveCollectionTestBase.cs b/test/EFCore.Specification.Tests/Query/Associations/OwnedNavigations/OwnedNavigationsPrimitiveCollectionTestBase.cs new file mode 100644 index 00000000000..d46197c80ed --- /dev/null +++ b/test/EFCore.Specification.Tests/Query/Associations/OwnedNavigations/OwnedNavigationsPrimitiveCollectionTestBase.cs @@ -0,0 +1,8 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace Microsoft.EntityFrameworkCore.Query.Associations.OwnedNavigations; + +public abstract class OwnedNavigationsPrimitiveCollectionTestBase(TFixture fixture) + : AssociationsPrimitiveCollectionTestBase(fixture) + where TFixture : OwnedNavigationsFixtureBase, new(); diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/Associations/ComplexJson/ComplexJsonBulkUpdateSqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/Associations/ComplexJson/ComplexJsonBulkUpdateSqlServerTest.cs index c9cba11f000..847f8fa2980 100644 --- a/test/EFCore.SqlServer.FunctionalTests/Query/Associations/ComplexJson/ComplexJsonBulkUpdateSqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/Query/Associations/ComplexJson/ComplexJsonBulkUpdateSqlServerTest.cs @@ -169,7 +169,7 @@ public override async Task Update_association_to_parameter() AssertExecuteUpdateSql( """ -@complex_type_p='?' (Size = 201) +@complex_type_p='?' (Size = 257) UPDATE [r] SET [r].[RequiredRelated] = @complex_type_p @@ -185,7 +185,7 @@ public override async Task Update_nested_association_to_parameter() { AssertExecuteUpdateSql( """ -@complex_type_p='?' (Size = 79) +@complex_type_p='?' (Size = 97) UPDATE [r] SET [RequiredRelated].modify('$.RequiredNested', @complex_type_p) @@ -196,7 +196,7 @@ FROM [RootEntity] AS [r] { AssertExecuteUpdateSql( """ -@complex_type_p='?' (Size = 79) +@complex_type_p='?' (Size = 97) UPDATE [r] SET [r].[RequiredRelated] = JSON_MODIFY([r].[RequiredRelated], '$.RequiredNested', JSON_QUERY(@complex_type_p)) @@ -247,7 +247,7 @@ public override async Task Update_association_to_inline() AssertExecuteUpdateSql( """ -@complex_type_p='?' (Size = 222) +@complex_type_p='?' (Size = 258) UPDATE [r] SET [r].[RequiredRelated] = @complex_type_p @@ -262,7 +262,7 @@ public override async Task Update_association_to_inline_with_lambda() AssertExecuteUpdateSql( """ UPDATE [r] -SET [r].[RequiredRelated] = '{"Id":0,"Int":70,"Name":"Updated related name","String":"Updated related string","NestedCollection":[],"OptionalNested":null,"RequiredNested":{"Id":0,"Int":80,"Name":"Updated nested name","String":"Updated nested string"}}' +SET [r].[RequiredRelated] = '{"Id":1000,"Int":70,"Ints":[1,2,4],"Name":"Updated related name","String":"Updated related string","NestedCollection":[],"OptionalNested":null,"RequiredNested":{"Id":1000,"Int":80,"Ints":[1,2,4],"Name":"Updated nested name","String":"Updated nested string"}}' FROM [RootEntity] AS [r] """); } @@ -276,7 +276,7 @@ public override async Task Update_nested_association_to_inline_with_lambda() AssertExecuteUpdateSql( """ UPDATE [r] -SET [RequiredRelated].modify('$.RequiredNested', CAST('{"Id":0,"Int":80,"Name":"Updated nested name","String":"Updated nested string"}' AS json)) +SET [RequiredRelated].modify('$.RequiredNested', CAST('{"Id":1000,"Int":80,"Ints":[1,2,4],"Name":"Updated nested name","String":"Updated nested string"}' AS json)) FROM [RootEntity] AS [r] """); } @@ -285,7 +285,7 @@ FROM [RootEntity] AS [r] AssertExecuteUpdateSql( """ UPDATE [r] -SET [r].[RequiredRelated] = JSON_MODIFY([r].[RequiredRelated], '$.RequiredNested', JSON_QUERY('{"Id":0,"Int":80,"Name":"Updated nested name","String":"Updated nested string"}')) +SET [r].[RequiredRelated] = JSON_MODIFY([r].[RequiredRelated], '$.RequiredNested', JSON_QUERY('{"Id":1000,"Int":80,"Ints":[1,2,4],"Name":"Updated nested name","String":"Updated nested string"}')) FROM [RootEntity] AS [r] """); } @@ -337,7 +337,7 @@ public override async Task Update_collection_to_parameter() AssertExecuteUpdateSql( """ -@complex_type_p='?' (Size = 411) +@complex_type_p='?' (Size = 527) UPDATE [r] SET [r].[RelatedCollection] = @complex_type_p @@ -353,7 +353,7 @@ public override async Task Update_nested_collection_to_parameter() { AssertExecuteUpdateSql( """ -@complex_type_p='?' (Size = 165) +@complex_type_p='?' (Size = 201) UPDATE [r] SET [RequiredRelated].modify('$.NestedCollection', @complex_type_p) @@ -364,7 +364,7 @@ FROM [RootEntity] AS [r] { AssertExecuteUpdateSql( """ -@complex_type_p='?' (Size = 165) +@complex_type_p='?' (Size = 201) UPDATE [r] SET [r].[RequiredRelated] = JSON_MODIFY([r].[RequiredRelated], '$.NestedCollection', JSON_QUERY(@complex_type_p)) @@ -382,7 +382,7 @@ public override async Task Update_nested_collection_to_inline_with_lambda() AssertExecuteUpdateSql( """ UPDATE [r] -SET [RequiredRelated].modify('$.NestedCollection', CAST('[{"Id":0,"Int":80,"Name":"Updated nested name1","String":"Updated nested string1"},{"Id":0,"Int":81,"Name":"Updated nested name2","String":"Updated nested string2"}]' AS json)) +SET [RequiredRelated].modify('$.NestedCollection', CAST('[{"Id":1000,"Int":80,"Ints":[1,2,4],"Name":"Updated nested name1","String":"Updated nested string1"},{"Id":1001,"Int":81,"Ints":[1,2,4],"Name":"Updated nested name2","String":"Updated nested string2"}]' AS json)) FROM [RootEntity] AS [r] """); } @@ -391,7 +391,7 @@ FROM [RootEntity] AS [r] AssertExecuteUpdateSql( """ UPDATE [r] -SET [r].[RequiredRelated] = JSON_MODIFY([r].[RequiredRelated], '$.NestedCollection', JSON_QUERY('[{"Id":0,"Int":80,"Name":"Updated nested name1","String":"Updated nested string1"},{"Id":0,"Int":81,"Name":"Updated nested name2","String":"Updated nested string2"}]')) +SET [r].[RequiredRelated] = JSON_MODIFY([r].[RequiredRelated], '$.NestedCollection', JSON_QUERY('[{"Id":1000,"Int":80,"Ints":[1,2,4],"Name":"Updated nested name1","String":"Updated nested string1"},{"Id":1001,"Int":81,"Ints":[1,2,4],"Name":"Updated nested name2","String":"Updated nested string2"}]')) FROM [RootEntity] AS [r] """); } @@ -430,8 +430,129 @@ public override async Task Update_collection_referencing_the_original_collection AssertExecuteUpdateSql(); } + public override async Task Update_inside_structural_collection() + { + await base.Update_inside_structural_collection(); + + AssertExecuteUpdateSql(); + } + #endregion Update collection + #region Update primitive collection + + public override async Task Update_primitive_collection_to_constant() + { + await base.Update_primitive_collection_to_constant(); + + if (Fixture.UsingJsonType) + { + AssertExecuteUpdateSql( + """ +UPDATE [r] +SET [RequiredRelated].modify('$.Ints', CAST('[1,2,4]' AS json)) +FROM [RootEntity] AS [r] +"""); + } + else + { + AssertExecuteUpdateSql( + """ +UPDATE [r] +SET [r].[RequiredRelated] = JSON_MODIFY([r].[RequiredRelated], '$.Ints', JSON_QUERY(N'[1,2,4]')) +FROM [RootEntity] AS [r] +"""); + } + } + + public override async Task Update_primitive_collection_to_parameter() + { + await base.Update_primitive_collection_to_parameter(); + + if (Fixture.UsingJsonType) + { + AssertExecuteUpdateSql( + """ +@ints='?' (Size = 8000) + +UPDATE [r] +SET [RequiredRelated].modify('$.Ints', @ints) +FROM [RootEntity] AS [r] +"""); + } + else + { + AssertExecuteUpdateSql( + """ +@ints='?' (Size = 4000) + +UPDATE [r] +SET [r].[RequiredRelated] = JSON_MODIFY([r].[RequiredRelated], '$.Ints', JSON_QUERY(@ints)) +FROM [RootEntity] AS [r] +"""); + } + } + + public override async Task Update_primitive_collection_to_another_collection() + { + await base.Update_primitive_collection_to_another_collection(); + + if (Fixture.UsingJsonType) + { + AssertExecuteUpdateSql( + """ +UPDATE [r] +SET [RequiredRelated].modify('$.OptionalNested.Ints', JSON_QUERY([r].[RequiredRelated], '$.RequiredNested.Ints')) +FROM [RootEntity] AS [r] +"""); + } + else + { + AssertExecuteUpdateSql( + """ +UPDATE [r] +SET [r].[RequiredRelated] = JSON_MODIFY([r].[RequiredRelated], '$.OptionalNested.Ints', JSON_QUERY([r].[RequiredRelated], '$.RequiredNested.Ints')) +FROM [RootEntity] AS [r] +"""); + } + } + + public override async Task Update_inside_primitive_collection() + { + await base.Update_inside_primitive_collection(); + + if (Fixture.UsingJsonType) + { + AssertExecuteUpdateSql( + """ +@p='?' (DbType = Int32) + +UPDATE [r] +SET [RequiredRelated].modify('$.Ints[1]', @p) +FROM [RootEntity] AS [r] +WHERE ( + SELECT COUNT(*) + FROM OPENJSON(JSON_QUERY([r].[RequiredRelated], '$.Ints')) AS [i]) >= 2 +"""); + } + else + { + AssertExecuteUpdateSql( + """ +@p='?' (DbType = Int32) + +UPDATE [r] +SET [r].[RequiredRelated] = JSON_MODIFY([r].[RequiredRelated], '$.Ints[1]', @p) +FROM [RootEntity] AS [r] +WHERE ( + SELECT COUNT(*) + FROM OPENJSON(JSON_QUERY([r].[RequiredRelated], '$.Ints')) AS [i]) >= 2 +"""); + } + } + + #endregion Update primitive collection + #region Multiple updates public override async Task Update_multiple_properties_inside_same_association() diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/Associations/ComplexJson/ComplexJsonCollectionSqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/Associations/ComplexJson/ComplexJsonCollectionSqlServerTest.cs index 85109be2ba2..738e37bb693 100644 --- a/test/EFCore.SqlServer.FunctionalTests/Query/Associations/ComplexJson/ComplexJsonCollectionSqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/Query/Associations/ComplexJson/ComplexJsonCollectionSqlServerTest.cs @@ -72,10 +72,11 @@ FROM [RootEntity] AS [r] WHERE ( SELECT COUNT(*) FROM ( - SELECT DISTINCT [r0].[Id], [r0].[Int], [r0].[Name], [r0].[String], [r0].[NestedCollection] AS [c], [r0].[OptionalNested] AS [c0], [r0].[RequiredNested] AS [c1] + SELECT DISTINCT [r0].[Id], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[String], [r0].[NestedCollection] AS [c], [r0].[OptionalNested] AS [c0], [r0].[RequiredNested] AS [c1] FROM OPENJSON([r].[RelatedCollection], '$') WITH ( [Id] int '$.Id', [Int] int '$.Int', + [Ints] json '$.Ints' AS JSON, [Name] nvarchar(max) '$.Name', [String] nvarchar(max) '$.String', [NestedCollection] json '$.NestedCollection' AS JSON, @@ -96,10 +97,11 @@ FROM [RootEntity] AS [r] WHERE ( SELECT COUNT(*) FROM ( - SELECT DISTINCT [r0].[Id], [r0].[Int], [r0].[Name], [r0].[String], [r0].[NestedCollection] AS [c], [r0].[OptionalNested] AS [c0], [r0].[RequiredNested] AS [c1] + SELECT DISTINCT [r0].[Id], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[String], [r0].[NestedCollection] AS [c], [r0].[OptionalNested] AS [c0], [r0].[RequiredNested] AS [c1] FROM OPENJSON([r].[RelatedCollection], '$') WITH ( [Id] int '$.Id', [Int] int '$.Int', + [Ints] nvarchar(max) '$.Ints' AS JSON, [Name] nvarchar(max) '$.Name', [String] nvarchar(max) '$.String', [NestedCollection] nvarchar(max) '$.NestedCollection' AS JSON, diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/Associations/ComplexJson/ComplexJsonPrimitiveCollectionSqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/Associations/ComplexJson/ComplexJsonPrimitiveCollectionSqlServerTest.cs new file mode 100644 index 00000000000..32e784c915c --- /dev/null +++ b/test/EFCore.SqlServer.FunctionalTests/Query/Associations/ComplexJson/ComplexJsonPrimitiveCollectionSqlServerTest.cs @@ -0,0 +1,110 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace Microsoft.EntityFrameworkCore.Query.Associations.ComplexJson; + +public class ComplexJsonPrimitiveCollectionSqlServerTest(ComplexJsonSqlServerFixture fixture, ITestOutputHelper testOutputHelper) + : ComplexJsonPrimitiveCollectionRelationalTestBase(fixture, testOutputHelper) +{ + public override async Task Count() + { + await base.Count(); + + AssertSql( + """ +SELECT [r].[Id], [r].[Name], [r].[OptionalRelated], [r].[RelatedCollection], [r].[RequiredRelated] +FROM [RootEntity] AS [r] +WHERE ( + SELECT COUNT(*) + FROM OPENJSON(JSON_QUERY([r].[RequiredRelated], '$.Ints')) AS [i]) = 3 +"""); + } + + public override async Task Index() + { + await base.Index(); + + if (Fixture.UsingJsonType) + { + AssertSql( + """ +SELECT [r].[Id], [r].[Name], [r].[OptionalRelated], [r].[RelatedCollection], [r].[RequiredRelated] +FROM [RootEntity] AS [r] +WHERE JSON_VALUE([r].[RequiredRelated], '$.Ints[0]' RETURNING int) = 1 +"""); + } + else + { + AssertSql( + """ +SELECT [r].[Id], [r].[Name], [r].[OptionalRelated], [r].[RelatedCollection], [r].[RequiredRelated] +FROM [RootEntity] AS [r] +WHERE CAST(JSON_VALUE([r].[RequiredRelated], '$.Ints[0]') AS int) = 1 +"""); + } + } + + public override async Task Contains() + { + await base.Contains(); + + AssertSql( + """ +SELECT [r].[Id], [r].[Name], [r].[OptionalRelated], [r].[RelatedCollection], [r].[RequiredRelated] +FROM [RootEntity] AS [r] +WHERE 3 IN ( + SELECT [i].[value] + FROM OPENJSON(JSON_QUERY([r].[RequiredRelated], '$.Ints')) WITH ([value] int '$') AS [i] +) +"""); + } + + public override async Task Any_predicate() + { + await base.Any_predicate(); + + AssertSql( + """ +SELECT [r].[Id], [r].[Name], [r].[OptionalRelated], [r].[RelatedCollection], [r].[RequiredRelated] +FROM [RootEntity] AS [r] +WHERE 2 IN ( + SELECT [i].[value] + FROM OPENJSON(JSON_QUERY([r].[RequiredRelated], '$.Ints')) WITH ([value] int '$') AS [i] +) +"""); + } + + public override async Task Nested_Count() + { + await base.Nested_Count(); + + AssertSql( + """ +SELECT [r].[Id], [r].[Name], [r].[OptionalRelated], [r].[RelatedCollection], [r].[RequiredRelated] +FROM [RootEntity] AS [r] +WHERE ( + SELECT COUNT(*) + FROM OPENJSON(JSON_QUERY([r].[RequiredRelated], '$.RequiredNested.Ints')) AS [i]) = 3 +"""); + } + + public override async Task Select_Sum() + { + await base.Select_Sum(); + + AssertSql( + """ +SELECT ( + SELECT COALESCE(SUM([i0].[value]), 0) + FROM OPENJSON(JSON_QUERY([r].[RequiredRelated], '$.Ints')) WITH ([value] int '$') AS [i0]) +FROM [RootEntity] AS [r] +WHERE ( + SELECT COALESCE(SUM([i].[value]), 0) + FROM OPENJSON(JSON_QUERY([r].[RequiredRelated], '$.Ints')) WITH ([value] int '$') AS [i]) >= 6 +"""); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); +} diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/Associations/ComplexJson/ComplexJsonProjectionSqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/Associations/ComplexJson/ComplexJsonProjectionSqlServerTest.cs index c6be3eb5a80..c80f71682ab 100644 --- a/test/EFCore.SqlServer.FunctionalTests/Query/Associations/ComplexJson/ComplexJsonProjectionSqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/Query/Associations/ComplexJson/ComplexJsonProjectionSqlServerTest.cs @@ -237,11 +237,12 @@ public override async Task SelectMany_related_collection(QueryTrackingBehavior q { AssertSql( """ -SELECT [r0].[Id], [r0].[Int], [r0].[Name], [r0].[String], [r0].[NestedCollection], [r0].[OptionalNested], [r0].[RequiredNested] +SELECT [r0].[Id], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[String], [r0].[NestedCollection], [r0].[OptionalNested], [r0].[RequiredNested] FROM [RootEntity] AS [r] CROSS APPLY OPENJSON([r].[RelatedCollection], '$') WITH ( [Id] int '$.Id', [Int] int '$.Int', + [Ints] json '$.Ints' AS JSON, [Name] nvarchar(max) '$.Name', [String] nvarchar(max) '$.String', [NestedCollection] json '$.NestedCollection' AS JSON, @@ -254,11 +255,12 @@ [RequiredNested] json '$.RequiredNested' AS JSON { AssertSql( """ -SELECT [r0].[Id], [r0].[Int], [r0].[Name], [r0].[String], [r0].[NestedCollection], [r0].[OptionalNested], [r0].[RequiredNested] +SELECT [r0].[Id], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[String], [r0].[NestedCollection], [r0].[OptionalNested], [r0].[RequiredNested] FROM [RootEntity] AS [r] CROSS APPLY OPENJSON([r].[RelatedCollection], '$') WITH ( [Id] int '$.Id', [Int] int '$.Int', + [Ints] nvarchar(max) '$.Ints' AS JSON, [Name] nvarchar(max) '$.Name', [String] nvarchar(max) '$.String', [NestedCollection] nvarchar(max) '$.NestedCollection' AS JSON, @@ -273,34 +275,72 @@ public override async Task SelectMany_nested_collection_on_required_related(Quer { await base.SelectMany_nested_collection_on_required_related(queryTrackingBehavior); - AssertSql( - """ -SELECT [n].[Id], [n].[Int], [n].[Name], [n].[String] + if (Fixture.UsingJsonType) + { + AssertSql( + """ +SELECT [n].[Id], [n].[Int], [n].[Ints], [n].[Name], [n].[String] +FROM [RootEntity] AS [r] +CROSS APPLY OPENJSON([r].[RequiredRelated], '$.NestedCollection') WITH ( + [Id] int '$.Id', + [Int] int '$.Int', + [Ints] json '$.Ints' AS JSON, + [Name] nvarchar(max) '$.Name', + [String] nvarchar(max) '$.String' +) AS [n] +"""); + } + else + { + AssertSql( + """ +SELECT [n].[Id], [n].[Int], [n].[Ints], [n].[Name], [n].[String] FROM [RootEntity] AS [r] CROSS APPLY OPENJSON([r].[RequiredRelated], '$.NestedCollection') WITH ( [Id] int '$.Id', [Int] int '$.Int', + [Ints] nvarchar(max) '$.Ints' AS JSON, [Name] nvarchar(max) '$.Name', [String] nvarchar(max) '$.String' ) AS [n] """); + } } public override async Task SelectMany_nested_collection_on_optional_related(QueryTrackingBehavior queryTrackingBehavior) { await base.SelectMany_nested_collection_on_optional_related(queryTrackingBehavior); - AssertSql( - """ -SELECT [n].[Id], [n].[Int], [n].[Name], [n].[String] + if (Fixture.UsingJsonType) + { + AssertSql( + """ +SELECT [n].[Id], [n].[Int], [n].[Ints], [n].[Name], [n].[String] +FROM [RootEntity] AS [r] +CROSS APPLY OPENJSON([r].[OptionalRelated], '$.NestedCollection') WITH ( + [Id] int '$.Id', + [Int] int '$.Int', + [Ints] json '$.Ints' AS JSON, + [Name] nvarchar(max) '$.Name', + [String] nvarchar(max) '$.String' +) AS [n] +"""); + } + else + { + AssertSql( + """ +SELECT [n].[Id], [n].[Int], [n].[Ints], [n].[Name], [n].[String] FROM [RootEntity] AS [r] CROSS APPLY OPENJSON([r].[OptionalRelated], '$.NestedCollection') WITH ( [Id] int '$.Id', [Int] int '$.Int', + [Ints] nvarchar(max) '$.Ints' AS JSON, [Name] nvarchar(max) '$.Name', [String] nvarchar(max) '$.String' ) AS [n] """); + } } #endregion Collection diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/Associations/ComplexJson/ComplexJsonStructuralEqualitySqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/Associations/ComplexJson/ComplexJsonStructuralEqualitySqlServerTest.cs index 0d4eb695dff..e1ed6300d81 100644 --- a/test/EFCore.SqlServer.FunctionalTests/Query/Associations/ComplexJson/ComplexJsonStructuralEqualitySqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/Query/Associations/ComplexJson/ComplexJsonStructuralEqualitySqlServerTest.cs @@ -140,7 +140,7 @@ public override async Task Nested_with_inline() """ SELECT [r].[Id], [r].[Name], [r].[OptionalRelated], [r].[RelatedCollection], [r].[RequiredRelated] FROM [RootEntity] AS [r] -WHERE CAST(JSON_QUERY([r].[RequiredRelated], '$.RequiredNested') AS nvarchar(max)) = CAST('{"Id":1000,"Int":8,"Name":"Root1_RequiredRelated_RequiredNested","String":"foo"}' AS nvarchar(max)) +WHERE CAST(JSON_QUERY([r].[RequiredRelated], '$.RequiredNested') AS nvarchar(max)) = CAST('{"Id":1000,"Int":8,"Ints":[1,2,3],"Name":"Root1_RequiredRelated_RequiredNested","String":"foo"}' AS nvarchar(max)) """); } else @@ -149,7 +149,7 @@ WHERE CAST(JSON_QUERY([r].[RequiredRelated], '$.RequiredNested') AS nvarchar(max """ SELECT [r].[Id], [r].[Name], [r].[OptionalRelated], [r].[RelatedCollection], [r].[RequiredRelated] FROM [RootEntity] AS [r] -WHERE JSON_QUERY([r].[RequiredRelated], '$.RequiredNested') = '{"Id":1000,"Int":8,"Name":"Root1_RequiredRelated_RequiredNested","String":"foo"}' +WHERE JSON_QUERY([r].[RequiredRelated], '$.RequiredNested') = '{"Id":1000,"Int":8,"Ints":[1,2,3],"Name":"Root1_RequiredRelated_RequiredNested","String":"foo"}' """); } } @@ -162,7 +162,7 @@ public override async Task Nested_with_parameter() { AssertSql( """ -@entity_equality_nested='?' (Size = 80) +@entity_equality_nested='?' (Size = 95) SELECT [r].[Id], [r].[Name], [r].[OptionalRelated], [r].[RelatedCollection], [r].[RequiredRelated] FROM [RootEntity] AS [r] @@ -173,7 +173,7 @@ WHERE CAST(JSON_QUERY([r].[RequiredRelated], '$.RequiredNested') AS nvarchar(max { AssertSql( """ -@entity_equality_nested='?' (Size = 80) +@entity_equality_nested='?' (Size = 95) SELECT [r].[Id], [r].[Name], [r].[OptionalRelated], [r].[RelatedCollection], [r].[RequiredRelated] FROM [RootEntity] AS [r] @@ -216,7 +216,7 @@ public override async Task Nested_collection_with_inline() """ SELECT [r].[Id], [r].[Name], [r].[OptionalRelated], [r].[RelatedCollection], [r].[RequiredRelated] FROM [RootEntity] AS [r] -WHERE CAST(JSON_QUERY([r].[RequiredRelated], '$.NestedCollection') AS nvarchar(max)) = CAST('[{"Id":1002,"Int":8,"Name":"Root1_RequiredRelated_NestedCollection_1","String":"foo"},{"Id":1003,"Int":8,"Name":"Root1_RequiredRelated_NestedCollection_2","String":"foo"}]' AS nvarchar(max)) +WHERE CAST(JSON_QUERY([r].[RequiredRelated], '$.NestedCollection') AS nvarchar(max)) = CAST('[{"Id":1002,"Int":8,"Ints":[1,2,3],"Name":"Root1_RequiredRelated_NestedCollection_1","String":"foo"},{"Id":1003,"Int":8,"Ints":[1,2,3],"Name":"Root1_RequiredRelated_NestedCollection_2","String":"foo"}]' AS nvarchar(max)) """); } else @@ -225,7 +225,7 @@ WHERE CAST(JSON_QUERY([r].[RequiredRelated], '$.NestedCollection') AS nvarchar(m """ SELECT [r].[Id], [r].[Name], [r].[OptionalRelated], [r].[RelatedCollection], [r].[RequiredRelated] FROM [RootEntity] AS [r] -WHERE JSON_QUERY([r].[RequiredRelated], '$.NestedCollection') = '[{"Id":1002,"Int":8,"Name":"Root1_RequiredRelated_NestedCollection_1","String":"foo"},{"Id":1003,"Int":8,"Name":"Root1_RequiredRelated_NestedCollection_2","String":"foo"}]' +WHERE JSON_QUERY([r].[RequiredRelated], '$.NestedCollection') = '[{"Id":1002,"Int":8,"Ints":[1,2,3],"Name":"Root1_RequiredRelated_NestedCollection_1","String":"foo"},{"Id":1003,"Int":8,"Ints":[1,2,3],"Name":"Root1_RequiredRelated_NestedCollection_2","String":"foo"}]' """); } } @@ -238,7 +238,7 @@ public override async Task Nested_collection_with_parameter() { AssertSql( """ -@entity_equality_nestedCollection='?' (Size = 171) +@entity_equality_nestedCollection='?' (Size = 201) SELECT [r].[Id], [r].[Name], [r].[OptionalRelated], [r].[RelatedCollection], [r].[RequiredRelated] FROM [RootEntity] AS [r] @@ -249,7 +249,7 @@ WHERE CAST(JSON_QUERY([r].[RequiredRelated], '$.NestedCollection') AS nvarchar(m { AssertSql( """ -@entity_equality_nestedCollection='?' (Size = 171) +@entity_equality_nestedCollection='?' (Size = 201) SELECT [r].[Id], [r].[Name], [r].[OptionalRelated], [r].[RelatedCollection], [r].[RequiredRelated] FROM [RootEntity] AS [r] @@ -267,8 +267,28 @@ public override async Task Contains_with_inline() // TODO: The following translation is sub-optimal: we should be using OPENSJON to extract elements of the collection as JSON elements (OPENJSON WITH JSON), // and comparison those elements to a single entire JSON fragment on the other side (just like non-collection JSON comparison), rather than breaking the // elements down to their columns and doing column-by-column comparison. See #32576. - AssertSql( - """ + if (Fixture.UsingJsonType) + { + AssertSql( + """ +SELECT [r].[Id], [r].[Name], [r].[OptionalRelated], [r].[RelatedCollection], [r].[RequiredRelated] +FROM [RootEntity] AS [r] +WHERE EXISTS ( + SELECT 1 + FROM OPENJSON([r].[RequiredRelated], '$.NestedCollection') WITH ( + [Id] int '$.Id', + [Int] int '$.Int', + [Ints] json '$.Ints' AS JSON, + [Name] nvarchar(max) '$.Name', + [String] nvarchar(max) '$.String' + ) AS [n] + WHERE [n].[Id] = 1002 AND [n].[Int] = 8 AND CAST([n].[Ints] AS nvarchar(max)) = CAST('[1,2,3]' AS nvarchar(max)) AND [n].[Name] = N'Root1_RequiredRelated_NestedCollection_1' AND [n].[String] = N'foo') +"""); + } + else + { + AssertSql( + """ SELECT [r].[Id], [r].[Name], [r].[OptionalRelated], [r].[RelatedCollection], [r].[RequiredRelated] FROM [RootEntity] AS [r] WHERE EXISTS ( @@ -276,11 +296,13 @@ SELECT 1 FROM OPENJSON([r].[RequiredRelated], '$.NestedCollection') WITH ( [Id] int '$.Id', [Int] int '$.Int', + [Ints] nvarchar(max) '$.Ints' AS JSON, [Name] nvarchar(max) '$.Name', [String] nvarchar(max) '$.String' ) AS [n] - WHERE [n].[Id] = 1002 AND [n].[Int] = 8 AND [n].[Name] = N'Root1_RequiredRelated_NestedCollection_1' AND [n].[String] = N'foo') + WHERE [n].[Id] = 1002 AND [n].[Int] = 8 AND [n].[Ints] = N'[1,2,3]' AND [n].[Name] = N'Root1_RequiredRelated_NestedCollection_1' AND [n].[String] = N'foo') """); + } } public override async Task Contains_with_parameter() @@ -290,10 +312,37 @@ public override async Task Contains_with_parameter() // TODO: The following translation is sub-optimal: we should be using OPENSJON to extract elements of the collection as JSON elements (OPENJSON WITH JSON), // and comparison those elements to a single entire JSON fragment on the other side (just like non-collection JSON comparison), rather than breaking the // elements down to their columns and doing column-by-column comparison. See #32576. - AssertSql( - """ + if (Fixture.UsingJsonType) + { + AssertSql( + """ +@entity_equality_nested_Id='?' (DbType = Int32) +@entity_equality_nested_Int='?' (DbType = Int32) +@entity_equality_nested_Ints='?' (Size = 8000) +@entity_equality_nested_Name='?' (Size = 4000) +@entity_equality_nested_String='?' (Size = 4000) + +SELECT [r].[Id], [r].[Name], [r].[OptionalRelated], [r].[RelatedCollection], [r].[RequiredRelated] +FROM [RootEntity] AS [r] +WHERE EXISTS ( + SELECT 1 + FROM OPENJSON([r].[RequiredRelated], '$.NestedCollection') WITH ( + [Id] int '$.Id', + [Int] int '$.Int', + [Ints] json '$.Ints' AS JSON, + [Name] nvarchar(max) '$.Name', + [String] nvarchar(max) '$.String' + ) AS [n] + WHERE [n].[Id] = @entity_equality_nested_Id AND [n].[Int] = @entity_equality_nested_Int AND CAST([n].[Ints] AS nvarchar(max)) = CAST(@entity_equality_nested_Ints AS nvarchar(max)) AND [n].[Name] = @entity_equality_nested_Name AND [n].[String] = @entity_equality_nested_String) +"""); + } + else + { + AssertSql( + """ @entity_equality_nested_Id='?' (DbType = Int32) @entity_equality_nested_Int='?' (DbType = Int32) +@entity_equality_nested_Ints='?' (Size = 4000) @entity_equality_nested_Name='?' (Size = 4000) @entity_equality_nested_String='?' (Size = 4000) @@ -304,22 +353,52 @@ SELECT 1 FROM OPENJSON([r].[RequiredRelated], '$.NestedCollection') WITH ( [Id] int '$.Id', [Int] int '$.Int', + [Ints] nvarchar(max) '$.Ints' AS JSON, [Name] nvarchar(max) '$.Name', [String] nvarchar(max) '$.String' ) AS [n] - WHERE [n].[Id] = @entity_equality_nested_Id AND [n].[Int] = @entity_equality_nested_Int AND [n].[Name] = @entity_equality_nested_Name AND [n].[String] = @entity_equality_nested_String) + WHERE [n].[Id] = @entity_equality_nested_Id AND [n].[Int] = @entity_equality_nested_Int AND [n].[Ints] = @entity_equality_nested_Ints AND [n].[Name] = @entity_equality_nested_Name AND [n].[String] = @entity_equality_nested_String) """); + } } public override async Task Contains_with_operators_composed_on_the_collection() { await base.Contains_with_operators_composed_on_the_collection(); - AssertSql( - """ + if (Fixture.UsingJsonType) + { + AssertSql( + """ +@get_Item_Int='?' (DbType = Int32) +@entity_equality_get_Item_Id='?' (DbType = Int32) +@entity_equality_get_Item_Int='?' (DbType = Int32) +@entity_equality_get_Item_Ints='?' (Size = 8000) +@entity_equality_get_Item_Name='?' (Size = 4000) +@entity_equality_get_Item_String='?' (Size = 4000) + +SELECT [r].[Id], [r].[Name], [r].[OptionalRelated], [r].[RelatedCollection], [r].[RequiredRelated] +FROM [RootEntity] AS [r] +WHERE EXISTS ( + SELECT 1 + FROM OPENJSON([r].[RequiredRelated], '$.NestedCollection') WITH ( + [Id] int '$.Id', + [Int] int '$.Int', + [Ints] json '$.Ints' AS JSON, + [Name] nvarchar(max) '$.Name', + [String] nvarchar(max) '$.String' + ) AS [n] + WHERE [n].[Int] > @get_Item_Int AND [n].[Id] = @entity_equality_get_Item_Id AND [n].[Int] = @entity_equality_get_Item_Int AND CAST([n].[Ints] AS nvarchar(max)) = CAST(@entity_equality_get_Item_Ints AS nvarchar(max)) AND [n].[Name] = @entity_equality_get_Item_Name AND [n].[String] = @entity_equality_get_Item_String) +"""); + } + else + { + AssertSql( + """ @get_Item_Int='?' (DbType = Int32) @entity_equality_get_Item_Id='?' (DbType = Int32) @entity_equality_get_Item_Int='?' (DbType = Int32) +@entity_equality_get_Item_Ints='?' (Size = 4000) @entity_equality_get_Item_Name='?' (Size = 4000) @entity_equality_get_Item_String='?' (Size = 4000) @@ -330,11 +409,13 @@ SELECT 1 FROM OPENJSON([r].[RequiredRelated], '$.NestedCollection') WITH ( [Id] int '$.Id', [Int] int '$.Int', + [Ints] nvarchar(max) '$.Ints' AS JSON, [Name] nvarchar(max) '$.Name', [String] nvarchar(max) '$.String' ) AS [n] - WHERE [n].[Int] > @get_Item_Int AND [n].[Id] = @entity_equality_get_Item_Id AND [n].[Int] = @entity_equality_get_Item_Int AND [n].[Name] = @entity_equality_get_Item_Name AND [n].[String] = @entity_equality_get_Item_String) + WHERE [n].[Int] > @get_Item_Int AND [n].[Id] = @entity_equality_get_Item_Id AND [n].[Int] = @entity_equality_get_Item_Int AND [n].[Ints] = @entity_equality_get_Item_Ints AND [n].[Name] = @entity_equality_get_Item_Name AND [n].[String] = @entity_equality_get_Item_String) """); + } } public override async Task Contains_with_nested_and_composed_operators() @@ -348,11 +429,12 @@ public override async Task Contains_with_nested_and_composed_operators() @get_Item_Id='?' (DbType = Int32) @entity_equality_get_Item_Id='?' (DbType = Int32) @entity_equality_get_Item_Int='?' (DbType = Int32) +@entity_equality_get_Item_Ints='?' (Size = 8000) @entity_equality_get_Item_Name='?' (Size = 4000) @entity_equality_get_Item_String='?' (Size = 4000) -@entity_equality_get_Item_NestedCollection='?' (Size = 195) -@entity_equality_get_Item_OptionalNested='?' (Size = 89) -@entity_equality_get_Item_RequiredNested='?' (Size = 89) +@entity_equality_get_Item_NestedCollection='?' (Size = 229) +@entity_equality_get_Item_OptionalNested='?' (Size = 106) +@entity_equality_get_Item_RequiredNested='?' (Size = 106) SELECT [r].[Id], [r].[Name], [r].[OptionalRelated], [r].[RelatedCollection], [r].[RequiredRelated] FROM [RootEntity] AS [r] @@ -361,13 +443,14 @@ SELECT 1 FROM OPENJSON([r].[RelatedCollection], '$') WITH ( [Id] int '$.Id', [Int] int '$.Int', + [Ints] json '$.Ints' AS JSON, [Name] nvarchar(max) '$.Name', [String] nvarchar(max) '$.String', [NestedCollection] json '$.NestedCollection' AS JSON, [OptionalNested] json '$.OptionalNested' AS JSON, [RequiredNested] json '$.RequiredNested' AS JSON ) AS [r0] - WHERE [r0].[Id] > @get_Item_Id AND [r0].[Id] = @entity_equality_get_Item_Id AND [r0].[Int] = @entity_equality_get_Item_Int AND [r0].[Name] = @entity_equality_get_Item_Name AND [r0].[String] = @entity_equality_get_Item_String AND CAST([r0].[NestedCollection] AS nvarchar(max)) = CAST(@entity_equality_get_Item_NestedCollection AS nvarchar(max)) AND CAST([r0].[OptionalNested] AS nvarchar(max)) = CAST(@entity_equality_get_Item_OptionalNested AS nvarchar(max)) AND CAST([r0].[RequiredNested] AS nvarchar(max)) = CAST(@entity_equality_get_Item_RequiredNested AS nvarchar(max))) + WHERE [r0].[Id] > @get_Item_Id AND [r0].[Id] = @entity_equality_get_Item_Id AND [r0].[Int] = @entity_equality_get_Item_Int AND CAST([r0].[Ints] AS nvarchar(max)) = CAST(@entity_equality_get_Item_Ints AS nvarchar(max)) AND [r0].[Name] = @entity_equality_get_Item_Name AND [r0].[String] = @entity_equality_get_Item_String AND CAST([r0].[NestedCollection] AS nvarchar(max)) = CAST(@entity_equality_get_Item_NestedCollection AS nvarchar(max)) AND CAST([r0].[OptionalNested] AS nvarchar(max)) = CAST(@entity_equality_get_Item_OptionalNested AS nvarchar(max)) AND CAST([r0].[RequiredNested] AS nvarchar(max)) = CAST(@entity_equality_get_Item_RequiredNested AS nvarchar(max))) """); } else @@ -377,11 +460,12 @@ [RequiredNested] json '$.RequiredNested' AS JSON @get_Item_Id='?' (DbType = Int32) @entity_equality_get_Item_Id='?' (DbType = Int32) @entity_equality_get_Item_Int='?' (DbType = Int32) +@entity_equality_get_Item_Ints='?' (Size = 4000) @entity_equality_get_Item_Name='?' (Size = 4000) @entity_equality_get_Item_String='?' (Size = 4000) -@entity_equality_get_Item_NestedCollection='?' (Size = 195) -@entity_equality_get_Item_OptionalNested='?' (Size = 89) -@entity_equality_get_Item_RequiredNested='?' (Size = 89) +@entity_equality_get_Item_NestedCollection='?' (Size = 229) +@entity_equality_get_Item_OptionalNested='?' (Size = 106) +@entity_equality_get_Item_RequiredNested='?' (Size = 106) SELECT [r].[Id], [r].[Name], [r].[OptionalRelated], [r].[RelatedCollection], [r].[RequiredRelated] FROM [RootEntity] AS [r] @@ -390,13 +474,14 @@ SELECT 1 FROM OPENJSON([r].[RelatedCollection], '$') WITH ( [Id] int '$.Id', [Int] int '$.Int', + [Ints] nvarchar(max) '$.Ints' AS JSON, [Name] nvarchar(max) '$.Name', [String] nvarchar(max) '$.String', [NestedCollection] nvarchar(max) '$.NestedCollection' AS JSON, [OptionalNested] nvarchar(max) '$.OptionalNested' AS JSON, [RequiredNested] nvarchar(max) '$.RequiredNested' AS JSON ) AS [r0] - WHERE [r0].[Id] > @get_Item_Id AND [r0].[Id] = @entity_equality_get_Item_Id AND [r0].[Int] = @entity_equality_get_Item_Int AND [r0].[Name] = @entity_equality_get_Item_Name AND [r0].[String] = @entity_equality_get_Item_String AND [r0].[NestedCollection] = @entity_equality_get_Item_NestedCollection AND [r0].[OptionalNested] = @entity_equality_get_Item_OptionalNested AND [r0].[RequiredNested] = @entity_equality_get_Item_RequiredNested) + WHERE [r0].[Id] > @get_Item_Id AND [r0].[Id] = @entity_equality_get_Item_Id AND [r0].[Int] = @entity_equality_get_Item_Int AND [r0].[Ints] = @entity_equality_get_Item_Ints AND [r0].[Name] = @entity_equality_get_Item_Name AND [r0].[String] = @entity_equality_get_Item_String AND [r0].[NestedCollection] = @entity_equality_get_Item_NestedCollection AND [r0].[OptionalNested] = @entity_equality_get_Item_OptionalNested AND [r0].[RequiredNested] = @entity_equality_get_Item_RequiredNested) """); } } diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/Associations/ComplexTableSplitting/ComplexTableSplittingBulkUpdateSqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/Associations/ComplexTableSplitting/ComplexTableSplittingBulkUpdateSqlServerTest.cs index d322ed10625..738afe2292f 100644 --- a/test/EFCore.SqlServer.FunctionalTests/Query/Associations/ComplexTableSplitting/ComplexTableSplittingBulkUpdateSqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/Query/Associations/ComplexTableSplitting/ComplexTableSplittingBulkUpdateSqlServerTest.cs @@ -116,20 +116,24 @@ public override async Task Update_association_to_parameter() """ @complex_type_p_Id='?' (DbType = Int32) @complex_type_p_Int='?' (DbType = Int32) +@complex_type_p_Ints='?' (Size = 4000) @complex_type_p_Name='?' (Size = 4000) @complex_type_p_String='?' (Size = 4000) UPDATE [r] SET [r].[RequiredRelated_Id] = @complex_type_p_Id, [r].[RequiredRelated_Int] = @complex_type_p_Int, + [r].[RequiredRelated_Ints] = @complex_type_p_Ints, [r].[RequiredRelated_Name] = @complex_type_p_Name, [r].[RequiredRelated_String] = @complex_type_p_String, [r].[RequiredRelated_OptionalNested_Id] = @complex_type_p_Id, [r].[RequiredRelated_OptionalNested_Int] = @complex_type_p_Int, + [r].[RequiredRelated_OptionalNested_Ints] = @complex_type_p_Ints, [r].[RequiredRelated_OptionalNested_Name] = @complex_type_p_Name, [r].[RequiredRelated_OptionalNested_String] = @complex_type_p_String, [r].[RequiredRelated_RequiredNested_Id] = @complex_type_p_Id, [r].[RequiredRelated_RequiredNested_Int] = @complex_type_p_Int, + [r].[RequiredRelated_RequiredNested_Ints] = @complex_type_p_Ints, [r].[RequiredRelated_RequiredNested_Name] = @complex_type_p_Name, [r].[RequiredRelated_RequiredNested_String] = @complex_type_p_String FROM [RootEntity] AS [r] @@ -144,12 +148,14 @@ public override async Task Update_nested_association_to_parameter() """ @complex_type_p_Id='?' (DbType = Int32) @complex_type_p_Int='?' (DbType = Int32) +@complex_type_p_Ints='?' (Size = 4000) @complex_type_p_Name='?' (Size = 4000) @complex_type_p_String='?' (Size = 4000) UPDATE [r] SET [r].[RequiredRelated_RequiredNested_Id] = @complex_type_p_Id, [r].[RequiredRelated_RequiredNested_Int] = @complex_type_p_Int, + [r].[RequiredRelated_RequiredNested_Ints] = @complex_type_p_Ints, [r].[RequiredRelated_RequiredNested_Name] = @complex_type_p_Name, [r].[RequiredRelated_RequiredNested_String] = @complex_type_p_String FROM [RootEntity] AS [r] @@ -165,14 +171,17 @@ public override async Task Update_association_to_another_association() UPDATE [r] SET [r].[OptionalRelated_Id] = [r].[RequiredRelated_Id], [r].[OptionalRelated_Int] = [r].[RequiredRelated_Int], + [r].[OptionalRelated_Ints] = [r].[RequiredRelated_Ints], [r].[OptionalRelated_Name] = [r].[RequiredRelated_Name], [r].[OptionalRelated_String] = [r].[RequiredRelated_String], [r].[OptionalRelated_OptionalNested_Id] = [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int] = [r].[OptionalRelated_OptionalNested_Int], + [r].[OptionalRelated_OptionalNested_Ints] = [r].[OptionalRelated_OptionalNested_Ints], [r].[OptionalRelated_OptionalNested_Name] = [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String] = [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id] = [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int] = [r].[OptionalRelated_RequiredNested_Int], + [r].[OptionalRelated_RequiredNested_Ints] = [r].[OptionalRelated_RequiredNested_Ints], [r].[OptionalRelated_RequiredNested_Name] = [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String] = [r].[OptionalRelated_RequiredNested_String] FROM [RootEntity] AS [r] @@ -188,6 +197,7 @@ public override async Task Update_nested_association_to_another_nested_associati UPDATE [r] SET [r].[RequiredRelated_OptionalNested_Id] = [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_OptionalNested_Int] = [r].[RequiredRelated_RequiredNested_Int], + [r].[RequiredRelated_OptionalNested_Ints] = [r].[RequiredRelated_RequiredNested_Ints], [r].[RequiredRelated_OptionalNested_Name] = [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_OptionalNested_String] = [r].[RequiredRelated_RequiredNested_String] FROM [RootEntity] AS [r] @@ -202,20 +212,24 @@ public override async Task Update_association_to_inline() """ @complex_type_p_Id='?' (DbType = Int32) @complex_type_p_Int='?' (DbType = Int32) +@complex_type_p_Ints='?' (Size = 4000) @complex_type_p_Name='?' (Size = 4000) @complex_type_p_String='?' (Size = 4000) UPDATE [r] SET [r].[RequiredRelated_Id] = @complex_type_p_Id, [r].[RequiredRelated_Int] = @complex_type_p_Int, + [r].[RequiredRelated_Ints] = @complex_type_p_Ints, [r].[RequiredRelated_Name] = @complex_type_p_Name, [r].[RequiredRelated_String] = @complex_type_p_String, [r].[RequiredRelated_OptionalNested_Id] = @complex_type_p_Id, [r].[RequiredRelated_OptionalNested_Int] = @complex_type_p_Int, + [r].[RequiredRelated_OptionalNested_Ints] = @complex_type_p_Ints, [r].[RequiredRelated_OptionalNested_Name] = @complex_type_p_Name, [r].[RequiredRelated_OptionalNested_String] = @complex_type_p_String, [r].[RequiredRelated_RequiredNested_Id] = @complex_type_p_Id, [r].[RequiredRelated_RequiredNested_Int] = @complex_type_p_Int, + [r].[RequiredRelated_RequiredNested_Ints] = @complex_type_p_Ints, [r].[RequiredRelated_RequiredNested_Name] = @complex_type_p_Name, [r].[RequiredRelated_RequiredNested_String] = @complex_type_p_String FROM [RootEntity] AS [r] @@ -229,16 +243,19 @@ public override async Task Update_association_to_inline_with_lambda() AssertExecuteUpdateSql( """ UPDATE [r] -SET [r].[RequiredRelated_Id] = 0, +SET [r].[RequiredRelated_Id] = 1000, [r].[RequiredRelated_Int] = 70, + [r].[RequiredRelated_Ints] = N'[1,2,4]', [r].[RequiredRelated_Name] = N'Updated related name', [r].[RequiredRelated_String] = N'Updated related string', [r].[RequiredRelated_OptionalNested_Id] = NULL, [r].[RequiredRelated_OptionalNested_Int] = NULL, + [r].[RequiredRelated_OptionalNested_Ints] = NULL, [r].[RequiredRelated_OptionalNested_Name] = NULL, [r].[RequiredRelated_OptionalNested_String] = NULL, - [r].[RequiredRelated_RequiredNested_Id] = 0, + [r].[RequiredRelated_RequiredNested_Id] = 1000, [r].[RequiredRelated_RequiredNested_Int] = 80, + [r].[RequiredRelated_RequiredNested_Ints] = N'[1,2,4]', [r].[RequiredRelated_RequiredNested_Name] = N'Updated nested name', [r].[RequiredRelated_RequiredNested_String] = N'Updated nested string' FROM [RootEntity] AS [r] @@ -252,8 +269,9 @@ public override async Task Update_nested_association_to_inline_with_lambda() AssertExecuteUpdateSql( """ UPDATE [r] -SET [r].[RequiredRelated_RequiredNested_Id] = 0, +SET [r].[RequiredRelated_RequiredNested_Id] = 1000, [r].[RequiredRelated_RequiredNested_Int] = 80, + [r].[RequiredRelated_RequiredNested_Ints] = N'[1,2,4]', [r].[RequiredRelated_RequiredNested_Name] = N'Updated nested name', [r].[RequiredRelated_RequiredNested_String] = N'Updated nested string' FROM [RootEntity] AS [r] @@ -269,14 +287,17 @@ public override async Task Update_association_to_null() UPDATE [r] SET [r].[OptionalRelated_Id] = NULL, [r].[OptionalRelated_Int] = NULL, + [r].[OptionalRelated_Ints] = NULL, [r].[OptionalRelated_Name] = NULL, [r].[OptionalRelated_String] = NULL, [r].[OptionalRelated_OptionalNested_Id] = NULL, [r].[OptionalRelated_OptionalNested_Int] = NULL, + [r].[OptionalRelated_OptionalNested_Ints] = NULL, [r].[OptionalRelated_OptionalNested_Name] = NULL, [r].[OptionalRelated_OptionalNested_String] = NULL, [r].[OptionalRelated_RequiredNested_Id] = NULL, [r].[OptionalRelated_RequiredNested_Int] = NULL, + [r].[OptionalRelated_RequiredNested_Ints] = NULL, [r].[OptionalRelated_RequiredNested_Name] = NULL, [r].[OptionalRelated_RequiredNested_String] = NULL FROM [RootEntity] AS [r] @@ -292,14 +313,17 @@ public override async Task Update_association_to_null_with_lambda() UPDATE [r] SET [r].[OptionalRelated_Id] = NULL, [r].[OptionalRelated_Int] = NULL, + [r].[OptionalRelated_Ints] = NULL, [r].[OptionalRelated_Name] = NULL, [r].[OptionalRelated_String] = NULL, [r].[OptionalRelated_OptionalNested_Id] = NULL, [r].[OptionalRelated_OptionalNested_Int] = NULL, + [r].[OptionalRelated_OptionalNested_Ints] = NULL, [r].[OptionalRelated_OptionalNested_Name] = NULL, [r].[OptionalRelated_OptionalNested_String] = NULL, [r].[OptionalRelated_RequiredNested_Id] = NULL, [r].[OptionalRelated_RequiredNested_Int] = NULL, + [r].[OptionalRelated_RequiredNested_Ints] = NULL, [r].[OptionalRelated_RequiredNested_Name] = NULL, [r].[OptionalRelated_RequiredNested_String] = NULL FROM [RootEntity] AS [r] @@ -315,14 +339,17 @@ public override async Task Update_association_to_null_parameter() UPDATE [r] SET [r].[OptionalRelated_Id] = NULL, [r].[OptionalRelated_Int] = NULL, + [r].[OptionalRelated_Ints] = NULL, [r].[OptionalRelated_Name] = NULL, [r].[OptionalRelated_String] = NULL, [r].[OptionalRelated_OptionalNested_Id] = NULL, [r].[OptionalRelated_OptionalNested_Int] = NULL, + [r].[OptionalRelated_OptionalNested_Ints] = NULL, [r].[OptionalRelated_OptionalNested_Name] = NULL, [r].[OptionalRelated_OptionalNested_String] = NULL, [r].[OptionalRelated_RequiredNested_Id] = NULL, [r].[OptionalRelated_RequiredNested_Int] = NULL, + [r].[OptionalRelated_RequiredNested_Ints] = NULL, [r].[OptionalRelated_RequiredNested_Name] = NULL, [r].[OptionalRelated_RequiredNested_String] = NULL FROM [RootEntity] AS [r] @@ -368,8 +395,74 @@ public override async Task Update_nested_collection_to_another_nested_collection AssertExecuteUpdateSql(); } + public override async Task Update_inside_structural_collection() + { + await base.Update_inside_structural_collection(); + + AssertExecuteUpdateSql(); + } + #endregion Update collection + #region Update primitive collection + + public override async Task Update_primitive_collection_to_constant() + { + await base.Update_primitive_collection_to_constant(); + + AssertExecuteUpdateSql( + """ +UPDATE [r] +SET [r].[RequiredRelated_Ints] = N'[1,2,4]' +FROM [RootEntity] AS [r] +"""); + } + + public override async Task Update_primitive_collection_to_parameter() + { + await base.Update_primitive_collection_to_parameter(); + + AssertExecuteUpdateSql( + """ +@ints='?' (Size = 4000) + +UPDATE [r] +SET [r].[RequiredRelated_Ints] = @ints +FROM [RootEntity] AS [r] +"""); + } + + public override async Task Update_primitive_collection_to_another_collection() + { + await base.Update_primitive_collection_to_another_collection(); + + AssertExecuteUpdateSql( + """ +UPDATE [r] +SET [r].[RequiredRelated_OptionalNested_Ints] = [r].[RequiredRelated_RequiredNested_Ints] +FROM [RootEntity] AS [r] +"""); + } + + public override async Task Update_inside_primitive_collection() + { + await base.Update_inside_primitive_collection(); + + AssertExecuteUpdateSql( + """ +@p='?' (DbType = Int32) + +UPDATE [r] +SET [r].[RequiredRelated_Ints] = JSON_MODIFY([r].[RequiredRelated_Ints], '$[1]', @p) +FROM [RootEntity] AS [r] +WHERE ( + SELECT COUNT(*) + FROM OPENJSON([r].[RequiredRelated_Ints]) AS [r0]) >= 2 +"""); + } + + #endregion Update primitive collection + #region Multiple updates public override async Task Update_multiple_properties_inside_same_association() diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/Associations/ComplexTableSplitting/ComplexTableSplittingMiscellaneousSqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/Associations/ComplexTableSplitting/ComplexTableSplittingMiscellaneousSqlServerTest.cs index 7482761f408..bb0dc0b4021 100644 --- a/test/EFCore.SqlServer.FunctionalTests/Query/Associations/ComplexTableSplitting/ComplexTableSplittingMiscellaneousSqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/Query/Associations/ComplexTableSplitting/ComplexTableSplittingMiscellaneousSqlServerTest.cs @@ -14,7 +14,7 @@ public override async Task Where_related_property() AssertSql( """ -SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Ints], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Ints], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Ints], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Ints], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Ints], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Ints], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] FROM [RootEntity] AS [r] WHERE [r].[RequiredRelated_Int] = 8 """); @@ -26,7 +26,7 @@ public override async Task Where_optional_related_property() AssertSql( """ -SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Ints], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Ints], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Ints], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Ints], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Ints], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Ints], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] FROM [RootEntity] AS [r] WHERE [r].[OptionalRelated_Int] = 8 """); @@ -38,7 +38,7 @@ public override async Task Where_nested_related_property() AssertSql( """ -SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Ints], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Ints], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Ints], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Ints], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Ints], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Ints], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] FROM [RootEntity] AS [r] WHERE [r].[RequiredRelated_RequiredNested_Int] = 8 """); diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/Associations/ComplexTableSplitting/ComplexTableSplittingPrimitiveCollectionSqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/Associations/ComplexTableSplitting/ComplexTableSplittingPrimitiveCollectionSqlServerTest.cs new file mode 100644 index 00000000000..91480cdf732 --- /dev/null +++ b/test/EFCore.SqlServer.FunctionalTests/Query/Associations/ComplexTableSplitting/ComplexTableSplittingPrimitiveCollectionSqlServerTest.cs @@ -0,0 +1,100 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace Microsoft.EntityFrameworkCore.Query.Associations.ComplexTableSplitting; + +public class ComplexTableSplittingPrimitiveCollectionSqlServerTest( + ComplexTableSplittingSqlServerFixture fixture, + ITestOutputHelper testOutputHelper) + : ComplexTableSplittingPrimitiveCollectionRelationalTestBase(fixture, testOutputHelper) +{ + public override async Task Count() + { + await base.Count(); + + AssertSql( + """ +SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Ints], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Ints], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Ints], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Ints], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Ints], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Ints], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] +FROM [RootEntity] AS [r] +WHERE ( + SELECT COUNT(*) + FROM OPENJSON([r].[RequiredRelated_Ints]) AS [r0]) = 3 +"""); + } + + public override async Task Index() + { + await base.Index(); + + AssertSql( + """ +SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Ints], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Ints], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Ints], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Ints], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Ints], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Ints], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] +FROM [RootEntity] AS [r] +WHERE CAST(JSON_VALUE([r].[RequiredRelated_Ints], '$[0]') AS int) = 1 +"""); + } + + public override async Task Contains() + { + await base.Contains(); + + AssertSql( + """ +SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Ints], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Ints], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Ints], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Ints], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Ints], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Ints], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] +FROM [RootEntity] AS [r] +WHERE 3 IN ( + SELECT [r0].[value] + FROM OPENJSON([r].[RequiredRelated_Ints]) WITH ([value] int '$') AS [r0] +) +"""); + } + + public override async Task Any_predicate() + { + await base.Any_predicate(); + + AssertSql( + """ +SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Ints], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Ints], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Ints], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Ints], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Ints], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Ints], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] +FROM [RootEntity] AS [r] +WHERE 2 IN ( + SELECT [r0].[value] + FROM OPENJSON([r].[RequiredRelated_Ints]) WITH ([value] int '$') AS [r0] +) +"""); + } + + public override async Task Nested_Count() + { + await base.Nested_Count(); + + AssertSql( + """ +SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Ints], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Ints], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Ints], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Ints], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Ints], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Ints], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] +FROM [RootEntity] AS [r] +WHERE ( + SELECT COUNT(*) + FROM OPENJSON([r].[RequiredRelated_RequiredNested_Ints]) AS [r0]) = 3 +"""); + } + + public override async Task Select_Sum() + { + await base.Select_Sum(); + + AssertSql( + """ +SELECT ( + SELECT COALESCE(SUM([r1].[value]), 0) + FROM OPENJSON([r].[RequiredRelated_Ints]) WITH ([value] int '$') AS [r1]) +FROM [RootEntity] AS [r] +WHERE ( + SELECT COALESCE(SUM([r0].[value]), 0) + FROM OPENJSON([r].[RequiredRelated_Ints]) WITH ([value] int '$') AS [r0]) >= 6 +"""); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); +} diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/Associations/ComplexTableSplitting/ComplexTableSplittingProjectionSqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/Associations/ComplexTableSplitting/ComplexTableSplittingProjectionSqlServerTest.cs index 29ed5012bc3..34aaf66ea22 100644 --- a/test/EFCore.SqlServer.FunctionalTests/Query/Associations/ComplexTableSplitting/ComplexTableSplittingProjectionSqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/Query/Associations/ComplexTableSplitting/ComplexTableSplittingProjectionSqlServerTest.cs @@ -14,7 +14,7 @@ public override async Task Select_related_collection(QueryTrackingBehavior query AssertSql( """ -SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Ints], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Ints], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Ints], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Ints], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Ints], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Ints], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] FROM [RootEntity] AS [r] ORDER BY [r].[Id] """); @@ -26,7 +26,7 @@ public override async Task Select_nested_collection_on_required_related(QueryTra AssertSql( """ -SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Ints], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Ints], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Ints], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Ints], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Ints], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Ints], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] FROM [RootEntity] AS [r] ORDER BY [r].[Id] """); @@ -38,7 +38,7 @@ public override async Task Select_root(QueryTrackingBehavior queryTrackingBehavi AssertSql( """ -SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Ints], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Ints], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Ints], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Ints], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Ints], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Ints], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] FROM [RootEntity] AS [r] """); } @@ -93,7 +93,7 @@ public override async Task Select_related(QueryTrackingBehavior queryTrackingBeh AssertSql( """ -SELECT [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] +SELECT [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Ints], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Ints], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Ints], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] FROM [RootEntity] AS [r] """); } @@ -104,7 +104,7 @@ public override async Task Select_optional_related(QueryTrackingBehavior queryTr AssertSql( """ -SELECT [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String] +SELECT [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Ints], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Ints], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Ints], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String] FROM [RootEntity] AS [r] """); } @@ -115,7 +115,7 @@ public override async Task Select_required_nested_on_required_related(QueryTrack AssertSql( """ -SELECT [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] +SELECT [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Ints], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] FROM [RootEntity] AS [r] """); } @@ -126,7 +126,7 @@ public override async Task Select_optional_nested_on_required_related(QueryTrack AssertSql( """ -SELECT [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String] +SELECT [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Ints], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String] FROM [RootEntity] AS [r] """); } @@ -137,7 +137,7 @@ public override async Task Select_required_nested_on_optional_related(QueryTrack AssertSql( """ -SELECT [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String] +SELECT [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Ints], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String] FROM [RootEntity] AS [r] """); } @@ -148,7 +148,7 @@ public override async Task Select_optional_nested_on_optional_related(QueryTrack AssertSql( """ -SELECT [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String] +SELECT [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Ints], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String] FROM [RootEntity] AS [r] """); } @@ -159,7 +159,7 @@ public override async Task Select_required_related_via_optional_navigation(Query AssertSql( """ -SELECT [r0].[RequiredRelated_Id], [r0].[RequiredRelated_Int], [r0].[RequiredRelated_Name], [r0].[RequiredRelated_String], [r0].[RequiredRelated_OptionalNested_Id], [r0].[RequiredRelated_OptionalNested_Int], [r0].[RequiredRelated_OptionalNested_Name], [r0].[RequiredRelated_OptionalNested_String], [r0].[RequiredRelated_RequiredNested_Id], [r0].[RequiredRelated_RequiredNested_Int], [r0].[RequiredRelated_RequiredNested_Name], [r0].[RequiredRelated_RequiredNested_String] +SELECT [r0].[RequiredRelated_Id], [r0].[RequiredRelated_Int], [r0].[RequiredRelated_Ints], [r0].[RequiredRelated_Name], [r0].[RequiredRelated_String], [r0].[RequiredRelated_OptionalNested_Id], [r0].[RequiredRelated_OptionalNested_Int], [r0].[RequiredRelated_OptionalNested_Ints], [r0].[RequiredRelated_OptionalNested_Name], [r0].[RequiredRelated_OptionalNested_String], [r0].[RequiredRelated_RequiredNested_Id], [r0].[RequiredRelated_RequiredNested_Int], [r0].[RequiredRelated_RequiredNested_Ints], [r0].[RequiredRelated_RequiredNested_Name], [r0].[RequiredRelated_RequiredNested_String] FROM [RootReferencingEntity] AS [r] LEFT JOIN [RootEntity] AS [r0] ON [r].[RootEntityId] = [r0].[Id] """); @@ -171,7 +171,7 @@ public override async Task Select_nested_collection_on_optional_related(QueryTra AssertSql( """ -SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Ints], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Ints], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Ints], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Ints], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Ints], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Ints], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] FROM [RootEntity] AS [r] ORDER BY [r].[Id] """); @@ -204,7 +204,7 @@ public override async Task Select_root_duplicated(QueryTrackingBehavior queryTra AssertSql( """ -SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Ints], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Ints], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Ints], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Ints], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Ints], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Ints], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] FROM [RootEntity] AS [r] """); } @@ -215,10 +215,10 @@ public override async Task Select_subquery_required_related_FirstOrDefault(Query AssertSql( """ -SELECT [r1].[RequiredRelated_RequiredNested_Id], [r1].[RequiredRelated_RequiredNested_Int], [r1].[RequiredRelated_RequiredNested_Name], [r1].[RequiredRelated_RequiredNested_String] +SELECT [r1].[RequiredRelated_RequiredNested_Id], [r1].[RequiredRelated_RequiredNested_Int], [r1].[RequiredRelated_RequiredNested_Ints], [r1].[RequiredRelated_RequiredNested_Name], [r1].[RequiredRelated_RequiredNested_String] FROM [RootEntity] AS [r] OUTER APPLY ( - SELECT TOP(1) [r0].[RequiredRelated_RequiredNested_Id], [r0].[RequiredRelated_RequiredNested_Int], [r0].[RequiredRelated_RequiredNested_Name], [r0].[RequiredRelated_RequiredNested_String] + SELECT TOP(1) [r0].[RequiredRelated_RequiredNested_Id], [r0].[RequiredRelated_RequiredNested_Int], [r0].[RequiredRelated_RequiredNested_Ints], [r0].[RequiredRelated_RequiredNested_Name], [r0].[RequiredRelated_RequiredNested_String] FROM [RootEntity] AS [r0] ORDER BY [r0].[Id] ) AS [r1] @@ -231,10 +231,10 @@ public override async Task Select_subquery_optional_related_FirstOrDefault(Query AssertSql( """ -SELECT [r1].[OptionalRelated_RequiredNested_Id], [r1].[OptionalRelated_RequiredNested_Int], [r1].[OptionalRelated_RequiredNested_Name], [r1].[OptionalRelated_RequiredNested_String] +SELECT [r1].[OptionalRelated_RequiredNested_Id], [r1].[OptionalRelated_RequiredNested_Int], [r1].[OptionalRelated_RequiredNested_Ints], [r1].[OptionalRelated_RequiredNested_Name], [r1].[OptionalRelated_RequiredNested_String] FROM [RootEntity] AS [r] OUTER APPLY ( - SELECT TOP(1) [r0].[OptionalRelated_RequiredNested_Id], [r0].[OptionalRelated_RequiredNested_Int], [r0].[OptionalRelated_RequiredNested_Name], [r0].[OptionalRelated_RequiredNested_String] + SELECT TOP(1) [r0].[OptionalRelated_RequiredNested_Id], [r0].[OptionalRelated_RequiredNested_Int], [r0].[OptionalRelated_RequiredNested_Ints], [r0].[OptionalRelated_RequiredNested_Name], [r0].[OptionalRelated_RequiredNested_String] FROM [RootEntity] AS [r0] ORDER BY [r0].[Id] ) AS [r1] diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/Associations/ComplexTableSplitting/ComplexTableSplittingStructuralEqualitySqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/Associations/ComplexTableSplitting/ComplexTableSplittingStructuralEqualitySqlServerTest.cs index 4d3e5885251..dae6c8795b6 100644 --- a/test/EFCore.SqlServer.FunctionalTests/Query/Associations/ComplexTableSplitting/ComplexTableSplittingStructuralEqualitySqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/Query/Associations/ComplexTableSplitting/ComplexTableSplittingStructuralEqualitySqlServerTest.cs @@ -14,9 +14,9 @@ public override async Task Two_related() AssertSql( """ -SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Ints], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Ints], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Ints], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Ints], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Ints], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Ints], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] FROM [RootEntity] AS [r] -WHERE [r].[RequiredRelated_Id] = [r].[OptionalRelated_Id] AND [r].[RequiredRelated_Int] = [r].[OptionalRelated_Int] AND [r].[RequiredRelated_Name] = [r].[OptionalRelated_Name] AND [r].[RequiredRelated_String] = [r].[OptionalRelated_String] AND ([r].[RequiredRelated_OptionalNested_Id] = [r].[RequiredRelated_OptionalNested_Id] OR [r].[RequiredRelated_OptionalNested_Id] IS NULL) AND ([r].[RequiredRelated_OptionalNested_Int] = [r].[RequiredRelated_OptionalNested_Int] OR [r].[RequiredRelated_OptionalNested_Int] IS NULL) AND ([r].[RequiredRelated_OptionalNested_Name] = [r].[RequiredRelated_OptionalNested_Name] OR [r].[RequiredRelated_OptionalNested_Name] IS NULL) AND ([r].[RequiredRelated_OptionalNested_String] = [r].[RequiredRelated_OptionalNested_String] OR [r].[RequiredRelated_OptionalNested_String] IS NULL) AND [r].[RequiredRelated_RequiredNested_Id] = [r].[RequiredRelated_RequiredNested_Id] AND [r].[RequiredRelated_RequiredNested_Int] = [r].[RequiredRelated_RequiredNested_Int] AND [r].[RequiredRelated_RequiredNested_Name] = [r].[RequiredRelated_RequiredNested_Name] AND [r].[RequiredRelated_RequiredNested_String] = [r].[RequiredRelated_RequiredNested_String] +WHERE [r].[RequiredRelated_Id] = [r].[OptionalRelated_Id] AND [r].[RequiredRelated_Int] = [r].[OptionalRelated_Int] AND [r].[RequiredRelated_Ints] = [r].[OptionalRelated_Ints] AND [r].[RequiredRelated_Name] = [r].[OptionalRelated_Name] AND [r].[RequiredRelated_String] = [r].[OptionalRelated_String] AND ([r].[RequiredRelated_OptionalNested_Id] = [r].[RequiredRelated_OptionalNested_Id] OR [r].[RequiredRelated_OptionalNested_Id] IS NULL) AND ([r].[RequiredRelated_OptionalNested_Int] = [r].[RequiredRelated_OptionalNested_Int] OR [r].[RequiredRelated_OptionalNested_Int] IS NULL) AND ([r].[RequiredRelated_OptionalNested_Ints] = [r].[RequiredRelated_OptionalNested_Ints] OR [r].[RequiredRelated_OptionalNested_Ints] IS NULL) AND ([r].[RequiredRelated_OptionalNested_Name] = [r].[RequiredRelated_OptionalNested_Name] OR [r].[RequiredRelated_OptionalNested_Name] IS NULL) AND ([r].[RequiredRelated_OptionalNested_String] = [r].[RequiredRelated_OptionalNested_String] OR [r].[RequiredRelated_OptionalNested_String] IS NULL) AND [r].[RequiredRelated_RequiredNested_Id] = [r].[RequiredRelated_RequiredNested_Id] AND [r].[RequiredRelated_RequiredNested_Int] = [r].[RequiredRelated_RequiredNested_Int] AND [r].[RequiredRelated_RequiredNested_Ints] = [r].[RequiredRelated_RequiredNested_Ints] AND [r].[RequiredRelated_RequiredNested_Name] = [r].[RequiredRelated_RequiredNested_Name] AND [r].[RequiredRelated_RequiredNested_String] = [r].[RequiredRelated_RequiredNested_String] """); } @@ -26,9 +26,9 @@ public override async Task Two_nested() AssertSql( """ -SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Ints], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Ints], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Ints], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Ints], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Ints], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Ints], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] FROM [RootEntity] AS [r] -WHERE [r].[RequiredRelated_RequiredNested_Id] = [r].[OptionalRelated_RequiredNested_Id] AND [r].[RequiredRelated_RequiredNested_Int] = [r].[OptionalRelated_RequiredNested_Int] AND [r].[RequiredRelated_RequiredNested_Name] = [r].[OptionalRelated_RequiredNested_Name] AND [r].[RequiredRelated_RequiredNested_String] = [r].[OptionalRelated_RequiredNested_String] +WHERE [r].[RequiredRelated_RequiredNested_Id] = [r].[OptionalRelated_RequiredNested_Id] AND [r].[RequiredRelated_RequiredNested_Int] = [r].[OptionalRelated_RequiredNested_Int] AND [r].[RequiredRelated_RequiredNested_Ints] = [r].[OptionalRelated_RequiredNested_Ints] AND [r].[RequiredRelated_RequiredNested_Name] = [r].[OptionalRelated_RequiredNested_Name] AND [r].[RequiredRelated_RequiredNested_String] = [r].[OptionalRelated_RequiredNested_String] """); } @@ -38,9 +38,9 @@ public override async Task Not_equals() AssertSql( """ -SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Ints], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Ints], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Ints], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Ints], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Ints], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Ints], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] FROM [RootEntity] AS [r] -WHERE [r].[RequiredRelated_Id] <> [r].[OptionalRelated_Id] OR [r].[OptionalRelated_Id] IS NULL OR [r].[RequiredRelated_Int] <> [r].[OptionalRelated_Int] OR [r].[OptionalRelated_Int] IS NULL OR [r].[RequiredRelated_Name] <> [r].[OptionalRelated_Name] OR [r].[OptionalRelated_Name] IS NULL OR [r].[RequiredRelated_String] <> [r].[OptionalRelated_String] OR [r].[OptionalRelated_String] IS NULL OR (([r].[RequiredRelated_OptionalNested_Id] <> [r].[RequiredRelated_OptionalNested_Id] OR [r].[RequiredRelated_OptionalNested_Id] IS NULL) AND [r].[RequiredRelated_OptionalNested_Id] IS NOT NULL) OR (([r].[RequiredRelated_OptionalNested_Int] <> [r].[RequiredRelated_OptionalNested_Int] OR [r].[RequiredRelated_OptionalNested_Int] IS NULL) AND [r].[RequiredRelated_OptionalNested_Int] IS NOT NULL) OR (([r].[RequiredRelated_OptionalNested_Name] <> [r].[RequiredRelated_OptionalNested_Name] OR [r].[RequiredRelated_OptionalNested_Name] IS NULL) AND [r].[RequiredRelated_OptionalNested_Name] IS NOT NULL) OR (([r].[RequiredRelated_OptionalNested_String] <> [r].[RequiredRelated_OptionalNested_String] OR [r].[RequiredRelated_OptionalNested_String] IS NULL) AND [r].[RequiredRelated_OptionalNested_String] IS NOT NULL) OR [r].[RequiredRelated_RequiredNested_Id] <> [r].[RequiredRelated_RequiredNested_Id] OR [r].[RequiredRelated_RequiredNested_Id] IS NULL OR [r].[RequiredRelated_RequiredNested_Int] <> [r].[RequiredRelated_RequiredNested_Int] OR [r].[RequiredRelated_RequiredNested_Int] IS NULL OR [r].[RequiredRelated_RequiredNested_Name] <> [r].[RequiredRelated_RequiredNested_Name] OR [r].[RequiredRelated_RequiredNested_Name] IS NULL OR [r].[RequiredRelated_RequiredNested_String] <> [r].[RequiredRelated_RequiredNested_String] OR [r].[RequiredRelated_RequiredNested_String] IS NULL +WHERE [r].[RequiredRelated_Id] <> [r].[OptionalRelated_Id] OR [r].[OptionalRelated_Id] IS NULL OR [r].[RequiredRelated_Int] <> [r].[OptionalRelated_Int] OR [r].[OptionalRelated_Int] IS NULL OR [r].[RequiredRelated_Ints] <> [r].[OptionalRelated_Ints] OR [r].[OptionalRelated_Ints] IS NULL OR [r].[RequiredRelated_Name] <> [r].[OptionalRelated_Name] OR [r].[OptionalRelated_Name] IS NULL OR [r].[RequiredRelated_String] <> [r].[OptionalRelated_String] OR [r].[OptionalRelated_String] IS NULL OR (([r].[RequiredRelated_OptionalNested_Id] <> [r].[RequiredRelated_OptionalNested_Id] OR [r].[RequiredRelated_OptionalNested_Id] IS NULL) AND [r].[RequiredRelated_OptionalNested_Id] IS NOT NULL) OR (([r].[RequiredRelated_OptionalNested_Int] <> [r].[RequiredRelated_OptionalNested_Int] OR [r].[RequiredRelated_OptionalNested_Int] IS NULL) AND [r].[RequiredRelated_OptionalNested_Int] IS NOT NULL) OR (([r].[RequiredRelated_OptionalNested_Ints] <> [r].[RequiredRelated_OptionalNested_Ints] OR [r].[RequiredRelated_OptionalNested_Ints] IS NULL) AND [r].[RequiredRelated_OptionalNested_Ints] IS NOT NULL) OR (([r].[RequiredRelated_OptionalNested_Name] <> [r].[RequiredRelated_OptionalNested_Name] OR [r].[RequiredRelated_OptionalNested_Name] IS NULL) AND [r].[RequiredRelated_OptionalNested_Name] IS NOT NULL) OR (([r].[RequiredRelated_OptionalNested_String] <> [r].[RequiredRelated_OptionalNested_String] OR [r].[RequiredRelated_OptionalNested_String] IS NULL) AND [r].[RequiredRelated_OptionalNested_String] IS NOT NULL) OR [r].[RequiredRelated_RequiredNested_Id] <> [r].[RequiredRelated_RequiredNested_Id] OR [r].[RequiredRelated_RequiredNested_Id] IS NULL OR [r].[RequiredRelated_RequiredNested_Int] <> [r].[RequiredRelated_RequiredNested_Int] OR [r].[RequiredRelated_RequiredNested_Int] IS NULL OR [r].[RequiredRelated_RequiredNested_Ints] <> [r].[RequiredRelated_RequiredNested_Ints] OR [r].[RequiredRelated_RequiredNested_Ints] IS NULL OR [r].[RequiredRelated_RequiredNested_Name] <> [r].[RequiredRelated_RequiredNested_Name] OR [r].[RequiredRelated_RequiredNested_Name] IS NULL OR [r].[RequiredRelated_RequiredNested_String] <> [r].[RequiredRelated_RequiredNested_String] OR [r].[RequiredRelated_RequiredNested_String] IS NULL """); } @@ -50,7 +50,7 @@ public override async Task Related_with_inline_null() AssertSql( """ -SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Ints], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Ints], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Ints], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Ints], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Ints], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Ints], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] FROM [RootEntity] AS [r] WHERE [r].[OptionalRelated_Id] IS NULL """); @@ -62,9 +62,9 @@ public override async Task Related_with_parameter_null() AssertSql( """ -SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Ints], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Ints], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Ints], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Ints], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Ints], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Ints], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] FROM [RootEntity] AS [r] -WHERE [r].[OptionalRelated_Id] IS NULL AND [r].[OptionalRelated_Int] IS NULL AND [r].[OptionalRelated_Name] IS NULL AND [r].[OptionalRelated_String] IS NULL AND [r].[OptionalRelated_OptionalNested_Id] IS NULL AND [r].[OptionalRelated_OptionalNested_Int] IS NULL AND [r].[OptionalRelated_OptionalNested_Name] IS NULL AND [r].[OptionalRelated_OptionalNested_String] IS NULL AND [r].[OptionalRelated_RequiredNested_Id] IS NULL AND [r].[OptionalRelated_RequiredNested_Int] IS NULL AND [r].[OptionalRelated_RequiredNested_Name] IS NULL AND [r].[OptionalRelated_RequiredNested_String] IS NULL +WHERE [r].[OptionalRelated_Id] IS NULL AND [r].[OptionalRelated_Int] IS NULL AND [r].[OptionalRelated_Ints] IS NULL AND [r].[OptionalRelated_Name] IS NULL AND [r].[OptionalRelated_String] IS NULL AND [r].[OptionalRelated_OptionalNested_Id] IS NULL AND [r].[OptionalRelated_OptionalNested_Int] IS NULL AND [r].[OptionalRelated_OptionalNested_Ints] IS NULL AND [r].[OptionalRelated_OptionalNested_Name] IS NULL AND [r].[OptionalRelated_OptionalNested_String] IS NULL AND [r].[OptionalRelated_RequiredNested_Id] IS NULL AND [r].[OptionalRelated_RequiredNested_Int] IS NULL AND [r].[OptionalRelated_RequiredNested_Ints] IS NULL AND [r].[OptionalRelated_RequiredNested_Name] IS NULL AND [r].[OptionalRelated_RequiredNested_String] IS NULL """); } @@ -74,7 +74,7 @@ public override async Task Nested_with_inline_null() AssertSql( """ -SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Ints], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Ints], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Ints], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Ints], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Ints], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Ints], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] FROM [RootEntity] AS [r] WHERE [r].[RequiredRelated_OptionalNested_Id] IS NULL """); @@ -86,9 +86,9 @@ public override async Task Nested_with_inline() AssertSql( """ -SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Ints], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Ints], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Ints], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Ints], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Ints], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Ints], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] FROM [RootEntity] AS [r] -WHERE [r].[RequiredRelated_RequiredNested_Id] = 1000 AND [r].[RequiredRelated_RequiredNested_Int] = 8 AND [r].[RequiredRelated_RequiredNested_Name] = N'Root1_RequiredRelated_RequiredNested' AND [r].[RequiredRelated_RequiredNested_String] = N'foo' +WHERE [r].[RequiredRelated_RequiredNested_Id] = 1000 AND [r].[RequiredRelated_RequiredNested_Int] = 8 AND [r].[RequiredRelated_RequiredNested_Ints] = N'[1,2,3]' AND [r].[RequiredRelated_RequiredNested_Name] = N'Root1_RequiredRelated_RequiredNested' AND [r].[RequiredRelated_RequiredNested_String] = N'foo' """); } @@ -100,12 +100,13 @@ public override async Task Nested_with_parameter() """ @entity_equality_nested_Id='?' (DbType = Int32) @entity_equality_nested_Int='?' (DbType = Int32) +@entity_equality_nested_Ints='?' (Size = 4000) @entity_equality_nested_Name='?' (Size = 4000) @entity_equality_nested_String='?' (Size = 4000) -SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Ints], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Ints], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Ints], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Ints], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Ints], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Ints], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] FROM [RootEntity] AS [r] -WHERE [r].[RequiredRelated_RequiredNested_Id] = @entity_equality_nested_Id AND [r].[RequiredRelated_RequiredNested_Int] = @entity_equality_nested_Int AND [r].[RequiredRelated_RequiredNested_Name] = @entity_equality_nested_Name AND [r].[RequiredRelated_RequiredNested_String] = @entity_equality_nested_String +WHERE [r].[RequiredRelated_RequiredNested_Id] = @entity_equality_nested_Id AND [r].[RequiredRelated_RequiredNested_Int] = @entity_equality_nested_Int AND [r].[RequiredRelated_RequiredNested_Ints] = @entity_equality_nested_Ints AND [r].[RequiredRelated_RequiredNested_Name] = @entity_equality_nested_Name AND [r].[RequiredRelated_RequiredNested_String] = @entity_equality_nested_String """); } diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/Associations/Navigations/NavigationsCollectionSqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/Associations/Navigations/NavigationsCollectionSqlServerTest.cs index 9996dce3be0..4527cd8b223 100644 --- a/test/EFCore.SqlServer.FunctionalTests/Query/Associations/Navigations/NavigationsCollectionSqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/Query/Associations/Navigations/NavigationsCollectionSqlServerTest.cs @@ -12,7 +12,7 @@ public override async Task Count() AssertSql( """ -SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r1].[Id], [r1].[CollectionRootId], [r1].[Int], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [n].[Id], [n0].[Id], [r2].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Name], [n3].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Name], [n0].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Name2], [s].[String2], [r2].[CollectionRootId], [r2].[Int], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Name], [n7].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Name], [n1].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Name], [n2].[String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r1].[Id], [r1].[CollectionRootId], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [n].[Id], [n0].[Id], [r2].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Ints], [n3].[Name], [n3].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Ints], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Ints], [n0].[Name], [n0].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Ints], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r2].[CollectionRootId], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Ints], [n7].[Name], [n7].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Ints], [n1].[Name], [n1].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Ints], [n2].[Name], [n2].[String] FROM [RootEntity] AS [r] LEFT JOIN [RelatedType] AS [r1] ON [r].[OptionalRelatedId] = [r1].[Id] LEFT JOIN [NestedType] AS [n] ON [r1].[OptionalNestedId] = [n].[Id] @@ -22,7 +22,7 @@ FROM [RootEntity] AS [r] INNER JOIN [NestedType] AS [n2] ON [r2].[RequiredNestedId] = [n2].[Id] LEFT JOIN [NestedType] AS [n3] ON [r1].[Id] = [n3].[CollectionRelatedId] LEFT JOIN ( - SELECT [r3].[Id], [r3].[CollectionRootId], [r3].[Int], [r3].[Name], [r3].[OptionalNestedId], [r3].[RequiredNestedId], [r3].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] + SELECT [r3].[Id], [r3].[CollectionRootId], [r3].[Int], [r3].[Ints], [r3].[Name], [r3].[OptionalNestedId], [r3].[RequiredNestedId], [r3].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Ints] AS [Ints0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Ints] AS [Ints1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Ints] AS [Ints2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] FROM [RelatedType] AS [r3] LEFT JOIN [NestedType] AS [n4] ON [r3].[OptionalNestedId] = [n4].[Id] INNER JOIN [NestedType] AS [n5] ON [r3].[RequiredNestedId] = [n5].[Id] @@ -43,7 +43,7 @@ public override async Task Where() AssertSql( """ -SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r1].[Id], [r1].[CollectionRootId], [r1].[Int], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [n].[Id], [n0].[Id], [r2].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Name], [n3].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Name], [n0].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Name2], [s].[String2], [r2].[CollectionRootId], [r2].[Int], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Name], [n7].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Name], [n1].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Name], [n2].[String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r1].[Id], [r1].[CollectionRootId], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [n].[Id], [n0].[Id], [r2].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Ints], [n3].[Name], [n3].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Ints], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Ints], [n0].[Name], [n0].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Ints], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r2].[CollectionRootId], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Ints], [n7].[Name], [n7].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Ints], [n1].[Name], [n1].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Ints], [n2].[Name], [n2].[String] FROM [RootEntity] AS [r] LEFT JOIN [RelatedType] AS [r1] ON [r].[OptionalRelatedId] = [r1].[Id] LEFT JOIN [NestedType] AS [n] ON [r1].[OptionalNestedId] = [n].[Id] @@ -53,7 +53,7 @@ FROM [RootEntity] AS [r] INNER JOIN [NestedType] AS [n2] ON [r2].[RequiredNestedId] = [n2].[Id] LEFT JOIN [NestedType] AS [n3] ON [r1].[Id] = [n3].[CollectionRelatedId] LEFT JOIN ( - SELECT [r3].[Id], [r3].[CollectionRootId], [r3].[Int], [r3].[Name], [r3].[OptionalNestedId], [r3].[RequiredNestedId], [r3].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] + SELECT [r3].[Id], [r3].[CollectionRootId], [r3].[Int], [r3].[Ints], [r3].[Name], [r3].[OptionalNestedId], [r3].[RequiredNestedId], [r3].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Ints] AS [Ints0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Ints] AS [Ints1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Ints] AS [Ints2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] FROM [RelatedType] AS [r3] LEFT JOIN [NestedType] AS [n4] ON [r3].[OptionalNestedId] = [n4].[Id] INNER JOIN [NestedType] AS [n5] ON [r3].[RequiredNestedId] = [n5].[Id] @@ -74,7 +74,7 @@ public override async Task OrderBy_ElementAt() AssertSql( """ -SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r1].[Id], [r1].[CollectionRootId], [r1].[Int], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [n].[Id], [n0].[Id], [r2].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Name], [n3].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Name], [n0].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Name2], [s].[String2], [r2].[CollectionRootId], [r2].[Int], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Name], [n7].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Name], [n1].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Name], [n2].[String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r1].[Id], [r1].[CollectionRootId], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [n].[Id], [n0].[Id], [r2].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Ints], [n3].[Name], [n3].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Ints], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Ints], [n0].[Name], [n0].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Ints], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r2].[CollectionRootId], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Ints], [n7].[Name], [n7].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Ints], [n1].[Name], [n1].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Ints], [n2].[Name], [n2].[String] FROM [RootEntity] AS [r] LEFT JOIN [RelatedType] AS [r1] ON [r].[OptionalRelatedId] = [r1].[Id] LEFT JOIN [NestedType] AS [n] ON [r1].[OptionalNestedId] = [n].[Id] @@ -84,7 +84,7 @@ FROM [RootEntity] AS [r] INNER JOIN [NestedType] AS [n2] ON [r2].[RequiredNestedId] = [n2].[Id] LEFT JOIN [NestedType] AS [n3] ON [r1].[Id] = [n3].[CollectionRelatedId] LEFT JOIN ( - SELECT [r3].[Id], [r3].[CollectionRootId], [r3].[Int], [r3].[Name], [r3].[OptionalNestedId], [r3].[RequiredNestedId], [r3].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] + SELECT [r3].[Id], [r3].[CollectionRootId], [r3].[Int], [r3].[Ints], [r3].[Name], [r3].[OptionalNestedId], [r3].[RequiredNestedId], [r3].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Ints] AS [Ints0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Ints] AS [Ints1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Ints] AS [Ints2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] FROM [RelatedType] AS [r3] LEFT JOIN [NestedType] AS [n4] ON [r3].[OptionalNestedId] = [n4].[Id] INNER JOIN [NestedType] AS [n5] ON [r3].[RequiredNestedId] = [n5].[Id] @@ -109,7 +109,7 @@ public override async Task Distinct() AssertSql( """ -SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n].[Id], [n0].[Id], [r3].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Name], [n3].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Name], [n0].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Name2], [s].[String2], [r3].[CollectionRootId], [r3].[Int], [r3].[Name], [r3].[OptionalNestedId], [r3].[RequiredNestedId], [r3].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Name], [n7].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Name], [n1].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Name], [n2].[String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n].[Id], [n0].[Id], [r3].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Ints], [n3].[Name], [n3].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Ints], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Ints], [n0].[Name], [n0].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Ints], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r3].[CollectionRootId], [r3].[Int], [r3].[Ints], [r3].[Name], [r3].[OptionalNestedId], [r3].[RequiredNestedId], [r3].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Ints], [n7].[Name], [n7].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Ints], [n1].[Name], [n1].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Ints], [n2].[Name], [n2].[String] FROM [RootEntity] AS [r] LEFT JOIN [RelatedType] AS [r2] ON [r].[OptionalRelatedId] = [r2].[Id] LEFT JOIN [NestedType] AS [n] ON [r2].[OptionalNestedId] = [n].[Id] @@ -119,7 +119,7 @@ FROM [RootEntity] AS [r] INNER JOIN [NestedType] AS [n2] ON [r3].[RequiredNestedId] = [n2].[Id] LEFT JOIN [NestedType] AS [n3] ON [r2].[Id] = [n3].[CollectionRelatedId] LEFT JOIN ( - SELECT [r4].[Id], [r4].[CollectionRootId], [r4].[Int], [r4].[Name], [r4].[OptionalNestedId], [r4].[RequiredNestedId], [r4].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] + SELECT [r4].[Id], [r4].[CollectionRootId], [r4].[Int], [r4].[Ints], [r4].[Name], [r4].[OptionalNestedId], [r4].[RequiredNestedId], [r4].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Ints] AS [Ints0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Ints] AS [Ints1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Ints] AS [Ints2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] FROM [RelatedType] AS [r4] LEFT JOIN [NestedType] AS [n4] ON [r4].[OptionalNestedId] = [n4].[Id] INNER JOIN [NestedType] AS [n5] ON [r4].[RequiredNestedId] = [n5].[Id] @@ -129,7 +129,7 @@ FROM [RelatedType] AS [r4] WHERE ( SELECT COUNT(*) FROM ( - SELECT DISTINCT [r0].[Id], [r0].[CollectionRootId], [r0].[Int], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String] + SELECT DISTINCT [r0].[Id], [r0].[CollectionRootId], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String] FROM [RelatedType] AS [r0] WHERE [r].[Id] = [r0].[CollectionRootId] ) AS [r1]) = 2 @@ -143,12 +143,12 @@ public override async Task Distinct_projected(QueryTrackingBehavior queryTrackin AssertSql( """ -SELECT [r].[Id], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Name2], [s].[String2] +SELECT [r].[Id], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Ints], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2] FROM [RootEntity] AS [r] OUTER APPLY ( - SELECT [r1].[Id], [r1].[CollectionRootId], [r1].[Int], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [n].[Id] AS [Id0], [n0].[Id] AS [Id1], [n1].[Id] AS [Id2], [n1].[CollectionRelatedId], [n1].[Int] AS [Int0], [n1].[Name] AS [Name0], [n1].[String] AS [String0], [n].[CollectionRelatedId] AS [CollectionRelatedId0], [n].[Int] AS [Int1], [n].[Name] AS [Name1], [n].[String] AS [String1], [n0].[CollectionRelatedId] AS [CollectionRelatedId1], [n0].[Int] AS [Int2], [n0].[Name] AS [Name2], [n0].[String] AS [String2] + SELECT [r1].[Id], [r1].[CollectionRootId], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [n].[Id] AS [Id0], [n0].[Id] AS [Id1], [n1].[Id] AS [Id2], [n1].[CollectionRelatedId], [n1].[Int] AS [Int0], [n1].[Ints] AS [Ints0], [n1].[Name] AS [Name0], [n1].[String] AS [String0], [n].[CollectionRelatedId] AS [CollectionRelatedId0], [n].[Int] AS [Int1], [n].[Ints] AS [Ints1], [n].[Name] AS [Name1], [n].[String] AS [String1], [n0].[CollectionRelatedId] AS [CollectionRelatedId1], [n0].[Int] AS [Int2], [n0].[Ints] AS [Ints2], [n0].[Name] AS [Name2], [n0].[String] AS [String2] FROM ( - SELECT DISTINCT [r0].[Id], [r0].[CollectionRootId], [r0].[Int], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String] + SELECT DISTINCT [r0].[Id], [r0].[CollectionRootId], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String] FROM [RelatedType] AS [r0] WHERE [r].[Id] = [r0].[CollectionRootId] ) AS [r1] @@ -217,7 +217,7 @@ public override async Task GroupBy() AssertSql( """ -SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r1].[Id], [r1].[CollectionRootId], [r1].[Int], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [n].[Id], [n0].[Id], [r2].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Name], [n3].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Name], [n0].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Name2], [s].[String2], [r2].[CollectionRootId], [r2].[Int], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Name], [n7].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Name], [n1].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Name], [n2].[String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r1].[Id], [r1].[CollectionRootId], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [n].[Id], [n0].[Id], [r2].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Ints], [n3].[Name], [n3].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Ints], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Ints], [n0].[Name], [n0].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Ints], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r2].[CollectionRootId], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Ints], [n7].[Name], [n7].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Ints], [n1].[Name], [n1].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Ints], [n2].[Name], [n2].[String] FROM [RootEntity] AS [r] LEFT JOIN [RelatedType] AS [r1] ON [r].[OptionalRelatedId] = [r1].[Id] LEFT JOIN [NestedType] AS [n] ON [r1].[OptionalNestedId] = [n].[Id] @@ -227,7 +227,7 @@ FROM [RootEntity] AS [r] INNER JOIN [NestedType] AS [n2] ON [r2].[RequiredNestedId] = [n2].[Id] LEFT JOIN [NestedType] AS [n3] ON [r1].[Id] = [n3].[CollectionRelatedId] LEFT JOIN ( - SELECT [r3].[Id], [r3].[CollectionRootId], [r3].[Int], [r3].[Name], [r3].[OptionalNestedId], [r3].[RequiredNestedId], [r3].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] + SELECT [r3].[Id], [r3].[CollectionRootId], [r3].[Int], [r3].[Ints], [r3].[Name], [r3].[OptionalNestedId], [r3].[RequiredNestedId], [r3].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Ints] AS [Ints0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Ints] AS [Ints1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Ints] AS [Ints2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] FROM [RelatedType] AS [r3] LEFT JOIN [NestedType] AS [n4] ON [r3].[OptionalNestedId] = [n4].[Id] INNER JOIN [NestedType] AS [n5] ON [r3].[RequiredNestedId] = [n5].[Id] diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/Associations/Navigations/NavigationsIncludeSqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/Associations/Navigations/NavigationsIncludeSqlServerTest.cs index 2370d91e8f1..fadc9002a07 100644 --- a/test/EFCore.SqlServer.FunctionalTests/Query/Associations/Navigations/NavigationsIncludeSqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/Query/Associations/Navigations/NavigationsIncludeSqlServerTest.cs @@ -12,7 +12,7 @@ public override async Task Include_required(bool async) AssertSql( """ -SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r0].[Id], [r0].[CollectionRootId], [r0].[Int], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n].[Id], [n0].[Id], [r1].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Name], [n3].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Name], [n0].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Name2], [s].[String2], [r1].[CollectionRootId], [r1].[Int], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Name], [n7].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Name], [n1].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Name], [n2].[String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r0].[Id], [r0].[CollectionRootId], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n].[Id], [n0].[Id], [r1].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Ints], [n3].[Name], [n3].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Ints], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Ints], [n0].[Name], [n0].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Ints], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r1].[CollectionRootId], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Ints], [n7].[Name], [n7].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Ints], [n1].[Name], [n1].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Ints], [n2].[Name], [n2].[String] FROM [RootEntity] AS [r] LEFT JOIN [RelatedType] AS [r0] ON [r].[OptionalRelatedId] = [r0].[Id] LEFT JOIN [NestedType] AS [n] ON [r0].[OptionalNestedId] = [n].[Id] @@ -22,7 +22,7 @@ FROM [RootEntity] AS [r] INNER JOIN [NestedType] AS [n2] ON [r1].[RequiredNestedId] = [n2].[Id] LEFT JOIN [NestedType] AS [n3] ON [r0].[Id] = [n3].[CollectionRelatedId] LEFT JOIN ( - SELECT [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] + SELECT [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Ints] AS [Ints0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Ints] AS [Ints1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Ints] AS [Ints2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] FROM [RelatedType] AS [r2] LEFT JOIN [NestedType] AS [n4] ON [r2].[OptionalNestedId] = [n4].[Id] INNER JOIN [NestedType] AS [n5] ON [r2].[RequiredNestedId] = [n5].[Id] @@ -39,7 +39,7 @@ public override async Task Include_optional(bool async) AssertSql( """ -SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r0].[Id], [r0].[CollectionRootId], [r0].[Int], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n].[Id], [n0].[Id], [r1].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Name], [n3].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Name], [n0].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Name2], [s].[String2], [r1].[CollectionRootId], [r1].[Int], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Name], [n7].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Name], [n1].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Name], [n2].[String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r0].[Id], [r0].[CollectionRootId], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n].[Id], [n0].[Id], [r1].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Ints], [n3].[Name], [n3].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Ints], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Ints], [n0].[Name], [n0].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Ints], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r1].[CollectionRootId], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Ints], [n7].[Name], [n7].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Ints], [n1].[Name], [n1].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Ints], [n2].[Name], [n2].[String] FROM [RootEntity] AS [r] LEFT JOIN [RelatedType] AS [r0] ON [r].[OptionalRelatedId] = [r0].[Id] LEFT JOIN [NestedType] AS [n] ON [r0].[OptionalNestedId] = [n].[Id] @@ -49,7 +49,7 @@ FROM [RootEntity] AS [r] INNER JOIN [NestedType] AS [n2] ON [r1].[RequiredNestedId] = [n2].[Id] LEFT JOIN [NestedType] AS [n3] ON [r0].[Id] = [n3].[CollectionRelatedId] LEFT JOIN ( - SELECT [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] + SELECT [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Ints] AS [Ints0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Ints] AS [Ints1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Ints] AS [Ints2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] FROM [RelatedType] AS [r2] LEFT JOIN [NestedType] AS [n4] ON [r2].[OptionalNestedId] = [n4].[Id] INNER JOIN [NestedType] AS [n5] ON [r2].[RequiredNestedId] = [n5].[Id] @@ -66,7 +66,7 @@ public override async Task Include_collection(bool async) AssertSql( """ -SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r0].[Id], [r0].[CollectionRootId], [r0].[Int], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n].[Id], [n0].[Id], [r1].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Name], [n3].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Name], [n0].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Name2], [s].[String2], [r1].[CollectionRootId], [r1].[Int], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Name], [n7].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Name], [n1].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Name], [n2].[String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r0].[Id], [r0].[CollectionRootId], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n].[Id], [n0].[Id], [r1].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Ints], [n3].[Name], [n3].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Ints], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Ints], [n0].[Name], [n0].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Ints], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r1].[CollectionRootId], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Ints], [n7].[Name], [n7].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Ints], [n1].[Name], [n1].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Ints], [n2].[Name], [n2].[String] FROM [RootEntity] AS [r] LEFT JOIN [RelatedType] AS [r0] ON [r].[OptionalRelatedId] = [r0].[Id] LEFT JOIN [NestedType] AS [n] ON [r0].[OptionalNestedId] = [n].[Id] @@ -76,7 +76,7 @@ FROM [RootEntity] AS [r] INNER JOIN [NestedType] AS [n2] ON [r1].[RequiredNestedId] = [n2].[Id] LEFT JOIN [NestedType] AS [n3] ON [r0].[Id] = [n3].[CollectionRelatedId] LEFT JOIN ( - SELECT [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] + SELECT [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Ints] AS [Ints0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Ints] AS [Ints1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Ints] AS [Ints2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] FROM [RelatedType] AS [r2] LEFT JOIN [NestedType] AS [n4] ON [r2].[OptionalNestedId] = [n4].[Id] INNER JOIN [NestedType] AS [n5] ON [r2].[RequiredNestedId] = [n5].[Id] @@ -93,7 +93,7 @@ public override async Task Include_required_optional_and_collection(bool async) AssertSql( """ -SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r0].[Id], [r0].[CollectionRootId], [r0].[Int], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n].[Id], [n0].[Id], [r1].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Name], [n3].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Name], [n0].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Name2], [s].[String2], [r1].[CollectionRootId], [r1].[Int], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Name], [n7].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Name], [n1].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Name], [n2].[String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r0].[Id], [r0].[CollectionRootId], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n].[Id], [n0].[Id], [r1].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Ints], [n3].[Name], [n3].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Ints], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Ints], [n0].[Name], [n0].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Ints], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r1].[CollectionRootId], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Ints], [n7].[Name], [n7].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Ints], [n1].[Name], [n1].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Ints], [n2].[Name], [n2].[String] FROM [RootEntity] AS [r] LEFT JOIN [RelatedType] AS [r0] ON [r].[OptionalRelatedId] = [r0].[Id] LEFT JOIN [NestedType] AS [n] ON [r0].[OptionalNestedId] = [n].[Id] @@ -103,7 +103,7 @@ FROM [RootEntity] AS [r] INNER JOIN [NestedType] AS [n2] ON [r1].[RequiredNestedId] = [n2].[Id] LEFT JOIN [NestedType] AS [n3] ON [r0].[Id] = [n3].[CollectionRelatedId] LEFT JOIN ( - SELECT [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] + SELECT [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Ints] AS [Ints0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Ints] AS [Ints1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Ints] AS [Ints2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] FROM [RelatedType] AS [r2] LEFT JOIN [NestedType] AS [n4] ON [r2].[OptionalNestedId] = [n4].[Id] INNER JOIN [NestedType] AS [n5] ON [r2].[RequiredNestedId] = [n5].[Id] @@ -120,7 +120,7 @@ public override async Task Include_nested(bool async) AssertSql( """ -SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r0].[Id], [r0].[CollectionRootId], [r0].[Int], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n].[Id], [n0].[Id], [r1].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Name], [n3].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Name], [n0].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Name2], [s].[String2], [r1].[CollectionRootId], [r1].[Int], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Name], [n7].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Name], [n1].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Name], [n2].[String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r0].[Id], [r0].[CollectionRootId], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n].[Id], [n0].[Id], [r1].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Ints], [n3].[Name], [n3].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Ints], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Ints], [n0].[Name], [n0].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Ints], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r1].[CollectionRootId], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Ints], [n7].[Name], [n7].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Ints], [n1].[Name], [n1].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Ints], [n2].[Name], [n2].[String] FROM [RootEntity] AS [r] LEFT JOIN [RelatedType] AS [r0] ON [r].[OptionalRelatedId] = [r0].[Id] LEFT JOIN [NestedType] AS [n] ON [r0].[OptionalNestedId] = [n].[Id] @@ -130,7 +130,7 @@ FROM [RootEntity] AS [r] INNER JOIN [NestedType] AS [n2] ON [r1].[RequiredNestedId] = [n2].[Id] LEFT JOIN [NestedType] AS [n3] ON [r0].[Id] = [n3].[CollectionRelatedId] LEFT JOIN ( - SELECT [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] + SELECT [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Ints] AS [Ints0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Ints] AS [Ints1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Ints] AS [Ints2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] FROM [RelatedType] AS [r2] LEFT JOIN [NestedType] AS [n4] ON [r2].[OptionalNestedId] = [n4].[Id] INNER JOIN [NestedType] AS [n5] ON [r2].[RequiredNestedId] = [n5].[Id] @@ -147,7 +147,7 @@ public override async Task Include_nested_optional(bool async) AssertSql( """ -SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r0].[Id], [r0].[CollectionRootId], [r0].[Int], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n].[Id], [n0].[Id], [r1].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Name], [n3].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Name], [n0].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Name2], [s].[String2], [r1].[CollectionRootId], [r1].[Int], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Name], [n7].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Name], [n1].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Name], [n2].[String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r0].[Id], [r0].[CollectionRootId], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n].[Id], [n0].[Id], [r1].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Ints], [n3].[Name], [n3].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Ints], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Ints], [n0].[Name], [n0].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Ints], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r1].[CollectionRootId], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Ints], [n7].[Name], [n7].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Ints], [n1].[Name], [n1].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Ints], [n2].[Name], [n2].[String] FROM [RootEntity] AS [r] LEFT JOIN [RelatedType] AS [r0] ON [r].[OptionalRelatedId] = [r0].[Id] LEFT JOIN [NestedType] AS [n] ON [r0].[OptionalNestedId] = [n].[Id] @@ -157,7 +157,7 @@ FROM [RootEntity] AS [r] INNER JOIN [NestedType] AS [n2] ON [r1].[RequiredNestedId] = [n2].[Id] LEFT JOIN [NestedType] AS [n3] ON [r0].[Id] = [n3].[CollectionRelatedId] LEFT JOIN ( - SELECT [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] + SELECT [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Ints] AS [Ints0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Ints] AS [Ints1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Ints] AS [Ints2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] FROM [RelatedType] AS [r2] LEFT JOIN [NestedType] AS [n4] ON [r2].[OptionalNestedId] = [n4].[Id] INNER JOIN [NestedType] AS [n5] ON [r2].[RequiredNestedId] = [n5].[Id] @@ -174,7 +174,7 @@ public override async Task Include_nested_collection(bool async) AssertSql( """ -SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r0].[Id], [r0].[CollectionRootId], [r0].[Int], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n].[Id], [n0].[Id], [r1].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Name], [n3].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Name], [n0].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Name2], [s].[String2], [r1].[CollectionRootId], [r1].[Int], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Name], [n7].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Name], [n1].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Name], [n2].[String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r0].[Id], [r0].[CollectionRootId], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n].[Id], [n0].[Id], [r1].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Ints], [n3].[Name], [n3].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Ints], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Ints], [n0].[Name], [n0].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Ints], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r1].[CollectionRootId], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Ints], [n7].[Name], [n7].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Ints], [n1].[Name], [n1].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Ints], [n2].[Name], [n2].[String] FROM [RootEntity] AS [r] LEFT JOIN [RelatedType] AS [r0] ON [r].[OptionalRelatedId] = [r0].[Id] LEFT JOIN [NestedType] AS [n] ON [r0].[OptionalNestedId] = [n].[Id] @@ -184,7 +184,7 @@ FROM [RootEntity] AS [r] INNER JOIN [NestedType] AS [n2] ON [r1].[RequiredNestedId] = [n2].[Id] LEFT JOIN [NestedType] AS [n3] ON [r0].[Id] = [n3].[CollectionRelatedId] LEFT JOIN ( - SELECT [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] + SELECT [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Ints] AS [Ints0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Ints] AS [Ints1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Ints] AS [Ints2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] FROM [RelatedType] AS [r2] LEFT JOIN [NestedType] AS [n4] ON [r2].[OptionalNestedId] = [n4].[Id] INNER JOIN [NestedType] AS [n5] ON [r2].[RequiredNestedId] = [n5].[Id] @@ -201,7 +201,7 @@ public override async Task Include_nested_collection_on_optional(bool async) AssertSql( """ -SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r0].[Id], [r0].[CollectionRootId], [r0].[Int], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n].[Id], [n0].[Id], [r1].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Name], [n3].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Name], [n0].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Name2], [s].[String2], [r1].[CollectionRootId], [r1].[Int], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Name], [n7].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Name], [n1].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Name], [n2].[String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r0].[Id], [r0].[CollectionRootId], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n].[Id], [n0].[Id], [r1].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Ints], [n3].[Name], [n3].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Ints], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Ints], [n0].[Name], [n0].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Ints], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r1].[CollectionRootId], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Ints], [n7].[Name], [n7].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Ints], [n1].[Name], [n1].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Ints], [n2].[Name], [n2].[String] FROM [RootEntity] AS [r] LEFT JOIN [RelatedType] AS [r0] ON [r].[OptionalRelatedId] = [r0].[Id] LEFT JOIN [NestedType] AS [n] ON [r0].[OptionalNestedId] = [n].[Id] @@ -211,7 +211,7 @@ FROM [RootEntity] AS [r] INNER JOIN [NestedType] AS [n2] ON [r1].[RequiredNestedId] = [n2].[Id] LEFT JOIN [NestedType] AS [n3] ON [r0].[Id] = [n3].[CollectionRelatedId] LEFT JOIN ( - SELECT [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] + SELECT [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Ints] AS [Ints0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Ints] AS [Ints1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Ints] AS [Ints2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] FROM [RelatedType] AS [r2] LEFT JOIN [NestedType] AS [n4] ON [r2].[OptionalNestedId] = [n4].[Id] INNER JOIN [NestedType] AS [n5] ON [r2].[RequiredNestedId] = [n5].[Id] @@ -228,7 +228,7 @@ public override async Task Include_nested_collection_on_collection(bool async) AssertSql( """ -SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r0].[Id], [r0].[CollectionRootId], [r0].[Int], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n].[Id], [n0].[Id], [r1].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Name], [n3].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Name], [n0].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Name2], [s].[String2], [r1].[CollectionRootId], [r1].[Int], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Name], [n7].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Name], [n1].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Name], [n2].[String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r0].[Id], [r0].[CollectionRootId], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n].[Id], [n0].[Id], [r1].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Ints], [n3].[Name], [n3].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Ints], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Ints], [n0].[Name], [n0].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Ints], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r1].[CollectionRootId], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Ints], [n7].[Name], [n7].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Ints], [n1].[Name], [n1].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Ints], [n2].[Name], [n2].[String] FROM [RootEntity] AS [r] LEFT JOIN [RelatedType] AS [r0] ON [r].[OptionalRelatedId] = [r0].[Id] LEFT JOIN [NestedType] AS [n] ON [r0].[OptionalNestedId] = [n].[Id] @@ -238,7 +238,7 @@ FROM [RootEntity] AS [r] INNER JOIN [NestedType] AS [n2] ON [r1].[RequiredNestedId] = [n2].[Id] LEFT JOIN [NestedType] AS [n3] ON [r0].[Id] = [n3].[CollectionRelatedId] LEFT JOIN ( - SELECT [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] + SELECT [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Ints] AS [Ints0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Ints] AS [Ints1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Ints] AS [Ints2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] FROM [RelatedType] AS [r2] LEFT JOIN [NestedType] AS [n4] ON [r2].[OptionalNestedId] = [n4].[Id] INNER JOIN [NestedType] AS [n5] ON [r2].[RequiredNestedId] = [n5].[Id] diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/Associations/Navigations/NavigationsMiscellaneousSqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/Associations/Navigations/NavigationsMiscellaneousSqlServerTest.cs index f1ddee781f2..98cbb0e82c5 100644 --- a/test/EFCore.SqlServer.FunctionalTests/Query/Associations/Navigations/NavigationsMiscellaneousSqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/Query/Associations/Navigations/NavigationsMiscellaneousSqlServerTest.cs @@ -16,7 +16,7 @@ public override async Task Where_related_property() AssertSql( """ -SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r1].[Id], [r1].[CollectionRootId], [r1].[Int], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [r0].[Id], [n].[Id], [n0].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Name], [n3].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Name], [n0].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Name2], [s].[String2], [r0].[CollectionRootId], [r0].[Int], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Name], [n7].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Name], [n1].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Name], [n2].[String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r1].[Id], [r1].[CollectionRootId], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [r0].[Id], [n].[Id], [n0].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Ints], [n3].[Name], [n3].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Ints], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Ints], [n0].[Name], [n0].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Ints], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r0].[CollectionRootId], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Ints], [n7].[Name], [n7].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Ints], [n1].[Name], [n1].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Ints], [n2].[Name], [n2].[String] FROM [RootEntity] AS [r] INNER JOIN [RelatedType] AS [r0] ON [r].[RequiredRelatedId] = [r0].[Id] LEFT JOIN [RelatedType] AS [r1] ON [r].[OptionalRelatedId] = [r1].[Id] @@ -26,7 +26,7 @@ FROM [RootEntity] AS [r] INNER JOIN [NestedType] AS [n2] ON [r0].[RequiredNestedId] = [n2].[Id] LEFT JOIN [NestedType] AS [n3] ON [r1].[Id] = [n3].[CollectionRelatedId] LEFT JOIN ( - SELECT [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] + SELECT [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Ints] AS [Ints0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Ints] AS [Ints1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Ints] AS [Ints2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] FROM [RelatedType] AS [r2] LEFT JOIN [NestedType] AS [n4] ON [r2].[OptionalNestedId] = [n4].[Id] INNER JOIN [NestedType] AS [n5] ON [r2].[RequiredNestedId] = [n5].[Id] @@ -44,7 +44,7 @@ public override async Task Where_optional_related_property() AssertSql( """ -SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r0].[Id], [r0].[CollectionRootId], [r0].[Int], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n].[Id], [n0].[Id], [r1].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Name], [n3].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Name], [n0].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Name2], [s].[String2], [r1].[CollectionRootId], [r1].[Int], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Name], [n7].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Name], [n1].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Name], [n2].[String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r0].[Id], [r0].[CollectionRootId], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n].[Id], [n0].[Id], [r1].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Ints], [n3].[Name], [n3].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Ints], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Ints], [n0].[Name], [n0].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Ints], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r1].[CollectionRootId], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Ints], [n7].[Name], [n7].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Ints], [n1].[Name], [n1].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Ints], [n2].[Name], [n2].[String] FROM [RootEntity] AS [r] LEFT JOIN [RelatedType] AS [r0] ON [r].[OptionalRelatedId] = [r0].[Id] LEFT JOIN [NestedType] AS [n] ON [r0].[OptionalNestedId] = [n].[Id] @@ -54,7 +54,7 @@ FROM [RootEntity] AS [r] INNER JOIN [NestedType] AS [n2] ON [r1].[RequiredNestedId] = [n2].[Id] LEFT JOIN [NestedType] AS [n3] ON [r0].[Id] = [n3].[CollectionRelatedId] LEFT JOIN ( - SELECT [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] + SELECT [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Ints] AS [Ints0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Ints] AS [Ints1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Ints] AS [Ints2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] FROM [RelatedType] AS [r2] LEFT JOIN [NestedType] AS [n4] ON [r2].[OptionalNestedId] = [n4].[Id] INNER JOIN [NestedType] AS [n5] ON [r2].[RequiredNestedId] = [n5].[Id] @@ -72,7 +72,7 @@ public override async Task Where_nested_related_property() AssertSql( """ -SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r1].[Id], [r1].[CollectionRootId], [r1].[Int], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [r0].[Id], [n].[Id], [n0].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Name], [n3].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Name], [n0].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Name], [n1].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Name2], [s].[String2], [r0].[CollectionRootId], [r0].[Int], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Name], [n7].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Name], [n2].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Name], [n].[String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r1].[Id], [r1].[CollectionRootId], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [r0].[Id], [n].[Id], [n0].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Ints], [n3].[Name], [n3].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Ints], [n0].[Name], [n0].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Ints], [n1].[Name], [n1].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Ints], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r0].[CollectionRootId], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Ints], [n7].[Name], [n7].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Ints], [n2].[Name], [n2].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Ints], [n].[Name], [n].[String] FROM [RootEntity] AS [r] INNER JOIN [RelatedType] AS [r0] ON [r].[RequiredRelatedId] = [r0].[Id] INNER JOIN [NestedType] AS [n] ON [r0].[RequiredNestedId] = [n].[Id] @@ -82,7 +82,7 @@ FROM [RootEntity] AS [r] LEFT JOIN [NestedType] AS [n2] ON [r0].[OptionalNestedId] = [n2].[Id] LEFT JOIN [NestedType] AS [n3] ON [r1].[Id] = [n3].[CollectionRelatedId] LEFT JOIN ( - SELECT [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] + SELECT [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Ints] AS [Ints0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Ints] AS [Ints1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Ints] AS [Ints2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] FROM [RelatedType] AS [r2] LEFT JOIN [NestedType] AS [n4] ON [r2].[OptionalNestedId] = [n4].[Id] INNER JOIN [NestedType] AS [n5] ON [r2].[RequiredNestedId] = [n5].[Id] diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/Associations/Navigations/NavigationsPrimitiveCollectionSqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/Associations/Navigations/NavigationsPrimitiveCollectionSqlServerTest.cs new file mode 100644 index 00000000000..36240ed5703 --- /dev/null +++ b/test/EFCore.SqlServer.FunctionalTests/Query/Associations/Navigations/NavigationsPrimitiveCollectionSqlServerTest.cs @@ -0,0 +1,179 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace Microsoft.EntityFrameworkCore.Query.Associations.Navigations; + +public class NavigationsPrimitiveCollectionSqlServerTest(NavigationsSqlServerFixture fixture, ITestOutputHelper testOutputHelper) + : NavigationsPrimitiveCollectionRelationalTestBase(fixture, testOutputHelper) +{ + public override async Task Count() + { + await base.Count(); + + AssertSql( + """ +SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r1].[Id], [r1].[CollectionRootId], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [r0].[Id], [n].[Id], [n0].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Ints], [n3].[Name], [n3].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Ints], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Ints], [n0].[Name], [n0].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Ints], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r0].[CollectionRootId], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Ints], [n7].[Name], [n7].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Ints], [n1].[Name], [n1].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Ints], [n2].[Name], [n2].[String] +FROM [RootEntity] AS [r] +INNER JOIN [RelatedType] AS [r0] ON [r].[RequiredRelatedId] = [r0].[Id] +LEFT JOIN [RelatedType] AS [r1] ON [r].[OptionalRelatedId] = [r1].[Id] +LEFT JOIN [NestedType] AS [n] ON [r1].[OptionalNestedId] = [n].[Id] +LEFT JOIN [NestedType] AS [n0] ON [r1].[RequiredNestedId] = [n0].[Id] +LEFT JOIN [NestedType] AS [n1] ON [r0].[OptionalNestedId] = [n1].[Id] +INNER JOIN [NestedType] AS [n2] ON [r0].[RequiredNestedId] = [n2].[Id] +LEFT JOIN [NestedType] AS [n3] ON [r1].[Id] = [n3].[CollectionRelatedId] +LEFT JOIN ( + SELECT [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Ints] AS [Ints0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Ints] AS [Ints1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Ints] AS [Ints2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] + FROM [RelatedType] AS [r2] + LEFT JOIN [NestedType] AS [n4] ON [r2].[OptionalNestedId] = [n4].[Id] + INNER JOIN [NestedType] AS [n5] ON [r2].[RequiredNestedId] = [n5].[Id] + LEFT JOIN [NestedType] AS [n6] ON [r2].[Id] = [n6].[CollectionRelatedId] +) AS [s] ON [r].[Id] = [s].[CollectionRootId] +LEFT JOIN [NestedType] AS [n7] ON [r0].[Id] = [n7].[CollectionRelatedId] +WHERE ( + SELECT COUNT(*) + FROM OPENJSON([r0].[Ints]) AS [i]) = 3 +ORDER BY [r].[Id], [r0].[Id], [r1].[Id], [n].[Id], [n0].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [s].[Id], [s].[Id0], [s].[Id1], [s].[Id2] +"""); + } + + public override async Task Index() + { + await base.Index(); + + AssertSql( + """ +SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r1].[Id], [r1].[CollectionRootId], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [r0].[Id], [n].[Id], [n0].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Ints], [n3].[Name], [n3].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Ints], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Ints], [n0].[Name], [n0].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Ints], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r0].[CollectionRootId], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Ints], [n7].[Name], [n7].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Ints], [n1].[Name], [n1].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Ints], [n2].[Name], [n2].[String] +FROM [RootEntity] AS [r] +INNER JOIN [RelatedType] AS [r0] ON [r].[RequiredRelatedId] = [r0].[Id] +LEFT JOIN [RelatedType] AS [r1] ON [r].[OptionalRelatedId] = [r1].[Id] +LEFT JOIN [NestedType] AS [n] ON [r1].[OptionalNestedId] = [n].[Id] +LEFT JOIN [NestedType] AS [n0] ON [r1].[RequiredNestedId] = [n0].[Id] +LEFT JOIN [NestedType] AS [n1] ON [r0].[OptionalNestedId] = [n1].[Id] +INNER JOIN [NestedType] AS [n2] ON [r0].[RequiredNestedId] = [n2].[Id] +LEFT JOIN [NestedType] AS [n3] ON [r1].[Id] = [n3].[CollectionRelatedId] +LEFT JOIN ( + SELECT [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Ints] AS [Ints0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Ints] AS [Ints1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Ints] AS [Ints2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] + FROM [RelatedType] AS [r2] + LEFT JOIN [NestedType] AS [n4] ON [r2].[OptionalNestedId] = [n4].[Id] + INNER JOIN [NestedType] AS [n5] ON [r2].[RequiredNestedId] = [n5].[Id] + LEFT JOIN [NestedType] AS [n6] ON [r2].[Id] = [n6].[CollectionRelatedId] +) AS [s] ON [r].[Id] = [s].[CollectionRootId] +LEFT JOIN [NestedType] AS [n7] ON [r0].[Id] = [n7].[CollectionRelatedId] +WHERE CAST(JSON_VALUE([r0].[Ints], '$[0]') AS int) = 1 +ORDER BY [r].[Id], [r0].[Id], [r1].[Id], [n].[Id], [n0].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [s].[Id], [s].[Id0], [s].[Id1], [s].[Id2] +"""); + } + + public override async Task Contains() + { + await base.Contains(); + + AssertSql( + """ +SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r1].[Id], [r1].[CollectionRootId], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [r0].[Id], [n].[Id], [n0].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Ints], [n3].[Name], [n3].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Ints], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Ints], [n0].[Name], [n0].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Ints], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r0].[CollectionRootId], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Ints], [n7].[Name], [n7].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Ints], [n1].[Name], [n1].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Ints], [n2].[Name], [n2].[String] +FROM [RootEntity] AS [r] +INNER JOIN [RelatedType] AS [r0] ON [r].[RequiredRelatedId] = [r0].[Id] +LEFT JOIN [RelatedType] AS [r1] ON [r].[OptionalRelatedId] = [r1].[Id] +LEFT JOIN [NestedType] AS [n] ON [r1].[OptionalNestedId] = [n].[Id] +LEFT JOIN [NestedType] AS [n0] ON [r1].[RequiredNestedId] = [n0].[Id] +LEFT JOIN [NestedType] AS [n1] ON [r0].[OptionalNestedId] = [n1].[Id] +INNER JOIN [NestedType] AS [n2] ON [r0].[RequiredNestedId] = [n2].[Id] +LEFT JOIN [NestedType] AS [n3] ON [r1].[Id] = [n3].[CollectionRelatedId] +LEFT JOIN ( + SELECT [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Ints] AS [Ints0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Ints] AS [Ints1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Ints] AS [Ints2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] + FROM [RelatedType] AS [r2] + LEFT JOIN [NestedType] AS [n4] ON [r2].[OptionalNestedId] = [n4].[Id] + INNER JOIN [NestedType] AS [n5] ON [r2].[RequiredNestedId] = [n5].[Id] + LEFT JOIN [NestedType] AS [n6] ON [r2].[Id] = [n6].[CollectionRelatedId] +) AS [s] ON [r].[Id] = [s].[CollectionRootId] +LEFT JOIN [NestedType] AS [n7] ON [r0].[Id] = [n7].[CollectionRelatedId] +WHERE 3 IN ( + SELECT [i].[value] + FROM OPENJSON([r0].[Ints]) WITH ([value] int '$') AS [i] +) +ORDER BY [r].[Id], [r0].[Id], [r1].[Id], [n].[Id], [n0].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [s].[Id], [s].[Id0], [s].[Id1], [s].[Id2] +"""); + } + + public override async Task Any_predicate() + { + await base.Any_predicate(); + + AssertSql( + """ +SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r1].[Id], [r1].[CollectionRootId], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [r0].[Id], [n].[Id], [n0].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Ints], [n3].[Name], [n3].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Ints], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Ints], [n0].[Name], [n0].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Ints], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r0].[CollectionRootId], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Ints], [n7].[Name], [n7].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Ints], [n1].[Name], [n1].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Ints], [n2].[Name], [n2].[String] +FROM [RootEntity] AS [r] +INNER JOIN [RelatedType] AS [r0] ON [r].[RequiredRelatedId] = [r0].[Id] +LEFT JOIN [RelatedType] AS [r1] ON [r].[OptionalRelatedId] = [r1].[Id] +LEFT JOIN [NestedType] AS [n] ON [r1].[OptionalNestedId] = [n].[Id] +LEFT JOIN [NestedType] AS [n0] ON [r1].[RequiredNestedId] = [n0].[Id] +LEFT JOIN [NestedType] AS [n1] ON [r0].[OptionalNestedId] = [n1].[Id] +INNER JOIN [NestedType] AS [n2] ON [r0].[RequiredNestedId] = [n2].[Id] +LEFT JOIN [NestedType] AS [n3] ON [r1].[Id] = [n3].[CollectionRelatedId] +LEFT JOIN ( + SELECT [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Ints] AS [Ints0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Ints] AS [Ints1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Ints] AS [Ints2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] + FROM [RelatedType] AS [r2] + LEFT JOIN [NestedType] AS [n4] ON [r2].[OptionalNestedId] = [n4].[Id] + INNER JOIN [NestedType] AS [n5] ON [r2].[RequiredNestedId] = [n5].[Id] + LEFT JOIN [NestedType] AS [n6] ON [r2].[Id] = [n6].[CollectionRelatedId] +) AS [s] ON [r].[Id] = [s].[CollectionRootId] +LEFT JOIN [NestedType] AS [n7] ON [r0].[Id] = [n7].[CollectionRelatedId] +WHERE 2 IN ( + SELECT [i].[value] + FROM OPENJSON([r0].[Ints]) WITH ([value] int '$') AS [i] +) +ORDER BY [r].[Id], [r0].[Id], [r1].[Id], [n].[Id], [n0].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [s].[Id], [s].[Id0], [s].[Id1], [s].[Id2] +"""); + } + + public override async Task Nested_Count() + { + await base.Nested_Count(); + + AssertSql( + """ +SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r1].[Id], [r1].[CollectionRootId], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [r0].[Id], [n].[Id], [n0].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Ints], [n3].[Name], [n3].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Ints], [n0].[Name], [n0].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Ints], [n1].[Name], [n1].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Ints], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r0].[CollectionRootId], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Ints], [n7].[Name], [n7].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Ints], [n2].[Name], [n2].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Ints], [n].[Name], [n].[String] +FROM [RootEntity] AS [r] +INNER JOIN [RelatedType] AS [r0] ON [r].[RequiredRelatedId] = [r0].[Id] +INNER JOIN [NestedType] AS [n] ON [r0].[RequiredNestedId] = [n].[Id] +LEFT JOIN [RelatedType] AS [r1] ON [r].[OptionalRelatedId] = [r1].[Id] +LEFT JOIN [NestedType] AS [n0] ON [r1].[OptionalNestedId] = [n0].[Id] +LEFT JOIN [NestedType] AS [n1] ON [r1].[RequiredNestedId] = [n1].[Id] +LEFT JOIN [NestedType] AS [n2] ON [r0].[OptionalNestedId] = [n2].[Id] +LEFT JOIN [NestedType] AS [n3] ON [r1].[Id] = [n3].[CollectionRelatedId] +LEFT JOIN ( + SELECT [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Ints] AS [Ints0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Ints] AS [Ints1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Ints] AS [Ints2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] + FROM [RelatedType] AS [r2] + LEFT JOIN [NestedType] AS [n4] ON [r2].[OptionalNestedId] = [n4].[Id] + INNER JOIN [NestedType] AS [n5] ON [r2].[RequiredNestedId] = [n5].[Id] + LEFT JOIN [NestedType] AS [n6] ON [r2].[Id] = [n6].[CollectionRelatedId] +) AS [s] ON [r].[Id] = [s].[CollectionRootId] +LEFT JOIN [NestedType] AS [n7] ON [r0].[Id] = [n7].[CollectionRelatedId] +WHERE ( + SELECT COUNT(*) + FROM OPENJSON([n].[Ints]) AS [i]) = 3 +ORDER BY [r].[Id], [r0].[Id], [n].[Id], [r1].[Id], [n0].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [s].[Id], [s].[Id0], [s].[Id1], [s].[Id2] +"""); + } + + public override async Task Select_Sum() + { + await base.Select_Sum(); + + AssertSql( + """ +SELECT ( + SELECT COALESCE(SUM([i0].[value]), 0) + FROM OPENJSON([r0].[Ints]) WITH ([value] int '$') AS [i0]) +FROM [RootEntity] AS [r] +INNER JOIN [RelatedType] AS [r0] ON [r].[RequiredRelatedId] = [r0].[Id] +WHERE ( + SELECT COALESCE(SUM([i].[value]), 0) + FROM OPENJSON([r0].[Ints]) WITH ([value] int '$') AS [i]) >= 6 +"""); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); +} diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/Associations/Navigations/NavigationsProjectionSqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/Associations/Navigations/NavigationsProjectionSqlServerTest.cs index e310053a51b..c573bdfe595 100644 --- a/test/EFCore.SqlServer.FunctionalTests/Query/Associations/Navigations/NavigationsProjectionSqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/Query/Associations/Navigations/NavigationsProjectionSqlServerTest.cs @@ -12,7 +12,7 @@ public override async Task Select_root(QueryTrackingBehavior queryTrackingBehavi AssertSql( """ -SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r0].[Id], [r0].[CollectionRootId], [r0].[Int], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n].[Id], [n0].[Id], [r1].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Name], [n3].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Name], [n0].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Name2], [s].[String2], [r1].[CollectionRootId], [r1].[Int], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Name], [n7].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Name], [n1].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Name], [n2].[String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r0].[Id], [r0].[CollectionRootId], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n].[Id], [n0].[Id], [r1].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Ints], [n3].[Name], [n3].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Ints], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Ints], [n0].[Name], [n0].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Ints], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r1].[CollectionRootId], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Ints], [n7].[Name], [n7].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Ints], [n1].[Name], [n1].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Ints], [n2].[Name], [n2].[String] FROM [RootEntity] AS [r] LEFT JOIN [RelatedType] AS [r0] ON [r].[OptionalRelatedId] = [r0].[Id] LEFT JOIN [NestedType] AS [n] ON [r0].[OptionalNestedId] = [n].[Id] @@ -22,7 +22,7 @@ FROM [RootEntity] AS [r] INNER JOIN [NestedType] AS [n2] ON [r1].[RequiredNestedId] = [n2].[Id] LEFT JOIN [NestedType] AS [n3] ON [r0].[Id] = [n3].[CollectionRelatedId] LEFT JOIN ( - SELECT [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] + SELECT [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Ints] AS [Ints0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Ints] AS [Ints1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Ints] AS [Ints2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] FROM [RelatedType] AS [r2] LEFT JOIN [NestedType] AS [n4] ON [r2].[OptionalNestedId] = [n4].[Id] INNER JOIN [NestedType] AS [n5] ON [r2].[RequiredNestedId] = [n5].[Id] @@ -93,7 +93,7 @@ public override async Task Select_related(QueryTrackingBehavior queryTrackingBeh AssertSql( """ -SELECT [r0].[Id], [r0].[CollectionRootId], [r0].[Int], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [r].[Id], [n].[Id], [n0].[Id], [n1].[Id], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Name], [n1].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Name], [n0].[String] +SELECT [r0].[Id], [r0].[CollectionRootId], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [r].[Id], [n].[Id], [n0].[Id], [n1].[Id], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Ints], [n1].[Name], [n1].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Ints], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Ints], [n0].[Name], [n0].[String] FROM [RootEntity] AS [r] INNER JOIN [RelatedType] AS [r0] ON [r].[RequiredRelatedId] = [r0].[Id] LEFT JOIN [NestedType] AS [n] ON [r0].[OptionalNestedId] = [n].[Id] @@ -109,7 +109,7 @@ public override async Task Select_optional_related(QueryTrackingBehavior queryTr AssertSql( """ -SELECT [r0].[Id], [r0].[CollectionRootId], [r0].[Int], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [r].[Id], [n].[Id], [n0].[Id], [n1].[Id], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Name], [n1].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Name], [n0].[String] +SELECT [r0].[Id], [r0].[CollectionRootId], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [r].[Id], [n].[Id], [n0].[Id], [n1].[Id], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Ints], [n1].[Name], [n1].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Ints], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Ints], [n0].[Name], [n0].[String] FROM [RootEntity] AS [r] LEFT JOIN [RelatedType] AS [r0] ON [r].[OptionalRelatedId] = [r0].[Id] LEFT JOIN [NestedType] AS [n] ON [r0].[OptionalNestedId] = [n].[Id] @@ -125,7 +125,7 @@ public override async Task Select_required_nested_on_required_related(QueryTrack AssertSql( """ -SELECT [n].[Id], [n].[CollectionRelatedId], [n].[Int], [n].[Name], [n].[String] +SELECT [n].[Id], [n].[CollectionRelatedId], [n].[Int], [n].[Ints], [n].[Name], [n].[String] FROM [RootEntity] AS [r] INNER JOIN [RelatedType] AS [r0] ON [r].[RequiredRelatedId] = [r0].[Id] INNER JOIN [NestedType] AS [n] ON [r0].[RequiredNestedId] = [n].[Id] @@ -138,7 +138,7 @@ public override async Task Select_optional_nested_on_required_related(QueryTrack AssertSql( """ -SELECT [n].[Id], [n].[CollectionRelatedId], [n].[Int], [n].[Name], [n].[String] +SELECT [n].[Id], [n].[CollectionRelatedId], [n].[Int], [n].[Ints], [n].[Name], [n].[String] FROM [RootEntity] AS [r] INNER JOIN [RelatedType] AS [r0] ON [r].[RequiredRelatedId] = [r0].[Id] LEFT JOIN [NestedType] AS [n] ON [r0].[OptionalNestedId] = [n].[Id] @@ -151,7 +151,7 @@ public override async Task Select_required_nested_on_optional_related(QueryTrack AssertSql( """ -SELECT [n].[Id], [n].[CollectionRelatedId], [n].[Int], [n].[Name], [n].[String] +SELECT [n].[Id], [n].[CollectionRelatedId], [n].[Int], [n].[Ints], [n].[Name], [n].[String] FROM [RootEntity] AS [r] LEFT JOIN [RelatedType] AS [r0] ON [r].[OptionalRelatedId] = [r0].[Id] LEFT JOIN [NestedType] AS [n] ON [r0].[RequiredNestedId] = [n].[Id] @@ -164,7 +164,7 @@ public override async Task Select_optional_nested_on_optional_related(QueryTrack AssertSql( """ -SELECT [n].[Id], [n].[CollectionRelatedId], [n].[Int], [n].[Name], [n].[String] +SELECT [n].[Id], [n].[CollectionRelatedId], [n].[Int], [n].[Ints], [n].[Name], [n].[String] FROM [RootEntity] AS [r] LEFT JOIN [RelatedType] AS [r0] ON [r].[OptionalRelatedId] = [r0].[Id] LEFT JOIN [NestedType] AS [n] ON [r0].[OptionalNestedId] = [n].[Id] @@ -177,7 +177,7 @@ public override async Task Select_required_related_via_optional_navigation(Query AssertSql( """ -SELECT [r1].[Id], [r1].[CollectionRootId], [r1].[Int], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [r].[Id], [r0].[Id], [n].[Id], [n0].[Id], [n1].[Id], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Name], [n1].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Name], [n0].[String] +SELECT [r1].[Id], [r1].[CollectionRootId], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [r].[Id], [r0].[Id], [n].[Id], [n0].[Id], [n1].[Id], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Ints], [n1].[Name], [n1].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Ints], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Ints], [n0].[Name], [n0].[String] FROM [RootReferencingEntity] AS [r] LEFT JOIN [RootEntity] AS [r0] ON [r].[RootEntityId] = [r0].[Id] LEFT JOIN [RelatedType] AS [r1] ON [r0].[RequiredRelatedId] = [r1].[Id] @@ -198,10 +198,10 @@ public override async Task Select_related_collection(QueryTrackingBehavior query AssertSql( """ -SELECT [r].[Id], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Name2], [s].[String2] +SELECT [r].[Id], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Ints], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2] FROM [RootEntity] AS [r] LEFT JOIN ( - SELECT [r0].[Id], [r0].[CollectionRootId], [r0].[Int], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n].[Id] AS [Id0], [n0].[Id] AS [Id1], [n1].[Id] AS [Id2], [n1].[CollectionRelatedId], [n1].[Int] AS [Int0], [n1].[Name] AS [Name0], [n1].[String] AS [String0], [n].[CollectionRelatedId] AS [CollectionRelatedId0], [n].[Int] AS [Int1], [n].[Name] AS [Name1], [n].[String] AS [String1], [n0].[CollectionRelatedId] AS [CollectionRelatedId1], [n0].[Int] AS [Int2], [n0].[Name] AS [Name2], [n0].[String] AS [String2] + SELECT [r0].[Id], [r0].[CollectionRootId], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n].[Id] AS [Id0], [n0].[Id] AS [Id1], [n1].[Id] AS [Id2], [n1].[CollectionRelatedId], [n1].[Int] AS [Int0], [n1].[Ints] AS [Ints0], [n1].[Name] AS [Name0], [n1].[String] AS [String0], [n].[CollectionRelatedId] AS [CollectionRelatedId0], [n].[Int] AS [Int1], [n].[Ints] AS [Ints1], [n].[Name] AS [Name1], [n].[String] AS [String1], [n0].[CollectionRelatedId] AS [CollectionRelatedId1], [n0].[Int] AS [Int2], [n0].[Ints] AS [Ints2], [n0].[Name] AS [Name2], [n0].[String] AS [String2] FROM [RelatedType] AS [r0] LEFT JOIN [NestedType] AS [n] ON [r0].[OptionalNestedId] = [n].[Id] INNER JOIN [NestedType] AS [n0] ON [r0].[RequiredNestedId] = [n0].[Id] @@ -217,7 +217,7 @@ public override async Task Select_nested_collection_on_required_related(QueryTra AssertSql( """ -SELECT [r].[Id], [r0].[Id], [n].[Id], [n].[CollectionRelatedId], [n].[Int], [n].[Name], [n].[String] +SELECT [r].[Id], [r0].[Id], [n].[Id], [n].[CollectionRelatedId], [n].[Int], [n].[Ints], [n].[Name], [n].[String] FROM [RootEntity] AS [r] INNER JOIN [RelatedType] AS [r0] ON [r].[RequiredRelatedId] = [r0].[Id] LEFT JOIN [NestedType] AS [n] ON [r0].[Id] = [n].[CollectionRelatedId] @@ -231,7 +231,7 @@ public override async Task Select_nested_collection_on_optional_related(QueryTra AssertSql( """ -SELECT [r].[Id], [r0].[Id], [n].[Id], [n].[CollectionRelatedId], [n].[Int], [n].[Name], [n].[String] +SELECT [r].[Id], [r0].[Id], [n].[Id], [n].[CollectionRelatedId], [n].[Int], [n].[Ints], [n].[Name], [n].[String] FROM [RootEntity] AS [r] LEFT JOIN [RelatedType] AS [r0] ON [r].[OptionalRelatedId] = [r0].[Id] LEFT JOIN [NestedType] AS [n] ON [r0].[Id] = [n].[CollectionRelatedId] @@ -245,7 +245,7 @@ public override async Task SelectMany_related_collection(QueryTrackingBehavior q AssertSql( """ -SELECT [r0].[Id], [r0].[CollectionRootId], [r0].[Int], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [r].[Id], [n].[Id], [n0].[Id], [n1].[Id], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Name], [n1].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Name], [n0].[String] +SELECT [r0].[Id], [r0].[CollectionRootId], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [r].[Id], [n].[Id], [n0].[Id], [n1].[Id], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Ints], [n1].[Name], [n1].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Ints], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Ints], [n0].[Name], [n0].[String] FROM [RootEntity] AS [r] INNER JOIN [RelatedType] AS [r0] ON [r].[Id] = [r0].[CollectionRootId] LEFT JOIN [NestedType] AS [n] ON [r0].[OptionalNestedId] = [n].[Id] @@ -261,7 +261,7 @@ public override async Task SelectMany_nested_collection_on_required_related(Quer AssertSql( """ -SELECT [n].[Id], [n].[CollectionRelatedId], [n].[Int], [n].[Name], [n].[String] +SELECT [n].[Id], [n].[CollectionRelatedId], [n].[Int], [n].[Ints], [n].[Name], [n].[String] FROM [RootEntity] AS [r] INNER JOIN [RelatedType] AS [r0] ON [r].[RequiredRelatedId] = [r0].[Id] INNER JOIN [NestedType] AS [n] ON [r0].[Id] = [n].[CollectionRelatedId] @@ -274,7 +274,7 @@ public override async Task SelectMany_nested_collection_on_optional_related(Quer AssertSql( """ -SELECT [n].[Id], [n].[CollectionRelatedId], [n].[Int], [n].[Name], [n].[String] +SELECT [n].[Id], [n].[CollectionRelatedId], [n].[Int], [n].[Ints], [n].[Name], [n].[String] FROM [RootEntity] AS [r] LEFT JOIN [RelatedType] AS [r0] ON [r].[OptionalRelatedId] = [r0].[Id] INNER JOIN [NestedType] AS [n] ON [r0].[Id] = [n].[CollectionRelatedId] @@ -291,7 +291,7 @@ public override async Task Select_root_duplicated(QueryTrackingBehavior queryTra AssertSql( """ -SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r0].[Id], [r0].[CollectionRootId], [r0].[Int], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n].[Id], [n0].[Id], [r1].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Name], [n3].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Name], [n0].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Name2], [s].[String2], [r1].[CollectionRootId], [r1].[Int], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Name], [n7].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Name], [n1].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Name], [n2].[String], [n8].[Id], [n8].[CollectionRelatedId], [n8].[Int], [n8].[Name], [n8].[String], [s0].[Id], [s0].[CollectionRootId], [s0].[Int], [s0].[Name], [s0].[OptionalNestedId], [s0].[RequiredNestedId], [s0].[String], [s0].[Id0], [s0].[Id1], [s0].[Id2], [s0].[CollectionRelatedId], [s0].[Int0], [s0].[Name0], [s0].[String0], [s0].[CollectionRelatedId0], [s0].[Int1], [s0].[Name1], [s0].[String1], [s0].[CollectionRelatedId1], [s0].[Int2], [s0].[Name2], [s0].[String2], [n12].[Id], [n12].[CollectionRelatedId], [n12].[Int], [n12].[Name], [n12].[String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r0].[Id], [r0].[CollectionRootId], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n].[Id], [n0].[Id], [r1].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Ints], [n3].[Name], [n3].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Ints], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Ints], [n0].[Name], [n0].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Ints], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r1].[CollectionRootId], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Ints], [n7].[Name], [n7].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Ints], [n1].[Name], [n1].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Ints], [n2].[Name], [n2].[String], [n8].[Id], [n8].[CollectionRelatedId], [n8].[Int], [n8].[Ints], [n8].[Name], [n8].[String], [s0].[Id], [s0].[CollectionRootId], [s0].[Int], [s0].[Ints], [s0].[Name], [s0].[OptionalNestedId], [s0].[RequiredNestedId], [s0].[String], [s0].[Id0], [s0].[Id1], [s0].[Id2], [s0].[CollectionRelatedId], [s0].[Int0], [s0].[Ints0], [s0].[Name0], [s0].[String0], [s0].[CollectionRelatedId0], [s0].[Int1], [s0].[Ints1], [s0].[Name1], [s0].[String1], [s0].[CollectionRelatedId1], [s0].[Int2], [s0].[Ints2], [s0].[Name2], [s0].[String2], [n12].[Id], [n12].[CollectionRelatedId], [n12].[Int], [n12].[Ints], [n12].[Name], [n12].[String] FROM [RootEntity] AS [r] LEFT JOIN [RelatedType] AS [r0] ON [r].[OptionalRelatedId] = [r0].[Id] LEFT JOIN [NestedType] AS [n] ON [r0].[OptionalNestedId] = [n].[Id] @@ -301,7 +301,7 @@ FROM [RootEntity] AS [r] INNER JOIN [NestedType] AS [n2] ON [r1].[RequiredNestedId] = [n2].[Id] LEFT JOIN [NestedType] AS [n3] ON [r0].[Id] = [n3].[CollectionRelatedId] LEFT JOIN ( - SELECT [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] + SELECT [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Ints] AS [Ints0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Ints] AS [Ints1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Ints] AS [Ints2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] FROM [RelatedType] AS [r2] LEFT JOIN [NestedType] AS [n4] ON [r2].[OptionalNestedId] = [n4].[Id] INNER JOIN [NestedType] AS [n5] ON [r2].[RequiredNestedId] = [n5].[Id] @@ -310,7 +310,7 @@ FROM [RelatedType] AS [r2] LEFT JOIN [NestedType] AS [n7] ON [r1].[Id] = [n7].[CollectionRelatedId] LEFT JOIN [NestedType] AS [n8] ON [r0].[Id] = [n8].[CollectionRelatedId] LEFT JOIN ( - SELECT [r3].[Id], [r3].[CollectionRootId], [r3].[Int], [r3].[Name], [r3].[OptionalNestedId], [r3].[RequiredNestedId], [r3].[String], [n9].[Id] AS [Id0], [n10].[Id] AS [Id1], [n11].[Id] AS [Id2], [n11].[CollectionRelatedId], [n11].[Int] AS [Int0], [n11].[Name] AS [Name0], [n11].[String] AS [String0], [n9].[CollectionRelatedId] AS [CollectionRelatedId0], [n9].[Int] AS [Int1], [n9].[Name] AS [Name1], [n9].[String] AS [String1], [n10].[CollectionRelatedId] AS [CollectionRelatedId1], [n10].[Int] AS [Int2], [n10].[Name] AS [Name2], [n10].[String] AS [String2] + SELECT [r3].[Id], [r3].[CollectionRootId], [r3].[Int], [r3].[Ints], [r3].[Name], [r3].[OptionalNestedId], [r3].[RequiredNestedId], [r3].[String], [n9].[Id] AS [Id0], [n10].[Id] AS [Id1], [n11].[Id] AS [Id2], [n11].[CollectionRelatedId], [n11].[Int] AS [Int0], [n11].[Ints] AS [Ints0], [n11].[Name] AS [Name0], [n11].[String] AS [String0], [n9].[CollectionRelatedId] AS [CollectionRelatedId0], [n9].[Int] AS [Int1], [n9].[Ints] AS [Ints1], [n9].[Name] AS [Name1], [n9].[String] AS [String1], [n10].[CollectionRelatedId] AS [CollectionRelatedId1], [n10].[Int] AS [Int2], [n10].[Ints] AS [Ints2], [n10].[Name] AS [Name2], [n10].[String] AS [String2] FROM [RelatedType] AS [r3] LEFT JOIN [NestedType] AS [n9] ON [r3].[OptionalNestedId] = [n9].[Id] INNER JOIN [NestedType] AS [n10] ON [r3].[RequiredNestedId] = [n10].[Id] @@ -331,10 +331,10 @@ public override async Task Select_subquery_required_related_FirstOrDefault(Query AssertSql( """ -SELECT [s].[Id], [s].[CollectionRelatedId], [s].[Int], [s].[Name], [s].[String] +SELECT [s].[Id], [s].[CollectionRelatedId], [s].[Int], [s].[Ints], [s].[Name], [s].[String] FROM [RootEntity] AS [r] OUTER APPLY ( - SELECT TOP(1) [n].[Id], [n].[CollectionRelatedId], [n].[Int], [n].[Name], [n].[String] + SELECT TOP(1) [n].[Id], [n].[CollectionRelatedId], [n].[Int], [n].[Ints], [n].[Name], [n].[String] FROM [RootEntity] AS [r0] INNER JOIN [RelatedType] AS [r1] ON [r0].[RequiredRelatedId] = [r1].[Id] INNER JOIN [NestedType] AS [n] ON [r1].[RequiredNestedId] = [n].[Id] @@ -349,10 +349,10 @@ public override async Task Select_subquery_optional_related_FirstOrDefault(Query AssertSql( """ -SELECT [s].[Id], [s].[CollectionRelatedId], [s].[Int], [s].[Name], [s].[String] +SELECT [s].[Id], [s].[CollectionRelatedId], [s].[Int], [s].[Ints], [s].[Name], [s].[String] FROM [RootEntity] AS [r] OUTER APPLY ( - SELECT TOP(1) [n].[Id], [n].[CollectionRelatedId], [n].[Int], [n].[Name], [n].[String] + SELECT TOP(1) [n].[Id], [n].[CollectionRelatedId], [n].[Int], [n].[Ints], [n].[Name], [n].[String] FROM [RootEntity] AS [r0] LEFT JOIN [RelatedType] AS [r1] ON [r0].[OptionalRelatedId] = [r1].[Id] LEFT JOIN [NestedType] AS [n] ON [r1].[RequiredNestedId] = [n].[Id] diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/Associations/Navigations/NavigationsSetOperationsSqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/Associations/Navigations/NavigationsSetOperationsSqlServerTest.cs index ef7a2c7fe66..123a38247fe 100644 --- a/test/EFCore.SqlServer.FunctionalTests/Query/Associations/Navigations/NavigationsSetOperationsSqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/Query/Associations/Navigations/NavigationsSetOperationsSqlServerTest.cs @@ -14,7 +14,7 @@ public override async Task On_related() AssertSql( """ -SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n].[Id], [n0].[Id], [r3].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Name], [n3].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Name], [n0].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Name2], [s].[String2], [r3].[CollectionRootId], [r3].[Int], [r3].[Name], [r3].[OptionalNestedId], [r3].[RequiredNestedId], [r3].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Name], [n7].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Name], [n1].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Name], [n2].[String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n].[Id], [n0].[Id], [r3].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Ints], [n3].[Name], [n3].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Ints], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Ints], [n0].[Name], [n0].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Ints], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r3].[CollectionRootId], [r3].[Int], [r3].[Ints], [r3].[Name], [r3].[OptionalNestedId], [r3].[RequiredNestedId], [r3].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Ints], [n7].[Name], [n7].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Ints], [n1].[Name], [n1].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Ints], [n2].[Name], [n2].[String] FROM [RootEntity] AS [r] LEFT JOIN [RelatedType] AS [r2] ON [r].[OptionalRelatedId] = [r2].[Id] LEFT JOIN [NestedType] AS [n] ON [r2].[OptionalNestedId] = [n].[Id] @@ -24,7 +24,7 @@ FROM [RootEntity] AS [r] INNER JOIN [NestedType] AS [n2] ON [r3].[RequiredNestedId] = [n2].[Id] LEFT JOIN [NestedType] AS [n3] ON [r2].[Id] = [n3].[CollectionRelatedId] LEFT JOIN ( - SELECT [r4].[Id], [r4].[CollectionRootId], [r4].[Int], [r4].[Name], [r4].[OptionalNestedId], [r4].[RequiredNestedId], [r4].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] + SELECT [r4].[Id], [r4].[CollectionRootId], [r4].[Int], [r4].[Ints], [r4].[Name], [r4].[OptionalNestedId], [r4].[RequiredNestedId], [r4].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Ints] AS [Ints0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Ints] AS [Ints1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Ints] AS [Ints2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] FROM [RelatedType] AS [r4] LEFT JOIN [NestedType] AS [n4] ON [r4].[OptionalNestedId] = [n4].[Id] INNER JOIN [NestedType] AS [n5] ON [r4].[RequiredNestedId] = [n5].[Id] @@ -85,7 +85,7 @@ public override async Task On_nested() AssertSql( """ -SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r1].[Id], [r1].[CollectionRootId], [r1].[Int], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [r0].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n4].[Id], [n5].[Id], [n5].[CollectionRelatedId], [n5].[Int], [n5].[Name], [n5].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Name], [n1].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Name], [n2].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Name2], [s].[String2], [r0].[CollectionRootId], [r0].[Int], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n9].[Id], [n9].[CollectionRelatedId], [n9].[Int], [n9].[Name], [n9].[String], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Name], [n3].[String], [n4].[CollectionRelatedId], [n4].[Int], [n4].[Name], [n4].[String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r1].[Id], [r1].[CollectionRootId], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [r0].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n4].[Id], [n5].[Id], [n5].[CollectionRelatedId], [n5].[Int], [n5].[Ints], [n5].[Name], [n5].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Ints], [n1].[Name], [n1].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Ints], [n2].[Name], [n2].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Ints], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r0].[CollectionRootId], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n9].[Id], [n9].[CollectionRelatedId], [n9].[Int], [n9].[Ints], [n9].[Name], [n9].[String], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Ints], [n3].[Name], [n3].[String], [n4].[CollectionRelatedId], [n4].[Int], [n4].[Ints], [n4].[Name], [n4].[String] FROM [RootEntity] AS [r] INNER JOIN [RelatedType] AS [r0] ON [r].[RequiredRelatedId] = [r0].[Id] LEFT JOIN [RelatedType] AS [r1] ON [r].[OptionalRelatedId] = [r1].[Id] @@ -95,7 +95,7 @@ FROM [RootEntity] AS [r] INNER JOIN [NestedType] AS [n4] ON [r0].[RequiredNestedId] = [n4].[Id] LEFT JOIN [NestedType] AS [n5] ON [r1].[Id] = [n5].[CollectionRelatedId] LEFT JOIN ( - SELECT [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n6].[Id] AS [Id0], [n7].[Id] AS [Id1], [n8].[Id] AS [Id2], [n8].[CollectionRelatedId], [n8].[Int] AS [Int0], [n8].[Name] AS [Name0], [n8].[String] AS [String0], [n6].[CollectionRelatedId] AS [CollectionRelatedId0], [n6].[Int] AS [Int1], [n6].[Name] AS [Name1], [n6].[String] AS [String1], [n7].[CollectionRelatedId] AS [CollectionRelatedId1], [n7].[Int] AS [Int2], [n7].[Name] AS [Name2], [n7].[String] AS [String2] + SELECT [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n6].[Id] AS [Id0], [n7].[Id] AS [Id1], [n8].[Id] AS [Id2], [n8].[CollectionRelatedId], [n8].[Int] AS [Int0], [n8].[Ints] AS [Ints0], [n8].[Name] AS [Name0], [n8].[String] AS [String0], [n6].[CollectionRelatedId] AS [CollectionRelatedId0], [n6].[Int] AS [Int1], [n6].[Ints] AS [Ints1], [n6].[Name] AS [Name1], [n6].[String] AS [String1], [n7].[CollectionRelatedId] AS [CollectionRelatedId1], [n7].[Int] AS [Int2], [n7].[Ints] AS [Ints2], [n7].[Name] AS [Name2], [n7].[String] AS [String2] FROM [RelatedType] AS [r2] LEFT JOIN [NestedType] AS [n6] ON [r2].[OptionalNestedId] = [n6].[Id] INNER JOIN [NestedType] AS [n7] ON [r2].[RequiredNestedId] = [n7].[Id] @@ -123,7 +123,7 @@ public override async Task Over_different_collection_properties() AssertSql( """ -SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r1].[Id], [r1].[CollectionRootId], [r1].[Int], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [r0].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n4].[Id], [n5].[Id], [n5].[CollectionRelatedId], [n5].[Int], [n5].[Name], [n5].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Name], [n1].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Name], [n2].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Name2], [s].[String2], [r0].[CollectionRootId], [r0].[Int], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n9].[Id], [n9].[CollectionRelatedId], [n9].[Int], [n9].[Name], [n9].[String], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Name], [n3].[String], [n4].[CollectionRelatedId], [n4].[Int], [n4].[Name], [n4].[String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r1].[Id], [r1].[CollectionRootId], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [r0].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n4].[Id], [n5].[Id], [n5].[CollectionRelatedId], [n5].[Int], [n5].[Ints], [n5].[Name], [n5].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Ints], [n1].[Name], [n1].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Ints], [n2].[Name], [n2].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Ints], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r0].[CollectionRootId], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n9].[Id], [n9].[CollectionRelatedId], [n9].[Int], [n9].[Ints], [n9].[Name], [n9].[String], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Ints], [n3].[Name], [n3].[String], [n4].[CollectionRelatedId], [n4].[Int], [n4].[Ints], [n4].[Name], [n4].[String] FROM [RootEntity] AS [r] INNER JOIN [RelatedType] AS [r0] ON [r].[RequiredRelatedId] = [r0].[Id] LEFT JOIN [RelatedType] AS [r1] ON [r].[OptionalRelatedId] = [r1].[Id] @@ -133,7 +133,7 @@ FROM [RootEntity] AS [r] INNER JOIN [NestedType] AS [n4] ON [r0].[RequiredNestedId] = [n4].[Id] LEFT JOIN [NestedType] AS [n5] ON [r1].[Id] = [n5].[CollectionRelatedId] LEFT JOIN ( - SELECT [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n6].[Id] AS [Id0], [n7].[Id] AS [Id1], [n8].[Id] AS [Id2], [n8].[CollectionRelatedId], [n8].[Int] AS [Int0], [n8].[Name] AS [Name0], [n8].[String] AS [String0], [n6].[CollectionRelatedId] AS [CollectionRelatedId0], [n6].[Int] AS [Int1], [n6].[Name] AS [Name1], [n6].[String] AS [String1], [n7].[CollectionRelatedId] AS [CollectionRelatedId1], [n7].[Int] AS [Int2], [n7].[Name] AS [Name2], [n7].[String] AS [String2] + SELECT [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n6].[Id] AS [Id0], [n7].[Id] AS [Id1], [n8].[Id] AS [Id2], [n8].[CollectionRelatedId], [n8].[Int] AS [Int0], [n8].[Ints] AS [Ints0], [n8].[Name] AS [Name0], [n8].[String] AS [String0], [n6].[CollectionRelatedId] AS [CollectionRelatedId0], [n6].[Int] AS [Int1], [n6].[Ints] AS [Ints1], [n6].[Name] AS [Name1], [n6].[String] AS [String1], [n7].[CollectionRelatedId] AS [CollectionRelatedId1], [n7].[Int] AS [Int2], [n7].[Ints] AS [Ints2], [n7].[Name] AS [Name2], [n7].[String] AS [String2] FROM [RelatedType] AS [r2] LEFT JOIN [NestedType] AS [n6] ON [r2].[OptionalNestedId] = [n6].[Id] INNER JOIN [NestedType] AS [n7] ON [r2].[RequiredNestedId] = [n7].[Id] diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/Associations/Navigations/NavigationsStructuralEqualitySqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/Associations/Navigations/NavigationsStructuralEqualitySqlServerTest.cs index 035c548afc2..6c7318525f7 100644 --- a/test/EFCore.SqlServer.FunctionalTests/Query/Associations/Navigations/NavigationsStructuralEqualitySqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/Query/Associations/Navigations/NavigationsStructuralEqualitySqlServerTest.cs @@ -14,7 +14,7 @@ public override async Task Two_related() AssertSql( """ -SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r1].[Id], [r1].[CollectionRootId], [r1].[Int], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [r0].[Id], [n].[Id], [n0].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Name], [n3].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Name], [n0].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Name2], [s].[String2], [r0].[CollectionRootId], [r0].[Int], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Name], [n7].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Name], [n1].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Name], [n2].[String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r1].[Id], [r1].[CollectionRootId], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [r0].[Id], [n].[Id], [n0].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Ints], [n3].[Name], [n3].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Ints], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Ints], [n0].[Name], [n0].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Ints], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r0].[CollectionRootId], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Ints], [n7].[Name], [n7].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Ints], [n1].[Name], [n1].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Ints], [n2].[Name], [n2].[String] FROM [RootEntity] AS [r] INNER JOIN [RelatedType] AS [r0] ON [r].[RequiredRelatedId] = [r0].[Id] LEFT JOIN [RelatedType] AS [r1] ON [r].[OptionalRelatedId] = [r1].[Id] @@ -24,7 +24,7 @@ FROM [RootEntity] AS [r] INNER JOIN [NestedType] AS [n2] ON [r0].[RequiredNestedId] = [n2].[Id] LEFT JOIN [NestedType] AS [n3] ON [r1].[Id] = [n3].[CollectionRelatedId] LEFT JOIN ( - SELECT [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] + SELECT [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Ints] AS [Ints0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Ints] AS [Ints1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Ints] AS [Ints2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] FROM [RelatedType] AS [r2] LEFT JOIN [NestedType] AS [n4] ON [r2].[OptionalNestedId] = [n4].[Id] INNER JOIN [NestedType] AS [n5] ON [r2].[RequiredNestedId] = [n5].[Id] @@ -42,7 +42,7 @@ public override async Task Two_nested() AssertSql( """ -SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r1].[Id], [r1].[CollectionRootId], [r1].[Int], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [r0].[Id], [n].[Id], [n0].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Name], [n3].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Name], [n1].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Name], [n0].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Name2], [s].[String2], [r0].[CollectionRootId], [r0].[Int], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Name], [n7].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Name], [n2].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Name], [n].[String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r1].[Id], [r1].[CollectionRootId], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [r0].[Id], [n].[Id], [n0].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Ints], [n3].[Name], [n3].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Ints], [n1].[Name], [n1].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Ints], [n0].[Name], [n0].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Ints], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r0].[CollectionRootId], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Ints], [n7].[Name], [n7].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Ints], [n2].[Name], [n2].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Ints], [n].[Name], [n].[String] FROM [RootEntity] AS [r] INNER JOIN [RelatedType] AS [r0] ON [r].[RequiredRelatedId] = [r0].[Id] INNER JOIN [NestedType] AS [n] ON [r0].[RequiredNestedId] = [n].[Id] @@ -52,7 +52,7 @@ FROM [RootEntity] AS [r] LEFT JOIN [NestedType] AS [n2] ON [r0].[OptionalNestedId] = [n2].[Id] LEFT JOIN [NestedType] AS [n3] ON [r1].[Id] = [n3].[CollectionRelatedId] LEFT JOIN ( - SELECT [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] + SELECT [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Ints] AS [Ints0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Ints] AS [Ints1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Ints] AS [Ints2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] FROM [RelatedType] AS [r2] LEFT JOIN [NestedType] AS [n4] ON [r2].[OptionalNestedId] = [n4].[Id] INNER JOIN [NestedType] AS [n5] ON [r2].[RequiredNestedId] = [n5].[Id] @@ -70,7 +70,7 @@ public override async Task Not_equals() AssertSql( """ -SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r1].[Id], [r1].[CollectionRootId], [r1].[Int], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [r0].[Id], [n].[Id], [n0].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Name], [n3].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Name], [n0].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Name2], [s].[String2], [r0].[CollectionRootId], [r0].[Int], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Name], [n7].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Name], [n1].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Name], [n2].[String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r1].[Id], [r1].[CollectionRootId], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [r0].[Id], [n].[Id], [n0].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Ints], [n3].[Name], [n3].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Ints], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Ints], [n0].[Name], [n0].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Ints], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r0].[CollectionRootId], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Ints], [n7].[Name], [n7].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Ints], [n1].[Name], [n1].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Ints], [n2].[Name], [n2].[String] FROM [RootEntity] AS [r] INNER JOIN [RelatedType] AS [r0] ON [r].[RequiredRelatedId] = [r0].[Id] LEFT JOIN [RelatedType] AS [r1] ON [r].[OptionalRelatedId] = [r1].[Id] @@ -80,7 +80,7 @@ FROM [RootEntity] AS [r] INNER JOIN [NestedType] AS [n2] ON [r0].[RequiredNestedId] = [n2].[Id] LEFT JOIN [NestedType] AS [n3] ON [r1].[Id] = [n3].[CollectionRelatedId] LEFT JOIN ( - SELECT [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] + SELECT [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Ints] AS [Ints0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Ints] AS [Ints1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Ints] AS [Ints2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] FROM [RelatedType] AS [r2] LEFT JOIN [NestedType] AS [n4] ON [r2].[OptionalNestedId] = [n4].[Id] INNER JOIN [NestedType] AS [n5] ON [r2].[RequiredNestedId] = [n5].[Id] @@ -98,7 +98,7 @@ public override async Task Related_with_inline_null() AssertSql( """ -SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r0].[Id], [r0].[CollectionRootId], [r0].[Int], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n].[Id], [n0].[Id], [r1].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Name], [n3].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Name], [n0].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Name2], [s].[String2], [r1].[CollectionRootId], [r1].[Int], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Name], [n7].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Name], [n1].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Name], [n2].[String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r0].[Id], [r0].[CollectionRootId], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n].[Id], [n0].[Id], [r1].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Ints], [n3].[Name], [n3].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Ints], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Ints], [n0].[Name], [n0].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Ints], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r1].[CollectionRootId], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Ints], [n7].[Name], [n7].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Ints], [n1].[Name], [n1].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Ints], [n2].[Name], [n2].[String] FROM [RootEntity] AS [r] LEFT JOIN [RelatedType] AS [r0] ON [r].[OptionalRelatedId] = [r0].[Id] LEFT JOIN [NestedType] AS [n] ON [r0].[OptionalNestedId] = [n].[Id] @@ -108,7 +108,7 @@ FROM [RootEntity] AS [r] INNER JOIN [NestedType] AS [n2] ON [r1].[RequiredNestedId] = [n2].[Id] LEFT JOIN [NestedType] AS [n3] ON [r0].[Id] = [n3].[CollectionRelatedId] LEFT JOIN ( - SELECT [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] + SELECT [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Ints] AS [Ints0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Ints] AS [Ints1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Ints] AS [Ints2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] FROM [RelatedType] AS [r2] LEFT JOIN [NestedType] AS [n4] ON [r2].[OptionalNestedId] = [n4].[Id] INNER JOIN [NestedType] AS [n5] ON [r2].[RequiredNestedId] = [n5].[Id] @@ -126,7 +126,7 @@ public override async Task Related_with_parameter_null() AssertSql( """ -SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r0].[Id], [r0].[CollectionRootId], [r0].[Int], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n].[Id], [n0].[Id], [r1].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Name], [n3].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Name], [n0].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Name2], [s].[String2], [r1].[CollectionRootId], [r1].[Int], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Name], [n7].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Name], [n1].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Name], [n2].[String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r0].[Id], [r0].[CollectionRootId], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n].[Id], [n0].[Id], [r1].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Ints], [n3].[Name], [n3].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Ints], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Ints], [n0].[Name], [n0].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Ints], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r1].[CollectionRootId], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Ints], [n7].[Name], [n7].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Ints], [n1].[Name], [n1].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Ints], [n2].[Name], [n2].[String] FROM [RootEntity] AS [r] LEFT JOIN [RelatedType] AS [r0] ON [r].[OptionalRelatedId] = [r0].[Id] LEFT JOIN [NestedType] AS [n] ON [r0].[OptionalNestedId] = [n].[Id] @@ -136,7 +136,7 @@ FROM [RootEntity] AS [r] INNER JOIN [NestedType] AS [n2] ON [r1].[RequiredNestedId] = [n2].[Id] LEFT JOIN [NestedType] AS [n3] ON [r0].[Id] = [n3].[CollectionRelatedId] LEFT JOIN ( - SELECT [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] + SELECT [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Ints] AS [Ints0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Ints] AS [Ints1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Ints] AS [Ints2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] FROM [RelatedType] AS [r2] LEFT JOIN [NestedType] AS [n4] ON [r2].[OptionalNestedId] = [n4].[Id] INNER JOIN [NestedType] AS [n5] ON [r2].[RequiredNestedId] = [n5].[Id] @@ -154,7 +154,7 @@ public override async Task Nested_with_inline_null() AssertSql( """ -SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r1].[Id], [r1].[CollectionRootId], [r1].[Int], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [r0].[Id], [n].[Id], [n0].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Name], [n3].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Name], [n0].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Name], [n1].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Name2], [s].[String2], [r0].[CollectionRootId], [r0].[Int], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Name], [n7].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Name], [n].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Name], [n2].[String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r1].[Id], [r1].[CollectionRootId], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [r0].[Id], [n].[Id], [n0].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Ints], [n3].[Name], [n3].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Ints], [n0].[Name], [n0].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Ints], [n1].[Name], [n1].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Ints], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r0].[CollectionRootId], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Ints], [n7].[Name], [n7].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Ints], [n].[Name], [n].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Ints], [n2].[Name], [n2].[String] FROM [RootEntity] AS [r] INNER JOIN [RelatedType] AS [r0] ON [r].[RequiredRelatedId] = [r0].[Id] LEFT JOIN [NestedType] AS [n] ON [r0].[OptionalNestedId] = [n].[Id] @@ -164,7 +164,7 @@ FROM [RootEntity] AS [r] INNER JOIN [NestedType] AS [n2] ON [r0].[RequiredNestedId] = [n2].[Id] LEFT JOIN [NestedType] AS [n3] ON [r1].[Id] = [n3].[CollectionRelatedId] LEFT JOIN ( - SELECT [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] + SELECT [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Ints] AS [Ints0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Ints] AS [Ints1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Ints] AS [Ints2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] FROM [RelatedType] AS [r2] LEFT JOIN [NestedType] AS [n4] ON [r2].[OptionalNestedId] = [n4].[Id] INNER JOIN [NestedType] AS [n5] ON [r2].[RequiredNestedId] = [n5].[Id] @@ -182,7 +182,7 @@ public override async Task Nested_with_inline() AssertSql( """ -SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r1].[Id], [r1].[CollectionRootId], [r1].[Int], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [r0].[Id], [n].[Id], [n0].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Name], [n3].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Name], [n0].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Name], [n1].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Name2], [s].[String2], [r0].[CollectionRootId], [r0].[Int], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Name], [n7].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Name], [n2].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Name], [n].[String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r1].[Id], [r1].[CollectionRootId], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [r0].[Id], [n].[Id], [n0].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Ints], [n3].[Name], [n3].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Ints], [n0].[Name], [n0].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Ints], [n1].[Name], [n1].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Ints], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r0].[CollectionRootId], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Ints], [n7].[Name], [n7].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Ints], [n2].[Name], [n2].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Ints], [n].[Name], [n].[String] FROM [RootEntity] AS [r] INNER JOIN [RelatedType] AS [r0] ON [r].[RequiredRelatedId] = [r0].[Id] INNER JOIN [NestedType] AS [n] ON [r0].[RequiredNestedId] = [n].[Id] @@ -192,7 +192,7 @@ FROM [RootEntity] AS [r] LEFT JOIN [NestedType] AS [n2] ON [r0].[OptionalNestedId] = [n2].[Id] LEFT JOIN [NestedType] AS [n3] ON [r1].[Id] = [n3].[CollectionRelatedId] LEFT JOIN ( - SELECT [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] + SELECT [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Ints] AS [Ints0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Ints] AS [Ints1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Ints] AS [Ints2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] FROM [RelatedType] AS [r2] LEFT JOIN [NestedType] AS [n4] ON [r2].[OptionalNestedId] = [n4].[Id] INNER JOIN [NestedType] AS [n5] ON [r2].[RequiredNestedId] = [n5].[Id] @@ -212,7 +212,7 @@ public override async Task Nested_with_parameter() """ @entity_equality_nested_Id='1000' (Nullable = true) -SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r1].[Id], [r1].[CollectionRootId], [r1].[Int], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [r0].[Id], [n].[Id], [n0].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Name], [n3].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Name], [n0].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Name], [n1].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Name2], [s].[String2], [r0].[CollectionRootId], [r0].[Int], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Name], [n7].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Name], [n2].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Name], [n].[String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r1].[Id], [r1].[CollectionRootId], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [r0].[Id], [n].[Id], [n0].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Ints], [n3].[Name], [n3].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Ints], [n0].[Name], [n0].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Ints], [n1].[Name], [n1].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Ints], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r0].[CollectionRootId], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Ints], [n7].[Name], [n7].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Ints], [n2].[Name], [n2].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Ints], [n].[Name], [n].[String] FROM [RootEntity] AS [r] INNER JOIN [RelatedType] AS [r0] ON [r].[RequiredRelatedId] = [r0].[Id] INNER JOIN [NestedType] AS [n] ON [r0].[RequiredNestedId] = [n].[Id] @@ -222,7 +222,7 @@ FROM [RootEntity] AS [r] LEFT JOIN [NestedType] AS [n2] ON [r0].[OptionalNestedId] = [n2].[Id] LEFT JOIN [NestedType] AS [n3] ON [r1].[Id] = [n3].[CollectionRelatedId] LEFT JOIN ( - SELECT [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] + SELECT [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Ints] AS [Ints0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Ints] AS [Ints1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Ints] AS [Ints2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] FROM [RelatedType] AS [r2] LEFT JOIN [NestedType] AS [n4] ON [r2].[OptionalNestedId] = [n4].[Id] INNER JOIN [NestedType] AS [n5] ON [r2].[RequiredNestedId] = [n5].[Id] @@ -240,7 +240,7 @@ public override async Task Two_nested_collections() AssertSql( """ -SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r1].[Id], [r1].[CollectionRootId], [r1].[Int], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [r0].[Id], [n].[Id], [n0].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Name], [n3].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Name], [n0].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Name2], [s].[String2], [r0].[CollectionRootId], [r0].[Int], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Name], [n7].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Name], [n1].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Name], [n2].[String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r1].[Id], [r1].[CollectionRootId], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [r0].[Id], [n].[Id], [n0].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Ints], [n3].[Name], [n3].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Ints], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Ints], [n0].[Name], [n0].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Ints], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r0].[CollectionRootId], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Ints], [n7].[Name], [n7].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Ints], [n1].[Name], [n1].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Ints], [n2].[Name], [n2].[String] FROM [RootEntity] AS [r] INNER JOIN [RelatedType] AS [r0] ON [r].[RequiredRelatedId] = [r0].[Id] LEFT JOIN [RelatedType] AS [r1] ON [r].[OptionalRelatedId] = [r1].[Id] @@ -250,7 +250,7 @@ FROM [RootEntity] AS [r] INNER JOIN [NestedType] AS [n2] ON [r0].[RequiredNestedId] = [n2].[Id] LEFT JOIN [NestedType] AS [n3] ON [r1].[Id] = [n3].[CollectionRelatedId] LEFT JOIN ( - SELECT [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] + SELECT [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Ints] AS [Ints0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Ints] AS [Ints1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Ints] AS [Ints2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] FROM [RelatedType] AS [r2] LEFT JOIN [NestedType] AS [n4] ON [r2].[OptionalNestedId] = [n4].[Id] INNER JOIN [NestedType] AS [n5] ON [r2].[RequiredNestedId] = [n5].[Id] @@ -284,7 +284,7 @@ public override async Task Contains_with_inline() AssertSql( """ -SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r1].[Id], [r1].[CollectionRootId], [r1].[Int], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [r0].[Id], [n0].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n4].[Id], [n4].[CollectionRelatedId], [n4].[Int], [n4].[Name], [n4].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Name], [n0].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Name], [n1].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Name2], [s].[String2], [r0].[CollectionRootId], [r0].[Int], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n8].[Id], [n8].[CollectionRelatedId], [n8].[Int], [n8].[Name], [n8].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Name], [n2].[String], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Name], [n3].[String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r1].[Id], [r1].[CollectionRootId], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [r0].[Id], [n0].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n4].[Id], [n4].[CollectionRelatedId], [n4].[Int], [n4].[Ints], [n4].[Name], [n4].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Ints], [n0].[Name], [n0].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Ints], [n1].[Name], [n1].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Ints], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r0].[CollectionRootId], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n8].[Id], [n8].[CollectionRelatedId], [n8].[Int], [n8].[Ints], [n8].[Name], [n8].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Ints], [n2].[Name], [n2].[String], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Ints], [n3].[Name], [n3].[String] FROM [RootEntity] AS [r] INNER JOIN [RelatedType] AS [r0] ON [r].[RequiredRelatedId] = [r0].[Id] LEFT JOIN [RelatedType] AS [r1] ON [r].[OptionalRelatedId] = [r1].[Id] @@ -294,7 +294,7 @@ FROM [RootEntity] AS [r] INNER JOIN [NestedType] AS [n3] ON [r0].[RequiredNestedId] = [n3].[Id] LEFT JOIN [NestedType] AS [n4] ON [r1].[Id] = [n4].[CollectionRelatedId] LEFT JOIN ( - SELECT [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n5].[Id] AS [Id0], [n6].[Id] AS [Id1], [n7].[Id] AS [Id2], [n7].[CollectionRelatedId], [n7].[Int] AS [Int0], [n7].[Name] AS [Name0], [n7].[String] AS [String0], [n5].[CollectionRelatedId] AS [CollectionRelatedId0], [n5].[Int] AS [Int1], [n5].[Name] AS [Name1], [n5].[String] AS [String1], [n6].[CollectionRelatedId] AS [CollectionRelatedId1], [n6].[Int] AS [Int2], [n6].[Name] AS [Name2], [n6].[String] AS [String2] + SELECT [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n5].[Id] AS [Id0], [n6].[Id] AS [Id1], [n7].[Id] AS [Id2], [n7].[CollectionRelatedId], [n7].[Int] AS [Int0], [n7].[Ints] AS [Ints0], [n7].[Name] AS [Name0], [n7].[String] AS [String0], [n5].[CollectionRelatedId] AS [CollectionRelatedId0], [n5].[Int] AS [Int1], [n5].[Ints] AS [Ints1], [n5].[Name] AS [Name1], [n5].[String] AS [String1], [n6].[CollectionRelatedId] AS [CollectionRelatedId1], [n6].[Int] AS [Int2], [n6].[Ints] AS [Ints2], [n6].[Name] AS [Name2], [n6].[String] AS [String2] FROM [RelatedType] AS [r2] LEFT JOIN [NestedType] AS [n5] ON [r2].[OptionalNestedId] = [n5].[Id] INNER JOIN [NestedType] AS [n6] ON [r2].[RequiredNestedId] = [n6].[Id] @@ -317,7 +317,7 @@ public override async Task Contains_with_parameter() """ @entity_equality_nested_Id='1002' (Nullable = true) -SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r1].[Id], [r1].[CollectionRootId], [r1].[Int], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [r0].[Id], [n0].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n4].[Id], [n4].[CollectionRelatedId], [n4].[Int], [n4].[Name], [n4].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Name], [n0].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Name], [n1].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Name2], [s].[String2], [r0].[CollectionRootId], [r0].[Int], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n8].[Id], [n8].[CollectionRelatedId], [n8].[Int], [n8].[Name], [n8].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Name], [n2].[String], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Name], [n3].[String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r1].[Id], [r1].[CollectionRootId], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [r0].[Id], [n0].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n4].[Id], [n4].[CollectionRelatedId], [n4].[Int], [n4].[Ints], [n4].[Name], [n4].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Ints], [n0].[Name], [n0].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Ints], [n1].[Name], [n1].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Ints], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r0].[CollectionRootId], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n8].[Id], [n8].[CollectionRelatedId], [n8].[Int], [n8].[Ints], [n8].[Name], [n8].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Ints], [n2].[Name], [n2].[String], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Ints], [n3].[Name], [n3].[String] FROM [RootEntity] AS [r] INNER JOIN [RelatedType] AS [r0] ON [r].[RequiredRelatedId] = [r0].[Id] LEFT JOIN [RelatedType] AS [r1] ON [r].[OptionalRelatedId] = [r1].[Id] @@ -327,7 +327,7 @@ FROM [RootEntity] AS [r] INNER JOIN [NestedType] AS [n3] ON [r0].[RequiredNestedId] = [n3].[Id] LEFT JOIN [NestedType] AS [n4] ON [r1].[Id] = [n4].[CollectionRelatedId] LEFT JOIN ( - SELECT [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n5].[Id] AS [Id0], [n6].[Id] AS [Id1], [n7].[Id] AS [Id2], [n7].[CollectionRelatedId], [n7].[Int] AS [Int0], [n7].[Name] AS [Name0], [n7].[String] AS [String0], [n5].[CollectionRelatedId] AS [CollectionRelatedId0], [n5].[Int] AS [Int1], [n5].[Name] AS [Name1], [n5].[String] AS [String1], [n6].[CollectionRelatedId] AS [CollectionRelatedId1], [n6].[Int] AS [Int2], [n6].[Name] AS [Name2], [n6].[String] AS [String2] + SELECT [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n5].[Id] AS [Id0], [n6].[Id] AS [Id1], [n7].[Id] AS [Id2], [n7].[CollectionRelatedId], [n7].[Int] AS [Int0], [n7].[Ints] AS [Ints0], [n7].[Name] AS [Name0], [n7].[String] AS [String0], [n5].[CollectionRelatedId] AS [CollectionRelatedId0], [n5].[Int] AS [Int1], [n5].[Ints] AS [Ints1], [n5].[Name] AS [Name1], [n5].[String] AS [String1], [n6].[CollectionRelatedId] AS [CollectionRelatedId1], [n6].[Int] AS [Int2], [n6].[Ints] AS [Ints2], [n6].[Name] AS [Name2], [n6].[String] AS [String2] FROM [RelatedType] AS [r2] LEFT JOIN [NestedType] AS [n5] ON [r2].[OptionalNestedId] = [n5].[Id] INNER JOIN [NestedType] AS [n6] ON [r2].[RequiredNestedId] = [n6].[Id] @@ -348,10 +348,10 @@ public override async Task Contains_with_operators_composed_on_the_collection() AssertSql( """ -@get_Item_Int='103' +@get_Item_Int='106' @entity_equality_get_Item_Id='3003' (Nullable = true) -SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r1].[Id], [r1].[CollectionRootId], [r1].[Int], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [r0].[Id], [n0].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n4].[Id], [n4].[CollectionRelatedId], [n4].[Int], [n4].[Name], [n4].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Name], [n0].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Name], [n1].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Name2], [s].[String2], [r0].[CollectionRootId], [r0].[Int], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n8].[Id], [n8].[CollectionRelatedId], [n8].[Int], [n8].[Name], [n8].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Name], [n2].[String], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Name], [n3].[String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r1].[Id], [r1].[CollectionRootId], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [r0].[Id], [n0].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n4].[Id], [n4].[CollectionRelatedId], [n4].[Int], [n4].[Ints], [n4].[Name], [n4].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Ints], [n0].[Name], [n0].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Ints], [n1].[Name], [n1].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Ints], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r0].[CollectionRootId], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[OptionalNestedId], [r0].[RequiredNestedId], [r0].[String], [n8].[Id], [n8].[CollectionRelatedId], [n8].[Int], [n8].[Ints], [n8].[Name], [n8].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Ints], [n2].[Name], [n2].[String], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Ints], [n3].[Name], [n3].[String] FROM [RootEntity] AS [r] INNER JOIN [RelatedType] AS [r0] ON [r].[RequiredRelatedId] = [r0].[Id] LEFT JOIN [RelatedType] AS [r1] ON [r].[OptionalRelatedId] = [r1].[Id] @@ -361,7 +361,7 @@ FROM [RootEntity] AS [r] INNER JOIN [NestedType] AS [n3] ON [r0].[RequiredNestedId] = [n3].[Id] LEFT JOIN [NestedType] AS [n4] ON [r1].[Id] = [n4].[CollectionRelatedId] LEFT JOIN ( - SELECT [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n5].[Id] AS [Id0], [n6].[Id] AS [Id1], [n7].[Id] AS [Id2], [n7].[CollectionRelatedId], [n7].[Int] AS [Int0], [n7].[Name] AS [Name0], [n7].[String] AS [String0], [n5].[CollectionRelatedId] AS [CollectionRelatedId0], [n5].[Int] AS [Int1], [n5].[Name] AS [Name1], [n5].[String] AS [String1], [n6].[CollectionRelatedId] AS [CollectionRelatedId1], [n6].[Int] AS [Int2], [n6].[Name] AS [Name2], [n6].[String] AS [String2] + SELECT [r2].[Id], [r2].[CollectionRootId], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n5].[Id] AS [Id0], [n6].[Id] AS [Id1], [n7].[Id] AS [Id2], [n7].[CollectionRelatedId], [n7].[Int] AS [Int0], [n7].[Ints] AS [Ints0], [n7].[Name] AS [Name0], [n7].[String] AS [String0], [n5].[CollectionRelatedId] AS [CollectionRelatedId0], [n5].[Int] AS [Int1], [n5].[Ints] AS [Ints1], [n5].[Name] AS [Name1], [n5].[String] AS [String1], [n6].[CollectionRelatedId] AS [CollectionRelatedId1], [n6].[Int] AS [Int2], [n6].[Ints] AS [Ints2], [n6].[Name] AS [Name2], [n6].[String] AS [String2] FROM [RelatedType] AS [r2] LEFT JOIN [NestedType] AS [n5] ON [r2].[OptionalNestedId] = [n5].[Id] INNER JOIN [NestedType] AS [n6] ON [r2].[RequiredNestedId] = [n6].[Id] @@ -385,7 +385,7 @@ public override async Task Contains_with_nested_and_composed_operators() @get_Item_Id='302' @entity_equality_get_Item_Id='303' (Nullable = true) -SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r1].[Id], [r1].[CollectionRootId], [r1].[Int], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [n].[Id], [n0].[Id], [r2].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Name], [n3].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Name], [n0].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Name2], [s].[String2], [r2].[CollectionRootId], [r2].[Int], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Name], [n7].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Name], [n1].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Name], [n2].[String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelatedId], [r].[RequiredRelatedId], [r1].[Id], [r1].[CollectionRootId], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[OptionalNestedId], [r1].[RequiredNestedId], [r1].[String], [n].[Id], [n0].[Id], [r2].[Id], [n1].[Id], [n2].[Id], [n3].[Id], [n3].[CollectionRelatedId], [n3].[Int], [n3].[Ints], [n3].[Name], [n3].[String], [n].[CollectionRelatedId], [n].[Int], [n].[Ints], [n].[Name], [n].[String], [n0].[CollectionRelatedId], [n0].[Int], [n0].[Ints], [n0].[Name], [n0].[String], [s].[Id], [s].[CollectionRootId], [s].[Int], [s].[Ints], [s].[Name], [s].[OptionalNestedId], [s].[RequiredNestedId], [s].[String], [s].[Id0], [s].[Id1], [s].[Id2], [s].[CollectionRelatedId], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[CollectionRelatedId0], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[CollectionRelatedId1], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r2].[CollectionRootId], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[OptionalNestedId], [r2].[RequiredNestedId], [r2].[String], [n7].[Id], [n7].[CollectionRelatedId], [n7].[Int], [n7].[Ints], [n7].[Name], [n7].[String], [n1].[CollectionRelatedId], [n1].[Int], [n1].[Ints], [n1].[Name], [n1].[String], [n2].[CollectionRelatedId], [n2].[Int], [n2].[Ints], [n2].[Name], [n2].[String] FROM [RootEntity] AS [r] LEFT JOIN [RelatedType] AS [r1] ON [r].[OptionalRelatedId] = [r1].[Id] LEFT JOIN [NestedType] AS [n] ON [r1].[OptionalNestedId] = [n].[Id] @@ -395,7 +395,7 @@ FROM [RootEntity] AS [r] INNER JOIN [NestedType] AS [n2] ON [r2].[RequiredNestedId] = [n2].[Id] LEFT JOIN [NestedType] AS [n3] ON [r1].[Id] = [n3].[CollectionRelatedId] LEFT JOIN ( - SELECT [r3].[Id], [r3].[CollectionRootId], [r3].[Int], [r3].[Name], [r3].[OptionalNestedId], [r3].[RequiredNestedId], [r3].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] + SELECT [r3].[Id], [r3].[CollectionRootId], [r3].[Int], [r3].[Ints], [r3].[Name], [r3].[OptionalNestedId], [r3].[RequiredNestedId], [r3].[String], [n4].[Id] AS [Id0], [n5].[Id] AS [Id1], [n6].[Id] AS [Id2], [n6].[CollectionRelatedId], [n6].[Int] AS [Int0], [n6].[Ints] AS [Ints0], [n6].[Name] AS [Name0], [n6].[String] AS [String0], [n4].[CollectionRelatedId] AS [CollectionRelatedId0], [n4].[Int] AS [Int1], [n4].[Ints] AS [Ints1], [n4].[Name] AS [Name1], [n4].[String] AS [String1], [n5].[CollectionRelatedId] AS [CollectionRelatedId1], [n5].[Int] AS [Int2], [n5].[Ints] AS [Ints2], [n5].[Name] AS [Name2], [n5].[String] AS [String2] FROM [RelatedType] AS [r3] LEFT JOIN [NestedType] AS [n4] ON [r3].[OptionalNestedId] = [n4].[Id] INNER JOIN [NestedType] AS [n5] ON [r3].[RequiredNestedId] = [n5].[Id] diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/Associations/OwnedJson/OwnedJsonCollectionSqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/Associations/OwnedJson/OwnedJsonCollectionSqlServerTest.cs index 10e3b2058dc..235f6bc0e9b 100644 --- a/test/EFCore.SqlServer.FunctionalTests/Query/Associations/OwnedJson/OwnedJsonCollectionSqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/Query/Associations/OwnedJson/OwnedJsonCollectionSqlServerTest.cs @@ -26,8 +26,28 @@ public override async Task Where() { await base.Where(); - AssertSql( - """ + if (Fixture.UsingJsonType) + { + AssertSql( + """ +SELECT [r].[Id], [r].[Name], [r].[OptionalRelated], [r].[RelatedCollection], [r].[RequiredRelated] +FROM [RootEntity] AS [r] +WHERE ( + SELECT COUNT(*) + FROM OPENJSON([r].[RelatedCollection], '$') WITH ( + [Id] int '$.Id', + [Int] int '$.Int', + [Ints] json '$.Ints' AS JSON, + [Name] nvarchar(max) '$.Name', + [String] nvarchar(max) '$.String' + ) AS [r0] + WHERE [r0].[Int] <> 8) = 2 +"""); + } + else + { + AssertSql( + """ SELECT [r].[Id], [r].[Name], [r].[OptionalRelated], [r].[RelatedCollection], [r].[RequiredRelated] FROM [RootEntity] AS [r] WHERE ( @@ -35,19 +55,42 @@ SELECT COUNT(*) FROM OPENJSON([r].[RelatedCollection], '$') WITH ( [Id] int '$.Id', [Int] int '$.Int', + [Ints] nvarchar(max) '$.Ints' AS JSON, [Name] nvarchar(max) '$.Name', [String] nvarchar(max) '$.String' ) AS [r0] WHERE [r0].[Int] <> 8) = 2 """); + } } public override async Task OrderBy_ElementAt() { await base.OrderBy_ElementAt(); - AssertSql( - """ + if (Fixture.UsingJsonType) + { + AssertSql( + """ +SELECT [r].[Id], [r].[Name], [r].[OptionalRelated], [r].[RelatedCollection], [r].[RequiredRelated] +FROM [RootEntity] AS [r] +WHERE ( + SELECT [r0].[Int] + FROM OPENJSON([r].[RelatedCollection], '$') WITH ( + [Id] int '$.Id', + [Int] int '$.Int', + [Ints] json '$.Ints' AS JSON, + [Name] nvarchar(max) '$.Name', + [String] nvarchar(max) '$.String' + ) AS [r0] + ORDER BY [r0].[Id] + OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY) = 8 +"""); + } + else + { + AssertSql( + """ SELECT [r].[Id], [r].[Name], [r].[OptionalRelated], [r].[RelatedCollection], [r].[RequiredRelated] FROM [RootEntity] AS [r] WHERE ( @@ -55,12 +98,14 @@ SELECT [r0].[Int] FROM OPENJSON([r].[RelatedCollection], '$') WITH ( [Id] int '$.Id', [Int] int '$.Int', + [Ints] nvarchar(max) '$.Ints' AS JSON, [Name] nvarchar(max) '$.Name', [String] nvarchar(max) '$.String' ) AS [r0] ORDER BY [r0].[Id] OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY) = 8 """); + } } #region Distinct @@ -79,10 +124,11 @@ FROM [RootEntity] AS [r] WHERE ( SELECT COUNT(*) FROM ( - SELECT DISTINCT [r].[Id], [r0].[Id] AS [Id0], [r0].[Int], [r0].[Name], [r0].[String], [r0].[NestedCollection] AS [c], [r0].[OptionalNested] AS [c0], [r0].[RequiredNested] AS [c1] + SELECT DISTINCT [r].[Id], [r0].[Id] AS [Id0], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[String], [r0].[NestedCollection] AS [c], [r0].[OptionalNested] AS [c0], [r0].[RequiredNested] AS [c1] FROM OPENJSON([r].[RelatedCollection], '$') WITH ( [Id] int '$.Id', [Int] int '$.Int', + [Ints] json '$.Ints' AS JSON, [Name] nvarchar(max) '$.Name', [String] nvarchar(max) '$.String', [NestedCollection] json '$.NestedCollection' AS JSON, @@ -103,10 +149,11 @@ FROM [RootEntity] AS [r] WHERE ( SELECT COUNT(*) FROM ( - SELECT DISTINCT [r].[Id], [r0].[Id] AS [Id0], [r0].[Int], [r0].[Name], [r0].[String], [r0].[NestedCollection] AS [c], [r0].[OptionalNested] AS [c0], [r0].[RequiredNested] AS [c1] + SELECT DISTINCT [r].[Id], [r0].[Id] AS [Id0], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[String], [r0].[NestedCollection] AS [c], [r0].[OptionalNested] AS [c0], [r0].[RequiredNested] AS [c1] FROM OPENJSON([r].[RelatedCollection], '$') WITH ( [Id] int '$.Id', [Int] int '$.Int', + [Ints] nvarchar(max) '$.Ints' AS JSON, [Name] nvarchar(max) '$.Name', [String] nvarchar(max) '$.String', [NestedCollection] nvarchar(max) '$.NestedCollection' AS JSON, @@ -131,13 +178,14 @@ public override async Task Distinct_projected(QueryTrackingBehavior queryTrackin AssertSql( """ -SELECT [r].[Id], [r1].[Id], [r1].[Id0], [r1].[Int], [r1].[Name], [r1].[String], [r1].[c], [r1].[c0], [r1].[c1] +SELECT [r].[Id], [r1].[Id], [r1].[Id0], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[String], [r1].[c], [r1].[c0], [r1].[c1] FROM [RootEntity] AS [r] OUTER APPLY ( - SELECT DISTINCT [r].[Id], [r0].[Id] AS [Id0], [r0].[Int], [r0].[Name], [r0].[String], [r0].[NestedCollection] AS [c], [r0].[OptionalNested] AS [c0], [r0].[RequiredNested] AS [c1] + SELECT DISTINCT [r].[Id], [r0].[Id] AS [Id0], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[String], [r0].[NestedCollection] AS [c], [r0].[OptionalNested] AS [c0], [r0].[RequiredNested] AS [c1] FROM OPENJSON([r].[RelatedCollection], '$') WITH ( [Id] int '$.Id', [Int] int '$.Int', + [Ints] json '$.Ints' AS JSON, [Name] nvarchar(max) '$.Name', [String] nvarchar(max) '$.String', [NestedCollection] json '$.NestedCollection' AS JSON, @@ -145,7 +193,7 @@ [String] nvarchar(max) '$.String', [RequiredNested] json '$.RequiredNested' AS JSON ) AS [r0] ) AS [r1] -ORDER BY [r].[Id], [r1].[Id0], [r1].[Int], [r1].[Name] +ORDER BY [r].[Id], [r1].[Id0], [r1].[Int], [r1].[Ints], [r1].[Name] """); } else @@ -154,13 +202,14 @@ [RequiredNested] json '$.RequiredNested' AS JSON AssertSql( """ -SELECT [r].[Id], [r1].[Id], [r1].[Id0], [r1].[Int], [r1].[Name], [r1].[String], [r1].[c], [r1].[c0], [r1].[c1] +SELECT [r].[Id], [r1].[Id], [r1].[Id0], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[String], [r1].[c], [r1].[c0], [r1].[c1] FROM [RootEntity] AS [r] OUTER APPLY ( - SELECT DISTINCT [r].[Id], [r0].[Id] AS [Id0], [r0].[Int], [r0].[Name], [r0].[String], [r0].[NestedCollection] AS [c], [r0].[OptionalNested] AS [c0], [r0].[RequiredNested] AS [c1] + SELECT DISTINCT [r].[Id], [r0].[Id] AS [Id0], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[String], [r0].[NestedCollection] AS [c], [r0].[OptionalNested] AS [c0], [r0].[RequiredNested] AS [c1] FROM OPENJSON([r].[RelatedCollection], '$') WITH ( [Id] int '$.Id', [Int] int '$.Int', + [Ints] nvarchar(max) '$.Ints' AS JSON, [Name] nvarchar(max) '$.Name', [String] nvarchar(max) '$.String', [NestedCollection] nvarchar(max) '$.NestedCollection' AS JSON, @@ -168,7 +217,7 @@ [OptionalNested] nvarchar(max) '$.OptionalNested' AS JSON, [RequiredNested] nvarchar(max) '$.RequiredNested' AS JSON ) AS [r0] ) AS [r1] -ORDER BY [r].[Id], [r1].[Id0], [r1].[Int], [r1].[Name] +ORDER BY [r].[Id], [r1].[Id0], [r1].[Int], [r1].[Ints], [r1].[Name] """); } } @@ -301,17 +350,42 @@ public override async Task GroupBy() { await base.GroupBy(); - AssertSql( - """ + if (Fixture.UsingJsonType) + { + AssertSql( + """ +SELECT [r].[Id], [r].[Name], [r].[OptionalRelated], [r].[RelatedCollection], [r].[RequiredRelated] +FROM [RootEntity] AS [r] +WHERE 16 IN ( + SELECT COALESCE(SUM([r1].[Int]), 0) + FROM ( + SELECT [r0].[Id] AS [Id0], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[String], [r0].[String] AS [Key0] + FROM OPENJSON([r].[RelatedCollection], '$') WITH ( + [Id] int '$.Id', + [Int] int '$.Int', + [Ints] json '$.Ints' AS JSON, + [Name] nvarchar(max) '$.Name', + [String] nvarchar(max) '$.String' + ) AS [r0] + ) AS [r1] + GROUP BY [r1].[Key0] +) +"""); + } + else + { + AssertSql( + """ SELECT [r].[Id], [r].[Name], [r].[OptionalRelated], [r].[RelatedCollection], [r].[RequiredRelated] FROM [RootEntity] AS [r] WHERE 16 IN ( SELECT COALESCE(SUM([r1].[Int]), 0) FROM ( - SELECT [r0].[Id] AS [Id0], [r0].[Int], [r0].[Name], [r0].[String], [r0].[String] AS [Key0] + SELECT [r0].[Id] AS [Id0], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[String], [r0].[String] AS [Key0] FROM OPENJSON([r].[RelatedCollection], '$') WITH ( [Id] int '$.Id', [Int] int '$.Int', + [Ints] nvarchar(max) '$.Ints' AS JSON, [Name] nvarchar(max) '$.Name', [String] nvarchar(max) '$.String' ) AS [r0] @@ -319,6 +393,7 @@ [String] nvarchar(max) '$.String' GROUP BY [r1].[Key0] ) """); + } } #endregion GroupBy @@ -339,6 +414,7 @@ SELECT MAX([n].[Int]) AS [value] FROM OPENJSON([r0].[NestedCollection], '$') WITH ( [Id] int '$.Id', [Int] int '$.Int', + [Ints] json '$.Ints' AS JSON, [Name] nvarchar(max) '$.Name', [String] nvarchar(max) '$.String' ) AS [n] @@ -358,6 +434,7 @@ SELECT MAX([n].[Int]) AS [value] FROM OPENJSON([r0].[NestedCollection], '$') WITH ( [Id] int '$.Id', [Int] int '$.Int', + [Ints] nvarchar(max) '$.Ints' AS JSON, [Name] nvarchar(max) '$.Name', [String] nvarchar(max) '$.String' ) AS [n] diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/Associations/OwnedJson/OwnedJsonPrimitiveCollectionSqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/Associations/OwnedJson/OwnedJsonPrimitiveCollectionSqlServerTest.cs new file mode 100644 index 00000000000..0497efc5276 --- /dev/null +++ b/test/EFCore.SqlServer.FunctionalTests/Query/Associations/OwnedJson/OwnedJsonPrimitiveCollectionSqlServerTest.cs @@ -0,0 +1,110 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace Microsoft.EntityFrameworkCore.Query.Associations.OwnedJson; + +public class OwnedJsonPrimitiveCollectionSqlServerTest(OwnedJsonSqlServerFixture fixture, ITestOutputHelper testOutputHelper) + : OwnedJsonPrimitiveCollectionRelationalTestBase(fixture, testOutputHelper) +{ + public override async Task Count() + { + await base.Count(); + + AssertSql( + """ +SELECT [r].[Id], [r].[Name], [r].[OptionalRelated], [r].[RelatedCollection], [r].[RequiredRelated] +FROM [RootEntity] AS [r] +WHERE ( + SELECT COUNT(*) + FROM OPENJSON(JSON_QUERY([r].[RequiredRelated], '$.Ints')) AS [i]) = 3 +"""); + } + + public override async Task Index() + { + await base.Index(); + + if (Fixture.UsingJsonType) + { + AssertSql( + """ +SELECT [r].[Id], [r].[Name], [r].[OptionalRelated], [r].[RelatedCollection], [r].[RequiredRelated] +FROM [RootEntity] AS [r] +WHERE JSON_VALUE([r].[RequiredRelated], '$.Ints[0]' RETURNING int) = 1 +"""); + } + else + { + AssertSql( + """ +SELECT [r].[Id], [r].[Name], [r].[OptionalRelated], [r].[RelatedCollection], [r].[RequiredRelated] +FROM [RootEntity] AS [r] +WHERE CAST(JSON_VALUE([r].[RequiredRelated], '$.Ints[0]') AS int) = 1 +"""); + } + } + + public override async Task Contains() + { + await base.Contains(); + + AssertSql( + """ +SELECT [r].[Id], [r].[Name], [r].[OptionalRelated], [r].[RelatedCollection], [r].[RequiredRelated] +FROM [RootEntity] AS [r] +WHERE 3 IN ( + SELECT [i].[value] + FROM OPENJSON(JSON_QUERY([r].[RequiredRelated], '$.Ints')) WITH ([value] int '$') AS [i] +) +"""); + } + + public override async Task Any_predicate() + { + await base.Any_predicate(); + + AssertSql( + """ +SELECT [r].[Id], [r].[Name], [r].[OptionalRelated], [r].[RelatedCollection], [r].[RequiredRelated] +FROM [RootEntity] AS [r] +WHERE 2 IN ( + SELECT [i].[value] + FROM OPENJSON(JSON_QUERY([r].[RequiredRelated], '$.Ints')) WITH ([value] int '$') AS [i] +) +"""); + } + + public override async Task Nested_Count() + { + await base.Nested_Count(); + + AssertSql( + """ +SELECT [r].[Id], [r].[Name], [r].[OptionalRelated], [r].[RelatedCollection], [r].[RequiredRelated] +FROM [RootEntity] AS [r] +WHERE ( + SELECT COUNT(*) + FROM OPENJSON(JSON_QUERY([r].[RequiredRelated], '$.RequiredNested.Ints')) AS [i]) = 3 +"""); + } + + public override async Task Select_Sum() + { + await base.Select_Sum(); + + AssertSql( + """ +SELECT ( + SELECT COALESCE(SUM([i0].[value]), 0) + FROM OPENJSON(JSON_QUERY([r].[RequiredRelated], '$.Ints')) WITH ([value] int '$') AS [i0]) +FROM [RootEntity] AS [r] +WHERE ( + SELECT COALESCE(SUM([i].[value]), 0) + FROM OPENJSON(JSON_QUERY([r].[RequiredRelated], '$.Ints')) WITH ([value] int '$') AS [i]) >= 6 +"""); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); +} diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/Associations/OwnedJson/OwnedJsonProjectionSqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/Associations/OwnedJson/OwnedJsonProjectionSqlServerTest.cs index 7ae7dd78717..b2f121103d1 100644 --- a/test/EFCore.SqlServer.FunctionalTests/Query/Associations/OwnedJson/OwnedJsonProjectionSqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/Query/Associations/OwnedJson/OwnedJsonProjectionSqlServerTest.cs @@ -269,11 +269,12 @@ public override async Task SelectMany_related_collection(QueryTrackingBehavior q { AssertSql( """ -SELECT [r].[Id], [r0].[Id], [r0].[Int], [r0].[Name], [r0].[String], [r0].[NestedCollection], [r0].[OptionalNested], [r0].[RequiredNested] +SELECT [r].[Id], [r0].[Id], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[String], [r0].[NestedCollection], [r0].[OptionalNested], [r0].[RequiredNested] FROM [RootEntity] AS [r] CROSS APPLY OPENJSON([r].[RelatedCollection], '$') WITH ( [Id] int '$.Id', [Int] int '$.Int', + [Ints] json '$.Ints' AS JSON, [Name] nvarchar(max) '$.Name', [String] nvarchar(max) '$.String', [NestedCollection] json '$.NestedCollection' AS JSON, @@ -286,11 +287,12 @@ [RequiredNested] json '$.RequiredNested' AS JSON { AssertSql( """ -SELECT [r].[Id], [r0].[Id], [r0].[Int], [r0].[Name], [r0].[String], [r0].[NestedCollection], [r0].[OptionalNested], [r0].[RequiredNested] +SELECT [r].[Id], [r0].[Id], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[String], [r0].[NestedCollection], [r0].[OptionalNested], [r0].[RequiredNested] FROM [RootEntity] AS [r] CROSS APPLY OPENJSON([r].[RelatedCollection], '$') WITH ( [Id] int '$.Id', [Int] int '$.Int', + [Ints] nvarchar(max) '$.Ints' AS JSON, [Name] nvarchar(max) '$.Name', [String] nvarchar(max) '$.String', [NestedCollection] nvarchar(max) '$.NestedCollection' AS JSON, @@ -308,17 +310,36 @@ public override async Task SelectMany_nested_collection_on_required_related(Quer if (queryTrackingBehavior is not QueryTrackingBehavior.TrackAll) { - AssertSql( - """ -SELECT [r].[Id], [n].[Id], [n].[Int], [n].[Name], [n].[String] + if (Fixture.UsingJsonType) + { + AssertSql( + """ +SELECT [r].[Id], [n].[Id], [n].[Int], [n].[Ints], [n].[Name], [n].[String] +FROM [RootEntity] AS [r] +CROSS APPLY OPENJSON([r].[RequiredRelated], '$.NestedCollection') WITH ( + [Id] int '$.Id', + [Int] int '$.Int', + [Ints] json '$.Ints' AS JSON, + [Name] nvarchar(max) '$.Name', + [String] nvarchar(max) '$.String' +) AS [n] +"""); + } + else + { + AssertSql( + """ +SELECT [r].[Id], [n].[Id], [n].[Int], [n].[Ints], [n].[Name], [n].[String] FROM [RootEntity] AS [r] CROSS APPLY OPENJSON([r].[RequiredRelated], '$.NestedCollection') WITH ( [Id] int '$.Id', [Int] int '$.Int', + [Ints] nvarchar(max) '$.Ints' AS JSON, [Name] nvarchar(max) '$.Name', [String] nvarchar(max) '$.String' ) AS [n] """); + } } } @@ -328,17 +349,36 @@ public override async Task SelectMany_nested_collection_on_optional_related(Quer if (queryTrackingBehavior is not QueryTrackingBehavior.TrackAll) { - AssertSql( - """ -SELECT [r].[Id], [n].[Id], [n].[Int], [n].[Name], [n].[String] + if (Fixture.UsingJsonType) + { + AssertSql( + """ +SELECT [r].[Id], [n].[Id], [n].[Int], [n].[Ints], [n].[Name], [n].[String] +FROM [RootEntity] AS [r] +CROSS APPLY OPENJSON([r].[OptionalRelated], '$.NestedCollection') WITH ( + [Id] int '$.Id', + [Int] int '$.Int', + [Ints] json '$.Ints' AS JSON, + [Name] nvarchar(max) '$.Name', + [String] nvarchar(max) '$.String' +) AS [n] +"""); + } + else + { + AssertSql( + """ +SELECT [r].[Id], [n].[Id], [n].[Int], [n].[Ints], [n].[Name], [n].[String] FROM [RootEntity] AS [r] CROSS APPLY OPENJSON([r].[OptionalRelated], '$.NestedCollection') WITH ( [Id] int '$.Id', [Int] int '$.Int', + [Ints] nvarchar(max) '$.Ints' AS JSON, [Name] nvarchar(max) '$.Name', [String] nvarchar(max) '$.String' ) AS [n] """); + } } } diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/Associations/OwnedNavigations/OwnedNavigationsCollectionSqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/Associations/OwnedNavigations/OwnedNavigationsCollectionSqlServerTest.cs index 248784aed10..d72ae81b801 100644 --- a/test/EFCore.SqlServer.FunctionalTests/Query/Associations/OwnedNavigations/OwnedNavigationsCollectionSqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/Query/Associations/OwnedNavigations/OwnedNavigationsCollectionSqlServerTest.cs @@ -12,7 +12,7 @@ public override async Task Count() AssertSql( """ -SELECT [r].[Id], [r].[Name], [o].[RootEntityId], [o].[Id], [o].[Int], [o].[Name], [o].[String], [o0].[RelatedTypeRootEntityId], [o1].[RelatedTypeRootEntityId], [r1].[RootEntityId], [r2].[RelatedTypeRootEntityId], [r3].[RelatedTypeRootEntityId], [o2].[RelatedTypeRootEntityId], [o2].[Id], [o2].[Int], [o2].[Name], [o2].[String], [o0].[Id], [o0].[Int], [o0].[Name], [o0].[String], [o1].[Id], [o1].[Int], [o1].[Name], [o1].[String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[RelatedTypeRootEntityId0], [s].[RelatedTypeId0], [s].[RelatedTypeRootEntityId1], [s].[RelatedTypeId1], [s].[Id0], [s].[Int0], [s].[Name0], [s].[String0], [s].[Id1], [s].[Int1], [s].[Name1], [s].[String1], [s].[Id2], [s].[Int2], [s].[Name2], [s].[String2], [r1].[Id], [r1].[Int], [r1].[Name], [r1].[String], [r8].[RelatedTypeRootEntityId], [r8].[Id], [r8].[Int], [r8].[Name], [r8].[String], [r2].[Id], [r2].[Int], [r2].[Name], [r2].[String], [r3].[Id], [r3].[Int], [r3].[Name], [r3].[String] +SELECT [r].[Id], [r].[Name], [o].[RootEntityId], [o].[Id], [o].[Int], [o].[Ints], [o].[Name], [o].[String], [o0].[RelatedTypeRootEntityId], [o1].[RelatedTypeRootEntityId], [r1].[RootEntityId], [r2].[RelatedTypeRootEntityId], [r3].[RelatedTypeRootEntityId], [o2].[RelatedTypeRootEntityId], [o2].[Id], [o2].[Int], [o2].[Ints], [o2].[Name], [o2].[String], [o0].[Id], [o0].[Int], [o0].[Ints], [o0].[Name], [o0].[String], [o1].[Id], [o1].[Int], [o1].[Ints], [o1].[Name], [o1].[String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Ints], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[RelatedTypeRootEntityId0], [s].[RelatedTypeId0], [s].[RelatedTypeRootEntityId1], [s].[RelatedTypeId1], [s].[Id0], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[Id1], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[Id2], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r1].[Id], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[String], [r8].[RelatedTypeRootEntityId], [r8].[Id], [r8].[Int], [r8].[Ints], [r8].[Name], [r8].[String], [r2].[Id], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[String], [r3].[Id], [r3].[Int], [r3].[Ints], [r3].[Name], [r3].[String] FROM [RootEntity] AS [r] LEFT JOIN [OptionalRelated] AS [o] ON [r].[Id] = [o].[RootEntityId] LEFT JOIN [OptionalRelated_OptionalNested] AS [o0] ON [o].[RootEntityId] = [o0].[RelatedTypeRootEntityId] @@ -22,7 +22,7 @@ FROM [RootEntity] AS [r] LEFT JOIN [RequiredRelated_RequiredNested] AS [r3] ON [r1].[RootEntityId] = [r3].[RelatedTypeRootEntityId] LEFT JOIN [OptionalRelated_NestedCollection] AS [o2] ON [o].[RootEntityId] = [o2].[RelatedTypeRootEntityId] LEFT JOIN ( - SELECT [r4].[RootEntityId], [r4].[Id], [r4].[Int], [r4].[Name], [r4].[String], [r5].[RelatedTypeRootEntityId], [r5].[RelatedTypeId], [r6].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId0], [r6].[RelatedTypeId] AS [RelatedTypeId0], [r7].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId1], [r7].[RelatedTypeId] AS [RelatedTypeId1], [r7].[Id] AS [Id0], [r7].[Int] AS [Int0], [r7].[Name] AS [Name0], [r7].[String] AS [String0], [r5].[Id] AS [Id1], [r5].[Int] AS [Int1], [r5].[Name] AS [Name1], [r5].[String] AS [String1], [r6].[Id] AS [Id2], [r6].[Int] AS [Int2], [r6].[Name] AS [Name2], [r6].[String] AS [String2] + SELECT [r4].[RootEntityId], [r4].[Id], [r4].[Int], [r4].[Ints], [r4].[Name], [r4].[String], [r5].[RelatedTypeRootEntityId], [r5].[RelatedTypeId], [r6].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId0], [r6].[RelatedTypeId] AS [RelatedTypeId0], [r7].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId1], [r7].[RelatedTypeId] AS [RelatedTypeId1], [r7].[Id] AS [Id0], [r7].[Int] AS [Int0], [r7].[Ints] AS [Ints0], [r7].[Name] AS [Name0], [r7].[String] AS [String0], [r5].[Id] AS [Id1], [r5].[Int] AS [Int1], [r5].[Ints] AS [Ints1], [r5].[Name] AS [Name1], [r5].[String] AS [String1], [r6].[Id] AS [Id2], [r6].[Int] AS [Int2], [r6].[Ints] AS [Ints2], [r6].[Name] AS [Name2], [r6].[String] AS [String2] FROM [RelatedCollection] AS [r4] LEFT JOIN [RelatedCollection_OptionalNested] AS [r5] ON [r4].[RootEntityId] = [r5].[RelatedTypeRootEntityId] AND [r4].[Id] = [r5].[RelatedTypeId] LEFT JOIN [RelatedCollection_RequiredNested] AS [r6] ON [r4].[RootEntityId] = [r6].[RelatedTypeRootEntityId] AND [r4].[Id] = [r6].[RelatedTypeId] @@ -43,7 +43,7 @@ public override async Task Where() AssertSql( """ -SELECT [r].[Id], [r].[Name], [o].[RootEntityId], [o].[Id], [o].[Int], [o].[Name], [o].[String], [o0].[RelatedTypeRootEntityId], [o1].[RelatedTypeRootEntityId], [r1].[RootEntityId], [r2].[RelatedTypeRootEntityId], [r3].[RelatedTypeRootEntityId], [o2].[RelatedTypeRootEntityId], [o2].[Id], [o2].[Int], [o2].[Name], [o2].[String], [o0].[Id], [o0].[Int], [o0].[Name], [o0].[String], [o1].[Id], [o1].[Int], [o1].[Name], [o1].[String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[RelatedTypeRootEntityId0], [s].[RelatedTypeId0], [s].[RelatedTypeRootEntityId1], [s].[RelatedTypeId1], [s].[Id0], [s].[Int0], [s].[Name0], [s].[String0], [s].[Id1], [s].[Int1], [s].[Name1], [s].[String1], [s].[Id2], [s].[Int2], [s].[Name2], [s].[String2], [r1].[Id], [r1].[Int], [r1].[Name], [r1].[String], [r8].[RelatedTypeRootEntityId], [r8].[Id], [r8].[Int], [r8].[Name], [r8].[String], [r2].[Id], [r2].[Int], [r2].[Name], [r2].[String], [r3].[Id], [r3].[Int], [r3].[Name], [r3].[String] +SELECT [r].[Id], [r].[Name], [o].[RootEntityId], [o].[Id], [o].[Int], [o].[Ints], [o].[Name], [o].[String], [o0].[RelatedTypeRootEntityId], [o1].[RelatedTypeRootEntityId], [r1].[RootEntityId], [r2].[RelatedTypeRootEntityId], [r3].[RelatedTypeRootEntityId], [o2].[RelatedTypeRootEntityId], [o2].[Id], [o2].[Int], [o2].[Ints], [o2].[Name], [o2].[String], [o0].[Id], [o0].[Int], [o0].[Ints], [o0].[Name], [o0].[String], [o1].[Id], [o1].[Int], [o1].[Ints], [o1].[Name], [o1].[String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Ints], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[RelatedTypeRootEntityId0], [s].[RelatedTypeId0], [s].[RelatedTypeRootEntityId1], [s].[RelatedTypeId1], [s].[Id0], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[Id1], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[Id2], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r1].[Id], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[String], [r8].[RelatedTypeRootEntityId], [r8].[Id], [r8].[Int], [r8].[Ints], [r8].[Name], [r8].[String], [r2].[Id], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[String], [r3].[Id], [r3].[Int], [r3].[Ints], [r3].[Name], [r3].[String] FROM [RootEntity] AS [r] LEFT JOIN [OptionalRelated] AS [o] ON [r].[Id] = [o].[RootEntityId] LEFT JOIN [OptionalRelated_OptionalNested] AS [o0] ON [o].[RootEntityId] = [o0].[RelatedTypeRootEntityId] @@ -53,7 +53,7 @@ FROM [RootEntity] AS [r] LEFT JOIN [RequiredRelated_RequiredNested] AS [r3] ON [r1].[RootEntityId] = [r3].[RelatedTypeRootEntityId] LEFT JOIN [OptionalRelated_NestedCollection] AS [o2] ON [o].[RootEntityId] = [o2].[RelatedTypeRootEntityId] LEFT JOIN ( - SELECT [r4].[RootEntityId], [r4].[Id], [r4].[Int], [r4].[Name], [r4].[String], [r5].[RelatedTypeRootEntityId], [r5].[RelatedTypeId], [r6].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId0], [r6].[RelatedTypeId] AS [RelatedTypeId0], [r7].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId1], [r7].[RelatedTypeId] AS [RelatedTypeId1], [r7].[Id] AS [Id0], [r7].[Int] AS [Int0], [r7].[Name] AS [Name0], [r7].[String] AS [String0], [r5].[Id] AS [Id1], [r5].[Int] AS [Int1], [r5].[Name] AS [Name1], [r5].[String] AS [String1], [r6].[Id] AS [Id2], [r6].[Int] AS [Int2], [r6].[Name] AS [Name2], [r6].[String] AS [String2] + SELECT [r4].[RootEntityId], [r4].[Id], [r4].[Int], [r4].[Ints], [r4].[Name], [r4].[String], [r5].[RelatedTypeRootEntityId], [r5].[RelatedTypeId], [r6].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId0], [r6].[RelatedTypeId] AS [RelatedTypeId0], [r7].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId1], [r7].[RelatedTypeId] AS [RelatedTypeId1], [r7].[Id] AS [Id0], [r7].[Int] AS [Int0], [r7].[Ints] AS [Ints0], [r7].[Name] AS [Name0], [r7].[String] AS [String0], [r5].[Id] AS [Id1], [r5].[Int] AS [Int1], [r5].[Ints] AS [Ints1], [r5].[Name] AS [Name1], [r5].[String] AS [String1], [r6].[Id] AS [Id2], [r6].[Int] AS [Int2], [r6].[Ints] AS [Ints2], [r6].[Name] AS [Name2], [r6].[String] AS [String2] FROM [RelatedCollection] AS [r4] LEFT JOIN [RelatedCollection_OptionalNested] AS [r5] ON [r4].[RootEntityId] = [r5].[RelatedTypeRootEntityId] AND [r4].[Id] = [r5].[RelatedTypeId] LEFT JOIN [RelatedCollection_RequiredNested] AS [r6] ON [r4].[RootEntityId] = [r6].[RelatedTypeRootEntityId] AND [r4].[Id] = [r6].[RelatedTypeId] @@ -74,7 +74,7 @@ public override async Task OrderBy_ElementAt() AssertSql( """ -SELECT [r].[Id], [r].[Name], [o].[RootEntityId], [o].[Id], [o].[Int], [o].[Name], [o].[String], [o0].[RelatedTypeRootEntityId], [o1].[RelatedTypeRootEntityId], [r1].[RootEntityId], [r2].[RelatedTypeRootEntityId], [r3].[RelatedTypeRootEntityId], [o2].[RelatedTypeRootEntityId], [o2].[Id], [o2].[Int], [o2].[Name], [o2].[String], [o0].[Id], [o0].[Int], [o0].[Name], [o0].[String], [o1].[Id], [o1].[Int], [o1].[Name], [o1].[String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[RelatedTypeRootEntityId0], [s].[RelatedTypeId0], [s].[RelatedTypeRootEntityId1], [s].[RelatedTypeId1], [s].[Id0], [s].[Int0], [s].[Name0], [s].[String0], [s].[Id1], [s].[Int1], [s].[Name1], [s].[String1], [s].[Id2], [s].[Int2], [s].[Name2], [s].[String2], [r1].[Id], [r1].[Int], [r1].[Name], [r1].[String], [r8].[RelatedTypeRootEntityId], [r8].[Id], [r8].[Int], [r8].[Name], [r8].[String], [r2].[Id], [r2].[Int], [r2].[Name], [r2].[String], [r3].[Id], [r3].[Int], [r3].[Name], [r3].[String] +SELECT [r].[Id], [r].[Name], [o].[RootEntityId], [o].[Id], [o].[Int], [o].[Ints], [o].[Name], [o].[String], [o0].[RelatedTypeRootEntityId], [o1].[RelatedTypeRootEntityId], [r1].[RootEntityId], [r2].[RelatedTypeRootEntityId], [r3].[RelatedTypeRootEntityId], [o2].[RelatedTypeRootEntityId], [o2].[Id], [o2].[Int], [o2].[Ints], [o2].[Name], [o2].[String], [o0].[Id], [o0].[Int], [o0].[Ints], [o0].[Name], [o0].[String], [o1].[Id], [o1].[Int], [o1].[Ints], [o1].[Name], [o1].[String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Ints], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[RelatedTypeRootEntityId0], [s].[RelatedTypeId0], [s].[RelatedTypeRootEntityId1], [s].[RelatedTypeId1], [s].[Id0], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[Id1], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[Id2], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r1].[Id], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[String], [r8].[RelatedTypeRootEntityId], [r8].[Id], [r8].[Int], [r8].[Ints], [r8].[Name], [r8].[String], [r2].[Id], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[String], [r3].[Id], [r3].[Int], [r3].[Ints], [r3].[Name], [r3].[String] FROM [RootEntity] AS [r] LEFT JOIN [OptionalRelated] AS [o] ON [r].[Id] = [o].[RootEntityId] LEFT JOIN [OptionalRelated_OptionalNested] AS [o0] ON [o].[RootEntityId] = [o0].[RelatedTypeRootEntityId] @@ -84,7 +84,7 @@ FROM [RootEntity] AS [r] LEFT JOIN [RequiredRelated_RequiredNested] AS [r3] ON [r1].[RootEntityId] = [r3].[RelatedTypeRootEntityId] LEFT JOIN [OptionalRelated_NestedCollection] AS [o2] ON [o].[RootEntityId] = [o2].[RelatedTypeRootEntityId] LEFT JOIN ( - SELECT [r4].[RootEntityId], [r4].[Id], [r4].[Int], [r4].[Name], [r4].[String], [r5].[RelatedTypeRootEntityId], [r5].[RelatedTypeId], [r6].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId0], [r6].[RelatedTypeId] AS [RelatedTypeId0], [r7].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId1], [r7].[RelatedTypeId] AS [RelatedTypeId1], [r7].[Id] AS [Id0], [r7].[Int] AS [Int0], [r7].[Name] AS [Name0], [r7].[String] AS [String0], [r5].[Id] AS [Id1], [r5].[Int] AS [Int1], [r5].[Name] AS [Name1], [r5].[String] AS [String1], [r6].[Id] AS [Id2], [r6].[Int] AS [Int2], [r6].[Name] AS [Name2], [r6].[String] AS [String2] + SELECT [r4].[RootEntityId], [r4].[Id], [r4].[Int], [r4].[Ints], [r4].[Name], [r4].[String], [r5].[RelatedTypeRootEntityId], [r5].[RelatedTypeId], [r6].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId0], [r6].[RelatedTypeId] AS [RelatedTypeId0], [r7].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId1], [r7].[RelatedTypeId] AS [RelatedTypeId1], [r7].[Id] AS [Id0], [r7].[Int] AS [Int0], [r7].[Ints] AS [Ints0], [r7].[Name] AS [Name0], [r7].[String] AS [String0], [r5].[Id] AS [Id1], [r5].[Int] AS [Int1], [r5].[Ints] AS [Ints1], [r5].[Name] AS [Name1], [r5].[String] AS [String1], [r6].[Id] AS [Id2], [r6].[Int] AS [Int2], [r6].[Ints] AS [Ints2], [r6].[Name] AS [Name2], [r6].[String] AS [String2] FROM [RelatedCollection] AS [r4] LEFT JOIN [RelatedCollection_OptionalNested] AS [r5] ON [r4].[RootEntityId] = [r5].[RelatedTypeRootEntityId] AND [r4].[Id] = [r5].[RelatedTypeId] LEFT JOIN [RelatedCollection_RequiredNested] AS [r6] ON [r4].[RootEntityId] = [r6].[RelatedTypeRootEntityId] AND [r4].[Id] = [r6].[RelatedTypeId] @@ -109,7 +109,7 @@ public override async Task Distinct() AssertSql( """ -SELECT [r].[Id], [r].[Name], [o].[RootEntityId], [o].[Id], [o].[Int], [o].[Name], [o].[String], [o0].[RelatedTypeRootEntityId], [o1].[RelatedTypeRootEntityId], [r2].[RootEntityId], [r3].[RelatedTypeRootEntityId], [r4].[RelatedTypeRootEntityId], [o2].[RelatedTypeRootEntityId], [o2].[Id], [o2].[Int], [o2].[Name], [o2].[String], [o0].[Id], [o0].[Int], [o0].[Name], [o0].[String], [o1].[Id], [o1].[Int], [o1].[Name], [o1].[String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[RelatedTypeRootEntityId0], [s].[RelatedTypeId0], [s].[RelatedTypeRootEntityId1], [s].[RelatedTypeId1], [s].[Id0], [s].[Int0], [s].[Name0], [s].[String0], [s].[Id1], [s].[Int1], [s].[Name1], [s].[String1], [s].[Id2], [s].[Int2], [s].[Name2], [s].[String2], [r2].[Id], [r2].[Int], [r2].[Name], [r2].[String], [r9].[RelatedTypeRootEntityId], [r9].[Id], [r9].[Int], [r9].[Name], [r9].[String], [r3].[Id], [r3].[Int], [r3].[Name], [r3].[String], [r4].[Id], [r4].[Int], [r4].[Name], [r4].[String] +SELECT [r].[Id], [r].[Name], [o].[RootEntityId], [o].[Id], [o].[Int], [o].[Ints], [o].[Name], [o].[String], [o0].[RelatedTypeRootEntityId], [o1].[RelatedTypeRootEntityId], [r2].[RootEntityId], [r3].[RelatedTypeRootEntityId], [r4].[RelatedTypeRootEntityId], [o2].[RelatedTypeRootEntityId], [o2].[Id], [o2].[Int], [o2].[Ints], [o2].[Name], [o2].[String], [o0].[Id], [o0].[Int], [o0].[Ints], [o0].[Name], [o0].[String], [o1].[Id], [o1].[Int], [o1].[Ints], [o1].[Name], [o1].[String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Ints], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[RelatedTypeRootEntityId0], [s].[RelatedTypeId0], [s].[RelatedTypeRootEntityId1], [s].[RelatedTypeId1], [s].[Id0], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[Id1], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[Id2], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r2].[Id], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[String], [r9].[RelatedTypeRootEntityId], [r9].[Id], [r9].[Int], [r9].[Ints], [r9].[Name], [r9].[String], [r3].[Id], [r3].[Int], [r3].[Ints], [r3].[Name], [r3].[String], [r4].[Id], [r4].[Int], [r4].[Ints], [r4].[Name], [r4].[String] FROM [RootEntity] AS [r] LEFT JOIN [OptionalRelated] AS [o] ON [r].[Id] = [o].[RootEntityId] LEFT JOIN [OptionalRelated_OptionalNested] AS [o0] ON [o].[RootEntityId] = [o0].[RelatedTypeRootEntityId] @@ -119,7 +119,7 @@ FROM [RootEntity] AS [r] LEFT JOIN [RequiredRelated_RequiredNested] AS [r4] ON [r2].[RootEntityId] = [r4].[RelatedTypeRootEntityId] LEFT JOIN [OptionalRelated_NestedCollection] AS [o2] ON [o].[RootEntityId] = [o2].[RelatedTypeRootEntityId] LEFT JOIN ( - SELECT [r5].[RootEntityId], [r5].[Id], [r5].[Int], [r5].[Name], [r5].[String], [r6].[RelatedTypeRootEntityId], [r6].[RelatedTypeId], [r7].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId0], [r7].[RelatedTypeId] AS [RelatedTypeId0], [r8].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId1], [r8].[RelatedTypeId] AS [RelatedTypeId1], [r8].[Id] AS [Id0], [r8].[Int] AS [Int0], [r8].[Name] AS [Name0], [r8].[String] AS [String0], [r6].[Id] AS [Id1], [r6].[Int] AS [Int1], [r6].[Name] AS [Name1], [r6].[String] AS [String1], [r7].[Id] AS [Id2], [r7].[Int] AS [Int2], [r7].[Name] AS [Name2], [r7].[String] AS [String2] + SELECT [r5].[RootEntityId], [r5].[Id], [r5].[Int], [r5].[Ints], [r5].[Name], [r5].[String], [r6].[RelatedTypeRootEntityId], [r6].[RelatedTypeId], [r7].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId0], [r7].[RelatedTypeId] AS [RelatedTypeId0], [r8].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId1], [r8].[RelatedTypeId] AS [RelatedTypeId1], [r8].[Id] AS [Id0], [r8].[Int] AS [Int0], [r8].[Ints] AS [Ints0], [r8].[Name] AS [Name0], [r8].[String] AS [String0], [r6].[Id] AS [Id1], [r6].[Int] AS [Int1], [r6].[Ints] AS [Ints1], [r6].[Name] AS [Name1], [r6].[String] AS [String1], [r7].[Id] AS [Id2], [r7].[Int] AS [Int2], [r7].[Ints] AS [Ints2], [r7].[Name] AS [Name2], [r7].[String] AS [String2] FROM [RelatedCollection] AS [r5] LEFT JOIN [RelatedCollection_OptionalNested] AS [r6] ON [r5].[RootEntityId] = [r6].[RelatedTypeRootEntityId] AND [r5].[Id] = [r6].[RelatedTypeId] LEFT JOIN [RelatedCollection_RequiredNested] AS [r7] ON [r5].[RootEntityId] = [r7].[RelatedTypeRootEntityId] AND [r5].[Id] = [r7].[RelatedTypeId] @@ -129,7 +129,7 @@ FROM [RelatedCollection] AS [r5] WHERE ( SELECT COUNT(*) FROM ( - SELECT DISTINCT [r0].[RootEntityId], [r0].[Id], [r0].[Int], [r0].[Name], [r0].[String] + SELECT DISTINCT [r0].[RootEntityId], [r0].[Id], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[String] FROM [RelatedCollection] AS [r0] WHERE [r].[Id] = [r0].[RootEntityId] ) AS [r1]) = 2 @@ -145,12 +145,12 @@ public override async Task Distinct_projected(QueryTrackingBehavior queryTrackin { AssertSql( """ -SELECT [r].[Id], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[Id0], [s].[Int0], [s].[Name0], [s].[String0], [s].[RelatedTypeRootEntityId0], [s].[RelatedTypeId0], [s].[Id00], [s].[Int00], [s].[Name00], [s].[String00], [s].[RelatedTypeRootEntityId00], [s].[RelatedTypeId00], [s].[Id1], [s].[Int1], [s].[Name1], [s].[String1] +SELECT [r].[Id], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Ints], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[Id0], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[RelatedTypeRootEntityId0], [s].[RelatedTypeId0], [s].[Id00], [s].[Int00], [s].[Ints00], [s].[Name00], [s].[String00], [s].[RelatedTypeRootEntityId00], [s].[RelatedTypeId00], [s].[Id1], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1] FROM [RootEntity] AS [r] OUTER APPLY ( - SELECT [r1].[RootEntityId], [r1].[Id], [r1].[Int], [r1].[Name], [r1].[String], [r4].[RelatedTypeRootEntityId], [r4].[RelatedTypeId], [r4].[Id] AS [Id0], [r4].[Int] AS [Int0], [r4].[Name] AS [Name0], [r4].[String] AS [String0], [r1].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId0], [r1].[RelatedTypeId] AS [RelatedTypeId0], [r1].[Id0] AS [Id00], [r1].[Int0] AS [Int00], [r1].[Name0] AS [Name00], [r1].[String0] AS [String00], [r1].[RelatedTypeRootEntityId0] AS [RelatedTypeRootEntityId00], [r1].[RelatedTypeId0] AS [RelatedTypeId00], [r1].[Id1], [r1].[Int1], [r1].[Name1], [r1].[String1] + SELECT [r1].[RootEntityId], [r1].[Id], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[String], [r4].[RelatedTypeRootEntityId], [r4].[RelatedTypeId], [r4].[Id] AS [Id0], [r4].[Int] AS [Int0], [r4].[Ints] AS [Ints0], [r4].[Name] AS [Name0], [r4].[String] AS [String0], [r1].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId0], [r1].[RelatedTypeId] AS [RelatedTypeId0], [r1].[Id0] AS [Id00], [r1].[Int0] AS [Int00], [r1].[Ints0] AS [Ints00], [r1].[Name0] AS [Name00], [r1].[String0] AS [String00], [r1].[RelatedTypeRootEntityId0] AS [RelatedTypeRootEntityId00], [r1].[RelatedTypeId0] AS [RelatedTypeId00], [r1].[Id1], [r1].[Int1], [r1].[Ints1], [r1].[Name1], [r1].[String1] FROM ( - SELECT DISTINCT [r0].[RootEntityId], [r0].[Id], [r0].[Int], [r0].[Name], [r0].[String], [r2].[RelatedTypeRootEntityId], [r2].[RelatedTypeId], [r2].[Id] AS [Id0], [r2].[Int] AS [Int0], [r2].[Name] AS [Name0], [r2].[String] AS [String0], [r3].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId0], [r3].[RelatedTypeId] AS [RelatedTypeId0], [r3].[Id] AS [Id1], [r3].[Int] AS [Int1], [r3].[Name] AS [Name1], [r3].[String] AS [String1] + SELECT DISTINCT [r0].[RootEntityId], [r0].[Id], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[String], [r2].[RelatedTypeRootEntityId], [r2].[RelatedTypeId], [r2].[Id] AS [Id0], [r2].[Int] AS [Int0], [r2].[Ints] AS [Ints0], [r2].[Name] AS [Name0], [r2].[String] AS [String0], [r3].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId0], [r3].[RelatedTypeId] AS [RelatedTypeId0], [r3].[Id] AS [Id1], [r3].[Int] AS [Int1], [r3].[Ints] AS [Ints1], [r3].[Name] AS [Name1], [r3].[String] AS [String1] FROM [RelatedCollection] AS [r0] LEFT JOIN [RelatedCollection_OptionalNested] AS [r2] ON [r0].[RootEntityId] = [r2].[RelatedTypeRootEntityId] AND [r0].[Id] = [r2].[RelatedTypeId] LEFT JOIN [RelatedCollection_RequiredNested] AS [r3] ON [r0].[RootEntityId] = [r3].[RelatedTypeRootEntityId] AND [r0].[Id] = [r3].[RelatedTypeId] @@ -220,7 +220,7 @@ public override async Task GroupBy() AssertSql( """ -SELECT [r].[Id], [r].[Name], [o].[RootEntityId], [o].[Id], [o].[Int], [o].[Name], [o].[String], [o0].[RelatedTypeRootEntityId], [o1].[RelatedTypeRootEntityId], [r1].[RootEntityId], [r2].[RelatedTypeRootEntityId], [r3].[RelatedTypeRootEntityId], [o2].[RelatedTypeRootEntityId], [o2].[Id], [o2].[Int], [o2].[Name], [o2].[String], [o0].[Id], [o0].[Int], [o0].[Name], [o0].[String], [o1].[Id], [o1].[Int], [o1].[Name], [o1].[String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[RelatedTypeRootEntityId0], [s].[RelatedTypeId0], [s].[RelatedTypeRootEntityId1], [s].[RelatedTypeId1], [s].[Id0], [s].[Int0], [s].[Name0], [s].[String0], [s].[Id1], [s].[Int1], [s].[Name1], [s].[String1], [s].[Id2], [s].[Int2], [s].[Name2], [s].[String2], [r1].[Id], [r1].[Int], [r1].[Name], [r1].[String], [r8].[RelatedTypeRootEntityId], [r8].[Id], [r8].[Int], [r8].[Name], [r8].[String], [r2].[Id], [r2].[Int], [r2].[Name], [r2].[String], [r3].[Id], [r3].[Int], [r3].[Name], [r3].[String] +SELECT [r].[Id], [r].[Name], [o].[RootEntityId], [o].[Id], [o].[Int], [o].[Ints], [o].[Name], [o].[String], [o0].[RelatedTypeRootEntityId], [o1].[RelatedTypeRootEntityId], [r1].[RootEntityId], [r2].[RelatedTypeRootEntityId], [r3].[RelatedTypeRootEntityId], [o2].[RelatedTypeRootEntityId], [o2].[Id], [o2].[Int], [o2].[Ints], [o2].[Name], [o2].[String], [o0].[Id], [o0].[Int], [o0].[Ints], [o0].[Name], [o0].[String], [o1].[Id], [o1].[Int], [o1].[Ints], [o1].[Name], [o1].[String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Ints], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[RelatedTypeRootEntityId0], [s].[RelatedTypeId0], [s].[RelatedTypeRootEntityId1], [s].[RelatedTypeId1], [s].[Id0], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[Id1], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[Id2], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r1].[Id], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[String], [r8].[RelatedTypeRootEntityId], [r8].[Id], [r8].[Int], [r8].[Ints], [r8].[Name], [r8].[String], [r2].[Id], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[String], [r3].[Id], [r3].[Int], [r3].[Ints], [r3].[Name], [r3].[String] FROM [RootEntity] AS [r] LEFT JOIN [OptionalRelated] AS [o] ON [r].[Id] = [o].[RootEntityId] LEFT JOIN [OptionalRelated_OptionalNested] AS [o0] ON [o].[RootEntityId] = [o0].[RelatedTypeRootEntityId] @@ -230,7 +230,7 @@ FROM [RootEntity] AS [r] LEFT JOIN [RequiredRelated_RequiredNested] AS [r3] ON [r1].[RootEntityId] = [r3].[RelatedTypeRootEntityId] LEFT JOIN [OptionalRelated_NestedCollection] AS [o2] ON [o].[RootEntityId] = [o2].[RelatedTypeRootEntityId] LEFT JOIN ( - SELECT [r4].[RootEntityId], [r4].[Id], [r4].[Int], [r4].[Name], [r4].[String], [r5].[RelatedTypeRootEntityId], [r5].[RelatedTypeId], [r6].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId0], [r6].[RelatedTypeId] AS [RelatedTypeId0], [r7].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId1], [r7].[RelatedTypeId] AS [RelatedTypeId1], [r7].[Id] AS [Id0], [r7].[Int] AS [Int0], [r7].[Name] AS [Name0], [r7].[String] AS [String0], [r5].[Id] AS [Id1], [r5].[Int] AS [Int1], [r5].[Name] AS [Name1], [r5].[String] AS [String1], [r6].[Id] AS [Id2], [r6].[Int] AS [Int2], [r6].[Name] AS [Name2], [r6].[String] AS [String2] + SELECT [r4].[RootEntityId], [r4].[Id], [r4].[Int], [r4].[Ints], [r4].[Name], [r4].[String], [r5].[RelatedTypeRootEntityId], [r5].[RelatedTypeId], [r6].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId0], [r6].[RelatedTypeId] AS [RelatedTypeId0], [r7].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId1], [r7].[RelatedTypeId] AS [RelatedTypeId1], [r7].[Id] AS [Id0], [r7].[Int] AS [Int0], [r7].[Ints] AS [Ints0], [r7].[Name] AS [Name0], [r7].[String] AS [String0], [r5].[Id] AS [Id1], [r5].[Int] AS [Int1], [r5].[Ints] AS [Ints1], [r5].[Name] AS [Name1], [r5].[String] AS [String1], [r6].[Id] AS [Id2], [r6].[Int] AS [Int2], [r6].[Ints] AS [Ints2], [r6].[Name] AS [Name2], [r6].[String] AS [String2] FROM [RelatedCollection] AS [r4] LEFT JOIN [RelatedCollection_OptionalNested] AS [r5] ON [r4].[RootEntityId] = [r5].[RelatedTypeRootEntityId] AND [r4].[Id] = [r5].[RelatedTypeId] LEFT JOIN [RelatedCollection_RequiredNested] AS [r6] ON [r4].[RootEntityId] = [r6].[RelatedTypeRootEntityId] AND [r4].[Id] = [r6].[RelatedTypeId] diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/Associations/OwnedNavigations/OwnedNavigationsMiscellaneousSqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/Associations/OwnedNavigations/OwnedNavigationsMiscellaneousSqlServerTest.cs index 0784ddec1c9..b32e1c58db2 100644 --- a/test/EFCore.SqlServer.FunctionalTests/Query/Associations/OwnedNavigations/OwnedNavigationsMiscellaneousSqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/Query/Associations/OwnedNavigations/OwnedNavigationsMiscellaneousSqlServerTest.cs @@ -16,7 +16,7 @@ public override async Task Where_related_property() AssertSql( """ -SELECT [r].[Id], [r].[Name], [o].[RootEntityId], [o].[Id], [o].[Int], [o].[Name], [o].[String], [r0].[RootEntityId], [o0].[RelatedTypeRootEntityId], [o1].[RelatedTypeRootEntityId], [r1].[RelatedTypeRootEntityId], [r2].[RelatedTypeRootEntityId], [o2].[RelatedTypeRootEntityId], [o2].[Id], [o2].[Int], [o2].[Name], [o2].[String], [o0].[Id], [o0].[Int], [o0].[Name], [o0].[String], [o1].[Id], [o1].[Int], [o1].[Name], [o1].[String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[RelatedTypeRootEntityId0], [s].[RelatedTypeId0], [s].[RelatedTypeRootEntityId1], [s].[RelatedTypeId1], [s].[Id0], [s].[Int0], [s].[Name0], [s].[String0], [s].[Id1], [s].[Int1], [s].[Name1], [s].[String1], [s].[Id2], [s].[Int2], [s].[Name2], [s].[String2], [r0].[Id], [r0].[Int], [r0].[Name], [r0].[String], [r7].[RelatedTypeRootEntityId], [r7].[Id], [r7].[Int], [r7].[Name], [r7].[String], [r1].[Id], [r1].[Int], [r1].[Name], [r1].[String], [r2].[Id], [r2].[Int], [r2].[Name], [r2].[String] +SELECT [r].[Id], [r].[Name], [o].[RootEntityId], [o].[Id], [o].[Int], [o].[Ints], [o].[Name], [o].[String], [r0].[RootEntityId], [o0].[RelatedTypeRootEntityId], [o1].[RelatedTypeRootEntityId], [r1].[RelatedTypeRootEntityId], [r2].[RelatedTypeRootEntityId], [o2].[RelatedTypeRootEntityId], [o2].[Id], [o2].[Int], [o2].[Ints], [o2].[Name], [o2].[String], [o0].[Id], [o0].[Int], [o0].[Ints], [o0].[Name], [o0].[String], [o1].[Id], [o1].[Int], [o1].[Ints], [o1].[Name], [o1].[String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Ints], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[RelatedTypeRootEntityId0], [s].[RelatedTypeId0], [s].[RelatedTypeRootEntityId1], [s].[RelatedTypeId1], [s].[Id0], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[Id1], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[Id2], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r0].[Id], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[String], [r7].[RelatedTypeRootEntityId], [r7].[Id], [r7].[Int], [r7].[Ints], [r7].[Name], [r7].[String], [r1].[Id], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[String], [r2].[Id], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[String] FROM [RootEntity] AS [r] LEFT JOIN [RequiredRelated] AS [r0] ON [r].[Id] = [r0].[RootEntityId] LEFT JOIN [OptionalRelated] AS [o] ON [r].[Id] = [o].[RootEntityId] @@ -26,7 +26,7 @@ FROM [RootEntity] AS [r] LEFT JOIN [RequiredRelated_RequiredNested] AS [r2] ON [r0].[RootEntityId] = [r2].[RelatedTypeRootEntityId] LEFT JOIN [OptionalRelated_NestedCollection] AS [o2] ON [o].[RootEntityId] = [o2].[RelatedTypeRootEntityId] LEFT JOIN ( - SELECT [r3].[RootEntityId], [r3].[Id], [r3].[Int], [r3].[Name], [r3].[String], [r4].[RelatedTypeRootEntityId], [r4].[RelatedTypeId], [r5].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId0], [r5].[RelatedTypeId] AS [RelatedTypeId0], [r6].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId1], [r6].[RelatedTypeId] AS [RelatedTypeId1], [r6].[Id] AS [Id0], [r6].[Int] AS [Int0], [r6].[Name] AS [Name0], [r6].[String] AS [String0], [r4].[Id] AS [Id1], [r4].[Int] AS [Int1], [r4].[Name] AS [Name1], [r4].[String] AS [String1], [r5].[Id] AS [Id2], [r5].[Int] AS [Int2], [r5].[Name] AS [Name2], [r5].[String] AS [String2] + SELECT [r3].[RootEntityId], [r3].[Id], [r3].[Int], [r3].[Ints], [r3].[Name], [r3].[String], [r4].[RelatedTypeRootEntityId], [r4].[RelatedTypeId], [r5].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId0], [r5].[RelatedTypeId] AS [RelatedTypeId0], [r6].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId1], [r6].[RelatedTypeId] AS [RelatedTypeId1], [r6].[Id] AS [Id0], [r6].[Int] AS [Int0], [r6].[Ints] AS [Ints0], [r6].[Name] AS [Name0], [r6].[String] AS [String0], [r4].[Id] AS [Id1], [r4].[Int] AS [Int1], [r4].[Ints] AS [Ints1], [r4].[Name] AS [Name1], [r4].[String] AS [String1], [r5].[Id] AS [Id2], [r5].[Int] AS [Int2], [r5].[Ints] AS [Ints2], [r5].[Name] AS [Name2], [r5].[String] AS [String2] FROM [RelatedCollection] AS [r3] LEFT JOIN [RelatedCollection_OptionalNested] AS [r4] ON [r3].[RootEntityId] = [r4].[RelatedTypeRootEntityId] AND [r3].[Id] = [r4].[RelatedTypeId] LEFT JOIN [RelatedCollection_RequiredNested] AS [r5] ON [r3].[RootEntityId] = [r5].[RelatedTypeRootEntityId] AND [r3].[Id] = [r5].[RelatedTypeId] @@ -44,7 +44,7 @@ public override async Task Where_optional_related_property() AssertSql( """ -SELECT [r].[Id], [r].[Name], [o].[RootEntityId], [o].[Id], [o].[Int], [o].[Name], [o].[String], [o0].[RelatedTypeRootEntityId], [o1].[RelatedTypeRootEntityId], [r0].[RootEntityId], [r1].[RelatedTypeRootEntityId], [r2].[RelatedTypeRootEntityId], [o2].[RelatedTypeRootEntityId], [o2].[Id], [o2].[Int], [o2].[Name], [o2].[String], [o0].[Id], [o0].[Int], [o0].[Name], [o0].[String], [o1].[Id], [o1].[Int], [o1].[Name], [o1].[String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[RelatedTypeRootEntityId0], [s].[RelatedTypeId0], [s].[RelatedTypeRootEntityId1], [s].[RelatedTypeId1], [s].[Id0], [s].[Int0], [s].[Name0], [s].[String0], [s].[Id1], [s].[Int1], [s].[Name1], [s].[String1], [s].[Id2], [s].[Int2], [s].[Name2], [s].[String2], [r0].[Id], [r0].[Int], [r0].[Name], [r0].[String], [r7].[RelatedTypeRootEntityId], [r7].[Id], [r7].[Int], [r7].[Name], [r7].[String], [r1].[Id], [r1].[Int], [r1].[Name], [r1].[String], [r2].[Id], [r2].[Int], [r2].[Name], [r2].[String] +SELECT [r].[Id], [r].[Name], [o].[RootEntityId], [o].[Id], [o].[Int], [o].[Ints], [o].[Name], [o].[String], [o0].[RelatedTypeRootEntityId], [o1].[RelatedTypeRootEntityId], [r0].[RootEntityId], [r1].[RelatedTypeRootEntityId], [r2].[RelatedTypeRootEntityId], [o2].[RelatedTypeRootEntityId], [o2].[Id], [o2].[Int], [o2].[Ints], [o2].[Name], [o2].[String], [o0].[Id], [o0].[Int], [o0].[Ints], [o0].[Name], [o0].[String], [o1].[Id], [o1].[Int], [o1].[Ints], [o1].[Name], [o1].[String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Ints], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[RelatedTypeRootEntityId0], [s].[RelatedTypeId0], [s].[RelatedTypeRootEntityId1], [s].[RelatedTypeId1], [s].[Id0], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[Id1], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[Id2], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r0].[Id], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[String], [r7].[RelatedTypeRootEntityId], [r7].[Id], [r7].[Int], [r7].[Ints], [r7].[Name], [r7].[String], [r1].[Id], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[String], [r2].[Id], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[String] FROM [RootEntity] AS [r] LEFT JOIN [OptionalRelated] AS [o] ON [r].[Id] = [o].[RootEntityId] LEFT JOIN [OptionalRelated_OptionalNested] AS [o0] ON [o].[RootEntityId] = [o0].[RelatedTypeRootEntityId] @@ -54,7 +54,7 @@ FROM [RootEntity] AS [r] LEFT JOIN [RequiredRelated_RequiredNested] AS [r2] ON [r0].[RootEntityId] = [r2].[RelatedTypeRootEntityId] LEFT JOIN [OptionalRelated_NestedCollection] AS [o2] ON [o].[RootEntityId] = [o2].[RelatedTypeRootEntityId] LEFT JOIN ( - SELECT [r3].[RootEntityId], [r3].[Id], [r3].[Int], [r3].[Name], [r3].[String], [r4].[RelatedTypeRootEntityId], [r4].[RelatedTypeId], [r5].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId0], [r5].[RelatedTypeId] AS [RelatedTypeId0], [r6].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId1], [r6].[RelatedTypeId] AS [RelatedTypeId1], [r6].[Id] AS [Id0], [r6].[Int] AS [Int0], [r6].[Name] AS [Name0], [r6].[String] AS [String0], [r4].[Id] AS [Id1], [r4].[Int] AS [Int1], [r4].[Name] AS [Name1], [r4].[String] AS [String1], [r5].[Id] AS [Id2], [r5].[Int] AS [Int2], [r5].[Name] AS [Name2], [r5].[String] AS [String2] + SELECT [r3].[RootEntityId], [r3].[Id], [r3].[Int], [r3].[Ints], [r3].[Name], [r3].[String], [r4].[RelatedTypeRootEntityId], [r4].[RelatedTypeId], [r5].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId0], [r5].[RelatedTypeId] AS [RelatedTypeId0], [r6].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId1], [r6].[RelatedTypeId] AS [RelatedTypeId1], [r6].[Id] AS [Id0], [r6].[Int] AS [Int0], [r6].[Ints] AS [Ints0], [r6].[Name] AS [Name0], [r6].[String] AS [String0], [r4].[Id] AS [Id1], [r4].[Int] AS [Int1], [r4].[Ints] AS [Ints1], [r4].[Name] AS [Name1], [r4].[String] AS [String1], [r5].[Id] AS [Id2], [r5].[Int] AS [Int2], [r5].[Ints] AS [Ints2], [r5].[Name] AS [Name2], [r5].[String] AS [String2] FROM [RelatedCollection] AS [r3] LEFT JOIN [RelatedCollection_OptionalNested] AS [r4] ON [r3].[RootEntityId] = [r4].[RelatedTypeRootEntityId] AND [r3].[Id] = [r4].[RelatedTypeId] LEFT JOIN [RelatedCollection_RequiredNested] AS [r5] ON [r3].[RootEntityId] = [r5].[RelatedTypeRootEntityId] AND [r3].[Id] = [r5].[RelatedTypeId] @@ -72,7 +72,7 @@ public override async Task Where_nested_related_property() AssertSql( """ -SELECT [r].[Id], [r].[Name], [o].[RootEntityId], [o].[Id], [o].[Int], [o].[Name], [o].[String], [r0].[RootEntityId], [r1].[RelatedTypeRootEntityId], [o0].[RelatedTypeRootEntityId], [o1].[RelatedTypeRootEntityId], [r2].[RelatedTypeRootEntityId], [o2].[RelatedTypeRootEntityId], [o2].[Id], [o2].[Int], [o2].[Name], [o2].[String], [o0].[Id], [o0].[Int], [o0].[Name], [o0].[String], [o1].[Id], [o1].[Int], [o1].[Name], [o1].[String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[RelatedTypeRootEntityId0], [s].[RelatedTypeId0], [s].[RelatedTypeRootEntityId1], [s].[RelatedTypeId1], [s].[Id0], [s].[Int0], [s].[Name0], [s].[String0], [s].[Id1], [s].[Int1], [s].[Name1], [s].[String1], [s].[Id2], [s].[Int2], [s].[Name2], [s].[String2], [r0].[Id], [r0].[Int], [r0].[Name], [r0].[String], [r7].[RelatedTypeRootEntityId], [r7].[Id], [r7].[Int], [r7].[Name], [r7].[String], [r2].[Id], [r2].[Int], [r2].[Name], [r2].[String], [r1].[Id], [r1].[Int], [r1].[Name], [r1].[String] +SELECT [r].[Id], [r].[Name], [o].[RootEntityId], [o].[Id], [o].[Int], [o].[Ints], [o].[Name], [o].[String], [r0].[RootEntityId], [r1].[RelatedTypeRootEntityId], [o0].[RelatedTypeRootEntityId], [o1].[RelatedTypeRootEntityId], [r2].[RelatedTypeRootEntityId], [o2].[RelatedTypeRootEntityId], [o2].[Id], [o2].[Int], [o2].[Ints], [o2].[Name], [o2].[String], [o0].[Id], [o0].[Int], [o0].[Ints], [o0].[Name], [o0].[String], [o1].[Id], [o1].[Int], [o1].[Ints], [o1].[Name], [o1].[String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Ints], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[RelatedTypeRootEntityId0], [s].[RelatedTypeId0], [s].[RelatedTypeRootEntityId1], [s].[RelatedTypeId1], [s].[Id0], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[Id1], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[Id2], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r0].[Id], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[String], [r7].[RelatedTypeRootEntityId], [r7].[Id], [r7].[Int], [r7].[Ints], [r7].[Name], [r7].[String], [r2].[Id], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[String], [r1].[Id], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[String] FROM [RootEntity] AS [r] LEFT JOIN [RequiredRelated] AS [r0] ON [r].[Id] = [r0].[RootEntityId] LEFT JOIN [RequiredRelated_RequiredNested] AS [r1] ON [r0].[RootEntityId] = [r1].[RelatedTypeRootEntityId] @@ -82,7 +82,7 @@ FROM [RootEntity] AS [r] LEFT JOIN [RequiredRelated_OptionalNested] AS [r2] ON [r0].[RootEntityId] = [r2].[RelatedTypeRootEntityId] LEFT JOIN [OptionalRelated_NestedCollection] AS [o2] ON [o].[RootEntityId] = [o2].[RelatedTypeRootEntityId] LEFT JOIN ( - SELECT [r3].[RootEntityId], [r3].[Id], [r3].[Int], [r3].[Name], [r3].[String], [r4].[RelatedTypeRootEntityId], [r4].[RelatedTypeId], [r5].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId0], [r5].[RelatedTypeId] AS [RelatedTypeId0], [r6].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId1], [r6].[RelatedTypeId] AS [RelatedTypeId1], [r6].[Id] AS [Id0], [r6].[Int] AS [Int0], [r6].[Name] AS [Name0], [r6].[String] AS [String0], [r4].[Id] AS [Id1], [r4].[Int] AS [Int1], [r4].[Name] AS [Name1], [r4].[String] AS [String1], [r5].[Id] AS [Id2], [r5].[Int] AS [Int2], [r5].[Name] AS [Name2], [r5].[String] AS [String2] + SELECT [r3].[RootEntityId], [r3].[Id], [r3].[Int], [r3].[Ints], [r3].[Name], [r3].[String], [r4].[RelatedTypeRootEntityId], [r4].[RelatedTypeId], [r5].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId0], [r5].[RelatedTypeId] AS [RelatedTypeId0], [r6].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId1], [r6].[RelatedTypeId] AS [RelatedTypeId1], [r6].[Id] AS [Id0], [r6].[Int] AS [Int0], [r6].[Ints] AS [Ints0], [r6].[Name] AS [Name0], [r6].[String] AS [String0], [r4].[Id] AS [Id1], [r4].[Int] AS [Int1], [r4].[Ints] AS [Ints1], [r4].[Name] AS [Name1], [r4].[String] AS [String1], [r5].[Id] AS [Id2], [r5].[Int] AS [Int2], [r5].[Ints] AS [Ints2], [r5].[Name] AS [Name2], [r5].[String] AS [String2] FROM [RelatedCollection] AS [r3] LEFT JOIN [RelatedCollection_OptionalNested] AS [r4] ON [r3].[RootEntityId] = [r4].[RelatedTypeRootEntityId] AND [r3].[Id] = [r4].[RelatedTypeId] LEFT JOIN [RelatedCollection_RequiredNested] AS [r5] ON [r3].[RootEntityId] = [r5].[RelatedTypeRootEntityId] AND [r3].[Id] = [r5].[RelatedTypeId] diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/Associations/OwnedNavigations/OwnedNavigationsPrimitiveCollectionTestBase.cs b/test/EFCore.SqlServer.FunctionalTests/Query/Associations/OwnedNavigations/OwnedNavigationsPrimitiveCollectionTestBase.cs new file mode 100644 index 00000000000..90359ed184c --- /dev/null +++ b/test/EFCore.SqlServer.FunctionalTests/Query/Associations/OwnedNavigations/OwnedNavigationsPrimitiveCollectionTestBase.cs @@ -0,0 +1,179 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace Microsoft.EntityFrameworkCore.Query.Associations.OwnedNavigations; + +public class OwnedNavigationsPrimitiveCollectionTestBase(OwnedNavigationsSqlServerFixture fixture, ITestOutputHelper testOutputHelper) + : OwnedNavigationsPrimitiveCollectionRelationalTestBase(fixture, testOutputHelper) +{ + public override async Task Count() + { + await base.Count(); + + AssertSql( + """ +SELECT [r].[Id], [r].[Name], [o].[RootEntityId], [o].[Id], [o].[Int], [o].[Ints], [o].[Name], [o].[String], [r0].[RootEntityId], [o0].[RelatedTypeRootEntityId], [o1].[RelatedTypeRootEntityId], [r1].[RelatedTypeRootEntityId], [r2].[RelatedTypeRootEntityId], [o2].[RelatedTypeRootEntityId], [o2].[Id], [o2].[Int], [o2].[Ints], [o2].[Name], [o2].[String], [o0].[Id], [o0].[Int], [o0].[Ints], [o0].[Name], [o0].[String], [o1].[Id], [o1].[Int], [o1].[Ints], [o1].[Name], [o1].[String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Ints], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[RelatedTypeRootEntityId0], [s].[RelatedTypeId0], [s].[RelatedTypeRootEntityId1], [s].[RelatedTypeId1], [s].[Id0], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[Id1], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[Id2], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r0].[Id], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[String], [r7].[RelatedTypeRootEntityId], [r7].[Id], [r7].[Int], [r7].[Ints], [r7].[Name], [r7].[String], [r1].[Id], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[String], [r2].[Id], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[String] +FROM [RootEntity] AS [r] +LEFT JOIN [RequiredRelated] AS [r0] ON [r].[Id] = [r0].[RootEntityId] +LEFT JOIN [OptionalRelated] AS [o] ON [r].[Id] = [o].[RootEntityId] +LEFT JOIN [OptionalRelated_OptionalNested] AS [o0] ON [o].[RootEntityId] = [o0].[RelatedTypeRootEntityId] +LEFT JOIN [OptionalRelated_RequiredNested] AS [o1] ON [o].[RootEntityId] = [o1].[RelatedTypeRootEntityId] +LEFT JOIN [RequiredRelated_OptionalNested] AS [r1] ON [r0].[RootEntityId] = [r1].[RelatedTypeRootEntityId] +LEFT JOIN [RequiredRelated_RequiredNested] AS [r2] ON [r0].[RootEntityId] = [r2].[RelatedTypeRootEntityId] +LEFT JOIN [OptionalRelated_NestedCollection] AS [o2] ON [o].[RootEntityId] = [o2].[RelatedTypeRootEntityId] +LEFT JOIN ( + SELECT [r3].[RootEntityId], [r3].[Id], [r3].[Int], [r3].[Ints], [r3].[Name], [r3].[String], [r4].[RelatedTypeRootEntityId], [r4].[RelatedTypeId], [r5].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId0], [r5].[RelatedTypeId] AS [RelatedTypeId0], [r6].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId1], [r6].[RelatedTypeId] AS [RelatedTypeId1], [r6].[Id] AS [Id0], [r6].[Int] AS [Int0], [r6].[Ints] AS [Ints0], [r6].[Name] AS [Name0], [r6].[String] AS [String0], [r4].[Id] AS [Id1], [r4].[Int] AS [Int1], [r4].[Ints] AS [Ints1], [r4].[Name] AS [Name1], [r4].[String] AS [String1], [r5].[Id] AS [Id2], [r5].[Int] AS [Int2], [r5].[Ints] AS [Ints2], [r5].[Name] AS [Name2], [r5].[String] AS [String2] + FROM [RelatedCollection] AS [r3] + LEFT JOIN [RelatedCollection_OptionalNested] AS [r4] ON [r3].[RootEntityId] = [r4].[RelatedTypeRootEntityId] AND [r3].[Id] = [r4].[RelatedTypeId] + LEFT JOIN [RelatedCollection_RequiredNested] AS [r5] ON [r3].[RootEntityId] = [r5].[RelatedTypeRootEntityId] AND [r3].[Id] = [r5].[RelatedTypeId] + LEFT JOIN [RelatedCollection_NestedCollection] AS [r6] ON [r3].[RootEntityId] = [r6].[RelatedTypeRootEntityId] AND [r3].[Id] = [r6].[RelatedTypeId] +) AS [s] ON [r].[Id] = [s].[RootEntityId] +LEFT JOIN [RequiredRelated_NestedCollection] AS [r7] ON [r0].[RootEntityId] = [r7].[RelatedTypeRootEntityId] +WHERE ( + SELECT COUNT(*) + FROM OPENJSON([r0].[Ints]) AS [i]) = 3 +ORDER BY [r].[Id], [r0].[RootEntityId], [o].[RootEntityId], [o0].[RelatedTypeRootEntityId], [o1].[RelatedTypeRootEntityId], [r1].[RelatedTypeRootEntityId], [r2].[RelatedTypeRootEntityId], [o2].[RelatedTypeRootEntityId], [o2].[Id], [s].[RootEntityId], [s].[Id], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[RelatedTypeRootEntityId0], [s].[RelatedTypeId0], [s].[RelatedTypeRootEntityId1], [s].[RelatedTypeId1], [s].[Id0], [r7].[RelatedTypeRootEntityId] +"""); + } + + public override async Task Index() + { + await base.Index(); + + AssertSql( + """ +SELECT [r].[Id], [r].[Name], [o].[RootEntityId], [o].[Id], [o].[Int], [o].[Ints], [o].[Name], [o].[String], [r0].[RootEntityId], [o0].[RelatedTypeRootEntityId], [o1].[RelatedTypeRootEntityId], [r1].[RelatedTypeRootEntityId], [r2].[RelatedTypeRootEntityId], [o2].[RelatedTypeRootEntityId], [o2].[Id], [o2].[Int], [o2].[Ints], [o2].[Name], [o2].[String], [o0].[Id], [o0].[Int], [o0].[Ints], [o0].[Name], [o0].[String], [o1].[Id], [o1].[Int], [o1].[Ints], [o1].[Name], [o1].[String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Ints], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[RelatedTypeRootEntityId0], [s].[RelatedTypeId0], [s].[RelatedTypeRootEntityId1], [s].[RelatedTypeId1], [s].[Id0], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[Id1], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[Id2], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r0].[Id], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[String], [r7].[RelatedTypeRootEntityId], [r7].[Id], [r7].[Int], [r7].[Ints], [r7].[Name], [r7].[String], [r1].[Id], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[String], [r2].[Id], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[String] +FROM [RootEntity] AS [r] +LEFT JOIN [RequiredRelated] AS [r0] ON [r].[Id] = [r0].[RootEntityId] +LEFT JOIN [OptionalRelated] AS [o] ON [r].[Id] = [o].[RootEntityId] +LEFT JOIN [OptionalRelated_OptionalNested] AS [o0] ON [o].[RootEntityId] = [o0].[RelatedTypeRootEntityId] +LEFT JOIN [OptionalRelated_RequiredNested] AS [o1] ON [o].[RootEntityId] = [o1].[RelatedTypeRootEntityId] +LEFT JOIN [RequiredRelated_OptionalNested] AS [r1] ON [r0].[RootEntityId] = [r1].[RelatedTypeRootEntityId] +LEFT JOIN [RequiredRelated_RequiredNested] AS [r2] ON [r0].[RootEntityId] = [r2].[RelatedTypeRootEntityId] +LEFT JOIN [OptionalRelated_NestedCollection] AS [o2] ON [o].[RootEntityId] = [o2].[RelatedTypeRootEntityId] +LEFT JOIN ( + SELECT [r3].[RootEntityId], [r3].[Id], [r3].[Int], [r3].[Ints], [r3].[Name], [r3].[String], [r4].[RelatedTypeRootEntityId], [r4].[RelatedTypeId], [r5].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId0], [r5].[RelatedTypeId] AS [RelatedTypeId0], [r6].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId1], [r6].[RelatedTypeId] AS [RelatedTypeId1], [r6].[Id] AS [Id0], [r6].[Int] AS [Int0], [r6].[Ints] AS [Ints0], [r6].[Name] AS [Name0], [r6].[String] AS [String0], [r4].[Id] AS [Id1], [r4].[Int] AS [Int1], [r4].[Ints] AS [Ints1], [r4].[Name] AS [Name1], [r4].[String] AS [String1], [r5].[Id] AS [Id2], [r5].[Int] AS [Int2], [r5].[Ints] AS [Ints2], [r5].[Name] AS [Name2], [r5].[String] AS [String2] + FROM [RelatedCollection] AS [r3] + LEFT JOIN [RelatedCollection_OptionalNested] AS [r4] ON [r3].[RootEntityId] = [r4].[RelatedTypeRootEntityId] AND [r3].[Id] = [r4].[RelatedTypeId] + LEFT JOIN [RelatedCollection_RequiredNested] AS [r5] ON [r3].[RootEntityId] = [r5].[RelatedTypeRootEntityId] AND [r3].[Id] = [r5].[RelatedTypeId] + LEFT JOIN [RelatedCollection_NestedCollection] AS [r6] ON [r3].[RootEntityId] = [r6].[RelatedTypeRootEntityId] AND [r3].[Id] = [r6].[RelatedTypeId] +) AS [s] ON [r].[Id] = [s].[RootEntityId] +LEFT JOIN [RequiredRelated_NestedCollection] AS [r7] ON [r0].[RootEntityId] = [r7].[RelatedTypeRootEntityId] +WHERE CAST(JSON_VALUE([r0].[Ints], '$[0]') AS int) = 1 +ORDER BY [r].[Id], [r0].[RootEntityId], [o].[RootEntityId], [o0].[RelatedTypeRootEntityId], [o1].[RelatedTypeRootEntityId], [r1].[RelatedTypeRootEntityId], [r2].[RelatedTypeRootEntityId], [o2].[RelatedTypeRootEntityId], [o2].[Id], [s].[RootEntityId], [s].[Id], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[RelatedTypeRootEntityId0], [s].[RelatedTypeId0], [s].[RelatedTypeRootEntityId1], [s].[RelatedTypeId1], [s].[Id0], [r7].[RelatedTypeRootEntityId] +"""); + } + + public override async Task Contains() + { + await base.Contains(); + + AssertSql( + """ +SELECT [r].[Id], [r].[Name], [o].[RootEntityId], [o].[Id], [o].[Int], [o].[Ints], [o].[Name], [o].[String], [r0].[RootEntityId], [o0].[RelatedTypeRootEntityId], [o1].[RelatedTypeRootEntityId], [r1].[RelatedTypeRootEntityId], [r2].[RelatedTypeRootEntityId], [o2].[RelatedTypeRootEntityId], [o2].[Id], [o2].[Int], [o2].[Ints], [o2].[Name], [o2].[String], [o0].[Id], [o0].[Int], [o0].[Ints], [o0].[Name], [o0].[String], [o1].[Id], [o1].[Int], [o1].[Ints], [o1].[Name], [o1].[String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Ints], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[RelatedTypeRootEntityId0], [s].[RelatedTypeId0], [s].[RelatedTypeRootEntityId1], [s].[RelatedTypeId1], [s].[Id0], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[Id1], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[Id2], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r0].[Id], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[String], [r7].[RelatedTypeRootEntityId], [r7].[Id], [r7].[Int], [r7].[Ints], [r7].[Name], [r7].[String], [r1].[Id], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[String], [r2].[Id], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[String] +FROM [RootEntity] AS [r] +LEFT JOIN [RequiredRelated] AS [r0] ON [r].[Id] = [r0].[RootEntityId] +LEFT JOIN [OptionalRelated] AS [o] ON [r].[Id] = [o].[RootEntityId] +LEFT JOIN [OptionalRelated_OptionalNested] AS [o0] ON [o].[RootEntityId] = [o0].[RelatedTypeRootEntityId] +LEFT JOIN [OptionalRelated_RequiredNested] AS [o1] ON [o].[RootEntityId] = [o1].[RelatedTypeRootEntityId] +LEFT JOIN [RequiredRelated_OptionalNested] AS [r1] ON [r0].[RootEntityId] = [r1].[RelatedTypeRootEntityId] +LEFT JOIN [RequiredRelated_RequiredNested] AS [r2] ON [r0].[RootEntityId] = [r2].[RelatedTypeRootEntityId] +LEFT JOIN [OptionalRelated_NestedCollection] AS [o2] ON [o].[RootEntityId] = [o2].[RelatedTypeRootEntityId] +LEFT JOIN ( + SELECT [r3].[RootEntityId], [r3].[Id], [r3].[Int], [r3].[Ints], [r3].[Name], [r3].[String], [r4].[RelatedTypeRootEntityId], [r4].[RelatedTypeId], [r5].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId0], [r5].[RelatedTypeId] AS [RelatedTypeId0], [r6].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId1], [r6].[RelatedTypeId] AS [RelatedTypeId1], [r6].[Id] AS [Id0], [r6].[Int] AS [Int0], [r6].[Ints] AS [Ints0], [r6].[Name] AS [Name0], [r6].[String] AS [String0], [r4].[Id] AS [Id1], [r4].[Int] AS [Int1], [r4].[Ints] AS [Ints1], [r4].[Name] AS [Name1], [r4].[String] AS [String1], [r5].[Id] AS [Id2], [r5].[Int] AS [Int2], [r5].[Ints] AS [Ints2], [r5].[Name] AS [Name2], [r5].[String] AS [String2] + FROM [RelatedCollection] AS [r3] + LEFT JOIN [RelatedCollection_OptionalNested] AS [r4] ON [r3].[RootEntityId] = [r4].[RelatedTypeRootEntityId] AND [r3].[Id] = [r4].[RelatedTypeId] + LEFT JOIN [RelatedCollection_RequiredNested] AS [r5] ON [r3].[RootEntityId] = [r5].[RelatedTypeRootEntityId] AND [r3].[Id] = [r5].[RelatedTypeId] + LEFT JOIN [RelatedCollection_NestedCollection] AS [r6] ON [r3].[RootEntityId] = [r6].[RelatedTypeRootEntityId] AND [r3].[Id] = [r6].[RelatedTypeId] +) AS [s] ON [r].[Id] = [s].[RootEntityId] +LEFT JOIN [RequiredRelated_NestedCollection] AS [r7] ON [r0].[RootEntityId] = [r7].[RelatedTypeRootEntityId] +WHERE 3 IN ( + SELECT [i].[value] + FROM OPENJSON([r0].[Ints]) WITH ([value] int '$') AS [i] +) +ORDER BY [r].[Id], [r0].[RootEntityId], [o].[RootEntityId], [o0].[RelatedTypeRootEntityId], [o1].[RelatedTypeRootEntityId], [r1].[RelatedTypeRootEntityId], [r2].[RelatedTypeRootEntityId], [o2].[RelatedTypeRootEntityId], [o2].[Id], [s].[RootEntityId], [s].[Id], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[RelatedTypeRootEntityId0], [s].[RelatedTypeId0], [s].[RelatedTypeRootEntityId1], [s].[RelatedTypeId1], [s].[Id0], [r7].[RelatedTypeRootEntityId] +"""); + } + + public override async Task Any_predicate() + { + await base.Any_predicate(); + + AssertSql( + """ +SELECT [r].[Id], [r].[Name], [o].[RootEntityId], [o].[Id], [o].[Int], [o].[Ints], [o].[Name], [o].[String], [r0].[RootEntityId], [o0].[RelatedTypeRootEntityId], [o1].[RelatedTypeRootEntityId], [r1].[RelatedTypeRootEntityId], [r2].[RelatedTypeRootEntityId], [o2].[RelatedTypeRootEntityId], [o2].[Id], [o2].[Int], [o2].[Ints], [o2].[Name], [o2].[String], [o0].[Id], [o0].[Int], [o0].[Ints], [o0].[Name], [o0].[String], [o1].[Id], [o1].[Int], [o1].[Ints], [o1].[Name], [o1].[String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Ints], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[RelatedTypeRootEntityId0], [s].[RelatedTypeId0], [s].[RelatedTypeRootEntityId1], [s].[RelatedTypeId1], [s].[Id0], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[Id1], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[Id2], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r0].[Id], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[String], [r7].[RelatedTypeRootEntityId], [r7].[Id], [r7].[Int], [r7].[Ints], [r7].[Name], [r7].[String], [r1].[Id], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[String], [r2].[Id], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[String] +FROM [RootEntity] AS [r] +LEFT JOIN [RequiredRelated] AS [r0] ON [r].[Id] = [r0].[RootEntityId] +LEFT JOIN [OptionalRelated] AS [o] ON [r].[Id] = [o].[RootEntityId] +LEFT JOIN [OptionalRelated_OptionalNested] AS [o0] ON [o].[RootEntityId] = [o0].[RelatedTypeRootEntityId] +LEFT JOIN [OptionalRelated_RequiredNested] AS [o1] ON [o].[RootEntityId] = [o1].[RelatedTypeRootEntityId] +LEFT JOIN [RequiredRelated_OptionalNested] AS [r1] ON [r0].[RootEntityId] = [r1].[RelatedTypeRootEntityId] +LEFT JOIN [RequiredRelated_RequiredNested] AS [r2] ON [r0].[RootEntityId] = [r2].[RelatedTypeRootEntityId] +LEFT JOIN [OptionalRelated_NestedCollection] AS [o2] ON [o].[RootEntityId] = [o2].[RelatedTypeRootEntityId] +LEFT JOIN ( + SELECT [r3].[RootEntityId], [r3].[Id], [r3].[Int], [r3].[Ints], [r3].[Name], [r3].[String], [r4].[RelatedTypeRootEntityId], [r4].[RelatedTypeId], [r5].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId0], [r5].[RelatedTypeId] AS [RelatedTypeId0], [r6].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId1], [r6].[RelatedTypeId] AS [RelatedTypeId1], [r6].[Id] AS [Id0], [r6].[Int] AS [Int0], [r6].[Ints] AS [Ints0], [r6].[Name] AS [Name0], [r6].[String] AS [String0], [r4].[Id] AS [Id1], [r4].[Int] AS [Int1], [r4].[Ints] AS [Ints1], [r4].[Name] AS [Name1], [r4].[String] AS [String1], [r5].[Id] AS [Id2], [r5].[Int] AS [Int2], [r5].[Ints] AS [Ints2], [r5].[Name] AS [Name2], [r5].[String] AS [String2] + FROM [RelatedCollection] AS [r3] + LEFT JOIN [RelatedCollection_OptionalNested] AS [r4] ON [r3].[RootEntityId] = [r4].[RelatedTypeRootEntityId] AND [r3].[Id] = [r4].[RelatedTypeId] + LEFT JOIN [RelatedCollection_RequiredNested] AS [r5] ON [r3].[RootEntityId] = [r5].[RelatedTypeRootEntityId] AND [r3].[Id] = [r5].[RelatedTypeId] + LEFT JOIN [RelatedCollection_NestedCollection] AS [r6] ON [r3].[RootEntityId] = [r6].[RelatedTypeRootEntityId] AND [r3].[Id] = [r6].[RelatedTypeId] +) AS [s] ON [r].[Id] = [s].[RootEntityId] +LEFT JOIN [RequiredRelated_NestedCollection] AS [r7] ON [r0].[RootEntityId] = [r7].[RelatedTypeRootEntityId] +WHERE 2 IN ( + SELECT [i].[value] + FROM OPENJSON([r0].[Ints]) WITH ([value] int '$') AS [i] +) +ORDER BY [r].[Id], [r0].[RootEntityId], [o].[RootEntityId], [o0].[RelatedTypeRootEntityId], [o1].[RelatedTypeRootEntityId], [r1].[RelatedTypeRootEntityId], [r2].[RelatedTypeRootEntityId], [o2].[RelatedTypeRootEntityId], [o2].[Id], [s].[RootEntityId], [s].[Id], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[RelatedTypeRootEntityId0], [s].[RelatedTypeId0], [s].[RelatedTypeRootEntityId1], [s].[RelatedTypeId1], [s].[Id0], [r7].[RelatedTypeRootEntityId] +"""); + } + + public override async Task Nested_Count() + { + await base.Nested_Count(); + + AssertSql( + """ +SELECT [r].[Id], [r].[Name], [o].[RootEntityId], [o].[Id], [o].[Int], [o].[Ints], [o].[Name], [o].[String], [r0].[RootEntityId], [r1].[RelatedTypeRootEntityId], [o0].[RelatedTypeRootEntityId], [o1].[RelatedTypeRootEntityId], [r2].[RelatedTypeRootEntityId], [o2].[RelatedTypeRootEntityId], [o2].[Id], [o2].[Int], [o2].[Ints], [o2].[Name], [o2].[String], [o0].[Id], [o0].[Int], [o0].[Ints], [o0].[Name], [o0].[String], [o1].[Id], [o1].[Int], [o1].[Ints], [o1].[Name], [o1].[String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Ints], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[RelatedTypeRootEntityId0], [s].[RelatedTypeId0], [s].[RelatedTypeRootEntityId1], [s].[RelatedTypeId1], [s].[Id0], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[Id1], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[Id2], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r0].[Id], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[String], [r7].[RelatedTypeRootEntityId], [r7].[Id], [r7].[Int], [r7].[Ints], [r7].[Name], [r7].[String], [r2].[Id], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[String], [r1].[Id], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[String] +FROM [RootEntity] AS [r] +LEFT JOIN [RequiredRelated] AS [r0] ON [r].[Id] = [r0].[RootEntityId] +LEFT JOIN [RequiredRelated_RequiredNested] AS [r1] ON [r0].[RootEntityId] = [r1].[RelatedTypeRootEntityId] +LEFT JOIN [OptionalRelated] AS [o] ON [r].[Id] = [o].[RootEntityId] +LEFT JOIN [OptionalRelated_OptionalNested] AS [o0] ON [o].[RootEntityId] = [o0].[RelatedTypeRootEntityId] +LEFT JOIN [OptionalRelated_RequiredNested] AS [o1] ON [o].[RootEntityId] = [o1].[RelatedTypeRootEntityId] +LEFT JOIN [RequiredRelated_OptionalNested] AS [r2] ON [r0].[RootEntityId] = [r2].[RelatedTypeRootEntityId] +LEFT JOIN [OptionalRelated_NestedCollection] AS [o2] ON [o].[RootEntityId] = [o2].[RelatedTypeRootEntityId] +LEFT JOIN ( + SELECT [r3].[RootEntityId], [r3].[Id], [r3].[Int], [r3].[Ints], [r3].[Name], [r3].[String], [r4].[RelatedTypeRootEntityId], [r4].[RelatedTypeId], [r5].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId0], [r5].[RelatedTypeId] AS [RelatedTypeId0], [r6].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId1], [r6].[RelatedTypeId] AS [RelatedTypeId1], [r6].[Id] AS [Id0], [r6].[Int] AS [Int0], [r6].[Ints] AS [Ints0], [r6].[Name] AS [Name0], [r6].[String] AS [String0], [r4].[Id] AS [Id1], [r4].[Int] AS [Int1], [r4].[Ints] AS [Ints1], [r4].[Name] AS [Name1], [r4].[String] AS [String1], [r5].[Id] AS [Id2], [r5].[Int] AS [Int2], [r5].[Ints] AS [Ints2], [r5].[Name] AS [Name2], [r5].[String] AS [String2] + FROM [RelatedCollection] AS [r3] + LEFT JOIN [RelatedCollection_OptionalNested] AS [r4] ON [r3].[RootEntityId] = [r4].[RelatedTypeRootEntityId] AND [r3].[Id] = [r4].[RelatedTypeId] + LEFT JOIN [RelatedCollection_RequiredNested] AS [r5] ON [r3].[RootEntityId] = [r5].[RelatedTypeRootEntityId] AND [r3].[Id] = [r5].[RelatedTypeId] + LEFT JOIN [RelatedCollection_NestedCollection] AS [r6] ON [r3].[RootEntityId] = [r6].[RelatedTypeRootEntityId] AND [r3].[Id] = [r6].[RelatedTypeId] +) AS [s] ON [r].[Id] = [s].[RootEntityId] +LEFT JOIN [RequiredRelated_NestedCollection] AS [r7] ON [r0].[RootEntityId] = [r7].[RelatedTypeRootEntityId] +WHERE ( + SELECT COUNT(*) + FROM OPENJSON([r1].[Ints]) AS [i]) = 3 +ORDER BY [r].[Id], [r0].[RootEntityId], [r1].[RelatedTypeRootEntityId], [o].[RootEntityId], [o0].[RelatedTypeRootEntityId], [o1].[RelatedTypeRootEntityId], [r2].[RelatedTypeRootEntityId], [o2].[RelatedTypeRootEntityId], [o2].[Id], [s].[RootEntityId], [s].[Id], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[RelatedTypeRootEntityId0], [s].[RelatedTypeId0], [s].[RelatedTypeRootEntityId1], [s].[RelatedTypeId1], [s].[Id0], [r7].[RelatedTypeRootEntityId] +"""); + } + + public override async Task Select_Sum() + { + await base.Select_Sum(); + + AssertSql( + """ +SELECT ( + SELECT COALESCE(SUM([i0].[value]), 0) + FROM OPENJSON([r0].[Ints]) WITH ([value] int '$') AS [i0]) +FROM [RootEntity] AS [r] +LEFT JOIN [RequiredRelated] AS [r0] ON [r].[Id] = [r0].[RootEntityId] +WHERE ( + SELECT COALESCE(SUM([i].[value]), 0) + FROM OPENJSON([r0].[Ints]) WITH ([value] int '$') AS [i]) >= 6 +"""); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); +} diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/Associations/OwnedNavigations/OwnedNavigationsProjectionSqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/Associations/OwnedNavigations/OwnedNavigationsProjectionSqlServerTest.cs index 6a06d3ccfd4..6e5dcd6d3a7 100644 --- a/test/EFCore.SqlServer.FunctionalTests/Query/Associations/OwnedNavigations/OwnedNavigationsProjectionSqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/Query/Associations/OwnedNavigations/OwnedNavigationsProjectionSqlServerTest.cs @@ -12,7 +12,7 @@ public override async Task Select_root(QueryTrackingBehavior queryTrackingBehavi AssertSql( """ -SELECT [r].[Id], [r].[Name], [o].[RootEntityId], [o].[Id], [o].[Int], [o].[Name], [o].[String], [o0].[RelatedTypeRootEntityId], [o1].[RelatedTypeRootEntityId], [r0].[RootEntityId], [r1].[RelatedTypeRootEntityId], [r2].[RelatedTypeRootEntityId], [o2].[RelatedTypeRootEntityId], [o2].[Id], [o2].[Int], [o2].[Name], [o2].[String], [o0].[Id], [o0].[Int], [o0].[Name], [o0].[String], [o1].[Id], [o1].[Int], [o1].[Name], [o1].[String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[RelatedTypeRootEntityId0], [s].[RelatedTypeId0], [s].[RelatedTypeRootEntityId1], [s].[RelatedTypeId1], [s].[Id0], [s].[Int0], [s].[Name0], [s].[String0], [s].[Id1], [s].[Int1], [s].[Name1], [s].[String1], [s].[Id2], [s].[Int2], [s].[Name2], [s].[String2], [r0].[Id], [r0].[Int], [r0].[Name], [r0].[String], [r7].[RelatedTypeRootEntityId], [r7].[Id], [r7].[Int], [r7].[Name], [r7].[String], [r1].[Id], [r1].[Int], [r1].[Name], [r1].[String], [r2].[Id], [r2].[Int], [r2].[Name], [r2].[String] +SELECT [r].[Id], [r].[Name], [o].[RootEntityId], [o].[Id], [o].[Int], [o].[Ints], [o].[Name], [o].[String], [o0].[RelatedTypeRootEntityId], [o1].[RelatedTypeRootEntityId], [r0].[RootEntityId], [r1].[RelatedTypeRootEntityId], [r2].[RelatedTypeRootEntityId], [o2].[RelatedTypeRootEntityId], [o2].[Id], [o2].[Int], [o2].[Ints], [o2].[Name], [o2].[String], [o0].[Id], [o0].[Int], [o0].[Ints], [o0].[Name], [o0].[String], [o1].[Id], [o1].[Int], [o1].[Ints], [o1].[Name], [o1].[String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Ints], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[RelatedTypeRootEntityId0], [s].[RelatedTypeId0], [s].[RelatedTypeRootEntityId1], [s].[RelatedTypeId1], [s].[Id0], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[Id1], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[Id2], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r0].[Id], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[String], [r7].[RelatedTypeRootEntityId], [r7].[Id], [r7].[Int], [r7].[Ints], [r7].[Name], [r7].[String], [r1].[Id], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[String], [r2].[Id], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[String] FROM [RootEntity] AS [r] LEFT JOIN [OptionalRelated] AS [o] ON [r].[Id] = [o].[RootEntityId] LEFT JOIN [OptionalRelated_OptionalNested] AS [o0] ON [o].[RootEntityId] = [o0].[RelatedTypeRootEntityId] @@ -22,7 +22,7 @@ FROM [RootEntity] AS [r] LEFT JOIN [RequiredRelated_RequiredNested] AS [r2] ON [r0].[RootEntityId] = [r2].[RelatedTypeRootEntityId] LEFT JOIN [OptionalRelated_NestedCollection] AS [o2] ON [o].[RootEntityId] = [o2].[RelatedTypeRootEntityId] LEFT JOIN ( - SELECT [r3].[RootEntityId], [r3].[Id], [r3].[Int], [r3].[Name], [r3].[String], [r4].[RelatedTypeRootEntityId], [r4].[RelatedTypeId], [r5].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId0], [r5].[RelatedTypeId] AS [RelatedTypeId0], [r6].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId1], [r6].[RelatedTypeId] AS [RelatedTypeId1], [r6].[Id] AS [Id0], [r6].[Int] AS [Int0], [r6].[Name] AS [Name0], [r6].[String] AS [String0], [r4].[Id] AS [Id1], [r4].[Int] AS [Int1], [r4].[Name] AS [Name1], [r4].[String] AS [String1], [r5].[Id] AS [Id2], [r5].[Int] AS [Int2], [r5].[Name] AS [Name2], [r5].[String] AS [String2] + SELECT [r3].[RootEntityId], [r3].[Id], [r3].[Int], [r3].[Ints], [r3].[Name], [r3].[String], [r4].[RelatedTypeRootEntityId], [r4].[RelatedTypeId], [r5].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId0], [r5].[RelatedTypeId] AS [RelatedTypeId0], [r6].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId1], [r6].[RelatedTypeId] AS [RelatedTypeId1], [r6].[Id] AS [Id0], [r6].[Int] AS [Int0], [r6].[Ints] AS [Ints0], [r6].[Name] AS [Name0], [r6].[String] AS [String0], [r4].[Id] AS [Id1], [r4].[Int] AS [Int1], [r4].[Ints] AS [Ints1], [r4].[Name] AS [Name1], [r4].[String] AS [String1], [r5].[Id] AS [Id2], [r5].[Int] AS [Int2], [r5].[Ints] AS [Ints2], [r5].[Name] AS [Name2], [r5].[String] AS [String2] FROM [RelatedCollection] AS [r3] LEFT JOIN [RelatedCollection_OptionalNested] AS [r4] ON [r3].[RootEntityId] = [r4].[RelatedTypeRootEntityId] AND [r3].[Id] = [r4].[RelatedTypeId] LEFT JOIN [RelatedCollection_RequiredNested] AS [r5] ON [r3].[RootEntityId] = [r5].[RelatedTypeRootEntityId] AND [r3].[Id] = [r5].[RelatedTypeId] @@ -95,7 +95,7 @@ public override async Task Select_related(QueryTrackingBehavior queryTrackingBeh { AssertSql( """ -SELECT [r0].[RootEntityId], [r0].[Id], [r0].[Int], [r0].[Name], [r0].[String], [r].[Id], [r1].[RelatedTypeRootEntityId], [r2].[RelatedTypeRootEntityId], [r3].[RelatedTypeRootEntityId], [r3].[Id], [r3].[Int], [r3].[Name], [r3].[String], [r1].[Id], [r1].[Int], [r1].[Name], [r1].[String], [r2].[Id], [r2].[Int], [r2].[Name], [r2].[String] +SELECT [r0].[RootEntityId], [r0].[Id], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[String], [r].[Id], [r1].[RelatedTypeRootEntityId], [r2].[RelatedTypeRootEntityId], [r3].[RelatedTypeRootEntityId], [r3].[Id], [r3].[Int], [r3].[Ints], [r3].[Name], [r3].[String], [r1].[Id], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[String], [r2].[Id], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[String] FROM [RootEntity] AS [r] LEFT JOIN [RequiredRelated] AS [r0] ON [r].[Id] = [r0].[RootEntityId] LEFT JOIN [RequiredRelated_OptionalNested] AS [r1] ON [r0].[RootEntityId] = [r1].[RelatedTypeRootEntityId] @@ -114,7 +114,7 @@ public override async Task Select_optional_related(QueryTrackingBehavior queryTr { AssertSql( """ -SELECT [o].[RootEntityId], [o].[Id], [o].[Int], [o].[Name], [o].[String], [r].[Id], [o0].[RelatedTypeRootEntityId], [o1].[RelatedTypeRootEntityId], [o2].[RelatedTypeRootEntityId], [o2].[Id], [o2].[Int], [o2].[Name], [o2].[String], [o0].[Id], [o0].[Int], [o0].[Name], [o0].[String], [o1].[Id], [o1].[Int], [o1].[Name], [o1].[String] +SELECT [o].[RootEntityId], [o].[Id], [o].[Int], [o].[Ints], [o].[Name], [o].[String], [r].[Id], [o0].[RelatedTypeRootEntityId], [o1].[RelatedTypeRootEntityId], [o2].[RelatedTypeRootEntityId], [o2].[Id], [o2].[Int], [o2].[Ints], [o2].[Name], [o2].[String], [o0].[Id], [o0].[Int], [o0].[Ints], [o0].[Name], [o0].[String], [o1].[Id], [o1].[Int], [o1].[Ints], [o1].[Name], [o1].[String] FROM [RootEntity] AS [r] LEFT JOIN [OptionalRelated] AS [o] ON [r].[Id] = [o].[RootEntityId] LEFT JOIN [OptionalRelated_OptionalNested] AS [o0] ON [o].[RootEntityId] = [o0].[RelatedTypeRootEntityId] @@ -133,7 +133,7 @@ public override async Task Select_required_nested_on_required_related(QueryTrack { AssertSql( """ -SELECT [r1].[RelatedTypeRootEntityId], [r1].[Id], [r1].[Int], [r1].[Name], [r1].[String] +SELECT [r1].[RelatedTypeRootEntityId], [r1].[Id], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[String] FROM [RootEntity] AS [r] LEFT JOIN [RequiredRelated] AS [r0] ON [r].[Id] = [r0].[RootEntityId] LEFT JOIN [RequiredRelated_RequiredNested] AS [r1] ON [r0].[RootEntityId] = [r1].[RelatedTypeRootEntityId] @@ -149,7 +149,7 @@ public override async Task Select_optional_nested_on_required_related(QueryTrack { AssertSql( """ -SELECT [r1].[RelatedTypeRootEntityId], [r1].[Id], [r1].[Int], [r1].[Name], [r1].[String] +SELECT [r1].[RelatedTypeRootEntityId], [r1].[Id], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[String] FROM [RootEntity] AS [r] LEFT JOIN [RequiredRelated] AS [r0] ON [r].[Id] = [r0].[RootEntityId] LEFT JOIN [RequiredRelated_OptionalNested] AS [r1] ON [r0].[RootEntityId] = [r1].[RelatedTypeRootEntityId] @@ -165,7 +165,7 @@ public override async Task Select_required_nested_on_optional_related(QueryTrack { AssertSql( """ -SELECT [o0].[RelatedTypeRootEntityId], [o0].[Id], [o0].[Int], [o0].[Name], [o0].[String] +SELECT [o0].[RelatedTypeRootEntityId], [o0].[Id], [o0].[Int], [o0].[Ints], [o0].[Name], [o0].[String] FROM [RootEntity] AS [r] LEFT JOIN [OptionalRelated] AS [o] ON [r].[Id] = [o].[RootEntityId] LEFT JOIN [OptionalRelated_RequiredNested] AS [o0] ON [o].[RootEntityId] = [o0].[RelatedTypeRootEntityId] @@ -181,7 +181,7 @@ public override async Task Select_optional_nested_on_optional_related(QueryTrack { AssertSql( """ -SELECT [o0].[RelatedTypeRootEntityId], [o0].[Id], [o0].[Int], [o0].[Name], [o0].[String] +SELECT [o0].[RelatedTypeRootEntityId], [o0].[Id], [o0].[Int], [o0].[Ints], [o0].[Name], [o0].[String] FROM [RootEntity] AS [r] LEFT JOIN [OptionalRelated] AS [o] ON [r].[Id] = [o].[RootEntityId] LEFT JOIN [OptionalRelated_OptionalNested] AS [o0] ON [o].[RootEntityId] = [o0].[RelatedTypeRootEntityId] @@ -197,7 +197,7 @@ public override async Task Select_required_related_via_optional_navigation(Query { AssertSql( """ -SELECT [r1].[RootEntityId], [r1].[Id], [r1].[Int], [r1].[Name], [r1].[String], [r].[Id], [r0].[Id], [r2].[RelatedTypeRootEntityId], [r3].[RelatedTypeRootEntityId], [r4].[RelatedTypeRootEntityId], [r4].[Id], [r4].[Int], [r4].[Name], [r4].[String], [r2].[Id], [r2].[Int], [r2].[Name], [r2].[String], [r3].[Id], [r3].[Int], [r3].[Name], [r3].[String] +SELECT [r1].[RootEntityId], [r1].[Id], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[String], [r].[Id], [r0].[Id], [r2].[RelatedTypeRootEntityId], [r3].[RelatedTypeRootEntityId], [r4].[RelatedTypeRootEntityId], [r4].[Id], [r4].[Int], [r4].[Ints], [r4].[Name], [r4].[String], [r2].[Id], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[String], [r3].[Id], [r3].[Int], [r3].[Ints], [r3].[Name], [r3].[String] FROM [RootReferencingEntity] AS [r] LEFT JOIN [RootEntity] AS [r0] ON [r].[RootEntityId] = [r0].[Id] LEFT JOIN [RequiredRelated] AS [r1] ON [r0].[Id] = [r1].[RootEntityId] @@ -221,10 +221,10 @@ public override async Task Select_related_collection(QueryTrackingBehavior query { AssertSql( """ -SELECT [r].[Id], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[RelatedTypeRootEntityId0], [s].[RelatedTypeId0], [s].[RelatedTypeRootEntityId1], [s].[RelatedTypeId1], [s].[Id0], [s].[Int0], [s].[Name0], [s].[String0], [s].[Id1], [s].[Int1], [s].[Name1], [s].[String1], [s].[Id2], [s].[Int2], [s].[Name2], [s].[String2] +SELECT [r].[Id], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Ints], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[RelatedTypeRootEntityId0], [s].[RelatedTypeId0], [s].[RelatedTypeRootEntityId1], [s].[RelatedTypeId1], [s].[Id0], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[Id1], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[Id2], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2] FROM [RootEntity] AS [r] LEFT JOIN ( - SELECT [r0].[RootEntityId], [r0].[Id], [r0].[Int], [r0].[Name], [r0].[String], [r1].[RelatedTypeRootEntityId], [r1].[RelatedTypeId], [r2].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId0], [r2].[RelatedTypeId] AS [RelatedTypeId0], [r3].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId1], [r3].[RelatedTypeId] AS [RelatedTypeId1], [r3].[Id] AS [Id0], [r3].[Int] AS [Int0], [r3].[Name] AS [Name0], [r3].[String] AS [String0], [r1].[Id] AS [Id1], [r1].[Int] AS [Int1], [r1].[Name] AS [Name1], [r1].[String] AS [String1], [r2].[Id] AS [Id2], [r2].[Int] AS [Int2], [r2].[Name] AS [Name2], [r2].[String] AS [String2] + SELECT [r0].[RootEntityId], [r0].[Id], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[String], [r1].[RelatedTypeRootEntityId], [r1].[RelatedTypeId], [r2].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId0], [r2].[RelatedTypeId] AS [RelatedTypeId0], [r3].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId1], [r3].[RelatedTypeId] AS [RelatedTypeId1], [r3].[Id] AS [Id0], [r3].[Int] AS [Int0], [r3].[Ints] AS [Ints0], [r3].[Name] AS [Name0], [r3].[String] AS [String0], [r1].[Id] AS [Id1], [r1].[Int] AS [Int1], [r1].[Ints] AS [Ints1], [r1].[Name] AS [Name1], [r1].[String] AS [String1], [r2].[Id] AS [Id2], [r2].[Int] AS [Int2], [r2].[Ints] AS [Ints2], [r2].[Name] AS [Name2], [r2].[String] AS [String2] FROM [RelatedCollection] AS [r0] LEFT JOIN [RelatedCollection_OptionalNested] AS [r1] ON [r0].[RootEntityId] = [r1].[RelatedTypeRootEntityId] AND [r0].[Id] = [r1].[RelatedTypeId] LEFT JOIN [RelatedCollection_RequiredNested] AS [r2] ON [r0].[RootEntityId] = [r2].[RelatedTypeRootEntityId] AND [r0].[Id] = [r2].[RelatedTypeId] @@ -243,7 +243,7 @@ public override async Task Select_nested_collection_on_required_related(QueryTra { AssertSql( """ -SELECT [r].[Id], [r0].[RootEntityId], [r1].[RelatedTypeRootEntityId], [r1].[Id], [r1].[Int], [r1].[Name], [r1].[String] +SELECT [r].[Id], [r0].[RootEntityId], [r1].[RelatedTypeRootEntityId], [r1].[Id], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[String] FROM [RootEntity] AS [r] LEFT JOIN [RequiredRelated] AS [r0] ON [r].[Id] = [r0].[RootEntityId] LEFT JOIN [RequiredRelated_NestedCollection] AS [r1] ON [r0].[RootEntityId] = [r1].[RelatedTypeRootEntityId] @@ -260,7 +260,7 @@ public override async Task Select_nested_collection_on_optional_related(QueryTra { AssertSql( """ -SELECT [r].[Id], [o].[RootEntityId], [o0].[RelatedTypeRootEntityId], [o0].[Id], [o0].[Int], [o0].[Name], [o0].[String] +SELECT [r].[Id], [o].[RootEntityId], [o0].[RelatedTypeRootEntityId], [o0].[Id], [o0].[Int], [o0].[Ints], [o0].[Name], [o0].[String] FROM [RootEntity] AS [r] LEFT JOIN [OptionalRelated] AS [o] ON [r].[Id] = [o].[RootEntityId] LEFT JOIN [OptionalRelated_NestedCollection] AS [o0] ON [o].[RootEntityId] = [o0].[RelatedTypeRootEntityId] @@ -277,7 +277,7 @@ public override async Task SelectMany_related_collection(QueryTrackingBehavior q { AssertSql( """ -SELECT [r0].[RootEntityId], [r0].[Id], [r0].[Int], [r0].[Name], [r0].[String], [r].[Id], [r1].[RelatedTypeRootEntityId], [r1].[RelatedTypeId], [r2].[RelatedTypeRootEntityId], [r2].[RelatedTypeId], [r3].[RelatedTypeRootEntityId], [r3].[RelatedTypeId], [r3].[Id], [r3].[Int], [r3].[Name], [r3].[String], [r1].[Id], [r1].[Int], [r1].[Name], [r1].[String], [r2].[Id], [r2].[Int], [r2].[Name], [r2].[String] +SELECT [r0].[RootEntityId], [r0].[Id], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[String], [r].[Id], [r1].[RelatedTypeRootEntityId], [r1].[RelatedTypeId], [r2].[RelatedTypeRootEntityId], [r2].[RelatedTypeId], [r3].[RelatedTypeRootEntityId], [r3].[RelatedTypeId], [r3].[Id], [r3].[Int], [r3].[Ints], [r3].[Name], [r3].[String], [r1].[Id], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[String], [r2].[Id], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[String] FROM [RootEntity] AS [r] INNER JOIN [RelatedCollection] AS [r0] ON [r].[Id] = [r0].[RootEntityId] LEFT JOIN [RelatedCollection_OptionalNested] AS [r1] ON [r0].[RootEntityId] = [r1].[RelatedTypeRootEntityId] AND [r0].[Id] = [r1].[RelatedTypeId] @@ -296,7 +296,7 @@ public override async Task SelectMany_nested_collection_on_required_related(Quer { AssertSql( """ -SELECT [r1].[RelatedTypeRootEntityId], [r1].[Id], [r1].[Int], [r1].[Name], [r1].[String] +SELECT [r1].[RelatedTypeRootEntityId], [r1].[Id], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[String] FROM [RootEntity] AS [r] LEFT JOIN [RequiredRelated] AS [r0] ON [r].[Id] = [r0].[RootEntityId] INNER JOIN [RequiredRelated_NestedCollection] AS [r1] ON [r0].[RootEntityId] = [r1].[RelatedTypeRootEntityId] @@ -312,7 +312,7 @@ public override async Task SelectMany_nested_collection_on_optional_related(Quer { AssertSql( """ -SELECT [o0].[RelatedTypeRootEntityId], [o0].[Id], [o0].[Int], [o0].[Name], [o0].[String] +SELECT [o0].[RelatedTypeRootEntityId], [o0].[Id], [o0].[Int], [o0].[Ints], [o0].[Name], [o0].[String] FROM [RootEntity] AS [r] LEFT JOIN [OptionalRelated] AS [o] ON [r].[Id] = [o].[RootEntityId] INNER JOIN [OptionalRelated_NestedCollection] AS [o0] ON [o].[RootEntityId] = [o0].[RelatedTypeRootEntityId] @@ -330,7 +330,7 @@ public override async Task Select_root_duplicated(QueryTrackingBehavior queryTra AssertSql( """ -SELECT [r].[Id], [r].[Name], [o].[RootEntityId], [o].[Id], [o].[Int], [o].[Name], [o].[String], [o0].[RelatedTypeRootEntityId], [o1].[RelatedTypeRootEntityId], [r0].[RootEntityId], [r1].[RelatedTypeRootEntityId], [r2].[RelatedTypeRootEntityId], [o2].[RelatedTypeRootEntityId], [o2].[Id], [o2].[Int], [o2].[Name], [o2].[String], [o0].[Id], [o0].[Int], [o0].[Name], [o0].[String], [o1].[Id], [o1].[Int], [o1].[Name], [o1].[String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[RelatedTypeRootEntityId0], [s].[RelatedTypeId0], [s].[RelatedTypeRootEntityId1], [s].[RelatedTypeId1], [s].[Id0], [s].[Int0], [s].[Name0], [s].[String0], [s].[Id1], [s].[Int1], [s].[Name1], [s].[String1], [s].[Id2], [s].[Int2], [s].[Name2], [s].[String2], [r0].[Id], [r0].[Int], [r0].[Name], [r0].[String], [r7].[RelatedTypeRootEntityId], [r7].[Id], [r7].[Int], [r7].[Name], [r7].[String], [r1].[Id], [r1].[Int], [r1].[Name], [r1].[String], [r2].[Id], [r2].[Int], [r2].[Name], [r2].[String], [o3].[RelatedTypeRootEntityId], [o3].[Id], [o3].[Int], [o3].[Name], [o3].[String], [s0].[RootEntityId], [s0].[Id], [s0].[Int], [s0].[Name], [s0].[String], [s0].[RelatedTypeRootEntityId], [s0].[RelatedTypeId], [s0].[RelatedTypeRootEntityId0], [s0].[RelatedTypeId0], [s0].[RelatedTypeRootEntityId1], [s0].[RelatedTypeId1], [s0].[Id0], [s0].[Int0], [s0].[Name0], [s0].[String0], [s0].[Id1], [s0].[Int1], [s0].[Name1], [s0].[String1], [s0].[Id2], [s0].[Int2], [s0].[Name2], [s0].[String2], [r12].[RelatedTypeRootEntityId], [r12].[Id], [r12].[Int], [r12].[Name], [r12].[String] +SELECT [r].[Id], [r].[Name], [o].[RootEntityId], [o].[Id], [o].[Int], [o].[Ints], [o].[Name], [o].[String], [o0].[RelatedTypeRootEntityId], [o1].[RelatedTypeRootEntityId], [r0].[RootEntityId], [r1].[RelatedTypeRootEntityId], [r2].[RelatedTypeRootEntityId], [o2].[RelatedTypeRootEntityId], [o2].[Id], [o2].[Int], [o2].[Ints], [o2].[Name], [o2].[String], [o0].[Id], [o0].[Int], [o0].[Ints], [o0].[Name], [o0].[String], [o1].[Id], [o1].[Int], [o1].[Ints], [o1].[Name], [o1].[String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Ints], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[RelatedTypeRootEntityId0], [s].[RelatedTypeId0], [s].[RelatedTypeRootEntityId1], [s].[RelatedTypeId1], [s].[Id0], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[Id1], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[Id2], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r0].[Id], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[String], [r7].[RelatedTypeRootEntityId], [r7].[Id], [r7].[Int], [r7].[Ints], [r7].[Name], [r7].[String], [r1].[Id], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[String], [r2].[Id], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[String], [o3].[RelatedTypeRootEntityId], [o3].[Id], [o3].[Int], [o3].[Ints], [o3].[Name], [o3].[String], [s0].[RootEntityId], [s0].[Id], [s0].[Int], [s0].[Ints], [s0].[Name], [s0].[String], [s0].[RelatedTypeRootEntityId], [s0].[RelatedTypeId], [s0].[RelatedTypeRootEntityId0], [s0].[RelatedTypeId0], [s0].[RelatedTypeRootEntityId1], [s0].[RelatedTypeId1], [s0].[Id0], [s0].[Int0], [s0].[Ints0], [s0].[Name0], [s0].[String0], [s0].[Id1], [s0].[Int1], [s0].[Ints1], [s0].[Name1], [s0].[String1], [s0].[Id2], [s0].[Int2], [s0].[Ints2], [s0].[Name2], [s0].[String2], [r12].[RelatedTypeRootEntityId], [r12].[Id], [r12].[Int], [r12].[Ints], [r12].[Name], [r12].[String] FROM [RootEntity] AS [r] LEFT JOIN [OptionalRelated] AS [o] ON [r].[Id] = [o].[RootEntityId] LEFT JOIN [OptionalRelated_OptionalNested] AS [o0] ON [o].[RootEntityId] = [o0].[RelatedTypeRootEntityId] @@ -340,7 +340,7 @@ FROM [RootEntity] AS [r] LEFT JOIN [RequiredRelated_RequiredNested] AS [r2] ON [r0].[RootEntityId] = [r2].[RelatedTypeRootEntityId] LEFT JOIN [OptionalRelated_NestedCollection] AS [o2] ON [o].[RootEntityId] = [o2].[RelatedTypeRootEntityId] LEFT JOIN ( - SELECT [r3].[RootEntityId], [r3].[Id], [r3].[Int], [r3].[Name], [r3].[String], [r4].[RelatedTypeRootEntityId], [r4].[RelatedTypeId], [r5].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId0], [r5].[RelatedTypeId] AS [RelatedTypeId0], [r6].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId1], [r6].[RelatedTypeId] AS [RelatedTypeId1], [r6].[Id] AS [Id0], [r6].[Int] AS [Int0], [r6].[Name] AS [Name0], [r6].[String] AS [String0], [r4].[Id] AS [Id1], [r4].[Int] AS [Int1], [r4].[Name] AS [Name1], [r4].[String] AS [String1], [r5].[Id] AS [Id2], [r5].[Int] AS [Int2], [r5].[Name] AS [Name2], [r5].[String] AS [String2] + SELECT [r3].[RootEntityId], [r3].[Id], [r3].[Int], [r3].[Ints], [r3].[Name], [r3].[String], [r4].[RelatedTypeRootEntityId], [r4].[RelatedTypeId], [r5].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId0], [r5].[RelatedTypeId] AS [RelatedTypeId0], [r6].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId1], [r6].[RelatedTypeId] AS [RelatedTypeId1], [r6].[Id] AS [Id0], [r6].[Int] AS [Int0], [r6].[Ints] AS [Ints0], [r6].[Name] AS [Name0], [r6].[String] AS [String0], [r4].[Id] AS [Id1], [r4].[Int] AS [Int1], [r4].[Ints] AS [Ints1], [r4].[Name] AS [Name1], [r4].[String] AS [String1], [r5].[Id] AS [Id2], [r5].[Int] AS [Int2], [r5].[Ints] AS [Ints2], [r5].[Name] AS [Name2], [r5].[String] AS [String2] FROM [RelatedCollection] AS [r3] LEFT JOIN [RelatedCollection_OptionalNested] AS [r4] ON [r3].[RootEntityId] = [r4].[RelatedTypeRootEntityId] AND [r3].[Id] = [r4].[RelatedTypeId] LEFT JOIN [RelatedCollection_RequiredNested] AS [r5] ON [r3].[RootEntityId] = [r5].[RelatedTypeRootEntityId] AND [r3].[Id] = [r5].[RelatedTypeId] @@ -349,7 +349,7 @@ FROM [RelatedCollection] AS [r3] LEFT JOIN [RequiredRelated_NestedCollection] AS [r7] ON [r0].[RootEntityId] = [r7].[RelatedTypeRootEntityId] LEFT JOIN [OptionalRelated_NestedCollection] AS [o3] ON [o].[RootEntityId] = [o3].[RelatedTypeRootEntityId] LEFT JOIN ( - SELECT [r8].[RootEntityId], [r8].[Id], [r8].[Int], [r8].[Name], [r8].[String], [r9].[RelatedTypeRootEntityId], [r9].[RelatedTypeId], [r10].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId0], [r10].[RelatedTypeId] AS [RelatedTypeId0], [r11].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId1], [r11].[RelatedTypeId] AS [RelatedTypeId1], [r11].[Id] AS [Id0], [r11].[Int] AS [Int0], [r11].[Name] AS [Name0], [r11].[String] AS [String0], [r9].[Id] AS [Id1], [r9].[Int] AS [Int1], [r9].[Name] AS [Name1], [r9].[String] AS [String1], [r10].[Id] AS [Id2], [r10].[Int] AS [Int2], [r10].[Name] AS [Name2], [r10].[String] AS [String2] + SELECT [r8].[RootEntityId], [r8].[Id], [r8].[Int], [r8].[Ints], [r8].[Name], [r8].[String], [r9].[RelatedTypeRootEntityId], [r9].[RelatedTypeId], [r10].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId0], [r10].[RelatedTypeId] AS [RelatedTypeId0], [r11].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId1], [r11].[RelatedTypeId] AS [RelatedTypeId1], [r11].[Id] AS [Id0], [r11].[Int] AS [Int0], [r11].[Ints] AS [Ints0], [r11].[Name] AS [Name0], [r11].[String] AS [String0], [r9].[Id] AS [Id1], [r9].[Int] AS [Int1], [r9].[Ints] AS [Ints1], [r9].[Name] AS [Name1], [r9].[String] AS [String1], [r10].[Id] AS [Id2], [r10].[Int] AS [Int2], [r10].[Ints] AS [Ints2], [r10].[Name] AS [Name2], [r10].[String] AS [String2] FROM [RelatedCollection] AS [r8] LEFT JOIN [RelatedCollection_OptionalNested] AS [r9] ON [r8].[RootEntityId] = [r9].[RelatedTypeRootEntityId] AND [r8].[Id] = [r9].[RelatedTypeId] LEFT JOIN [RelatedCollection_RequiredNested] AS [r10] ON [r8].[RootEntityId] = [r10].[RelatedTypeRootEntityId] AND [r8].[Id] = [r10].[RelatedTypeId] @@ -372,10 +372,10 @@ public override async Task Select_subquery_required_related_FirstOrDefault(Query { AssertSql( """ -SELECT [s].[RelatedTypeRootEntityId], [s].[Id], [s].[Int], [s].[Name], [s].[String] +SELECT [s].[RelatedTypeRootEntityId], [s].[Id], [s].[Int], [s].[Ints], [s].[Name], [s].[String] FROM [RootEntity] AS [r] OUTER APPLY ( - SELECT TOP(1) [r2].[RelatedTypeRootEntityId], [r2].[Id], [r2].[Int], [r2].[Name], [r2].[String] + SELECT TOP(1) [r2].[RelatedTypeRootEntityId], [r2].[Id], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[String] FROM [RootEntity] AS [r0] LEFT JOIN [RequiredRelated] AS [r1] ON [r0].[Id] = [r1].[RootEntityId] LEFT JOIN [RequiredRelated_RequiredNested] AS [r2] ON [r1].[RootEntityId] = [r2].[RelatedTypeRootEntityId] @@ -393,10 +393,10 @@ public override async Task Select_subquery_optional_related_FirstOrDefault(Query { AssertSql( """ -SELECT [s].[RelatedTypeRootEntityId], [s].[Id], [s].[Int], [s].[Name], [s].[String] +SELECT [s].[RelatedTypeRootEntityId], [s].[Id], [s].[Int], [s].[Ints], [s].[Name], [s].[String] FROM [RootEntity] AS [r] OUTER APPLY ( - SELECT TOP(1) [o0].[RelatedTypeRootEntityId], [o0].[Id], [o0].[Int], [o0].[Name], [o0].[String] + SELECT TOP(1) [o0].[RelatedTypeRootEntityId], [o0].[Id], [o0].[Int], [o0].[Ints], [o0].[Name], [o0].[String] FROM [RootEntity] AS [r0] LEFT JOIN [OptionalRelated] AS [o] ON [r0].[Id] = [o].[RootEntityId] LEFT JOIN [OptionalRelated_RequiredNested] AS [o0] ON [o].[RootEntityId] = [o0].[RelatedTypeRootEntityId] diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/Associations/OwnedNavigations/OwnedNavigationsSetOperationsSqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/Associations/OwnedNavigations/OwnedNavigationsSetOperationsSqlServerTest.cs index 3c50fff7fab..c68d8294fa1 100644 --- a/test/EFCore.SqlServer.FunctionalTests/Query/Associations/OwnedNavigations/OwnedNavigationsSetOperationsSqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/Query/Associations/OwnedNavigations/OwnedNavigationsSetOperationsSqlServerTest.cs @@ -14,7 +14,7 @@ public override async Task On_related() AssertSql( """ -SELECT [r].[Id], [r].[Name], [o].[RootEntityId], [o].[Id], [o].[Int], [o].[Name], [o].[String], [o0].[RelatedTypeRootEntityId], [o1].[RelatedTypeRootEntityId], [r2].[RootEntityId], [r3].[RelatedTypeRootEntityId], [r4].[RelatedTypeRootEntityId], [o2].[RelatedTypeRootEntityId], [o2].[Id], [o2].[Int], [o2].[Name], [o2].[String], [o0].[Id], [o0].[Int], [o0].[Name], [o0].[String], [o1].[Id], [o1].[Int], [o1].[Name], [o1].[String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[RelatedTypeRootEntityId0], [s].[RelatedTypeId0], [s].[RelatedTypeRootEntityId1], [s].[RelatedTypeId1], [s].[Id0], [s].[Int0], [s].[Name0], [s].[String0], [s].[Id1], [s].[Int1], [s].[Name1], [s].[String1], [s].[Id2], [s].[Int2], [s].[Name2], [s].[String2], [r2].[Id], [r2].[Int], [r2].[Name], [r2].[String], [r9].[RelatedTypeRootEntityId], [r9].[Id], [r9].[Int], [r9].[Name], [r9].[String], [r3].[Id], [r3].[Int], [r3].[Name], [r3].[String], [r4].[Id], [r4].[Int], [r4].[Name], [r4].[String] +SELECT [r].[Id], [r].[Name], [o].[RootEntityId], [o].[Id], [o].[Int], [o].[Ints], [o].[Name], [o].[String], [o0].[RelatedTypeRootEntityId], [o1].[RelatedTypeRootEntityId], [r2].[RootEntityId], [r3].[RelatedTypeRootEntityId], [r4].[RelatedTypeRootEntityId], [o2].[RelatedTypeRootEntityId], [o2].[Id], [o2].[Int], [o2].[Ints], [o2].[Name], [o2].[String], [o0].[Id], [o0].[Int], [o0].[Ints], [o0].[Name], [o0].[String], [o1].[Id], [o1].[Int], [o1].[Ints], [o1].[Name], [o1].[String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Ints], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[RelatedTypeRootEntityId0], [s].[RelatedTypeId0], [s].[RelatedTypeRootEntityId1], [s].[RelatedTypeId1], [s].[Id0], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[Id1], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[Id2], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r2].[Id], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[String], [r9].[RelatedTypeRootEntityId], [r9].[Id], [r9].[Int], [r9].[Ints], [r9].[Name], [r9].[String], [r3].[Id], [r3].[Int], [r3].[Ints], [r3].[Name], [r3].[String], [r4].[Id], [r4].[Int], [r4].[Ints], [r4].[Name], [r4].[String] FROM [RootEntity] AS [r] LEFT JOIN [OptionalRelated] AS [o] ON [r].[Id] = [o].[RootEntityId] LEFT JOIN [OptionalRelated_OptionalNested] AS [o0] ON [o].[RootEntityId] = [o0].[RelatedTypeRootEntityId] @@ -24,7 +24,7 @@ FROM [RootEntity] AS [r] LEFT JOIN [RequiredRelated_RequiredNested] AS [r4] ON [r2].[RootEntityId] = [r4].[RelatedTypeRootEntityId] LEFT JOIN [OptionalRelated_NestedCollection] AS [o2] ON [o].[RootEntityId] = [o2].[RelatedTypeRootEntityId] LEFT JOIN ( - SELECT [r5].[RootEntityId], [r5].[Id], [r5].[Int], [r5].[Name], [r5].[String], [r6].[RelatedTypeRootEntityId], [r6].[RelatedTypeId], [r7].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId0], [r7].[RelatedTypeId] AS [RelatedTypeId0], [r8].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId1], [r8].[RelatedTypeId] AS [RelatedTypeId1], [r8].[Id] AS [Id0], [r8].[Int] AS [Int0], [r8].[Name] AS [Name0], [r8].[String] AS [String0], [r6].[Id] AS [Id1], [r6].[Int] AS [Int1], [r6].[Name] AS [Name1], [r6].[String] AS [String1], [r7].[Id] AS [Id2], [r7].[Int] AS [Int2], [r7].[Name] AS [Name2], [r7].[String] AS [String2] + SELECT [r5].[RootEntityId], [r5].[Id], [r5].[Int], [r5].[Ints], [r5].[Name], [r5].[String], [r6].[RelatedTypeRootEntityId], [r6].[RelatedTypeId], [r7].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId0], [r7].[RelatedTypeId] AS [RelatedTypeId0], [r8].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId1], [r8].[RelatedTypeId] AS [RelatedTypeId1], [r8].[Id] AS [Id0], [r8].[Int] AS [Int0], [r8].[Ints] AS [Ints0], [r8].[Name] AS [Name0], [r8].[String] AS [String0], [r6].[Id] AS [Id1], [r6].[Int] AS [Int1], [r6].[Ints] AS [Ints1], [r6].[Name] AS [Name1], [r6].[String] AS [String1], [r7].[Id] AS [Id2], [r7].[Int] AS [Int2], [r7].[Ints] AS [Ints2], [r7].[Name] AS [Name2], [r7].[String] AS [String2] FROM [RelatedCollection] AS [r5] LEFT JOIN [RelatedCollection_OptionalNested] AS [r6] ON [r5].[RootEntityId] = [r6].[RelatedTypeRootEntityId] AND [r5].[Id] = [r6].[RelatedTypeId] LEFT JOIN [RelatedCollection_RequiredNested] AS [r7] ON [r5].[RootEntityId] = [r7].[RelatedTypeRootEntityId] AND [r5].[Id] = [r7].[RelatedTypeId] @@ -81,7 +81,7 @@ public override async Task On_nested() AssertSql( """ -SELECT [r].[Id], [r].[Name], [o].[RootEntityId], [o].[Id], [o].[Int], [o].[Name], [o].[String], [r0].[RootEntityId], [o0].[RelatedTypeRootEntityId], [o1].[RelatedTypeRootEntityId], [r3].[RelatedTypeRootEntityId], [r4].[RelatedTypeRootEntityId], [o2].[RelatedTypeRootEntityId], [o2].[Id], [o2].[Int], [o2].[Name], [o2].[String], [o0].[Id], [o0].[Int], [o0].[Name], [o0].[String], [o1].[Id], [o1].[Int], [o1].[Name], [o1].[String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[RelatedTypeRootEntityId0], [s].[RelatedTypeId0], [s].[RelatedTypeRootEntityId1], [s].[RelatedTypeId1], [s].[Id0], [s].[Int0], [s].[Name0], [s].[String0], [s].[Id1], [s].[Int1], [s].[Name1], [s].[String1], [s].[Id2], [s].[Int2], [s].[Name2], [s].[String2], [r0].[Id], [r0].[Int], [r0].[Name], [r0].[String], [r9].[RelatedTypeRootEntityId], [r9].[Id], [r9].[Int], [r9].[Name], [r9].[String], [r3].[Id], [r3].[Int], [r3].[Name], [r3].[String], [r4].[Id], [r4].[Int], [r4].[Name], [r4].[String] +SELECT [r].[Id], [r].[Name], [o].[RootEntityId], [o].[Id], [o].[Int], [o].[Ints], [o].[Name], [o].[String], [r0].[RootEntityId], [o0].[RelatedTypeRootEntityId], [o1].[RelatedTypeRootEntityId], [r3].[RelatedTypeRootEntityId], [r4].[RelatedTypeRootEntityId], [o2].[RelatedTypeRootEntityId], [o2].[Id], [o2].[Int], [o2].[Ints], [o2].[Name], [o2].[String], [o0].[Id], [o0].[Int], [o0].[Ints], [o0].[Name], [o0].[String], [o1].[Id], [o1].[Int], [o1].[Ints], [o1].[Name], [o1].[String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Ints], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[RelatedTypeRootEntityId0], [s].[RelatedTypeId0], [s].[RelatedTypeRootEntityId1], [s].[RelatedTypeId1], [s].[Id0], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[Id1], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[Id2], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r0].[Id], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[String], [r9].[RelatedTypeRootEntityId], [r9].[Id], [r9].[Int], [r9].[Ints], [r9].[Name], [r9].[String], [r3].[Id], [r3].[Int], [r3].[Ints], [r3].[Name], [r3].[String], [r4].[Id], [r4].[Int], [r4].[Ints], [r4].[Name], [r4].[String] FROM [RootEntity] AS [r] LEFT JOIN [RequiredRelated] AS [r0] ON [r].[Id] = [r0].[RootEntityId] LEFT JOIN [OptionalRelated] AS [o] ON [r].[Id] = [o].[RootEntityId] @@ -91,7 +91,7 @@ FROM [RootEntity] AS [r] LEFT JOIN [RequiredRelated_RequiredNested] AS [r4] ON [r0].[RootEntityId] = [r4].[RelatedTypeRootEntityId] LEFT JOIN [OptionalRelated_NestedCollection] AS [o2] ON [o].[RootEntityId] = [o2].[RelatedTypeRootEntityId] LEFT JOIN ( - SELECT [r5].[RootEntityId], [r5].[Id], [r5].[Int], [r5].[Name], [r5].[String], [r6].[RelatedTypeRootEntityId], [r6].[RelatedTypeId], [r7].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId0], [r7].[RelatedTypeId] AS [RelatedTypeId0], [r8].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId1], [r8].[RelatedTypeId] AS [RelatedTypeId1], [r8].[Id] AS [Id0], [r8].[Int] AS [Int0], [r8].[Name] AS [Name0], [r8].[String] AS [String0], [r6].[Id] AS [Id1], [r6].[Int] AS [Int1], [r6].[Name] AS [Name1], [r6].[String] AS [String1], [r7].[Id] AS [Id2], [r7].[Int] AS [Int2], [r7].[Name] AS [Name2], [r7].[String] AS [String2] + SELECT [r5].[RootEntityId], [r5].[Id], [r5].[Int], [r5].[Ints], [r5].[Name], [r5].[String], [r6].[RelatedTypeRootEntityId], [r6].[RelatedTypeId], [r7].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId0], [r7].[RelatedTypeId] AS [RelatedTypeId0], [r8].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId1], [r8].[RelatedTypeId] AS [RelatedTypeId1], [r8].[Id] AS [Id0], [r8].[Int] AS [Int0], [r8].[Ints] AS [Ints0], [r8].[Name] AS [Name0], [r8].[String] AS [String0], [r6].[Id] AS [Id1], [r6].[Int] AS [Int1], [r6].[Ints] AS [Ints1], [r6].[Name] AS [Name1], [r6].[String] AS [String1], [r7].[Id] AS [Id2], [r7].[Int] AS [Int2], [r7].[Ints] AS [Ints2], [r7].[Name] AS [Name2], [r7].[String] AS [String2] FROM [RelatedCollection] AS [r5] LEFT JOIN [RelatedCollection_OptionalNested] AS [r6] ON [r5].[RootEntityId] = [r6].[RelatedTypeRootEntityId] AND [r5].[Id] = [r6].[RelatedTypeId] LEFT JOIN [RelatedCollection_RequiredNested] AS [r7] ON [r5].[RootEntityId] = [r7].[RelatedTypeRootEntityId] AND [r5].[Id] = [r7].[RelatedTypeId] diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/Associations/OwnedNavigations/OwnedNavigationsStructuralEqualitySqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/Associations/OwnedNavigations/OwnedNavigationsStructuralEqualitySqlServerTest.cs index 3fe0516bc3d..409e4636ce0 100644 --- a/test/EFCore.SqlServer.FunctionalTests/Query/Associations/OwnedNavigations/OwnedNavigationsStructuralEqualitySqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/Query/Associations/OwnedNavigations/OwnedNavigationsStructuralEqualitySqlServerTest.cs @@ -14,7 +14,7 @@ public override async Task Two_related() AssertSql( """ -SELECT [r].[Id], [r].[Name], [o].[RootEntityId], [o].[Id], [o].[Int], [o].[Name], [o].[String], [r0].[RootEntityId], [o0].[RelatedTypeRootEntityId], [o1].[RelatedTypeRootEntityId], [r1].[RelatedTypeRootEntityId], [r2].[RelatedTypeRootEntityId], [o2].[RelatedTypeRootEntityId], [o2].[Id], [o2].[Int], [o2].[Name], [o2].[String], [o0].[Id], [o0].[Int], [o0].[Name], [o0].[String], [o1].[Id], [o1].[Int], [o1].[Name], [o1].[String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[RelatedTypeRootEntityId0], [s].[RelatedTypeId0], [s].[RelatedTypeRootEntityId1], [s].[RelatedTypeId1], [s].[Id0], [s].[Int0], [s].[Name0], [s].[String0], [s].[Id1], [s].[Int1], [s].[Name1], [s].[String1], [s].[Id2], [s].[Int2], [s].[Name2], [s].[String2], [r0].[Id], [r0].[Int], [r0].[Name], [r0].[String], [r7].[RelatedTypeRootEntityId], [r7].[Id], [r7].[Int], [r7].[Name], [r7].[String], [r1].[Id], [r1].[Int], [r1].[Name], [r1].[String], [r2].[Id], [r2].[Int], [r2].[Name], [r2].[String] +SELECT [r].[Id], [r].[Name], [o].[RootEntityId], [o].[Id], [o].[Int], [o].[Ints], [o].[Name], [o].[String], [r0].[RootEntityId], [o0].[RelatedTypeRootEntityId], [o1].[RelatedTypeRootEntityId], [r1].[RelatedTypeRootEntityId], [r2].[RelatedTypeRootEntityId], [o2].[RelatedTypeRootEntityId], [o2].[Id], [o2].[Int], [o2].[Ints], [o2].[Name], [o2].[String], [o0].[Id], [o0].[Int], [o0].[Ints], [o0].[Name], [o0].[String], [o1].[Id], [o1].[Int], [o1].[Ints], [o1].[Name], [o1].[String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Ints], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[RelatedTypeRootEntityId0], [s].[RelatedTypeId0], [s].[RelatedTypeRootEntityId1], [s].[RelatedTypeId1], [s].[Id0], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[Id1], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[Id2], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r0].[Id], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[String], [r7].[RelatedTypeRootEntityId], [r7].[Id], [r7].[Int], [r7].[Ints], [r7].[Name], [r7].[String], [r1].[Id], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[String], [r2].[Id], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[String] FROM [RootEntity] AS [r] LEFT JOIN [RequiredRelated] AS [r0] ON [r].[Id] = [r0].[RootEntityId] LEFT JOIN [OptionalRelated] AS [o] ON [r].[Id] = [o].[RootEntityId] @@ -24,7 +24,7 @@ FROM [RootEntity] AS [r] LEFT JOIN [RequiredRelated_RequiredNested] AS [r2] ON [r0].[RootEntityId] = [r2].[RelatedTypeRootEntityId] LEFT JOIN [OptionalRelated_NestedCollection] AS [o2] ON [o].[RootEntityId] = [o2].[RelatedTypeRootEntityId] LEFT JOIN ( - SELECT [r3].[RootEntityId], [r3].[Id], [r3].[Int], [r3].[Name], [r3].[String], [r4].[RelatedTypeRootEntityId], [r4].[RelatedTypeId], [r5].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId0], [r5].[RelatedTypeId] AS [RelatedTypeId0], [r6].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId1], [r6].[RelatedTypeId] AS [RelatedTypeId1], [r6].[Id] AS [Id0], [r6].[Int] AS [Int0], [r6].[Name] AS [Name0], [r6].[String] AS [String0], [r4].[Id] AS [Id1], [r4].[Int] AS [Int1], [r4].[Name] AS [Name1], [r4].[String] AS [String1], [r5].[Id] AS [Id2], [r5].[Int] AS [Int2], [r5].[Name] AS [Name2], [r5].[String] AS [String2] + SELECT [r3].[RootEntityId], [r3].[Id], [r3].[Int], [r3].[Ints], [r3].[Name], [r3].[String], [r4].[RelatedTypeRootEntityId], [r4].[RelatedTypeId], [r5].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId0], [r5].[RelatedTypeId] AS [RelatedTypeId0], [r6].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId1], [r6].[RelatedTypeId] AS [RelatedTypeId1], [r6].[Id] AS [Id0], [r6].[Int] AS [Int0], [r6].[Ints] AS [Ints0], [r6].[Name] AS [Name0], [r6].[String] AS [String0], [r4].[Id] AS [Id1], [r4].[Int] AS [Int1], [r4].[Ints] AS [Ints1], [r4].[Name] AS [Name1], [r4].[String] AS [String1], [r5].[Id] AS [Id2], [r5].[Int] AS [Int2], [r5].[Ints] AS [Ints2], [r5].[Name] AS [Name2], [r5].[String] AS [String2] FROM [RelatedCollection] AS [r3] LEFT JOIN [RelatedCollection_OptionalNested] AS [r4] ON [r3].[RootEntityId] = [r4].[RelatedTypeRootEntityId] AND [r3].[Id] = [r4].[RelatedTypeId] LEFT JOIN [RelatedCollection_RequiredNested] AS [r5] ON [r3].[RootEntityId] = [r5].[RelatedTypeRootEntityId] AND [r3].[Id] = [r5].[RelatedTypeId] @@ -42,7 +42,7 @@ public override async Task Two_nested() AssertSql( """ -SELECT [r].[Id], [r].[Name], [o].[RootEntityId], [o].[Id], [o].[Int], [o].[Name], [o].[String], [r0].[RootEntityId], [r1].[RelatedTypeRootEntityId], [o0].[RelatedTypeRootEntityId], [o1].[RelatedTypeRootEntityId], [r2].[RelatedTypeRootEntityId], [o2].[RelatedTypeRootEntityId], [o2].[Id], [o2].[Int], [o2].[Name], [o2].[String], [o1].[Id], [o1].[Int], [o1].[Name], [o1].[String], [o0].[Id], [o0].[Int], [o0].[Name], [o0].[String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[RelatedTypeRootEntityId0], [s].[RelatedTypeId0], [s].[RelatedTypeRootEntityId1], [s].[RelatedTypeId1], [s].[Id0], [s].[Int0], [s].[Name0], [s].[String0], [s].[Id1], [s].[Int1], [s].[Name1], [s].[String1], [s].[Id2], [s].[Int2], [s].[Name2], [s].[String2], [r0].[Id], [r0].[Int], [r0].[Name], [r0].[String], [r7].[RelatedTypeRootEntityId], [r7].[Id], [r7].[Int], [r7].[Name], [r7].[String], [r2].[Id], [r2].[Int], [r2].[Name], [r2].[String], [r1].[Id], [r1].[Int], [r1].[Name], [r1].[String] +SELECT [r].[Id], [r].[Name], [o].[RootEntityId], [o].[Id], [o].[Int], [o].[Ints], [o].[Name], [o].[String], [r0].[RootEntityId], [r1].[RelatedTypeRootEntityId], [o0].[RelatedTypeRootEntityId], [o1].[RelatedTypeRootEntityId], [r2].[RelatedTypeRootEntityId], [o2].[RelatedTypeRootEntityId], [o2].[Id], [o2].[Int], [o2].[Ints], [o2].[Name], [o2].[String], [o1].[Id], [o1].[Int], [o1].[Ints], [o1].[Name], [o1].[String], [o0].[Id], [o0].[Int], [o0].[Ints], [o0].[Name], [o0].[String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Ints], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[RelatedTypeRootEntityId0], [s].[RelatedTypeId0], [s].[RelatedTypeRootEntityId1], [s].[RelatedTypeId1], [s].[Id0], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[Id1], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[Id2], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r0].[Id], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[String], [r7].[RelatedTypeRootEntityId], [r7].[Id], [r7].[Int], [r7].[Ints], [r7].[Name], [r7].[String], [r2].[Id], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[String], [r1].[Id], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[String] FROM [RootEntity] AS [r] LEFT JOIN [RequiredRelated] AS [r0] ON [r].[Id] = [r0].[RootEntityId] LEFT JOIN [RequiredRelated_RequiredNested] AS [r1] ON [r0].[RootEntityId] = [r1].[RelatedTypeRootEntityId] @@ -52,7 +52,7 @@ FROM [RootEntity] AS [r] LEFT JOIN [RequiredRelated_OptionalNested] AS [r2] ON [r0].[RootEntityId] = [r2].[RelatedTypeRootEntityId] LEFT JOIN [OptionalRelated_NestedCollection] AS [o2] ON [o].[RootEntityId] = [o2].[RelatedTypeRootEntityId] LEFT JOIN ( - SELECT [r3].[RootEntityId], [r3].[Id], [r3].[Int], [r3].[Name], [r3].[String], [r4].[RelatedTypeRootEntityId], [r4].[RelatedTypeId], [r5].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId0], [r5].[RelatedTypeId] AS [RelatedTypeId0], [r6].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId1], [r6].[RelatedTypeId] AS [RelatedTypeId1], [r6].[Id] AS [Id0], [r6].[Int] AS [Int0], [r6].[Name] AS [Name0], [r6].[String] AS [String0], [r4].[Id] AS [Id1], [r4].[Int] AS [Int1], [r4].[Name] AS [Name1], [r4].[String] AS [String1], [r5].[Id] AS [Id2], [r5].[Int] AS [Int2], [r5].[Name] AS [Name2], [r5].[String] AS [String2] + SELECT [r3].[RootEntityId], [r3].[Id], [r3].[Int], [r3].[Ints], [r3].[Name], [r3].[String], [r4].[RelatedTypeRootEntityId], [r4].[RelatedTypeId], [r5].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId0], [r5].[RelatedTypeId] AS [RelatedTypeId0], [r6].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId1], [r6].[RelatedTypeId] AS [RelatedTypeId1], [r6].[Id] AS [Id0], [r6].[Int] AS [Int0], [r6].[Ints] AS [Ints0], [r6].[Name] AS [Name0], [r6].[String] AS [String0], [r4].[Id] AS [Id1], [r4].[Int] AS [Int1], [r4].[Ints] AS [Ints1], [r4].[Name] AS [Name1], [r4].[String] AS [String1], [r5].[Id] AS [Id2], [r5].[Int] AS [Int2], [r5].[Ints] AS [Ints2], [r5].[Name] AS [Name2], [r5].[String] AS [String2] FROM [RelatedCollection] AS [r3] LEFT JOIN [RelatedCollection_OptionalNested] AS [r4] ON [r3].[RootEntityId] = [r4].[RelatedTypeRootEntityId] AND [r3].[Id] = [r4].[RelatedTypeId] LEFT JOIN [RelatedCollection_RequiredNested] AS [r5] ON [r3].[RootEntityId] = [r5].[RelatedTypeRootEntityId] AND [r3].[Id] = [r5].[RelatedTypeId] @@ -70,7 +70,7 @@ public override async Task Not_equals() AssertSql( """ -SELECT [r].[Id], [r].[Name], [o].[RootEntityId], [o].[Id], [o].[Int], [o].[Name], [o].[String], [r0].[RootEntityId], [o0].[RelatedTypeRootEntityId], [o1].[RelatedTypeRootEntityId], [r1].[RelatedTypeRootEntityId], [r2].[RelatedTypeRootEntityId], [o2].[RelatedTypeRootEntityId], [o2].[Id], [o2].[Int], [o2].[Name], [o2].[String], [o0].[Id], [o0].[Int], [o0].[Name], [o0].[String], [o1].[Id], [o1].[Int], [o1].[Name], [o1].[String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[RelatedTypeRootEntityId0], [s].[RelatedTypeId0], [s].[RelatedTypeRootEntityId1], [s].[RelatedTypeId1], [s].[Id0], [s].[Int0], [s].[Name0], [s].[String0], [s].[Id1], [s].[Int1], [s].[Name1], [s].[String1], [s].[Id2], [s].[Int2], [s].[Name2], [s].[String2], [r0].[Id], [r0].[Int], [r0].[Name], [r0].[String], [r7].[RelatedTypeRootEntityId], [r7].[Id], [r7].[Int], [r7].[Name], [r7].[String], [r1].[Id], [r1].[Int], [r1].[Name], [r1].[String], [r2].[Id], [r2].[Int], [r2].[Name], [r2].[String] +SELECT [r].[Id], [r].[Name], [o].[RootEntityId], [o].[Id], [o].[Int], [o].[Ints], [o].[Name], [o].[String], [r0].[RootEntityId], [o0].[RelatedTypeRootEntityId], [o1].[RelatedTypeRootEntityId], [r1].[RelatedTypeRootEntityId], [r2].[RelatedTypeRootEntityId], [o2].[RelatedTypeRootEntityId], [o2].[Id], [o2].[Int], [o2].[Ints], [o2].[Name], [o2].[String], [o0].[Id], [o0].[Int], [o0].[Ints], [o0].[Name], [o0].[String], [o1].[Id], [o1].[Int], [o1].[Ints], [o1].[Name], [o1].[String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Ints], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[RelatedTypeRootEntityId0], [s].[RelatedTypeId0], [s].[RelatedTypeRootEntityId1], [s].[RelatedTypeId1], [s].[Id0], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[Id1], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[Id2], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r0].[Id], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[String], [r7].[RelatedTypeRootEntityId], [r7].[Id], [r7].[Int], [r7].[Ints], [r7].[Name], [r7].[String], [r1].[Id], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[String], [r2].[Id], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[String] FROM [RootEntity] AS [r] LEFT JOIN [RequiredRelated] AS [r0] ON [r].[Id] = [r0].[RootEntityId] LEFT JOIN [OptionalRelated] AS [o] ON [r].[Id] = [o].[RootEntityId] @@ -80,7 +80,7 @@ FROM [RootEntity] AS [r] LEFT JOIN [RequiredRelated_RequiredNested] AS [r2] ON [r0].[RootEntityId] = [r2].[RelatedTypeRootEntityId] LEFT JOIN [OptionalRelated_NestedCollection] AS [o2] ON [o].[RootEntityId] = [o2].[RelatedTypeRootEntityId] LEFT JOIN ( - SELECT [r3].[RootEntityId], [r3].[Id], [r3].[Int], [r3].[Name], [r3].[String], [r4].[RelatedTypeRootEntityId], [r4].[RelatedTypeId], [r5].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId0], [r5].[RelatedTypeId] AS [RelatedTypeId0], [r6].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId1], [r6].[RelatedTypeId] AS [RelatedTypeId1], [r6].[Id] AS [Id0], [r6].[Int] AS [Int0], [r6].[Name] AS [Name0], [r6].[String] AS [String0], [r4].[Id] AS [Id1], [r4].[Int] AS [Int1], [r4].[Name] AS [Name1], [r4].[String] AS [String1], [r5].[Id] AS [Id2], [r5].[Int] AS [Int2], [r5].[Name] AS [Name2], [r5].[String] AS [String2] + SELECT [r3].[RootEntityId], [r3].[Id], [r3].[Int], [r3].[Ints], [r3].[Name], [r3].[String], [r4].[RelatedTypeRootEntityId], [r4].[RelatedTypeId], [r5].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId0], [r5].[RelatedTypeId] AS [RelatedTypeId0], [r6].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId1], [r6].[RelatedTypeId] AS [RelatedTypeId1], [r6].[Id] AS [Id0], [r6].[Int] AS [Int0], [r6].[Ints] AS [Ints0], [r6].[Name] AS [Name0], [r6].[String] AS [String0], [r4].[Id] AS [Id1], [r4].[Int] AS [Int1], [r4].[Ints] AS [Ints1], [r4].[Name] AS [Name1], [r4].[String] AS [String1], [r5].[Id] AS [Id2], [r5].[Int] AS [Int2], [r5].[Ints] AS [Ints2], [r5].[Name] AS [Name2], [r5].[String] AS [String2] FROM [RelatedCollection] AS [r3] LEFT JOIN [RelatedCollection_OptionalNested] AS [r4] ON [r3].[RootEntityId] = [r4].[RelatedTypeRootEntityId] AND [r3].[Id] = [r4].[RelatedTypeId] LEFT JOIN [RelatedCollection_RequiredNested] AS [r5] ON [r3].[RootEntityId] = [r5].[RelatedTypeRootEntityId] AND [r3].[Id] = [r5].[RelatedTypeId] @@ -98,7 +98,7 @@ public override async Task Related_with_inline_null() AssertSql( """ -SELECT [r].[Id], [r].[Name], [o].[RootEntityId], [o].[Id], [o].[Int], [o].[Name], [o].[String], [o0].[RelatedTypeRootEntityId], [o1].[RelatedTypeRootEntityId], [r0].[RootEntityId], [r1].[RelatedTypeRootEntityId], [r2].[RelatedTypeRootEntityId], [o2].[RelatedTypeRootEntityId], [o2].[Id], [o2].[Int], [o2].[Name], [o2].[String], [o0].[Id], [o0].[Int], [o0].[Name], [o0].[String], [o1].[Id], [o1].[Int], [o1].[Name], [o1].[String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[RelatedTypeRootEntityId0], [s].[RelatedTypeId0], [s].[RelatedTypeRootEntityId1], [s].[RelatedTypeId1], [s].[Id0], [s].[Int0], [s].[Name0], [s].[String0], [s].[Id1], [s].[Int1], [s].[Name1], [s].[String1], [s].[Id2], [s].[Int2], [s].[Name2], [s].[String2], [r0].[Id], [r0].[Int], [r0].[Name], [r0].[String], [r7].[RelatedTypeRootEntityId], [r7].[Id], [r7].[Int], [r7].[Name], [r7].[String], [r1].[Id], [r1].[Int], [r1].[Name], [r1].[String], [r2].[Id], [r2].[Int], [r2].[Name], [r2].[String] +SELECT [r].[Id], [r].[Name], [o].[RootEntityId], [o].[Id], [o].[Int], [o].[Ints], [o].[Name], [o].[String], [o0].[RelatedTypeRootEntityId], [o1].[RelatedTypeRootEntityId], [r0].[RootEntityId], [r1].[RelatedTypeRootEntityId], [r2].[RelatedTypeRootEntityId], [o2].[RelatedTypeRootEntityId], [o2].[Id], [o2].[Int], [o2].[Ints], [o2].[Name], [o2].[String], [o0].[Id], [o0].[Int], [o0].[Ints], [o0].[Name], [o0].[String], [o1].[Id], [o1].[Int], [o1].[Ints], [o1].[Name], [o1].[String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Ints], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[RelatedTypeRootEntityId0], [s].[RelatedTypeId0], [s].[RelatedTypeRootEntityId1], [s].[RelatedTypeId1], [s].[Id0], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[Id1], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[Id2], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r0].[Id], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[String], [r7].[RelatedTypeRootEntityId], [r7].[Id], [r7].[Int], [r7].[Ints], [r7].[Name], [r7].[String], [r1].[Id], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[String], [r2].[Id], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[String] FROM [RootEntity] AS [r] LEFT JOIN [OptionalRelated] AS [o] ON [r].[Id] = [o].[RootEntityId] LEFT JOIN [OptionalRelated_OptionalNested] AS [o0] ON [o].[RootEntityId] = [o0].[RelatedTypeRootEntityId] @@ -108,7 +108,7 @@ FROM [RootEntity] AS [r] LEFT JOIN [RequiredRelated_RequiredNested] AS [r2] ON [r0].[RootEntityId] = [r2].[RelatedTypeRootEntityId] LEFT JOIN [OptionalRelated_NestedCollection] AS [o2] ON [o].[RootEntityId] = [o2].[RelatedTypeRootEntityId] LEFT JOIN ( - SELECT [r3].[RootEntityId], [r3].[Id], [r3].[Int], [r3].[Name], [r3].[String], [r4].[RelatedTypeRootEntityId], [r4].[RelatedTypeId], [r5].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId0], [r5].[RelatedTypeId] AS [RelatedTypeId0], [r6].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId1], [r6].[RelatedTypeId] AS [RelatedTypeId1], [r6].[Id] AS [Id0], [r6].[Int] AS [Int0], [r6].[Name] AS [Name0], [r6].[String] AS [String0], [r4].[Id] AS [Id1], [r4].[Int] AS [Int1], [r4].[Name] AS [Name1], [r4].[String] AS [String1], [r5].[Id] AS [Id2], [r5].[Int] AS [Int2], [r5].[Name] AS [Name2], [r5].[String] AS [String2] + SELECT [r3].[RootEntityId], [r3].[Id], [r3].[Int], [r3].[Ints], [r3].[Name], [r3].[String], [r4].[RelatedTypeRootEntityId], [r4].[RelatedTypeId], [r5].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId0], [r5].[RelatedTypeId] AS [RelatedTypeId0], [r6].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId1], [r6].[RelatedTypeId] AS [RelatedTypeId1], [r6].[Id] AS [Id0], [r6].[Int] AS [Int0], [r6].[Ints] AS [Ints0], [r6].[Name] AS [Name0], [r6].[String] AS [String0], [r4].[Id] AS [Id1], [r4].[Int] AS [Int1], [r4].[Ints] AS [Ints1], [r4].[Name] AS [Name1], [r4].[String] AS [String1], [r5].[Id] AS [Id2], [r5].[Int] AS [Int2], [r5].[Ints] AS [Ints2], [r5].[Name] AS [Name2], [r5].[String] AS [String2] FROM [RelatedCollection] AS [r3] LEFT JOIN [RelatedCollection_OptionalNested] AS [r4] ON [r3].[RootEntityId] = [r4].[RelatedTypeRootEntityId] AND [r3].[Id] = [r4].[RelatedTypeId] LEFT JOIN [RelatedCollection_RequiredNested] AS [r5] ON [r3].[RootEntityId] = [r5].[RelatedTypeRootEntityId] AND [r3].[Id] = [r5].[RelatedTypeId] @@ -126,7 +126,7 @@ public override async Task Related_with_parameter_null() AssertSql( """ -SELECT [r].[Id], [r].[Name], [o].[RootEntityId], [o].[Id], [o].[Int], [o].[Name], [o].[String], [o0].[RelatedTypeRootEntityId], [o1].[RelatedTypeRootEntityId], [r0].[RootEntityId], [r1].[RelatedTypeRootEntityId], [r2].[RelatedTypeRootEntityId], [o2].[RelatedTypeRootEntityId], [o2].[Id], [o2].[Int], [o2].[Name], [o2].[String], [o0].[Id], [o0].[Int], [o0].[Name], [o0].[String], [o1].[Id], [o1].[Int], [o1].[Name], [o1].[String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[RelatedTypeRootEntityId0], [s].[RelatedTypeId0], [s].[RelatedTypeRootEntityId1], [s].[RelatedTypeId1], [s].[Id0], [s].[Int0], [s].[Name0], [s].[String0], [s].[Id1], [s].[Int1], [s].[Name1], [s].[String1], [s].[Id2], [s].[Int2], [s].[Name2], [s].[String2], [r0].[Id], [r0].[Int], [r0].[Name], [r0].[String], [r7].[RelatedTypeRootEntityId], [r7].[Id], [r7].[Int], [r7].[Name], [r7].[String], [r1].[Id], [r1].[Int], [r1].[Name], [r1].[String], [r2].[Id], [r2].[Int], [r2].[Name], [r2].[String] +SELECT [r].[Id], [r].[Name], [o].[RootEntityId], [o].[Id], [o].[Int], [o].[Ints], [o].[Name], [o].[String], [o0].[RelatedTypeRootEntityId], [o1].[RelatedTypeRootEntityId], [r0].[RootEntityId], [r1].[RelatedTypeRootEntityId], [r2].[RelatedTypeRootEntityId], [o2].[RelatedTypeRootEntityId], [o2].[Id], [o2].[Int], [o2].[Ints], [o2].[Name], [o2].[String], [o0].[Id], [o0].[Int], [o0].[Ints], [o0].[Name], [o0].[String], [o1].[Id], [o1].[Int], [o1].[Ints], [o1].[Name], [o1].[String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Ints], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[RelatedTypeRootEntityId0], [s].[RelatedTypeId0], [s].[RelatedTypeRootEntityId1], [s].[RelatedTypeId1], [s].[Id0], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[Id1], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[Id2], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r0].[Id], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[String], [r7].[RelatedTypeRootEntityId], [r7].[Id], [r7].[Int], [r7].[Ints], [r7].[Name], [r7].[String], [r1].[Id], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[String], [r2].[Id], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[String] FROM [RootEntity] AS [r] LEFT JOIN [OptionalRelated] AS [o] ON [r].[Id] = [o].[RootEntityId] LEFT JOIN [OptionalRelated_OptionalNested] AS [o0] ON [o].[RootEntityId] = [o0].[RelatedTypeRootEntityId] @@ -136,7 +136,7 @@ FROM [RootEntity] AS [r] LEFT JOIN [RequiredRelated_RequiredNested] AS [r2] ON [r0].[RootEntityId] = [r2].[RelatedTypeRootEntityId] LEFT JOIN [OptionalRelated_NestedCollection] AS [o2] ON [o].[RootEntityId] = [o2].[RelatedTypeRootEntityId] LEFT JOIN ( - SELECT [r3].[RootEntityId], [r3].[Id], [r3].[Int], [r3].[Name], [r3].[String], [r4].[RelatedTypeRootEntityId], [r4].[RelatedTypeId], [r5].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId0], [r5].[RelatedTypeId] AS [RelatedTypeId0], [r6].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId1], [r6].[RelatedTypeId] AS [RelatedTypeId1], [r6].[Id] AS [Id0], [r6].[Int] AS [Int0], [r6].[Name] AS [Name0], [r6].[String] AS [String0], [r4].[Id] AS [Id1], [r4].[Int] AS [Int1], [r4].[Name] AS [Name1], [r4].[String] AS [String1], [r5].[Id] AS [Id2], [r5].[Int] AS [Int2], [r5].[Name] AS [Name2], [r5].[String] AS [String2] + SELECT [r3].[RootEntityId], [r3].[Id], [r3].[Int], [r3].[Ints], [r3].[Name], [r3].[String], [r4].[RelatedTypeRootEntityId], [r4].[RelatedTypeId], [r5].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId0], [r5].[RelatedTypeId] AS [RelatedTypeId0], [r6].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId1], [r6].[RelatedTypeId] AS [RelatedTypeId1], [r6].[Id] AS [Id0], [r6].[Int] AS [Int0], [r6].[Ints] AS [Ints0], [r6].[Name] AS [Name0], [r6].[String] AS [String0], [r4].[Id] AS [Id1], [r4].[Int] AS [Int1], [r4].[Ints] AS [Ints1], [r4].[Name] AS [Name1], [r4].[String] AS [String1], [r5].[Id] AS [Id2], [r5].[Int] AS [Int2], [r5].[Ints] AS [Ints2], [r5].[Name] AS [Name2], [r5].[String] AS [String2] FROM [RelatedCollection] AS [r3] LEFT JOIN [RelatedCollection_OptionalNested] AS [r4] ON [r3].[RootEntityId] = [r4].[RelatedTypeRootEntityId] AND [r3].[Id] = [r4].[RelatedTypeId] LEFT JOIN [RelatedCollection_RequiredNested] AS [r5] ON [r3].[RootEntityId] = [r5].[RelatedTypeRootEntityId] AND [r3].[Id] = [r5].[RelatedTypeId] @@ -154,7 +154,7 @@ public override async Task Nested_with_inline_null() AssertSql( """ -SELECT [r].[Id], [r].[Name], [o].[RootEntityId], [o].[Id], [o].[Int], [o].[Name], [o].[String], [r0].[RootEntityId], [r1].[RelatedTypeRootEntityId], [o0].[RelatedTypeRootEntityId], [o1].[RelatedTypeRootEntityId], [r2].[RelatedTypeRootEntityId], [o2].[RelatedTypeRootEntityId], [o2].[Id], [o2].[Int], [o2].[Name], [o2].[String], [o0].[Id], [o0].[Int], [o0].[Name], [o0].[String], [o1].[Id], [o1].[Int], [o1].[Name], [o1].[String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[RelatedTypeRootEntityId0], [s].[RelatedTypeId0], [s].[RelatedTypeRootEntityId1], [s].[RelatedTypeId1], [s].[Id0], [s].[Int0], [s].[Name0], [s].[String0], [s].[Id1], [s].[Int1], [s].[Name1], [s].[String1], [s].[Id2], [s].[Int2], [s].[Name2], [s].[String2], [r0].[Id], [r0].[Int], [r0].[Name], [r0].[String], [r7].[RelatedTypeRootEntityId], [r7].[Id], [r7].[Int], [r7].[Name], [r7].[String], [r1].[Id], [r1].[Int], [r1].[Name], [r1].[String], [r2].[Id], [r2].[Int], [r2].[Name], [r2].[String] +SELECT [r].[Id], [r].[Name], [o].[RootEntityId], [o].[Id], [o].[Int], [o].[Ints], [o].[Name], [o].[String], [r0].[RootEntityId], [r1].[RelatedTypeRootEntityId], [o0].[RelatedTypeRootEntityId], [o1].[RelatedTypeRootEntityId], [r2].[RelatedTypeRootEntityId], [o2].[RelatedTypeRootEntityId], [o2].[Id], [o2].[Int], [o2].[Ints], [o2].[Name], [o2].[String], [o0].[Id], [o0].[Int], [o0].[Ints], [o0].[Name], [o0].[String], [o1].[Id], [o1].[Int], [o1].[Ints], [o1].[Name], [o1].[String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Ints], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[RelatedTypeRootEntityId0], [s].[RelatedTypeId0], [s].[RelatedTypeRootEntityId1], [s].[RelatedTypeId1], [s].[Id0], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[Id1], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[Id2], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r0].[Id], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[String], [r7].[RelatedTypeRootEntityId], [r7].[Id], [r7].[Int], [r7].[Ints], [r7].[Name], [r7].[String], [r1].[Id], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[String], [r2].[Id], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[String] FROM [RootEntity] AS [r] LEFT JOIN [RequiredRelated] AS [r0] ON [r].[Id] = [r0].[RootEntityId] LEFT JOIN [RequiredRelated_OptionalNested] AS [r1] ON [r0].[RootEntityId] = [r1].[RelatedTypeRootEntityId] @@ -164,7 +164,7 @@ FROM [RootEntity] AS [r] LEFT JOIN [RequiredRelated_RequiredNested] AS [r2] ON [r0].[RootEntityId] = [r2].[RelatedTypeRootEntityId] LEFT JOIN [OptionalRelated_NestedCollection] AS [o2] ON [o].[RootEntityId] = [o2].[RelatedTypeRootEntityId] LEFT JOIN ( - SELECT [r3].[RootEntityId], [r3].[Id], [r3].[Int], [r3].[Name], [r3].[String], [r4].[RelatedTypeRootEntityId], [r4].[RelatedTypeId], [r5].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId0], [r5].[RelatedTypeId] AS [RelatedTypeId0], [r6].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId1], [r6].[RelatedTypeId] AS [RelatedTypeId1], [r6].[Id] AS [Id0], [r6].[Int] AS [Int0], [r6].[Name] AS [Name0], [r6].[String] AS [String0], [r4].[Id] AS [Id1], [r4].[Int] AS [Int1], [r4].[Name] AS [Name1], [r4].[String] AS [String1], [r5].[Id] AS [Id2], [r5].[Int] AS [Int2], [r5].[Name] AS [Name2], [r5].[String] AS [String2] + SELECT [r3].[RootEntityId], [r3].[Id], [r3].[Int], [r3].[Ints], [r3].[Name], [r3].[String], [r4].[RelatedTypeRootEntityId], [r4].[RelatedTypeId], [r5].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId0], [r5].[RelatedTypeId] AS [RelatedTypeId0], [r6].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId1], [r6].[RelatedTypeId] AS [RelatedTypeId1], [r6].[Id] AS [Id0], [r6].[Int] AS [Int0], [r6].[Ints] AS [Ints0], [r6].[Name] AS [Name0], [r6].[String] AS [String0], [r4].[Id] AS [Id1], [r4].[Int] AS [Int1], [r4].[Ints] AS [Ints1], [r4].[Name] AS [Name1], [r4].[String] AS [String1], [r5].[Id] AS [Id2], [r5].[Int] AS [Int2], [r5].[Ints] AS [Ints2], [r5].[Name] AS [Name2], [r5].[String] AS [String2] FROM [RelatedCollection] AS [r3] LEFT JOIN [RelatedCollection_OptionalNested] AS [r4] ON [r3].[RootEntityId] = [r4].[RelatedTypeRootEntityId] AND [r3].[Id] = [r4].[RelatedTypeId] LEFT JOIN [RelatedCollection_RequiredNested] AS [r5] ON [r3].[RootEntityId] = [r5].[RelatedTypeRootEntityId] AND [r3].[Id] = [r5].[RelatedTypeId] @@ -198,7 +198,7 @@ public override async Task Two_nested_collections() AssertSql( """ -SELECT [r].[Id], [r].[Name], [o].[RootEntityId], [o].[Id], [o].[Int], [o].[Name], [o].[String], [o0].[RelatedTypeRootEntityId], [o1].[RelatedTypeRootEntityId], [r0].[RootEntityId], [r1].[RelatedTypeRootEntityId], [r2].[RelatedTypeRootEntityId], [o2].[RelatedTypeRootEntityId], [o2].[Id], [o2].[Int], [o2].[Name], [o2].[String], [o0].[Id], [o0].[Int], [o0].[Name], [o0].[String], [o1].[Id], [o1].[Int], [o1].[Name], [o1].[String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[RelatedTypeRootEntityId0], [s].[RelatedTypeId0], [s].[RelatedTypeRootEntityId1], [s].[RelatedTypeId1], [s].[Id0], [s].[Int0], [s].[Name0], [s].[String0], [s].[Id1], [s].[Int1], [s].[Name1], [s].[String1], [s].[Id2], [s].[Int2], [s].[Name2], [s].[String2], [r0].[Id], [r0].[Int], [r0].[Name], [r0].[String], [r7].[RelatedTypeRootEntityId], [r7].[Id], [r7].[Int], [r7].[Name], [r7].[String], [r1].[Id], [r1].[Int], [r1].[Name], [r1].[String], [r2].[Id], [r2].[Int], [r2].[Name], [r2].[String] +SELECT [r].[Id], [r].[Name], [o].[RootEntityId], [o].[Id], [o].[Int], [o].[Ints], [o].[Name], [o].[String], [o0].[RelatedTypeRootEntityId], [o1].[RelatedTypeRootEntityId], [r0].[RootEntityId], [r1].[RelatedTypeRootEntityId], [r2].[RelatedTypeRootEntityId], [o2].[RelatedTypeRootEntityId], [o2].[Id], [o2].[Int], [o2].[Ints], [o2].[Name], [o2].[String], [o0].[Id], [o0].[Int], [o0].[Ints], [o0].[Name], [o0].[String], [o1].[Id], [o1].[Int], [o1].[Ints], [o1].[Name], [o1].[String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Ints], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[RelatedTypeRootEntityId0], [s].[RelatedTypeId0], [s].[RelatedTypeRootEntityId1], [s].[RelatedTypeId1], [s].[Id0], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[Id1], [s].[Int1], [s].[Ints1], [s].[Name1], [s].[String1], [s].[Id2], [s].[Int2], [s].[Ints2], [s].[Name2], [s].[String2], [r0].[Id], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[String], [r7].[RelatedTypeRootEntityId], [r7].[Id], [r7].[Int], [r7].[Ints], [r7].[Name], [r7].[String], [r1].[Id], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[String], [r2].[Id], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[String] FROM [RootEntity] AS [r] LEFT JOIN [OptionalRelated] AS [o] ON [r].[Id] = [o].[RootEntityId] LEFT JOIN [OptionalRelated_OptionalNested] AS [o0] ON [o].[RootEntityId] = [o0].[RelatedTypeRootEntityId] @@ -208,7 +208,7 @@ FROM [RootEntity] AS [r] LEFT JOIN [RequiredRelated_RequiredNested] AS [r2] ON [r0].[RootEntityId] = [r2].[RelatedTypeRootEntityId] LEFT JOIN [OptionalRelated_NestedCollection] AS [o2] ON [o].[RootEntityId] = [o2].[RelatedTypeRootEntityId] LEFT JOIN ( - SELECT [r3].[RootEntityId], [r3].[Id], [r3].[Int], [r3].[Name], [r3].[String], [r4].[RelatedTypeRootEntityId], [r4].[RelatedTypeId], [r5].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId0], [r5].[RelatedTypeId] AS [RelatedTypeId0], [r6].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId1], [r6].[RelatedTypeId] AS [RelatedTypeId1], [r6].[Id] AS [Id0], [r6].[Int] AS [Int0], [r6].[Name] AS [Name0], [r6].[String] AS [String0], [r4].[Id] AS [Id1], [r4].[Int] AS [Int1], [r4].[Name] AS [Name1], [r4].[String] AS [String1], [r5].[Id] AS [Id2], [r5].[Int] AS [Int2], [r5].[Name] AS [Name2], [r5].[String] AS [String2] + SELECT [r3].[RootEntityId], [r3].[Id], [r3].[Int], [r3].[Ints], [r3].[Name], [r3].[String], [r4].[RelatedTypeRootEntityId], [r4].[RelatedTypeId], [r5].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId0], [r5].[RelatedTypeId] AS [RelatedTypeId0], [r6].[RelatedTypeRootEntityId] AS [RelatedTypeRootEntityId1], [r6].[RelatedTypeId] AS [RelatedTypeId1], [r6].[Id] AS [Id0], [r6].[Int] AS [Int0], [r6].[Ints] AS [Ints0], [r6].[Name] AS [Name0], [r6].[String] AS [String0], [r4].[Id] AS [Id1], [r4].[Int] AS [Int1], [r4].[Ints] AS [Ints1], [r4].[Name] AS [Name1], [r4].[String] AS [String1], [r5].[Id] AS [Id2], [r5].[Int] AS [Int2], [r5].[Ints] AS [Ints2], [r5].[Name] AS [Name2], [r5].[String] AS [String2] FROM [RelatedCollection] AS [r3] LEFT JOIN [RelatedCollection_OptionalNested] AS [r4] ON [r3].[RootEntityId] = [r4].[RelatedTypeRootEntityId] AND [r3].[Id] = [r4].[RelatedTypeId] LEFT JOIN [RelatedCollection_RequiredNested] AS [r5] ON [r3].[RootEntityId] = [r5].[RelatedTypeRootEntityId] AND [r3].[Id] = [r5].[RelatedTypeId] diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/Associations/OwnedTableSplitting/OwnedTableSplittingMiscellaneousSqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/Associations/OwnedTableSplitting/OwnedTableSplittingMiscellaneousSqlServerTest.cs index 0f286dd5eb9..96dd2a3afa4 100644 --- a/test/EFCore.SqlServer.FunctionalTests/Query/Associations/OwnedTableSplitting/OwnedTableSplittingMiscellaneousSqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/Query/Associations/OwnedTableSplitting/OwnedTableSplittingMiscellaneousSqlServerTest.cs @@ -16,13 +16,13 @@ public override async Task Where_related_property() AssertSql( """ -SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [o].[RelatedTypeRootEntityId], [o].[Id], [o].[Int], [o].[Name], [o].[String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[Id0], [s].[Int0], [s].[Name0], [s].[String0], [s].[OptionalNested_Id], [s].[OptionalNested_Int], [s].[OptionalNested_Name], [s].[OptionalNested_String], [s].[RequiredNested_Id], [s].[RequiredNested_Int], [s].[RequiredNested_Name], [s].[RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r2].[RelatedTypeRootEntityId], [r2].[Id], [r2].[Int], [r2].[Name], [r2].[String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Ints], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [o].[RelatedTypeRootEntityId], [o].[Id], [o].[Int], [o].[Ints], [o].[Name], [o].[String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Ints], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Ints], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Ints], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[Id0], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[OptionalNested_Id], [s].[OptionalNested_Int], [s].[OptionalNested_Ints], [s].[OptionalNested_Name], [s].[OptionalNested_String], [s].[RequiredNested_Id], [s].[RequiredNested_Int], [s].[RequiredNested_Ints], [s].[RequiredNested_Name], [s].[RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Ints], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r2].[RelatedTypeRootEntityId], [r2].[Id], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Ints], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Ints], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] FROM [RootEntity] AS [r] LEFT JOIN [OptionalRelated_NestedCollection] AS [o] ON CASE - WHEN [r].[OptionalRelated_Id] IS NOT NULL AND [r].[OptionalRelated_Int] IS NOT NULL AND [r].[OptionalRelated_Name] IS NOT NULL AND [r].[OptionalRelated_String] IS NOT NULL THEN [r].[Id] + WHEN [r].[OptionalRelated_Id] IS NOT NULL AND [r].[OptionalRelated_Int] IS NOT NULL AND [r].[OptionalRelated_Ints] IS NOT NULL AND [r].[OptionalRelated_Name] IS NOT NULL AND [r].[OptionalRelated_String] IS NOT NULL THEN [r].[Id] END = [o].[RelatedTypeRootEntityId] LEFT JOIN ( - SELECT [r0].[RootEntityId], [r0].[Id], [r0].[Int], [r0].[Name], [r0].[String], [r1].[RelatedTypeRootEntityId], [r1].[RelatedTypeId], [r1].[Id] AS [Id0], [r1].[Int] AS [Int0], [r1].[Name] AS [Name0], [r1].[String] AS [String0], [r0].[OptionalNested_Id], [r0].[OptionalNested_Int], [r0].[OptionalNested_Name], [r0].[OptionalNested_String], [r0].[RequiredNested_Id], [r0].[RequiredNested_Int], [r0].[RequiredNested_Name], [r0].[RequiredNested_String] + SELECT [r0].[RootEntityId], [r0].[Id], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[String], [r1].[RelatedTypeRootEntityId], [r1].[RelatedTypeId], [r1].[Id] AS [Id0], [r1].[Int] AS [Int0], [r1].[Ints] AS [Ints0], [r1].[Name] AS [Name0], [r1].[String] AS [String0], [r0].[OptionalNested_Id], [r0].[OptionalNested_Int], [r0].[OptionalNested_Ints], [r0].[OptionalNested_Name], [r0].[OptionalNested_String], [r0].[RequiredNested_Id], [r0].[RequiredNested_Int], [r0].[RequiredNested_Ints], [r0].[RequiredNested_Name], [r0].[RequiredNested_String] FROM [RelatedCollection] AS [r0] LEFT JOIN [RelatedCollection_NestedCollection] AS [r1] ON [r0].[RootEntityId] = [r1].[RelatedTypeRootEntityId] AND [r0].[Id] = [r1].[RelatedTypeId] ) AS [s] ON [r].[Id] = [s].[RootEntityId] @@ -38,13 +38,13 @@ public override async Task Where_optional_related_property() AssertSql( """ -SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [o].[RelatedTypeRootEntityId], [o].[Id], [o].[Int], [o].[Name], [o].[String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[Id0], [s].[Int0], [s].[Name0], [s].[String0], [s].[OptionalNested_Id], [s].[OptionalNested_Int], [s].[OptionalNested_Name], [s].[OptionalNested_String], [s].[RequiredNested_Id], [s].[RequiredNested_Int], [s].[RequiredNested_Name], [s].[RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r2].[RelatedTypeRootEntityId], [r2].[Id], [r2].[Int], [r2].[Name], [r2].[String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Ints], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [o].[RelatedTypeRootEntityId], [o].[Id], [o].[Int], [o].[Ints], [o].[Name], [o].[String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Ints], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Ints], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Ints], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[Id0], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[OptionalNested_Id], [s].[OptionalNested_Int], [s].[OptionalNested_Ints], [s].[OptionalNested_Name], [s].[OptionalNested_String], [s].[RequiredNested_Id], [s].[RequiredNested_Int], [s].[RequiredNested_Ints], [s].[RequiredNested_Name], [s].[RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Ints], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r2].[RelatedTypeRootEntityId], [r2].[Id], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Ints], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Ints], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] FROM [RootEntity] AS [r] LEFT JOIN [OptionalRelated_NestedCollection] AS [o] ON CASE - WHEN [r].[OptionalRelated_Id] IS NOT NULL AND [r].[OptionalRelated_Int] IS NOT NULL AND [r].[OptionalRelated_Name] IS NOT NULL AND [r].[OptionalRelated_String] IS NOT NULL THEN [r].[Id] + WHEN [r].[OptionalRelated_Id] IS NOT NULL AND [r].[OptionalRelated_Int] IS NOT NULL AND [r].[OptionalRelated_Ints] IS NOT NULL AND [r].[OptionalRelated_Name] IS NOT NULL AND [r].[OptionalRelated_String] IS NOT NULL THEN [r].[Id] END = [o].[RelatedTypeRootEntityId] LEFT JOIN ( - SELECT [r0].[RootEntityId], [r0].[Id], [r0].[Int], [r0].[Name], [r0].[String], [r1].[RelatedTypeRootEntityId], [r1].[RelatedTypeId], [r1].[Id] AS [Id0], [r1].[Int] AS [Int0], [r1].[Name] AS [Name0], [r1].[String] AS [String0], [r0].[OptionalNested_Id], [r0].[OptionalNested_Int], [r0].[OptionalNested_Name], [r0].[OptionalNested_String], [r0].[RequiredNested_Id], [r0].[RequiredNested_Int], [r0].[RequiredNested_Name], [r0].[RequiredNested_String] + SELECT [r0].[RootEntityId], [r0].[Id], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[String], [r1].[RelatedTypeRootEntityId], [r1].[RelatedTypeId], [r1].[Id] AS [Id0], [r1].[Int] AS [Int0], [r1].[Ints] AS [Ints0], [r1].[Name] AS [Name0], [r1].[String] AS [String0], [r0].[OptionalNested_Id], [r0].[OptionalNested_Int], [r0].[OptionalNested_Ints], [r0].[OptionalNested_Name], [r0].[OptionalNested_String], [r0].[RequiredNested_Id], [r0].[RequiredNested_Int], [r0].[RequiredNested_Ints], [r0].[RequiredNested_Name], [r0].[RequiredNested_String] FROM [RelatedCollection] AS [r0] LEFT JOIN [RelatedCollection_NestedCollection] AS [r1] ON [r0].[RootEntityId] = [r1].[RelatedTypeRootEntityId] AND [r0].[Id] = [r1].[RelatedTypeId] ) AS [s] ON [r].[Id] = [s].[RootEntityId] @@ -60,13 +60,13 @@ public override async Task Where_nested_related_property() AssertSql( """ -SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [o].[RelatedTypeRootEntityId], [o].[Id], [o].[Int], [o].[Name], [o].[String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[Id0], [s].[Int0], [s].[Name0], [s].[String0], [s].[OptionalNested_Id], [s].[OptionalNested_Int], [s].[OptionalNested_Name], [s].[OptionalNested_String], [s].[RequiredNested_Id], [s].[RequiredNested_Int], [s].[RequiredNested_Name], [s].[RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r2].[RelatedTypeRootEntityId], [r2].[Id], [r2].[Int], [r2].[Name], [r2].[String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Ints], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [o].[RelatedTypeRootEntityId], [o].[Id], [o].[Int], [o].[Ints], [o].[Name], [o].[String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Ints], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Ints], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Ints], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[Id0], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[OptionalNested_Id], [s].[OptionalNested_Int], [s].[OptionalNested_Ints], [s].[OptionalNested_Name], [s].[OptionalNested_String], [s].[RequiredNested_Id], [s].[RequiredNested_Int], [s].[RequiredNested_Ints], [s].[RequiredNested_Name], [s].[RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Ints], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r2].[RelatedTypeRootEntityId], [r2].[Id], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Ints], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Ints], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] FROM [RootEntity] AS [r] LEFT JOIN [OptionalRelated_NestedCollection] AS [o] ON CASE - WHEN [r].[OptionalRelated_Id] IS NOT NULL AND [r].[OptionalRelated_Int] IS NOT NULL AND [r].[OptionalRelated_Name] IS NOT NULL AND [r].[OptionalRelated_String] IS NOT NULL THEN [r].[Id] + WHEN [r].[OptionalRelated_Id] IS NOT NULL AND [r].[OptionalRelated_Int] IS NOT NULL AND [r].[OptionalRelated_Ints] IS NOT NULL AND [r].[OptionalRelated_Name] IS NOT NULL AND [r].[OptionalRelated_String] IS NOT NULL THEN [r].[Id] END = [o].[RelatedTypeRootEntityId] LEFT JOIN ( - SELECT [r0].[RootEntityId], [r0].[Id], [r0].[Int], [r0].[Name], [r0].[String], [r1].[RelatedTypeRootEntityId], [r1].[RelatedTypeId], [r1].[Id] AS [Id0], [r1].[Int] AS [Int0], [r1].[Name] AS [Name0], [r1].[String] AS [String0], [r0].[OptionalNested_Id], [r0].[OptionalNested_Int], [r0].[OptionalNested_Name], [r0].[OptionalNested_String], [r0].[RequiredNested_Id], [r0].[RequiredNested_Int], [r0].[RequiredNested_Name], [r0].[RequiredNested_String] + SELECT [r0].[RootEntityId], [r0].[Id], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[String], [r1].[RelatedTypeRootEntityId], [r1].[RelatedTypeId], [r1].[Id] AS [Id0], [r1].[Int] AS [Int0], [r1].[Ints] AS [Ints0], [r1].[Name] AS [Name0], [r1].[String] AS [String0], [r0].[OptionalNested_Id], [r0].[OptionalNested_Int], [r0].[OptionalNested_Ints], [r0].[OptionalNested_Name], [r0].[OptionalNested_String], [r0].[RequiredNested_Id], [r0].[RequiredNested_Int], [r0].[RequiredNested_Ints], [r0].[RequiredNested_Name], [r0].[RequiredNested_String] FROM [RelatedCollection] AS [r0] LEFT JOIN [RelatedCollection_NestedCollection] AS [r1] ON [r0].[RootEntityId] = [r1].[RelatedTypeRootEntityId] AND [r0].[Id] = [r1].[RelatedTypeId] ) AS [s] ON [r].[Id] = [s].[RootEntityId] diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/Associations/OwnedTableSplitting/OwnedTableSplittingPrimitiveCollectionSqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/Associations/OwnedTableSplitting/OwnedTableSplittingPrimitiveCollectionSqlServerTest.cs new file mode 100644 index 00000000000..90d41fe7baf --- /dev/null +++ b/test/EFCore.SqlServer.FunctionalTests/Query/Associations/OwnedTableSplitting/OwnedTableSplittingPrimitiveCollectionSqlServerTest.cs @@ -0,0 +1,150 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace Microsoft.EntityFrameworkCore.Query.Associations.OwnedTableSplitting; + +public class OwnedTableSplittingPrimitiveCollectionSqlServerTest( + OwnedTableSplittingSqlServerFixture fixture, + ITestOutputHelper testOutputHelper) + : OwnedTableSplittingPrimitiveCollectionRelationalTestBase(fixture, testOutputHelper) +{ + public override async Task Count() + { + await base.Count(); + + AssertSql( + """ +SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Ints], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [o].[RelatedTypeRootEntityId], [o].[Id], [o].[Int], [o].[Ints], [o].[Name], [o].[String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Ints], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Ints], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Ints], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[Id0], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[OptionalNested_Id], [s].[OptionalNested_Int], [s].[OptionalNested_Ints], [s].[OptionalNested_Name], [s].[OptionalNested_String], [s].[RequiredNested_Id], [s].[RequiredNested_Int], [s].[RequiredNested_Ints], [s].[RequiredNested_Name], [s].[RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Ints], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r3].[RelatedTypeRootEntityId], [r3].[Id], [r3].[Int], [r3].[Ints], [r3].[Name], [r3].[String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Ints], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Ints], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] +FROM [RootEntity] AS [r] +LEFT JOIN [OptionalRelated_NestedCollection] AS [o] ON CASE + WHEN [r].[OptionalRelated_Id] IS NOT NULL AND [r].[OptionalRelated_Int] IS NOT NULL AND [r].[OptionalRelated_Ints] IS NOT NULL AND [r].[OptionalRelated_Name] IS NOT NULL AND [r].[OptionalRelated_String] IS NOT NULL THEN [r].[Id] +END = [o].[RelatedTypeRootEntityId] +LEFT JOIN ( + SELECT [r1].[RootEntityId], [r1].[Id], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[String], [r2].[RelatedTypeRootEntityId], [r2].[RelatedTypeId], [r2].[Id] AS [Id0], [r2].[Int] AS [Int0], [r2].[Ints] AS [Ints0], [r2].[Name] AS [Name0], [r2].[String] AS [String0], [r1].[OptionalNested_Id], [r1].[OptionalNested_Int], [r1].[OptionalNested_Ints], [r1].[OptionalNested_Name], [r1].[OptionalNested_String], [r1].[RequiredNested_Id], [r1].[RequiredNested_Int], [r1].[RequiredNested_Ints], [r1].[RequiredNested_Name], [r1].[RequiredNested_String] + FROM [RelatedCollection] AS [r1] + LEFT JOIN [RelatedCollection_NestedCollection] AS [r2] ON [r1].[RootEntityId] = [r2].[RelatedTypeRootEntityId] AND [r1].[Id] = [r2].[RelatedTypeId] +) AS [s] ON [r].[Id] = [s].[RootEntityId] +LEFT JOIN [RequiredRelated_NestedCollection] AS [r3] ON [r].[Id] = [r3].[RelatedTypeRootEntityId] +WHERE ( + SELECT COUNT(*) + FROM OPENJSON([r].[RequiredRelated_Ints]) AS [r0]) = 3 +ORDER BY [r].[Id], [o].[RelatedTypeRootEntityId], [o].[Id], [s].[RootEntityId], [s].[Id], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[Id0], [r3].[RelatedTypeRootEntityId] +"""); + } + + public override async Task Index() + { + await base.Index(); + + AssertSql( + """ +SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Ints], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [o].[RelatedTypeRootEntityId], [o].[Id], [o].[Int], [o].[Ints], [o].[Name], [o].[String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Ints], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Ints], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Ints], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[Id0], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[OptionalNested_Id], [s].[OptionalNested_Int], [s].[OptionalNested_Ints], [s].[OptionalNested_Name], [s].[OptionalNested_String], [s].[RequiredNested_Id], [s].[RequiredNested_Int], [s].[RequiredNested_Ints], [s].[RequiredNested_Name], [s].[RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Ints], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r2].[RelatedTypeRootEntityId], [r2].[Id], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Ints], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Ints], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] +FROM [RootEntity] AS [r] +LEFT JOIN [OptionalRelated_NestedCollection] AS [o] ON CASE + WHEN [r].[OptionalRelated_Id] IS NOT NULL AND [r].[OptionalRelated_Int] IS NOT NULL AND [r].[OptionalRelated_Ints] IS NOT NULL AND [r].[OptionalRelated_Name] IS NOT NULL AND [r].[OptionalRelated_String] IS NOT NULL THEN [r].[Id] +END = [o].[RelatedTypeRootEntityId] +LEFT JOIN ( + SELECT [r0].[RootEntityId], [r0].[Id], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[String], [r1].[RelatedTypeRootEntityId], [r1].[RelatedTypeId], [r1].[Id] AS [Id0], [r1].[Int] AS [Int0], [r1].[Ints] AS [Ints0], [r1].[Name] AS [Name0], [r1].[String] AS [String0], [r0].[OptionalNested_Id], [r0].[OptionalNested_Int], [r0].[OptionalNested_Ints], [r0].[OptionalNested_Name], [r0].[OptionalNested_String], [r0].[RequiredNested_Id], [r0].[RequiredNested_Int], [r0].[RequiredNested_Ints], [r0].[RequiredNested_Name], [r0].[RequiredNested_String] + FROM [RelatedCollection] AS [r0] + LEFT JOIN [RelatedCollection_NestedCollection] AS [r1] ON [r0].[RootEntityId] = [r1].[RelatedTypeRootEntityId] AND [r0].[Id] = [r1].[RelatedTypeId] +) AS [s] ON [r].[Id] = [s].[RootEntityId] +LEFT JOIN [RequiredRelated_NestedCollection] AS [r2] ON [r].[Id] = [r2].[RelatedTypeRootEntityId] +WHERE CAST(JSON_VALUE([r].[RequiredRelated_Ints], '$[0]') AS int) = 1 +ORDER BY [r].[Id], [o].[RelatedTypeRootEntityId], [o].[Id], [s].[RootEntityId], [s].[Id], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[Id0], [r2].[RelatedTypeRootEntityId] +"""); + } + + public override async Task Contains() + { + await base.Contains(); + + AssertSql( + """ +SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Ints], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [o].[RelatedTypeRootEntityId], [o].[Id], [o].[Int], [o].[Ints], [o].[Name], [o].[String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Ints], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Ints], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Ints], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[Id0], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[OptionalNested_Id], [s].[OptionalNested_Int], [s].[OptionalNested_Ints], [s].[OptionalNested_Name], [s].[OptionalNested_String], [s].[RequiredNested_Id], [s].[RequiredNested_Int], [s].[RequiredNested_Ints], [s].[RequiredNested_Name], [s].[RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Ints], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r3].[RelatedTypeRootEntityId], [r3].[Id], [r3].[Int], [r3].[Ints], [r3].[Name], [r3].[String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Ints], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Ints], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] +FROM [RootEntity] AS [r] +LEFT JOIN [OptionalRelated_NestedCollection] AS [o] ON CASE + WHEN [r].[OptionalRelated_Id] IS NOT NULL AND [r].[OptionalRelated_Int] IS NOT NULL AND [r].[OptionalRelated_Ints] IS NOT NULL AND [r].[OptionalRelated_Name] IS NOT NULL AND [r].[OptionalRelated_String] IS NOT NULL THEN [r].[Id] +END = [o].[RelatedTypeRootEntityId] +LEFT JOIN ( + SELECT [r1].[RootEntityId], [r1].[Id], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[String], [r2].[RelatedTypeRootEntityId], [r2].[RelatedTypeId], [r2].[Id] AS [Id0], [r2].[Int] AS [Int0], [r2].[Ints] AS [Ints0], [r2].[Name] AS [Name0], [r2].[String] AS [String0], [r1].[OptionalNested_Id], [r1].[OptionalNested_Int], [r1].[OptionalNested_Ints], [r1].[OptionalNested_Name], [r1].[OptionalNested_String], [r1].[RequiredNested_Id], [r1].[RequiredNested_Int], [r1].[RequiredNested_Ints], [r1].[RequiredNested_Name], [r1].[RequiredNested_String] + FROM [RelatedCollection] AS [r1] + LEFT JOIN [RelatedCollection_NestedCollection] AS [r2] ON [r1].[RootEntityId] = [r2].[RelatedTypeRootEntityId] AND [r1].[Id] = [r2].[RelatedTypeId] +) AS [s] ON [r].[Id] = [s].[RootEntityId] +LEFT JOIN [RequiredRelated_NestedCollection] AS [r3] ON [r].[Id] = [r3].[RelatedTypeRootEntityId] +WHERE 3 IN ( + SELECT [r0].[value] + FROM OPENJSON([r].[RequiredRelated_Ints]) WITH ([value] int '$') AS [r0] +) +ORDER BY [r].[Id], [o].[RelatedTypeRootEntityId], [o].[Id], [s].[RootEntityId], [s].[Id], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[Id0], [r3].[RelatedTypeRootEntityId] +"""); + } + + public override async Task Any_predicate() + { + await base.Any_predicate(); + + AssertSql( + """ +SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Ints], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [o].[RelatedTypeRootEntityId], [o].[Id], [o].[Int], [o].[Ints], [o].[Name], [o].[String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Ints], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Ints], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Ints], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[Id0], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[OptionalNested_Id], [s].[OptionalNested_Int], [s].[OptionalNested_Ints], [s].[OptionalNested_Name], [s].[OptionalNested_String], [s].[RequiredNested_Id], [s].[RequiredNested_Int], [s].[RequiredNested_Ints], [s].[RequiredNested_Name], [s].[RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Ints], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r3].[RelatedTypeRootEntityId], [r3].[Id], [r3].[Int], [r3].[Ints], [r3].[Name], [r3].[String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Ints], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Ints], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] +FROM [RootEntity] AS [r] +LEFT JOIN [OptionalRelated_NestedCollection] AS [o] ON CASE + WHEN [r].[OptionalRelated_Id] IS NOT NULL AND [r].[OptionalRelated_Int] IS NOT NULL AND [r].[OptionalRelated_Ints] IS NOT NULL AND [r].[OptionalRelated_Name] IS NOT NULL AND [r].[OptionalRelated_String] IS NOT NULL THEN [r].[Id] +END = [o].[RelatedTypeRootEntityId] +LEFT JOIN ( + SELECT [r1].[RootEntityId], [r1].[Id], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[String], [r2].[RelatedTypeRootEntityId], [r2].[RelatedTypeId], [r2].[Id] AS [Id0], [r2].[Int] AS [Int0], [r2].[Ints] AS [Ints0], [r2].[Name] AS [Name0], [r2].[String] AS [String0], [r1].[OptionalNested_Id], [r1].[OptionalNested_Int], [r1].[OptionalNested_Ints], [r1].[OptionalNested_Name], [r1].[OptionalNested_String], [r1].[RequiredNested_Id], [r1].[RequiredNested_Int], [r1].[RequiredNested_Ints], [r1].[RequiredNested_Name], [r1].[RequiredNested_String] + FROM [RelatedCollection] AS [r1] + LEFT JOIN [RelatedCollection_NestedCollection] AS [r2] ON [r1].[RootEntityId] = [r2].[RelatedTypeRootEntityId] AND [r1].[Id] = [r2].[RelatedTypeId] +) AS [s] ON [r].[Id] = [s].[RootEntityId] +LEFT JOIN [RequiredRelated_NestedCollection] AS [r3] ON [r].[Id] = [r3].[RelatedTypeRootEntityId] +WHERE 2 IN ( + SELECT [r0].[value] + FROM OPENJSON([r].[RequiredRelated_Ints]) WITH ([value] int '$') AS [r0] +) +ORDER BY [r].[Id], [o].[RelatedTypeRootEntityId], [o].[Id], [s].[RootEntityId], [s].[Id], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[Id0], [r3].[RelatedTypeRootEntityId] +"""); + } + + public override async Task Nested_Count() + { + await base.Nested_Count(); + + AssertSql( + """ +SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Ints], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [o].[RelatedTypeRootEntityId], [o].[Id], [o].[Int], [o].[Ints], [o].[Name], [o].[String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Ints], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Ints], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Ints], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[Id0], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[OptionalNested_Id], [s].[OptionalNested_Int], [s].[OptionalNested_Ints], [s].[OptionalNested_Name], [s].[OptionalNested_String], [s].[RequiredNested_Id], [s].[RequiredNested_Int], [s].[RequiredNested_Ints], [s].[RequiredNested_Name], [s].[RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Ints], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r3].[RelatedTypeRootEntityId], [r3].[Id], [r3].[Int], [r3].[Ints], [r3].[Name], [r3].[String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Ints], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Ints], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] +FROM [RootEntity] AS [r] +LEFT JOIN [OptionalRelated_NestedCollection] AS [o] ON CASE + WHEN [r].[OptionalRelated_Id] IS NOT NULL AND [r].[OptionalRelated_Int] IS NOT NULL AND [r].[OptionalRelated_Ints] IS NOT NULL AND [r].[OptionalRelated_Name] IS NOT NULL AND [r].[OptionalRelated_String] IS NOT NULL THEN [r].[Id] +END = [o].[RelatedTypeRootEntityId] +LEFT JOIN ( + SELECT [r1].[RootEntityId], [r1].[Id], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[String], [r2].[RelatedTypeRootEntityId], [r2].[RelatedTypeId], [r2].[Id] AS [Id0], [r2].[Int] AS [Int0], [r2].[Ints] AS [Ints0], [r2].[Name] AS [Name0], [r2].[String] AS [String0], [r1].[OptionalNested_Id], [r1].[OptionalNested_Int], [r1].[OptionalNested_Ints], [r1].[OptionalNested_Name], [r1].[OptionalNested_String], [r1].[RequiredNested_Id], [r1].[RequiredNested_Int], [r1].[RequiredNested_Ints], [r1].[RequiredNested_Name], [r1].[RequiredNested_String] + FROM [RelatedCollection] AS [r1] + LEFT JOIN [RelatedCollection_NestedCollection] AS [r2] ON [r1].[RootEntityId] = [r2].[RelatedTypeRootEntityId] AND [r1].[Id] = [r2].[RelatedTypeId] +) AS [s] ON [r].[Id] = [s].[RootEntityId] +LEFT JOIN [RequiredRelated_NestedCollection] AS [r3] ON [r].[Id] = [r3].[RelatedTypeRootEntityId] +WHERE ( + SELECT COUNT(*) + FROM OPENJSON([r].[RequiredRelated_RequiredNested_Ints]) AS [r0]) = 3 +ORDER BY [r].[Id], [o].[RelatedTypeRootEntityId], [o].[Id], [s].[RootEntityId], [s].[Id], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[Id0], [r3].[RelatedTypeRootEntityId] +"""); + } + + public override async Task Select_Sum() + { + await base.Select_Sum(); + + AssertSql( + """ +SELECT ( + SELECT COALESCE(SUM([r1].[value]), 0) + FROM OPENJSON([r].[RequiredRelated_Ints]) WITH ([value] int '$') AS [r1]) +FROM [RootEntity] AS [r] +WHERE ( + SELECT COALESCE(SUM([r0].[value]), 0) + FROM OPENJSON([r].[RequiredRelated_Ints]) WITH ([value] int '$') AS [r0]) >= 6 +"""); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); +} diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/Associations/OwnedTableSplitting/OwnedTableSplittingProjectionSqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/Associations/OwnedTableSplitting/OwnedTableSplittingProjectionSqlServerTest.cs index efa7574c65d..b098d2b3a6c 100644 --- a/test/EFCore.SqlServer.FunctionalTests/Query/Associations/OwnedTableSplitting/OwnedTableSplittingProjectionSqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/Query/Associations/OwnedTableSplitting/OwnedTableSplittingProjectionSqlServerTest.cs @@ -12,13 +12,13 @@ public override async Task Select_root(QueryTrackingBehavior queryTrackingBehavi AssertSql( """ -SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [o].[RelatedTypeRootEntityId], [o].[Id], [o].[Int], [o].[Name], [o].[String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[Id0], [s].[Int0], [s].[Name0], [s].[String0], [s].[OptionalNested_Id], [s].[OptionalNested_Int], [s].[OptionalNested_Name], [s].[OptionalNested_String], [s].[RequiredNested_Id], [s].[RequiredNested_Int], [s].[RequiredNested_Name], [s].[RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r2].[RelatedTypeRootEntityId], [r2].[Id], [r2].[Int], [r2].[Name], [r2].[String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Ints], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [o].[RelatedTypeRootEntityId], [o].[Id], [o].[Int], [o].[Ints], [o].[Name], [o].[String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Ints], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Ints], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Ints], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[Id0], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[OptionalNested_Id], [s].[OptionalNested_Int], [s].[OptionalNested_Ints], [s].[OptionalNested_Name], [s].[OptionalNested_String], [s].[RequiredNested_Id], [s].[RequiredNested_Int], [s].[RequiredNested_Ints], [s].[RequiredNested_Name], [s].[RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Ints], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r2].[RelatedTypeRootEntityId], [r2].[Id], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Ints], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Ints], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] FROM [RootEntity] AS [r] LEFT JOIN [OptionalRelated_NestedCollection] AS [o] ON CASE - WHEN [r].[OptionalRelated_Id] IS NOT NULL AND [r].[OptionalRelated_Int] IS NOT NULL AND [r].[OptionalRelated_Name] IS NOT NULL AND [r].[OptionalRelated_String] IS NOT NULL THEN [r].[Id] + WHEN [r].[OptionalRelated_Id] IS NOT NULL AND [r].[OptionalRelated_Int] IS NOT NULL AND [r].[OptionalRelated_Ints] IS NOT NULL AND [r].[OptionalRelated_Name] IS NOT NULL AND [r].[OptionalRelated_String] IS NOT NULL THEN [r].[Id] END = [o].[RelatedTypeRootEntityId] LEFT JOIN ( - SELECT [r0].[RootEntityId], [r0].[Id], [r0].[Int], [r0].[Name], [r0].[String], [r1].[RelatedTypeRootEntityId], [r1].[RelatedTypeId], [r1].[Id] AS [Id0], [r1].[Int] AS [Int0], [r1].[Name] AS [Name0], [r1].[String] AS [String0], [r0].[OptionalNested_Id], [r0].[OptionalNested_Int], [r0].[OptionalNested_Name], [r0].[OptionalNested_String], [r0].[RequiredNested_Id], [r0].[RequiredNested_Int], [r0].[RequiredNested_Name], [r0].[RequiredNested_String] + SELECT [r0].[RootEntityId], [r0].[Id], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[String], [r1].[RelatedTypeRootEntityId], [r1].[RelatedTypeId], [r1].[Id] AS [Id0], [r1].[Int] AS [Int0], [r1].[Ints] AS [Ints0], [r1].[Name] AS [Name0], [r1].[String] AS [String0], [r0].[OptionalNested_Id], [r0].[OptionalNested_Int], [r0].[OptionalNested_Ints], [r0].[OptionalNested_Name], [r0].[OptionalNested_String], [r0].[RequiredNested_Id], [r0].[RequiredNested_Int], [r0].[RequiredNested_Ints], [r0].[RequiredNested_Name], [r0].[RequiredNested_String] FROM [RelatedCollection] AS [r0] LEFT JOIN [RelatedCollection_NestedCollection] AS [r1] ON [r0].[RootEntityId] = [r1].[RelatedTypeRootEntityId] AND [r0].[Id] = [r1].[RelatedTypeId] ) AS [s] ON [r].[Id] = [s].[RootEntityId] @@ -85,7 +85,7 @@ public override async Task Select_related(QueryTrackingBehavior queryTrackingBeh { AssertSql( """ -SELECT [r].[Id], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r0].[RelatedTypeRootEntityId], [r0].[Id], [r0].[Int], [r0].[Name], [r0].[String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] +SELECT [r].[Id], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Ints], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r0].[RelatedTypeRootEntityId], [r0].[Id], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Ints], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Ints], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] FROM [RootEntity] AS [r] LEFT JOIN [RequiredRelated_NestedCollection] AS [r0] ON [r].[Id] = [r0].[RelatedTypeRootEntityId] ORDER BY [r].[Id], [r0].[RelatedTypeRootEntityId] @@ -101,10 +101,10 @@ public override async Task Select_optional_related(QueryTrackingBehavior queryTr { AssertSql( """ -SELECT [r].[Id], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [o].[RelatedTypeRootEntityId], [o].[Id], [o].[Int], [o].[Name], [o].[String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String] +SELECT [r].[Id], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Ints], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [o].[RelatedTypeRootEntityId], [o].[Id], [o].[Int], [o].[Ints], [o].[Name], [o].[String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Ints], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Ints], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String] FROM [RootEntity] AS [r] LEFT JOIN [OptionalRelated_NestedCollection] AS [o] ON CASE - WHEN [r].[OptionalRelated_Id] IS NOT NULL AND [r].[OptionalRelated_Int] IS NOT NULL AND [r].[OptionalRelated_Name] IS NOT NULL AND [r].[OptionalRelated_String] IS NOT NULL THEN [r].[Id] + WHEN [r].[OptionalRelated_Id] IS NOT NULL AND [r].[OptionalRelated_Int] IS NOT NULL AND [r].[OptionalRelated_Ints] IS NOT NULL AND [r].[OptionalRelated_Name] IS NOT NULL AND [r].[OptionalRelated_String] IS NOT NULL THEN [r].[Id] END = [o].[RelatedTypeRootEntityId] ORDER BY [r].[Id], [o].[RelatedTypeRootEntityId] """); @@ -119,7 +119,7 @@ public override async Task Select_required_nested_on_required_related(QueryTrack { AssertSql( """ -SELECT [r].[Id], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] +SELECT [r].[Id], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Ints], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] FROM [RootEntity] AS [r] """); } @@ -133,7 +133,7 @@ public override async Task Select_optional_nested_on_required_related(QueryTrack { AssertSql( """ -SELECT [r].[Id], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String] +SELECT [r].[Id], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Ints], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String] FROM [RootEntity] AS [r] """); } @@ -147,7 +147,7 @@ public override async Task Select_required_nested_on_optional_related(QueryTrack { AssertSql( """ -SELECT [r].[Id], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String] +SELECT [r].[Id], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Ints], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String] FROM [RootEntity] AS [r] """); } @@ -161,7 +161,7 @@ public override async Task Select_optional_nested_on_optional_related(QueryTrack { AssertSql( """ -SELECT [r].[Id], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String] +SELECT [r].[Id], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Ints], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String] FROM [RootEntity] AS [r] """); } @@ -175,7 +175,7 @@ public override async Task Select_required_related_via_optional_navigation(Query { AssertSql( """ -SELECT [r0].[Id], [r0].[RequiredRelated_Id], [r0].[RequiredRelated_Int], [r0].[RequiredRelated_Name], [r0].[RequiredRelated_String], [r].[Id], [r1].[RelatedTypeRootEntityId], [r1].[Id], [r1].[Int], [r1].[Name], [r1].[String], [r0].[RequiredRelated_OptionalNested_Id], [r0].[RequiredRelated_OptionalNested_Int], [r0].[RequiredRelated_OptionalNested_Name], [r0].[RequiredRelated_OptionalNested_String], [r0].[RequiredRelated_RequiredNested_Id], [r0].[RequiredRelated_RequiredNested_Int], [r0].[RequiredRelated_RequiredNested_Name], [r0].[RequiredRelated_RequiredNested_String] +SELECT [r0].[Id], [r0].[RequiredRelated_Id], [r0].[RequiredRelated_Int], [r0].[RequiredRelated_Ints], [r0].[RequiredRelated_Name], [r0].[RequiredRelated_String], [r].[Id], [r1].[RelatedTypeRootEntityId], [r1].[Id], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[String], [r0].[RequiredRelated_OptionalNested_Id], [r0].[RequiredRelated_OptionalNested_Int], [r0].[RequiredRelated_OptionalNested_Ints], [r0].[RequiredRelated_OptionalNested_Name], [r0].[RequiredRelated_OptionalNested_String], [r0].[RequiredRelated_RequiredNested_Id], [r0].[RequiredRelated_RequiredNested_Int], [r0].[RequiredRelated_RequiredNested_Ints], [r0].[RequiredRelated_RequiredNested_Name], [r0].[RequiredRelated_RequiredNested_String] FROM [RootReferencingEntity] AS [r] LEFT JOIN [RootEntity] AS [r0] ON [r].[RootEntityId] = [r0].[Id] LEFT JOIN [RequiredRelated_NestedCollection] AS [r1] ON [r0].[Id] = [r1].[RelatedTypeRootEntityId] @@ -196,10 +196,10 @@ public override async Task Select_related_collection(QueryTrackingBehavior query { AssertSql( """ -SELECT [r].[Id], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[Id0], [s].[Int0], [s].[Name0], [s].[String0], [s].[OptionalNested_Id], [s].[OptionalNested_Int], [s].[OptionalNested_Name], [s].[OptionalNested_String], [s].[RequiredNested_Id], [s].[RequiredNested_Int], [s].[RequiredNested_Name], [s].[RequiredNested_String] +SELECT [r].[Id], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Ints], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[Id0], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[OptionalNested_Id], [s].[OptionalNested_Int], [s].[OptionalNested_Ints], [s].[OptionalNested_Name], [s].[OptionalNested_String], [s].[RequiredNested_Id], [s].[RequiredNested_Int], [s].[RequiredNested_Ints], [s].[RequiredNested_Name], [s].[RequiredNested_String] FROM [RootEntity] AS [r] LEFT JOIN ( - SELECT [r0].[RootEntityId], [r0].[Id], [r0].[Int], [r0].[Name], [r0].[String], [r1].[RelatedTypeRootEntityId], [r1].[RelatedTypeId], [r1].[Id] AS [Id0], [r1].[Int] AS [Int0], [r1].[Name] AS [Name0], [r1].[String] AS [String0], [r0].[OptionalNested_Id], [r0].[OptionalNested_Int], [r0].[OptionalNested_Name], [r0].[OptionalNested_String], [r0].[RequiredNested_Id], [r0].[RequiredNested_Int], [r0].[RequiredNested_Name], [r0].[RequiredNested_String] + SELECT [r0].[RootEntityId], [r0].[Id], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[String], [r1].[RelatedTypeRootEntityId], [r1].[RelatedTypeId], [r1].[Id] AS [Id0], [r1].[Int] AS [Int0], [r1].[Ints] AS [Ints0], [r1].[Name] AS [Name0], [r1].[String] AS [String0], [r0].[OptionalNested_Id], [r0].[OptionalNested_Int], [r0].[OptionalNested_Ints], [r0].[OptionalNested_Name], [r0].[OptionalNested_String], [r0].[RequiredNested_Id], [r0].[RequiredNested_Int], [r0].[RequiredNested_Ints], [r0].[RequiredNested_Name], [r0].[RequiredNested_String] FROM [RelatedCollection] AS [r0] LEFT JOIN [RelatedCollection_NestedCollection] AS [r1] ON [r0].[RootEntityId] = [r1].[RelatedTypeRootEntityId] AND [r0].[Id] = [r1].[RelatedTypeId] ) AS [s] ON [r].[Id] = [s].[RootEntityId] @@ -216,7 +216,7 @@ public override async Task Select_nested_collection_on_required_related(QueryTra { AssertSql( """ -SELECT [r].[Id], [r0].[RelatedTypeRootEntityId], [r0].[Id], [r0].[Int], [r0].[Name], [r0].[String] +SELECT [r].[Id], [r0].[RelatedTypeRootEntityId], [r0].[Id], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[String] FROM [RootEntity] AS [r] LEFT JOIN [RequiredRelated_NestedCollection] AS [r0] ON [r].[Id] = [r0].[RelatedTypeRootEntityId] ORDER BY [r].[Id], [r0].[RelatedTypeRootEntityId] @@ -232,10 +232,10 @@ public override async Task Select_nested_collection_on_optional_related(QueryTra { AssertSql( """ -SELECT [r].[Id], [o].[RelatedTypeRootEntityId], [o].[Id], [o].[Int], [o].[Name], [o].[String] +SELECT [r].[Id], [o].[RelatedTypeRootEntityId], [o].[Id], [o].[Int], [o].[Ints], [o].[Name], [o].[String] FROM [RootEntity] AS [r] LEFT JOIN [OptionalRelated_NestedCollection] AS [o] ON CASE - WHEN [r].[OptionalRelated_Id] IS NOT NULL AND [r].[OptionalRelated_Int] IS NOT NULL AND [r].[OptionalRelated_Name] IS NOT NULL AND [r].[OptionalRelated_String] IS NOT NULL THEN [r].[Id] + WHEN [r].[OptionalRelated_Id] IS NOT NULL AND [r].[OptionalRelated_Int] IS NOT NULL AND [r].[OptionalRelated_Ints] IS NOT NULL AND [r].[OptionalRelated_Name] IS NOT NULL AND [r].[OptionalRelated_String] IS NOT NULL THEN [r].[Id] END = [o].[RelatedTypeRootEntityId] ORDER BY [r].[Id], [o].[RelatedTypeRootEntityId] """); @@ -250,7 +250,7 @@ public override async Task SelectMany_related_collection(QueryTrackingBehavior q { AssertSql( """ -SELECT [r0].[RootEntityId], [r0].[Id], [r0].[Int], [r0].[Name], [r0].[String], [r].[Id], [r1].[RelatedTypeRootEntityId], [r1].[RelatedTypeId], [r1].[Id], [r1].[Int], [r1].[Name], [r1].[String], [r0].[OptionalNested_Id], [r0].[OptionalNested_Int], [r0].[OptionalNested_Name], [r0].[OptionalNested_String], [r0].[RequiredNested_Id], [r0].[RequiredNested_Int], [r0].[RequiredNested_Name], [r0].[RequiredNested_String] +SELECT [r0].[RootEntityId], [r0].[Id], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[String], [r].[Id], [r1].[RelatedTypeRootEntityId], [r1].[RelatedTypeId], [r1].[Id], [r1].[Int], [r1].[Ints], [r1].[Name], [r1].[String], [r0].[OptionalNested_Id], [r0].[OptionalNested_Int], [r0].[OptionalNested_Ints], [r0].[OptionalNested_Name], [r0].[OptionalNested_String], [r0].[RequiredNested_Id], [r0].[RequiredNested_Int], [r0].[RequiredNested_Ints], [r0].[RequiredNested_Name], [r0].[RequiredNested_String] FROM [RootEntity] AS [r] INNER JOIN [RelatedCollection] AS [r0] ON [r].[Id] = [r0].[RootEntityId] LEFT JOIN [RelatedCollection_NestedCollection] AS [r1] ON [r0].[RootEntityId] = [r1].[RelatedTypeRootEntityId] AND [r0].[Id] = [r1].[RelatedTypeId] @@ -267,7 +267,7 @@ public override async Task SelectMany_nested_collection_on_required_related(Quer { AssertSql( """ -SELECT [r0].[RelatedTypeRootEntityId], [r0].[Id], [r0].[Int], [r0].[Name], [r0].[String] +SELECT [r0].[RelatedTypeRootEntityId], [r0].[Id], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[String] FROM [RootEntity] AS [r] INNER JOIN [RequiredRelated_NestedCollection] AS [r0] ON [r].[Id] = [r0].[RelatedTypeRootEntityId] """); @@ -282,10 +282,10 @@ public override async Task SelectMany_nested_collection_on_optional_related(Quer { AssertSql( """ -SELECT [o].[RelatedTypeRootEntityId], [o].[Id], [o].[Int], [o].[Name], [o].[String] +SELECT [o].[RelatedTypeRootEntityId], [o].[Id], [o].[Int], [o].[Ints], [o].[Name], [o].[String] FROM [RootEntity] AS [r] INNER JOIN [OptionalRelated_NestedCollection] AS [o] ON CASE - WHEN [r].[OptionalRelated_Id] IS NOT NULL AND [r].[OptionalRelated_Int] IS NOT NULL AND [r].[OptionalRelated_Name] IS NOT NULL AND [r].[OptionalRelated_String] IS NOT NULL THEN [r].[Id] + WHEN [r].[OptionalRelated_Id] IS NOT NULL AND [r].[OptionalRelated_Int] IS NOT NULL AND [r].[OptionalRelated_Ints] IS NOT NULL AND [r].[OptionalRelated_Name] IS NOT NULL AND [r].[OptionalRelated_String] IS NOT NULL THEN [r].[Id] END = [o].[RelatedTypeRootEntityId] """); } @@ -301,22 +301,22 @@ public override async Task Select_root_duplicated(QueryTrackingBehavior queryTra AssertSql( """ -SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [o].[RelatedTypeRootEntityId], [o].[Id], [o].[Int], [o].[Name], [o].[String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[Id0], [s].[Int0], [s].[Name0], [s].[String0], [s].[OptionalNested_Id], [s].[OptionalNested_Int], [s].[OptionalNested_Name], [s].[OptionalNested_String], [s].[RequiredNested_Id], [s].[RequiredNested_Int], [s].[RequiredNested_Name], [s].[RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r2].[RelatedTypeRootEntityId], [r2].[Id], [r2].[Int], [r2].[Name], [r2].[String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String], [o0].[RelatedTypeRootEntityId], [o0].[Id], [o0].[Int], [o0].[Name], [o0].[String], [s0].[RootEntityId], [s0].[Id], [s0].[Int], [s0].[Name], [s0].[String], [s0].[RelatedTypeRootEntityId], [s0].[RelatedTypeId], [s0].[Id0], [s0].[Int0], [s0].[Name0], [s0].[String0], [s0].[OptionalNested_Id], [s0].[OptionalNested_Int], [s0].[OptionalNested_Name], [s0].[OptionalNested_String], [s0].[RequiredNested_Id], [s0].[RequiredNested_Int], [s0].[RequiredNested_Name], [s0].[RequiredNested_String], [r5].[RelatedTypeRootEntityId], [r5].[Id], [r5].[Int], [r5].[Name], [r5].[String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Ints], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [o].[RelatedTypeRootEntityId], [o].[Id], [o].[Int], [o].[Ints], [o].[Name], [o].[String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Ints], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Ints], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Ints], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[Id0], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[OptionalNested_Id], [s].[OptionalNested_Int], [s].[OptionalNested_Ints], [s].[OptionalNested_Name], [s].[OptionalNested_String], [s].[RequiredNested_Id], [s].[RequiredNested_Int], [s].[RequiredNested_Ints], [s].[RequiredNested_Name], [s].[RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Ints], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r2].[RelatedTypeRootEntityId], [r2].[Id], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Ints], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Ints], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String], [o0].[RelatedTypeRootEntityId], [o0].[Id], [o0].[Int], [o0].[Ints], [o0].[Name], [o0].[String], [s0].[RootEntityId], [s0].[Id], [s0].[Int], [s0].[Ints], [s0].[Name], [s0].[String], [s0].[RelatedTypeRootEntityId], [s0].[RelatedTypeId], [s0].[Id0], [s0].[Int0], [s0].[Ints0], [s0].[Name0], [s0].[String0], [s0].[OptionalNested_Id], [s0].[OptionalNested_Int], [s0].[OptionalNested_Ints], [s0].[OptionalNested_Name], [s0].[OptionalNested_String], [s0].[RequiredNested_Id], [s0].[RequiredNested_Int], [s0].[RequiredNested_Ints], [s0].[RequiredNested_Name], [s0].[RequiredNested_String], [r5].[RelatedTypeRootEntityId], [r5].[Id], [r5].[Int], [r5].[Ints], [r5].[Name], [r5].[String] FROM [RootEntity] AS [r] LEFT JOIN [OptionalRelated_NestedCollection] AS [o] ON CASE - WHEN [r].[OptionalRelated_Id] IS NOT NULL AND [r].[OptionalRelated_Int] IS NOT NULL AND [r].[OptionalRelated_Name] IS NOT NULL AND [r].[OptionalRelated_String] IS NOT NULL THEN [r].[Id] + WHEN [r].[OptionalRelated_Id] IS NOT NULL AND [r].[OptionalRelated_Int] IS NOT NULL AND [r].[OptionalRelated_Ints] IS NOT NULL AND [r].[OptionalRelated_Name] IS NOT NULL AND [r].[OptionalRelated_String] IS NOT NULL THEN [r].[Id] END = [o].[RelatedTypeRootEntityId] LEFT JOIN ( - SELECT [r0].[RootEntityId], [r0].[Id], [r0].[Int], [r0].[Name], [r0].[String], [r1].[RelatedTypeRootEntityId], [r1].[RelatedTypeId], [r1].[Id] AS [Id0], [r1].[Int] AS [Int0], [r1].[Name] AS [Name0], [r1].[String] AS [String0], [r0].[OptionalNested_Id], [r0].[OptionalNested_Int], [r0].[OptionalNested_Name], [r0].[OptionalNested_String], [r0].[RequiredNested_Id], [r0].[RequiredNested_Int], [r0].[RequiredNested_Name], [r0].[RequiredNested_String] + SELECT [r0].[RootEntityId], [r0].[Id], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[String], [r1].[RelatedTypeRootEntityId], [r1].[RelatedTypeId], [r1].[Id] AS [Id0], [r1].[Int] AS [Int0], [r1].[Ints] AS [Ints0], [r1].[Name] AS [Name0], [r1].[String] AS [String0], [r0].[OptionalNested_Id], [r0].[OptionalNested_Int], [r0].[OptionalNested_Ints], [r0].[OptionalNested_Name], [r0].[OptionalNested_String], [r0].[RequiredNested_Id], [r0].[RequiredNested_Int], [r0].[RequiredNested_Ints], [r0].[RequiredNested_Name], [r0].[RequiredNested_String] FROM [RelatedCollection] AS [r0] LEFT JOIN [RelatedCollection_NestedCollection] AS [r1] ON [r0].[RootEntityId] = [r1].[RelatedTypeRootEntityId] AND [r0].[Id] = [r1].[RelatedTypeId] ) AS [s] ON [r].[Id] = [s].[RootEntityId] LEFT JOIN [RequiredRelated_NestedCollection] AS [r2] ON [r].[Id] = [r2].[RelatedTypeRootEntityId] LEFT JOIN [OptionalRelated_NestedCollection] AS [o0] ON CASE - WHEN [r].[OptionalRelated_Id] IS NOT NULL AND [r].[OptionalRelated_Int] IS NOT NULL AND [r].[OptionalRelated_Name] IS NOT NULL AND [r].[OptionalRelated_String] IS NOT NULL THEN [r].[Id] + WHEN [r].[OptionalRelated_Id] IS NOT NULL AND [r].[OptionalRelated_Int] IS NOT NULL AND [r].[OptionalRelated_Ints] IS NOT NULL AND [r].[OptionalRelated_Name] IS NOT NULL AND [r].[OptionalRelated_String] IS NOT NULL THEN [r].[Id] END = [o0].[RelatedTypeRootEntityId] LEFT JOIN ( - SELECT [r3].[RootEntityId], [r3].[Id], [r3].[Int], [r3].[Name], [r3].[String], [r4].[RelatedTypeRootEntityId], [r4].[RelatedTypeId], [r4].[Id] AS [Id0], [r4].[Int] AS [Int0], [r4].[Name] AS [Name0], [r4].[String] AS [String0], [r3].[OptionalNested_Id], [r3].[OptionalNested_Int], [r3].[OptionalNested_Name], [r3].[OptionalNested_String], [r3].[RequiredNested_Id], [r3].[RequiredNested_Int], [r3].[RequiredNested_Name], [r3].[RequiredNested_String] + SELECT [r3].[RootEntityId], [r3].[Id], [r3].[Int], [r3].[Ints], [r3].[Name], [r3].[String], [r4].[RelatedTypeRootEntityId], [r4].[RelatedTypeId], [r4].[Id] AS [Id0], [r4].[Int] AS [Int0], [r4].[Ints] AS [Ints0], [r4].[Name] AS [Name0], [r4].[String] AS [String0], [r3].[OptionalNested_Id], [r3].[OptionalNested_Int], [r3].[OptionalNested_Ints], [r3].[OptionalNested_Name], [r3].[OptionalNested_String], [r3].[RequiredNested_Id], [r3].[RequiredNested_Int], [r3].[RequiredNested_Ints], [r3].[RequiredNested_Name], [r3].[RequiredNested_String] FROM [RelatedCollection] AS [r3] LEFT JOIN [RelatedCollection_NestedCollection] AS [r4] ON [r3].[RootEntityId] = [r4].[RelatedTypeRootEntityId] AND [r3].[Id] = [r4].[RelatedTypeId] ) AS [s0] ON [r].[Id] = [s0].[RootEntityId] @@ -337,10 +337,10 @@ public override async Task Select_subquery_required_related_FirstOrDefault(Query { AssertSql( """ -SELECT [r1].[Id], [r1].[RequiredRelated_RequiredNested_Id], [r1].[RequiredRelated_RequiredNested_Int], [r1].[RequiredRelated_RequiredNested_Name], [r1].[RequiredRelated_RequiredNested_String] +SELECT [r1].[Id], [r1].[RequiredRelated_RequiredNested_Id], [r1].[RequiredRelated_RequiredNested_Int], [r1].[RequiredRelated_RequiredNested_Ints], [r1].[RequiredRelated_RequiredNested_Name], [r1].[RequiredRelated_RequiredNested_String] FROM [RootEntity] AS [r] OUTER APPLY ( - SELECT TOP(1) [r0].[Id], [r0].[RequiredRelated_RequiredNested_Id], [r0].[RequiredRelated_RequiredNested_Int], [r0].[RequiredRelated_RequiredNested_Name], [r0].[RequiredRelated_RequiredNested_String] + SELECT TOP(1) [r0].[Id], [r0].[RequiredRelated_RequiredNested_Id], [r0].[RequiredRelated_RequiredNested_Int], [r0].[RequiredRelated_RequiredNested_Ints], [r0].[RequiredRelated_RequiredNested_Name], [r0].[RequiredRelated_RequiredNested_String] FROM [RootEntity] AS [r0] ORDER BY [r0].[Id] ) AS [r1] @@ -356,10 +356,10 @@ public override async Task Select_subquery_optional_related_FirstOrDefault(Query { AssertSql( """ -SELECT [r1].[Id], [r1].[OptionalRelated_RequiredNested_Id], [r1].[OptionalRelated_RequiredNested_Int], [r1].[OptionalRelated_RequiredNested_Name], [r1].[OptionalRelated_RequiredNested_String] +SELECT [r1].[Id], [r1].[OptionalRelated_RequiredNested_Id], [r1].[OptionalRelated_RequiredNested_Int], [r1].[OptionalRelated_RequiredNested_Ints], [r1].[OptionalRelated_RequiredNested_Name], [r1].[OptionalRelated_RequiredNested_String] FROM [RootEntity] AS [r] OUTER APPLY ( - SELECT TOP(1) [r0].[Id], [r0].[OptionalRelated_RequiredNested_Id], [r0].[OptionalRelated_RequiredNested_Int], [r0].[OptionalRelated_RequiredNested_Name], [r0].[OptionalRelated_RequiredNested_String] + SELECT TOP(1) [r0].[Id], [r0].[OptionalRelated_RequiredNested_Id], [r0].[OptionalRelated_RequiredNested_Int], [r0].[OptionalRelated_RequiredNested_Ints], [r0].[OptionalRelated_RequiredNested_Name], [r0].[OptionalRelated_RequiredNested_String] FROM [RootEntity] AS [r0] ORDER BY [r0].[Id] ) AS [r1] diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/Associations/OwnedTableSplitting/OwnedTableSplittingStructuralEqualitySqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/Associations/OwnedTableSplitting/OwnedTableSplittingStructuralEqualitySqlServerTest.cs index 6a398a2a4df..706b4b0fd90 100644 --- a/test/EFCore.SqlServer.FunctionalTests/Query/Associations/OwnedTableSplitting/OwnedTableSplittingStructuralEqualitySqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/Query/Associations/OwnedTableSplitting/OwnedTableSplittingStructuralEqualitySqlServerTest.cs @@ -14,13 +14,13 @@ public override async Task Two_related() AssertSql( """ -SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [o].[RelatedTypeRootEntityId], [o].[Id], [o].[Int], [o].[Name], [o].[String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[Id0], [s].[Int0], [s].[Name0], [s].[String0], [s].[OptionalNested_Id], [s].[OptionalNested_Int], [s].[OptionalNested_Name], [s].[OptionalNested_String], [s].[RequiredNested_Id], [s].[RequiredNested_Int], [s].[RequiredNested_Name], [s].[RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r2].[RelatedTypeRootEntityId], [r2].[Id], [r2].[Int], [r2].[Name], [r2].[String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Ints], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [o].[RelatedTypeRootEntityId], [o].[Id], [o].[Int], [o].[Ints], [o].[Name], [o].[String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Ints], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Ints], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Ints], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[Id0], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[OptionalNested_Id], [s].[OptionalNested_Int], [s].[OptionalNested_Ints], [s].[OptionalNested_Name], [s].[OptionalNested_String], [s].[RequiredNested_Id], [s].[RequiredNested_Int], [s].[RequiredNested_Ints], [s].[RequiredNested_Name], [s].[RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Ints], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r2].[RelatedTypeRootEntityId], [r2].[Id], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Ints], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Ints], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] FROM [RootEntity] AS [r] LEFT JOIN [OptionalRelated_NestedCollection] AS [o] ON CASE - WHEN [r].[OptionalRelated_Id] IS NOT NULL AND [r].[OptionalRelated_Int] IS NOT NULL AND [r].[OptionalRelated_Name] IS NOT NULL AND [r].[OptionalRelated_String] IS NOT NULL THEN [r].[Id] + WHEN [r].[OptionalRelated_Id] IS NOT NULL AND [r].[OptionalRelated_Int] IS NOT NULL AND [r].[OptionalRelated_Ints] IS NOT NULL AND [r].[OptionalRelated_Name] IS NOT NULL AND [r].[OptionalRelated_String] IS NOT NULL THEN [r].[Id] END = [o].[RelatedTypeRootEntityId] LEFT JOIN ( - SELECT [r0].[RootEntityId], [r0].[Id], [r0].[Int], [r0].[Name], [r0].[String], [r1].[RelatedTypeRootEntityId], [r1].[RelatedTypeId], [r1].[Id] AS [Id0], [r1].[Int] AS [Int0], [r1].[Name] AS [Name0], [r1].[String] AS [String0], [r0].[OptionalNested_Id], [r0].[OptionalNested_Int], [r0].[OptionalNested_Name], [r0].[OptionalNested_String], [r0].[RequiredNested_Id], [r0].[RequiredNested_Int], [r0].[RequiredNested_Name], [r0].[RequiredNested_String] + SELECT [r0].[RootEntityId], [r0].[Id], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[String], [r1].[RelatedTypeRootEntityId], [r1].[RelatedTypeId], [r1].[Id] AS [Id0], [r1].[Int] AS [Int0], [r1].[Ints] AS [Ints0], [r1].[Name] AS [Name0], [r1].[String] AS [String0], [r0].[OptionalNested_Id], [r0].[OptionalNested_Int], [r0].[OptionalNested_Ints], [r0].[OptionalNested_Name], [r0].[OptionalNested_String], [r0].[RequiredNested_Id], [r0].[RequiredNested_Int], [r0].[RequiredNested_Ints], [r0].[RequiredNested_Name], [r0].[RequiredNested_String] FROM [RelatedCollection] AS [r0] LEFT JOIN [RelatedCollection_NestedCollection] AS [r1] ON [r0].[RootEntityId] = [r1].[RelatedTypeRootEntityId] AND [r0].[Id] = [r1].[RelatedTypeId] ) AS [s] ON [r].[Id] = [s].[RootEntityId] @@ -36,13 +36,13 @@ public override async Task Two_nested() AssertSql( """ -SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [o].[RelatedTypeRootEntityId], [o].[Id], [o].[Int], [o].[Name], [o].[String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[Id0], [s].[Int0], [s].[Name0], [s].[String0], [s].[OptionalNested_Id], [s].[OptionalNested_Int], [s].[OptionalNested_Name], [s].[OptionalNested_String], [s].[RequiredNested_Id], [s].[RequiredNested_Int], [s].[RequiredNested_Name], [s].[RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r2].[RelatedTypeRootEntityId], [r2].[Id], [r2].[Int], [r2].[Name], [r2].[String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Ints], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [o].[RelatedTypeRootEntityId], [o].[Id], [o].[Int], [o].[Ints], [o].[Name], [o].[String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Ints], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Ints], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Ints], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[Id0], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[OptionalNested_Id], [s].[OptionalNested_Int], [s].[OptionalNested_Ints], [s].[OptionalNested_Name], [s].[OptionalNested_String], [s].[RequiredNested_Id], [s].[RequiredNested_Int], [s].[RequiredNested_Ints], [s].[RequiredNested_Name], [s].[RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Ints], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r2].[RelatedTypeRootEntityId], [r2].[Id], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Ints], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Ints], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] FROM [RootEntity] AS [r] LEFT JOIN [OptionalRelated_NestedCollection] AS [o] ON CASE - WHEN [r].[OptionalRelated_Id] IS NOT NULL AND [r].[OptionalRelated_Int] IS NOT NULL AND [r].[OptionalRelated_Name] IS NOT NULL AND [r].[OptionalRelated_String] IS NOT NULL THEN [r].[Id] + WHEN [r].[OptionalRelated_Id] IS NOT NULL AND [r].[OptionalRelated_Int] IS NOT NULL AND [r].[OptionalRelated_Ints] IS NOT NULL AND [r].[OptionalRelated_Name] IS NOT NULL AND [r].[OptionalRelated_String] IS NOT NULL THEN [r].[Id] END = [o].[RelatedTypeRootEntityId] LEFT JOIN ( - SELECT [r0].[RootEntityId], [r0].[Id], [r0].[Int], [r0].[Name], [r0].[String], [r1].[RelatedTypeRootEntityId], [r1].[RelatedTypeId], [r1].[Id] AS [Id0], [r1].[Int] AS [Int0], [r1].[Name] AS [Name0], [r1].[String] AS [String0], [r0].[OptionalNested_Id], [r0].[OptionalNested_Int], [r0].[OptionalNested_Name], [r0].[OptionalNested_String], [r0].[RequiredNested_Id], [r0].[RequiredNested_Int], [r0].[RequiredNested_Name], [r0].[RequiredNested_String] + SELECT [r0].[RootEntityId], [r0].[Id], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[String], [r1].[RelatedTypeRootEntityId], [r1].[RelatedTypeId], [r1].[Id] AS [Id0], [r1].[Int] AS [Int0], [r1].[Ints] AS [Ints0], [r1].[Name] AS [Name0], [r1].[String] AS [String0], [r0].[OptionalNested_Id], [r0].[OptionalNested_Int], [r0].[OptionalNested_Ints], [r0].[OptionalNested_Name], [r0].[OptionalNested_String], [r0].[RequiredNested_Id], [r0].[RequiredNested_Int], [r0].[RequiredNested_Ints], [r0].[RequiredNested_Name], [r0].[RequiredNested_String] FROM [RelatedCollection] AS [r0] LEFT JOIN [RelatedCollection_NestedCollection] AS [r1] ON [r0].[RootEntityId] = [r1].[RelatedTypeRootEntityId] AND [r0].[Id] = [r1].[RelatedTypeId] ) AS [s] ON [r].[Id] = [s].[RootEntityId] @@ -58,13 +58,13 @@ public override async Task Not_equals() AssertSql( """ -SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [o].[RelatedTypeRootEntityId], [o].[Id], [o].[Int], [o].[Name], [o].[String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[Id0], [s].[Int0], [s].[Name0], [s].[String0], [s].[OptionalNested_Id], [s].[OptionalNested_Int], [s].[OptionalNested_Name], [s].[OptionalNested_String], [s].[RequiredNested_Id], [s].[RequiredNested_Int], [s].[RequiredNested_Name], [s].[RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r2].[RelatedTypeRootEntityId], [r2].[Id], [r2].[Int], [r2].[Name], [r2].[String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Ints], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [o].[RelatedTypeRootEntityId], [o].[Id], [o].[Int], [o].[Ints], [o].[Name], [o].[String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Ints], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Ints], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Ints], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[Id0], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[OptionalNested_Id], [s].[OptionalNested_Int], [s].[OptionalNested_Ints], [s].[OptionalNested_Name], [s].[OptionalNested_String], [s].[RequiredNested_Id], [s].[RequiredNested_Int], [s].[RequiredNested_Ints], [s].[RequiredNested_Name], [s].[RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Ints], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r2].[RelatedTypeRootEntityId], [r2].[Id], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Ints], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Ints], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] FROM [RootEntity] AS [r] LEFT JOIN [OptionalRelated_NestedCollection] AS [o] ON CASE - WHEN [r].[OptionalRelated_Id] IS NOT NULL AND [r].[OptionalRelated_Int] IS NOT NULL AND [r].[OptionalRelated_Name] IS NOT NULL AND [r].[OptionalRelated_String] IS NOT NULL THEN [r].[Id] + WHEN [r].[OptionalRelated_Id] IS NOT NULL AND [r].[OptionalRelated_Int] IS NOT NULL AND [r].[OptionalRelated_Ints] IS NOT NULL AND [r].[OptionalRelated_Name] IS NOT NULL AND [r].[OptionalRelated_String] IS NOT NULL THEN [r].[Id] END = [o].[RelatedTypeRootEntityId] LEFT JOIN ( - SELECT [r0].[RootEntityId], [r0].[Id], [r0].[Int], [r0].[Name], [r0].[String], [r1].[RelatedTypeRootEntityId], [r1].[RelatedTypeId], [r1].[Id] AS [Id0], [r1].[Int] AS [Int0], [r1].[Name] AS [Name0], [r1].[String] AS [String0], [r0].[OptionalNested_Id], [r0].[OptionalNested_Int], [r0].[OptionalNested_Name], [r0].[OptionalNested_String], [r0].[RequiredNested_Id], [r0].[RequiredNested_Int], [r0].[RequiredNested_Name], [r0].[RequiredNested_String] + SELECT [r0].[RootEntityId], [r0].[Id], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[String], [r1].[RelatedTypeRootEntityId], [r1].[RelatedTypeId], [r1].[Id] AS [Id0], [r1].[Int] AS [Int0], [r1].[Ints] AS [Ints0], [r1].[Name] AS [Name0], [r1].[String] AS [String0], [r0].[OptionalNested_Id], [r0].[OptionalNested_Int], [r0].[OptionalNested_Ints], [r0].[OptionalNested_Name], [r0].[OptionalNested_String], [r0].[RequiredNested_Id], [r0].[RequiredNested_Int], [r0].[RequiredNested_Ints], [r0].[RequiredNested_Name], [r0].[RequiredNested_String] FROM [RelatedCollection] AS [r0] LEFT JOIN [RelatedCollection_NestedCollection] AS [r1] ON [r0].[RootEntityId] = [r1].[RelatedTypeRootEntityId] AND [r0].[Id] = [r1].[RelatedTypeId] ) AS [s] ON [r].[Id] = [s].[RootEntityId] @@ -80,18 +80,18 @@ public override async Task Related_with_inline_null() AssertSql( """ -SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [o].[RelatedTypeRootEntityId], [o].[Id], [o].[Int], [o].[Name], [o].[String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[Id0], [s].[Int0], [s].[Name0], [s].[String0], [s].[OptionalNested_Id], [s].[OptionalNested_Int], [s].[OptionalNested_Name], [s].[OptionalNested_String], [s].[RequiredNested_Id], [s].[RequiredNested_Int], [s].[RequiredNested_Name], [s].[RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r2].[RelatedTypeRootEntityId], [r2].[Id], [r2].[Int], [r2].[Name], [r2].[String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Ints], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [o].[RelatedTypeRootEntityId], [o].[Id], [o].[Int], [o].[Ints], [o].[Name], [o].[String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Ints], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Ints], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Ints], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[Id0], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[OptionalNested_Id], [s].[OptionalNested_Int], [s].[OptionalNested_Ints], [s].[OptionalNested_Name], [s].[OptionalNested_String], [s].[RequiredNested_Id], [s].[RequiredNested_Int], [s].[RequiredNested_Ints], [s].[RequiredNested_Name], [s].[RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Ints], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r2].[RelatedTypeRootEntityId], [r2].[Id], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Ints], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Ints], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] FROM [RootEntity] AS [r] LEFT JOIN [OptionalRelated_NestedCollection] AS [o] ON CASE - WHEN [r].[OptionalRelated_Id] IS NOT NULL AND [r].[OptionalRelated_Int] IS NOT NULL AND [r].[OptionalRelated_Name] IS NOT NULL AND [r].[OptionalRelated_String] IS NOT NULL THEN [r].[Id] + WHEN [r].[OptionalRelated_Id] IS NOT NULL AND [r].[OptionalRelated_Int] IS NOT NULL AND [r].[OptionalRelated_Ints] IS NOT NULL AND [r].[OptionalRelated_Name] IS NOT NULL AND [r].[OptionalRelated_String] IS NOT NULL THEN [r].[Id] END = [o].[RelatedTypeRootEntityId] LEFT JOIN ( - SELECT [r0].[RootEntityId], [r0].[Id], [r0].[Int], [r0].[Name], [r0].[String], [r1].[RelatedTypeRootEntityId], [r1].[RelatedTypeId], [r1].[Id] AS [Id0], [r1].[Int] AS [Int0], [r1].[Name] AS [Name0], [r1].[String] AS [String0], [r0].[OptionalNested_Id], [r0].[OptionalNested_Int], [r0].[OptionalNested_Name], [r0].[OptionalNested_String], [r0].[RequiredNested_Id], [r0].[RequiredNested_Int], [r0].[RequiredNested_Name], [r0].[RequiredNested_String] + SELECT [r0].[RootEntityId], [r0].[Id], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[String], [r1].[RelatedTypeRootEntityId], [r1].[RelatedTypeId], [r1].[Id] AS [Id0], [r1].[Int] AS [Int0], [r1].[Ints] AS [Ints0], [r1].[Name] AS [Name0], [r1].[String] AS [String0], [r0].[OptionalNested_Id], [r0].[OptionalNested_Int], [r0].[OptionalNested_Ints], [r0].[OptionalNested_Name], [r0].[OptionalNested_String], [r0].[RequiredNested_Id], [r0].[RequiredNested_Int], [r0].[RequiredNested_Ints], [r0].[RequiredNested_Name], [r0].[RequiredNested_String] FROM [RelatedCollection] AS [r0] LEFT JOIN [RelatedCollection_NestedCollection] AS [r1] ON [r0].[RootEntityId] = [r1].[RelatedTypeRootEntityId] AND [r0].[Id] = [r1].[RelatedTypeId] ) AS [s] ON [r].[Id] = [s].[RootEntityId] LEFT JOIN [RequiredRelated_NestedCollection] AS [r2] ON [r].[Id] = [r2].[RelatedTypeRootEntityId] -WHERE [r].[OptionalRelated_Id] IS NULL OR [r].[OptionalRelated_Int] IS NULL OR [r].[OptionalRelated_Name] IS NULL OR [r].[OptionalRelated_String] IS NULL +WHERE [r].[OptionalRelated_Id] IS NULL OR [r].[OptionalRelated_Int] IS NULL OR [r].[OptionalRelated_Ints] IS NULL OR [r].[OptionalRelated_Name] IS NULL OR [r].[OptionalRelated_String] IS NULL ORDER BY [r].[Id], [o].[RelatedTypeRootEntityId], [o].[Id], [s].[RootEntityId], [s].[Id], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[Id0], [r2].[RelatedTypeRootEntityId] """); } @@ -102,19 +102,19 @@ public override async Task Related_with_parameter_null() AssertSql( """ -SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [o].[RelatedTypeRootEntityId], [o].[Id], [o].[Int], [o].[Name], [o].[String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[Id0], [s].[Int0], [s].[Name0], [s].[String0], [s].[OptionalNested_Id], [s].[OptionalNested_Int], [s].[OptionalNested_Name], [s].[OptionalNested_String], [s].[RequiredNested_Id], [s].[RequiredNested_Int], [s].[RequiredNested_Name], [s].[RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r2].[RelatedTypeRootEntityId], [r2].[Id], [r2].[Int], [r2].[Name], [r2].[String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Ints], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [o].[RelatedTypeRootEntityId], [o].[Id], [o].[Int], [o].[Ints], [o].[Name], [o].[String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Ints], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Ints], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Ints], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[Id0], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[OptionalNested_Id], [s].[OptionalNested_Int], [s].[OptionalNested_Ints], [s].[OptionalNested_Name], [s].[OptionalNested_String], [s].[RequiredNested_Id], [s].[RequiredNested_Int], [s].[RequiredNested_Ints], [s].[RequiredNested_Name], [s].[RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Ints], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r2].[RelatedTypeRootEntityId], [r2].[Id], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Ints], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Ints], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] FROM [RootEntity] AS [r] LEFT JOIN [OptionalRelated_NestedCollection] AS [o] ON CASE - WHEN [r].[OptionalRelated_Id] IS NOT NULL AND [r].[OptionalRelated_Int] IS NOT NULL AND [r].[OptionalRelated_Name] IS NOT NULL AND [r].[OptionalRelated_String] IS NOT NULL THEN [r].[Id] + WHEN [r].[OptionalRelated_Id] IS NOT NULL AND [r].[OptionalRelated_Int] IS NOT NULL AND [r].[OptionalRelated_Ints] IS NOT NULL AND [r].[OptionalRelated_Name] IS NOT NULL AND [r].[OptionalRelated_String] IS NOT NULL THEN [r].[Id] END = [o].[RelatedTypeRootEntityId] LEFT JOIN ( - SELECT [r0].[RootEntityId], [r0].[Id], [r0].[Int], [r0].[Name], [r0].[String], [r1].[RelatedTypeRootEntityId], [r1].[RelatedTypeId], [r1].[Id] AS [Id0], [r1].[Int] AS [Int0], [r1].[Name] AS [Name0], [r1].[String] AS [String0], [r0].[OptionalNested_Id], [r0].[OptionalNested_Int], [r0].[OptionalNested_Name], [r0].[OptionalNested_String], [r0].[RequiredNested_Id], [r0].[RequiredNested_Int], [r0].[RequiredNested_Name], [r0].[RequiredNested_String] + SELECT [r0].[RootEntityId], [r0].[Id], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[String], [r1].[RelatedTypeRootEntityId], [r1].[RelatedTypeId], [r1].[Id] AS [Id0], [r1].[Int] AS [Int0], [r1].[Ints] AS [Ints0], [r1].[Name] AS [Name0], [r1].[String] AS [String0], [r0].[OptionalNested_Id], [r0].[OptionalNested_Int], [r0].[OptionalNested_Ints], [r0].[OptionalNested_Name], [r0].[OptionalNested_String], [r0].[RequiredNested_Id], [r0].[RequiredNested_Int], [r0].[RequiredNested_Ints], [r0].[RequiredNested_Name], [r0].[RequiredNested_String] FROM [RelatedCollection] AS [r0] LEFT JOIN [RelatedCollection_NestedCollection] AS [r1] ON [r0].[RootEntityId] = [r1].[RelatedTypeRootEntityId] AND [r0].[Id] = [r1].[RelatedTypeId] ) AS [s] ON [r].[Id] = [s].[RootEntityId] LEFT JOIN [RequiredRelated_NestedCollection] AS [r2] ON [r].[Id] = [r2].[RelatedTypeRootEntityId] WHERE CASE - WHEN [r].[OptionalRelated_Id] IS NOT NULL AND [r].[OptionalRelated_Int] IS NOT NULL AND [r].[OptionalRelated_Name] IS NOT NULL AND [r].[OptionalRelated_String] IS NOT NULL THEN [r].[Id] + WHEN [r].[OptionalRelated_Id] IS NOT NULL AND [r].[OptionalRelated_Int] IS NOT NULL AND [r].[OptionalRelated_Ints] IS NOT NULL AND [r].[OptionalRelated_Name] IS NOT NULL AND [r].[OptionalRelated_String] IS NOT NULL THEN [r].[Id] END IS NULL ORDER BY [r].[Id], [o].[RelatedTypeRootEntityId], [o].[Id], [s].[RootEntityId], [s].[Id], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[Id0], [r2].[RelatedTypeRootEntityId] """); @@ -126,18 +126,18 @@ public override async Task Nested_with_inline_null() AssertSql( """ -SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [o].[RelatedTypeRootEntityId], [o].[Id], [o].[Int], [o].[Name], [o].[String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[Id0], [s].[Int0], [s].[Name0], [s].[String0], [s].[OptionalNested_Id], [s].[OptionalNested_Int], [s].[OptionalNested_Name], [s].[OptionalNested_String], [s].[RequiredNested_Id], [s].[RequiredNested_Int], [s].[RequiredNested_Name], [s].[RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r2].[RelatedTypeRootEntityId], [r2].[Id], [r2].[Int], [r2].[Name], [r2].[String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Ints], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [o].[RelatedTypeRootEntityId], [o].[Id], [o].[Int], [o].[Ints], [o].[Name], [o].[String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Ints], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Ints], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Ints], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[Id0], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[OptionalNested_Id], [s].[OptionalNested_Int], [s].[OptionalNested_Ints], [s].[OptionalNested_Name], [s].[OptionalNested_String], [s].[RequiredNested_Id], [s].[RequiredNested_Int], [s].[RequiredNested_Ints], [s].[RequiredNested_Name], [s].[RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Ints], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r2].[RelatedTypeRootEntityId], [r2].[Id], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Ints], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Ints], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] FROM [RootEntity] AS [r] LEFT JOIN [OptionalRelated_NestedCollection] AS [o] ON CASE - WHEN [r].[OptionalRelated_Id] IS NOT NULL AND [r].[OptionalRelated_Int] IS NOT NULL AND [r].[OptionalRelated_Name] IS NOT NULL AND [r].[OptionalRelated_String] IS NOT NULL THEN [r].[Id] + WHEN [r].[OptionalRelated_Id] IS NOT NULL AND [r].[OptionalRelated_Int] IS NOT NULL AND [r].[OptionalRelated_Ints] IS NOT NULL AND [r].[OptionalRelated_Name] IS NOT NULL AND [r].[OptionalRelated_String] IS NOT NULL THEN [r].[Id] END = [o].[RelatedTypeRootEntityId] LEFT JOIN ( - SELECT [r0].[RootEntityId], [r0].[Id], [r0].[Int], [r0].[Name], [r0].[String], [r1].[RelatedTypeRootEntityId], [r1].[RelatedTypeId], [r1].[Id] AS [Id0], [r1].[Int] AS [Int0], [r1].[Name] AS [Name0], [r1].[String] AS [String0], [r0].[OptionalNested_Id], [r0].[OptionalNested_Int], [r0].[OptionalNested_Name], [r0].[OptionalNested_String], [r0].[RequiredNested_Id], [r0].[RequiredNested_Int], [r0].[RequiredNested_Name], [r0].[RequiredNested_String] + SELECT [r0].[RootEntityId], [r0].[Id], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[String], [r1].[RelatedTypeRootEntityId], [r1].[RelatedTypeId], [r1].[Id] AS [Id0], [r1].[Int] AS [Int0], [r1].[Ints] AS [Ints0], [r1].[Name] AS [Name0], [r1].[String] AS [String0], [r0].[OptionalNested_Id], [r0].[OptionalNested_Int], [r0].[OptionalNested_Ints], [r0].[OptionalNested_Name], [r0].[OptionalNested_String], [r0].[RequiredNested_Id], [r0].[RequiredNested_Int], [r0].[RequiredNested_Ints], [r0].[RequiredNested_Name], [r0].[RequiredNested_String] FROM [RelatedCollection] AS [r0] LEFT JOIN [RelatedCollection_NestedCollection] AS [r1] ON [r0].[RootEntityId] = [r1].[RelatedTypeRootEntityId] AND [r0].[Id] = [r1].[RelatedTypeId] ) AS [s] ON [r].[Id] = [s].[RootEntityId] LEFT JOIN [RequiredRelated_NestedCollection] AS [r2] ON [r].[Id] = [r2].[RelatedTypeRootEntityId] -WHERE [r].[RequiredRelated_OptionalNested_Id] IS NULL OR [r].[RequiredRelated_OptionalNested_Int] IS NULL OR [r].[RequiredRelated_OptionalNested_Name] IS NULL OR [r].[RequiredRelated_OptionalNested_String] IS NULL +WHERE [r].[RequiredRelated_OptionalNested_Id] IS NULL OR [r].[RequiredRelated_OptionalNested_Int] IS NULL OR [r].[RequiredRelated_OptionalNested_Ints] IS NULL OR [r].[RequiredRelated_OptionalNested_Name] IS NULL OR [r].[RequiredRelated_OptionalNested_String] IS NULL ORDER BY [r].[Id], [o].[RelatedTypeRootEntityId], [o].[Id], [s].[RootEntityId], [s].[Id], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[Id0], [r2].[RelatedTypeRootEntityId] """); } @@ -164,13 +164,13 @@ public override async Task Two_nested_collections() AssertSql( """ -SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [o].[RelatedTypeRootEntityId], [o].[Id], [o].[Int], [o].[Name], [o].[String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[Id0], [s].[Int0], [s].[Name0], [s].[String0], [s].[OptionalNested_Id], [s].[OptionalNested_Int], [s].[OptionalNested_Name], [s].[OptionalNested_String], [s].[RequiredNested_Id], [s].[RequiredNested_Int], [s].[RequiredNested_Name], [s].[RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r2].[RelatedTypeRootEntityId], [r2].[Id], [r2].[Int], [r2].[Name], [r2].[String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] +SELECT [r].[Id], [r].[Name], [r].[OptionalRelated_Id], [r].[OptionalRelated_Int], [r].[OptionalRelated_Ints], [r].[OptionalRelated_Name], [r].[OptionalRelated_String], [o].[RelatedTypeRootEntityId], [o].[Id], [o].[Int], [o].[Ints], [o].[Name], [o].[String], [r].[OptionalRelated_OptionalNested_Id], [r].[OptionalRelated_OptionalNested_Int], [r].[OptionalRelated_OptionalNested_Ints], [r].[OptionalRelated_OptionalNested_Name], [r].[OptionalRelated_OptionalNested_String], [r].[OptionalRelated_RequiredNested_Id], [r].[OptionalRelated_RequiredNested_Int], [r].[OptionalRelated_RequiredNested_Ints], [r].[OptionalRelated_RequiredNested_Name], [r].[OptionalRelated_RequiredNested_String], [s].[RootEntityId], [s].[Id], [s].[Int], [s].[Ints], [s].[Name], [s].[String], [s].[RelatedTypeRootEntityId], [s].[RelatedTypeId], [s].[Id0], [s].[Int0], [s].[Ints0], [s].[Name0], [s].[String0], [s].[OptionalNested_Id], [s].[OptionalNested_Int], [s].[OptionalNested_Ints], [s].[OptionalNested_Name], [s].[OptionalNested_String], [s].[RequiredNested_Id], [s].[RequiredNested_Int], [s].[RequiredNested_Ints], [s].[RequiredNested_Name], [s].[RequiredNested_String], [r].[RequiredRelated_Id], [r].[RequiredRelated_Int], [r].[RequiredRelated_Ints], [r].[RequiredRelated_Name], [r].[RequiredRelated_String], [r2].[RelatedTypeRootEntityId], [r2].[Id], [r2].[Int], [r2].[Ints], [r2].[Name], [r2].[String], [r].[RequiredRelated_OptionalNested_Id], [r].[RequiredRelated_OptionalNested_Int], [r].[RequiredRelated_OptionalNested_Ints], [r].[RequiredRelated_OptionalNested_Name], [r].[RequiredRelated_OptionalNested_String], [r].[RequiredRelated_RequiredNested_Id], [r].[RequiredRelated_RequiredNested_Int], [r].[RequiredRelated_RequiredNested_Ints], [r].[RequiredRelated_RequiredNested_Name], [r].[RequiredRelated_RequiredNested_String] FROM [RootEntity] AS [r] LEFT JOIN [OptionalRelated_NestedCollection] AS [o] ON CASE - WHEN [r].[OptionalRelated_Id] IS NOT NULL AND [r].[OptionalRelated_Int] IS NOT NULL AND [r].[OptionalRelated_Name] IS NOT NULL AND [r].[OptionalRelated_String] IS NOT NULL THEN [r].[Id] + WHEN [r].[OptionalRelated_Id] IS NOT NULL AND [r].[OptionalRelated_Int] IS NOT NULL AND [r].[OptionalRelated_Ints] IS NOT NULL AND [r].[OptionalRelated_Name] IS NOT NULL AND [r].[OptionalRelated_String] IS NOT NULL THEN [r].[Id] END = [o].[RelatedTypeRootEntityId] LEFT JOIN ( - SELECT [r0].[RootEntityId], [r0].[Id], [r0].[Int], [r0].[Name], [r0].[String], [r1].[RelatedTypeRootEntityId], [r1].[RelatedTypeId], [r1].[Id] AS [Id0], [r1].[Int] AS [Int0], [r1].[Name] AS [Name0], [r1].[String] AS [String0], [r0].[OptionalNested_Id], [r0].[OptionalNested_Int], [r0].[OptionalNested_Name], [r0].[OptionalNested_String], [r0].[RequiredNested_Id], [r0].[RequiredNested_Int], [r0].[RequiredNested_Name], [r0].[RequiredNested_String] + SELECT [r0].[RootEntityId], [r0].[Id], [r0].[Int], [r0].[Ints], [r0].[Name], [r0].[String], [r1].[RelatedTypeRootEntityId], [r1].[RelatedTypeId], [r1].[Id] AS [Id0], [r1].[Int] AS [Int0], [r1].[Ints] AS [Ints0], [r1].[Name] AS [Name0], [r1].[String] AS [String0], [r0].[OptionalNested_Id], [r0].[OptionalNested_Int], [r0].[OptionalNested_Ints], [r0].[OptionalNested_Name], [r0].[OptionalNested_String], [r0].[RequiredNested_Id], [r0].[RequiredNested_Int], [r0].[RequiredNested_Ints], [r0].[RequiredNested_Name], [r0].[RequiredNested_String] FROM [RelatedCollection] AS [r0] LEFT JOIN [RelatedCollection_NestedCollection] AS [r1] ON [r0].[RootEntityId] = [r1].[RelatedTypeRootEntityId] AND [r0].[Id] = [r1].[RelatedTypeId] ) AS [s] ON [r].[Id] = [s].[RootEntityId] diff --git a/test/EFCore.Sqlite.FunctionalTests/Query/Associations/ComplexJson/ComplexJsonPrimitiveCollectionSqliteTest.cs b/test/EFCore.Sqlite.FunctionalTests/Query/Associations/ComplexJson/ComplexJsonPrimitiveCollectionSqliteTest.cs new file mode 100644 index 00000000000..7b2bc1d96c0 --- /dev/null +++ b/test/EFCore.Sqlite.FunctionalTests/Query/Associations/ComplexJson/ComplexJsonPrimitiveCollectionSqliteTest.cs @@ -0,0 +1,7 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace Microsoft.EntityFrameworkCore.Query.Associations.ComplexJson; + +public class ComplexJsonPrimitiveCollectionSqliteTest(ComplexJsonSqliteFixture fixture, ITestOutputHelper testOutputHelper) + : ComplexJsonPrimitiveCollectionRelationalTestBase(fixture, testOutputHelper); diff --git a/test/EFCore.Sqlite.FunctionalTests/Query/Associations/ComplexTableSplitting/ComplexTableSplittingPrimitiveCollectionSqliteTest.cs b/test/EFCore.Sqlite.FunctionalTests/Query/Associations/ComplexTableSplitting/ComplexTableSplittingPrimitiveCollectionSqliteTest.cs new file mode 100644 index 00000000000..e613ad6953e --- /dev/null +++ b/test/EFCore.Sqlite.FunctionalTests/Query/Associations/ComplexTableSplitting/ComplexTableSplittingPrimitiveCollectionSqliteTest.cs @@ -0,0 +1,9 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace Microsoft.EntityFrameworkCore.Query.Associations.ComplexTableSplitting; + +public class ComplexTableSplittingPrimitiveCollectionSqliteTest( + ComplexTableSplittingSqliteFixture fixture, + ITestOutputHelper testOutputHelper) + : ComplexTableSplittingPrimitiveCollectionRelationalTestBase(fixture, testOutputHelper); diff --git a/test/EFCore.Sqlite.FunctionalTests/Query/Associations/Navigations/NavigationsPrimitiveCollectionSqliteTest.cs b/test/EFCore.Sqlite.FunctionalTests/Query/Associations/Navigations/NavigationsPrimitiveCollectionSqliteTest.cs new file mode 100644 index 00000000000..dd94bd57b69 --- /dev/null +++ b/test/EFCore.Sqlite.FunctionalTests/Query/Associations/Navigations/NavigationsPrimitiveCollectionSqliteTest.cs @@ -0,0 +1,7 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace Microsoft.EntityFrameworkCore.Query.Associations.Navigations; + +public class NavigationsPrimitiveCollectionSqliteTest(NavigationsSqliteFixture fixture, ITestOutputHelper testOutputHelper) + : NavigationsPrimitiveCollectionRelationalTestBase(fixture, testOutputHelper); diff --git a/test/EFCore.Sqlite.FunctionalTests/Query/Associations/OwnedJson/OwnedJsonPrimitiveCollectionSqliteTest.cs b/test/EFCore.Sqlite.FunctionalTests/Query/Associations/OwnedJson/OwnedJsonPrimitiveCollectionSqliteTest.cs new file mode 100644 index 00000000000..fe858bdf374 --- /dev/null +++ b/test/EFCore.Sqlite.FunctionalTests/Query/Associations/OwnedJson/OwnedJsonPrimitiveCollectionSqliteTest.cs @@ -0,0 +1,7 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace Microsoft.EntityFrameworkCore.Query.Associations.OwnedJson; + +public class OwnedJsonPrimitiveCollectionSqliteTest(OwnedJsonSqliteFixture fixture, ITestOutputHelper testOutputHelper) + : OwnedJsonPrimitiveCollectionRelationalTestBase(fixture, testOutputHelper); diff --git a/test/EFCore.Sqlite.FunctionalTests/Query/Associations/OwnedNavigations/OwnedNavigationsPrimitiveCollectionSqliteTest.cs b/test/EFCore.Sqlite.FunctionalTests/Query/Associations/OwnedNavigations/OwnedNavigationsPrimitiveCollectionSqliteTest.cs new file mode 100644 index 00000000000..afb8b6370e7 --- /dev/null +++ b/test/EFCore.Sqlite.FunctionalTests/Query/Associations/OwnedNavigations/OwnedNavigationsPrimitiveCollectionSqliteTest.cs @@ -0,0 +1,7 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace Microsoft.EntityFrameworkCore.Query.Associations.OwnedNavigations; + +public class OwnedNavigationsPrimitiveCollectionSqliteTest(OwnedNavigationsSqliteFixture fixture, ITestOutputHelper testOutputHelper) + : OwnedNavigationsPrimitiveCollectionRelationalTestBase(fixture, testOutputHelper); diff --git a/test/EFCore.Sqlite.FunctionalTests/Query/Associations/OwnedNavigations/OwnedNavigationsStructuralEqualitySqliteTest.cs b/test/EFCore.Sqlite.FunctionalTests/Query/Associations/OwnedNavigations/OwnedNavigationsStructuralEqualitySqliteTest.cs index 7b9457a2dbc..255d63567fe 100644 --- a/test/EFCore.Sqlite.FunctionalTests/Query/Associations/OwnedNavigations/OwnedNavigationsStructuralEqualitySqliteTest.cs +++ b/test/EFCore.Sqlite.FunctionalTests/Query/Associations/OwnedNavigations/OwnedNavigationsStructuralEqualitySqliteTest.cs @@ -14,7 +14,7 @@ public override async Task Two_related() AssertSql( """ -SELECT "r"."Id", "r"."Name", "o"."RootEntityId", "o"."Id", "o"."Int", "o"."Name", "o"."String", "r0"."RootEntityId", "o0"."RelatedTypeRootEntityId", "o1"."RelatedTypeRootEntityId", "r1"."RelatedTypeRootEntityId", "r2"."RelatedTypeRootEntityId", "o2"."RelatedTypeRootEntityId", "o2"."Id", "o2"."Int", "o2"."Name", "o2"."String", "o0"."Id", "o0"."Int", "o0"."Name", "o0"."String", "o1"."Id", "o1"."Int", "o1"."Name", "o1"."String", "s"."RootEntityId", "s"."Id", "s"."Int", "s"."Name", "s"."String", "s"."RelatedTypeRootEntityId", "s"."RelatedTypeId", "s"."RelatedTypeRootEntityId0", "s"."RelatedTypeId0", "s"."RelatedTypeRootEntityId1", "s"."RelatedTypeId1", "s"."Id0", "s"."Int0", "s"."Name0", "s"."String0", "s"."Id1", "s"."Int1", "s"."Name1", "s"."String1", "s"."Id2", "s"."Int2", "s"."Name2", "s"."String2", "r0"."Id", "r0"."Int", "r0"."Name", "r0"."String", "r7"."RelatedTypeRootEntityId", "r7"."Id", "r7"."Int", "r7"."Name", "r7"."String", "r1"."Id", "r1"."Int", "r1"."Name", "r1"."String", "r2"."Id", "r2"."Int", "r2"."Name", "r2"."String" +SELECT "r"."Id", "r"."Name", "o"."RootEntityId", "o"."Id", "o"."Int", "o"."Ints", "o"."Name", "o"."String", "r0"."RootEntityId", "o0"."RelatedTypeRootEntityId", "o1"."RelatedTypeRootEntityId", "r1"."RelatedTypeRootEntityId", "r2"."RelatedTypeRootEntityId", "o2"."RelatedTypeRootEntityId", "o2"."Id", "o2"."Int", "o2"."Ints", "o2"."Name", "o2"."String", "o0"."Id", "o0"."Int", "o0"."Ints", "o0"."Name", "o0"."String", "o1"."Id", "o1"."Int", "o1"."Ints", "o1"."Name", "o1"."String", "s"."RootEntityId", "s"."Id", "s"."Int", "s"."Ints", "s"."Name", "s"."String", "s"."RelatedTypeRootEntityId", "s"."RelatedTypeId", "s"."RelatedTypeRootEntityId0", "s"."RelatedTypeId0", "s"."RelatedTypeRootEntityId1", "s"."RelatedTypeId1", "s"."Id0", "s"."Int0", "s"."Ints0", "s"."Name0", "s"."String0", "s"."Id1", "s"."Int1", "s"."Ints1", "s"."Name1", "s"."String1", "s"."Id2", "s"."Int2", "s"."Ints2", "s"."Name2", "s"."String2", "r0"."Id", "r0"."Int", "r0"."Ints", "r0"."Name", "r0"."String", "r7"."RelatedTypeRootEntityId", "r7"."Id", "r7"."Int", "r7"."Ints", "r7"."Name", "r7"."String", "r1"."Id", "r1"."Int", "r1"."Ints", "r1"."Name", "r1"."String", "r2"."Id", "r2"."Int", "r2"."Ints", "r2"."Name", "r2"."String" FROM "RootEntity" AS "r" LEFT JOIN "RequiredRelated" AS "r0" ON "r"."Id" = "r0"."RootEntityId" LEFT JOIN "OptionalRelated" AS "o" ON "r"."Id" = "o"."RootEntityId" @@ -24,7 +24,7 @@ public override async Task Two_related() LEFT JOIN "RequiredRelated_RequiredNested" AS "r2" ON "r0"."RootEntityId" = "r2"."RelatedTypeRootEntityId" LEFT JOIN "OptionalRelated_NestedCollection" AS "o2" ON "o"."RootEntityId" = "o2"."RelatedTypeRootEntityId" LEFT JOIN ( - SELECT "r3"."RootEntityId", "r3"."Id", "r3"."Int", "r3"."Name", "r3"."String", "r4"."RelatedTypeRootEntityId", "r4"."RelatedTypeId", "r5"."RelatedTypeRootEntityId" AS "RelatedTypeRootEntityId0", "r5"."RelatedTypeId" AS "RelatedTypeId0", "r6"."RelatedTypeRootEntityId" AS "RelatedTypeRootEntityId1", "r6"."RelatedTypeId" AS "RelatedTypeId1", "r6"."Id" AS "Id0", "r6"."Int" AS "Int0", "r6"."Name" AS "Name0", "r6"."String" AS "String0", "r4"."Id" AS "Id1", "r4"."Int" AS "Int1", "r4"."Name" AS "Name1", "r4"."String" AS "String1", "r5"."Id" AS "Id2", "r5"."Int" AS "Int2", "r5"."Name" AS "Name2", "r5"."String" AS "String2" + SELECT "r3"."RootEntityId", "r3"."Id", "r3"."Int", "r3"."Ints", "r3"."Name", "r3"."String", "r4"."RelatedTypeRootEntityId", "r4"."RelatedTypeId", "r5"."RelatedTypeRootEntityId" AS "RelatedTypeRootEntityId0", "r5"."RelatedTypeId" AS "RelatedTypeId0", "r6"."RelatedTypeRootEntityId" AS "RelatedTypeRootEntityId1", "r6"."RelatedTypeId" AS "RelatedTypeId1", "r6"."Id" AS "Id0", "r6"."Int" AS "Int0", "r6"."Ints" AS "Ints0", "r6"."Name" AS "Name0", "r6"."String" AS "String0", "r4"."Id" AS "Id1", "r4"."Int" AS "Int1", "r4"."Ints" AS "Ints1", "r4"."Name" AS "Name1", "r4"."String" AS "String1", "r5"."Id" AS "Id2", "r5"."Int" AS "Int2", "r5"."Ints" AS "Ints2", "r5"."Name" AS "Name2", "r5"."String" AS "String2" FROM "RelatedCollection" AS "r3" LEFT JOIN "RelatedCollection_OptionalNested" AS "r4" ON "r3"."RootEntityId" = "r4"."RelatedTypeRootEntityId" AND "r3"."Id" = "r4"."RelatedTypeId" LEFT JOIN "RelatedCollection_RequiredNested" AS "r5" ON "r3"."RootEntityId" = "r5"."RelatedTypeRootEntityId" AND "r3"."Id" = "r5"."RelatedTypeId" @@ -42,7 +42,7 @@ public override async Task Two_nested() AssertSql( """ -SELECT "r"."Id", "r"."Name", "o"."RootEntityId", "o"."Id", "o"."Int", "o"."Name", "o"."String", "r0"."RootEntityId", "r1"."RelatedTypeRootEntityId", "o0"."RelatedTypeRootEntityId", "o1"."RelatedTypeRootEntityId", "r2"."RelatedTypeRootEntityId", "o2"."RelatedTypeRootEntityId", "o2"."Id", "o2"."Int", "o2"."Name", "o2"."String", "o1"."Id", "o1"."Int", "o1"."Name", "o1"."String", "o0"."Id", "o0"."Int", "o0"."Name", "o0"."String", "s"."RootEntityId", "s"."Id", "s"."Int", "s"."Name", "s"."String", "s"."RelatedTypeRootEntityId", "s"."RelatedTypeId", "s"."RelatedTypeRootEntityId0", "s"."RelatedTypeId0", "s"."RelatedTypeRootEntityId1", "s"."RelatedTypeId1", "s"."Id0", "s"."Int0", "s"."Name0", "s"."String0", "s"."Id1", "s"."Int1", "s"."Name1", "s"."String1", "s"."Id2", "s"."Int2", "s"."Name2", "s"."String2", "r0"."Id", "r0"."Int", "r0"."Name", "r0"."String", "r7"."RelatedTypeRootEntityId", "r7"."Id", "r7"."Int", "r7"."Name", "r7"."String", "r2"."Id", "r2"."Int", "r2"."Name", "r2"."String", "r1"."Id", "r1"."Int", "r1"."Name", "r1"."String" +SELECT "r"."Id", "r"."Name", "o"."RootEntityId", "o"."Id", "o"."Int", "o"."Ints", "o"."Name", "o"."String", "r0"."RootEntityId", "r1"."RelatedTypeRootEntityId", "o0"."RelatedTypeRootEntityId", "o1"."RelatedTypeRootEntityId", "r2"."RelatedTypeRootEntityId", "o2"."RelatedTypeRootEntityId", "o2"."Id", "o2"."Int", "o2"."Ints", "o2"."Name", "o2"."String", "o1"."Id", "o1"."Int", "o1"."Ints", "o1"."Name", "o1"."String", "o0"."Id", "o0"."Int", "o0"."Ints", "o0"."Name", "o0"."String", "s"."RootEntityId", "s"."Id", "s"."Int", "s"."Ints", "s"."Name", "s"."String", "s"."RelatedTypeRootEntityId", "s"."RelatedTypeId", "s"."RelatedTypeRootEntityId0", "s"."RelatedTypeId0", "s"."RelatedTypeRootEntityId1", "s"."RelatedTypeId1", "s"."Id0", "s"."Int0", "s"."Ints0", "s"."Name0", "s"."String0", "s"."Id1", "s"."Int1", "s"."Ints1", "s"."Name1", "s"."String1", "s"."Id2", "s"."Int2", "s"."Ints2", "s"."Name2", "s"."String2", "r0"."Id", "r0"."Int", "r0"."Ints", "r0"."Name", "r0"."String", "r7"."RelatedTypeRootEntityId", "r7"."Id", "r7"."Int", "r7"."Ints", "r7"."Name", "r7"."String", "r2"."Id", "r2"."Int", "r2"."Ints", "r2"."Name", "r2"."String", "r1"."Id", "r1"."Int", "r1"."Ints", "r1"."Name", "r1"."String" FROM "RootEntity" AS "r" LEFT JOIN "RequiredRelated" AS "r0" ON "r"."Id" = "r0"."RootEntityId" LEFT JOIN "RequiredRelated_RequiredNested" AS "r1" ON "r0"."RootEntityId" = "r1"."RelatedTypeRootEntityId" @@ -52,7 +52,7 @@ public override async Task Two_nested() LEFT JOIN "RequiredRelated_OptionalNested" AS "r2" ON "r0"."RootEntityId" = "r2"."RelatedTypeRootEntityId" LEFT JOIN "OptionalRelated_NestedCollection" AS "o2" ON "o"."RootEntityId" = "o2"."RelatedTypeRootEntityId" LEFT JOIN ( - SELECT "r3"."RootEntityId", "r3"."Id", "r3"."Int", "r3"."Name", "r3"."String", "r4"."RelatedTypeRootEntityId", "r4"."RelatedTypeId", "r5"."RelatedTypeRootEntityId" AS "RelatedTypeRootEntityId0", "r5"."RelatedTypeId" AS "RelatedTypeId0", "r6"."RelatedTypeRootEntityId" AS "RelatedTypeRootEntityId1", "r6"."RelatedTypeId" AS "RelatedTypeId1", "r6"."Id" AS "Id0", "r6"."Int" AS "Int0", "r6"."Name" AS "Name0", "r6"."String" AS "String0", "r4"."Id" AS "Id1", "r4"."Int" AS "Int1", "r4"."Name" AS "Name1", "r4"."String" AS "String1", "r5"."Id" AS "Id2", "r5"."Int" AS "Int2", "r5"."Name" AS "Name2", "r5"."String" AS "String2" + SELECT "r3"."RootEntityId", "r3"."Id", "r3"."Int", "r3"."Ints", "r3"."Name", "r3"."String", "r4"."RelatedTypeRootEntityId", "r4"."RelatedTypeId", "r5"."RelatedTypeRootEntityId" AS "RelatedTypeRootEntityId0", "r5"."RelatedTypeId" AS "RelatedTypeId0", "r6"."RelatedTypeRootEntityId" AS "RelatedTypeRootEntityId1", "r6"."RelatedTypeId" AS "RelatedTypeId1", "r6"."Id" AS "Id0", "r6"."Int" AS "Int0", "r6"."Ints" AS "Ints0", "r6"."Name" AS "Name0", "r6"."String" AS "String0", "r4"."Id" AS "Id1", "r4"."Int" AS "Int1", "r4"."Ints" AS "Ints1", "r4"."Name" AS "Name1", "r4"."String" AS "String1", "r5"."Id" AS "Id2", "r5"."Int" AS "Int2", "r5"."Ints" AS "Ints2", "r5"."Name" AS "Name2", "r5"."String" AS "String2" FROM "RelatedCollection" AS "r3" LEFT JOIN "RelatedCollection_OptionalNested" AS "r4" ON "r3"."RootEntityId" = "r4"."RelatedTypeRootEntityId" AND "r3"."Id" = "r4"."RelatedTypeId" LEFT JOIN "RelatedCollection_RequiredNested" AS "r5" ON "r3"."RootEntityId" = "r5"."RelatedTypeRootEntityId" AND "r3"."Id" = "r5"."RelatedTypeId" @@ -70,7 +70,7 @@ public override async Task Not_equals() AssertSql( """ -SELECT "r"."Id", "r"."Name", "o"."RootEntityId", "o"."Id", "o"."Int", "o"."Name", "o"."String", "r0"."RootEntityId", "o0"."RelatedTypeRootEntityId", "o1"."RelatedTypeRootEntityId", "r1"."RelatedTypeRootEntityId", "r2"."RelatedTypeRootEntityId", "o2"."RelatedTypeRootEntityId", "o2"."Id", "o2"."Int", "o2"."Name", "o2"."String", "o0"."Id", "o0"."Int", "o0"."Name", "o0"."String", "o1"."Id", "o1"."Int", "o1"."Name", "o1"."String", "s"."RootEntityId", "s"."Id", "s"."Int", "s"."Name", "s"."String", "s"."RelatedTypeRootEntityId", "s"."RelatedTypeId", "s"."RelatedTypeRootEntityId0", "s"."RelatedTypeId0", "s"."RelatedTypeRootEntityId1", "s"."RelatedTypeId1", "s"."Id0", "s"."Int0", "s"."Name0", "s"."String0", "s"."Id1", "s"."Int1", "s"."Name1", "s"."String1", "s"."Id2", "s"."Int2", "s"."Name2", "s"."String2", "r0"."Id", "r0"."Int", "r0"."Name", "r0"."String", "r7"."RelatedTypeRootEntityId", "r7"."Id", "r7"."Int", "r7"."Name", "r7"."String", "r1"."Id", "r1"."Int", "r1"."Name", "r1"."String", "r2"."Id", "r2"."Int", "r2"."Name", "r2"."String" +SELECT "r"."Id", "r"."Name", "o"."RootEntityId", "o"."Id", "o"."Int", "o"."Ints", "o"."Name", "o"."String", "r0"."RootEntityId", "o0"."RelatedTypeRootEntityId", "o1"."RelatedTypeRootEntityId", "r1"."RelatedTypeRootEntityId", "r2"."RelatedTypeRootEntityId", "o2"."RelatedTypeRootEntityId", "o2"."Id", "o2"."Int", "o2"."Ints", "o2"."Name", "o2"."String", "o0"."Id", "o0"."Int", "o0"."Ints", "o0"."Name", "o0"."String", "o1"."Id", "o1"."Int", "o1"."Ints", "o1"."Name", "o1"."String", "s"."RootEntityId", "s"."Id", "s"."Int", "s"."Ints", "s"."Name", "s"."String", "s"."RelatedTypeRootEntityId", "s"."RelatedTypeId", "s"."RelatedTypeRootEntityId0", "s"."RelatedTypeId0", "s"."RelatedTypeRootEntityId1", "s"."RelatedTypeId1", "s"."Id0", "s"."Int0", "s"."Ints0", "s"."Name0", "s"."String0", "s"."Id1", "s"."Int1", "s"."Ints1", "s"."Name1", "s"."String1", "s"."Id2", "s"."Int2", "s"."Ints2", "s"."Name2", "s"."String2", "r0"."Id", "r0"."Int", "r0"."Ints", "r0"."Name", "r0"."String", "r7"."RelatedTypeRootEntityId", "r7"."Id", "r7"."Int", "r7"."Ints", "r7"."Name", "r7"."String", "r1"."Id", "r1"."Int", "r1"."Ints", "r1"."Name", "r1"."String", "r2"."Id", "r2"."Int", "r2"."Ints", "r2"."Name", "r2"."String" FROM "RootEntity" AS "r" LEFT JOIN "RequiredRelated" AS "r0" ON "r"."Id" = "r0"."RootEntityId" LEFT JOIN "OptionalRelated" AS "o" ON "r"."Id" = "o"."RootEntityId" @@ -80,7 +80,7 @@ public override async Task Not_equals() LEFT JOIN "RequiredRelated_RequiredNested" AS "r2" ON "r0"."RootEntityId" = "r2"."RelatedTypeRootEntityId" LEFT JOIN "OptionalRelated_NestedCollection" AS "o2" ON "o"."RootEntityId" = "o2"."RelatedTypeRootEntityId" LEFT JOIN ( - SELECT "r3"."RootEntityId", "r3"."Id", "r3"."Int", "r3"."Name", "r3"."String", "r4"."RelatedTypeRootEntityId", "r4"."RelatedTypeId", "r5"."RelatedTypeRootEntityId" AS "RelatedTypeRootEntityId0", "r5"."RelatedTypeId" AS "RelatedTypeId0", "r6"."RelatedTypeRootEntityId" AS "RelatedTypeRootEntityId1", "r6"."RelatedTypeId" AS "RelatedTypeId1", "r6"."Id" AS "Id0", "r6"."Int" AS "Int0", "r6"."Name" AS "Name0", "r6"."String" AS "String0", "r4"."Id" AS "Id1", "r4"."Int" AS "Int1", "r4"."Name" AS "Name1", "r4"."String" AS "String1", "r5"."Id" AS "Id2", "r5"."Int" AS "Int2", "r5"."Name" AS "Name2", "r5"."String" AS "String2" + SELECT "r3"."RootEntityId", "r3"."Id", "r3"."Int", "r3"."Ints", "r3"."Name", "r3"."String", "r4"."RelatedTypeRootEntityId", "r4"."RelatedTypeId", "r5"."RelatedTypeRootEntityId" AS "RelatedTypeRootEntityId0", "r5"."RelatedTypeId" AS "RelatedTypeId0", "r6"."RelatedTypeRootEntityId" AS "RelatedTypeRootEntityId1", "r6"."RelatedTypeId" AS "RelatedTypeId1", "r6"."Id" AS "Id0", "r6"."Int" AS "Int0", "r6"."Ints" AS "Ints0", "r6"."Name" AS "Name0", "r6"."String" AS "String0", "r4"."Id" AS "Id1", "r4"."Int" AS "Int1", "r4"."Ints" AS "Ints1", "r4"."Name" AS "Name1", "r4"."String" AS "String1", "r5"."Id" AS "Id2", "r5"."Int" AS "Int2", "r5"."Ints" AS "Ints2", "r5"."Name" AS "Name2", "r5"."String" AS "String2" FROM "RelatedCollection" AS "r3" LEFT JOIN "RelatedCollection_OptionalNested" AS "r4" ON "r3"."RootEntityId" = "r4"."RelatedTypeRootEntityId" AND "r3"."Id" = "r4"."RelatedTypeId" LEFT JOIN "RelatedCollection_RequiredNested" AS "r5" ON "r3"."RootEntityId" = "r5"."RelatedTypeRootEntityId" AND "r3"."Id" = "r5"."RelatedTypeId" @@ -98,7 +98,7 @@ public override async Task Related_with_inline_null() AssertSql( """ -SELECT "r"."Id", "r"."Name", "o"."RootEntityId", "o"."Id", "o"."Int", "o"."Name", "o"."String", "o0"."RelatedTypeRootEntityId", "o1"."RelatedTypeRootEntityId", "r0"."RootEntityId", "r1"."RelatedTypeRootEntityId", "r2"."RelatedTypeRootEntityId", "o2"."RelatedTypeRootEntityId", "o2"."Id", "o2"."Int", "o2"."Name", "o2"."String", "o0"."Id", "o0"."Int", "o0"."Name", "o0"."String", "o1"."Id", "o1"."Int", "o1"."Name", "o1"."String", "s"."RootEntityId", "s"."Id", "s"."Int", "s"."Name", "s"."String", "s"."RelatedTypeRootEntityId", "s"."RelatedTypeId", "s"."RelatedTypeRootEntityId0", "s"."RelatedTypeId0", "s"."RelatedTypeRootEntityId1", "s"."RelatedTypeId1", "s"."Id0", "s"."Int0", "s"."Name0", "s"."String0", "s"."Id1", "s"."Int1", "s"."Name1", "s"."String1", "s"."Id2", "s"."Int2", "s"."Name2", "s"."String2", "r0"."Id", "r0"."Int", "r0"."Name", "r0"."String", "r7"."RelatedTypeRootEntityId", "r7"."Id", "r7"."Int", "r7"."Name", "r7"."String", "r1"."Id", "r1"."Int", "r1"."Name", "r1"."String", "r2"."Id", "r2"."Int", "r2"."Name", "r2"."String" +SELECT "r"."Id", "r"."Name", "o"."RootEntityId", "o"."Id", "o"."Int", "o"."Ints", "o"."Name", "o"."String", "o0"."RelatedTypeRootEntityId", "o1"."RelatedTypeRootEntityId", "r0"."RootEntityId", "r1"."RelatedTypeRootEntityId", "r2"."RelatedTypeRootEntityId", "o2"."RelatedTypeRootEntityId", "o2"."Id", "o2"."Int", "o2"."Ints", "o2"."Name", "o2"."String", "o0"."Id", "o0"."Int", "o0"."Ints", "o0"."Name", "o0"."String", "o1"."Id", "o1"."Int", "o1"."Ints", "o1"."Name", "o1"."String", "s"."RootEntityId", "s"."Id", "s"."Int", "s"."Ints", "s"."Name", "s"."String", "s"."RelatedTypeRootEntityId", "s"."RelatedTypeId", "s"."RelatedTypeRootEntityId0", "s"."RelatedTypeId0", "s"."RelatedTypeRootEntityId1", "s"."RelatedTypeId1", "s"."Id0", "s"."Int0", "s"."Ints0", "s"."Name0", "s"."String0", "s"."Id1", "s"."Int1", "s"."Ints1", "s"."Name1", "s"."String1", "s"."Id2", "s"."Int2", "s"."Ints2", "s"."Name2", "s"."String2", "r0"."Id", "r0"."Int", "r0"."Ints", "r0"."Name", "r0"."String", "r7"."RelatedTypeRootEntityId", "r7"."Id", "r7"."Int", "r7"."Ints", "r7"."Name", "r7"."String", "r1"."Id", "r1"."Int", "r1"."Ints", "r1"."Name", "r1"."String", "r2"."Id", "r2"."Int", "r2"."Ints", "r2"."Name", "r2"."String" FROM "RootEntity" AS "r" LEFT JOIN "OptionalRelated" AS "o" ON "r"."Id" = "o"."RootEntityId" LEFT JOIN "OptionalRelated_OptionalNested" AS "o0" ON "o"."RootEntityId" = "o0"."RelatedTypeRootEntityId" @@ -108,7 +108,7 @@ public override async Task Related_with_inline_null() LEFT JOIN "RequiredRelated_RequiredNested" AS "r2" ON "r0"."RootEntityId" = "r2"."RelatedTypeRootEntityId" LEFT JOIN "OptionalRelated_NestedCollection" AS "o2" ON "o"."RootEntityId" = "o2"."RelatedTypeRootEntityId" LEFT JOIN ( - SELECT "r3"."RootEntityId", "r3"."Id", "r3"."Int", "r3"."Name", "r3"."String", "r4"."RelatedTypeRootEntityId", "r4"."RelatedTypeId", "r5"."RelatedTypeRootEntityId" AS "RelatedTypeRootEntityId0", "r5"."RelatedTypeId" AS "RelatedTypeId0", "r6"."RelatedTypeRootEntityId" AS "RelatedTypeRootEntityId1", "r6"."RelatedTypeId" AS "RelatedTypeId1", "r6"."Id" AS "Id0", "r6"."Int" AS "Int0", "r6"."Name" AS "Name0", "r6"."String" AS "String0", "r4"."Id" AS "Id1", "r4"."Int" AS "Int1", "r4"."Name" AS "Name1", "r4"."String" AS "String1", "r5"."Id" AS "Id2", "r5"."Int" AS "Int2", "r5"."Name" AS "Name2", "r5"."String" AS "String2" + SELECT "r3"."RootEntityId", "r3"."Id", "r3"."Int", "r3"."Ints", "r3"."Name", "r3"."String", "r4"."RelatedTypeRootEntityId", "r4"."RelatedTypeId", "r5"."RelatedTypeRootEntityId" AS "RelatedTypeRootEntityId0", "r5"."RelatedTypeId" AS "RelatedTypeId0", "r6"."RelatedTypeRootEntityId" AS "RelatedTypeRootEntityId1", "r6"."RelatedTypeId" AS "RelatedTypeId1", "r6"."Id" AS "Id0", "r6"."Int" AS "Int0", "r6"."Ints" AS "Ints0", "r6"."Name" AS "Name0", "r6"."String" AS "String0", "r4"."Id" AS "Id1", "r4"."Int" AS "Int1", "r4"."Ints" AS "Ints1", "r4"."Name" AS "Name1", "r4"."String" AS "String1", "r5"."Id" AS "Id2", "r5"."Int" AS "Int2", "r5"."Ints" AS "Ints2", "r5"."Name" AS "Name2", "r5"."String" AS "String2" FROM "RelatedCollection" AS "r3" LEFT JOIN "RelatedCollection_OptionalNested" AS "r4" ON "r3"."RootEntityId" = "r4"."RelatedTypeRootEntityId" AND "r3"."Id" = "r4"."RelatedTypeId" LEFT JOIN "RelatedCollection_RequiredNested" AS "r5" ON "r3"."RootEntityId" = "r5"."RelatedTypeRootEntityId" AND "r3"."Id" = "r5"."RelatedTypeId" @@ -126,7 +126,7 @@ public override async Task Related_with_parameter_null() AssertSql( """ -SELECT "r"."Id", "r"."Name", "o"."RootEntityId", "o"."Id", "o"."Int", "o"."Name", "o"."String", "o0"."RelatedTypeRootEntityId", "o1"."RelatedTypeRootEntityId", "r0"."RootEntityId", "r1"."RelatedTypeRootEntityId", "r2"."RelatedTypeRootEntityId", "o2"."RelatedTypeRootEntityId", "o2"."Id", "o2"."Int", "o2"."Name", "o2"."String", "o0"."Id", "o0"."Int", "o0"."Name", "o0"."String", "o1"."Id", "o1"."Int", "o1"."Name", "o1"."String", "s"."RootEntityId", "s"."Id", "s"."Int", "s"."Name", "s"."String", "s"."RelatedTypeRootEntityId", "s"."RelatedTypeId", "s"."RelatedTypeRootEntityId0", "s"."RelatedTypeId0", "s"."RelatedTypeRootEntityId1", "s"."RelatedTypeId1", "s"."Id0", "s"."Int0", "s"."Name0", "s"."String0", "s"."Id1", "s"."Int1", "s"."Name1", "s"."String1", "s"."Id2", "s"."Int2", "s"."Name2", "s"."String2", "r0"."Id", "r0"."Int", "r0"."Name", "r0"."String", "r7"."RelatedTypeRootEntityId", "r7"."Id", "r7"."Int", "r7"."Name", "r7"."String", "r1"."Id", "r1"."Int", "r1"."Name", "r1"."String", "r2"."Id", "r2"."Int", "r2"."Name", "r2"."String" +SELECT "r"."Id", "r"."Name", "o"."RootEntityId", "o"."Id", "o"."Int", "o"."Ints", "o"."Name", "o"."String", "o0"."RelatedTypeRootEntityId", "o1"."RelatedTypeRootEntityId", "r0"."RootEntityId", "r1"."RelatedTypeRootEntityId", "r2"."RelatedTypeRootEntityId", "o2"."RelatedTypeRootEntityId", "o2"."Id", "o2"."Int", "o2"."Ints", "o2"."Name", "o2"."String", "o0"."Id", "o0"."Int", "o0"."Ints", "o0"."Name", "o0"."String", "o1"."Id", "o1"."Int", "o1"."Ints", "o1"."Name", "o1"."String", "s"."RootEntityId", "s"."Id", "s"."Int", "s"."Ints", "s"."Name", "s"."String", "s"."RelatedTypeRootEntityId", "s"."RelatedTypeId", "s"."RelatedTypeRootEntityId0", "s"."RelatedTypeId0", "s"."RelatedTypeRootEntityId1", "s"."RelatedTypeId1", "s"."Id0", "s"."Int0", "s"."Ints0", "s"."Name0", "s"."String0", "s"."Id1", "s"."Int1", "s"."Ints1", "s"."Name1", "s"."String1", "s"."Id2", "s"."Int2", "s"."Ints2", "s"."Name2", "s"."String2", "r0"."Id", "r0"."Int", "r0"."Ints", "r0"."Name", "r0"."String", "r7"."RelatedTypeRootEntityId", "r7"."Id", "r7"."Int", "r7"."Ints", "r7"."Name", "r7"."String", "r1"."Id", "r1"."Int", "r1"."Ints", "r1"."Name", "r1"."String", "r2"."Id", "r2"."Int", "r2"."Ints", "r2"."Name", "r2"."String" FROM "RootEntity" AS "r" LEFT JOIN "OptionalRelated" AS "o" ON "r"."Id" = "o"."RootEntityId" LEFT JOIN "OptionalRelated_OptionalNested" AS "o0" ON "o"."RootEntityId" = "o0"."RelatedTypeRootEntityId" @@ -136,7 +136,7 @@ public override async Task Related_with_parameter_null() LEFT JOIN "RequiredRelated_RequiredNested" AS "r2" ON "r0"."RootEntityId" = "r2"."RelatedTypeRootEntityId" LEFT JOIN "OptionalRelated_NestedCollection" AS "o2" ON "o"."RootEntityId" = "o2"."RelatedTypeRootEntityId" LEFT JOIN ( - SELECT "r3"."RootEntityId", "r3"."Id", "r3"."Int", "r3"."Name", "r3"."String", "r4"."RelatedTypeRootEntityId", "r4"."RelatedTypeId", "r5"."RelatedTypeRootEntityId" AS "RelatedTypeRootEntityId0", "r5"."RelatedTypeId" AS "RelatedTypeId0", "r6"."RelatedTypeRootEntityId" AS "RelatedTypeRootEntityId1", "r6"."RelatedTypeId" AS "RelatedTypeId1", "r6"."Id" AS "Id0", "r6"."Int" AS "Int0", "r6"."Name" AS "Name0", "r6"."String" AS "String0", "r4"."Id" AS "Id1", "r4"."Int" AS "Int1", "r4"."Name" AS "Name1", "r4"."String" AS "String1", "r5"."Id" AS "Id2", "r5"."Int" AS "Int2", "r5"."Name" AS "Name2", "r5"."String" AS "String2" + SELECT "r3"."RootEntityId", "r3"."Id", "r3"."Int", "r3"."Ints", "r3"."Name", "r3"."String", "r4"."RelatedTypeRootEntityId", "r4"."RelatedTypeId", "r5"."RelatedTypeRootEntityId" AS "RelatedTypeRootEntityId0", "r5"."RelatedTypeId" AS "RelatedTypeId0", "r6"."RelatedTypeRootEntityId" AS "RelatedTypeRootEntityId1", "r6"."RelatedTypeId" AS "RelatedTypeId1", "r6"."Id" AS "Id0", "r6"."Int" AS "Int0", "r6"."Ints" AS "Ints0", "r6"."Name" AS "Name0", "r6"."String" AS "String0", "r4"."Id" AS "Id1", "r4"."Int" AS "Int1", "r4"."Ints" AS "Ints1", "r4"."Name" AS "Name1", "r4"."String" AS "String1", "r5"."Id" AS "Id2", "r5"."Int" AS "Int2", "r5"."Ints" AS "Ints2", "r5"."Name" AS "Name2", "r5"."String" AS "String2" FROM "RelatedCollection" AS "r3" LEFT JOIN "RelatedCollection_OptionalNested" AS "r4" ON "r3"."RootEntityId" = "r4"."RelatedTypeRootEntityId" AND "r3"."Id" = "r4"."RelatedTypeId" LEFT JOIN "RelatedCollection_RequiredNested" AS "r5" ON "r3"."RootEntityId" = "r5"."RelatedTypeRootEntityId" AND "r3"."Id" = "r5"."RelatedTypeId" @@ -154,7 +154,7 @@ public override async Task Nested_with_inline_null() AssertSql( """ -SELECT "r"."Id", "r"."Name", "o"."RootEntityId", "o"."Id", "o"."Int", "o"."Name", "o"."String", "r0"."RootEntityId", "r1"."RelatedTypeRootEntityId", "o0"."RelatedTypeRootEntityId", "o1"."RelatedTypeRootEntityId", "r2"."RelatedTypeRootEntityId", "o2"."RelatedTypeRootEntityId", "o2"."Id", "o2"."Int", "o2"."Name", "o2"."String", "o0"."Id", "o0"."Int", "o0"."Name", "o0"."String", "o1"."Id", "o1"."Int", "o1"."Name", "o1"."String", "s"."RootEntityId", "s"."Id", "s"."Int", "s"."Name", "s"."String", "s"."RelatedTypeRootEntityId", "s"."RelatedTypeId", "s"."RelatedTypeRootEntityId0", "s"."RelatedTypeId0", "s"."RelatedTypeRootEntityId1", "s"."RelatedTypeId1", "s"."Id0", "s"."Int0", "s"."Name0", "s"."String0", "s"."Id1", "s"."Int1", "s"."Name1", "s"."String1", "s"."Id2", "s"."Int2", "s"."Name2", "s"."String2", "r0"."Id", "r0"."Int", "r0"."Name", "r0"."String", "r7"."RelatedTypeRootEntityId", "r7"."Id", "r7"."Int", "r7"."Name", "r7"."String", "r1"."Id", "r1"."Int", "r1"."Name", "r1"."String", "r2"."Id", "r2"."Int", "r2"."Name", "r2"."String" +SELECT "r"."Id", "r"."Name", "o"."RootEntityId", "o"."Id", "o"."Int", "o"."Ints", "o"."Name", "o"."String", "r0"."RootEntityId", "r1"."RelatedTypeRootEntityId", "o0"."RelatedTypeRootEntityId", "o1"."RelatedTypeRootEntityId", "r2"."RelatedTypeRootEntityId", "o2"."RelatedTypeRootEntityId", "o2"."Id", "o2"."Int", "o2"."Ints", "o2"."Name", "o2"."String", "o0"."Id", "o0"."Int", "o0"."Ints", "o0"."Name", "o0"."String", "o1"."Id", "o1"."Int", "o1"."Ints", "o1"."Name", "o1"."String", "s"."RootEntityId", "s"."Id", "s"."Int", "s"."Ints", "s"."Name", "s"."String", "s"."RelatedTypeRootEntityId", "s"."RelatedTypeId", "s"."RelatedTypeRootEntityId0", "s"."RelatedTypeId0", "s"."RelatedTypeRootEntityId1", "s"."RelatedTypeId1", "s"."Id0", "s"."Int0", "s"."Ints0", "s"."Name0", "s"."String0", "s"."Id1", "s"."Int1", "s"."Ints1", "s"."Name1", "s"."String1", "s"."Id2", "s"."Int2", "s"."Ints2", "s"."Name2", "s"."String2", "r0"."Id", "r0"."Int", "r0"."Ints", "r0"."Name", "r0"."String", "r7"."RelatedTypeRootEntityId", "r7"."Id", "r7"."Int", "r7"."Ints", "r7"."Name", "r7"."String", "r1"."Id", "r1"."Int", "r1"."Ints", "r1"."Name", "r1"."String", "r2"."Id", "r2"."Int", "r2"."Ints", "r2"."Name", "r2"."String" FROM "RootEntity" AS "r" LEFT JOIN "RequiredRelated" AS "r0" ON "r"."Id" = "r0"."RootEntityId" LEFT JOIN "RequiredRelated_OptionalNested" AS "r1" ON "r0"."RootEntityId" = "r1"."RelatedTypeRootEntityId" @@ -164,7 +164,7 @@ public override async Task Nested_with_inline_null() LEFT JOIN "RequiredRelated_RequiredNested" AS "r2" ON "r0"."RootEntityId" = "r2"."RelatedTypeRootEntityId" LEFT JOIN "OptionalRelated_NestedCollection" AS "o2" ON "o"."RootEntityId" = "o2"."RelatedTypeRootEntityId" LEFT JOIN ( - SELECT "r3"."RootEntityId", "r3"."Id", "r3"."Int", "r3"."Name", "r3"."String", "r4"."RelatedTypeRootEntityId", "r4"."RelatedTypeId", "r5"."RelatedTypeRootEntityId" AS "RelatedTypeRootEntityId0", "r5"."RelatedTypeId" AS "RelatedTypeId0", "r6"."RelatedTypeRootEntityId" AS "RelatedTypeRootEntityId1", "r6"."RelatedTypeId" AS "RelatedTypeId1", "r6"."Id" AS "Id0", "r6"."Int" AS "Int0", "r6"."Name" AS "Name0", "r6"."String" AS "String0", "r4"."Id" AS "Id1", "r4"."Int" AS "Int1", "r4"."Name" AS "Name1", "r4"."String" AS "String1", "r5"."Id" AS "Id2", "r5"."Int" AS "Int2", "r5"."Name" AS "Name2", "r5"."String" AS "String2" + SELECT "r3"."RootEntityId", "r3"."Id", "r3"."Int", "r3"."Ints", "r3"."Name", "r3"."String", "r4"."RelatedTypeRootEntityId", "r4"."RelatedTypeId", "r5"."RelatedTypeRootEntityId" AS "RelatedTypeRootEntityId0", "r5"."RelatedTypeId" AS "RelatedTypeId0", "r6"."RelatedTypeRootEntityId" AS "RelatedTypeRootEntityId1", "r6"."RelatedTypeId" AS "RelatedTypeId1", "r6"."Id" AS "Id0", "r6"."Int" AS "Int0", "r6"."Ints" AS "Ints0", "r6"."Name" AS "Name0", "r6"."String" AS "String0", "r4"."Id" AS "Id1", "r4"."Int" AS "Int1", "r4"."Ints" AS "Ints1", "r4"."Name" AS "Name1", "r4"."String" AS "String1", "r5"."Id" AS "Id2", "r5"."Int" AS "Int2", "r5"."Ints" AS "Ints2", "r5"."Name" AS "Name2", "r5"."String" AS "String2" FROM "RelatedCollection" AS "r3" LEFT JOIN "RelatedCollection_OptionalNested" AS "r4" ON "r3"."RootEntityId" = "r4"."RelatedTypeRootEntityId" AND "r3"."Id" = "r4"."RelatedTypeId" LEFT JOIN "RelatedCollection_RequiredNested" AS "r5" ON "r3"."RootEntityId" = "r5"."RelatedTypeRootEntityId" AND "r3"."Id" = "r5"."RelatedTypeId" @@ -198,7 +198,7 @@ public override async Task Two_nested_collections() AssertSql( """ -SELECT "r"."Id", "r"."Name", "o"."RootEntityId", "o"."Id", "o"."Int", "o"."Name", "o"."String", "o0"."RelatedTypeRootEntityId", "o1"."RelatedTypeRootEntityId", "r0"."RootEntityId", "r1"."RelatedTypeRootEntityId", "r2"."RelatedTypeRootEntityId", "o2"."RelatedTypeRootEntityId", "o2"."Id", "o2"."Int", "o2"."Name", "o2"."String", "o0"."Id", "o0"."Int", "o0"."Name", "o0"."String", "o1"."Id", "o1"."Int", "o1"."Name", "o1"."String", "s"."RootEntityId", "s"."Id", "s"."Int", "s"."Name", "s"."String", "s"."RelatedTypeRootEntityId", "s"."RelatedTypeId", "s"."RelatedTypeRootEntityId0", "s"."RelatedTypeId0", "s"."RelatedTypeRootEntityId1", "s"."RelatedTypeId1", "s"."Id0", "s"."Int0", "s"."Name0", "s"."String0", "s"."Id1", "s"."Int1", "s"."Name1", "s"."String1", "s"."Id2", "s"."Int2", "s"."Name2", "s"."String2", "r0"."Id", "r0"."Int", "r0"."Name", "r0"."String", "r7"."RelatedTypeRootEntityId", "r7"."Id", "r7"."Int", "r7"."Name", "r7"."String", "r1"."Id", "r1"."Int", "r1"."Name", "r1"."String", "r2"."Id", "r2"."Int", "r2"."Name", "r2"."String" +SELECT "r"."Id", "r"."Name", "o"."RootEntityId", "o"."Id", "o"."Int", "o"."Ints", "o"."Name", "o"."String", "o0"."RelatedTypeRootEntityId", "o1"."RelatedTypeRootEntityId", "r0"."RootEntityId", "r1"."RelatedTypeRootEntityId", "r2"."RelatedTypeRootEntityId", "o2"."RelatedTypeRootEntityId", "o2"."Id", "o2"."Int", "o2"."Ints", "o2"."Name", "o2"."String", "o0"."Id", "o0"."Int", "o0"."Ints", "o0"."Name", "o0"."String", "o1"."Id", "o1"."Int", "o1"."Ints", "o1"."Name", "o1"."String", "s"."RootEntityId", "s"."Id", "s"."Int", "s"."Ints", "s"."Name", "s"."String", "s"."RelatedTypeRootEntityId", "s"."RelatedTypeId", "s"."RelatedTypeRootEntityId0", "s"."RelatedTypeId0", "s"."RelatedTypeRootEntityId1", "s"."RelatedTypeId1", "s"."Id0", "s"."Int0", "s"."Ints0", "s"."Name0", "s"."String0", "s"."Id1", "s"."Int1", "s"."Ints1", "s"."Name1", "s"."String1", "s"."Id2", "s"."Int2", "s"."Ints2", "s"."Name2", "s"."String2", "r0"."Id", "r0"."Int", "r0"."Ints", "r0"."Name", "r0"."String", "r7"."RelatedTypeRootEntityId", "r7"."Id", "r7"."Int", "r7"."Ints", "r7"."Name", "r7"."String", "r1"."Id", "r1"."Int", "r1"."Ints", "r1"."Name", "r1"."String", "r2"."Id", "r2"."Int", "r2"."Ints", "r2"."Name", "r2"."String" FROM "RootEntity" AS "r" LEFT JOIN "OptionalRelated" AS "o" ON "r"."Id" = "o"."RootEntityId" LEFT JOIN "OptionalRelated_OptionalNested" AS "o0" ON "o"."RootEntityId" = "o0"."RelatedTypeRootEntityId" @@ -208,7 +208,7 @@ public override async Task Two_nested_collections() LEFT JOIN "RequiredRelated_RequiredNested" AS "r2" ON "r0"."RootEntityId" = "r2"."RelatedTypeRootEntityId" LEFT JOIN "OptionalRelated_NestedCollection" AS "o2" ON "o"."RootEntityId" = "o2"."RelatedTypeRootEntityId" LEFT JOIN ( - SELECT "r3"."RootEntityId", "r3"."Id", "r3"."Int", "r3"."Name", "r3"."String", "r4"."RelatedTypeRootEntityId", "r4"."RelatedTypeId", "r5"."RelatedTypeRootEntityId" AS "RelatedTypeRootEntityId0", "r5"."RelatedTypeId" AS "RelatedTypeId0", "r6"."RelatedTypeRootEntityId" AS "RelatedTypeRootEntityId1", "r6"."RelatedTypeId" AS "RelatedTypeId1", "r6"."Id" AS "Id0", "r6"."Int" AS "Int0", "r6"."Name" AS "Name0", "r6"."String" AS "String0", "r4"."Id" AS "Id1", "r4"."Int" AS "Int1", "r4"."Name" AS "Name1", "r4"."String" AS "String1", "r5"."Id" AS "Id2", "r5"."Int" AS "Int2", "r5"."Name" AS "Name2", "r5"."String" AS "String2" + SELECT "r3"."RootEntityId", "r3"."Id", "r3"."Int", "r3"."Ints", "r3"."Name", "r3"."String", "r4"."RelatedTypeRootEntityId", "r4"."RelatedTypeId", "r5"."RelatedTypeRootEntityId" AS "RelatedTypeRootEntityId0", "r5"."RelatedTypeId" AS "RelatedTypeId0", "r6"."RelatedTypeRootEntityId" AS "RelatedTypeRootEntityId1", "r6"."RelatedTypeId" AS "RelatedTypeId1", "r6"."Id" AS "Id0", "r6"."Int" AS "Int0", "r6"."Ints" AS "Ints0", "r6"."Name" AS "Name0", "r6"."String" AS "String0", "r4"."Id" AS "Id1", "r4"."Int" AS "Int1", "r4"."Ints" AS "Ints1", "r4"."Name" AS "Name1", "r4"."String" AS "String1", "r5"."Id" AS "Id2", "r5"."Int" AS "Int2", "r5"."Ints" AS "Ints2", "r5"."Name" AS "Name2", "r5"."String" AS "String2" FROM "RelatedCollection" AS "r3" LEFT JOIN "RelatedCollection_OptionalNested" AS "r4" ON "r3"."RootEntityId" = "r4"."RelatedTypeRootEntityId" AND "r3"."Id" = "r4"."RelatedTypeId" LEFT JOIN "RelatedCollection_RequiredNested" AS "r5" ON "r3"."RootEntityId" = "r5"."RelatedTypeRootEntityId" AND "r3"."Id" = "r5"."RelatedTypeId" diff --git a/test/EFCore.Sqlite.FunctionalTests/Query/Associations/OwnedTableSplitting/OwnedTableSplittingPrimitiveCollectionSqliteTest.cs b/test/EFCore.Sqlite.FunctionalTests/Query/Associations/OwnedTableSplitting/OwnedTableSplittingPrimitiveCollectionSqliteTest.cs new file mode 100644 index 00000000000..1217225e066 --- /dev/null +++ b/test/EFCore.Sqlite.FunctionalTests/Query/Associations/OwnedTableSplitting/OwnedTableSplittingPrimitiveCollectionSqliteTest.cs @@ -0,0 +1,7 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace Microsoft.EntityFrameworkCore.Query.Associations.OwnedTableSplitting; + +public class OwnedTableSplittingPrimitiveCollectionSqliteTest(OwnedTableSplittingSqliteFixture fixture, ITestOutputHelper testOutputHelper) + : OwnedTableSplittingPrimitiveCollectionRelationalTestBase(fixture, testOutputHelper); diff --git a/test/EFCore.Sqlite.FunctionalTests/Query/Associations/OwnedTableSplitting/OwnedTableSplittingStructuralEqualitySqliteTest.cs b/test/EFCore.Sqlite.FunctionalTests/Query/Associations/OwnedTableSplitting/OwnedTableSplittingStructuralEqualitySqliteTest.cs index bdfc75d1b2b..60b32969407 100644 --- a/test/EFCore.Sqlite.FunctionalTests/Query/Associations/OwnedTableSplitting/OwnedTableSplittingStructuralEqualitySqliteTest.cs +++ b/test/EFCore.Sqlite.FunctionalTests/Query/Associations/OwnedTableSplitting/OwnedTableSplittingStructuralEqualitySqliteTest.cs @@ -14,13 +14,13 @@ public override async Task Two_related() AssertSql( """ -SELECT "r"."Id", "r"."Name", "r"."OptionalRelated_Id", "r"."OptionalRelated_Int", "r"."OptionalRelated_Name", "r"."OptionalRelated_String", "o"."RelatedTypeRootEntityId", "o"."Id", "o"."Int", "o"."Name", "o"."String", "r"."OptionalRelated_OptionalNested_Id", "r"."OptionalRelated_OptionalNested_Int", "r"."OptionalRelated_OptionalNested_Name", "r"."OptionalRelated_OptionalNested_String", "r"."OptionalRelated_RequiredNested_Id", "r"."OptionalRelated_RequiredNested_Int", "r"."OptionalRelated_RequiredNested_Name", "r"."OptionalRelated_RequiredNested_String", "s"."RootEntityId", "s"."Id", "s"."Int", "s"."Name", "s"."String", "s"."RelatedTypeRootEntityId", "s"."RelatedTypeId", "s"."Id0", "s"."Int0", "s"."Name0", "s"."String0", "s"."OptionalNested_Id", "s"."OptionalNested_Int", "s"."OptionalNested_Name", "s"."OptionalNested_String", "s"."RequiredNested_Id", "s"."RequiredNested_Int", "s"."RequiredNested_Name", "s"."RequiredNested_String", "r"."RequiredRelated_Id", "r"."RequiredRelated_Int", "r"."RequiredRelated_Name", "r"."RequiredRelated_String", "r2"."RelatedTypeRootEntityId", "r2"."Id", "r2"."Int", "r2"."Name", "r2"."String", "r"."RequiredRelated_OptionalNested_Id", "r"."RequiredRelated_OptionalNested_Int", "r"."RequiredRelated_OptionalNested_Name", "r"."RequiredRelated_OptionalNested_String", "r"."RequiredRelated_RequiredNested_Id", "r"."RequiredRelated_RequiredNested_Int", "r"."RequiredRelated_RequiredNested_Name", "r"."RequiredRelated_RequiredNested_String" +SELECT "r"."Id", "r"."Name", "r"."OptionalRelated_Id", "r"."OptionalRelated_Int", "r"."OptionalRelated_Ints", "r"."OptionalRelated_Name", "r"."OptionalRelated_String", "o"."RelatedTypeRootEntityId", "o"."Id", "o"."Int", "o"."Ints", "o"."Name", "o"."String", "r"."OptionalRelated_OptionalNested_Id", "r"."OptionalRelated_OptionalNested_Int", "r"."OptionalRelated_OptionalNested_Ints", "r"."OptionalRelated_OptionalNested_Name", "r"."OptionalRelated_OptionalNested_String", "r"."OptionalRelated_RequiredNested_Id", "r"."OptionalRelated_RequiredNested_Int", "r"."OptionalRelated_RequiredNested_Ints", "r"."OptionalRelated_RequiredNested_Name", "r"."OptionalRelated_RequiredNested_String", "s"."RootEntityId", "s"."Id", "s"."Int", "s"."Ints", "s"."Name", "s"."String", "s"."RelatedTypeRootEntityId", "s"."RelatedTypeId", "s"."Id0", "s"."Int0", "s"."Ints0", "s"."Name0", "s"."String0", "s"."OptionalNested_Id", "s"."OptionalNested_Int", "s"."OptionalNested_Ints", "s"."OptionalNested_Name", "s"."OptionalNested_String", "s"."RequiredNested_Id", "s"."RequiredNested_Int", "s"."RequiredNested_Ints", "s"."RequiredNested_Name", "s"."RequiredNested_String", "r"."RequiredRelated_Id", "r"."RequiredRelated_Int", "r"."RequiredRelated_Ints", "r"."RequiredRelated_Name", "r"."RequiredRelated_String", "r2"."RelatedTypeRootEntityId", "r2"."Id", "r2"."Int", "r2"."Ints", "r2"."Name", "r2"."String", "r"."RequiredRelated_OptionalNested_Id", "r"."RequiredRelated_OptionalNested_Int", "r"."RequiredRelated_OptionalNested_Ints", "r"."RequiredRelated_OptionalNested_Name", "r"."RequiredRelated_OptionalNested_String", "r"."RequiredRelated_RequiredNested_Id", "r"."RequiredRelated_RequiredNested_Int", "r"."RequiredRelated_RequiredNested_Ints", "r"."RequiredRelated_RequiredNested_Name", "r"."RequiredRelated_RequiredNested_String" FROM "RootEntity" AS "r" LEFT JOIN "OptionalRelated_NestedCollection" AS "o" ON CASE - WHEN "r"."OptionalRelated_Id" IS NOT NULL AND "r"."OptionalRelated_Int" IS NOT NULL AND "r"."OptionalRelated_Name" IS NOT NULL AND "r"."OptionalRelated_String" IS NOT NULL THEN "r"."Id" + WHEN "r"."OptionalRelated_Id" IS NOT NULL AND "r"."OptionalRelated_Int" IS NOT NULL AND "r"."OptionalRelated_Ints" IS NOT NULL AND "r"."OptionalRelated_Name" IS NOT NULL AND "r"."OptionalRelated_String" IS NOT NULL THEN "r"."Id" END = "o"."RelatedTypeRootEntityId" LEFT JOIN ( - SELECT "r0"."RootEntityId", "r0"."Id", "r0"."Int", "r0"."Name", "r0"."String", "r1"."RelatedTypeRootEntityId", "r1"."RelatedTypeId", "r1"."Id" AS "Id0", "r1"."Int" AS "Int0", "r1"."Name" AS "Name0", "r1"."String" AS "String0", "r0"."OptionalNested_Id", "r0"."OptionalNested_Int", "r0"."OptionalNested_Name", "r0"."OptionalNested_String", "r0"."RequiredNested_Id", "r0"."RequiredNested_Int", "r0"."RequiredNested_Name", "r0"."RequiredNested_String" + SELECT "r0"."RootEntityId", "r0"."Id", "r0"."Int", "r0"."Ints", "r0"."Name", "r0"."String", "r1"."RelatedTypeRootEntityId", "r1"."RelatedTypeId", "r1"."Id" AS "Id0", "r1"."Int" AS "Int0", "r1"."Ints" AS "Ints0", "r1"."Name" AS "Name0", "r1"."String" AS "String0", "r0"."OptionalNested_Id", "r0"."OptionalNested_Int", "r0"."OptionalNested_Ints", "r0"."OptionalNested_Name", "r0"."OptionalNested_String", "r0"."RequiredNested_Id", "r0"."RequiredNested_Int", "r0"."RequiredNested_Ints", "r0"."RequiredNested_Name", "r0"."RequiredNested_String" FROM "RelatedCollection" AS "r0" LEFT JOIN "RelatedCollection_NestedCollection" AS "r1" ON "r0"."RootEntityId" = "r1"."RelatedTypeRootEntityId" AND "r0"."Id" = "r1"."RelatedTypeId" ) AS "s" ON "r"."Id" = "s"."RootEntityId" @@ -36,13 +36,13 @@ public override async Task Two_nested() AssertSql( """ -SELECT "r"."Id", "r"."Name", "r"."OptionalRelated_Id", "r"."OptionalRelated_Int", "r"."OptionalRelated_Name", "r"."OptionalRelated_String", "o"."RelatedTypeRootEntityId", "o"."Id", "o"."Int", "o"."Name", "o"."String", "r"."OptionalRelated_OptionalNested_Id", "r"."OptionalRelated_OptionalNested_Int", "r"."OptionalRelated_OptionalNested_Name", "r"."OptionalRelated_OptionalNested_String", "r"."OptionalRelated_RequiredNested_Id", "r"."OptionalRelated_RequiredNested_Int", "r"."OptionalRelated_RequiredNested_Name", "r"."OptionalRelated_RequiredNested_String", "s"."RootEntityId", "s"."Id", "s"."Int", "s"."Name", "s"."String", "s"."RelatedTypeRootEntityId", "s"."RelatedTypeId", "s"."Id0", "s"."Int0", "s"."Name0", "s"."String0", "s"."OptionalNested_Id", "s"."OptionalNested_Int", "s"."OptionalNested_Name", "s"."OptionalNested_String", "s"."RequiredNested_Id", "s"."RequiredNested_Int", "s"."RequiredNested_Name", "s"."RequiredNested_String", "r"."RequiredRelated_Id", "r"."RequiredRelated_Int", "r"."RequiredRelated_Name", "r"."RequiredRelated_String", "r2"."RelatedTypeRootEntityId", "r2"."Id", "r2"."Int", "r2"."Name", "r2"."String", "r"."RequiredRelated_OptionalNested_Id", "r"."RequiredRelated_OptionalNested_Int", "r"."RequiredRelated_OptionalNested_Name", "r"."RequiredRelated_OptionalNested_String", "r"."RequiredRelated_RequiredNested_Id", "r"."RequiredRelated_RequiredNested_Int", "r"."RequiredRelated_RequiredNested_Name", "r"."RequiredRelated_RequiredNested_String" +SELECT "r"."Id", "r"."Name", "r"."OptionalRelated_Id", "r"."OptionalRelated_Int", "r"."OptionalRelated_Ints", "r"."OptionalRelated_Name", "r"."OptionalRelated_String", "o"."RelatedTypeRootEntityId", "o"."Id", "o"."Int", "o"."Ints", "o"."Name", "o"."String", "r"."OptionalRelated_OptionalNested_Id", "r"."OptionalRelated_OptionalNested_Int", "r"."OptionalRelated_OptionalNested_Ints", "r"."OptionalRelated_OptionalNested_Name", "r"."OptionalRelated_OptionalNested_String", "r"."OptionalRelated_RequiredNested_Id", "r"."OptionalRelated_RequiredNested_Int", "r"."OptionalRelated_RequiredNested_Ints", "r"."OptionalRelated_RequiredNested_Name", "r"."OptionalRelated_RequiredNested_String", "s"."RootEntityId", "s"."Id", "s"."Int", "s"."Ints", "s"."Name", "s"."String", "s"."RelatedTypeRootEntityId", "s"."RelatedTypeId", "s"."Id0", "s"."Int0", "s"."Ints0", "s"."Name0", "s"."String0", "s"."OptionalNested_Id", "s"."OptionalNested_Int", "s"."OptionalNested_Ints", "s"."OptionalNested_Name", "s"."OptionalNested_String", "s"."RequiredNested_Id", "s"."RequiredNested_Int", "s"."RequiredNested_Ints", "s"."RequiredNested_Name", "s"."RequiredNested_String", "r"."RequiredRelated_Id", "r"."RequiredRelated_Int", "r"."RequiredRelated_Ints", "r"."RequiredRelated_Name", "r"."RequiredRelated_String", "r2"."RelatedTypeRootEntityId", "r2"."Id", "r2"."Int", "r2"."Ints", "r2"."Name", "r2"."String", "r"."RequiredRelated_OptionalNested_Id", "r"."RequiredRelated_OptionalNested_Int", "r"."RequiredRelated_OptionalNested_Ints", "r"."RequiredRelated_OptionalNested_Name", "r"."RequiredRelated_OptionalNested_String", "r"."RequiredRelated_RequiredNested_Id", "r"."RequiredRelated_RequiredNested_Int", "r"."RequiredRelated_RequiredNested_Ints", "r"."RequiredRelated_RequiredNested_Name", "r"."RequiredRelated_RequiredNested_String" FROM "RootEntity" AS "r" LEFT JOIN "OptionalRelated_NestedCollection" AS "o" ON CASE - WHEN "r"."OptionalRelated_Id" IS NOT NULL AND "r"."OptionalRelated_Int" IS NOT NULL AND "r"."OptionalRelated_Name" IS NOT NULL AND "r"."OptionalRelated_String" IS NOT NULL THEN "r"."Id" + WHEN "r"."OptionalRelated_Id" IS NOT NULL AND "r"."OptionalRelated_Int" IS NOT NULL AND "r"."OptionalRelated_Ints" IS NOT NULL AND "r"."OptionalRelated_Name" IS NOT NULL AND "r"."OptionalRelated_String" IS NOT NULL THEN "r"."Id" END = "o"."RelatedTypeRootEntityId" LEFT JOIN ( - SELECT "r0"."RootEntityId", "r0"."Id", "r0"."Int", "r0"."Name", "r0"."String", "r1"."RelatedTypeRootEntityId", "r1"."RelatedTypeId", "r1"."Id" AS "Id0", "r1"."Int" AS "Int0", "r1"."Name" AS "Name0", "r1"."String" AS "String0", "r0"."OptionalNested_Id", "r0"."OptionalNested_Int", "r0"."OptionalNested_Name", "r0"."OptionalNested_String", "r0"."RequiredNested_Id", "r0"."RequiredNested_Int", "r0"."RequiredNested_Name", "r0"."RequiredNested_String" + SELECT "r0"."RootEntityId", "r0"."Id", "r0"."Int", "r0"."Ints", "r0"."Name", "r0"."String", "r1"."RelatedTypeRootEntityId", "r1"."RelatedTypeId", "r1"."Id" AS "Id0", "r1"."Int" AS "Int0", "r1"."Ints" AS "Ints0", "r1"."Name" AS "Name0", "r1"."String" AS "String0", "r0"."OptionalNested_Id", "r0"."OptionalNested_Int", "r0"."OptionalNested_Ints", "r0"."OptionalNested_Name", "r0"."OptionalNested_String", "r0"."RequiredNested_Id", "r0"."RequiredNested_Int", "r0"."RequiredNested_Ints", "r0"."RequiredNested_Name", "r0"."RequiredNested_String" FROM "RelatedCollection" AS "r0" LEFT JOIN "RelatedCollection_NestedCollection" AS "r1" ON "r0"."RootEntityId" = "r1"."RelatedTypeRootEntityId" AND "r0"."Id" = "r1"."RelatedTypeId" ) AS "s" ON "r"."Id" = "s"."RootEntityId" @@ -58,13 +58,13 @@ public override async Task Not_equals() AssertSql( """ -SELECT "r"."Id", "r"."Name", "r"."OptionalRelated_Id", "r"."OptionalRelated_Int", "r"."OptionalRelated_Name", "r"."OptionalRelated_String", "o"."RelatedTypeRootEntityId", "o"."Id", "o"."Int", "o"."Name", "o"."String", "r"."OptionalRelated_OptionalNested_Id", "r"."OptionalRelated_OptionalNested_Int", "r"."OptionalRelated_OptionalNested_Name", "r"."OptionalRelated_OptionalNested_String", "r"."OptionalRelated_RequiredNested_Id", "r"."OptionalRelated_RequiredNested_Int", "r"."OptionalRelated_RequiredNested_Name", "r"."OptionalRelated_RequiredNested_String", "s"."RootEntityId", "s"."Id", "s"."Int", "s"."Name", "s"."String", "s"."RelatedTypeRootEntityId", "s"."RelatedTypeId", "s"."Id0", "s"."Int0", "s"."Name0", "s"."String0", "s"."OptionalNested_Id", "s"."OptionalNested_Int", "s"."OptionalNested_Name", "s"."OptionalNested_String", "s"."RequiredNested_Id", "s"."RequiredNested_Int", "s"."RequiredNested_Name", "s"."RequiredNested_String", "r"."RequiredRelated_Id", "r"."RequiredRelated_Int", "r"."RequiredRelated_Name", "r"."RequiredRelated_String", "r2"."RelatedTypeRootEntityId", "r2"."Id", "r2"."Int", "r2"."Name", "r2"."String", "r"."RequiredRelated_OptionalNested_Id", "r"."RequiredRelated_OptionalNested_Int", "r"."RequiredRelated_OptionalNested_Name", "r"."RequiredRelated_OptionalNested_String", "r"."RequiredRelated_RequiredNested_Id", "r"."RequiredRelated_RequiredNested_Int", "r"."RequiredRelated_RequiredNested_Name", "r"."RequiredRelated_RequiredNested_String" +SELECT "r"."Id", "r"."Name", "r"."OptionalRelated_Id", "r"."OptionalRelated_Int", "r"."OptionalRelated_Ints", "r"."OptionalRelated_Name", "r"."OptionalRelated_String", "o"."RelatedTypeRootEntityId", "o"."Id", "o"."Int", "o"."Ints", "o"."Name", "o"."String", "r"."OptionalRelated_OptionalNested_Id", "r"."OptionalRelated_OptionalNested_Int", "r"."OptionalRelated_OptionalNested_Ints", "r"."OptionalRelated_OptionalNested_Name", "r"."OptionalRelated_OptionalNested_String", "r"."OptionalRelated_RequiredNested_Id", "r"."OptionalRelated_RequiredNested_Int", "r"."OptionalRelated_RequiredNested_Ints", "r"."OptionalRelated_RequiredNested_Name", "r"."OptionalRelated_RequiredNested_String", "s"."RootEntityId", "s"."Id", "s"."Int", "s"."Ints", "s"."Name", "s"."String", "s"."RelatedTypeRootEntityId", "s"."RelatedTypeId", "s"."Id0", "s"."Int0", "s"."Ints0", "s"."Name0", "s"."String0", "s"."OptionalNested_Id", "s"."OptionalNested_Int", "s"."OptionalNested_Ints", "s"."OptionalNested_Name", "s"."OptionalNested_String", "s"."RequiredNested_Id", "s"."RequiredNested_Int", "s"."RequiredNested_Ints", "s"."RequiredNested_Name", "s"."RequiredNested_String", "r"."RequiredRelated_Id", "r"."RequiredRelated_Int", "r"."RequiredRelated_Ints", "r"."RequiredRelated_Name", "r"."RequiredRelated_String", "r2"."RelatedTypeRootEntityId", "r2"."Id", "r2"."Int", "r2"."Ints", "r2"."Name", "r2"."String", "r"."RequiredRelated_OptionalNested_Id", "r"."RequiredRelated_OptionalNested_Int", "r"."RequiredRelated_OptionalNested_Ints", "r"."RequiredRelated_OptionalNested_Name", "r"."RequiredRelated_OptionalNested_String", "r"."RequiredRelated_RequiredNested_Id", "r"."RequiredRelated_RequiredNested_Int", "r"."RequiredRelated_RequiredNested_Ints", "r"."RequiredRelated_RequiredNested_Name", "r"."RequiredRelated_RequiredNested_String" FROM "RootEntity" AS "r" LEFT JOIN "OptionalRelated_NestedCollection" AS "o" ON CASE - WHEN "r"."OptionalRelated_Id" IS NOT NULL AND "r"."OptionalRelated_Int" IS NOT NULL AND "r"."OptionalRelated_Name" IS NOT NULL AND "r"."OptionalRelated_String" IS NOT NULL THEN "r"."Id" + WHEN "r"."OptionalRelated_Id" IS NOT NULL AND "r"."OptionalRelated_Int" IS NOT NULL AND "r"."OptionalRelated_Ints" IS NOT NULL AND "r"."OptionalRelated_Name" IS NOT NULL AND "r"."OptionalRelated_String" IS NOT NULL THEN "r"."Id" END = "o"."RelatedTypeRootEntityId" LEFT JOIN ( - SELECT "r0"."RootEntityId", "r0"."Id", "r0"."Int", "r0"."Name", "r0"."String", "r1"."RelatedTypeRootEntityId", "r1"."RelatedTypeId", "r1"."Id" AS "Id0", "r1"."Int" AS "Int0", "r1"."Name" AS "Name0", "r1"."String" AS "String0", "r0"."OptionalNested_Id", "r0"."OptionalNested_Int", "r0"."OptionalNested_Name", "r0"."OptionalNested_String", "r0"."RequiredNested_Id", "r0"."RequiredNested_Int", "r0"."RequiredNested_Name", "r0"."RequiredNested_String" + SELECT "r0"."RootEntityId", "r0"."Id", "r0"."Int", "r0"."Ints", "r0"."Name", "r0"."String", "r1"."RelatedTypeRootEntityId", "r1"."RelatedTypeId", "r1"."Id" AS "Id0", "r1"."Int" AS "Int0", "r1"."Ints" AS "Ints0", "r1"."Name" AS "Name0", "r1"."String" AS "String0", "r0"."OptionalNested_Id", "r0"."OptionalNested_Int", "r0"."OptionalNested_Ints", "r0"."OptionalNested_Name", "r0"."OptionalNested_String", "r0"."RequiredNested_Id", "r0"."RequiredNested_Int", "r0"."RequiredNested_Ints", "r0"."RequiredNested_Name", "r0"."RequiredNested_String" FROM "RelatedCollection" AS "r0" LEFT JOIN "RelatedCollection_NestedCollection" AS "r1" ON "r0"."RootEntityId" = "r1"."RelatedTypeRootEntityId" AND "r0"."Id" = "r1"."RelatedTypeId" ) AS "s" ON "r"."Id" = "s"."RootEntityId" @@ -80,18 +80,18 @@ public override async Task Related_with_inline_null() AssertSql( """ -SELECT "r"."Id", "r"."Name", "r"."OptionalRelated_Id", "r"."OptionalRelated_Int", "r"."OptionalRelated_Name", "r"."OptionalRelated_String", "o"."RelatedTypeRootEntityId", "o"."Id", "o"."Int", "o"."Name", "o"."String", "r"."OptionalRelated_OptionalNested_Id", "r"."OptionalRelated_OptionalNested_Int", "r"."OptionalRelated_OptionalNested_Name", "r"."OptionalRelated_OptionalNested_String", "r"."OptionalRelated_RequiredNested_Id", "r"."OptionalRelated_RequiredNested_Int", "r"."OptionalRelated_RequiredNested_Name", "r"."OptionalRelated_RequiredNested_String", "s"."RootEntityId", "s"."Id", "s"."Int", "s"."Name", "s"."String", "s"."RelatedTypeRootEntityId", "s"."RelatedTypeId", "s"."Id0", "s"."Int0", "s"."Name0", "s"."String0", "s"."OptionalNested_Id", "s"."OptionalNested_Int", "s"."OptionalNested_Name", "s"."OptionalNested_String", "s"."RequiredNested_Id", "s"."RequiredNested_Int", "s"."RequiredNested_Name", "s"."RequiredNested_String", "r"."RequiredRelated_Id", "r"."RequiredRelated_Int", "r"."RequiredRelated_Name", "r"."RequiredRelated_String", "r2"."RelatedTypeRootEntityId", "r2"."Id", "r2"."Int", "r2"."Name", "r2"."String", "r"."RequiredRelated_OptionalNested_Id", "r"."RequiredRelated_OptionalNested_Int", "r"."RequiredRelated_OptionalNested_Name", "r"."RequiredRelated_OptionalNested_String", "r"."RequiredRelated_RequiredNested_Id", "r"."RequiredRelated_RequiredNested_Int", "r"."RequiredRelated_RequiredNested_Name", "r"."RequiredRelated_RequiredNested_String" +SELECT "r"."Id", "r"."Name", "r"."OptionalRelated_Id", "r"."OptionalRelated_Int", "r"."OptionalRelated_Ints", "r"."OptionalRelated_Name", "r"."OptionalRelated_String", "o"."RelatedTypeRootEntityId", "o"."Id", "o"."Int", "o"."Ints", "o"."Name", "o"."String", "r"."OptionalRelated_OptionalNested_Id", "r"."OptionalRelated_OptionalNested_Int", "r"."OptionalRelated_OptionalNested_Ints", "r"."OptionalRelated_OptionalNested_Name", "r"."OptionalRelated_OptionalNested_String", "r"."OptionalRelated_RequiredNested_Id", "r"."OptionalRelated_RequiredNested_Int", "r"."OptionalRelated_RequiredNested_Ints", "r"."OptionalRelated_RequiredNested_Name", "r"."OptionalRelated_RequiredNested_String", "s"."RootEntityId", "s"."Id", "s"."Int", "s"."Ints", "s"."Name", "s"."String", "s"."RelatedTypeRootEntityId", "s"."RelatedTypeId", "s"."Id0", "s"."Int0", "s"."Ints0", "s"."Name0", "s"."String0", "s"."OptionalNested_Id", "s"."OptionalNested_Int", "s"."OptionalNested_Ints", "s"."OptionalNested_Name", "s"."OptionalNested_String", "s"."RequiredNested_Id", "s"."RequiredNested_Int", "s"."RequiredNested_Ints", "s"."RequiredNested_Name", "s"."RequiredNested_String", "r"."RequiredRelated_Id", "r"."RequiredRelated_Int", "r"."RequiredRelated_Ints", "r"."RequiredRelated_Name", "r"."RequiredRelated_String", "r2"."RelatedTypeRootEntityId", "r2"."Id", "r2"."Int", "r2"."Ints", "r2"."Name", "r2"."String", "r"."RequiredRelated_OptionalNested_Id", "r"."RequiredRelated_OptionalNested_Int", "r"."RequiredRelated_OptionalNested_Ints", "r"."RequiredRelated_OptionalNested_Name", "r"."RequiredRelated_OptionalNested_String", "r"."RequiredRelated_RequiredNested_Id", "r"."RequiredRelated_RequiredNested_Int", "r"."RequiredRelated_RequiredNested_Ints", "r"."RequiredRelated_RequiredNested_Name", "r"."RequiredRelated_RequiredNested_String" FROM "RootEntity" AS "r" LEFT JOIN "OptionalRelated_NestedCollection" AS "o" ON CASE - WHEN "r"."OptionalRelated_Id" IS NOT NULL AND "r"."OptionalRelated_Int" IS NOT NULL AND "r"."OptionalRelated_Name" IS NOT NULL AND "r"."OptionalRelated_String" IS NOT NULL THEN "r"."Id" + WHEN "r"."OptionalRelated_Id" IS NOT NULL AND "r"."OptionalRelated_Int" IS NOT NULL AND "r"."OptionalRelated_Ints" IS NOT NULL AND "r"."OptionalRelated_Name" IS NOT NULL AND "r"."OptionalRelated_String" IS NOT NULL THEN "r"."Id" END = "o"."RelatedTypeRootEntityId" LEFT JOIN ( - SELECT "r0"."RootEntityId", "r0"."Id", "r0"."Int", "r0"."Name", "r0"."String", "r1"."RelatedTypeRootEntityId", "r1"."RelatedTypeId", "r1"."Id" AS "Id0", "r1"."Int" AS "Int0", "r1"."Name" AS "Name0", "r1"."String" AS "String0", "r0"."OptionalNested_Id", "r0"."OptionalNested_Int", "r0"."OptionalNested_Name", "r0"."OptionalNested_String", "r0"."RequiredNested_Id", "r0"."RequiredNested_Int", "r0"."RequiredNested_Name", "r0"."RequiredNested_String" + SELECT "r0"."RootEntityId", "r0"."Id", "r0"."Int", "r0"."Ints", "r0"."Name", "r0"."String", "r1"."RelatedTypeRootEntityId", "r1"."RelatedTypeId", "r1"."Id" AS "Id0", "r1"."Int" AS "Int0", "r1"."Ints" AS "Ints0", "r1"."Name" AS "Name0", "r1"."String" AS "String0", "r0"."OptionalNested_Id", "r0"."OptionalNested_Int", "r0"."OptionalNested_Ints", "r0"."OptionalNested_Name", "r0"."OptionalNested_String", "r0"."RequiredNested_Id", "r0"."RequiredNested_Int", "r0"."RequiredNested_Ints", "r0"."RequiredNested_Name", "r0"."RequiredNested_String" FROM "RelatedCollection" AS "r0" LEFT JOIN "RelatedCollection_NestedCollection" AS "r1" ON "r0"."RootEntityId" = "r1"."RelatedTypeRootEntityId" AND "r0"."Id" = "r1"."RelatedTypeId" ) AS "s" ON "r"."Id" = "s"."RootEntityId" LEFT JOIN "RequiredRelated_NestedCollection" AS "r2" ON "r"."Id" = "r2"."RelatedTypeRootEntityId" -WHERE "r"."OptionalRelated_Id" IS NULL OR "r"."OptionalRelated_Int" IS NULL OR "r"."OptionalRelated_Name" IS NULL OR "r"."OptionalRelated_String" IS NULL +WHERE "r"."OptionalRelated_Id" IS NULL OR "r"."OptionalRelated_Int" IS NULL OR "r"."OptionalRelated_Ints" IS NULL OR "r"."OptionalRelated_Name" IS NULL OR "r"."OptionalRelated_String" IS NULL ORDER BY "r"."Id", "o"."RelatedTypeRootEntityId", "o"."Id", "s"."RootEntityId", "s"."Id", "s"."RelatedTypeRootEntityId", "s"."RelatedTypeId", "s"."Id0", "r2"."RelatedTypeRootEntityId" """); } @@ -102,19 +102,19 @@ public override async Task Related_with_parameter_null() AssertSql( """ -SELECT "r"."Id", "r"."Name", "r"."OptionalRelated_Id", "r"."OptionalRelated_Int", "r"."OptionalRelated_Name", "r"."OptionalRelated_String", "o"."RelatedTypeRootEntityId", "o"."Id", "o"."Int", "o"."Name", "o"."String", "r"."OptionalRelated_OptionalNested_Id", "r"."OptionalRelated_OptionalNested_Int", "r"."OptionalRelated_OptionalNested_Name", "r"."OptionalRelated_OptionalNested_String", "r"."OptionalRelated_RequiredNested_Id", "r"."OptionalRelated_RequiredNested_Int", "r"."OptionalRelated_RequiredNested_Name", "r"."OptionalRelated_RequiredNested_String", "s"."RootEntityId", "s"."Id", "s"."Int", "s"."Name", "s"."String", "s"."RelatedTypeRootEntityId", "s"."RelatedTypeId", "s"."Id0", "s"."Int0", "s"."Name0", "s"."String0", "s"."OptionalNested_Id", "s"."OptionalNested_Int", "s"."OptionalNested_Name", "s"."OptionalNested_String", "s"."RequiredNested_Id", "s"."RequiredNested_Int", "s"."RequiredNested_Name", "s"."RequiredNested_String", "r"."RequiredRelated_Id", "r"."RequiredRelated_Int", "r"."RequiredRelated_Name", "r"."RequiredRelated_String", "r2"."RelatedTypeRootEntityId", "r2"."Id", "r2"."Int", "r2"."Name", "r2"."String", "r"."RequiredRelated_OptionalNested_Id", "r"."RequiredRelated_OptionalNested_Int", "r"."RequiredRelated_OptionalNested_Name", "r"."RequiredRelated_OptionalNested_String", "r"."RequiredRelated_RequiredNested_Id", "r"."RequiredRelated_RequiredNested_Int", "r"."RequiredRelated_RequiredNested_Name", "r"."RequiredRelated_RequiredNested_String" +SELECT "r"."Id", "r"."Name", "r"."OptionalRelated_Id", "r"."OptionalRelated_Int", "r"."OptionalRelated_Ints", "r"."OptionalRelated_Name", "r"."OptionalRelated_String", "o"."RelatedTypeRootEntityId", "o"."Id", "o"."Int", "o"."Ints", "o"."Name", "o"."String", "r"."OptionalRelated_OptionalNested_Id", "r"."OptionalRelated_OptionalNested_Int", "r"."OptionalRelated_OptionalNested_Ints", "r"."OptionalRelated_OptionalNested_Name", "r"."OptionalRelated_OptionalNested_String", "r"."OptionalRelated_RequiredNested_Id", "r"."OptionalRelated_RequiredNested_Int", "r"."OptionalRelated_RequiredNested_Ints", "r"."OptionalRelated_RequiredNested_Name", "r"."OptionalRelated_RequiredNested_String", "s"."RootEntityId", "s"."Id", "s"."Int", "s"."Ints", "s"."Name", "s"."String", "s"."RelatedTypeRootEntityId", "s"."RelatedTypeId", "s"."Id0", "s"."Int0", "s"."Ints0", "s"."Name0", "s"."String0", "s"."OptionalNested_Id", "s"."OptionalNested_Int", "s"."OptionalNested_Ints", "s"."OptionalNested_Name", "s"."OptionalNested_String", "s"."RequiredNested_Id", "s"."RequiredNested_Int", "s"."RequiredNested_Ints", "s"."RequiredNested_Name", "s"."RequiredNested_String", "r"."RequiredRelated_Id", "r"."RequiredRelated_Int", "r"."RequiredRelated_Ints", "r"."RequiredRelated_Name", "r"."RequiredRelated_String", "r2"."RelatedTypeRootEntityId", "r2"."Id", "r2"."Int", "r2"."Ints", "r2"."Name", "r2"."String", "r"."RequiredRelated_OptionalNested_Id", "r"."RequiredRelated_OptionalNested_Int", "r"."RequiredRelated_OptionalNested_Ints", "r"."RequiredRelated_OptionalNested_Name", "r"."RequiredRelated_OptionalNested_String", "r"."RequiredRelated_RequiredNested_Id", "r"."RequiredRelated_RequiredNested_Int", "r"."RequiredRelated_RequiredNested_Ints", "r"."RequiredRelated_RequiredNested_Name", "r"."RequiredRelated_RequiredNested_String" FROM "RootEntity" AS "r" LEFT JOIN "OptionalRelated_NestedCollection" AS "o" ON CASE - WHEN "r"."OptionalRelated_Id" IS NOT NULL AND "r"."OptionalRelated_Int" IS NOT NULL AND "r"."OptionalRelated_Name" IS NOT NULL AND "r"."OptionalRelated_String" IS NOT NULL THEN "r"."Id" + WHEN "r"."OptionalRelated_Id" IS NOT NULL AND "r"."OptionalRelated_Int" IS NOT NULL AND "r"."OptionalRelated_Ints" IS NOT NULL AND "r"."OptionalRelated_Name" IS NOT NULL AND "r"."OptionalRelated_String" IS NOT NULL THEN "r"."Id" END = "o"."RelatedTypeRootEntityId" LEFT JOIN ( - SELECT "r0"."RootEntityId", "r0"."Id", "r0"."Int", "r0"."Name", "r0"."String", "r1"."RelatedTypeRootEntityId", "r1"."RelatedTypeId", "r1"."Id" AS "Id0", "r1"."Int" AS "Int0", "r1"."Name" AS "Name0", "r1"."String" AS "String0", "r0"."OptionalNested_Id", "r0"."OptionalNested_Int", "r0"."OptionalNested_Name", "r0"."OptionalNested_String", "r0"."RequiredNested_Id", "r0"."RequiredNested_Int", "r0"."RequiredNested_Name", "r0"."RequiredNested_String" + SELECT "r0"."RootEntityId", "r0"."Id", "r0"."Int", "r0"."Ints", "r0"."Name", "r0"."String", "r1"."RelatedTypeRootEntityId", "r1"."RelatedTypeId", "r1"."Id" AS "Id0", "r1"."Int" AS "Int0", "r1"."Ints" AS "Ints0", "r1"."Name" AS "Name0", "r1"."String" AS "String0", "r0"."OptionalNested_Id", "r0"."OptionalNested_Int", "r0"."OptionalNested_Ints", "r0"."OptionalNested_Name", "r0"."OptionalNested_String", "r0"."RequiredNested_Id", "r0"."RequiredNested_Int", "r0"."RequiredNested_Ints", "r0"."RequiredNested_Name", "r0"."RequiredNested_String" FROM "RelatedCollection" AS "r0" LEFT JOIN "RelatedCollection_NestedCollection" AS "r1" ON "r0"."RootEntityId" = "r1"."RelatedTypeRootEntityId" AND "r0"."Id" = "r1"."RelatedTypeId" ) AS "s" ON "r"."Id" = "s"."RootEntityId" LEFT JOIN "RequiredRelated_NestedCollection" AS "r2" ON "r"."Id" = "r2"."RelatedTypeRootEntityId" WHERE CASE - WHEN "r"."OptionalRelated_Id" IS NOT NULL AND "r"."OptionalRelated_Int" IS NOT NULL AND "r"."OptionalRelated_Name" IS NOT NULL AND "r"."OptionalRelated_String" IS NOT NULL THEN "r"."Id" + WHEN "r"."OptionalRelated_Id" IS NOT NULL AND "r"."OptionalRelated_Int" IS NOT NULL AND "r"."OptionalRelated_Ints" IS NOT NULL AND "r"."OptionalRelated_Name" IS NOT NULL AND "r"."OptionalRelated_String" IS NOT NULL THEN "r"."Id" END IS NULL ORDER BY "r"."Id", "o"."RelatedTypeRootEntityId", "o"."Id", "s"."RootEntityId", "s"."Id", "s"."RelatedTypeRootEntityId", "s"."RelatedTypeId", "s"."Id0", "r2"."RelatedTypeRootEntityId" """); @@ -126,18 +126,18 @@ public override async Task Nested_with_inline_null() AssertSql( """ -SELECT "r"."Id", "r"."Name", "r"."OptionalRelated_Id", "r"."OptionalRelated_Int", "r"."OptionalRelated_Name", "r"."OptionalRelated_String", "o"."RelatedTypeRootEntityId", "o"."Id", "o"."Int", "o"."Name", "o"."String", "r"."OptionalRelated_OptionalNested_Id", "r"."OptionalRelated_OptionalNested_Int", "r"."OptionalRelated_OptionalNested_Name", "r"."OptionalRelated_OptionalNested_String", "r"."OptionalRelated_RequiredNested_Id", "r"."OptionalRelated_RequiredNested_Int", "r"."OptionalRelated_RequiredNested_Name", "r"."OptionalRelated_RequiredNested_String", "s"."RootEntityId", "s"."Id", "s"."Int", "s"."Name", "s"."String", "s"."RelatedTypeRootEntityId", "s"."RelatedTypeId", "s"."Id0", "s"."Int0", "s"."Name0", "s"."String0", "s"."OptionalNested_Id", "s"."OptionalNested_Int", "s"."OptionalNested_Name", "s"."OptionalNested_String", "s"."RequiredNested_Id", "s"."RequiredNested_Int", "s"."RequiredNested_Name", "s"."RequiredNested_String", "r"."RequiredRelated_Id", "r"."RequiredRelated_Int", "r"."RequiredRelated_Name", "r"."RequiredRelated_String", "r2"."RelatedTypeRootEntityId", "r2"."Id", "r2"."Int", "r2"."Name", "r2"."String", "r"."RequiredRelated_OptionalNested_Id", "r"."RequiredRelated_OptionalNested_Int", "r"."RequiredRelated_OptionalNested_Name", "r"."RequiredRelated_OptionalNested_String", "r"."RequiredRelated_RequiredNested_Id", "r"."RequiredRelated_RequiredNested_Int", "r"."RequiredRelated_RequiredNested_Name", "r"."RequiredRelated_RequiredNested_String" +SELECT "r"."Id", "r"."Name", "r"."OptionalRelated_Id", "r"."OptionalRelated_Int", "r"."OptionalRelated_Ints", "r"."OptionalRelated_Name", "r"."OptionalRelated_String", "o"."RelatedTypeRootEntityId", "o"."Id", "o"."Int", "o"."Ints", "o"."Name", "o"."String", "r"."OptionalRelated_OptionalNested_Id", "r"."OptionalRelated_OptionalNested_Int", "r"."OptionalRelated_OptionalNested_Ints", "r"."OptionalRelated_OptionalNested_Name", "r"."OptionalRelated_OptionalNested_String", "r"."OptionalRelated_RequiredNested_Id", "r"."OptionalRelated_RequiredNested_Int", "r"."OptionalRelated_RequiredNested_Ints", "r"."OptionalRelated_RequiredNested_Name", "r"."OptionalRelated_RequiredNested_String", "s"."RootEntityId", "s"."Id", "s"."Int", "s"."Ints", "s"."Name", "s"."String", "s"."RelatedTypeRootEntityId", "s"."RelatedTypeId", "s"."Id0", "s"."Int0", "s"."Ints0", "s"."Name0", "s"."String0", "s"."OptionalNested_Id", "s"."OptionalNested_Int", "s"."OptionalNested_Ints", "s"."OptionalNested_Name", "s"."OptionalNested_String", "s"."RequiredNested_Id", "s"."RequiredNested_Int", "s"."RequiredNested_Ints", "s"."RequiredNested_Name", "s"."RequiredNested_String", "r"."RequiredRelated_Id", "r"."RequiredRelated_Int", "r"."RequiredRelated_Ints", "r"."RequiredRelated_Name", "r"."RequiredRelated_String", "r2"."RelatedTypeRootEntityId", "r2"."Id", "r2"."Int", "r2"."Ints", "r2"."Name", "r2"."String", "r"."RequiredRelated_OptionalNested_Id", "r"."RequiredRelated_OptionalNested_Int", "r"."RequiredRelated_OptionalNested_Ints", "r"."RequiredRelated_OptionalNested_Name", "r"."RequiredRelated_OptionalNested_String", "r"."RequiredRelated_RequiredNested_Id", "r"."RequiredRelated_RequiredNested_Int", "r"."RequiredRelated_RequiredNested_Ints", "r"."RequiredRelated_RequiredNested_Name", "r"."RequiredRelated_RequiredNested_String" FROM "RootEntity" AS "r" LEFT JOIN "OptionalRelated_NestedCollection" AS "o" ON CASE - WHEN "r"."OptionalRelated_Id" IS NOT NULL AND "r"."OptionalRelated_Int" IS NOT NULL AND "r"."OptionalRelated_Name" IS NOT NULL AND "r"."OptionalRelated_String" IS NOT NULL THEN "r"."Id" + WHEN "r"."OptionalRelated_Id" IS NOT NULL AND "r"."OptionalRelated_Int" IS NOT NULL AND "r"."OptionalRelated_Ints" IS NOT NULL AND "r"."OptionalRelated_Name" IS NOT NULL AND "r"."OptionalRelated_String" IS NOT NULL THEN "r"."Id" END = "o"."RelatedTypeRootEntityId" LEFT JOIN ( - SELECT "r0"."RootEntityId", "r0"."Id", "r0"."Int", "r0"."Name", "r0"."String", "r1"."RelatedTypeRootEntityId", "r1"."RelatedTypeId", "r1"."Id" AS "Id0", "r1"."Int" AS "Int0", "r1"."Name" AS "Name0", "r1"."String" AS "String0", "r0"."OptionalNested_Id", "r0"."OptionalNested_Int", "r0"."OptionalNested_Name", "r0"."OptionalNested_String", "r0"."RequiredNested_Id", "r0"."RequiredNested_Int", "r0"."RequiredNested_Name", "r0"."RequiredNested_String" + SELECT "r0"."RootEntityId", "r0"."Id", "r0"."Int", "r0"."Ints", "r0"."Name", "r0"."String", "r1"."RelatedTypeRootEntityId", "r1"."RelatedTypeId", "r1"."Id" AS "Id0", "r1"."Int" AS "Int0", "r1"."Ints" AS "Ints0", "r1"."Name" AS "Name0", "r1"."String" AS "String0", "r0"."OptionalNested_Id", "r0"."OptionalNested_Int", "r0"."OptionalNested_Ints", "r0"."OptionalNested_Name", "r0"."OptionalNested_String", "r0"."RequiredNested_Id", "r0"."RequiredNested_Int", "r0"."RequiredNested_Ints", "r0"."RequiredNested_Name", "r0"."RequiredNested_String" FROM "RelatedCollection" AS "r0" LEFT JOIN "RelatedCollection_NestedCollection" AS "r1" ON "r0"."RootEntityId" = "r1"."RelatedTypeRootEntityId" AND "r0"."Id" = "r1"."RelatedTypeId" ) AS "s" ON "r"."Id" = "s"."RootEntityId" LEFT JOIN "RequiredRelated_NestedCollection" AS "r2" ON "r"."Id" = "r2"."RelatedTypeRootEntityId" -WHERE "r"."RequiredRelated_OptionalNested_Id" IS NULL OR "r"."RequiredRelated_OptionalNested_Int" IS NULL OR "r"."RequiredRelated_OptionalNested_Name" IS NULL OR "r"."RequiredRelated_OptionalNested_String" IS NULL +WHERE "r"."RequiredRelated_OptionalNested_Id" IS NULL OR "r"."RequiredRelated_OptionalNested_Int" IS NULL OR "r"."RequiredRelated_OptionalNested_Ints" IS NULL OR "r"."RequiredRelated_OptionalNested_Name" IS NULL OR "r"."RequiredRelated_OptionalNested_String" IS NULL ORDER BY "r"."Id", "o"."RelatedTypeRootEntityId", "o"."Id", "s"."RootEntityId", "s"."Id", "s"."RelatedTypeRootEntityId", "s"."RelatedTypeId", "s"."Id0", "r2"."RelatedTypeRootEntityId" """); } @@ -164,13 +164,13 @@ public override async Task Two_nested_collections() AssertSql( """ -SELECT "r"."Id", "r"."Name", "r"."OptionalRelated_Id", "r"."OptionalRelated_Int", "r"."OptionalRelated_Name", "r"."OptionalRelated_String", "o"."RelatedTypeRootEntityId", "o"."Id", "o"."Int", "o"."Name", "o"."String", "r"."OptionalRelated_OptionalNested_Id", "r"."OptionalRelated_OptionalNested_Int", "r"."OptionalRelated_OptionalNested_Name", "r"."OptionalRelated_OptionalNested_String", "r"."OptionalRelated_RequiredNested_Id", "r"."OptionalRelated_RequiredNested_Int", "r"."OptionalRelated_RequiredNested_Name", "r"."OptionalRelated_RequiredNested_String", "s"."RootEntityId", "s"."Id", "s"."Int", "s"."Name", "s"."String", "s"."RelatedTypeRootEntityId", "s"."RelatedTypeId", "s"."Id0", "s"."Int0", "s"."Name0", "s"."String0", "s"."OptionalNested_Id", "s"."OptionalNested_Int", "s"."OptionalNested_Name", "s"."OptionalNested_String", "s"."RequiredNested_Id", "s"."RequiredNested_Int", "s"."RequiredNested_Name", "s"."RequiredNested_String", "r"."RequiredRelated_Id", "r"."RequiredRelated_Int", "r"."RequiredRelated_Name", "r"."RequiredRelated_String", "r2"."RelatedTypeRootEntityId", "r2"."Id", "r2"."Int", "r2"."Name", "r2"."String", "r"."RequiredRelated_OptionalNested_Id", "r"."RequiredRelated_OptionalNested_Int", "r"."RequiredRelated_OptionalNested_Name", "r"."RequiredRelated_OptionalNested_String", "r"."RequiredRelated_RequiredNested_Id", "r"."RequiredRelated_RequiredNested_Int", "r"."RequiredRelated_RequiredNested_Name", "r"."RequiredRelated_RequiredNested_String" +SELECT "r"."Id", "r"."Name", "r"."OptionalRelated_Id", "r"."OptionalRelated_Int", "r"."OptionalRelated_Ints", "r"."OptionalRelated_Name", "r"."OptionalRelated_String", "o"."RelatedTypeRootEntityId", "o"."Id", "o"."Int", "o"."Ints", "o"."Name", "o"."String", "r"."OptionalRelated_OptionalNested_Id", "r"."OptionalRelated_OptionalNested_Int", "r"."OptionalRelated_OptionalNested_Ints", "r"."OptionalRelated_OptionalNested_Name", "r"."OptionalRelated_OptionalNested_String", "r"."OptionalRelated_RequiredNested_Id", "r"."OptionalRelated_RequiredNested_Int", "r"."OptionalRelated_RequiredNested_Ints", "r"."OptionalRelated_RequiredNested_Name", "r"."OptionalRelated_RequiredNested_String", "s"."RootEntityId", "s"."Id", "s"."Int", "s"."Ints", "s"."Name", "s"."String", "s"."RelatedTypeRootEntityId", "s"."RelatedTypeId", "s"."Id0", "s"."Int0", "s"."Ints0", "s"."Name0", "s"."String0", "s"."OptionalNested_Id", "s"."OptionalNested_Int", "s"."OptionalNested_Ints", "s"."OptionalNested_Name", "s"."OptionalNested_String", "s"."RequiredNested_Id", "s"."RequiredNested_Int", "s"."RequiredNested_Ints", "s"."RequiredNested_Name", "s"."RequiredNested_String", "r"."RequiredRelated_Id", "r"."RequiredRelated_Int", "r"."RequiredRelated_Ints", "r"."RequiredRelated_Name", "r"."RequiredRelated_String", "r2"."RelatedTypeRootEntityId", "r2"."Id", "r2"."Int", "r2"."Ints", "r2"."Name", "r2"."String", "r"."RequiredRelated_OptionalNested_Id", "r"."RequiredRelated_OptionalNested_Int", "r"."RequiredRelated_OptionalNested_Ints", "r"."RequiredRelated_OptionalNested_Name", "r"."RequiredRelated_OptionalNested_String", "r"."RequiredRelated_RequiredNested_Id", "r"."RequiredRelated_RequiredNested_Int", "r"."RequiredRelated_RequiredNested_Ints", "r"."RequiredRelated_RequiredNested_Name", "r"."RequiredRelated_RequiredNested_String" FROM "RootEntity" AS "r" LEFT JOIN "OptionalRelated_NestedCollection" AS "o" ON CASE - WHEN "r"."OptionalRelated_Id" IS NOT NULL AND "r"."OptionalRelated_Int" IS NOT NULL AND "r"."OptionalRelated_Name" IS NOT NULL AND "r"."OptionalRelated_String" IS NOT NULL THEN "r"."Id" + WHEN "r"."OptionalRelated_Id" IS NOT NULL AND "r"."OptionalRelated_Int" IS NOT NULL AND "r"."OptionalRelated_Ints" IS NOT NULL AND "r"."OptionalRelated_Name" IS NOT NULL AND "r"."OptionalRelated_String" IS NOT NULL THEN "r"."Id" END = "o"."RelatedTypeRootEntityId" LEFT JOIN ( - SELECT "r0"."RootEntityId", "r0"."Id", "r0"."Int", "r0"."Name", "r0"."String", "r1"."RelatedTypeRootEntityId", "r1"."RelatedTypeId", "r1"."Id" AS "Id0", "r1"."Int" AS "Int0", "r1"."Name" AS "Name0", "r1"."String" AS "String0", "r0"."OptionalNested_Id", "r0"."OptionalNested_Int", "r0"."OptionalNested_Name", "r0"."OptionalNested_String", "r0"."RequiredNested_Id", "r0"."RequiredNested_Int", "r0"."RequiredNested_Name", "r0"."RequiredNested_String" + SELECT "r0"."RootEntityId", "r0"."Id", "r0"."Int", "r0"."Ints", "r0"."Name", "r0"."String", "r1"."RelatedTypeRootEntityId", "r1"."RelatedTypeId", "r1"."Id" AS "Id0", "r1"."Int" AS "Int0", "r1"."Ints" AS "Ints0", "r1"."Name" AS "Name0", "r1"."String" AS "String0", "r0"."OptionalNested_Id", "r0"."OptionalNested_Int", "r0"."OptionalNested_Ints", "r0"."OptionalNested_Name", "r0"."OptionalNested_String", "r0"."RequiredNested_Id", "r0"."RequiredNested_Int", "r0"."RequiredNested_Ints", "r0"."RequiredNested_Name", "r0"."RequiredNested_String" FROM "RelatedCollection" AS "r0" LEFT JOIN "RelatedCollection_NestedCollection" AS "r1" ON "r0"."RootEntityId" = "r1"."RelatedTypeRootEntityId" AND "r0"."Id" = "r1"."RelatedTypeId" ) AS "s" ON "r"."Id" = "s"."RootEntityId" diff --git a/test/EFCore.Sqlite.FunctionalTests/Query/NonSharedPrimitiveCollectionsQuerySqliteTest.cs b/test/EFCore.Sqlite.FunctionalTests/Query/NonSharedPrimitiveCollectionsQuerySqliteTest.cs index e3f6f975129..0979106dedd 100644 --- a/test/EFCore.Sqlite.FunctionalTests/Query/NonSharedPrimitiveCollectionsQuerySqliteTest.cs +++ b/test/EFCore.Sqlite.FunctionalTests/Query/NonSharedPrimitiveCollectionsQuerySqliteTest.cs @@ -327,7 +327,7 @@ LIMIT 2 """ SELECT "t"."Id", "t"."Owned" FROM "TestOwner" AS "t" -WHERE "t"."Owned" ->> 'Strings' ->> 1 = 'bar' +WHERE "t"."Owned" ->> '$.Strings[1]' = 'bar' LIMIT 2 """); }