From df7b86ac968dcce4dbb5722b9e4a65b18a3b9ebb Mon Sep 17 00:00:00 2001 From: Christopher Jolly Date: Sat, 23 Dec 2023 23:45:09 +0800 Subject: [PATCH] Misc test fixes (#196) --- src/EFCore.Jet.Data/JetCommand.cs | 33 +-- src/EFCore.Jet/Internal/JetModelValidator.cs | 23 ++ .../Sql/Internal/JetQuerySqlGenerator.cs | 15 ++ .../Update/Internal/JetUpdateSqlGenerator.cs | 100 +++++++++ .../EntitySplittingSqlServerTest.cs | 54 ----- .../GreenTests/ace_2010_odbc_x86.txt | 21 +- .../GreenTests/ace_2010_oledb_x86.txt | 184 +++++++++++++++- .../JetQueryTriggersTest.cs | 144 ------------- .../JetTriggersTest.cs | 200 ------------------ .../Query/FromSqlQueryJetTest.cs | 87 +++++++- .../Query/GearsOfWarQueryJetFixture.cs | 42 +++- .../Query/GearsOfWarQueryJetTest.cs | 46 ++-- .../Query/TPCGearsOfWarQueryJetFixture.cs | 42 +++- .../Query/TPCGearsOfWarQueryJetTest.cs | 126 +++++------ .../Query/TPCRelationshipsQueryJetTest.cs | 8 +- .../Query/TPTGearsOfWarQueryJetFixture.cs | 42 +++- .../Query/TPTGearsOfWarQueryJetTest.cs | 61 +++--- .../JetDatabaseModelFactoryTest.cs | 4 +- .../TestRelationalCommandBuilderFactory.cs | 4 +- .../Update/StoredProcedureUpdateJetTest.cs | 9 +- .../ValueConvertersEndToEndJetTest.cs | 16 +- 21 files changed, 709 insertions(+), 552 deletions(-) delete mode 100644 test/EFCore.Jet.FunctionalTests/JetQueryTriggersTest.cs delete mode 100644 test/EFCore.Jet.FunctionalTests/JetTriggersTest.cs diff --git a/src/EFCore.Jet.Data/JetCommand.cs b/src/EFCore.Jet.Data/JetCommand.cs index be32f38..92e6c9b 100644 --- a/src/EFCore.Jet.Data/JetCommand.cs +++ b/src/EFCore.Jet.Data/JetCommand.cs @@ -397,22 +397,27 @@ namespace EntityFrameworkCore.Jet.Data } else { - for (var i = 0; i < usedParameterCount && command.Parameters.Count > 0; i++) + //don't touch parameters if EXEC stored procedure. Jet parameters do not use the @ symbol with parameter arguments in EXEC. + //As such this code would not find any parameters and clear them all out. + if (!commandText.StartsWith("EXEC", StringComparison.InvariantCultureIgnoreCase)) { - command.Parameters.RemoveAt(0); + for (var i = 0; i < usedParameterCount && command.Parameters.Count > 0; i++) + { + command.Parameters.RemoveAt(0); + } + + var parameterIndices = parser.GetStateIndices( + new[] { '@', '?' }, + currentCommandStart, + commandDelimiter - currentCommandStart); + + while (command.Parameters.Count > parameterIndices.Count) + { + command.Parameters.RemoveAt(parameterIndices.Count); + } + + usedParameterCount += parameterIndices.Count; } - - var parameterIndices = parser.GetStateIndices( - new[] { '@', '?' }, - currentCommandStart, - commandDelimiter - currentCommandStart); - - while (command.Parameters.Count > parameterIndices.Count) - { - command.Parameters.RemoveAt(parameterIndices.Count); - } - - usedParameterCount += parameterIndices.Count; } commands.Add(command); diff --git a/src/EFCore.Jet/Internal/JetModelValidator.cs b/src/EFCore.Jet/Internal/JetModelValidator.cs index cf15b60..b909574 100644 --- a/src/EFCore.Jet/Internal/JetModelValidator.cs +++ b/src/EFCore.Jet/Internal/JetModelValidator.cs @@ -123,6 +123,29 @@ namespace EntityFrameworkCore.Jet.Internal } } + /// + /// This is an internal API that supports the Entity Framework Core infrastructure and not subject to + /// the same compatibility standards as public APIs. It may be changed or removed without notice in + /// any release. You should only use it directly in your code with extreme caution and knowing that + /// doing so can result in application failures when updating to a new Entity Framework Core release. + /// + protected override void ValidateValueGeneration( + IEntityType entityType, + IKey key, + IDiagnosticsLogger logger) + { + if (entityType.GetTableName() != null + && (string?)entityType[RelationalAnnotationNames.MappingStrategy] == RelationalAnnotationNames.TpcMappingStrategy) + { + foreach (var storeGeneratedProperty in key.Properties.Where( + p => (p.ValueGenerated & ValueGenerated.OnAdd) != 0 + && p.GetValueGenerationStrategy() == JetValueGenerationStrategy.IdentityColumn)) + { + logger.TpcStoreGeneratedIdentityWarning(storeGeneratedProperty); + } + } + } + /// /// This is an internal API that supports the Entity Framework Core infrastructure and not subject to /// the same compatibility standards as public APIs. It may be changed or removed without notice in diff --git a/src/EFCore.Jet/Query/Sql/Internal/JetQuerySqlGenerator.cs b/src/EFCore.Jet/Query/Sql/Internal/JetQuerySqlGenerator.cs index 8a38eb3..a57177c 100644 --- a/src/EFCore.Jet/Query/Sql/Internal/JetQuerySqlGenerator.cs +++ b/src/EFCore.Jet/Query/Sql/Internal/JetQuerySqlGenerator.cs @@ -368,10 +368,14 @@ namespace EntityFrameworkCore.Jet.Query.Sql.Internal if (parent.TryPeek(out var exp) && exp is SqlBinaryExpression) { + Sql.Append("IIF("); + base.VisitColumn(columnExpression); + Sql.Append(" IS NULL, NULL, "); Sql.Append(function); Sql.Append("("); base.VisitColumn(columnExpression); Sql.Append(")"); + Sql.Append(")"); return columnExpression; } } @@ -944,5 +948,16 @@ namespace EntityFrameworkCore.Jet.Query.Sql.Internal throw new InvalidOperationException( RelationalStrings.ExecuteOperationWithUnsupportedOperatorInSqlGeneration(nameof(RelationalQueryableExtensions.ExecuteUpdate))); } + + /// + protected override void CheckComposableSqlTrimmed(ReadOnlySpan sql) + { + base.CheckComposableSqlTrimmed(sql); + + if (sql.StartsWith("WITH", StringComparison.OrdinalIgnoreCase)) + { + throw new InvalidOperationException(RelationalStrings.FromSqlNonComposable); + } + } } } \ No newline at end of file diff --git a/src/EFCore.Jet/Update/Internal/JetUpdateSqlGenerator.cs b/src/EFCore.Jet/Update/Internal/JetUpdateSqlGenerator.cs index 7daf389..8fef9f1 100644 --- a/src/EFCore.Jet/Update/Internal/JetUpdateSqlGenerator.cs +++ b/src/EFCore.Jet/Update/Internal/JetUpdateSqlGenerator.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.Collections.Generic; +using System.Data; using System.Globalization; using System.Linq; using System.Text; @@ -157,5 +158,104 @@ namespace EntityFrameworkCore.Jet.Update.Internal }, " AND "); } } + + public override ResultSetMapping AppendStoredProcedureCall( + StringBuilder commandStringBuilder, + IReadOnlyModificationCommand command, + int commandPosition, + out bool requiresTransaction) + { + Check.DebugAssert(command.StoreStoredProcedure is not null, "command.StoredProcedure is not null"); + + var storedProcedure = command.StoreStoredProcedure; + + var resultSetMapping = ResultSetMapping.NoResults; + + foreach (var resultColumn in storedProcedure.ResultColumns) + { + resultSetMapping = ResultSetMapping.LastInResultSet; + + if (resultColumn == command.RowsAffectedColumn) + { + resultSetMapping |= ResultSetMapping.ResultSetWithRowsAffectedOnly; + } + else + { + resultSetMapping = ResultSetMapping.LastInResultSet; + break; + } + } + + Check.DebugAssert( + storedProcedure.Parameters.Any() || storedProcedure.ResultColumns.Any(), + "Stored procedure call with neither parameters nor result columns"); + + commandStringBuilder.Append("EXEC "); + + if (storedProcedure.ReturnValue is not null) + { + var returnValueModification = command.ColumnModifications.First(c => c.Column is IStoreStoredProcedureReturnValue); + + Check.DebugAssert(returnValueModification.UseCurrentValueParameter, "returnValueModification.UseCurrentValueParameter"); + Check.DebugAssert(!returnValueModification.UseOriginalValueParameter, "!returnValueModification.UseOriginalValueParameter"); + + SqlGenerationHelper.GenerateParameterNamePlaceholder(commandStringBuilder, returnValueModification.ParameterName!); + + commandStringBuilder.Append(" = "); + + resultSetMapping |= ResultSetMapping.HasOutputParameters; + } + + SqlGenerationHelper.DelimitIdentifier(commandStringBuilder, storedProcedure.Name, storedProcedure.Schema); + + if (storedProcedure.Parameters.Any()) + { + commandStringBuilder.Append(' '); + + var first = true; + + // Only positional parameter style supported for now, see #28439 + + // Note: the column modifications are already ordered according to the sproc parameter ordering + // (see ModificationCommand.GenerateColumnModifications) + for (var i = 0; i < command.ColumnModifications.Count; i++) + { + var columnModification = command.ColumnModifications[i]; + + if (columnModification.Column is not IStoreStoredProcedureParameter parameter) + { + continue; + } + + if (first) + { + first = false; + } + else + { + commandStringBuilder.Append(", "); + } + + Check.DebugAssert(columnModification.UseParameter, "Column modification matched a parameter, but UseParameter is false"); + + commandStringBuilder.Append(columnModification.UseOriginalValueParameter + ? columnModification.OriginalParameterName! + : columnModification.ParameterName!); + + // Note that in/out parameters also get suffixed with OUTPUT in SQL Server + if (parameter.Direction.HasFlag(ParameterDirection.Output)) + { + commandStringBuilder.Append(" OUTPUT"); + resultSetMapping |= ResultSetMapping.HasOutputParameters; + } + } + } + + commandStringBuilder.AppendLine(SqlGenerationHelper.StatementTerminator); + + requiresTransaction = true; + + return resultSetMapping; + } } } diff --git a/test/EFCore.Jet.FunctionalTests/EntitySplittingSqlServerTest.cs b/test/EFCore.Jet.FunctionalTests/EntitySplittingSqlServerTest.cs index f24a8b1..de9d3a6 100644 --- a/test/EFCore.Jet.FunctionalTests/EntitySplittingSqlServerTest.cs +++ b/test/EFCore.Jet.FunctionalTests/EntitySplittingSqlServerTest.cs @@ -19,60 +19,6 @@ public class EntitySplittingSqlServerTest : EntitySplittingTestBase { } - [ConditionalFact] - public virtual async Task Can_roundtrip_with_triggers() - { - await InitializeAsync( - modelBuilder => - { - OnModelCreating(modelBuilder); - - modelBuilder.Entity( - ob => - { - ob.SplitToTable( - "MeterReadingDetails", t => - { - t.HasTrigger("MeterReadingsDetails_Trigger"); - }); - }); - }, - sensitiveLogEnabled: false, - seed: c => - { - c.Database.ExecuteSqlRaw( - @" -CREATE OR ALTER TRIGGER [MeterReadingsDetails_Trigger] -ON [MeterReadingDetails] -FOR INSERT, UPDATE, DELETE AS -BEGIN - IF @@ROWCOUNT = 0 - return -END"); - }); - - await using (var context = CreateContext()) - { - var meterReading = new MeterReading { ReadingStatus = MeterReadingStatus.NotAccesible, CurrentRead = "100" }; - - await context.AddAsync(meterReading); - - TestSqlLoggerFactory.Clear(); - - await context.SaveChangesAsync(); - - Assert.Empty(TestSqlLoggerFactory.Log.Where(l => l.Level == LogLevel.Warning)); - } - - await using (var context = CreateContext()) - { - var reading = await context.MeterReadings.SingleAsync(); - - Assert.Equal(MeterReadingStatus.NotAccesible, reading.ReadingStatus); - Assert.Equal("100", reading.CurrentRead); - } - } - public override async Task Can_roundtrip() { await base.Can_roundtrip(); 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 bbf1c4e..91d35bd 100644 --- a/test/EFCore.Jet.FunctionalTests/GreenTests/ace_2010_odbc_x86.txt +++ b/test/EFCore.Jet.FunctionalTests/GreenTests/ace_2010_odbc_x86.txt @@ -7915,12 +7915,22 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.Bad_data_error EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.Bad_data_error_handling_null(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.Entity_equality_through_fromsql(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.Entity_equality_through_fromsql(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_Count_used_twice_with_parameters(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_Count_used_twice_with_parameters(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_Count_used_twice_without_parameters(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_Count_used_twice_without_parameters(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_used_twice_with_parameters(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_used_twice_with_parameters(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_used_twice_without_parameters(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_used_twice_without_parameters(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_annotations_do_not_affect_successive_calls(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_annotations_do_not_affect_successive_calls(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_composed_contains(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_composed_contains(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_composed_contains2(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_composed_contains2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_composed_with_common_table_expression(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_composed_with_common_table_expression(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_composed_with_nullable_predicate(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_composed_with_nullable_predicate(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_composed_after_removing_whitespaces(async: False) @@ -12957,6 +12967,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_annota EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_annotations_do_not_affect_successive_calls(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_composed_contains(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_composed_contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_composed_with_common_table_expression(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_composed_with_common_table_expression(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_composed_with_empty_predicate(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_composed_with_empty_predicate(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_composed_with_predicate(async: False) @@ -13093,6 +13105,10 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Inclu EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_without_inheritance_with_filter(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_without_inheritance(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_without_inheritance(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_self_reference_with_inheritance_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_self_reference_with_inheritance_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_self_reference_with_inheritance(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_self_reference_with_inheritance(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_collection_reference_on_non_entity_base_split(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_collection_reference_on_non_entity_base_split(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_collection_reference_on_non_entity_base(async: False) @@ -13634,6 +13650,7 @@ EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest. EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Simple_bool_literals_are_parsed_for_HasDefaultValue EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Simple_byte_literals_are_parsed_for_HasDefaultValue EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Simple_DateOnly_literals_are_parsed_for_HasDefaultValue +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Simple_DateTime_literals_are_parsed_for_HasDefaultValue EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Simple_DateTimeOffset_literals_are_parsed_for_HasDefaultValue EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Simple_decimal_literals_are_parsed_for_HasDefaultValue EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Simple_double_literals_are_parsed_for_HasDefaultValue @@ -14282,14 +14299,12 @@ EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Propertie EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableStringToBytes", databaseType: "longbinary", isNullable: True) EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableStringToChar", databaseType: "varchar(1)", isNullable: True) EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableStringToDateTime", databaseType: "datetime", isNullable: True) -EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableStringToDateTimeOffset", databaseType: "datetime", isNullable: True) EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableStringToEnum", databaseType: "integer", isNullable: True) EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableStringToGuid", databaseType: "uniqueidentifier", isNullable: True) EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableStringToNullableBool", databaseType: "smallint", isNullable: True) EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableStringToNullableBytes", databaseType: "longbinary", isNullable: True) EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableStringToNullableChar", databaseType: "varchar(1)", isNullable: True) EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableStringToNullableDateTime", databaseType: "datetime", isNullable: True) -EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableStringToNullableDateTimeOffset", databaseType: "datetime", isNullable: True) EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableStringToNullableEnum", databaseType: "integer", isNullable: True) EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableStringToNullableGuid", databaseType: "uniqueidentifier", isNullable: True) EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableStringToNullableNumber", databaseType: "byte", isNullable: True) @@ -14315,14 +14330,12 @@ EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Propertie EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "StringToBytes", databaseType: "longbinary", isNullable: False) EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "StringToChar", databaseType: "varchar(1)", isNullable: False) EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "StringToDateTime", databaseType: "datetime", isNullable: False) -EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "StringToDateTimeOffset", databaseType: "datetime", isNullable: False) EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "StringToEnum", databaseType: "integer", isNullable: False) EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "StringToGuid", databaseType: "uniqueidentifier", isNullable: False) EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "StringToNullableBool", databaseType: "smallint", isNullable: False) EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "StringToNullableBytes", databaseType: "longbinary", isNullable: False) EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "StringToNullableChar", databaseType: "varchar(1)", isNullable: False) EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "StringToNullableDateTime", databaseType: "datetime", isNullable: False) -EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "StringToNullableDateTimeOffset", databaseType: "datetime", isNullable: False) EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "StringToNullableEnum", databaseType: "integer", isNullable: False) EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "StringToNullableGuid", databaseType: "uniqueidentifier", isNullable: False) EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "StringToNullableNumber", databaseType: "byte", isNullable: 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 70ce8f1..1428886 100644 --- a/test/EFCore.Jet.FunctionalTests/GreenTests/ace_2010_oledb_x86.txt +++ b/test/EFCore.Jet.FunctionalTests/GreenTests/ace_2010_oledb_x86.txt @@ -9297,12 +9297,20 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.Bad_data_error EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.Bad_data_error_handling_null(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.Entity_equality_through_fromsql(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.Entity_equality_through_fromsql(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_Count_used_twice_with_parameters(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_Count_used_twice_with_parameters(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_Count_used_twice_without_parameters(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_Count_used_twice_without_parameters(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_queryable_multiple_composed_with_parameters_and_closure_parameters_interpolated(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_queryable_multiple_composed_with_parameters_and_closure_parameters_interpolated(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_queryable_with_parameters_inline_interpolated(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_queryable_with_parameters_inline_interpolated(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_queryable_with_parameters_interpolated(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_queryable_with_parameters_interpolated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_used_twice_with_parameters(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_used_twice_with_parameters(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_used_twice_without_parameters(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_used_twice_without_parameters(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_with_db_parameter_in_split_query(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_with_db_parameter_in_split_query(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSql_with_inlined_db_parameter_without_name_prefix(async: False) @@ -9327,6 +9335,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_com EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_composed_contains(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_composed_contains2(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_composed_contains2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_composed_with_common_table_expression(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_composed_with_common_table_expression(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_composed_with_nullable_predicate(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_composed_with_nullable_predicate(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_does_not_parameterize_interpolated_string(async: False) @@ -9725,6 +9735,18 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_ EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Correlated_collections_with_funky_orderby_complex_scenario2(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Count_with_optional_navigation_is_translated_to_sql(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Count_with_optional_navigation_is_translated_to_sql(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.DateTimeOffset_DateAdd_AddDays(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.DateTimeOffset_DateAdd_AddDays(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.DateTimeOffset_DateAdd_AddHours(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.DateTimeOffset_DateAdd_AddHours(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.DateTimeOffset_DateAdd_AddMinutes(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.DateTimeOffset_DateAdd_AddMinutes(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.DateTimeOffset_DateAdd_AddMonths(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.DateTimeOffset_DateAdd_AddMonths(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.DateTimeOffset_DateAdd_AddSeconds(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.DateTimeOffset_DateAdd_AddSeconds(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.DateTimeOffset_DateAdd_AddYears(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.DateTimeOffset_DateAdd_AddYears(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.DateTimeOffsetNow_minus_timespan(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.DateTimeOffsetNow_minus_timespan(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Distinct_on_subquery_doesnt_get_lifted(isAsync: False) @@ -10460,12 +10482,32 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_conta EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_contains_on_navigation_with_composite_keys(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_count_subquery_without_collision(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_count_subquery_without_collision(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_DateOnly_AddDays(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_DateOnly_AddDays(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_DateOnly_AddMonths(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_DateOnly_AddMonths(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_DateOnly_AddYears(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_DateOnly_AddYears(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_DateOnly_Day(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_DateOnly_Day(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_DateOnly_DayOfWeek(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_DateOnly_DayOfWeek(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_DateOnly_DayOfYear(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_DateOnly_DayOfYear(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_DateOnly_Month(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_DateOnly_Month(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_DateOnly_Year(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_DateOnly_Year(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_datetimeoffset_day_component(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_datetimeoffset_day_component(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_datetimeoffset_dayofyear_component(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_datetimeoffset_dayofyear_component(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_datetimeoffset_minute_component(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_datetimeoffset_minute_component(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_datetimeoffset_month_component(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_datetimeoffset_month_component(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_datetimeoffset_second_component(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_datetimeoffset_second_component(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_enum_has_flag_subquery_client_eval(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_enum_has_flag_subquery_client_eval(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_enum_has_flag_subquery_with_pushdown(isAsync: False) @@ -10478,6 +10520,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_enum_ EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_enum_has_flag(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_enum(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_enum(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_equals_method_on_nullable_with_object_overload(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_equals_method_on_nullable_with_object_overload(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_has_flag_with_nullable_parameter(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_has_flag_with_nullable_parameter(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_is_properly_lifted_from_subquery_created_by_include(isAsync: False) @@ -10512,8 +10556,26 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_subqu EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_subquery_equality_to_null_without_composite_key(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_TimeOnly_Add_TimeSpan(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_TimeOnly_Add_TimeSpan(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_TimeOnly_AddHours(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_TimeOnly_AddHours(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_TimeOnly_AddMinutes(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_TimeOnly_AddMinutes(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_TimeOnly_Hour(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_TimeOnly_Hour(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_TimeOnly_IsBetween(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_TimeOnly_IsBetween(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_TimeOnly_Minute(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_TimeOnly_Minute(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_TimeOnly_Second(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_TimeOnly_Second(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_TimeOnly_subtract_TimeOnly(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_TimeOnly_subtract_TimeOnly(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_TimeSpan_Hours(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_TimeSpan_Hours(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_TimeSpan_Minutes(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_TimeSpan_Minutes(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_TimeSpan_Seconds(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_TimeSpan_Seconds(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_with_enum_flags_parameter(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_with_enum_flags_parameter(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.IncludeOneToOneJetTest.Include_address @@ -16009,6 +16071,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_annota EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_annotations_do_not_affect_successive_calls(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_composed_contains(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_composed_contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_composed_with_common_table_expression(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_composed_with_common_table_expression(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_composed_with_empty_predicate(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_composed_with_empty_predicate(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_composed_with_predicate(async: False) @@ -16311,6 +16375,18 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlat EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Correlated_collections_with_funky_orderby_complex_scenario2(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Count_with_optional_navigation_is_translated_to_sql(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Count_with_optional_navigation_is_translated_to_sql(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.DateTimeOffset_DateAdd_AddDays(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.DateTimeOffset_DateAdd_AddDays(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.DateTimeOffset_DateAdd_AddHours(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.DateTimeOffset_DateAdd_AddHours(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.DateTimeOffset_DateAdd_AddMinutes(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.DateTimeOffset_DateAdd_AddMinutes(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.DateTimeOffset_DateAdd_AddMonths(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.DateTimeOffset_DateAdd_AddMonths(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.DateTimeOffset_DateAdd_AddSeconds(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.DateTimeOffset_DateAdd_AddSeconds(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.DateTimeOffset_DateAdd_AddYears(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.DateTimeOffset_DateAdd_AddYears(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.DateTimeOffsetNow_minus_timespan(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.DateTimeOffsetNow_minus_timespan(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Distinct_on_subquery_doesnt_get_lifted(async: False) @@ -16858,6 +16934,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_n EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_null_propagation_works_for_multiple_navigations_with_composite_keys(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_null_propagation_works_for_navigations_with_composite_keys(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_null_propagation_works_for_navigations_with_composite_keys(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_required_navigation_on_derived_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_required_navigation_on_derived_type(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_required_navigation_on_the_same_type_with_cast(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_required_navigation_on_the_same_type_with_cast(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Select_Singleton_Navigation_With_Member_Access(async: False) @@ -17042,12 +17120,32 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_co EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_contains_on_navigation_with_composite_keys(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_count_subquery_without_collision(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_count_subquery_without_collision(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_DateOnly_AddDays(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_DateOnly_AddDays(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_DateOnly_AddMonths(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_DateOnly_AddMonths(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_DateOnly_AddYears(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_DateOnly_AddYears(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_DateOnly_Day(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_DateOnly_Day(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_DateOnly_DayOfWeek(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_DateOnly_DayOfWeek(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_DateOnly_DayOfYear(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_DateOnly_DayOfYear(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_DateOnly_Month(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_DateOnly_Month(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_DateOnly_Year(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_DateOnly_Year(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_datetimeoffset_day_component(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_datetimeoffset_day_component(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_datetimeoffset_dayofyear_component(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_datetimeoffset_dayofyear_component(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_datetimeoffset_minute_component(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_datetimeoffset_minute_component(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_datetimeoffset_month_component(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_datetimeoffset_month_component(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_datetimeoffset_second_component(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_datetimeoffset_second_component(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_enum_has_flag_subquery_client_eval(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_enum_has_flag_subquery_client_eval(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_enum_has_flag_subquery_with_pushdown(async: False) @@ -17060,6 +17158,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_en EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_enum_has_flag(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_enum(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_enum(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_equals_method_on_nullable_with_object_overload(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_equals_method_on_nullable_with_object_overload(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_has_flag_with_nullable_parameter(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_has_flag_with_nullable_parameter(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_is_properly_lifted_from_subquery_created_by_include(async: False) @@ -17076,6 +17176,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_nu EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_nullable_enum_with_null_constant(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_nullable_enum_with_nullable_parameter(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_nullable_enum_with_nullable_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_required_navigation_on_derived_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_required_navigation_on_derived_type(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_subquery_boolean_with_pushdown(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_subquery_boolean_with_pushdown(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_subquery_boolean(async: False) @@ -17092,8 +17194,26 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_su EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_subquery_equality_to_null_without_composite_key(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_TimeOnly_Add_TimeSpan(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_TimeOnly_Add_TimeSpan(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_TimeOnly_AddHours(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_TimeOnly_AddHours(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_TimeOnly_AddMinutes(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_TimeOnly_AddMinutes(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_TimeOnly_Hour(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_TimeOnly_Hour(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_TimeOnly_IsBetween(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_TimeOnly_IsBetween(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_TimeOnly_Minute(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_TimeOnly_Minute(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_TimeOnly_Second(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_TimeOnly_Second(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_TimeOnly_subtract_TimeOnly(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_TimeOnly_subtract_TimeOnly(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_TimeSpan_Hours(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_TimeSpan_Hours(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_TimeSpan_Minutes(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_TimeSpan_Minutes(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_TimeSpan_Seconds(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_TimeSpan_Seconds(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_with_enum_flags_parameter(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_with_enum_flags_parameter(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCManyToManyNoTrackingQueryJetTest.Check_all_tests_overridden @@ -17525,6 +17645,10 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Inclu EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_without_inheritance_with_filter(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_without_inheritance(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_reference_without_inheritance(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_self_reference_with_inheritance_reverse(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_self_reference_with_inheritance_reverse(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_self_reference_with_inheritance(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Include_self_reference_with_inheritance(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_collection_reference_on_non_entity_base_split(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_collection_reference_on_non_entity_base_split(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCRelationshipsQueryJetTest.Nested_include_collection_reference_on_non_entity_base(async: False) @@ -17907,6 +18031,18 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlat EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Correlated_collections_with_funky_orderby_complex_scenario2(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Count_with_optional_navigation_is_translated_to_sql(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Count_with_optional_navigation_is_translated_to_sql(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.DateTimeOffset_DateAdd_AddDays(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.DateTimeOffset_DateAdd_AddDays(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.DateTimeOffset_DateAdd_AddHours(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.DateTimeOffset_DateAdd_AddHours(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.DateTimeOffset_DateAdd_AddMinutes(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.DateTimeOffset_DateAdd_AddMinutes(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.DateTimeOffset_DateAdd_AddMonths(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.DateTimeOffset_DateAdd_AddMonths(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.DateTimeOffset_DateAdd_AddSeconds(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.DateTimeOffset_DateAdd_AddSeconds(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.DateTimeOffset_DateAdd_AddYears(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.DateTimeOffset_DateAdd_AddYears(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.DateTimeOffsetNow_minus_timespan(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.DateTimeOffsetNow_minus_timespan(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Distinct_on_subquery_doesnt_get_lifted(async: False) @@ -18640,12 +18776,32 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_co EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_contains_on_navigation_with_composite_keys(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_count_subquery_without_collision(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_count_subquery_without_collision(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_DateOnly_AddDays(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_DateOnly_AddDays(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_DateOnly_AddMonths(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_DateOnly_AddMonths(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_DateOnly_AddYears(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_DateOnly_AddYears(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_DateOnly_Day(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_DateOnly_Day(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_DateOnly_DayOfWeek(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_DateOnly_DayOfWeek(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_DateOnly_DayOfYear(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_DateOnly_DayOfYear(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_DateOnly_Month(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_DateOnly_Month(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_DateOnly_Year(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_DateOnly_Year(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_datetimeoffset_day_component(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_datetimeoffset_day_component(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_datetimeoffset_dayofyear_component(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_datetimeoffset_dayofyear_component(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_datetimeoffset_minute_component(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_datetimeoffset_minute_component(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_datetimeoffset_month_component(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_datetimeoffset_month_component(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_datetimeoffset_second_component(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_datetimeoffset_second_component(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_enum_has_flag_subquery_client_eval(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_enum_has_flag_subquery_client_eval(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_enum_has_flag_subquery_with_pushdown(async: False) @@ -18658,6 +18814,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_en EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_enum_has_flag(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_enum(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_enum(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_equals_method_on_nullable_with_object_overload(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_equals_method_on_nullable_with_object_overload(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_has_flag_with_nullable_parameter(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_has_flag_with_nullable_parameter(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_is_properly_lifted_from_subquery_created_by_include(async: False) @@ -18692,8 +18850,26 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_su EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_subquery_equality_to_null_without_composite_key(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_TimeOnly_Add_TimeSpan(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_TimeOnly_Add_TimeSpan(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_TimeOnly_AddHours(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_TimeOnly_AddHours(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_TimeOnly_AddMinutes(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_TimeOnly_AddMinutes(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_TimeOnly_Hour(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_TimeOnly_Hour(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_TimeOnly_IsBetween(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_TimeOnly_IsBetween(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_TimeOnly_Minute(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_TimeOnly_Minute(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_TimeOnly_Second(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_TimeOnly_Second(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_TimeOnly_subtract_TimeOnly(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_TimeOnly_subtract_TimeOnly(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_TimeSpan_Hours(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_TimeSpan_Hours(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_TimeSpan_Minutes(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_TimeSpan_Minutes(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_TimeSpan_Seconds(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_TimeSpan_Seconds(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_with_enum_flags_parameter(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_with_enum_flags_parameter(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTInheritanceQueryJetTest.Byte_enum_value_constant_used_in_projection(async: False) @@ -19414,6 +19590,7 @@ EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest. EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Simple_bool_literals_are_parsed_for_HasDefaultValue EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Simple_byte_literals_are_parsed_for_HasDefaultValue EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Simple_DateOnly_literals_are_parsed_for_HasDefaultValue +EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Simple_DateTime_literals_are_parsed_for_HasDefaultValue EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Simple_DateTimeOffset_literals_are_parsed_for_HasDefaultValue EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Simple_decimal_literals_are_parsed_for_HasDefaultValue EntityFrameworkCore.Jet.FunctionalTests.Scaffolding.JetDatabaseModelFactoryTest.Simple_double_literals_are_parsed_for_HasDefaultValue @@ -20237,6 +20414,9 @@ EntityFrameworkCore.Jet.FunctionalTests.Update.NonSharedModelUpdatesJetTest.DbUp EntityFrameworkCore.Jet.FunctionalTests.Update.NonSharedModelUpdatesJetTest.DbUpdateException_Entries_is_correct_with_multiple_inserts(async: True) EntityFrameworkCore.Jet.FunctionalTests.Update.NonSharedModelUpdatesJetTest.Principal_and_dependent_roundtrips_with_cycle_breaking(async: False) EntityFrameworkCore.Jet.FunctionalTests.Update.NonSharedModelUpdatesJetTest.Principal_and_dependent_roundtrips_with_cycle_breaking(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoredProcedureUpdateJetTest.Delete(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Update.StoredProcedureUpdateJetTest.Delete(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Can_insert_and_read_back_with_conversions(valueOrder: [0, 2, 0, 2]) EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Convert_int_non_nulls_to_string_non_nulls_in_provider EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Convert_int_non_nulls_to_string_non_nulls_in_provider_object EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Convert_int_non_nulls_to_string_nulls_in_provider @@ -20340,14 +20520,12 @@ EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Propertie EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableStringToBytes", databaseType: "longbinary", isNullable: True) EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableStringToChar", databaseType: "varchar(1)", isNullable: True) EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableStringToDateTime", databaseType: "datetime", isNullable: True) -EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableStringToDateTimeOffset", databaseType: "datetime", isNullable: True) EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableStringToEnum", databaseType: "integer", isNullable: True) EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableStringToGuid", databaseType: "uniqueidentifier", isNullable: True) EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableStringToNullableBool", databaseType: "smallint", isNullable: True) EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableStringToNullableBytes", databaseType: "longbinary", isNullable: True) EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableStringToNullableChar", databaseType: "varchar(1)", isNullable: True) EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableStringToNullableDateTime", databaseType: "datetime", isNullable: True) -EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableStringToNullableDateTimeOffset", databaseType: "datetime", isNullable: True) EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableStringToNullableEnum", databaseType: "integer", isNullable: True) EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableStringToNullableGuid", databaseType: "uniqueidentifier", isNullable: True) EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "NullableStringToNullableNumber", databaseType: "byte", isNullable: True) @@ -20373,14 +20551,12 @@ EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Propertie EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "StringToBytes", databaseType: "longbinary", isNullable: False) EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "StringToChar", databaseType: "varchar(1)", isNullable: False) EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "StringToDateTime", databaseType: "datetime", isNullable: False) -EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "StringToDateTimeOffset", databaseType: "datetime", isNullable: False) EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "StringToEnum", databaseType: "integer", isNullable: False) EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "StringToGuid", databaseType: "uniqueidentifier", isNullable: False) EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "StringToNullableBool", databaseType: "smallint", isNullable: False) EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "StringToNullableBytes", databaseType: "longbinary", isNullable: False) EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "StringToNullableChar", databaseType: "varchar(1)", isNullable: False) EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "StringToNullableDateTime", databaseType: "datetime", isNullable: False) -EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "StringToNullableDateTimeOffset", databaseType: "datetime", isNullable: False) EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "StringToNullableEnum", databaseType: "integer", isNullable: False) EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "StringToNullableGuid", databaseType: "uniqueidentifier", isNullable: False) EntityFrameworkCore.Jet.FunctionalTests.ValueConvertersEndToEndJetTest.Properties_with_conversions_map_to_appropriately_null_columns(propertyName: "StringToNullableNumber", databaseType: "byte", isNullable: False) diff --git a/test/EFCore.Jet.FunctionalTests/JetQueryTriggersTest.cs b/test/EFCore.Jet.FunctionalTests/JetQueryTriggersTest.cs deleted file mode 100644 index c35ce97..0000000 --- a/test/EFCore.Jet.FunctionalTests/JetQueryTriggersTest.cs +++ /dev/null @@ -1,144 +0,0 @@ -// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -using System; -using System.Linq; -using EntityFrameworkCore.Jet.FunctionalTests.TestUtilities; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.TestUtilities; -using Xunit; - -// ReSharper disable InconsistentNaming -namespace EntityFrameworkCore.Jet.FunctionalTests -{ - public class JetQueryTriggersTest : IClassFixture - { - public JetQueryTriggersTest(JetTriggersFixture fixture) => Fixture = fixture; - - private JetTriggersFixture Fixture { get; } - - [ConditionalFact] - public void Triggers_with_subqueries_run_on_insert_update_and_delete() - { - using (var context = CreateContext()) - { - var product = new Product { Name = "blah" }; - context.Products.Add(product); - context.SaveChanges(); - - Assert.Equal(1, product.StoreUpdated); - - product.Name = "fooh"; - context.SaveChanges(); - - Assert.Equal(2, product.StoreUpdated); - - context.Products.Remove(product); - context.SaveChanges(); - - Assert.Empty(context.Products); - } - } - - [ConditionalFact] - public void Triggers_with_subqueries_work_with_batch_operations() - { - using (var context = CreateContext()) - { - var productToBeUpdated1 = new Product { Name = "u1" }; - var productToBeUpdated2 = new Product { Name = "u2" }; - context.Products.Add(productToBeUpdated1); - context.Products.Add(productToBeUpdated2); - - var productToBeDeleted1 = new Product { Name = "d1" }; - var productToBeDeleted2 = new Product { Name = "d2" }; - context.Products.Add(productToBeDeleted1); - context.Products.Add(productToBeDeleted2); - - context.SaveChanges(); - - var productToBeAdded1 = new Product { Name = "a1" }; - var productToBeAdded2 = new Product { Name = "a2" }; - context.Products.Add(productToBeAdded1); - context.Products.Add(productToBeAdded2); - - productToBeUpdated1.Name = "n1"; - productToBeUpdated2.Name = "n2"; - - context.Products.Remove(productToBeDeleted1); - context.Products.Remove(productToBeDeleted2); - - context.SaveChanges(); - - Assert.Equal(1, productToBeAdded1.StoreUpdated); - Assert.Equal(1, productToBeAdded2.StoreUpdated); - Assert.Equal(2, productToBeUpdated1.StoreUpdated); - Assert.Equal(2, productToBeUpdated2.StoreUpdated); - - var products = context.Products.ToList(); - Assert.Equal(4, products.Count); - - context.Products.RemoveRange(products); - - context.SaveChanges(); - } - } - - protected QueryTriggersContext CreateContext() => (QueryTriggersContext)Fixture.CreateContext(); - - protected class QueryTriggersContext : PoolableDbContext - { - public QueryTriggersContext(DbContextOptions options) - : base(options) - { - } - - public virtual DbSet Products { get; set; } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - modelBuilder.Entity( - eb => - { - eb.Property(e => e.StoreUpdated) - .HasDefaultValue(0) - .ValueGeneratedOnAddOrUpdate(); - eb.ToTable("UpdatedProducts"); - }); - } - } - - protected class Product - { - public virtual int Id { get; set; } - public virtual byte[] Version { get; set; } - public virtual string Name { get; set; } - public virtual int StoreUpdated { get; set; } - } - - public class JetTriggersFixture : SharedStoreFixtureBase - { - protected override string StoreName { get; } = "JetQueryTriggers"; - protected override Type ContextType { get; } = typeof(QueryTriggersContext); - protected override ITestStoreFactory TestStoreFactory => JetTestStoreFactory.Instance; - - protected override void Seed(DbContext context) - { - context.Database.EnsureCreatedResiliently(); - - context.Database.ExecuteSqlRaw( - @" -CREATE TRIGGER TRG_InsertUpdateProduct -ON UpdatedProducts -AFTER INSERT, UPDATE AS -BEGIN - IF @@ROWCOUNT = 0 - return - SET nocount on; - - UPDATE UpdatedProducts set StoreUpdated = StoreUpdated + 1 - WHERE Id IN(SELECT INSERTED.Id FROM INSERTED); -END"); - } - } - } -} diff --git a/test/EFCore.Jet.FunctionalTests/JetTriggersTest.cs b/test/EFCore.Jet.FunctionalTests/JetTriggersTest.cs deleted file mode 100644 index a80445c..0000000 --- a/test/EFCore.Jet.FunctionalTests/JetTriggersTest.cs +++ /dev/null @@ -1,200 +0,0 @@ -// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -using System; -using System.Linq; -using EntityFrameworkCore.Jet.FunctionalTests.TestUtilities; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.TestUtilities; -using Xunit; - -// ReSharper disable ParameterOnlyUsedForPreconditionCheck.Local -// ReSharper disable InconsistentNaming -namespace EntityFrameworkCore.Jet.FunctionalTests -{ - public class JetTriggersTest : IClassFixture - { - public JetTriggersTest(JetTriggersFixture fixture) => Fixture = fixture; - - private JetTriggersFixture Fixture { get; } - - [ConditionalFact] - public void Triggers_run_on_insert_update_and_delete() - { - using (var context = CreateContext()) - { - var product = new Product { Name = "blah" }; - context.Products.Add(product); - context.SaveChanges(); - - var firstVersion = product.Version; - var productBackup = context.ProductBackups.AsNoTracking().Single(); - AssertEqual(product, productBackup); - - product.Name = "fooh"; - context.SaveChanges(); - - Assert.NotEqual(firstVersion, product.Version); - productBackup = context.ProductBackups.AsNoTracking().Single(); - AssertEqual(product, productBackup); - - context.Products.Remove(product); - context.SaveChanges(); - - Assert.Empty(context.Products); - Assert.Empty(context.ProductBackups); - } - } - - [ConditionalFact] - public void Triggers_work_with_batch_operations() - { - using (var context = CreateContext()) - { - var productToBeUpdated1 = new Product { Name = "u1" }; - var productToBeUpdated2 = new Product { Name = "u2" }; - context.Products.Add(productToBeUpdated1); - context.Products.Add(productToBeUpdated2); - - var productToBeDeleted1 = new Product { Name = "d1" }; - var productToBeDeleted2 = new Product { Name = "d2" }; - context.Products.Add(productToBeDeleted1); - context.Products.Add(productToBeDeleted2); - - context.SaveChanges(); - - var productToBeAdded1 = new Product { Name = "a1" }; - var productToBeAdded2 = new Product { Name = "a2" }; - context.Products.Add(productToBeAdded1); - context.Products.Add(productToBeAdded2); - - productToBeUpdated1.Name = "n1"; - productToBeUpdated2.Name = "n2"; - - context.Products.Remove(productToBeDeleted1); - context.Products.Remove(productToBeDeleted2); - - context.SaveChanges(); - - var productBackups = context.ProductBackups.ToList(); - Assert.Equal(4, productBackups.Count); - - AssertEqual(productToBeAdded1, productBackups.Single(p => p.Name == "a1")); - AssertEqual(productToBeAdded2, productBackups.Single(p => p.Name == "a2")); - AssertEqual(productToBeUpdated1, productBackups.Single(p => p.Name == "n1")); - AssertEqual(productToBeUpdated2, productBackups.Single(p => p.Name == "n2")); - - context.Products.RemoveRange(context.Products); - - context.SaveChanges(); - } - } - - private static void AssertEqual(Product product, ProductBackup productBackup) - { - Assert.Equal(product.Id, productBackup.Id); - Assert.Equal(product.Name, productBackup.Name); - Assert.Equal(product.Version, productBackup.Version); - } - - protected TriggersContext CreateContext() => (TriggersContext)Fixture.CreateContext(); - - protected class TriggersContext : PoolableDbContext - { - public TriggersContext(DbContextOptions options) - : base(options) - { - } - - public virtual DbSet Products { get; set; } - public virtual DbSet ProductBackups { get; set; } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - modelBuilder.Entity( - eb => - { - eb.Property(e => e.Version) - .ValueGeneratedOnAddOrUpdate() - .IsConcurrencyToken(); - eb.Ignore(e => e.StoreUpdated); - }); - - modelBuilder.Entity() - .Property(e => e.Id).ValueGeneratedNever(); - } - } - - protected class Product - { - public virtual int Id { get; set; } - public virtual byte[] Version { get; set; } - public virtual string Name { get; set; } - public virtual int StoreUpdated { get; set; } - } - - protected class ProductBackup - { - public virtual int Id { get; set; } - public virtual byte[] Version { get; set; } - public virtual string Name { get; set; } - } - - public class JetTriggersFixture : SharedStoreFixtureBase - { - protected override string StoreName { get; } = "JetTriggers"; - protected override Type ContextType { get; } = typeof(TriggersContext); - protected override ITestStoreFactory TestStoreFactory => JetTestStoreFactory.Instance; - - protected override void Seed(PoolableDbContext context) - { - context.Database.EnsureCreatedResiliently(); - - context.Database.ExecuteSqlRaw( - @" -CREATE TRIGGER TRG_InsertProduct -ON Products -AFTER INSERT AS -BEGIN - IF @@ROWCOUNT = 0 - return - SET nocount on; - - INSERT INTO ProductBackups - SELECT * FROM INSERTED; -END"); - - context.Database.ExecuteSqlRaw( - @" -CREATE TRIGGER TRG_UpdateProduct -ON Products -AFTER UPDATE AS -BEGIN - IF @@ROWCOUNT = 0 - return - SET nocount on; - - UPDATE b - SET b.Name = p.Name, b.Version = p.Version - FROM ProductBackups b - INNER JOIN Products p - ON b.Id = p.Id - WHERE p.Id IN(SELECT INSERTED.Id FROM INSERTED); -END"); - - context.Database.ExecuteSqlRaw( - @" -CREATE TRIGGER TRG_DeleteProduct -ON Products -AFTER DELETE AS -BEGIN - IF @@ROWCOUNT = 0 - return - SET nocount on; - - DELETE FROM ProductBackups - WHERE Id IN(SELECT DELETED.Id FROM DELETED); -END"); - } - } - } -} diff --git a/test/EFCore.Jet.FunctionalTests/Query/FromSqlQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/FromSqlQueryJetTest.cs index e6ff1c9..093ab31 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/FromSqlQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/FromSqlQueryJetTest.cs @@ -12,12 +12,18 @@ using Xunit; using Xunit.Abstractions; using EntityFrameworkCore.Jet.FunctionalTests.TestUtilities; using System.Data.Odbc; +using EntityFrameworkCore.Jet.Storage.Internal; +using Microsoft.EntityFrameworkCore.Storage; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.EntityFrameworkCore.TestModels.Northwind; +using Microsoft.EntityFrameworkCore; +using System.Linq; namespace EntityFrameworkCore.Jet.FunctionalTests.Query; -public class FromSqlQueryJetTest : FromSqlQueryTestBase> +public class FromSqlQueryJetTest : FromSqlQueryTestBase { - public FromSqlQueryJetTest(NorthwindQueryJetFixture fixture, ITestOutputHelper testOutputHelper) + public FromSqlQueryJetTest(FromSqlQueryJetTestFixture fixture, ITestOutputHelper testOutputHelper) : base(fixture) { Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); @@ -1003,4 +1009,81 @@ FROM ( private void AssertSql(params string[] expected) => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); + + public class FromSqlQueryJetTestFixture : NorthwindQueryJetFixture + { + protected override IServiceCollection AddServices(IServiceCollection serviceCollection) + => base.AddServices(serviceCollection) + .AddSingleton() + .AddScoped() + .AddSingleton(); + } + + public override async Task FromSql_used_twice_without_parameters(bool async) + { + await AssertAny( + async, + ss => ((DbSet)ss.Set()) + .FromSqlRaw(NormalizeDelimitersInRawString("SELECT 'ALFKI' AS [CustomerID] FROM `#Dual`")) + .IgnoreQueryFilters(), + ss => ss.Set().Where(x => x.CustomerID == "ALFKI").Select(x => new OrderQuery(x.CustomerID))); + + await AssertAny( + async, + ss => ((DbSet)ss.Set()) + .FromSqlRaw(NormalizeDelimitersInRawString("SELECT 'ALFKI' AS [CustomerID] FROM `#Dual`")) + .IgnoreQueryFilters(), + ss => ss.Set().Where(x => x.CustomerID == "ALFKI").Select(x => new OrderQuery(x.CustomerID))); + } + + public override async Task FromSql_used_twice_with_parameters(bool async) + { + await AssertAny( + async, + ss => ((DbSet)ss.Set()) + .FromSqlRaw(NormalizeDelimitersInRawString("SELECT {0} AS [CustomerID] FROM `#Dual`"), "ALFKI") + .IgnoreQueryFilters(), + ss => ss.Set().Where(x => x.CustomerID == "ALFKI").Select(x => new OrderQuery(x.CustomerID))); + + await AssertAny( + async, + ss => ((DbSet)ss.Set()) + .FromSqlRaw(NormalizeDelimitersInRawString("SELECT {0} AS [CustomerID] FROM `#Dual`"), "ALFKI") + .IgnoreQueryFilters(), + ss => ss.Set().Where(x => x.CustomerID == "ALFKI").Select(x => new OrderQuery(x.CustomerID))); + } + + public override async Task FromSql_Count_used_twice_without_parameters(bool async) + { + await AssertCount( + async, + ss => ((DbSet)ss.Set()) + .FromSqlRaw(NormalizeDelimitersInRawString("SELECT 'ALFKI' AS [CustomerID] FROM `#Dual`")) + .IgnoreQueryFilters(), + ss => ss.Set().Where(x => x.CustomerID == "ALFKI").Select(x => new OrderQuery(x.CustomerID))); + + await AssertCount( + async, + ss => ((DbSet)ss.Set()) + .FromSqlRaw(NormalizeDelimitersInRawString("SELECT 'ALFKI' AS [CustomerID] FROM `#Dual`")) + .IgnoreQueryFilters(), + ss => ss.Set().Where(x => x.CustomerID == "ALFKI").Select(x => new OrderQuery(x.CustomerID))); + } + + public override async Task FromSql_Count_used_twice_with_parameters(bool async) + { + await AssertCount( + async, + ss => ((DbSet)ss.Set()) + .FromSqlRaw(NormalizeDelimitersInRawString("SELECT {0} AS [CustomerID] FROM `#Dual`"), "ALFKI") + .IgnoreQueryFilters(), + ss => ss.Set().Where(x => x.CustomerID == "ALFKI").Select(x => new OrderQuery(x.CustomerID))); + + await AssertCount( + async, + ss => ((DbSet)ss.Set()) + .FromSqlRaw(NormalizeDelimitersInRawString("SELECT {0} AS [CustomerID] FROM `#Dual`"), "ALFKI") + .IgnoreQueryFilters(), + ss => ss.Set().Where(x => x.CustomerID == "ALFKI").Select(x => new OrderQuery(x.CustomerID))); + } } diff --git a/test/EFCore.Jet.FunctionalTests/Query/GearsOfWarQueryJetFixture.cs b/test/EFCore.Jet.FunctionalTests/Query/GearsOfWarQueryJetFixture.cs index 69b7da9..d90788e 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/GearsOfWarQueryJetFixture.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/GearsOfWarQueryJetFixture.cs @@ -24,7 +24,43 @@ namespace EntityFrameworkCore.Jet.FunctionalTests.Query // Drop constraint to workaround Jet limitation regarding compound foreign keys and NULL. context.Database.ExecuteSql($"ALTER TABLE `Gears` DROP CONSTRAINT `FK_Gears_Gears_LeaderNickname_LeaderSquadId`"); - base.Seed(context); + var squads = GearsOfWarData.CreateSquads(); + var missions = GearsOfWarData.CreateMissions(); + var squadMissions = GearsOfWarData.CreateSquadMissions(); + var cities = GearsOfWarData.CreateCities(); + var weapons = GearsOfWarData.CreateWeapons(); + var tags = GearsOfWarData.CreateTags(); + var gears = GearsOfWarData.CreateGears(); + var locustLeaders = GearsOfWarData.CreateLocustLeaders(); + var factions = GearsOfWarData.CreateFactions(); + var locustHighCommands = GearsOfWarData.CreateHighCommands(); + + foreach (var mission in missions) + { + if (mission.Timeline.Year < 100) + { + mission.Timeline = mission.Timeline.AddYears(100); + } + } + + GearsOfWarData.WireUp( + squads, missions, squadMissions, cities, weapons, tags, gears, locustLeaders, factions, locustHighCommands); + + context.Squads.AddRange(squads); + context.Missions.AddRange(missions); + context.SquadMissions.AddRange(squadMissions); + context.Cities.AddRange(cities); + context.Weapons.AddRange(weapons); + context.Tags.AddRange(tags); + context.Gears.AddRange(gears); + context.LocustLeaders.AddRange(locustLeaders); + context.Factions.AddRange(factions); + context.LocustHighCommands.AddRange(locustHighCommands); + context.SaveChanges(); + + GearsOfWarData.WireUp2(locustLeaders, factions); + + context.SaveChanges(); } public override ISetSource GetExpectedData() @@ -33,6 +69,10 @@ namespace EntityFrameworkCore.Jet.FunctionalTests.Query foreach (var mission in data.Missions) { + if (mission.Timeline.Year < 100) + { + mission.Timeline = mission.Timeline.AddYears(100); + } mission.Timeline = JetTestHelpers.GetExpectedValue(mission.Timeline); } diff --git a/test/EFCore.Jet.FunctionalTests/Query/GearsOfWarQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/GearsOfWarQueryJetTest.cs index d182f58..cc1ef00 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/GearsOfWarQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/GearsOfWarQueryJetTest.cs @@ -2587,9 +2587,11 @@ WHERE DATEPART('y', `m`.`Timeline`) = 2 await base.Where_datetimeoffset_day_component(isAsync); AssertSql( - $@"SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Rating`, `m`.`Timeline` + """ +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` -WHERE DATEPART('d', `m`.`Timeline`) = 2"); +WHERE DATEPART('d', `m`.`Timeline`) = 2 +"""); } public override async Task Where_datetimeoffset_hour_component(bool isAsync) @@ -2607,9 +2609,11 @@ WHERE DATEPART('h', `m`.`Timeline`) = 10"); await base.Where_datetimeoffset_minute_component(isAsync); AssertSql( - $@"SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Rating`, `m`.`Timeline` + """ +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` -WHERE DATEPART('n', `m`.`Timeline`) = 0"); +WHERE DATEPART('n', `m`.`Timeline`) = 0 +"""); } public override async Task Where_datetimeoffset_second_component(bool isAsync) @@ -2617,9 +2621,11 @@ WHERE DATEPART('n', `m`.`Timeline`) = 0"); await base.Where_datetimeoffset_second_component(isAsync); AssertSql( - $@"SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Rating`, `m`.`Timeline` + """ +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` -WHERE DATEPART('s', `m`.`Timeline`) = 0"); +WHERE DATEPART('s', `m`.`Timeline`) = 0 +"""); } public override async Task Where_datetimeoffset_millisecond_component(bool isAsync) @@ -2646,8 +2652,10 @@ FROM `Missions` AS `m`"); await base.DateTimeOffset_DateAdd_AddDays(isAsync); AssertSql( - $@"SELECT DATEADD('d', CAST(1.0E0 AS int), `m`.`Timeline`) -FROM `Missions` AS `m`"); + """ +SELECT DATEADD('d', 1.0, `m`.`Timeline`) +FROM `Missions` AS `m` +"""); } public override async Task DateTimeOffset_DateAdd_AddHours(bool isAsync) @@ -2655,8 +2663,10 @@ FROM `Missions` AS `m`"); await base.DateTimeOffset_DateAdd_AddHours(isAsync); AssertSql( - $@"SELECT DATEADD('h', CAST(1.0E0 AS int), `m`.`Timeline`) -FROM `Missions` AS `m`"); + """ +SELECT DATEADD('h', 1.0, `m`.`Timeline`) +FROM `Missions` AS `m` +"""); } public override async Task DateTimeOffset_DateAdd_AddMinutes(bool isAsync) @@ -2664,8 +2674,10 @@ FROM `Missions` AS `m`"); await base.DateTimeOffset_DateAdd_AddMinutes(isAsync); AssertSql( - $@"SELECT DATEADD('n', CAST(1.0E0 AS int), `m`.`Timeline`) -FROM `Missions` AS `m`"); + """ +SELECT DATEADD('n', 1.0, `m`.`Timeline`) +FROM `Missions` AS `m` +"""); } public override async Task DateTimeOffset_DateAdd_AddSeconds(bool isAsync) @@ -2673,8 +2685,10 @@ FROM `Missions` AS `m`"); await base.DateTimeOffset_DateAdd_AddSeconds(isAsync); AssertSql( - $@"SELECT DATEADD('s', CAST(1.0E0 AS int), `m`.`Timeline`) -FROM `Missions` AS `m`"); + """ +SELECT DATEADD('s', 1.0, `m`.`Timeline`) +FROM `Missions` AS `m` +"""); } public override async Task DateTimeOffset_DateAdd_AddMilliseconds(bool isAsync) @@ -8957,8 +8971,8 @@ FROM `Gears` AS `g` await base.DateTimeOffset_DateAdd_AddYears(async); AssertSql( - """ -SELECT DATEADD(year, CAST(1 AS int), `m`.`Timeline`) + """ +SELECT DATEADD('yyyy', 1, `m`.`Timeline`) FROM `Missions` AS `m` """); } diff --git a/test/EFCore.Jet.FunctionalTests/Query/TPCGearsOfWarQueryJetFixture.cs b/test/EFCore.Jet.FunctionalTests/Query/TPCGearsOfWarQueryJetFixture.cs index 97d4393..0fa7d85 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/TPCGearsOfWarQueryJetFixture.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/TPCGearsOfWarQueryJetFixture.cs @@ -26,7 +26,43 @@ public class TPCGearsOfWarQueryJetFixture : TPCGearsOfWarQueryRelationalFixture // Drop constraint to workaround Jet limitation regarding compound foreign keys and NULL. context.Database.ExecuteSql($"ALTER TABLE `Officers` DROP CONSTRAINT `FK_Officers_Officers_LeaderNickname_LeaderSquadId`"); - base.Seed(context); + var squads = GearsOfWarData.CreateSquads(); + var missions = GearsOfWarData.CreateMissions(); + var squadMissions = GearsOfWarData.CreateSquadMissions(); + var cities = GearsOfWarData.CreateCities(); + var weapons = GearsOfWarData.CreateWeapons(); + var tags = GearsOfWarData.CreateTags(); + var gears = GearsOfWarData.CreateGears(); + var locustLeaders = GearsOfWarData.CreateLocustLeaders(); + var factions = GearsOfWarData.CreateFactions(); + var locustHighCommands = GearsOfWarData.CreateHighCommands(); + + foreach (var mission in missions) + { + if (mission.Timeline.Year < 100) + { + mission.Timeline = mission.Timeline.AddYears(100); + } + } + + GearsOfWarData.WireUp( + squads, missions, squadMissions, cities, weapons, tags, gears, locustLeaders, factions, locustHighCommands); + + context.Squads.AddRange(squads); + context.Missions.AddRange(missions); + context.SquadMissions.AddRange(squadMissions); + context.Cities.AddRange(cities); + context.Weapons.AddRange(weapons); + context.Tags.AddRange(tags); + context.Gears.AddRange(gears); + context.LocustLeaders.AddRange(locustLeaders); + context.Factions.AddRange(factions); + context.LocustHighCommands.AddRange(locustHighCommands); + context.SaveChanges(); + + GearsOfWarData.WireUp2(locustLeaders, factions); + + context.SaveChanges(); } public override ISetSource GetExpectedData() @@ -35,6 +71,10 @@ public class TPCGearsOfWarQueryJetFixture : TPCGearsOfWarQueryRelationalFixture foreach (var mission in data.Missions) { + if (mission.Timeline.Year < 100) + { + mission.Timeline = mission.Timeline.AddYears(100); + } mission.Timeline = JetTestHelpers.GetExpectedValue(mission.Timeline); } diff --git a/test/EFCore.Jet.FunctionalTests/Query/TPCGearsOfWarQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/TPCGearsOfWarQueryJetTest.cs index 842c6f0..79276c6 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/TPCGearsOfWarQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/TPCGearsOfWarQueryJetTest.cs @@ -3762,10 +3762,10 @@ WHERE DATEPART('y', `m`.`Timeline`) = 2 await base.Where_datetimeoffset_day_component(async); AssertSql( -""" -SELECT [m].[Id], [m].[CodeName], [m].[Duration], [m].[Rating], [m].[Timeline] -FROM [Missions] AS [m] -WHERE DATEPART(day, [m].[Timeline]) = 2 + """ +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +FROM `Missions` AS `m` +WHERE DATEPART('d', `m`.`Timeline`) = 2 """); } @@ -3786,10 +3786,10 @@ WHERE DATEPART(hour, [m].[Timeline]) = 10 await base.Where_datetimeoffset_minute_component(async); AssertSql( -""" -SELECT [m].[Id], [m].[CodeName], [m].[Duration], [m].[Rating], [m].[Timeline] -FROM [Missions] AS [m] -WHERE DATEPART(minute, [m].[Timeline]) = 0 + """ +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +FROM `Missions` AS `m` +WHERE DATEPART('n', `m`.`Timeline`) = 0 """); } @@ -3798,10 +3798,10 @@ WHERE DATEPART(minute, [m].[Timeline]) = 0 await base.Where_datetimeoffset_second_component(async); AssertSql( -""" -SELECT [m].[Id], [m].[CodeName], [m].[Duration], [m].[Rating], [m].[Timeline] -FROM [Missions] AS [m] -WHERE DATEPART(second, [m].[Timeline]) = 0 + """ +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +FROM `Missions` AS `m` +WHERE DATEPART('s', `m`.`Timeline`) = 0 """); } @@ -3822,9 +3822,9 @@ WHERE DATEPART(millisecond, [m].[Timeline]) = 0 await base.DateTimeOffset_DateAdd_AddMonths(async); AssertSql( -""" -SELECT DATEADD(month, CAST(1 AS int), [m].[Timeline]) -FROM [Missions] AS [m] + """ +SELECT DATEADD('m', 1, `m`.`Timeline`) +FROM `Missions` AS `m` """); } @@ -3833,9 +3833,9 @@ FROM [Missions] AS [m] await base.DateTimeOffset_DateAdd_AddDays(async); AssertSql( -""" -SELECT DATEADD(day, CAST(1.0E0 AS int), [m].[Timeline]) -FROM [Missions] AS [m] + """ +SELECT DATEADD('d', 1.0, `m`.`Timeline`) +FROM `Missions` AS `m` """); } @@ -3844,9 +3844,9 @@ FROM [Missions] AS [m] await base.DateTimeOffset_DateAdd_AddHours(async); AssertSql( -""" -SELECT DATEADD(hour, CAST(1.0E0 AS int), [m].[Timeline]) -FROM [Missions] AS [m] + """ +SELECT DATEADD('h', 1.0, `m`.`Timeline`) +FROM `Missions` AS `m` """); } @@ -3855,9 +3855,9 @@ FROM [Missions] AS [m] await base.DateTimeOffset_DateAdd_AddMinutes(async); AssertSql( -""" -SELECT DATEADD(minute, CAST(1.0E0 AS int), [m].[Timeline]) -FROM [Missions] AS [m] + """ +SELECT DATEADD('n', 1.0, `m`.`Timeline`) +FROM `Missions` AS `m` """); } @@ -3866,9 +3866,9 @@ FROM [Missions] AS [m] await base.DateTimeOffset_DateAdd_AddSeconds(async); AssertSql( -""" -SELECT DATEADD(second, CAST(1.0E0 AS int), [m].[Timeline]) -FROM [Missions] AS [m] + """ +SELECT DATEADD('s', 1.0, `m`.`Timeline`) +FROM `Missions` AS `m` """); } @@ -4852,7 +4852,7 @@ LEFT JOIN ( 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 `t0` ON `t`.`DefeatedByNickname` = `t0`.`Nickname` AND CLNG(`t`.`DefeatedBySquadId`) = `t0`.`SquadId` +) AS `t0` ON `t`.`DefeatedByNickname` = `t0`.`Nickname` AND IIF(`t`.`DefeatedBySquadId` IS NULL, NULL, CLNG(`t`.`DefeatedBySquadId`)) = `t0`.`SquadId` """); } @@ -4876,7 +4876,7 @@ LEFT JOIN ( 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 `t0` ON `t`.`DefeatedByNickname` = `t0`.`Nickname` AND CLNG(`t`.`DefeatedBySquadId`) = `t0`.`SquadId`) +) AS `t0` ON `t`.`DefeatedByNickname` = `t0`.`Nickname` AND IIF(`t`.`DefeatedBySquadId` IS NULL, NULL, CLNG(`t`.`DefeatedBySquadId`)) = `t0`.`SquadId`) LEFT JOIN `Squads` AS `s` ON `t0`.`SquadId` = `s`.`Id` """); } @@ -4901,7 +4901,7 @@ LEFT JOIN ( 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 `t0` ON `t`.`DefeatedByNickname` = `t0`.`Nickname` AND CLNG(`t`.`DefeatedBySquadId`) = `t0`.`SquadId`) +) AS `t0` ON `t`.`DefeatedByNickname` = `t0`.`Nickname` AND IIF(`t`.`DefeatedBySquadId` IS NULL, NULL, CLNG(`t`.`DefeatedBySquadId`)) = `t0`.`SquadId`) LEFT JOIN ( SELECT `t2`.`Nickname`, `t2`.`SquadId`, `t2`.`AssignedCityName`, `t2`.`CityOfBirthName`, `t2`.`FullName`, `t2`.`HasSoulPatch`, `t2`.`LeaderNickname`, `t2`.`LeaderSquadId`, `t2`.`Rank`, `t2`.`Discriminator`, `c`.`Name`, `c`.`Location`, `c`.`Nation` FROM ( @@ -4937,7 +4937,7 @@ LEFT JOIN ( 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 `t0` ON `t`.`DefeatedByNickname` = `t0`.`Nickname` AND CLNG(`t`.`DefeatedBySquadId`) = `t0`.`SquadId` +) AS `t0` ON `t`.`DefeatedByNickname` = `t0`.`Nickname` AND IIF(`t`.`DefeatedBySquadId` IS NULL, NULL, CLNG(`t`.`DefeatedBySquadId`)) = `t0`.`SquadId` """); } @@ -4961,7 +4961,7 @@ LEFT JOIN ( 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 `t0` ON `t`.`DefeatedByNickname` = `t0`.`Nickname` AND CLNG(`t`.`DefeatedBySquadId`) = `t0`.`SquadId` +) AS `t0` ON `t`.`DefeatedByNickname` = `t0`.`Nickname` AND IIF(`t`.`DefeatedBySquadId` IS NULL, NULL, CLNG(`t`.`DefeatedBySquadId`)) = `t0`.`SquadId` """); } @@ -4985,7 +4985,7 @@ LEFT JOIN ( 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 `t0` ON `t`.`DefeatedByNickname` = `t0`.`Nickname` AND CLNG(`t`.`DefeatedBySquadId`) = `t0`.`SquadId` +) AS `t0` ON `t`.`DefeatedByNickname` = `t0`.`Nickname` AND IIF(`t`.`DefeatedBySquadId` IS NULL, NULL, CLNG(`t`.`DefeatedBySquadId`)) = `t0`.`SquadId` """); } @@ -5189,7 +5189,7 @@ LEFT JOIN ( 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 `t0` ON `t`.`DefeatedByNickname` = `t0`.`Nickname` AND CLNG(`t`.`DefeatedBySquadId`) = `t0`.`SquadId` + ) AS `t0` ON `t`.`DefeatedByNickname` = `t0`.`Nickname` AND IIF(`t`.`DefeatedBySquadId` IS NULL, NULL, CLNG(`t`.`DefeatedBySquadId`)) = `t0`.`SquadId` ) AS `t1` ON `l`.`Id` = `t1`.`LocustHordeId` ORDER BY `l`.`Id`, `t1`.`Name`, `t1`.`Nickname` """); @@ -6712,7 +6712,7 @@ FROM ( 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 `t0` ON `t`.`DefeatedByNickname` = `t0`.`Nickname` AND CLNG(`t`.`DefeatedBySquadId`) = `t0`.`SquadId`) + ) AS `t0` ON `t`.`DefeatedByNickname` = `t0`.`Nickname` AND IIF(`t`.`DefeatedBySquadId` IS NULL, NULL, CLNG(`t`.`DefeatedBySquadId`)) = `t0`.`SquadId`) LEFT JOIN `Tags` AS `t1` ON (`t0`.`Nickname` = `t1`.`GearNickName` OR (`t0`.`Nickname` IS NULL AND `t1`.`GearNickName` IS NULL)) AND (`t0`.`SquadId` = `t1`.`GearSquadId` OR (`t0`.`SquadId` IS NULL AND `t1`.`GearSquadId` IS NULL)) ORDER BY `t1`.`Note` ) AS `t2` @@ -6726,16 +6726,16 @@ ORDER BY `t2`.`Note`, `t2`.`Name`, `t2`.`Nickname`, `t2`.`SquadId`, `t2`.`Id` await base.Select_required_navigation_on_derived_type(async); AssertSql( -""" -SELECT [l].[Name] + """ +SELECT `l`.`Name` FROM ( - SELECT NULL AS [HighCommandId] - FROM [LocustLeaders] AS [l0] + SELECT CVar(NULL) AS `HighCommandId` + FROM `LocustLeaders` AS `l0` UNION ALL - SELECT [l1].[HighCommandId] - FROM [LocustCommanders] AS [l1] -) AS [t] -LEFT JOIN [LocustHighCommands] AS [l] ON [t].[HighCommandId] = [l].[Id] + SELECT `l1`.`HighCommandId` + FROM `LocustCommanders` AS `l1` +) AS `t` +LEFT JOIN `LocustHighCommands` AS `l` ON IIF(`t`.`HighCommandId` IS NULL, NULL, CLNG(`t`.`HighCommandId`)) = `l`.`Id` """); } @@ -6762,17 +6762,17 @@ INNER JOIN `Cities` AS `c` ON `t`.`CityOfBirthName` = `c`.`Name` await base.Where_required_navigation_on_derived_type(async); AssertSql( -""" -SELECT [t].[Name], [t].[LocustHordeId], [t].[ThreatLevel], [t].[ThreatLevelByte], [t].[ThreatLevelNullableByte], [t].[DefeatedByNickname], [t].[DefeatedBySquadId], [t].[HighCommandId], [t].[Discriminator] + """ +SELECT `t`.`Name`, `t`.`LocustHordeId`, `t`.`ThreatLevel`, `t`.`ThreatLevelByte`, `t`.`ThreatLevelNullableByte`, `t`.`DefeatedByNickname`, `t`.`DefeatedBySquadId`, `t`.`HighCommandId`, `t`.`Discriminator` FROM ( - SELECT [l0].[Name], [l0].[LocustHordeId], [l0].[ThreatLevel], [l0].[ThreatLevelByte], [l0].[ThreatLevelNullableByte], NULL AS [DefeatedByNickname], NULL AS [DefeatedBySquadId], NULL AS [HighCommandId], N'LocustLeader' AS [Discriminator] - FROM [LocustLeaders] AS [l0] + SELECT `l0`.`Name`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, NULL AS `DefeatedByNickname`, CVar(NULL) AS `DefeatedBySquadId`, CVar(NULL) AS `HighCommandId`, 'LocustLeader' AS `Discriminator` + FROM `LocustLeaders` AS `l0` UNION ALL - SELECT [l1].[Name], [l1].[LocustHordeId], [l1].[ThreatLevel], [l1].[ThreatLevelByte], [l1].[ThreatLevelNullableByte], [l1].[DefeatedByNickname], [l1].[DefeatedBySquadId], [l1].[HighCommandId], N'LocustCommander' AS [Discriminator] - FROM [LocustCommanders] AS [l1] -) AS [t] -LEFT JOIN [LocustHighCommands] AS [l] ON [t].[HighCommandId] = [l].[Id] -WHERE [l].[IsOperational] = CAST(1 AS bit) + SELECT `l1`.`Name`, `l1`.`LocustHordeId`, `l1`.`ThreatLevel`, `l1`.`ThreatLevelByte`, `l1`.`ThreatLevelNullableByte`, `l1`.`DefeatedByNickname`, `l1`.`DefeatedBySquadId`, `l1`.`HighCommandId`, 'LocustCommander' AS `Discriminator` + FROM `LocustCommanders` AS `l1` +) AS `t` +LEFT JOIN `LocustHighCommands` AS `l` ON IIF(`t`.`HighCommandId` IS NULL, NULL, CLNG(`t`.`HighCommandId`)) = `l`.`Id` +WHERE `l`.`IsOperational` = TRUE """); } @@ -11029,7 +11029,7 @@ ORDER BY [t].[Nickname], [t].[SquadId], [t0].[Nickname] await base.Accessing_derived_property_using_hard_and_soft_cast(async); AssertSql( - """ +""" SELECT `t`.`Name`, `t`.`LocustHordeId`, `t`.`ThreatLevel`, `t`.`ThreatLevelByte`, `t`.`ThreatLevelNullableByte`, `t`.`DefeatedByNickname`, `t`.`DefeatedBySquadId`, `t`.`HighCommandId`, `t`.`Discriminator` FROM ( SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, NULL AS `DefeatedByNickname`, CVar(NULL) AS `DefeatedBySquadId`, CVar(NULL) AS `HighCommandId`, 'LocustLeader' AS `Discriminator` @@ -11038,10 +11038,10 @@ FROM ( SELECT `l0`.`Name`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, 'LocustCommander' AS `Discriminator` FROM `LocustCommanders` AS `l0` ) AS `t` -WHERE `t`.`Discriminator` = 'LocustCommander' AND (CLNG(`t`.`HighCommandId`) <> 0 OR CLNG(`t`.`HighCommandId`) IS NULL) +WHERE `t`.`Discriminator` = 'LocustCommander' AND (IIF(`t`.`HighCommandId` IS NULL, NULL, CLNG(`t`.`HighCommandId`)) <> 0 OR IIF(`t`.`HighCommandId` IS NULL, NULL, CLNG(`t`.`HighCommandId`)) IS NULL) """, - // - """ + // + """ SELECT `t`.`Name`, `t`.`LocustHordeId`, `t`.`ThreatLevel`, `t`.`ThreatLevelByte`, `t`.`ThreatLevelNullableByte`, `t`.`DefeatedByNickname`, `t`.`DefeatedBySquadId`, `t`.`HighCommandId`, `t`.`Discriminator` FROM ( SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, NULL AS `DefeatedByNickname`, CVar(NULL) AS `DefeatedBySquadId`, CVar(NULL) AS `HighCommandId`, 'LocustLeader' AS `Discriminator` @@ -11050,7 +11050,7 @@ FROM ( SELECT `l0`.`Name`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, 'LocustCommander' AS `Discriminator` FROM `LocustCommanders` AS `l0` ) AS `t` -WHERE `t`.`Discriminator` = 'LocustCommander' AND (CLNG(`t`.`HighCommandId`) <> 0 OR CLNG(`t`.`HighCommandId`) IS NULL) +WHERE `t`.`Discriminator` = 'LocustCommander' AND (IIF(`t`.`HighCommandId` IS NULL, NULL, CLNG(`t`.`HighCommandId`)) <> 0 OR IIF(`t`.`HighCommandId` IS NULL, NULL, CLNG(`t`.`HighCommandId`)) IS NULL) """); } @@ -11074,7 +11074,7 @@ LEFT JOIN ( 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 `t0` ON `t`.`DefeatedByNickname` = `t0`.`Nickname` AND CLNG(`t`.`DefeatedBySquadId`) = `t0`.`SquadId` +) AS `t0` ON `t`.`DefeatedByNickname` = `t0`.`Nickname` AND IIF(`t`.`DefeatedBySquadId` IS NULL, NULL, CLNG(`t`.`DefeatedBySquadId`)) = `t0`.`SquadId` WHERE `t`.`Name` LIKE '%Queen%' """); } @@ -11891,9 +11891,9 @@ ORDER BY [t].[Nickname], [t].[SquadId], [s].[Id] await base.DateTimeOffset_DateAdd_AddYears(async); AssertSql( -""" -SELECT DATEADD(year, CAST(1 AS int), [m].[Timeline]) -FROM [Missions] AS [m] + """ +SELECT DATEADD('yyyy', 1, `m`.`Timeline`) +FROM `Missions` AS `m` """); } @@ -12166,7 +12166,7 @@ LEFT JOIN ( 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 `t0` ON `t`.`DefeatedByNickname` = `t0`.`Nickname` AND CLNG(`t`.`DefeatedBySquadId`) = `t0`.`SquadId`) +) AS `t0` ON `t`.`DefeatedByNickname` = `t0`.`Nickname` AND IIF(`t`.`DefeatedBySquadId` IS NULL, NULL, CLNG(`t`.`DefeatedBySquadId`)) = `t0`.`SquadId`) LEFT JOIN `Weapons` AS `w` ON `t0`.`FullName` = `w`.`OwnerFullName` WHERE `t`.`Name` LIKE '%Queen%' ORDER BY `t`.`Name`, `t0`.`Nickname`, `t0`.`SquadId` @@ -12869,7 +12869,7 @@ LEFT JOIN ( 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 `t0` ON `t`.`DefeatedByNickname` = `t0`.`Nickname` AND CLNG(`t`.`DefeatedBySquadId`) = `t0`.`SquadId` +) AS `t0` ON `t`.`DefeatedByNickname` = `t0`.`Nickname` AND IIF(`t`.`DefeatedBySquadId` IS NULL, NULL, CLNG(`t`.`DefeatedBySquadId`)) = `t0`.`SquadId` """); } diff --git a/test/EFCore.Jet.FunctionalTests/Query/TPCRelationshipsQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/TPCRelationshipsQueryJetTest.cs index 56d01dd..71961e8 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/TPCRelationshipsQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/TPCRelationshipsQueryJetTest.cs @@ -789,13 +789,13 @@ ORDER BY `t`.`Id`, `t0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id """ SELECT `t`.`Id`, `t`.`Name`, `t`.`BaseId`, `t`.`Discriminator`, `d`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o1`.`BaseInheritanceRelationshipEntityId`, `o1`.`Id`, `o1`.`Name`, `o`.`Id`, `o`.`Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name`, `d`.`Name`, `d`.`BaseId`, `o2`.`BaseInheritanceRelationshipEntityId`, `o2`.`Id`, `o2`.`Name`, `o0`.`Id`, `o0`.`Name`, `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` FROM (((((((( - SELECT `b`.`Id`, `b`.`Name`, NULL AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` + SELECT `b`.`Id`, `b`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` FROM `BaseEntities` AS `b` UNION ALL SELECT `d3`.`Id`, `d3`.`Name`, `d3`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` FROM `DerivedEntities` AS `d3` ) AS `t` -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`Id` = `d`.`BaseId`) +LEFT JOIN `DerivedEntities` AS `d` ON `t`.`Id` = IIF(`d`.`BaseId` IS NULL, NULL, CLNG(`d`.`BaseId`))) LEFT JOIN `OwnedReferences` AS `o` ON `t`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) LEFT JOIN `DerivedEntities` AS `d0` ON `t`.`Id` = `d0`.`Id`) LEFT JOIN `OwnedReferences` AS `o0` ON `d`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) @@ -816,12 +816,12 @@ ORDER BY `t`.`Id`, `d`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o1`.`BaseInheritanceRelationshipEntityId`, `o1`.`Id`, `o1`.`Name`, `o`.`Id`, `o`.`Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `t`.`Name`, `t`.`BaseId`, `t`.`Discriminator`, `o2`.`BaseInheritanceRelationshipEntityId`, `o2`.`Id`, `o2`.`Name`, `o0`.`Id`, `o0`.`Name`, `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` FROM (((((((`DerivedEntities` AS `d` LEFT JOIN ( - SELECT `b`.`Id`, `b`.`Name`, NULL AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` + SELECT `b`.`Id`, `b`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` FROM `BaseEntities` AS `b` UNION ALL SELECT `d3`.`Id`, `d3`.`Name`, `d3`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` FROM `DerivedEntities` AS `d3` -) AS `t` ON `d`.`BaseId` = `t`.`Id`) +) AS `t` ON IIF(`d`.`BaseId` IS NULL, NULL, CLNG(`d`.`BaseId`)) = `t`.`Id`) LEFT JOIN `OwnedReferences` AS `o` ON `d`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) LEFT JOIN `OwnedReferences` AS `o0` ON `t`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) LEFT JOIN `DerivedEntities` AS `d0` ON `t`.`Id` = `d0`.`Id`) diff --git a/test/EFCore.Jet.FunctionalTests/Query/TPTGearsOfWarQueryJetFixture.cs b/test/EFCore.Jet.FunctionalTests/Query/TPTGearsOfWarQueryJetFixture.cs index 673cb4c..de7a4d1 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/TPTGearsOfWarQueryJetFixture.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/TPTGearsOfWarQueryJetFixture.cs @@ -26,7 +26,43 @@ public class TPTGearsOfWarQueryJetFixture : TPTGearsOfWarQueryRelationalFixture // Drop constraint to workaround Jet limitation regarding compound foreign keys and NULL. context.Database.ExecuteSql($"ALTER TABLE `Gears` DROP CONSTRAINT `FK_Gears_Officers_LeaderNickname_LeaderSquadId`"); - base.Seed(context); + var squads = GearsOfWarData.CreateSquads(); + var missions = GearsOfWarData.CreateMissions(); + var squadMissions = GearsOfWarData.CreateSquadMissions(); + var cities = GearsOfWarData.CreateCities(); + var weapons = GearsOfWarData.CreateWeapons(); + var tags = GearsOfWarData.CreateTags(); + var gears = GearsOfWarData.CreateGears(); + var locustLeaders = GearsOfWarData.CreateLocustLeaders(); + var factions = GearsOfWarData.CreateFactions(); + var locustHighCommands = GearsOfWarData.CreateHighCommands(); + + foreach (var mission in missions) + { + if (mission.Timeline.Year < 100) + { + mission.Timeline = mission.Timeline.AddYears(100); + } + } + + GearsOfWarData.WireUp( + squads, missions, squadMissions, cities, weapons, tags, gears, locustLeaders, factions, locustHighCommands); + + context.Squads.AddRange(squads); + context.Missions.AddRange(missions); + context.SquadMissions.AddRange(squadMissions); + context.Cities.AddRange(cities); + context.Weapons.AddRange(weapons); + context.Tags.AddRange(tags); + context.Gears.AddRange(gears); + context.LocustLeaders.AddRange(locustLeaders); + context.Factions.AddRange(factions); + context.LocustHighCommands.AddRange(locustHighCommands); + context.SaveChanges(); + + GearsOfWarData.WireUp2(locustLeaders, factions); + + context.SaveChanges(); } public override ISetSource GetExpectedData() @@ -35,6 +71,10 @@ public class TPTGearsOfWarQueryJetFixture : TPTGearsOfWarQueryRelationalFixture foreach (var mission in data.Missions) { + if (mission.Timeline.Year < 100) + { + mission.Timeline = mission.Timeline.AddYears(100); + } mission.Timeline = JetTestHelpers.GetExpectedValue(mission.Timeline); } diff --git a/test/EFCore.Jet.FunctionalTests/Query/TPTGearsOfWarQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/TPTGearsOfWarQueryJetTest.cs index 66a2ebf..fbdd19a 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/TPTGearsOfWarQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/TPTGearsOfWarQueryJetTest.cs @@ -3013,10 +3013,10 @@ WHERE DATEPART('y', `m`.`Timeline`) = 2 await base.Where_datetimeoffset_day_component(async); AssertSql( -""" -SELECT [m].[Id], [m].[CodeName], [m].[Duration], [m].[Rating], [m].[Timeline] -FROM [Missions] AS [m] -WHERE DATEPART(day, [m].[Timeline]) = 2 + """ +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +FROM `Missions` AS `m` +WHERE DATEPART('d', `m`.`Timeline`) = 2 """); } @@ -3037,10 +3037,10 @@ WHERE DATEPART(hour, [m].[Timeline]) = 10 await base.Where_datetimeoffset_minute_component(async); AssertSql( -""" -SELECT [m].[Id], [m].[CodeName], [m].[Duration], [m].[Rating], [m].[Timeline] -FROM [Missions] AS [m] -WHERE DATEPART(minute, [m].[Timeline]) = 0 + """ +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +FROM `Missions` AS `m` +WHERE DATEPART('n', `m`.`Timeline`) = 0 """); } @@ -3049,10 +3049,10 @@ WHERE DATEPART(minute, [m].[Timeline]) = 0 await base.Where_datetimeoffset_second_component(async); AssertSql( -""" -SELECT [m].[Id], [m].[CodeName], [m].[Duration], [m].[Rating], [m].[Timeline] -FROM [Missions] AS [m] -WHERE DATEPART(second, [m].[Timeline]) = 0 + """ +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +FROM `Missions` AS `m` +WHERE DATEPART('s', `m`.`Timeline`) = 0 """); } @@ -3073,9 +3073,9 @@ WHERE DATEPART(millisecond, [m].[Timeline]) = 0 await base.DateTimeOffset_DateAdd_AddMonths(async); AssertSql( -""" -SELECT DATEADD(month, CAST(1 AS int), [m].[Timeline]) -FROM [Missions] AS [m] + """ +SELECT DATEADD('m', 1, `m`.`Timeline`) +FROM `Missions` AS `m` """); } @@ -3084,9 +3084,9 @@ FROM [Missions] AS [m] await base.DateTimeOffset_DateAdd_AddDays(async); AssertSql( -""" -SELECT DATEADD(day, CAST(1.0E0 AS int), [m].[Timeline]) -FROM [Missions] AS [m] + """ +SELECT DATEADD('d', 1.0, `m`.`Timeline`) +FROM `Missions` AS `m` """); } @@ -3095,9 +3095,9 @@ FROM [Missions] AS [m] await base.DateTimeOffset_DateAdd_AddHours(async); AssertSql( -""" -SELECT DATEADD(hour, CAST(1.0E0 AS int), [m].[Timeline]) -FROM [Missions] AS [m] + """ +SELECT DATEADD('h', 1.0, `m`.`Timeline`) +FROM `Missions` AS `m` """); } @@ -3106,9 +3106,9 @@ FROM [Missions] AS [m] await base.DateTimeOffset_DateAdd_AddMinutes(async); AssertSql( -""" -SELECT DATEADD(minute, CAST(1.0E0 AS int), [m].[Timeline]) -FROM [Missions] AS [m] + """ +SELECT DATEADD('n', 1.0, `m`.`Timeline`) +FROM `Missions` AS `m` """); } @@ -3117,9 +3117,9 @@ FROM [Missions] AS [m] await base.DateTimeOffset_DateAdd_AddSeconds(async); AssertSql( -""" -SELECT DATEADD(second, CAST(1.0E0 AS int), [m].[Timeline]) -FROM [Missions] AS [m] + """ +SELECT DATEADD('s', 1.0, `m`.`Timeline`) +FROM `Missions` AS `m` """); } @@ -9623,10 +9623,9 @@ ORDER BY [g].[Nickname], [g].[SquadId], [s].[Id] await base.DateTimeOffset_DateAdd_AddYears(async); AssertSql( -""" -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` + """ +SELECT DATEADD('yyyy', 1, `m`.`Timeline`) +FROM `Missions` AS `m` """); } diff --git a/test/EFCore.Jet.FunctionalTests/Scaffolding/JetDatabaseModelFactoryTest.cs b/test/EFCore.Jet.FunctionalTests/Scaffolding/JetDatabaseModelFactoryTest.cs index b945147..800313f 100644 --- a/test/EFCore.Jet.FunctionalTests/Scaffolding/JetDatabaseModelFactoryTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Scaffolding/JetDatabaseModelFactoryTest.cs @@ -1135,7 +1135,7 @@ CREATE TABLE MyTable ( @" CREATE TABLE MyTable ( Id int, - A datetime DEFAULT #1973-09-03 12:00:01# + A datetime DEFAULT '1973-09-03 12:00:01' );", Enumerable.Empty(), Enumerable.Empty(), @@ -1144,7 +1144,7 @@ CREATE TABLE MyTable ( var columns = dbModel.Tables.Single().Columns; var column = columns.Single(c => c.Name == "A"); - Assert.Equal("('1973-09-03T12:00:01')", column.DefaultValueSql); + Assert.Equal("'1973-09-03 12:00:01'", column.DefaultValueSql); Assert.Equal(new DateTime(1973, 9, 3, 12, 0, 1, 0, DateTimeKind.Unspecified), column.DefaultValue); }, "DROP TABLE MyTable;"); diff --git a/test/EFCore.Jet.FunctionalTests/TestUtilities/TestRelationalCommandBuilderFactory.cs b/test/EFCore.Jet.FunctionalTests/TestUtilities/TestRelationalCommandBuilderFactory.cs index 99fee8a..42a6340 100644 --- a/test/EFCore.Jet.FunctionalTests/TestUtilities/TestRelationalCommandBuilderFactory.cs +++ b/test/EFCore.Jet.FunctionalTests/TestUtilities/TestRelationalCommandBuilderFactory.cs @@ -107,7 +107,7 @@ namespace EntityFrameworkCore.Jet.FunctionalTests.TestUtilities IReadOnlyList parameters) { _realRelationalCommand = new RelationalCommand(dependencies, commandText, parameters); - + _createExceptionFunc = TestEnvironment.DataAccessProviderType == DataAccessProviderType.OleDb ? number => OleDbExceptionFactory.CreateException(number) : number => OdbcExceptionFactory.CreateException(number); @@ -219,7 +219,7 @@ namespace EntityFrameworkCore.Jet.FunctionalTests.TestUtilities RelationalCommandParameterObject parameterObject, Guid commandId, DbCommandMethod commandMethod) - => throw new NotSupportedException(); + => _realRelationalCommand.CreateDbCommand(parameterObject, commandId, commandMethod); public void PopulateFrom(IRelationalCommandTemplate commandTemplate) => _realRelationalCommand.PopulateFrom(commandTemplate); diff --git a/test/EFCore.Jet.FunctionalTests/Update/StoredProcedureUpdateJetTest.cs b/test/EFCore.Jet.FunctionalTests/Update/StoredProcedureUpdateJetTest.cs index e94294c..f2d9135 100644 --- a/test/EFCore.Jet.FunctionalTests/Update/StoredProcedureUpdateJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Update/StoredProcedureUpdateJetTest.cs @@ -217,8 +217,7 @@ AS DELETE FROM [Entity] WHERE [Id] = @Id """ @p0='1' -SET NOCOUNT ON; -EXEC [Entity_Delete] @p0; +EXEC `Entity_Delete` p0; """); } @@ -227,7 +226,7 @@ EXEC [Entity_Delete] @p0; await base.Delete_and_insert( async, """ -CREATE PROCEDURE Entity_Insert(@Name varchar(max), @Id int OUT) +CREATE PROCEDURE Entity_Insert(@Name varchar(255), @Id int OUT) AS BEGIN INSERT INTO [Entity] ([Name]) VALUES (@Name); SET @Id = SCOPE_IDENTITY(); @@ -607,7 +606,7 @@ END; SET NOCOUNT ON; EXEC [Parent_Insert] @p0 OUTPUT, @p1; """, - // +// """ @p2='1' @p3='8' @@ -637,7 +636,7 @@ END SET NOCOUNT ON; EXEC [Parent_Insert] @p0 OUTPUT, @p1; """, - // +// """ @p2='1' @p3='8' diff --git a/test/EFCore.Jet.FunctionalTests/ValueConvertersEndToEndJetTest.cs b/test/EFCore.Jet.FunctionalTests/ValueConvertersEndToEndJetTest.cs index 2f861f8..47782d1 100644 --- a/test/EFCore.Jet.FunctionalTests/ValueConvertersEndToEndJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/ValueConvertersEndToEndJetTest.cs @@ -3,8 +3,11 @@ #nullable enable +using System; using System.Collections.Generic; using System.Linq; +using System.Net.NetworkInformation; +using System.Net; using EntityFrameworkCore.Jet.FunctionalTests.TestUtilities; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; @@ -70,8 +73,8 @@ public class ValueConvertersEndToEndJetTest [InlineData(nameof(ConvertingEntity.StringToNullableChar), "varchar(1)", false)] [InlineData(nameof(ConvertingEntity.StringToDateTime), "datetime", false)] [InlineData(nameof(ConvertingEntity.StringToNullableDateTime), "datetime", false)] - [InlineData(nameof(ConvertingEntity.StringToDateTimeOffset), "datetime", false)] - [InlineData(nameof(ConvertingEntity.StringToNullableDateTimeOffset), "datetime", false)] + //[InlineData(nameof(ConvertingEntity.StringToDateTimeOffset), "datetime", false)] + //[InlineData(nameof(ConvertingEntity.StringToNullableDateTimeOffset), "datetime", false)] [InlineData(nameof(ConvertingEntity.StringToEnum), "integer", false)] [InlineData(nameof(ConvertingEntity.StringToNullableEnum), "integer", false)] [InlineData(nameof(ConvertingEntity.StringToGuid), "uniqueidentifier", false)] @@ -134,8 +137,8 @@ public class ValueConvertersEndToEndJetTest [InlineData(nameof(ConvertingEntity.NullableStringToNullableChar), "varchar(1)", true)] [InlineData(nameof(ConvertingEntity.NullableStringToDateTime), "datetime", true)] [InlineData(nameof(ConvertingEntity.NullableStringToNullableDateTime), "datetime", true)] - [InlineData(nameof(ConvertingEntity.NullableStringToDateTimeOffset), "datetime", true)] - [InlineData(nameof(ConvertingEntity.NullableStringToNullableDateTimeOffset), "datetime", true)] + //[InlineData(nameof(ConvertingEntity.NullableStringToDateTimeOffset), "datetime", true)] + //[InlineData(nameof(ConvertingEntity.NullableStringToNullableDateTimeOffset), "datetime", true)] [InlineData(nameof(ConvertingEntity.NullableStringToEnum), "integer", true)] [InlineData(nameof(ConvertingEntity.NullableStringToNullableEnum), "integer", true)] [InlineData(nameof(ConvertingEntity.NullableStringToGuid), "uniqueidentifier", true)] @@ -228,6 +231,11 @@ WHERE CAST(DATALENGTH(CAST(N'' AS nvarchar(max))) AS int) = 1 b.Property(e => e.ListOfInt).HasDefaultValue(new List()); b.Property(e => e.NullableEnumerableOfInt).HasDefaultValue(Enumerable.Empty()); b.Property(e => e.EnumerableOfInt).HasDefaultValue(Enumerable.Empty()); + + b.Ignore(e => e.StringToDateTimeOffset); + b.Ignore(e => e.StringToNullableDateTimeOffset); + b.Ignore(e => e.NullableStringToDateTimeOffset); + b.Ignore(e => e.NullableStringToNullableDateTimeOffset); }); } }