diff --git a/Dependencies.targets b/Dependencies.targets
index 30ec259c..83dbda20 100644
--- a/Dependencies.targets
+++ b/Dependencies.targets
@@ -1,8 +1,8 @@
- [9.0.0-preview.7.24405.4,9.0.999]
- [9.0.0-preview.7.24405.3,9.0.999]
- [9.0.0-preview.7.24405.7,9.0.999]
+ [9.0.100-rc.1.24452.12,9.0.999]
+ [9.0.0-rc.1.24451.1,9.0.999]
+ [9.0.0-rc.1.24431.7,9.0.999]
@@ -28,9 +28,9 @@
-
-
-
+
+
+
@@ -45,6 +45,6 @@
-
+
\ No newline at end of file
diff --git a/global.json b/global.json
index 5e0a7ad0..9dac2b4d 100644
--- a/global.json
+++ b/global.json
@@ -1,6 +1,6 @@
{
"sdk": {
- "version": "9.0.100-preview.7.24407.12",
+ "version": "9.0.100-rc.1.24452.12",
"allowPrerelease": true,
"rollForward": "latestFeature"
}
diff --git a/src/EFCore.Jet/Migrations/Internal/JetHistoryRepository.cs b/src/EFCore.Jet/Migrations/Internal/JetHistoryRepository.cs
index e7f00d4c..0e060329 100644
--- a/src/EFCore.Jet/Migrations/Internal/JetHistoryRepository.cs
+++ b/src/EFCore.Jet/Migrations/Internal/JetHistoryRepository.cs
@@ -128,7 +128,7 @@ public override string GetDeleteScript(string migrationId)
.ToString();
}
- public override IDisposable GetDatabaseLock(TimeSpan timeout)
+ public override IDisposable GetDatabaseLock()
{
if (!InterpretExistsResult(Dependencies.RawSqlCommandBuilder.Build(CreateExistsSql(LockTableName))
.ExecuteScalar(CreateRelationalCommandParameters())))
@@ -144,8 +144,7 @@ public override IDisposable GetDatabaseLock(TimeSpan timeout)
}
var retryDelay = _retryDelay;
- var startTime = DateTimeOffset.UtcNow;
- while (DateTimeOffset.UtcNow - startTime < timeout)
+ while (true)
{
var dbLock = CreateMigrationDatabaseLock();
int? insertCount = 0;
@@ -164,17 +163,6 @@ public override IDisposable GetDatabaseLock(TimeSpan timeout)
return dbLock;
}
- using var reader = CreateGetLockCommand().ExecuteReader(CreateRelationalCommandParameters());
- if (reader.Read())
- {
- var timestamp = reader.DbDataReader.GetFieldValue(1);
- if (DateTimeOffset.UtcNow - timestamp > timeout)
- {
- var id = reader.DbDataReader.GetFieldValue(0);
- CreateDeleteLockCommand(id).ExecuteNonQuery(CreateRelationalCommandParameters());
- }
- }
-
Thread.Sleep(retryDelay);
if (retryDelay < TimeSpan.FromMinutes(1))
{
@@ -185,7 +173,7 @@ public override IDisposable GetDatabaseLock(TimeSpan timeout)
throw new TimeoutException();
}
- public override async Task GetDatabaseLockAsync(TimeSpan timeout, CancellationToken cancellationToken = new CancellationToken())
+ public override async Task GetDatabaseLockAsync(CancellationToken cancellationToken = new CancellationToken())
{
if (!InterpretExistsResult(await Dependencies.RawSqlCommandBuilder.Build(CreateExistsSql(LockTableName))
.ExecuteScalarAsync(CreateRelationalCommandParameters(), cancellationToken).ConfigureAwait(false)))
@@ -204,8 +192,7 @@ await CreateLockTableCommand()
}
var retryDelay = _retryDelay;
- var startTime = DateTimeOffset.UtcNow;
- while (DateTimeOffset.UtcNow - startTime < timeout)
+ while (true)
{
var dbLock = CreateMigrationDatabaseLock();
int? insertCount = 0;
@@ -225,19 +212,6 @@ await CreateLockTableCommand()
return dbLock;
}
- using var reader = await CreateGetLockCommand().ExecuteReaderAsync(CreateRelationalCommandParameters(), cancellationToken)
- .ConfigureAwait(false);
- if (await reader.ReadAsync(cancellationToken).ConfigureAwait(false))
- {
- var timestamp = await reader.DbDataReader.GetFieldValueAsync(1).ConfigureAwait(false);
- if (DateTimeOffset.UtcNow - timestamp > timeout)
- {
- var id = await reader.DbDataReader.GetFieldValueAsync(0).ConfigureAwait(false);
- await CreateDeleteLockCommand(id).ExecuteNonQueryAsync(CreateRelationalCommandParameters(), cancellationToken)
- .ConfigureAwait(false);
- }
- }
-
await Task.Delay(_retryDelay, cancellationToken).ConfigureAwait(true);
if (retryDelay < TimeSpan.FromMinutes(1))
{
@@ -266,11 +240,6 @@ private IRelationalCommand CreateInsertLockCommand(DateTimeOffset timestamp)
""");
}
- private IRelationalCommand CreateGetLockCommand()
- => Dependencies.RawSqlCommandBuilder.Build($"""
-SELECT TOP 1 `Id`, `Timestamp` FROM `{LockTableName}`;
-""");
-
private IRelationalCommand CreateDeleteLockCommand(int? id = null)
{
var sql = $"""
diff --git a/src/EFCore.Jet/Query/Internal/JetLocateScalarSubqueryVisitor.cs b/src/EFCore.Jet/Query/Internal/JetLocateScalarSubqueryVisitor.cs
index 3de8a119..d724f2e1 100644
--- a/src/EFCore.Jet/Query/Internal/JetLocateScalarSubqueryVisitor.cs
+++ b/src/EFCore.Jet/Query/Internal/JetLocateScalarSubqueryVisitor.cs
@@ -403,11 +403,22 @@ protected override Expression VisitJsonScalar(JsonScalarExpression jsonScalarExp
protected override Expression VisitValues(ValuesExpression valuesExpression)
{
- var rowValues = new RowValueExpression[valuesExpression.RowValues.Count];
- for (var i = 0; i < rowValues.Length; i++)
+ switch (valuesExpression)
{
- rowValues[i] = (RowValueExpression)Visit(valuesExpression.RowValues[i]);
+ case { RowValues: not null }:
+ var rowValues = new RowValueExpression[valuesExpression.RowValues!.Count];
+ for (var i = 0; i < rowValues.Length; i++)
+ {
+ rowValues[i] = (RowValueExpression)Visit(valuesExpression.RowValues[i]);
+ }
+ return valuesExpression.Update(rowValues);
+
+ case { ValuesParameter: not null }:
+ var valuesParameter = (SqlParameterExpression)Visit(valuesExpression.ValuesParameter);
+ return valuesExpression.Update(valuesParameter);
+
+ default:
+ throw new UnreachableException();
}
- return valuesExpression.Update(rowValues);
}
}
diff --git a/src/EFCore.Jet/Query/Internal/JetParameterBasedSqlProcessor.cs b/src/EFCore.Jet/Query/Internal/JetParameterBasedSqlProcessor.cs
index cfd8dc0c..5b8486ba 100644
--- a/src/EFCore.Jet/Query/Internal/JetParameterBasedSqlProcessor.cs
+++ b/src/EFCore.Jet/Query/Internal/JetParameterBasedSqlProcessor.cs
@@ -24,8 +24,8 @@ public class JetParameterBasedSqlProcessor : RelationalParameterBasedSqlProcesso
///
public JetParameterBasedSqlProcessor(
RelationalParameterBasedSqlProcessorDependencies dependencies,
- bool useRelationalNulls)
- : base(dependencies, useRelationalNulls)
+ RelationalParameterBasedSqlProcessorParameters parameters)
+ : base(dependencies, parameters)
{
}
@@ -64,7 +64,7 @@ protected override Expression ProcessSqlNullability(
Check.NotNull(selectExpression, nameof(selectExpression));
Check.NotNull(parametersValues, nameof(parametersValues));
- return new JetSqlNullabilityProcessor(Dependencies, UseRelationalNulls).Process(
+ return new JetSqlNullabilityProcessor(Dependencies, Parameters).Process(
selectExpression, parametersValues, out canCache);
}
}
diff --git a/src/EFCore.Jet/Query/Internal/JetParameterBasedSqlProcessorFactory.cs b/src/EFCore.Jet/Query/Internal/JetParameterBasedSqlProcessorFactory.cs
index 2ab151e9..e0d97bb9 100644
--- a/src/EFCore.Jet/Query/Internal/JetParameterBasedSqlProcessorFactory.cs
+++ b/src/EFCore.Jet/Query/Internal/JetParameterBasedSqlProcessorFactory.cs
@@ -35,6 +35,6 @@ public JetParameterBasedSqlProcessorFactory(RelationalParameterBasedSqlProcessor
/// 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.
///
- public virtual RelationalParameterBasedSqlProcessor Create(bool useRelationalNulls)
- => new JetParameterBasedSqlProcessor(Dependencies, useRelationalNulls);
+ public RelationalParameterBasedSqlProcessor Create(RelationalParameterBasedSqlProcessorParameters parameters)
+ => new JetParameterBasedSqlProcessor(Dependencies, parameters);
}
diff --git a/src/EFCore.Jet/Query/Internal/JetSqlNullabilityProcessor.cs b/src/EFCore.Jet/Query/Internal/JetSqlNullabilityProcessor.cs
index 6ac89e08..07424f44 100644
--- a/src/EFCore.Jet/Query/Internal/JetSqlNullabilityProcessor.cs
+++ b/src/EFCore.Jet/Query/Internal/JetSqlNullabilityProcessor.cs
@@ -22,8 +22,8 @@ public class JetSqlNullabilityProcessor : SqlNullabilityProcessor
///
public JetSqlNullabilityProcessor(
RelationalParameterBasedSqlProcessorDependencies dependencies,
- bool useRelationalNulls)
- : base(dependencies, useRelationalNulls)
+ RelationalParameterBasedSqlProcessorParameters parameters)
+ : base(dependencies, parameters)
{
}
diff --git a/src/EFCore.Jet/Query/Internal/SearchConditionConvertingExpressionVisitor.cs b/src/EFCore.Jet/Query/Internal/SearchConditionConvertingExpressionVisitor.cs
index 02b73114..a5cdf57b 100644
--- a/src/EFCore.Jet/Query/Internal/SearchConditionConvertingExpressionVisitor.cs
+++ b/src/EFCore.Jet/Query/Internal/SearchConditionConvertingExpressionVisitor.cs
@@ -1,6 +1,7 @@
// 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.Diagnostics;
using System.Linq.Expressions;
using EntityFrameworkCore.Jet.Utilities;
using Microsoft.EntityFrameworkCore.Diagnostics;
@@ -648,14 +649,24 @@ protected override Expression VisitValues(ValuesExpression valuesExpression)
{
var parentSearchCondition = _isSearchCondition;
_isSearchCondition = false;
-
- var rowValues = new RowValueExpression[valuesExpression.RowValues.Count];
- for (var i = 0; i < rowValues.Length; i++)
+ switch (valuesExpression)
{
- rowValues[i] = (RowValueExpression)Visit(valuesExpression.RowValues[i]);
- }
+ case { RowValues: not null }:
+ var rowValues = new RowValueExpression[valuesExpression.RowValues!.Count];
+ for (var i = 0; i < rowValues.Length; i++)
+ {
+ rowValues[i] = (RowValueExpression)Visit(valuesExpression.RowValues[i]);
+ }
+ _isSearchCondition = parentSearchCondition;
+ return valuesExpression.Update(rowValues);
- _isSearchCondition = parentSearchCondition;
- return valuesExpression.Update(rowValues);
+ case { ValuesParameter: not null }:
+ var valuesParameter = (SqlParameterExpression)Visit(valuesExpression.ValuesParameter);
+ _isSearchCondition = parentSearchCondition;
+ return valuesExpression.Update(valuesParameter);
+
+ default:
+ throw new UnreachableException();
+ }
}
}
\ No newline at end of file
diff --git a/src/EFCore.Jet/Query/Sql/Internal/JetQuerySqlGenerator.cs b/src/EFCore.Jet/Query/Sql/Internal/JetQuerySqlGenerator.cs
index 21076d02..30c96b05 100644
--- a/src/EFCore.Jet/Query/Sql/Internal/JetQuerySqlGenerator.cs
+++ b/src/EFCore.Jet/Query/Sql/Internal/JetQuerySqlGenerator.cs
@@ -816,7 +816,7 @@ protected override Expression VisitValues(ValuesExpression valuesExpression)
///
protected override void GenerateValues(ValuesExpression valuesExpression)
{
- if (valuesExpression.RowValues.Count == 0)
+ if (valuesExpression.RowValues is null || valuesExpression.RowValues.Count == 0)
{
throw new InvalidOperationException(RelationalStrings.EmptyCollectionNotSupportedAsInlineQueryRoot);
}
diff --git a/test/EFCore.Jet.FunctionalTests/GreenTests/ace_2010_odbc_x86.txt b/test/EFCore.Jet.FunctionalTests/GreenTests/ace_2010_odbc_x86.txt
index d525cb92..2c9be180 100644
--- a/test/EFCore.Jet.FunctionalTests/GreenTests/ace_2010_odbc_x86.txt
+++ b/test/EFCore.Jet.FunctionalTests/GreenTests/ace_2010_odbc_x86.txt
@@ -126,6 +126,8 @@ EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJet
EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Check_all_tests_overridden
EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Concat(async: False)
EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Concat(async: True)
+EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_FromSql_converted_to_subquery(async: False)
+EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_FromSql_converted_to_subquery(async: True)
EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_non_entity_projection_2(async: False)
EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_non_entity_projection_2(async: True)
EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_non_entity_projection_3(async: False)
@@ -8176,8 +8178,6 @@ EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTe
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_apply_all_migrations_async
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_apply_one_migration
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_apply_range_of_migrations
-EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_apply_second_migration_in_parallel
-EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_apply_second_migration_in_parallel_async
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_diff_against_2_1_ASP_NET_Identity_model
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_diff_against_2_2_ASP_NET_Identity_model
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_diff_against_2_2_model
@@ -8198,6 +8198,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTe
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_revert_all_migrations
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_revert_one_migrations
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Empty_Migration_Creates_Database
+EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Throws_for_pending_model_changes
+EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Throws_for_pending_model_changes_async
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_check_constraint_generates_exec_when_idempotent
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_check_constraint_with_name
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_identity
@@ -11415,6 +11417,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysSplitQueryJetTest.Pro
EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysSplitQueryJetTest.Projecting_multiple_collections_with_ordering_same_level(async: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysSplitQueryJetTest.Projecting_multiple_collections_with_ordering_same_level(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Check_all_tests_overridden
+EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Collate_is_null(async: False)
+EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Collate_is_null(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Day(async: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Day(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Hour(async: False)
@@ -11427,8 +11431,12 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Second
EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Second(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Year(async: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Year(async: True)
+EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Greatest_with_nullable_value_type(async: False)
+EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Greatest_with_nullable_value_type(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Greatest_with_parameter_array_is_not_supported(async: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Greatest_with_parameter_array_is_not_supported(async: True)
+EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Greatest(async: False)
+EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Greatest(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.IsDate_join_fields(async: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.IsDate_join_fields(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.IsDate_not_valid(async: False)
@@ -11436,8 +11444,12 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.IsDate_not_vali
EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.IsDate_should_throw_on_client_eval
EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.IsDate_valid(async: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.IsDate_valid(async: True)
+EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Least_with_nullable_value_type(async: False)
+EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Least_with_nullable_value_type(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Least_with_parameter_array_is_not_supported(async: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Least_with_parameter_array_is_not_supported(async: True)
+EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Least(async: False)
+EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Least(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Like_all_literals(async: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Like_all_literals(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Like_identity(async: False)
@@ -12359,8 +12371,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJe
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_on_nav_subquery_in_projection(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_over_default_returns_default(async: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_over_default_returns_default(async: True)
-EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_over_subquery_is_client_eval(isAsync: False)
-EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_over_subquery_is_client_eval(isAsync: True)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_over_subquery(isAsync: False)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_over_subquery(isAsync: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_with_arg_expression(isAsync: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_with_arg_expression(isAsync: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_with_arg(isAsync: False)
@@ -12578,12 +12590,12 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJe
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_no_data(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_over_default_returns_default(async: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_over_default_returns_default(async: True)
-EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_over_nested_subquery_is_client_eval(isAsync: False)
-EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_over_nested_subquery_is_client_eval(isAsync: True)
-EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_over_subquery_is_client_eval(isAsync: False)
-EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_over_subquery_is_client_eval(isAsync: True)
-EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_over_sum_subquery_is_client_eval(isAsync: False)
-EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_over_sum_subquery_is_client_eval(isAsync: True)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_over_nested_subquery(isAsync: False)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_over_nested_subquery(isAsync: True)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_over_subquery(isAsync: False)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_over_subquery(isAsync: True)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_over_sum_subquery(isAsync: False)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_over_sum_subquery(isAsync: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_with_arg(isAsync: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_with_arg(isAsync: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_with_coalesce(isAsync: False)
@@ -12602,12 +12614,12 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJe
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_no_data(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_over_default_returns_default(async: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_over_default_returns_default(async: True)
-EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_over_max_subquery_is_client_eval(isAsync: False)
-EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_over_max_subquery_is_client_eval(isAsync: True)
-EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_over_nested_subquery_is_client_eval(isAsync: False)
-EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_over_nested_subquery_is_client_eval(isAsync: True)
-EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_over_subquery_is_client_eval(isAsync: False)
-EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_over_subquery_is_client_eval(isAsync: True)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_over_max_subquery(isAsync: False)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_over_max_subquery(isAsync: True)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_over_nested_subquery(isAsync: False)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_over_nested_subquery(isAsync: True)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_over_subquery(isAsync: False)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_over_subquery(isAsync: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_with_arg(isAsync: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_with_arg(isAsync: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_with_coalesce(isAsync: False)
@@ -12670,16 +12682,22 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJe
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_on_float_column_in_subquery(isAsync: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_on_float_column(isAsync: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_on_float_column(isAsync: True)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_Any_subquery(async: False)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_Any_subquery(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_empty_returns_zero(async: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_empty_returns_zero(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_explicit_cast_over_column(isAsync: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_explicit_cast_over_column(isAsync: True)
-EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_min_subquery_is_client_eval(isAsync: False)
-EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_min_subquery_is_client_eval(isAsync: True)
-EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_nested_subquery_is_client_eval(isAsync: False)
-EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_nested_subquery_is_client_eval(isAsync: True)
-EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_subquery_is_client_eval(isAsync: False)
-EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_subquery_is_client_eval(isAsync: True)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_min_subquery(isAsync: False)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_min_subquery(isAsync: True)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_nested_subquery(isAsync: False)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_nested_subquery(isAsync: True)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_scalar_returning_subquery(async: False)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_scalar_returning_subquery(async: True)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_subquery(isAsync: False)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_subquery(isAsync: True)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_uncorrelated_subquery(async: False)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_uncorrelated_subquery(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_with_arg_expression(isAsync: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_with_arg_expression(isAsync: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_with_arg(isAsync: False)
@@ -14223,6 +14241,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.All_client_or_server_top_level(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.All_client(async: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.All_client(async: True)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.All_on_distinct(async: False)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.All_on_distinct(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.All_top_level_column(isAsync: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.All_top_level_column(isAsync: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.All_top_level_subquery_ef_property(isAsync: False)
@@ -14259,6 +14279,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Any_nested2(isAsync: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Any_nested3(isAsync: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Any_nested3(isAsync: True)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Any_on_distinct(async: False)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Any_on_distinct(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Any_predicate(isAsync: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Any_predicate(isAsync: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Any_simple(isAsync: False)
@@ -14338,6 +14360,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Concat_string_int(async: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Concat_string_int(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Concurrent_async_queries_when_raw_query
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Contains_on_distinct(async: False)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Contains_on_distinct(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Contains_over_concatenated_column_and_constant(async: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Contains_over_concatenated_column_and_constant(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Contains_over_concatenated_columns_both_fixed_length(async: False)
@@ -14764,10 +14788,14 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_nested_collection_with_distinct(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_null_coalesce_operator(isAsync: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_null_coalesce_operator(isAsync: True)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_Order(async: False)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_Order(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_orderBy_take_count(isAsync: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_orderBy_take_count(isAsync: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_orderBy_take_long_count(isAsync: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_orderBy_take_long_count(isAsync: True)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_OrderDescending(async: False)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_OrderDescending(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_Property_when_non_shadow(async: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_Property_when_non_shadow(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_Property_when_shadow_unconstrained_generic_method(async: False)
@@ -14951,6 +14979,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_join_orderby_join_select(isAsync: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_join_select(isAsync: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_join_select(isAsync: True)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_Order_First(async: False)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_Order_First(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_orderby_join_select(isAsync: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_orderby_join_select(isAsync: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_orderby_select_many(isAsync: False)
@@ -15530,6 +15560,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_nested(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_non_entity(async: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_non_entity(async: True)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_on_distinct(async: False)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_on_distinct(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_on_entity_plus_other_column_with_correlated_collection(async: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_on_entity_plus_other_column_with_correlated_collection(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_on_entity_with_correlated_collection(async: False)
@@ -17380,8 +17412,6 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.I
EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_Contains_with_all_parameters(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_Contains_with_constant_and_parameter(async: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_Contains_with_constant_and_parameter(async: True)
-EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_Contains_with_EF_Constant(async: False)
-EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_Contains_with_EF_Constant(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_Contains_with_mixed_value_types(async: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_Contains_with_mixed_value_types(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_Contains_with_one_value(async: False)
@@ -17423,6 +17453,10 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.N
EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Nullable_reference_column_collection_index_equals_nullable_column(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_Concat_column_collection(async: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_Concat_column_collection(async: True)
+EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_Contains_with_EF_Constant(async: False)
+EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_Contains_with_EF_Constant(async: True)
+EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_Count_with_column_predicate_with_EF_Constant(async: False)
+EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_Count_with_column_predicate_with_EF_Constant(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_Count(async: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_Count(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_HashSet_of_ints_Contains_int(async: False)
@@ -17466,6 +17500,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.P
EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_of_strings_Contains_nullable_string(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_of_strings_Contains_string(async: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_of_strings_Contains_string(async: True)
+EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_Where_with_EF_Constant_Where_Any(async: False)
+EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_Where_with_EF_Constant_Where_Any(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_collection_of_datetimes_filtered(async: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_collection_of_datetimes_filtered(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_collection_of_ints_ordered(async: False)
diff --git a/test/EFCore.Jet.FunctionalTests/GreenTests/ace_2010_oledb_x86.txt b/test/EFCore.Jet.FunctionalTests/GreenTests/ace_2010_oledb_x86.txt
index 9b3f5f16..159f72e8 100644
--- a/test/EFCore.Jet.FunctionalTests/GreenTests/ace_2010_oledb_x86.txt
+++ b/test/EFCore.Jet.FunctionalTests/GreenTests/ace_2010_oledb_x86.txt
@@ -131,6 +131,8 @@ EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJet
EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Check_all_tests_overridden
EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Concat(async: False)
EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Concat(async: True)
+EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_FromSql_converted_to_subquery(async: False)
+EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_FromSql_converted_to_subquery(async: True)
EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_non_entity_projection_2(async: False)
EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_non_entity_projection_2(async: True)
EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_non_entity_projection_3(async: False)
@@ -8248,8 +8250,6 @@ EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTe
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_apply_all_migrations_async
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_apply_one_migration
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_apply_range_of_migrations
-EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_apply_second_migration_in_parallel
-EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_apply_second_migration_in_parallel_async
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_diff_against_2_1_ASP_NET_Identity_model
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_diff_against_2_2_ASP_NET_Identity_model
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_diff_against_2_2_model
@@ -8270,6 +8270,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTe
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_revert_all_migrations
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_revert_one_migrations
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Empty_Migration_Creates_Database
+EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Throws_for_pending_model_changes
+EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Throws_for_pending_model_changes_async
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_check_constraint_generates_exec_when_idempotent
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_check_constraint_with_name
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_identity
@@ -11542,6 +11544,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysSplitQueryJetTest.Pro
EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysSplitQueryJetTest.Projecting_multiple_collections_with_ordering_same_level(async: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysSplitQueryJetTest.Projecting_multiple_collections_with_ordering_same_level(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Check_all_tests_overridden
+EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Collate_is_null(async: False)
+EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Collate_is_null(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Day(async: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Day(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Hour(async: False)
@@ -11554,8 +11558,12 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Second
EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Second(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Year(async: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Year(async: True)
+EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Greatest_with_nullable_value_type(async: False)
+EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Greatest_with_nullable_value_type(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Greatest_with_parameter_array_is_not_supported(async: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Greatest_with_parameter_array_is_not_supported(async: True)
+EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Greatest(async: False)
+EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Greatest(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.IsDate_join_fields(async: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.IsDate_join_fields(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.IsDate_not_valid(async: False)
@@ -11563,8 +11571,12 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.IsDate_not_vali
EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.IsDate_should_throw_on_client_eval
EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.IsDate_valid(async: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.IsDate_valid(async: True)
+EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Least_with_nullable_value_type(async: False)
+EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Least_with_nullable_value_type(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Least_with_parameter_array_is_not_supported(async: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Least_with_parameter_array_is_not_supported(async: True)
+EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Least(async: False)
+EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Least(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Like_all_literals(async: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Like_all_literals(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Like_identity(async: False)
@@ -13649,8 +13661,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJe
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_on_nav_subquery_in_projection(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_over_default_returns_default(async: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_over_default_returns_default(async: True)
-EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_over_subquery_is_client_eval(isAsync: False)
-EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_over_subquery_is_client_eval(isAsync: True)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_over_subquery(isAsync: False)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_over_subquery(isAsync: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_with_arg_expression(isAsync: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_with_arg_expression(isAsync: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_with_arg(isAsync: False)
@@ -13868,12 +13880,12 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJe
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_no_data(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_over_default_returns_default(async: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_over_default_returns_default(async: True)
-EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_over_nested_subquery_is_client_eval(isAsync: False)
-EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_over_nested_subquery_is_client_eval(isAsync: True)
-EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_over_subquery_is_client_eval(isAsync: False)
-EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_over_subquery_is_client_eval(isAsync: True)
-EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_over_sum_subquery_is_client_eval(isAsync: False)
-EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_over_sum_subquery_is_client_eval(isAsync: True)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_over_nested_subquery(isAsync: False)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_over_nested_subquery(isAsync: True)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_over_subquery(isAsync: False)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_over_subquery(isAsync: True)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_over_sum_subquery(isAsync: False)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_over_sum_subquery(isAsync: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_with_arg(isAsync: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_with_arg(isAsync: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Max_with_coalesce(isAsync: False)
@@ -13892,12 +13904,12 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJe
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_no_data(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_over_default_returns_default(async: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_over_default_returns_default(async: True)
-EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_over_max_subquery_is_client_eval(isAsync: False)
-EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_over_max_subquery_is_client_eval(isAsync: True)
-EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_over_nested_subquery_is_client_eval(isAsync: False)
-EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_over_nested_subquery_is_client_eval(isAsync: True)
-EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_over_subquery_is_client_eval(isAsync: False)
-EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_over_subquery_is_client_eval(isAsync: True)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_over_max_subquery(isAsync: False)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_over_max_subquery(isAsync: True)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_over_nested_subquery(isAsync: False)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_over_nested_subquery(isAsync: True)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_over_subquery(isAsync: False)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_over_subquery(isAsync: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_with_arg(isAsync: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_with_arg(isAsync: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_with_coalesce(isAsync: False)
@@ -13960,16 +13972,22 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJe
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_on_float_column_in_subquery(isAsync: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_on_float_column(isAsync: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_on_float_column(isAsync: True)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_Any_subquery(async: False)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_Any_subquery(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_empty_returns_zero(async: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_empty_returns_zero(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_explicit_cast_over_column(isAsync: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_explicit_cast_over_column(isAsync: True)
-EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_min_subquery_is_client_eval(isAsync: False)
-EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_min_subquery_is_client_eval(isAsync: True)
-EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_nested_subquery_is_client_eval(isAsync: False)
-EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_nested_subquery_is_client_eval(isAsync: True)
-EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_subquery_is_client_eval(isAsync: False)
-EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_subquery_is_client_eval(isAsync: True)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_min_subquery(isAsync: False)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_min_subquery(isAsync: True)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_nested_subquery(isAsync: False)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_nested_subquery(isAsync: True)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_scalar_returning_subquery(async: False)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_scalar_returning_subquery(async: True)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_subquery(isAsync: False)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_subquery(isAsync: True)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_uncorrelated_subquery(async: False)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_over_uncorrelated_subquery(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_with_arg_expression(isAsync: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_with_arg_expression(isAsync: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Sum_with_arg(isAsync: False)
@@ -15513,6 +15531,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.All_client_or_server_top_level(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.All_client(async: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.All_client(async: True)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.All_on_distinct(async: False)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.All_on_distinct(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.All_top_level_column(isAsync: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.All_top_level_column(isAsync: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.All_top_level_subquery_ef_property(isAsync: False)
@@ -15549,6 +15569,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Any_nested2(isAsync: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Any_nested3(isAsync: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Any_nested3(isAsync: True)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Any_on_distinct(async: False)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Any_on_distinct(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Any_predicate(isAsync: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Any_predicate(isAsync: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Any_simple(isAsync: False)
@@ -15628,6 +15650,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Concat_string_int(async: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Concat_string_int(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Concurrent_async_queries_when_raw_query
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Contains_on_distinct(async: False)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Contains_on_distinct(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Contains_over_concatenated_column_and_constant(async: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Contains_over_concatenated_column_and_constant(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Contains_over_concatenated_column_and_parameter(async: False)
@@ -16058,10 +16082,14 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_nested_collection_with_distinct(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_null_coalesce_operator(isAsync: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_null_coalesce_operator(isAsync: True)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_Order(async: False)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_Order(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_orderBy_take_count(isAsync: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_orderBy_take_count(isAsync: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_orderBy_take_long_count(isAsync: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_orderBy_take_long_count(isAsync: True)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_OrderDescending(async: False)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_OrderDescending(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_Property_when_non_shadow(async: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_Property_when_non_shadow(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Select_Property_when_shadow_unconstrained_generic_method(async: False)
@@ -16247,6 +16275,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_join_orderby_join_select(isAsync: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_join_select(isAsync: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_join_select(isAsync: True)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_Order_First(async: False)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_Order_First(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_orderby_join_select(isAsync: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_orderby_join_select(isAsync: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_orderby_select_many(isAsync: False)
@@ -16826,6 +16856,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_nested(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_non_entity(async: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_non_entity(async: True)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_on_distinct(async: False)
+EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_on_distinct(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_on_entity_plus_other_column_with_correlated_collection(async: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_on_entity_plus_other_column_with_correlated_collection(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSetOperationsQueryJetTest.Union_on_entity_with_correlated_collection(async: False)
@@ -18727,8 +18759,6 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.I
EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_Contains_with_all_parameters(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_Contains_with_constant_and_parameter(async: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_Contains_with_constant_and_parameter(async: True)
-EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_Contains_with_EF_Constant(async: False)
-EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_Contains_with_EF_Constant(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_Contains_with_mixed_value_types(async: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_Contains_with_mixed_value_types(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_Contains_with_one_value(async: False)
@@ -18761,6 +18791,10 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.I
EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_of_nullable_ints_Contains_null(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_of_nullable_ints_Contains(async: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_of_nullable_ints_Contains(async: True)
+EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_with_single_parameter_element_Contains(async: False)
+EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_with_single_parameter_element_Contains(async: True)
+EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_with_single_parameter_element_Count(async: False)
+EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_with_single_parameter_element_Count(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Json_representation_of_bool_array
EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Nested_contains_with_arrays_and_no_inferred_type_mapping(async: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Nested_contains_with_arrays_and_no_inferred_type_mapping(async: True)
@@ -18772,6 +18806,10 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.N
EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Nullable_reference_column_collection_index_equals_nullable_column(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_Concat_column_collection(async: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_Concat_column_collection(async: True)
+EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_Contains_with_EF_Constant(async: False)
+EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_Contains_with_EF_Constant(async: True)
+EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_Count_with_column_predicate_with_EF_Constant(async: False)
+EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_Count_with_column_predicate_with_EF_Constant(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_Count(async: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_Count(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_HashSet_of_ints_Contains_int(async: False)
@@ -18815,6 +18853,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.P
EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_of_strings_Contains_nullable_string(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_of_strings_Contains_string(async: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_of_strings_Contains_string(async: True)
+EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_Where_with_EF_Constant_Where_Any(async: False)
+EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_Where_with_EF_Constant_Where_Any(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_collection_of_datetimes_filtered(async: False)
EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_collection_of_datetimes_filtered(async: True)
EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_collection_of_ints_ordered(async: False)
diff --git a/test/EFCore.Jet.FunctionalTests/Migrations/MigrationsInfrastructureJetTest.cs b/test/EFCore.Jet.FunctionalTests/Migrations/MigrationsInfrastructureJetTest.cs
index 35c8db20..418c8414 100644
--- a/test/EFCore.Jet.FunctionalTests/Migrations/MigrationsInfrastructureJetTest.cs
+++ b/test/EFCore.Jet.FunctionalTests/Migrations/MigrationsInfrastructureJetTest.cs
@@ -8,6 +8,8 @@
using EntityFrameworkCore.Jet.Metadata;
using Identity30.Data;
using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Diagnostics;
+using Microsoft.EntityFrameworkCore.Diagnostics.Internal;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage;
@@ -84,33 +86,17 @@ public override void Can_generate_up_scripts()
INSERT INTO `__EFMigrationsHistory` (`MigrationId`, `ProductVersion`)
VALUES ('00000000000001_Migration1', '7.0.0-test');
-COMMIT TRANSACTION;
-
-BEGIN TRANSACTION;
-
ALTER TABLE `Table1` RENAME COLUMN `Foo` TO `Bar`;
INSERT INTO `__EFMigrationsHistory` (`MigrationId`, `ProductVersion`)
VALUES ('00000000000002_Migration2', '7.0.0-test');
-COMMIT TRANSACTION;
-
-BEGIN TRANSACTION;
-
INSERT INTO `__EFMigrationsHistory` (`MigrationId`, `ProductVersion`)
VALUES ('00000000000003_Migration3', '7.0.0-test');
-COMMIT TRANSACTION;
-
-BEGIN TRANSACTION;
-
INSERT INTO `__EFMigrationsHistory` (`MigrationId`, `ProductVersion`)
VALUES ('00000000000004_Migration4', '7.0.0-test');
-COMMIT TRANSACTION;
-
-BEGIN TRANSACTION;
-
INSERT INTO Table1 (Id, Bar, Description) VALUES (-1, 3, 'Value With
Empty Lines')
@@ -118,10 +104,6 @@ INSERT INTO Table1 (Id, Bar, Description) VALUES (-1, 3, 'Value With
INSERT INTO `__EFMigrationsHistory` (`MigrationId`, `ProductVersion`)
VALUES ('00000000000005_Migration5', '7.0.0-test');
-COMMIT TRANSACTION;
-
-BEGIN TRANSACTION;
-
INSERT INTO Table1 (Id, Bar, Description) VALUES (-2, 4, 'GO
Value With
@@ -130,10 +112,6 @@ Value With
INSERT INTO `__EFMigrationsHistory` (`MigrationId`, `ProductVersion`)
VALUES ('00000000000006_Migration6', '7.0.0-test');
-COMMIT TRANSACTION;
-
-BEGIN TRANSACTION;
-
INSERT INTO Table1 (Id, Bar, Description) VALUES (-3, 5, 'GO
Value With
@@ -206,10 +184,6 @@ public override void Can_generate_down_scripts()
DELETE FROM `__EFMigrationsHistory`
WHERE `MigrationId` = '00000000000002_Migration2';
-COMMIT TRANSACTION;
-
-BEGIN TRANSACTION;
-
DROP TABLE `Table1`;
DELETE FROM `__EFMigrationsHistory`
@@ -270,20 +244,55 @@ public override void Can_get_active_provider()
Assert.Equal("EntityFrameworkCore.Jet", ActiveProvider);
}
+ [ConditionalFact]
+ public void Throws_for_pending_model_changes()
+ {
+ using var context = new BloggingContext(
+ Fixture.TestStore.AddProviderOptions(
+ new DbContextOptionsBuilder().EnableServiceProviderCaching(false)).Options);
+
+ Assert.Equal(
+ CoreStrings.WarningAsErrorTemplate(
+ RelationalEventId.PendingModelChangesWarning.ToString(),
+ RelationalResources.LogPendingModelChanges(new TestLogger())
+ .GenerateMessage(nameof(BloggingContext)),
+ "RelationalEventId.PendingModelChangesWarning"),
+ (Assert.Throws(context.Database.Migrate)).Message);
+ }
+
+ [ConditionalFact]
+ public async Task Throws_for_pending_model_changes_async()
+ {
+ using var context = new BloggingContext(
+ Fixture.TestStore.AddProviderOptions(
+ new DbContextOptionsBuilder().EnableServiceProviderCaching(false)).Options);
+
+ Assert.Equal(
+ CoreStrings.WarningAsErrorTemplate(
+ RelationalEventId.PendingModelChangesWarning.ToString(),
+ RelationalResources.LogPendingModelChanges(new TestLogger())
+ .GenerateMessage(nameof(BloggingContext)),
+ "RelationalEventId.PendingModelChangesWarning"),
+ (await Assert.ThrowsAsync(() => context.Database.MigrateAsync())).Message);
+ }
+
[ConditionalFact]
public async Task Empty_Migration_Creates_Database()
{
- using (var context = new BloggingContext(
+ using var context = new BloggingContext(
Fixture.TestStore.AddProviderOptions(
- new DbContextOptionsBuilder().EnableServiceProviderCaching(false)).Options))
- {
- var creator = (JetDatabaseCreator)context.GetService();
- // creator.RetryTimeout = TimeSpan.FromMinutes(10);
+ new DbContextOptionsBuilder().EnableServiceProviderCaching(false))
+ .ConfigureWarnings(e => e.Log(RelationalEventId.PendingModelChangesWarning)).Options);
- await context.Database.MigrateAsync();
+ context.Database.EnsureDeleted();
+ GiveMeSomeTime(context);
- Assert.True(creator.Exists());
- }
+ var creator = (JetDatabaseCreator)context.GetService();
+ //creator.RetryTimeout = TimeSpan.FromMinutes(10);
+
+ await context.Database.MigrateAsync("Empty");
+
+ Assert.True(creator.Exists());
}
public override void Can_apply_all_migrations() // Issue efcore #33331
@@ -292,6 +301,30 @@ public override void Can_apply_all_migrations() // Issue efcore #33331
public override Task Can_apply_all_migrations_async() // Issue efcore #33331
=> Assert.ThrowsAnyAsync(() => base.Can_apply_all_migrations_async());
+ [ConditionalFact(Skip ="For now")]
+ public override void Can_apply_one_migration_in_parallel()
+ {
+ base.Can_apply_one_migration_in_parallel();
+ }
+
+ [ConditionalFact(Skip = "For now")]
+ public override Task Can_apply_one_migration_in_parallel_async()
+ {
+ return base.Can_apply_one_migration_in_parallel_async();
+ }
+
+ [ConditionalFact(Skip = "For now")]
+ public override void Can_apply_second_migration_in_parallel()
+ {
+ base.Can_apply_second_migration_in_parallel();
+ }
+
+ [ConditionalFact(Skip = "For now")]
+ public override Task Can_apply_second_migration_in_parallel_async()
+ {
+ return base.Can_apply_second_migration_in_parallel_async();
+ }
+
private class BloggingContext(DbContextOptions options) : DbContext(options)
{
// ReSharper disable once UnusedMember.Local
diff --git a/test/EFCore.Jet.FunctionalTests/Query/AdHocJsonQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/AdHocJsonQueryJetTest.cs
index ba53ecb1..280ab96d 100644
--- a/test/EFCore.Jet.FunctionalTests/Query/AdHocJsonQueryJetTest.cs
+++ b/test/EFCore.Jet.FunctionalTests/Query/AdHocJsonQueryJetTest.cs
@@ -18,376 +18,6 @@ namespace EntityFrameworkCore.Jet.FunctionalTests.Query;
#nullable disable
-public class AdHocJsonQueryJetTest : AdHocJsonQueryTestBase
+public class AdHocJsonQueryJetTest : AdHocJsonQueryJetTestBase
{
- protected override ITestStoreFactory TestStoreFactory
- => JetTestStoreFactory.Instance;
-
- protected override async Task Seed29219(MyContext29219 ctx)
- {
- var entity1 = new MyEntity29219
- {
- Id = 1,
- Reference = new MyJsonEntity29219 { NonNullableScalar = 10, NullableScalar = 11 },
- Collection =
- [
- new() { NonNullableScalar = 100, NullableScalar = 101 },
- new() { NonNullableScalar = 200, NullableScalar = 201 },
- new() { NonNullableScalar = 300, NullableScalar = null }
- ]
- };
-
- var entity2 = new MyEntity29219
- {
- Id = 2,
- Reference = new MyJsonEntity29219 { NonNullableScalar = 20, NullableScalar = null },
- Collection = [new() { NonNullableScalar = 1001, NullableScalar = null }]
- };
-
- ctx.Entities.AddRange(entity1, entity2);
- await ctx.SaveChangesAsync();
-
- await ctx.Database.ExecuteSqlAsync(
- $$"""
-INSERT INTO [Entities] ([Id], [Reference], [Collection])
-VALUES(3, '{ "NonNullableScalar" : 30 }', '[{ "NonNullableScalar" : 10001 }]')
-""");
- }
-
- protected override async Task Seed30028(MyContext30028 ctx)
- {
- // complete
- await ctx.Database.ExecuteSqlAsync(
- $$$$"""
-INSERT INTO [Entities] ([Id], [Json])
-VALUES(
-1,
-'{"RootName":"e1","Collection":[{"BranchName":"e1 c1","Nested":{"LeafName":"e1 c1 l"}},{"BranchName":"e1 c2","Nested":{"LeafName":"e1 c2 l"}}],"OptionalReference":{"BranchName":"e1 or","Nested":{"LeafName":"e1 or l"}},"RequiredReference":{"BranchName":"e1 rr","Nested":{"LeafName":"e1 rr l"}}}')
-""");
-
- // missing collection
- await ctx.Database.ExecuteSqlAsync(
- $$$$"""
-INSERT INTO [Entities] ([Id], [Json])
-VALUES(
-2,
-'{"RootName":"e2","OptionalReference":{"BranchName":"e2 or","Nested":{"LeafName":"e2 or l"}},"RequiredReference":{"BranchName":"e2 rr","Nested":{"LeafName":"e2 rr l"}}}')
-""");
-
- // missing optional reference
- await ctx.Database.ExecuteSqlAsync(
- $$$$"""
-INSERT INTO [Entities] ([Id], [Json])
-VALUES(
-3,
-'{"RootName":"e3","Collection":[{"BranchName":"e3 c1","Nested":{"LeafName":"e3 c1 l"}},{"BranchName":"e3 c2","Nested":{"LeafName":"e3 c2 l"}}],"RequiredReference":{"BranchName":"e3 rr","Nested":{"LeafName":"e3 rr l"}}}')
-""");
-
- // missing required reference
- await ctx.Database.ExecuteSqlAsync(
- $$$$"""
-INSERT INTO [Entities] ([Id], [Json])
-VALUES(
-4,
-'{"RootName":"e4","Collection":[{"BranchName":"e4 c1","Nested":{"LeafName":"e4 c1 l"}},{"BranchName":"e4 c2","Nested":{"LeafName":"e4 c2 l"}}],"OptionalReference":{"BranchName":"e4 or","Nested":{"LeafName":"e4 or l"}}}')
-""");
- }
-
- protected override Task Seed33046(Context33046 ctx)
- => ctx.Database.ExecuteSqlAsync(
- $$"""
-INSERT INTO [Reviews] ([Rounds], [Id])
-VALUES('[{"RoundNumber":11,"SubRounds":[{"SubRoundNumber":111},{"SubRoundNumber":112}]}]', 1)
-""");
-
- protected override Task SeedArrayOfPrimitives(MyContextArrayOfPrimitives ctx)
- {
- var entity1 = new MyEntityArrayOfPrimitives
- {
- Id = 1,
- Reference = new MyJsonEntityArrayOfPrimitives
- {
- IntArray = [1, 2, 3],
- ListOfString =
- [
- "Foo",
- "Bar",
- "Baz"
- ]
- },
- Collection =
- [
- new() { IntArray = [111, 112, 113], ListOfString = ["Foo11", "Bar11"] },
- new() { IntArray = [211, 212, 213], ListOfString = ["Foo12", "Bar12"] }
- ]
- };
-
- var entity2 = new MyEntityArrayOfPrimitives
- {
- Id = 2,
- Reference = new MyJsonEntityArrayOfPrimitives
- {
- IntArray = [10, 20, 30],
- ListOfString =
- [
- "A",
- "B",
- "C"
- ]
- },
- Collection =
- [
- new() { IntArray = [110, 120, 130], ListOfString = ["A1", "Z1"] },
- new() { IntArray = [210, 220, 230], ListOfString = ["A2", "Z2"] }
- ]
- };
-
- ctx.Entities.AddRange(entity1, entity2);
- return ctx.SaveChangesAsync();
- }
-
- protected override Task SeedJunkInJson(MyContextJunkInJson ctx)
- => ctx.Database.ExecuteSqlAsync(
- $$$$"""
-INSERT INTO [Entities] ([Collection], [CollectionWithCtor], [Reference], [ReferenceWithCtor], [Id])
-VALUES(
-'[{"JunkReference":{"Something":"SomeValue" },"Name":"c11","JunkProperty1":50,"Number":11.5,"JunkCollection1":[],"JunkCollection2":[{"Foo":"junk value"}],"NestedCollection":[{"DoB":"2002-04-01T00:00:00","DummyProp":"Dummy value"},{"DoB":"2002-04-02T00:00:00","DummyReference":{"Foo":5}}],"NestedReference":{"DoB":"2002-03-01T00:00:00"}},{"Name":"c12","Number":12.5,"NestedCollection":[{"DoB":"2002-06-01T00:00:00"},{"DoB":"2002-06-02T00:00:00"}],"NestedDummy":59,"NestedReference":{"DoB":"2002-05-01T00:00:00"}}]',
-'[{"MyBool":true,"Name":"c11 ctor","JunkReference":{"Something":"SomeValue","JunkCollection":[{"Foo":"junk value"}]},"NestedCollection":[{"DoB":"2002-08-01T00:00:00"},{"DoB":"2002-08-02T00:00:00"}],"NestedReference":{"DoB":"2002-07-01T00:00:00"}},{"MyBool":false,"Name":"c12 ctor","NestedCollection":[{"DoB":"2002-10-01T00:00:00"},{"DoB":"2002-10-02T00:00:00"}],"JunkCollection":[{"Foo":"junk value"}],"NestedReference":{"DoB":"2002-09-01T00:00:00"}}]',
-'{"Name":"r1","JunkCollection":[{"Foo":"junk value"}],"JunkReference":{"Something":"SomeValue" },"Number":1.5,"NestedCollection":[{"DoB":"2000-02-01T00:00:00","JunkReference":{"Something":"SomeValue"}},{"DoB":"2000-02-02T00:00:00"}],"NestedReference":{"DoB":"2000-01-01T00:00:00"}}',
-'{"MyBool":true,"JunkCollection":[{"Foo":"junk value"}],"Name":"r1 ctor","JunkReference":{"Something":"SomeValue" },"NestedCollection":[{"DoB":"2001-02-01T00:00:00"},{"DoB":"2001-02-02T00:00:00"}],"NestedReference":{"JunkCollection":[{"Foo":"junk value"}],"DoB":"2001-01-01T00:00:00"}}',
-1)
-""");
-
- protected override Task SeedTrickyBuffering(MyContextTrickyBuffering ctx)
- => ctx.Database.ExecuteSqlAsync(
- $$$"""
-INSERT INTO [Entities] ([Reference], [Id])
-VALUES(
-'{"Name": "r1", "Number": 7, "JunkReference":{"Something": "SomeValue" }, "JunkCollection": [{"Foo": "junk value"}], "NestedReference": {"DoB": "2000-01-01T00:00:00"}, "NestedCollection": [{"DoB": "2000-02-01T00:00:00", "JunkReference": {"Something": "SomeValue"}}, {"DoB": "2000-02-02T00:00:00"}]}',1)
-""");
-
- protected override Task SeedShadowProperties(MyContextShadowProperties ctx)
- => ctx.Database.ExecuteSqlAsync(
- $$"""
-INSERT INTO [Entities] ([Collection], [CollectionWithCtor], [Reference], [ReferenceWithCtor], [Id], [Name])
-VALUES(
-'[{"Name":"e1_c1","ShadowDouble":5.5},{"ShadowDouble":20.5,"Name":"e1_c2"}]',
-'[{"Name":"e1_c1 ctor","ShadowNullableByte":6},{"ShadowNullableByte":null,"Name":"e1_c2 ctor"}]',
-'{"Name":"e1_r", "ShadowString":"Foo"}',
-'{"ShadowInt":143,"Name":"e1_r ctor"}',
-1,
-'e1')
-""");
-
- protected override async Task SeedNotICollection(MyContextNotICollection ctx)
- {
- await ctx.Database.ExecuteSqlAsync(
- $$"""
-INSERT INTO [Entities] ([Json], [Id])
-VALUES(
-'{"Collection":[{"Bar":11,"Foo":"c11"},{"Bar":12,"Foo":"c12"},{"Bar":13,"Foo":"c13"}]}',
-1)
-""");
-
- await ctx.Database.ExecuteSqlAsync(
- $$$"""
-INSERT INTO [Entities] ([Json], [Id])
-VALUES(
-'{"Collection":[{"Bar":21,"Foo":"c21"},{"Bar":22,"Foo":"c22"}]}',
-2)
-""");
- }
-
- #region EnumLegacyValues
-
- [ConditionalTheory]
- [MemberData(nameof(IsAsyncData))]
- public virtual async Task Read_enum_property_with_legacy_values(bool async)
- {
- var contextFactory = await InitializeAsync(
- seed: SeedEnumLegacyValues);
-
- using (var context = contextFactory.CreateContext())
- {
- var query = context.Entities.Select(
- x => new
- {
- x.Reference.IntEnum,
- x.Reference.ByteEnum,
- x.Reference.LongEnum,
- x.Reference.NullableEnum
- });
-
- var exception = async
- ? await (Assert.ThrowsAsync(() => query.ToListAsync()))
- : Assert.Throws(() => query.ToList());
-
- // Conversion failed when converting the nvarchar value '...' to data type int
- //Assert.Equal(245, exception.Number);
- }
- }
-
- [ConditionalTheory]
- [MemberData(nameof(IsAsyncData))]
- public virtual async Task Read_json_entity_with_enum_properties_with_legacy_values(bool async)
- {
- var contextFactory = await InitializeAsync(
- seed: SeedEnumLegacyValues,
- shouldLogCategory: c => c == DbLoggerCategory.Query.Name);
-
- using (var context = contextFactory.CreateContext())
- {
- var query = context.Entities.Select(x => x.Reference).AsNoTracking();
-
- var result = async
- ? await query.ToListAsync()
- : query.ToList();
-
- Assert.Equal(1, result.Count);
- Assert.Equal(ByteEnumLegacyValues.Redmond, result[0].ByteEnum);
- Assert.Equal(IntEnumLegacyValues.Foo, result[0].IntEnum);
- Assert.Equal(LongEnumLegacyValues.Three, result[0].LongEnum);
- Assert.Equal(ULongEnumLegacyValues.Three, result[0].ULongEnum);
- Assert.Equal(IntEnumLegacyValues.Bar, result[0].NullableEnum);
- }
-
- var testLogger = new TestLogger();
- Assert.Single(
- ListLoggerFactory.Log.Where(
- l => l.Message == CoreResources.LogStringEnumValueInJson(testLogger).GenerateMessage(nameof(ByteEnumLegacyValues))));
- Assert.Single(
- ListLoggerFactory.Log.Where(
- l => l.Message == CoreResources.LogStringEnumValueInJson(testLogger).GenerateMessage(nameof(IntEnumLegacyValues))));
- Assert.Single(
- ListLoggerFactory.Log.Where(
- l => l.Message == CoreResources.LogStringEnumValueInJson(testLogger).GenerateMessage(nameof(LongEnumLegacyValues))));
- Assert.Single(
- ListLoggerFactory.Log.Where(
- l => l.Message == CoreResources.LogStringEnumValueInJson(testLogger).GenerateMessage(nameof(ULongEnumLegacyValues))));
- }
-
- [ConditionalTheory]
- [MemberData(nameof(IsAsyncData))]
- public virtual async Task Read_json_entity_collection_with_enum_properties_with_legacy_values(bool async)
- {
- var contextFactory = await InitializeAsync(
- seed: SeedEnumLegacyValues,
- shouldLogCategory: c => c == DbLoggerCategory.Query.Name);
-
- using (var context = contextFactory.CreateContext())
- {
- var query = context.Entities.Select(x => x.Collection).AsNoTracking();
-
- var result = async
- ? await query.ToListAsync()
- : query.ToList();
-
- Assert.Equal(1, result.Count);
- Assert.Equal(2, result[0].Count);
- Assert.Equal(ByteEnumLegacyValues.Bellevue, result[0][0].ByteEnum);
- Assert.Equal(IntEnumLegacyValues.Foo, result[0][0].IntEnum);
- Assert.Equal(LongEnumLegacyValues.One, result[0][0].LongEnum);
- Assert.Equal(ULongEnumLegacyValues.One, result[0][0].ULongEnum);
- Assert.Equal(IntEnumLegacyValues.Bar, result[0][0].NullableEnum);
- Assert.Equal(ByteEnumLegacyValues.Seattle, result[0][1].ByteEnum);
- Assert.Equal(IntEnumLegacyValues.Baz, result[0][1].IntEnum);
- Assert.Equal(LongEnumLegacyValues.Two, result[0][1].LongEnum);
- Assert.Equal(ULongEnumLegacyValues.Two, result[0][1].ULongEnum);
- Assert.Null(result[0][1].NullableEnum);
- }
-
- var testLogger = new TestLogger();
- Assert.Single(
- ListLoggerFactory.Log.Where(
- l => l.Message == CoreResources.LogStringEnumValueInJson(testLogger).GenerateMessage(nameof(ByteEnumLegacyValues))));
- Assert.Single(
- ListLoggerFactory.Log.Where(
- l => l.Message == CoreResources.LogStringEnumValueInJson(testLogger).GenerateMessage(nameof(IntEnumLegacyValues))));
- Assert.Single(
- ListLoggerFactory.Log.Where(
- l => l.Message == CoreResources.LogStringEnumValueInJson(testLogger).GenerateMessage(nameof(LongEnumLegacyValues))));
- Assert.Single(
- ListLoggerFactory.Log.Where(
- l => l.Message == CoreResources.LogStringEnumValueInJson(testLogger).GenerateMessage(nameof(ULongEnumLegacyValues))));
- }
-
- private Task SeedEnumLegacyValues(MyContextEnumLegacyValues ctx)
- => ctx.Database.ExecuteSqlAsync(
- $$"""
-INSERT INTO [Entities] ([Collection], [Reference], [Id], [Name])
-VALUES(
-'[{"ByteEnum":"Bellevue","IntEnum":"Foo","LongEnum":"One","ULongEnum":"One","Name":"e1_c1","NullableEnum":"Bar"},{"ByteEnum":"Seattle","IntEnum":"Baz","LongEnum":"Two","ULongEnum":"Two","Name":"e1_c2","NullableEnum":null}]',
-'{"ByteEnum":"Redmond","IntEnum":"Foo","LongEnum":"Three","ULongEnum":"Three","Name":"e1_r","NullableEnum":"Bar"}',
-1,
-'e1')
-""");
-
- private class MyContextEnumLegacyValues(DbContextOptions options) : DbContext((new DbContextOptionsBuilder(options)).ConfigureWarnings(b => b.Log(CoreEventId.StringEnumValueInJson)).Options)
- {
-
- // ReSharper disable once UnusedAutoPropertyAccessor.Local
- public DbSet Entities { get; set; }
-
- protected override void OnModelCreating(ModelBuilder modelBuilder)
- {
- modelBuilder.Entity().Property(x => x.Id).ValueGeneratedNever();
- modelBuilder.Entity().OwnsOne(x => x.Reference, b => b.ToJson());
- modelBuilder.Entity().OwnsMany(x => x.Collection, b => b.ToJson());
- }
- }
-
- private class MyEntityEnumLegacyValues
- {
- public int Id { get; set; }
- public string Name { get; set; }
-
- public MyJsonEntityEnumLegacyValues Reference { get; set; }
- public List Collection { get; set; }
- }
-
- private class MyJsonEntityEnumLegacyValues
- {
- public string Name { get; set; }
-
- // ReSharper disable once UnusedAutoPropertyAccessor.Local
- public IntEnumLegacyValues IntEnum { get; set; }
- // ReSharper disable once UnusedAutoPropertyAccessor.Local
- public ByteEnumLegacyValues ByteEnum { get; set; }
- // ReSharper disable once UnusedAutoPropertyAccessor.Local
- public LongEnumLegacyValues LongEnum { get; set; }
- // ReSharper disable once UnusedAutoPropertyAccessor.Local
- public ULongEnumLegacyValues ULongEnum { get; set; }
- // ReSharper disable once UnusedAutoPropertyAccessor.Local
- public IntEnumLegacyValues? NullableEnum { get; set; }
- }
-
- private enum IntEnumLegacyValues
- {
- Foo = int.MinValue,
- Bar,
- Baz = int.MaxValue,
- }
-
- private enum ByteEnumLegacyValues : byte
- {
- Seattle,
- Redmond,
- Bellevue = 255,
- }
-
- private enum LongEnumLegacyValues : long
- {
- One = long.MinValue,
- Two = 1,
- Three = long.MaxValue,
- }
-
- private enum ULongEnumLegacyValues : ulong
- {
- One = ulong.MinValue,
- Two = 1,
- Three = ulong.MaxValue,
- }
-
- #endregion
}
diff --git a/test/EFCore.Jet.FunctionalTests/Query/AdHocJsonQueryJetTestBase.cs b/test/EFCore.Jet.FunctionalTests/Query/AdHocJsonQueryJetTestBase.cs
new file mode 100644
index 00000000..65441f96
--- /dev/null
+++ b/test/EFCore.Jet.FunctionalTests/Query/AdHocJsonQueryJetTestBase.cs
@@ -0,0 +1,396 @@
+#nullable disable
+using EntityFrameworkCore.Jet.Diagnostics.Internal;
+using EntityFrameworkCore.Jet.FunctionalTests.TestUtilities;
+using Microsoft.EntityFrameworkCore.Diagnostics;
+using Microsoft.EntityFrameworkCore.Diagnostics.Internal;
+using Microsoft.EntityFrameworkCore.TestUtilities;
+using System.Collections.Generic;
+using System.Data.Common;
+using System.Linq;
+using System.Threading.Tasks;
+using Xunit;
+
+namespace Microsoft.EntityFrameworkCore.Query;
+
+public abstract class AdHocJsonQueryJetTestBase : AdHocJsonQueryTestBase
+{
+ protected override ITestStoreFactory TestStoreFactory
+ => JetTestStoreFactory.Instance;
+
+ protected override void ConfigureWarnings(WarningsConfigurationBuilder builder)
+ {
+ base.ConfigureWarnings(builder);
+
+ builder.Log(CoreEventId.StringEnumValueInJson);
+ }
+
+ protected override async Task Seed29219(DbContext ctx)
+ {
+ var entity1 = new MyEntity29219
+ {
+ Id = 1,
+ Reference = new MyJsonEntity29219 { NonNullableScalar = 10, NullableScalar = 11 },
+ Collection =
+ [
+ new() { NonNullableScalar = 100, NullableScalar = 101 },
+ new() { NonNullableScalar = 200, NullableScalar = 201 },
+ new() { NonNullableScalar = 300, NullableScalar = null }
+ ]
+ };
+
+ var entity2 = new MyEntity29219
+ {
+ Id = 2,
+ Reference = new MyJsonEntity29219 { NonNullableScalar = 20, NullableScalar = null },
+ Collection = [new() { NonNullableScalar = 1001, NullableScalar = null }]
+ };
+
+ ctx.AddRange(entity1, entity2);
+ await ctx.SaveChangesAsync();
+
+ await ctx.Database.ExecuteSqlAsync(
+ $$"""
+INSERT INTO [Entities] ([Id], [Reference], [Collection])
+VALUES(3, '{ "NonNullableScalar" : 30 }', '[{ "NonNullableScalar" : 10001 }]')
+""");
+ }
+
+ protected override async Task Seed30028(DbContext ctx)
+ {
+ // complete
+ await ctx.Database.ExecuteSqlAsync(
+ $$$$"""
+INSERT INTO [Entities] ([Id], [Json])
+VALUES(
+1,
+'{"RootName":"e1","Collection":[{"BranchName":"e1 c1","Nested":{"LeafName":"e1 c1 l"}},{"BranchName":"e1 c2","Nested":{"LeafName":"e1 c2 l"}}],"OptionalReference":{"BranchName":"e1 or","Nested":{"LeafName":"e1 or l"}},"RequiredReference":{"BranchName":"e1 rr","Nested":{"LeafName":"e1 rr l"}}}')
+""");
+
+ // missing collection
+ await ctx.Database.ExecuteSqlAsync(
+ $$$$"""
+INSERT INTO [Entities] ([Id], [Json])
+VALUES(
+2,
+'{"RootName":"e2","OptionalReference":{"BranchName":"e2 or","Nested":{"LeafName":"e2 or l"}},"RequiredReference":{"BranchName":"e2 rr","Nested":{"LeafName":"e2 rr l"}}}')
+""");
+
+ // missing optional reference
+ await ctx.Database.ExecuteSqlAsync(
+ $$$$"""
+INSERT INTO [Entities] ([Id], [Json])
+VALUES(
+3,
+'{"RootName":"e3","Collection":[{"BranchName":"e3 c1","Nested":{"LeafName":"e3 c1 l"}},{"BranchName":"e3 c2","Nested":{"LeafName":"e3 c2 l"}}],"RequiredReference":{"BranchName":"e3 rr","Nested":{"LeafName":"e3 rr l"}}}')
+""");
+
+ // missing required reference
+ await ctx.Database.ExecuteSqlAsync(
+ $$$$"""
+INSERT INTO [Entities] ([Id], [Json])
+VALUES(
+4,
+'{"RootName":"e4","Collection":[{"BranchName":"e4 c1","Nested":{"LeafName":"e4 c1 l"}},{"BranchName":"e4 c2","Nested":{"LeafName":"e4 c2 l"}}],"OptionalReference":{"BranchName":"e4 or","Nested":{"LeafName":"e4 or l"}}}')
+""");
+ }
+
+ protected override Task Seed33046(DbContext ctx)
+ => ctx.Database.ExecuteSqlAsync(
+ $$"""
+INSERT INTO [Reviews] ([Rounds], [Id])
+VALUES('[{"RoundNumber":11,"SubRounds":[{"SubRoundNumber":111},{"SubRoundNumber":112}]}]', 1)
+""");
+
+ protected override Task SeedArrayOfPrimitives(DbContext ctx)
+ {
+ var entity1 = new MyEntityArrayOfPrimitives
+ {
+ Id = 1,
+ Reference = new MyJsonEntityArrayOfPrimitives
+ {
+ IntArray = [1, 2, 3],
+ ListOfString =
+ [
+ "Foo",
+ "Bar",
+ "Baz"
+ ]
+ },
+ Collection =
+ [
+ new() { IntArray = [111, 112, 113], ListOfString = ["Foo11", "Bar11"] },
+ new() { IntArray = [211, 212, 213], ListOfString = ["Foo12", "Bar12"] }
+ ]
+ };
+
+ var entity2 = new MyEntityArrayOfPrimitives
+ {
+ Id = 2,
+ Reference = new MyJsonEntityArrayOfPrimitives
+ {
+ IntArray = [10, 20, 30],
+ ListOfString =
+ [
+ "A",
+ "B",
+ "C"
+ ]
+ },
+ Collection =
+ [
+ new() { IntArray = [110, 120, 130], ListOfString = ["A1", "Z1"] },
+ new() { IntArray = [210, 220, 230], ListOfString = ["A2", "Z2"] }
+ ]
+ };
+
+ ctx.AddRange(entity1, entity2);
+ return ctx.SaveChangesAsync();
+ }
+
+ protected override Task SeedJunkInJson(DbContext ctx)
+ => ctx.Database.ExecuteSqlAsync(
+ $$$$"""
+INSERT INTO [Entities] ([Collection], [CollectionWithCtor], [Reference], [ReferenceWithCtor], [Id])
+VALUES(
+'[{"JunkReference":{"Something":"SomeValue" },"Name":"c11","JunkProperty1":50,"Number":11.5,"JunkCollection1":[],"JunkCollection2":[{"Foo":"junk value"}],"NestedCollection":[{"DoB":"2002-04-01T00:00:00","DummyProp":"Dummy value"},{"DoB":"2002-04-02T00:00:00","DummyReference":{"Foo":5}}],"NestedReference":{"DoB":"2002-03-01T00:00:00"}},{"Name":"c12","Number":12.5,"NestedCollection":[{"DoB":"2002-06-01T00:00:00"},{"DoB":"2002-06-02T00:00:00"}],"NestedDummy":59,"NestedReference":{"DoB":"2002-05-01T00:00:00"}}]',
+'[{"MyBool":true,"Name":"c11 ctor","JunkReference":{"Something":"SomeValue","JunkCollection":[{"Foo":"junk value"}]},"NestedCollection":[{"DoB":"2002-08-01T00:00:00"},{"DoB":"2002-08-02T00:00:00"}],"NestedReference":{"DoB":"2002-07-01T00:00:00"}},{"MyBool":false,"Name":"c12 ctor","NestedCollection":[{"DoB":"2002-10-01T00:00:00"},{"DoB":"2002-10-02T00:00:00"}],"JunkCollection":[{"Foo":"junk value"}],"NestedReference":{"DoB":"2002-09-01T00:00:00"}}]',
+'{"Name":"r1","JunkCollection":[{"Foo":"junk value"}],"JunkReference":{"Something":"SomeValue" },"Number":1.5,"NestedCollection":[{"DoB":"2000-02-01T00:00:00","JunkReference":{"Something":"SomeValue"}},{"DoB":"2000-02-02T00:00:00"}],"NestedReference":{"DoB":"2000-01-01T00:00:00"}}',
+'{"MyBool":true,"JunkCollection":[{"Foo":"junk value"}],"Name":"r1 ctor","JunkReference":{"Something":"SomeValue" },"NestedCollection":[{"DoB":"2001-02-01T00:00:00"},{"DoB":"2001-02-02T00:00:00"}],"NestedReference":{"JunkCollection":[{"Foo":"junk value"}],"DoB":"2001-01-01T00:00:00"}}',
+1)
+""");
+
+ protected override Task SeedTrickyBuffering(DbContext ctx)
+ => ctx.Database.ExecuteSqlAsync(
+ $$$"""
+INSERT INTO [Entities] ([Reference], [Id])
+VALUES(
+'{"Name": "r1", "Number": 7, "JunkReference":{"Something": "SomeValue" }, "JunkCollection": [{"Foo": "junk value"}], "NestedReference": {"DoB": "2000-01-01T00:00:00"}, "NestedCollection": [{"DoB": "2000-02-01T00:00:00", "JunkReference": {"Something": "SomeValue"}}, {"DoB": "2000-02-02T00:00:00"}]}',1)
+""");
+
+ protected override Task SeedShadowProperties(DbContext ctx)
+ => ctx.Database.ExecuteSqlAsync(
+ $$"""
+INSERT INTO [Entities] ([Collection], [CollectionWithCtor], [Reference], [ReferenceWithCtor], [Id], [Name])
+VALUES(
+'[{"Name":"e1_c1","ShadowDouble":5.5},{"ShadowDouble":20.5,"Name":"e1_c2"}]',
+'[{"Name":"e1_c1 ctor","ShadowNullableByte":6},{"ShadowNullableByte":null,"Name":"e1_c2 ctor"}]',
+'{"Name":"e1_r", "ShadowString":"Foo"}',
+'{"ShadowInt":143,"Name":"e1_r ctor"}',
+1,
+'e1')
+""");
+
+ protected override async Task SeedNotICollection(DbContext ctx)
+ {
+ await ctx.Database.ExecuteSqlAsync(
+ $$"""
+INSERT INTO [Entities] ([Json], [Id])
+VALUES(
+'{"Collection":[{"Bar":11,"Foo":"c11"},{"Bar":12,"Foo":"c12"},{"Bar":13,"Foo":"c13"}]}',
+1)
+""");
+
+ await ctx.Database.ExecuteSqlAsync(
+ $$$"""
+INSERT INTO [Entities] ([Json], [Id])
+VALUES(
+'{"Collection":[{"Bar":21,"Foo":"c21"},{"Bar":22,"Foo":"c22"}]}',
+2)
+""");
+ }
+
+ #region EnumLegacyValues
+
+ [ConditionalTheory]
+ [MemberData(nameof(IsAsyncData))]
+ public virtual async Task Read_enum_property_with_legacy_values(bool async)
+ {
+ var contextFactory = await InitializeAsync(
+ onModelCreating: BuildModelEnumLegacyValues,
+ onConfiguring: b => b.ConfigureWarnings(ConfigureWarnings),
+ seed: SeedEnumLegacyValues);
+
+ using (var context = contextFactory.CreateContext())
+ {
+ var query = context.Set().Select(
+ x => new
+ {
+ x.Reference.IntEnum,
+ x.Reference.ByteEnum,
+ x.Reference.LongEnum,
+ x.Reference.NullableEnum
+ });
+
+ var exception = async
+ ? await (Assert.ThrowsAsync(() => query.ToListAsync()))
+ : Assert.Throws(() => query.ToList());
+
+ // Conversion failed when converting the nvarchar value '...' to data type int
+ //Assert.Equal(245, exception.Number);
+ }
+ }
+
+ [ConditionalTheory]
+ [MemberData(nameof(IsAsyncData))]
+ public virtual async Task Read_json_entity_with_enum_properties_with_legacy_values(bool async)
+ {
+ var contextFactory = await InitializeAsync(
+ onModelCreating: BuildModelEnumLegacyValues,
+ onConfiguring: b => b.ConfigureWarnings(ConfigureWarnings),
+ seed: SeedEnumLegacyValues,
+ shouldLogCategory: c => c == DbLoggerCategory.Query.Name);
+
+ using (var context = contextFactory.CreateContext())
+ {
+ var query = context.Set().Select(x => x.Reference).AsNoTracking();
+
+ var result = async
+ ? await query.ToListAsync()
+ : query.ToList();
+
+ Assert.Equal(1, result.Count);
+ Assert.Equal(ByteEnumLegacyValues.Redmond, result[0].ByteEnum);
+ Assert.Equal(IntEnumLegacyValues.Foo, result[0].IntEnum);
+ Assert.Equal(LongEnumLegacyValues.Three, result[0].LongEnum);
+ Assert.Equal(ULongEnumLegacyValues.Three, result[0].ULongEnum);
+ Assert.Equal(IntEnumLegacyValues.Bar, result[0].NullableEnum);
+ }
+
+ var testLogger = new TestLogger();
+ Assert.Single(
+ ListLoggerFactory.Log.Where(
+ l => l.Message == CoreResources.LogStringEnumValueInJson(testLogger).GenerateMessage(nameof(ByteEnumLegacyValues))));
+ Assert.Single(
+ ListLoggerFactory.Log.Where(
+ l => l.Message == CoreResources.LogStringEnumValueInJson(testLogger).GenerateMessage(nameof(IntEnumLegacyValues))));
+ Assert.Single(
+ ListLoggerFactory.Log.Where(
+ l => l.Message == CoreResources.LogStringEnumValueInJson(testLogger).GenerateMessage(nameof(LongEnumLegacyValues))));
+ Assert.Single(
+ ListLoggerFactory.Log.Where(
+ l => l.Message == CoreResources.LogStringEnumValueInJson(testLogger).GenerateMessage(nameof(ULongEnumLegacyValues))));
+ }
+
+ [ConditionalTheory]
+ [MemberData(nameof(IsAsyncData))]
+ public virtual async Task Read_json_entity_collection_with_enum_properties_with_legacy_values(bool async)
+ {
+ var contextFactory = await InitializeAsync(
+ onModelCreating: BuildModelEnumLegacyValues,
+ onConfiguring: b => b.ConfigureWarnings(ConfigureWarnings),
+ seed: SeedEnumLegacyValues,
+ shouldLogCategory: c => c == DbLoggerCategory.Query.Name);
+
+ using (var context = contextFactory.CreateContext())
+ {
+ var query = context.Set().Select(x => x.Collection).AsNoTracking();
+
+ var result = async
+ ? await query.ToListAsync()
+ : query.ToList();
+
+ Assert.Equal(1, result.Count);
+ Assert.Equal(2, result[0].Count);
+ Assert.Equal(ByteEnumLegacyValues.Bellevue, result[0][0].ByteEnum);
+ Assert.Equal(IntEnumLegacyValues.Foo, result[0][0].IntEnum);
+ Assert.Equal(LongEnumLegacyValues.One, result[0][0].LongEnum);
+ Assert.Equal(ULongEnumLegacyValues.One, result[0][0].ULongEnum);
+ Assert.Equal(IntEnumLegacyValues.Bar, result[0][0].NullableEnum);
+ Assert.Equal(ByteEnumLegacyValues.Seattle, result[0][1].ByteEnum);
+ Assert.Equal(IntEnumLegacyValues.Baz, result[0][1].IntEnum);
+ Assert.Equal(LongEnumLegacyValues.Two, result[0][1].LongEnum);
+ Assert.Equal(ULongEnumLegacyValues.Two, result[0][1].ULongEnum);
+ Assert.Null(result[0][1].NullableEnum);
+ }
+
+ var testLogger = new TestLogger();
+ Assert.Single(
+ ListLoggerFactory.Log.Where(
+ l => l.Message == CoreResources.LogStringEnumValueInJson(testLogger).GenerateMessage(nameof(ByteEnumLegacyValues))));
+ Assert.Single(
+ ListLoggerFactory.Log.Where(
+ l => l.Message == CoreResources.LogStringEnumValueInJson(testLogger).GenerateMessage(nameof(IntEnumLegacyValues))));
+ Assert.Single(
+ ListLoggerFactory.Log.Where(
+ l => l.Message == CoreResources.LogStringEnumValueInJson(testLogger).GenerateMessage(nameof(LongEnumLegacyValues))));
+ Assert.Single(
+ ListLoggerFactory.Log.Where(
+ l => l.Message == CoreResources.LogStringEnumValueInJson(testLogger).GenerateMessage(nameof(ULongEnumLegacyValues))));
+ }
+
+ private Task SeedEnumLegacyValues(DbContext ctx)
+ => ctx.Database.ExecuteSqlAsync(
+ $$"""
+INSERT INTO [Entities] ([Collection], [Reference], [Id], [Name])
+VALUES(
+'[{"ByteEnum":"Bellevue","IntEnum":"Foo","LongEnum":"One","ULongEnum":"One","Name":"e1_c1","NullableEnum":"Bar"},{"ByteEnum":"Seattle","IntEnum":"Baz","LongEnum":"Two","ULongEnum":"Two","Name":"e1_c2","NullableEnum":null}]',
+'{"ByteEnum":"Redmond","IntEnum":"Foo","LongEnum":"Three","ULongEnum":"Three","Name":"e1_r","NullableEnum":"Bar"}',
+1,
+'e1')
+""");
+
+ protected virtual void BuildModelEnumLegacyValues(ModelBuilder modelBuilder)
+ => modelBuilder.Entity(
+ b =>
+ {
+ b.ToTable("Entities");
+ b.Property(x => x.Id).ValueGeneratedNever();
+ b.OwnsOne(x => x.Reference, b => b.ToJson().HasColumnType(JsonColumnType));
+ b.OwnsMany(x => x.Collection, b => b.ToJson().HasColumnType(JsonColumnType));
+ });
+
+ private class MyEntityEnumLegacyValues
+ {
+ public int Id { get; set; }
+ public string Name { get; set; }
+
+ public MyJsonEntityEnumLegacyValues Reference { get; set; }
+ public List Collection { get; set; }
+ }
+
+ private class MyJsonEntityEnumLegacyValues
+ {
+ public string Name { get; set; }
+
+ // ReSharper disable once UnusedAutoPropertyAccessor.Local
+ public IntEnumLegacyValues IntEnum { get; set; }
+ // ReSharper disable once UnusedAutoPropertyAccessor.Local
+ public ByteEnumLegacyValues ByteEnum { get; set; }
+ // ReSharper disable once UnusedAutoPropertyAccessor.Local
+ public LongEnumLegacyValues LongEnum { get; set; }
+ // ReSharper disable once UnusedAutoPropertyAccessor.Local
+ public ULongEnumLegacyValues ULongEnum { get; set; }
+ // ReSharper disable once UnusedAutoPropertyAccessor.Local
+ public IntEnumLegacyValues? NullableEnum { get; set; }
+ }
+
+ private enum IntEnumLegacyValues
+ {
+ Foo = int.MinValue,
+ Bar,
+ Baz = int.MaxValue,
+ }
+
+ private enum ByteEnumLegacyValues : byte
+ {
+ Seattle,
+ Redmond,
+ Bellevue = 255,
+ }
+
+ private enum LongEnumLegacyValues : long
+ {
+ One = long.MinValue,
+ Two = 1,
+ Three = long.MaxValue,
+ }
+
+ private enum ULongEnumLegacyValues : ulong
+ {
+ One = ulong.MinValue,
+ Two = 1,
+ Three = ulong.MaxValue,
+ }
+
+ #endregion
+}
diff --git a/test/EFCore.Jet.FunctionalTests/Query/ComplexNavigationsQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/ComplexNavigationsQueryJetTest.cs
index 2c5a2a13..cb84080c 100644
--- a/test/EFCore.Jet.FunctionalTests/Query/ComplexNavigationsQueryJetTest.cs
+++ b/test/EFCore.Jet.FunctionalTests/Query/ComplexNavigationsQueryJetTest.cs
@@ -1936,12 +1936,12 @@ public override async Task Contains_with_subquery_optional_navigation_scalar_dis
await base.Contains_with_subquery_optional_navigation_scalar_distinct_and_constant_item(async);
AssertSql(
- """
+"""
SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`
FROM `LevelOne` AS `l`
LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`
WHERE 5 IN (
- SELECT DISTINCT IIF(LEN(`l1`.`Name`) IS NULL, NULL, CLNG(LEN(`l1`.`Name`)))
+ SELECT IIF(LEN(`l1`.`Name`) IS NULL, NULL, CLNG(LEN(`l1`.`Name`)))
FROM `LevelThree` AS `l1`
WHERE `l0`.`Id` IS NOT NULL AND `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id`
)
diff --git a/test/EFCore.Jet.FunctionalTests/Query/DbFunctionsJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/DbFunctionsJetTest.cs
index 0ae221ad..201b97bc 100644
--- a/test/EFCore.Jet.FunctionalTests/Query/DbFunctionsJetTest.cs
+++ b/test/EFCore.Jet.FunctionalTests/Query/DbFunctionsJetTest.cs
@@ -126,53 +126,29 @@ FROM [Customers] AS [c]
""");
}
- public override async Task Least(bool async)
+ public override async Task Collate_is_null(bool async)
{
- await base.Least(async);
+ await base.Collate_is_null(async);
AssertSql(
"""
-SELECT [o].[OrderID], [o].[ProductID], [o].[Discount], [o].[Quantity], [o].[UnitPrice]
-FROM [Order Details] AS [o]
-WHERE LEAST([o].[OrderID], 10251) = 10251
+SELECT COUNT(*)
+FROM `Customers` AS `c`
+WHERE `c`.`Region` IS NULL
""");
}
- public override async Task Greatest(bool async)
- {
- await base.Greatest(async);
+ public override Task Least(bool async)
+ => AssertTranslationFailed(() => base.Least(async));
- AssertSql(
- """
-SELECT [o].[OrderID], [o].[ProductID], [o].[Discount], [o].[Quantity], [o].[UnitPrice]
-FROM [Order Details] AS [o]
-WHERE GREATEST([o].[OrderID], 10251) = 10251
-""");
- }
+ public override Task Greatest(bool async)
+ => AssertTranslationFailed(() => base.Greatest(async));
- public override async Task Least_with_nullable_value_type(bool async)
- {
- await base.Least_with_nullable_value_type(async);
+ public override Task Least_with_nullable_value_type(bool async)
+ => AssertTranslationFailed(() => base.Least_with_nullable_value_type(async));
- AssertSql(
- """
-SELECT [o].[OrderID], [o].[ProductID], [o].[Discount], [o].[Quantity], [o].[UnitPrice]
-FROM [Order Details] AS [o]
-WHERE LEAST([o].[OrderID], 10251) = 10251
-""");
- }
-
- public override async Task Greatest_with_nullable_value_type(bool async)
- {
- await base.Greatest_with_nullable_value_type(async);
-
- AssertSql(
- """
-SELECT [o].[OrderID], [o].[ProductID], [o].[Discount], [o].[Quantity], [o].[UnitPrice]
-FROM [Order Details] AS [o]
-WHERE GREATEST([o].[OrderID], 10251) = 10251
-""");
- }
+ public override Task Greatest_with_nullable_value_type(bool async)
+ => AssertTranslationFailed(() => base.Greatest_with_nullable_value_type(async));
public override async Task Least_with_parameter_array_is_not_supported(bool async)
{
diff --git a/test/EFCore.Jet.FunctionalTests/Query/GearsOfWarQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/GearsOfWarQueryJetTest.cs
index a92171f2..d311f507 100644
--- a/test/EFCore.Jet.FunctionalTests/Query/GearsOfWarQueryJetTest.cs
+++ b/test/EFCore.Jet.FunctionalTests/Query/GearsOfWarQueryJetTest.cs
@@ -7483,7 +7483,7 @@ public override async Task Conditional_expression_with_test_being_simplified_to_
await base.Conditional_expression_with_test_being_simplified_to_constant_complex(isAsync);
AssertSql(
- """
+"""
@__prm_0='True'
@__prm2_1='Marcus' Lancer' (Size = 255)
@@ -7492,10 +7492,7 @@ public override async Task Conditional_expression_with_test_being_simplified_to_
WHERE IIF(`g`.`HasSoulPatch` = @__prm_0 AND (
SELECT TOP 1 `w`.`Name`
FROM `Weapons` AS `w`
- WHERE `w`.`Id` = `g`.`SquadId`) = @__prm2_1 AND (
- SELECT TOP 1 `w`.`Name`
- FROM `Weapons` AS `w`
- WHERE `w`.`Id` = `g`.`SquadId`) IS NOT NULL, TRUE, FALSE) = TRUE
+ WHERE `w`.`Id` = `g`.`SquadId`) = @__prm2_1, TRUE, FALSE) = TRUE
""");
}
diff --git a/test/EFCore.Jet.FunctionalTests/Query/NorthwindAggregateOperatorsQueryJetTest.ResultOperators.cs b/test/EFCore.Jet.FunctionalTests/Query/NorthwindAggregateOperatorsQueryJetTest.ResultOperators.cs
index 678b453e..3a436392 100644
--- a/test/EFCore.Jet.FunctionalTests/Query/NorthwindAggregateOperatorsQueryJetTest.ResultOperators.cs
+++ b/test/EFCore.Jet.FunctionalTests/Query/NorthwindAggregateOperatorsQueryJetTest.ResultOperators.cs
@@ -690,9 +690,9 @@ public override async Task Sum_with_coalesce(bool isAsync)
WHERE `p`.`ProductID` < 40");
}
- public override async Task Sum_over_subquery_is_client_eval(bool isAsync)
+ public override async Task Sum_over_subquery(bool isAsync)
{
- await base.Sum_over_subquery_is_client_eval(isAsync);
+ await base.Sum_over_subquery(isAsync);
AssertSql(
"""
@@ -707,9 +707,9 @@ SELECT IIF(SUM(`o`.`OrderID`) IS NULL, 0, SUM(`o`.`OrderID`))
""");
}
- public override async Task Sum_over_nested_subquery_is_client_eval(bool isAsync)
+ public override async Task Sum_over_nested_subquery(bool isAsync)
{
- await base.Sum_over_nested_subquery_is_client_eval(isAsync);
+ await base.Sum_over_nested_subquery(isAsync);
AssertSql(
"""
SELECT IIF(SUM((
@@ -735,9 +735,9 @@ SELECT IIF(SUM(`o0`.`ProductID`) IS NULL, 0, SUM(`o0`.`ProductID`))
""");
}
- public override async Task Sum_over_min_subquery_is_client_eval(bool isAsync)
+ public override async Task Sum_over_min_subquery(bool isAsync)
{
- await base.Sum_over_min_subquery_is_client_eval(isAsync);
+ await base.Sum_over_min_subquery(isAsync);
AssertSql(
"""
SELECT IIF(SUM((
@@ -763,6 +763,63 @@ SELECT MIN(`o0`.`ProductID`)
""");
}
+ public override async Task Sum_over_scalar_returning_subquery(bool async)
+ {
+ await base.Sum_over_scalar_returning_subquery(async);
+
+ AssertSql(
+ """
+SELECT IIF(SUM((
+ SELECT TOP 1 `o`.`OrderID`
+ FROM `Orders` AS `o`
+ WHERE `c`.`CustomerID` = `o`.`CustomerID`)) IS NULL, 0, SUM((
+ SELECT TOP 1 `o`.`OrderID`
+ FROM `Orders` AS `o`
+ WHERE `c`.`CustomerID` = `o`.`CustomerID`)))
+FROM `Customers` AS `c`
+""");
+ }
+
+ public override async Task Sum_over_Any_subquery(bool async)
+ {
+ await base.Sum_over_Any_subquery(async);
+
+ AssertSql(
+ """
+SELECT IIF(SUM(IIF(EXISTS (
+ SELECT 1
+ FROM `Orders` AS `o`
+ WHERE `c`.`CustomerID` = `o`.`CustomerID`), (
+ SELECT TOP 1 `o0`.`OrderID`
+ FROM `Orders` AS `o0`
+ WHERE `c`.`CustomerID` = `o0`.`CustomerID`), 0)) IS NULL, 0, SUM(IIF(EXISTS (
+ SELECT 1
+ FROM `Orders` AS `o`
+ WHERE `c`.`CustomerID` = `o`.`CustomerID`), (
+ SELECT TOP 1 `o0`.`OrderID`
+ FROM `Orders` AS `o0`
+ WHERE `c`.`CustomerID` = `o0`.`CustomerID`), 0)))
+FROM `Customers` AS `c`
+""");
+ }
+
+ public override async Task Sum_over_uncorrelated_subquery(bool async)
+ {
+ await base.Sum_over_uncorrelated_subquery(async);
+
+ AssertSql(
+ """
+SELECT IIF(SUM((
+ SELECT COUNT(*)
+ FROM `Orders` AS `o`
+ WHERE `o`.`OrderID` > 10300)) IS NULL, 0, SUM((
+ SELECT COUNT(*)
+ FROM `Orders` AS `o`
+ WHERE `o`.`OrderID` > 10300)))
+FROM `Customers` AS `c`
+""");
+ }
+
public override async Task Sum_on_float_column(bool isAsync)
{
await base.Sum_on_float_column(isAsync);
@@ -850,9 +907,9 @@ public override async Task Average_with_coalesce(bool isAsync)
WHERE `p`.`ProductID` < 40");
}
- public override async Task Average_over_subquery_is_client_eval(bool isAsync)
+ public override async Task Average_over_subquery(bool isAsync)
{
- await base.Average_over_subquery_is_client_eval(isAsync);
+ await base.Average_over_subquery(isAsync);
AssertSql(
"""
@@ -867,9 +924,9 @@ SELECT IIF(SUM(`o`.`OrderID`) IS NULL, 0, SUM(`o`.`OrderID`))
""");
}
- public override async Task Average_over_nested_subquery_is_client_eval(bool isAsync)
+ public override async Task Average_over_nested_subquery(bool isAsync)
{
- await base.Average_over_nested_subquery_is_client_eval(isAsync);
+ await base.Average_over_nested_subquery(isAsync);
AssertSql(
$@"{AssertSqlHelper.Declaration("@__p_0='3'")}
@@ -878,9 +935,9 @@ public override async Task Average_over_nested_subquery_is_client_eval(bool isAs
ORDER BY `c`.`CustomerID`");
}
- public override async Task Average_over_max_subquery_is_client_eval(bool isAsync)
+ public override async Task Average_over_max_subquery(bool isAsync)
{
- await base.Average_over_max_subquery_is_client_eval(isAsync);
+ await base.Average_over_max_subquery(isAsync);
AssertSql(
$@"{AssertSqlHelper.Declaration("@__p_0='3'")}
@@ -953,9 +1010,9 @@ public override async Task Min_with_coalesce(bool isAsync)
WHERE `p`.`ProductID` < 40");
}
- public override async Task Min_over_subquery_is_client_eval(bool isAsync)
+ public override async Task Min_over_subquery(bool isAsync)
{
- await base.Min_over_subquery_is_client_eval(isAsync);
+ await base.Min_over_subquery(isAsync);
AssertSql(
"""
@@ -967,9 +1024,9 @@ SELECT IIF(SUM(`o`.`OrderID`) IS NULL, 0, SUM(`o`.`OrderID`))
""");
}
- public override async Task Min_over_nested_subquery_is_client_eval(bool isAsync)
+ public override async Task Min_over_nested_subquery(bool isAsync)
{
- await base.Min_over_nested_subquery_is_client_eval(isAsync);
+ await base.Min_over_nested_subquery(isAsync);
AssertSql(
"""
@@ -988,9 +1045,9 @@ ORDER BY `c`.`CustomerID`
""");
}
- public override async Task Min_over_max_subquery_is_client_eval(bool isAsync)
+ public override async Task Min_over_max_subquery(bool isAsync)
{
- await base.Min_over_max_subquery_is_client_eval(isAsync);
+ await base.Min_over_max_subquery(isAsync);
AssertSql(
"""
@@ -1037,9 +1094,9 @@ public override async Task Max_with_coalesce(bool isAsync)
WHERE `p`.`ProductID` < 40");
}
- public override async Task Max_over_subquery_is_client_eval(bool isAsync)
+ public override async Task Max_over_subquery(bool isAsync)
{
- await base.Max_over_subquery_is_client_eval(isAsync);
+ await base.Max_over_subquery(isAsync);
AssertSql(
"""
@@ -1051,9 +1108,9 @@ SELECT IIF(SUM(`o`.`OrderID`) IS NULL, 0, SUM(`o`.`OrderID`))
""");
}
- public override async Task Max_over_nested_subquery_is_client_eval(bool isAsync)
+ public override async Task Max_over_nested_subquery(bool isAsync)
{
- await base.Max_over_nested_subquery_is_client_eval(isAsync);
+ await base.Max_over_nested_subquery(isAsync);
AssertSql(
"""
@@ -1072,9 +1129,9 @@ ORDER BY `c`.`CustomerID`
""");
}
- public override async Task Max_over_sum_subquery_is_client_eval(bool isAsync)
+ public override async Task Max_over_sum_subquery(bool isAsync)
{
- await base.Max_over_sum_subquery_is_client_eval(isAsync);
+ await base.Max_over_sum_subquery(isAsync);
AssertSql(
"""
diff --git a/test/EFCore.Jet.FunctionalTests/Query/NorthwindMiscellaneousQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/NorthwindMiscellaneousQueryJetTest.cs
index 4875b0b7..3140e68f 100644
--- a/test/EFCore.Jet.FunctionalTests/Query/NorthwindMiscellaneousQueryJetTest.cs
+++ b/test/EFCore.Jet.FunctionalTests/Query/NorthwindMiscellaneousQueryJetTest.cs
@@ -1516,6 +1516,57 @@ SELECT 1
WHERE `c`.`CustomerID` = `o`.`CustomerID` AND `o`.`EmployeeID` = 1)");
}
+ public override async Task Any_on_distinct(bool async)
+ {
+ await base.Any_on_distinct(async);
+
+ 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 EXISTS (
+ SELECT 1
+ FROM `Orders` AS `o`
+ WHERE `c`.`CustomerID` = `o`.`CustomerID` AND (`o`.`EmployeeID` <> 1 OR `o`.`EmployeeID` IS NULL))
+""");
+ }
+
+ public override async Task Contains_on_distinct(bool async)
+ {
+ await base.Contains_on_distinct(async);
+
+ 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 1 IN (
+ SELECT `o`.`EmployeeID`
+ FROM `Orders` AS `o`
+ WHERE `c`.`CustomerID` = `o`.`CustomerID`
+)
+""");
+ }
+
+ public override async Task All_on_distinct(bool async)
+ {
+ await base.All_on_distinct(async);
+
+ 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 IIF(IIF(1 IN (
+ SELECT `o`.`EmployeeID`
+ FROM `Orders` AS `o`
+ WHERE `c`.`CustomerID` = `o`.`CustomerID`
+ ), TRUE, FALSE) IS NULL, FALSE, IIF(1 IN (
+ SELECT `o`.`EmployeeID`
+ FROM `Orders` AS `o`
+ WHERE `c`.`CustomerID` = `o`.`CustomerID`
+ ), TRUE, FALSE)) = FALSE
+""");
+ }
+
public override async Task All_top_level(bool isAsync)
{
await base.All_top_level(isAsync);
@@ -3808,7 +3859,7 @@ 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 `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` = 'ALFKI' AND EXISTS (
@@ -3818,7 +3869,7 @@ WHERE EXISTS (
SELECT 1
FROM `Customers` AS `c1`
WHERE EXISTS (
- SELECT DISTINCT 1
+ SELECT 1
FROM (
SELECT TOP 10 1
FROM `Customers` AS `c2`
@@ -6977,6 +7028,46 @@ public override async Task Static_member_access_gets_parameterized_within_larger
""");
}
+ public override async Task Select_Order(bool async)
+ {
+ await base.Select_Order(async);
+
+ AssertSql(
+ """
+SELECT `c`.`CustomerID`
+FROM `Customers` AS `c`
+ORDER BY `c`.`CustomerID`
+""");
+ }
+
+ public override async Task Select_OrderDescending(bool async)
+ {
+ await base.Select_OrderDescending(async);
+
+ AssertSql(
+ """
+SELECT `c`.`CustomerID`
+FROM `Customers` AS `c`
+ORDER BY `c`.`CustomerID` DESC
+""");
+ }
+
+ public override async Task Where_Order_First(bool async)
+ {
+ await base.Where_Order_First(async);
+
+ AssertSql(
+ """
+SELECT `c`.`CustomerID`
+FROM `Customers` AS `c`
+WHERE (
+ SELECT TOP 1 `o`.`OrderID`
+ FROM `Orders` AS `o`
+ WHERE `c`.`CustomerID` = `o`.`CustomerID`
+ ORDER BY `o`.`OrderID`) = 10248
+""");
+ }
+
private void AssertSql(params string[] expected)
=> Fixture.TestSqlLoggerFactory.AssertBaseline(expected.Select(s => s.Trim()).ToArray());
diff --git a/test/EFCore.Jet.FunctionalTests/Query/NorthwindSetOperationsQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/NorthwindSetOperationsQueryJetTest.cs
index 0865704c..40d7e17b 100644
--- a/test/EFCore.Jet.FunctionalTests/Query/NorthwindSetOperationsQueryJetTest.cs
+++ b/test/EFCore.Jet.FunctionalTests/Query/NorthwindSetOperationsQueryJetTest.cs
@@ -1350,6 +1350,54 @@ public override async Task Collection_projection_before_set_operation_fails(bool
AssertSql();
}
+ public override async Task Intersect_on_distinct(bool async)
+ {
+ await base.Intersect_on_distinct(async);
+
+ AssertSql(
+ """
+SELECT [c].[CompanyName]
+FROM [Customers] AS [c]
+WHERE [c].[City] = N'México D.F.'
+INTERSECT
+SELECT [c0].[CompanyName]
+FROM [Customers] AS [c0]
+WHERE [c0].[ContactTitle] = N'Owner'
+""");
+ }
+
+ public override async Task Union_on_distinct(bool async)
+ {
+ await base.Union_on_distinct(async);
+
+ AssertSql(
+ """
+SELECT `c`.`CompanyName`
+FROM `Customers` AS `c`
+WHERE `c`.`City` = 'México D.F.'
+UNION
+SELECT `c0`.`CompanyName`
+FROM `Customers` AS `c0`
+WHERE `c0`.`ContactTitle` = 'Owner'
+""");
+ }
+
+ public override async Task Except_on_distinct(bool async)
+ {
+ await base.Except_on_distinct(async);
+
+ AssertSql(
+ """
+SELECT [c].[CompanyName]
+FROM [Customers] AS [c]
+WHERE [c].[City] = N'México D.F.'
+EXCEPT
+SELECT [c0].[CompanyName]
+FROM [Customers] AS [c0]
+WHERE [c0].[ContactTitle] = N'Owner'
+""");
+ }
+
public override async Task Include_Union_only_on_one_side_throws(bool async)
{
await base.Include_Union_only_on_one_side_throws(async);
diff --git a/test/EFCore.Jet.FunctionalTests/Query/NullSemanticsQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/NullSemanticsQueryJetTest.cs
index 94b6b545..cbb7b5ee 100644
--- a/test/EFCore.Jet.FunctionalTests/Query/NullSemanticsQueryJetTest.cs
+++ b/test/EFCore.Jet.FunctionalTests/Query/NullSemanticsQueryJetTest.cs
@@ -2416,7 +2416,7 @@ public override async Task Null_semantics_conditional(bool async)
await base.Null_semantics_conditional(async);
AssertSql(
- """
+"""
SELECT `e`.`Id`
FROM `Entities1` AS `e`
WHERE `e`.`BoolA` = IIF(`e`.`BoolB` = TRUE, `e`.`NullableBoolB`, `e`.`NullableBoolC`)
@@ -2431,7 +2431,7 @@ WHERE IIF((`e`.`NullableBoolA` <> `e`.`NullableBoolB` OR `e`.`NullableBoolA` IS
"""
SELECT `e`.`Id`
FROM `Entities1` AS `e`
-WHERE IIF(IIF(`e`.`BoolA` = TRUE, IIF((`e`.`NullableBoolA` <> `e`.`NullableBoolB` OR `e`.`NullableBoolA` IS NULL OR `e`.`NullableBoolB` IS NULL) AND (`e`.`NullableBoolA` IS NOT NULL OR `e`.`NullableBoolB` IS NOT NULL), TRUE, FALSE), `e`.`BoolC`) <> `e`.`BoolB`, `e`.`BoolA`, IIF((`e`.`NullableBoolB` = `e`.`NullableBoolC` AND `e`.`NullableBoolB` IS NOT NULL AND `e`.`NullableBoolC` IS NOT NULL) OR (`e`.`NullableBoolB` IS NULL AND `e`.`NullableBoolC` IS NULL), TRUE, FALSE)) = TRUE
+WHERE IIF(IIF(`e`.`BoolA` = TRUE, IIF((`e`.`NullableBoolA` <> `e`.`NullableBoolB` OR `e`.`NullableBoolA` IS NULL OR `e`.`NullableBoolB` IS NULL) AND (`e`.`NullableBoolA` IS NOT NULL OR `e`.`NullableBoolB` IS NOT NULL), TRUE, FALSE), `e`.`BoolC`) <> `e`.`BoolB`, `e`.`BoolA`, IIF(`e`.`NullableBoolB` = `e`.`NullableBoolC` OR (`e`.`NullableBoolB` IS NULL AND `e`.`NullableBoolC` IS NULL), TRUE, FALSE)) = TRUE
""",
//
"""
@@ -3750,12 +3750,11 @@ public override async Task Is_null_on_column_followed_by_OrElse_optimizes_nullab
{
await base.Is_null_on_column_followed_by_OrElse_optimizes_nullability_conditional_multiple(async);
- // issue #25977
AssertSql(
"""
SELECT `e`.`Id`, `e`.`BoolA`, `e`.`BoolB`, `e`.`BoolC`, `e`.`IntA`, `e`.`IntB`, `e`.`IntC`, `e`.`NullableBoolA`, `e`.`NullableBoolB`, `e`.`NullableBoolC`, `e`.`NullableIntA`, `e`.`NullableIntB`, `e`.`NullableIntC`, `e`.`NullableStringA`, `e`.`NullableStringB`, `e`.`NullableStringC`, `e`.`StringA`, `e`.`StringB`, `e`.`StringC`
FROM `Entities1` AS `e`
-WHERE IIF(`e`.`NullableStringA` IS NULL OR `e`.`NullableStringB` IS NULL, IIF((`e`.`NullableStringA` = `e`.`NullableStringB` AND `e`.`NullableStringA` IS NOT NULL AND `e`.`NullableStringB` IS NOT NULL) OR (`e`.`NullableStringA` IS NULL AND `e`.`NullableStringB` IS NULL), TRUE, FALSE), IIF((`e`.`NullableStringA` <> `e`.`NullableStringB` OR `e`.`NullableStringA` IS NULL OR `e`.`NullableStringB` IS NULL) AND (`e`.`NullableStringA` IS NOT NULL OR `e`.`NullableStringB` IS NOT NULL), TRUE, FALSE)) = TRUE
+WHERE IIF(`e`.`NullableStringA` IS NULL OR `e`.`NullableStringB` IS NULL, IIF(`e`.`NullableStringA` = `e`.`NullableStringB` OR (`e`.`NullableStringA` IS NULL AND `e`.`NullableStringB` IS NULL), TRUE, FALSE), IIF((`e`.`NullableStringA` <> `e`.`NullableStringB` OR `e`.`NullableStringA` IS NULL OR `e`.`NullableStringB` IS NULL) AND (`e`.`NullableStringA` IS NOT NULL OR `e`.`NullableStringB` IS NOT NULL), TRUE, FALSE)) = TRUE
""");
}
@@ -3767,7 +3766,7 @@ public override async Task Is_null_on_column_followed_by_OrElse_optimizes_nullab
"""
SELECT `e`.`Id`, `e`.`BoolA`, `e`.`BoolB`, `e`.`BoolC`, `e`.`IntA`, `e`.`IntB`, `e`.`IntC`, `e`.`NullableBoolA`, `e`.`NullableBoolB`, `e`.`NullableBoolC`, `e`.`NullableIntA`, `e`.`NullableIntB`, `e`.`NullableIntC`, `e`.`NullableStringA`, `e`.`NullableStringB`, `e`.`NullableStringC`, `e`.`StringA`, `e`.`StringB`, `e`.`StringC`
FROM `Entities1` AS `e`
-WHERE IIF((`e`.`NullableStringA` IS NULL OR `e`.`NullableStringB` IS NULL) AND `e`.`NullableBoolC` IS NULL, IIF((`e`.`NullableStringA` = `e`.`NullableStringB` AND `e`.`NullableStringA` IS NOT NULL AND `e`.`NullableStringB` IS NOT NULL) OR (`e`.`NullableStringA` IS NULL AND `e`.`NullableStringB` IS NULL), TRUE, FALSE), IIF((`e`.`NullableStringA` <> `e`.`NullableStringB` OR `e`.`NullableStringA` IS NULL OR `e`.`NullableStringB` IS NULL) AND (`e`.`NullableStringA` IS NOT NULL OR `e`.`NullableStringB` IS NOT NULL), TRUE, FALSE)) = TRUE
+WHERE IIF((`e`.`NullableStringA` IS NULL OR `e`.`NullableStringB` IS NULL) AND `e`.`NullableBoolC` IS NULL, IIF(`e`.`NullableStringA` = `e`.`NullableStringB` OR (`e`.`NullableStringA` IS NULL AND `e`.`NullableStringB` IS NULL), TRUE, FALSE), IIF((`e`.`NullableStringA` <> `e`.`NullableStringB` OR `e`.`NullableStringA` IS NULL OR `e`.`NullableStringB` IS NULL) AND (`e`.`NullableStringA` IS NOT NULL OR `e`.`NullableStringB` IS NOT NULL), TRUE, FALSE)) = TRUE
""");
}
diff --git a/test/EFCore.Jet.FunctionalTests/Query/PrecompiledQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/PrecompiledQueryJetTest.cs
index 1a779ab2..13cdecba 100644
--- a/test/EFCore.Jet.FunctionalTests/Query/PrecompiledQueryJetTest.cs
+++ b/test/EFCore.Jet.FunctionalTests/Query/PrecompiledQueryJetTest.cs
@@ -34,7 +34,7 @@ public override async Task BinaryExpression()
"""
@__id_0='3'
-SELECT `b`.`Id`, `b`.`Name`
+SELECT `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
WHERE `b`.`Id` > @__id_0
""");
@@ -110,7 +110,7 @@ public override async Task ListInit_fully_evaluatable()
AssertSql(
"""
-SELECT TOP 2 `b`.`Id`, `b`.`Name`
+SELECT TOP 2 `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
WHERE `b`.`Id` IN (7, 8)
""");
@@ -122,7 +122,7 @@ public override async Task MethodCallExpression_no_evaluatability()
AssertSql(
"""
-SELECT `b`.`Id`, `b`.`Name`
+SELECT `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
WHERE `b`.`Name` IS NOT NULL AND LEFT(`b`.`Name`, IIF(LEN(`b`.`Name`) IS NULL, 0, LEN(`b`.`Name`))) = `b`.`Name`
""");
@@ -136,7 +136,7 @@ public override async Task MethodCallExpression_with_evaluatable_with_captured_v
"""
@__pattern_0_startswith='foo%' (Size = 255)
-SELECT `b`.`Id`, `b`.`Name`
+SELECT `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
WHERE `b`.`Name` LIKE @__pattern_0_startswith
""");
@@ -148,7 +148,7 @@ public override async Task MethodCallExpression_with_evaluatable_without_capture
AssertSql(
"""
-SELECT `b`.`Id`, `b`.`Name`
+SELECT `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
WHERE `b`.`Name` LIKE 'foo%'
""");
@@ -160,7 +160,7 @@ public override async Task MethodCallExpression_fully_evaluatable()
AssertSql(
"""
-SELECT `b`.`Id`, `b`.`Name`
+SELECT `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
""");
}
@@ -171,7 +171,7 @@ public override async Task New_with_no_arguments()
AssertSql(
"""
-SELECT `b`.`Id`, `b`.`Name`
+SELECT `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
WHERE `b`.`Id` = 0
""");
@@ -260,7 +260,7 @@ public override async Task Unary()
AssertSql(
"""
-SELECT `b`.`Id`, `b`.`Name`
+SELECT `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
WHERE CINT(`b`.`Id`) = 8
""");
@@ -283,7 +283,7 @@ public override async Task Terminating_AsEnumerable()
AssertSql(
"""
-SELECT `b`.`Id`, `b`.`Name`
+SELECT `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
""");
}
@@ -294,7 +294,7 @@ public override async Task Terminating_AsAsyncEnumerable_on_DbSet()
AssertSql(
"""
-SELECT `b`.`Id`, `b`.`Name`
+SELECT `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
""");
}
@@ -305,7 +305,7 @@ public override async Task Terminating_AsAsyncEnumerable_on_IQueryable()
AssertSql(
"""
-SELECT `b`.`Id`, `b`.`Name`
+SELECT `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
WHERE `b`.`Id` > 8
""");
@@ -317,7 +317,7 @@ public override async Task Foreach_sync_over_operator()
AssertSql(
"""
-SELECT `b`.`Id`, `b`.`Name`
+SELECT `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
WHERE `b`.`Id` > 8
""");
@@ -328,8 +328,8 @@ public override async Task Terminating_ToArray()
await base.Terminating_ToArray();
AssertSql(
- """
-SELECT `b`.`Id`, `b`.`Name`
+"""
+SELECT `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
""");
}
@@ -340,7 +340,7 @@ public override async Task Terminating_ToArrayAsync()
AssertSql(
"""
-SELECT `b`.`Id`, `b`.`Name`
+SELECT `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
""");
}
@@ -351,7 +351,7 @@ public override async Task Terminating_ToDictionary()
AssertSql(
"""
-SELECT `b`.`Id`, `b`.`Name`
+SELECT `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
""");
}
@@ -362,7 +362,7 @@ public override async Task Terminating_ToDictionaryAsync()
AssertSql(
"""
-SELECT `b`.`Id`, `b`.`Name`
+SELECT `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
""");
}
@@ -395,7 +395,7 @@ public override async Task Terminating_ToHashSet()
AssertSql(
"""
-SELECT `b`.`Id`, `b`.`Name`
+SELECT `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
""");
}
@@ -406,7 +406,7 @@ public override async Task Terminating_ToHashSetAsync()
AssertSql(
"""
-SELECT `b`.`Id`, `b`.`Name`
+SELECT `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
""");
}
@@ -417,7 +417,7 @@ public override async Task Terminating_ToLookup()
AssertSql(
"""
-SELECT `b`.`Id`, `b`.`Name`
+SELECT `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
""");
}
@@ -428,7 +428,7 @@ public override async Task Terminating_ToList()
AssertSql(
"""
-SELECT `b`.`Id`, `b`.`Name`
+SELECT `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
""");
}
@@ -439,7 +439,7 @@ public override async Task Terminating_ToListAsync()
AssertSql(
"""
-SELECT `b`.`Id`, `b`.`Name`
+SELECT `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
""");
}
@@ -802,25 +802,25 @@ public override async Task Terminating_First()
AssertSql(
"""
-SELECT TOP 1 `b`.`Id`, `b`.`Name`
+SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
WHERE `b`.`Id` = 8
""",
//
"""
-SELECT TOP 1 `b`.`Id`, `b`.`Name`
+SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
WHERE `b`.`Id` = 7
""",
//
"""
-SELECT TOP 1 `b`.`Id`, `b`.`Name`
+SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
WHERE `b`.`Id` = 8
""",
//
"""
-SELECT TOP 1 `b`.`Id`, `b`.`Name`
+SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
WHERE `b`.`Id` = 7
""");
@@ -832,25 +832,25 @@ public override async Task Terminating_FirstAsync()
AssertSql(
"""
-SELECT TOP 1 `b`.`Id`, `b`.`Name`
+SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
WHERE `b`.`Id` = 8
""",
//
"""
-SELECT TOP 1 `b`.`Id`, `b`.`Name`
+SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
WHERE `b`.`Id` = 7
""",
//
"""
-SELECT TOP 1 `b`.`Id`, `b`.`Name`
+SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
WHERE `b`.`Id` = 8
""",
//
"""
-SELECT TOP 1 `b`.`Id`, `b`.`Name`
+SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
WHERE `b`.`Id` = 7
""");
@@ -862,25 +862,25 @@ public override async Task Terminating_FirstOrDefault()
AssertSql(
"""
-SELECT TOP 1 `b`.`Id`, `b`.`Name`
+SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
WHERE `b`.`Id` = 8
""",
//
"""
-SELECT TOP 1 `b`.`Id`, `b`.`Name`
+SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
WHERE `b`.`Id` = 7
""",
//
"""
-SELECT TOP 1 `b`.`Id`, `b`.`Name`
+SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
WHERE `b`.`Id` = 8
""",
//
"""
-SELECT TOP 1 `b`.`Id`, `b`.`Name`
+SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
WHERE `b`.`Id` = 7
""");
@@ -892,25 +892,25 @@ public override async Task Terminating_FirstOrDefaultAsync()
AssertSql(
"""
-SELECT TOP 1 `b`.`Id`, `b`.`Name`
+SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
WHERE `b`.`Id` = 8
""",
//
"""
-SELECT TOP 1 `b`.`Id`, `b`.`Name`
+SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
WHERE `b`.`Id` = 7
""",
//
"""
-SELECT TOP 1 `b`.`Id`, `b`.`Name`
+SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
WHERE `b`.`Id` = 8
""",
//
"""
-SELECT TOP 1 `b`.`Id`, `b`.`Name`
+SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
WHERE `b`.`Id` = 7
""");
@@ -922,7 +922,7 @@ public override async Task Terminating_GetEnumerator()
AssertSql(
"""
-SELECT `b`.`Id`, `b`.`Name`
+SELECT `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
WHERE `b`.`Id` = 8
""");
@@ -934,27 +934,27 @@ public override async Task Terminating_Last()
AssertSql(
"""
-SELECT TOP 1 `b`.`Id`, `b`.`Name`
+SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
ORDER BY `b`.`Id` DESC
""",
//
"""
-SELECT TOP 1 `b`.`Id`, `b`.`Name`
+SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
WHERE `b`.`Id` = 7
ORDER BY `b`.`Id` DESC
""",
//
"""
-SELECT TOP 1 `b`.`Id`, `b`.`Name`
+SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
WHERE `b`.`Id` = 8
ORDER BY `b`.`Id` DESC
""",
//
"""
-SELECT TOP 1 `b`.`Id`, `b`.`Name`
+SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
WHERE `b`.`Id` = 7
ORDER BY `b`.`Id` DESC
@@ -967,27 +967,27 @@ public override async Task Terminating_LastAsync()
AssertSql(
"""
-SELECT TOP 1 `b`.`Id`, `b`.`Name`
+SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
ORDER BY `b`.`Id` DESC
""",
//
"""
-SELECT TOP 1 `b`.`Id`, `b`.`Name`
+SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
WHERE `b`.`Id` = 7
ORDER BY `b`.`Id` DESC
""",
//
"""
-SELECT TOP 1 `b`.`Id`, `b`.`Name`
+SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
WHERE `b`.`Id` = 8
ORDER BY `b`.`Id` DESC
""",
//
"""
-SELECT TOP 1 `b`.`Id`, `b`.`Name`
+SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
WHERE `b`.`Id` = 7
ORDER BY `b`.`Id` DESC
@@ -1000,27 +1000,27 @@ public override async Task Terminating_LastOrDefault()
AssertSql(
"""
-SELECT TOP 1 `b`.`Id`, `b`.`Name`
+SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
ORDER BY `b`.`Id` DESC
""",
//
"""
-SELECT TOP 1 `b`.`Id`, `b`.`Name`
+SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
WHERE `b`.`Id` = 7
ORDER BY `b`.`Id` DESC
""",
//
"""
-SELECT TOP 1 `b`.`Id`, `b`.`Name`
+SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
WHERE `b`.`Id` = 8
ORDER BY `b`.`Id` DESC
""",
//
"""
-SELECT TOP 1 `b`.`Id`, `b`.`Name`
+SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
WHERE `b`.`Id` = 7
ORDER BY `b`.`Id` DESC
@@ -1033,27 +1033,27 @@ public override async Task Terminating_LastOrDefaultAsync()
AssertSql(
"""
-SELECT TOP 1 `b`.`Id`, `b`.`Name`
+SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
ORDER BY `b`.`Id` DESC
""",
//
"""
-SELECT TOP 1 `b`.`Id`, `b`.`Name`
+SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
WHERE `b`.`Id` = 7
ORDER BY `b`.`Id` DESC
""",
//
"""
-SELECT TOP 1 `b`.`Id`, `b`.`Name`
+SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
WHERE `b`.`Id` = 8
ORDER BY `b`.`Id` DESC
""",
//
"""
-SELECT TOP 1 `b`.`Id`, `b`.`Name`
+SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
WHERE `b`.`Id` = 7
ORDER BY `b`.`Id` DESC
@@ -1164,25 +1164,25 @@ public override async Task Terminating_Single()
AssertSql(
"""
-SELECT TOP 2 `b`.`Id`, `b`.`Name`
+SELECT TOP 2 `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
WHERE `b`.`Id` = 8
""",
//
"""
-SELECT TOP 2 `b`.`Id`, `b`.`Name`
+SELECT TOP 2 `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
WHERE `b`.`Id` = 7
""",
//
"""
-SELECT TOP 2 `b`.`Id`, `b`.`Name`
+SELECT TOP 2 `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
WHERE `b`.`Id` = 8
""",
//
"""
-SELECT TOP 2 `b`.`Id`, `b`.`Name`
+SELECT TOP 2 `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
WHERE `b`.`Id` = 7
""");
@@ -1194,25 +1194,25 @@ public override async Task Terminating_SingleAsync()
AssertSql(
"""
-SELECT TOP 2 `b`.`Id`, `b`.`Name`
+SELECT TOP 2 `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
WHERE `b`.`Id` = 8
""",
//
"""
-SELECT TOP 2 `b`.`Id`, `b`.`Name`
+SELECT TOP 2 `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
WHERE `b`.`Id` = 7
""",
//
"""
-SELECT TOP 2 `b`.`Id`, `b`.`Name`
+SELECT TOP 2 `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
WHERE `b`.`Id` = 8
""",
//
"""
-SELECT TOP 2 `b`.`Id`, `b`.`Name`
+SELECT TOP 2 `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
WHERE `b`.`Id` = 7
""");
@@ -1224,25 +1224,25 @@ public override async Task Terminating_SingleOrDefault()
AssertSql(
"""
-SELECT TOP 2 `b`.`Id`, `b`.`Name`
+SELECT TOP 2 `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
WHERE `b`.`Id` = 8
""",
//
"""
-SELECT TOP 2 `b`.`Id`, `b`.`Name`
+SELECT TOP 2 `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
WHERE `b`.`Id` = 7
""",
//
"""
-SELECT TOP 2 `b`.`Id`, `b`.`Name`
+SELECT TOP 2 `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
WHERE `b`.`Id` = 8
""",
//
"""
-SELECT TOP 2 `b`.`Id`, `b`.`Name`
+SELECT TOP 2 `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
WHERE `b`.`Id` = 7
""");
@@ -1254,25 +1254,25 @@ public override async Task Terminating_SingleOrDefaultAsync()
AssertSql(
"""
-SELECT TOP 2 `b`.`Id`, `b`.`Name`
+SELECT TOP 2 `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
WHERE `b`.`Id` = 8
""",
//
"""
-SELECT TOP 2 `b`.`Id`, `b`.`Name`
+SELECT TOP 2 `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
WHERE `b`.`Id` = 7
""",
//
"""
-SELECT TOP 2 `b`.`Id`, `b`.`Name`
+SELECT TOP 2 `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
WHERE `b`.`Id` = 8
""",
//
"""
-SELECT TOP 2 `b`.`Id`, `b`.`Name`
+SELECT TOP 2 `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
WHERE `b`.`Id` = 7
""");
@@ -1392,40 +1392,80 @@ public override async Task Union()
AssertSql(
"""
-SELECT `u`.`Id`, `u`.`Name`
+SELECT `u`.`Id`, `u`.`BlogId`, `u`.`Title`
FROM (
- SELECT `b`.`Id`, `b`.`Name`
- FROM `Blogs` AS `b`
- WHERE `b`.`Id` > 7
+ SELECT `p`.`Id`, `p`.`BlogId`, `p`.`Title`
+ FROM `Posts` AS `p`
+ WHERE `p`.`Id` > 11
UNION
- SELECT `b0`.`Id`, `b0`.`Name`
- FROM `Blogs` AS `b0`
- WHERE `b0`.`Id` < 10
+ SELECT `p0`.`Id`, `p0`.`BlogId`, `p0`.`Title`
+ FROM `Posts` AS `p0`
+ WHERE `p0`.`Id` < 21
) AS `u`
ORDER BY `u`.`Id`
""");
}
+ public override async Task UnionOnEntitiesWithJson()
+ {
+ await base.UnionOnEntitiesWithJson();
+
+ AssertSql(
+ """
+SELECT [u].[Id], [u].[Name], [u].[Json]
+FROM (
+ SELECT [b].[Id], [b].[Name], [b].[Json]
+ FROM [Blogs] AS [b]
+ WHERE [b].[Id] > 7
+ UNION
+ SELECT [b0].[Id], [b0].[Name], [b0].[Json]
+ FROM [Blogs] AS [b0]
+ WHERE [b0].[Id] < 10
+) AS [u]
+ORDER BY [u].[Id]
+""");
+ }
+
public override async Task Concat()
{
await base.Concat();
AssertSql(
"""
-SELECT `u`.`Id`, `u`.`Name`
+SELECT `u`.`Id`, `u`.`BlogId`, `u`.`Title`
FROM (
- SELECT `b`.`Id`, `b`.`Name`
- FROM `Blogs` AS `b`
- WHERE `b`.`Id` > 7
+ SELECT `p`.`Id`, `p`.`BlogId`, `p`.`Title`
+ FROM `Posts` AS `p`
+ WHERE `p`.`Id` > 11
UNION ALL
- SELECT `b0`.`Id`, `b0`.`Name`
- FROM `Blogs` AS `b0`
- WHERE `b0`.`Id` < 10
+ SELECT `p0`.`Id`, `p0`.`BlogId`, `p0`.`Title`
+ FROM `Posts` AS `p0`
+ WHERE `p0`.`Id` < 21
) AS `u`
ORDER BY `u`.`Id`
""");
}
+ public override async Task ConcatOnEntitiesWithJson()
+ {
+ await base.ConcatOnEntitiesWithJson();
+
+ AssertSql(
+ """
+SELECT [u].[Id], [u].[Name], [u].[Json]
+FROM (
+ SELECT [b].[Id], [b].[Name], [b].[Json]
+ FROM [Blogs] AS [b]
+ WHERE [b].[Id] > 7
+ UNION ALL
+ SELECT [b0].[Id], [b0].[Name], [b0].[Json]
+ FROM [Blogs] AS [b0]
+ WHERE [b0].[Id] < 10
+) AS [u]
+ORDER BY [u].[Id]
+""");
+ }
+
public override async Task Intersect()
{
await base.Intersect();
@@ -1446,6 +1486,26 @@ ORDER BY [i].[Id]
""");
}
+ public override async Task IntersectOnEntitiesWithJson()
+ {
+ await base.IntersectOnEntitiesWithJson();
+
+ AssertSql(
+ """
+SELECT [i].[Id], [i].[Name], [i].[Json]
+FROM (
+ SELECT [b].[Id], [b].[Name], [b].[Json]
+ FROM [Blogs] AS [b]
+ WHERE [b].[Id] > 7
+ INTERSECT
+ SELECT [b0].[Id], [b0].[Name], [b0].[Json]
+ FROM [Blogs] AS [b0]
+ WHERE [b0].[Id] > 8
+) AS [i]
+ORDER BY [i].[Id]
+""");
+ }
+
public override async Task Except()
{
await base.Except();
@@ -1466,6 +1526,26 @@ ORDER BY [e].[Id]
""");
}
+ public override async Task ExceptOnEntitiesWithJson()
+ {
+ await base.ExceptOnEntitiesWithJson();
+
+ AssertSql(
+ """
+SELECT [e].[Id], [e].[Name], [e].[Json]
+FROM (
+ SELECT [b].[Id], [b].[Name], [b].[Json]
+ FROM [Blogs] AS [b]
+ WHERE [b].[Id] > 7
+ EXCEPT
+ SELECT [b0].[Id], [b0].[Name], [b0].[Json]
+ FROM [Blogs] AS [b0]
+ WHERE [b0].[Id] > 8
+) AS [e]
+ORDER BY [e].[Id]
+""");
+ }
+
public override async Task ValuesExpression()
{
await base.ValuesExpression();
@@ -1487,7 +1567,7 @@ public override async Task Contains_with_parameterized_collection()
AssertSql(
"""
-SELECT `b`.`Id`, `b`.`Name`
+SELECT `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
WHERE `b`.`Id` IN (1, 2, 3)
""");
@@ -1499,7 +1579,7 @@ public override async Task FromSqlRaw()
AssertSql(
"""
-SELECT `m`.`Id`, `m`.`Name`
+SELECT `m`.`Id`, `m`.`Name`, `m`.`Json`
FROM (
SELECT * FROM `Blogs` WHERE `Id` > 8
) AS `m`
@@ -1516,7 +1596,7 @@ public override async Task FromSql_with_FormattableString_parameters()
p0='8'
p1='9'
-SELECT `m`.`Id`, `m`.`Name`
+SELECT `m`.`Id`, `m`.`Name`, `m`.`Json`
FROM (
SELECT * FROM `Blogs` WHERE `Id` > @p0 AND `Id` < @p1
) AS `m`
@@ -1620,7 +1700,7 @@ public override async Task DbContext_as_local_variable()
AssertSql(
"""
-SELECT `b`.`Id`, `b`.`Name`
+SELECT `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
""");
}
@@ -1631,7 +1711,7 @@ public override async Task DbContext_as_field()
AssertSql(
"""
-SELECT `b`.`Id`, `b`.`Name`
+SELECT `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
""");
}
@@ -1642,7 +1722,7 @@ public override async Task DbContext_as_property()
AssertSql(
"""
-SELECT `b`.`Id`, `b`.`Name`
+SELECT `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
""");
}
@@ -1653,7 +1733,7 @@ public override async Task DbContext_as_captured_variable()
AssertSql(
"""
-SELECT `b`.`Id`, `b`.`Name`
+SELECT `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
""");
}
@@ -1664,7 +1744,7 @@ public override async Task DbContext_as_method_invocation_result()
AssertSql(
"""
-SELECT `b`.`Id`, `b`.`Name`
+SELECT `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
""");
}
@@ -1707,7 +1787,7 @@ public override async Task NotParameterizedAttribute_with_constant()
AssertSql(
"""
-SELECT TOP 2 `b`.`Id`, `b`.`Name`
+SELECT TOP 2 `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
WHERE `b`.`Name` = 'Blog2'
""");
@@ -1746,7 +1826,7 @@ public override async Task OrderBy()
AssertSql(
"""
-SELECT `b`.`Id`, `b`.`Name`
+SELECT `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
ORDER BY `b`.`Name`
""");
@@ -1773,7 +1853,7 @@ public override async Task Take()
AssertSql(
"""
-SELECT TOP 1 `b`.`Id`, `b`.`Name`
+SELECT TOP 1 `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
ORDER BY `b`.`Name`
""");
@@ -1813,7 +1893,7 @@ public override async Task Two_captured_variables_in_different_lambdas()
@__starts_0_startswith='blog%' (Size = 255)
@__ends_1_endswith='%2' (Size = 255)
-SELECT TOP 2 `b`.`Id`, `b`.`Name`
+SELECT TOP 2 `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
WHERE (`b`.`Name` LIKE @__starts_0_startswith) AND (`b`.`Name` LIKE @__ends_1_endswith)
""");
@@ -1828,7 +1908,7 @@ public override async Task Same_captured_variable_twice_in_same_lambda()
@__foo_0_startswith='X%' (Size = 255)
@__foo_0_endswith='%X' (Size = 255)
-SELECT `b`.`Id`, `b`.`Name`
+SELECT `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
WHERE (`b`.`Name` LIKE @__foo_0_startswith) AND (`b`.`Name` LIKE @__foo_0_endswith)
""");
@@ -1843,7 +1923,7 @@ public override async Task Same_captured_variable_twice_in_different_lambdas()
@__foo_0_startswith='X%' (Size = 255)
@__foo_0_endswith='%X' (Size = 255)
-SELECT `b`.`Id`, `b`.`Name`
+SELECT `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
WHERE (`b`.`Name` LIKE @__foo_0_startswith) AND (`b`.`Name` LIKE @__foo_0_endswith)
""");
@@ -1855,7 +1935,7 @@ public override async Task Include_single()
AssertSql(
"""
-SELECT `b`.`Id`, `b`.`Name`, `p`.`Id`, `p`.`BlogId`, `p`.`Title`
+SELECT `b`.`Id`, `b`.`Name`, `b`.`Json`, `p`.`Id`, `p`.`BlogId`, `p`.`Title`
FROM `Blogs` AS `b`
LEFT JOIN `Posts` AS `p` ON `b`.`Id` = `p`.`BlogId`
WHERE `b`.`Id` > 8
@@ -1869,7 +1949,7 @@ public override async Task Include_split()
AssertSql(
"""
-SELECT `b`.`Id`, `b`.`Name`
+SELECT `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
ORDER BY `b`.`Id`
""",
@@ -1888,7 +1968,7 @@ public override async Task Final_GroupBy()
AssertSql(
"""
-SELECT `b`.`Name`, `b`.`Id`
+SELECT `b`.`Name`, `b`.`Id`, `b`.`Json`
FROM `Blogs` AS `b`
ORDER BY `b`.`Name`
""");
@@ -1903,7 +1983,7 @@ public override async Task Multiple_queries_with_captured_variables()
@__id1_0='8'
@__id2_1='9'
-SELECT `b`.`Id`, `b`.`Name`
+SELECT `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
WHERE `b`.`Id` = @__id1_0 OR `b`.`Id` = @__id2_1
""",
@@ -1911,7 +1991,7 @@ public override async Task Multiple_queries_with_captured_variables()
"""
@__id1_0='8'
-SELECT TOP 2 `b`.`Id`, `b`.`Name`
+SELECT TOP 2 `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
WHERE `b`.`Id` = @__id1_0
""");
@@ -1923,12 +2003,12 @@ public override async Task Unsafe_accessor_gets_generated_once_for_multiple_quer
AssertSql(
"""
-SELECT `b`.`Id`, `b`.`Name`
+SELECT `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
""",
//
"""
-SELECT `b`.`Id`, `b`.`Name`
+SELECT `b`.`Id`, `b`.`Name`, `b`.`Json`
FROM `Blogs` AS `b`
""");
}
diff --git a/test/EFCore.Jet.FunctionalTests/Query/PrimitiveCollectionsQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/PrimitiveCollectionsQueryJetTest.cs
index e6329284..77e59e1b 100644
--- a/test/EFCore.Jet.FunctionalTests/Query/PrimitiveCollectionsQueryJetTest.cs
+++ b/test/EFCore.Jet.FunctionalTests/Query/PrimitiveCollectionsQueryJetTest.cs
@@ -177,18 +177,6 @@ public override async Task Inline_collection_Contains_with_three_values(bool asy
""");
}
- public override async Task Inline_collection_Contains_with_EF_Constant(bool async)
- {
- await base.Inline_collection_Contains_with_EF_Constant(async);
-
- AssertSql(
- """
-SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`String`, `p`.`Strings`
-FROM `PrimitiveCollectionsEntity` AS `p`
-WHERE `p`.`Id` IN (2, 999, 1000)
-""");
- }
-
public override async Task Inline_collection_Contains_with_all_parameters(bool async)
{
await base.Inline_collection_Contains_with_all_parameters(async);
@@ -450,6 +438,73 @@ SELECT MAX([v].[Value])
""");
}
+ public override async Task Inline_collection_with_single_parameter_element_Contains(bool async)
+ {
+ await base.Inline_collection_with_single_parameter_element_Contains(async);
+
+ AssertSql(
+ """
+@__i_0='2'
+
+SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`String`, `p`.`Strings`
+FROM `PrimitiveCollectionsEntity` AS `p`
+WHERE `p`.`Id` = @__i_0
+""");
+ }
+
+ public override async Task Inline_collection_with_single_parameter_element_Count(bool async)
+ {
+ await base.Inline_collection_with_single_parameter_element_Count(async);
+
+ AssertSql(
+ """
+@__i_0='2'
+@__i_0='2'
+
+SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`String`, `p`.`Strings`
+FROM `PrimitiveCollectionsEntity` AS `p`
+WHERE (
+ SELECT COUNT(*)
+ FROM (SELECT IIF(@__i_0 IS NULL, NULL, CLNG(@__i_0)) AS `Value`
+ FROM (SELECT COUNT(*) FROM `#Dual`) AS `v_0`) AS `v`
+ WHERE `v`.`Value` > `p`.`Id`) = 1
+""");
+ }
+
+ public override async Task Inline_collection_Contains_with_EF_Parameter(bool async)
+ {
+ await base.Inline_collection_Contains_with_EF_Parameter(async);
+
+ AssertSql(
+ """
+@__p_0='[2,999,1000]' (Size = 4000)
+
+SELECT [p].[Id], [p].[Bool], [p].[Bools], [p].[DateTime], [p].[DateTimes], [p].[Enum], [p].[Enums], [p].[Int], [p].[Ints], [p].[NullableInt], [p].[NullableInts], [p].[NullableString], [p].[NullableStrings], [p].[String], [p].[Strings]
+FROM [PrimitiveCollectionsEntity] AS [p]
+WHERE [p].[Id] IN (
+ SELECT [p0].[value]
+ FROM OPENJSON(@__p_0) WITH ([value] int '$') AS [p0]
+)
+""");
+ }
+
+ public override async Task Inline_collection_Count_with_column_predicate_with_EF_Parameter(bool async)
+ {
+ await base.Inline_collection_Count_with_column_predicate_with_EF_Parameter(async);
+
+ AssertSql(
+ """
+@__p_0='[2,999,1000]' (Size = 4000)
+
+SELECT [p].[Id], [p].[Bool], [p].[Bools], [p].[DateTime], [p].[DateTimes], [p].[Enum], [p].[Enums], [p].[Int], [p].[Ints], [p].[NullableInt], [p].[NullableInts], [p].[NullableString], [p].[NullableStrings], [p].[String], [p].[Strings]
+FROM [PrimitiveCollectionsEntity] AS [p]
+WHERE (
+ SELECT COUNT(*)
+ FROM OPENJSON(@__p_0) WITH ([value] int '$') AS [p0]
+ WHERE [p0].[value] > [p].[Id]) = 2
+""");
+ }
+
public override Task Parameter_collection_Count(bool async)
=> AssertTranslationFailedWithDetails(() => base.Parameter_collection_Count(async), JetStrings.QueryingIntoJsonCollectionsNotSupported());
@@ -663,6 +718,62 @@ public override async Task Parameter_collection_null_Contains(bool async)
""");
}
+ public override async Task Parameter_collection_Contains_with_EF_Constant(bool async)
+ {
+ await base.Parameter_collection_Contains_with_EF_Constant(async);
+
+ AssertSql(
+ """
+SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`String`, `p`.`Strings`
+FROM `PrimitiveCollectionsEntity` AS `p`
+WHERE `p`.`Id` IN (2, 999, 1000)
+""");
+ }
+
+ public override async Task Parameter_collection_Where_with_EF_Constant_Where_Any(bool async)
+ {
+ await base.Parameter_collection_Where_with_EF_Constant_Where_Any(async);
+
+ AssertSql(
+ """
+SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`String`, `p`.`Strings`
+FROM `PrimitiveCollectionsEntity` AS `p`
+WHERE EXISTS (
+ SELECT 1
+ FROM (SELECT 2 AS `Value`
+ FROM (SELECT COUNT(*) FROM `#Dual`) AS `i_0`
+ UNION
+ SELECT 999 AS `Value`
+ FROM (SELECT COUNT(*) FROM `#Dual`) AS `i_1`
+ UNION
+ SELECT 1000 AS `Value`
+ FROM (SELECT COUNT(*) FROM `#Dual`) AS `i_2`) AS `i`
+ WHERE `i`.`Value` > 0)
+""");
+ }
+
+ public override async Task Parameter_collection_Count_with_column_predicate_with_EF_Constant(bool async)
+ {
+ await base.Parameter_collection_Count_with_column_predicate_with_EF_Constant(async);
+
+ AssertSql(
+ """
+SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`String`, `p`.`Strings`
+FROM `PrimitiveCollectionsEntity` AS `p`
+WHERE (
+ SELECT COUNT(*)
+ FROM (SELECT 2 AS `Value`
+ FROM (SELECT COUNT(*) FROM `#Dual`) AS `i_0`
+ UNION
+ SELECT 999 AS `Value`
+ FROM (SELECT COUNT(*) FROM `#Dual`) AS `i_1`
+ UNION
+ SELECT 1000 AS `Value`
+ FROM (SELECT COUNT(*) FROM `#Dual`) AS `i_2`) AS `i`
+ WHERE `i`.`Value` > `p`.`Id`) = 2
+""");
+ }
+
public override Task Column_collection_of_ints_Contains(bool async)
=> AssertTranslationFailedWithDetails(() => base.Column_collection_of_ints_Contains(async), JetStrings.QueryingIntoJsonCollectionsNotSupported());
diff --git a/test/EFCore.Jet.FunctionalTests/Query/TPCGearsOfWarQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/TPCGearsOfWarQueryJetTest.cs
index 09ac6fc9..c55f2518 100644
--- a/test/EFCore.Jet.FunctionalTests/Query/TPCGearsOfWarQueryJetTest.cs
+++ b/test/EFCore.Jet.FunctionalTests/Query/TPCGearsOfWarQueryJetTest.cs
@@ -1330,7 +1330,7 @@ public override async Task Null_propagation_optimization2(bool async)
// issue #16050
AssertSql(
- """
+"""
SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`
FROM (
SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator`
@@ -1339,7 +1339,7 @@ UNION ALL
SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator`
FROM `Officers` AS `o`
) AS `u`
-WHERE IIF(`u`.`LeaderNickname` IS NULL, NULL, IIF((`u`.`LeaderNickname` LIKE '%us') AND `u`.`LeaderNickname` IS NOT NULL, TRUE, FALSE)) = TRUE
+WHERE IIF(`u`.`LeaderNickname` IS NULL, NULL, IIF(`u`.`LeaderNickname` LIKE '%us', TRUE, FALSE)) = TRUE
""");
}
@@ -10267,7 +10267,7 @@ public override async Task Conditional_expression_with_test_being_simplified_to_
await base.Conditional_expression_with_test_being_simplified_to_constant_complex(isAsync);
AssertSql(
- """
+"""
@__prm_0='True'
@__prm2_1='Marcus' Lancer' (Size = 255)
@@ -10282,10 +10282,7 @@ UNION ALL
WHERE IIF(`u`.`HasSoulPatch` = @__prm_0 AND (
SELECT TOP 1 `w`.`Name`
FROM `Weapons` AS `w`
- WHERE `w`.`Id` = `u`.`SquadId`) = @__prm2_1 AND (
- SELECT TOP 1 `w`.`Name`
- FROM `Weapons` AS `w`
- WHERE `w`.`Id` = `u`.`SquadId`) IS NOT NULL, TRUE, FALSE) = TRUE
+ WHERE `w`.`Id` = `u`.`SquadId`) = @__prm2_1, TRUE, FALSE) = TRUE
""");
}
diff --git a/test/EFCore.Jet.FunctionalTests/Query/TPTGearsOfWarQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/TPTGearsOfWarQueryJetTest.cs
index d898454a..8850223d 100644
--- a/test/EFCore.Jet.FunctionalTests/Query/TPTGearsOfWarQueryJetTest.cs
+++ b/test/EFCore.Jet.FunctionalTests/Query/TPTGearsOfWarQueryJetTest.cs
@@ -1037,7 +1037,7 @@ public override async Task Null_propagation_optimization2(bool async)
SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`
FROM `Gears` AS `g`
LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`
-WHERE IIF(`g`.`LeaderNickname` IS NULL, NULL, IIF((`g`.`LeaderNickname` LIKE '%us') AND `g`.`LeaderNickname` IS NOT NULL, TRUE, FALSE)) = TRUE
+WHERE IIF(`g`.`LeaderNickname` IS NULL, NULL, IIF(`g`.`LeaderNickname` LIKE '%us', TRUE, FALSE)) = TRUE
""");
}
@@ -8265,7 +8265,7 @@ public override async Task Conditional_expression_with_test_being_simplified_to_
await base.Conditional_expression_with_test_being_simplified_to_constant_complex(isAsync);
AssertSql(
- """
+"""
@__prm_0='True'
@__prm2_1='Marcus' Lancer' (Size = 255)
@@ -8275,10 +8275,7 @@ public override async Task Conditional_expression_with_test_being_simplified_to_
WHERE IIF(`g`.`HasSoulPatch` = @__prm_0 AND (
SELECT TOP 1 `w`.`Name`
FROM `Weapons` AS `w`
- WHERE `w`.`Id` = `g`.`SquadId`) = @__prm2_1 AND (
- SELECT TOP 1 `w`.`Name`
- FROM `Weapons` AS `w`
- WHERE `w`.`Id` = `g`.`SquadId`) IS NOT NULL, TRUE, FALSE) = TRUE
+ WHERE `w`.`Id` = `g`.`SquadId`) = @__prm2_1, TRUE, FALSE) = TRUE
""");
}