From aca49588a691c3b617502dcd8d67e5eb4b284558 Mon Sep 17 00:00:00 2001 From: Arthur Vickers Date: Fri, 16 Aug 2019 17:11:32 -0700 Subject: [PATCH] Throw better exception message for client eval Fixes #16133 and also partial fix for #15937 This is far from perfect and needs some further work. For example, see #17236 No issues reference #14935 any more; new issues cover things not fixed here but which were refeceing that issue. --- ...osmosProjectionBindingExpressionVisitor.cs | 3 +- ...yableMethodTranslatingExpressionVisitor.cs | 74 +- ...jectionBindingRemovingExpressionVisitor.cs | 2 +- ...yExpressionTranslatingExpressionVisitor.cs | 5 +- ...yableMethodTranslatingExpressionVisitor.cs | 7 +- .../Diagnostics/RelationalEventId.cs | 2 +- .../Diagnostics/RelationalLoggerExtensions.cs | 41 - .../RelationalLoggingDefinitions.cs | 9 - .../Properties/RelationalStrings.Designer.cs | 25 - .../Properties/RelationalStrings.resx | 4 - ...yableMethodTranslatingExpressionVisitor.cs | 63 +- ...lationalSqlTranslatingExpressionVisitor.cs | 13 +- .../Query/SqlExpressionFactory.cs | 6 +- .../Internal/SqliteStringLengthTranslator.cs | 2 +- src/EFCore/DbContextOptionsBuilder.cs | 2 +- src/EFCore/DbContextOptionsBuilder`.cs | 2 +- .../Infrastructure/ExpressionExtensions.cs | 33 +- src/EFCore/Properties/CoreStrings.Designer.cs | 8 + src/EFCore/Properties/CoreStrings.resx | 3 + ...ntityEqualityRewritingExpressionVisitor.cs | 4 +- .../GroupJoinFlatteningExpressionVisitor.cs | 7 +- .../NavigationExpandingExpressionVisitor.cs | 7 +- .../BuiltInDataTypesCosmosTest.cs | 2 +- .../ConcurrencyDetectorCosmosTest.cs | 4 +- .../Query/SimpleQueryCosmosTest.Functions.cs | 162 +-- .../SimpleQueryCosmosTest.JoinGroupJoin.cs | 100 +- .../SimpleQueryCosmosTest.ResultOperators.cs | 48 +- .../Query/SimpleQueryCosmosTest.Select.cs | 47 +- .../Query/SimpleQueryCosmosTest.Where.cs | 109 ++- .../Query/SimpleQueryCosmosTest.cs | 571 ++++++----- .../Query/AsyncSimpleQueryInMemoryTest.cs | 36 + .../Query/CompiledQueryInMemoryTest.cs | 8 + .../Query/FiltersInMemoryTest.cs | 10 + .../Query/IncludeAsyncInMemoryTest.cs | 6 + .../Query/IncludeInMemoryTest.cs | 6 + .../Query/QueryBugsInMemoryTest.cs | 1 + .../Query/QueryNavigationsInMemoryTest.cs | 35 +- .../Query/SimpleQueryInMemoryTest.cs | 503 +++++----- .../Query/QueryNoClientEvalTestBase.cs | 164 ++-- .../Query/UdfDbFunctionTestBase.cs | 297 +++--- .../Query/WarningsTestBase.cs | 74 +- .../TestUtilities/TestSqlLoggerFactory.cs | 2 +- .../BuiltInDataTypesTestBase.cs | 3 +- .../MonsterFixupTestBase.cs | 21 +- .../Query/AsyncGearsOfWarQueryTestBase.cs | 8 +- .../Query/AsyncSimpleQueryTestBase.cs | 23 +- .../Query/CompiledQueryTestBase.cs | 21 +- .../Query/ComplexNavigationsQueryTestBase.cs | 74 +- .../Query/FiltersTestBase.cs | 21 +- .../Query/GearsOfWarQueryTestBase.cs | 303 +++--- .../Query/GroupByQueryTestBase.cs | 76 +- .../Query/IncludeAsyncTestBase.cs | 28 +- .../Query/IncludeTestBase.cs | 81 +- .../Query/OwnedQueryTestBase.cs | 2 +- .../Query/QueryNavigationsTestBase.cs | 235 +++-- .../SimpleQueryTestBase.JoinGroupJoin.cs | 28 +- .../SimpleQueryTestBase.ResultOperators.cs | 233 +++-- .../Query/SimpleQueryTestBase.Select.cs | 25 +- .../Query/SimpleQueryTestBase.Where.cs | 113 ++- .../Query/SimpleQueryTestBase.cs | 564 ++++++----- .../ProceduralQueryExpressionGenerator.cs | 3 +- .../BuiltInDataTypesSqlServerTest.cs | 17 +- .../Query/AsyncSimpleQuerySqlServerTest.cs | 22 +- .../Query/CompiledQuerySqlServerTest.cs | 12 - .../ComplexNavigationsQuerySqlServerTest.cs | 40 - .../Query/DbFunctionsSqlServerTest.cs | 10 +- .../Query/FiltersSqlServerTest.cs | 28 - .../Query/GearsOfWarQuerySqlServerTest.cs | 793 +++------------ ...indRowNumberPagingQuerySqlServerFixture.cs | 18 - .../Query/QueryBugsTest.cs | 78 +- .../Query/QueryLoggingSqlServerTest.cs | 16 +- .../Query/QueryNavigationsSqlServerTest.cs | 191 +--- .../Query/QueryNoClientEvalSqlServerTest.cs | 2 +- .../Query/RowNumberPagingTest.cs | 924 ------------------ ...impleQuerySqlServerTest.ResultOperators.cs | 44 +- .../Query/SimpleQuerySqlServerTest.Select.cs | 59 +- .../Query/SimpleQuerySqlServerTest.Where.cs | 92 -- .../Query/SimpleQuerySqlServerTest.cs | 613 +++--------- .../Query/UdfDbFunctionSqlServerTests.cs | 250 ----- .../Query/WarningsSqlServerTest.cs | 101 +- .../SqlServerComplianceTest.cs | 12 - .../TableSplittingSqlServerTest.cs | 1 + .../BuiltInDataTypesSqliteTest.cs | 23 +- .../Query/BadDataSqliteTest.cs | 1 + .../ComplexNavigationsQuerySqliteTest.cs | 7 +- .../ComplexNavigationsWeakQuerySqliteTest.cs | 8 +- .../Query/GearsOfWarQuerySqliteTest.cs | 137 ++- .../Query/QueryNavigationsSqliteTest.cs | 4 - .../Query/QueryNoClientEvalSqliteTest.cs | 2 +- .../Query/SimpleQuerySqliteTest.cs | 476 ++++++--- .../Query/WarningsSqliteTest.cs | 2 +- .../SqliteComplianceTest.cs | 5 - .../TableSplittingSqliteTest.cs | 1 + 93 files changed, 3203 insertions(+), 5155 deletions(-) delete mode 100644 test/EFCore.SqlServer.FunctionalTests/Query/NorthwindRowNumberPagingQuerySqlServerFixture.cs delete mode 100644 test/EFCore.SqlServer.FunctionalTests/Query/RowNumberPagingTest.cs diff --git a/src/EFCore.Cosmos/Query/Internal/CosmosProjectionBindingExpressionVisitor.cs b/src/EFCore.Cosmos/Query/Internal/CosmosProjectionBindingExpressionVisitor.cs index 82ccd27e23d..917dea49d21 100644 --- a/src/EFCore.Cosmos/Query/Internal/CosmosProjectionBindingExpressionVisitor.cs +++ b/src/EFCore.Cosmos/Query/Internal/CosmosProjectionBindingExpressionVisitor.cs @@ -7,6 +7,7 @@ using System.Linq.Expressions; using System.Reflection; using Microsoft.EntityFrameworkCore.Cosmos.Metadata.Internal; +using Microsoft.EntityFrameworkCore.Diagnostics; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Metadata; using Microsoft.EntityFrameworkCore.Query; @@ -380,7 +381,7 @@ protected override Expression VisitExtension(Expression extensionExpression) return _clientEval ? base.VisitExtension(includeExpression) : null; default: - throw new InvalidOperationException(new ExpressionPrinter().Print(extensionExpression)); + throw new InvalidOperationException(CoreStrings.TranslationFailed(extensionExpression.Print())); } } diff --git a/src/EFCore.Cosmos/Query/Internal/CosmosQueryableMethodTranslatingExpressionVisitor.cs b/src/EFCore.Cosmos/Query/Internal/CosmosQueryableMethodTranslatingExpressionVisitor.cs index 094a16610f6..fe34ce0ac8f 100644 --- a/src/EFCore.Cosmos/Query/Internal/CosmosQueryableMethodTranslatingExpressionVisitor.cs +++ b/src/EFCore.Cosmos/Query/Internal/CosmosQueryableMethodTranslatingExpressionVisitor.cs @@ -7,6 +7,7 @@ using System.Linq.Expressions; using JetBrains.Annotations; using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Metadata; using Microsoft.EntityFrameworkCore.Query; using Microsoft.EntityFrameworkCore.Storage; @@ -58,7 +59,7 @@ public CosmosQueryableMethodTranslatingExpressionVisitor( /// public override ShapedQueryExpression TranslateSubquery(Expression expression) { - throw new NotImplementedException(); + throw new InvalidOperationException(CoreStrings.TranslationFailed(expression.Print())); } /// @@ -91,7 +92,7 @@ protected override ShapedQueryExpression CreateShapedQueryExpression(Type elemen /// protected override ShapedQueryExpression TranslateAll(ShapedQueryExpression source, LambdaExpression predicate) { - throw new NotImplementedException(); + throw new InvalidOperationException(CoreStrings.TranslationFailed(predicate.Print())); } /// @@ -102,7 +103,7 @@ protected override ShapedQueryExpression TranslateAll(ShapedQueryExpression sour /// protected override ShapedQueryExpression TranslateAny(ShapedQueryExpression source, LambdaExpression predicate) { - throw new NotImplementedException(); + throw new InvalidOperationException(CoreStrings.TranslationFailed(predicate.Print())); } /// @@ -118,7 +119,7 @@ protected override ShapedQueryExpression TranslateAverage(ShapedQueryExpression || selectExpression.Limit != null || selectExpression.Offset != null) { - throw new InvalidOperationException(); + throw new InvalidOperationException(CoreStrings.TranslationFailed(selector.Print())); } if (selector != null) @@ -159,7 +160,8 @@ protected override ShapedQueryExpression TranslateCast(ShapedQueryExpression sou /// protected override ShapedQueryExpression TranslateConcat(ShapedQueryExpression source1, ShapedQueryExpression source2) { - throw new NotImplementedException(); + throw new InvalidOperationException(CoreStrings.TranslationFailed( + source1.Print() + "; " + source2.Print())); } /// @@ -170,7 +172,7 @@ protected override ShapedQueryExpression TranslateConcat(ShapedQueryExpression s /// protected override ShapedQueryExpression TranslateContains(ShapedQueryExpression source, Expression item) { - throw new NotImplementedException(); + throw new InvalidOperationException(CoreStrings.TranslationFailed(item.Print())); } /// @@ -186,7 +188,7 @@ protected override ShapedQueryExpression TranslateCount(ShapedQueryExpression so || selectExpression.Limit != null || selectExpression.Offset != null) { - throw new InvalidOperationException(); + throw new InvalidOperationException(CoreStrings.TranslationFailed(predicate.Print())); } if (predicate != null) @@ -217,7 +219,7 @@ protected override ShapedQueryExpression TranslateCount(ShapedQueryExpression so /// protected override ShapedQueryExpression TranslateDefaultIfEmpty(ShapedQueryExpression source, Expression defaultValue) { - throw new NotImplementedException(); + throw new InvalidOperationException(CoreStrings.TranslationFailed(defaultValue.Print())); } /// @@ -241,7 +243,7 @@ protected override ShapedQueryExpression TranslateDistinct(ShapedQueryExpression /// protected override ShapedQueryExpression TranslateElementAtOrDefault(ShapedQueryExpression source, Expression index, bool returnDefault) { - throw new NotImplementedException(); + throw new InvalidOperationException(CoreStrings.TranslationFailed(index.Print())); } /// @@ -252,7 +254,8 @@ protected override ShapedQueryExpression TranslateElementAtOrDefault(ShapedQuery /// protected override ShapedQueryExpression TranslateExcept(ShapedQueryExpression source1, ShapedQueryExpression source2) { - throw new NotImplementedException(); + throw new InvalidOperationException(CoreStrings.TranslationFailed( + source1.Print() + "; " + source2.Print())); } /// @@ -287,7 +290,8 @@ protected override ShapedQueryExpression TranslateFirstOrDefault(ShapedQueryExpr /// protected override ShapedQueryExpression TranslateGroupBy(ShapedQueryExpression source, LambdaExpression keySelector, LambdaExpression elementSelector, LambdaExpression resultSelector) { - throw new NotImplementedException(); + throw new InvalidOperationException(CoreStrings.TranslationFailed( + keySelector.Print() + "; " + elementSelector.Print() + "; " + resultSelector.Print())); } /// @@ -298,7 +302,8 @@ protected override ShapedQueryExpression TranslateGroupBy(ShapedQueryExpression /// protected override ShapedQueryExpression TranslateGroupJoin(ShapedQueryExpression outer, ShapedQueryExpression inner, LambdaExpression outerKeySelector, LambdaExpression innerKeySelector, LambdaExpression resultSelector) { - throw new NotImplementedException(); + throw new InvalidOperationException(CoreStrings.TranslationFailed( + outerKeySelector.Print() + "; " + innerKeySelector.Print() + "; " + resultSelector.Print())); } /// @@ -309,7 +314,8 @@ protected override ShapedQueryExpression TranslateGroupJoin(ShapedQueryExpressio /// protected override ShapedQueryExpression TranslateIntersect(ShapedQueryExpression source1, ShapedQueryExpression source2) { - throw new NotImplementedException(); + throw new InvalidOperationException(CoreStrings.TranslationFailed( + source1.Print() + "; " + source2.Print())); } /// @@ -320,7 +326,8 @@ protected override ShapedQueryExpression TranslateIntersect(ShapedQueryExpressio /// protected override ShapedQueryExpression TranslateJoin(ShapedQueryExpression outer, ShapedQueryExpression inner, LambdaExpression outerKeySelector, LambdaExpression innerKeySelector, LambdaExpression resultSelector) { - throw new NotImplementedException(); + throw new InvalidOperationException(CoreStrings.TranslationFailed( + outerKeySelector.Print() + "; " + innerKeySelector.Print() + "; " + resultSelector.Print())); } /// @@ -356,7 +363,8 @@ protected override ShapedQueryExpression TranslateLastOrDefault(ShapedQueryExpre /// protected override ShapedQueryExpression TranslateLeftJoin(ShapedQueryExpression outer, ShapedQueryExpression inner, LambdaExpression outerKeySelector, LambdaExpression innerKeySelector, LambdaExpression resultSelector) { - throw new NotImplementedException(); + throw new InvalidOperationException(CoreStrings.TranslationFailed( + outerKeySelector.Print() + "; " + innerKeySelector.Print() + "; " + resultSelector.Print())); } /// @@ -372,7 +380,7 @@ protected override ShapedQueryExpression TranslateLongCount(ShapedQueryExpressio || selectExpression.Limit != null || selectExpression.Offset != null) { - throw new InvalidOperationException(); + throw new InvalidOperationException(CoreStrings.TranslationFailed(predicate.Print())); } if (predicate != null) @@ -407,7 +415,7 @@ protected override ShapedQueryExpression TranslateMax(ShapedQueryExpression sour || selectExpression.Limit != null || selectExpression.Offset != null) { - throw new InvalidOperationException(); + throw new InvalidOperationException(CoreStrings.TranslationFailed(selector.Print())); } if (selector != null) @@ -435,7 +443,7 @@ protected override ShapedQueryExpression TranslateMin(ShapedQueryExpression sour || selectExpression.Limit != null || selectExpression.Offset != null) { - throw new InvalidOperationException(); + throw new InvalidOperationException(CoreStrings.TranslationFailed(selector.Print())); } if (selector != null) @@ -458,7 +466,7 @@ protected override ShapedQueryExpression TranslateMin(ShapedQueryExpression sour /// protected override ShapedQueryExpression TranslateOfType(ShapedQueryExpression source, Type resultType) { - throw new NotImplementedException(); + throw new InvalidOperationException(CoreStrings.TranslationFailed(source.Print())); } /// @@ -477,7 +485,7 @@ protected override ShapedQueryExpression TranslateOrderBy(ShapedQueryExpression return source; } - throw new InvalidOperationException(); + throw new InvalidOperationException(CoreStrings.TranslationFailed(keySelector.Print())); } /// @@ -488,7 +496,7 @@ protected override ShapedQueryExpression TranslateOrderBy(ShapedQueryExpression /// protected override ShapedQueryExpression TranslateReverse(ShapedQueryExpression source) { - throw new NotImplementedException(); + throw new InvalidOperationException(CoreStrings.TranslationFailed(source.Print())); } /// @@ -507,7 +515,7 @@ protected override ShapedQueryExpression TranslateSelect(ShapedQueryExpression s var selectExpression = (SelectExpression)source.QueryExpression; if (selectExpression.IsDistinct) { - throw new InvalidOperationException(); + throw new InvalidOperationException(CoreStrings.TranslationFailed(selector.Print())); } var newSelectorBody = ReplacingExpressionVisitor.Replace(selector.Parameters.Single(), source.ShaperExpression, selector.Body); @@ -526,7 +534,8 @@ protected override ShapedQueryExpression TranslateSelect(ShapedQueryExpression s /// protected override ShapedQueryExpression TranslateSelectMany(ShapedQueryExpression source, LambdaExpression collectionSelector, LambdaExpression resultSelector) { - throw new NotImplementedException(); + throw new InvalidOperationException(CoreStrings.TranslationFailed( + collectionSelector.Print() + "; " + resultSelector.Print())); } /// @@ -537,7 +546,7 @@ protected override ShapedQueryExpression TranslateSelectMany(ShapedQueryExpressi /// protected override ShapedQueryExpression TranslateSelectMany(ShapedQueryExpression source, LambdaExpression selector) { - throw new NotImplementedException(); + throw new InvalidOperationException(CoreStrings.TranslationFailed(selector.Print())); } /// @@ -582,7 +591,7 @@ protected override ShapedQueryExpression TranslateSkip(ShapedQueryExpression sou return source; } - throw new NotImplementedException(); + throw new InvalidOperationException(CoreStrings.TranslationFailed(count.Print())); } /// @@ -593,7 +602,7 @@ protected override ShapedQueryExpression TranslateSkip(ShapedQueryExpression sou /// protected override ShapedQueryExpression TranslateSkipWhile(ShapedQueryExpression source, LambdaExpression predicate) { - throw new NotImplementedException(); + throw new InvalidOperationException(CoreStrings.TranslationFailed(predicate.Print())); } /// @@ -609,7 +618,7 @@ protected override ShapedQueryExpression TranslateSum(ShapedQueryExpression sour || selectExpression.Limit != null || selectExpression.Offset != null) { - throw new InvalidOperationException(); + throw new InvalidOperationException(CoreStrings.TranslationFailed(selector.Print())); } if (selector != null) @@ -644,7 +653,7 @@ protected override ShapedQueryExpression TranslateTake(ShapedQueryExpression sou return source; } - throw new NotImplementedException(); + throw new InvalidOperationException(CoreStrings.TranslationFailed(count.Print())); } /// @@ -655,7 +664,7 @@ protected override ShapedQueryExpression TranslateTake(ShapedQueryExpression sou /// protected override ShapedQueryExpression TranslateTakeWhile(ShapedQueryExpression source, LambdaExpression predicate) { - throw new NotImplementedException(); + throw new InvalidOperationException(CoreStrings.TranslationFailed(predicate.Print())); } /// @@ -674,7 +683,7 @@ protected override ShapedQueryExpression TranslateThenBy(ShapedQueryExpression s return source; } - throw new InvalidOperationException(); + throw new InvalidOperationException(CoreStrings.TranslationFailed(keySelector.Print())); } /// @@ -685,7 +694,8 @@ protected override ShapedQueryExpression TranslateThenBy(ShapedQueryExpression s /// protected override ShapedQueryExpression TranslateUnion(ShapedQueryExpression source1, ShapedQueryExpression source2) { - throw new NotImplementedException(); + throw new InvalidOperationException(CoreStrings.TranslationFailed( + source1.Print() + "; " + source2.Print())); } /// @@ -704,7 +714,7 @@ protected override ShapedQueryExpression TranslateWhere(ShapedQueryExpression so return source; } - throw new InvalidOperationException("Unable to translate Where expression: " + new ExpressionPrinter().Print(predicate)); + throw new InvalidOperationException(CoreStrings.TranslationFailed(predicate.Print())); } private SqlExpression TranslateExpression(Expression expression) diff --git a/src/EFCore.Cosmos/Query/Internal/CosmosShapedQueryCompilingExpressionVisitor.CosmosProjectionBindingRemovingExpressionVisitor.cs b/src/EFCore.Cosmos/Query/Internal/CosmosShapedQueryCompilingExpressionVisitor.CosmosProjectionBindingRemovingExpressionVisitor.cs index 10856f6e9cd..fc2262ebfbe 100644 --- a/src/EFCore.Cosmos/Query/Internal/CosmosShapedQueryCompilingExpressionVisitor.CosmosProjectionBindingRemovingExpressionVisitor.cs +++ b/src/EFCore.Cosmos/Query/Internal/CosmosShapedQueryCompilingExpressionVisitor.CosmosProjectionBindingRemovingExpressionVisitor.cs @@ -263,7 +263,7 @@ protected override Expression VisitExtension(Expression extensionExpression) || fk.DeclaringEntityType.IsDocumentRoot()) { throw new InvalidOperationException( - "Non-embedded IncludeExpression " + new ExpressionPrinter().Print(includeExpression)); + "Non-embedded IncludeExpression " + includeExpression.Print()); } // These are the expressions added by JObjectInjectingExpressionVisitor diff --git a/src/EFCore.InMemory/Query/Internal/InMemoryExpressionTranslatingExpressionVisitor.cs b/src/EFCore.InMemory/Query/Internal/InMemoryExpressionTranslatingExpressionVisitor.cs index 9e09505096e..191e4d9b797 100644 --- a/src/EFCore.InMemory/Query/Internal/InMemoryExpressionTranslatingExpressionVisitor.cs +++ b/src/EFCore.InMemory/Query/Internal/InMemoryExpressionTranslatingExpressionVisitor.cs @@ -6,6 +6,7 @@ using System.Linq; using System.Linq.Expressions; using System.Reflection; +using Microsoft.EntityFrameworkCore.Diagnostics; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Metadata; using Microsoft.EntityFrameworkCore.Query; @@ -113,7 +114,7 @@ private Expression BindProperty(Expression source, string propertyName, Type typ : Expression.Convert(result, type); } - throw new InvalidOperationException(); + throw new InvalidOperationException(CoreStrings.TranslationFailed(source.Print())); } private Expression BindProperty(EntityProjectionExpression entityProjectionExpression, IProperty property) @@ -299,7 +300,7 @@ protected override Expression VisitParameter(ParameterExpression parameterExpres Expression.Constant(parameterExpression.Name)); } - throw new InvalidOperationException(); + throw new InvalidOperationException(CoreStrings.TranslationFailed(parameterExpression.Print())); } private static readonly MethodInfo _getParameterValueMethodInfo diff --git a/src/EFCore.InMemory/Query/Internal/InMemoryQueryableMethodTranslatingExpressionVisitor.cs b/src/EFCore.InMemory/Query/Internal/InMemoryQueryableMethodTranslatingExpressionVisitor.cs index 1a546128c04..bafde041288 100644 --- a/src/EFCore.InMemory/Query/Internal/InMemoryQueryableMethodTranslatingExpressionVisitor.cs +++ b/src/EFCore.InMemory/Query/Internal/InMemoryQueryableMethodTranslatingExpressionVisitor.cs @@ -5,6 +5,8 @@ using System.Linq; using System.Linq.Expressions; using System.Reflection; +using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Metadata; using Microsoft.EntityFrameworkCore.Query; using Microsoft.EntityFrameworkCore.Storage; @@ -338,7 +340,10 @@ protected override ShapedQueryExpression TranslateSelectMany( if (correlated) { // TODO visit inner with outer parameter; - throw new NotImplementedException(); + // See #17236 + throw new InvalidOperationException(CoreStrings.TranslationFailed( + collectionSelector.Print() + "; " + resultSelector.Print())); + } else { diff --git a/src/EFCore.Relational/Diagnostics/RelationalEventId.cs b/src/EFCore.Relational/Diagnostics/RelationalEventId.cs index d432432e048..b9aa1ea731b 100644 --- a/src/EFCore.Relational/Diagnostics/RelationalEventId.cs +++ b/src/EFCore.Relational/Diagnostics/RelationalEventId.cs @@ -508,7 +508,7 @@ private enum Id /// This event is in the category. /// /// - [Obsolete] + [Obsolete("Automatic client evaluation is no longer supported. This event is no longer generated.")] public static readonly EventId QueryClientEvaluationWarning = MakeQueryId(Id.QueryClientEvaluationWarning); /// diff --git a/src/EFCore.Relational/Diagnostics/RelationalLoggerExtensions.cs b/src/EFCore.Relational/Diagnostics/RelationalLoggerExtensions.cs index e4c349f0371..551d641b13f 100644 --- a/src/EFCore.Relational/Diagnostics/RelationalLoggerExtensions.cs +++ b/src/EFCore.Relational/Diagnostics/RelationalLoggerExtensions.cs @@ -3598,47 +3598,6 @@ private static string MigrationAttributeMissingWarning(EventDefinitionBase defin return d.GenerateMessage(p.MigrationType.Name); } - ///// - ///// Logs for the event. - ///// - ///// The diagnostics logger to use. - ///// The query model. - ///// The element that is being client evaluated. - //public static void QueryClientEvaluationWarning( - // [NotNull] this IDiagnosticsLogger diagnostics, - // [NotNull] QueryModel queryModel, - // [NotNull] object queryModelElement) - //{ - // var definition = RelationalResources.LogClientEvalWarning(diagnostics); - - // var warningBehavior = definition.GetLogBehavior(diagnostics); - // if (warningBehavior != WarningBehavior.Ignore) - // { - // definition.Log( - // diagnostics, - // warningBehavior, - // queryModelElement); - // } - - // if (diagnostics.DiagnosticSource.IsEnabled(definition.EventId.Name)) - // { - // diagnostics.DiagnosticSource.Write( - // definition.EventId.Name, - // new QueryModelClientEvalEventData( - // definition, - // QueryClientEvaluationWarning, - // queryModel, - // queryModelElement)); - // } - //} - - //private static string QueryClientEvaluationWarning(EventDefinitionBase definition, EventData payload) - //{ - // var d = (EventDefinition)definition; - // var p = (QueryModelClientEvalEventData)payload; - // return d.GenerateMessage(p.QueryModelElement); - //} - /// /// Logs for the event. /// diff --git a/src/EFCore.Relational/Diagnostics/RelationalLoggingDefinitions.cs b/src/EFCore.Relational/Diagnostics/RelationalLoggingDefinitions.cs index 788c1aa8312..c70ebffc523 100644 --- a/src/EFCore.Relational/Diagnostics/RelationalLoggingDefinitions.cs +++ b/src/EFCore.Relational/Diagnostics/RelationalLoggingDefinitions.cs @@ -16,15 +16,6 @@ namespace Microsoft.EntityFrameworkCore.Diagnostics /// public abstract class RelationalLoggingDefinitions : LoggingDefinitions { - /// - /// This is an internal API that supports the Entity Framework Core infrastructure and not subject to - /// the same compatibility standards as public APIs. It may be changed or removed without notice in - /// any release. You should only use it directly in your code with extreme caution and knowing that - /// doing so can result in application failures when updating to a new Entity Framework Core release. - /// - [EntityFrameworkInternal] - public EventDefinitionBase LogClientEvalWarning; - /// /// This is an internal API that supports the Entity Framework Core infrastructure and not subject to /// the same compatibility standards as public APIs. It may be changed or removed without notice in diff --git a/src/EFCore.Relational/Properties/RelationalStrings.Designer.cs b/src/EFCore.Relational/Properties/RelationalStrings.Designer.cs index 1b907601147..24447e55f61 100644 --- a/src/EFCore.Relational/Properties/RelationalStrings.Designer.cs +++ b/src/EFCore.Relational/Properties/RelationalStrings.Designer.cs @@ -1254,31 +1254,6 @@ public static EventDefinition LogKeyHasDefaultValue([NotNull] ID return (EventDefinition)definition; } - /// - /// The LINQ expression '{expression}' could not be translated and will be evaluated locally. - /// - [Obsolete] - public static EventDefinition LogClientEvalWarning([NotNull] IDiagnosticsLogger logger) - { - var definition = ((RelationalLoggingDefinitions)logger.Definitions).LogClientEvalWarning; - if (definition == null) - { - definition = LazyInitializer.EnsureInitialized( - ref ((RelationalLoggingDefinitions)logger.Definitions).LogClientEvalWarning, - () => new EventDefinition( - logger.Options, - RelationalEventId.QueryClientEvaluationWarning, - LogLevel.Warning, - "RelationalEventId.QueryClientEvaluationWarning", - level => LoggerMessage.Define( - level, - RelationalEventId.QueryClientEvaluationWarning, - _resourceManager.GetString("LogClientEvalWarning")))); - } - - return (EventDefinition)definition; - } - /// /// Creating DbCommand for '{executionType}'. /// diff --git a/src/EFCore.Relational/Properties/RelationalStrings.resx b/src/EFCore.Relational/Properties/RelationalStrings.resx index 52e44b3ac8f..7df7e5b049d 100644 --- a/src/EFCore.Relational/Properties/RelationalStrings.resx +++ b/src/EFCore.Relational/Properties/RelationalStrings.resx @@ -294,10 +294,6 @@ Property '{property}' on entity type '{entityType}' is part of a primary or alternate key but has a constant default value set. Constant default values are not useful for primary or alternate keys since these properties must always have non-null unique values. Warning RelationalEventId.ModelValidationKeyDefaultValueWarning string string - - The LINQ expression '{expression}' could not be translated and will be evaluated locally. - Obsolete Warning RelationalEventId.QueryClientEvaluationWarning object - No value provided for required parameter '{parameter}'. diff --git a/src/EFCore.Relational/Query/RelationalQueryableMethodTranslatingExpressionVisitor.cs b/src/EFCore.Relational/Query/RelationalQueryableMethodTranslatingExpressionVisitor.cs index 285ebb51052..c03c7c49cb6 100644 --- a/src/EFCore.Relational/Query/RelationalQueryableMethodTranslatingExpressionVisitor.cs +++ b/src/EFCore.Relational/Query/RelationalQueryableMethodTranslatingExpressionVisitor.cs @@ -134,7 +134,7 @@ protected override ShapedQueryExpression TranslateAll(ShapedQueryExpression sour return source; } - throw new InvalidOperationException(); + throw new InvalidOperationException(CoreStrings.TranslationFailed(predicate.Print())); } protected override ShapedQueryExpression TranslateAny(ShapedQueryExpression source, LambdaExpression predicate) @@ -171,6 +171,11 @@ protected override ShapedQueryExpression TranslateAverage(ShapedQueryExpression var projection = _sqlTranslator.TranslateAverage(newSelector); + if (projection == null) + { + throw new InvalidOperationException(CoreStrings.TranslationFailed(selectExpression.Print())); + } + return AggregateResultShaper(source, projection, throwOnNullResult: true, resultType); } @@ -215,7 +220,7 @@ protected override ShapedQueryExpression TranslateContains(ShapedQueryExpression return source; } - throw new NotImplementedException(); + throw new InvalidOperationException(CoreStrings.TranslationFailed(item.Print())); } protected override ShapedQueryExpression TranslateCount(ShapedQueryExpression source, LambdaExpression predicate) @@ -252,7 +257,7 @@ protected override ShapedQueryExpression TranslateDefaultIfEmpty(ShapedQueryExpr return source; } - throw new NotImplementedException(); + throw new InvalidOperationException(CoreStrings.TranslationFailed(defaultValue.Print())); } protected override ShapedQueryExpression TranslateDistinct(ShapedQueryExpression source) @@ -262,7 +267,8 @@ protected override ShapedQueryExpression TranslateDistinct(ShapedQueryExpression return source; } - protected override ShapedQueryExpression TranslateElementAtOrDefault(ShapedQueryExpression source, Expression index, bool returnDefault) => throw new NotImplementedException(); + protected override ShapedQueryExpression TranslateElementAtOrDefault(ShapedQueryExpression source, Expression index, bool returnDefault) + => throw new InvalidOperationException(CoreStrings.TranslationFailed(index.Print())); protected override ShapedQueryExpression TranslateExcept(ShapedQueryExpression source1, ShapedQueryExpression source2) { @@ -337,7 +343,8 @@ protected override ShapedQueryExpression TranslateGroupBy( return source; } - throw new InvalidOperationException(); + throw new InvalidOperationException(CoreStrings.TranslationFailed( + keySelector.Print() + "; " + elementSelector.Print() + "; " + resultSelector.Print())); } private Expression TranslateGroupingKey(Expression expression) @@ -386,6 +393,12 @@ private Expression TranslateGroupingKey(Expression expression) default: var translation = _sqlTranslator.Translate(expression); + + if (translation == null) + { + throw new InvalidOperationException(CoreStrings.TranslationFailed(expression.Print())); + } + return translation.Type == expression.Type ? (Expression)translation : Expression.Convert(translation, expression.Type); @@ -434,7 +447,9 @@ protected override ShapedQueryExpression TranslateGroupJoin(ShapedQueryExpressio // innerTransparentIdentifierType); //} - throw new NotImplementedException(); + // See #17236 + throw new InvalidOperationException(CoreStrings.TranslationFailed( + outerKeySelector.Print() + "; " + innerKeySelector.Print() + "; " + resultSelector.Print())); } protected override ShapedQueryExpression TranslateIntersect(ShapedQueryExpression source1, ShapedQueryExpression source2) @@ -469,7 +484,9 @@ protected override ShapedQueryExpression TranslateJoin( transparentIdentifierType); } - throw new NotImplementedException(); + // See #17236 + throw new InvalidOperationException(CoreStrings.TranslationFailed( + outerKeySelector.Print() + "; " + innerKeySelector.Print() + "; " + resultSelector.Print())); } protected override ShapedQueryExpression TranslateLeftJoin(ShapedQueryExpression outer, ShapedQueryExpression inner, LambdaExpression outerKeySelector, LambdaExpression innerKeySelector, LambdaExpression resultSelector) @@ -491,7 +508,9 @@ protected override ShapedQueryExpression TranslateLeftJoin(ShapedQueryExpression transparentIdentifierType); } - throw new NotImplementedException(); + // See #17236 + throw new InvalidOperationException(CoreStrings.TranslationFailed( + outerKeySelector.Print() + "; " + innerKeySelector.Print() + "; " + resultSelector.Print())); } private SqlBinaryExpression CreateJoinPredicate( @@ -690,10 +709,11 @@ protected override ShapedQueryExpression TranslateOrderBy(ShapedQueryExpression return source; } - throw new InvalidOperationException(); + throw new InvalidOperationException(CoreStrings.TranslationFailed(keySelector.Print())); } - protected override ShapedQueryExpression TranslateReverse(ShapedQueryExpression source) => throw new NotImplementedException(); + protected override ShapedQueryExpression TranslateReverse(ShapedQueryExpression source) + => throw new InvalidOperationException(CoreStrings.TranslationFailed(source.Print())); protected override ShapedQueryExpression TranslateSelect(ShapedQueryExpression source, LambdaExpression selector) { @@ -773,7 +793,9 @@ protected override ShapedQueryExpression TranslateSelectMany( } } - throw new NotImplementedException(); + // See #17236 + throw new InvalidOperationException(CoreStrings.TranslationFailed( + collectionSelector.Print() + "; " + resultSelector.Print())); } private class CorrelationFindingExpressionVisitor : ExpressionVisitor @@ -862,10 +884,11 @@ protected override ShapedQueryExpression TranslateSkip(ShapedQueryExpression sou return source; } - throw new NotImplementedException(); + throw new InvalidOperationException(CoreStrings.TranslationFailed(count.Print())); } - protected override ShapedQueryExpression TranslateSkipWhile(ShapedQueryExpression source, LambdaExpression predicate) => throw new NotImplementedException(); + protected override ShapedQueryExpression TranslateSkipWhile(ShapedQueryExpression source, LambdaExpression predicate) + => throw new InvalidOperationException(CoreStrings.TranslationFailed(predicate.Print())); protected override ShapedQueryExpression TranslateSum(ShapedQueryExpression source, LambdaExpression selector, Type resultType) { @@ -878,6 +901,11 @@ protected override ShapedQueryExpression TranslateSum(ShapedQueryExpression sour var projection = _sqlTranslator.TranslateSum(newSelector); + if (projection == null) + { + throw new InvalidOperationException(CoreStrings.TranslationFailed(selectExpression.Print())); + } + return AggregateResultShaper(source, projection, throwOnNullResult: false, resultType); } @@ -893,10 +921,11 @@ protected override ShapedQueryExpression TranslateTake(ShapedQueryExpression sou return source; } - throw new NotImplementedException(); + throw new InvalidOperationException(CoreStrings.TranslationFailed(count.Print())); } - protected override ShapedQueryExpression TranslateTakeWhile(ShapedQueryExpression source, LambdaExpression predicate) => throw new NotImplementedException(); + protected override ShapedQueryExpression TranslateTakeWhile(ShapedQueryExpression source, LambdaExpression predicate) + => throw new InvalidOperationException(CoreStrings.TranslationFailed(predicate.Print())); protected override ShapedQueryExpression TranslateThenBy(ShapedQueryExpression source, LambdaExpression keySelector, bool ascending) { @@ -908,7 +937,7 @@ protected override ShapedQueryExpression TranslateThenBy(ShapedQueryExpression s return source; } - throw new InvalidOperationException(); + throw new InvalidOperationException(CoreStrings.TranslationFailed(keySelector.Print())); } protected override ShapedQueryExpression TranslateUnion(ShapedQueryExpression source1, ShapedQueryExpression source2) @@ -929,7 +958,7 @@ protected override ShapedQueryExpression TranslateWhere(ShapedQueryExpression so return source; } - throw new InvalidOperationException(); + throw new InvalidOperationException(CoreStrings.TranslationFailed(predicate.Print())); } private SqlExpression TranslateExpression(Expression expression) diff --git a/src/EFCore.Relational/Query/RelationalSqlTranslatingExpressionVisitor.cs b/src/EFCore.Relational/Query/RelationalSqlTranslatingExpressionVisitor.cs index 536b60227bf..3f513617c0a 100644 --- a/src/EFCore.Relational/Query/RelationalSqlTranslatingExpressionVisitor.cs +++ b/src/EFCore.Relational/Query/RelationalSqlTranslatingExpressionVisitor.cs @@ -6,6 +6,7 @@ using System.Linq; using System.Linq.Expressions; using System.Reflection; +using Microsoft.EntityFrameworkCore.Diagnostics; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Internal; using Microsoft.EntityFrameworkCore.Metadata; @@ -74,6 +75,11 @@ public virtual SqlExpression TranslateAverage(Expression expression) sqlExpression = Translate(expression); } + if (sqlExpression == null) + { + throw new InvalidOperationException(CoreStrings.TranslationFailed(expression.Print())); + } + var inputType = sqlExpression.Type.UnwrapNullableType(); if (inputType == typeof(int) || inputType == typeof(long)) @@ -133,6 +139,11 @@ public virtual SqlExpression TranslateSum(Expression expression) sqlExpression = Translate(expression); } + if (sqlExpression == null) + { + throw new InvalidOperationException(CoreStrings.TranslationFailed(expression.Print())); + } + var inputType = sqlExpression.Type.UnwrapNullableType(); return inputType == typeof(float) @@ -267,7 +278,7 @@ private Expression GetSelector(MethodCallExpression methodCallExpression, GroupB selectorLambda.Body); } - throw new InvalidOperationException(); + throw new InvalidOperationException(CoreStrings.TranslationFailed(methodCallExpression.Print())); } protected override Expression VisitMethodCall(MethodCallExpression methodCallExpression) diff --git a/src/EFCore.Relational/Query/SqlExpressionFactory.cs b/src/EFCore.Relational/Query/SqlExpressionFactory.cs index b241b67a34e..f5312bb390c 100644 --- a/src/EFCore.Relational/Query/SqlExpressionFactory.cs +++ b/src/EFCore.Relational/Query/SqlExpressionFactory.cs @@ -5,6 +5,8 @@ using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; +using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Metadata; using Microsoft.EntityFrameworkCore.Query.SqlExpressions; using Microsoft.EntityFrameworkCore.Storage; @@ -104,7 +106,7 @@ private SqlExpression ApplyTypeMappingOnSqlUnary( break; default: - throw new InvalidOperationException(); + throw new InvalidOperationException(CoreStrings.TranslationFailed(sqlUnaryExpression.Print())); } return new SqlUnaryExpression( @@ -396,7 +398,7 @@ public virtual InExpression In(SqlExpression item, SelectExpression subquery, bo if (typeMapping == null) { - throw new InvalidOperationException(); + throw new InvalidOperationException(CoreStrings.TranslationFailed(item.Print())); } item = ApplyTypeMapping(item, typeMapping); diff --git a/src/EFCore.Sqlite.Core/Query/Internal/SqliteStringLengthTranslator.cs b/src/EFCore.Sqlite.Core/Query/Internal/SqliteStringLengthTranslator.cs index 0a4771739b3..8d41ef74e4a 100644 --- a/src/EFCore.Sqlite.Core/Query/Internal/SqliteStringLengthTranslator.cs +++ b/src/EFCore.Sqlite.Core/Query/Internal/SqliteStringLengthTranslator.cs @@ -19,7 +19,7 @@ public SqliteStringLengthTranslator(ISqlExpressionFactory sqlExpressionFactory) public virtual SqlExpression Translate(SqlExpression instance, MemberInfo member, Type returnType) { - return instance.Type == typeof(string) + return instance?.Type == typeof(string) && member.Name == nameof(string.Length) ? _sqlExpressionFactory.Function("length", new[] { instance }, returnType) : null; diff --git a/src/EFCore/DbContextOptionsBuilder.cs b/src/EFCore/DbContextOptionsBuilder.cs index 03cd37a8398..58989b7adfe 100644 --- a/src/EFCore/DbContextOptionsBuilder.cs +++ b/src/EFCore/DbContextOptionsBuilder.cs @@ -258,7 +258,7 @@ public virtual DbContextOptionsBuilder UseQueryTrackingBehavior(QueryTrackingBeh /// optionsBuilder.ConfigureWarnings(warnings => /// warnings.Default(WarningBehavior.Ignore) /// .Log(CoreEventId.IncludeIgnoredWarning, CoreEventId.ModelValidationWarning) - /// .Throw(RelationalEventId.QueryClientEvaluationWarning)) + /// .Throw(RelationalEventId.BoolWithDefaultWarning)) /// /// /// diff --git a/src/EFCore/DbContextOptionsBuilder`.cs b/src/EFCore/DbContextOptionsBuilder`.cs index 9c2cd688f10..9eb598ad238 100644 --- a/src/EFCore/DbContextOptionsBuilder`.cs +++ b/src/EFCore/DbContextOptionsBuilder`.cs @@ -232,7 +232,7 @@ public DbContextOptionsBuilder([NotNull] DbContextOptions options) /// optionsBuilder.ConfigureWarnings(warnings => /// warnings.Default(WarningBehavior.Ignore) /// .Log(CoreEventId.IncludeIgnoredWarning, CoreEventId.ModelValidationWarning) - /// .Throw(RelationalEventId.QueryClientEvaluationWarning)) + /// .Throw(RelationalEventId.BoolWithDefaultWarning)) /// /// /// diff --git a/src/EFCore/Infrastructure/ExpressionExtensions.cs b/src/EFCore/Infrastructure/ExpressionExtensions.cs index 3f49057c332..44dde942e5e 100644 --- a/src/EFCore/Infrastructure/ExpressionExtensions.cs +++ b/src/EFCore/Infrastructure/ExpressionExtensions.cs @@ -10,6 +10,7 @@ using JetBrains.Annotations; using Microsoft.EntityFrameworkCore.Diagnostics; using Microsoft.EntityFrameworkCore.Internal; +using Microsoft.EntityFrameworkCore.Query; using Microsoft.EntityFrameworkCore.Utilities; namespace Microsoft.EntityFrameworkCore.Infrastructure @@ -25,6 +26,16 @@ namespace Microsoft.EntityFrameworkCore.Infrastructure /// public static class ExpressionExtensions { + /// + /// Creates a printable string representation of the given expression. + /// + /// The expression. + /// If true, then internal formatting is removed. + /// An optional limit to the number of characters included. + /// The printable representation. + public static string Print([NotNull] this Expression expression, bool removeFormatting = false, int? characterLimit = null) + => new ExpressionPrinter().Print(Check.NotNull(expression, nameof(expression)), removeFormatting, characterLimit); + /// /// Creates a that represents accessing either a field or a property. /// @@ -77,13 +88,13 @@ private static readonly Type _assignBinaryExpressionType = typeof(Expression).Assembly.GetType("System.Linq.Expressions.AssignBinaryExpression"); /// - /// If the given a method-call expression represents a call to , then this - /// method extracts the entity expression and property name. + /// If the given a method-call expression represents a call to , then this + /// method extracts the entity expression and property name. /// - /// The method-call expression for + /// The method-call expression for /// The extracted entity access expression. /// The accessed property name. - /// True if the method-call was for ; false otherwise. + /// True if the method-call was for ; false otherwise. public static bool TryGetEFPropertyArguments( [NotNull] this MethodCallExpression methodCallExpression, out Expression entityExpression, @@ -102,15 +113,15 @@ public static bool TryGetEFPropertyArguments( } /// - /// - /// Gets the represented by a simple property-access expression. - /// - /// - /// This method is typically used to parse property access lambdas from fluent APIs. - /// + /// + /// Gets the represented by a simple property-access expression. + /// + /// + /// This method is typically used to parse property access lambdas from fluent APIs. + /// /// /// The expression. - /// The . + /// The . public static PropertyInfo GetPropertyAccess([NotNull] this LambdaExpression propertyAccessExpression) { Debug.Assert(propertyAccessExpression.Parameters.Count == 1); diff --git a/src/EFCore/Properties/CoreStrings.Designer.cs b/src/EFCore/Properties/CoreStrings.Designer.cs index adaff17964d..78537b583bd 100644 --- a/src/EFCore/Properties/CoreStrings.Designer.cs +++ b/src/EFCore/Properties/CoreStrings.Designer.cs @@ -32,6 +32,14 @@ public static string CircularDependency([CanBeNull] object cycle) GetString("CircularDependency", nameof(cycle)), cycle); + /// + /// The LINQ expression '{expression}' could not be translated. Either rewrite the query in a form that can be translated, or switch to client evaluation explicitly by inserting a call to either AsEnumerable(), AsAsyncEnumerable(), ToList(), or ToListAsync(). See https://go.microsoft.com/fwlink/?linkid=2101038 for more information. + /// + public static string TranslationFailed([CanBeNull] object expression) + => string.Format( + GetString("TranslationFailed", nameof(expression)), + expression); + /// /// The model must be finalized before '{method}' can be used. Ensure that either 'OnModelCreating' has completed or, if using a stand-alone 'ModelBuilder', that 'FinalizeModel' has been called. /// diff --git a/src/EFCore/Properties/CoreStrings.resx b/src/EFCore/Properties/CoreStrings.resx index 852db4e5ba3..36dc35eb19f 100644 --- a/src/EFCore/Properties/CoreStrings.resx +++ b/src/EFCore/Properties/CoreStrings.resx @@ -120,6 +120,9 @@ Unable to save changes because a circular dependency was detected in the data to be saved: '{cycle}'. + + The LINQ expression '{expression}' could not be translated. Either rewrite the query in a form that can be translated, or switch to client evaluation explicitly by inserting a call to either AsEnumerable(), AsAsyncEnumerable(), ToList(), or ToListAsync(). See https://go.microsoft.com/fwlink/?linkid=2101038 for more information. + The model must be finalized before '{method}' can be used. Ensure that either 'OnModelCreating' has completed or, if using a stand-alone 'ModelBuilder', that 'FinalizeModel' has been called. diff --git a/src/EFCore/Query/Internal/EntityEqualityRewritingExpressionVisitor.cs b/src/EFCore/Query/Internal/EntityEqualityRewritingExpressionVisitor.cs index ea6ee1cb7a2..d4006ac917b 100644 --- a/src/EFCore/Query/Internal/EntityEqualityRewritingExpressionVisitor.cs +++ b/src/EFCore/Query/Internal/EntityEqualityRewritingExpressionVisitor.cs @@ -530,7 +530,7 @@ protected virtual Expression VisitSelectMethodCall(MethodCallExpression methodCa ? methodCallExpression.Update(null, new[] { newSource, Unwrap(Visit(arguments[1])) }) : arguments.Count == 3 ? methodCallExpression.Update(null, new[] { newSource, Unwrap(Visit(arguments[1])), Unwrap(Visit(arguments[2])) }) - : throw new InvalidOperationException(); + : throw new InvalidOperationException(CoreStrings.TranslationFailed(methodCallExpression.Print())); } MethodCallExpression newMethodCall; @@ -562,7 +562,7 @@ protected virtual Expression VisitSelectMethodCall(MethodCallExpression methodCa : (Expression)newMethodCall; } - throw new InvalidOperationException(); + throw new InvalidOperationException(CoreStrings.TranslationFailed(methodCallExpression.Print())); } protected virtual Expression VisitJoinMethodCall(MethodCallExpression methodCallExpression) diff --git a/src/EFCore/Query/Internal/GroupJoinFlatteningExpressionVisitor.cs b/src/EFCore/Query/Internal/GroupJoinFlatteningExpressionVisitor.cs index 9e5e30c766a..0267870063e 100644 --- a/src/EFCore/Query/Internal/GroupJoinFlatteningExpressionVisitor.cs +++ b/src/EFCore/Query/Internal/GroupJoinFlatteningExpressionVisitor.cs @@ -5,6 +5,8 @@ using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; +using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Internal; namespace Microsoft.EntityFrameworkCore.Query.Internal @@ -183,7 +185,10 @@ protected override Expression VisitMethodCall(MethodCallExpression methodCallExp if (correlatedCollectionSelector) { - throw new NotImplementedException(); + // See #17236 + throw new InvalidOperationException(CoreStrings.TranslationFailed( + outerKeySelector.Print() + "; " + innerKeySelector.Print() + "; " + groupJoinResultSelector.Print())); + //var outerParameter = outerKeySelector.Parameters[0]; //var innerParameter = innerKeySelector.Parameters[0]; //var correlationPredicate = Expression.Equal( diff --git a/src/EFCore/Query/Internal/NavigationExpandingExpressionVisitor.cs b/src/EFCore/Query/Internal/NavigationExpandingExpressionVisitor.cs index ec492c42780..36222929065 100644 --- a/src/EFCore/Query/Internal/NavigationExpandingExpressionVisitor.cs +++ b/src/EFCore/Query/Internal/NavigationExpandingExpressionVisitor.cs @@ -7,6 +7,7 @@ using System.Linq.Expressions; using System.Reflection; using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Internal; using Microsoft.EntityFrameworkCore.Metadata; using Microsoft.EntityFrameworkCore.Metadata.Internal; @@ -510,7 +511,7 @@ when QueryableMethods.IsSumWithSelector(method): return ProcessDefaultIfEmpty(source); default: - throw new NotImplementedException($"Unhandled method in navigation expansion: {method.Name}"); + throw new InvalidOperationException(CoreStrings.TranslationFailed(methodCallExpression.Print())); } } else if (firstArgument is MaterializeCollectionNavigationExpression materializeCollectionNavigationExpression @@ -535,7 +536,7 @@ when QueryableMethods.IsSumWithSelector(method): return new NavigationExpansionExpression(methodCallExpression, currentTree, currentTree, parameterName); } - throw new NotImplementedException("NonNavSource"); + throw new InvalidOperationException(CoreStrings.TranslationFailed(methodCallExpression.Print())); } if (method.IsGenericMethod @@ -796,7 +797,7 @@ private Expression ProcessSelectMany( return new NavigationExpansionExpression(newSource, currentTree, pendingSelector, parameterName); } - throw new InvalidOperationException("SelectMany's collectionSelector was not NavigationExpansionExpression"); + throw new InvalidOperationException(CoreStrings.TranslationFailed(collectionSelector.Print())); } private void ApplyPendingOrderings(NavigationExpansionExpression source) diff --git a/test/EFCore.Cosmos.FunctionalTests/BuiltInDataTypesCosmosTest.cs b/test/EFCore.Cosmos.FunctionalTests/BuiltInDataTypesCosmosTest.cs index 3527c62c34c..c605787330f 100644 --- a/test/EFCore.Cosmos.FunctionalTests/BuiltInDataTypesCosmosTest.cs +++ b/test/EFCore.Cosmos.FunctionalTests/BuiltInDataTypesCosmosTest.cs @@ -80,7 +80,7 @@ public override void Can_insert_and_read_back_with_binary_key() public override void Can_perform_query_with_max_length() { - // TODO: Better translation of sequential equality #14935 + // TODO: Better translation of sequential equality #17246 } public class BuiltInDataTypesCosmosFixture : BuiltInDataTypesFixtureBase diff --git a/test/EFCore.Cosmos.FunctionalTests/ConcurrencyDetectorCosmosTest.cs b/test/EFCore.Cosmos.FunctionalTests/ConcurrencyDetectorCosmosTest.cs index 20dd8127ea9..397b0740955 100644 --- a/test/EFCore.Cosmos.FunctionalTests/ConcurrencyDetectorCosmosTest.cs +++ b/test/EFCore.Cosmos.FunctionalTests/ConcurrencyDetectorCosmosTest.cs @@ -15,13 +15,13 @@ public ConcurrencyDetectorCosmosTest(NorthwindQueryCosmosFixture 0.0)))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_math_log(bool isAsync) { await base.Where_math_log(isAsync); @@ -445,7 +445,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""OrderDetail"") AND ((c[""OrderID""] = 11077) AND (c[""Discount""] > 0.0)))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_math_log_new_base(bool isAsync) { await base.Where_math_log_new_base(isAsync); @@ -456,7 +456,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""OrderDetail"") AND ((c[""OrderID""] = 11077) AND (c[""Discount""] > 0.0)))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_math_sqrt(bool isAsync) { await base.Where_math_sqrt(isAsync); @@ -467,7 +467,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""OrderDetail"") AND (c[""OrderID""] = 11077))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_math_acos(bool isAsync) { await base.Where_math_acos(isAsync); @@ -478,7 +478,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""OrderDetail"") AND (c[""OrderID""] = 11077))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_math_asin(bool isAsync) { await base.Where_math_asin(isAsync); @@ -489,7 +489,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""OrderDetail"") AND (c[""OrderID""] = 11077))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_math_atan(bool isAsync) { await base.Where_math_atan(isAsync); @@ -500,7 +500,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""OrderDetail"") AND (c[""OrderID""] = 11077))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_math_atan2(bool isAsync) { await base.Where_math_atan2(isAsync); @@ -511,7 +511,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""OrderDetail"") AND (c[""OrderID""] = 11077))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_math_cos(bool isAsync) { await base.Where_math_cos(isAsync); @@ -522,7 +522,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""OrderDetail"") AND (c[""OrderID""] = 11077))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_math_sin(bool isAsync) { await base.Where_math_sin(isAsync); @@ -533,7 +533,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""OrderDetail"") AND (c[""OrderID""] = 11077))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_math_tan(bool isAsync) { await base.Where_math_tan(isAsync); @@ -544,7 +544,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""OrderDetail"") AND (c[""OrderID""] = 11077))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_math_sign(bool isAsync) { await base.Where_math_sign(isAsync); @@ -555,7 +555,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""OrderDetail"") AND (c[""OrderID""] = 11077))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_math_min(bool isAsync) { await base.Where_math_min(isAsync); @@ -566,7 +566,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""OrderDetail"") AND (c[""OrderID""] = 11077))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_math_max(bool isAsync) { await base.Where_math_max(isAsync); @@ -577,7 +577,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""OrderDetail"") AND (c[""OrderID""] = 11077))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_guid_newguid(bool isAsync) { await base.Where_guid_newguid(isAsync); @@ -588,7 +588,7 @@ FROM root c WHERE (c[""Discriminator""] = ""OrderDetail"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_string_to_upper(bool isAsync) { await base.Where_string_to_upper(isAsync); @@ -599,7 +599,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_string_to_lower(bool isAsync) { await base.Where_string_to_lower(isAsync); @@ -610,7 +610,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_functions_nested(bool isAsync) { await base.Where_functions_nested(isAsync); @@ -621,7 +621,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Convert_ToByte(bool isAsync) { await base.Convert_ToByte(isAsync); @@ -632,7 +632,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Order"") AND (c[""CustomerID""] = ""ALFKI""))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Convert_ToDecimal(bool isAsync) { await base.Convert_ToDecimal(isAsync); @@ -643,7 +643,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Order"") AND (c[""CustomerID""] = ""ALFKI""))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Convert_ToDouble(bool isAsync) { await base.Convert_ToDouble(isAsync); @@ -654,7 +654,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Order"") AND (c[""CustomerID""] = ""ALFKI""))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Convert_ToInt16(bool isAsync) { await base.Convert_ToInt16(isAsync); @@ -665,7 +665,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Order"") AND (c[""CustomerID""] = ""ALFKI""))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Convert_ToInt32(bool isAsync) { await base.Convert_ToInt32(isAsync); @@ -676,7 +676,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Order"") AND (c[""CustomerID""] = ""ALFKI""))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Convert_ToInt64(bool isAsync) { await base.Convert_ToInt64(isAsync); @@ -687,7 +687,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Order"") AND (c[""CustomerID""] = ""ALFKI""))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Convert_ToString(bool isAsync) { await base.Convert_ToString(isAsync); @@ -768,7 +768,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Customer"") AND (c[""CustomerID""] = ""ALFKI""))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task IsNullOrEmpty_in_predicate(bool isAsync) { await base.IsNullOrEmpty_in_predicate(isAsync); @@ -799,7 +799,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task IsNullOrWhiteSpace_in_predicate(bool isAsync) { await base.IsNullOrWhiteSpace_in_predicate(isAsync); @@ -810,7 +810,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task TrimStart_without_arguments_in_predicate(bool isAsync) { await base.TrimStart_without_arguments_in_predicate(isAsync); @@ -821,7 +821,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task TrimStart_with_char_argument_in_predicate(bool isAsync) { await base.TrimStart_with_char_argument_in_predicate(isAsync); @@ -832,7 +832,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task TrimStart_with_char_array_argument_in_predicate(bool isAsync) { await base.TrimStart_with_char_array_argument_in_predicate(isAsync); @@ -843,7 +843,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task TrimEnd_without_arguments_in_predicate(bool isAsync) { await base.TrimEnd_without_arguments_in_predicate(isAsync); @@ -854,7 +854,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task TrimEnd_with_char_argument_in_predicate(bool isAsync) { await base.TrimEnd_with_char_argument_in_predicate(isAsync); @@ -865,7 +865,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task TrimEnd_with_char_array_argument_in_predicate(bool isAsync) { await base.TrimEnd_with_char_array_argument_in_predicate(isAsync); @@ -876,7 +876,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Trim_without_argument_in_predicate(bool isAsync) { await base.Trim_without_argument_in_predicate(isAsync); @@ -887,7 +887,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Trim_with_char_argument_in_predicate(bool isAsync) { await base.Trim_with_char_argument_in_predicate(isAsync); @@ -898,7 +898,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Trim_with_char_array_argument_in_predicate(bool isAsync) { await base.Trim_with_char_array_argument_in_predicate(isAsync); @@ -909,7 +909,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Order_by_length_twice(bool isAsync) { await base.Order_by_length_twice(isAsync); @@ -920,7 +920,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Order_by_length_twice_followed_by_projection_of_naked_collection_navigation(bool isAsync) { await base.Order_by_length_twice_followed_by_projection_of_naked_collection_navigation(isAsync); @@ -941,7 +941,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Customer"") AND (c[""CustomerID""] = ""ANATR""))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Static_equals_nullable_datetime_compared_to_non_nullable(bool isAsync) { await base.Static_equals_nullable_datetime_compared_to_non_nullable(isAsync); @@ -952,7 +952,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Order"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Static_equals_int_compared_to_long(bool isAsync) { await base.Static_equals_int_compared_to_long(isAsync); @@ -963,7 +963,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Order"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Projecting_Math_Truncate_and_ordering_by_it_twice(bool isAsync) { await base.Projecting_Math_Truncate_and_ordering_by_it_twice(isAsync); @@ -974,7 +974,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Order"") AND (c[""OrderID""] < 10250))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Projecting_Math_Truncate_and_ordering_by_it_twice2(bool isAsync) { await base.Projecting_Math_Truncate_and_ordering_by_it_twice2(isAsync); @@ -985,7 +985,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Order"") AND (c[""OrderID""] < 10250))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Projecting_Math_Truncate_and_ordering_by_it_twice3(bool isAsync) { await base.Projecting_Math_Truncate_and_ordering_by_it_twice3(isAsync); @@ -996,19 +996,19 @@ FROM root c WHERE ((c[""Discriminator""] = ""Order"") AND (c[""OrderID""] < 10250))"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override Task DateTime_Compare_to_simple_zero(bool isAsync, bool compareTo) { return base.DateTime_Compare_to_simple_zero(isAsync, compareTo); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override Task TimeSpan_Compare_to_simple_zero(bool isAsync, bool compareTo) { return base.TimeSpan_Compare_to_simple_zero(isAsync, compareTo); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override Task Int_Compare_to_simple_zero(bool isAsync) { return base.Int_Compare_to_simple_zero(isAsync); diff --git a/test/EFCore.Cosmos.FunctionalTests/Query/SimpleQueryCosmosTest.JoinGroupJoin.cs b/test/EFCore.Cosmos.FunctionalTests/Query/SimpleQueryCosmosTest.JoinGroupJoin.cs index 0e5ac6361cc..64f486ce1a1 100644 --- a/test/EFCore.Cosmos.FunctionalTests/Query/SimpleQueryCosmosTest.JoinGroupJoin.cs +++ b/test/EFCore.Cosmos.FunctionalTests/Query/SimpleQueryCosmosTest.JoinGroupJoin.cs @@ -10,7 +10,7 @@ namespace Microsoft.EntityFrameworkCore.Query { public partial class SimpleQueryCosmosTest { - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task Join_customers_orders_projection(bool isAsync) { await base.Join_customers_orders_projection(isAsync); @@ -21,7 +21,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task Join_customers_orders_entities(bool isAsync) { await base.Join_customers_orders_entities(isAsync); @@ -32,7 +32,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task Join_select_many(bool isAsync) { await AssertQuery( @@ -84,7 +84,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Employee"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task Client_Join_select_many(bool isAsync) { await base.Client_Join_select_many(isAsync); @@ -95,7 +95,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Employee"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task Join_customers_orders_select(bool isAsync) { await base.Join_customers_orders_select(isAsync); @@ -106,7 +106,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task Join_customers_orders_with_subquery(bool isAsync) { await base.Join_customers_orders_with_subquery(isAsync); @@ -117,7 +117,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task Join_customers_orders_with_subquery_with_take(bool isAsync) { await base.Join_customers_orders_with_subquery_with_take(isAsync); @@ -128,7 +128,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task Join_customers_orders_with_subquery_anonymous_property_method(bool isAsync) { await base.Join_customers_orders_with_subquery_anonymous_property_method(isAsync); @@ -139,7 +139,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task Join_customers_orders_with_subquery_anonymous_property_method_with_take(bool isAsync) { await base.Join_customers_orders_with_subquery_anonymous_property_method_with_take(isAsync); @@ -150,7 +150,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task Join_customers_orders_with_subquery_predicate(bool isAsync) { await base.Join_customers_orders_with_subquery_predicate(isAsync); @@ -161,7 +161,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task Join_customers_orders_with_subquery_predicate_with_take(bool isAsync) { await base.Join_customers_orders_with_subquery_predicate_with_take(isAsync); @@ -172,7 +172,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task Join_composite_key(bool isAsync) { await base.Join_composite_key(isAsync); @@ -183,7 +183,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task Join_complex_condition(bool isAsync) { await base.Join_complex_condition(isAsync); @@ -194,7 +194,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Customer"") AND (c[""CustomerID""] = ""ALFKI""))"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task Join_client_new_expression(bool isAsync) { await base.Join_client_new_expression(isAsync); @@ -205,7 +205,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task Join_same_collection_multiple(bool isAsync) { await base.Join_same_collection_multiple(isAsync); @@ -216,7 +216,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task Join_same_collection_force_alias_uniquefication(bool isAsync) { await base.Join_same_collection_force_alias_uniquefication(isAsync); @@ -227,7 +227,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Order"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task GroupJoin_customers_orders(bool isAsync) { await base.GroupJoin_customers_orders(isAsync); @@ -238,7 +238,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task GroupJoin_customers_orders_count(bool isAsync) { await base.GroupJoin_customers_orders_count(isAsync); @@ -249,7 +249,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task GroupJoin_customers_orders_count_preserves_ordering(bool isAsync) { await base.GroupJoin_customers_orders_count_preserves_ordering(isAsync); @@ -260,7 +260,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Customer"") AND ((c[""CustomerID""] != ""VAFFE"") AND (c[""CustomerID""] != ""DRACD"")))"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task GroupJoin_simple(bool isAsync) { await base.GroupJoin_simple(isAsync); @@ -271,7 +271,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task GroupJoin_simple2(bool isAsync) { await base.GroupJoin_simple2(isAsync); @@ -282,7 +282,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task GroupJoin_simple3(bool isAsync) { await base.GroupJoin_simple3(isAsync); @@ -293,7 +293,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task GroupJoin_tracking_groups(bool isAsync) { await base.GroupJoin_tracking_groups(isAsync); @@ -304,7 +304,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task GroupJoin_simple_ordering(bool isAsync) { await base.GroupJoin_simple_ordering(isAsync); @@ -315,7 +315,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task GroupJoin_simple_subquery(bool isAsync) { await base.GroupJoin_simple_subquery(isAsync); @@ -326,7 +326,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task GroupJoin_DefaultIfEmpty(bool isAsync) { await base.GroupJoin_DefaultIfEmpty(isAsync); @@ -337,7 +337,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task GroupJoin_DefaultIfEmpty_multiple(bool isAsync) { await base.GroupJoin_DefaultIfEmpty_multiple(isAsync); @@ -348,7 +348,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task GroupJoin_DefaultIfEmpty2(bool isAsync) { await base.GroupJoin_DefaultIfEmpty2(isAsync); @@ -359,7 +359,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Employee"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task GroupJoin_DefaultIfEmpty3(bool isAsync) { await base.GroupJoin_DefaultIfEmpty3(isAsync); @@ -370,7 +370,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task GroupJoin_Where(bool isAsync) { await base.GroupJoin_Where(isAsync); @@ -381,7 +381,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task GroupJoin_Where_OrderBy(bool isAsync) { await base.GroupJoin_Where_OrderBy(isAsync); @@ -392,7 +392,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task GroupJoin_DefaultIfEmpty_Where(bool isAsync) { await base.GroupJoin_DefaultIfEmpty_Where(isAsync); @@ -403,7 +403,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task Join_GroupJoin_DefaultIfEmpty_Where(bool isAsync) { await base.Join_GroupJoin_DefaultIfEmpty_Where(isAsync); @@ -414,7 +414,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task GroupJoin_DefaultIfEmpty_Project(bool isAsync) { await base.GroupJoin_DefaultIfEmpty_Project(isAsync); @@ -425,7 +425,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task GroupJoin_with_different_outer_elements_with_same_key(bool isAsync) { await base.GroupJoin_with_different_outer_elements_with_same_key(isAsync); @@ -436,7 +436,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Order"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task GroupJoin_with_different_outer_elements_with_same_key_with_predicate(bool isAsync) { await base.GroupJoin_with_different_outer_elements_with_same_key_with_predicate(isAsync); @@ -447,7 +447,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Order"") AND (c[""OrderID""] > 11500))"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task GroupJoin_with_different_outer_elements_with_same_key_projected_from_another_entity(bool isAsync) { await base.GroupJoin_with_different_outer_elements_with_same_key_projected_from_another_entity(isAsync); @@ -458,7 +458,7 @@ FROM root c WHERE (c[""Discriminator""] = ""OrderDetail"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task GroupJoin_SelectMany_subquery_with_filter(bool isAsync) { await base.GroupJoin_SelectMany_subquery_with_filter(isAsync); @@ -469,7 +469,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task GroupJoin_SelectMany_subquery_with_filter_orderby(bool isAsync) { await base.GroupJoin_SelectMany_subquery_with_filter_orderby(isAsync); @@ -480,7 +480,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task GroupJoin_SelectMany_subquery_with_filter_and_DefaultIfEmpty(bool isAsync) { await base.GroupJoin_SelectMany_subquery_with_filter_and_DefaultIfEmpty(isAsync); @@ -491,7 +491,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task GroupJoin_SelectMany_subquery_with_filter_orderby_and_DefaultIfEmpty(bool isAsync) { await base.GroupJoin_SelectMany_subquery_with_filter_orderby_and_DefaultIfEmpty(isAsync); @@ -502,7 +502,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task GroupJoin_with_order_by_key_descending1(bool isAsync) { await base.GroupJoin_with_order_by_key_descending1(isAsync); @@ -513,7 +513,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task GroupJoin_with_order_by_key_descending2(bool isAsync) { await base.GroupJoin_with_order_by_key_descending2(isAsync); @@ -524,7 +524,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task GroupJoin_outer_projection(bool isAsync) { await base.GroupJoin_outer_projection(isAsync); @@ -535,7 +535,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task GroupJoin_outer_projection2(bool isAsync) { await base.GroupJoin_outer_projection2(isAsync); @@ -546,7 +546,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task GroupJoin_outer_projection3(bool isAsync) { await base.GroupJoin_outer_projection3(isAsync); @@ -556,7 +556,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task GroupJoin_outer_projection4(bool isAsync) { await base.GroupJoin_outer_projection4(isAsync); @@ -567,7 +567,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task GroupJoin_outer_projection_reverse(bool isAsync) { await base.GroupJoin_outer_projection_reverse(isAsync); @@ -581,7 +581,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task GroupJoin_outer_projection_reverse2(bool isAsync) { await base.GroupJoin_outer_projection_reverse2(isAsync); @@ -596,7 +596,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task GroupJoin_subquery_projection_outer_mixed(bool isAsync) { await AssertQuery( diff --git a/test/EFCore.Cosmos.FunctionalTests/Query/SimpleQueryCosmosTest.ResultOperators.cs b/test/EFCore.Cosmos.FunctionalTests/Query/SimpleQueryCosmosTest.ResultOperators.cs index 41e4b53c96f..6e95fd69464 100644 --- a/test/EFCore.Cosmos.FunctionalTests/Query/SimpleQueryCosmosTest.ResultOperators.cs +++ b/test/EFCore.Cosmos.FunctionalTests/Query/SimpleQueryCosmosTest.ResultOperators.cs @@ -12,7 +12,7 @@ namespace Microsoft.EntityFrameworkCore.Query { public partial class SimpleQueryCosmosTest { - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override void Select_All() { base.Select_All(); @@ -715,7 +715,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Order"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task OrderBy_client_Take(bool isAsync) { await base.OrderBy_client_Take(isAsync); @@ -826,7 +826,7 @@ FROM root c OFFSET 0 LIMIT 2"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task FirstOrDefault_inside_subquery_gets_server_evaluated(bool isAsync) { await base.FirstOrDefault_inside_subquery_gets_server_evaluated(isAsync); @@ -837,7 +837,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task First_inside_subquery_gets_client_evaluated(bool isAsync) { await base.First_inside_subquery_gets_client_evaluated(isAsync); @@ -860,6 +860,7 @@ ORDER BY c[""ContactName""] DESC OFFSET 0 LIMIT 1"); } + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Last_when_no_order_by(bool isAsync) { await base.Last_when_no_order_by(isAsync); @@ -930,7 +931,7 @@ ORDER BY c[""ContactName""] DESC OFFSET 0 LIMIT 1"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task Contains_with_subquery(bool isAsync) { await base.Contains_with_subquery(isAsync); @@ -955,7 +956,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Customer"") AND c[""CustomerID""] IN (""ABCDE""))"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task Contains_with_subquery_and_local_array_closure(bool isAsync) { await base.Contains_with_subquery_and_local_array_closure(isAsync); @@ -1128,7 +1129,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Customer"") AND NOT((true = false)))"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task Contains_top_level(bool isAsync) { await base.Contains_top_level(isAsync); @@ -1139,6 +1140,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Contains_with_local_tuple_array_closure(bool isAsync) { await base.Contains_with_local_tuple_array_closure(isAsync); @@ -1159,7 +1161,7 @@ FROM root c WHERE (c[""Discriminator""] = ""OrderDetail"")"); } - [ConditionalFact(Skip = "Issue #14935")] + [ConditionalFact(Skip = "Issue #17246")] public override void OfType_Select() { base.OfType_Select(); @@ -1170,7 +1172,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Order"")"); } - [ConditionalFact(Skip = "Issue #14935")] + [ConditionalFact(Skip = "Issue #17246")] public override void OfType_Select_OfType_Select() { base.OfType_Select_OfType_Select(); @@ -1181,7 +1183,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Order"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task Average_with_non_matching_types_in_projection_doesnt_produce_second_explicit_cast(bool isAsync) { await base.Average_with_non_matching_types_in_projection_doesnt_produce_second_explicit_cast(isAsync); @@ -1192,7 +1194,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Order"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task Max_with_non_matching_types_in_projection_introduces_explicit_cast(bool isAsync) { await base.Max_with_non_matching_types_in_projection_introduces_explicit_cast(isAsync); @@ -1203,7 +1205,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Order"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task Min_with_non_matching_types_in_projection_introduces_explicit_cast(bool isAsync) { await base.Min_with_non_matching_types_in_projection_introduces_explicit_cast(isAsync); @@ -1214,7 +1216,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Order"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task OrderBy_Take_Last_gives_correct_result(bool isAsync) { await base.OrderBy_Take_Last_gives_correct_result(isAsync); @@ -1225,7 +1227,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task OrderBy_Skip_Last_gives_correct_result(bool isAsync) { await base.OrderBy_Skip_Last_gives_correct_result(isAsync); @@ -1236,7 +1238,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue#14935 (Contains not implemented)")] + [ConditionalTheory(Skip = "Issue#17246 (Contains not implemented)")] public override void Contains_over_entityType_should_rewrite_to_identity_equality() { base.Contains_over_entityType_should_rewrite_to_identity_equality(); @@ -1247,7 +1249,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Order"") AND (c[""OrderID""] = 10248))"); } - [ConditionalTheory(Skip = "Issue#14935 (Contains not implemented)")] + [ConditionalTheory(Skip = "Issue#17246 (Contains not implemented)")] public override async Task List_Contains_over_entityType_should_rewrite_to_identity_equality(bool isAsync) { await base.List_Contains_over_entityType_should_rewrite_to_identity_equality(isAsync); @@ -1258,7 +1260,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Order"") AND (c[""OrderID""] = 10248))"); } - [ConditionalTheory(Skip = "Issue#14935 (Contains not implemented)")] + [ConditionalTheory(Skip = "Issue#17246 (Contains not implemented)")] public override async Task List_Contains_with_constant_list(bool isAsync) { await base.List_Contains_with_constant_list(isAsync); @@ -1269,7 +1271,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Order"") AND (c[""OrderID""] = 10248))"); } - [ConditionalTheory(Skip = "Issue#14935 (Contains not implemented)")] + [ConditionalTheory(Skip = "Issue#17246 (Contains not implemented)")] public override async Task List_Contains_with_parameter_list(bool isAsync) { await base.List_Contains_with_parameter_list(isAsync); @@ -1280,7 +1282,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Order"") AND (c[""OrderID""] = 10248))"); } - [ConditionalTheory(Skip = "Issue#14935 (Contains not implemented)")] + [ConditionalTheory(Skip = "Issue#17246 (Contains not implemented)")] public override async Task Contains_with_parameter_list_value_type_id(bool isAsync) { await base.Contains_with_parameter_list_value_type_id(isAsync); @@ -1291,7 +1293,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Order"") AND (c[""OrderID""] = 10248))"); } - [ConditionalTheory(Skip = "Issue#14935 (Contains not implemented)")] + [ConditionalTheory(Skip = "Issue#17246 (Contains not implemented)")] public override async Task Contains_with_constant_list_value_type_id(bool isAsync) { await base.Contains_with_constant_list_value_type_id(isAsync); @@ -1302,7 +1304,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Order"") AND (c[""OrderID""] = 10248))"); } - [ConditionalTheory(Skip = "Issue#14935 (Contains not implemented)")] + [ConditionalTheory(Skip = "Issue#17246 (Contains not implemented)")] public override void Contains_over_entityType_with_null_should_rewrite_to_identity_equality() { base.Contains_over_entityType_with_null_should_rewrite_to_identity_equality(); @@ -1313,6 +1315,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Order"") AND (c[""OrderID""] = 10248))"); } + [ConditionalFact(Skip = "Issue #17246")] public override void Contains_over_entityType_should_materialize_when_composite() { base.Contains_over_entityType_should_materialize_when_composite(); @@ -1335,6 +1338,7 @@ public override void Paging_operation_on_string_doesnt_issue_warning() Fixture.TestSqlLoggerFactory.Log.Select(l => l.Message)); } + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Project_constant_Sum(bool isAsync) { await base.Project_constant_Sum(isAsync); @@ -1433,7 +1437,7 @@ FROM root c WHERE (((c[""Discriminator""] = ""Customer"") AND (c[""City""] = ""México D.F."")) AND NOT(c[""CustomerID""] IN (""ABCDE"", ""ALFKI"", ""ANATR"")))"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task Cast_to_same_Type_Count_works(bool isAsync) { await base.Cast_to_same_Type_Count_works(isAsync); diff --git a/test/EFCore.Cosmos.FunctionalTests/Query/SimpleQueryCosmosTest.Select.cs b/test/EFCore.Cosmos.FunctionalTests/Query/SimpleQueryCosmosTest.Select.cs index 8213051793b..ab1017e7680 100644 --- a/test/EFCore.Cosmos.FunctionalTests/Query/SimpleQueryCosmosTest.Select.cs +++ b/test/EFCore.Cosmos.FunctionalTests/Query/SimpleQueryCosmosTest.Select.cs @@ -30,7 +30,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Order"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task Projection_when_arithmetic_mixed(bool isAsync) { await base.Projection_when_arithmetic_mixed(isAsync); @@ -41,6 +41,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Order"")"); } + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Projection_when_arithmetic_mixed_subqueries(bool isAsync) { await base.Projection_when_arithmetic_mixed_subqueries(isAsync); @@ -92,6 +93,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Employee"") AND (c[""EmployeeID""] = 1))"); } + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Select_bool_closure_with_order_by_property_with_cast_to_nullable(bool isAsync) { await base.Select_bool_closure_with_order_by_property_with_cast_to_nullable(isAsync); @@ -102,7 +104,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Select_bool_closure_with_order_parameter_with_cast_to_nullable(bool isAsync) { await base.Select_bool_closure_with_order_parameter_with_cast_to_nullable(isAsync); @@ -268,7 +270,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Customer"") AND (c[""City""] = ""London""))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override void Select_nested_collection_multi_level() { base.Select_nested_collection_multi_level(); @@ -279,7 +281,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override void Select_nested_collection_multi_level2() { base.Select_nested_collection_multi_level2(); @@ -290,7 +292,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override void Select_nested_collection_multi_level3() { base.Select_nested_collection_multi_level3(); @@ -301,7 +303,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override void Select_nested_collection_multi_level4() { base.Select_nested_collection_multi_level4(); @@ -312,7 +314,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override void Select_nested_collection_multi_level5() { using (var context = CreateContext()) @@ -343,7 +345,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Customer"") AND (c[""CustomerID""] = ""ALFKI""))"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override void Select_nested_collection_multi_level6() { base.Select_nested_collection_multi_level6(); @@ -354,7 +356,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task Select_nested_collection_count_using_anonymous_type(bool isAsync) { await base.Select_nested_collection_count_using_anonymous_type(isAsync); @@ -365,7 +367,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task New_date_time_in_anonymous_type_works(bool isAsync) { await base.New_date_time_in_anonymous_type_works(isAsync); @@ -498,7 +500,7 @@ FROM root c ORDER BY c[""OrderID""]"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Project_single_element_from_collection_with_OrderBy_Distinct_and_FirstOrDefault_followed_by_projecting_length( bool isAsync) { @@ -517,7 +519,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Order"") AND (c[""CustomerID""] = ""ALFKI""))"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task Projection_in_a_subquery_should_be_liftable(bool isAsync) { await base.Projection_in_a_subquery_should_be_liftable(isAsync); @@ -538,7 +540,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Order"") AND (c[""OrderID""] < 10300))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Project_single_element_from_collection_with_OrderBy_Take_and_FirstOrDefault(bool isAsync) { await AssertQuery( @@ -552,7 +554,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Customer"") AND (c[""CustomerID""] = ""ALFKI""))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Project_single_element_from_collection_with_OrderBy_Skip_and_FirstOrDefault(bool isAsync) { await AssertQuery( @@ -566,7 +568,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Customer"") AND (c[""CustomerID""] = ""ALFKI""))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Project_single_element_from_collection_with_OrderBy_Distinct_and_FirstOrDefault(bool isAsync) { await AssertQuery( @@ -580,6 +582,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Customer"") AND (c[""CustomerID""] = ""ALFKI""))"); } + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Project_single_element_from_collection_with_OrderBy_Take_and_SingleOrDefault(bool isAsync) { await base.Project_single_element_from_collection_with_OrderBy_Take_and_SingleOrDefault(isAsync); @@ -590,7 +593,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Customer"") AND (c[""CustomerID""] = ""ALFKI""))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Project_single_element_from_collection_with_OrderBy_Take_and_FirstOrDefault_with_parameter(bool isAsync) { await AssertQuery( @@ -604,7 +607,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Customer"") AND (c[""CustomerID""] = ""ALFKI""))"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task Project_single_element_from_collection_with_multiple_OrderBys_Take_and_FirstOrDefault(bool isAsync) { await AssertQuery( @@ -636,7 +639,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task Project_single_element_from_collection_with_multiple_OrderBys_Take_and_FirstOrDefault_2(bool isAsync) { await AssertQuery( @@ -654,7 +657,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Customer"") AND (c[""CustomerID""] = ""ALFKI""))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Project_single_element_from_collection_with_OrderBy_over_navigation_Take_and_FirstOrDefault(bool isAsync) { await AssertQueryScalar( @@ -811,7 +814,7 @@ FROM root c ORDER BY c[""CustomerID""]"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Anonymous_projection_with_repeated_property_being_ordered_2(bool isAsync) { await base.Anonymous_projection_with_repeated_property_being_ordered_2(isAsync); @@ -842,13 +845,13 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override Task Client_method_in_projection_requiring_materialization_1(bool isAsync) { return base.Client_method_in_projection_requiring_materialization_1(isAsync); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override Task Client_method_in_projection_requiring_materialization_2(bool isAsync) { return base.Client_method_in_projection_requiring_materialization_2(isAsync); diff --git a/test/EFCore.Cosmos.FunctionalTests/Query/SimpleQueryCosmosTest.Where.cs b/test/EFCore.Cosmos.FunctionalTests/Query/SimpleQueryCosmosTest.Where.cs index 11777fd8bc0..c7f0ea5f2c4 100644 --- a/test/EFCore.Cosmos.FunctionalTests/Query/SimpleQueryCosmosTest.Where.cs +++ b/test/EFCore.Cosmos.FunctionalTests/Query/SimpleQueryCosmosTest.Where.cs @@ -367,7 +367,7 @@ FROM root c private static readonly Expression> _filter = o => o.CustomerID == "ALFKI"; - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_as_queryable_expression(bool isAsync) { await AssertQuery( @@ -465,7 +465,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Customer"") AND (c[""City""] = @__city_0))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_method_call_nullable_type_closure_via_query_cache(bool isAsync) { await base.Where_method_call_nullable_type_closure_via_query_cache(isAsync); @@ -484,7 +484,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Employee"") AND (c[""ReportsTo""] = @__p_0))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_method_call_nullable_type_reverse_closure_via_query_cache(bool isAsync) { await base.Where_method_call_nullable_type_reverse_closure_via_query_cache(isAsync); @@ -613,7 +613,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Customer"") AND (c[""City""] = @__InstanceFieldValue_0))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_simple_closure_via_query_cache_nullable_type(bool isAsync) { await base.Where_simple_closure_via_query_cache_nullable_type(isAsync); @@ -638,7 +638,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Employee"") AND (c[""ReportsTo""] = @__p_0))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_simple_closure_via_query_cache_nullable_type_reverse(bool isAsync) { await base.Where_simple_closure_via_query_cache_nullable_type_reverse(isAsync); @@ -663,7 +663,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Employee"") AND (c[""ReportsTo""] = @__p_0))"); } - [ConditionalFact(Skip = "Issue #14935")] + [ConditionalFact(Skip = "Issue #17246")] public override void Where_subquery_closure_via_query_cache() { base.Where_subquery_closure_via_query_cache(); @@ -694,7 +694,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Employee"") AND (c[""Title""] = ""Sales Representative""))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_shadow_subquery_FirstOrDefault(bool isAsync) { await base.Where_shadow_subquery_FirstOrDefault(isAsync); @@ -705,6 +705,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Employee"")"); } + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_client(bool isAsync) { await base.Where_client(isAsync); @@ -715,7 +716,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_subquery_correlated(bool isAsync) { await base.Where_subquery_correlated(isAsync); @@ -726,6 +727,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_subquery_correlated_client_eval(bool isAsync) { await base.Where_subquery_correlated_client_eval(isAsync); @@ -736,6 +738,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_client_and_server_top_level(bool isAsync) { await base.Where_client_and_server_top_level(isAsync); @@ -746,6 +749,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_client_or_server_top_level(bool isAsync) { await base.Where_client_or_server_top_level(isAsync); @@ -756,6 +760,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_client_and_server_non_top_level(bool isAsync) { await base.Where_client_and_server_non_top_level(isAsync); @@ -766,6 +771,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_client_deep_inside_predicate_and_server_top_level(bool isAsync) { await base.Where_client_deep_inside_predicate_and_server_top_level(isAsync); @@ -796,7 +802,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Employee"") AND (c[""EmployeeID""] = 1))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_equals_using_object_overload_on_mismatched_types(bool isAsync) { await base.Where_equals_using_object_overload_on_mismatched_types(isAsync); @@ -819,7 +825,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Employee"") AND (c[""EmployeeID""] = @__p_0))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_equals_on_mismatched_types_nullable_int_long(bool isAsync) { await base.Where_equals_on_mismatched_types_nullable_int_long(isAsync); @@ -830,7 +836,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Employee"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_equals_on_mismatched_types_nullable_long_nullable_int(bool isAsync) { await base.Where_equals_on_mismatched_types_nullable_long_nullable_int(isAsync); @@ -841,7 +847,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Employee"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_equals_on_mismatched_types_int_nullable_int(bool isAsync) { await base.Where_equals_on_mismatched_types_int_nullable_int(isAsync); @@ -852,7 +858,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Employee"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_equals_on_matched_nullable_int_types(bool isAsync) { await base.Where_equals_on_matched_nullable_int_types(isAsync); @@ -863,7 +869,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Employee"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_equals_on_null_nullable_int_types(bool isAsync) { await base.Where_equals_on_null_nullable_int_types(isAsync); @@ -894,7 +900,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Employee"") AND (c[""ReportsTo""] = null))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_string_length(bool isAsync) { await base.Where_string_length(isAsync); @@ -905,7 +911,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_string_indexof(bool isAsync) { await base.Where_string_indexof(isAsync); @@ -916,7 +922,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_string_replace(bool isAsync) { await base.Where_string_replace(isAsync); @@ -927,7 +933,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_string_substring(bool isAsync) { await base.Where_string_substring(isAsync); @@ -938,7 +944,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_datetime_now(bool isAsync) { await base.Where_datetime_now(isAsync); @@ -949,7 +955,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_datetime_utcnow(bool isAsync) { await base.Where_datetime_utcnow(isAsync); @@ -960,7 +966,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_datetime_today(bool isAsync) { await base.Where_datetime_today(isAsync); @@ -971,7 +977,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Employee"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_datetime_date_component(bool isAsync) { await base.Where_datetime_date_component(isAsync); @@ -982,7 +988,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Order"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_date_add_year_constant_component(bool isAsync) { await base.Where_date_add_year_constant_component(isAsync); @@ -993,7 +999,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Order"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_datetime_year_component(bool isAsync) { await base.Where_datetime_year_component(isAsync); @@ -1004,7 +1010,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Order"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_datetime_month_component(bool isAsync) { await base.Where_datetime_month_component(isAsync); @@ -1015,7 +1021,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Order"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_datetime_dayOfYear_component(bool isAsync) { await base.Where_datetime_dayOfYear_component(isAsync); @@ -1026,7 +1032,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Order"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_datetime_day_component(bool isAsync) { await base.Where_datetime_day_component(isAsync); @@ -1037,7 +1043,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Order"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_datetime_hour_component(bool isAsync) { await base.Where_datetime_hour_component(isAsync); @@ -1048,7 +1054,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Order"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_datetime_minute_component(bool isAsync) { await base.Where_datetime_minute_component(isAsync); @@ -1059,7 +1065,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Order"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_datetime_second_component(bool isAsync) { await base.Where_datetime_second_component(isAsync); @@ -1070,7 +1076,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Order"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_datetime_millisecond_component(bool isAsync) { await base.Where_datetime_millisecond_component(isAsync); @@ -1081,7 +1087,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Order"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_datetimeoffset_now_component(bool isAsync) { await base.Where_datetimeoffset_now_component(isAsync); @@ -1091,7 +1097,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Order"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_datetimeoffset_utcnow_component(bool isAsync) { await base.Where_datetimeoffset_utcnow_component(isAsync); @@ -1181,7 +1187,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Customer"") AND (c[""City""] = c[""City""]))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_in_optimization_multiple(bool isAsync) { await base.Where_in_optimization_multiple(isAsync); @@ -1192,7 +1198,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_not_in_optimization1(bool isAsync) { await base.Where_not_in_optimization1(isAsync); @@ -1203,7 +1209,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_not_in_optimization2(bool isAsync) { await base.Where_not_in_optimization2(isAsync); @@ -1214,7 +1220,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_not_in_optimization3(bool isAsync) { await base.Where_not_in_optimization3(isAsync); @@ -1225,7 +1231,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_not_in_optimization4(bool isAsync) { await base.Where_not_in_optimization4(isAsync); @@ -1236,7 +1242,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_select_many_and(bool isAsync) { await base.Where_select_many_and(isAsync); @@ -1247,7 +1253,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_primitive(bool isAsync) { await base.Where_primitive(isAsync); @@ -1278,6 +1284,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Product"") AND NOT(c[""Discontinued""]))"); } + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_bool_client_side_negated(bool isAsync) { await base.Where_bool_client_side_negated(isAsync); @@ -1454,7 +1461,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Product"") AND (c[""UnitsInStock""] > 10))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_comparison_to_nullable_bool(bool isAsync) { await base.Where_comparison_to_nullable_bool(isAsync); @@ -1515,7 +1522,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Customer"") AND (c[""CustomerID""] = ""ALFKI""))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_concat_string_int_comparison1(bool isAsync) { await base.Where_concat_string_int_comparison1(isAsync); @@ -1528,7 +1535,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Customer"") AND ((c[""CustomerID""] || @__i_0) = c[""CompanyName""]))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_concat_string_int_comparison2(bool isAsync) { await base.Where_concat_string_int_comparison2(isAsync); @@ -1541,7 +1548,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Customer"") AND ((@__i_0 + c[""CustomerID""]) = c[""CompanyName""]))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_concat_string_int_comparison3(bool isAsync) { await base.Where_concat_string_int_comparison3(isAsync); @@ -1716,7 +1723,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Customer"") AND ((c[""City""] = null) AND (c[""Country""] = ""UK"")))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_Is_on_same_type(bool isAsync) { await base.Where_Is_on_same_type(isAsync); @@ -1737,7 +1744,7 @@ FROM root c WHERE (((c[""Discriminator""] = ""Order"") AND (c[""CustomerID""] = ""QUICK"")) AND (c[""OrderDate""] > ""1998-01-01T00:00:00""))"); } - [ConditionalFact(Skip = "Issue #14935")] + [ConditionalFact(Skip = "Issue #17246")] public override void Where_navigation_contains() { base.Where_navigation_contains(); @@ -1760,7 +1767,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Customer"") AND (c[""CustomerID""] = @__p_0))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_multiple_contains_in_subquery_with_or(bool isAsync) { await AssertQuery( @@ -1778,7 +1785,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""OrderDetail"") AND (c[""OrderID""] < 10250))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_multiple_contains_in_subquery_with_and(bool isAsync) { await AssertQuery( @@ -1796,7 +1803,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""OrderDetail"") AND (c[""OrderID""] < 10260))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_contains_on_navigation(bool isAsync) { await AssertQuery( @@ -1813,7 +1820,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Order"") AND ((c[""OrderID""] > 10354) AND (c[""OrderID""] < 10360)))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_subquery_FirstOrDefault_is_null(bool isAsync) { await AssertQuery( @@ -1827,7 +1834,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Customer"") AND (c[""CustomerID""] = ""PARIS""))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_subquery_FirstOrDefault_compared_to_entity(bool isAsync) { await AssertQuery( diff --git a/test/EFCore.Cosmos.FunctionalTests/Query/SimpleQueryCosmosTest.cs b/test/EFCore.Cosmos.FunctionalTests/Query/SimpleQueryCosmosTest.cs index 21bfeea249d..9a7256c87c9 100644 --- a/test/EFCore.Cosmos.FunctionalTests/Query/SimpleQueryCosmosTest.cs +++ b/test/EFCore.Cosmos.FunctionalTests/Query/SimpleQueryCosmosTest.cs @@ -43,7 +43,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override void Shaper_command_caching_when_parameter_names_different() { base.Shaper_command_caching_when_parameter_names_different(); @@ -58,6 +58,7 @@ FROM root c WHERE (((c[""Discriminator""] = ""Customer"") AND (c[""CustomerID""] = ""ALFKI"")) AND true)"); } + [ConditionalTheory(Skip = "Issue #17246")] public override void Lifting_when_subquery_nested_order_by_anonymous() { base.Lifting_when_subquery_nested_order_by_anonymous(); @@ -68,6 +69,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Order"")"); } + [ConditionalFact(Skip = "Issue #17246")] public override void Lifting_when_subquery_nested_order_by_simple() { base.Lifting_when_subquery_nested_order_by_simple(); @@ -113,7 +115,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Customer"") AND (c[""CustomerID""] = @__entity_equality_local_0_CustomerID))"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task Entity_equality_local_composite_key(bool isAsync) { await base.Entity_equality_local_composite_key(isAsync); @@ -124,7 +126,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task Join_with_entity_equality_local_on_both_sources(bool isAsync) { await base.Join_with_entity_equality_local_on_both_sources(isAsync); @@ -145,7 +147,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Customer"") AND (c[""CustomerID""] = ""ANATR""))"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task Entity_equality_local_inline_composite_key(bool isAsync) { await base.Entity_equality_local_inline_composite_key(isAsync); @@ -176,7 +178,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Customer"") AND (c[""CustomerID""] != null))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override void Query_when_evaluatable_queryable_method_call_with_repository() { using (var context = CreateContext()) @@ -218,6 +220,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Customer"") AND (c[""CustomerID""] = ""ALFKI""))"); } + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Queryable_reprojection(bool isAsync) { await base.Queryable_reprojection(isAsync); @@ -228,7 +231,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task Default_if_empty_top_level(bool isAsync) { await base.Default_if_empty_top_level(isAsync); @@ -239,7 +242,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Employee"") AND (c[""EmployeeID""] = 4294967295))"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task Join_with_default_if_empty_on_both_sources(bool isAsync) { await base.Join_with_default_if_empty_on_both_sources(isAsync); @@ -250,7 +253,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task Default_if_empty_top_level_followed_by_projecting_constant(bool isAsync) { await base.Default_if_empty_top_level_followed_by_projecting_constant(isAsync); @@ -261,7 +264,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task Default_if_empty_top_level_positive(bool isAsync) { await base.Default_if_empty_top_level_positive(isAsync); @@ -278,6 +281,7 @@ public override Task Default_if_empty_top_level_arg(bool isAsync) return Task.CompletedTask; } + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Default_if_empty_top_level_arg_followed_by_projecting_constant(bool isAsync) { await base.Default_if_empty_top_level_arg_followed_by_projecting_constant(isAsync); @@ -288,7 +292,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task Default_if_empty_top_level_projection(bool isAsync) { await base.Default_if_empty_top_level_projection(isAsync); @@ -299,7 +303,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Employee"") AND (c[""EmployeeID""] = 4294967295))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_query_composition(bool isAsync) { await base.Where_query_composition(isAsync); @@ -310,6 +314,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Employee"")"); } + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_query_composition_is_null(bool isAsync) { await base.Where_query_composition_is_null(isAsync); @@ -320,6 +325,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Employee"")"); } + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_query_composition_is_not_null(bool isAsync) { await base.Where_query_composition_is_null(isAsync); @@ -330,6 +336,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Employee"")"); } + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_query_composition_entity_equality_one_element_SingleOrDefault(bool isAsync) { await base.Where_query_composition_entity_equality_one_element_SingleOrDefault(isAsync); @@ -340,7 +347,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Employee"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task Where_query_composition_entity_equality_one_element_FirstOrDefault(bool isAsync) { await base.Where_query_composition_entity_equality_one_element_FirstOrDefault(isAsync); @@ -351,6 +358,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Employee"")"); } + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_query_composition_entity_equality_no_elements_SingleOrDefault(bool isAsync) { await base.Where_query_composition_entity_equality_no_elements_SingleOrDefault(isAsync); @@ -361,7 +369,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Employee"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task Where_query_composition_entity_equality_no_elements_FirstOrDefault(bool isAsync) { await base.Where_query_composition_entity_equality_no_elements_FirstOrDefault(isAsync); @@ -372,7 +380,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Employee"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task Where_query_composition_entity_equality_multiple_elements_FirstOrDefault(bool isAsync) { await base.Where_query_composition_entity_equality_multiple_elements_FirstOrDefault(isAsync); @@ -383,6 +391,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Employee"")"); } + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_query_composition2(bool isAsync) { await base.Where_query_composition2(isAsync); @@ -393,7 +402,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Employee"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_query_composition2_FirstOrDefault(bool isAsync) { await base.Where_query_composition2_FirstOrDefault(isAsync); @@ -404,7 +413,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Employee"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_query_composition2_FirstOrDefault_with_anonymous(bool isAsync) { await base.Where_query_composition2_FirstOrDefault_with_anonymous(isAsync); @@ -425,6 +434,7 @@ FROM root c WHERE (c[""Discriminator""] = ""OrderDetail"")"); } + [ConditionalFact(Skip = "Issue #17246")] public override void Select_Where_Subquery_Deep_Single() { base.Select_Where_Subquery_Deep_Single(); @@ -435,7 +445,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""OrderDetail"") AND (c[""OrderID""] = 10344))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override void Select_Where_Subquery_Deep_First() { base.Select_Where_Subquery_Deep_First(); @@ -446,6 +456,7 @@ FROM root c WHERE (c[""Discriminator""] = ""OrderDetail"")"); } + [ConditionalFact(Skip = "Issue #17246")] public override void Select_Where_Subquery_Equality() { base.Select_Where_Subquery_Equality(); @@ -477,7 +488,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task OrderBy_SelectMany(bool isAsync) { await AssertQuery( @@ -514,7 +525,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Customer"") AND (c[""CustomerID""] = ""VINET""))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Let_any_subquery_anonymous(bool isAsync) { await base.Let_any_subquery_anonymous(isAsync); @@ -525,7 +536,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task OrderBy_arithmetic(bool isAsync) { await base.OrderBy_arithmetic(isAsync); @@ -536,7 +547,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Employee"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task OrderBy_condition_comparison(bool isAsync) { await base.OrderBy_condition_comparison(isAsync); @@ -547,7 +558,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Product"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task OrderBy_ternary_conditions(bool isAsync) { await base.OrderBy_ternary_conditions(isAsync); @@ -558,7 +569,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Product"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override void OrderBy_any() { base.OrderBy_any(); @@ -569,7 +580,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Skip(bool isAsync) { await base.Skip(isAsync); @@ -580,7 +591,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Skip_no_orderby(bool isAsync) { await base.Skip_no_orderby(isAsync); @@ -606,7 +617,7 @@ ORDER BY c[""ContactName""] OFFSET @__p_0 LIMIT @__p_1"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Join_Customers_Orders_Skip_Take(bool isAsync) { await base.Join_Customers_Orders_Skip_Take(isAsync); @@ -617,7 +628,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Join_Customers_Orders_Skip_Take_followed_by_constant_projection(bool isAsync) { await base.Join_Customers_Orders_Skip_Take_followed_by_constant_projection(isAsync); @@ -628,7 +639,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Join_Customers_Orders_Projection_With_String_Concat_Skip_Take(bool isAsync) { await base.Join_Customers_Orders_Projection_With_String_Concat_Skip_Take(isAsync); @@ -639,7 +650,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Join_Customers_Orders_Orders_Skip_Take_Same_Properties(bool isAsync) { await base.Join_Customers_Orders_Orders_Skip_Take_Same_Properties(isAsync); @@ -650,7 +661,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Order"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Take_Skip(bool isAsync) { await base.Take_Skip(isAsync); @@ -661,7 +672,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Take_Skip_Distinct(bool isAsync) { await base.Take_Skip_Distinct(isAsync); @@ -672,7 +683,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Take_Skip_Distinct_Caching(bool isAsync) { await base.Take_Skip_Distinct_Caching(isAsync); @@ -683,7 +694,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Take_Distinct_Count(bool isAsync) { await base.Take_Distinct_Count(isAsync); @@ -694,7 +705,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Order"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Take_Where_Distinct_Count(bool isAsync) { await base.Take_Where_Distinct_Count(isAsync); @@ -715,7 +726,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Customer"") AND (c[""CustomerID""] = ""ALFKI""))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Null_conditional_deep(bool isAsync) { await base.Null_conditional_deep(isAsync); @@ -838,7 +849,7 @@ ORDER BY c[""CustomerID""] OFFSET 0 LIMIT @__p_0"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task OrderBy_Take_Count(bool isAsync) { await base.OrderBy_Take_Count(isAsync); @@ -849,7 +860,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Order"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Take_OrderBy_Count(bool isAsync) { await base.Take_OrderBy_Count(isAsync); @@ -860,7 +871,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Order"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Any_simple(bool isAsync) { await base.Any_simple(isAsync); @@ -871,7 +882,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Any_predicate(bool isAsync) { await base.Any_predicate(isAsync); @@ -882,7 +893,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Any_nested_negated(bool isAsync) { await base.Any_nested_negated(isAsync); @@ -893,7 +904,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Any_nested_negated2(bool isAsync) { await base.Any_nested_negated2(isAsync); @@ -904,7 +915,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Any_nested_negated3(bool isAsync) { await base.Any_nested_negated3(isAsync); @@ -915,7 +926,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Any_nested(bool isAsync) { await base.Any_nested(isAsync); @@ -926,7 +937,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Any_nested2(bool isAsync) { await base.Any_nested2(isAsync); @@ -937,7 +948,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Any_nested3(bool isAsync) { await base.Any_nested3(isAsync); @@ -948,7 +959,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override void Any_with_multiple_conditions_still_uses_exists() { base.Any_with_multiple_conditions_still_uses_exists(); @@ -959,7 +970,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task All_top_level(bool isAsync) { await base.All_top_level(isAsync); @@ -970,7 +981,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task All_top_level_column(bool isAsync) { await base.All_top_level_column(isAsync); @@ -981,7 +992,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task All_top_level_subquery(bool isAsync) { await AssertSingleResult( @@ -996,7 +1007,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task All_top_level_subquery_ef_property(bool isAsync) { await AssertSingleResult( @@ -1012,6 +1023,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } + [ConditionalTheory(Skip = "Issue #17246")] public override async Task First_client_predicate(bool isAsync) { await base.First_client_predicate(isAsync); @@ -1022,7 +1034,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_select_many_or(bool isAsync) { await base.Where_select_many_or(isAsync); @@ -1033,7 +1045,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_select_many_or2(bool isAsync) { await base.Where_select_many_or2(isAsync); @@ -1044,7 +1056,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_select_many_or3(bool isAsync) { await base.Where_select_many_or3(isAsync); @@ -1055,7 +1067,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_select_many_or4(bool isAsync) { await base.Where_select_many_or4(isAsync); @@ -1066,7 +1078,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_select_many_or_with_parameter(bool isAsync) { await base.Where_select_many_or_with_parameter(isAsync); @@ -1077,6 +1089,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } + [ConditionalTheory(Skip = "Issue #17246")] public override async Task SelectMany_mixed(bool isAsync) { await base.SelectMany_mixed(isAsync); @@ -1087,7 +1100,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Employee"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task SelectMany_simple_subquery(bool isAsync) { await base.SelectMany_simple_subquery(isAsync); @@ -1098,7 +1111,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Employee"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task SelectMany_simple1(bool isAsync) { await base.SelectMany_simple1(isAsync); @@ -1109,7 +1122,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Employee"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task SelectMany_simple2(bool isAsync) { await AssertQuery( @@ -1133,7 +1146,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Employee"") AND (c[""City""] = ""London""))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task SelectMany_entity_deep(bool isAsync) { await AssertQuery( @@ -1159,7 +1172,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Employee"") AND (c[""EmployeeID""] = 1))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task SelectMany_projection1(bool isAsync) { await base.SelectMany_projection1(isAsync); @@ -1170,7 +1183,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Employee"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task SelectMany_projection2(bool isAsync) { await base.SelectMany_projection2(isAsync); @@ -1181,7 +1194,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Employee"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task SelectMany_customer_orders(bool isAsync) { await AssertQuery( @@ -1203,7 +1216,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Customer"") AND (c[""City""] = ""London""))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task SelectMany_Count(bool isAsync) { await AssertCount( @@ -1219,7 +1232,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Customer"") AND (c[""City""] = ""London""))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task SelectMany_LongCount(bool isAsync) { await AssertLongCount( @@ -1235,7 +1248,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Customer"") AND (c[""City""] = ""London""))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task SelectMany_OrderBy_ThenBy_Any(bool isAsync) { await base.SelectMany_OrderBy_ThenBy_Any(isAsync); @@ -1246,7 +1259,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Join_Where_Count(bool isAsync) { await base.Join_Where_Count(isAsync); @@ -1257,7 +1270,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_Join_Any(bool isAsync) { await base.Where_Join_Any(isAsync); @@ -1268,7 +1281,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_Join_Exists(bool isAsync) { await base.Where_Join_Exists(isAsync); @@ -1279,7 +1292,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_Join_Exists_Inequality(bool isAsync) { await base.Where_Join_Exists_Inequality(isAsync); @@ -1290,7 +1303,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_Join_Exists_Constant(bool isAsync) { await base.Where_Join_Exists_Constant(isAsync); @@ -1301,7 +1314,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_Join_Not_Exists(bool isAsync) { await base.Where_Join_Not_Exists(isAsync); @@ -1312,7 +1325,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Join_OrderBy_Count(bool isAsync) { await base.Join_OrderBy_Count(isAsync); @@ -1323,7 +1336,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Multiple_joins_Where_Order_Any(bool isAsync) { await base.Multiple_joins_Where_Order_Any(isAsync); @@ -1334,7 +1347,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_join_select(bool isAsync) { await base.Where_join_select(isAsync); @@ -1345,7 +1358,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Customer"") AND (c[""CustomerID""] = ""ALFKI""))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_orderby_join_select(bool isAsync) { await base.Where_orderby_join_select(isAsync); @@ -1356,7 +1369,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Customer"") AND (c[""CustomerID""] != ""ALFKI""))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_join_orderby_join_select(bool isAsync) { await base.Where_join_orderby_join_select(isAsync); @@ -1367,7 +1380,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Customer"") AND (c[""CustomerID""] != ""ALFKI""))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_select_many(bool isAsync) { await base.Where_select_many(isAsync); @@ -1378,7 +1391,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Customer"") AND (c[""CustomerID""] = ""ALFKI""))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_orderby_select_many(bool isAsync) { await base.Where_orderby_select_many(isAsync); @@ -1389,7 +1402,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Customer"") AND (c[""CustomerID""] = ""ALFKI""))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task SelectMany_cartesian_product_with_ordering(bool isAsync) { await base.SelectMany_cartesian_product_with_ordering(isAsync); @@ -1400,7 +1413,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task SelectMany_Joined_DefaultIfEmpty(bool isAsync) { await AssertQuery( @@ -1422,7 +1435,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Customer"") AND (c[""CustomerID""] = ""ALFKI""))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task SelectMany_Joined_DefaultIfEmpty2(bool isAsync) { await AssertQuery( @@ -1440,7 +1453,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Customer"") AND (c[""CustomerID""] = ""ALFKI""))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task SelectMany_Joined(bool isAsync) { await AssertQuery( @@ -1461,7 +1474,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Customer"") AND (c[""CustomerID""] = ""ALFKI""))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task SelectMany_Joined_Take(bool isAsync) { await AssertQuery( @@ -1483,7 +1496,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Customer"") AND (c[""CustomerID""] = ""ALFKI""))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Take_with_single(bool isAsync) { await base.Take_with_single(isAsync); @@ -1494,7 +1507,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Take_with_single_select_many(bool isAsync) { await AssertSingle( @@ -1518,7 +1531,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Customer"") AND (c[""CustomerID""] = ""ALFKI""))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Distinct_Skip(bool isAsync) { await base.Distinct_Skip(isAsync); @@ -1529,7 +1542,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Distinct_Skip_Take(bool isAsync) { await base.Distinct_Skip_Take(isAsync); @@ -1540,7 +1553,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Skip_Distinct(bool isAsync) { await base.Skip_Distinct(isAsync); @@ -1551,7 +1564,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Skip_Take_Distinct(bool isAsync) { await base.Skip_Take_Distinct(isAsync); @@ -1562,7 +1575,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Skip_Take_Any(bool isAsync) { await base.Skip_Take_Any(isAsync); @@ -1573,7 +1586,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Skip_Take_All(bool isAsync) { await base.Skip_Take_All(isAsync); @@ -1584,7 +1597,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Take_All(bool isAsync) { await base.Take_All(isAsync); @@ -1595,7 +1608,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Skip_Take_Any_with_predicate(bool isAsync) { await base.Skip_Take_Any_with_predicate(isAsync); @@ -1606,7 +1619,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Take_Any_with_predicate(bool isAsync) { await base.Take_Any_with_predicate(isAsync); @@ -1628,7 +1641,7 @@ FROM root c ORDER BY c[""CustomerID""]"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task OrderBy_true(bool isAsync) { await base.OrderBy_true(isAsync); @@ -1639,7 +1652,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task OrderBy_integer(bool isAsync) { await base.OrderBy_integer(isAsync); @@ -1650,7 +1663,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task OrderBy_parameter(bool isAsync) { await base.OrderBy_parameter(isAsync); @@ -1683,6 +1696,7 @@ FROM root c ORDER BY c[""CustomerID""]"); } + [ConditionalTheory(Skip = "Issue #17246")] public override async Task OrderBy_client_mixed(bool isAsync) { await base.OrderBy_client_mixed(isAsync); @@ -1693,6 +1707,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } + [ConditionalTheory(Skip = "Issue #17246")] public override async Task OrderBy_multiple_queries(bool isAsync) { await base.OrderBy_multiple_queries(isAsync); @@ -1703,7 +1718,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Take_Distinct(bool isAsync) { await base.Take_Distinct(isAsync); @@ -1714,7 +1729,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Order"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Distinct_Take(bool isAsync) { await base.Distinct_Take(isAsync); @@ -1725,7 +1740,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Order"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Distinct_Take_Count(bool isAsync) { await base.Distinct_Take_Count(isAsync); @@ -1736,7 +1751,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Order"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task OrderBy_shadow(bool isAsync) { await base.OrderBy_shadow(isAsync); @@ -1757,7 +1772,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task OrderBy_ThenBy_Any(bool isAsync) { await base.OrderBy_ThenBy_Any(isAsync); @@ -1768,7 +1783,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task OrderBy_correlated_subquery1(bool isAsync) { await base.OrderBy_correlated_subquery1(isAsync); @@ -1779,7 +1794,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task OrderBy_correlated_subquery2(bool isAsync) { await base.OrderBy_correlated_subquery2(isAsync); @@ -1790,7 +1805,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Order"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_subquery_recursive_trivial(bool isAsync) { await base.Where_subquery_recursive_trivial(isAsync); @@ -1801,6 +1816,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Employee"")"); } + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_query_composition4(bool isAsync) { await base.Where_query_composition4(isAsync); @@ -1811,7 +1827,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_subquery_expression(bool isAsync) { await AssertQuery( @@ -1830,7 +1846,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Order"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_subquery_expression_same_parametername(bool isAsync) { await AssertQuery( @@ -1849,6 +1865,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Order"")"); } + [ConditionalFact(Skip = "Issue #17246")] public override void Select_DTO_distinct_translated_to_server() { base.Select_DTO_distinct_translated_to_server(); @@ -1859,7 +1876,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Order"") AND (c[""OrderID""] < 10300))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override void Select_DTO_constructor_distinct_translated_to_server() { base.Select_DTO_constructor_distinct_translated_to_server(); @@ -1870,7 +1887,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Order"") AND (c[""OrderID""] < 10300))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override void Select_DTO_with_member_init_distinct_translated_to_server() { base.Select_DTO_with_member_init_distinct_translated_to_server(); @@ -1881,7 +1898,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Order"") AND (c[""OrderID""] < 10300))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override void Select_nested_collection_count_using_DTO() { base.Select_nested_collection_count_using_DTO(); @@ -1892,7 +1909,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Select_DTO_with_member_init_distinct_in_subquery_translated_to_server(bool isAsync) { await base.Select_DTO_with_member_init_distinct_in_subquery_translated_to_server(isAsync); @@ -1903,7 +1920,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Order"") AND (c[""OrderID""] < 10300))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override void Select_DTO_with_member_init_distinct_in_subquery_used_in_projection_translated_to_server() { base.Select_DTO_with_member_init_distinct_in_subquery_used_in_projection_translated_to_server(); @@ -1944,7 +1961,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_subquery_on_bool(bool isAsync) { await base.Where_subquery_on_bool(isAsync); @@ -1955,7 +1972,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Product"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Where_subquery_on_collection(bool isAsync) { await AssertQuery( @@ -1974,7 +1991,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Product"") AND (c[""ProductID""] = 72))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Select_many_cross_join_same_collection(bool isAsync) { await base.Select_many_cross_join_same_collection(isAsync); @@ -1985,7 +2002,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task OrderBy_null_coalesce_operator(bool isAsync) { await base.OrderBy_null_coalesce_operator(isAsync); @@ -1996,7 +2013,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Select_null_coalesce_operator(bool isAsync) { await base.Select_null_coalesce_operator(isAsync); @@ -2007,7 +2024,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task OrderBy_conditional_operator(bool isAsync) { await base.OrderBy_conditional_operator(isAsync); @@ -2018,7 +2035,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task OrderBy_conditional_operator_where_condition_false(bool isAsync) { await base.OrderBy_conditional_operator_where_condition_false(isAsync); @@ -2032,7 +2049,7 @@ FROM root c ORDER BY (@__p_0 ? ""ZZ"" : c[""City""])"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task OrderBy_comparison_operator(bool isAsync) { await base.OrderBy_comparison_operator(isAsync); @@ -2064,7 +2081,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Customer"") AND (((c[""CompanyName""] != null) ? c[""CompanyName""] : c[""ContactName""]) = ""The Big Cheese""))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Take_skip_null_coalesce_operator(bool isAsync) { await base.Take_skip_null_coalesce_operator(isAsync); @@ -2075,7 +2092,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Select_take_null_coalesce_operator(bool isAsync) { await base.Select_take_null_coalesce_operator(isAsync); @@ -2086,7 +2103,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Select_take_skip_null_coalesce_operator(bool isAsync) { await base.Select_take_skip_null_coalesce_operator(isAsync); @@ -2097,7 +2114,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Select_take_skip_null_coalesce_operator2(bool isAsync) { await base.Select_take_skip_null_coalesce_operator2(isAsync); @@ -2108,7 +2125,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Select_take_skip_null_coalesce_operator3(bool isAsync) { await base.Select_take_skip_null_coalesce_operator3(isAsync); @@ -2119,7 +2136,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override void Selected_column_can_coalesce() { base.Selected_column_can_coalesce(); @@ -2180,6 +2197,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Order"") AND (c[""OrderDate""] > @__p_0))"); } + [ConditionalFact(Skip = "Issue #17246")] public override void Random_next_is_not_funcletized_1() { base.Random_next_is_not_funcletized_1(); @@ -2190,6 +2208,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Order"")"); } + [ConditionalFact(Skip = "Issue #17246")] public override void Random_next_is_not_funcletized_2() { base.Random_next_is_not_funcletized_2(); @@ -2200,6 +2219,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Order"")"); } + [ConditionalFact(Skip = "Issue #17246")] public override void Random_next_is_not_funcletized_3() { base.Random_next_is_not_funcletized_3(); @@ -2210,6 +2230,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Order"")"); } + [ConditionalFact(Skip = "Issue #17246")] public override void Random_next_is_not_funcletized_4() { base.Random_next_is_not_funcletized_4(); @@ -2220,6 +2241,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Order"")"); } + [ConditionalFact(Skip = "Issue #17246")] public override void Random_next_is_not_funcletized_5() { base.Random_next_is_not_funcletized_5(); @@ -2230,6 +2252,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Order"")"); } + [ConditionalFact(Skip = "Issue #17246")] public override void Random_next_is_not_funcletized_6() { base.Random_next_is_not_funcletized_6(); @@ -2240,7 +2263,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Order"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Environment_newline_is_funcletized(bool isAsync) { await base.Environment_newline_is_funcletized(isAsync); @@ -2251,7 +2274,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task String_concat_with_navigation1(bool isAsync) { await base.String_concat_with_navigation1(isAsync); @@ -2262,7 +2285,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Order"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task String_concat_with_navigation2(bool isAsync) { await base.String_concat_with_navigation2(isAsync); @@ -2273,7 +2296,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Order"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override void Select_bitwise_or() { base.Select_bitwise_or(); @@ -2284,7 +2307,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override void Select_bitwise_or_multiple() { base.Select_bitwise_or_multiple(); @@ -2295,7 +2318,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override void Select_bitwise_and() { base.Select_bitwise_and(); @@ -2306,7 +2329,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override void Select_bitwise_and_or() { base.Select_bitwise_and_or(); @@ -2353,7 +2376,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Customer"") AND (((c[""CustomerID""] = ""ALFKI"") & (c[""CustomerID""] = ""ANATR"")) OR (c[""CustomerID""] = ""ANTON"")))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override void Select_bitwise_or_with_logical_or() { base.Select_bitwise_or_with_logical_or(); @@ -2364,7 +2387,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override void Select_bitwise_and_with_logical_and() { base.Select_bitwise_and_with_logical_and(); @@ -2375,7 +2398,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Handle_materialization_properly_when_more_than_two_query_sources_are_involved(bool isAsync) { await base.Handle_materialization_properly_when_more_than_two_query_sources_are_involved(isAsync); @@ -2394,7 +2417,7 @@ public override Task Parameter_extraction_short_circuits_1(bool isAsync) return Task.CompletedTask; } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Parameter_extraction_short_circuits_2(bool isAsync) { await base.Parameter_extraction_short_circuits_2(isAsync); @@ -2413,6 +2436,7 @@ public override Task Parameter_extraction_short_circuits_3(bool isAsync) return Task.CompletedTask; } + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Subquery_member_pushdown_does_not_change_original_subquery_model(bool isAsync) { await base.Subquery_member_pushdown_does_not_change_original_subquery_model(isAsync); @@ -2423,7 +2447,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Order"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Query_expression_with_to_string_and_contains(bool isAsync) { await base.Query_expression_with_to_string_and_contains(isAsync); @@ -2558,7 +2582,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Order"") AND (c[""OrderDate""] != null))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Select_expression_references_are_updated_correctly_with_subquery(bool isAsync) { await base.Select_expression_references_are_updated_correctly_with_subquery(isAsync); @@ -2569,7 +2593,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Order"") AND (c[""OrderDate""] != null))"); } - [ConditionalFact(Skip = "Issue#14935")] + [ConditionalFact(Skip = "Issue#17246")] public override void DefaultIfEmpty_without_group_join() { base.DefaultIfEmpty_without_group_join(); @@ -2580,7 +2604,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Customer"") AND (c[""City""] = ""London""))"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task DefaultIfEmpty_in_subquery(bool isAsync) { await AssertQuery( @@ -2602,13 +2626,13 @@ FROM root c WHERE ((c[""Discriminator""] = ""Customer"") AND (c[""City""] = ""London""))"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override Task DefaultIfEmpty_in_subquery_not_correlated(bool isAsync) { return base.DefaultIfEmpty_in_subquery_not_correlated(isAsync); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task DefaultIfEmpty_in_subquery_nested(bool isAsync) { await AssertQuery( @@ -2633,7 +2657,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Customer"") AND (c[""City""] = ""Seattle""))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task OrderBy_skip_take(bool isAsync) { await base.OrderBy_skip_take(isAsync); @@ -2644,7 +2668,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task OrderBy_skip_skip_take(bool isAsync) { await base.OrderBy_skip_skip_take(isAsync); @@ -2655,7 +2679,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task OrderBy_skip_take_take(bool isAsync) { await base.OrderBy_skip_take_take(isAsync); @@ -2666,7 +2690,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task OrderBy_skip_take_take_take_take(bool isAsync) { await base.OrderBy_skip_take_take_take_take(isAsync); @@ -2677,7 +2701,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task OrderBy_skip_take_skip_take_skip(bool isAsync) { await base.OrderBy_skip_take_skip_take_skip(isAsync); @@ -2688,7 +2712,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task OrderBy_skip_take_distinct(bool isAsync) { await base.OrderBy_skip_take_distinct(isAsync); @@ -2699,7 +2723,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task OrderBy_coalesce_take_distinct(bool isAsync) { await base.OrderBy_coalesce_take_distinct(isAsync); @@ -2710,7 +2734,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Product"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task OrderBy_coalesce_skip_take_distinct(bool isAsync) { await base.OrderBy_coalesce_skip_take_distinct(isAsync); @@ -2721,7 +2745,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Product"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task OrderBy_coalesce_skip_take_distinct_take(bool isAsync) { await base.OrderBy_coalesce_skip_take_distinct_take(isAsync); @@ -2732,7 +2756,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Product"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task OrderBy_skip_take_distinct_orderby_take(bool isAsync) { await base.OrderBy_skip_take_distinct_orderby_take(isAsync); @@ -2743,7 +2767,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task No_orderby_added_for_fully_translated_manually_constructed_LOJ(bool isAsync) { await base.No_orderby_added_for_fully_translated_manually_constructed_LOJ(isAsync); @@ -2796,7 +2820,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Employee"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Contains_with_DateTime_Date(bool isAsync) { await base.Contains_with_DateTime_Date(isAsync); @@ -2807,7 +2831,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Order"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Contains_with_subquery_involving_join_binds_to_correct_table(bool isAsync) { await AssertQuery( @@ -2826,6 +2850,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Order"")"); } + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Complex_query_with_repeated_query_model_compiles_correctly(bool isAsync) { await base.Complex_query_with_repeated_query_model_compiles_correctly(isAsync); @@ -2836,6 +2861,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Customer"") AND (c[""CustomerID""] = ""ALFKI""))"); } + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Complex_query_with_repeated_nested_query_model_compiles_correctly(bool isAsync) { await base.Complex_query_with_repeated_nested_query_model_compiles_correctly(isAsync); @@ -2857,7 +2883,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task Anonymous_member_distinct_orderby(bool isAsync) { await base.Anonymous_member_distinct_orderby(isAsync); @@ -2868,7 +2894,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task Anonymous_member_distinct_result(bool isAsync) { await base.Anonymous_member_distinct_result(isAsync); @@ -2890,7 +2916,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Anonymous_complex_distinct_orderby(bool isAsync) { await base.Anonymous_complex_distinct_orderby(isAsync); @@ -2901,7 +2927,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Anonymous_complex_distinct_result(bool isAsync) { await base.Anonymous_complex_distinct_result(isAsync); @@ -2912,7 +2938,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Anonymous_complex_orderby(bool isAsync) { await base.Anonymous_complex_orderby(isAsync); @@ -2923,7 +2949,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Anonymous_subquery_orderby(bool isAsync) { await AssertQuery( @@ -2941,7 +2967,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Customer"") AND (c[""City""] = ""London""))"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task DTO_member_distinct_where(bool isAsync) { await base.DTO_member_distinct_where(isAsync); @@ -2952,7 +2978,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task DTO_member_distinct_orderby(bool isAsync) { await base.DTO_member_distinct_orderby(isAsync); @@ -2963,7 +2989,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task DTO_member_distinct_result(bool isAsync) { await base.DTO_member_distinct_result(isAsync); @@ -2974,7 +3000,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task DTO_complex_distinct_where(bool isAsync) { await base.DTO_complex_distinct_where(isAsync); @@ -2985,7 +3011,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task DTO_complex_distinct_orderby(bool isAsync) { await base.DTO_complex_distinct_orderby(isAsync); @@ -2996,7 +3022,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task DTO_complex_distinct_result(bool isAsync) { await base.DTO_complex_distinct_result(isAsync); @@ -3007,7 +3033,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task DTO_complex_orderby(bool isAsync) { await base.DTO_complex_orderby(isAsync); @@ -3018,7 +3044,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task DTO_subquery_orderby(bool isAsync) { await AssertQuery( @@ -3037,7 +3063,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Customer"") AND (c[""CustomerID""] = ""ALFKI""))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Include_with_orderby_skip_preserves_ordering(bool isAsync) { await base.Include_with_orderby_skip_preserves_ordering(isAsync); @@ -3058,7 +3084,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Order"") AND (c[""OrderID""] = 10300))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Subquery_is_null_translated_correctly(bool isAsync) { await AssertQuery( @@ -3078,7 +3104,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Customer"") AND (c[""CustomerID""] = ""ALFKI""))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Subquery_is_not_null_translated_correctly(bool isAsync) { await AssertQuery( @@ -3098,7 +3124,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Customer"") AND (c[""CustomerID""] = ""ALFKI""))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Select_take_average(bool isAsync) { await base.Select_take_average(isAsync); @@ -3109,7 +3135,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Order"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Select_take_count(bool isAsync) { await base.Select_take_count(isAsync); @@ -3120,7 +3146,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Select_orderBy_take_count(bool isAsync) { await base.Select_orderBy_take_count(isAsync); @@ -3131,7 +3157,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Select_take_long_count(bool isAsync) { await base.Select_take_long_count(isAsync); @@ -3142,7 +3168,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Select_orderBy_take_long_count(bool isAsync) { await base.Select_orderBy_take_long_count(isAsync); @@ -3153,7 +3179,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Select_take_max(bool isAsync) { await base.Select_take_max(isAsync); @@ -3164,7 +3190,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Order"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Select_take_min(bool isAsync) { await base.Select_take_min(isAsync); @@ -3175,7 +3201,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Order"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Select_take_sum(bool isAsync) { await base.Select_take_sum(isAsync); @@ -3186,7 +3212,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Order"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Select_skip_average(bool isAsync) { await base.Select_skip_average(isAsync); @@ -3197,7 +3223,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Order"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Select_skip_count(bool isAsync) { await base.Select_skip_count(isAsync); @@ -3208,7 +3234,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Select_orderBy_skip_count(bool isAsync) { await base.Select_orderBy_skip_count(isAsync); @@ -3219,7 +3245,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Select_skip_long_count(bool isAsync) { await base.Select_skip_long_count(isAsync); @@ -3230,7 +3256,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Select_orderBy_skip_long_count(bool isAsync) { await base.Select_orderBy_skip_long_count(isAsync); @@ -3241,7 +3267,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Select_skip_max(bool isAsync) { await base.Select_skip_max(isAsync); @@ -3252,7 +3278,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Order"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Select_skip_min(bool isAsync) { await base.Select_skip_min(isAsync); @@ -3263,7 +3289,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Order"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Select_skip_sum(bool isAsync) { await base.Select_skip_sum(isAsync); @@ -3274,7 +3300,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Order"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Select_distinct_average(bool isAsync) { await base.Select_distinct_average(isAsync); @@ -3285,7 +3311,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Order"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Select_distinct_count(bool isAsync) { await base.Select_distinct_count(isAsync); @@ -3296,7 +3322,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Select_distinct_long_count(bool isAsync) { await base.Select_distinct_long_count(isAsync); @@ -3307,7 +3333,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Select_distinct_max(bool isAsync) { await base.Select_distinct_max(isAsync); @@ -3318,7 +3344,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Order"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Select_distinct_min(bool isAsync) { await base.Select_distinct_min(isAsync); @@ -3329,7 +3355,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Order"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Select_distinct_sum(bool isAsync) { await base.Select_distinct_sum(isAsync); @@ -3340,7 +3366,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Order"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task Comparing_to_fixed_string_parameter(bool isAsync) { await base.Comparing_to_fixed_string_parameter(isAsync); @@ -3351,7 +3377,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task Comparing_entities_using_Equals(bool isAsync) { await base.Comparing_entities_using_Equals(isAsync); @@ -3362,7 +3388,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task Comparing_different_entity_types_using_Equals(bool isAsync) { await AssertQuery( @@ -3380,7 +3406,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Customer"") AND (c[""CustomerID""] = ""ALFKI""))"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task Comparing_entity_to_null_using_Equals(bool isAsync) { await base.Comparing_entity_to_null_using_Equals(isAsync); @@ -3391,7 +3417,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Comparing_navigations_using_Equals(bool isAsync) { await AssertQuery( @@ -3415,7 +3441,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Order"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Comparing_navigations_using_static_Equals(bool isAsync) { await AssertQuery( @@ -3439,7 +3465,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Order"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Comparing_non_matching_entities_using_Equals(bool isAsync) { await AssertQuery( @@ -3462,7 +3488,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Customer"") AND (c[""CustomerID""] = ""ALFKI""))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Comparing_non_matching_collection_navigations_using_Equals(bool isAsync) { await AssertQuery( @@ -3485,7 +3511,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Customer"") AND (c[""CustomerID""] = ""ALFKI""))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Comparing_collection_navigation_to_null(bool isAsync) { await base.Comparing_collection_navigation_to_null(isAsync); @@ -3496,7 +3522,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Customer"") AND (c[""CustomerID""] = null))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Comparing_collection_navigation_to_null_complex(bool isAsync) { await base.Comparing_collection_navigation_to_null_complex(isAsync); @@ -3507,7 +3533,7 @@ FROM root c WHERE (c[""Discriminator""] = ""OrderDetail"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Compare_collection_navigation_with_itself(bool isAsync) { await base.Compare_collection_navigation_with_itself(isAsync); @@ -3518,7 +3544,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Compare_two_collection_navigations_with_different_query_sources(bool isAsync) { await base.Compare_two_collection_navigations_with_different_query_sources(isAsync); @@ -3529,7 +3555,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Compare_two_collection_navigations_using_equals(bool isAsync) { await base.Compare_two_collection_navigations_using_equals(isAsync); @@ -3540,7 +3566,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Compare_two_collection_navigations_with_different_property_chains(bool isAsync) { await base.Compare_two_collection_navigations_with_different_property_chains(isAsync); @@ -3551,7 +3577,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Customer"") AND (c[""CustomerID""] = ""ALFKI""))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task OrderBy_ThenBy_same_column_different_direction(bool isAsync) { await base.OrderBy_ThenBy_same_column_different_direction(isAsync); @@ -3562,7 +3588,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task OrderBy_OrderBy_same_column_different_direction(bool isAsync) { await base.OrderBy_OrderBy_same_column_different_direction(isAsync); @@ -3583,7 +3609,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Customer"") AND (c[""CustomerID""] = ""ALFKI""))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Complex_nested_query_properly_binds_to_grandparent_when_parent_returns_scalar_result(bool isAsync) { await AssertQuery( @@ -3663,7 +3689,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""Customer"") AND (c[""CustomerID""] = ""ALFKI""))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Join_take_count_works(bool isAsync) { await base.Join_take_count_works(isAsync); @@ -3694,7 +3720,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override void Manual_expression_tree_typed_null_equality() { base.Manual_expression_tree_typed_null_equality(); @@ -3705,7 +3731,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Order"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Let_subquery_with_multiple_occurrences(bool isAsync) { await AssertQuery( @@ -3743,7 +3769,7 @@ FROM root c WHERE ((c[""Discriminator""] = ""OrderDetail"") AND (c[""Quantity""] < 10))"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Let_entity_equality_to_null(bool isAsync) { await base.Let_entity_equality_to_null(isAsync); @@ -3754,7 +3780,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task Let_entity_equality_to_other_entity(bool isAsync) { await base.Let_entity_equality_to_other_entity(isAsync); @@ -3765,6 +3791,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } + [ConditionalTheory(Skip = "Issue #17246")] public override async Task SelectMany_after_client_method(bool isAsync) { await base.SelectMany_after_client_method(isAsync); @@ -3775,7 +3802,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Collection_navigation_equal_to_null_for_subquery(bool isAsync) { await AssertQuery( @@ -3805,7 +3832,7 @@ FROM root c WHERE (c[""Discriminator""] = ""Customer"")"); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override async Task Collection_navigation_equality_rewrite_for_subquery(bool isAsync) { await base.Collection_navigation_equality_rewrite_for_subquery(isAsync); @@ -3826,288 +3853,300 @@ public override void Throws_on_concurrent_query_list() // #13160 } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override Task Entity_equality_through_nested_anonymous_type_projection(bool isAsync) { return base.Entity_equality_through_nested_anonymous_type_projection(isAsync); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override async Task Entity_equality_through_DTO_projection(bool isAsync) { await base.Entity_equality_through_DTO_projection(isAsync); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override Task GroupJoin_customers_employees_shadow(bool isAsync) { return base.GroupJoin_customers_employees_shadow(isAsync); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override Task GroupJoin_customers_employees_subquery_shadow(bool isAsync) { return base.GroupJoin_customers_employees_subquery_shadow(isAsync); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override Task GroupJoin_customers_employees_subquery_shadow_take(bool isAsync) { return base.GroupJoin_customers_employees_subquery_shadow_take(isAsync); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override Task GroupJoin_projection(bool isAsync) { return base.GroupJoin_projection(isAsync); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override Task Cast_before_aggregate_is_preserved(bool isAsync) { return base.Cast_before_aggregate_is_preserved(isAsync); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override Task Decimal_cast_to_double_works(bool isAsync) { return base.Decimal_cast_to_double_works(isAsync); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override Task Entity_equality_through_subquery(bool isAsync) { return base.Entity_equality_through_subquery(isAsync); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override Task Enumerable_min_is_mapped_to_Queryable_1(bool isAsync) { return base.Enumerable_min_is_mapped_to_Queryable_1(isAsync); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override Task Enumerable_min_is_mapped_to_Queryable_2(bool isAsync) { return base.Enumerable_min_is_mapped_to_Queryable_2(isAsync); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override Task Join_customers_orders_entities_same_entity_twice(bool isAsync) { return base.Join_customers_orders_entities_same_entity_twice(isAsync); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override Task Multiple_collection_navigation_with_FirstOrDefault_chained_projecting_scalar(bool isAsync) { return base.Multiple_collection_navigation_with_FirstOrDefault_chained_projecting_scalar(isAsync); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override void Can_convert_manually_build_expression_with_default() { base.Can_convert_manually_build_expression_with_default(); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override Task Count_with_no_predicate(bool isAsync) { return base.Count_with_no_predicate(isAsync); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override Task Count_with_order_by(bool isAsync) { return base.Count_with_order_by(isAsync); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override Task Entity_equality_orderby_descending_composite_key(bool isAsync) { return base.Entity_equality_orderby_descending_composite_key(isAsync); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override Task Null_Coalesce_Short_Circuit(bool isAsync) { return base.Null_Coalesce_Short_Circuit(isAsync); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override Task OrderByDescending_ThenBy(bool isAsync) { return base.OrderByDescending_ThenBy(isAsync); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override Task OrderByDescending_ThenByDescending(bool isAsync) { return base.OrderByDescending_ThenByDescending(isAsync); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override Task OrderBy_Join(bool isAsync) { return base.OrderBy_Join(isAsync); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override Task OrderBy_ThenBy(bool isAsync) { return base.OrderBy_ThenBy(isAsync); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override Task OrderBy_ThenBy_predicate(bool isAsync) { return base.OrderBy_ThenBy_predicate(isAsync); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override Task SelectMany_correlated_simple(bool isAsync) { return base.SelectMany_correlated_simple(isAsync); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override Task SelectMany_nested_simple(bool isAsync) { return base.SelectMany_nested_simple(isAsync); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override Task SelectMany_primitive(bool isAsync) { return base.SelectMany_primitive(isAsync); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override Task SelectMany_primitive_select_subquery(bool isAsync) { return base.SelectMany_primitive_select_subquery(isAsync); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override void Select_DTO_constructor_distinct_with_navigation_translated_to_server() { base.Select_DTO_constructor_distinct_with_navigation_translated_to_server(); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override Task Select_Property_when_shadow_unconstrained_generic_method(bool isAsync) { return base.Select_Property_when_shadow_unconstrained_generic_method(isAsync); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override Task Skip_orderby_const(bool isAsync) { return base.Skip_orderby_const(isAsync); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override Task Sum_with_no_arg_empty(bool isAsync) { return base.Sum_with_no_arg_empty(isAsync); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override Task Sum_with_no_data_nullable(bool isAsync) { return base.Sum_with_no_data_nullable(isAsync); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override Task Where_Property_when_shadow_unconstrained_generic_method(bool isAsync) { return base.Where_Property_when_shadow_unconstrained_generic_method(isAsync); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override Task Where_concat_string_int_comparison4(bool isAsync) { return base.Where_concat_string_int_comparison4(isAsync); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override Task Where_simple_shadow_subquery(bool isAsync) { return base.Where_simple_shadow_subquery(isAsync); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override Task Where_string_concat_method_comparison(bool isAsync) { return base.Where_string_concat_method_comparison(isAsync); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override Task Inner_parameter_in_nested_lambdas_gets_preserved(bool isAsync) { return base.Inner_parameter_in_nested_lambdas_gets_preserved(isAsync); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override Task Navigation_inside_interpolated_string_is_expanded(bool isAsync) { return base.Navigation_inside_interpolated_string_is_expanded(isAsync); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override Task Select_DTO_with_member_init_distinct_in_subquery_translated_to_server_2(bool isAsync) { return base.Select_DTO_with_member_init_distinct_in_subquery_translated_to_server_2(isAsync); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override Task SelectMany_without_result_selector_naked_collection_navigation(bool isAsync) { return base.SelectMany_without_result_selector_naked_collection_navigation(isAsync); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override Task SelectMany_without_result_selector_collection_navigation_composed(bool isAsync) { return base.SelectMany_without_result_selector_collection_navigation_composed(isAsync); } - [ConditionalTheory(Skip = "Issue #14935")] + [ConditionalTheory(Skip = "Issue #17246")] public override Task SelectMany_correlated_subquery_simple(bool isAsync) { return base.SelectMany_correlated_subquery_simple(isAsync); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override Task Multiple_select_many_with_predicate(bool isAsync) { return base.Multiple_select_many_with_predicate(isAsync); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override Task SelectMany_correlated_with_outer_1(bool isAsync) { return base.SelectMany_correlated_with_outer_1(isAsync); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override Task SelectMany_correlated_with_outer_2(bool isAsync) { return base.SelectMany_correlated_with_outer_2(isAsync); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override Task SelectMany_correlated_with_outer_3(bool isAsync) { return base.SelectMany_correlated_with_outer_3(isAsync); } - [ConditionalTheory(Skip = "Issue#14935")] + [ConditionalTheory(Skip = "Issue#17246")] public override Task SelectMany_correlated_with_outer_4(bool isAsync) { return base.SelectMany_correlated_with_outer_4(isAsync); } + [ConditionalTheory(Skip = "Issue #17246")] + public override Task All_client(bool isAsync) => null; + + [ConditionalTheory(Skip = "Issue #17246")] + public override Task Client_OrderBy_GroupBy_Group_ordering_works(bool isAsync) => null; + + [ConditionalTheory(Skip = "Issue #17246")] + public override Task Subquery_member_pushdown_does_not_change_original_subquery_model2(bool isAsync) => null; + + [ConditionalTheory(Skip = "Issue #17246")] + public override Task Where_query_composition3(bool isAsync) => null; + private void AssertSql(params string[] expected) => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); diff --git a/test/EFCore.InMemory.FunctionalTests/Query/AsyncSimpleQueryInMemoryTest.cs b/test/EFCore.InMemory.FunctionalTests/Query/AsyncSimpleQueryInMemoryTest.cs index 3a0863074df..d8e66946572 100644 --- a/test/EFCore.InMemory.FunctionalTests/Query/AsyncSimpleQueryInMemoryTest.cs +++ b/test/EFCore.InMemory.FunctionalTests/Query/AsyncSimpleQueryInMemoryTest.cs @@ -14,6 +14,42 @@ public AsyncSimpleQueryInMemoryTest(NorthwindQueryInMemoryFixture null; + [ConditionalFact(Skip = "See issue#13857")] public override void DbQuery_query() { diff --git a/test/EFCore.InMemory.FunctionalTests/Query/FiltersInMemoryTest.cs b/test/EFCore.InMemory.FunctionalTests/Query/FiltersInMemoryTest.cs index 59a93b9250b..1460bf1ecad 100644 --- a/test/EFCore.InMemory.FunctionalTests/Query/FiltersInMemoryTest.cs +++ b/test/EFCore.InMemory.FunctionalTests/Query/FiltersInMemoryTest.cs @@ -14,6 +14,16 @@ public FiltersInMemoryTest(NorthwindQueryInMemoryFixture @@ -9,5 +12,8 @@ public IncludeAsyncInMemoryTest(IncludeInMemoryFixture fixture) : base(fixture) { } + + [ConditionalFact(Skip = "Issue #16963")] + public override Task Include_collection_with_client_filter() => null; } } diff --git a/test/EFCore.InMemory.FunctionalTests/Query/IncludeInMemoryTest.cs b/test/EFCore.InMemory.FunctionalTests/Query/IncludeInMemoryTest.cs index 09261eb963c..dc3a8fc3f24 100644 --- a/test/EFCore.InMemory.FunctionalTests/Query/IncludeInMemoryTest.cs +++ b/test/EFCore.InMemory.FunctionalTests/Query/IncludeInMemoryTest.cs @@ -1,6 +1,7 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +using Xunit; using Xunit.Abstractions; namespace Microsoft.EntityFrameworkCore.Query @@ -12,5 +13,10 @@ public IncludeInMemoryTest(IncludeInMemoryFixture fixture, ITestOutputHelper tes { //TestLoggerFactory.TestOutputHelper = testOutputHelper; } + + [ConditionalTheory(Skip = "Issue #16963")] + public override void Include_collection_with_client_filter(bool useString) + { + } } } diff --git a/test/EFCore.InMemory.FunctionalTests/Query/QueryBugsInMemoryTest.cs b/test/EFCore.InMemory.FunctionalTests/Query/QueryBugsInMemoryTest.cs index 0ed1903ebf1..1fbefc28c57 100644 --- a/test/EFCore.InMemory.FunctionalTests/Query/QueryBugsInMemoryTest.cs +++ b/test/EFCore.InMemory.FunctionalTests/Query/QueryBugsInMemoryTest.cs @@ -14,6 +14,7 @@ // ReSharper disable InconsistentNaming namespace Microsoft.EntityFrameworkCore.Query { + // Issue #16963 internal class QueryBugsInMemoryTest : IClassFixture { #region Bug9849 diff --git a/test/EFCore.InMemory.FunctionalTests/Query/QueryNavigationsInMemoryTest.cs b/test/EFCore.InMemory.FunctionalTests/Query/QueryNavigationsInMemoryTest.cs index db9a48aee3a..e06585cdecc 100644 --- a/test/EFCore.InMemory.FunctionalTests/Query/QueryNavigationsInMemoryTest.cs +++ b/test/EFCore.InMemory.FunctionalTests/Query/QueryNavigationsInMemoryTest.cs @@ -18,19 +18,38 @@ public QueryNavigationsInMemoryTest( } [ConditionalTheory(Skip = "Issue #16963")] - public override Task Select_collection_navigation_simple(bool isAsync) - => Task.CompletedTask; + public override Task Where_subquery_on_navigation_client_eval(bool isAsync) => null; [ConditionalTheory(Skip = "Issue #16963")] - public override Task Select_collection_navigation_simple_followed_by_ordering_by_scalar(bool isAsync) - => Task.CompletedTask; + public override Task Select_Where_Navigation_Client(bool isAsync) => null; [ConditionalTheory(Skip = "Issue #16963")] - public override Task Select_collection_navigation_multi_part(bool isAsync) - => Task.CompletedTask; + public override Task Join_with_nav_in_predicate_in_subquery_when_client_eval(bool isAsync) => null; [ConditionalTheory(Skip = "Issue #16963")] - public override Task Select_collection_navigation_multi_part2(bool isAsync) - => Task.CompletedTask; + public override Task Join_with_nav_projected_in_subquery_when_client_eval(bool isAsync) => null; + + [ConditionalTheory(Skip = "Issue #16963")] + public override Task Join_with_nav_in_orderby_in_subquery_when_client_eval(bool isAsync) => null; + + [ConditionalTheory(Skip = "Issue #16963")] + public override Task Collection_select_nav_prop_all_client(bool isAsync) => null; + + [ConditionalTheory(Skip = "Issue #16963")] + public override void Collection_where_nav_prop_all_client() + { + } + + [ConditionalTheory(Skip = "Issue #16963")] + public override Task Select_collection_navigation_simple(bool isAsync) => null; + + [ConditionalTheory(Skip = "Issue #16963")] + public override Task Select_collection_navigation_simple_followed_by_ordering_by_scalar(bool isAsync) => null; + + [ConditionalTheory(Skip = "Issue #16963")] + public override Task Select_collection_navigation_multi_part(bool isAsync) => null; + + [ConditionalTheory(Skip = "Issue #16963")] + public override Task Select_collection_navigation_multi_part2(bool isAsync) => null; } } diff --git a/test/EFCore.InMemory.FunctionalTests/Query/SimpleQueryInMemoryTest.cs b/test/EFCore.InMemory.FunctionalTests/Query/SimpleQueryInMemoryTest.cs index 66934993c12..bdaf898638d 100644 --- a/test/EFCore.InMemory.FunctionalTests/Query/SimpleQueryInMemoryTest.cs +++ b/test/EFCore.InMemory.FunctionalTests/Query/SimpleQueryInMemoryTest.cs @@ -24,31 +24,22 @@ public SimpleQueryInMemoryTest( [ConditionalFact(Skip = "See issue#13857")] public override void Auto_initialized_view_set() { - base.Auto_initialized_view_set(); } [ConditionalTheory(Skip = "See issue#13857")] - public override Task KeylessEntity_simple(bool isAsync) - { - return base.KeylessEntity_simple(isAsync); - } + public override Task KeylessEntity_simple(bool isAsync) => null; [ConditionalTheory(Skip = "See issue#13857")] - public override Task KeylessEntity_where_simple(bool isAsync) - { - return base.KeylessEntity_where_simple(isAsync); - } + public override Task KeylessEntity_where_simple(bool isAsync) => null; [ConditionalFact(Skip = "See issue#13857")] public override void KeylessEntity_by_database_view() { - base.KeylessEntity_by_database_view(); } // InMemory can mimic throw behavior for subquery public override void Average_no_data_subquery() { - Assert.Throws(() => base.Average_no_data_subquery()); } public override void Min_no_data_subquery() @@ -61,380 +52,334 @@ public override void Max_no_data_subquery() Assert.Throws(() => base.Max_no_data_subquery()); } - #region SetOperations - public override Task Concat(bool isAsync) - { - return Task.CompletedTask; //base.Concat(isAsync); - } + [ConditionalTheory(Skip = "Issue #16963")] + public override Task Concat(bool isAsync) => null; - public override Task Concat_nested(bool isAsync) - { - return Task.CompletedTask; //base.Concat_nested(isAsync); - } + [ConditionalTheory(Skip = "Issue #16963")] + public override Task Concat_nested(bool isAsync) => null; - public override Task Concat_non_entity(bool isAsync) - { - return Task.CompletedTask; //base.Concat_non_entity(isAsync); - } + [ConditionalTheory(Skip = "Issue #16963")] + public override Task Concat_non_entity(bool isAsync) => null; - public override Task Except(bool isAsync) - { - return Task.CompletedTask; //base.Except(isAsync); - } + [ConditionalTheory(Skip = "Issue #16963")] + public override Task Except(bool isAsync) => null; - public override Task Except_nested(bool isAsync) - { - return Task.CompletedTask; //base.Except_nested(isAsync); - } + [ConditionalTheory(Skip = "Issue #16963")] + public override Task Except_nested(bool isAsync) => null; - public override Task Except_non_entity(bool isAsync) - { - return Task.CompletedTask; //base.Except_non_entity(isAsync); - } + [ConditionalTheory(Skip = "Issue #16963")] + public override Task Except_non_entity(bool isAsync) => null; - public override Task Except_simple_followed_by_projecting_constant(bool isAsync) - { - return Task.CompletedTask; //base.Except_simple_followed_by_projecting_constant(isAsync); - } + [ConditionalTheory(Skip = "Issue #16963")] + public override Task Except_simple_followed_by_projecting_constant(bool isAsync) => null; - public override Task Intersect(bool isAsync) - { - return Task.CompletedTask; //base.Intersect(isAsync); - } + [ConditionalTheory(Skip = "Issue #16963")] + public override Task Intersect(bool isAsync) => null; - public override Task Intersect_nested(bool isAsync) - { - return Task.CompletedTask; //base.Intersect_nested(isAsync); - } + [ConditionalTheory(Skip = "Issue #16963")] + public override Task Intersect_nested(bool isAsync) => null; - public override Task Intersect_non_entity(bool isAsync) - { - return Task.CompletedTask; //base.Intersect_non_entity(isAsync); - } + [ConditionalTheory(Skip = "Issue #16963")] + public override Task Intersect_non_entity(bool isAsync) => null; - public override Task Union_Intersect(bool isAsync) - { - return Task.CompletedTask; //base.Union_Intersect(isAsync); - } + [ConditionalTheory(Skip = "Issue #16963")] + public override Task Union_Intersect(bool isAsync) => null; - public override Task Union(bool isAsync) - { - return Task.CompletedTask; //base.Union(isAsync); - } + [ConditionalTheory(Skip = "Issue #16963")] + public override Task Union(bool isAsync) => null; - public override Task Union_Include(bool isAsync) - { - return Task.CompletedTask; //base.Union_Include(isAsync); - } + [ConditionalTheory(Skip = "Issue #16963")] + public override Task Union_Include(bool isAsync) => null; - public override Task Union_nested(bool isAsync) - { - return Task.CompletedTask; //base.Union_nested(isAsync); - } + [ConditionalTheory(Skip = "Issue #16963")] + public override Task Union_nested(bool isAsync) => null; - public override void Union_non_entity(bool isAsync) - { - base.Union_non_entity(isAsync); - } + [ConditionalTheory(Skip = "Issue #16963")] + public override Task Union_OrderBy_Skip_Take(bool isAsync) => null; - public override Task Union_OrderBy_Skip_Take(bool isAsync) - { - return Task.CompletedTask; //base.Union_OrderBy_Skip_Take(isAsync); - } + [ConditionalTheory(Skip = "Issue #16963")] + public override Task Union_Select(bool isAsync) => null; - public override Task Union_Select(bool isAsync) - { - return Task.CompletedTask; //base.Union_Select(isAsync); - } + [ConditionalTheory(Skip = "Issue #16963")] + public override Task Union_Skip_Take_OrderBy_ThenBy_Where(bool isAsync) => null; - public override Task Union_Skip_Take_OrderBy_ThenBy_Where(bool isAsync) - { - return Task.CompletedTask; //base.Union_Skip_Take_OrderBy_ThenBy_Where(isAsync); - } + [ConditionalTheory(Skip = "Issue #16963")] + public override Task Union_Take_Union_Take(bool isAsync) => null; - public override Task Union_Take_Union_Take(bool isAsync) - { - return Task.CompletedTask; //base.Union_Take_Union_Take(isAsync); - } + [ConditionalTheory(Skip = "Issue #16963")] + public override Task Union_Union(bool isAsync) => null; - public override Task Union_Union(bool isAsync) - { - return Task.CompletedTask; //base.Union_Union(isAsync); - } + [ConditionalTheory(Skip = "Issue #16963")] + public override Task Union_Where(bool isAsync) => null; - public override Task Union_Where(bool isAsync) - { - return Task.CompletedTask; //base.Union_Where(isAsync); - } + [ConditionalTheory(Skip = "Issue #16963")] + public override Task Union_with_anonymous_type_projection(bool isAsync) => null; - public override Task Union_with_anonymous_type_projection(bool isAsync) - { - return Task.CompletedTask; //base.Union_with_anonymous_type_projection(isAsync); - } + [ConditionalTheory(Skip = "Issue #16963")] + public override Task Client_eval_Union_FirstOrDefault(bool isAsync) => null; - public override Task Client_eval_Union_FirstOrDefault(bool isAsync) - { - return Task.CompletedTask; //base.Client_eval_Union_FirstOrDefault(isAsync); - } + [ConditionalTheory(Skip = "Issue #16963")] + public override Task Include_Union(bool isAsync) => null; - public override Task Include_Union(bool isAsync) - { - return Task.CompletedTask; //base.Include_Union(isAsync); - } + [ConditionalTheory(Skip = "Issue #16963")] + public override Task Select_Union(bool isAsync) => null; - public override void Include_Union_different_includes_throws() - { - base.Include_Union_different_includes_throws(); - } + [ConditionalTheory(Skip = "Issue #16963")] + public override Task Select_Union_different_fields_in_anonymous_with_subquery(bool isAsync) => null; - public override void Include_Union_only_on_one_side_throws() - { - base.Include_Union_only_on_one_side_throws(); - } + [ConditionalTheory(Skip = "Issue #16963")] + public override Task Select_Union_unrelated(bool isAsync) => null; - public override Task Select_Union(bool isAsync) - { - return Task.CompletedTask; //base.Select_Union(isAsync); - } + [ConditionalTheory(Skip = "Issue #16963")] + public override Task SubSelect_Union(bool isAsync) => null; - public override Task Select_Union_different_fields_in_anonymous_with_subquery(bool isAsync) - { - return Task.CompletedTask; //base.Select_Union_different_fields_in_anonymous_with_subquery(isAsync); - } + [ConditionalTheory(Skip = "Issue #16963")] + public override Task Select_Except_reference_projection(bool isAsync) => null; - public override Task Select_Union_unrelated(bool isAsync) - { - return Task.CompletedTask; //base.Select_Union_unrelated(isAsync); - } + [ConditionalTheory(Skip = "Issue #16963")] + public override Task GroupBy_Select_Union(bool isAsync) => null; - public override Task SubSelect_Union(bool isAsync) - { - return Task.CompletedTask; //base.SubSelect_Union(isAsync); - } + [ConditionalTheory(Skip = "Issue #16963")] + public override Task Union_over_different_projection_types(bool isAsync, string leftType, string rightType) => null; - public override Task Select_Except_reference_projection(bool isAsync) - { - return Task.CompletedTask; //base.Select_Except_reference_projection(isAsync); - } + [ConditionalTheory(Skip = "Issue #16963")] + public override Task Include_with_orderby_skip_preserves_ordering(bool isAsync) => null; - public override Task GroupBy_Select_Union(bool isAsync) - { - return Task.CompletedTask; //base.GroupBy_Select_Union(isAsync); - } - - public override Task Union_over_different_projection_types(bool isAsync, string leftType, string rightType) - { - return Task.CompletedTask; //base.Union_over_different_projection_types(isAsync); - } - - #endregion - - [ConditionalTheory(Skip = "Issue#16963")] - public override Task Include_with_orderby_skip_preserves_ordering(bool isAsync) - { - return base.Include_with_orderby_skip_preserves_ordering(isAsync); - } - - [ConditionalFact(Skip = "Issue#16963")] + [ConditionalFact(Skip = "Issue #16963")] public override void Select_nested_collection_multi_level() { - base.Select_nested_collection_multi_level(); } - [ConditionalTheory(Skip = "Issue#16963")] - public override Task DefaultIfEmpty_in_subquery(bool isAsync) - { - return base.DefaultIfEmpty_in_subquery(isAsync); - } + [ConditionalTheory(Skip = "Issue #16963")] + public override Task DefaultIfEmpty_in_subquery(bool isAsync) => null; - [ConditionalTheory(Skip = "Issue#16963")] - public override Task DefaultIfEmpty_in_subquery_nested(bool isAsync) - { - return base.DefaultIfEmpty_in_subquery_nested(isAsync); - } + [ConditionalTheory(Skip = "Issue #16963")] + public override Task DefaultIfEmpty_in_subquery_nested(bool isAsync) => null; - [ConditionalTheory(Skip = "Issue#16963")] - public override Task DefaultIfEmpty_in_subquery_not_correlated(bool isAsync) - { - return base.DefaultIfEmpty_in_subquery_not_correlated(isAsync); - } + [ConditionalTheory(Skip = "Issue #16963")] + public override Task DefaultIfEmpty_in_subquery_not_correlated(bool isAsync) => null; - [ConditionalFact(Skip = "Issue#16963")] + [ConditionalFact(Skip = "Issue #16963")] public override void DefaultIfEmpty_without_group_join() { - base.DefaultIfEmpty_without_group_join(); } - [ConditionalTheory(Skip = "Issue#16963")] - public override Task Default_if_empty_top_level(bool isAsync) - { - return base.Default_if_empty_top_level(isAsync); - } + [ConditionalTheory(Skip = "Issue #16963")] + public override Task Default_if_empty_top_level(bool isAsync) => null; - [ConditionalTheory(Skip = "Issue#16963")] - public override Task Default_if_empty_top_level_followed_by_projecting_constant(bool isAsync) - { - return base.Default_if_empty_top_level_followed_by_projecting_constant(isAsync); - } + [ConditionalTheory(Skip = "Issue #16963")] + public override Task Default_if_empty_top_level_followed_by_projecting_constant(bool isAsync) => null; - [ConditionalTheory(Skip = "Issue#16963")] - public override Task Default_if_empty_top_level_positive(bool isAsync) - { - return base.Default_if_empty_top_level_positive(isAsync); - } + [ConditionalTheory(Skip = "Issue #16963")] + public override Task Default_if_empty_top_level_positive(bool isAsync) => null; - [ConditionalTheory(Skip = "Issue#16963")] - public override Task Default_if_empty_top_level_projection(bool isAsync) - { - return base.Default_if_empty_top_level_projection(isAsync); - } + [ConditionalTheory(Skip = "Issue #16963")] + public override Task Default_if_empty_top_level_projection(bool isAsync) => null; - [ConditionalTheory(Skip = "Issue#16963")] - public override Task Join_with_default_if_empty_on_both_sources(bool isAsync) - { - return base.Join_with_default_if_empty_on_both_sources(isAsync); - } + [ConditionalTheory(Skip = "Issue #16963")] + public override Task Join_with_default_if_empty_on_both_sources(bool isAsync) => null; - [ConditionalFact(Skip = "Issue#16963")] + [ConditionalFact(Skip = "Issue #16963")] public override void OfType_Select() { - base.OfType_Select(); } - [ConditionalFact(Skip = "Issue#16963")] + [ConditionalFact(Skip = "Issue #16963")] public override void OfType_Select_OfType_Select() { - base.OfType_Select_OfType_Select(); } [ConditionalTheory(Skip = "Issue#16575")] - public override Task Project_single_element_from_collection_with_OrderBy_Distinct_and_FirstOrDefault_followed_by_projecting_length(bool isAsync) - { - return base.Project_single_element_from_collection_with_OrderBy_Distinct_and_FirstOrDefault_followed_by_projecting_length(isAsync); - } + public override Task Project_single_element_from_collection_with_OrderBy_Distinct_and_FirstOrDefault_followed_by_projecting_length(bool isAsync) => null; - [ConditionalTheory(Skip = "Issue#16963")] - public override Task KeylessEntity_with_included_nav(bool isAsync) - { - return base.KeylessEntity_with_included_nav(isAsync); - } + [ConditionalTheory(Skip = "Issue #16963")] + public override Task KeylessEntity_with_included_nav(bool isAsync) => null; - [ConditionalTheory(Skip = "Issue#16963")] - public override Task KeylessEntity_with_included_navs_multi_level(bool isAsync) - { - return base.KeylessEntity_with_included_navs_multi_level(isAsync); - } + [ConditionalTheory(Skip = "Issue #16963")] + public override Task KeylessEntity_with_included_navs_multi_level(bool isAsync) => null; [ConditionalTheory(Skip = "Issue#17050")] public override void Client_code_using_instance_in_static_method() { - base.Client_code_using_instance_in_static_method(); } [ConditionalTheory(Skip = "Issue#17050")] public override void Client_code_using_instance_method_throws() { - base.Client_code_using_instance_method_throws(); } [ConditionalTheory(Skip = "Issue#17050")] public override void Client_code_using_instance_in_anonymous_type() { - base.Client_code_using_instance_in_anonymous_type(); } - #region SelectMany + [ConditionalTheory(Skip = "Issue #16963")] + public override Task Multiple_select_many_with_predicate(bool isAsync) => null; - [ConditionalTheory(Skip = "Issue#16963")] - public override Task Multiple_select_many_with_predicate(bool isAsync) - { - return base.Multiple_select_many_with_predicate(isAsync); - } + [ConditionalTheory(Skip = "Issue #16963")] + public override Task Select_DTO_with_member_init_distinct_in_subquery_translated_to_server(bool isAsync) => null; - [ConditionalTheory(Skip = "Issue#16963")] - public override Task Select_DTO_with_member_init_distinct_in_subquery_translated_to_server(bool isAsync) - { - return base.Select_DTO_with_member_init_distinct_in_subquery_translated_to_server(isAsync); - } + [ConditionalTheory(Skip = "Issue #16963")] + public override Task Select_DTO_with_member_init_distinct_in_subquery_translated_to_server_2(bool isAsync) => null; - [ConditionalTheory(Skip = "Issue#16963")] - public override Task Select_DTO_with_member_init_distinct_in_subquery_translated_to_server_2(bool isAsync) - { - return base.Select_DTO_with_member_init_distinct_in_subquery_translated_to_server_2(isAsync); - } + [ConditionalTheory(Skip = "Issue #16963")] + public override Task SelectMany_correlated_subquery_simple(bool isAsync) => null; - [ConditionalTheory(Skip = "Issue#16963")] - public override Task SelectMany_correlated_subquery_simple(bool isAsync) - { - return base.SelectMany_correlated_subquery_simple(isAsync); - } + [ConditionalTheory(Skip = "Issue #16963")] + public override Task SelectMany_Joined(bool isAsync) => null; - [ConditionalTheory(Skip = "Issue#16963")] - public override Task SelectMany_Joined(bool isAsync) - { - return base.SelectMany_Joined(isAsync); - } + [ConditionalTheory(Skip = "Issue #16963")] + public override Task SelectMany_Joined_DefaultIfEmpty(bool isAsync) => null; - [ConditionalTheory(Skip = "Issue#16963")] - public override Task SelectMany_Joined_DefaultIfEmpty(bool isAsync) - { - return base.SelectMany_Joined_DefaultIfEmpty(isAsync); - } + [ConditionalTheory(Skip = "Issue #16963")] + public override Task SelectMany_Joined_DefaultIfEmpty2(bool isAsync) => null; - [ConditionalTheory(Skip = "Issue#16963")] - public override Task SelectMany_Joined_DefaultIfEmpty2(bool isAsync) - { - return base.SelectMany_Joined_DefaultIfEmpty2(isAsync); - } + [ConditionalTheory(Skip = "Issue #16963")] + public override Task SelectMany_Joined_Take(bool isAsync) => null; - [ConditionalTheory(Skip = "Issue#16963")] - public override Task SelectMany_Joined_Take(bool isAsync) - { - return base.SelectMany_Joined_Take(isAsync); - } + [ConditionalTheory(Skip = "Issue #16963")] + public override Task SelectMany_without_result_selector_naked_collection_navigation(bool isAsync) => null; - [ConditionalTheory(Skip = "Issue#16963")] - public override Task SelectMany_without_result_selector_naked_collection_navigation(bool isAsync) + [ConditionalTheory(Skip = "Issue #16963")] + public override Task SelectMany_without_result_selector_collection_navigation_composed(bool isAsync) => null; + + [ConditionalTheory(Skip = "Issue #16963")] + public override Task SelectMany_correlated_with_outer_1(bool isAsync) => null; + + [ConditionalTheory(Skip = "Issue #16963")] + public override Task SelectMany_correlated_with_outer_2(bool isAsync) => null; + + [ConditionalTheory(Skip = "Issue #16963")] + public override Task SelectMany_correlated_with_outer_3(bool isAsync) => null; + + [ConditionalTheory(Skip = "Issue #16963")] + public override Task Contains_with_local_tuple_array_closure(bool isAsync) => null; + + [ConditionalTheory(Skip = "Issue #16963")] + public override Task OrderBy_Count_with_predicate_client_eval(bool isAsync) => null; + + [ConditionalTheory(Skip = "Issue #16963")] + public override Task OrderBy_Count_with_predicate_client_eval_mixed(bool isAsync) => null; + + [ConditionalTheory(Skip = "Issue #16963")] + public override Task OrderBy_Where_Count_client_eval(bool isAsync) => null; + + [ConditionalTheory(Skip = "Issue #16963")] + public override Task OrderBy_Where_Count_client_eval_mixed(bool isAsync) => null; + + [ConditionalTheory(Skip = "Issue #16963")] + public override Task OrderBy_Where_Count_with_predicate_client_eval(bool isAsync) => null; + + [ConditionalTheory(Skip = "Issue #16963")] + public override Task OrderBy_Where_Count_with_predicate_client_eval_mixed(bool isAsync) => null; + + [ConditionalTheory(Skip = "Issue #16963")] + public override Task Where_OrderBy_Count_client_eval(bool isAsync) => null; + + [ConditionalTheory(Skip = "Issue #16963")] + public override Task SelectMany_correlated_with_outer_4(bool isAsync) => null; + + [ConditionalTheory(Skip = "Issue #16963")] + public override Task All_client(bool isAsync) => null; + + [ConditionalTheory(Skip = "Issue #16963")] + public override Task Client_OrderBy_GroupBy_Group_ordering_works(bool isAsync) => null; + + [ConditionalTheory(Skip = "Issue #16963")] + public override Task First_client_predicate(bool isAsync) => null; + + [ConditionalTheory(Skip = "Issue #16963")] + public override Task OrderBy_client_mixed(bool isAsync) => null; + + [ConditionalTheory(Skip = "Issue #16963")] + public override Task OrderBy_multiple_queries(bool isAsync) => null; + + [ConditionalTheory(Skip = "Issue #16963")] + public override Task Projection_when_arithmetic_mixed_subqueries(bool isAsync) => null; + + [ConditionalTheory(Skip = "Issue #16963")] + public override Task Queryable_reprojection(bool isAsync) => null; + + [ConditionalFact(Skip = "Issue #16963")] + public override void Random_next_is_not_funcletized_1() { - return base.SelectMany_without_result_selector_naked_collection_navigation(isAsync); } - [ConditionalTheory(Skip = "Issue#16963")] - public override Task SelectMany_without_result_selector_collection_navigation_composed(bool isAsync) + [ConditionalFact(Skip = "Issue #16963")] + public override void Random_next_is_not_funcletized_2() { - return base.SelectMany_without_result_selector_collection_navigation_composed(isAsync); } - [ConditionalTheory(Skip = "Issue#16963")] - public override Task SelectMany_correlated_with_outer_1(bool isAsync) + [ConditionalFact(Skip = "Issue #16963")] + public override void Random_next_is_not_funcletized_3() { - return base.SelectMany_correlated_with_outer_1(isAsync); } - [ConditionalTheory(Skip = "Issue#16963")] - public override Task SelectMany_correlated_with_outer_2(bool isAsync) + [ConditionalFact(Skip = "Issue #16963")] + public override void Random_next_is_not_funcletized_4() { - return base.SelectMany_correlated_with_outer_2(isAsync); } - [ConditionalTheory(Skip = "Issue#16963")] - public override Task SelectMany_correlated_with_outer_3(bool isAsync) + [ConditionalFact(Skip = "Issue #16963")] + public override void Random_next_is_not_funcletized_5() { - return base.SelectMany_correlated_with_outer_3(isAsync); } - [ConditionalTheory(Skip = "Issue#16963")] - public override Task SelectMany_correlated_with_outer_4(bool isAsync) + [ConditionalFact(Skip = "Issue #16963")] + public override void Random_next_is_not_funcletized_6() { - return base.SelectMany_correlated_with_outer_4(isAsync); } - #endregion [ConditionalTheory(Skip = "Issue#16963")] public override Task Projection_when_client_evald_subquery(bool isAsync) { return base.Projection_when_client_evald_subquery(isAsync); } + + [ConditionalTheory(Skip = "Issue #16963")] + public override Task SelectMany_after_client_method(bool isAsync) => null; + + [ConditionalTheory(Skip = "Issue #16963")] + public override Task Where_bool_client_side_negated(bool isAsync) => null; + + [ConditionalTheory(Skip = "Issue #16963")] + public override Task Where_client(bool isAsync) => null; + + [ConditionalTheory(Skip = "Issue #16963")] + public override Task Where_client_and_server_non_top_level(bool isAsync) => null; + + [ConditionalTheory(Skip = "Issue #16963")] + public override Task Where_client_and_server_top_level(bool isAsync) => null; + + [ConditionalTheory(Skip = "Issue #16963")] + public override Task Where_client_deep_inside_predicate_and_server_top_level(bool isAsync) => null; + + [ConditionalTheory(Skip = "Issue #16963")] + public override Task Where_client_or_server_top_level(bool isAsync) => null; + + [ConditionalTheory(Skip = "Issue #16963")] + public override Task Where_query_composition3(bool isAsync) => null; + + [ConditionalTheory(Skip = "Issue #16963")] + public override Task Where_query_composition4(bool isAsync) => null; + + [ConditionalTheory(Skip = "Issue #16963")] + public override Task Where_query_composition5(bool isAsync) => null; + + [ConditionalTheory(Skip = "Issue #16963")] + public override Task Where_query_composition6(bool isAsync) => null; + + [ConditionalTheory(Skip = "Issue #16963")] + public override Task Where_subquery_correlated_client_eval(bool isAsync) => null; + + [ConditionalTheory(Skip = "Issue #16963")] + public override Task All_client_and_server_top_level(bool isAsync) => null; + + [ConditionalTheory(Skip = "Issue #16963")] + public override Task All_client_or_server_top_level(bool isAsync) => null; + + [ConditionalTheory(Skip = "Issue #16963")] + public override Task Select_bool_closure_with_order_by_property_with_cast_to_nullable(bool isAsync) => null; } } diff --git a/test/EFCore.Relational.Specification.Tests/Query/QueryNoClientEvalTestBase.cs b/test/EFCore.Relational.Specification.Tests/Query/QueryNoClientEvalTestBase.cs index 08c18d8b6c3..9bb9fb1838f 100644 --- a/test/EFCore.Relational.Specification.Tests/Query/QueryNoClientEvalTestBase.cs +++ b/test/EFCore.Relational.Specification.Tests/Query/QueryNoClientEvalTestBase.cs @@ -4,7 +4,6 @@ using System; using System.Linq; using Microsoft.EntityFrameworkCore.Diagnostics; -using Microsoft.EntityFrameworkCore.Diagnostics.Internal; using Microsoft.EntityFrameworkCore.TestModels.Northwind; using Microsoft.EntityFrameworkCore.TestUtilities; using Xunit; @@ -27,12 +26,9 @@ public virtual void Throws_when_where() using (var context = CreateContext()) { Assert.Equal( - CoreStrings.WarningAsErrorTemplate( - RelationalEventId.QueryClientEvaluationWarning, - RelationalResources.LogClientEvalWarning(new TestLogger()).GenerateMessage("where [c].IsLondon"), - "RelationalEventId.QueryClientEvaluationWarning"), + CoreStrings.TranslationFailed("(c) => c.IsLondon"), Assert.Throws( - () => context.Customers.Where(c => c.IsLondon).ToList()) + () => context.Customers.Where((c) => c.IsLondon).ToList()) .Message); } } @@ -43,12 +39,9 @@ public virtual void Throws_when_orderby() using (var context = CreateContext()) { Assert.Equal( - CoreStrings.WarningAsErrorTemplate( - RelationalEventId.QueryClientEvaluationWarning, - RelationalResources.LogClientEvalWarning(new TestLogger()).GenerateMessage("orderby [c].IsLondon asc"), - "RelationalEventId.QueryClientEvaluationWarning"), + CoreStrings.TranslationFailed("(c) => c.IsLondon"), Assert.Throws( - () => context.Customers.OrderBy(c => c.IsLondon).ToList()).Message); + () => context.Customers.OrderBy((c) => c.IsLondon).ToList()).Message); } } @@ -58,13 +51,10 @@ public virtual void Throws_when_orderby_multiple() using (var context = CreateContext()) { Assert.Equal( - CoreStrings.WarningAsErrorTemplate( - RelationalEventId.QueryClientEvaluationWarning, - RelationalResources.LogClientEvalWarning(new TestLogger()).GenerateMessage("orderby [c].IsLondon asc, ClientMethod([c]) asc"), - "RelationalEventId.QueryClientEvaluationWarning"), + CoreStrings.TranslationFailed("(c) => c.IsLondon"), Assert.Throws( () => context.Customers - .OrderBy(c => c.IsLondon) + .OrderBy((c) => c.IsLondon) .ThenBy(c => ClientMethod(c)) .ToList()).Message); } @@ -78,17 +68,15 @@ public virtual void Throws_when_where_subquery_correlated() using (var context = CreateContext()) { Assert.Equal( - CoreStrings.WarningAsErrorTemplate( - RelationalEventId.QueryClientEvaluationWarning, - RelationalResources.LogClientEvalWarning(new TestLogger()).GenerateMessage( - "where {from Customer c2 in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.Northwind.Customer]) where (([c1].CustomerID == [c2].CustomerID) AndAlso [c2].IsLondon) select [c2] => Any()}"), - "RelationalEventId.QueryClientEvaluationWarning"), - Assert.Throws( - () => context.Customers - .Where( - c1 => context.Customers - .Any(c2 => c1.CustomerID == c2.CustomerID && c2.IsLondon)) - .ToList()).Message); + CoreStrings.TranslationFailed( + "(c0) => EntityShaperExpression: EntityType: Customer ValueBufferExpression: ProjectionBindingExpression: EmptyProjectionMember IsNullable: False.CustomerID == c0.CustomerID && c0.IsLondon"), + RemoveNewLines( + Assert.Throws( + () => context.Customers + .Where( + c1 => context.Customers + .Any(c2 => c1.CustomerID == c2.CustomerID && c2.IsLondon)) + .ToList()).Message)); } } @@ -98,12 +86,9 @@ public virtual void Throws_when_all() using (var context = CreateContext()) { Assert.Equal( - CoreStrings.WarningAsErrorTemplate( - RelationalEventId.QueryClientEvaluationWarning, - RelationalResources.LogClientEvalWarning(new TestLogger()).GenerateMessage("All([c].IsLondon)"), - "RelationalEventId.QueryClientEvaluationWarning"), + CoreStrings.TranslationFailed("(c) => c.IsLondon"), Assert.Throws( - () => context.Customers.All(c => c.IsLondon)).Message); + () => context.Customers.All((c) => c.IsLondon)).Message); } } @@ -113,14 +98,11 @@ public virtual void Throws_when_from_sql_composed() using (var context = CreateContext()) { Assert.Equal( - CoreStrings.WarningAsErrorTemplate( - RelationalEventId.QueryClientEvaluationWarning, - RelationalResources.LogClientEvalWarning(new TestLogger()).GenerateMessage("where [c].IsLondon"), - "RelationalEventId.QueryClientEvaluationWarning"), + CoreStrings.TranslationFailed("(c) => c.IsLondon"), Assert.Throws( () => context.Customers .FromSqlRaw(NormalizeDelimetersInRawString("select * from [Customers]")) - .Where(c => c.IsLondon) + .Where((c) => c.IsLondon) .ToList()).Message); } } @@ -145,14 +127,11 @@ public virtual void Throws_when_subquery_main_from_clause() using (var context = CreateContext()) { Assert.Equal( - CoreStrings.WarningAsErrorTemplate( - RelationalEventId.QueryClientEvaluationWarning, - RelationalResources.LogClientEvalWarning(new TestLogger()).GenerateMessage("where [c].IsLondon"), - "RelationalEventId.QueryClientEvaluationWarning"), + CoreStrings.TranslationFailed("(c) => c.IsLondon"), Assert.Throws( () => (from c1 in context.Customers - .Where(c => c.IsLondon) + .Where((c) => c.IsLondon) .OrderBy(c => c.CustomerID) .Take(5) select c1) @@ -160,20 +139,20 @@ public virtual void Throws_when_subquery_main_from_clause() } } - [ConditionalFact(Skip = "issue #15312")] + [ConditionalFact] public virtual void Throws_when_select_many() { using (var context = CreateContext()) { Assert.Equal( - CoreStrings.WarningAsErrorTemplate( - RelationalEventId.QueryClientEvaluationWarning, - RelationalResources.LogClientEvalWarning(new TestLogger()).GenerateMessage("from Int32 i in value(System.Int32[])"), - "RelationalEventId.QueryClientEvaluationWarning"), + CoreStrings.TranslationFailed("(c1) => int[] { 1, 2, 3, }"), Assert.Throws( () => (from c1 in context.Customers - from i in new[] { 1, 2, 3 } + from i in new[] + { + 1, 2, 3 + } select c1) .ToList()).Message); } @@ -185,18 +164,18 @@ public virtual void Throws_when_join() using (var context = CreateContext()) { Assert.Equal( - CoreStrings.WarningAsErrorTemplate( - RelationalEventId.QueryClientEvaluationWarning, - RelationalResources.LogClientEvalWarning(new TestLogger()).GenerateMessage( - "join UInt32 i in __p_0 on [e1].EmployeeID equals [i]" - ), - "RelationalEventId.QueryClientEvaluationWarning"), - Assert.Throws( - () => - (from e1 in context.Employees - join i in new uint[] { 1, 2, 3 } on e1.EmployeeID equals i - select e1) - .ToList()).Message); + CoreStrings.TranslationFailed( + @"Join( outer: DbSet, inner: (Unhandled parameter: __p_0), outerKeySelector: (e1) => e1.EmployeeID, innerKeySelector: (i) => i, resultSelector: (e1, i) => e1)"), + RemoveNewLines( + Assert.Throws( + () => + (from e1 in context.Employees + join i in new uint[] + { + 1, 2, 3 + } on e1.EmployeeID equals i + select e1) + .ToList()).Message)); } } @@ -206,31 +185,31 @@ public virtual void Throws_when_group_join() using (var context = CreateContext()) { Assert.Equal( - CoreStrings.WarningAsErrorTemplate( - RelationalEventId.QueryClientEvaluationWarning, - RelationalResources.LogClientEvalWarning(new TestLogger()).GenerateMessage( - "join UInt32 i in __p_0 on [e1].EmployeeID equals [i]" - ), - "RelationalEventId.QueryClientEvaluationWarning"), - Assert.Throws( - () => - (from e1 in context.Employees - join i in new uint[] { 1, 2, 3 } on e1.EmployeeID equals i into g - select e1) - .ToList()).Message); + CoreStrings.TranslationFailed( + "GroupJoin( outer: DbSet, inner: (Unhandled parameter: __p_0), outerKeySelector: (e1) => e1.EmployeeID, innerKeySelector: (i) => i, resultSelector: (e1, g) => e1)"), + RemoveNewLines( + Assert.Throws( + () => + (from e1 in context.Employees + join i in new uint[] + { + 1, 2, 3 + } on e1.EmployeeID equals i into g + select e1) + .ToList()).Message)); } } - [ConditionalFact] + [ConditionalFact(Skip = "Issue #15249")] public virtual void Throws_when_group_by() { using (var context = CreateContext()) { + context.Customers + .GroupBy(c => c.CustomerID) + .ToList(); Assert.Equal( - CoreStrings.WarningAsErrorTemplate( - RelationalEventId.QueryClientEvaluationWarning, - RelationalResources.LogClientEvalWarning(new TestLogger()).GenerateMessage("GroupBy([c].CustomerID, [c])"), - "RelationalEventId.QueryClientEvaluationWarning"), + CoreStrings.TranslationFailed("GroupBy([c].CustomerID, [c])"), Assert.Throws( () => context.Customers .GroupBy(c => c.CustomerID) @@ -244,12 +223,9 @@ public virtual void Throws_when_first() using (var context = CreateContext()) { Assert.Equal( - CoreStrings.WarningAsErrorTemplate( - RelationalEventId.QueryClientEvaluationWarning, - RelationalResources.LogClientEvalWarning(new TestLogger()).GenerateMessage("where [c].IsLondon"), - "RelationalEventId.QueryClientEvaluationWarning"), + CoreStrings.TranslationFailed("(c) => c.IsLondon"), Assert.Throws( - () => context.Customers.First(c => c.IsLondon)).Message); + () => context.Customers.First((c) => c.IsLondon)).Message); } } @@ -259,12 +235,9 @@ public virtual void Throws_when_single() using (var context = CreateContext()) { Assert.Equal( - CoreStrings.WarningAsErrorTemplate( - RelationalEventId.QueryClientEvaluationWarning, - RelationalResources.LogClientEvalWarning(new TestLogger()).GenerateMessage("where [c].IsLondon"), - "RelationalEventId.QueryClientEvaluationWarning"), + CoreStrings.TranslationFailed("(c) => c.IsLondon"), Assert.Throws( - () => context.Customers.Single(c => c.IsLondon)).Message); + () => context.Customers.Single((c) => c.IsLondon)).Message); } } @@ -274,12 +247,9 @@ public virtual void Throws_when_first_or_default() using (var context = CreateContext()) { Assert.Equal( - CoreStrings.WarningAsErrorTemplate( - RelationalEventId.QueryClientEvaluationWarning, - RelationalResources.LogClientEvalWarning(new TestLogger()).GenerateMessage("where [c].IsLondon"), - "RelationalEventId.QueryClientEvaluationWarning"), + CoreStrings.TranslationFailed("(c) => c.IsLondon"), Assert.Throws( - () => context.Customers.FirstOrDefault(c => c.IsLondon)).Message); + () => context.Customers.FirstOrDefault((c) => c.IsLondon)).Message); } } @@ -289,15 +259,15 @@ public virtual void Throws_when_single_or_default() using (var context = CreateContext()) { Assert.Equal( - CoreStrings.WarningAsErrorTemplate( - RelationalEventId.QueryClientEvaluationWarning, - RelationalResources.LogClientEvalWarning(new TestLogger()).GenerateMessage("where [c].IsLondon"), - "RelationalEventId.QueryClientEvaluationWarning"), + CoreStrings.TranslationFailed("(c) => c.IsLondon"), Assert.Throws( - () => context.Customers.SingleOrDefault(c => c.IsLondon)).Message); + () => context.Customers.SingleOrDefault((c) => c.IsLondon)).Message); } } + private string RemoveNewLines(string message) + => message.Replace("\n", "").Replace("\r", ""); + private string NormalizeDelimetersInRawString(string sql) => Fixture.TestStore.NormalizeDelimetersInRawString(sql); diff --git a/test/EFCore.Relational.Specification.Tests/Query/UdfDbFunctionTestBase.cs b/test/EFCore.Relational.Specification.Tests/Query/UdfDbFunctionTestBase.cs index c649cca97c8..4840c17e8d4 100644 --- a/test/EFCore.Relational.Specification.Tests/Query/UdfDbFunctionTestBase.cs +++ b/test/EFCore.Relational.Specification.Tests/Query/UdfDbFunctionTestBase.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; using System.Linq; +using Microsoft.EntityFrameworkCore.Diagnostics; using Microsoft.EntityFrameworkCore.Query.SqlExpressions; using Microsoft.EntityFrameworkCore.TestUtilities; using Xunit; @@ -361,7 +362,7 @@ public virtual void Scalar_Function_With_Translator_Translates_Static() } } - [ConditionalFact(Skip = "Issue#14935")] + [ConditionalFact] public virtual void Scalar_Function_ClientEval_Method_As_Translateable_Method_Parameter_Static() { using (var context = CreateContext()) @@ -607,34 +608,35 @@ public virtual void Scalar_Function_Let_Nested_Static() } } - [ConditionalFact(Skip = "Issue#14935")] + [ConditionalFact] public virtual void Scalar_Nested_Function_Unwind_Client_Eval_Where_Static() { using (var context = CreateContext()) { - var results = (from c in context.Customers + Assert.Equal( + CoreStrings.TranslationFailed("(c) => 2 == AddOneStatic(c.Id)"), + Assert.Throws( + () => (from c in context.Customers where 2 == UDFSqlContext.AddOneStatic(c.Id) - select c.Id).Single(); - - Assert.Equal(1, results); + select c.Id).Single()).Message); } } - [ConditionalFact(Skip = "Issue#14935")] + [ConditionalFact] public virtual void Scalar_Nested_Function_Unwind_Client_Eval_OrderBy_Static() { using (var context = CreateContext()) { - var results = (from c in context.Customers + Assert.Equal( + CoreStrings.TranslationFailed("(c) => AddOneStatic(c.Id)"), + Assert.Throws( + () => (from c in context.Customers orderby UDFSqlContext.AddOneStatic(c.Id) - select c.Id).ToList(); - - Assert.Equal(3, results.Count); - Assert.True(results.SequenceEqual(Enumerable.Range(1, 3))); + select c.Id).ToList()).Message); } } - [ConditionalFact(Skip = "Issue#14935")] + [ConditionalFact] public virtual void Scalar_Nested_Function_Unwind_Client_Eval_Select_Static() { using (var context = CreateContext()) @@ -648,120 +650,135 @@ orderby c.Id } } - [ConditionalFact(Skip = "Issue#14935")] + [ConditionalFact] public virtual void Scalar_Nested_Function_Client_BCL_UDF_Static() { using (var context = CreateContext()) { - var results = (from c in context.Customers + Assert.Equal( + CoreStrings.TranslationFailed( + "(c) => 2 == AddOneStatic(Abs(CustomerOrderCountWithClientStatic(c.Id)))"), + Assert.Throws( + () => (from c in context.Customers where 2 == UDFSqlContext.AddOneStatic(Math.Abs(UDFSqlContext.CustomerOrderCountWithClientStatic(c.Id))) - select c.Id).Single(); - - Assert.Equal(3, results); + select c.Id).Single()).Message); } } - [ConditionalFact(Skip = "Issue#14935")] + [ConditionalFact] public virtual void Scalar_Nested_Function_Client_UDF_BCL_Static() { using (var context = CreateContext()) { - var results = (from c in context.Customers + Assert.Equal( + CoreStrings.TranslationFailed( + "(c) => 2 == AddOneStatic(CustomerOrderCountWithClientStatic(Abs(c.Id)))"), + Assert.Throws( + () => (from c in context.Customers where 2 == UDFSqlContext.AddOneStatic(UDFSqlContext.CustomerOrderCountWithClientStatic(Math.Abs(c.Id))) - select c.Id).Single(); - - Assert.Equal(3, results); + select c.Id).Single()).Message); } } - [ConditionalFact(Skip = "Issue#14935")] + [ConditionalFact] public virtual void Scalar_Nested_Function_BCL_Client_UDF_Static() { using (var context = CreateContext()) { - var results = (from c in context.Customers + Assert.Equal( + CoreStrings.TranslationFailed( + "(c) => 2 == Abs(AddOneStatic(CustomerOrderCountWithClientStatic(c.Id)))"), + Assert.Throws( + () => (from c in context.Customers where 2 == Math.Abs(UDFSqlContext.AddOneStatic(UDFSqlContext.CustomerOrderCountWithClientStatic(c.Id))) - select c.Id).Single(); - - Assert.Equal(3, results); + select c.Id).Single()).Message); } } - [ConditionalFact(Skip = "Issue#14935")] + [ConditionalFact] public virtual void Scalar_Nested_Function_BCL_UDF_Client_Static() { using (var context = CreateContext()) { - var results = (from c in context.Customers + Assert.Equal( + CoreStrings.TranslationFailed( + "(c) => 1 == Abs(CustomerOrderCountWithClientStatic(AddOneStatic(c.Id)))"), + Assert.Throws( + () => (from c in context.Customers where 1 == Math.Abs(UDFSqlContext.CustomerOrderCountWithClientStatic(UDFSqlContext.AddOneStatic(c.Id))) - select c.Id).Single(); - - Assert.Equal(2, results); + select c.Id).Single()).Message); } } - [ConditionalFact(Skip = "Issue#14935")] + [ConditionalFact] public virtual void Scalar_Nested_Function_UDF_BCL_Client_Static() { using (var context = CreateContext()) { - var results = (from c in context.Customers + Assert.Equal( + CoreStrings.TranslationFailed( + "(c) => 1 == CustomerOrderCountWithClientStatic(Abs(AddOneStatic(c.Id)))"), + Assert.Throws( + () => (from c in context.Customers where 1 == UDFSqlContext.CustomerOrderCountWithClientStatic(Math.Abs(UDFSqlContext.AddOneStatic(c.Id))) - select c.Id).Single(); - - Assert.Equal(2, results); + select c.Id).Single()).Message); } } - [ConditionalFact(Skip = "Issue#14935")] + [ConditionalFact] public virtual void Scalar_Nested_Function_UDF_Client_BCL_Static() { using (var context = CreateContext()) { - var results = (from c in context.Customers + Assert.Equal( + CoreStrings.TranslationFailed( + "(c) => 1 == CustomerOrderCountWithClientStatic(AddOneStatic(Abs(c.Id)))"), + Assert.Throws( + () => (from c in context.Customers where 1 == UDFSqlContext.CustomerOrderCountWithClientStatic(UDFSqlContext.AddOneStatic(Math.Abs(c.Id))) - select c.Id).Single(); - - Assert.Equal(2, results); + select c.Id).Single()).Message); } } - [ConditionalFact(Skip = "Issue#14935")] + [ConditionalFact] public virtual void Scalar_Nested_Function_Client_BCL_Static() { using (var context = CreateContext()) { - var results = (from c in context.Customers + Assert.Equal( + CoreStrings.TranslationFailed("(c) => 3 == AddOneStatic(Abs(c.Id))"), + Assert.Throws( + () => (from c in context.Customers where 3 == UDFSqlContext.AddOneStatic(Math.Abs(c.Id)) - select c.Id).Single(); - - Assert.Equal(2, results); + select c.Id).Single()).Message); } } - [ConditionalFact(Skip = "Issue#14935")] + [ConditionalFact] public virtual void Scalar_Nested_Function_Client_UDF_Static() { using (var context = CreateContext()) { - var results = (from c in context.Customers + Assert.Equal( + CoreStrings.TranslationFailed("(c) => 2 == AddOneStatic(CustomerOrderCountWithClientStatic(c.Id))"), + Assert.Throws( + () => (from c in context.Customers where 2 == UDFSqlContext.AddOneStatic(UDFSqlContext.CustomerOrderCountWithClientStatic(c.Id)) - select c.Id).Single(); - - Assert.Equal(3, results); + select c.Id).Single()).Message); } } - [ConditionalFact(Skip = "Issue#14935")] + [ConditionalFact] public virtual void Scalar_Nested_Function_BCL_Client_Static() { using (var context = CreateContext()) { - var results = (from c in context.Customers + Assert.Equal( + CoreStrings.TranslationFailed("(c) => 3 == Abs(AddOneStatic(c.Id))"), + Assert.Throws( + () => (from c in context.Customers where 3 == Math.Abs(UDFSqlContext.AddOneStatic(c.Id)) - select c.Id).Single(); - - Assert.Equal(2, results); + select c.Id).Single()).Message); } } @@ -778,16 +795,17 @@ public virtual void Scalar_Nested_Function_BCL_UDF_Static() } } - [ConditionalFact(Skip = "Issue#14935")] + [ConditionalFact] public virtual void Scalar_Nested_Function_UDF_Client_Static() { using (var context = CreateContext()) { - var results = (from c in context.Customers + Assert.Equal( + CoreStrings.TranslationFailed("(c) => 2 == CustomerOrderCountWithClientStatic(AddOneStatic(c.Id))"), + Assert.Throws( + () => (from c in context.Customers where 2 == UDFSqlContext.CustomerOrderCountWithClientStatic(UDFSqlContext.AddOneStatic(c.Id)) - select c.Id).Single(); - - Assert.Equal(1, results); + select c.Id).Single()).Message); } } @@ -864,7 +882,7 @@ public virtual void Scalar_Function_With_Translator_Translates_Instance() } } - [ConditionalFact(Skip = "Issue#14935")] + [ConditionalFact] public virtual void Scalar_Function_ClientEval_Method_As_Translateable_Method_Parameter_Instance() { using (var context = CreateContext()) @@ -1110,34 +1128,35 @@ public virtual void Scalar_Function_Let_Nested_Instance() } } - [ConditionalFact(Skip = "Issue#14935")] + [ConditionalFact] public virtual void Scalar_Nested_Function_Unwind_Client_Eval_Where_Instance() { using (var context = CreateContext()) { - var results = (from c in context.Customers + Assert.Equal( + CoreStrings.TranslationFailed("(c) => 2 == (Unhandled parameter: __context_0).AddOneInstance(c.Id)"), + Assert.Throws( + () => (from c in context.Customers where 2 == context.AddOneInstance(c.Id) - select c.Id).Single(); - - Assert.Equal(1, results); + select c.Id).Single()).Message); } } - [ConditionalFact(Skip = "Issue#14935")] + [ConditionalFact] public virtual void Scalar_Nested_Function_Unwind_Client_Eval_OrderBy_Instance() { using (var context = CreateContext()) { - var results = (from c in context.Customers + Assert.Equal( + CoreStrings.TranslationFailed("(c) => (Unhandled parameter: __context_0).AddOneInstance(c.Id)"), + Assert.Throws( + () => (from c in context.Customers orderby context.AddOneInstance(c.Id) - select c.Id).ToList(); - - Assert.Equal(3, results.Count); - Assert.True(results.SequenceEqual(Enumerable.Range(1, 3))); + select c.Id).ToList()).Message); } } - [ConditionalFact(Skip = "Issue#14935")] + [ConditionalFact] public virtual void Scalar_Nested_Function_Unwind_Client_Eval_Select_Instance() { using (var context = CreateContext()) @@ -1151,123 +1170,147 @@ orderby c.Id } } - [ConditionalFact(Skip = "Issue#14935")] + [ConditionalFact] public virtual void Scalar_Nested_Function_Client_BCL_UDF_Instance() { using (var context = CreateContext()) { - var results = (from c in context.Customers + Assert.Equal( + CoreStrings.TranslationFailed( + "(c) => 2 == (Unhandled parameter: __context_0).AddOneInstance(Abs((Unhandled parameter: __context_0).CustomerOrderCountWithClientInstance(c.Id)))"), + Assert.Throws( + () => (from c in context.Customers where 2 == context.AddOneInstance(Math.Abs(context.CustomerOrderCountWithClientInstance(c.Id))) - select c.Id).Single(); - - Assert.Equal(3, results); + select c.Id).Single()).Message); } } - [ConditionalFact(Skip = "Issue#14935")] + [ConditionalFact] public virtual void Scalar_Nested_Function_Client_UDF_BCL_Instance() { using (var context = CreateContext()) { - var results = (from c in context.Customers + Assert.Equal( + CoreStrings.TranslationFailed( + "(c) => 2 == (Unhandled parameter: __context_0).AddOneInstance((Unhandled parameter: __context_0).CustomerOrderCountWithClientInstance(Abs(c.Id)))"), + Assert.Throws( + () => (from c in context.Customers where 2 == context.AddOneInstance(context.CustomerOrderCountWithClientInstance(Math.Abs(c.Id))) - select c.Id).Single(); - - Assert.Equal(3, results); + select c.Id).Single()).Message); } } - [ConditionalFact(Skip = "Issue#14935")] + [ConditionalFact] public virtual void Scalar_Nested_Function_BCL_Client_UDF_Instance() { using (var context = CreateContext()) { - var results = (from c in context.Customers + Assert.Equal( + CoreStrings.TranslationFailed("(c) => 2 == Abs((Unhandled parameter: __context_0).AddOneInstance((Unhandled parameter: __context_0).CustomerOrderCountWithClientInstance(c.Id)))"), + Assert.Throws( + () => (from c in context.Customers where 2 == Math.Abs(context.AddOneInstance(context.CustomerOrderCountWithClientInstance(c.Id))) - select c.Id).Single(); - - Assert.Equal(3, results); + select c.Id).Single()).Message); } } - [ConditionalFact(Skip = "Issue#14935")] + [ConditionalFact] public virtual void Scalar_Nested_Function_BCL_UDF_Client_Instance() { using (var context = CreateContext()) { - var results = (from c in context.Customers + Assert.Equal( + CoreStrings.TranslationFailed( + "(c) => 1 == Abs((Unhandled parameter: __context_0).CustomerOrderCountWithClientInstance((Unhandled parameter: __context_0).AddOneInstance(c.Id)))"), + Assert.Throws( + () => (from c in context.Customers where 1 == Math.Abs(context.CustomerOrderCountWithClientInstance(context.AddOneInstance(c.Id))) - select c.Id).Single(); - - Assert.Equal(2, results); + select c.Id).Single()).Message); } } - [ConditionalFact(Skip = "Issue#14935")] + [ConditionalFact] public virtual void Scalar_Nested_Function_UDF_BCL_Client_Instance() { using (var context = CreateContext()) { - var results = (from c in context.Customers + Assert.Equal( + CoreStrings.TranslationFailed( + "(c) => 1 == (Unhandled parameter: __context_0).CustomerOrderCountWithClientInstance(Abs((Unhandled parameter: __context_0).AddOneInstance(c.Id)))"), + Assert.Throws( + () => (from c in context.Customers where 1 == context.CustomerOrderCountWithClientInstance(Math.Abs(context.AddOneInstance(c.Id))) - select c.Id).Single(); - - Assert.Equal(2, results); + select c.Id).Single()).Message); } } - [ConditionalFact(Skip = "Issue#14935")] + [ConditionalFact] public virtual void Scalar_Nested_Function_UDF_Client_BCL_Instance() { using (var context = CreateContext()) { - var results = (from c in context.Customers + Assert.Equal( + CoreStrings.TranslationFailed( + "(c) => 1 == (Unhandled parameter: __context_0).CustomerOrderCountWithClientInstance((Unhandled parameter: __context_0).AddOneInstance(Abs(c.Id)))"), + Assert.Throws( + () => (from c in context.Customers where 1 == context.CustomerOrderCountWithClientInstance(context.AddOneInstance(Math.Abs(c.Id))) - select c.Id).Single(); - - Assert.Equal(2, results); + select c.Id).Single()).Message); } } - [ConditionalFact(Skip = "Issue#14935")] + [ConditionalFact] public virtual void Scalar_Nested_Function_Client_BCL_Instance() { using (var context = CreateContext()) { - var results = (from c in context.Customers + Assert.Equal( + CoreStrings.TranslationFailed( + "(c) => 3 == (Unhandled parameter: __context_0).AddOneInstance(Abs(c.Id))"), + Assert.Throws( + () => (from c in context.Customers where 3 == context.AddOneInstance(Math.Abs(c.Id)) - select c.Id).Single(); - - Assert.Equal(2, results); + select c.Id).Single()).Message); } } - [ConditionalFact(Skip = "Issue#14935")] + [ConditionalFact] public virtual void Scalar_Nested_Function_Client_UDF_Instance() { using (var context = CreateContext()) { - var results = (from c in context.Customers + Assert.Equal( + CoreStrings.TranslationFailed( + "(c) => 2 == (Unhandled parameter: __context_0).AddOneInstance((Unhandled parameter: __context_0).CustomerOrderCountWithClientInstance(c.Id))"), + Assert.Throws( + () => (from c in context.Customers where 2 == context.AddOneInstance(context.CustomerOrderCountWithClientInstance(c.Id)) - select c.Id).Single(); - - Assert.Equal(3, results); + select c.Id).Single()).Message); } } - [ConditionalFact(Skip = "Issue#14935")] + [ConditionalFact] public virtual void Scalar_Nested_Function_BCL_Client_Instance() { using (var context = CreateContext()) { - var results = (from c in context.Customers + Assert.Equal( + CoreStrings.TranslationFailed("(c) => 3 == Abs((Unhandled parameter: __context_0).AddOneInstance(c.Id))"), + Assert.Throws( + () => (from c in context.Customers where 3 == Math.Abs(context.AddOneInstance(c.Id)) - select c.Id).Single(); - - Assert.Equal(2, results); + select c.Id).Single()).Message); } } + public static Exception AssertThrows(Func testCode) + where T : Exception, new() + { + testCode(); + + return new T(); + } + [ConditionalFact] public virtual void Scalar_Nested_Function_BCL_UDF_Instance() { @@ -1281,16 +1324,18 @@ public virtual void Scalar_Nested_Function_BCL_UDF_Instance() } } - [ConditionalFact(Skip = "Issue#14935")] + [ConditionalFact] public virtual void Scalar_Nested_Function_UDF_Client_Instance() { using (var context = CreateContext()) { - var results = (from c in context.Customers + Assert.Equal( + CoreStrings.TranslationFailed( + "(c) => 2 == (Unhandled parameter: __context_0).CustomerOrderCountWithClientInstance((Unhandled parameter: __context_0).AddOneInstance(c.Id))"), + Assert.Throws( + () => (from c in context.Customers where 2 == context.CustomerOrderCountWithClientInstance(context.AddOneInstance(c.Id)) - select c.Id).Single(); - - Assert.Equal(1, results); + select c.Id).Single()).Message); } } diff --git a/test/EFCore.Relational.Specification.Tests/Query/WarningsTestBase.cs b/test/EFCore.Relational.Specification.Tests/Query/WarningsTestBase.cs index ed00b12e41d..4c5bfc494af 100644 --- a/test/EFCore.Relational.Specification.Tests/Query/WarningsTestBase.cs +++ b/test/EFCore.Relational.Specification.Tests/Query/WarningsTestBase.cs @@ -1,11 +1,8 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -using System; using System.Linq; using System.Threading.Tasks; -using Microsoft.EntityFrameworkCore.Diagnostics; -using Microsoft.EntityFrameworkCore.Diagnostics.Internal; using Microsoft.EntityFrameworkCore.TestModels.Northwind; using Microsoft.EntityFrameworkCore.TestUtilities; using Xunit; @@ -28,23 +25,6 @@ protected WarningsTestBase(TFixture fixture) protected NorthwindContext CreateContext() => Fixture.CreateContext(); - [ConditionalFact] - public virtual void Throws_when_warning_as_error() - { - using (var context = CreateContext()) - { - Assert.Equal( - CoreStrings.WarningAsErrorTemplate( -#pragma warning disable CS0612 // Type or member is obsolete - RelationalEventId.QueryClientEvaluationWarning, - RelationalResources.LogClientEvalWarning(new TestLogger()).GenerateMessage("where [c].IsLondon"), - "RelationalEventId.QueryClientEvaluationWarning"), - Assert.Throws( - () => context.Customers.Where(c => c.IsLondon).ToList()).Message); -#pragma warning restore CS0612 // Type or member is obsolete - } - } - [ConditionalFact] public virtual void Does_not_throw_for_top_level_single() { @@ -76,7 +56,7 @@ public virtual async Task Paging_operation_without_orderby_issues_warning_async( } } - [ConditionalFact(Skip = "issue #15312")] + [ConditionalFact] public virtual void FirstOrDefault_without_orderby_and_filter_issues_warning_subquery() { using (var context = CreateContext()) @@ -144,57 +124,7 @@ public virtual void Max_does_not_issue_client_eval_warning_when_at_top_level() } } -#pragma warning disable CS0612 // Type or member is obsolete - [ConditionalFact] - public virtual void Last_without_order_by_issues_client_eval_warning() - { - using (var context = CreateContext()) - { - Assert.Equal( - CoreStrings.WarningAsErrorTemplate( - RelationalEventId.QueryClientEvaluationWarning, - RelationalResources.LogClientEvalWarning(new TestLogger()).GenerateMessage("Last()"), - "RelationalEventId.QueryClientEvaluationWarning"), - Assert.Throws( - () => context.Customers.Last()).Message); - } - } - [ConditionalFact] - public virtual void Last_with_order_by_issues_client_eval_warning_in_subquery() - { - using (var context = CreateContext()) - { - Assert.Equal( - CoreStrings.WarningAsErrorTemplate( - RelationalEventId.QueryClientEvaluationWarning, - RelationalResources.LogClientEvalWarning(new TestLogger()).GenerateMessage("Last()"), - "RelationalEventId.QueryClientEvaluationWarning"), - Assert.Throws( - () => context.Customers - .Where( - c => c.CustomerID == "ALFKI" - && c.Orders.OrderBy(o => o.OrderID).Last().OrderID > 1000).ToList()).Message); - } - } - - [ConditionalFact] - public virtual void LastOrDefault_without_order_by_issues_client_eval_warning() - { - using (var context = CreateContext()) - { - Assert.Equal( - CoreStrings.WarningAsErrorTemplate( - RelationalEventId.QueryClientEvaluationWarning, - RelationalResources.LogClientEvalWarning(new TestLogger()).GenerateMessage("LastOrDefault()"), - "RelationalEventId.QueryClientEvaluationWarning"), - Assert.Throws( - () => context.Customers.LastOrDefault()).Message); - } - } -#pragma warning restore CS0612 // Type or member is obsolete - - [ConditionalFact(Skip = "issue #15312")] public virtual void Comparing_collection_navigation_to_null_issues_possible_unintended_consequences_warning() { using (var context = CreateContext()) @@ -204,7 +134,7 @@ public virtual void Comparing_collection_navigation_to_null_issues_possible_unin } } - [ConditionalFact(Skip = "issue #15312")] + [ConditionalFact] public virtual void Comparing_two_collections_together_issues_possible_unintended_reference_comparison_warning() { using (var context = CreateContext()) diff --git a/test/EFCore.Relational.Specification.Tests/TestUtilities/TestSqlLoggerFactory.cs b/test/EFCore.Relational.Specification.Tests/TestUtilities/TestSqlLoggerFactory.cs index a672c6fae3f..262a4a19ab4 100644 --- a/test/EFCore.Relational.Specification.Tests/TestUtilities/TestSqlLoggerFactory.cs +++ b/test/EFCore.Relational.Specification.Tests/TestUtilities/TestSqlLoggerFactory.cs @@ -65,7 +65,7 @@ public void AssertBaseline(string[] expected) var logFile = currentDirectory.Substring( 0, currentDirectory.LastIndexOf("\\artifacts\\", StringComparison.Ordinal) + 1) - + "QueryBaseline.cs"; + + "QueryBaseline.txt"; var testInfo = testName + " : " + lineNumber + FileNewLine; diff --git a/test/EFCore.Specification.Tests/BuiltInDataTypesTestBase.cs b/test/EFCore.Specification.Tests/BuiltInDataTypesTestBase.cs index 90f94b4d568..96a636a72ea 100644 --- a/test/EFCore.Specification.Tests/BuiltInDataTypesTestBase.cs +++ b/test/EFCore.Specification.Tests/BuiltInDataTypesTestBase.cs @@ -127,8 +127,7 @@ public virtual void Can_perform_query_with_max_length() } else { - // Issue #14935. Cannot eval 'where [e].ByteArray5.SequenceEqual(__shortBinary_0)' - // Uses == operator instead. + // Issue #10582 Assert.NotNull( context.Set().Where(e => e.Id == 799 && e.ByteArray5 == shortBinary).ToList() .SingleOrDefault()); diff --git a/test/EFCore.Specification.Tests/MonsterFixupTestBase.cs b/test/EFCore.Specification.Tests/MonsterFixupTestBase.cs index 986dc67467a..88d65a1b882 100644 --- a/test/EFCore.Specification.Tests/MonsterFixupTestBase.cs +++ b/test/EFCore.Specification.Tests/MonsterFixupTestBase.cs @@ -519,8 +519,7 @@ public virtual void Composite_fixup_happens_when_FKs_change_test() var productReview2 = context.ProductReviews.Single(e => e.Review.StartsWith("Good")); var productReview3 = context.ProductReviews.Single(e => e.Review.StartsWith("Eeky")); - // Issue #14935. Cannot eval 'where (Convert([e].Photo[0], Int32) == 101)' - // ToList() added. + // Issue #16428 var productPhotos = context.ProductPhotos.ToList(); var productPhoto1 = productPhotos.Single(e => e.Photo[0] == 101); var productPhoto2 = productPhotos.Single(e => e.Photo[0] == 103); @@ -836,8 +835,7 @@ protected void SimpleVerification() new[] { "Better than Tarqies!", "Eeky says yes!", "Good with maple syrup." }, context.ProductReviews.Select(c => c.Review).OrderBy(n => n)); - // Issue #14935. Cannot eval 'orderby {[c].Photo => First()}.ToString() asc' - // ToList() added. + // Issue #16428 Assert.Equal( new[] { "101", "103", "105" }, context.ProductPhotos.ToList().Select(c => c.Photo.First().ToString()).OrderBy(n => n)); @@ -850,8 +848,7 @@ protected void SimpleVerification() new[] { "Ants By Boris", "Trading As Trent" }, context.Suppliers.Select(c => c.Name).OrderBy(n => n)); - // Issue #14935. Cannot eval 'from Byte l in [c].Logo' - // ToList() added. + // Issue #16428 Assert.Equal( new[] { "201", "202" }, context.SupplierLogos.ToList().SelectMany(c => c.Logo).Select(l => l.ToString()).OrderBy(n => n)); @@ -1033,8 +1030,7 @@ protected void FkVerification() Assert.Equal(product1.ProductId, productReview2.ProductId); Assert.Equal(product2.ProductId, productReview3.ProductId); - // Issue #14935. Cannot eval 'where (Convert([e].Photo[0], Int32) == 101)' - // ToList() added. + // Issue #16428 var productPhotos = context.ProductPhotos.ToList(); var productPhoto1 = productPhotos.Single(e => e.Photo[0] == 101); var productPhoto2 = productPhotos.Single(e => e.Photo[0] == 103); @@ -1057,8 +1053,7 @@ protected void FkVerification() var supplier1 = context.Suppliers.Single(e => e.Name.StartsWith("Trading")); var supplier2 = context.Suppliers.Single(e => e.Name.StartsWith("Ants")); - // Issue #14935. Cannot eval 'where (Convert([e].Logo[0], Int32) == 201)' - // ToList() added. + // Issue #16428 var supplierLogo1 = context.SupplierLogos.ToList().Single(e => e.Logo[0] == 201); Assert.Equal(supplier1.SupplierId, supplierLogo1.SupplierId); @@ -1303,8 +1298,7 @@ protected void NavigationVerification() Assert.True(product3.Reviews == null || product3.Reviews.Count == 0); - // Issue #14935. Cannot eval 'where (Convert([e].Photo[0], Int32) == 101)' - // ToList() added. + // Issue #16428 var productPhotos = context.ProductPhotos.ToList(); var productPhoto1 = productPhotos.Single(e => e.Photo[0] == 101); var productPhoto2 = productPhotos.Single(e => e.Photo[0] == 103); @@ -1338,8 +1332,7 @@ protected void NavigationVerification() var supplier1 = context.Suppliers.Single(e => e.Name.StartsWith("Trading")); var supplier2 = context.Suppliers.Single(e => e.Name.StartsWith("Ants")); - // Issue #14935. Cannot eval 'where (Convert([e].Logo[0], Int32) == 201)' - // ToList() added. + // Issue #16428 var supplierLogo1 = context.SupplierLogos.ToList().Single(e => e.Logo[0] == 201); Assert.Same(supplierLogo1, supplier1.Logo); diff --git a/test/EFCore.Specification.Tests/Query/AsyncGearsOfWarQueryTestBase.cs b/test/EFCore.Specification.Tests/Query/AsyncGearsOfWarQueryTestBase.cs index ec7d1719481..8a661e36dcc 100644 --- a/test/EFCore.Specification.Tests/Query/AsyncGearsOfWarQueryTestBase.cs +++ b/test/EFCore.Specification.Tests/Query/AsyncGearsOfWarQueryTestBase.cs @@ -21,7 +21,7 @@ protected AsyncGearsOfWarQueryTestBase(TFixture fixture) protected GearsOfWarContext CreateContext() => Fixture.CreateContext(); - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'GroupBy([s], Result(_IncludeAsync(queryContext, [s], new [] {}, (queryContext, entity, included, ct) => { ... }, ct)))'")] + [ConditionalFact(Skip = "Issue #15249")] public virtual async Task Include_with_group_by_on_entity_qsre() { using (var ctx = CreateContext()) @@ -39,7 +39,7 @@ public virtual async Task Include_with_group_by_on_entity_qsre() } } - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'GroupBy([g], Result(_IncludeAsync(queryContext, [g], new [] {}, (queryContext, entity, included, ct) => { ... }, ct)))'")] + [ConditionalFact(Skip = "Issue #15249")] public virtual async Task Include_with_group_by_on_entity_qsre_with_composite_key() { using (var ctx = CreateContext()) @@ -57,7 +57,7 @@ public virtual async Task Include_with_group_by_on_entity_qsre_with_composite_ke } } - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'GroupBy([l.Commander.DefeatedBy], Result(_IncludeAsync(queryContext, [_1], new [] {}, (queryContext, entity, included, ct) => { ... }, ct)))'")] + [ConditionalFact(Skip = "Issue #15249")] public virtual async Task Include_with_group_by_on_entity_navigation() { using (var ctx = CreateContext()) @@ -75,7 +75,7 @@ public virtual async Task Include_with_group_by_on_entity_navigation() } } - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'GroupBy(1, Result(_IncludeAsync(queryContext, [s], new [] {}, (queryContext, entity, included, ct) => { ... }, ct)))'")] + [ConditionalFact(Skip = "Issue #15249")] public virtual async Task Include_groupby_constant() { using (var ctx = CreateContext()) diff --git a/test/EFCore.Specification.Tests/Query/AsyncSimpleQueryTestBase.cs b/test/EFCore.Specification.Tests/Query/AsyncSimpleQueryTestBase.cs index 3edd88d8ef1..c3b8e411931 100644 --- a/test/EFCore.Specification.Tests/Query/AsyncSimpleQueryTestBase.cs +++ b/test/EFCore.Specification.Tests/Query/AsyncSimpleQueryTestBase.cs @@ -9,7 +9,6 @@ using Microsoft.EntityFrameworkCore.Diagnostics; using Microsoft.EntityFrameworkCore.TestModels.Northwind; using Microsoft.EntityFrameworkCore.TestUtilities; -using Microsoft.EntityFrameworkCore.TestUtilities.Xunit; using Xunit; // ReSharper disable InconsistentNaming @@ -30,7 +29,7 @@ protected AsyncSimpleQueryTestBase(TFixture fixture) protected NorthwindContext CreateContext() => Fixture.CreateContext(); - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'Microsoft.EntityFrameworkCore.Query.QueryClientEvaluationWarning: The LINQ expression 'GroupBy([o].CustomerID, [o])' could not be translated and will be evaluated locally.'")] + [ConditionalFact(Skip = "Issue #15249")] public virtual async Task GroupBy_tracking_after_dispose() { List> groups; @@ -151,7 +150,7 @@ var results } } - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'Average'")] + [ConditionalFact(Skip = "Issue#16318")] public virtual async Task Average_on_nav_subquery_in_projection() { using (var context = CreateContext()) @@ -203,7 +202,7 @@ public virtual async Task ToListAsync_can_be_canceled() } } - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'join Customer y.Customer in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.Northwind.Customer]) on Property([y], \"CustomerID\") equals Property([y.Customer], \"CustomerID\")'")] + [ConditionalFact(Skip = "Issue #17019")] public virtual async Task Mixed_sync_async_query() { using (var context = CreateContext()) @@ -263,7 +262,7 @@ public virtual async Task Mixed_sync_async_in_query_cache() } } - [ConditionalFact(Skip = "Issue#17019")] + [ConditionalFact] public virtual async Task Throws_on_concurrent_query_list() { using (var context = CreateContext()) @@ -307,7 +306,7 @@ public virtual async Task Throws_on_concurrent_query_list() } } - [ConditionalFact(Skip = "Issue#17019")] + [ConditionalFact] public virtual async Task Throws_on_concurrent_query_first() { using (var context = CreateContext()) @@ -361,7 +360,7 @@ private static Customer Process(Customer c, ManualResetEventSlim e, SemaphoreSli // Set Operations - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'Concat({value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.Northwind.Customer])})'")] + [ConditionalFact] public virtual async Task Concat_dbset() { using (var context = CreateContext()) @@ -376,7 +375,7 @@ public virtual async Task Concat_dbset() } } - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'Concat({from Customer s in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.Northwind.Customer]) where ([s].ContactTitle == \"Owner\") select [s]})'")] + [ConditionalFact] public virtual async Task Concat_simple() { using (var context = CreateContext()) @@ -392,7 +391,7 @@ public virtual async Task Concat_simple() } } - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'Concat({from Customer s in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.Northwind.Customer]) where ([s].ContactTitle == \"Owner\") select [s].CustomerID})'")] + [ConditionalFact] public virtual async Task Concat_non_entity() { using (var context = CreateContext()) @@ -410,7 +409,7 @@ public virtual async Task Concat_non_entity() } } - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'Microsoft.EntityFrameworkCore.Query.QueryClientEvaluationWarning: The LINQ expression 'Except({from Customer c in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.Northwind.Customer]) where ([c].City == \"México D.F.\") select [c].CustomerID})'")] + [ConditionalFact] public virtual async Task Except_non_entity() { using (var context = CreateContext()) @@ -428,7 +427,7 @@ public virtual async Task Except_non_entity() } } - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'Intersect({from Customer s in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.Northwind.Customer]) where ([s].ContactTitle == \"Owner\") select [s].CustomerID})'")] + [ConditionalFact] public virtual async Task Intersect_non_entity() { using (var context = CreateContext()) @@ -446,7 +445,7 @@ public virtual async Task Intersect_non_entity() } } - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'Union({from Customer c in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.Northwind.Customer]) where ([c].City == \"México D.F.\") select [c].CustomerID})'")] + [ConditionalFact] public virtual async Task Union_non_entity() { using (var context = CreateContext()) diff --git a/test/EFCore.Specification.Tests/Query/CompiledQueryTestBase.cs b/test/EFCore.Specification.Tests/Query/CompiledQueryTestBase.cs index 9a8d186942f..1dfbd83fd36 100644 --- a/test/EFCore.Specification.Tests/Query/CompiledQueryTestBase.cs +++ b/test/EFCore.Specification.Tests/Query/CompiledQueryTestBase.cs @@ -1,6 +1,7 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +using System; using System.Linq; using System.Threading; using System.Threading.Tasks; @@ -203,7 +204,7 @@ public virtual void Query_with_three_parameters() } } - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'where ([c].CustomerID == __args[0])'")] + [ConditionalFact] public virtual void Query_with_array_parameter() { var query = EF.CompileQuery( @@ -212,12 +213,16 @@ public virtual void Query_with_array_parameter() using (var context = CreateContext()) { - Assert.Equal("ALFKI", query(context, new[] { "ALFKI" }).First().CustomerID); + Assert.Equal("Unsupported Binary operator type specified.", + Assert.Throws( + () => query(context, new[] { "ALFKI" }).First().CustomerID).Message); } using (var context = CreateContext()) { - Assert.Equal("ANATR", query(context, new[] { "ANATR" }).First().CustomerID); + Assert.Equal("Unsupported Binary operator type specified.", + Assert.Throws( + () => query(context, new[] { "ANATR" }).First().CustomerID).Message); } } @@ -463,7 +468,7 @@ public virtual async Task Query_with_three_parameters_async() } } - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'where ([c].CustomerID == __args[0])'")] + [ConditionalFact] public virtual async Task Query_with_array_parameter_async() { var query = EF.CompileAsyncQuery( @@ -472,12 +477,16 @@ public virtual async Task Query_with_array_parameter_async() using (var context = CreateContext()) { - Assert.Equal("ALFKI", (await query(context, new[] { "ALFKI" }).ToListAsync()).First().CustomerID); + Assert.Equal("Unsupported Binary operator type specified.", + (await Assert.ThrowsAsync( + () => query(context, new[] { "ALFKI" }).ToListAsync())).Message); } using (var context = CreateContext()) { - Assert.Equal("ANATR", (await query(context, new[] { "ANATR" }).ToListAsync()).First().CustomerID); + Assert.Equal("Unsupported Binary operator type specified.", + (await Assert.ThrowsAsync( + () => query(context, new[] { "ANATR" }).ToListAsync())).Message); } } diff --git a/test/EFCore.Specification.Tests/Query/ComplexNavigationsQueryTestBase.cs b/test/EFCore.Specification.Tests/Query/ComplexNavigationsQueryTestBase.cs index c627ba0210d..e46ed89fb78 100644 --- a/test/EFCore.Specification.Tests/Query/ComplexNavigationsQueryTestBase.cs +++ b/test/EFCore.Specification.Tests/Query/ComplexNavigationsQueryTestBase.cs @@ -5,6 +5,7 @@ using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore.Diagnostics; using Microsoft.EntityFrameworkCore.TestModels.ComplexNavigationsModel; using Microsoft.EntityFrameworkCore.TestUtilities; using Xunit; @@ -1887,7 +1888,7 @@ where Maybe(l1.OneToOne_Optional_FK1, () => l1.OneToOne_Optional_FK1.Name) != "L elementSorter: l1 => l1.Id); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'join Level3 l2.OneToOne_Required_PK2 in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.ComplexNavigationsModel.Level3]) on Property([l2], \"Id\") equals Property([l2.OneToOne_Required_PK2], \"Id\")'")] + [ConditionalTheory(Skip = "issue #15249")] [MemberData(nameof(IsAsyncData))] public virtual Task Include_with_groupjoin_skip_and_take(bool isAsync) { @@ -2287,7 +2288,7 @@ where l2s.Any(l2 => l3s.Select(l3 => l1.Id).Any()) ); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'Any()'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task GroupJoin_on_subquery_and_set_operation_on_grouping_but_nothing_from_grouping_is_projected(bool isAsync) { @@ -2309,7 +2310,7 @@ public virtual Task GroupJoin_on_subquery_and_set_operation_on_grouping_but_noth (e, a) => Assert.Equal(e.Id, a.Id)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'Any()'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task GroupJoin_on_complex_subquery_and_set_operation_on_grouping_but_nothing_from_grouping_is_projected(bool isAsync) { @@ -2331,7 +2332,7 @@ public virtual Task GroupJoin_on_complex_subquery_and_set_operation_on_grouping_ (e, a) => Assert.Equal(e.Id, a.Id)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'join Level2 l2 in {from Level1 l1 in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.ComplexNavigationsModel.Level1]) join Level2 l1.OneToOne_Required_FK1 in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.ComplexNavigationsModel.Level2]) on Property([l1], \"Id\") equals Property([l1.OneToOne_Required_FK1], \"Level1_Required_Id\") into IEnumerable`1 l1.OneToOne_Required_FK1_group from Level2 l1.OneToOne_Required_FK1 in {[l1.OneToOne_Required_FK1_group] => DefaultIfEmpty()} select [l1.OneToOne_Required_FK1]} on Convert([l1].Id, Nullable`1) equals MaybeScalar([l2], () => [l2]?.Level1_Optional_Id)'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task Null_protection_logic_work_for_inner_key_access_of_manually_created_GroupJoin1(bool isAsync) { @@ -3024,7 +3025,7 @@ from l2 in l1.OneToMany_Optional1.DefaultIfEmpty() (e, a) => Assert.Equal(e.Id, a.Id)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'Distict()'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] public virtual Task SelectMany_with_navigation_and_Distinct(bool isAsync) { @@ -3445,7 +3446,7 @@ from l3 in l2.OneToMany_Optional2.Where(l => l.Id > 5).DefaultIfEmpty() (e, a) => Assert.Equal(e.Id, a.Id)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'where ([l1.OneToMany_Required1_groupItem].Id > 5)'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] public virtual Task SelectMany_with_navigation_filter_paging_and_explicit_DefaultIfEmpty(bool isAsync) { @@ -3513,11 +3514,12 @@ public virtual Task Contains_with_subquery_optional_navigation_and_constant_item elementAsserter: (e, a) => Assert.Equal(e.Id, a.Id)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'All(ClientMethod([l2.OneToOne_Optional_FK2.OneToOne_Optional_FK3]?.Id))'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] - public virtual Task Complex_query_with_optional_navigations_and_client_side_evaluation(bool isAsync) + public virtual async Task Complex_query_with_optional_navigations_and_client_side_evaluation(bool isAsync) { - return AssertQuery( + var message = (await Assert.ThrowsAsync( + () => AssertQuery( isAsync, l1s => l1s.Where( l1 => l1.Id < 3 && !l1.OneToMany_Optional1.Select(l2 => l2.OneToOne_Optional_FK2.OneToOne_Optional_FK3.Id) @@ -3530,10 +3532,12 @@ public virtual Task Complex_query_with_optional_navigations_and_client_side_eval l2.OneToOne_Optional_FK2.OneToOne_Optional_FK3, () => l2.OneToOne_Optional_FK2.OneToOne_Optional_FK3.Id))).All(a => true)), elementSorter: e => e.Id, - elementAsserter: (e, a) => Assert.Equal(e.Id, a.Id)); + elementAsserter: (e, a) => Assert.Equal(e.Id, a.Id)))).Message; + + Assert.Contains("ClientMethod((Nullable)", message); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'First()'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] public virtual Task Required_navigation_on_a_subquery_with_First_in_projection(bool isAsync) { @@ -3544,7 +3548,7 @@ public virtual Task Required_navigation_on_a_subquery_with_First_in_projection(b .Select(l2o => l2s.OrderBy(l2i => l2i.Id).First().OneToOne_Required_FK_Inverse2.Name)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'First()'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] public virtual Task Required_navigation_on_a_subquery_with_complex_projection_and_First(bool isAsync) { @@ -3565,7 +3569,7 @@ orderby l2i.Id }).First().Navigation.Name); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'First()'")] + [ConditionalTheory(Skip = "Issue #15832")] [MemberData(nameof(IsAsyncData))] public virtual Task Required_navigation_on_a_subquery_with_First_in_predicate(bool isAsync) { @@ -3849,7 +3853,7 @@ from subquery in grouping.DefaultIfEmpty() select MaybeScalar(subquery, () => subquery.Id)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'Any()'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task GroupJoin_with_complex_subquery_with_joins_with_reference_to_grouping1(bool isAsync) { @@ -3869,7 +3873,7 @@ from subquery in grouping.DefaultIfEmpty() select subquery.Id); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'DefaultIfEmpty()'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task GroupJoin_with_complex_subquery_with_joins_with_reference_to_grouping2(bool isAsync) { @@ -3917,7 +3921,7 @@ from l2_outer in grouping_outer.DefaultIfEmpty() select Maybe(l2_outer, () => l2_outer.Name)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'join Level2 l2_outer in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.ComplexNavigationsModel.Level2]) on [x]?.Id equals [l2_outer].Level1_Optional_Id'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task GroupJoin_on_a_subquery_containing_another_GroupJoin_projecting_outer_with_client_method(bool isAsync) { @@ -4089,7 +4093,7 @@ where l1.Id < 3 select l1.Name); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'where ({from Level1 l1_inner in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.ComplexNavigationsModel.Level1]) join Level2 l2_inner in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.ComplexNavigationsModel.Level2]) on Convert([l1_inner].Id, Nullable`1) equals [l2_inner].Level1_Optional_Id into IEnumerable`1 grouping from Level2 l2_inner in {[grouping] => DefaultIfEmpty()} select ClientStringMethod([l1_inner].Name) => Count()} > 7)'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task GroupJoin_in_subquery_with_client_projection(bool isAsync) { @@ -4105,7 +4109,7 @@ where l1.Id < 3 select l1.Name); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'where ({from Level1 l1_inner in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.ComplexNavigationsModel.Level1]) join Level2 l2_inner in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.ComplexNavigationsModel.Level2]) on Convert([l1_inner].Id, Nullable`1) equals [l2_inner].Level1_Optional_Id into IEnumerable`1 grouping_inner from Level2 l2_inner in {[grouping_inner] => DefaultIfEmpty()} select ClientStringMethod([l1_inner].Name) => Count()} > 7)'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task GroupJoin_in_subquery_with_client_projection_nested1(bool isAsync) { @@ -4126,7 +4130,7 @@ where l1_outer.Id < 2 select l1_outer.Name); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'where ({from Level1 l1_middle in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.ComplexNavigationsModel.Level1]) join Level2 l2_middle in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.ComplexNavigationsModel.Level2]) on Convert([l1_middle].Id, Nullable`1) equals [l2_middle].Level1_Optional_Id into IEnumerable`1 grouping_middle from Level2 l2_middle in {[grouping_middle] => DefaultIfEmpty()} where ({from Level1 l1_inner in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.ComplexNavigationsModel.Level1]) join Level2 l2_inner in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.ComplexNavigationsModel.Level2]) on Convert([l1_inner].Id, Nullable`1) equals [l2_inner].Level1_Optional_Id into IEnumerable`1 grouping_inner from Level2 l2_inner in {[grouping_inner] => DefaultIfEmpty()} select [l1_inner].Name => Count()} > 7) select ClientStringMethod([l1_middle].Name) => Count()} > 4)'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task GroupJoin_in_subquery_with_client_projection_nested2(bool isAsync) { @@ -4151,7 +4155,7 @@ private static string ClientStringMethod(string argument) return argument; } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'DefaultIfEmpty()'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task GroupJoin_reference_to_group_in_OrderBy(bool isAsync) { @@ -4185,7 +4189,7 @@ from l2 in groupJoin.DefaultIfEmpty() elementAsserter: (e, a) => Assert.Equal(e.Id + " " + e.client, a.Id + " " + a.client)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'orderby ClientMethodNullableInt(Convert([l1].Id, Nullable`1)) asc, ClientMethodNullableInt(?[l2] | [l2]?.Id?) asc'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task GroupJoin_client_method_in_OrderBy(bool isAsync) { @@ -4218,7 +4222,7 @@ from l2 in groupJoin.Select(gg => gg) select l1.Id); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'where ([gg].Id > 0)'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task GroupJoin_with_subquery_on_inner(bool isAsync) { @@ -4231,7 +4235,7 @@ from l2 in groupJoin.Where(gg => gg.Id > 0).OrderBy(gg => gg.Id).Take(10).Defaul select l1.Id); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'where ([gg].Id > 0)'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task GroupJoin_with_subquery_on_inner_and_no_DefaultIfEmpty(bool isAsync) { @@ -4451,7 +4455,7 @@ join l2 in l2s elementAsserter: (e, a) => Assert.Equal(e.Id, a.Id)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy([l2.OneToMany_Required_Self_Inverse2].Name, [l2])'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task Navigation_filter_navigation_grouping_ordering_by_group_key(bool isAsync) { @@ -4658,7 +4662,7 @@ public virtual Task Comparing_collection_navigation_on_optional_reference_to_nul .Select(l1 => l1.Id)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'First()'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] public virtual Task Select_subquery_with_client_eval_and_navigation1(bool isAsync) { @@ -4667,7 +4671,7 @@ public virtual Task Select_subquery_with_client_eval_and_navigation1(bool isAsyn l2s => l2s.Select(l2 => l2s.OrderBy(l => l.Id).First().OneToOne_Required_FK_Inverse2.Name)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'First()'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] public virtual Task Select_subquery_with_client_eval_and_navigation2(bool isAsync) { @@ -4977,7 +4981,7 @@ public virtual void Include_inside_subquery() } } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'where ([l1.OneToMany_Required1_groupItem].Id > 5)'")] + [ConditionalTheory(Skip = "Issue #17229")] [MemberData(nameof(IsAsyncData))] public virtual Task Select_optional_navigation_property_string_concat(bool isAsync) { @@ -5094,7 +5098,7 @@ public virtual void Entries_for_detached_entities_are_removed() } } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy([l1].Name, _Include(queryContext, [l1], new [] {[l1.OneToOne_Optional_FK1]}, (queryContext, entity, included) => { ... }))'")] + [ConditionalTheory(Skip = "issue #15249")] [MemberData(nameof(IsAsyncData))] public virtual Task Include_reference_with_groupby_in_subquery(bool isAsync) { @@ -5110,7 +5114,7 @@ public virtual Task Include_reference_with_groupby_in_subquery(bool isAsync) }); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy([l1].Name, _Include(queryContext, [l1], new [] {}, (queryContext, entity, included) => { ... }))' could not be translated and will be evaluated locally.'")] + [ConditionalTheory(Skip = "issue #15249")] [MemberData(nameof(IsAsyncData))] public virtual Task Include_collection_with_groupby_in_subquery(bool isAsync) { @@ -5126,7 +5130,7 @@ public virtual Task Include_collection_with_groupby_in_subquery(bool isAsync) }); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy([l1].Name, _Include(queryContext, [l1], new [] {[l1.OneToOne_Optional_FK1]}, (queryContext, entity, included) => { ... }))'")] + [ConditionalTheory(Skip = "issue #15249")] [MemberData(nameof(IsAsyncData))] public virtual Task Multi_include_with_groupby_in_subquery(bool isAsync) { @@ -5145,7 +5149,7 @@ public virtual Task Multi_include_with_groupby_in_subquery(bool isAsync) expectedIncludes); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy([l1].Name, _Include(queryContext, [l1], new [] {}, (queryContext, entity, included) => { ... }))'")] + [ConditionalTheory(Skip = "issue #15249")] [MemberData(nameof(IsAsyncData))] public virtual Task Include_collection_with_groupby_in_subquery_and_filter_before_groupby(bool isAsync) { @@ -5162,7 +5166,7 @@ public virtual Task Include_collection_with_groupby_in_subquery_and_filter_befor }); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy([l1].Name, _Include(queryContext, [l1], new [] {}, (queryContext, entity, included) => { ... }))'")] + [ConditionalTheory(Skip = "issue #15249")] [MemberData(nameof(IsAsyncData))] public virtual Task Include_collection_with_groupby_in_subquery_and_filter_after_groupby(bool isAsync) { @@ -5384,7 +5388,7 @@ public virtual Task Include_after_SelectMany_and_multiple_reference_navigations( }); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'Distinct()'")] + [ConditionalTheory(Skip = "issue #15249")] [MemberData(nameof(IsAsyncData))] public virtual Task Include_after_SelectMany_and_reference_navigation_with_another_SelectMany_with_Distinct(bool isAsync) { @@ -5408,9 +5412,9 @@ from lInner in lOuter.OneToMany_Optional3.Distinct() [ConditionalTheory] [MemberData(nameof(IsAsyncData))] - public virtual Task SelectMany_subquery_with_custom_projection(bool isAsync) + public virtual async Task SelectMany_subquery_with_custom_projection(bool isAsync) { - return AssertQuery( + await AssertQuery( isAsync, l1s => l1s.OrderBy(l1 => l1.Id).SelectMany( l1 => l1.OneToMany_Optional1.Select( diff --git a/test/EFCore.Specification.Tests/Query/FiltersTestBase.cs b/test/EFCore.Specification.Tests/Query/FiltersTestBase.cs index d3b21837337..b4236a1d54b 100644 --- a/test/EFCore.Specification.Tests/Query/FiltersTestBase.cs +++ b/test/EFCore.Specification.Tests/Query/FiltersTestBase.cs @@ -4,6 +4,7 @@ using System; using System.Linq; using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore.Diagnostics; using Microsoft.EntityFrameworkCore.TestModels.Northwind; using Xunit; @@ -46,10 +47,13 @@ public virtual void Find() Assert.Null(_context.Find("ALFKI")); } - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'where ClientMethod([p])'")] + [ConditionalFact] public virtual void Client_eval() { - Assert.Equal(69, _context.Products.ToList().Count); + Assert.Equal( + CoreStrings.TranslationFailed("(p) => ClientMethod(p)"), + Assert.Throws( + () => _context.Products.ToList()).Message); } [ConditionalFact] @@ -127,16 +131,13 @@ public virtual void Project_reference_that_itself_has_query_filter_with_another_ Assert.True(results.All(o => o.Customer == null || o.CustomerID.StartsWith("B"))); } - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'where ClientMethod([p])'")] + [ConditionalFact] public virtual void Included_one_to_many_query_with_client_eval() { - var results = _context.Products.Include(p => p.OrderDetails).ToList(); - - Assert.Equal(69, results.Count); - Assert.True( - results.All( - p => !p.OrderDetails.Any() - || p.OrderDetails.All(od => od.Quantity > 50))); + Assert.Equal( + CoreStrings.TranslationFailed("(p) => ClientMethod(p)"), + Assert.Throws( + () => _context.Products.Include(p => p.OrderDetails).ToList()).Message); } [ConditionalFact(Skip = "issue #15081")] diff --git a/test/EFCore.Specification.Tests/Query/GearsOfWarQueryTestBase.cs b/test/EFCore.Specification.Tests/Query/GearsOfWarQueryTestBase.cs index 41b7372d0ec..63c74a6e74e 100644 --- a/test/EFCore.Specification.Tests/Query/GearsOfWarQueryTestBase.cs +++ b/test/EFCore.Specification.Tests/Query/GearsOfWarQueryTestBase.cs @@ -798,7 +798,7 @@ await AssertQuery( g => MilitaryRank.Corporal.HasFlag(gs.OrderBy(x => x.Nickname).ThenBy(x => x.SquadId).FirstOrDefault().Rank))); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'First()'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] public virtual Task Where_enum_has_flag_subquery_client_eval(bool isAsync) { @@ -1309,11 +1309,12 @@ orderby g.Nickname assertOrder: true); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'where (IIF(([g].LeaderNickname != null), new <>f__AnonymousType127`1(HasSoulPatch = [g].HasSoulPatch), null) == null)'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] - public virtual Task Where_conditional_with_anonymous_type(bool isAsync) + public virtual async Task Where_conditional_with_anonymous_type(bool isAsync) { - return AssertQuery( + var message = (await Assert.ThrowsAsync( + () => AssertQuery( isAsync, gs => from g in gs orderby g.Nickname @@ -1324,7 +1325,11 @@ orderby g.Nickname } : null) == null select g.Nickname, - assertOrder: true); + assertOrder: true))).Message; + + Assert.Equal( + CoreStrings.TranslationFailed("(g) => g.LeaderNickname != null ? new { HasSoulPatch = g.HasSoulPatch } : null == null"), + RemoveNewLines(message)); } [ConditionalTheory] @@ -1346,11 +1351,12 @@ orderby g.Nickname assertOrder: true); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'where ((new <>f__AnonymousType100`1(Name = [g].LeaderNickname) ?? new <>f__AnonymousType100`1(Name = [g].FullName)) != null)'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] - public virtual Task Where_coalesce_with_anonymous_types(bool isAsync) + public virtual async Task Where_coalesce_with_anonymous_types(bool isAsync) { - return AssertQuery( + var message = (await Assert.ThrowsAsync( + () => AssertQuery( isAsync, gs => from g in gs // ReSharper disable once ConstantNullCoalescingCondition @@ -1361,7 +1367,11 @@ public virtual Task Where_coalesce_with_anonymous_types(bool isAsync) { Name = g.FullName }) != null - select g.Nickname); + select g.Nickname))).Message; + + Assert.Equal( + CoreStrings.TranslationFailed("(g) => new { Name = g.LeaderNickname } ?? new { Name = g.FullName } != null"), + RemoveNewLines(message)); } [ConditionalFact(Skip = "issue #8421")] @@ -1545,7 +1555,7 @@ public virtual Task Where_subquery_distinct_firstordefault_boolean_with_pushdown gs => gs.Where(g => g.HasSoulPatch && g.Weapons.Distinct().OrderBy(w => w.Id).FirstOrDefault().IsAutomatic)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'First()'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] public virtual Task Where_subquery_distinct_first_boolean(bool isAsync) { @@ -1555,7 +1565,7 @@ public virtual Task Where_subquery_distinct_first_boolean(bool isAsync) assertOrder: true); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'SingleOrDefault()'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] public virtual Task Where_subquery_distinct_singleordefault_boolean1(bool isAsync) { @@ -1567,7 +1577,7 @@ public virtual Task Where_subquery_distinct_singleordefault_boolean1(bool isAsyn assertOrder: true); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'SingleOrDefault()'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] public virtual Task Where_subquery_distinct_singleordefault_boolean2(bool isAsync) { @@ -1579,7 +1589,7 @@ public virtual Task Where_subquery_distinct_singleordefault_boolean2(bool isAsyn assertOrder: true); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'SingleOrDefault()'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] public virtual Task Where_subquery_distinct_singleordefault_boolean_with_pushdown(bool isAsync) { @@ -1643,7 +1653,7 @@ public virtual Task Where_subquery_distinct_orderby_firstordefault_boolean_with_ gs => gs.Where(g => g.HasSoulPatch && g.Weapons.Distinct().OrderBy(w => w.Id).FirstOrDefault().IsAutomatic)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'Union(MaterializeCollectionNavigation(Navigation: Gear.Weapons (k__BackingField, ICollection) Collection ToDependent Weapon Inverse: Owner 4 -1 11 -1 -1, {from Weapon w in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.GearsOfWarModel.Weapon]) where ?= (Property([g], \"FullName\") == Property([w], \"OwnerFullName\")) =? select [w]}))'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task Where_subquery_union_firstordefault_boolean(bool isAsync) { @@ -1652,16 +1662,17 @@ public virtual Task Where_subquery_union_firstordefault_boolean(bool isAsync) gs => gs.Where(g => g.HasSoulPatch && g.Weapons.Union(g.Weapons).OrderBy(w => w.Id).FirstOrDefault().IsAutomatic)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'Concat(MaterializeCollectionNavigation(Navigation: Gear.Weapons (k__BackingField, ICollection) Collection ToDependent Weapon Inverse: Owner 4 -1 11 -1 -1, {from Weapon w in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.GearsOfWarModel.Weapon]) where ?= (Property([g], \"FullName\") == Property([w], \"OwnerFullName\")) =? select [w]}))'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] - public virtual Task Where_subquery_concat_firstordefault_boolean(bool isAsync) + public virtual async Task Where_subquery_concat_firstordefault_boolean(bool isAsync) { - return AssertQuery( + var message = (await Assert.ThrowsAsync( + () => AssertQuery( isAsync, - gs => gs.Where(g => g.HasSoulPatch && g.Weapons.Concat(g.Weapons).OrderBy(w => w.Id).FirstOrDefault().IsAutomatic)); + gs => gs.Where(g => g.HasSoulPatch && g.Weapons.Concat(g.Weapons).OrderBy(w => w.Id).FirstOrDefault().IsAutomatic)))).Message; } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'Concat({value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.GearsOfWarModel.Gear])})'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] public virtual Task Concat_with_count(bool isAsync) { @@ -1670,7 +1681,7 @@ public virtual Task Concat_with_count(bool isAsync) gs => gs.Concat(gs)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'Concat({from Gear g2 in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.GearsOfWarModel.Gear]) select [g2].FullName})'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] public virtual Task Concat_scalars_with_count(bool isAsync) { @@ -1679,7 +1690,7 @@ public virtual Task Concat_scalars_with_count(bool isAsync) gs => gs.Select(g => g.Nickname).Concat(gs.Select(g2 => g2.FullName))); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'Concat({from Gear g2 in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.GearsOfWarModel.Gear]) select new <>f__AnonymousType134`2(Gear = [g2], Name = [g2].FullName)})'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] public virtual Task Concat_anonymous_with_count(bool isAsync) { @@ -1712,7 +1723,7 @@ public virtual void Concat_with_scalar_projection() } } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy([g].LeaderNickname, [g])'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task Concat_with_groupings(bool isAsync) { @@ -1723,16 +1734,21 @@ public virtual Task Concat_with_groupings(bool isAsync) elementAsserter: GroupingAsserter(g => g.Nickname, (e, a) => Assert.Equal(e.Nickname, a.Nickname))); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'Concat(MaterializeCollectionNavigation(Navigation: Gear.Weapons (k__BackingField, ICollection) Collection ToDependent Weapon Inverse: Owner 4 -1 11 -1 -1, {from Weapon w in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.GearsOfWarModel.Weapon]) where ?= (Property([g], \"FullName\") == Property([w], \"OwnerFullName\")) =? select [w]}))'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] - public virtual Task Select_navigation_with_concat_and_count(bool isAsync) + public virtual async Task Select_navigation_with_concat_and_count(bool isAsync) { - return AssertQueryScalar( + var message = (await Assert.ThrowsAsync( + () => AssertQueryScalar( isAsync, - gs => gs.Where(g => !g.HasSoulPatch).Select(g => g.Weapons.Concat(g.Weapons).Count())); + gs => gs.Where(g => !g.HasSoulPatch).Select(g => g.Weapons.Concat(g.Weapons).Count())))).Message; + + Assert.Equal( + CoreStrings.TranslationFailed("Concat( source1: AsQueryable(MaterializeCollectionNavigation(Navigation: Gear.Weapons (k__BackingField, ICollection) Collection ToDependent Weapon Inverse: Owner, Where( source: NavigationExpansionExpression Source: Where( source: DbSet, predicate: (w) => Property((Unhandled parameter: g), \"FullName\") == Property(w, \"OwnerFullName\")) PendingSelector: (w) => NavigationTreeExpression Value: EntityReferenceWeapon Expression: w , predicate: (i) => Property(NavigationTreeExpression Value: EntityReferenceGear Expression: (Unhandled parameter: g), \"FullName\") == Property(i, \"OwnerFullName\")))), source2: MaterializeCollectionNavigation(Navigation: Gear.Weapons (k__BackingField, ICollection) Collection ToDependent Weapon Inverse: Owner, Where( source: NavigationExpansionExpression Source: Where( source: DbSet, predicate: (w0) => Property((Unhandled parameter: g), \"FullName\") == Property(w0, \"OwnerFullName\")) PendingSelector: (w0) => NavigationTreeExpression Value: EntityReferenceWeapon Expression: w0 , predicate: (i) => Property(NavigationTreeExpression Value: EntityReferenceGear Expression: (Unhandled parameter: g), \"FullName\") == Property(i, \"OwnerFullName\"))))"), + RemoveNewLines(message)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy([g].LeaderNickname, [g])'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task Where_subquery_concat_order_by_firstordefault_boolean(bool isAsync) { @@ -1743,22 +1759,28 @@ public virtual Task Where_subquery_concat_order_by_firstordefault_boolean(bool i elementAsserter: GroupingAsserter(g => g.Nickname, (e, a) => Assert.Equal(e.Nickname, a.Nickname))); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'Union(MaterializeCollectionNavigation(Navigation: Gear.Weapons (k__BackingField, ICollection) Collection ToDependent Weapon Inverse: Owner 4 -1 11 -1 -1, {from Weapon w in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.GearsOfWarModel.Weapon]) where ?= (Property([g], \"FullName\") == Property([w], \"OwnerFullName\")) =? select [w]}))'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] - public virtual Task Concat_with_collection_navigations(bool isAsync) + public virtual async Task Concat_with_collection_navigations(bool isAsync) { - return AssertQueryScalar( + var message = (await Assert.ThrowsAsync( + () => AssertQueryScalar( isAsync, - gs => gs.Where(g => g.HasSoulPatch).Select(g => g.Weapons.Union(g.Weapons).Count())); + gs => gs.Where(g => g.HasSoulPatch).Select(g => g.Weapons.Union(g.Weapons).Count())))).Message; + + Assert.Equal( + CoreStrings.TranslationFailed("Union( source1: AsQueryable(MaterializeCollectionNavigation(Navigation: Gear.Weapons (k__BackingField, ICollection) Collection ToDependent Weapon Inverse: Owner, Where( source: NavigationExpansionExpression Source: Where( source: DbSet, predicate: (w) => Property((Unhandled parameter: g), \"FullName\") == Property(w, \"OwnerFullName\")) PendingSelector: (w) => NavigationTreeExpression Value: EntityReferenceWeapon Expression: w , predicate: (i) => Property(NavigationTreeExpression Value: EntityReferenceGear Expression: (Unhandled parameter: g), \"FullName\") == Property(i, \"OwnerFullName\")))), source2: MaterializeCollectionNavigation(Navigation: Gear.Weapons (k__BackingField, ICollection) Collection ToDependent Weapon Inverse: Owner, Where( source: NavigationExpansionExpression Source: Where( source: DbSet, predicate: (w0) => Property((Unhandled parameter: g), \"FullName\") == Property(w0, \"OwnerFullName\")) PendingSelector: (w0) => NavigationTreeExpression Value: EntityReferenceWeapon Expression: w0 , predicate: (i) => Property(NavigationTreeExpression Value: EntityReferenceGear Expression: (Unhandled parameter: g), \"FullName\") == Property(i, \"OwnerFullName\"))))"), + RemoveNewLines(message)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'Union(MaterializeCollectionNavigation(Navigation: Officer.Reports (k__BackingField, ICollection) Collection ToDependent Gear 5 -1 12 -1 -1, {from Gear g in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.GearsOfWarModel.Gear]) where ?= (new AnonymousObject(new [] {Convert(Property([o], \"Nickname\"), Object), Convert(Property([o], \"SquadId\"), Object)}) == new AnonymousObject(new [] {Convert(Property([g], \"LeaderNickname\"), Object), Convert(Property([g], \"LeaderSquadId\"), Object)})) =? select [g]}))'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] - public virtual Task Union_with_collection_navigations(bool isAsync) + public virtual async Task Union_with_collection_navigations(bool isAsync) { - return AssertQueryScalar( + var message = (await Assert.ThrowsAsync( + () => AssertQueryScalar( isAsync, - gs => gs.OfType().Select(o => o.Reports.Union(o.Reports).Count())); + gs => gs.OfType().Select(o => o.Reports.Union(o.Reports).Count())))).Message; } [ConditionalTheory] @@ -1770,15 +1792,20 @@ public virtual Task Select_subquery_distinct_firstordefault(bool isAsync) gs => gs.Where(g => g.HasSoulPatch).Select(g => g.Weapons.Distinct().OrderBy(w => w.Id).FirstOrDefault().Name)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'where (?[t.Gear] | (?[t.Gear] | ([t.Gear]?.IsMarcus == True)? == True)? == True)'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] - public virtual Task Select_Where_Navigation_Client(bool isAsync) + public virtual async Task Select_Where_Navigation_Client(bool isAsync) { - return AssertQuery( + var message = (await Assert.ThrowsAsync( + () => AssertQuery( isAsync, ts => from t in ts where t.Gear != null && t.Gear.IsMarcus - select t); + select t))).Message; + + Assert.Equal( + CoreStrings.TranslationFailed("(c) => Property(c.Inner, \"Nickname\") != null && c.Inner.IsMarcus"), + RemoveNewLines(message)); } [ConditionalTheory] @@ -2451,8 +2478,8 @@ public virtual Task Optional_navigation_type_compensation_works_with_array_initi isAsync, ts => ts.Where(t => t.Note != "K.I.A.").Select(t => new[] { t.Gear.SquadId }), elementSorter: e => e[0]); - } + } [ConditionalTheory] [MemberData(nameof(IsAsyncData))] public virtual Task Optional_navigation_type_compensation_works_with_orderby(bool isAsync) @@ -2462,7 +2489,7 @@ public virtual Task Optional_navigation_type_compensation_works_with_orderby(boo ts => ts.Where(t => t.Note != "K.I.A.").OrderBy(t => t.Gear.SquadId).Select(t => t)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy(Convert([t.Gear]?.SquadId, Int32), [t])'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task Optional_navigation_type_compensation_works_with_groupby(bool isAsync) { @@ -2858,7 +2885,7 @@ public virtual void Where_datetimeoffset_milliseconds_parameter_and_constant() } } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'from Gear g in ClientDefaultIfEmpty([grouping])'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task Orderby_added_for_client_side_GroupJoin_composite_dependent_to_principal_LOJ_when_incomplete_key_is_used( bool isAsync) @@ -2942,7 +2969,7 @@ where Maybe(g.Tag, () => g.Tag.Note) != "Foo" select g.HasSoulPatch)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'Distinct()'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task Distinct_with_unflattened_groupjoin_is_evaluated_on_client(bool isAsync) { @@ -2964,7 +2991,7 @@ public virtual Task Distinct_with_unflattened_groupjoin_is_evaluated_on_client(b .Distinct()); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'Count()'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task Count_with_unflattened_groupjoin_is_evaluated_on_client(bool isAsync) { @@ -3022,7 +3049,7 @@ public virtual Task All_with_optional_navigation_is_translated_to_sql(bool isAsy predicate: g => g.Tag.Note != "Foo"); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'Count()'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task Non_flattened_GroupJoin_with_result_operator_evaluates_on_the_client(bool isAsync) { @@ -3043,16 +3070,21 @@ public virtual Task Non_flattened_GroupJoin_with_result_operator_evaluates_on_th (k, r) => r.Count())); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'where ClientEquals([g.Tag]?.Note, __prm_0)'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] - public virtual Task Client_side_equality_with_parameter_works_with_optional_navigations(bool isAsync) + public virtual async Task Client_side_equality_with_parameter_works_with_optional_navigations(bool isAsync) { var prm = "Marcus' Tag"; - return AssertQuery( + var message = (await Assert.ThrowsAsync( + () => AssertQuery( isAsync, gs => gs.Where(g => ClientEquals(g.Tag.Note, prm)), - elementAsserter: (e, a) => Assert.Equal(e.Nickname, a.Nickname)); + elementAsserter: (e, a) => Assert.Equal(e.Nickname, a.Nickname)))).Message; + + Assert.Equal( + CoreStrings.TranslationFailed("(g) => ClientEquals( first: g.Inner.Note, second: (Unhandled parameter: __prm_0))"), + RemoveNewLines(message)); } private static bool ClientEquals(string first, string second) @@ -3373,65 +3405,88 @@ public virtual Task Select_length_of_string_property(bool isAsync) elementSorter: e => e.Name); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'where (FavoriteWeapon(MaterializeCollectionNavigation(Navigation: Gear.Weapons (k__BackingField, ICollection) Collection ToDependent Weapon Inverse: Owner 4 -1 11 -1 -1, {from Weapon w in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.GearsOfWarModel.Weapon]) where ?= (Property([g], \"FullName\") == Property([w], \"OwnerFullName\")) =? select [w]})).Name == \"Marcus' Lancer\")'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] - public virtual Task Client_method_on_collection_navigation_in_predicate(bool isAsync) + public virtual async Task Client_method_on_collection_navigation_in_predicate(bool isAsync) { - return AssertQuery( + var message = (await Assert.ThrowsAsync( + () => AssertQuery( isAsync, gs => from g in gs where g.HasSoulPatch && FavoriteWeapon(g.Weapons).Name == "Marcus' Lancer" - select g.Nickname); + select g.Nickname))).Message; + + Assert.Equal( + CoreStrings.TranslationFailed("(g) => g.HasSoulPatch && FavoriteWeapon(MaterializeCollectionNavigation(Navigation: Gear.Weapons (k__BackingField, ICollection) Collection ToDependent Weapon Inverse: Owner, Where( source: DbSet, predicate: (w) => Property(g, \"FullName\") == Property(w, \"OwnerFullName\")))).Name == \"Marcus' Lancer\""), + RemoveNewLines(message)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'where (FavoriteWeapon(MaterializeCollectionNavigation(Navigation: Gear.Weapons (k__BackingField, ICollection) Collection ToDependent Weapon Inverse: Owner 4 -1 11 -1 -1, {from Weapon w in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.GearsOfWarModel.Weapon]) where ?= (Property([g], \"FullName\") == Property([w], \"OwnerFullName\")) =? select [w]})).Name == \"Cole's Gnasher\")'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] - public virtual Task Client_method_on_collection_navigation_in_predicate_accessed_by_ef_property(bool isAsync) + public virtual async Task Client_method_on_collection_navigation_in_predicate_accessed_by_ef_property(bool isAsync) { - return AssertQuery( + var message = (await Assert.ThrowsAsync( + () => AssertQuery( isAsync, gs => from g in gs where !g.HasSoulPatch && FavoriteWeapon(EF.Property>(g, "Weapons")).Name == "Cole's Gnasher" select g.Nickname, gs => from g in gs where !g.HasSoulPatch && FavoriteWeapon(g.Weapons).Name == "Cole's Gnasher" - select g.Nickname); + select g.Nickname))).Message; + + Assert.Equal( + CoreStrings.TranslationFailed("(g) => !(g.HasSoulPatch) && FavoriteWeapon(MaterializeCollectionNavigation(Navigation: Gear.Weapons (k__BackingField, ICollection) Collection ToDependent Weapon Inverse: Owner, Where( source: DbSet, predicate: (w) => Property(g, \"FullName\") == Property(w, \"OwnerFullName\")))).Name == \"Cole's Gnasher\""), + RemoveNewLines(message)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'orderby FavoriteWeapon(MaterializeCollectionNavigation(Navigation: Gear.Weapons (k__BackingField, ICollection) Collection ToDependent Weapon Inverse: Owner 4 -1 11 -1 -1, {from Weapon w in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.GearsOfWarModel.Weapon]) where ?= (Property([g], \"FullName\") == Property([w], \"OwnerFullName\")) =? select [w]})).Name desc'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] - public virtual Task Client_method_on_collection_navigation_in_order_by(bool isAsync) + public virtual async Task Client_method_on_collection_navigation_in_order_by(bool isAsync) { - return AssertQuery( + var message = (await Assert.ThrowsAsync( + () => AssertQuery( isAsync, gs => from g in gs where !g.HasSoulPatch orderby FavoriteWeapon(g.Weapons).Name descending select g.Nickname, - assertOrder: true); + assertOrder: true))).Message; + + Assert.Equal( + CoreStrings.TranslationFailed("(g) => FavoriteWeapon(MaterializeCollectionNavigation(Navigation: Gear.Weapons (k__BackingField, ICollection) Collection ToDependent Weapon Inverse: Owner, Where( source: DbSet, predicate: (w) => Property(g, \"FullName\") == Property(w, \"OwnerFullName\")))).Name"), + RemoveNewLines(message)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'from Gear v in Veterans(MaterializeCollectionNavigation(Navigation: Officer.Reports (k__BackingField, ICollection) Collection ToDependent Gear 5 -1 12 -1 -1, {from Gear g in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.GearsOfWarModel.Gear]) where ?= (new AnonymousObject(new [] {Convert(Property([g], \"Nickname\"), Object), Convert(Property([g], \"SquadId\"), Object)}) == new AnonymousObject(new [] {Convert(Property([g], \"LeaderNickname\"), Object), Convert(Property([g], \"LeaderSquadId\"), Object)})) =? select [g]}))'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] - public virtual Task Client_method_on_collection_navigation_in_additional_from_clause(bool isAsync) + public virtual async Task Client_method_on_collection_navigation_in_additional_from_clause(bool isAsync) { - return AssertQuery( - isAsync, - gs => from g in gs.OfType() - from v in Veterans(g.Reports) - select new - { - g = g.Nickname, - v = v.Nickname - }, - elementSorter: e => e.g + e.v); + var message = (await Assert.ThrowsAsync( + () => AssertQuery( + isAsync, + gs => from g in gs.OfType() + from v in Veterans(g.Reports) + select new + { + g = g.Nickname, v = v.Nickname + }, + elementSorter: e => e.g + e.v))).Message; + + Assert.Equal( + CoreStrings.TranslationFailed("(g) => Veterans(g.Reports)"), + RemoveNewLines(message)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'join Gear g in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.GearsOfWarModel.Gear]) on FavoriteWeapon(MaterializeCollectionNavigation(Navigation: Gear.Weapons (k__BackingField, ICollection) Collection ToDependent Weapon Inverse: Owner 4 -1 11 -1 -1, {from Weapon w in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.GearsOfWarModel.Weapon]) where ?= (Property([o], \"FullName\") == Property([w], \"OwnerFullName\")) =? select [w]})).Name equals FavoriteWeapon(MaterializeCollectionNavigation(Navigation: Gear.Weapons (k__BackingField, ICollection) Collection ToDependent Weapon Inverse: Owner 4 -1 11 -1 -1, {from Weapon w in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.GearsOfWarModel.Weapon]) where ?= (Property([g], \"FullName\") == Property([w], \"OwnerFullName\")) =? select [w]})).Name'")] + private string RemoveNewLines(string message) + => message.Replace("\n", "").Replace("\r", ""); + + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] - public virtual Task Client_method_on_collection_navigation_in_outer_join_key(bool isAsync) + public virtual async Task Client_method_on_collection_navigation_in_outer_join_key(bool isAsync) { - return AssertQuery( + var message = (await Assert.ThrowsAsync( + () => AssertQuery( isAsync, gs => from o in gs.OfType() join g in gs on FavoriteWeapon(o.Weapons).Name equals FavoriteWeapon(g.Weapons).Name @@ -3441,7 +3496,7 @@ where o.HasSoulPatch o = o.Nickname, g = g.Nickname }, - elementSorter: e => e.o + e.g); + elementSorter: e => e.o + e.g))).Message; } private static Weapon FavoriteWeapon(IEnumerable weapons) @@ -5507,7 +5562,7 @@ public virtual void Correlated_collection_with_top_level_Last_with_order_by_on_i } } - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'GroupBy([g].Rank, new <>f__AnonymousType198`2(Rank = _Include(queryContext, [g], new [] {}, (queryContext, entity, included) => { ... }).Rank, g = [g]))'")] + [ConditionalFact(Skip = "Issue #17068")] public virtual void Include_with_group_by_and_last() { using (var ctx = CreateContext()) @@ -5553,7 +5608,7 @@ public virtual void Include_with_group_by_and_last() } } - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'GroupBy(new <>f__AnonymousType199`2(Rank = [g].Rank, HasSoulPatch = [g].HasSoulPatch), _Include(queryContext, [g], new [] {}, (queryContext, entity, included) => { ... }))'")] + [ConditionalFact(Skip = "Issue #17068")] public virtual void Include_with_group_by_with_composite_group_key() { using (var ctx = CreateContext()) @@ -5599,7 +5654,7 @@ public virtual void Include_with_group_by_with_composite_group_key() } } - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'GroupBy([g].HasSoulPatch, _Include(queryContext, [g], new [] {}, (queryContext, entity, included) => { ... }))'")] + [ConditionalFact(Skip = "Issue #17068")] public virtual void Include_with_group_by_order_by_take() { using (var ctx = CreateContext()) @@ -5617,7 +5672,7 @@ public virtual void Include_with_group_by_order_by_take() } } - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'GroupBy([g].HasSoulPatch, _Include(queryContext, [g], new [] {}, (queryContext, entity, included) => { ... }))'")] + [ConditionalFact(Skip = "Issue #17068")] public virtual void Include_with_group_by_distinct() { using (var ctx = CreateContext()) @@ -5806,9 +5861,9 @@ from g in grouping.DefaultIfEmpty() elementAsserter: (e, a) => CollectionAsserter(elementSorter: ee => ee)(e.Collection, a.Collection)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'Concat({value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.GearsOfWarModel.Gear])})'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] - public virtual Task Include_with_concat(bool isAsync) + public virtual async Task Include_with_concat(bool isAsync) { var expectedIncludes = new List { @@ -5816,10 +5871,15 @@ public virtual Task Include_with_concat(bool isAsync) new ExpectedInclude(o => o.Squad, "Squad") }; - return AssertIncludeQuery( + var message = (await Assert.ThrowsAsync( + () => AssertIncludeQuery( isAsync, gs => gs.Include(g => g.Squad).Concat(gs), - expectedIncludes); + expectedIncludes))).Message; + + Assert.Equal( + "When performing a set operation, both operands must have the same Include operations.", + RemoveNewLines(message)); } // issue #12889 @@ -5991,7 +6051,7 @@ join g in gs on c equals g.AssignedCity e => e.CityName + " " + e.GearNickname); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'join CogTag t in {from CogTag tt in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.GearsOfWarModel.CogTag]) where (([tt].Note == \"Cole's Tag\") OrElse ([tt].Note == \"Dom's Tag\")) select [tt]} on [g] equals {from Gear subQuery in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.GearsOfWarModel.Gear]) where ?= (new AnonymousObject(new [] {Convert(Property([subQuery], \"Nickname\"), Object), Convert(Property([subQuery], \"SquadId\"), Object)}) == new AnonymousObject(new [] {Convert(Property([t], \"GearNickName\"), Object), Convert(Property([t], \"GearSquadId\"), Object)})) =? select [subQuery] => FirstOrDefault()}'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] public virtual Task Join_on_entity_qsre_keys_inner_key_is_navigation_composite_key(bool isAsync) { @@ -6052,11 +6112,12 @@ from w in grouping.DefaultIfEmpty() elementSorter: e => e.SquadName + " " + e.WeaponName); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'join Gear ii in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.GearsOfWarModel.Gear]) on {from Gear v in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.GearsOfWarModel.Gear]) join CogTag v.Tag in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.GearsOfWarModel.CogTag]) on new AnonymousObject(new [] {Convert(Property([v], \"Nickname\"), Object), Convert(Property([v], \"SquadId\"), Object)}) equals new AnonymousObject(new [] {Convert(Property([v.Tag], \"GearNickName\"), Object), Convert(Property([v.Tag], \"GearSquadId\"), Object)}) into IEnumerable`1 v.Tag_group from CogTag v.Tag in {[v.Tag_group] => DefaultIfEmpty()} where (EF.Property(?[v.Tag]?, \"Id\") == Property([i], \"Id\")) where ?= (Property([o], \"Id\") == Property([v], \"SquadId\")) =? select [v] => FirstOrDefault()} equals [ii]'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] - public virtual Task Join_with_complex_key_selector(bool isAsync) + public virtual async Task Join_with_complex_key_selector(bool isAsync) { - return AssertQuery( + var message = (await Assert.ThrowsAsync( + () => AssertQuery( isAsync, (ss, ts, gs) => ss .Join( @@ -6081,10 +6142,14 @@ public virtual Task Join_with_complex_key_selector(bool isAsync) r.o.Id, TagId = r.i.Id }), - elementSorter: e => e.Id + " " + e.TagId); + elementSorter: e => e.Id + " " + e.TagId))).Message; + + Assert.Equal( + "This query would cause multiple evaluation of a subquery because entity 'Gear' has a composite key. Rewrite your query avoiding the subquery.", + RemoveNewLines(message)); } - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'GroupBy([s], _Include(queryContext, [s], new [] {}, (queryContext, entity, included) => { ... }))'")] + [ConditionalFact(Skip = "Issue #17068")] public virtual void Include_with_group_by_on_entity_qsre() { using (var ctx = CreateContext()) @@ -6102,7 +6167,7 @@ public virtual void Include_with_group_by_on_entity_qsre() } } - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'GroupBy([g], _Include(queryContext, [g], new [] {}, (queryContext, entity, included) => { ... }))'")] + [ConditionalFact(Skip = "Issue #17068")] public virtual void Include_with_group_by_on_entity_qsre_with_composite_key() { using (var ctx = CreateContext()) @@ -6120,7 +6185,7 @@ public virtual void Include_with_group_by_on_entity_qsre_with_composite_key() } } - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'GroupBy([g.Squad], _Include(queryContext, [g], new [] {}, (queryContext, entity, included) => { ... }))'")] + [ConditionalFact(Skip = "Issue #17068")] public virtual void Include_with_group_by_on_entity_navigation() { using (var ctx = CreateContext()) @@ -6138,7 +6203,7 @@ public virtual void Include_with_group_by_on_entity_navigation() } } - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'GroupBy([l.Commander.DefeatedBy], _Include(queryContext, [_1], new [] {}, (queryContext, entity, included) => { ... }))'")] + [ConditionalFact(Skip = "Issue #17068")] public virtual void Include_with_group_by_on_entity_navigation_with_inheritance() { using (var ctx = CreateContext()) @@ -6310,7 +6375,7 @@ public virtual Task Include_with_order_by_constant(bool isAsync) }); } - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'GroupBy(1, _Include(queryContext, [s], new [] {}, (queryContext, entity, included) => { ... }))'")] + [ConditionalFact(Skip = "Issue #17068")] public virtual void Include_groupby_constant() { using (var ctx = CreateContext()) @@ -6410,11 +6475,12 @@ public virtual void Include_groupby_constant_null_of_non_mapped_type() } } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'orderby null desc'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] - public virtual Task Correlated_collection_order_by_constant_null_of_non_mapped_type(bool isAsync) + public virtual async Task Correlated_collection_order_by_constant_null_of_non_mapped_type(bool isAsync) { - return AssertQuery( + var message = (await Assert.ThrowsAsync( + () => AssertQuery( isAsync, gs => gs.OrderByDescending(s => (MyDTO)null).Select( g => new @@ -6427,10 +6493,14 @@ public virtual Task Correlated_collection_order_by_constant_null_of_non_mapped_t { Assert.Equal(e.Nickname, a.Nickname); CollectionAsserter()(e.Weapons, a.Weapons); - }); + }))).Message; + + Assert.Equal( + CoreStrings.TranslationFailed("(g) => null"), + RemoveNewLines(message)); } - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'GroupBy(new <>f__AnonymousType218`3(Rank = [o].Rank, One = 1, Nickname = [o].Nickname), _Include(queryContext, [o], new [] {}, (queryContext, entity, included) => { ... }))'")] + [ConditionalFact(Skip = "Issue #17068")] public virtual void GroupBy_composite_key_with_Include() { using (var ctx = CreateContext()) @@ -6624,7 +6694,7 @@ public virtual Task Select_subquery_boolean_empty_with_pushdown(bool isAsync) gs => gs.Select(g => (bool?)null)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'SingleOrDefault()'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] public virtual Task Select_subquery_distinct_singleordefault_boolean1(bool isAsync) { @@ -6635,7 +6705,7 @@ public virtual Task Select_subquery_distinct_singleordefault_boolean1(bool isAsy assertOrder: true); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'SingleOrDefault()'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] public virtual Task Select_subquery_distinct_singleordefault_boolean2(bool isAsync) { @@ -6646,7 +6716,7 @@ public virtual Task Select_subquery_distinct_singleordefault_boolean2(bool isAsy assertOrder: true); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'SingleOrDefault()'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] public virtual Task Select_subquery_distinct_singleordefault_boolean_with_pushdown(bool isAsync) { @@ -6657,7 +6727,7 @@ public virtual Task Select_subquery_distinct_singleordefault_boolean_with_pushdo assertOrder: true); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'SingleOrDefault()'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] public virtual Task Select_subquery_distinct_singleordefault_boolean_empty1(bool isAsync) { @@ -6667,7 +6737,7 @@ public virtual Task Select_subquery_distinct_singleordefault_boolean_empty1(bool g => g.Weapons.Where(w => w.Name == "BFG").Distinct().Select(w => w.IsAutomatic).SingleOrDefault())); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'SingleOrDefault()'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] public virtual Task Select_subquery_distinct_singleordefault_boolean_empty2(bool isAsync) { @@ -6677,7 +6747,7 @@ public virtual Task Select_subquery_distinct_singleordefault_boolean_empty2(bool g => g.Weapons.Where(w => w.Name == "BFG").Select(w => w.IsAutomatic).Distinct().SingleOrDefault())); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'SingleOrDefault()'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] public virtual Task Select_subquery_distinct_singleordefault_boolean_empty_with_pushdown(bool isAsync) { @@ -6990,7 +7060,7 @@ public virtual Task Group_by_entity_key_with_include_on_that_entity_with_key_in_ }); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy([g].Rank, _Include(queryContext, [g], new [] {[g.CityOfBirth]}, (queryContext, entity, included) => { ... }))'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task Group_by_with_include_with_entity_in_result_selector(bool isAsync) { @@ -7019,7 +7089,7 @@ public virtual Task Group_by_with_include_with_entity_in_result_selector(bool is }); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy([g].Rank, _Include(queryContext, [g], new [] {[g.CityOfBirth]}, (queryContext, entity, included) => { ... }))' could not be translated and will be evaluated locally.'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task Include_with_group_by_and_FirstOrDefault_gets_properly_applied(bool isAsync) { @@ -7131,15 +7201,20 @@ public virtual Task GetValueOrDefault_in_filter_non_nullable_column(bool isAsync ws => ws.Where(w => ((int?)w.Id).GetValueOrDefault() == 0)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'where (Convert([m].Timeline, Nullable`1).GetValueOrDefault() == __defaultValue_0)'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] - public virtual Task GetValueOrDefault_on_DateTimeOffset(bool isAsync) + public virtual async Task GetValueOrDefault_on_DateTimeOffset(bool isAsync) { var defaultValue = default(DateTimeOffset); - return AssertQuery( + var message = (await Assert.ThrowsAsync( + () => AssertQuery( isAsync, - ms => ms.Where(m => ((DateTimeOffset?)m.Timeline).GetValueOrDefault() == defaultValue)); + ms => ms.Where(m => ((DateTimeOffset?)m.Timeline).GetValueOrDefault() == defaultValue)))).Message; + + Assert.Equal( + CoreStrings.TranslationFailed("(m) => (Nullable)m.Timeline.GetValueOrDefault() == (Unhandled parameter: __defaultValue_0)"), + RemoveNewLines(message)); } [ConditionalTheory] @@ -7300,7 +7375,7 @@ public virtual void OfTypeNav3() } } - [ConditionalFact(Skip = "Issue#14935")] + [ConditionalFact(Skip = "Issue #17234")] public virtual void Nav_rewrite_Distinct_with_convert() { using (var ctx = CreateContext()) @@ -7311,7 +7386,7 @@ public virtual void Nav_rewrite_Distinct_with_convert() } } - [ConditionalFact(Skip = "Issue#14935")] + [ConditionalFact(Skip = "Issue #17234")] public virtual void Nav_rewrite_Distinct_with_convert_anonymous() { using (var ctx = CreateContext()) diff --git a/test/EFCore.Specification.Tests/Query/GroupByQueryTestBase.cs b/test/EFCore.Specification.Tests/Query/GroupByQueryTestBase.cs index 8b4eb6d6d2c..f186483b115 100644 --- a/test/EFCore.Specification.Tests/Query/GroupByQueryTestBase.cs +++ b/test/EFCore.Specification.Tests/Query/GroupByQueryTestBase.cs @@ -1862,7 +1862,7 @@ public virtual Task GroupBy_aggregate_Pushdown_followed_by_projecting_constant(b .Select(e => 5)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy([o].CustomerID, [o])'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task GroupBy_Select_sum_over_unmapped_property(bool isAsync) { @@ -2152,7 +2152,7 @@ public virtual Task Distinct_GroupBy_OrderBy_key(bool isAsync) assertOrder: true); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy([o].OrderID, [o])'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task Select_nested_collection_with_groupby(bool isAsync) { @@ -2165,7 +2165,7 @@ public virtual Task Select_nested_collection_with_groupby(bool isAsync) : Array.Empty())); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy([o].CustomerID, new ProjectedType() {Order = [o].OrderID, Customer = [o].CustomerID})'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task Select_GroupBy_All(bool isAsync) { @@ -2199,7 +2199,7 @@ public override bool Equals(object obj) public override int GetHashCode() => Order.GetHashCode(); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy(new <>f__AnonymousType25`1(CustomerID = [o].CustomerID), [o])'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task GroupBy_Where_in_aggregate(bool isAsync) { @@ -2264,7 +2264,7 @@ public virtual Task GroupBy_composite_Key_as_part_of_element_selector(bool isAsy #region GroupByWithoutAggregate - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy([c].City, new <>f__AnonymousType270`2(City = [c].City, CustomerID = [c].CustomerID))'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task GroupBy_anonymous(bool isAsync) { @@ -2280,7 +2280,7 @@ public virtual Task GroupBy_anonymous(bool isAsync) elementAsserter: GroupingAsserter(d => d.CustomerID)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy([c].City, new <>f__AnonymousType270`2(City = [c].City, CustomerID = [c].CustomerID))'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task GroupBy_anonymous_with_where(bool isAsync) { @@ -2316,7 +2316,7 @@ public virtual Task GroupBy_anonymous_subquery(bool isAsync) assertOrder: true); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy([c].Country, new <>f__AnonymousType271`2(Country = [c].Country, CustomerID = [c].CustomerID))'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task GroupBy_nested_order_by_enumerable(bool isAsync) { @@ -2335,7 +2335,7 @@ public virtual Task GroupBy_nested_order_by_enumerable(bool isAsync) assertOrder: true); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'DefaultIfEmpty()'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task GroupBy_join_default_if_empty_anonymous(bool isAsync) { @@ -2358,7 +2358,7 @@ from orderDetail in orderJoin.DefaultIfEmpty() elementAsserter: GroupingAsserter(d => d.ProductID)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy([c].City, [c])'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task GroupBy_SelectMany(bool isAsync) { @@ -2368,7 +2368,7 @@ public virtual Task GroupBy_SelectMany(bool isAsync) entryCount: 91); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy([o].CustomerID, [o])'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task GroupBy_simple(bool isAsync) { @@ -2380,7 +2380,7 @@ public virtual Task GroupBy_simple(bool isAsync) entryCount: 830); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy([o].CustomerID, [o])'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task GroupBy_simple2(bool isAsync) { @@ -2392,7 +2392,7 @@ public virtual Task GroupBy_simple2(bool isAsync) entryCount: 830); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy([o].CustomerID, [o])'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task GroupBy_first(bool isAsync) { @@ -2403,7 +2403,7 @@ public virtual Task GroupBy_first(bool isAsync) entryCount: 6); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy([o].CustomerID, [o].OrderID)'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task GroupBy_with_element_selector(bool isAsync) { @@ -2416,7 +2416,7 @@ public virtual Task GroupBy_with_element_selector(bool isAsync) elementAsserter: CollectionAsserter()); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy([o].CustomerID, [o])'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task GroupBy_with_element_selector2(bool isAsync) { @@ -2429,7 +2429,7 @@ public virtual Task GroupBy_with_element_selector2(bool isAsync) elementAsserter: CollectionAsserter()); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy([e].EmployeeID, [e])'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task GroupBy_with_element_selector3(bool isAsync) { @@ -2447,7 +2447,7 @@ public virtual Task GroupBy_with_element_selector3(bool isAsync) assertOrder: true); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy(Convert([o].OrderDate, DateTime).Month, [o])'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task GroupBy_DateTimeOffset_Property(bool isAsync) { @@ -2459,7 +2459,7 @@ public virtual Task GroupBy_DateTimeOffset_Property(bool isAsync) entryCount: 830); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy([o].CustomerID, [o])'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task OrderBy_GroupBy_SelectMany(bool isAsync) { @@ -2472,7 +2472,7 @@ public virtual Task OrderBy_GroupBy_SelectMany(bool isAsync) entryCount: 830); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy([e].EmployeeID, [e])'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task OrderBy_GroupBy_SelectMany_shadow(bool isAsync) { @@ -2485,7 +2485,7 @@ public virtual Task OrderBy_GroupBy_SelectMany_shadow(bool isAsync) .Select(g => EF.Property(g, "Title"))); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy([o].CustomerID, [o])'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task GroupBy_with_orderby(bool isAsync) { @@ -2497,7 +2497,7 @@ public virtual Task GroupBy_with_orderby(bool isAsync) entryCount: 830); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy([o].CustomerID, [o])'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task GroupBy_with_orderby_and_anonymous_projection(bool isAsync) { @@ -2520,7 +2520,7 @@ public virtual Task GroupBy_with_orderby_and_anonymous_projection(bool isAsync) entryCount: 830); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy([o].CustomerID, [o])'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task GroupBy_with_orderby_take_skip_distinct(bool isAsync) { @@ -2558,7 +2558,7 @@ public virtual Task GroupBy_with_orderby_take_skip_distinct_followed_by_order_by entryCount: 31); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'from OrderDetail orderDetail in [orderJoin]'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task GroupBy_join_anonymous(bool isAsync) { @@ -2581,7 +2581,7 @@ from orderDetail in orderJoin elementAsserter: GroupingAsserter(d => d.ProductID)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy([o].CustomerID, [o])'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task GroupBy_Distinct(bool isAsync) { @@ -2592,7 +2592,7 @@ public virtual Task GroupBy_Distinct(bool isAsync) os.GroupBy(o => o.CustomerID).Distinct().Select(g => g.Key)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy([o].CustomerID, [o])'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task OrderBy_Skip_GroupBy(bool isAsync) { @@ -2604,7 +2604,7 @@ public virtual Task OrderBy_Skip_GroupBy(bool isAsync) entryCount: 30); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy([o].CustomerID, [o])'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task OrderBy_Take_GroupBy(bool isAsync) { @@ -2616,7 +2616,7 @@ public virtual Task OrderBy_Take_GroupBy(bool isAsync) entryCount: 50); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy([o].CustomerID, [o])'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task OrderBy_Skip_Take_GroupBy(bool isAsync) { @@ -2628,7 +2628,7 @@ public virtual Task OrderBy_Skip_Take_GroupBy(bool isAsync) entryCount: 50); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy([o].CustomerID, new <>f__AnonymousType236`2(CustomerID = [o].CustomerID, EmployeeID = [o].EmployeeID))'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task Select_Distinct_GroupBy(bool isAsync) { @@ -2644,7 +2644,7 @@ public virtual Task Select_Distinct_GroupBy(bool isAsync) elementAsserter: GroupingAsserter(d => d.EmployeeID)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy([c].EmployeeID, [c])'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task GroupBy_with_aggregate_through_navigation_property(bool isAsync) { @@ -2658,7 +2658,7 @@ public virtual Task GroupBy_with_aggregate_through_navigation_property(bool isAs elementSorter: e => e.max); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy(new <>f__AnonymousType19`2(CustomerID = [o].CustomerID, OrderDate = [o].OrderDate), [o])'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task GroupBy_anonymous_key_without_aggregate(bool isAsync) { @@ -2683,7 +2683,7 @@ public virtual Task GroupBy_anonymous_key_without_aggregate(bool isAsync) #region GroupBySelectFirst - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy(Property([e], \"Title\"), [e])'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task GroupBy_Shadow(bool isAsync) { @@ -2697,7 +2697,7 @@ public virtual Task GroupBy_Shadow(bool isAsync) .Select(g => EF.Property(g.First(), "Title"))); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy(Property([e], \"Title\"), [e])'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task GroupBy_Shadow2(bool isAsync) { @@ -2711,7 +2711,7 @@ public virtual Task GroupBy_Shadow2(bool isAsync) .Select(g => g.First())); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy([e].EmployeeID, [e])'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task GroupBy_Shadow3(bool isAsync) { @@ -2723,7 +2723,7 @@ public virtual Task GroupBy_Shadow3(bool isAsync) .Select(g => EF.Property(g.First(), "Title"))); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy([c].City, [c])'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task GroupBy_Select_First_GroupBy(bool isAsync) { @@ -2757,7 +2757,7 @@ public virtual Task GroupBy_Select_First_GroupBy_followed_by_identity_projection #region GroupByEntityType - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy([o].CustomerID, new ProjectedType() {Order = [o].OrderID, Customer = [o].CustomerID})'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task Select_GroupBy(bool isAsync) { @@ -2773,7 +2773,7 @@ public virtual Task Select_GroupBy(bool isAsync) elementSorter: g => g.Key + " " + g.Count()); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy([o].OrderID, new ProjectedType() {Order = [o].OrderID, Customer = [o].CustomerID})'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task Select_GroupBy_SelectMany(bool isAsync) { @@ -2790,7 +2790,7 @@ public virtual Task Select_GroupBy_SelectMany(bool isAsync) elementSorter: g => g.Order); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy([c], [o])'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task Join_GroupBy_entity_ToList(bool isAsync) { @@ -2811,7 +2811,7 @@ group o by c into grp #region DoubleGroupBy - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy(new <>f__AnonymousType22`2(OrderID = [o].OrderID, OrderDate = [o].OrderDate), [o])'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task Double_GroupBy_with_aggregate(bool isAsync) { @@ -2846,7 +2846,7 @@ public virtual Task Count_after_GroupBy_aggregate(bool isAsync) os => os.GroupBy(o => o.CustomerID).Select(g => g.Sum(gg => gg.OrderID)).CountAsync()); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy(new <>f__AnonymousType25`1(CustomerID = [o].CustomerID), [o])'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task LongCount_after_client_GroupBy(bool isAsync) { diff --git a/test/EFCore.Specification.Tests/Query/IncludeAsyncTestBase.cs b/test/EFCore.Specification.Tests/Query/IncludeAsyncTestBase.cs index b702fa531e8..134662acf0c 100644 --- a/test/EFCore.Specification.Tests/Query/IncludeAsyncTestBase.cs +++ b/test/EFCore.Specification.Tests/Query/IncludeAsyncTestBase.cs @@ -1,12 +1,13 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +using System; using System.Linq; using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore.Diagnostics; using Microsoft.EntityFrameworkCore.Internal; using Microsoft.EntityFrameworkCore.TestModels.Northwind; using Microsoft.EntityFrameworkCore.TestUtilities; -using Microsoft.EntityFrameworkCore.TestUtilities.Xunit; using Xunit; // ReSharper disable InconsistentNaming @@ -296,7 +297,7 @@ orderby c.City } } - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'Distinct()'")] + [ConditionalFact(Skip = "Issue #17068")] public virtual async Task Include_collection_on_group_join_clause_with_filter() { using (var context = CreateContext()) @@ -343,7 +344,7 @@ on c.CustomerID equals o.CustomerID into g } } - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'GroupBy([c].City, Result(_IncludeAsync(queryContext, [c], new [] {}, (queryContext, entity, included, ct) => { ... }, ct))))'")] + [ConditionalFact(Skip = "Issue #17068")] public virtual async Task Include_collection_when_groupby() { using (var context = CreateContext()) @@ -708,23 +709,18 @@ var order } } - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'where [c].IsLondon'")] + [ConditionalFact] public virtual async Task Include_collection_with_client_filter() { using (var context = CreateContext()) { - var customers - = await context.Set() - .Include(c => c.Orders) - .Where(c => c.IsLondon) - .ToListAsync(); - - Assert.Equal(6, customers.Count); - Assert.Equal(46, customers.SelectMany(c => c.Orders).Count()); - Assert.True(customers.SelectMany(c => c.Orders).All(o => o.Customer != null)); - Assert.Equal(13, customers.First().Orders.Count); // AROUT - Assert.Equal(9, customers.Last().Orders.Count); // SEVES - Assert.Equal(6 + 46, context.ChangeTracker.Entries().Count()); + Assert.Equal( + CoreStrings.TranslationFailed("(c) => c.IsLondon"), + (await Assert.ThrowsAsync( + () => context.Set() + .Include(c => c.Orders) + .Where(c => c.IsLondon) + .ToListAsync())).Message); } } diff --git a/test/EFCore.Specification.Tests/Query/IncludeTestBase.cs b/test/EFCore.Specification.Tests/Query/IncludeTestBase.cs index 4fea65ad523..ba1f0ff95e4 100644 --- a/test/EFCore.Specification.Tests/Query/IncludeTestBase.cs +++ b/test/EFCore.Specification.Tests/Query/IncludeTestBase.cs @@ -981,7 +981,7 @@ orderby c.City } } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'Distinct()'")] + [ConditionalTheory(Skip = "Issue #17068")] [InlineData(false)] [InlineData(true)] public virtual void Include_collection_on_group_join_clause_with_filter(bool useString) @@ -1026,7 +1026,7 @@ join o in context.Set() on c.CustomerID equals o.CustomerID into g } } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'join Customer o.Customer in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.Northwind.Customer]) on Property([o], \"CustomerID\") equals Property([o.Customer], \"CustomerID\")'")] + [ConditionalTheory(Skip = "Issue #17068")] [InlineData(false)] [InlineData(true)] public virtual void Include_collection_on_inner_group_join_clause_with_filter(bool useString) @@ -1074,7 +1074,7 @@ on c.CustomerID equals o.CustomerID into g } } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy([c].City, _Include(queryContext, [c], new [] {}, (queryContext, entity, included) => { ... }))'")] + [ConditionalTheory(Skip = "Issue #17068")] [InlineData(false)] [InlineData(true)] public virtual void Include_collection_when_groupby(bool useString) @@ -1108,7 +1108,7 @@ var customers } } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy([c].City, _Include(queryContext, [c], new [] {}, (queryContext, entity, included) => { ... }))'")] + [ConditionalTheory(Skip = "Issue #17068")] [InlineData(false)] [InlineData(true)] public virtual void Include_collection_when_groupby_subquery(bool useString) @@ -1989,40 +1989,25 @@ from o2 in context.Set() } } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'where [c].IsLondon'")] + [ConditionalTheory] [InlineData(false)] [InlineData(true)] public virtual void Include_collection_with_client_filter(bool useString) { using (var context = CreateContext()) { - var customers - = useString - ? context.Set() - .Include("Orders") - .Where(c => c.IsLondon) - .ToList() - : context.Set() - .Include(c => c.Orders) - .Where(c => c.IsLondon) - .ToList(); - - Assert.Equal(6, customers.Count); - Assert.Equal(46, customers.SelectMany(c => c.Orders).Count()); - Assert.True(customers.SelectMany(c => c.Orders).All(o => o.Customer != null)); - Assert.Equal(13, customers.First().Orders.Count); // AROUT - Assert.Equal(9, customers.Last().Orders.Count); // SEVES - Assert.Equal(6 + 46, context.ChangeTracker.Entries().Count()); - - foreach (var customer in customers) - { - CheckIsLoaded( - context, - customer, - ordersLoaded: true, - orderDetailsLoaded: false, - productLoaded: false); - } + Assert.Equal( + CoreStrings.TranslationFailed("(c) => c.IsLondon"), + Assert.Throws( + () => useString + ? context.Set() + .Include("Orders") + .Where(c => c.IsLondon) + .ToList() + : context.Set() + .Include(c => c.Orders) + .Where(c => c.IsLondon) + .ToList()).Message); } } @@ -3275,7 +3260,7 @@ public virtual void Include_specified_on_non_entity_not_supported(bool useString } } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy([o].OrderID, _Include(queryContext, [o], new [] {}, (queryContext, entity, included) => { ... }))'")] + [ConditionalTheory(Skip = "Issue #17068")] [InlineData(false)] [InlineData(true)] public virtual void Include_collection_GroupBy_Select(bool useString) @@ -3310,7 +3295,7 @@ var orders } } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy([o].OrderID, _Include(queryContext, [o], new [] {[o.Customer]}, (queryContext, entity, included) => { ... }))'")] + [ConditionalTheory(Skip = "Issue #17068")] [InlineData(false)] [InlineData(true)] public virtual void Include_reference_GroupBy_Select(bool useString) @@ -3345,7 +3330,7 @@ var orders } } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy([o].OrderID, _Include(queryContext, [o], new [] {}, (queryContext, entity, included) => { ... }))'")] + [ConditionalTheory(Skip = "Issue #17068")] [InlineData(false)] [InlineData(true)] public virtual void Include_collection_Join_GroupBy_Select(bool useString) @@ -3390,7 +3375,7 @@ var orders } } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy([o].OrderID, _Include(queryContext, [o], new [] {[o.Customer]}, (queryContext, entity, included) => { ... }))'")] + [ConditionalTheory(Skip = "Issue #17068")] [InlineData(false)] [InlineData(true)] public virtual void Include_reference_Join_GroupBy_Select(bool useString) @@ -3435,7 +3420,7 @@ var orders } } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy([o].OrderID, _Include(queryContext, [o], new [] {}, (queryContext, entity, included) => { ... }))'")] + [ConditionalTheory(Skip = "Issue #17068")] [InlineData(false)] [InlineData(true)] public virtual void Join_Include_collection_GroupBy_Select(bool useString) @@ -3478,7 +3463,7 @@ var orders } } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy([o].OrderID, _Include(queryContext, [o], new [] {[o.Customer]}, (queryContext, entity, included) => { ... }))'")] + [ConditionalTheory(Skip = "Issue #17068")] [InlineData(false)] [InlineData(true)] public virtual void Join_Include_reference_GroupBy_Select(bool useString) @@ -3519,7 +3504,7 @@ var orders } } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'Distinct()'")] + [ConditionalTheory(Skip = "Issue #17068")] [InlineData(false)] [InlineData(true)] public virtual void Include_collection_GroupJoin_GroupBy_Select(bool useString) @@ -3564,7 +3549,7 @@ var orders } } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy([o].OrderID, _Include(queryContext, [o], new [] {[o.Customer]}, (queryContext, entity, included) => { ... }))'")] + [ConditionalTheory(Skip = "Issue #17068")] [InlineData(false)] [InlineData(true)] public virtual void Include_reference_GroupJoin_GroupBy_Select(bool useString) @@ -3609,7 +3594,7 @@ var orders } } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'orderby [o1].OrderID asc'")] + [ConditionalTheory(Skip = "Issue #17068")] [InlineData(false)] [InlineData(true)] public virtual void GroupJoin_Include_collection_GroupBy_Select(bool useString) @@ -3652,7 +3637,7 @@ var orders } } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'orderby [o1].OrderID asc'")] + [ConditionalTheory(Skip = "Issue #17068")] [InlineData(false)] [InlineData(true)] public virtual void GroupJoin_Include_reference_GroupBy_Select(bool useString) @@ -3695,7 +3680,7 @@ var orders } } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy([o].OrderID, _Include(queryContext, [o], new [] {}, (queryContext, entity, included) => { ... }))'")] + [ConditionalTheory(Skip = "Issue #17068")] [InlineData(false)] [InlineData(true)] public virtual void Include_collection_SelectMany_GroupBy_Select(bool useString) @@ -3730,7 +3715,7 @@ from od in context.OrderDetails } } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy([o].OrderID, _Include(queryContext, [o], new [] {[o.Customer]}, (queryContext, entity, included) => { ... }))'")] + [ConditionalTheory(Skip = "Issue #17068")] [InlineData(false)] [InlineData(true)] public virtual void Include_reference_SelectMany_GroupBy_Select(bool useString) @@ -3765,7 +3750,7 @@ from od in context.OrderDetails } } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy([o].OrderID, _Include(queryContext, [o], new [] {}, (queryContext, entity, included) => { ... }))'")] + [ConditionalTheory(Skip = "Issue #17068")] [InlineData(false)] [InlineData(true)] public virtual void SelectMany_Include_collection_GroupBy_Select(bool useString) @@ -3800,7 +3785,7 @@ from o in context.Orders.Include(o => o.OrderDetails) } } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy([o].OrderID, _Include(queryContext, [o], new [] {[o.Customer]}, (queryContext, entity, included) => { ... }))'")] + [ConditionalTheory(Skip = "Issue #17068")] [InlineData(false)] [InlineData(true)] public virtual void SelectMany_Include_reference_GroupBy_Select(bool useString) @@ -4146,7 +4131,7 @@ public virtual async Task Include_with_double_group_by(bool useString, bool asyn } } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy(new <>f__AnonymousType22`2(OrderID = [e].OrderID, OrderDate = [e].OrderDate), [e])'")] + [ConditionalTheory(Skip = "Issue #17068")] [InlineData(false, false)] [InlineData(true, false)] // async blocked by issue #11917 @@ -4173,7 +4158,7 @@ public virtual async Task Include_with_double_group_by_no_tracking(bool useStrin } } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy(new <>f__AnonymousType22`2(OrderID = [e].OrderID, OrderDate = [e].OrderDate), [e])'")] + [ConditionalTheory(Skip = "Issue #17068")] [InlineData(false, false)] [InlineData(true, false)] // async blocked by issue #11917 diff --git a/test/EFCore.Specification.Tests/Query/OwnedQueryTestBase.cs b/test/EFCore.Specification.Tests/Query/OwnedQueryTestBase.cs index d95f64b744f..5fec0864d03 100644 --- a/test/EFCore.Specification.Tests/Query/OwnedQueryTestBase.cs +++ b/test/EFCore.Specification.Tests/Query/OwnedQueryTestBase.cs @@ -125,7 +125,7 @@ public virtual void Query_for_leaf_type_loads_all_owned_navs() } } - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'GroupBy([op].Id, _Include(queryContext, [op], new [] {[op.PersonAddress], [op.PersonAddress.Country], [op.BranchAddress], [op.BranchAddress.Country], [op.LeafAAddress], [op.LeafAAddress.Country], [op.LeafBAddress], [op.LeafBAddress.Country]}, (queryContext, entity, included) => { ... }))'")] + [ConditionalFact(Skip = "Issue #17068")] public virtual void Query_when_group_by() { using (var context = CreateContext()) diff --git a/test/EFCore.Specification.Tests/Query/QueryNavigationsTestBase.cs b/test/EFCore.Specification.Tests/Query/QueryNavigationsTestBase.cs index 51fbefdcb4d..e19dedff3ce 100644 --- a/test/EFCore.Specification.Tests/Query/QueryNavigationsTestBase.cs +++ b/test/EFCore.Specification.Tests/Query/QueryNavigationsTestBase.cs @@ -5,6 +5,7 @@ using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore.Diagnostics; using Microsoft.EntityFrameworkCore.TestModels.Northwind; using Microsoft.EntityFrameworkCore.TestUtilities; using Microsoft.EntityFrameworkCore.TestUtilities.Xunit; @@ -40,20 +41,25 @@ protected virtual void ClearLog() { } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'oin Order o in {from Order o in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.Northwind.Order]) join Customer o.Customer in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.Northwind.Customer]) on Property([o], \"CustomerID\") equals Property([o.Customer], \"CustomerID\") into IEnumerable`1 o.Customer_group from Customer o.Customer in {[o.Customer_group] => DefaultIfEmpty()} select ClientProjection([o], [o.Customer])} on [c].CustomerID equals [o]?.CustomerID'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] - public virtual Task Join_with_nav_projected_in_subquery_when_client_eval(bool isAsync) + public virtual async Task Join_with_nav_projected_in_subquery_when_client_eval(bool isAsync) { - return AssertQuery( - isAsync, - (cs, os, ods) => (from c in cs - join o in os.Select(o => ClientProjection(o, o.Customer)) on c.CustomerID equals o.CustomerID - join od in ods.Select(od => ClientProjection(od, od.Product)) on o.OrderID equals od.OrderID - select c), - entryCount: 89); + Assert.Equal( + CoreStrings.TranslationFailed( + "(c) => c.CustomerID; (o) => ClientProjection( t: o.Outer, _: o.Inner).CustomerID; (c, o) => new TransparentIdentifier>( Outer = c, Inner = o)"), + RemoveNewLines( + (await Assert.ThrowsAsync( + () => AssertQuery( + isAsync, + (cs, os, ods) => (from c in cs + join o in os.Select(o => ClientProjection(o, o.Customer)) on c.CustomerID equals o.CustomerID + join od in ods.Select(od => ClientProjection(od, od.Product)) on o.OrderID equals od.OrderID + select c), + entryCount: 89))).Message)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'join Order o in {from Order o in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.Northwind.Order]) join Customer o.Customer in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.Northwind.Customer]) on Property([o], \"CustomerID\") equals Property([o.Customer], \"CustomerID\") into IEnumerable`1 o.Customer_group from Customer o.Customer in {[o.Customer_group] => DefaultIfEmpty()} select ClientProjection([o], [o.Customer])} on [c].CustomerID equals [o]?.CustomerID'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task GroupJoin_with_nav_projected_in_subquery_when_client_eval(bool isAsync) { @@ -70,20 +76,24 @@ from od in grouping2 entryCount: 89); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'where ClientPredicate([o], [o.Customer])'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] - public virtual Task Join_with_nav_in_predicate_in_subquery_when_client_eval(bool isAsync) + public virtual async Task Join_with_nav_in_predicate_in_subquery_when_client_eval(bool isAsync) { - return AssertQuery( - isAsync, - (cs, os, ods) => (from c in cs - join o in os.Where(o => ClientPredicate(o, o.Customer)) on c.CustomerID equals o.CustomerID - join od in ods.Where(od => ClientPredicate(od, od.Product)) on o.OrderID equals od.OrderID - select c), - entryCount: 89); + Assert.Equal( + CoreStrings.TranslationFailed("(o) => ClientPredicate( t: o.Outer, _: o.Inner)"), + RemoveNewLines( + (await Assert.ThrowsAsync( + () => AssertQuery( + isAsync, + (cs, os, ods) => (from c in cs + join o in os.Where(o => ClientPredicate(o, o.Customer)) on c.CustomerID equals o.CustomerID + join od in ods.Where(od => ClientPredicate(od, od.Product)) on o.OrderID equals od.OrderID + select c), + entryCount: 89))).Message)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'where ClientPredicate([o], [o.Customer])'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task GroupJoin_with_nav_in_predicate_in_subquery_when_client_eval(bool isAsync) { @@ -98,20 +108,26 @@ from od in grouping2 entryCount: 89); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'orderby ClientOrderBy([o], [o.Customer]) asc'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] - public virtual Task Join_with_nav_in_orderby_in_subquery_when_client_eval(bool isAsync) + public virtual async Task Join_with_nav_in_orderby_in_subquery_when_client_eval(bool isAsync) { - return AssertQuery( - isAsync, - (cs, os, ods) => (from c in cs - join o in os.OrderBy(o => ClientOrderBy(o, o.Customer)) on c.CustomerID equals o.CustomerID - join od in ods.OrderBy(od => ClientOrderBy(od, od.Product)) on o.OrderID equals od.OrderID - select c), - entryCount: 89); + Assert.Equal( + CoreStrings.TranslationFailed("(o) => ClientOrderBy( t: o.Outer, _: o.Inner)"), + RemoveNewLines((await Assert.ThrowsAsync( + () => AssertQuery( + isAsync, + (cs, os, ods) => (from c in cs + join o in os.OrderBy(o => ClientOrderBy(o, o.Customer)) on c.CustomerID equals o.CustomerID + join od in ods.OrderBy(od => ClientOrderBy(od, od.Product)) on o.OrderID equals od.OrderID + select c), + entryCount: 89))).Message)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'orderby ClientOrderBy([o], [o.Customer]) asc'")] + private string RemoveNewLines(string message) + => message.Replace("\n", "").Replace("\r", ""); + + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task GroupJoin_with_nav_in_orderby_in_subquery_when_client_eval(bool isAsync) { @@ -180,8 +196,7 @@ from o2 in os.Where(o => o.OrderID < 10400) where o1.Customer.City == o2.Customer.City select new { - o1, - o2 + o1, o2 }, elementSorter: e => e.o1.OrderID + " " + e.o2.OrderID, elementAsserter: (e, a) => Assert.Equal(e.o1.OrderID, a.o1.OrderID), @@ -205,16 +220,21 @@ from o2 in os.Where(o => o.OrderID < 10400) elementSorter: e => e.CustomerID + " " + e.C2); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'where (?[o.Customer] | (?[o.Customer] | ([o.Customer]?.IsLondon == True)? == True)? == True)'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] - public virtual Task Select_Where_Navigation_Client(bool isAsync) + public virtual async Task Select_Where_Navigation_Client(bool isAsync) { - return AssertQuery( - isAsync, - os => from o in os - where o.Customer.IsLondon - select o, - entryCount: 46); + Assert.Equal( + CoreStrings.TranslationFailed( + "(o) => o.Inner.IsLondon"), + RemoveNewLines( + (await Assert.ThrowsAsync( + () => AssertQuery( + isAsync, + os => from o in os + where o.Customer.IsLondon + select o, + entryCount: 46))).Message)); } [ConditionalTheory] @@ -713,25 +733,28 @@ public virtual Task Collection_select_nav_prop_all(bool isAsync) elementSorter: e => e.All); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'All(([o].ShipCity == \"London\"))'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] - public virtual Task Collection_select_nav_prop_all_client(bool isAsync) - { - return AssertQuery( - isAsync, - cs => from c in cs - orderby c.CustomerID - select new - { - All = c.Orders.All(o => o.ShipCity == "London") - }, - cs => from c in cs - orderby c.CustomerID - select new - { - All = (c.Orders ?? new List()).All(o => false) - }, - assertOrder: true); + public virtual async Task Collection_select_nav_prop_all_client(bool isAsync) + { + Assert.Equal( + CoreStrings.TranslationFailed("(o0) => o0.ShipCity == \"London\""), + (await Assert.ThrowsAsync( + () => AssertQuery( + isAsync, + cs => from c in cs + orderby c.CustomerID + select new + { + All = c.Orders.All(o => o.ShipCity == "London") + }, + cs => from c in cs + orderby c.CustomerID + select new + { + All = (c.Orders ?? new List()).All(o => false) + }, + assertOrder: true))).Message); } [ConditionalTheory] @@ -749,18 +772,20 @@ where c.Orders.All(o => o.CustomerID == "ALFKI") entryCount: 3); } - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'where {from Order o in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.Northwind.Order]) where ?= (Property([c], \"CustomerID\") == Property([o], \"CustomerID\")) =? select [o] => All(([o].ShipCity == \"London\"))}'")] + [ConditionalFact] public virtual void Collection_where_nav_prop_all_client() { using (var context = CreateContext()) { - var customers - = (from c in context.Set() - orderby c.CustomerID - where c.Orders.All(o => o.ShipCity == "London") - select c).ToList(); - - Assert.Equal(2, customers.Count); + Assert.Equal( + CoreStrings.TranslationFailed( + "(o) => o.ShipCity == \"London\""), + RemoveNewLines( + Assert.Throws( + () => (from c in context.Set() + orderby c.CustomerID + where c.Orders.All(o => o.ShipCity == "London") + select c).ToList()).Message)); } } @@ -996,7 +1021,7 @@ public virtual Task Collection_select_nav_prop_first_or_default_then_nav_prop_ne .Select(c => os.FirstOrDefault(o => o.CustomerID == "ALFKI").Customer.City)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'SingleOrDefault()'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] public virtual Task Collection_select_nav_prop_single_or_default_then_nav_prop_nested(bool isAsync) { @@ -1113,19 +1138,24 @@ where p.OrderDetails.Contains(ods.OrderByDescending(o => o.OrderID).ThenBy(o => entryCount: 1); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'orderby ClientMethod([o].OrderID) desc'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] - public virtual Task Where_subquery_on_navigation_client_eval(bool isAsync) + public virtual async Task Where_subquery_on_navigation_client_eval(bool isAsync) { - return AssertQuery( - isAsync, - (cs, os) => from c in cs - orderby c.CustomerID - where c.Orders.Select(o => o.OrderID) - .Contains( - os.OrderByDescending(o => ClientMethod(o.OrderID)).Select(o => o.OrderID).FirstOrDefault()) - select c, - entryCount: 1); + Assert.Equal( + CoreStrings.TranslationFailed( + "(o) => ClientMethod(o.OrderID)"), + RemoveNewLines( + (await Assert.ThrowsAsync( + () => AssertQuery( + isAsync, + (cs, os) => from c in cs + orderby c.CustomerID + where c.Orders.Select(o => o.OrderID) + .Contains( + os.OrderByDescending(o => ClientMethod(o.OrderID)).Select(o => o.OrderID).FirstOrDefault()) + select c, + entryCount: 1))).Message)); } // ReSharper disable once MemberCanBeMadeStatic.Local @@ -1169,7 +1199,7 @@ public virtual void Navigation_in_subquery_referencing_outer_query_with_client_s } } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy([o.Customer]?.City, [o])'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task GroupBy_on_nav_prop(bool isAsync) { @@ -1184,7 +1214,7 @@ into og entryCount: 830); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval ''")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task Where_nav_prop_group_by(bool isAsync) { @@ -1204,7 +1234,7 @@ public virtual Task Where_nav_prop_group_by(bool isAsync) entryCount: 12); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy([od.Order].CustomerID, [od])'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task Let_group_by_nav_prop(bool isAsync) { @@ -1242,24 +1272,27 @@ public virtual Task Select_anonymous_type_order_by_field_group_by_same_field(boo [ConditionalTheory(Skip = "issue #6061")] [MemberData(nameof(IsAsyncData))] - public virtual Task Project_first_or_default_on_empty_collection_of_value_types_returns_proper_default(bool isAsync) - { - return AssertQuery( - isAsync, - cs => from c in cs - where c.CustomerID.Equals("FISSA") - select new - { - c.CustomerID, - OrderId = c.Orders.OrderBy(o => o.OrderID).Select(o => o.OrderID).FirstOrDefault() - }, - cs => from c in cs - select new - { - c.CustomerID, - OrderId = c.Orders.OrderBy(o => o.OrderID).Select(o => o.OrderID).FirstOrDefault() - }, - elementSorter: e => e.CustomerID); + public virtual async Task Project_first_or_default_on_empty_collection_of_value_types_returns_proper_default(bool isAsync) + { + Assert.Equal( + CoreStrings.TranslationFailed( + "(o) => ClientMethod(o.OrderID)"), + RemoveNewLines( + (await Assert.ThrowsAsync( + () => AssertQuery( + isAsync, + cs => from c in cs + where c.CustomerID.Equals("FISSA") + select new + { + c.CustomerID, OrderId = c.Orders.OrderBy(o => o.OrderID).Select(o => o.OrderID).FirstOrDefault() + }, + cs => from c in cs + select new + { + c.CustomerID, OrderId = c.Orders.OrderBy(o => o.OrderID).Select(o => o.OrderID).FirstOrDefault() + }, + elementSorter: e => e.CustomerID))).Message)); } [ConditionalTheory] @@ -1369,7 +1402,7 @@ public virtual Task Navigation_with_collection_with_nullable_type_key(bool isAsy entryCount: 31); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'Count()'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task Client_groupjoin_with_orderby_key_descending(bool isAsync) { @@ -1505,7 +1538,7 @@ .CustomerID into grouping } } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'Count()'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task Group_join_doesnt_get_bound_directly_to_group_join_qsre(bool isAsync) { diff --git a/test/EFCore.Specification.Tests/Query/SimpleQueryTestBase.JoinGroupJoin.cs b/test/EFCore.Specification.Tests/Query/SimpleQueryTestBase.JoinGroupJoin.cs index 24755c9f014..8701b6dcb78 100644 --- a/test/EFCore.Specification.Tests/Query/SimpleQueryTestBase.JoinGroupJoin.cs +++ b/test/EFCore.Specification.Tests/Query/SimpleQueryTestBase.JoinGroupJoin.cs @@ -86,7 +86,7 @@ from e in es entryCount: 928); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'join Employee e2 in {from Employee e in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.Northwind.Employee]) orderby [e].EmployeeID asc select [e] => Take(__p_0)} on [e1].EmployeeID equals GetEmployeeID([e2])'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task Client_Join_select_many(bool isAsync) { @@ -296,7 +296,7 @@ join o in os.Where(o => o.OrderID < 10250) on true equals true select c.CustomerID); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'join Order o in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.Northwind.Order]) on new Foo() {Bar = [c].CustomerID} equals new Foo() {Bar = [o].CustomerID}'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task Join_client_new_expression(bool isAsync) { @@ -319,7 +319,7 @@ from c in cs e => e.c.CustomerID); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'join UInt32 id in __p_0 on [e].EmployeeID equals [id]'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual async Task Join_local_collection_int_closure_is_cached_correctly(bool isAsync) { @@ -342,7 +342,7 @@ join id in ids on e.EmployeeID equals id select e.EmployeeID); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'join Char id in __p_0 on [e].EmployeeID equals Convert([id], UInt32)'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual async Task Join_local_string_closure_is_cached_correctly(bool isAsync) { @@ -365,7 +365,7 @@ join id in ids on e.EmployeeID equals id select e.EmployeeID); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'join Byte id in __p_0 on [e].EmployeeID equals Convert([id], UInt32)'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual async Task Join_local_bytes_closure_is_cached_correctly(bool isAsync) { @@ -444,7 +444,7 @@ join o in os.OrderBy(o => o.OrderID) on c.CustomerID equals o.CustomerID into or entryCount: 91); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'Count()'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task GroupJoin_customers_orders_count(bool isAsync) { @@ -462,7 +462,7 @@ join o in os on c.CustomerID equals o.CustomerID into orders entryCount: 91); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'Count()'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task GroupJoin_customers_orders_count_preserves_ordering(bool isAsync) { @@ -954,7 +954,7 @@ from o in orders.DefaultIfEmpty() select o != null ? (object)o.OrderID : null); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'FirstOrDefault()'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task GroupJoin_with_different_outer_elements_with_same_key(bool isAsync) { @@ -973,7 +973,7 @@ public virtual Task GroupJoin_with_different_outer_elements_with_same_key(bool i e => e.OrderID + " " + e.Name); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'FirstOrDefault()'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task GroupJoin_with_different_outer_elements_with_same_key_with_predicate(bool isAsync) { @@ -992,7 +992,7 @@ public virtual Task GroupJoin_with_different_outer_elements_with_same_key_with_p e => e.OrderID + " " + e.Name); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'FirstOrDefault()'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task GroupJoin_with_different_outer_elements_with_same_key_projected_from_another_entity(bool isAsync) { @@ -1029,7 +1029,7 @@ from o in lo.Where(x => x.OrderID > 5) e => e.ContactName + " " + e.OrderID); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'where ([x].OrderID > 5)'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task GroupJoin_SelectMany_subquery_with_filter_orderby(bool isAsync) { @@ -1066,7 +1066,7 @@ from o in lo.Where(x => x.OrderID > 5).DefaultIfEmpty() entryCount: 830); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'where ([x].OrderID > 5)'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task GroupJoin_SelectMany_subquery_with_filter_orderby_and_DefaultIfEmpty(bool isAsync) { @@ -1085,7 +1085,7 @@ from o in lo.Where(x => x.OrderID > 5).OrderBy(x => x.OrderDate).DefaultIfEmpty( entryCount: 830); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'Count()'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task GroupJoin_with_order_by_key_descending1(bool isAsync) { @@ -1100,7 +1100,7 @@ select grouping.Count(), assertOrder: true); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'Count()'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task GroupJoin_with_order_by_key_descending2(bool isAsync) { diff --git a/test/EFCore.Specification.Tests/Query/SimpleQueryTestBase.ResultOperators.cs b/test/EFCore.Specification.Tests/Query/SimpleQueryTestBase.ResultOperators.cs index be61d8d2524..8307b0a77d5 100644 --- a/test/EFCore.Specification.Tests/Query/SimpleQueryTestBase.ResultOperators.cs +++ b/test/EFCore.Specification.Tests/Query/SimpleQueryTestBase.ResultOperators.cs @@ -6,6 +6,7 @@ using System.Diagnostics; using System.Linq; using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore.Diagnostics; using Microsoft.EntityFrameworkCore.TestModels.Northwind; using Microsoft.EntityFrameworkCore.TestUtilities.Xunit; using Xunit; @@ -85,7 +86,7 @@ public override bool Equals(object obj) public override int GetHashCode() => Order.GetHashCode(); } - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'GroupBy([o].CustomerID, [o])'")] + [ConditionalFact(Skip = "Issue #17068")] public virtual void GroupBy_tracking_after_dispose() { List> groups; @@ -196,7 +197,7 @@ public virtual Task Sum_with_coalesce(bool isAsync) selector: p => p.UnitPrice ?? 0); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'Sum()'")] + [ConditionalTheory(Skip = "Issue #15937")] [MemberData(nameof(IsAsyncData))] public virtual Task Sum_over_subquery_is_client_eval(bool isAsync) { @@ -206,7 +207,7 @@ public virtual Task Sum_over_subquery_is_client_eval(bool isAsync) selector: c => c.Orders.Sum(o => o.OrderID)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'Sum()'")] + [ConditionalTheory(Skip = "Issue #15937")] [MemberData(nameof(IsAsyncData))] public virtual Task Sum_over_nested_subquery_is_client_eval(bool isAsync) { @@ -216,7 +217,7 @@ public virtual Task Sum_over_nested_subquery_is_client_eval(bool isAsync) selector: c => c.Orders.Sum(o => 5 + o.OrderDetails.Sum(od => od.ProductID))); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'Min()'")] + [ConditionalTheory(Skip = "Issue #15937")] [MemberData(nameof(IsAsyncData))] public virtual Task Sum_over_min_subquery_is_client_eval(bool isAsync) { @@ -322,7 +323,7 @@ public virtual Task Average_with_coalesce(bool isAsync) asserter: (e, a) => Assert.InRange((decimal)e - (decimal)a, -0.1m, 0.1m)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'Average()'")] + [ConditionalTheory(Skip = "Issue #15937")] [MemberData(nameof(IsAsyncData))] public virtual Task Average_over_subquery_is_client_eval(bool isAsync) { @@ -332,7 +333,7 @@ public virtual Task Average_over_subquery_is_client_eval(bool isAsync) selector: c => c.Orders.Sum(o => o.OrderID)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'Average()'")] + [ConditionalTheory(Skip = "Issue #15937")] [MemberData(nameof(IsAsyncData))] public virtual Task Average_over_nested_subquery_is_client_eval(bool isAsync) { @@ -342,7 +343,7 @@ public virtual Task Average_over_nested_subquery_is_client_eval(bool isAsync) selector: c => (decimal)c.Orders.Average(o => 5 + o.OrderDetails.Average(od => od.ProductID))); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'Max()'")] + [ConditionalTheory(Skip = "Issue #15937")] [MemberData(nameof(IsAsyncData))] public virtual Task Average_over_max_subquery_is_client_eval(bool isAsync) { @@ -534,7 +535,7 @@ public virtual Task Min_with_coalesce(bool isAsync) selector: p => p.UnitPrice ?? 0); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'Min()'")] + [ConditionalTheory(Skip = "Issue #15937")] [MemberData(nameof(IsAsyncData))] public virtual Task Min_over_subquery_is_client_eval(bool isAsync) { @@ -544,7 +545,7 @@ public virtual Task Min_over_subquery_is_client_eval(bool isAsync) selector: c => c.Orders.Sum(o => o.OrderID)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'Min()'")] + [ConditionalTheory(Skip = "Issue #15937")] [MemberData(nameof(IsAsyncData))] public virtual Task Min_over_nested_subquery_is_client_eval(bool isAsync) { @@ -554,7 +555,7 @@ public virtual Task Min_over_nested_subquery_is_client_eval(bool isAsync) selector: c => c.Orders.Min(o => 5 + o.OrderDetails.Min(od => od.ProductID))); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'Max()'")] + [ConditionalTheory(Skip = "Issue #15937")] [MemberData(nameof(IsAsyncData))] public virtual Task Min_over_max_subquery_is_client_eval(bool isAsync) { @@ -593,7 +594,7 @@ public virtual Task Max_with_coalesce(bool isAsync) selector: p => p.UnitPrice ?? 0); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'Max()'")] + [ConditionalTheory(Skip = "Issue #15937")] [MemberData(nameof(IsAsyncData))] public virtual Task Max_over_subquery_is_client_eval(bool isAsync) { @@ -603,7 +604,7 @@ public virtual Task Max_over_subquery_is_client_eval(bool isAsync) selector: c => c.Orders.Sum(o => o.OrderID)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'Max()'")] + [ConditionalTheory(Skip = "Issue #15937")] [MemberData(nameof(IsAsyncData))] public virtual Task Max_over_nested_subquery_is_client_eval(bool isAsync) { @@ -613,7 +614,7 @@ public virtual Task Max_over_nested_subquery_is_client_eval(bool isAsync) selector: c => c.Orders.Max(o => 5 + o.OrderDetails.Max(od => od.ProductID))); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'Max()'")] + [ConditionalTheory(Skip = "Issue #15937")] [MemberData(nameof(IsAsyncData))] public virtual Task Max_over_sum_subquery_is_client_eval(bool isAsync) { @@ -689,13 +690,18 @@ public virtual Task OrderBy_Where_Count_with_predicate(bool isAsync) predicate: o => o.CustomerID != "ALFKI"); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'where ClientEvalPredicate([o])'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] - public virtual Task Where_OrderBy_Count_client_eval(bool isAsync) + public virtual async Task Where_OrderBy_Count_client_eval(bool isAsync) { - return AssertCount( - isAsync, - os => os.Where(o => ClientEvalPredicate(o)).OrderBy(o => ClientEvalSelectorStateless())); + Assert.Equal( + CoreStrings.TranslationFailed( + "(o) => ClientEvalPredicate(o)"), + RemoveNewLines( + (await Assert.ThrowsAsync( + () => AssertCount( + isAsync, + os => os.Where(o => ClientEvalPredicate(o)).OrderBy(o => ClientEvalSelectorStateless())))).Message)); } //[ConditionalTheory] @@ -707,62 +713,92 @@ public virtual Task Where_OrderBy_Count_client_eval(bool isAsync) // os => os.Where(o => o.OrderID > 10).OrderBy(o => ClientEvalPredicate(o))); //} - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'where ClientEvalPredicate([o])'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] - public virtual Task OrderBy_Where_Count_client_eval(bool isAsync) + public virtual async Task OrderBy_Where_Count_client_eval(bool isAsync) { - return AssertCount( - isAsync, - os => os.OrderBy(o => ClientEvalSelectorStateless()).Where(o => ClientEvalPredicate(o))); + Assert.Equal( + CoreStrings.TranslationFailed( + "(o) => ClientEvalPredicate(o)"), + RemoveNewLines( + (await Assert.ThrowsAsync( + () => AssertCount( + isAsync, + os => os.OrderBy(o => ClientEvalSelectorStateless()).Where(o => ClientEvalPredicate(o))))).Message)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'where ClientEvalPredicate([o])'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] - public virtual Task OrderBy_Where_Count_client_eval_mixed(bool isAsync) + public virtual async Task OrderBy_Where_Count_client_eval_mixed(bool isAsync) { - return AssertCount( - isAsync, - os => os.OrderBy(o => o.OrderID).Where(o => ClientEvalPredicate(o))); + Assert.Equal( + CoreStrings.TranslationFailed( + "(o) => ClientEvalPredicate(o)"), + RemoveNewLines( + (await Assert.ThrowsAsync( + () => AssertCount( + isAsync, + os => os.OrderBy(o => o.OrderID).Where(o => ClientEvalPredicate(o))))).Message)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'where ClientEvalPredicate([o])'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] - public virtual Task OrderBy_Count_with_predicate_client_eval(bool isAsync) + public virtual async Task OrderBy_Count_with_predicate_client_eval(bool isAsync) { - return AssertCount( - isAsync, - os => os.OrderBy(o => ClientEvalSelectorStateless()), - predicate: o => ClientEvalPredicate(o)); + Assert.Equal( + CoreStrings.TranslationFailed( + "(o) => ClientEvalPredicate(o)"), + RemoveNewLines( + (await Assert.ThrowsAsync( + () => AssertCount( + isAsync, + os => os.OrderBy(o => ClientEvalSelectorStateless()), + predicate: o => ClientEvalPredicate(o)))).Message)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'where ClientEvalPredicate([o])'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] - public virtual Task OrderBy_Count_with_predicate_client_eval_mixed(bool isAsync) + public virtual async Task OrderBy_Count_with_predicate_client_eval_mixed(bool isAsync) { - return AssertCount( - isAsync, - os => os.OrderBy(o => o.OrderID), - predicate: o => ClientEvalPredicate(o)); + Assert.Equal( + CoreStrings.TranslationFailed( + "(o) => ClientEvalPredicate(o)"), + RemoveNewLines( + (await Assert.ThrowsAsync( + () => AssertCount( + isAsync, + os => os.OrderBy(o => o.OrderID), + predicate: o => ClientEvalPredicate(o)))).Message)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'where ClientEvalPredicate([o])'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] - public virtual Task OrderBy_Where_Count_with_predicate_client_eval(bool isAsync) + public virtual async Task OrderBy_Where_Count_with_predicate_client_eval(bool isAsync) { - return AssertCount( - isAsync, - os => os.OrderBy(o => ClientEvalSelectorStateless()).Where(o => ClientEvalPredicate(o)), - predicate: o => ClientEvalPredicate(o)); + Assert.Equal( + CoreStrings.TranslationFailed( + "(o) => ClientEvalPredicate(o)"), + RemoveNewLines( + (await Assert.ThrowsAsync( + () => AssertCount( + isAsync, + os => os.OrderBy(o => ClientEvalSelectorStateless()).Where(o => ClientEvalPredicate(o)), + predicate: o => ClientEvalPredicate(o)))).Message)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'where ClientEvalPredicate([o])'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] - public virtual Task OrderBy_Where_Count_with_predicate_client_eval_mixed(bool isAsync) + public virtual async Task OrderBy_Where_Count_with_predicate_client_eval_mixed(bool isAsync) { - return AssertCount( - isAsync, - os => os.OrderBy(o => o.OrderID).Where(o => ClientEvalPredicate(o)), - predicate: o => o.CustomerID != "ALFKI"); + Assert.Equal( + CoreStrings.TranslationFailed( + "(o) => ClientEvalPredicate(o)"), + RemoveNewLines( + (await Assert.ThrowsAsync( + () => AssertCount( + isAsync, + os => os.OrderBy(o => o.OrderID).Where(o => ClientEvalPredicate(o)), + predicate: o => o.CustomerID != "ALFKI"))).Message)); } [ConditionalTheory] @@ -1026,7 +1062,7 @@ public virtual Task Multiple_collection_navigation_with_FirstOrDefault_chained_p () => c.Orders.OrderBy(o => o.OrderID).FirstOrDefault().OrderDetails.OrderBy(od => od.ProductID).FirstOrDefault().ProductID))); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'First()'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] public virtual Task First_inside_subquery_gets_client_evaluated(bool isAsync) { @@ -1046,7 +1082,7 @@ public virtual Task Last(bool isAsync) entryCount: 1); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'Last()'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] public virtual Task Last_when_no_order_by(bool isAsync) { @@ -1411,24 +1447,23 @@ public virtual Task Contains_top_level(bool isAsync) asyncQuery: cs => cs.Select(c => c.CustomerID).ContainsAsync("ALFKI")); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'where {__ids_0 => Contains(new Tuple`2(Item1 = [o].OrderID, Item2 = [o].ProductID))}'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] public virtual async Task Contains_with_local_tuple_array_closure(bool isAsync) { var ids = new[] { Tuple.Create(1, 2), Tuple.Create(10248, 11) }; - await AssertQuery( - isAsync, - od => od.Where(o => ids.Contains(new Tuple(o.OrderID, o.ProductID))), entryCount: 1); - - ids = new[] { Tuple.Create(1, 2) }; - - await AssertQuery( - isAsync, - od => od.Where(o => ids.Contains(new Tuple(o.OrderID, o.ProductID)))); + Assert.Equal( + CoreStrings.TranslationFailed( + "(o) => Contains>( source: (Unhandled parameter: __ids_0), value: new Tuple( o.OrderID, o.ProductID ))"), + RemoveNewLines( + (await Assert.ThrowsAsync( + () => AssertQuery( + isAsync, + od => od.Where(o => ids.Contains(new Tuple(o.OrderID, o.ProductID))), entryCount: 1))).Message)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'where {__ids_0 => Contains(new <>f__AnonymousType0`2(Id1 = [o].OrderID, Id2 = [o].ProductID))}'")] + [ConditionalTheory(Skip = "Issue #15937")] [MemberData(nameof(IsAsyncData))] public virtual async Task Contains_with_local_anonymous_type_array_closure(bool isAsync) { @@ -1446,36 +1481,24 @@ public virtual async Task Contains_with_local_anonymous_type_array_closure(bool } }; - await AssertQuery( - isAsync, - od => od.Where( - o => ids.Contains( - new - { - Id1 = o.OrderID, - Id2 = o.ProductID - })), entryCount: 1); - - ids = new[] - { - new - { - Id1 = 1, - Id2 = 2 - } - }; - - await AssertQuery( - isAsync, - od => od.Where( - o => ids.Contains( - new - { - Id1 = o.OrderID, - Id2 = o.ProductID - }))); + Assert.Equal( + CoreStrings.TranslationFailed( + "(o) => Contains<<>f__AnonymousType0>( source: (Unhandled parameter: __ids_0), value: new { Id1 = o.OrderID, Id2 = o.ProductID })"), + RemoveNewLines( + (await Assert.ThrowsAsync( + () => AssertQuery( + isAsync, + od => od.Where( + o => ids.Contains( + new + { + Id1 = o.OrderID, Id2 = o.ProductID + })), entryCount: 1))).Message)); } + private string RemoveNewLines(string message) + => message.Replace("\n", "").Replace("\r", ""); + [ConditionalFact] public virtual void OfType_Select() { @@ -1662,30 +1685,34 @@ var query } } - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'Contains(__p_0)'")] + [ConditionalFact] public virtual void Contains_over_entityType_should_materialize_when_composite() { using (var context = CreateContext()) { - var query - = context.OrderDetails.Where(o => o.ProductID == 42) - .Contains(context.OrderDetails.First(o => o.OrderID == 10248 && o.ProductID == 42)); - - Assert.True(query); + Assert.Equal( + "Cannot translate a Contains() operator on entity 'OrderDetail' because it has a composite key.", + Assert.Throws( + () => context.OrderDetails.Where(o => o.ProductID == 42) + .Contains(context.OrderDetails.First(o => o.OrderID == 10248 && o.ProductID == 42))).Message); } } - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'FirstOrDefault()'")] + [ConditionalFact] public virtual void Paging_operation_on_string_doesnt_issue_warning() { using (var context = CreateContext()) { - var query = context.Customers.Select(c => c.CustomerID.FirstOrDefault()).ToList(); - Assert.Equal(91, query.Count); + Assert.Equal( + CoreStrings.TranslationFailed( + "AsQueryable(NavigationTreeExpression Value: EntityReferenceCustomer Expression: (Unhandled parameter: c).CustomerID)"), + RemoveNewLines( + Assert.Throws( + () => context.Customers.Select(c => c.CustomerID.FirstOrDefault()).ToList()).Message)); } } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'Sum()'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] public virtual Task Project_constant_Sum(bool isAsync) { diff --git a/test/EFCore.Specification.Tests/Query/SimpleQueryTestBase.Select.cs b/test/EFCore.Specification.Tests/Query/SimpleQueryTestBase.Select.cs index 37f3b1388a8..ec69ded6639 100644 --- a/test/EFCore.Specification.Tests/Query/SimpleQueryTestBase.Select.cs +++ b/test/EFCore.Specification.Tests/Query/SimpleQueryTestBase.Select.cs @@ -5,6 +5,7 @@ using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore.Diagnostics; using Microsoft.EntityFrameworkCore.TestModels.Northwind; using Xunit; @@ -128,20 +129,24 @@ await AssertQuery( e => e.f); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'orderby Convert(__p_0.f, Nullable`1) asc'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] public virtual async Task Select_bool_closure_with_order_by_property_with_cast_to_nullable(bool isAsync) { var boolean = false; - await AssertQuery( - isAsync, - cs => cs.Select( - c => new - { - f = boolean - }).OrderBy(e => (bool?)e.f), - e => e.f); + Assert.Equal( + CoreStrings.TranslationFailed("(c) => (Nullable)(Unhandled parameter: __p_0).f"), + RemoveNewLines( + (await Assert.ThrowsAsync( + () => AssertQuery( + isAsync, + cs => cs.Select( + c => new + { + f = boolean + }).OrderBy(e => (bool?)e.f), + assertOrder: true))).Message)); } [ConditionalTheory] @@ -859,7 +864,7 @@ public virtual Task Project_single_element_from_collection_with_OrderBy_Distinct c => c.Orders.OrderBy(o => o.OrderID).Select(o => o.CustomerID).Distinct().FirstOrDefault()).Select(e => e == null ? 0 : e.Length)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'SingleOrDefault()'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] public virtual Task Project_single_element_from_collection_with_OrderBy_Take_and_SingleOrDefault(bool isAsync) { diff --git a/test/EFCore.Specification.Tests/Query/SimpleQueryTestBase.Where.cs b/test/EFCore.Specification.Tests/Query/SimpleQueryTestBase.Where.cs index 7501de200be..d5e32ef2e3d 100644 --- a/test/EFCore.Specification.Tests/Query/SimpleQueryTestBase.Where.cs +++ b/test/EFCore.Specification.Tests/Query/SimpleQueryTestBase.Where.cs @@ -6,6 +6,7 @@ using System.Linq; using System.Linq.Expressions; using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore.Diagnostics; using Microsoft.EntityFrameworkCore.TestModels.Northwind; using Microsoft.EntityFrameworkCore.TestUtilities.Xunit; using Xunit; @@ -632,14 +633,18 @@ where EF.Property(e, "Title") entryCount: 1); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'where [c].IsLondon'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] - public virtual Task Where_client(bool isAsync) + public virtual async Task Where_client(bool isAsync) { - return AssertQuery( - isAsync, - cs => cs.Where(c => c.IsLondon), - entryCount: 6); + Assert.Equal( + CoreStrings.TranslationFailed("(c) => c.IsLondon"), + RemoveNewLines( + (await Assert.ThrowsAsync( + () => AssertQuery( + isAsync, + cs => cs.Where(c => c.IsLondon), + entryCount: 6))).Message)); } [ConditionalTheory] @@ -652,54 +657,76 @@ public virtual Task Where_subquery_correlated(bool isAsync) entryCount: 91); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'where {from Customer c2 in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.Northwind.Customer]) where (([c1].CustomerID == [c2].CustomerID) AndAlso [c2].IsLondon) select [c2] => Any()}''")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] - public virtual Task Where_subquery_correlated_client_eval(bool isAsync) + public virtual async Task Where_subquery_correlated_client_eval(bool isAsync) { - return AssertQuery( - isAsync, - cs => cs.OrderBy(c1 => c1.CustomerID).Take(5).Where(c1 => cs.Any(c2 => c1.CustomerID == c2.CustomerID && c2.IsLondon)), - entryCount: 1); + Assert.Equal( + CoreStrings.TranslationFailed("(c0) => EntityShaperExpression: EntityType: Customer ValueBufferExpression: ProjectionBindingExpression: EmptyProjectionMember IsNullable: False.CustomerID == c0.CustomerID && c0.IsLondon"), + RemoveNewLines( + (await Assert.ThrowsAsync( + () => AssertQuery( + isAsync, + cs => cs.OrderBy(c1 => c1.CustomerID).Take(5) + .Where(c1 => cs.Any(c2 => c1.CustomerID == c2.CustomerID && c2.IsLondon)), + entryCount: 1))).Message)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'where [c].IsLondon'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] - public virtual Task Where_client_and_server_top_level(bool isAsync) + public virtual async Task Where_client_and_server_top_level(bool isAsync) { - return AssertQuery( - isAsync, - cs => cs.Where(c => c.IsLondon && c.CustomerID != "AROUT"), - entryCount: 5); + Assert.Equal( + CoreStrings.TranslationFailed("(c) => c.IsLondon && c.CustomerID != \"AROUT\""), + RemoveNewLines( + (await Assert.ThrowsAsync( + () => AssertQuery( + isAsync, + cs => cs.Where(c => c.IsLondon && c.CustomerID != "AROUT"), + entryCount: 5))).Message)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'where ([c].IsLondon OrElse ([c].CustomerID == \"ALFKI\"))'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] - public virtual Task Where_client_or_server_top_level(bool isAsync) + public virtual async Task Where_client_or_server_top_level(bool isAsync) { - return AssertQuery( - isAsync, - cs => cs.Where(c => c.IsLondon || c.CustomerID == "ALFKI"), - entryCount: 7); + Assert.Equal( + CoreStrings.TranslationFailed("(c) => c.IsLondon || c.CustomerID == \"ALFKI\""), + RemoveNewLines( + (await Assert.ThrowsAsync( + () => AssertQuery( + isAsync, + cs => cs.Where(c => c.IsLondon || c.CustomerID == "ALFKI"), + entryCount: 7))).Message)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'where (([c].CustomerID != \"ALFKI\") == ([c].IsLondon AndAlso ([c].CustomerID != \"AROUT\")))'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] - public virtual Task Where_client_and_server_non_top_level(bool isAsync) + public virtual async Task Where_client_and_server_non_top_level(bool isAsync) { - return AssertQuery( - isAsync, - cs => cs.Where(c => c.CustomerID != "ALFKI" == (c.IsLondon && c.CustomerID != "AROUT")), - entryCount: 6); + Assert.Equal( + CoreStrings.TranslationFailed("(c) => c.CustomerID != \"ALFKI\" == c.IsLondon && c.CustomerID != \"AROUT\""), + RemoveNewLines( + (await Assert.ThrowsAsync( + () => AssertQuery( + isAsync, + cs => cs.Where(c => c.CustomerID != "ALFKI" == (c.IsLondon && c.CustomerID != "AROUT")), + entryCount: 6))).Message)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'where (([c].CustomerID == \"MAUMAR\") OrElse (([c].CustomerID != \"AROUT\") AndAlso [c].IsLondon))'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] - public virtual Task Where_client_deep_inside_predicate_and_server_top_level(bool isAsync) + public virtual async Task Where_client_deep_inside_predicate_and_server_top_level(bool isAsync) { - return AssertQuery( - isAsync, - cs => cs.Where(c => c.CustomerID != "ALFKI" && (c.CustomerID == "MAUMAR" || (c.CustomerID != "AROUT" && c.IsLondon))), - entryCount: 5); + Assert.Equal( + CoreStrings.TranslationFailed("(c) => c.CustomerID != \"ALFKI\" && c.CustomerID == \"MAUMAR\" || c.CustomerID != \"AROUT\" && c.IsLondon"), + RemoveNewLines( + (await Assert.ThrowsAsync( + () => AssertQuery( + isAsync, + cs => cs.Where( + c => c.CustomerID != "ALFKI" && (c.CustomerID == "MAUMAR" || (c.CustomerID != "AROUT" && c.IsLondon))), + entryCount: 5))).Message)); } [ConditionalTheory] @@ -1299,13 +1326,17 @@ public virtual Task Where_bool_member_false(bool isAsync) ps => ps.Where(p => !p.Discontinued), entryCount: 69); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'where Not(ClientFunc([p].ProductID))'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] - public virtual Task Where_bool_client_side_negated(bool isAsync) + public virtual async Task Where_bool_client_side_negated(bool isAsync) { - return AssertQuery( - isAsync, - ps => ps.Where(p => !ClientFunc(p.ProductID) && p.Discontinued), entryCount: 8); + Assert.Equal( + CoreStrings.TranslationFailed("(p) => !(ClientFunc(p.ProductID)) && p.Discontinued"), + RemoveNewLines( + (await Assert.ThrowsAsync( + () => AssertQuery( + isAsync, + ps => ps.Where(p => !ClientFunc(p.ProductID) && p.Discontinued), entryCount: 8))).Message)); } private static bool ClientFunc(int id) diff --git a/test/EFCore.Specification.Tests/Query/SimpleQueryTestBase.cs b/test/EFCore.Specification.Tests/Query/SimpleQueryTestBase.cs index b8cb3a681c4..9ddffb67d6e 100644 --- a/test/EFCore.Specification.Tests/Query/SimpleQueryTestBase.cs +++ b/test/EFCore.Specification.Tests/Query/SimpleQueryTestBase.cs @@ -181,7 +181,7 @@ public IQueryable Find() } } - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'join String _c1 in {from Customer c1 in {from Customer c in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.Northwind.Customer]) orderby [c].CustomerID asc select [c] => Take(__p_0)} from Customer c2 in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.Northwind.Customer]) select Property([c1], \"CustomerID\") => Distinct()} on Property([c1_Orders], \"CustomerID\") equals [_c1]'")] + [ConditionalFact] public virtual void Lifting_when_subquery_nested_order_by_simple() { using (var context = CreateContext()) @@ -205,7 +205,7 @@ orderby _c1 } } - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'orderby [_c1].CustomerID asc'")] + [ConditionalFact] public virtual void Lifting_when_subquery_nested_order_by_anonymous() { using (var context = CreateContext()) @@ -670,19 +670,22 @@ public virtual Task Queryable_simple_anonymous_subquery(bool isAsync) entryCount: 91); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'where [c].IsLondon'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] - public virtual Task Queryable_reprojection(bool isAsync) + public virtual async Task Queryable_reprojection(bool isAsync) { - return AssertQuery( - isAsync, - cs => cs.Where(c => c.IsLondon) - .Select( - c => new Customer - { - CustomerID = "Foo", - City = c.City - })); + Assert.Equal( + CoreStrings.TranslationFailed("(c) => c.IsLondon"), + RemoveNewLines( + (await Assert.ThrowsAsync( + () => AssertQuery( + isAsync, + cs => cs.Where(c => c.IsLondon) + .Select( + c => new Customer + { + CustomerID = "Foo", City = c.City + })))).Message)); } [ConditionalTheory] @@ -1227,34 +1230,46 @@ public virtual Task All_top_level_subquery_ef_property(bool isAsync) asyncQuery: cs => cs.AllAsync(c1 => cs.Any(c2 => cs.Any(c3 => EF.Property(c1, "CustomerID") == c3.CustomerID)))); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'All([c].IsLondon)'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] - public virtual Task All_client(bool isAsync) + public virtual async Task All_client(bool isAsync) { - return AssertAll( - isAsync, - cs => cs, - predicate: c => c.IsLondon); + Assert.Equal( + CoreStrings.TranslationFailed("(c) => c.IsLondon"), + RemoveNewLines( + (await Assert.ThrowsAsync( + () => AssertAll( + isAsync, + cs => cs, + predicate: c => c.IsLondon))).Message)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'All((([c].CustomerID != \"Foo\") AndAlso [c].IsLondon))'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] - public virtual Task All_client_and_server_top_level(bool isAsync) + public virtual async Task All_client_and_server_top_level(bool isAsync) { - return AssertAll( - isAsync, - cs => cs, - predicate: c => c.CustomerID != "Foo" && c.IsLondon); + Assert.Equal( + CoreStrings.TranslationFailed("(c) => c.CustomerID != \"Foo\" && c.IsLondon"), + RemoveNewLines( + (await Assert.ThrowsAsync( + () => AssertAll( + isAsync, + cs => cs, + predicate: c => c.CustomerID != "Foo" && c.IsLondon))).Message)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'All((([c].CustomerID != \"Foo\") OrElse [c].IsLondon))'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] - public virtual Task All_client_or_server_top_level(bool isAsync) + public virtual async Task All_client_or_server_top_level(bool isAsync) { - return AssertAll( - isAsync, - cs => cs, - predicate: c => c.CustomerID != "Foo" || c.IsLondon); + Assert.Equal( + CoreStrings.TranslationFailed("(c) => c.CustomerID != \"Foo\" || c.IsLondon"), + RemoveNewLines( + (await Assert.ThrowsAsync( + () => AssertAll( + isAsync, + cs => cs, + predicate: c => c.CustomerID != "Foo" || c.IsLondon))).Message)); } [ConditionalTheory] @@ -1300,36 +1315,38 @@ from e in es.OrderBy(e => e.EmployeeID).Take(5) entryCount: 15); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'from <>f__AnonymousType327`2 e in {from Employee e in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.Northwind.Employee]) orderby [e].EmployeeID asc select new <>f__AnonymousType327`2(e2 = [e], Square = ([e].EmployeeID ^ 2)) => Take(2)}'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] - public virtual Task Projection_when_arithmetic_mixed_subqueries(bool isAsync) + public virtual async Task Projection_when_arithmetic_mixed_subqueries(bool isAsync) { - return AssertQuery( - isAsync, - (os, es) => - from o in os.OrderBy(o => o.OrderID).Take(3).Select( - o2 => new - { - o2, - Mod = o2.OrderID % 2 - }) - from e in es.OrderBy(e => e.EmployeeID).Take(2).Select( - e2 => new - { - e2, - Square = e2.EmployeeID ^ 2 - }) - select new - { - Add = e.e2.EmployeeID + o.o2.OrderID, - e.Square, - e.e2, - Literal = 42, - o.o2, - o.Mod - }, - elementSorter: e => e.e2.EmployeeID + " " + e.o2.OrderID, - entryCount: 3); + Assert.Equal( + "Unsupported Binary operator type specified.", + RemoveNewLines( + (await Assert.ThrowsAsync( + () => AssertQuery( + isAsync, + (os, es) => + from o in os.OrderBy(o => o.OrderID).Take(3).Select( + o2 => new + { + o2, Mod = o2.OrderID % 2 + }) + from e in es.OrderBy(e => e.EmployeeID).Take(2).Select( + e2 => new + { + e2, Square = e2.EmployeeID ^ 2 + }) + select new + { + Add = e.e2.EmployeeID + o.o2.OrderID, + e.Square, + e.e2, + Literal = 42, + o.o2, + o.Mod + }, + elementSorter: e => e.e2.EmployeeID + " " + e.o2.OrderID, + entryCount: 3))).Message)); } [ConditionalTheory] @@ -1371,15 +1388,19 @@ public virtual Task Cast_results_to_object(bool isAsync) cs => from c in cs.Cast() select c, entryCount: 91); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'where [c].IsLondon'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] - public virtual Task First_client_predicate(bool isAsync) + public virtual async Task First_client_predicate(bool isAsync) { - return AssertFirst( - isAsync, - cs => cs.OrderBy(c => c.CustomerID), - predicate: c => c.IsLondon, - entryCount: 1); + Assert.Equal( + CoreStrings.TranslationFailed("(c) => c.IsLondon"), + RemoveNewLines( + (await Assert.ThrowsAsync( + () => AssertFirst( + isAsync, + cs => cs.OrderBy(c => c.CustomerID), + predicate: c => c.IsLondon, + entryCount: 1))).Message)); } [ConditionalTheory] @@ -1583,7 +1604,7 @@ public virtual Task Where_subquery_expression_same_parametername(bool isAsync) entryCount: 5); } - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'Distinct()'")] + [ConditionalFact] public virtual void Select_DTO_distinct_translated_to_server() { using (var context = CreateContext()) @@ -1868,7 +1889,7 @@ select os.Where(o => o.CustomerID == c.CustomerID), elementAsserter: CollectionAsserter(o => o.OrderID)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'orderby [o].OrderID asc, [c].CustomerID asc'")] + [ConditionalTheory(Skip = "Issue #17241")] [MemberData(nameof(IsAsyncData))] public virtual Task Select_correlated_subquery_ordered(bool isAsync) { @@ -1981,7 +2002,7 @@ from e1 in es entryCount: 1); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'SingleOrDefault()'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] public virtual Task Where_query_composition_is_null(bool isAsync) { @@ -1994,7 +2015,7 @@ where es.SingleOrDefault(e2 => e2.EmployeeID == e1.ReportsTo) == null entryCount: 1); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'SingleOrDefault()'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] public virtual Task Where_query_composition_is_not_null(bool isAsync) { @@ -2007,7 +2028,7 @@ where es.SingleOrDefault(e2 => e2.EmployeeID == e1.ReportsTo) != null entryCount: 3); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'SingleOrDefault()'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] public virtual Task Where_query_composition_entity_equality_one_element_SingleOrDefault(bool isAsync) { @@ -2031,7 +2052,7 @@ from e1 in es select e1); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'SingleOrDefault()'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] public virtual Task Where_query_composition_entity_equality_no_elements_SingleOrDefault(bool isAsync) { @@ -2093,7 +2114,7 @@ from e1 in es select e1); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'where ([e1].FirstName == {from Employee e in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.Northwind.Employee]) orderby [e].EmployeeID asc select new <>f__AnonymousType334`1(Foo = [e]) => First()}.Foo.FirstName)'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] public virtual Task Where_query_composition2(bool isAsync) { @@ -2147,68 +2168,85 @@ where e1.FirstName entryCount: 1); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'where [c].IsLondon'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] - public virtual Task Where_query_composition3(bool isAsync) + public virtual async Task Where_query_composition3(bool isAsync) { - return AssertQuery( - isAsync, - cs => - from c1 in cs - where c1.City == cs.OrderBy(c => c.CustomerID).First(c => c.IsLondon).City - select c1, - entryCount: 6); + Assert.Equal( + CoreStrings.TranslationFailed("(c0) => c0.IsLondon"), + RemoveNewLines( + (await Assert.ThrowsAsync( + () => AssertQuery( + isAsync, + cs => + from c1 in cs + where c1.City == cs.OrderBy(c => c.CustomerID).First(c => c.IsLondon).City + select c1, + entryCount: 6))).Message)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'where ([c1].City == {from Customer c in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.Northwind.Customer]) orderby [c].CustomerID asc from Customer c3 in {from Customer c in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.Northwind.Customer]) orderby [c].IsLondon asc, [c].CustomerID asc select [c]} select new <>f__AnonymousType335`1(c3 = [c3]) => First()}.c3.City)'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] - public virtual Task Where_query_composition4(bool isAsync) + public virtual async Task Where_query_composition4(bool isAsync) { - return AssertQuery( - isAsync, - cs => - from c1 in cs.OrderBy(c => c.CustomerID).Take(2) - where c1.City == (from c2 in cs.OrderBy(c => c.CustomerID) - from c3 in cs.OrderBy(c => c.IsLondon).ThenBy(c => c.CustomerID) - select new - { - c3 - }).First().c3.City - select c1, - entryCount: 1); + Assert.Equal( + CoreStrings.TranslationFailed("(c1) => c1.IsLondon"), + RemoveNewLines( + (await Assert.ThrowsAsync( + () => AssertQuery( + isAsync, + cs => + from c1 in cs.OrderBy(c => c.CustomerID).Take(2) + where c1.City == (from c2 in cs.OrderBy(c => c.CustomerID) + from c3 in cs.OrderBy(c => c.IsLondon).ThenBy(c => c.CustomerID) + select new + { + c3 + }).First().c3.City + select c1, + entryCount: 1))).Message)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'where ([c1].IsLondon == {from Customer c in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.Northwind.Customer]) orderby [c].CustomerID asc select [c].IsLondon => First()})'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] - public virtual Task Where_query_composition5(bool isAsync) + public virtual async Task Where_query_composition5(bool isAsync) { - return AssertQuery( - isAsync, - cs => - from c1 in cs - where c1.IsLondon == cs.OrderBy(c => c.CustomerID).First().IsLondon - select c1, - entryCount: 85); + Assert.Equal( + CoreStrings.TranslationFailed( + "(c) => c.IsLondon == First(Select( source: OrderBy( source: DbSet, keySelector: (c0) => c0.CustomerID), selector: (c0) => c0.IsLondon))"), + RemoveNewLines( + (await Assert.ThrowsAsync( + () => AssertQuery( + isAsync, + cs => + from c1 in cs + where c1.IsLondon == cs.OrderBy(c => c.CustomerID).First().IsLondon + select c1, + entryCount: 85))).Message)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'where ([c1].IsLondon == {from Customer c in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.Northwind.Customer]) orderby [c].CustomerID asc select new <>f__AnonymousType334`1(Foo = [c]) => First()}.Foo.IsLondon)'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] - public virtual Task Where_query_composition6(bool isAsync) + public virtual async Task Where_query_composition6(bool isAsync) { - return AssertQuery( - isAsync, - cs => - from c1 in cs - where c1.IsLondon - == cs.OrderBy(c => c.CustomerID) - .Select( - c => new - { - Foo = c - }) - .First().Foo.IsLondon - select c1, - entryCount: 85); + Assert.Equal( + CoreStrings.TranslationFailed("(c) => c.IsLondon == First(Select( source: OrderBy( source: DbSet, keySelector: (c0) => c0.CustomerID), selector: (c0) => c0.IsLondon))"), + RemoveNewLines( + (await Assert.ThrowsAsync( + () => AssertQuery( + isAsync, + cs => + from c1 in cs + where c1.IsLondon + == cs.OrderBy(c => c.CustomerID) + .Select( + c => new + { + Foo = c + }) + .First().Foo.IsLondon + select c1, + entryCount: 85))).Message)); } [ConditionalTheory] @@ -2240,24 +2278,29 @@ public virtual Task OrderBy_scalar_primitive(bool isAsync) assertOrder: true); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'from String s in value(System.String[])'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] - public virtual Task SelectMany_mixed(bool isAsync) + public virtual async Task SelectMany_mixed(bool isAsync) { - return AssertQuery( - isAsync, - (es, cs) => - from e1 in es.OrderBy(e => e.EmployeeID).Take(2) - from s in new[] { "a", "b" } - from c in cs.OrderBy(c => c.CustomerID).Take(2) - select new - { - e1, - s, - c - }, - e => e.e1.EmployeeID + " " + e.c.CustomerID, - entryCount: 4); + Assert.Equal( + CoreStrings.TranslationFailed("(e1) => string[] { \"a\", \"b\", }"), + RemoveNewLines( + (await Assert.ThrowsAsync( + () => AssertQuery( + isAsync, + (es, cs) => + from e1 in es.OrderBy(e => e.EmployeeID).Take(2) + from s in new[] + { + "a", "b" + } + from c in cs.OrderBy(c => c.CustomerID).Take(2) + select new + { + e1, s, c + }, + e => e.e1.EmployeeID + " " + e.c.CustomerID, + entryCount: 4))).Message)); } [ConditionalTheory] @@ -2437,7 +2480,7 @@ from e in es.Where(e => e.City == c.City) entryCount: 15); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'where ([c1] == [e2].City)'")] + [ConditionalTheory(Skip = "Issue #17240")] [MemberData(nameof(IsAsyncData))] public virtual Task SelectMany_correlated_subquery_hard(bool isAsync) { @@ -2719,27 +2762,35 @@ from e in es.Where(c => c.EmployeeID == NonExistentID).DefaultIfEmpty() select "Foo"); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'DefaultIfEmpty(__p_0)'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] - public virtual Task Default_if_empty_top_level_arg(bool isAsync) + public virtual async Task Default_if_empty_top_level_arg(bool isAsync) { - return AssertQuery( - isAsync, - es => - from e in es.Where(c => c.EmployeeID == NonExistentID).DefaultIfEmpty(new Employee()) - select e, - entryCount: 1); + Assert.Equal( + CoreStrings.TranslationFailed("DefaultIfEmpty( source: Where( source: DbSet, predicate: (c) => c.EmployeeID == 4294967295), defaultValue: (Unhandled parameter: __p_0))"), + RemoveNewLines( + (await Assert.ThrowsAsync( + () => AssertQuery( + isAsync, + es => + from e in es.Where(c => c.EmployeeID == NonExistentID).DefaultIfEmpty(new Employee()) + select e, + entryCount: 1))).Message)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'DefaultIfEmpty(__p_0)'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] - public virtual Task Default_if_empty_top_level_arg_followed_by_projecting_constant(bool isAsync) + public virtual async Task Default_if_empty_top_level_arg_followed_by_projecting_constant(bool isAsync) { - return AssertQueryScalar( - isAsync, - es => - from e in es.Where(c => c.EmployeeID == NonExistentID).DefaultIfEmpty(new Employee()) - select 42); + Assert.Equal( + CoreStrings.TranslationFailed("DefaultIfEmpty( source: Where( source: DbSet, predicate: (c) => c.EmployeeID == 4294967295), defaultValue: (Unhandled parameter: __p_0))"), + RemoveNewLines( + (await Assert.ThrowsAsync( + () => AssertQueryScalar( + isAsync, + es => + from e in es.Where(c => c.EmployeeID == NonExistentID).DefaultIfEmpty(new Employee()) + select 42))).Message)); } [ConditionalTheory] @@ -2931,38 +2982,45 @@ public virtual Task OrderBy_anon2(bool isAsync) entryCount: 91); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'orderby [c].IsLondon asc, [c].CompanyName asc'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] - public virtual Task OrderBy_client_mixed(bool isAsync) + public virtual async Task OrderBy_client_mixed(bool isAsync) { - return AssertQuery( - isAsync, - cs => cs.OrderBy(c => c.IsLondon).ThenBy(c => c.CompanyName), - assertOrder: true, - entryCount: 91); + Assert.Equal( + CoreStrings.TranslationFailed("(c) => c.IsLondon"), + RemoveNewLines( + (await Assert.ThrowsAsync( + () => AssertQuery( + isAsync, + cs => cs.OrderBy(c => c.IsLondon).ThenBy(c => c.CompanyName), + assertOrder: true, + entryCount: 91))).Message)); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'join Order o in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.Northwind.Order]) on new Foo() {Bar = [c].CustomerID} equals new Foo() {Bar = [o].CustomerID}'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] - public virtual Task OrderBy_multiple_queries(bool isAsync) + public virtual async Task OrderBy_multiple_queries(bool isAsync) { - return AssertQuery( - isAsync, - (cs, os) => - from c in cs - join o in os on new Foo - { - Bar = c.CustomerID - } equals new Foo - { - Bar = o.CustomerID - } - orderby c.IsLondon, o.OrderDate - select new - { - c, - o - }); + Assert.Equal( + CoreStrings.TranslationFailed("(c) => new Foo{ Bar = c.CustomerID }; (o) => new Foo{ Bar = o.CustomerID }; (c, o) => new TransparentIdentifier( Outer = c, Inner = o)"), + RemoveNewLines( + (await Assert.ThrowsAsync( + () => AssertQuery( + isAsync, + (cs, os) => + from c in cs + join o in os on new Foo + { + Bar = c.CustomerID + } equals new Foo + { + Bar = o.CustomerID + } + orderby c.IsLondon, o.OrderDate + select new + { + c, o + }))).Message)); } [ConditionalTheory] @@ -3605,7 +3663,7 @@ public virtual void Can_cast_CreateQuery_result_to_IQueryable_T_bug_1730() // } //} - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'First()'")] + [ConditionalFact(Skip = "Issue #17242")] public virtual void Select_Subquery_Single() { using (var context = CreateContext()) @@ -3624,7 +3682,7 @@ orderby o.OrderID } } - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'Single()'")] + [ConditionalFact] public virtual void Select_Where_Subquery_Deep_Single() { using (var context = CreateContext()) @@ -3674,7 +3732,7 @@ select c } } - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'First()'")] + [ConditionalFact] public virtual void Select_Where_Subquery_Equality() { using (var context = CreateContext()) @@ -3853,69 +3911,93 @@ await AssertQuery( entryCount: 267); } - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'where ([o].OrderID > value(System.Random).Next())'")] + [ConditionalFact] public virtual void Random_next_is_not_funcletized_1() { using (var context = CreateContext()) { - var query = context.Orders - .Where(o => o.OrderID > new Random().Next()) - .ToList(); + Assert.Equal( + CoreStrings.TranslationFailed("(o) => o.OrderID > new Random().Next()"), + RemoveNewLines( + Assert.Throws( + () => context.Orders + .Where(o => o.OrderID > new Random().Next()) + .ToList()).Message)); } } - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'where ([o].OrderID > value(System.Random).Next(5))'")] + [ConditionalFact] public virtual void Random_next_is_not_funcletized_2() { using (var context = CreateContext()) { - var query = context.Orders - .Where(o => o.OrderID > new Random().Next(5)) - .ToList(); + Assert.Equal( + CoreStrings.TranslationFailed("(o) => o.OrderID > new Random().Next(5)"), + RemoveNewLines( + Assert.Throws( + () => context.Orders + .Where(o => o.OrderID > new Random().Next(5)) + .ToList()).Message)); } } - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'where ([o].OrderID > value(System.Random).Next(0, 10))'")] + [ConditionalFact] public virtual void Random_next_is_not_funcletized_3() { using (var context = CreateContext()) { - var query = context.Orders - .Where(o => o.OrderID > new Random().Next(0, 10)) - .ToList(); + Assert.Equal( + CoreStrings.TranslationFailed("(o) => o.OrderID > new Random().Next( minValue: 0, maxValue: 10)"), + RemoveNewLines( + Assert.Throws( + () => context.Orders + .Where(o => o.OrderID > new Random().Next(0, 10)) + .ToList()).Message)); } } - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'where ([o].OrderID > value(System.Random).Next())'")] + [ConditionalFact] public virtual void Random_next_is_not_funcletized_4() { using (var context = CreateContext()) { - var query = context.Orders - .Where(o => o.OrderID > new Random(15).Next()) - .ToList(); + Assert.Equal( + CoreStrings.TranslationFailed("(o) => o.OrderID > new Random(15).Next()"), + RemoveNewLines( + Assert.Throws( + () => context.Orders + .Where(o => o.OrderID > new Random(15).Next()) + .ToList()).Message)); } } - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'where ([o].OrderID > value(System.Random).Next(5))'")] + [ConditionalFact] public virtual void Random_next_is_not_funcletized_5() { using (var context = CreateContext()) { - var query = context.Orders - .Where(o => o.OrderID > new Random(15).Next(5)) - .ToList(); + Assert.Equal( + CoreStrings.TranslationFailed("(o) => o.OrderID > new Random(15).Next(5)"), + RemoveNewLines( + Assert.Throws( + () => context.Orders + .Where(o => o.OrderID > new Random(15).Next(5)) + .ToList()).Message)); } } - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'where ([o].OrderID > value(System.Random).Next(0, 10))'")] + [ConditionalFact] public virtual void Random_next_is_not_funcletized_6() { using (var context = CreateContext()) { - var query = context.Orders - .Where(o => o.OrderID > new Random(15).Next(0, 10)) - .ToList(); + Assert.Equal( + CoreStrings.TranslationFailed("(o) => o.OrderID > new Random(15).Next( minValue: 0, maxValue: 10)"), + RemoveNewLines( + Assert.Throws( + () => context.Orders + .Where(o => o.OrderID > new Random(15).Next(0, 10)) + .ToList()).Message)); } } @@ -4228,7 +4310,7 @@ public virtual void Parameter_extraction_can_throw_exception_from_user_code_2() } } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'SingleOrDefault()'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] public virtual Task Subquery_member_pushdown_does_not_change_original_subquery_model(bool isAsync) { @@ -4247,7 +4329,7 @@ public virtual Task Subquery_member_pushdown_does_not_change_original_subquery_m assertOrder: true); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'SingleOrDefault()'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] public virtual Task Subquery_member_pushdown_does_not_change_original_subquery_model2(bool isAsync) { @@ -4748,7 +4830,7 @@ from e2 in grouping.DefaultIfEmpty() e => e.City1 + " " + e.City2); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'from Customer c in ClientDefaultIfEmpty([grouping])'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task No_orderby_added_for_client_side_GroupJoin_dependent_to_principal_LOJ(bool isAsync) { @@ -4768,7 +4850,7 @@ from c in ClientDefaultIfEmpty(grouping) e => e.Id1 + " " + e.Id2); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'from Customer c in ClientDefaultIfEmpty([grouping])'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task No_orderby_added_for_client_side_GroupJoin_dependent_to_principal_LOJ_with_additional_join_condition1( bool isAsync) @@ -4797,7 +4879,7 @@ from c in ClientDefaultIfEmpty(grouping) e => e.Id1 + " " + e.Id2); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'from Customer c in ClientDefaultIfEmpty([grouping])'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task No_orderby_added_for_client_side_GroupJoin_dependent_to_principal_LOJ_with_additional_join_condition2( bool isAsync) @@ -4826,7 +4908,7 @@ from c in ClientDefaultIfEmpty(grouping) e => e.Id1 + " " + e.Id2); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'from Employee e2 in ClientDefaultIfEmpty([grouping])'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task Orderby_added_for_client_side_GroupJoin_principal_to_dependent_LOJ(bool isAsync) { @@ -5169,7 +5251,7 @@ private static IEnumerable ClientDefaultIfEmpty(IEnumerable< return source?.Count() == 0 ? new[] { default(TElement) } : source; } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'where {from Customer c in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.Northwind.Customer]) where {from Customer cc in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.Northwind.Customer]) select [cc].CustomerID => Any()} select {from Customer cc in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.Northwind.Customer]) select [cc].CustomerID} => Any()}'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] public virtual Task Complex_query_with_repeated_query_model_compiles_correctly(bool isAsync) { @@ -5186,7 +5268,7 @@ where customers.Any() entryCount: 1); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'where {from Customer c in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.Northwind.Customer]) where {from Customer cc in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.Northwind.Customer]) where {from Customer inner in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.Northwind.Customer]) orderby [inner].CustomerID asc select [inner] => Take(10) => Distinct() => Any()} select [cc].CustomerID => Any()} select {from Customer cc in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.Northwind.Customer]) where {from Customer inner in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.Northwind.Customer]) orderby [inner].CustomerID asc select [inner] => Take(10) => Distinct() => Any()} select [cc].CustomerID} => Any()}'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] public virtual Task Complex_query_with_repeated_nested_query_model_compiles_correctly(bool isAsync) { @@ -5769,7 +5851,7 @@ public virtual Task OrderBy_Dto_projection_skip_take(bool isAsync) elementSorter: e => e.Id); } - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'join Customer y.Customer in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.Northwind.Customer]) on Property([y], \"CustomerID\") equals Property([y.Customer], \"CustomerID\")'")] + [ConditionalFact(Skip = "Issue #17243")] public virtual void Streaming_chained_sync_query() { using (var context = CreateContext()) @@ -5916,16 +5998,20 @@ public virtual Task Let_entity_equality_to_other_entity(bool isAsync) }); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'orderby ClientOrderBy([c]) asc'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] - public virtual Task SelectMany_after_client_method(bool isAsync) + public virtual async Task SelectMany_after_client_method(bool isAsync) { - return AssertQueryScalar( - isAsync, - cs => cs.OrderBy(c => ClientOrderBy(c)) - .SelectMany(c => c.Orders) - .Distinct() - .Select(o => o.OrderDate)); + Assert.Equal( + CoreStrings.TranslationFailed("(c) => ClientOrderBy(c)"), + RemoveNewLines( + (await Assert.ThrowsAsync( + () => AssertQueryScalar( + isAsync, + cs => cs.OrderBy(c => ClientOrderBy(c)) + .SelectMany(c => c.Orders) + .Distinct() + .Select(o => o.OrderDate)))).Message)); } private static string ClientOrderBy(Customer c) @@ -5933,7 +6019,7 @@ private static string ClientOrderBy(Customer c) return c.CustomerID; } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'GroupBy([o].CustomerID, [o])'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task Client_where_GroupBy_Group_ordering_works(bool isAsync) { @@ -5955,7 +6041,7 @@ select g.OrderByDescending(x => x.OrderID), elementAsserter: CollectionAsserter(elementAsserter: (e, a) => Assert.Equal(e.OrderID, a.OrderID))); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'where ClientEvalPredicate([o])'")] + [ConditionalTheory(Skip = "Issue #17068")] [MemberData(nameof(IsAsyncData))] public virtual Task Client_where_GroupBy_Group_ordering_works_2(bool isAsync) { @@ -5971,20 +6057,24 @@ select g.OrderByDescending(x => x.OrderID), elementAsserter: CollectionAsserter(elementAsserter: (e, a) => Assert.Equal(e.OrderID, a.OrderID))); } - [ConditionalTheory(Skip = "Issue #14935. Cannot eval 'orderby value(Microsoft.EntityFrameworkCore.Query.SimpleQuerySqlServerTest).ClientEvalSelector([o]) asc'")] + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] - public virtual Task Client_OrderBy_GroupBy_Group_ordering_works(bool isAsync) + public virtual async Task Client_OrderBy_GroupBy_Group_ordering_works(bool isAsync) { - return AssertQuery( - isAsync, - os => from o in os - orderby ClientEvalSelector(o) - group o by o.CustomerID - into g - orderby g.Key - select g.OrderByDescending(x => x.OrderID), - assertOrder: true, - elementAsserter: CollectionAsserter(elementAsserter: (e, a) => Assert.Equal(e.OrderID, a.OrderID))); + Assert.StartsWith("The LINQ expression ", + RemoveNewLines( + (await Assert.ThrowsAsync( + () => AssertQuery( + isAsync, + os => from o in os + orderby ClientEvalSelector(o) + group o by o.CustomerID + into g + orderby g.Key + select g.OrderByDescending(x => x.OrderID), + assertOrder: true, + elementAsserter: CollectionAsserter(elementAsserter: (e, a) => Assert.Equal(e.OrderID, a.OrderID))))) + .Message)); } diff --git a/test/EFCore.Specification.Tests/TestUtilities/QueryTestGeneration/ProceduralQueryExpressionGenerator.cs b/test/EFCore.Specification.Tests/TestUtilities/QueryTestGeneration/ProceduralQueryExpressionGenerator.cs index b9177bb05ca..1724d4f07d8 100644 --- a/test/EFCore.Specification.Tests/TestUtilities/QueryTestGeneration/ProceduralQueryExpressionGenerator.cs +++ b/test/EFCore.Specification.Tests/TestUtilities/QueryTestGeneration/ProceduralQueryExpressionGenerator.cs @@ -5,6 +5,7 @@ using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; +using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Query; namespace Microsoft.EntityFrameworkCore.TestUtilities.QueryTestGeneration @@ -468,7 +469,7 @@ public void Execute(IQueryable query, DbContext context, str } // printed just for debugging purposes - var queryString = new ExpressionPrinter().Print(newExpression); + var queryString = newExpression.Print(); try { diff --git a/test/EFCore.SqlServer.FunctionalTests/BuiltInDataTypesSqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/BuiltInDataTypesSqlServerTest.cs index ffaeeb92ab4..48cb95e2b03 100644 --- a/test/EFCore.SqlServer.FunctionalTests/BuiltInDataTypesSqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/BuiltInDataTypesSqlServerTest.cs @@ -449,15 +449,11 @@ public virtual void Can_query_using_any_mapped_data_type() StringEnum16? param60 = StringEnum16.Value2; Assert.Same(entity, context.Set().Single(e => e.Int == 999 && e.EnumAsVarcharMax == param60)); - // Issue #14935. Cannot eval 'where [e].SqlVariantString.Equals(__param61_0)' - // Added AsEnumerable() object param61 = "Bang!"; - Assert.Same(entity, context.Set().AsEnumerable().Single(e => e.Int == 999 && e.SqlVariantString.Equals(param61))); + Assert.Same(entity, context.Set().Single(e => e.Int == 999 && e.SqlVariantString.Equals(param61))); - // Issue #14935. Cannot eval 'where [e].SqlVariantInt.Equals(__param62_0)' - // Added AsEnumerable() object param62 = 887876; - Assert.Same(entity, context.Set().AsEnumerable().Single(e => e.Int == 999 && e.SqlVariantInt.Equals(param62))); + Assert.Same(entity, context.Set().Single(e => e.Int == 999 && e.SqlVariantInt.Equals(param62))); } } @@ -662,15 +658,10 @@ public virtual void Can_query_using_any_mapped_data_types_with_nulls() StringEnum16? param60 = null; Assert.Same(entity, context.Set().Single(e => e.Int == 911 && e.EnumAsVarcharMax == param60)); - // Issue #14935. Cannot eval 'where ([e].SqlVariantString == __param61_0)' - // Added AsEnumerable() object param61 = null; - Assert.Same(entity, context.Set().AsEnumerable().Single(e => e.Int == 911 && e.SqlVariantString == param61)); - - // Issue #14935. Cannot eval 'where ([e].SqlVariantInt == __param62_0)' - // Added AsEnumerable() + Assert.Same(entity, context.Set().Single(e => e.Int == 911 && e.SqlVariantString == param61)); object param62 = null; - Assert.Same(entity, context.Set().AsEnumerable().Single(e => e.Int == 911 && e.SqlVariantInt == param62)); + Assert.Same(entity, context.Set().Single(e => e.Int == 911 && e.SqlVariantInt == param62)); } } diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/AsyncSimpleQuerySqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/AsyncSimpleQuerySqlServerTest.cs index e62cdccb77d..1e97988c357 100644 --- a/test/EFCore.SqlServer.FunctionalTests/Query/AsyncSimpleQuerySqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/Query/AsyncSimpleQuerySqlServerTest.cs @@ -4,12 +4,10 @@ using System; using System.Linq; using System.Threading.Tasks; -using Microsoft.EntityFrameworkCore.Internal; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Storage; using Microsoft.EntityFrameworkCore.TestModels.Northwind; using Microsoft.EntityFrameworkCore.TestUtilities; -using Microsoft.EntityFrameworkCore.TestUtilities.Xunit; using Xunit; using Xunit.Abstractions; @@ -28,6 +26,24 @@ public AsyncSimpleQuerySqlServerTest( //Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); } + [ConditionalFact(Skip = "Issue#16314")] + public override Task Throws_on_concurrent_query_list() + { + return Task.CompletedTask; + } + + [ConditionalFact(Skip = "Issue#16314")] + public override Task Concat_non_entity() + { + return Task.CompletedTask; + } + + [ConditionalFact(Skip = "Issue#16314")] + public override Task Concat_simple() + { + return Task.CompletedTask; + } + [ConditionalFact(Skip = "Issue#16314")] public Task Query_compiler_concurrency() { @@ -83,7 +99,7 @@ public Task Single_Predicate_Cancellation() () => Single_Predicate_Cancellation_test(Fixture.TestSqlLoggerFactory.CancelQuery())); } - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'Except({from Customer c in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.Northwind.Customer]) where ([c].City == \"México D.F.\") select [c].CustomerID})'")] + [ConditionalFact] public async Task Concurrent_async_queries_are_serialized2() { using (var context = CreateContext()) diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/CompiledQuerySqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/CompiledQuerySqlServerTest.cs index c4a0199c4c7..2ce143557e6 100644 --- a/test/EFCore.SqlServer.FunctionalTests/Query/CompiledQuerySqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/Query/CompiledQuerySqlServerTest.cs @@ -110,18 +110,6 @@ FROM [Customers] AS [c] WHERE ([c].[CustomerID] = @__customerID) AND @__customerID IS NOT NULL"); } - public override void Query_with_array_parameter() - { - base.Query_with_array_parameter(); - - AssertSql( - @"SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] -FROM [Customers] AS [c]", - // - @"SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] -FROM [Customers] AS [c]"); - } - public override void Query_with_contains() { base.Query_with_contains(); diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/ComplexNavigationsQuerySqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/ComplexNavigationsQuerySqlServerTest.cs index e9e730277f4..2f674df8ddb 100644 --- a/test/EFCore.SqlServer.FunctionalTests/Query/ComplexNavigationsQuerySqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/Query/ComplexNavigationsQuerySqlServerTest.cs @@ -2527,32 +2527,6 @@ FROM [LevelThree] AS [l] )"); } - public override async Task Complex_query_with_optional_navigations_and_client_side_evaluation(bool isAsync) - { - await base.Complex_query_with_optional_navigations_and_client_side_evaluation(isAsync); - - AssertSql( - @"SELECT [l1].[Id], [l1].[Date], [l1].[Name], [l1].[OneToMany_Optional_Self_Inverse1Id], [l1].[OneToMany_Required_Self_Inverse1Id], [l1].[OneToOne_Optional_Self1Id] -FROM [LevelOne] AS [l1] -WHERE [l1].[Id] < 3", - // - @"@_outer_Id='1' - -SELECT [l2.OneToOne_Optional_FK2.OneToOne_Optional_FK30].[Id], [l2.OneToOne_Optional_FK2.OneToOne_Optional_FK30].[Id] -FROM [LevelTwo] AS [l20] -LEFT JOIN [LevelThree] AS [l2.OneToOne_Optional_FK20] ON [l20].[Id] = [l2.OneToOne_Optional_FK20].[Level2_Optional_Id] -LEFT JOIN [LevelFour] AS [l2.OneToOne_Optional_FK2.OneToOne_Optional_FK30] ON [l2.OneToOne_Optional_FK20].[Id] = [l2.OneToOne_Optional_FK2.OneToOne_Optional_FK30].[Level3_Optional_Id] -WHERE @_outer_Id = [l20].[OneToMany_Optional_Inverse2Id]", - // - @"@_outer_Id='2' - -SELECT [l2.OneToOne_Optional_FK2.OneToOne_Optional_FK30].[Id], [l2.OneToOne_Optional_FK2.OneToOne_Optional_FK30].[Id] -FROM [LevelTwo] AS [l20] -LEFT JOIN [LevelThree] AS [l2.OneToOne_Optional_FK20] ON [l20].[Id] = [l2.OneToOne_Optional_FK20].[Level2_Optional_Id] -LEFT JOIN [LevelFour] AS [l2.OneToOne_Optional_FK2.OneToOne_Optional_FK30] ON [l2.OneToOne_Optional_FK20].[Id] = [l2.OneToOne_Optional_FK2.OneToOne_Optional_FK30].[Level3_Optional_Id] -WHERE @_outer_Id = [l20].[OneToMany_Optional_Inverse2Id]"); - } - public override async Task Required_navigation_on_a_subquery_with_First_in_projection(bool isAsync) { await base.Required_navigation_on_a_subquery_with_First_in_projection(isAsync); @@ -3942,20 +3916,6 @@ FROM [LevelOne] AS [l11] FROM [LevelFour] AS [l1.OneToMany_Required1.OneToOne_Optional_FK2.OneToMany_Optional30]"); } - public override async Task SelectMany_subquery_with_custom_projection(bool isAsync) - { - await base.SelectMany_subquery_with_custom_projection(isAsync); - - AssertSql( - @"@__p_0='1' - -SELECT TOP(@__p_0) [l].[Name] -FROM [LevelOne] AS [l1] -CROSS JOIN [LevelTwo] AS [l] -WHERE [l1].[Id] = [l].[OneToMany_Optional_Inverse2Id] -ORDER BY [l1].[Id]"); - } - public override async Task Null_check_in_anonymous_type_projection_should_not_be_removed(bool isAsync) { await base.Null_check_in_anonymous_type_projection_should_not_be_removed(isAsync); diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/DbFunctionsSqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/DbFunctionsSqlServerTest.cs index 8a488df4cd4..d056cfc996f 100644 --- a/test/EFCore.SqlServer.FunctionalTests/Query/DbFunctionsSqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/Query/DbFunctionsSqlServerTest.cs @@ -166,7 +166,7 @@ public void FreeText_throws_for_no_FullText_index() } } - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'LastOrDefault()'")] + [ConditionalFact] [SqlServerCondition(SqlServerCondition.SupportsFullTextSearch)] public void FreeText_through_navigation() { @@ -189,7 +189,7 @@ FROM [Employees] AS [c] } } - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'LastOrDefault()'")] + [ConditionalFact] [SqlServerCondition(SqlServerCondition.SupportsFullTextSearch)] public void FreeText_through_navigation_with_language_terms() { @@ -392,7 +392,7 @@ FROM [Employees] AS [c] } } - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'LastOrDefault()'")] + [ConditionalFact] [SqlServerCondition(SqlServerCondition.SupportsFullTextSearch)] public void Contains_through_navigation() { @@ -571,7 +571,7 @@ public virtual void IsDate_not_valid() .Select(c => EF.Functions.IsDate(c.CustomerID)) .FirstOrDefault(); - Assert.Equal(actual, false); + Assert.Equal(actual, false); AssertSql( @"SELECT TOP(1) CAST(ISDATE([o].[CustomerID]) AS bit) @@ -597,7 +597,7 @@ public virtual void IsDate_valid() @"SELECT TOP(1) CAST(ISDATE(CONVERT(VARCHAR(100), [o].[OrderDate])) AS bit) FROM [Orders] AS [o] WHERE CAST(ISDATE(CONVERT(VARCHAR(100), [o].[OrderDate])) AS bit) = CAST(1 AS bit)"); - + } } diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/FiltersSqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/FiltersSqlServerTest.cs index 9e3979172ea..3157522b6a0 100644 --- a/test/EFCore.SqlServer.FunctionalTests/Query/FiltersSqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/Query/FiltersSqlServerTest.cs @@ -29,15 +29,6 @@ FROM [Customers] AS [c] WHERE ((@__ef_filter__TenantPrefix_0 = N'') AND @__ef_filter__TenantPrefix_0 IS NOT NULL) OR ([c].[CompanyName] IS NOT NULL AND (@__ef_filter__TenantPrefix_0 IS NOT NULL AND (([c].[CompanyName] LIKE [c].[CompanyName] + N'%') AND (((LEFT([c].[CompanyName], LEN(@__ef_filter__TenantPrefix_0)) = @__ef_filter__TenantPrefix_0) AND (LEFT([c].[CompanyName], LEN(@__ef_filter__TenantPrefix_0)) IS NOT NULL AND @__ef_filter__TenantPrefix_0 IS NOT NULL)) OR (LEFT([c].[CompanyName], LEN(@__ef_filter__TenantPrefix_0)) IS NULL AND @__ef_filter__TenantPrefix_0 IS NULL)))))"); } - public override void Client_eval() - { - base.Client_eval(); - - AssertSql( - @"SELECT [p].[ProductID], [p].[Discontinued], [p].[ProductName], [p].[SupplierID], [p].[UnitPrice], [p].[UnitsInStock] -FROM [Products] AS [p]"); - } - public override void Materialized_query() { base.Materialized_query(); @@ -191,25 +182,6 @@ WHERE [t].[CompanyName] IS NOT NULL WHERE [o0].[Quantity] > @__ef_filter___quantity_0"); } - public override void Included_one_to_many_query_with_client_eval() - { - base.Included_one_to_many_query_with_client_eval(); - - AssertSql( - @"SELECT [p].[ProductID], [p].[Discontinued], [p].[ProductName], [p].[SupplierID], [p].[UnitPrice], [p].[UnitsInStock] -FROM [Products] AS [p] -ORDER BY [p].[ProductID]", - // - @"SELECT [p1].[ProductID], [p1].[Discontinued], [p1].[ProductName], [p1].[SupplierID], [p1].[UnitPrice], [p1].[UnitsInStock] -FROM [Products] AS [p1]", - // - @"@__ef_filter___quantity_0='50' (DbType = Int16) - -SELECT [od].[OrderID], [od].[ProductID], [od].[Discount], [od].[Quantity], [od].[UnitPrice] -FROM [Order Details] AS [od] -WHERE [od].[Quantity] > @__ef_filter___quantity_0"); - } - public override void Navs_query() { base.Navs_query(); diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/GearsOfWarQuerySqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/GearsOfWarQuerySqlServerTest.cs index 583029bd2d5..71915073291 100644 --- a/test/EFCore.SqlServer.FunctionalTests/Query/GearsOfWarQuerySqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/Query/GearsOfWarQuerySqlServerTest.cs @@ -12,7 +12,6 @@ public class GearsOfWarQuerySqlServerTest : GearsOfWarQueryTestBase 0) AND (@_outer_FullName = [w0].[OwnerFullName]) -) AS [t0]", - // - @"@_outer_FullName='Marcus Fenix' (Size = 450) - -SELECT TOP(2) [t0].[IsAutomatic] -FROM ( - SELECT DISTINCT [w0].* - FROM [Weapons] AS [w0] - WHERE (CHARINDEX(N'Lancer', [w0].[Name]) > 0) AND (@_outer_FullName = [w0].[OwnerFullName]) -) AS [t0]"); +WHERE [g].[Discriminator] IN (N'Gear', N'Officer') AND (([g].[HasSoulPatch] = CAST(1 AS bit)) AND (( + SELECT TOP(2) [t].[IsAutomatic] + FROM ( + SELECT DISTINCT [w].[Id], [w].[AmmunitionType], [w].[IsAutomatic], [w].[Name], [w].[OwnerFullName], [w].[SynergyWithId] + FROM [Weapons] AS [w] + WHERE (([g].[FullName] = [w].[OwnerFullName]) AND [w].[OwnerFullName] IS NOT NULL) AND (CHARINDEX(N'Lancer', [w].[Name]) > 0) + ) AS [t]) = CAST(1 AS bit))) +ORDER BY [g].[Nickname]"); } public override async Task Where_subquery_distinct_singleordefault_boolean2(bool isAsync) @@ -1540,20 +1477,11 @@ public override async Task Where_subquery_distinct_singleordefault_boolean2(bool AssertSql( @"SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOrBirthName], [g].[Discriminator], [g].[FullName], [g].[HasSoulPatch], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank] FROM [Gears] AS [g] -WHERE [g].[Discriminator] IN (N'Officer', N'Gear') AND ([g].[HasSoulPatch] = 1) -ORDER BY [g].[Nickname]", - // - @"@_outer_FullName='Damon Baird' (Size = 450) - -SELECT DISTINCT TOP(2) [w0].[IsAutomatic] -FROM [Weapons] AS [w0] -WHERE (CHARINDEX(N'Lancer', [w0].[Name]) > 0) AND (@_outer_FullName = [w0].[OwnerFullName])", - // - @"@_outer_FullName='Marcus Fenix' (Size = 450) - -SELECT DISTINCT TOP(2) [w0].[IsAutomatic] -FROM [Weapons] AS [w0] -WHERE (CHARINDEX(N'Lancer', [w0].[Name]) > 0) AND (@_outer_FullName = [w0].[OwnerFullName])"); +WHERE [g].[Discriminator] IN (N'Gear', N'Officer') AND (([g].[HasSoulPatch] = CAST(1 AS bit)) AND (( + SELECT DISTINCT TOP(2) [w].[IsAutomatic] + FROM [Weapons] AS [w] + WHERE (([g].[FullName] = [w].[OwnerFullName]) AND [w].[OwnerFullName] IS NOT NULL) AND (CHARINDEX(N'Lancer', [w].[Name]) > 0)) = CAST(1 AS bit))) +ORDER BY [g].[Nickname]"); } public override async Task Where_subquery_distinct_singleordefault_boolean_with_pushdown(bool isAsync) @@ -1563,26 +1491,14 @@ public override async Task Where_subquery_distinct_singleordefault_boolean_with_ AssertSql( @"SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOrBirthName], [g].[Discriminator], [g].[FullName], [g].[HasSoulPatch], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank] FROM [Gears] AS [g] -WHERE [g].[Discriminator] IN (N'Officer', N'Gear') AND ([g].[HasSoulPatch] = 1) -ORDER BY [g].[Nickname]", - // - @"@_outer_FullName='Damon Baird' (Size = 450) - -SELECT TOP(2) [t0].[IsAutomatic] -FROM ( - SELECT DISTINCT [w0].* - FROM [Weapons] AS [w0] - WHERE (CHARINDEX(N'Lancer', [w0].[Name]) > 0) AND (@_outer_FullName = [w0].[OwnerFullName]) -) AS [t0]", - // - @"@_outer_FullName='Marcus Fenix' (Size = 450) - -SELECT TOP(2) [t0].[IsAutomatic] -FROM ( - SELECT DISTINCT [w0].* - FROM [Weapons] AS [w0] - WHERE (CHARINDEX(N'Lancer', [w0].[Name]) > 0) AND (@_outer_FullName = [w0].[OwnerFullName]) -) AS [t0]"); +WHERE [g].[Discriminator] IN (N'Gear', N'Officer') AND (([g].[HasSoulPatch] = CAST(1 AS bit)) AND (( + SELECT TOP(2) [t].[IsAutomatic] + FROM ( + SELECT DISTINCT [w].[Id], [w].[AmmunitionType], [w].[IsAutomatic], [w].[Name], [w].[OwnerFullName], [w].[SynergyWithId] + FROM [Weapons] AS [w] + WHERE (([g].[FullName] = [w].[OwnerFullName]) AND [w].[OwnerFullName] IS NOT NULL) AND (CHARINDEX(N'Lancer', [w].[Name]) > 0) + ) AS [t]) = CAST(1 AS bit))) +ORDER BY [g].[Nickname]"); } public override void Where_subquery_distinct_lastordefault_boolean() @@ -1666,40 +1582,6 @@ FROM [Weapons] AS [w6] // @"@_outer_FullName5='Marcus Fenix' (Size = 450) -SELECT [w5].[Id], [w5].[AmmunitionType], [w5].[IsAutomatic], [w5].[Name], [w5].[OwnerFullName], [w5].[SynergyWithId] -FROM [Weapons] AS [w5] -WHERE @_outer_FullName5 = [w5].[OwnerFullName]"); - } - - public override async Task Where_subquery_concat_firstordefault_boolean(bool isAsync) - { - await base.Where_subquery_concat_firstordefault_boolean(isAsync); - - AssertSql( - @"SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOrBirthName], [g].[Discriminator], [g].[FullName], [g].[HasSoulPatch], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank] -FROM [Gears] AS [g] -WHERE [g].[Discriminator] IN (N'Officer', N'Gear') AND ([g].[HasSoulPatch] = 1)", - // - @"@_outer_FullName6='Damon Baird' (Size = 450) - -SELECT [w6].[Id], [w6].[AmmunitionType], [w6].[IsAutomatic], [w6].[Name], [w6].[OwnerFullName], [w6].[SynergyWithId] -FROM [Weapons] AS [w6] -WHERE @_outer_FullName6 = [w6].[OwnerFullName]", - // - @"@_outer_FullName5='Damon Baird' (Size = 450) - -SELECT [w5].[Id], [w5].[AmmunitionType], [w5].[IsAutomatic], [w5].[Name], [w5].[OwnerFullName], [w5].[SynergyWithId] -FROM [Weapons] AS [w5] -WHERE @_outer_FullName5 = [w5].[OwnerFullName]", - // - @"@_outer_FullName6='Marcus Fenix' (Size = 450) - -SELECT [w6].[Id], [w6].[AmmunitionType], [w6].[IsAutomatic], [w6].[Name], [w6].[OwnerFullName], [w6].[SynergyWithId] -FROM [Weapons] AS [w6] -WHERE @_outer_FullName6 = [w6].[OwnerFullName]", - // - @"@_outer_FullName5='Marcus Fenix' (Size = 450) - SELECT [w5].[Id], [w5].[AmmunitionType], [w5].[IsAutomatic], [w5].[Name], [w5].[OwnerFullName], [w5].[SynergyWithId] FROM [Weapons] AS [w5] WHERE @_outer_FullName5 = [w5].[OwnerFullName]"); @@ -1710,13 +1592,16 @@ public override async Task Concat_with_count(bool isAsync) await base.Concat_with_count(isAsync); AssertSql( - @"SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOrBirthName], [g].[Discriminator], [g].[FullName], [g].[HasSoulPatch], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank] -FROM [Gears] AS [g] -WHERE [g].[Discriminator] IN (N'Officer', N'Gear')", - // - @"SELECT [g0].[Nickname], [g0].[SquadId], [g0].[AssignedCityName], [g0].[CityOrBirthName], [g0].[Discriminator], [g0].[FullName], [g0].[HasSoulPatch], [g0].[LeaderNickname], [g0].[LeaderSquadId], [g0].[Rank] -FROM [Gears] AS [g0] -WHERE [g0].[Discriminator] IN (N'Officer', N'Gear')"); + @"SELECT COUNT(*) +FROM ( + SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOrBirthName], [g].[Discriminator], [g].[FullName], [g].[HasSoulPatch], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank] + FROM [Gears] AS [g] + WHERE [g].[Discriminator] IN (N'Gear', N'Officer') + UNION ALL + SELECT [g0].[Nickname], [g0].[SquadId], [g0].[AssignedCityName], [g0].[CityOrBirthName], [g0].[Discriminator], [g0].[FullName], [g0].[HasSoulPatch], [g0].[LeaderNickname], [g0].[LeaderSquadId], [g0].[Rank] + FROM [Gears] AS [g0] + WHERE [g0].[Discriminator] IN (N'Gear', N'Officer') +) AS [t]"); } public override async Task Concat_scalars_with_count(bool isAsync) @@ -1724,13 +1609,16 @@ public override async Task Concat_scalars_with_count(bool isAsync) await base.Concat_scalars_with_count(isAsync); AssertSql( - @"SELECT [g].[Nickname] -FROM [Gears] AS [g] -WHERE [g].[Discriminator] IN (N'Officer', N'Gear')", - // - @"SELECT [g2].[FullName] -FROM [Gears] AS [g2] -WHERE [g2].[Discriminator] IN (N'Officer', N'Gear')"); + @"SELECT COUNT(*) +FROM ( + SELECT [g].[Nickname] + FROM [Gears] AS [g] + WHERE [g].[Discriminator] IN (N'Gear', N'Officer') + UNION ALL + SELECT [g0].[FullName] + FROM [Gears] AS [g0] + WHERE [g0].[Discriminator] IN (N'Gear', N'Officer') +) AS [t]"); } public override async Task Concat_anonymous_with_count(bool isAsync) @@ -1738,13 +1626,16 @@ public override async Task Concat_anonymous_with_count(bool isAsync) await base.Concat_anonymous_with_count(isAsync); AssertSql( - @"SELECT [g].[Nickname] AS [Name], [g].[SquadId], [g].[AssignedCityName], [g].[CityOrBirthName], [g].[Discriminator], [g].[FullName], [g].[HasSoulPatch], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank] -FROM [Gears] AS [g] -WHERE [g].[Discriminator] IN (N'Officer', N'Gear')", - // - @"SELECT [g2].[Nickname], [g2].[SquadId], [g2].[AssignedCityName], [g2].[CityOrBirthName], [g2].[Discriminator], [g2].[FullName] AS [Name], [g2].[HasSoulPatch], [g2].[LeaderNickname], [g2].[LeaderSquadId], [g2].[Rank] -FROM [Gears] AS [g2] -WHERE [g2].[Discriminator] IN (N'Officer', N'Gear')"); + @"SELECT COUNT(*) +FROM ( + SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOrBirthName], [g].[Discriminator], [g].[FullName], [g].[HasSoulPatch], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank] + FROM [Gears] AS [g] + WHERE [g].[Discriminator] IN (N'Gear', N'Officer') + UNION ALL + SELECT [g0].[Nickname], [g0].[SquadId], [g0].[AssignedCityName], [g0].[CityOrBirthName], [g0].[Discriminator], [g0].[FullName], [g0].[HasSoulPatch], [g0].[LeaderNickname], [g0].[LeaderSquadId], [g0].[Rank] + FROM [Gears] AS [g0] + WHERE [g0].[Discriminator] IN (N'Gear', N'Officer') +) AS [t]"); } public override void Concat_with_scalar_projection() @@ -1755,52 +1646,6 @@ public override void Concat_with_scalar_projection() ""); } - public override async Task Select_navigation_with_concat_and_count(bool isAsync) - { - await base.Select_navigation_with_concat_and_count(isAsync); - - AssertSql( - @"SELECT [g].[FullName] -FROM [Gears] AS [g] -WHERE [g].[Discriminator] IN (N'Officer', N'Gear') AND ([g].[HasSoulPatch] = 0)", - // - @"@_outer_FullName2='Augustus Cole' (Size = 450) - -SELECT [w2].[Id], [w2].[AmmunitionType], [w2].[IsAutomatic], [w2].[Name], [w2].[OwnerFullName], [w2].[SynergyWithId] -FROM [Weapons] AS [w2] -WHERE @_outer_FullName2 = [w2].[OwnerFullName]", - // - @"@_outer_FullName1='Augustus Cole' (Size = 450) - -SELECT [w1].[Id], [w1].[AmmunitionType], [w1].[IsAutomatic], [w1].[Name], [w1].[OwnerFullName], [w1].[SynergyWithId] -FROM [Weapons] AS [w1] -WHERE @_outer_FullName1 = [w1].[OwnerFullName]", - // - @"@_outer_FullName2='Dominic Santiago' (Size = 450) - -SELECT [w2].[Id], [w2].[AmmunitionType], [w2].[IsAutomatic], [w2].[Name], [w2].[OwnerFullName], [w2].[SynergyWithId] -FROM [Weapons] AS [w2] -WHERE @_outer_FullName2 = [w2].[OwnerFullName]", - // - @"@_outer_FullName1='Dominic Santiago' (Size = 450) - -SELECT [w1].[Id], [w1].[AmmunitionType], [w1].[IsAutomatic], [w1].[Name], [w1].[OwnerFullName], [w1].[SynergyWithId] -FROM [Weapons] AS [w1] -WHERE @_outer_FullName1 = [w1].[OwnerFullName]", - // - @"@_outer_FullName2='Garron Paduk' (Size = 450) - -SELECT [w2].[Id], [w2].[AmmunitionType], [w2].[IsAutomatic], [w2].[Name], [w2].[OwnerFullName], [w2].[SynergyWithId] -FROM [Weapons] AS [w2] -WHERE @_outer_FullName2 = [w2].[OwnerFullName]", - // - @"@_outer_FullName1='Garron Paduk' (Size = 450) - -SELECT [w1].[Id], [w1].[AmmunitionType], [w1].[IsAutomatic], [w1].[Name], [w1].[OwnerFullName], [w1].[SynergyWithId] -FROM [Weapons] AS [w1] -WHERE @_outer_FullName1 = [w1].[OwnerFullName]"); - } - public override async Task Concat_with_groupings(bool isAsync) { await base.Concat_with_groupings(isAsync); @@ -1817,78 +1662,6 @@ WHERE [g0].[Discriminator] IN (N'Officer', N'Gear') ORDER BY [g0].[LeaderNickname]"); } - public override async Task Concat_with_collection_navigations(bool isAsync) - { - await base.Concat_with_collection_navigations(isAsync); - - AssertSql( - @"SELECT [g].[FullName] -FROM [Gears] AS [g] -WHERE [g].[Discriminator] IN (N'Officer', N'Gear') AND ([g].[HasSoulPatch] = 1)", - // - @"@_outer_FullName2='Damon Baird' (Size = 450) - -SELECT [w2].[Id], [w2].[AmmunitionType], [w2].[IsAutomatic], [w2].[Name], [w2].[OwnerFullName], [w2].[SynergyWithId] -FROM [Weapons] AS [w2] -WHERE @_outer_FullName2 = [w2].[OwnerFullName]", - // - @"@_outer_FullName1='Damon Baird' (Size = 450) - -SELECT [w1].[Id], [w1].[AmmunitionType], [w1].[IsAutomatic], [w1].[Name], [w1].[OwnerFullName], [w1].[SynergyWithId] -FROM [Weapons] AS [w1] -WHERE @_outer_FullName1 = [w1].[OwnerFullName]", - // - @"@_outer_FullName2='Marcus Fenix' (Size = 450) - -SELECT [w2].[Id], [w2].[AmmunitionType], [w2].[IsAutomatic], [w2].[Name], [w2].[OwnerFullName], [w2].[SynergyWithId] -FROM [Weapons] AS [w2] -WHERE @_outer_FullName2 = [w2].[OwnerFullName]", - // - @"@_outer_FullName1='Marcus Fenix' (Size = 450) - -SELECT [w1].[Id], [w1].[AmmunitionType], [w1].[IsAutomatic], [w1].[Name], [w1].[OwnerFullName], [w1].[SynergyWithId] -FROM [Weapons] AS [w1] -WHERE @_outer_FullName1 = [w1].[OwnerFullName]"); - } - - public override async Task Union_with_collection_navigations(bool isAsync) - { - await base.Union_with_collection_navigations(isAsync); - - AssertSql( - @"SELECT [o].[Nickname], [o].[SquadId] -FROM [Gears] AS [o] -WHERE [o].[Discriminator] = N'Officer'", - // - @"@_outer_Nickname2='Baird' (Size = 450) -@_outer_SquadId2='1' - -SELECT [g2].[Nickname], [g2].[SquadId], [g2].[AssignedCityName], [g2].[CityOrBirthName], [g2].[Discriminator], [g2].[FullName], [g2].[HasSoulPatch], [g2].[LeaderNickname], [g2].[LeaderSquadId], [g2].[Rank] -FROM [Gears] AS [g2] -WHERE [g2].[Discriminator] IN (N'Officer', N'Gear') AND ((@_outer_Nickname2 = [g2].[LeaderNickname]) AND (@_outer_SquadId2 = [g2].[LeaderSquadId]))", - // - @"@_outer_Nickname1='Baird' (Size = 450) -@_outer_SquadId1='1' - -SELECT [g1].[Nickname], [g1].[SquadId], [g1].[AssignedCityName], [g1].[CityOrBirthName], [g1].[Discriminator], [g1].[FullName], [g1].[HasSoulPatch], [g1].[LeaderNickname], [g1].[LeaderSquadId], [g1].[Rank] -FROM [Gears] AS [g1] -WHERE [g1].[Discriminator] IN (N'Officer', N'Gear') AND ((@_outer_Nickname1 = [g1].[LeaderNickname]) AND (@_outer_SquadId1 = [g1].[LeaderSquadId]))", - // - @"@_outer_Nickname2='Marcus' (Size = 450) -@_outer_SquadId2='1' - -SELECT [g2].[Nickname], [g2].[SquadId], [g2].[AssignedCityName], [g2].[CityOrBirthName], [g2].[Discriminator], [g2].[FullName], [g2].[HasSoulPatch], [g2].[LeaderNickname], [g2].[LeaderSquadId], [g2].[Rank] -FROM [Gears] AS [g2] -WHERE [g2].[Discriminator] IN (N'Officer', N'Gear') AND ((@_outer_Nickname2 = [g2].[LeaderNickname]) AND (@_outer_SquadId2 = [g2].[LeaderSquadId]))", - // - @"@_outer_Nickname1='Marcus' (Size = 450) -@_outer_SquadId1='1' - -SELECT [g1].[Nickname], [g1].[SquadId], [g1].[AssignedCityName], [g1].[CityOrBirthName], [g1].[Discriminator], [g1].[FullName], [g1].[HasSoulPatch], [g1].[LeaderNickname], [g1].[LeaderSquadId], [g1].[Rank] -FROM [Gears] AS [g1] -WHERE [g1].[Discriminator] IN (N'Officer', N'Gear') AND ((@_outer_Nickname1 = [g1].[LeaderNickname]) AND (@_outer_SquadId1 = [g1].[LeaderSquadId]))"); - } - public override async Task Select_subquery_distinct_firstordefault(bool isAsync) { await base.Select_subquery_distinct_firstordefault(isAsync); @@ -3170,17 +2943,6 @@ WHERE [g].[Discriminator] IN (N'Officer', N'Gear') ORDER BY [t].[GearNickName], [t].[GearSquadId]"); } - public override async Task Client_side_equality_with_parameter_works_with_optional_navigations(bool isAsync) - { - await base.Client_side_equality_with_parameter_works_with_optional_navigations(isAsync); - - AssertSql( - @"SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOrBirthName], [g].[Discriminator], [g].[FullName], [g].[HasSoulPatch], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank], [g.Tag].[Note] -FROM [Gears] AS [g] -LEFT JOIN [Tags] AS [g.Tag] ON ([g].[Nickname] = [g.Tag].[GearNickName]) AND ([g].[SquadId] = [g.Tag].[GearSquadId]) -WHERE [g].[Discriminator] IN (N'Officer', N'Gear')"); - } - public override async Task Contains_with_local_nullable_guid_list_closure(bool isAsync) { await base.Contains_with_local_nullable_guid_list_closure(isAsync); @@ -3425,108 +3187,6 @@ public override async Task Select_length_of_string_property(bool isAsync) FROM [Weapons] AS [w]"); } - public override async Task Client_method_on_collection_navigation_in_predicate(bool isAsync) - { - await base.Client_method_on_collection_navigation_in_predicate(isAsync); - - AssertSql( - @"SELECT [g].[FullName], [g].[Nickname] -FROM [Gears] AS [g] -WHERE [g].[Discriminator] IN (N'Officer', N'Gear') AND ([g].[HasSoulPatch] = 1)", - // - @"@_outer_FullName='Damon Baird' (Size = 450) - -SELECT [w].[Id], [w].[AmmunitionType], [w].[IsAutomatic], [w].[Name], [w].[OwnerFullName], [w].[SynergyWithId] -FROM [Weapons] AS [w] -WHERE @_outer_FullName = [w].[OwnerFullName]", - // - @"@_outer_FullName='Marcus Fenix' (Size = 450) - -SELECT [w].[Id], [w].[AmmunitionType], [w].[IsAutomatic], [w].[Name], [w].[OwnerFullName], [w].[SynergyWithId] -FROM [Weapons] AS [w] -WHERE @_outer_FullName = [w].[OwnerFullName]"); - } - - public override async Task Client_method_on_collection_navigation_in_predicate_accessed_by_ef_property(bool isAsync) - { - await base.Client_method_on_collection_navigation_in_predicate_accessed_by_ef_property(isAsync); - - AssertSql( - @"SELECT [g].[FullName], [g].[Nickname] -FROM [Gears] AS [g] -WHERE [g].[Discriminator] IN (N'Officer', N'Gear') AND ([g].[HasSoulPatch] = CAST(0 AS bit))", - // - @"@_outer_FullName='Augustus Cole' (Size = 450) - -SELECT [w].[Id], [w].[AmmunitionType], [w].[IsAutomatic], [w].[Name], [w].[OwnerFullName], [w].[SynergyWithId] -FROM [Weapons] AS [w] -WHERE @_outer_FullName = [w].[OwnerFullName]", - // - @"@_outer_FullName='Dominic Santiago' (Size = 450) - -SELECT [w].[Id], [w].[AmmunitionType], [w].[IsAutomatic], [w].[Name], [w].[OwnerFullName], [w].[SynergyWithId] -FROM [Weapons] AS [w] -WHERE @_outer_FullName = [w].[OwnerFullName]", - // - @"@_outer_FullName='Garron Paduk' (Size = 450) - -SELECT [w].[Id], [w].[AmmunitionType], [w].[IsAutomatic], [w].[Name], [w].[OwnerFullName], [w].[SynergyWithId] -FROM [Weapons] AS [w] -WHERE @_outer_FullName = [w].[OwnerFullName]"); - } - - public override async Task Client_method_on_collection_navigation_in_order_by(bool isAsync) - { - await base.Client_method_on_collection_navigation_in_order_by(isAsync); - - AssertSql( - @"SELECT [g].[FullName], [g].[Nickname] -FROM [Gears] AS [g] -WHERE [g].[Discriminator] IN (N'Officer', N'Gear') AND ([g].[HasSoulPatch] = CAST(0 AS bit))", - // - @"@_outer_FullName='Augustus Cole' (Size = 450) - -SELECT [w].[Id], [w].[AmmunitionType], [w].[IsAutomatic], [w].[Name], [w].[OwnerFullName], [w].[SynergyWithId] -FROM [Weapons] AS [w] -WHERE @_outer_FullName = [w].[OwnerFullName]", - // - @"@_outer_FullName='Dominic Santiago' (Size = 450) - -SELECT [w].[Id], [w].[AmmunitionType], [w].[IsAutomatic], [w].[Name], [w].[OwnerFullName], [w].[SynergyWithId] -FROM [Weapons] AS [w] -WHERE @_outer_FullName = [w].[OwnerFullName]", - // - @"@_outer_FullName='Garron Paduk' (Size = 450) - -SELECT [w].[Id], [w].[AmmunitionType], [w].[IsAutomatic], [w].[Name], [w].[OwnerFullName], [w].[SynergyWithId] -FROM [Weapons] AS [w] -WHERE @_outer_FullName = [w].[OwnerFullName]"); - } - - public override async Task Client_method_on_collection_navigation_in_additional_from_clause(bool isAsync) - { - await base.Client_method_on_collection_navigation_in_additional_from_clause(isAsync); - - AssertSql( - @"SELECT [g].[Nickname] AS [g], [g].[SquadId] -FROM [Gears] AS [g] -WHERE [g].[Discriminator] = N'Officer'", - // - @"@_outer_Nickname='Baird' (Size = 450) -@_outer_SquadId='1' - -SELECT [g0].[Nickname], [g0].[SquadId], [g0].[AssignedCityName], [g0].[CityOrBirthName], [g0].[Discriminator], [g0].[FullName], [g0].[HasSoulPatch], [g0].[LeaderNickname], [g0].[LeaderSquadId], [g0].[Rank] -FROM [Gears] AS [g0] -WHERE [g0].[Discriminator] IN (N'Officer', N'Gear') AND ((@_outer_Nickname = [g0].[LeaderNickname]) AND (@_outer_SquadId = [g0].[LeaderSquadId]))", - // - @"@_outer_Nickname='Marcus' (Size = 450) -@_outer_SquadId='1' - -SELECT [g0].[Nickname], [g0].[SquadId], [g0].[AssignedCityName], [g0].[CityOrBirthName], [g0].[Discriminator], [g0].[FullName], [g0].[HasSoulPatch], [g0].[LeaderNickname], [g0].[LeaderSquadId], [g0].[Rank] -FROM [Gears] AS [g0] -WHERE [g0].[Discriminator] IN (N'Officer', N'Gear') AND ((@_outer_Nickname = [g0].[LeaderNickname]) AND (@_outer_SquadId = [g0].[LeaderSquadId]))"); - } - public override async Task Client_method_on_collection_navigation_in_outer_join_key(bool isAsync) { await base.Client_method_on_collection_navigation_in_outer_join_key(isAsync); @@ -5588,21 +5248,6 @@ WHERE [g].[Discriminator] IN (N'Gear', N'Officer') AND ([g].[Discriminator] = N' ORDER BY [g].[Nickname], [g].[SquadId], [t1].[Id]"); } - public override async Task Include_with_concat(bool isAsync) - { - await base.Include_with_concat(isAsync); - - AssertSql( - @"SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOrBirthName], [g].[Discriminator], [g].[FullName], [g].[HasSoulPatch], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank], [g.Squad].[Id], [g.Squad].[InternalNumber], [g.Squad].[Name] -FROM [Gears] AS [g] -INNER JOIN [Squads] AS [g.Squad] ON [g].[SquadId] = [g.Squad].[Id] -WHERE [g].[Discriminator] IN (N'Officer', N'Gear')", - // - @"SELECT [g0].[Nickname], [g0].[SquadId], [g0].[AssignedCityName], [g0].[CityOrBirthName], [g0].[Discriminator], [g0].[FullName], [g0].[HasSoulPatch], [g0].[LeaderNickname], [g0].[LeaderSquadId], [g0].[Rank] -FROM [Gears] AS [g0] -WHERE [g0].[Discriminator] IN (N'Officer', N'Gear')"); - } - public override async Task Include_collection_with_concat(bool isAsync) { await base.Include_collection_with_concat(isAsync); @@ -5751,30 +5396,19 @@ public override async Task Join_on_entity_qsre_keys_inner_key_is_navigation_comp await base.Join_on_entity_qsre_keys_inner_key_is_navigation_composite_key(isAsync); AssertSql( - @"SELECT [t].[GearNickName], [t].[GearSquadId], [t].[Note] -FROM ( - SELECT [tt].* - FROM [Tags] AS [tt] - WHERE [tt].[Note] IN (N'Cole''s Tag', N'Dom''s Tag') -) AS [t]", - // - @"@_outer_GearNickName='Dom' (Size = 450) -@_outer_GearSquadId='1' (Nullable = true) - -SELECT TOP(1) [subQuery].[Nickname], [subQuery].[SquadId], [subQuery].[AssignedCityName], [subQuery].[CityOrBirthName], [subQuery].[Discriminator], [subQuery].[FullName], [subQuery].[HasSoulPatch], [subQuery].[LeaderNickname], [subQuery].[LeaderSquadId], [subQuery].[Rank] -FROM [Gears] AS [subQuery] -WHERE [subQuery].[Discriminator] IN (N'Officer', N'Gear') AND (([subQuery].[Nickname] = @_outer_GearNickName) AND ([subQuery].[SquadId] = @_outer_GearSquadId))", - // - @"@_outer_GearNickName='Cole Train' (Size = 450) -@_outer_GearSquadId='1' (Nullable = true) - -SELECT TOP(1) [subQuery].[Nickname], [subQuery].[SquadId], [subQuery].[AssignedCityName], [subQuery].[CityOrBirthName], [subQuery].[Discriminator], [subQuery].[FullName], [subQuery].[HasSoulPatch], [subQuery].[LeaderNickname], [subQuery].[LeaderSquadId], [subQuery].[Rank] -FROM [Gears] AS [subQuery] -WHERE [subQuery].[Discriminator] IN (N'Officer', N'Gear') AND (([subQuery].[Nickname] = @_outer_GearNickName) AND ([subQuery].[SquadId] = @_outer_GearSquadId))", - // - @"SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOrBirthName], [g].[Discriminator], [g].[FullName], [g].[HasSoulPatch], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank] + @"SELECT [g].[Nickname], [t1].[Note] FROM [Gears] AS [g] -WHERE [g].[Discriminator] IN (N'Officer', N'Gear')"); +INNER JOIN ( + SELECT [t].[Id], [t].[GearNickName], [t].[GearSquadId], [t].[Note], [t0].[Nickname], [t0].[SquadId], [t0].[AssignedCityName], [t0].[CityOrBirthName], [t0].[Discriminator], [t0].[FullName], [t0].[HasSoulPatch], [t0].[LeaderNickname], [t0].[LeaderSquadId], [t0].[Rank] + FROM [Tags] AS [t] + LEFT JOIN ( + SELECT [g0].[Nickname], [g0].[SquadId], [g0].[AssignedCityName], [g0].[CityOrBirthName], [g0].[Discriminator], [g0].[FullName], [g0].[HasSoulPatch], [g0].[LeaderNickname], [g0].[LeaderSquadId], [g0].[Rank] + FROM [Gears] AS [g0] + WHERE [g0].[Discriminator] IN (N'Gear', N'Officer') + ) AS [t0] ON (([t].[GearNickName] = [t0].[Nickname]) AND [t].[GearNickName] IS NOT NULL) AND (([t].[GearSquadId] = [t0].[SquadId]) AND [t].[GearSquadId] IS NOT NULL) + WHERE (([t].[Note] = N'Cole''s Tag') AND [t].[Note] IS NOT NULL) OR (([t].[Note] = N'Dom''s Tag') AND [t].[Note] IS NOT NULL) +) AS [t1] ON (([g].[Nickname] = [t1].[Nickname]) AND [t1].[Nickname] IS NOT NULL) AND (([g].[SquadId] = [t1].[SquadId]) AND [t1].[SquadId] IS NOT NULL) +WHERE [g].[Discriminator] IN (N'Gear', N'Officer')"); } public override async Task Join_on_entity_qsre_keys_inner_key_is_nested_navigation(bool isAsync) @@ -5816,40 +5450,6 @@ WHERE [g].[Discriminator] IN (N'Gear', N'Officer') ) AS [t0] ON [s].[Id] = [t0].[Id0]"); } - public override async Task Join_with_complex_key_selector(bool isAsync) - { - await base.Join_with_complex_key_selector(isAsync); - - AssertSql( - @"SELECT [ii].[Nickname], [ii].[SquadId], [ii].[AssignedCityName], [ii].[CityOrBirthName], [ii].[Discriminator], [ii].[FullName], [ii].[HasSoulPatch], [ii].[LeaderNickname], [ii].[LeaderSquadId], [ii].[Rank] -FROM [Gears] AS [ii] -WHERE [ii].[Discriminator] IN (N'Officer', N'Gear')", - // - @"SELECT [o].[Id] AS [Id0], [o].[InternalNumber], [o].[Name], [t0].[Id] -FROM [Squads] AS [o] -INNER JOIN ( - SELECT [t].* - FROM [Tags] AS [t] - WHERE [t].[Note] = N'Marcus'' Tag' -) AS [t0] ON CAST(1 AS bit) = CAST(1 AS bit)", - // - @"@_outer_Id='34c8d86e-a4ac-4be5-827f-584dda348a07' -@_outer_Id1='1' - -SELECT TOP(1) [v].[Nickname], [v].[SquadId], [v].[AssignedCityName], [v].[CityOrBirthName], [v].[Discriminator], [v].[FullName], [v].[HasSoulPatch], [v].[LeaderNickname], [v].[LeaderSquadId], [v].[Rank] -FROM [Gears] AS [v] -LEFT JOIN [Tags] AS [v.Tag] ON ([v].[Nickname] = [v.Tag].[GearNickName]) AND ([v].[SquadId] = [v.Tag].[GearSquadId]) -WHERE ([v].[Discriminator] IN (N'Officer', N'Gear') AND ([v.Tag].[Id] = @_outer_Id)) AND (@_outer_Id1 = [v].[SquadId])", - // - @"@_outer_Id='34c8d86e-a4ac-4be5-827f-584dda348a07' -@_outer_Id1='2' - -SELECT TOP(1) [v].[Nickname], [v].[SquadId], [v].[AssignedCityName], [v].[CityOrBirthName], [v].[Discriminator], [v].[FullName], [v].[HasSoulPatch], [v].[LeaderNickname], [v].[LeaderSquadId], [v].[Rank] -FROM [Gears] AS [v] -LEFT JOIN [Tags] AS [v.Tag] ON ([v].[Nickname] = [v.Tag].[GearNickName]) AND ([v].[SquadId] = [v.Tag].[GearSquadId]) -WHERE ([v].[Discriminator] IN (N'Officer', N'Gear') AND ([v.Tag].[Id] = @_outer_Id)) AND (@_outer_Id1 = [v].[SquadId])"); - } - public override void Include_with_group_by_on_entity_qsre() { base.Include_with_group_by_on_entity_qsre(); @@ -6185,46 +5785,6 @@ public override void Include_groupby_constant_null_of_non_mapped_type() ""); } - public override async Task Correlated_collection_order_by_constant_null_of_non_mapped_type(bool isAsync) - { - await base.Correlated_collection_order_by_constant_null_of_non_mapped_type(isAsync); - - AssertSql( - @"SELECT [s].[Nickname], [s].[FullName] -FROM [Gears] AS [s] -WHERE [s].[Discriminator] IN (N'Officer', N'Gear')", - // - @"@_outer_FullName='Damon Baird' (Size = 450) - -SELECT [w].[Name] -FROM [Weapons] AS [w] -WHERE @_outer_FullName = [w].[OwnerFullName]", - // - @"@_outer_FullName='Augustus Cole' (Size = 450) - -SELECT [w].[Name] -FROM [Weapons] AS [w] -WHERE @_outer_FullName = [w].[OwnerFullName]", - // - @"@_outer_FullName='Dominic Santiago' (Size = 450) - -SELECT [w].[Name] -FROM [Weapons] AS [w] -WHERE @_outer_FullName = [w].[OwnerFullName]", - // - @"@_outer_FullName='Marcus Fenix' (Size = 450) - -SELECT [w].[Name] -FROM [Weapons] AS [w] -WHERE @_outer_FullName = [w].[OwnerFullName]", - // - @"@_outer_FullName='Garron Paduk' (Size = 450) - -SELECT [w].[Name] -FROM [Weapons] AS [w] -WHERE @_outer_FullName = [w].[OwnerFullName]"); - } - public override void GroupBy_composite_key_with_Include() { base.GroupBy_composite_key_with_Include(); @@ -6483,27 +6043,15 @@ public override async Task Select_subquery_distinct_singleordefault_boolean1(boo await base.Select_subquery_distinct_singleordefault_boolean1(isAsync); AssertSql( - @"SELECT [g].[FullName] + @"SELECT ( + SELECT TOP(2) [t].[IsAutomatic] + FROM ( + SELECT DISTINCT [w].[Id], [w].[AmmunitionType], [w].[IsAutomatic], [w].[Name], [w].[OwnerFullName], [w].[SynergyWithId] + FROM [Weapons] AS [w] + WHERE (([g].[FullName] = [w].[OwnerFullName]) AND [w].[OwnerFullName] IS NOT NULL) AND (CHARINDEX(N'Lancer', [w].[Name]) > 0) + ) AS [t]) FROM [Gears] AS [g] -WHERE [g].[Discriminator] IN (N'Officer', N'Gear') AND ([g].[HasSoulPatch] = 1)", - // - @"@_outer_FullName='Damon Baird' (Size = 450) - -SELECT TOP(2) [t0].[IsAutomatic] -FROM ( - SELECT DISTINCT [w0].* - FROM [Weapons] AS [w0] - WHERE (CHARINDEX(N'Lancer', [w0].[Name]) > 0) AND (@_outer_FullName = [w0].[OwnerFullName]) -) AS [t0]", - // - @"@_outer_FullName='Marcus Fenix' (Size = 450) - -SELECT TOP(2) [t0].[IsAutomatic] -FROM ( - SELECT DISTINCT [w0].* - FROM [Weapons] AS [w0] - WHERE (CHARINDEX(N'Lancer', [w0].[Name]) > 0) AND (@_outer_FullName = [w0].[OwnerFullName]) -) AS [t0]"); +WHERE [g].[Discriminator] IN (N'Gear', N'Officer') AND ([g].[HasSoulPatch] = CAST(1 AS bit))"); } public override async Task Select_subquery_distinct_singleordefault_boolean2(bool isAsync) @@ -6511,21 +6059,12 @@ public override async Task Select_subquery_distinct_singleordefault_boolean2(boo await base.Select_subquery_distinct_singleordefault_boolean2(isAsync); AssertSql( - @"SELECT [g].[FullName] + @"SELECT ( + SELECT DISTINCT TOP(2) [w].[IsAutomatic] + FROM [Weapons] AS [w] + WHERE (([g].[FullName] = [w].[OwnerFullName]) AND [w].[OwnerFullName] IS NOT NULL) AND (CHARINDEX(N'Lancer', [w].[Name]) > 0)) FROM [Gears] AS [g] -WHERE [g].[Discriminator] IN (N'Officer', N'Gear') AND ([g].[HasSoulPatch] = 1)", - // - @"@_outer_FullName='Damon Baird' (Size = 450) - -SELECT DISTINCT TOP(2) [w0].[IsAutomatic] -FROM [Weapons] AS [w0] -WHERE (CHARINDEX(N'Lancer', [w0].[Name]) > 0) AND (@_outer_FullName = [w0].[OwnerFullName])", - // - @"@_outer_FullName='Marcus Fenix' (Size = 450) - -SELECT DISTINCT TOP(2) [w0].[IsAutomatic] -FROM [Weapons] AS [w0] -WHERE (CHARINDEX(N'Lancer', [w0].[Name]) > 0) AND (@_outer_FullName = [w0].[OwnerFullName])"); +WHERE [g].[Discriminator] IN (N'Gear', N'Officer') AND ([g].[HasSoulPatch] = CAST(1 AS bit))"); } public override async Task Select_subquery_distinct_singleordefault_boolean_with_pushdown(bool isAsync) @@ -6533,27 +6072,15 @@ public override async Task Select_subquery_distinct_singleordefault_boolean_with await base.Select_subquery_distinct_singleordefault_boolean_with_pushdown(isAsync); AssertSql( - @"SELECT [g].[FullName] + @"SELECT ( + SELECT TOP(2) [t].[IsAutomatic] + FROM ( + SELECT DISTINCT [w].[Id], [w].[AmmunitionType], [w].[IsAutomatic], [w].[Name], [w].[OwnerFullName], [w].[SynergyWithId] + FROM [Weapons] AS [w] + WHERE (([g].[FullName] = [w].[OwnerFullName]) AND [w].[OwnerFullName] IS NOT NULL) AND (CHARINDEX(N'Lancer', [w].[Name]) > 0) + ) AS [t]) FROM [Gears] AS [g] -WHERE [g].[Discriminator] IN (N'Officer', N'Gear') AND ([g].[HasSoulPatch] = 1)", - // - @"@_outer_FullName='Damon Baird' (Size = 450) - -SELECT TOP(2) [t1].[IsAutomatic] -FROM ( - SELECT DISTINCT [w1].* - FROM [Weapons] AS [w1] - WHERE (CHARINDEX(N'Lancer', [w1].[Name]) > 0) AND (@_outer_FullName = [w1].[OwnerFullName]) -) AS [t1]", - // - @"@_outer_FullName='Marcus Fenix' (Size = 450) - -SELECT TOP(2) [t1].[IsAutomatic] -FROM ( - SELECT DISTINCT [w1].* - FROM [Weapons] AS [w1] - WHERE (CHARINDEX(N'Lancer', [w1].[Name]) > 0) AND (@_outer_FullName = [w1].[OwnerFullName]) -) AS [t1]"); +WHERE [g].[Discriminator] IN (N'Gear', N'Officer') AND ([g].[HasSoulPatch] = CAST(1 AS bit))"); } public override async Task Select_subquery_distinct_singleordefault_boolean_empty1(bool isAsync) @@ -6561,27 +6088,15 @@ public override async Task Select_subquery_distinct_singleordefault_boolean_empt await base.Select_subquery_distinct_singleordefault_boolean_empty1(isAsync); AssertSql( - @"SELECT [g].[FullName] + @"SELECT ( + SELECT TOP(2) [t].[IsAutomatic] + FROM ( + SELECT DISTINCT [w].[Id], [w].[AmmunitionType], [w].[IsAutomatic], [w].[Name], [w].[OwnerFullName], [w].[SynergyWithId] + FROM [Weapons] AS [w] + WHERE (([g].[FullName] = [w].[OwnerFullName]) AND [w].[OwnerFullName] IS NOT NULL) AND (([w].[Name] = N'BFG') AND [w].[Name] IS NOT NULL) + ) AS [t]) FROM [Gears] AS [g] -WHERE [g].[Discriminator] IN (N'Officer', N'Gear') AND ([g].[HasSoulPatch] = 1)", - // - @"@_outer_FullName='Damon Baird' (Size = 450) - -SELECT TOP(2) [t0].[IsAutomatic] -FROM ( - SELECT DISTINCT [w0].* - FROM [Weapons] AS [w0] - WHERE ([w0].[Name] = N'BFG') AND (@_outer_FullName = [w0].[OwnerFullName]) -) AS [t0]", - // - @"@_outer_FullName='Marcus Fenix' (Size = 450) - -SELECT TOP(2) [t0].[IsAutomatic] -FROM ( - SELECT DISTINCT [w0].* - FROM [Weapons] AS [w0] - WHERE ([w0].[Name] = N'BFG') AND (@_outer_FullName = [w0].[OwnerFullName]) -) AS [t0]"); +WHERE [g].[Discriminator] IN (N'Gear', N'Officer') AND ([g].[HasSoulPatch] = CAST(1 AS bit))"); } public override async Task Select_subquery_distinct_singleordefault_boolean_empty2(bool isAsync) @@ -6589,21 +6104,12 @@ public override async Task Select_subquery_distinct_singleordefault_boolean_empt await base.Select_subquery_distinct_singleordefault_boolean_empty2(isAsync); AssertSql( - @"SELECT [g].[FullName] + @"SELECT ( + SELECT DISTINCT TOP(2) [w].[IsAutomatic] + FROM [Weapons] AS [w] + WHERE (([g].[FullName] = [w].[OwnerFullName]) AND [w].[OwnerFullName] IS NOT NULL) AND (([w].[Name] = N'BFG') AND [w].[Name] IS NOT NULL)) FROM [Gears] AS [g] -WHERE [g].[Discriminator] IN (N'Officer', N'Gear') AND ([g].[HasSoulPatch] = 1)", - // - @"@_outer_FullName='Damon Baird' (Size = 450) - -SELECT DISTINCT TOP(2) [w0].[IsAutomatic] -FROM [Weapons] AS [w0] -WHERE ([w0].[Name] = N'BFG') AND (@_outer_FullName = [w0].[OwnerFullName])", - // - @"@_outer_FullName='Marcus Fenix' (Size = 450) - -SELECT DISTINCT TOP(2) [w0].[IsAutomatic] -FROM [Weapons] AS [w0] -WHERE ([w0].[Name] = N'BFG') AND (@_outer_FullName = [w0].[OwnerFullName])"); +WHERE [g].[Discriminator] IN (N'Gear', N'Officer') AND ([g].[HasSoulPatch] = CAST(1 AS bit))"); } public override async Task Select_subquery_distinct_singleordefault_boolean_empty_with_pushdown(bool isAsync) @@ -6611,27 +6117,15 @@ public override async Task Select_subquery_distinct_singleordefault_boolean_empt await base.Select_subquery_distinct_singleordefault_boolean_empty_with_pushdown(isAsync); AssertSql( - @"SELECT [g].[FullName] + @"SELECT ( + SELECT TOP(2) [t].[IsAutomatic] + FROM ( + SELECT DISTINCT [w].[Id], [w].[AmmunitionType], [w].[IsAutomatic], [w].[Name], [w].[OwnerFullName], [w].[SynergyWithId] + FROM [Weapons] AS [w] + WHERE (([g].[FullName] = [w].[OwnerFullName]) AND [w].[OwnerFullName] IS NOT NULL) AND (([w].[Name] = N'BFG') AND [w].[Name] IS NOT NULL) + ) AS [t]) FROM [Gears] AS [g] -WHERE [g].[Discriminator] IN (N'Officer', N'Gear') AND ([g].[HasSoulPatch] = 1)", - // - @"@_outer_FullName='Damon Baird' (Size = 450) - -SELECT TOP(2) [t0].[IsAutomatic] -FROM ( - SELECT DISTINCT [w0].* - FROM [Weapons] AS [w0] - WHERE ([w0].[Name] = N'BFG') AND (@_outer_FullName = [w0].[OwnerFullName]) -) AS [t0]", - // - @"@_outer_FullName='Marcus Fenix' (Size = 450) - -SELECT TOP(2) [t0].[IsAutomatic] -FROM ( - SELECT DISTINCT [w0].* - FROM [Weapons] AS [w0] - WHERE ([w0].[Name] = N'BFG') AND (@_outer_FullName = [w0].[OwnerFullName]) -) AS [t0]"); +WHERE [g].[Discriminator] IN (N'Gear', N'Officer') AND ([g].[HasSoulPatch] = CAST(1 AS bit))"); } public override async Task Cast_subquery_to_base_type_using_typed_ToList(bool isAsync) @@ -7042,15 +6536,6 @@ FROM [Weapons] AS [w] WHERE COALESCE([w].[Id], 0) = 0"); } - public override async Task GetValueOrDefault_on_DateTimeOffset(bool isAsync) - { - await base.GetValueOrDefault_on_DateTimeOffset(isAsync); - - AssertSql( - @"SELECT [m].[Id], [m].[CodeName], [m].[Rating], [m].[Timeline] -FROM [Missions] AS [m]"); - } - public override async Task GetValueOrDefault_in_order_by(bool isAsync) { await base.GetValueOrDefault_in_order_by(isAsync); diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/NorthwindRowNumberPagingQuerySqlServerFixture.cs b/test/EFCore.SqlServer.FunctionalTests/Query/NorthwindRowNumberPagingQuerySqlServerFixture.cs deleted file mode 100644 index 8bcfd14f54a..00000000000 --- a/test/EFCore.SqlServer.FunctionalTests/Query/NorthwindRowNumberPagingQuerySqlServerFixture.cs +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.TestUtilities; - -namespace Microsoft.EntityFrameworkCore.Query -{ - public class NorthwindRowNumberPagingQuerySqlServerFixture : NorthwindQuerySqlServerFixture - { - public override DbContextOptionsBuilder AddOptions(DbContextOptionsBuilder builder) - { - var optionsBuilder = base.AddOptions(builder); - new SqlServerDbContextOptionsBuilder(optionsBuilder).UseRowNumberForPaging(); - return optionsBuilder; - } - } -} diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/QueryBugsTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/QueryBugsTest.cs index 5d07d1d1b10..75fa4796675 100644 --- a/test/EFCore.SqlServer.FunctionalTests/Query/QueryBugsTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/Query/QueryBugsTest.cs @@ -730,7 +730,7 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) #region Bug7293 - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'where (new ProjectView() {Permissions = {from ProjectUser u in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.Query.QueryBugsTest+ProjectUser]) join User u.User in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.Query.QueryBugsTest+User]) on Property([u], \"UserId\") equals Property([u.User], \"Id\") where ?= (Property([p], \"Id\") == Property([u], \"ProjectId\")) =? select new PermissionView() {UserName = [u.User].Name}}}.Id == __target_ProjectId_0)'")] + [ConditionalFact(Skip = "Issue #17068")] public void GroupJoin_expansion_when_optional_nav_in_projection() { using (CreateDatabase7293()) @@ -3277,7 +3277,7 @@ private SqlServerTestStore CreateDatabase9735() #region Bug9892 - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'join <>f__AnonymousType12`2 c in {from Child9892 x in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.Query.QueryBugsTest+Child9892]) join OtherParent9892 x.OtherParent in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.Query.QueryBugsTest+OtherParent9892]) on Property([x], \"OtherParentId\") equals Property([x.OtherParent], \"Id\") select new <>f__AnonymousType12`2(ParentId = [x].ParentId, OtherParent = [x.OtherParent].Name)} on [p].Id equals [c].ParentId'")] + [ConditionalFact(Skip = "Issue #17068")] public virtual void GroupJoin_to_parent_with_no_child_works_9892() { using (CreateDatabase9892()) @@ -3496,86 +3496,48 @@ public class Configuration9468 #region Bug10635 - [ConditionalFact(Skip = "issue #14935")] + [ConditionalFact] public void Include_with_order_by_on_interface_key() { using (CreateDatabase10635()) { using (var context = new MyContext10635(_options)) { - var query1 = context.Parents.Include(p => p.Children).OrderBy(p => ((IEntity10635)p).Id).ToList(); - - AssertSql( - @"SELECT [p].[Id], [p].[Name] -FROM [Parents] AS [p] -ORDER BY [p].[Id]", - // - @"SELECT [p.Children].[Id], [p.Children].[Name], [p.Children].[Parent10635Id], [p.Children].[ParentId] -FROM [Children] AS [p.Children] -INNER JOIN ( - SELECT [p0].[Id] - FROM [Parents] AS [p0] -) AS [t] ON [p.Children].[Parent10635Id] = [t].[Id] -ORDER BY [t].[Id]"); - - ClearLog(); + Assert.Equal( + CoreStrings.TranslationFailed("(p) => ((IEntity10635)p).Id"), + Assert.Throws( + () => context.Parents.Include(p => p.Children).OrderBy(p => ((IEntity10635)p).Id).ToList()).Message); var query2 = context.Parents.Include(p => p.Children).OrderBy(p => EF.Property(p, "Id")).ToList(); AssertSql( - @"SELECT [p].[Id], [p].[Name] + @"SELECT [p].[Id], [p].[Name], [c].[Id], [c].[Name], [c].[Parent10635Id], [c].[ParentId] FROM [Parents] AS [p] -ORDER BY [p].[Id]", - // - @"SELECT [p.Children].[Id], [p.Children].[Name], [p.Children].[Parent10635Id], [p.Children].[ParentId] -FROM [Children] AS [p.Children] -INNER JOIN ( - SELECT [p0].[Id] - FROM [Parents] AS [p0] -) AS [t] ON [p.Children].[Parent10635Id] = [t].[Id] -ORDER BY [t].[Id]"); +LEFT JOIN [Children] AS [c] ON [p].[Id] = [c].[Parent10635Id] +ORDER BY [p].[Id], [c].[Id]"); } } } - [ConditionalFact(Skip = "issue #14935")] + [ConditionalFact] public void Correlated_collection_with_order_by_on_interface_key() { using (CreateDatabase10635()) { using (var context = new MyContext10635(_options)) { - var query1 = context.Parents.OrderBy(p => ((IEntity10635)p).Id).Select(p => p.Children.ToList()).ToList(); - - AssertSql( - @"SELECT [p].[Id] -FROM [Parents] AS [p] -ORDER BY [p].[Id]", - // - @"SELECT [p.Children].[Id], [p.Children].[Name], [p.Children].[Parent10635Id], [p.Children].[ParentId], [t].[Id] -FROM [Children] AS [p.Children] -INNER JOIN ( - SELECT [p0].[Id] - FROM [Parents] AS [p0] -) AS [t] ON [p.Children].[Parent10635Id] = [t].[Id] -ORDER BY [t].[Id]"); - - ClearLog(); + Assert.Equal( + CoreStrings.TranslationFailed("(p) => ((IEntity10635)p).Id"), + Assert.Throws( + () => context.Parents.OrderBy(p => ((IEntity10635)p).Id).Select(p => p.Children.ToList()).ToList()).Message); var query2 = context.Parents.OrderBy(p => EF.Property(p, "Id")).Select(p => p.Children.ToList()).ToList(); AssertSql( - @"SELECT [p].[Id] + @"SELECT [p].[Id], [c].[Id], [c].[Name], [c].[Parent10635Id], [c].[ParentId] FROM [Parents] AS [p] -ORDER BY [p].[Id]", - // - @"SELECT [p.Children].[Id], [p.Children].[Name], [p.Children].[Parent10635Id], [p.Children].[ParentId], [t].[Id] -FROM [Children] AS [p.Children] -INNER JOIN ( - SELECT [p0].[Id] - FROM [Parents] AS [p0] -) AS [t] ON [p.Children].[Parent10635Id] = [t].[Id] -ORDER BY [t].[Id]"); +LEFT JOIN [Children] AS [c] ON [p].[Id] = [c].[Parent10635Id] +ORDER BY [p].[Id], [c].[Id]"); } } } @@ -4280,7 +4242,7 @@ public class LeaderQuery public static bool ClientMethod11923(int id) => true; - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'First()'")] + [ConditionalFact(Skip = "Issue #17244")] public virtual void Collection_without_setter_materialized_correctly() { using (CreateDatabase11923()) @@ -4645,7 +4607,7 @@ public class Price11885 #region Bug12582 - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'OfType()'")] + [ConditionalFact(Skip = "Issue #17244")] public virtual void Include_collection_with_OfType_base() { using (CreateDatabase12582()) diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/QueryLoggingSqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/QueryLoggingSqlServerTest.cs index 44eeda5c7fe..ba5545bffbd 100644 --- a/test/EFCore.SqlServer.FunctionalTests/Query/QueryLoggingSqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/Query/QueryLoggingSqlServerTest.cs @@ -15,7 +15,8 @@ // ReSharper disable InconsistentNaming namespace Microsoft.EntityFrameworkCore.Query { - internal class QueryLoggingSqlServerTest : IClassFixture + // Issue #16963 + public class QueryLoggingSqlServerTest : IClassFixture { private static readonly string _eol = Environment.NewLine; @@ -38,13 +39,8 @@ var customers Assert.NotNull(customers); Assert.StartsWith( - "Compiling query model: " + _eol + - "'from Customer _0 in DbSet", + "(queryContext) => new QueryingEnumerable(", Fixture.TestSqlLoggerFactory.Log[0].Message); - Assert.StartsWith( - "Optimized query model: " + _eol + - "'from Customer _0 in DbSet", - Fixture.TestSqlLoggerFactory.Log[1].Message); } } @@ -119,7 +115,7 @@ var customers //} #pragma warning disable CS0612 // Type or member is obsolete - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'Concat({from Order o in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.Northwind.Order]) where ([o].CustomerID == \"ALFKI\") select [o]})'")] + [ConditionalFact(Skip = "Issue #17245")] public virtual void Concat_Include_collection_ignored() { using (var context = CreateContext()) @@ -137,7 +133,7 @@ public virtual void Concat_Include_collection_ignored() } } - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'Union({from Order o in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.Northwind.Order]) where ([o].CustomerID == \"ALFKI\") select [o]})'")] + [ConditionalFact(Skip = "Issue #17245")] public virtual void Union_Include_collection_ignored() { using (var context = CreateContext()) @@ -155,7 +151,7 @@ public virtual void Union_Include_collection_ignored() } } - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'GroupBy([o].OrderID, [o])'")] + [ConditionalFact(Skip = "Issue #17068")] public virtual void GroupBy_Include_collection_ignored() { using (var context = CreateContext()) diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/QueryNavigationsSqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/QueryNavigationsSqlServerTest.cs index 991714597ce..11902e9eb09 100644 --- a/test/EFCore.SqlServer.FunctionalTests/Query/QueryNavigationsSqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/Query/QueryNavigationsSqlServerTest.cs @@ -16,23 +16,6 @@ public QueryNavigationsSqlServerTest( fixture.TestSqlLoggerFactory.Clear(); } - public override async Task Join_with_nav_projected_in_subquery_when_client_eval(bool isAsync) - { - await base.Join_with_nav_projected_in_subquery_when_client_eval(isAsync); - - AssertSql( - @"SELECT [od0].[OrderID], [od0].[ProductID], [od0].[Discount], [od0].[Quantity], [od0].[UnitPrice], [od.Product0].[ProductID], [od.Product0].[Discontinued], [od.Product0].[ProductName], [od.Product0].[SupplierID], [od.Product0].[UnitPrice], [od.Product0].[UnitsInStock] -FROM [Order Details] AS [od0] -INNER JOIN [Products] AS [od.Product0] ON [od0].[ProductID] = [od.Product0].[ProductID]", - // - @"SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate], [o.Customer0].[CustomerID], [o.Customer0].[Address], [o.Customer0].[City], [o.Customer0].[CompanyName], [o.Customer0].[ContactName], [o.Customer0].[ContactTitle], [o.Customer0].[Country], [o.Customer0].[Fax], [o.Customer0].[Phone], [o.Customer0].[PostalCode], [o.Customer0].[Region] -FROM [Orders] AS [o0] -LEFT JOIN [Customers] AS [o.Customer0] ON [o0].[CustomerID] = [o.Customer0].[CustomerID]", - // - @"SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] -FROM [Customers] AS [c]"); - } - public override async Task GroupJoin_with_nav_projected_in_subquery_when_client_eval(bool isAsync) { await base.GroupJoin_with_nav_projected_in_subquery_when_client_eval(isAsync); @@ -50,23 +33,6 @@ FROM [Orders] AS [o0] FROM [Customers] AS [c]"); } - public override async Task Join_with_nav_in_predicate_in_subquery_when_client_eval(bool isAsync) - { - await base.Join_with_nav_in_predicate_in_subquery_when_client_eval(isAsync); - - AssertSql( - @"SELECT [od0].[OrderID], [od0].[ProductID], [od0].[Discount], [od0].[Quantity], [od0].[UnitPrice], [od.Product0].[ProductID], [od.Product0].[Discontinued], [od.Product0].[ProductName], [od.Product0].[SupplierID], [od.Product0].[UnitPrice], [od.Product0].[UnitsInStock] -FROM [Order Details] AS [od0] -INNER JOIN [Products] AS [od.Product0] ON [od0].[ProductID] = [od.Product0].[ProductID]", - // - @"SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate], [o.Customer0].[CustomerID], [o.Customer0].[Address], [o.Customer0].[City], [o.Customer0].[CompanyName], [o.Customer0].[ContactName], [o.Customer0].[ContactTitle], [o.Customer0].[Country], [o.Customer0].[Fax], [o.Customer0].[Phone], [o.Customer0].[PostalCode], [o.Customer0].[Region] -FROM [Orders] AS [o0] -LEFT JOIN [Customers] AS [o.Customer0] ON [o0].[CustomerID] = [o.Customer0].[CustomerID]", - // - @"SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] -FROM [Customers] AS [c]"); - } - public override async Task GroupJoin_with_nav_in_predicate_in_subquery_when_client_eval(bool isAsync) { await base.GroupJoin_with_nav_in_predicate_in_subquery_when_client_eval(isAsync); @@ -84,23 +50,6 @@ FROM [Orders] AS [o0] FROM [Customers] AS [c]"); } - public override async Task Join_with_nav_in_orderby_in_subquery_when_client_eval(bool isAsync) - { - await base.Join_with_nav_in_orderby_in_subquery_when_client_eval(isAsync); - - AssertSql( - @"SELECT [od0].[OrderID], [od0].[ProductID], [od0].[Discount], [od0].[Quantity], [od0].[UnitPrice], [od.Product0].[ProductID], [od.Product0].[Discontinued], [od.Product0].[ProductName], [od.Product0].[SupplierID], [od.Product0].[UnitPrice], [od.Product0].[UnitsInStock] -FROM [Order Details] AS [od0] -INNER JOIN [Products] AS [od.Product0] ON [od0].[ProductID] = [od.Product0].[ProductID]", - // - @"SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate], [o.Customer0].[CustomerID], [o.Customer0].[Address], [o.Customer0].[City], [o.Customer0].[CompanyName], [o.Customer0].[ContactName], [o.Customer0].[ContactTitle], [o.Customer0].[Country], [o.Customer0].[Fax], [o.Customer0].[Phone], [o.Customer0].[PostalCode], [o.Customer0].[Region] -FROM [Orders] AS [o0] -LEFT JOIN [Customers] AS [o.Customer0] ON [o0].[CustomerID] = [o.Customer0].[CustomerID]", - // - @"SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] -FROM [Customers] AS [c]"); - } - public override async Task GroupJoin_with_nav_in_orderby_in_subquery_when_client_eval(bool isAsync) { await base.GroupJoin_with_nav_in_orderby_in_subquery_when_client_eval(isAsync); @@ -360,16 +309,6 @@ FROM [Orders] AS [o] WHERE (([c].[City] = N'Seattle') AND [c].[City] IS NOT NULL) AND (([c].[Phone] <> N'555 555 5555') OR [c].[Phone] IS NULL)"); } - public override async Task Select_Where_Navigation_Client(bool isAsync) - { - await base.Select_Where_Navigation_Client(isAsync); - - AssertSql( - @"SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate], [o.Customer].[CustomerID], [o.Customer].[Address], [o.Customer].[City], [o.Customer].[CompanyName], [o.Customer].[ContactName], [o.Customer].[ContactTitle], [o.Customer].[Country], [o.Customer].[Fax], [o.Customer].[Phone], [o.Customer].[PostalCode], [o.Customer].[Region] -FROM [Orders] AS [o] -LEFT JOIN [Customers] AS [o.Customer] ON [o].[CustomerID] = [o.Customer].[CustomerID]"); - } - public override async Task Select_Singleton_Navigation_With_Member_Access(bool isAsync) { await base.Select_Singleton_Navigation_With_Member_Access(isAsync); @@ -407,23 +346,6 @@ FROM [Orders] AS [o] WHERE (([c].[City] = N'Seattle') AND [c].[City] IS NOT NULL) AND (([c].[Phone] <> N'555 555 5555') OR [c].[Phone] IS NULL)"); } - public override async Task Select_Where_Navigation_Scalar_Equals_Navigation_Scalar(bool isAsync) - { - await base.Select_Where_Navigation_Scalar_Equals_Navigation_Scalar(isAsync); - - AssertSql( - @"SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate], [t].[OrderID], [t].[CustomerID], [t].[EmployeeID], [t].[OrderDate] -FROM [Orders] AS [o] -CROSS JOIN ( - SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate] - FROM [Orders] AS [o0] - WHERE [o0].[OrderID] < 10400 -) AS [t] -LEFT JOIN [Customers] AS [c] ON [o].[CustomerID] = [c].[CustomerID] -LEFT JOIN [Customers] AS [c0] ON [t].[CustomerID] = [c0].[CustomerID] -WHERE ([o].[OrderID] < 10300) AND ((([c].[City] = [c0].[City]) AND ([c].[City] IS NOT NULL AND [c0].[City] IS NOT NULL)) OR ([c].[City] IS NULL AND [c0].[City] IS NULL))"); - } - public override async Task Select_Where_Navigation_Scalar_Equals_Navigation_Scalar_Projected(bool isAsync) { await base.Select_Where_Navigation_Scalar_Equals_Navigation_Scalar_Projected(isAsync); @@ -624,28 +546,6 @@ END AS [All] FROM [Customers] AS [c]"); } - public override async Task Collection_select_nav_prop_all_client(bool isAsync) - { - await base.Collection_select_nav_prop_all_client(isAsync); - - AssertSql( - @"SELECT [c].[CustomerID] -FROM [Customers] AS [c] -ORDER BY [c].[CustomerID]", - // - @"@_outer_CustomerID='ALFKI' (Size = 5) - -SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate] -FROM [Orders] AS [o0] -WHERE @_outer_CustomerID = [o0].[CustomerID]", - // - @"@_outer_CustomerID='ANATR' (Size = 5) - -SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate] -FROM [Orders] AS [o0] -WHERE @_outer_CustomerID = [o0].[CustomerID]"); - } - public override async Task Collection_where_nav_prop_all(bool isAsync) { await base.Collection_where_nav_prop_all(isAsync); @@ -659,28 +559,6 @@ FROM [Orders] AS [o] WHERE (([c].[CustomerID] = [o].[CustomerID]) AND [o].[CustomerID] IS NOT NULL) AND (([o].[CustomerID] <> N'ALFKI') OR [o].[CustomerID] IS NULL))"); } - public override void Collection_where_nav_prop_all_client() - { - base.Collection_where_nav_prop_all_client(); - - AssertSql( - @"SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] -FROM [Customers] AS [c] -ORDER BY [c].[CustomerID]", - // - @"@_outer_CustomerID='ALFKI' (Size = 5) - -SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] -FROM [Orders] AS [o] -WHERE @_outer_CustomerID = [o].[CustomerID]", - // - @"@_outer_CustomerID='ANATR' (Size = 5) - -SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] -FROM [Orders] AS [o] -WHERE @_outer_CustomerID = [o].[CustomerID]"); - } - public override async Task Collection_select_nav_prop_count(bool isAsync) { await base.Collection_select_nav_prop_count(isAsync); @@ -890,29 +768,13 @@ public override async Task Collection_select_nav_prop_single_or_default_then_nav await base.Collection_select_nav_prop_single_or_default_then_nav_prop_nested(isAsync); AssertSql( - @"SELECT 1 -FROM [Customers] AS [e] -WHERE [e].[CustomerID] LIKE N'A%'", - // - @"SELECT TOP(2) [o.Customer0].[City] -FROM [Orders] AS [o0] -LEFT JOIN [Customers] AS [o.Customer0] ON [o0].[CustomerID] = [o.Customer0].[CustomerID] -WHERE [o0].[OrderID] = 10643", - // - @"SELECT TOP(2) [o.Customer0].[City] -FROM [Orders] AS [o0] -LEFT JOIN [Customers] AS [o.Customer0] ON [o0].[CustomerID] = [o.Customer0].[CustomerID] -WHERE [o0].[OrderID] = 10643", - // - @"SELECT TOP(2) [o.Customer0].[City] -FROM [Orders] AS [o0] -LEFT JOIN [Customers] AS [o.Customer0] ON [o0].[CustomerID] = [o.Customer0].[CustomerID] -WHERE [o0].[OrderID] = 10643", - // - @"SELECT TOP(2) [o.Customer0].[City] -FROM [Orders] AS [o0] -LEFT JOIN [Customers] AS [o.Customer0] ON [o0].[CustomerID] = [o.Customer0].[CustomerID] -WHERE [o0].[OrderID] = 10643"); + @"SELECT ( + SELECT TOP(2) [c].[City] + FROM [Orders] AS [o] + LEFT JOIN [Customers] AS [c] ON [o].[CustomerID] = [c].[CustomerID] + WHERE [o].[OrderID] = 10643) +FROM [Customers] AS [c0] +WHERE [c0].[CustomerID] LIKE N'A%'"); } public override async Task Collection_select_nav_prop_first_or_default_then_nav_prop_nested_using_property_method(bool isAsync) @@ -1033,37 +895,6 @@ FROM [Order Details] AS [o0] ) AS [t1] ON ([t0].[OrderID] = [t1].[OrderID]) AND ([t0].[ProductID] = [t1].[ProductID]))"); } - public override async Task Where_subquery_on_navigation_client_eval(bool isAsync) - { - await base.Where_subquery_on_navigation_client_eval(isAsync); - - AssertSql( - @"SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] -FROM [Customers] AS [c] -ORDER BY [c].[CustomerID]", - // - @"SELECT [o4].[OrderID] -FROM [Orders] AS [o4]", - // - @"@_outer_CustomerID='ALFKI' (Size = 5) - -SELECT [o2].[OrderID] -FROM [Orders] AS [o2] -WHERE @_outer_CustomerID = [o2].[CustomerID]", - // - @"SELECT [o4].[OrderID] -FROM [Orders] AS [o4]", - // - @"@_outer_CustomerID='ANATR' (Size = 5) - -SELECT [o2].[OrderID] -FROM [Orders] AS [o2] -WHERE @_outer_CustomerID = [o2].[CustomerID]", - // - @"SELECT [o4].[OrderID] -FROM [Orders] AS [o4]"); - } - public override void Navigation_in_subquery_referencing_outer_query() { base.Navigation_in_subquery_referencing_outer_query(); @@ -1122,14 +953,6 @@ public override async Task Select_anonymous_type_order_by_field_group_by_same_fi ""); } - public override async Task Project_first_or_default_on_empty_collection_of_value_types_returns_proper_default(bool isAsync) - { - await base.Project_first_or_default_on_empty_collection_of_value_types_returns_proper_default(isAsync); - - AssertSql( - ""); - } - public override async Task Project_single_scalar_value_subquery_is_properly_inlined(bool isAsync) { await base.Project_single_scalar_value_subquery_is_properly_inlined(isAsync); diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/QueryNoClientEvalSqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/QueryNoClientEvalSqlServerTest.cs index 094afff279d..e8a842a1688 100644 --- a/test/EFCore.SqlServer.FunctionalTests/Query/QueryNoClientEvalSqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/Query/QueryNoClientEvalSqlServerTest.cs @@ -3,7 +3,7 @@ namespace Microsoft.EntityFrameworkCore.Query { - internal class QueryNoClientEvalSqlServerTest : QueryNoClientEvalTestBase + public class QueryNoClientEvalSqlServerTest : QueryNoClientEvalTestBase { public QueryNoClientEvalSqlServerTest(QueryNoClientEvalSqlServerFixture fixture) : base(fixture) diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/RowNumberPagingTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/RowNumberPagingTest.cs deleted file mode 100644 index 09b24341355..00000000000 --- a/test/EFCore.SqlServer.FunctionalTests/Query/RowNumberPagingTest.cs +++ /dev/null @@ -1,924 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -using System; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.EntityFrameworkCore.TestModels.Northwind; -using Xunit; -using Xunit.Abstractions; - -namespace Microsoft.EntityFrameworkCore.Query -{ - internal class RowNumberPagingTest : SimpleQueryTestBase, IDisposable - { - public RowNumberPagingTest(NorthwindRowNumberPagingQuerySqlServerFixture fixture, ITestOutputHelper testOutputHelper) - : base(fixture) - { - Fixture.TestSqlLoggerFactory.Clear(); - //Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); - } - - public void Dispose() - { - //Assert for all tests that OFFSET or FETCH is never used - Assert.All(Fixture.TestSqlLoggerFactory.SqlStatements, t => Assert.DoesNotMatch("\\W+OFFSET", t)); - Assert.All(Fixture.TestSqlLoggerFactory.SqlStatements, t => Assert.DoesNotContain("FETCH", t)); - } - - public override async Task Skip(bool isAsync) - { - await base.Skip(isAsync); - - AssertSql( - @"@__p_0='5' - -SELECT [t].[CustomerID], [t].[Address], [t].[City], [t].[CompanyName], [t].[ContactName], [t].[ContactTitle], [t].[Country], [t].[Fax], [t].[Phone], [t].[PostalCode], [t].[Region] -FROM ( - SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], ROW_NUMBER() OVER(ORDER BY [c].[CustomerID]) AS [__RowNumber__] - FROM [Customers] AS [c] -) AS [t] -WHERE [t].[__RowNumber__] > @__p_0"); - } - - public override async Task Skip_no_orderby(bool isAsync) - { - await base.Skip_no_orderby(isAsync); - - AssertSql( - @"@__p_0='5' - -SELECT [t].[CustomerID], [t].[Address], [t].[City], [t].[CompanyName], [t].[ContactName], [t].[ContactTitle], [t].[Country], [t].[Fax], [t].[Phone], [t].[PostalCode], [t].[Region] -FROM ( - SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], ROW_NUMBER() OVER(ORDER BY @@RowCount) AS [__RowNumber__] - FROM [Customers] AS [c] -) AS [t] -WHERE [t].[__RowNumber__] > @__p_0"); - } - - public override async Task Skip_Take(bool isAsync) - { - await base.Skip_Take(isAsync); - - AssertSql( - @"@__p_0='5' -@__p_1='10' - -SELECT [t].[CustomerID], [t].[Address], [t].[City], [t].[CompanyName], [t].[ContactName], [t].[ContactTitle], [t].[Country], [t].[Fax], [t].[Phone], [t].[PostalCode], [t].[Region] -FROM ( - SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], ROW_NUMBER() OVER(ORDER BY [c].[ContactName]) AS [__RowNumber__] - FROM [Customers] AS [c] -) AS [t] -WHERE ([t].[__RowNumber__] > @__p_0) AND ([t].[__RowNumber__] <= (@__p_0 + @__p_1))"); - } - - public override async Task Join_Customers_Orders_Skip_Take(bool isAsync) - { - await base.Join_Customers_Orders_Skip_Take(isAsync); - - AssertSql( - @"@__p_0='10' -@__p_1='5' - -SELECT [t].[ContactName], [t].[OrderID] -FROM ( - SELECT [c].[ContactName], [o].[OrderID], ROW_NUMBER() OVER(ORDER BY [o].[OrderID]) AS [__RowNumber__] - FROM [Customers] AS [c] - INNER JOIN [Orders] AS [o] ON [c].[CustomerID] = [o].[CustomerID] -) AS [t] -WHERE ([t].[__RowNumber__] > @__p_0) AND ([t].[__RowNumber__] <= (@__p_0 + @__p_1))"); - } - - public override async Task Join_Customers_Orders_Skip_Take_followed_by_constant_projection(bool isAsync) - { - await base.Join_Customers_Orders_Skip_Take_followed_by_constant_projection(isAsync); - - AssertSql( - ""); - } - - public override async Task Join_Customers_Orders_Projection_With_String_Concat_Skip_Take(bool isAsync) - { - await base.Join_Customers_Orders_Projection_With_String_Concat_Skip_Take(isAsync); - - AssertSql( - @"@__p_0='10' -@__p_1='5' - -SELECT [t].[Contact], [t].[OrderID] -FROM ( - SELECT ([c].[ContactName] + N' ') + [c].[ContactTitle] AS [Contact], [o].[OrderID], ROW_NUMBER() OVER(ORDER BY [o].[OrderID]) AS [__RowNumber__] - FROM [Customers] AS [c] - INNER JOIN [Orders] AS [o] ON [c].[CustomerID] = [o].[CustomerID] -) AS [t] -WHERE ([t].[__RowNumber__] > @__p_0) AND ([t].[__RowNumber__] <= (@__p_0 + @__p_1))"); - } - - public override async Task Join_Customers_Orders_Orders_Skip_Take_Same_Properties(bool isAsync) - { - await base.Join_Customers_Orders_Orders_Skip_Take_Same_Properties(isAsync); - - AssertSql( - @"@__p_0='10' -@__p_1='5' - -SELECT [t].[OrderID], [t].[CustomerIDA], [t].[CustomerIDB], [t].[ContactNameA], [t].[ContactNameB] -FROM ( - SELECT [o].[OrderID], [ca].[CustomerID] AS [CustomerIDA], [cb].[CustomerID] AS [CustomerIDB], [ca].[ContactName] AS [ContactNameA], [cb].[ContactName] AS [ContactNameB], ROW_NUMBER() OVER(ORDER BY [o].[OrderID]) AS [__RowNumber__] - FROM [Orders] AS [o] - INNER JOIN [Customers] AS [ca] ON [o].[CustomerID] = [ca].[CustomerID] - INNER JOIN [Customers] AS [cb] ON [o].[CustomerID] = [cb].[CustomerID] -) AS [t] -WHERE ([t].[__RowNumber__] > @__p_0) AND ([t].[__RowNumber__] <= (@__p_0 + @__p_1))"); - } - - public override async Task Take_Skip(bool isAsync) - { - await base.Take_Skip(isAsync); - - AssertSql( - @"@__p_0='10' -@__p_1='5' - -SELECT [t0].* -FROM ( - SELECT [t].*, ROW_NUMBER() OVER(ORDER BY [t].[ContactName]) AS [__RowNumber__] - FROM ( - SELECT TOP(@__p_0) [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] - FROM [Customers] AS [c] - ORDER BY [c].[ContactName] - ) AS [t] -) AS [t0] -WHERE [t0].[__RowNumber__] > @__p_1"); - } - - public override async Task Take_Skip_Distinct(bool isAsync) - { - await base.Take_Skip_Distinct(isAsync); - - AssertSql( - @"@__p_0='10' -@__p_1='5' - -SELECT DISTINCT [t0].* -FROM ( - SELECT [t1].* - FROM ( - SELECT [t].*, ROW_NUMBER() OVER(ORDER BY [t].[ContactName]) AS [__RowNumber__] - FROM ( - SELECT TOP(@__p_0) [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] - FROM [Customers] AS [c] - ORDER BY [c].[ContactName] - ) AS [t] - ) AS [t1] - WHERE [t1].[__RowNumber__] > @__p_1 -) AS [t0]"); - } - - public override async Task Take_skip_null_coalesce_operator(bool isAsync) - { - await base.Take_skip_null_coalesce_operator(isAsync); - - AssertSql( - @"@__p_0='10' -@__p_1='5' - -SELECT DISTINCT [t0].* -FROM ( - SELECT [t1].* - FROM ( - SELECT [t].*, ROW_NUMBER() OVER(ORDER BY [t].[c]) AS [__RowNumber__] - FROM ( - SELECT TOP(@__p_0) [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], COALESCE([c].[Region], N'ZZ') AS [c] - FROM [Customers] AS [c] - ORDER BY [c] - ) AS [t] - ) AS [t1] - WHERE [t1].[__RowNumber__] > @__p_1 -) AS [t0]"); - } - - public override async Task Select_take_skip_null_coalesce_operator(bool isAsync) - { - await base.Select_take_skip_null_coalesce_operator(isAsync); - - AssertSql( - @"@__p_0='10' -@__p_1='5' - -SELECT [t0].* -FROM ( - SELECT [t].*, ROW_NUMBER() OVER(ORDER BY [t].[Region]) AS [__RowNumber__] - FROM ( - SELECT TOP(@__p_0) [c].[CustomerID], [c].[CompanyName], COALESCE([c].[Region], N'ZZ') AS [Region] - FROM [Customers] AS [c] - ORDER BY [Region] - ) AS [t] -) AS [t0] -WHERE [t0].[__RowNumber__] > @__p_1"); - } - - public override async Task String_Contains_Literal(bool isAsync) - { - await AssertQuery( - isAsync, - cs => cs.Where(c => c.ContactName.Contains("M")), // case-insensitive - cs => cs.Where(c => c.ContactName.Contains("M") || c.ContactName.Contains("m")), // case-sensitive - entryCount: 34); - - AssertSql( - @"SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] -FROM [Customers] AS [c] -WHERE CHARINDEX(N'M', [c].[ContactName]) > 0"); - } - - public override async Task String_Contains_MethodCall(bool isAsync) - { - await AssertQuery( - isAsync, - cs => cs.Where(c => c.ContactName.Contains(LocalMethod1())), // case-insensitive - cs => cs.Where( - c => c.ContactName.Contains(LocalMethod1().ToLower()) - || c.ContactName.Contains(LocalMethod1().ToUpper())), // case-sensitive - entryCount: 34); - - AssertSql( - @"SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] -FROM [Customers] AS [c] -WHERE CHARINDEX(N'M', [c].[ContactName]) > 0"); - } - - public override async Task OrderBy_skip_take(bool isAsync) - { - await base.OrderBy_skip_take(isAsync); - - AssertSql( - @"@__p_0='5' -@__p_1='8' - -SELECT [t].[CustomerID], [t].[Address], [t].[City], [t].[CompanyName], [t].[ContactName], [t].[ContactTitle], [t].[Country], [t].[Fax], [t].[Phone], [t].[PostalCode], [t].[Region] -FROM ( - SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], ROW_NUMBER() OVER(ORDER BY [c].[ContactTitle], [c].[ContactName]) AS [__RowNumber__] - FROM [Customers] AS [c] -) AS [t] -WHERE ([t].[__RowNumber__] > @__p_0) AND ([t].[__RowNumber__] <= (@__p_0 + @__p_1))"); - } - - public override async Task OrderBy_skip_skip_take(bool isAsync) - { - await base.OrderBy_skip_skip_take(isAsync); - - AssertSql( - @"@__p_0='5' -@__p_1='8' -@__p_2='3' - -SELECT [t1].* -FROM ( - SELECT [t].*, ROW_NUMBER() OVER(ORDER BY [t].[ContactTitle], [t].[ContactName]) AS [__RowNumber__1] - FROM ( - SELECT [t0].[CustomerID], [t0].[Address], [t0].[City], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Country], [t0].[Fax], [t0].[Phone], [t0].[PostalCode], [t0].[Region] - FROM ( - SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], ROW_NUMBER() OVER(ORDER BY [c].[ContactTitle], [c].[ContactName]) AS [__RowNumber__] - FROM [Customers] AS [c] - ) AS [t0] - WHERE [t0].[__RowNumber__] > @__p_0 - ) AS [t] -) AS [t1] -WHERE ([t1].[__RowNumber__1] > @__p_1) AND ([t1].[__RowNumber__1] <= (@__p_1 + @__p_2))"); - } - - public override async Task OrderBy_skip_take_take(bool isAsync) - { - await base.OrderBy_skip_take_take(isAsync); - - AssertSql( - @"@__p_2='3' -@__p_0='5' -@__p_1='8' - -SELECT TOP(@__p_2) [t].* -FROM ( - SELECT [t0].[CustomerID], [t0].[Address], [t0].[City], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Country], [t0].[Fax], [t0].[Phone], [t0].[PostalCode], [t0].[Region] - FROM ( - SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], ROW_NUMBER() OVER(ORDER BY [c].[ContactTitle], [c].[ContactName]) AS [__RowNumber__] - FROM [Customers] AS [c] - ) AS [t0] - WHERE ([t0].[__RowNumber__] > @__p_0) AND ([t0].[__RowNumber__] <= (@__p_0 + @__p_1)) -) AS [t] -ORDER BY [t].[ContactTitle], [t].[ContactName]"); - } - - public override async Task OrderBy_skip_take_take_take_take(bool isAsync) - { - await base.OrderBy_skip_take_take_take_take(isAsync); - - AssertSql( - @"@__p_0='5' -@__p_3='8' -@__p_2='10' -@__p_1='15' - -SELECT TOP(@__p_0) [t1].* -FROM ( - SELECT TOP(@__p_3) [t0].* - FROM ( - SELECT TOP(@__p_2) [t].* - FROM ( - SELECT [t2].[CustomerID], [t2].[Address], [t2].[City], [t2].[CompanyName], [t2].[ContactName], [t2].[ContactTitle], [t2].[Country], [t2].[Fax], [t2].[Phone], [t2].[PostalCode], [t2].[Region] - FROM ( - SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], ROW_NUMBER() OVER(ORDER BY [c].[ContactTitle], [c].[ContactName]) AS [__RowNumber__] - FROM [Customers] AS [c] - ) AS [t2] - WHERE ([t2].[__RowNumber__] > @__p_0) AND ([t2].[__RowNumber__] <= (@__p_0 + @__p_1)) - ) AS [t] - ORDER BY [t].[ContactTitle], [t].[ContactName] - ) AS [t0] - ORDER BY [t0].[ContactTitle], [t0].[ContactName] -) AS [t1] -ORDER BY [t1].[ContactTitle], [t1].[ContactName]"); - } - - public override async Task OrderBy_skip_take_skip_take_skip(bool isAsync) - { - await base.OrderBy_skip_take_skip_take_skip(isAsync); - - AssertSql( - @"@__p_0='5' -@__p_1='15' -@__p_2='2' -@__p_3='8' - -SELECT [t3].* -FROM ( - SELECT [t0].*, ROW_NUMBER() OVER(ORDER BY [t0].[ContactTitle], [t0].[ContactName]) AS [__RowNumber__2] - FROM ( - SELECT [t2].* - FROM ( - SELECT [t].*, ROW_NUMBER() OVER(ORDER BY [t].[ContactTitle], [t].[ContactName]) AS [__RowNumber__1] - FROM ( - SELECT [t1].[CustomerID], [t1].[Address], [t1].[City], [t1].[CompanyName], [t1].[ContactName], [t1].[ContactTitle], [t1].[Country], [t1].[Fax], [t1].[Phone], [t1].[PostalCode], [t1].[Region] - FROM ( - SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], ROW_NUMBER() OVER(ORDER BY [c].[ContactTitle], [c].[ContactName]) AS [__RowNumber__] - FROM [Customers] AS [c] - ) AS [t1] - WHERE ([t1].[__RowNumber__] > @__p_0) AND ([t1].[__RowNumber__] <= (@__p_0 + @__p_1)) - ) AS [t] - ) AS [t2] - WHERE ([t2].[__RowNumber__1] > @__p_2) AND ([t2].[__RowNumber__1] <= (@__p_2 + @__p_3)) - ) AS [t0] -) AS [t3] -WHERE [t3].[__RowNumber__2] > @__p_0"); - } - - public override async Task OrderBy_skip_take_distinct(bool isAsync) - { - await base.OrderBy_skip_take_distinct(isAsync); - - AssertSql( - @"@__p_0='5' -@__p_1='15' - -SELECT DISTINCT [t].* -FROM ( - SELECT [t0].[CustomerID], [t0].[Address], [t0].[City], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Country], [t0].[Fax], [t0].[Phone], [t0].[PostalCode], [t0].[Region] - FROM ( - SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], ROW_NUMBER() OVER(ORDER BY [c].[ContactTitle], [c].[ContactName]) AS [__RowNumber__] - FROM [Customers] AS [c] - ) AS [t0] - WHERE ([t0].[__RowNumber__] > @__p_0) AND ([t0].[__RowNumber__] <= (@__p_0 + @__p_1)) -) AS [t]"); - } - - public override async Task OrderBy_coalesce_take_distinct(bool isAsync) - { - await base.OrderBy_coalesce_take_distinct(isAsync); - - AssertSql( - @"@__p_0='15' - -SELECT DISTINCT [t].* -FROM ( - SELECT TOP(@__p_0) [p].[ProductID], [p].[Discontinued], [p].[ProductName], [p].[SupplierID], [p].[UnitPrice], [p].[UnitsInStock] - FROM [Products] AS [p] - ORDER BY COALESCE([p].[UnitPrice], 0.0) -) AS [t]"); - } - - public override async Task OrderBy_coalesce_skip_take_distinct(bool isAsync) - { - await base.OrderBy_coalesce_skip_take_distinct(isAsync); - - AssertSql( - @"@__p_0='5' -@__p_1='15' - -SELECT DISTINCT [t].* -FROM ( - SELECT [t0].[ProductID], [t0].[Discontinued], [t0].[ProductName], [t0].[SupplierID], [t0].[UnitPrice], [t0].[UnitsInStock] - FROM ( - SELECT [p].[ProductID], [p].[Discontinued], [p].[ProductName], [p].[SupplierID], [p].[UnitPrice], [p].[UnitsInStock], ROW_NUMBER() OVER(ORDER BY COALESCE([p].[UnitPrice], 0.0)) AS [__RowNumber__] - FROM [Products] AS [p] - ) AS [t0] - WHERE ([t0].[__RowNumber__] > @__p_0) AND ([t0].[__RowNumber__] <= (@__p_0 + @__p_1)) -) AS [t]"); - } - - public override async Task OrderBy_coalesce_skip_take_distinct_take(bool isAsync) - { - await base.OrderBy_coalesce_skip_take_distinct_take(isAsync); - - AssertSql( - @"@__p_0='5' -@__p_1='15' - -SELECT DISTINCT TOP(@__p_0) [t].* -FROM ( - SELECT [t0].[ProductID], [t0].[Discontinued], [t0].[ProductName], [t0].[SupplierID], [t0].[UnitPrice], [t0].[UnitsInStock] - FROM ( - SELECT [p].[ProductID], [p].[Discontinued], [p].[ProductName], [p].[SupplierID], [p].[UnitPrice], [p].[UnitsInStock], ROW_NUMBER() OVER(ORDER BY COALESCE([p].[UnitPrice], 0.0)) AS [__RowNumber__] - FROM [Products] AS [p] - ) AS [t0] - WHERE ([t0].[__RowNumber__] > @__p_0) AND ([t0].[__RowNumber__] <= (@__p_0 + @__p_1)) -) AS [t]"); - } - - public override async Task OrderBy_skip_take_distinct_orderby_take(bool isAsync) - { - await base.OrderBy_skip_take_distinct_orderby_take(isAsync); - - AssertSql( - @"@__p_2='8' -@__p_0='5' -@__p_1='15' - -SELECT TOP(@__p_2) [t].[CustomerID], [t].[Address], [t].[City], [t].[CompanyName], [t].[ContactName], [t].[ContactTitle], [t].[Country], [t].[Fax], [t].[Phone], [t].[PostalCode], [t].[Region] -FROM ( - SELECT DISTINCT [t0].[CustomerID], [t0].[Address], [t0].[City], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Country], [t0].[Fax], [t0].[Phone], [t0].[PostalCode], [t0].[Region] - FROM ( - SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] - FROM [Customers] AS [c] - ORDER BY [c].[ContactTitle], [c].[ContactName] - OFFSET @__p_0 ROWS FETCH NEXT @__p_1 ROWS ONLY - ) AS [t0] -) AS [t] -ORDER BY [t].[ContactTitle]"); - } - - public override async Task Skip_Take_Any(bool isAsync) - { - await base.Skip_Take_Any(isAsync); - - AssertSql( - @"@__p_0='5' -@__p_1='10' - -SELECT CASE - WHEN EXISTS ( - SELECT [t].[c] - FROM ( - SELECT 1 AS [c], ROW_NUMBER() OVER(ORDER BY [c].[ContactName]) AS [__RowNumber__] - FROM [Customers] AS [c] - ) AS [t] - WHERE ([t].[__RowNumber__] > @__p_0) AND ([t].[__RowNumber__] <= (@__p_0 + @__p_1))) - THEN CAST(1 AS bit) ELSE CAST(0 AS bit) -END"); - } - - public override async Task Skip_Take_All(bool isAsync) - { - await base.Skip_Take_All(isAsync); - - AssertSql( - @"@__p_0='4' -@__p_1='7' - -SELECT CASE - WHEN NOT EXISTS ( - SELECT 1 - FROM ( - SELECT [t0].* - FROM ( - SELECT [c].*, ROW_NUMBER() OVER(ORDER BY [c].[CustomerID]) AS [__RowNumber__] - FROM [Customers] AS [c] - ) AS [t0] - WHERE ([t0].[__RowNumber__] > @__p_0) AND ([t0].[__RowNumber__] <= (@__p_0 + @__p_1)) - ) AS [t] - WHERE NOT ([t].[CustomerID] LIKE N'B%')) - THEN CAST(1 AS bit) ELSE CAST(0 AS bit) -END"); - } - - public override async Task Take_All(bool isAsync) - { - await base.Take_All(isAsync); - - AssertSql( - @"@__p_0='4' - -SELECT CASE - WHEN NOT EXISTS ( - SELECT 1 - FROM ( - SELECT TOP(@__p_0) [c].* - FROM [Customers] AS [c] - ORDER BY [c].[CustomerID] - ) AS [t] - WHERE NOT ([t].[CustomerID] LIKE N'A%')) - THEN CAST(1 AS bit) ELSE CAST(0 AS bit) -END"); - } - - public override async Task Skip_Take_Any_with_predicate(bool isAsync) - { - await base.Skip_Take_Any_with_predicate(isAsync); - - AssertSql( - @"@__p_0='5' -@__p_1='7' - -SELECT CASE - WHEN EXISTS ( - SELECT 1 - FROM ( - SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] - FROM [Customers] AS [c] - ORDER BY [c].[CustomerID] - OFFSET @__p_0 ROWS FETCH NEXT @__p_1 ROWS ONLY - ) AS [t] - WHERE [t].[CustomerID] LIKE N'C%') THEN CAST(1 AS bit) - ELSE CAST(0 AS bit) -END"); - } - - public override async Task Take_Any_with_predicate(bool isAsync) - { - await base.Take_Any_with_predicate(isAsync); - - AssertSql( - @"@__p_0='5' - -SELECT CASE - WHEN EXISTS ( - SELECT 1 - FROM ( - SELECT TOP(@__p_0) [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] - FROM [Customers] AS [c] - ORDER BY [c].[CustomerID] - ) AS [t] - WHERE [t].[CustomerID] LIKE N'B%') - THEN CAST(1 AS bit) ELSE CAST(0 AS bit) -END"); - } - - public override async Task Include_with_orderby_skip_preserves_ordering(bool isAsync) - { - await base.Include_with_orderby_skip_preserves_ordering(isAsync); - - AssertSql( - @"@__p_0='40' -@__p_1='5' - -SELECT [t0].[CustomerID], [t0].[Address], [t0].[City], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Country], [t0].[Fax], [t0].[Phone], [t0].[PostalCode], [t0].[Region] -FROM ( - SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], ROW_NUMBER() OVER(ORDER BY [c].[City], [c].[CustomerID]) AS [__RowNumber__] - FROM [Customers] AS [c] - WHERE [c].[CustomerID] NOT IN (N'VAFFE', N'DRACD') -) AS [t0] -WHERE ([t0].[__RowNumber__] > @__p_0) AND ([t0].[__RowNumber__] <= (@__p_0 + @__p_1))", - // - @"@__p_0='40' -@__p_1='5' - -SELECT [c.Orders].[OrderID], [c.Orders].[CustomerID], [c.Orders].[EmployeeID], [c.Orders].[OrderDate] -FROM [Orders] AS [c.Orders] -INNER JOIN ( - SELECT [t1].[CustomerID], [t1].[City] - FROM ( - SELECT [c0].[CustomerID], [c0].[City], ROW_NUMBER() OVER(ORDER BY [c0].[City], [c0].[CustomerID]) AS [__RowNumber__] - FROM [Customers] AS [c0] - WHERE [c0].[CustomerID] NOT IN (N'VAFFE', N'DRACD') - ) AS [t1] - WHERE ([t1].[__RowNumber__] > @__p_0) AND ([t1].[__RowNumber__] <= (@__p_0 + @__p_1)) -) AS [t] ON [c.Orders].[CustomerID] = [t].[CustomerID] -ORDER BY [t].[City], [t].[CustomerID]"); - } - - public override async Task GroupJoin_customers_orders_count_preserves_ordering(bool isAsync) - { - await base.GroupJoin_customers_orders_count_preserves_ordering(isAsync); - - AssertSql( - @"@__p_0='5' - -SELECT [t].[CustomerID], [t].[Address], [t].[City], [t].[CompanyName], [t].[ContactName], [t].[ContactTitle], [t].[Country], [t].[Fax], [t].[Phone], [t].[PostalCode], [t].[Region], [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] -FROM ( - SELECT TOP(@__p_0) [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] - FROM [Customers] AS [c] - WHERE [c].[CustomerID] NOT IN (N'VAFFE', N'DRACD') - ORDER BY [c].[City] -) AS [t] -LEFT JOIN [Orders] AS [o] ON [t].[CustomerID] = [o].[CustomerID] -ORDER BY [t].[City], [t].[CustomerID]"); - } - - public override async Task Select_take_average(bool isAsync) - { - await base.Select_take_average(isAsync); - - AssertSql( - @"@__p_0='10' - -SELECT AVG(CAST([t].[OrderID] AS float)) -FROM ( - SELECT TOP(@__p_0) [o].[OrderID] - FROM [Orders] AS [o] - ORDER BY [o].[OrderID] -) AS [t]"); - } - - public override async Task Select_take_count(bool isAsync) - { - await base.Select_take_count(isAsync); - - AssertSql( - @"@__p_0='7' - -SELECT COUNT(*) -FROM ( - SELECT TOP(@__p_0) [c].* - FROM [Customers] AS [c] -) AS [t]"); - } - - public override async Task Select_orderBy_take_count(bool isAsync) - { - await base.Select_orderBy_take_count(isAsync); - - AssertSql( - @"@__p_0='7' - -SELECT COUNT(*) -FROM ( - SELECT TOP(@__p_0) [c].* - FROM [Customers] AS [c] - ORDER BY [c].[Country] -) AS [t]"); - } - - public override async Task Select_take_long_count(bool isAsync) - { - await base.Select_take_long_count(isAsync); - - AssertSql( - @"@__p_0='7' - -SELECT COUNT_BIG(*) -FROM ( - SELECT TOP(@__p_0) [c].* - FROM [Customers] AS [c] -) AS [t]"); - } - - public override async Task Select_orderBy_take_long_count(bool isAsync) - { - await base.Select_orderBy_take_long_count(isAsync); - - AssertSql( - @"@__p_0='7' - -SELECT COUNT_BIG(*) -FROM ( - SELECT TOP(@__p_0) [c].* - FROM [Customers] AS [c] - ORDER BY [c].[Country] -) AS [t]"); - } - - public override async Task Select_take_max(bool isAsync) - { - await base.Select_take_max(isAsync); - - AssertSql( - @"@__p_0='10' - -SELECT MAX([t].[OrderID]) -FROM ( - SELECT TOP(@__p_0) [o].[OrderID] - FROM [Orders] AS [o] - ORDER BY [o].[OrderID] -) AS [t]"); - } - - public override async Task Select_take_min(bool isAsync) - { - await base.Select_take_min(isAsync); - - AssertSql( - @"@__p_0='10' - -SELECT MIN([t].[OrderID]) -FROM ( - SELECT TOP(@__p_0) [o].[OrderID] - FROM [Orders] AS [o] - ORDER BY [o].[OrderID] -) AS [t]"); - } - - public override async Task Select_take_sum(bool isAsync) - { - await base.Select_take_sum(isAsync); - - AssertSql( - @"@__p_0='10' - -SELECT SUM([t].[OrderID]) -FROM ( - SELECT TOP(@__p_0) [o].[OrderID] - FROM [Orders] AS [o] - ORDER BY [o].[OrderID] -) AS [t]"); - } - - public override async Task Select_skip_average(bool isAsync) - { - await base.Select_skip_average(isAsync); - - AssertSql( - @"@__p_0='10' - -SELECT AVG(CAST([t].[OrderID] AS float)) -FROM ( - SELECT [t0].[OrderID] - FROM ( - SELECT [o].[OrderID], ROW_NUMBER() OVER(ORDER BY [o].[OrderID]) AS [__RowNumber__] - FROM [Orders] AS [o] - ) AS [t0] - WHERE [t0].[__RowNumber__] > @__p_0 -) AS [t]"); - } - - public override async Task Select_skip_count(bool isAsync) - { - await base.Select_skip_count(isAsync); - - AssertSql( - @"@__p_0='7' - -SELECT COUNT(*) -FROM ( - SELECT [t0].* - FROM ( - SELECT [c].*, ROW_NUMBER() OVER(ORDER BY @@RowCount) AS [__RowNumber__] - FROM [Customers] AS [c] - ) AS [t0] - WHERE [t0].[__RowNumber__] > @__p_0 -) AS [t]"); - } - - public override async Task Select_orderBy_skip_count(bool isAsync) - { - await base.Select_orderBy_skip_count(isAsync); - - AssertSql( - @"@__p_0='7' - -SELECT COUNT(*) -FROM ( - SELECT [t0].* - FROM ( - SELECT [c].*, ROW_NUMBER() OVER(ORDER BY [c].[Country]) AS [__RowNumber__] - FROM [Customers] AS [c] - ) AS [t0] - WHERE [t0].[__RowNumber__] > @__p_0 -) AS [t]"); - } - - public override async Task Select_skip_long_count(bool isAsync) - { - await base.Select_skip_long_count(isAsync); - - AssertSql( - @"@__p_0='7' - -SELECT COUNT_BIG(*) -FROM ( - SELECT [t0].* - FROM ( - SELECT [c].*, ROW_NUMBER() OVER(ORDER BY @@RowCount) AS [__RowNumber__] - FROM [Customers] AS [c] - ) AS [t0] - WHERE [t0].[__RowNumber__] > @__p_0 -) AS [t]"); - } - - public override async Task Select_orderBy_skip_long_count(bool isAsync) - { - await base.Select_orderBy_skip_long_count(isAsync); - - AssertSql( - @"@__p_0='7' - -SELECT COUNT_BIG(*) -FROM ( - SELECT [t0].* - FROM ( - SELECT [c].*, ROW_NUMBER() OVER(ORDER BY [c].[Country]) AS [__RowNumber__] - FROM [Customers] AS [c] - ) AS [t0] - WHERE [t0].[__RowNumber__] > @__p_0 -) AS [t]"); - } - - public override async Task Select_skip_max(bool isAsync) - { - await base.Select_skip_max(isAsync); - - AssertSql( - @"@__p_0='10' - -SELECT MAX([t].[OrderID]) -FROM ( - SELECT [t0].[OrderID] - FROM ( - SELECT [o].[OrderID], ROW_NUMBER() OVER(ORDER BY [o].[OrderID]) AS [__RowNumber__] - FROM [Orders] AS [o] - ) AS [t0] - WHERE [t0].[__RowNumber__] > @__p_0 -) AS [t]"); - } - - public override async Task Select_skip_min(bool isAsync) - { - await base.Select_skip_min(isAsync); - - AssertSql( - @"@__p_0='10' - -SELECT MIN([t].[OrderID]) -FROM ( - SELECT [t0].[OrderID] - FROM ( - SELECT [o].[OrderID], ROW_NUMBER() OVER(ORDER BY [o].[OrderID]) AS [__RowNumber__] - FROM [Orders] AS [o] - ) AS [t0] - WHERE [t0].[__RowNumber__] > @__p_0 -) AS [t]"); - } - - public override async Task Select_skip_sum(bool isAsync) - { - await base.Select_skip_sum(isAsync); - - AssertSql( - @"@__p_0='10' - -SELECT SUM([t].[OrderID]) -FROM ( - SELECT [t0].[OrderID] - FROM ( - SELECT [o].[OrderID], ROW_NUMBER() OVER(ORDER BY [o].[OrderID]) AS [__RowNumber__] - FROM [Orders] AS [o] - ) AS [t0] - WHERE [t0].[__RowNumber__] > @__p_0 -) AS [t]"); - } - - public override async Task OrderBy_Dto_projection_skip_take(bool isAsync) - { - await base.OrderBy_Dto_projection_skip_take(isAsync); - - AssertSql( - @"@__p_0='5' -@__p_1='10' - -SELECT [t].[Id] -FROM ( - SELECT [c].[CustomerID] AS [Id], ROW_NUMBER() OVER(ORDER BY [c].[CustomerID]) AS [__RowNumber__] - FROM [Customers] AS [c] -) AS [t] -WHERE ([t].[__RowNumber__] > @__p_0) AND ([t].[__RowNumber__] <= (@__p_0 + @__p_1))"); - } - - public override async Task Projection_in_a_subquery_should_be_liftable(bool isAsync) - { - await base.Projection_in_a_subquery_should_be_liftable(isAsync); - - AssertSql( - @"@__p_0='1' - -SELECT [t].[EmployeeID] -FROM ( - SELECT [e].[EmployeeID], ROW_NUMBER() OVER(ORDER BY [e].[EmployeeID]) AS [__RowNumber__] - FROM [Employees] AS [e] -) AS [t] -WHERE [t].[__RowNumber__] > @__p_0"); - } - - private void AssertSql(params string[] expected) - => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); - - protected override void ClearLog() - => Fixture.TestSqlLoggerFactory.Clear(); - } -} diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/SimpleQuerySqlServerTest.ResultOperators.cs b/test/EFCore.SqlServer.FunctionalTests/Query/SimpleQuerySqlServerTest.ResultOperators.cs index dcaa582dc9e..95eae4410b0 100644 --- a/test/EFCore.SqlServer.FunctionalTests/Query/SimpleQuerySqlServerTest.ResultOperators.cs +++ b/test/EFCore.SqlServer.FunctionalTests/Query/SimpleQuerySqlServerTest.ResultOperators.cs @@ -721,13 +721,13 @@ public override async Task First_inside_subquery_gets_client_evaluated(bool isAs AssertSql( @"SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] FROM [Customers] AS [c] -WHERE [c].[CustomerID] = N'ALFKI'", - // - @"@_outer_CustomerID='ALFKI' (Size = 5) - -SELECT TOP(1) [o0].[CustomerID] -FROM [Orders] AS [o0] -WHERE ([o0].[CustomerID] = N'ALFKI') AND (@_outer_CustomerID = [o0].[CustomerID])"); +WHERE ([c].[CustomerID] = N'ALFKI') AND ((( + SELECT TOP(1) [o].[CustomerID] + FROM [Orders] AS [o] + WHERE (([c].[CustomerID] = [o].[CustomerID]) AND [o].[CustomerID] IS NOT NULL) AND (([o].[CustomerID] = N'ALFKI') AND [o].[CustomerID] IS NOT NULL)) = N'ALFKI') AND ( + SELECT TOP(1) [o].[CustomerID] + FROM [Orders] AS [o] + WHERE (([c].[CustomerID] = [o].[CustomerID]) AND [o].[CustomerID] IS NOT NULL) AND (([o].[CustomerID] = N'ALFKI') AND [o].[CustomerID] IS NOT NULL)) IS NOT NULL)"); } public override async Task Last(bool isAsync) @@ -745,7 +745,7 @@ public override async Task Last_when_no_order_by(bool isAsync) await base.Last_when_no_order_by(isAsync); AssertSql( - @"SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] + @"SELECT TOP(1) [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] FROM [Customers] AS [c] WHERE [c].[CustomerID] = N'ALFKI'"); } @@ -1058,18 +1058,6 @@ public override async Task Contains_top_level(bool isAsync) //END"); } - public override async Task Contains_with_local_tuple_array_closure(bool isAsync) - { - await base.Contains_with_local_tuple_array_closure(isAsync); - - AssertSql( - @"SELECT [o].[OrderID], [o].[ProductID], [o].[Discount], [o].[Quantity], [o].[UnitPrice] -FROM [Order Details] AS [o]", - // - @"SELECT [o].[OrderID], [o].[ProductID], [o].[Discount], [o].[Quantity], [o].[UnitPrice] -FROM [Order Details] AS [o]"); - } - public override async Task Contains_with_local_anonymous_type_array_closure(bool isAsync) { await base.Contains_with_local_anonymous_type_array_closure(isAsync); @@ -1263,20 +1251,6 @@ ELSE CAST(0 AS bit) END"); } - public override void Contains_over_entityType_should_materialize_when_composite() - { - base.Contains_over_entityType_should_materialize_when_composite(); - - AssertSql( - @"SELECT TOP(1) [o].[OrderID], [o].[ProductID], [o].[Discount], [o].[Quantity], [o].[UnitPrice] -FROM [Order Details] AS [o] -WHERE ([o].[OrderID] = 10248) AND ([o].[ProductID] = 42)", - // - @"SELECT [o].[OrderID], [o].[ProductID], [o].[Discount], [o].[Quantity], [o].[UnitPrice] -FROM [Order Details] AS [o] -WHERE [o].[ProductID] = 42"); - } - public override void Paging_operation_on_string_doesnt_issue_warning() { base.Paging_operation_on_string_doesnt_issue_warning(); @@ -1294,7 +1268,7 @@ public override async Task Project_constant_Sum(bool isAsync) await base.Project_constant_Sum(isAsync); AssertSql( - @"SELECT 1 + @"SELECT SUM(1) FROM [Employees] AS [e]"); } diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/SimpleQuerySqlServerTest.Select.cs b/test/EFCore.SqlServer.FunctionalTests/Query/SimpleQuerySqlServerTest.Select.cs index a918cf74db7..a19f60e19a1 100644 --- a/test/EFCore.SqlServer.FunctionalTests/Query/SimpleQuerySqlServerTest.Select.cs +++ b/test/EFCore.SqlServer.FunctionalTests/Query/SimpleQuerySqlServerTest.Select.cs @@ -47,33 +47,6 @@ ORDER BY [e].[EmployeeID] ORDER BY [t0].[OrderID]"); } - public override async Task Projection_when_arithmetic_mixed_subqueries(bool isAsync) - { - await base.Projection_when_arithmetic_mixed_subqueries(isAsync); - - AssertSql( - @"@__p_0='3' - -SELECT [t].[OrderID], [t].[CustomerID], [t].[EmployeeID], [t].[OrderDate] -FROM ( - SELECT TOP(@__p_0) [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] - FROM [Orders] AS [o] - ORDER BY [o].[OrderID] -) AS [t]", - // - @"SELECT TOP(2) [e0].[EmployeeID], [e0].[City], [e0].[Country], [e0].[FirstName], [e0].[ReportsTo], [e0].[Title] -FROM [Employees] AS [e0] -ORDER BY [e0].[EmployeeID]", - // - @"SELECT TOP(2) [e0].[EmployeeID], [e0].[City], [e0].[Country], [e0].[FirstName], [e0].[ReportsTo], [e0].[Title] -FROM [Employees] AS [e0] -ORDER BY [e0].[EmployeeID]", - // - @"SELECT TOP(2) [e0].[EmployeeID], [e0].[City], [e0].[Country], [e0].[FirstName], [e0].[ReportsTo], [e0].[Title] -FROM [Employees] AS [e0] -ORDER BY [e0].[EmployeeID]"); - } - public override async Task Projection_when_null_value(bool isAsync) { await base.Projection_when_null_value(isAsync); @@ -114,15 +87,6 @@ FROM [Employees] AS [e] WHERE [e].[EmployeeID] = 1"); } - public override async Task Select_bool_closure_with_order_by_property_with_cast_to_nullable(bool isAsync) - { - await base.Select_bool_closure_with_order_by_property_with_cast_to_nullable(isAsync); - - AssertSql( - @"SELECT 1 -FROM [Customers] AS [c]"); - } - public override async Task Select_bool_closure_with_order_parameter_with_cast_to_nullable(bool isAsync) { await base.Select_bool_closure_with_order_parameter_with_cast_to_nullable(isAsync); @@ -656,20 +620,17 @@ public override async Task Project_single_element_from_collection_with_OrderBy_T await base.Project_single_element_from_collection_with_OrderBy_Take_and_SingleOrDefault(isAsync); AssertSql( - @"SELECT [c].[CustomerID] + @"SELECT ( + SELECT TOP(2) [t].[CustomerID] + FROM ( + SELECT TOP(1) [o].[CustomerID], [o].[OrderID] + FROM [Orders] AS [o] + WHERE ([c].[CustomerID] = [o].[CustomerID]) AND [o].[CustomerID] IS NOT NULL + ORDER BY [o].[OrderID] + ) AS [t] + ORDER BY [t].[OrderID]) FROM [Customers] AS [c] -WHERE [c].[CustomerID] = N'ALFKI'", - // - @"@_outer_CustomerID='ALFKI' (Size = 5) - -SELECT TOP(2) [t0].[CustomerID] -FROM ( - SELECT TOP(1) [o0].[CustomerID], [o0].[OrderID] - FROM [Orders] AS [o0] - WHERE @_outer_CustomerID = [o0].[CustomerID] - ORDER BY [o0].[OrderID] -) AS [t0] -ORDER BY [t0].[OrderID]"); +WHERE [c].[CustomerID] = N'ALFKI'"); } public override async Task Project_single_element_from_collection_with_OrderBy_Take_and_FirstOrDefault_with_parameter(bool isAsync) diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/SimpleQuerySqlServerTest.Where.cs b/test/EFCore.SqlServer.FunctionalTests/Query/SimpleQuerySqlServerTest.Where.cs index 96ea736e337..aa0fd3f572d 100644 --- a/test/EFCore.SqlServer.FunctionalTests/Query/SimpleQuerySqlServerTest.Where.cs +++ b/test/EFCore.SqlServer.FunctionalTests/Query/SimpleQuerySqlServerTest.Where.cs @@ -462,15 +462,6 @@ public override async Task Where_shadow_subquery_FirstOrDefault(bool isAsync) //)"); } - public override async Task Where_client(bool isAsync) - { - await base.Where_client(isAsync); - - AssertSql( - @"SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] -FROM [Customers] AS [c]"); - } - public override async Task Where_subquery_correlated(bool isAsync) { await base.Where_subquery_correlated(isAsync); @@ -484,89 +475,6 @@ FROM [Customers] AS [c0] WHERE [c].[CustomerID] = [c0].[CustomerID])"); } - public override async Task Where_subquery_correlated_client_eval(bool isAsync) - { - await base.Where_subquery_correlated_client_eval(isAsync); - - AssertSql( - @"@__p_0='5' - -SELECT [t].[CustomerID], [t].[Address], [t].[City], [t].[CompanyName], [t].[ContactName], [t].[ContactTitle], [t].[Country], [t].[Fax], [t].[Phone], [t].[PostalCode], [t].[Region] -FROM ( - SELECT TOP(@__p_0) [c1].[CustomerID], [c1].[Address], [c1].[City], [c1].[CompanyName], [c1].[ContactName], [c1].[ContactTitle], [c1].[Country], [c1].[Fax], [c1].[Phone], [c1].[PostalCode], [c1].[Region] - FROM [Customers] AS [c1] - ORDER BY [c1].[CustomerID] -) AS [t]", - // - @"@_outer_CustomerID='ALFKI' (Size = 5) - -SELECT [c2].[CustomerID], [c2].[Address], [c2].[City], [c2].[CompanyName], [c2].[ContactName], [c2].[ContactTitle], [c2].[Country], [c2].[Fax], [c2].[Phone], [c2].[PostalCode], [c2].[Region] -FROM [Customers] AS [c2] -WHERE @_outer_CustomerID = [c2].[CustomerID]", - // - @"@_outer_CustomerID='ANATR' (Size = 5) - -SELECT [c2].[CustomerID], [c2].[Address], [c2].[City], [c2].[CompanyName], [c2].[ContactName], [c2].[ContactTitle], [c2].[Country], [c2].[Fax], [c2].[Phone], [c2].[PostalCode], [c2].[Region] -FROM [Customers] AS [c2] -WHERE @_outer_CustomerID = [c2].[CustomerID]", - // - @"@_outer_CustomerID='ANTON' (Size = 5) - -SELECT [c2].[CustomerID], [c2].[Address], [c2].[City], [c2].[CompanyName], [c2].[ContactName], [c2].[ContactTitle], [c2].[Country], [c2].[Fax], [c2].[Phone], [c2].[PostalCode], [c2].[Region] -FROM [Customers] AS [c2] -WHERE @_outer_CustomerID = [c2].[CustomerID]", - // - @"@_outer_CustomerID='AROUT' (Size = 5) - -SELECT [c2].[CustomerID], [c2].[Address], [c2].[City], [c2].[CompanyName], [c2].[ContactName], [c2].[ContactTitle], [c2].[Country], [c2].[Fax], [c2].[Phone], [c2].[PostalCode], [c2].[Region] -FROM [Customers] AS [c2] -WHERE @_outer_CustomerID = [c2].[CustomerID]", - // - @"@_outer_CustomerID='BERGS' (Size = 5) - -SELECT [c2].[CustomerID], [c2].[Address], [c2].[City], [c2].[CompanyName], [c2].[ContactName], [c2].[ContactTitle], [c2].[Country], [c2].[Fax], [c2].[Phone], [c2].[PostalCode], [c2].[Region] -FROM [Customers] AS [c2] -WHERE @_outer_CustomerID = [c2].[CustomerID]"); - } - - public override async Task Where_client_and_server_top_level(bool isAsync) - { - await base.Where_client_and_server_top_level(isAsync); - - AssertSql( - @"SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] -FROM [Customers] AS [c] -WHERE [c].[CustomerID] <> N'AROUT'"); - } - - public override async Task Where_client_or_server_top_level(bool isAsync) - { - await base.Where_client_or_server_top_level(isAsync); - - AssertSql( - @"SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] -FROM [Customers] AS [c]"); - } - - public override async Task Where_client_and_server_non_top_level(bool isAsync) - { - await base.Where_client_and_server_non_top_level(isAsync); - - AssertSql( - @"SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] -FROM [Customers] AS [c]"); - } - - public override async Task Where_client_deep_inside_predicate_and_server_top_level(bool isAsync) - { - await base.Where_client_deep_inside_predicate_and_server_top_level(isAsync); - - AssertSql( - @"SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] -FROM [Customers] AS [c] -WHERE [c].[CustomerID] <> N'ALFKI'"); - } - public override async Task Where_equals_method_string(bool isAsync) { await base.Where_equals_method_string(isAsync); diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/SimpleQuerySqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/SimpleQuerySqlServerTest.cs index 5c0790401f8..93b0d69ad25 100644 --- a/test/EFCore.SqlServer.FunctionalTests/Query/SimpleQuerySqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/Query/SimpleQuerySqlServerTest.cs @@ -58,17 +58,18 @@ public override void Lifting_when_subquery_nested_order_by_anonymous() AssertSql( @"@__p_0='2' -SELECT [c1_Orders].[OrderID], [c1_Orders].[CustomerID], [c1_Orders].[EmployeeID], [c1_Orders].[OrderDate], [t0].[CustomerID] -FROM [Orders] AS [c1_Orders] +SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] +FROM [Orders] AS [o] INNER JOIN ( SELECT DISTINCT [t].[CustomerID] FROM ( - SELECT TOP(@__p_0) [c].* + SELECT TOP(@__p_0) [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] FROM [Customers] AS [c] ORDER BY [c].[CustomerID] ) AS [t] - CROSS JOIN [Customers] AS [c2] -) AS [t0] ON [c1_Orders].[CustomerID] = [t0].[CustomerID]"); + CROSS JOIN [Customers] AS [c0] +) AS [t0] ON [o].[CustomerID] = [t0].[CustomerID] +ORDER BY [t0].[CustomerID]"); } public override void Lifting_when_subquery_nested_order_by_simple() @@ -79,19 +80,18 @@ public override void Lifting_when_subquery_nested_order_by_simple() AssertSql( @"@__p_0='2' -SELECT [t0].[CustomerID] -FROM ( +SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] +FROM [Orders] AS [o] +INNER JOIN ( SELECT DISTINCT [t].[CustomerID] FROM ( - SELECT TOP(@__p_0) [c].* + SELECT TOP(@__p_0) [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] FROM [Customers] AS [c] ORDER BY [c].[CustomerID] ) AS [t] - CROSS JOIN [Customers] AS [c2] -) AS [t0]", - // - @"SELECT [c1_Orders].[OrderID], [c1_Orders].[CustomerID], [c1_Orders].[EmployeeID], [c1_Orders].[OrderDate] -FROM [Orders] AS [c1_Orders]"); + CROSS JOIN [Customers] AS [c0] +) AS [t0] ON [o].[CustomerID] = [t0].[CustomerID] +ORDER BY [t0].[CustomerID]"); } [ConditionalFact(Skip = "Issue #16006")] @@ -337,15 +337,6 @@ FROM [Order Details] AS [o] ORDER BY [o].[OrderID] DESC, [o].[ProductID] DESC"); } - public override async Task Queryable_reprojection(bool isAsync) - { - await base.Queryable_reprojection(isAsync); - - AssertSql( - @"SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] -FROM [Customers] AS [c]"); - } - public override async Task Default_if_empty_top_level(bool isAsync) { await base.Default_if_empty_top_level(isAsync); @@ -421,24 +412,6 @@ WHERE [e].[EmployeeID] > 0 ) AS [t] ON 1 = 1"); } - public override async Task Default_if_empty_top_level_arg(bool isAsync) - { - await base.Default_if_empty_top_level_arg(isAsync); - - AssertSql( - @"SELECT [c].[EmployeeID], [c].[City], [c].[Country], [c].[FirstName], [c].[ReportsTo], [c].[Title] -FROM [Employees] AS [c] -WHERE [c].[EmployeeID] = -1"); - } - - public override async Task Default_if_empty_top_level_arg_followed_by_projecting_constant(bool isAsync) - { - await base.Default_if_empty_top_level_arg_followed_by_projecting_constant(isAsync); - - AssertSql( - ""); - } - public override async Task Default_if_empty_top_level_projection(bool isAsync) { await base.Default_if_empty_top_level_projection(isAsync); @@ -482,23 +455,12 @@ public override async Task Where_query_composition_is_null(bool isAsync) SELECT TOP(@__p_0) [e].[EmployeeID], [e].[City], [e].[Country], [e].[FirstName], [e].[ReportsTo], [e].[Title] FROM [Employees] AS [e] ORDER BY [e].[EmployeeID] -) AS [t]", - // - @"@_outer_ReportsTo='2' (Nullable = true) - -SELECT TOP(2) [e20].[EmployeeID] -FROM [Employees] AS [e20] -WHERE [e20].[EmployeeID] = @_outer_ReportsTo", - // - @"SELECT TOP(2) [e20].[EmployeeID] -FROM [Employees] AS [e20] -WHERE [e20].[EmployeeID] IS NULL", - // - @"@_outer_ReportsTo='2' (Nullable = true) - -SELECT TOP(2) [e20].[EmployeeID] -FROM [Employees] AS [e20] -WHERE [e20].[EmployeeID] = @_outer_ReportsTo"); +) AS [t] +WHERE ( + SELECT TOP(2) [e0].[EmployeeID] + FROM [Employees] AS [e0] + WHERE ([e0].[EmployeeID] = [t].[ReportsTo]) AND [t].[ReportsTo] IS NOT NULL) IS NULL +ORDER BY [t].[EmployeeID]"); } public override async Task Where_query_composition_is_not_null(bool isAsync) @@ -506,30 +468,21 @@ public override async Task Where_query_composition_is_not_null(bool isAsync) await base.Where_query_composition_is_not_null(isAsync); AssertSql( - @"@__p_0='3' + @"@__p_0='4' +@__p_1='3' SELECT [t].[EmployeeID], [t].[City], [t].[Country], [t].[FirstName], [t].[ReportsTo], [t].[Title] FROM ( - SELECT TOP(@__p_0) [e].[EmployeeID], [e].[City], [e].[Country], [e].[FirstName], [e].[ReportsTo], [e].[Title] + SELECT [e].[EmployeeID], [e].[City], [e].[Country], [e].[FirstName], [e].[ReportsTo], [e].[Title] FROM [Employees] AS [e] ORDER BY [e].[EmployeeID] -) AS [t]", - // - @"@_outer_ReportsTo='2' (Nullable = true) - -SELECT TOP(2) [e20].[EmployeeID] -FROM [Employees] AS [e20] -WHERE [e20].[EmployeeID] = @_outer_ReportsTo", - // - @"SELECT TOP(2) [e20].[EmployeeID] -FROM [Employees] AS [e20] -WHERE [e20].[EmployeeID] IS NULL", - // - @"@_outer_ReportsTo='2' (Nullable = true) - -SELECT TOP(2) [e20].[EmployeeID] -FROM [Employees] AS [e20] -WHERE [e20].[EmployeeID] = @_outer_ReportsTo"); + OFFSET @__p_0 ROWS FETCH NEXT @__p_1 ROWS ONLY +) AS [t] +WHERE ( + SELECT TOP(2) [e0].[EmployeeID] + FROM [Employees] AS [e0] + WHERE ([e0].[EmployeeID] = [t].[ReportsTo]) AND [t].[ReportsTo] IS NOT NULL) IS NOT NULL +ORDER BY [t].[EmployeeID]"); } public override async Task Where_query_composition_entity_equality_one_element_SingleOrDefault(bool isAsync) @@ -543,23 +496,14 @@ public override async Task Where_query_composition_entity_equality_one_element_S FROM ( SELECT TOP(@__p_0) [e].[EmployeeID], [e].[City], [e].[Country], [e].[FirstName], [e].[ReportsTo], [e].[Title] FROM [Employees] AS [e] -) AS [t]", - // - @"@_outer_ReportsTo='2' (Nullable = true) - -SELECT TOP(2) [e20].[EmployeeID] -FROM [Employees] AS [e20] -WHERE [e20].[EmployeeID] = @_outer_ReportsTo", - // - @"SELECT TOP(2) [e20].[EmployeeID] -FROM [Employees] AS [e20] -WHERE [e20].[EmployeeID] IS NULL", - // - @"@_outer_ReportsTo='2' (Nullable = true) - -SELECT TOP(2) [e20].[EmployeeID] -FROM [Employees] AS [e20] -WHERE [e20].[EmployeeID] = @_outer_ReportsTo"); +) AS [t] +WHERE (( + SELECT TOP(2) [e0].[EmployeeID] + FROM [Employees] AS [e0] + WHERE ([e0].[EmployeeID] = [t].[ReportsTo]) AND [t].[ReportsTo] IS NOT NULL) = 0) AND ( + SELECT TOP(2) [e0].[EmployeeID] + FROM [Employees] AS [e0] + WHERE ([e0].[EmployeeID] = [t].[ReportsTo]) AND [t].[ReportsTo] IS NOT NULL) IS NOT NULL"); } public override async Task Where_query_composition_entity_equality_one_element_FirstOrDefault(bool isAsync) @@ -589,19 +533,14 @@ public override async Task Where_query_composition_entity_equality_no_elements_S FROM ( SELECT TOP(@__p_0) [e].[EmployeeID], [e].[City], [e].[Country], [e].[FirstName], [e].[ReportsTo], [e].[Title] FROM [Employees] AS [e] -) AS [t]", - // - @"SELECT TOP(2) [e20].[EmployeeID] -FROM [Employees] AS [e20] -WHERE [e20].[EmployeeID] = 42", - // - @"SELECT TOP(2) [e20].[EmployeeID] -FROM [Employees] AS [e20] -WHERE [e20].[EmployeeID] = 42", - // - @"SELECT TOP(2) [e20].[EmployeeID] -FROM [Employees] AS [e20] -WHERE [e20].[EmployeeID] = 42"); +) AS [t] +WHERE (( + SELECT TOP(2) [e0].[EmployeeID] + FROM [Employees] AS [e0] + WHERE [e0].[EmployeeID] = 42) = 0) AND ( + SELECT TOP(2) [e0].[EmployeeID] + FROM [Employees] AS [e0] + WHERE [e0].[EmployeeID] = 42) IS NOT NULL"); } public override async Task Where_query_composition_entity_equality_no_elements_FirstOrDefault(bool isAsync) @@ -647,19 +586,17 @@ public override async Task Where_query_composition2(bool isAsync) FROM ( SELECT TOP(@__p_0) [e].[EmployeeID], [e].[City], [e].[Country], [e].[FirstName], [e].[ReportsTo], [e].[Title] FROM [Employees] AS [e] -) AS [t]", - // - @"SELECT TOP(1) [e0].[EmployeeID], [e0].[City], [e0].[Country], [e0].[FirstName], [e0].[ReportsTo], [e0].[Title] -FROM [Employees] AS [e0] -ORDER BY [e0].[EmployeeID]", - // - @"SELECT TOP(1) [e0].[EmployeeID], [e0].[City], [e0].[Country], [e0].[FirstName], [e0].[ReportsTo], [e0].[Title] -FROM [Employees] AS [e0] -ORDER BY [e0].[EmployeeID]", - // - @"SELECT TOP(1) [e0].[EmployeeID], [e0].[City], [e0].[Country], [e0].[FirstName], [e0].[ReportsTo], [e0].[Title] -FROM [Employees] AS [e0] -ORDER BY [e0].[EmployeeID]"); +) AS [t] +WHERE (([t].[FirstName] = ( + SELECT TOP(1) [e0].[FirstName] + FROM [Employees] AS [e0] + ORDER BY [e0].[EmployeeID])) AND ([t].[FirstName] IS NOT NULL AND ( + SELECT TOP(1) [e0].[FirstName] + FROM [Employees] AS [e0] + ORDER BY [e0].[EmployeeID]) IS NOT NULL)) OR ([t].[FirstName] IS NULL AND ( + SELECT TOP(1) [e0].[FirstName] + FROM [Employees] AS [e0] + ORDER BY [e0].[EmployeeID]) IS NULL)"); } public override async Task Where_query_composition2_FirstOrDefault(bool isAsync) @@ -733,33 +670,23 @@ public override void Select_Where_Subquery_Deep_Single() base.Select_Where_Subquery_Deep_Single(); AssertSql( - @"SELECT [od].[OrderID], [od].[ProductID], [od].[Discount], [od].[Quantity], [od].[UnitPrice] -FROM [Order Details] AS [od] -WHERE [od].[OrderID] = 10344", - // - @"@_outer_OrderID='10344' - -SELECT TOP(2) [o0].[CustomerID] -FROM [Orders] AS [o0] -WHERE @_outer_OrderID = [o0].[OrderID]", - // - @"@_outer_CustomerID1='WHITC' (Size = 5) - -SELECT TOP(2) [c2].[City] -FROM [Customers] AS [c2] -WHERE @_outer_CustomerID1 = [c2].[CustomerID]", - // - @"@_outer_OrderID='10344' - -SELECT TOP(2) [o0].[CustomerID] -FROM [Orders] AS [o0] -WHERE @_outer_OrderID = [o0].[OrderID]", - // - @"@_outer_CustomerID1='WHITC' (Size = 5) + @"@__p_0='2' -SELECT TOP(2) [c2].[City] -FROM [Customers] AS [c2] -WHERE @_outer_CustomerID1 = [c2].[CustomerID]"); +SELECT TOP(@__p_0) [o].[OrderID], [o].[ProductID], [o].[Discount], [o].[Quantity], [o].[UnitPrice] +FROM [Order Details] AS [o] +WHERE ([o].[OrderID] = 10344) AND ((( + SELECT TOP(2) ( + SELECT TOP(2) [c].[City] + FROM [Customers] AS [c] + WHERE ([o0].[CustomerID] = [c].[CustomerID]) AND [o0].[CustomerID] IS NOT NULL) + FROM [Orders] AS [o0] + WHERE [o].[OrderID] = [o0].[OrderID]) = N'Seattle') AND ( + SELECT TOP(2) ( + SELECT TOP(2) [c].[City] + FROM [Customers] AS [c] + WHERE ([o0].[CustomerID] = [c].[CustomerID]) AND [o0].[CustomerID] IS NOT NULL) + FROM [Orders] AS [o0] + WHERE [o].[OrderID] = [o0].[OrderID]) IS NOT NULL)"); } public override void Select_Where_Subquery_Deep_First() @@ -799,44 +726,42 @@ SELECT TOP(@__p_0) [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[Order FROM [Orders] AS [o] ORDER BY [o].[OrderID] ) AS [t] -ORDER BY [t].[OrderID]", - // - @"SELECT [t1].[OrderID] -FROM ( - SELECT TOP(2) [od0].[OrderID], [od0].[ProductID], [od0].[Discount], [od0].[Quantity], [od0].[UnitPrice] - FROM [Order Details] AS [od0] - ORDER BY [od0].[OrderID] -) AS [t1]", - // - @"@_outer_CustomerID2='VINET' (Size = 5) - -SELECT TOP(1) [c3].[Country] -FROM [Customers] AS [c3] -WHERE [c3].[CustomerID] = @_outer_CustomerID2 -ORDER BY [c3].[CustomerID]", - // - @"@_outer_OrderID1='10248' - -SELECT TOP(1) [c4].[Country] -FROM [Orders] AS [o20] -INNER JOIN [Customers] AS [c4] ON [o20].[CustomerID] = [c4].[CustomerID] -WHERE [o20].[OrderID] = @_outer_OrderID1 -ORDER BY [o20].[OrderID], [c4].[CustomerID]", - // - @"@_outer_CustomerID2='VINET' (Size = 5) - -SELECT TOP(1) [c3].[Country] -FROM [Customers] AS [c3] -WHERE [c3].[CustomerID] = @_outer_CustomerID2 -ORDER BY [c3].[CustomerID]", - // - @"@_outer_OrderID1='10248' - -SELECT TOP(1) [c4].[Country] -FROM [Orders] AS [o20] -INNER JOIN [Customers] AS [c4] ON [o20].[CustomerID] = [c4].[CustomerID] -WHERE [o20].[OrderID] = @_outer_OrderID1 -ORDER BY [o20].[OrderID], [c4].[CustomerID]"); +WHERE ( + SELECT COUNT(*) + FROM ( + SELECT TOP(2) [o0].[OrderID], [o0].[ProductID], [o0].[Discount], [o0].[Quantity], [o0].[UnitPrice] + FROM [Order Details] AS [o0] + ORDER BY [o0].[OrderID] + ) AS [t0] + WHERE ((( + SELECT TOP(1) [c].[Country] + FROM [Customers] AS [c] + WHERE ([c].[CustomerID] = [t].[CustomerID]) AND [t].[CustomerID] IS NOT NULL + ORDER BY [c].[CustomerID]) = ( + SELECT TOP(1) [c0].[Country] + FROM [Orders] AS [o1] + INNER JOIN [Customers] AS [c0] ON [o1].[CustomerID] = [c0].[CustomerID] + WHERE [o1].[OrderID] = [t0].[OrderID] + ORDER BY [o1].[OrderID], [c0].[CustomerID])) AND (( + SELECT TOP(1) [c].[Country] + FROM [Customers] AS [c] + WHERE ([c].[CustomerID] = [t].[CustomerID]) AND [t].[CustomerID] IS NOT NULL + ORDER BY [c].[CustomerID]) IS NOT NULL AND ( + SELECT TOP(1) [c0].[Country] + FROM [Orders] AS [o1] + INNER JOIN [Customers] AS [c0] ON [o1].[CustomerID] = [c0].[CustomerID] + WHERE [o1].[OrderID] = [t0].[OrderID] + ORDER BY [o1].[OrderID], [c0].[CustomerID]) IS NOT NULL)) OR (( + SELECT TOP(1) [c].[Country] + FROM [Customers] AS [c] + WHERE ([c].[CustomerID] = [t].[CustomerID]) AND [t].[CustomerID] IS NOT NULL + ORDER BY [c].[CustomerID]) IS NULL AND ( + SELECT TOP(1) [c0].[Country] + FROM [Orders] AS [o1] + INNER JOIN [Customers] AS [c0] ON [o1].[CustomerID] = [c0].[CustomerID] + WHERE [o1].[OrderID] = [t0].[OrderID] + ORDER BY [o1].[OrderID], [c0].[CustomerID]) IS NULL)) > 0 +ORDER BY [t].[OrderID]"); } public override async Task Where_subquery_anon(bool isAsync) @@ -1536,16 +1461,6 @@ ELSE CAST(0 AS bit) END"); } - public override async Task First_client_predicate(bool isAsync) - { - await base.First_client_predicate(isAsync); - - AssertSql( - @"SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] -FROM [Customers] AS [c] -ORDER BY [c].[CustomerID]"); - } - public override async Task Where_select_many_or(bool isAsync) { await base.Where_select_many_or(isAsync); @@ -1604,49 +1519,6 @@ CROSS JOIN [Employees] AS [e] WHERE ((((([c].[City] = @__london_0) AND ([c].[City] IS NOT NULL AND @__london_0 IS NOT NULL)) OR ([c].[City] IS NULL AND @__london_0 IS NULL)) OR (([c].[City] = N'Berlin') AND [c].[City] IS NOT NULL)) OR (([c].[City] = N'Seattle') AND [c].[City] IS NOT NULL)) OR ((([c].[City] = @__lisboa_1) AND ([c].[City] IS NOT NULL AND @__lisboa_1 IS NOT NULL)) OR ([c].[City] IS NULL AND @__lisboa_1 IS NULL))"); } - public override async Task SelectMany_mixed(bool isAsync) - { - await base.SelectMany_mixed(isAsync); - - AssertSql( - @"@__p_0='2' - -SELECT [t].[EmployeeID], [t].[City], [t].[Country], [t].[FirstName], [t].[ReportsTo], [t].[Title] -FROM ( - SELECT TOP(@__p_0) [e].[EmployeeID], [e].[City], [e].[Country], [e].[FirstName], [e].[ReportsTo], [e].[Title] - FROM [Employees] AS [e] - ORDER BY [e].[EmployeeID] -) AS [t]", - // - @"SELECT [t0].[CustomerID], [t0].[Address], [t0].[City], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Country], [t0].[Fax], [t0].[Phone], [t0].[PostalCode], [t0].[Region] -FROM ( - SELECT TOP(2) [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] - FROM [Customers] AS [c] - ORDER BY [c].[CustomerID] -) AS [t0]", - // - @"SELECT [t0].[CustomerID], [t0].[Address], [t0].[City], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Country], [t0].[Fax], [t0].[Phone], [t0].[PostalCode], [t0].[Region] -FROM ( - SELECT TOP(2) [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] - FROM [Customers] AS [c] - ORDER BY [c].[CustomerID] -) AS [t0]", - // - @"SELECT [t0].[CustomerID], [t0].[Address], [t0].[City], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Country], [t0].[Fax], [t0].[Phone], [t0].[PostalCode], [t0].[Region] -FROM ( - SELECT TOP(2) [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] - FROM [Customers] AS [c] - ORDER BY [c].[CustomerID] -) AS [t0]", - // - @"SELECT [t0].[CustomerID], [t0].[Address], [t0].[City], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Country], [t0].[Fax], [t0].[Phone], [t0].[PostalCode], [t0].[Region] -FROM ( - SELECT TOP(2) [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] - FROM [Customers] AS [c] - ORDER BY [c].[CustomerID] -) AS [t0]"); - } - public override async Task SelectMany_simple_subquery(bool isAsync) { await base.SelectMany_simple_subquery(isAsync); @@ -2224,42 +2096,6 @@ FROM [Customers] AS [c] ORDER BY [c].[CustomerID]"); } - public override async Task OrderBy_client_mixed(bool isAsync) - { - await base.OrderBy_client_mixed(isAsync); - - AssertSql( - @"SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] -FROM [Customers] AS [c]"); - } - - public override async Task OrderBy_multiple_queries(bool isAsync) - { - await base.OrderBy_multiple_queries(isAsync); - - AssertSql( - @"SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] -FROM [Orders] AS [o]", - // - @"SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] -FROM [Customers] AS [c]"); - } - - public override async Task Take_Distinct(bool isAsync) - { - await base.Take_Distinct(isAsync); - - AssertSql( - @"@__p_0='5' - -SELECT DISTINCT [t].[OrderID], [t].[CustomerID], [t].[EmployeeID], [t].[OrderDate] -FROM ( - SELECT TOP(@__p_0) [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] - FROM [Orders] AS [o] - ORDER BY [o].[OrderID] -) AS [t]"); - } - public override async Task Distinct_Take(bool isAsync) { await base.Distinct_Take(isAsync); @@ -2383,41 +2219,12 @@ SELECT 1 ORDER BY [e].[EmployeeID]"); } - public override async Task Where_query_composition4(bool isAsync) - { - await base.Where_query_composition4(isAsync); - - AssertSql( - @"@__p_0='2' - -SELECT [t].[CustomerID], [t].[Address], [t].[City], [t].[CompanyName], [t].[ContactName], [t].[ContactTitle], [t].[Country], [t].[Fax], [t].[Phone], [t].[PostalCode], [t].[Region] -FROM ( - SELECT TOP(@__p_0) [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] - FROM [Customers] AS [c] - ORDER BY [c].[CustomerID] -) AS [t]", - // - @"SELECT 1 -FROM [Customers] AS [c0] -ORDER BY [c0].[CustomerID]", - // - @"SELECT [c2].[CustomerID], [c2].[Address], [c2].[City], [c2].[CompanyName], [c2].[ContactName], [c2].[ContactTitle], [c2].[Country], [c2].[Fax], [c2].[Phone], [c2].[PostalCode], [c2].[Region] -FROM [Customers] AS [c2]", - // - @"SELECT 1 -FROM [Customers] AS [c0] -ORDER BY [c0].[CustomerID]", - // - @"SELECT [c2].[CustomerID], [c2].[Address], [c2].[City], [c2].[CompanyName], [c2].[ContactName], [c2].[ContactTitle], [c2].[Country], [c2].[Fax], [c2].[Phone], [c2].[PostalCode], [c2].[Region] -FROM [Customers] AS [c2]"); - } - public override void Select_DTO_distinct_translated_to_server() { base.Select_DTO_distinct_translated_to_server(); AssertSql( - @"SELECT 1 + @"SELECT DISTINCT 1 FROM [Orders] AS [o] WHERE [o].[OrderID] < 10300"); } @@ -2879,60 +2686,6 @@ FROM [Orders] AS [o] WHERE [o].[OrderDate] > @__p_0"); } - public override void Random_next_is_not_funcletized_1() - { - base.Random_next_is_not_funcletized_1(); - - AssertSql( - @"SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] -FROM [Orders] AS [o]"); - } - - public override void Random_next_is_not_funcletized_2() - { - base.Random_next_is_not_funcletized_2(); - - AssertSql( - @"SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] -FROM [Orders] AS [o]"); - } - - public override void Random_next_is_not_funcletized_3() - { - base.Random_next_is_not_funcletized_3(); - - AssertSql( - @"SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] -FROM [Orders] AS [o]"); - } - - public override void Random_next_is_not_funcletized_4() - { - base.Random_next_is_not_funcletized_4(); - - AssertSql( - @"SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] -FROM [Orders] AS [o]"); - } - - public override void Random_next_is_not_funcletized_5() - { - base.Random_next_is_not_funcletized_5(); - - AssertSql( - @"SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] -FROM [Orders] AS [o]"); - } - - public override void Random_next_is_not_funcletized_6() - { - base.Random_next_is_not_funcletized_6(); - - AssertSql( - @"SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] -FROM [Orders] AS [o]"); - } - public override async Task Environment_newline_is_funcletized(bool isAsync) { await base.Environment_newline_is_funcletized(isAsync); @@ -3207,48 +2960,19 @@ public override async Task Subquery_member_pushdown_does_not_change_original_sub AssertSql( @"@__p_0='3' -SELECT [t].[CustomerID], [t].[OrderID] +SELECT [t].[OrderID] AS [OrderId], ( + SELECT TOP(2) [c].[City] + FROM [Customers] AS [c] + WHERE ([c].[CustomerID] = [t].[CustomerID]) AND [t].[CustomerID] IS NOT NULL) AS [City] FROM ( - SELECT TOP(@__p_0) [o].* + SELECT TOP(@__p_0) [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] FROM [Orders] AS [o] ORDER BY [o].[OrderID] -) AS [t]", - // - @"@_outer_CustomerID='VINET' (Size = 5) - -SELECT TOP(2) [c0].[City] -FROM [Customers] AS [c0] -WHERE [c0].[CustomerID] = @_outer_CustomerID", - // - @"@_outer_CustomerID='TOMSP' (Size = 5) - -SELECT TOP(2) [c0].[City] -FROM [Customers] AS [c0] -WHERE [c0].[CustomerID] = @_outer_CustomerID", - // - @"@_outer_CustomerID='HANAR' (Size = 5) - -SELECT TOP(2) [c0].[City] -FROM [Customers] AS [c0] -WHERE [c0].[CustomerID] = @_outer_CustomerID", - // - @"@_outer_CustomerID1='TOMSP' (Size = 5) - -SELECT TOP(2) [c2].[City] -FROM [Customers] AS [c2] -WHERE [c2].[CustomerID] = @_outer_CustomerID1", - // - @"@_outer_CustomerID1='VINET' (Size = 5) - -SELECT TOP(2) [c2].[City] -FROM [Customers] AS [c2] -WHERE [c2].[CustomerID] = @_outer_CustomerID1", - // - @"@_outer_CustomerID1='HANAR' (Size = 5) - -SELECT TOP(2) [c2].[City] -FROM [Customers] AS [c2] -WHERE [c2].[CustomerID] = @_outer_CustomerID1"); +) AS [t] +ORDER BY ( + SELECT TOP(2) [c0].[City] + FROM [Customers] AS [c0] + WHERE ([c0].[CustomerID] = [t].[CustomerID]) AND [t].[CustomerID] IS NOT NULL)"); } public override async Task Subquery_member_pushdown_does_not_change_original_subquery_model2(bool isAsync) @@ -3258,48 +2982,19 @@ public override async Task Subquery_member_pushdown_does_not_change_original_sub AssertSql( @"@__p_0='3' -SELECT [t].[CustomerID], [t].[OrderID] +SELECT [t].[OrderID] AS [OrderId], ( + SELECT TOP(2) [c].[City] + FROM [Customers] AS [c] + WHERE ([c].[CustomerID] = [t].[CustomerID]) AND [t].[CustomerID] IS NOT NULL) AS [City] FROM ( - SELECT TOP(@__p_0) [o].* + SELECT TOP(@__p_0) [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] FROM [Orders] AS [o] ORDER BY [o].[OrderID] -) AS [t]", - // - @"@_outer_CustomerID='VINET' (Size = 5) - -SELECT TOP(2) [c0].[City] -FROM [Customers] AS [c0] -WHERE [c0].[CustomerID] = @_outer_CustomerID", - // - @"@_outer_CustomerID='TOMSP' (Size = 5) - -SELECT TOP(2) [c0].[City] -FROM [Customers] AS [c0] -WHERE [c0].[CustomerID] = @_outer_CustomerID", - // - @"@_outer_CustomerID='HANAR' (Size = 5) - -SELECT TOP(2) [c0].[City] -FROM [Customers] AS [c0] -WHERE [c0].[CustomerID] = @_outer_CustomerID", - // - @"@_outer_CustomerID1='TOMSP' (Size = 5) - -SELECT TOP(2) [c2].[City] -FROM [Customers] AS [c2] -WHERE [c2].[CustomerID] = @_outer_CustomerID1", - // - @"@_outer_CustomerID1='VINET' (Size = 5) - -SELECT TOP(2) [c2].[City] -FROM [Customers] AS [c2] -WHERE [c2].[CustomerID] = @_outer_CustomerID1", - // - @"@_outer_CustomerID1='HANAR' (Size = 5) - -SELECT TOP(2) [c2].[City] -FROM [Customers] AS [c2] -WHERE [c2].[CustomerID] = @_outer_CustomerID1"); +) AS [t] +ORDER BY ( + SELECT TOP(2) [c0].[City] + FROM [Customers] AS [c0] + WHERE ([c0].[CustomerID] = [t].[CustomerID]) AND [t].[CustomerID] IS NOT NULL)"); } public override async Task Query_expression_with_to_string_and_contains(bool isAsync) @@ -3813,19 +3508,14 @@ public override async Task Complex_query_with_repeated_query_model_compiles_corr await base.Complex_query_with_repeated_query_model_compiles_correctly(isAsync); AssertSql( - @"SELECT [outer].[CustomerID], [outer].[Address], [outer].[City], [outer].[CompanyName], [outer].[ContactName], [outer].[ContactTitle], [outer].[Country], [outer].[Fax], [outer].[Phone], [outer].[PostalCode], [outer].[Region] -FROM [Customers] AS [outer] -WHERE [outer].[CustomerID] = N'ALFKI'", - // - @"SELECT CASE - WHEN EXISTS ( + @"SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] +FROM [Customers] AS [c] +WHERE ([c].[CustomerID] = N'ALFKI') AND EXISTS ( + SELECT 1 + FROM [Customers] AS [c0] + WHERE EXISTS ( SELECT 1 - FROM [Customers] AS [c0] - WHERE EXISTS ( - SELECT 1 - FROM [Customers] AS [cc1])) - THEN CAST(1 AS bit) ELSE CAST(0 AS bit) -END"); + FROM [Customers] AS [c1]))"); } public override async Task Complex_query_with_repeated_nested_query_model_compiles_correctly(bool isAsync) @@ -3833,26 +3523,21 @@ public override async Task Complex_query_with_repeated_nested_query_model_compil await base.Complex_query_with_repeated_nested_query_model_compiles_correctly(isAsync); AssertSql( - @"SELECT [outer].[CustomerID], [outer].[Address], [outer].[City], [outer].[CompanyName], [outer].[ContactName], [outer].[ContactTitle], [outer].[Country], [outer].[Fax], [outer].[Phone], [outer].[PostalCode], [outer].[Region] -FROM [Customers] AS [outer] -WHERE [outer].[CustomerID] = N'ALFKI'", - // - @"SELECT CASE - WHEN EXISTS ( + @"SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] +FROM [Customers] AS [c] +WHERE ([c].[CustomerID] = N'ALFKI') AND EXISTS ( + SELECT 1 + FROM [Customers] AS [c0] + WHERE EXISTS ( SELECT 1 - FROM [Customers] AS [c0] + FROM [Customers] AS [c1] WHERE EXISTS ( - SELECT 1 - FROM [Customers] AS [cc1] - WHERE EXISTS ( - SELECT DISTINCT 1 - FROM ( - SELECT TOP(10) [inner1].* - FROM [Customers] AS [inner1] - ORDER BY [inner1].[CustomerID] - ) AS [t1]))) - THEN CAST(1 AS bit) ELSE CAST(0 AS bit) -END"); + SELECT DISTINCT 1 + FROM ( + SELECT TOP(10) [c2].[CustomerID], [c2].[Address], [c2].[City], [c2].[CompanyName], [c2].[ContactName], [c2].[ContactTitle], [c2].[Country], [c2].[Fax], [c2].[Phone], [c2].[PostalCode], [c2].[Region] + FROM [Customers] AS [c2] + ORDER BY [c2].[CustomerID] + ) AS [t])))"); } public override async Task Anonymous_member_distinct_where(bool isAsync) diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/UdfDbFunctionSqlServerTests.cs b/test/EFCore.SqlServer.FunctionalTests/Query/UdfDbFunctionSqlServerTests.cs index e3ce20f194f..9c4d605076e 100644 --- a/test/EFCore.SqlServer.FunctionalTests/Query/UdfDbFunctionSqlServerTests.cs +++ b/test/EFCore.SqlServer.FunctionalTests/Query/UdfDbFunctionSqlServerTests.cs @@ -190,26 +190,6 @@ FROM [Customers] AS [c] WHERE ([c].[Id] = @__customerId_1) AND @__customerId_1 IS NOT NULL"); } - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'where (2 == AddOneStatic([c].Id))'")] - public override void Scalar_Nested_Function_Unwind_Client_Eval_Where_Static() - { - base.Scalar_Nested_Function_Unwind_Client_Eval_Where_Static(); - - AssertSql( - @"SELECT [c].[Id] -FROM [Customers] AS [c]"); - } - - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'orderby AddOneStatic([c].Id) asc'")] - public override void Scalar_Nested_Function_Unwind_Client_Eval_OrderBy_Static() - { - base.Scalar_Nested_Function_Unwind_Client_Eval_OrderBy_Static(); - - AssertSql( - @"SELECT [c].[Id] -FROM [Customers] AS [c]"); - } - public override void Scalar_Nested_Function_Unwind_Client_Eval_Select_Static() { base.Scalar_Nested_Function_Unwind_Client_Eval_Select_Static(); @@ -220,116 +200,6 @@ FROM [Customers] AS [c] ORDER BY [c].[Id]"); } - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'where (2 == AddOneStatic(Abs(CustomerOrderCountWithClientStatic([c].Id))))'")] - public override void Scalar_Nested_Function_Client_BCL_UDF_Static() - { - base.Scalar_Nested_Function_Client_BCL_UDF_Static(); - - AssertSql( - @"SELECT [c].[Id] -FROM [Customers] AS [c]"); - } - - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'where (2 == AddOneStatic(CustomerOrderCountWithClientStatic(Abs([c].Id))))'")] - public override void Scalar_Nested_Function_Client_UDF_BCL_Static() - { - base.Scalar_Nested_Function_Client_UDF_BCL_Static(); - - AssertSql( - @"SELECT [c].[Id] -FROM [Customers] AS [c]"); - } - - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'where (2 == Abs(AddOneStatic(CustomerOrderCountWithClientStatic([c].Id))))'")] - public override void Scalar_Nested_Function_BCL_Client_UDF_Static() - { - base.Scalar_Nested_Function_BCL_Client_UDF_Static(); - - AssertSql( - @"SELECT [c].[Id] -FROM [Customers] AS [c]"); - } - - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'where (1 == Abs(CustomerOrderCountWithClientStatic(AddOneStatic([c].Id))))'")] - public override void Scalar_Nested_Function_BCL_UDF_Client_Static() - { - base.Scalar_Nested_Function_BCL_UDF_Client_Static(); - - AssertSql( - @"SELECT [c].[Id] -FROM [Customers] AS [c]"); - } - - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'where (1 == CustomerOrderCountWithClientStatic(Abs(AddOneStatic([c].Id))))'")] - public override void Scalar_Nested_Function_UDF_BCL_Client_Static() - { - base.Scalar_Nested_Function_UDF_BCL_Client_Static(); - - AssertSql( - @"SELECT [c].[Id] -FROM [Customers] AS [c]"); - } - - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'where (1 == CustomerOrderCountWithClientStatic(AddOneStatic(Abs([c].Id))))'")] - public override void Scalar_Nested_Function_UDF_Client_BCL_Static() - { - base.Scalar_Nested_Function_UDF_Client_BCL_Static(); - - AssertSql( - @"SELECT [c].[Id] -FROM [Customers] AS [c]"); - } - - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'where (3 == AddOneStatic(Abs([c].Id)))'")] - public override void Scalar_Nested_Function_Client_BCL_Static() - { - base.Scalar_Nested_Function_Client_BCL_Static(); - - AssertSql( - @"SELECT [c].[Id] -FROM [Customers] AS [c]"); - } - - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'where (2 == AddOneStatic(CustomerOrderCountWithClientStatic([c].Id)))'")] - public override void Scalar_Nested_Function_Client_UDF_Static() - { - base.Scalar_Nested_Function_Client_UDF_Static(); - - AssertSql( - @"SELECT [c].[Id] -FROM [Customers] AS [c]"); - } - - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'where (3 == Abs(AddOneStatic([c].Id)))'")] - public override void Scalar_Nested_Function_BCL_Client_Static() - { - base.Scalar_Nested_Function_BCL_Client_Static(); - - AssertSql( - @"SELECT [c].[Id] -FROM [Customers] AS [c]"); - } - - public override void Scalar_Nested_Function_BCL_UDF_Static() - { - base.Scalar_Nested_Function_BCL_UDF_Static(); - - AssertSql( - @"SELECT TOP(2) [c].[Id] -FROM [Customers] AS [c] -WHERE 3 = ABS([dbo].[CustomerOrderCount]([c].[Id]))"); - } - - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'where (2 == CustomerOrderCountWithClientStatic(AddOneStatic([c].Id)))'")] - public override void Scalar_Nested_Function_UDF_Client_Static() - { - base.Scalar_Nested_Function_UDF_Client_Static(); - - AssertSql( - @"SELECT [c].[Id] -FROM [Customers] AS [c]"); - } - public override void Scalar_Nested_Function_UDF_BCL_Static() { base.Scalar_Nested_Function_UDF_BCL_Static(); @@ -532,26 +402,6 @@ FROM [Customers] AS [c] WHERE ([c].[Id] = @__customerId_2) AND @__customerId_2 IS NOT NULL"); } - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'where (2 == __context_0.AddOneInstance([c].Id))'")] - public override void Scalar_Nested_Function_Unwind_Client_Eval_Where_Instance() - { - base.Scalar_Nested_Function_Unwind_Client_Eval_Where_Instance(); - - AssertSql( - @"SELECT [c].[Id] -FROM [Customers] AS [c]"); - } - - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'orderby __context_0.AddOneInstance([c].Id) asc'")] - public override void Scalar_Nested_Function_Unwind_Client_Eval_OrderBy_Instance() - { - base.Scalar_Nested_Function_Unwind_Client_Eval_OrderBy_Instance(); - - AssertSql( - @"SELECT [c].[Id] -FROM [Customers] AS [c]"); - } - public override void Scalar_Nested_Function_Unwind_Client_Eval_Select_Instance() { base.Scalar_Nested_Function_Unwind_Client_Eval_Select_Instance(); @@ -562,96 +412,6 @@ FROM [Customers] AS [c] ORDER BY [c].[Id]"); } - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'where (2 == __context_0.AddOneInstance(Abs(__context_0.CustomerOrderCountWithClientInstance([c].Id))))'")] - public override void Scalar_Nested_Function_Client_BCL_UDF_Instance() - { - base.Scalar_Nested_Function_Client_BCL_UDF_Instance(); - - AssertSql( - @"SELECT [c].[Id] -FROM [Customers] AS [c]"); - } - - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'where (2 == __context_0.AddOneInstance(__context_0.CustomerOrderCountWithClientInstance(Abs([c].Id))))'")] - public override void Scalar_Nested_Function_Client_UDF_BCL_Instance() - { - base.Scalar_Nested_Function_Client_UDF_BCL_Instance(); - - AssertSql( - @"SELECT [c].[Id] -FROM [Customers] AS [c]"); - } - - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'where (2 == Abs(__context_0.AddOneInstance(__context_0.CustomerOrderCountWithClientInstance([c].Id))))'")] - public override void Scalar_Nested_Function_BCL_Client_UDF_Instance() - { - base.Scalar_Nested_Function_BCL_Client_UDF_Instance(); - - AssertSql( - @"SELECT [c].[Id] -FROM [Customers] AS [c]"); - } - - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'where (1 == Abs(__context_0.CustomerOrderCountWithClientInstance(__context_0.AddOneInstance([c].Id))))'")] - public override void Scalar_Nested_Function_BCL_UDF_Client_Instance() - { - base.Scalar_Nested_Function_BCL_UDF_Client_Instance(); - - AssertSql( - @"SELECT [c].[Id] -FROM [Customers] AS [c]"); - } - - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'where (1 == __context_0.CustomerOrderCountWithClientInstance(Abs(__context_0.AddOneInstance([c].Id))))'")] - public override void Scalar_Nested_Function_UDF_BCL_Client_Instance() - { - base.Scalar_Nested_Function_UDF_BCL_Client_Instance(); - - AssertSql( - @"SELECT [c].[Id] -FROM [Customers] AS [c]"); - } - - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'where (1 == __context_0.CustomerOrderCountWithClientInstance(__context_0.AddOneInstance(Abs([c].Id))))'")] - public override void Scalar_Nested_Function_UDF_Client_BCL_Instance() - { - base.Scalar_Nested_Function_UDF_Client_BCL_Instance(); - - AssertSql( - @"SELECT [c].[Id] -FROM [Customers] AS [c]"); - } - - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'where (3 == __context_0.AddOneInstance(Abs([c].Id)))'")] - public override void Scalar_Nested_Function_Client_BCL_Instance() - { - base.Scalar_Nested_Function_Client_BCL_Instance(); - - AssertSql( - @"SELECT [c].[Id] -FROM [Customers] AS [c]"); - } - - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'where (2 == __context_0.AddOneInstance(__context_0.CustomerOrderCountWithClientInstance([c].Id)))'")] - public override void Scalar_Nested_Function_Client_UDF_Instance() - { - base.Scalar_Nested_Function_Client_UDF_Instance(); - - AssertSql( - @"SELECT [c].[Id] -FROM [Customers] AS [c]"); - } - - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'where (3 == Abs(__context_0.AddOneInstance([c].Id)))'")] - public override void Scalar_Nested_Function_BCL_Client_Instance() - { - base.Scalar_Nested_Function_BCL_Client_Instance(); - - AssertSql( - @"SELECT [c].[Id] -FROM [Customers] AS [c]"); - } - public override void Scalar_Nested_Function_BCL_UDF_Instance() { base.Scalar_Nested_Function_BCL_UDF_Instance(); @@ -662,16 +422,6 @@ FROM [Customers] AS [c] WHERE 3 = ABS([dbo].[CustomerOrderCount]([c].[Id]))"); } - [ConditionalFact(Skip = "Issue #14935. Cannot eval 'where (2 == __context_0.CustomerOrderCountWithClientInstance(__context_0.AddOneInstance([c].Id)))'")] - public override void Scalar_Nested_Function_UDF_Client_Instance() - { - base.Scalar_Nested_Function_UDF_Client_Instance(); - - AssertSql( - @"SELECT [c].[Id] -FROM [Customers] AS [c]"); - } - public override void Scalar_Nested_Function_UDF_BCL_Instance() { base.Scalar_Nested_Function_UDF_BCL_Instance(); diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/WarningsSqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/WarningsSqlServerTest.cs index 39c99a5aa5a..27a1a929f1c 100644 --- a/test/EFCore.SqlServer.FunctionalTests/Query/WarningsSqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/Query/WarningsSqlServerTest.cs @@ -1,112 +1,13 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -using System.Linq; -using System.Threading.Tasks; -using Microsoft.EntityFrameworkCore.Diagnostics.Internal; -using Microsoft.EntityFrameworkCore.SqlServer.Diagnostics.Internal; -using Microsoft.EntityFrameworkCore.TestUtilities; -using Xunit; - namespace Microsoft.EntityFrameworkCore.Query { - internal class WarningsSqlServerTest : WarningsTestBase + public class WarningsSqlServerTest : WarningsTestBase { public WarningsSqlServerTest(QueryNoClientEvalSqlServerFixture fixture) : base(fixture) { } - - public override void Does_not_throw_for_top_level_single() - { - base.Does_not_throw_for_top_level_single(); - - Assert.Equal( - @"SELECT TOP(1) [x].[OrderID], [x].[CustomerID], [x].[EmployeeID], [x].[OrderDate] -FROM [Orders] AS [x] -WHERE [x].[OrderID] = 10248", - Fixture.TestSqlLoggerFactory.Sql, - ignoreLineEndingDifferences: true); - } - -#pragma warning disable CS0612 // Type or member is obsolete - public override void Last_without_order_by_issues_client_eval_warning() - { - base.Last_without_order_by_issues_client_eval_warning(); - - Assert.Contains( - CoreResources.LogFirstWithoutOrderByAndFilter(new TestLogger()).GenerateMessage( - "(from Customer _1 in DbSet select [_1]).Last()"), - Fixture.TestSqlLoggerFactory.Log.Select(l => l.Message)); - } - - public override void Paging_operation_without_orderby_issues_warning() - { - base.Paging_operation_without_orderby_issues_warning(); - - Assert.Contains( - CoreResources.LogRowLimitingOperationWithoutOrderBy(new TestLogger()).GenerateMessage( - "(from Customer _2 in DbSet select [_2]).Skip(__p_0).Take(__p_1)"), - Fixture.TestSqlLoggerFactory.Log.Select(l => l.Message)); - } - - public override async Task Paging_operation_without_orderby_issues_warning_async() - { - await base.Paging_operation_without_orderby_issues_warning_async(); - - Assert.Contains( - CoreResources.LogRowLimitingOperationWithoutOrderBy(new TestLogger()).GenerateMessage( - "(from Customer _2 in DbSet select [_2]).Skip(__p_0).Take(__p_1)"), - Fixture.TestSqlLoggerFactory.Log.Select(l => l.Message)); - } - - public override void FirstOrDefault_without_orderby_and_filter_issues_warning_subquery() - { - base.FirstOrDefault_without_orderby_and_filter_issues_warning_subquery(); - - Assert.Contains( - CoreResources.LogFirstWithoutOrderByAndFilter(new TestLogger()).GenerateMessage( - "(from Order _1 in [c].Orders select (Nullable)[_1].OrderID).FirstOrDefaul..."), - Fixture.TestSqlLoggerFactory.Log.Select(l => l.Message)); - } - - public override void FirstOrDefault_without_orderby_but_with_filter_doesnt_issue_warning() - { - base.FirstOrDefault_without_orderby_but_with_filter_doesnt_issue_warning(); - - Assert.DoesNotContain( - CoreResources.LogFirstWithoutOrderByAndFilter(new TestLogger()).GenerateMessage( - @"(from Customer c in DbSet where c.CustomerID == ""ALFKI"" select c).FirstOrDefault()"), - Fixture.TestSqlLoggerFactory.Log.Select(l => l.Message)); - } - - public override void Single_SingleOrDefault_without_orderby_doesnt_issue_warning() - { - base.Single_SingleOrDefault_without_orderby_doesnt_issue_warning(); - - Assert.DoesNotContain( - CoreResources.LogFirstWithoutOrderByAndFilter(new TestLogger()).GenerateMessage( - @"(from Customer c in DbSet where c.CustomerID == ""ALFKI"" select c).Single()"), - Fixture.TestSqlLoggerFactory.Log.Select(l => l.Message)); - } - -#pragma warning restore CS0612 // Type or member is obsolete - public override void Comparing_collection_navigation_to_null_issues_possible_unintended_consequences_warning() - { - base.Comparing_collection_navigation_to_null_issues_possible_unintended_consequences_warning(); - - Assert.Contains( - CoreResources.LogPossibleUnintendedCollectionNavigationNullComparison(new TestLogger()).GenerateMessage("Orders"), - Fixture.TestSqlLoggerFactory.Log.Select(l => l.Message)); - } - - public override void Comparing_two_collections_together_issues_possible_unintended_reference_comparison_warning() - { - base.Comparing_two_collections_together_issues_possible_unintended_reference_comparison_warning(); - - Assert.Contains( - CoreResources.LogPossibleUnintendedReferenceComparison(new TestLogger()).GenerateMessage("[c].Orders", "[c].Orders"), - Fixture.TestSqlLoggerFactory.Log.Select(l => l.Message)); - } } } diff --git a/test/EFCore.SqlServer.FunctionalTests/SqlServerComplianceTest.cs b/test/EFCore.SqlServer.FunctionalTests/SqlServerComplianceTest.cs index c965544dda9..c7a1bb0b267 100644 --- a/test/EFCore.SqlServer.FunctionalTests/SqlServerComplianceTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/SqlServerComplianceTest.cs @@ -1,24 +1,12 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -using System; -using System.Collections.Generic; using System.Reflection; -using Microsoft.EntityFrameworkCore.Query; namespace Microsoft.EntityFrameworkCore { public class SqlServerComplianceTest : RelationalComplianceTestBase { - protected override ICollection IgnoredTestBases { get; } = new HashSet - { - // Query pipeline - typeof(ConcurrencyDetectorTestBase<>), - typeof(ConcurrencyDetectorRelationalTestBase<>), - typeof(QueryNoClientEvalTestBase<>), - typeof(WarningsTestBase<>), - }; - protected override Assembly TargetAssembly { get; } = typeof(SqlServerComplianceTest).Assembly; } } diff --git a/test/EFCore.SqlServer.FunctionalTests/TableSplittingSqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/TableSplittingSqlServerTest.cs index c4632708e6e..7dff3612c14 100644 --- a/test/EFCore.SqlServer.FunctionalTests/TableSplittingSqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/TableSplittingSqlServerTest.cs @@ -6,6 +6,7 @@ namespace Microsoft.EntityFrameworkCore { + // Issue #16032 internal class TableSplittingSqlServerTest : TableSplittingTestBase { public TableSplittingSqlServerTest(ITestOutputHelper testOutputHelper) diff --git a/test/EFCore.Sqlite.FunctionalTests/BuiltInDataTypesSqliteTest.cs b/test/EFCore.Sqlite.FunctionalTests/BuiltInDataTypesSqliteTest.cs index 5827d068f8d..57401cc71cf 100644 --- a/test/EFCore.Sqlite.FunctionalTests/BuiltInDataTypesSqliteTest.cs +++ b/test/EFCore.Sqlite.FunctionalTests/BuiltInDataTypesSqliteTest.cs @@ -3,6 +3,7 @@ using System; using System.Linq; +using Microsoft.EntityFrameworkCore.Diagnostics; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Metadata; using Microsoft.EntityFrameworkCore.Metadata.Internal; @@ -974,7 +975,7 @@ public virtual void Cant_query_Min_of_converted_types() .Where(e => e.PartitionId == 200) .GroupBy(_ => true); - // TODO: Update with #16133 + // TODO: Update with #15249 var ex = Assert.Throws( () => query .Select(g => g.Min(e => e.TestNullableDecimal)) @@ -1034,7 +1035,7 @@ public virtual void Cant_query_Max_of_converted_types() .Where(e => e.PartitionId == 201) .GroupBy(_ => true); - // TODO: Update with #16133 + // TODO: Update with #15249 var ex = Assert.Throws( () => query .Select(g => g.Max(e => e.TestNullableDecimal)) @@ -1084,12 +1085,14 @@ public virtual void Cant_query_Average_of_converted_types() context.SaveChanges(); - // TODO: Update with #15937 - var ex = Assert.Throws( + var ex = Assert.Throws( () => context.Set() .Where(e => e.PartitionId == 202) .Average(e => e.TestNullableDecimal)); - Assert.Equal(new NullReferenceException().Message, ex.Message); + Assert.Equal( + CoreStrings.TranslationFailed( + "Projection Mapping: EmptyProjectionMember -> [EntityProjectionExpression]SELECT 1FROM BuiltInNullableDataTypes AS bWHERE b.PartitionId == 202"), + RemoveNewLines(ex.Message)); } } @@ -1116,15 +1119,19 @@ public virtual void Cant_query_Sum_of_converted_types() context.SaveChanges(); - // TODO: Update with #15937 - var ex = Assert.Throws( + var ex = Assert.Throws( () => context.Set() .Where(e => e.PartitionId == 203) .Sum(e => e.TestDecimal)); - Assert.Equal(new NullReferenceException().Message, ex.Message); + Assert.Equal( + CoreStrings.TranslationFailed("Projection Mapping: EmptyProjectionMember -> [EntityProjectionExpression]SELECT 1FROM BuiltInDataTypes AS bWHERE b.PartitionId == 203"), + RemoveNewLines(ex.Message)); } } + private string RemoveNewLines(string message) + => message.Replace("\n", "").Replace("\r", ""); + [ConditionalFact] public virtual void Can_query_negation_of_converted_types() { diff --git a/test/EFCore.Sqlite.FunctionalTests/Query/BadDataSqliteTest.cs b/test/EFCore.Sqlite.FunctionalTests/Query/BadDataSqliteTest.cs index 8cc596175f0..964d7cd4f28 100644 --- a/test/EFCore.Sqlite.FunctionalTests/Query/BadDataSqliteTest.cs +++ b/test/EFCore.Sqlite.FunctionalTests/Query/BadDataSqliteTest.cs @@ -20,6 +20,7 @@ // ReSharper disable InconsistentNaming namespace Microsoft.EntityFrameworkCore.Query { + // Issue #15751 internal class BadDataSqliteTest : IClassFixture { public BadDataSqliteTest(BadDataSqliteFixture fixture) => Fixture = fixture; diff --git a/test/EFCore.Sqlite.FunctionalTests/Query/ComplexNavigationsQuerySqliteTest.cs b/test/EFCore.Sqlite.FunctionalTests/Query/ComplexNavigationsQuerySqliteTest.cs index b24dad5da83..aabc40ebaf2 100644 --- a/test/EFCore.Sqlite.FunctionalTests/Query/ComplexNavigationsQuerySqliteTest.cs +++ b/test/EFCore.Sqlite.FunctionalTests/Query/ComplexNavigationsQuerySqliteTest.cs @@ -13,7 +13,10 @@ public ComplexNavigationsQuerySqliteTest(ComplexNavigationsQuerySqliteFixture fi { } - // Skip for SQLite. Issue #14935. Cannot eval 'from <>f__AnonymousType100`1 _1 in {from Level2 l2 in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.ComplexNavigationsModel.Level2]) where ?= (Convert(Property([l1], \"Id\"), Nullable`1) == Property([l2], \"OneToMany_Optional_Inverse2Id\")) =? select new <>f__AnonymousType100`1(Name = [l2].Name)}' - public override Task SelectMany_subquery_with_custom_projection(bool isAsync) => null; + [ConditionalTheory(Skip = "Issue #17230")] + public override Task SelectMany_with_navigation_filter_paging_and_explicit_DefaultIfEmpty(bool isAsync) + { + return Task.CompletedTask; + } } } diff --git a/test/EFCore.Sqlite.FunctionalTests/Query/ComplexNavigationsWeakQuerySqliteTest.cs b/test/EFCore.Sqlite.FunctionalTests/Query/ComplexNavigationsWeakQuerySqliteTest.cs index 928e9367121..eb8ec7ed5d5 100644 --- a/test/EFCore.Sqlite.FunctionalTests/Query/ComplexNavigationsWeakQuerySqliteTest.cs +++ b/test/EFCore.Sqlite.FunctionalTests/Query/ComplexNavigationsWeakQuerySqliteTest.cs @@ -2,6 +2,7 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System.Threading.Tasks; +using Xunit; using Xunit.Abstractions; namespace Microsoft.EntityFrameworkCore.Query @@ -13,7 +14,10 @@ public ComplexNavigationsWeakQuerySqliteTest(ComplexNavigationsWeakQuerySqliteFi { } - // Skip for SQLite. Issue #14935. Cannot eval 'from <>f__AnonymousType100`1 _1 in {from Level2 l2 in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.ComplexNavigationsModel.Level2]) where ?= (Convert(Property([l1], \"Id\"), Nullable`1) == Property([l2], \"OneToMany_Optional_Inverse2Id\")) =? select new <>f__AnonymousType100`1(Name = [l2].Name)}' - public override Task SelectMany_subquery_with_custom_projection(bool isAsync) => null; + [ConditionalTheory(Skip = "Issue #17230")] + public override Task SelectMany_with_navigation_filter_paging_and_explicit_DefaultIfEmpty(bool isAsync) + { + return Task.CompletedTask; + } } } diff --git a/test/EFCore.Sqlite.FunctionalTests/Query/GearsOfWarQuerySqliteTest.cs b/test/EFCore.Sqlite.FunctionalTests/Query/GearsOfWarQuerySqliteTest.cs index e903d44fbfa..00e02d192ad 100644 --- a/test/EFCore.Sqlite.FunctionalTests/Query/GearsOfWarQuerySqliteTest.cs +++ b/test/EFCore.Sqlite.FunctionalTests/Query/GearsOfWarQuerySqliteTest.cs @@ -1,7 +1,9 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +using System; using System.Threading.Tasks; +using Xunit; namespace Microsoft.EntityFrameworkCore.Query { @@ -12,44 +14,125 @@ public GearsOfWarQuerySqliteTest(GearsOfWarQuerySqliteFixture fixture) { } - // Skip for SQLite. Issue #14935. Cannot eval 'where ([m].Timeline.Date > 1/1/0001 12:00:00 AM)' - public override Task String_concat_with_null_conditional_argument2(bool isAsync) => null; - - // Skip for SQLite. Issue #14935. Cannot eval 'where ([m].Timeline.Date > 1/1/0001 12:00:00 AM)' - public override Task Where_datetimeoffset_date_component(bool isAsync) => null; + // SQLite client-eval + public override async Task Where_datetimeoffset_date_component(bool isAsync) + { + Assert.StartsWith( + "The LINQ expression", + (await Assert.ThrowsAsync( + () => base.Where_datetimeoffset_date_component(isAsync))) + .Message); + } - // Skip for SQLite. Issue #14935. Cannot eval 'where ([m].Timeline.Day == 2)' - public override Task Where_datetimeoffset_day_component(bool isAsync) => null; + // SQLite client-eval + public override async Task Where_datetimeoffset_day_component(bool isAsync) + { + Assert.StartsWith( + "The LINQ expression", + (await Assert.ThrowsAsync( + () => base.Where_datetimeoffset_day_component(isAsync))) + .Message); + } - // Skip for SQLite. Issue #14935. Cannot eval 'where ([m].Timeline.DayOfYear == 2)' - public override Task Where_datetimeoffset_dayofyear_component(bool isAsync) => null; + // SQLite client-eval + public override async Task Where_datetimeoffset_dayofyear_component(bool isAsync) + { + Assert.StartsWith( + "The LINQ expression", + (await Assert.ThrowsAsync( + () => base.Where_datetimeoffset_dayofyear_component(isAsync))) + .Message); + } - // Skip for SQLite. Issue #14935. Cannot eval 'where ([m].Timeline.Hour == 10)' - public override Task Where_datetimeoffset_hour_component(bool isAsync) => null; + // SQLite client-eval + public override async Task Where_datetimeoffset_hour_component(bool isAsync) + { + Assert.StartsWith( + "The LINQ expression", + (await Assert.ThrowsAsync( + () => base.Where_datetimeoffset_hour_component(isAsync))) + .Message); + } - // Skip for SQLite. Issue #14935. Cannot eval 'where ([m].Timeline.Millisecond == 0)' - public override Task Where_datetimeoffset_millisecond_component(bool isAsync) => null; + // SQLite client-eval + public override async Task Where_datetimeoffset_millisecond_component(bool isAsync) + { + Assert.StartsWith( + "The LINQ expression", + (await Assert.ThrowsAsync( + () => base.Where_datetimeoffset_millisecond_component(isAsync))) + .Message); + } - // Skip for SQLite. Issue #14935. Cannot eval 'where ([m].Timeline.Minute == 0)' - public override Task Where_datetimeoffset_minute_component(bool isAsync) => null; + // SQLite client-eval + public override async Task Where_datetimeoffset_minute_component(bool isAsync) + { + Assert.StartsWith( + "The LINQ expression", + (await Assert.ThrowsAsync( + () => base.Where_datetimeoffset_minute_component(isAsync))) + .Message); + } - // Skip for SQLite. Issue #14935. Cannot eval 'where ([m].Timeline.Month == 1)' - public override Task Where_datetimeoffset_month_component(bool isAsync) => null; + // SQLite client-eval + public override async Task Where_datetimeoffset_month_component(bool isAsync) + { + Assert.StartsWith( + "The LINQ expression", + (await Assert.ThrowsAsync( + () => base.Where_datetimeoffset_month_component(isAsync))) + .Message); + } - // Skip for SQLite. Issue #14935. Cannot eval 'where ([m].Timeline != DateTimeOffset.Now)' - public override Task Where_datetimeoffset_now(bool isAsync) => null; + // SQLite client-eval + public override async Task Where_datetimeoffset_now(bool isAsync) + { + Assert.StartsWith( + "The LINQ expression", + (await Assert.ThrowsAsync( + () => base.Where_datetimeoffset_now(isAsync))) + .Message); + } - // Skip for SQLite. Issue #14935. Cannot eval 'where ([m].Timeline.Second == 0)' - public override Task Where_datetimeoffset_second_component(bool isAsync) => null; + // SQLite client-eval + public override async Task Where_datetimeoffset_second_component(bool isAsync) + { + Assert.StartsWith( + "The LINQ expression", + (await Assert.ThrowsAsync( + () => base.Where_datetimeoffset_second_component(isAsync))) + .Message); + } - // Skip for SQLite. Issue #14935. Cannot eval 'where ([m].Timeline != DateTimeOffset.UtcNow)' - public override Task Where_datetimeoffset_utcnow(bool isAsync) => null; + // SQLite client-eval + public override async Task Where_datetimeoffset_utcnow(bool isAsync) + { + Assert.StartsWith( + "The LINQ expression", + (await Assert.ThrowsAsync( + () => base.Where_datetimeoffset_utcnow(isAsync))) + .Message); + } - // Skip for SQLite. Issue #14935. Cannot eval 'where ([m].Timeline.Year == 2)' - public override Task Where_datetimeoffset_year_component(bool isAsync) => null; + // SQLite client-eval + public override async Task Where_datetimeoffset_year_component(bool isAsync) + { + Assert.StartsWith( + "The LINQ expression", + (await Assert.ThrowsAsync( + () => base.Where_datetimeoffset_year_component(isAsync))) + .Message); + } - // Skip for SQLite. Issue #14935. Cannot eval 'where ([m].Timeline >= x)' - public override Task DateTimeOffset_Contains_Less_than_Greater_than(bool isAsync) => null; + // SQLite client-eval + public override async Task DateTimeOffset_Contains_Less_than_Greater_than(bool isAsync) + { + Assert.StartsWith( + "The LINQ expression", + (await Assert.ThrowsAsync( + () => base.DateTimeOffset_Contains_Less_than_Greater_than(isAsync))) + .Message); + } // Sqlite does not support lateral joins public override Task Correlated_collections_inner_subquery_predicate_references_outer_qsre(bool isAsync) => null; diff --git a/test/EFCore.Sqlite.FunctionalTests/Query/QueryNavigationsSqliteTest.cs b/test/EFCore.Sqlite.FunctionalTests/Query/QueryNavigationsSqliteTest.cs index bab5655a2b8..254af28e9c0 100644 --- a/test/EFCore.Sqlite.FunctionalTests/Query/QueryNavigationsSqliteTest.cs +++ b/test/EFCore.Sqlite.FunctionalTests/Query/QueryNavigationsSqliteTest.cs @@ -1,7 +1,6 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -using System.Threading.Tasks; using Microsoft.EntityFrameworkCore.TestUtilities; namespace Microsoft.EntityFrameworkCore.Query @@ -12,8 +11,5 @@ public QueryNavigationsSqliteTest(NorthwindQuerySqliteFixture 10)' - public override Task Select_multiple_complex_projections(bool isAsync) => null; } } diff --git a/test/EFCore.Sqlite.FunctionalTests/Query/QueryNoClientEvalSqliteTest.cs b/test/EFCore.Sqlite.FunctionalTests/Query/QueryNoClientEvalSqliteTest.cs index c606e2e83e6..17d26b9ba07 100644 --- a/test/EFCore.Sqlite.FunctionalTests/Query/QueryNoClientEvalSqliteTest.cs +++ b/test/EFCore.Sqlite.FunctionalTests/Query/QueryNoClientEvalSqliteTest.cs @@ -3,7 +3,7 @@ namespace Microsoft.EntityFrameworkCore.Query { - internal class QueryNoClientEvalSqliteTest : QueryNoClientEvalTestBase + public class QueryNoClientEvalSqliteTest : QueryNoClientEvalTestBase { public QueryNoClientEvalSqliteTest(QueryNoClientEvalSqliteFixture fixture) : base(fixture) diff --git a/test/EFCore.Sqlite.FunctionalTests/Query/SimpleQuerySqliteTest.cs b/test/EFCore.Sqlite.FunctionalTests/Query/SimpleQuerySqliteTest.cs index d3b330abddc..0b91a2df5f5 100644 --- a/test/EFCore.Sqlite.FunctionalTests/Query/SimpleQuerySqliteTest.cs +++ b/test/EFCore.Sqlite.FunctionalTests/Query/SimpleQuerySqliteTest.cs @@ -1,6 +1,7 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +using System; using System.Linq; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore.TestModels.Northwind; @@ -20,155 +21,411 @@ public SimpleQuerySqliteTest(NorthwindQuerySqliteFixture fi //Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); } - // Skip for SQLite. Issue #14935. Cannot eval 'Average()' - public override Task Average_with_coalesce(bool isAsync) => null; - - // Skip for SQLite. Issue #14935. Cannot eval 'Average()' - public override Task Average_with_division_on_decimal(bool isAsync) => null; - - // Skip for SQLite. Issue #14935. Cannot eval 'Average()' - public override Task Average_with_division_on_decimal_no_significant_digits(bool isAsync) => null; - - // Skip for SQLite. Issue #14935. Cannot eval 'where (Convert(ToByte(ToByte(([o].OrderID % 1))), Int32) >= 0)' - public override Task Convert_ToByte(bool isAsync) => null; - - // Skip for SQLite. Issue #14935. Cannot eval 'where (ToDecimal(ToByte(([o].OrderID % 1))) >= 0)' - public override Task Convert_ToDecimal(bool isAsync) => null; - - // Skip for SQLite. Issue #14935. Cannot eval 'where (ToDouble(ToByte(([o].OrderID % 1))) >= 0)' - public override Task Convert_ToDouble(bool isAsync) => null; - - // Skip for SQLite. Issue #14935. Cannot eval 'where (Convert(ToInt16(ToByte(([o].OrderID % 1))), Int32) >= 0)' - public override Task Convert_ToInt16(bool isAsync) => null; - - // Skip for SQLite. Issue #14935. Cannot eval 'where (ToInt32(ToByte(([o].OrderID % 1))) >= 0)' - public override Task Convert_ToInt32(bool isAsync) => null; - - // Skip for SQLite. Issue #14935. Cannot eval 'where (ToInt64(ToByte(([o].OrderID % 1))) >= 0)' - public override Task Convert_ToInt64(bool isAsync) => null; + // SQLite client-eval + public override async Task Sum_with_division_on_decimal(bool isAsync) + { + Assert.StartsWith( + "The LINQ expression", + (await Assert.ThrowsAsync( + () => base.Sum_with_division_on_decimal(isAsync))) + .Message); + } - // Skip for SQLite. Issue #14935. Cannot eval 'where (ToString(ToByte(([o].OrderID % 1))) != \"10\")' - public override Task Convert_ToString(bool isAsync) => null; + // SQLite client-eval + public override async Task Sum_with_division_on_decimal_no_significant_digits(bool isAsync) + { + Assert.StartsWith( + "The LINQ expression", + (await Assert.ThrowsAsync( + () => base.Sum_with_division_on_decimal_no_significant_digits(isAsync))) + .Message); + } - // Skip for SQLite. Issue #14935. Cannot eval 'from Order o in {from Order o in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.Northwind.Order]) where ([o].CustomerID == [c].CustomerID) select [o] => DefaultIfEmpty()}' - public override Task DefaultIfEmpty_in_subquery(bool isAsync) => null; + [ConditionalTheory(Skip = "Issue = #17238")] + public override Task SelectMany_Joined_Take(bool isAsync) => null; - // Skip for SQLite. Issue #14935. Cannot eval 'from Order o1 in {from Order o in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.Northwind.Order]) where ([o].OrderID > 11000) select [o] => DefaultIfEmpty()}' - public override Task DefaultIfEmpty_in_subquery_nested(bool isAsync) => null; + [ConditionalTheory(Skip = "Issue = #17239")] + public override Task Union_Take_Union_Take(bool isAsync) => null; - // Skip for SQLite. Issue #14935. Cannot eval 'Max()' - public override Task Max_with_coalesce(bool isAsync) => null; + // SQLite client-eval + public override async Task Average_with_division_on_decimal(bool isAsync) + { + Assert.StartsWith( + "The LINQ expression", + (await Assert.ThrowsAsync( + () => base.Average_with_division_on_decimal(isAsync))) + .Message); + } - // Skip for SQLite. Issue #14935. Cannot eval 'Min()' - public override Task Min_with_coalesce(bool isAsync) => null; + // SQLite client-eval + public override async Task Average_with_division_on_decimal_no_significant_digits(bool isAsync) + { + Assert.StartsWith( + "The LINQ expression", + (await Assert.ThrowsAsync( + () => base.Average_with_division_on_decimal_no_significant_digits(isAsync))) + .Message); + } - // Skip for SQLite. Issue #14935. Cannot eval 'orderby Truncate(Convert([o].OrderID, Double)) asc' - public override Task Projecting_Math_Truncate_and_ordering_by_it_twice(bool isAsync) => null; + // SQLite client-eval + public override async Task Convert_ToByte(bool isAsync) + { + Assert.StartsWith( + "The LINQ expression", + (await Assert.ThrowsAsync( + () => base.Convert_ToByte(isAsync))) + .Message); + } - // Skip for SQLite. Issue #14935. Cannot eval 'orderby Truncate(Convert([o].OrderID, Double)) asc' - public override Task Projecting_Math_Truncate_and_ordering_by_it_twice2(bool isAsync) => null; + // SQLite client-eval + public override async Task Convert_ToDecimal(bool isAsync) + { + Assert.StartsWith( + "The LINQ expression", + (await Assert.ThrowsAsync( + () => base.Convert_ToDecimal(isAsync))) + .Message); + } - // Skip for SQLite. Issue #14935. Cannot eval 'orderby Truncate(Convert([o].OrderID, Double)) desc, Truncate(Convert([o].OrderID, Double)) asc' - public override Task Projecting_Math_Truncate_and_ordering_by_it_twice3(bool isAsync) => null; + // SQLite client-eval + public override async Task Convert_ToDouble(bool isAsync) + { + Assert.StartsWith( + "The LINQ expression", + (await Assert.ThrowsAsync( + () => base.Convert_ToDouble(isAsync))) + .Message); + } - // Skip for SQLite. Issue #14935. Cannot eval 'where Convert([o].EmployeeID, UInt32).ToString().Contains(\"10\")' - public override Task Query_expression_with_to_string_and_contains(bool isAsync) => null; + // SQLite client-eval + public override async Task Convert_ToInt16(bool isAsync) + { + Assert.StartsWith( + "The LINQ expression", + (await Assert.ThrowsAsync( + () => base.Convert_ToInt16(isAsync))) + .Message); + } - // TODO: Client Eval. - public override Task Select_math_truncate_int(bool isAsync) => null; + // SQLite client-eval + public override async Task Convert_ToInt32(bool isAsync) + { + Assert.StartsWith( + "The LINQ expression", + (await Assert.ThrowsAsync( + () => base.Convert_ToInt32(isAsync))) + .Message); + } - // Skip for SQLite. Issue #14935. Cannot eval 'from Order o in {from Order o in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.Northwind.Order]) where ([o].CustomerID == [c].CustomerID) select [o] => DefaultIfEmpty()}' - public override Task SelectMany_Joined_DefaultIfEmpty(bool isAsync) => null; + // SQLite client-eval + public override async Task Convert_ToInt64(bool isAsync) + { + Assert.StartsWith( + "The LINQ expression", + (await Assert.ThrowsAsync( + () => base.Convert_ToInt64(isAsync))) + .Message); + } - // Skip for SQLite. Issue #14935. Cannot eval 'from Order o in {from Order o in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.Northwind.Order]) where ([o].CustomerID == [c].CustomerID) select [o] => DefaultIfEmpty()}' - public override Task SelectMany_Joined_DefaultIfEmpty2(bool isAsync) => null; + // SQLite client-eval + public override async Task Convert_ToString(bool isAsync) + { + Assert.StartsWith( + "The LINQ expression", + (await Assert.ThrowsAsync( + () => base.Convert_ToString(isAsync))) + .Message); + } - // Skip for SQLite. Issue #14935. Cannot eval 'from Order o in {from Order o in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Microsoft.EntityFrameworkCore.TestModels.Northwind.Order]) where ([o].CustomerID == [c].CustomerID) select [o] => Take(1000)}' - public override Task SelectMany_Joined_Take(bool isAsync) => null; + // SQLite client-eval + public override async Task Projecting_Math_Truncate_and_ordering_by_it_twice(bool isAsync) + { + Assert.StartsWith( + "The LINQ expression", + (await Assert.ThrowsAsync( + () => base.Projecting_Math_Truncate_and_ordering_by_it_twice(isAsync))) + .Message); + } - // Skip for SQLite. Issue #14935. Cannot eval 'Sum()' - public override Task Sum_with_division_on_decimal(bool isAsync) => null; + // SQLite client-eval + public override async Task Projecting_Math_Truncate_and_ordering_by_it_twice2(bool isAsync) + { + Assert.StartsWith( + "The LINQ expression", + (await Assert.ThrowsAsync( + () => base.Projecting_Math_Truncate_and_ordering_by_it_twice2(isAsync))) + .Message); + } - // Skip for SQLite. Issue #14935. Cannot eval 'Sum()' - public override Task Sum_with_division_on_decimal_no_significant_digits(bool isAsync) => null; + // SQLite client-eval + public override async Task Projecting_Math_Truncate_and_ordering_by_it_twice3(bool isAsync) + { + Assert.StartsWith( + "The LINQ expression", + (await Assert.ThrowsAsync( + () => base.Projecting_Math_Truncate_and_ordering_by_it_twice3(isAsync))) + .Message); + } - // Sqlite does not support LIMIT on set operation operands, nor subqueries, so this is untranslatable. - public override Task Union_Take_Union_Take(bool isAsync) => Task.CompletedTask; + // SQLite client-eval + public override async Task Query_expression_with_to_string_and_contains(bool isAsync) + { + Assert.StartsWith( + "The LINQ expression", + (await Assert.ThrowsAsync( + () => base.Query_expression_with_to_string_and_contains(isAsync))) + .Message); + } - // Skip for SQLite. Issue #14935. Cannot eval 'where (Convert([o].OrderDate, Nullable`1) == Convert(DateTimeOffset.Now, Nullable`1))' - public override Task Where_datetimeoffset_now_component(bool isAsync) => null; + // SQLite client-eval + public override async Task Where_datetimeoffset_now_component(bool isAsync) + { + Assert.StartsWith( + "The LINQ expression", + (await Assert.ThrowsAsync( + () => base.Where_datetimeoffset_now_component(isAsync))) + .Message); + } - // Skip for SQLite. Issue #14935. Cannot eval 'where (Convert([o].OrderDate, Nullable`1) == Convert(DateTimeOffset.UtcNow, Nullable`1))' - public override Task Where_datetimeoffset_utcnow_component(bool isAsync) => null; + // SQLite client-eval + public override async Task Where_datetimeoffset_utcnow_component(bool isAsync) + { + Assert.StartsWith( + "The LINQ expression", + (await Assert.ThrowsAsync( + () => base.Where_datetimeoffset_utcnow_component(isAsync))) + .Message); + } - // Skip for SQLite. Issue #14935. Cannot eval 'where (Pow(Convert([c].CustomerID.Length, Double), 2) == 25)' - public override Task Where_functions_nested(bool isAsync) => null; + // SQLite client-eval + public override async Task Where_functions_nested(bool isAsync) + { + Assert.StartsWith( + "The LINQ expression", + (await Assert.ThrowsAsync( + () => base.Where_functions_nested(isAsync))) + .Message); + } - // Skip for SQLite. Issue #14935. Cannot eval 'where (NewGuid() != 00000000-0000-0000-0000-000000000000)' - public override Task Where_guid_newguid(bool isAsync) => null; + // SQLite client-eval + public override async Task Where_guid_newguid(bool isAsync) + { + Assert.StartsWith( + "The LINQ expression", + (await Assert.ThrowsAsync( + () => base.Where_guid_newguid(isAsync))) + .Message); + } - // Skip for SQLite. Issue #14935. Cannot eval 'where (Abs([od].UnitPrice) > 10)' - public override Task Where_math_abs3(bool isAsync) => null; + // SQLite client-eval + public override async Task Where_math_abs3(bool isAsync) + { + Assert.StartsWith( + "The LINQ expression", + (await Assert.ThrowsAsync( + () => base.Where_math_abs3(isAsync))) + .Message); + } - // Skip for SQLite. Issue #14935. Cannot eval 'where (Acos(Convert([od].Discount, Double)) > 1)' - public override Task Where_math_acos(bool isAsync) => null; + // SQLite client-eval + public override async Task Where_math_acos(bool isAsync) + { + Assert.StartsWith( + "The LINQ expression", + (await Assert.ThrowsAsync( + () => base.Where_math_acos(isAsync))) + .Message); + } - // Skip for SQLite. Issue #14935. Cannot eval 'where (Asin(Convert([od].Discount, Double)) > 0)' - public override Task Where_math_asin(bool isAsync) => null; + // SQLite client-eval + public override async Task Where_math_asin(bool isAsync) + { + Assert.StartsWith( + "The LINQ expression", + (await Assert.ThrowsAsync( + () => base.Where_math_asin(isAsync))) + .Message); + } - // Skip for SQLite. Issue #14935. Cannot eval 'where (Atan(Convert([od].Discount, Double)) > 0)' - public override Task Where_math_atan(bool isAsync) => null; + // SQLite client-eval + public override async Task Where_math_atan(bool isAsync) + { + Assert.StartsWith( + "The LINQ expression", + (await Assert.ThrowsAsync( + () => base.Where_math_atan(isAsync))) + .Message); + } - // Skip for SQLite. Issue #14935. Cannot eval 'where (Atan2(Convert([od].Discount, Double), 1) > 0)' - public override Task Where_math_atan2(bool isAsync) => null; + // SQLite client-eval + public override async Task Where_math_atan2(bool isAsync) + { + Assert.StartsWith( + "The LINQ expression", + (await Assert.ThrowsAsync( + () => base.Where_math_atan2(isAsync))) + .Message); + } - // Skip for SQLite. Issue #14935. Cannot eval 'where (Ceiling(Convert([od].Discount, Double)) > 0)' - public override Task Where_math_ceiling1(bool isAsync) => null; + // SQLite client-eval + public override async Task Where_math_ceiling1(bool isAsync) + { + Assert.StartsWith( + "The LINQ expression", + (await Assert.ThrowsAsync( + () => base.Where_math_ceiling1(isAsync))) + .Message); + } - // Skip for SQLite. Issue #14935. Cannot eval 'where (Ceiling([od].UnitPrice) > 10)' - public override Task Where_math_ceiling2(bool isAsync) => null; + // SQLite client-eval + public override async Task Where_math_ceiling2(bool isAsync) + { + Assert.StartsWith( + "The LINQ expression", + (await Assert.ThrowsAsync( + () => base.Where_math_ceiling2(isAsync))) + .Message); + } - // Skip for SQLite. Issue #14935. Cannot eval 'where (Cos(Convert([od].Discount, Double)) > 0)' - public override Task Where_math_cos(bool isAsync) => null; + // SQLite client-eval + public override async Task Where_math_cos(bool isAsync) + { + Assert.StartsWith( + "The LINQ expression", + (await Assert.ThrowsAsync( + () => base.Where_math_cos(isAsync))) + .Message); + } - // Skip for SQLite. Issue #14935. Cannot eval 'where (Exp(Convert([od].Discount, Double)) > 1)' - public override Task Where_math_exp(bool isAsync) => null; + // SQLite client-eval + public override async Task Where_math_exp(bool isAsync) + { + Assert.StartsWith( + "The LINQ expression", + (await Assert.ThrowsAsync( + () => base.Where_math_exp(isAsync))) + .Message); + } - // Skip for SQLite. Issue #14935. Cannot eval 'where (Floor([od].UnitPrice) > 10)' - public override Task Where_math_floor(bool isAsync) => null; + // SQLite client-eval + public override async Task Where_math_floor(bool isAsync) + { + Assert.StartsWith( + "The LINQ expression", + (await Assert.ThrowsAsync( + () => base.Where_math_floor(isAsync))) + .Message); + } - // Skip for SQLite. Issue #14935. Cannot eval 'where (Log(Convert([od].Discount, Double)) < 0)' - public override Task Where_math_log(bool isAsync) => null; + // SQLite client-eval + public override async Task Where_math_log(bool isAsync) + { + Assert.StartsWith( + "The LINQ expression", + (await Assert.ThrowsAsync( + () => base.Where_math_log(isAsync))) + .Message); + } - // Skip for SQLite. Issue #14935. Cannot eval 'where (Log(Convert([od].Discount, Double), 7) < 0)' - public override Task Where_math_log_new_base(bool isAsync) => null; + // SQLite client-eval + public override async Task Where_math_log_new_base(bool isAsync) + { + Assert.StartsWith( + "The LINQ expression", + (await Assert.ThrowsAsync( + () => base.Where_math_log_new_base(isAsync))) + .Message); + } - // Skip for SQLite. Issue #14935. Cannot eval 'where (Log10(Convert([od].Discount, Double)) < 0)' - public override Task Where_math_log10(bool isAsync) => null; + // SQLite client-eval + public override async Task Where_math_log10(bool isAsync) + { + Assert.StartsWith( + "The LINQ expression", + (await Assert.ThrowsAsync( + () => base.Where_math_log10(isAsync))) + .Message); + } - // Skip for SQLite. Issue #14935. Cannot eval 'where (Pow(Convert([od].Discount, Double), 2) > 0.05000000074505806)' - public override Task Where_math_power(bool isAsync) => null; + // SQLite client-eval + public override async Task Where_math_power(bool isAsync) + { + Assert.StartsWith( + "The LINQ expression", + (await Assert.ThrowsAsync( + () => base.Where_math_power(isAsync))) + .Message); + } - // Skip for SQLite. Issue #14935. Cannot eval 'where (Round([od].UnitPrice) > 10' - public override Task Where_math_round(bool isAsync) => null; + // SQLite client-eval + public override async Task Where_math_round(bool isAsync) + { + Assert.StartsWith( + "The LINQ expression", + (await Assert.ThrowsAsync( + () => base.Where_math_round(isAsync))) + .Message); + } - // Skip for SQLite. Issue #14935. Cannot eval 'where (Round([od].UnitPrice, 2) > 100)' - public override Task Where_math_round2(bool isAsync) => null; + // SQLite client-eval + public override async Task Where_math_round2(bool isAsync) + { + Assert.StartsWith( + "The LINQ expression", + (await Assert.ThrowsAsync( + () => base.Where_math_round2(isAsync))) + .Message); + } - // Skip for SQLite. Issue #14935. Cannot eval 'where (Sign([od].Discount) > 0)' - public override Task Where_math_sign(bool isAsync) => null; + // SQLite client-eval + public override async Task Where_math_sign(bool isAsync) + { + Assert.StartsWith( + "The LINQ expression", + (await Assert.ThrowsAsync( + () => base.Where_math_sign(isAsync))) + .Message); + } - // Skip for SQLite. Issue #14935. Cannot eval 'where (Sin(Convert([od].Discount, Double)) > 0' - public override Task Where_math_sin(bool isAsync) => null; + // SQLite client-eval + public override async Task Where_math_sin(bool isAsync) + { + Assert.StartsWith( + "The LINQ expression", + (await Assert.ThrowsAsync( + () => base.Where_math_sin(isAsync))) + .Message); + } - // Skip for SQLite. Issue #14935. Cannot eval 'where (Sqrt(Convert([od].Discount, Double)) > 0)' - public override Task Where_math_sqrt(bool isAsync) => null; + // SQLite client-eval + public override async Task Where_math_sqrt(bool isAsync) + { + Assert.StartsWith( + "The LINQ expression", + (await Assert.ThrowsAsync( + () => base.Where_math_sqrt(isAsync))) + .Message); + } - // Skip for SQLite. Issue #14935. Cannot eval 'where (Tan(Convert([od].Discount, Double)) > 0)' - public override Task Where_math_tan(bool isAsync) => null; + // SQLite client-eval + public override async Task Where_math_tan(bool isAsync) + { + Assert.StartsWith( + "The LINQ expression", + (await Assert.ThrowsAsync( + () => base.Where_math_tan(isAsync))) + .Message); + } - // Skip for SQLite. Issue #14935. Cannot eval 'where (Truncate([od].UnitPrice) > 10)' - public override Task Where_math_truncate(bool isAsync) => null; + // SQLite client-eval + public override async Task Where_math_truncate(bool isAsync) + { + Assert.StartsWith( + "The LINQ expression", + (await Assert.ThrowsAsync( + () => base.Where_math_truncate(isAsync))) + .Message); + } public override void KeylessEntity_by_database_view() { @@ -733,9 +990,6 @@ public override async Task Trim_with_char_array_argument_in_predicate(bool isAsy WHERE (trim(""c"".""ContactTitle"", 'Or') = 'wne') AND trim(""c"".""ContactTitle"", 'Or') IS NOT NULL"); } - // Skip for SQLite. Issue #14935. Cannot eval 'Sum()' - public override Task Sum_with_coalesce(bool isAsync) => null; - public override async Task Select_datetime_year_component(bool isAsync) { await base.Select_datetime_year_component(isAsync); diff --git a/test/EFCore.Sqlite.FunctionalTests/Query/WarningsSqliteTest.cs b/test/EFCore.Sqlite.FunctionalTests/Query/WarningsSqliteTest.cs index 9416b84aa27..87ecf8b0b89 100644 --- a/test/EFCore.Sqlite.FunctionalTests/Query/WarningsSqliteTest.cs +++ b/test/EFCore.Sqlite.FunctionalTests/Query/WarningsSqliteTest.cs @@ -3,7 +3,7 @@ namespace Microsoft.EntityFrameworkCore.Query { - internal class WarningsSqliteTest : WarningsTestBase + public class WarningsSqliteTest : WarningsTestBase { public WarningsSqliteTest(QueryNoClientEvalSqliteFixture fixture) : base(fixture) diff --git a/test/EFCore.Sqlite.FunctionalTests/SqliteComplianceTest.cs b/test/EFCore.Sqlite.FunctionalTests/SqliteComplianceTest.cs index dd917582776..30fc3b87f6b 100644 --- a/test/EFCore.Sqlite.FunctionalTests/SqliteComplianceTest.cs +++ b/test/EFCore.Sqlite.FunctionalTests/SqliteComplianceTest.cs @@ -15,11 +15,6 @@ public class SqliteComplianceTest : RelationalComplianceTestBase typeof(FromSqlSprocQueryTestBase<>), typeof(SqlExecutorTestBase<>), typeof(UdfDbFunctionTestBase<>), - // Query pipeline - typeof(ConcurrencyDetectorTestBase<>), - typeof(ConcurrencyDetectorRelationalTestBase<>), - typeof(QueryNoClientEvalTestBase<>), - typeof(WarningsTestBase<>), }; protected override Assembly TargetAssembly { get; } = typeof(SqliteComplianceTest).Assembly; diff --git a/test/EFCore.Sqlite.FunctionalTests/TableSplittingSqliteTest.cs b/test/EFCore.Sqlite.FunctionalTests/TableSplittingSqliteTest.cs index 9848b28afd3..e706742f78c 100644 --- a/test/EFCore.Sqlite.FunctionalTests/TableSplittingSqliteTest.cs +++ b/test/EFCore.Sqlite.FunctionalTests/TableSplittingSqliteTest.cs @@ -6,6 +6,7 @@ namespace Microsoft.EntityFrameworkCore { + // Issue #16032 internal class TableSplittingSqliteTest : TableSplittingTestBase { public TableSplittingSqliteTest(ITestOutputHelper testOutputHelper)