diff --git a/Dependencies.targets b/Dependencies.targets index d96987a1..30ec259c 100644 --- a/Dependencies.targets +++ b/Dependencies.targets @@ -1,52 +1,50 @@ - [8.0.6,8.0.999] + [9.0.0-preview.7.24405.4,9.0.999] + [9.0.0-preview.7.24405.3,9.0.999] + [9.0.0-preview.7.24405.7,9.0.999] - - + + - + - - - - - - + + + + - - + + - - - - - + + + + + - - - - - + + + + + - - - + \ No newline at end of file diff --git a/Directory.Build.props b/Directory.Build.props index 50dc68af..c6adf6c7 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -8,7 +8,8 @@ CirrusRed Copyright © 2017-$([System.DateTime]::Now.Year) CirrusRed True - latest + 12.0 + enable portable False @@ -26,7 +27,7 @@ net8.0 $(EfCoreTargetFramework) $(EfCoreTargetFramework) - $(JetTargetFramework) + net9.0 $(JetTestTargetFramework)-windows7.0 diff --git a/NuGet.Config b/NuGet.Config index 294f2aa9..2e4ee42e 100644 --- a/NuGet.Config +++ b/NuGet.Config @@ -1,8 +1,7 @@ - - + diff --git a/Version.props b/Version.props index 30b26f1b..82b1d854 100644 --- a/Version.props +++ b/Version.props @@ -15,9 +15,9 @@ Bump-up to the next iteration immediately after a release, so that subsequent daily builds are named correctly. --> - 8.0.0 - rtm - 0 + 9.0.0 + alpha + 1 - $(NoWarn);CS1574;CS1587;CS1591;EF1001 + $(NoWarn);CS1574;CS1587;CS1591;EF1001;NU1903 true diff --git a/src/EFCore.Jet.Data/JetConnection.cs b/src/EFCore.Jet.Data/JetConnection.cs index 9fd714e3..ae531056 100644 --- a/src/EFCore.Jet.Data/JetConnection.cs +++ b/src/EFCore.Jet.Data/JetConnection.cs @@ -98,8 +98,8 @@ public DbProviderFactory DataAccessProviderFactory get => JetFactory?.InnerFactory; set { - if (JetFactory != null && JetFactory != value) - throw new InvalidOperationException($"The {DataAccessProviderFactory} property can only be set once."); + if (State != ConnectionState.Closed) + throw new InvalidOperationException($"The {DataAccessProviderFactory} property can only be set when the connection is closed."); JetFactory = new JetFactory(this, value); } @@ -329,12 +329,12 @@ public override void Open() { // If the connection string is an actual connection string and not just a file path, then we should // be able to deduct the provider from its style. - dataAccessProviderType ??= GetDataAccessProviderType(fileNameOrConnectionString); + dataAccessProviderType = GetDataAccessProviderType(fileNameOrConnectionString); connectionString = fileNameOrConnectionString; } else { - dataAccessProviderType ??= JetConfiguration.DefaultDataAccessProviderType; + dataAccessProviderType = JetConfiguration.DefaultDataAccessProviderType; if (IsFileName(fileNameOrConnectionString)) { @@ -352,7 +352,7 @@ public override void Open() } } - DataAccessProviderFactory ??= JetFactory.Instance.GetDataAccessProviderFactory(dataAccessProviderType.Value); + DataAccessProviderFactory = JetFactory.Instance.GetDataAccessProviderFactory(dataAccessProviderType.Value); // It is possible, that a connection string was provided, that left out the actual ACE/Jet provider // information, but is in a distinctive style (ODBC or OLE DB) anyway. @@ -634,8 +634,9 @@ public static bool DatabaseExists(string fileNameOrConnectionString) return File.Exists(fileName); } - public static DataAccessProviderType GetDataAccessProviderType(string connectionString) + public static DataAccessProviderType GetDataAccessProviderType(string? connectionString) { + if (string.IsNullOrEmpty(connectionString)) return DataAccessProviderType.Unconfgiured; var isOleDb = Regex.IsMatch(connectionString, @"^(?:.*;)?\s*Provider\s*=\s*\w+", RegexOptions.IgnoreCase); var isOdbc = Regex.IsMatch(connectionString, @"^(?:.*;)?Driver\s*=\s*\{?\w+\}?", RegexOptions.IgnoreCase); @@ -796,10 +797,10 @@ public static KeyValuePair[] GetMostRecentCompatibleProviders(D return providers.ToArray(); }, true); - public static bool IsConnectionString(string fileNameOrConnectionString) + public static bool IsConnectionString(string? fileNameOrConnectionString) => JetStoreDatabaseHandling.IsConnectionString(fileNameOrConnectionString); - public static bool IsFileName(string fileNameOrConnectionString) + public static bool IsFileName(string? fileNameOrConnectionString) => JetStoreDatabaseHandling.IsFileName(fileNameOrConnectionString); } } \ No newline at end of file diff --git a/src/EFCore.Jet.Data/JetDataReader.cs b/src/EFCore.Jet.Data/JetDataReader.cs index 2befa47b..9a4d777b 100644 --- a/src/EFCore.Jet.Data/JetDataReader.cs +++ b/src/EFCore.Jet.Data/JetDataReader.cs @@ -197,17 +197,32 @@ public DateOnly GetDateOnly(int ordinal) public TimeOnly GetTimeOnly(int ordinal) { - var value = GetDateTime(ordinal); - return TimeOnly.FromDateTime(value); + var value = _wrappedDataReader.GetValue(ordinal); + + if (JetConfiguration.UseDefaultValueOnDBNullConversionError && + Convert.IsDBNull(value)) + return default; + + if (value is DateTime dateTime) + { + return TimeOnly.FromDateTime(dateTime); + } + return (TimeOnly)value; } public virtual TimeSpan GetTimeSpan(int ordinal) { - var dateTime = GetDateTime(ordinal); - return JetConfiguration.UseDefaultValueOnDBNullConversionError && - dateTime == default - ? default - : dateTime - JetConfiguration.TimeSpanOffset; + var value = _wrappedDataReader.GetValue(ordinal); + + if (JetConfiguration.UseDefaultValueOnDBNullConversionError && + Convert.IsDBNull(value)) + return default; + + if (value is DateTime dateTime) + { + return TimeSpan.FromTicks(dateTime.Ticks - JetConfiguration.TimeSpanOffset.Ticks); + } + return (TimeSpan)value; } public virtual DateTimeOffset GetDateTimeOffset(int ordinal) diff --git a/src/EFCore.Jet.Data/JetStoreSchemaDefinition/JetInformationSchema.cs b/src/EFCore.Jet.Data/JetStoreSchemaDefinition/JetInformationSchema.cs index 148877ea..68e6c3b1 100644 --- a/src/EFCore.Jet.Data/JetStoreSchemaDefinition/JetInformationSchema.cs +++ b/src/EFCore.Jet.Data/JetStoreSchemaDefinition/JetInformationSchema.cs @@ -17,7 +17,10 @@ static JetInformationSchema() } public static bool TryGetDataReaderFromInformationSchemaCommand(JetCommand command, out DbDataReader dataReader) - => (dataReader = GetDbDataReaderFromSimpleStatement(command)) != null; + { + dataReader = GetDbDataReaderFromSimpleStatement(command); + return dataReader != null; + } private static DbDataReader GetDbDataReaderFromSimpleStatement(JetCommand command) { diff --git a/src/EFCore.Jet.Data/JetStoreSchemaDefinition/JetStoreDatabaseHandling.cs b/src/EFCore.Jet.Data/JetStoreSchemaDefinition/JetStoreDatabaseHandling.cs index 91d26e63..1c9c78bc 100644 --- a/src/EFCore.Jet.Data/JetStoreSchemaDefinition/JetStoreDatabaseHandling.cs +++ b/src/EFCore.Jet.Data/JetStoreSchemaDefinition/JetStoreDatabaseHandling.cs @@ -195,10 +195,10 @@ public static string ExtractFileNameFromConnectionString(string connectionString return connectionString; } - public static bool IsConnectionString(string connectionString) - => _regExIsConnectionString.IsMatch(connectionString); + public static bool IsConnectionString(string? connectionString) + => !string.IsNullOrWhiteSpace(connectionString) && _regExIsConnectionString.IsMatch(connectionString); - public static bool IsFileName(string fileName) + public static bool IsFileName(string? fileName) => !string.IsNullOrWhiteSpace(fileName) && !IsConnectionString(fileName) && !fileName.ToCharArray() diff --git a/src/EFCore.Jet/EFCore.Jet.csproj b/src/EFCore.Jet/EFCore.Jet.csproj index ee2e6b56..0767da12 100644 --- a/src/EFCore.Jet/EFCore.Jet.csproj +++ b/src/EFCore.Jet/EFCore.Jet.csproj @@ -7,6 +7,7 @@ EntityFrameworkCore.Jet AnyCPU;x86;x64 enable + $(NoWarn);EF9100 diff --git a/src/EFCore.Jet/Extensions/JetDbContextOptionsBuilderExtensions.cs b/src/EFCore.Jet/Extensions/JetDbContextOptionsBuilderExtensions.cs index 03e45017..d5275ce2 100644 --- a/src/EFCore.Jet/Extensions/JetDbContextOptionsBuilderExtensions.cs +++ b/src/EFCore.Jet/Extensions/JetDbContextOptionsBuilderExtensions.cs @@ -18,43 +18,13 @@ namespace Microsoft.EntityFrameworkCore /// public static class JetDbContextOptionsBuilderExtensions { - #region Connection String - - /// - /// Configures the context to connect to a Microsoft Jet database. - /// - /// The builder being used to configure the context. - /// The file name or connection string of the database to connect to. - /// If just a file name is supplied, the default data access provider type as defined by - /// `JetConfiguration.DefaultDataAccessProviderType` is being used. If a connection string is supplied, the - /// underlying data access provider (ODBC or OLE DB) will be inferred from the style of the connection string. - /// In case the connection string does not specify an Access driver (ODBC) or ACE/Jet provider (OLE DB), the - /// highest version of all compatible installed ones is being used. - /// An optional action to allow additional Jet specific configuration. - /// The options builder so that further configuration can be chained. - public static DbContextOptionsBuilder UseJet( - [NotNull] this DbContextOptionsBuilder optionsBuilder, - [NotNull] string fileNameOrConnectionString, - [CanBeNull] Action? jetOptionsAction = null) - where TContext : DbContext - { - Check.NotNull(optionsBuilder, nameof(optionsBuilder)); - Check.NotEmpty(fileNameOrConnectionString, nameof(fileNameOrConnectionString)); - - return (DbContextOptionsBuilder)UseJet((DbContextOptionsBuilder)optionsBuilder, fileNameOrConnectionString, jetOptionsAction); - } - public static DbContextOptionsBuilder UseJet( this DbContextOptionsBuilder optionsBuilder, Action? jetOptionsAction = null) { ((IDbContextOptionsBuilderInfrastructure)optionsBuilder).AddOrUpdateExtension(GetOrCreateExtension(optionsBuilder)); - ConfigureWarnings(optionsBuilder); - - jetOptionsAction?.Invoke(new JetDbContextOptionsBuilder(optionsBuilder)); - - return optionsBuilder; + return ApplyConfiguration(optionsBuilder, jetOptionsAction); } /// @@ -70,13 +40,10 @@ public static DbContextOptionsBuilder UseJet( /// An optional action to allow additional Jet specific configuration. /// The options builder so that further configuration can be chained. public static DbContextOptionsBuilder UseJet( - [NotNull] this DbContextOptionsBuilder optionsBuilder, - [NotNull] string fileNameOrConnectionString, - [CanBeNull] Action? jetOptionsAction = null) + this DbContextOptionsBuilder optionsBuilder, + string? fileNameOrConnectionString, + Action? jetOptionsAction = null) { - Check.NotNull(optionsBuilder, nameof(optionsBuilder)); - Check.NotEmpty(fileNameOrConnectionString, nameof(fileNameOrConnectionString)); - return UseJetCore(optionsBuilder, fileNameOrConnectionString, null, null, jetOptionsAction); } @@ -90,16 +57,12 @@ public static DbContextOptionsBuilder UseJet( /// An optional action to allow additional Jet specific configuration. /// The options builder so that further configuration can be chained. public static DbContextOptionsBuilder UseJet( - [NotNull] this DbContextOptionsBuilder optionsBuilder, - [NotNull] string fileNameOrConnectionString, - [NotNull] DbProviderFactory dataAccessProviderFactory, - [CanBeNull] Action? jetOptionsAction = null) + this DbContextOptionsBuilder optionsBuilder, + string? fileNameOrConnectionString, + DbProviderFactory dataAccessProviderFactory, + Action? jetOptionsAction = null) where TContext : DbContext { - Check.NotNull(optionsBuilder, nameof(optionsBuilder)); - Check.NotEmpty(fileNameOrConnectionString, nameof(fileNameOrConnectionString)); - Check.NotNull(dataAccessProviderFactory, nameof(dataAccessProviderFactory)); - return (DbContextOptionsBuilder)UseJet((DbContextOptionsBuilder)optionsBuilder, fileNameOrConnectionString, dataAccessProviderFactory, jetOptionsAction); } @@ -113,79 +76,68 @@ public static DbContextOptionsBuilder UseJet( /// An optional action to allow additional Jet specific configuration. /// The options builder so that further configuration can be chained. public static DbContextOptionsBuilder UseJet( - [NotNull] this DbContextOptionsBuilder optionsBuilder, - [NotNull] string fileNameOrConnectionString, - [NotNull] DbProviderFactory dataAccessProviderFactory, - [CanBeNull] Action? jetOptionsAction = null) + this DbContextOptionsBuilder optionsBuilder, + string? fileNameOrConnectionString, + DbProviderFactory dataAccessProviderFactory, + Action? jetOptionsAction = null) { - Check.NotNull(optionsBuilder, nameof(optionsBuilder)); - Check.NotEmpty(fileNameOrConnectionString, nameof(fileNameOrConnectionString)); - Check.NotNull(dataAccessProviderFactory, nameof(dataAccessProviderFactory)); - return UseJetCore(optionsBuilder, fileNameOrConnectionString, dataAccessProviderFactory, null, jetOptionsAction); } + // Note: Decision made to use DbConnection not SqlConnection: Issue #772 /// /// Configures the context to connect to a Microsoft Jet database. /// /// The builder being used to configure the context. - /// The file name or connection string of the database to connect to. - /// The type of the data access provider (`Odbc` or `OleDb`) to be used for all - /// data access operations by the Jet connection. + /// + /// An existing to be used to connect to the database. If the connection is + /// in the open state then EF will not open or close the connection. If the connection is in the closed + /// state then EF will open and close the connection as needed. + /// /// An optional action to allow additional Jet specific configuration. /// The options builder so that further configuration can be chained. - public static DbContextOptionsBuilder UseJet( - [NotNull] this DbContextOptionsBuilder optionsBuilder, - [NotNull] string fileNameOrConnectionString, - DataAccessProviderType dataAccessProviderType, - [CanBeNull] Action? jetOptionsAction = null) - where TContext : DbContext - { - Check.NotNull(optionsBuilder, nameof(optionsBuilder)); - Check.NotEmpty(fileNameOrConnectionString, nameof(fileNameOrConnectionString)); - - return (DbContextOptionsBuilder)UseJet((DbContextOptionsBuilder)optionsBuilder, fileNameOrConnectionString, dataAccessProviderType, jetOptionsAction); - } + public static DbContextOptionsBuilder UseJet( + this DbContextOptionsBuilder optionsBuilder, + DbConnection connection, + Action? jetOptionsAction = null) + => UseJet(optionsBuilder, connection, false, jetOptionsAction); + // Note: Decision made to use DbConnection not SqlConnection: Issue #772 /// - /// Configures the context to connect to a Microsoft Jet database. + /// Configures the context to connect to a Jet database. /// - /// The builder being used to configure the context. - /// The file name or connection string of the database to connect to. - /// The type of the data access provider (`Odbc` or `OleDb`) to be used for all - /// data access operations by the Jet connection. - /// An optional action to allow additional Jet specific configuration. - /// The options builder so that further configuration can be chained. + /// The builder being used to configure the context. + /// + /// An existing to be used to connect to the database. If the connection is + /// in the open state then EF will not open or close the connection. If the connection is in the closed + /// state then EF will open and close the connection as needed. + /// + /// + /// If , then EF will take ownership of the connection and will + /// dispose it in the same way it would dispose a connection created by EF. If , then the caller still + /// owns the connection and is responsible for its disposal. + /// + /// An optional action to allow additional SQL Server specific configuration. + /// The options builder so that further configuration can be chained. public static DbContextOptionsBuilder UseJet( - [NotNull] this DbContextOptionsBuilder optionsBuilder, - [NotNull] string fileNameOrConnectionString, - DataAccessProviderType dataAccessProviderType, - [CanBeNull] Action? jetOptionsAction = null) + this DbContextOptionsBuilder optionsBuilder, + DbConnection connection, + bool contextOwnsConnection, + Action? jetOptionsAction = null) { - Check.NotNull(optionsBuilder, nameof(optionsBuilder)); - Check.NotEmpty(fileNameOrConnectionString, nameof(fileNameOrConnectionString)); - - return UseJetCore(optionsBuilder, fileNameOrConnectionString, null, dataAccessProviderType, jetOptionsAction); - } - - internal static DbContextOptionsBuilder UseJetWithoutPredefinedDataAccessProvider( - [NotNull] this DbContextOptionsBuilder optionsBuilder, - [NotNull] string fileNameOrConnectionString, - [CanBeNull] Action? jetOptionsAction = null) - => UseJetCore(optionsBuilder, fileNameOrConnectionString, null, null, jetOptionsAction); + Check.NotNull(connection, nameof(connection)); - private static DbContextOptionsBuilder UseJetCore( - [NotNull] DbContextOptionsBuilder optionsBuilder, - [NotNull] string fileNameOrConnectionString, - [CanBeNull] DbProviderFactory? dataAccessProviderFactory, - [CanBeNull] DataAccessProviderType? dataAccessProviderType, - Action? jetOptionsAction) - { - Check.NotNull(optionsBuilder, nameof(optionsBuilder)); - Check.NotEmpty(fileNameOrConnectionString, nameof(fileNameOrConnectionString)); + var jetConnection = connection as JetConnection; + if (jetConnection == null) + { + throw new ArgumentException($"The {nameof(connection)} parameter must be of type {nameof(JetConnection)}."); + } - if (dataAccessProviderFactory == null && dataAccessProviderType == null) + if (jetConnection.DataAccessProviderFactory == null) { + var fileNameOrConnectionString = jetConnection.ConnectionString; + DataAccessProviderType dataAccessProviderType; + if (JetConnection.IsConnectionString(fileNameOrConnectionString)) { dataAccessProviderType = JetConnection.GetDataAccessProviderType(fileNameOrConnectionString); @@ -196,28 +148,63 @@ private static DbContextOptionsBuilder UseJetCore( } else { - throw new ArgumentException($"Either {nameof(dataAccessProviderFactory)} or {nameof(dataAccessProviderType)} must not be null, or a file name must be specified for {nameof(fileNameOrConnectionString)}."); + throw new ArgumentException($"The data access provider type could not be inferred from the connections {nameof(JetConnection.DataAccessProviderFactory)} or {nameof(JetConnection.ConnectionString)} property and the {nameof(JetConnection.ConnectionString)} property is not a valid file name either."); } + + jetConnection.DataAccessProviderFactory = JetFactory.Instance.GetDataAccessProviderFactory(dataAccessProviderType); + jetConnection.Freeze(); } var extension = (JetOptionsExtension)GetOrCreateExtension(optionsBuilder) - .WithConnectionString(fileNameOrConnectionString); - - extension = extension.WithDataAccessProviderFactory( - dataAccessProviderFactory ?? JetFactory.Instance.GetDataAccessProviderFactory(dataAccessProviderType!.Value)); - + .WithConnection(connection, contextOwnsConnection); + extension = extension.WithDataAccessProviderFactory(jetConnection.DataAccessProviderFactory); ((IDbContextOptionsBuilderInfrastructure)optionsBuilder).AddOrUpdateExtension(extension); - ConfigureWarnings(optionsBuilder); - - jetOptionsAction?.Invoke(new JetDbContextOptionsBuilder(optionsBuilder)); - - return optionsBuilder; + return ApplyConfiguration(optionsBuilder, jetOptionsAction); } - #endregion + /// + /// Configures the context to connect to a Jet database, but without initially setting any + /// or connection string. + /// + /// + /// + /// The connection or connection string must be set before the is used to connect + /// to a database. Set a connection using . + /// Set a connection string using . + /// + /// + /// See Using DbContextOptions + /// + /// + /// The builder being used to configure the context. + /// An optional action to allow additional SQL Server specific configuration. + /// The options builder so that further configuration can be chained. + public static DbContextOptionsBuilder UseJet( + this DbContextOptionsBuilder optionsBuilder, + Action? jetOptionsAction = null) + where TContext : DbContext + => (DbContextOptionsBuilder)UseJet( + (DbContextOptionsBuilder)optionsBuilder, jetOptionsAction); - #region Connection + /// + /// Configures the context to connect to a Microsoft Jet database. + /// + /// The builder being used to configure the context. + /// The file name or connection string of the database to connect to. + /// If just a file name is supplied, the default data access provider type as defined by + /// `JetConfiguration.DefaultDataAccessProviderType` is being used. If a connection string is supplied, the + /// underlying data access provider (ODBC or OLE DB) will be inferred from the style of the connection string. + /// In case the connection string does not specify an Access driver (ODBC) or ACE/Jet provider (OLE DB), the + /// highest version of all compatible installed ones is being used. + /// An optional action to allow additional Jet specific configuration. + /// The options builder so that further configuration can be chained. + public static DbContextOptionsBuilder UseJet( + this DbContextOptionsBuilder optionsBuilder, + string? fileNameOrConnectionString, + Action? jetOptionsAction = null) + where TContext : DbContext => + (DbContextOptionsBuilder)UseJet((DbContextOptionsBuilder)optionsBuilder, fileNameOrConnectionString, jetOptionsAction); // Note: Decision made to use DbConnection not SqlConnection: Issue #772 /// @@ -233,9 +220,9 @@ private static DbContextOptionsBuilder UseJetCore( /// An optional action to allow additional Jet specific configuration. /// The options builder so that further configuration can be chained. public static DbContextOptionsBuilder UseJet( - [NotNull] this DbContextOptionsBuilder optionsBuilder, - [NotNull] DbConnection connection, - [CanBeNull] Action? jetOptionsAction = null) + this DbContextOptionsBuilder optionsBuilder, + DbConnection connection, + Action? jetOptionsAction = null) where TContext : DbContext { Check.NotNull(optionsBuilder, nameof(optionsBuilder)); @@ -247,35 +234,90 @@ public static DbContextOptionsBuilder UseJet( // Note: Decision made to use DbConnection not SqlConnection: Issue #772 /// - /// Configures the context to connect to a Microsoft Jet database. + /// Configures the context to connect to a Microsoft SJET database. /// - /// The builder being used to configure the context. + /// + /// See Using DbContextOptions, and + /// Accessing SQL Server and Azure SQL databases with EF Core + /// for more information and examples. + /// + /// The type of context to be configured. + /// The builder being used to configure the context. /// /// An existing to be used to connect to the database. If the connection is /// in the open state then EF will not open or close the connection. If the connection is in the closed /// state then EF will open and close the connection as needed. /// + /// + /// If , then EF will take ownership of the connection and will + /// dispose it in the same way it would dispose a connection created by EF. If , then the caller still + /// owns the connection and is responsible for its disposal. + /// + /// An optional action to allow additional Jet specific configuration. + /// The options builder so that further configuration can be chained. + public static DbContextOptionsBuilder UseJet( + this DbContextOptionsBuilder optionsBuilder, + DbConnection connection, + bool contextOwnsConnection, + Action? jetOptionsAction = null) + where TContext : DbContext + => (DbContextOptionsBuilder)UseJet( + (DbContextOptionsBuilder)optionsBuilder, connection, contextOwnsConnection, jetOptionsAction); + + #region Connection String + + /// + /// Configures the context to connect to a Microsoft Jet database. + /// + /// The builder being used to configure the context. + /// The file name or connection string of the database to connect to. + /// The type of the data access provider (`Odbc` or `OleDb`) to be used for all + /// data access operations by the Jet connection. + /// An optional action to allow additional Jet specific configuration. + /// The options builder so that further configuration can be chained. + public static DbContextOptionsBuilder UseJet( + this DbContextOptionsBuilder optionsBuilder, + string? fileNameOrConnectionString, + DataAccessProviderType dataAccessProviderType, + Action? jetOptionsAction = null) + where TContext : DbContext + { + return (DbContextOptionsBuilder)UseJet((DbContextOptionsBuilder)optionsBuilder, fileNameOrConnectionString, dataAccessProviderType, jetOptionsAction); + } + + /// + /// Configures the context to connect to a Microsoft Jet database. + /// + /// The builder being used to configure the context. + /// The file name or connection string of the database to connect to. + /// The type of the data access provider (`Odbc` or `OleDb`) to be used for all + /// data access operations by the Jet connection. /// An optional action to allow additional Jet specific configuration. /// The options builder so that further configuration can be chained. public static DbContextOptionsBuilder UseJet( - [NotNull] this DbContextOptionsBuilder optionsBuilder, - [NotNull] DbConnection connection, - [CanBeNull] Action? jetOptionsAction = null) + this DbContextOptionsBuilder optionsBuilder, + string? fileNameOrConnectionString, + DataAccessProviderType dataAccessProviderType, + Action? jetOptionsAction = null) { - Check.NotNull(optionsBuilder, nameof(optionsBuilder)); - Check.NotNull(connection, nameof(connection)); + return UseJetCore(optionsBuilder, fileNameOrConnectionString, null, dataAccessProviderType, jetOptionsAction); + } - var jetConnection = connection as JetConnection; - if (jetConnection == null) - { - throw new ArgumentException($"The {nameof(connection)} parameter must be of type {nameof(JetConnection)}."); - } + internal static DbContextOptionsBuilder UseJetWithoutPredefinedDataAccessProvider( + this DbContextOptionsBuilder optionsBuilder, + string? fileNameOrConnectionString, + Action? jetOptionsAction = null) + => UseJetCore(optionsBuilder, fileNameOrConnectionString, null, null, jetOptionsAction); - if (jetConnection.DataAccessProviderFactory == null) + private static DbContextOptionsBuilder UseJetCore( + DbContextOptionsBuilder optionsBuilder, + string? fileNameOrConnectionString, + DbProviderFactory? dataAccessProviderFactory, + DataAccessProviderType? dataAccessProviderType, + Action? jetOptionsAction) + { + if (dataAccessProviderFactory == null && dataAccessProviderType == null) { - var fileNameOrConnectionString = jetConnection.ConnectionString; - DataAccessProviderType dataAccessProviderType; - if (JetConnection.IsConnectionString(fileNameOrConnectionString)) { dataAccessProviderType = JetConnection.GetDataAccessProviderType(fileNameOrConnectionString); @@ -286,25 +328,19 @@ public static DbContextOptionsBuilder UseJet( } else { - throw new ArgumentException($"The data access provider type could not be inferred from the connections {nameof(JetConnection.DataAccessProviderFactory)} or {nameof(JetConnection.ConnectionString)} property and the {nameof(JetConnection.ConnectionString)} property is not a valid file name either."); + throw new ArgumentException($"Either {nameof(dataAccessProviderFactory)} or {nameof(dataAccessProviderType)} must not be null, or a file name must be specified for {nameof(fileNameOrConnectionString)}."); } - - jetConnection.DataAccessProviderFactory = JetFactory.Instance.GetDataAccessProviderFactory(dataAccessProviderType); - jetConnection.Freeze(); } var extension = (JetOptionsExtension)GetOrCreateExtension(optionsBuilder) - .WithConnection(connection); + .WithConnectionString(fileNameOrConnectionString); - extension = extension.WithDataAccessProviderFactory(jetConnection.DataAccessProviderFactory); + extension = extension.WithDataAccessProviderFactory( + dataAccessProviderFactory ?? JetFactory.Instance.GetDataAccessProviderFactory(dataAccessProviderType!.Value)); ((IDbContextOptionsBuilderInfrastructure)optionsBuilder).AddOrUpdateExtension(extension); - ConfigureWarnings(optionsBuilder); - - jetOptionsAction?.Invoke(new JetDbContextOptionsBuilder(optionsBuilder)); - - return optionsBuilder; + return ApplyConfiguration(optionsBuilder, jetOptionsAction); } #endregion @@ -313,6 +349,20 @@ private static JetOptionsExtension GetOrCreateExtension(DbContextOptionsBuilder => optionsBuilder.Options.FindExtension() ?? new JetOptionsExtension(); + private static DbContextOptionsBuilder ApplyConfiguration( + DbContextOptionsBuilder optionsBuilder, + Action? jetOptionsAction) + { + ConfigureWarnings(optionsBuilder); + + jetOptionsAction?.Invoke(new JetDbContextOptionsBuilder(optionsBuilder)); + + var extension = (JetOptionsExtension)GetOrCreateExtension(optionsBuilder); + ((IDbContextOptionsBuilderInfrastructure)optionsBuilder).AddOrUpdateExtension(extension); + + return optionsBuilder; + } + private static void ConfigureWarnings(DbContextOptionsBuilder optionsBuilder) { var coreOptionsExtension diff --git a/src/EFCore.Jet/Extensions/JetPropertyBuilderExtensions.cs b/src/EFCore.Jet/Extensions/JetPropertyBuilderExtensions.cs index 3bef17ec..6902133a 100644 --- a/src/EFCore.Jet/Extensions/JetPropertyBuilderExtensions.cs +++ b/src/EFCore.Jet/Extensions/JetPropertyBuilderExtensions.cs @@ -25,12 +25,10 @@ public static class JetPropertyBuilderExtensions /// The incremental value that is added to the identity value of the previous row that was loaded. /// The same builder instance so that multiple calls can be chained. public static PropertyBuilder UseJetIdentityColumn( - [NotNull] this PropertyBuilder propertyBuilder, + this PropertyBuilder propertyBuilder, int seed = 1, int increment = 1) { - Check.NotNull(propertyBuilder, nameof(propertyBuilder)); - var property = propertyBuilder.Metadata; property.SetValueGenerationStrategy(JetValueGenerationStrategy.IdentityColumn); property.SetJetIdentitySeed(seed); @@ -39,6 +37,27 @@ public static PropertyBuilder UseJetIdentityColumn( return propertyBuilder; } + /// + /// Configures the key column to use the Jet IDENTITY feature to generate values for new entities, + /// when targeting Jet. This method sets the property to be . + /// + /// The builder for the column being configured. + /// The value that is used for the very first row loaded into the table. + /// The incremental value that is added to the identity value of the previous row that was loaded. + /// The same builder instance so that multiple calls can be chained. + public static ColumnBuilder UseJetIdentityColumn( + this ColumnBuilder columnBuilder, + int seed = 1, + int increment = 1) + { + var overrides = columnBuilder.Overrides; + overrides.SetValueGenerationStrategy(JetValueGenerationStrategy.IdentityColumn); + overrides.SetJetIdentitySeed(seed); + overrides.SetJetIdentityIncrement(increment); + + return columnBuilder; + } + /// /// Configures the key property to use the Jet IDENTITY feature to generate values for new entities, /// when targeting Jet. This method sets the property to be . @@ -54,6 +73,21 @@ public static PropertyBuilder UseJetIdentityColumn( int increment = 1) => (PropertyBuilder)UseJetIdentityColumn((PropertyBuilder)propertyBuilder, seed, increment); + /// + /// Configures the key column to use the Jet IDENTITY feature to generate values for new entities, + /// when targeting Jet. This method sets the property to be . + /// + /// The type of the property being configured. + /// The builder for the column being configured. + /// The value that is used for the very first row loaded into the table. + /// The incremental value that is added to the identity value of the previous row that was loaded. + /// The same builder instance so that multiple calls can be chained. + public static ColumnBuilder UseJetIdentityColumn( + this ColumnBuilder columnBuilder, + int seed = 1, + int increment = 1) + => (ColumnBuilder)UseJetIdentityColumn((ColumnBuilder)columnBuilder, seed, increment); + /// /// Configures the seed for Jet IDENTITY. /// diff --git a/src/EFCore.Jet/Extensions/JetPropertyExtensions.cs b/src/EFCore.Jet/Extensions/JetPropertyExtensions.cs index 36f46d2e..182bb282 100644 --- a/src/EFCore.Jet/Extensions/JetPropertyExtensions.cs +++ b/src/EFCore.Jet/Extensions/JetPropertyExtensions.cs @@ -10,6 +10,7 @@ using System.Linq; using EntityFrameworkCore.Jet.Utilities; using Microsoft.EntityFrameworkCore.Storage; +using Microsoft.EntityFrameworkCore.Diagnostics; // ReSharper disable once CheckNamespace namespace Microsoft.EntityFrameworkCore @@ -24,8 +25,11 @@ public static class JetPropertyExtensions /// /// The property. /// The identity seed. - public static int? GetJetIdentitySeed([NotNull] this IReadOnlyProperty property) - => (int?)property[JetAnnotationNames.IdentitySeed]; + public static int? GetJetIdentitySeed(this IReadOnlyProperty property) + { + var annotation = property.FindAnnotation(JetAnnotationNames.IdentitySeed); + return (int?)annotation?.Value; + } /// /// Returns the identity seed. @@ -33,26 +37,46 @@ public static class JetPropertyExtensions /// The property. /// The identifier of the store object. /// The identity seed. - public static int? GetJetIdentitySeed([NotNull] this IReadOnlyProperty property, in StoreObjectIdentifier storeObject) + public static int? GetJetIdentitySeed(this IReadOnlyProperty property, in StoreObjectIdentifier storeObject) { + if (property is RuntimeProperty) + { + throw new InvalidOperationException(CoreStrings.RuntimeModelMissingData); + } + var @override = property.FindOverrides(storeObject)?.FindAnnotation(JetAnnotationNames.IdentitySeed); + if (@override != null) + { + return (int?)@override.Value; + } + var annotation = property.FindAnnotation(JetAnnotationNames.IdentitySeed); - if (annotation != null) + if (annotation is not null) { return (int?)annotation.Value; } - var sharedTableRootProperty = property.FindSharedStoreObjectRootProperty(storeObject); - return sharedTableRootProperty != null - ? sharedTableRootProperty.GetJetIdentitySeed(storeObject) - : null; + var sharedProperty = property.FindSharedStoreObjectRootProperty(storeObject); + return sharedProperty == null + ? property.DeclaringType.Model.GetJetIdentitySeed() + : sharedProperty.GetJetIdentitySeed(storeObject); } + /// + /// Returns the identity seed. + /// + /// The property overrides. + /// The identity seed. + public static int? GetJetIdentitySeed(this IReadOnlyRelationalPropertyOverrides overrides) + => overrides is RuntimeRelationalPropertyOverrides + ? throw new InvalidOperationException(CoreStrings.RuntimeModelMissingData) + : (int?)overrides.FindAnnotation(JetAnnotationNames.IdentitySeed)?.Value; + /// /// Sets the identity seed. /// /// The property. /// The value to set. - public static void SetJetIdentitySeed([NotNull] this IMutableProperty property, int? seed) + public static void SetJetIdentitySeed(this IMutableProperty property, int? seed) => property.SetOrRemoveAnnotation( JetAnnotationNames.IdentitySeed, seed); @@ -65,17 +89,63 @@ public static void SetJetIdentitySeed([NotNull] this IMutableProperty property, /// Indicates whether the configuration was specified using a data annotation. /// The configured value. public static int? SetJetIdentitySeed( - [NotNull] this IConventionProperty property, + this IConventionProperty property, int? seed, bool fromDataAnnotation = false) - { - property.SetOrRemoveAnnotation( + => (int?)property.SetOrRemoveAnnotation( JetAnnotationNames.IdentitySeed, seed, - fromDataAnnotation); + fromDataAnnotation)?.Value; - return seed; - } + /// + /// Sets the identity seed for a particular table. + /// + /// The property. + /// The value to set. + /// The identifier of the table containing the column. + public static void SetJetIdentitySeed( + this IMutableProperty property, + int? seed, + in StoreObjectIdentifier storeObject) + => property.GetOrCreateOverrides(storeObject) + .SetJetIdentitySeed(seed); + + /// + /// Sets the identity seed for a particular table. + /// + /// The property. + /// The value to set. + /// The identifier of the table containing the column. + /// Indicates whether the configuration was specified using a data annotation. + /// The configured value. + public static int? SetJetIdentitySeed( + this IConventionProperty property, + int? seed, + in StoreObjectIdentifier storeObject, + bool fromDataAnnotation = false) + => property.GetOrCreateOverrides(storeObject, fromDataAnnotation) + .SetJetIdentitySeed(seed, fromDataAnnotation); + + /// + /// Sets the identity seed for a particular table. + /// + /// The property overrides. + /// The value to set. + public static void SetJetIdentitySeed(this IMutableRelationalPropertyOverrides overrides, int? seed) + => overrides.SetOrRemoveAnnotation(JetAnnotationNames.IdentitySeed, seed); + + /// + /// Sets the identity seed for a particular table. + /// + /// The property overrides. + /// The value to set. + /// Indicates whether the configuration was specified using a data annotation. + /// The configured value. + public static int? SetJetIdentitySeed( + this IConventionRelationalPropertyOverrides overrides, + int? seed, + bool fromDataAnnotation = false) + => (int?)overrides.SetOrRemoveAnnotation(JetAnnotationNames.IdentitySeed, seed, fromDataAnnotation)?.Value; /// /// Returns the for the identity seed. @@ -85,13 +155,34 @@ public static void SetJetIdentitySeed([NotNull] this IMutableProperty property, public static ConfigurationSource? GetJetIdentitySeedConfigurationSource([NotNull] this IConventionProperty property) => property.FindAnnotation(JetAnnotationNames.IdentitySeed)?.GetConfigurationSource(); + /// + /// Returns the for the identity seed for a particular table. + /// + /// The property. + /// The identifier of the table containing the column. + /// The for the identity seed. + public static ConfigurationSource? GetJetIdentitySeedConfigurationSource( + this IConventionProperty property, + in StoreObjectIdentifier storeObject) + => property.FindOverrides(storeObject)?.GetJetIdentitySeedConfigurationSource(); + + /// + /// Returns the for the identity seed for a particular table. + /// + /// The property overrides. + /// The for the identity seed. + public static ConfigurationSource? GetJetIdentitySeedConfigurationSource( + this IConventionRelationalPropertyOverrides overrides) + => overrides.FindAnnotation(JetAnnotationNames.IdentitySeed)?.GetConfigurationSource(); + /// /// Returns the identity increment. /// /// The property. /// The identity increment. - public static int? GetJetIdentityIncrement([NotNull] this IReadOnlyProperty property) - => (int?)property[JetAnnotationNames.IdentityIncrement]; + public static int? GetJetIdentityIncrement(this IReadOnlyProperty property) + => (int?)property[JetAnnotationNames.IdentityIncrement] + ?? property.DeclaringType.Model.GetJetIdentityIncrement(); /// /// Returns the identity increment. @@ -99,26 +190,42 @@ public static void SetJetIdentitySeed([NotNull] this IMutableProperty property, /// The property. /// The identifier of the store object. /// The identity increment. - public static int? GetJetIdentityIncrement([NotNull] this IReadOnlyProperty property, in StoreObjectIdentifier storeObject) + public static int? GetJetIdentityIncrement(this IReadOnlyProperty property, in StoreObjectIdentifier storeObject) { + var @override = property.FindOverrides(storeObject)?.FindAnnotation(JetAnnotationNames.IdentityIncrement); + if (@override != null) + { + return (int?)@override.Value; + } + var annotation = property.FindAnnotation(JetAnnotationNames.IdentityIncrement); if (annotation != null) { return (int?)annotation.Value; } - var sharedTableRootProperty = property.FindSharedStoreObjectRootProperty(storeObject); - return sharedTableRootProperty != null - ? sharedTableRootProperty.GetJetIdentityIncrement(storeObject) - : null; + var sharedProperty = property.FindSharedStoreObjectRootProperty(storeObject); + return sharedProperty == null + ? property.DeclaringType.Model.GetJetIdentityIncrement() + : sharedProperty.GetJetIdentityIncrement(storeObject); } + /// + /// Returns the identity increment. + /// + /// The property overrides. + /// The identity increment. + public static int? GetJetIdentityIncrement(this IReadOnlyRelationalPropertyOverrides overrides) + => overrides is RuntimeRelationalPropertyOverrides + ? throw new InvalidOperationException(CoreStrings.RuntimeModelMissingData) + : (int?)overrides.FindAnnotation(JetAnnotationNames.IdentityIncrement)?.Value; + /// /// Sets the identity increment. /// /// The property. /// The value to set. - public static void SetJetIdentityIncrement([NotNull] this IMutableProperty property, int? increment) + public static void SetJetIdentityIncrement(this IMutableProperty property, int? increment) => property.SetOrRemoveAnnotation( JetAnnotationNames.IdentityIncrement, increment); @@ -134,14 +241,61 @@ public static void SetJetIdentityIncrement([NotNull] this IMutableProperty prope [NotNull] this IConventionProperty property, int? increment, bool fromDataAnnotation = false) - { - property.SetOrRemoveAnnotation( + => (int?)property.SetOrRemoveAnnotation( JetAnnotationNames.IdentityIncrement, increment, - fromDataAnnotation); + fromDataAnnotation)?.Value; - return increment; - } + /// + /// Sets the identity increment for a particular table. + /// + /// The property. + /// The value to set. + /// The identifier of the table containing the column. + public static void SetJetIdentityIncrement( + this IMutableProperty property, + int? increment, + in StoreObjectIdentifier storeObject) + => property.GetOrCreateOverrides(storeObject) + .SetJetIdentityIncrement(increment); + + /// + /// Sets the identity increment for a particular table. + /// + /// The property. + /// The value to set. + /// The identifier of the table containing the column. + /// Indicates whether the configuration was specified using a data annotation. + /// The configured value. + public static int? SetJetIdentityIncrement( + this IConventionProperty property, + int? increment, + in StoreObjectIdentifier storeObject, + bool fromDataAnnotation = false) + => property.GetOrCreateOverrides(storeObject, fromDataAnnotation) + .SetJetIdentityIncrement(increment, fromDataAnnotation); + + /// + /// Sets the identity increment for a particular table. + /// + /// The property overrides. + /// The value to set. + public static void SetJetIdentityIncrement(this IMutableRelationalPropertyOverrides overrides, int? increment) + => overrides.SetOrRemoveAnnotation(JetAnnotationNames.IdentityIncrement, increment); + + /// + /// Sets the identity increment for a particular table. + /// + /// The property overrides. + /// The value to set. + /// Indicates whether the configuration was specified using a data annotation. + /// The configured value. + public static int? SetJetIdentityIncrement( + this IConventionRelationalPropertyOverrides overrides, + int? increment, + bool fromDataAnnotation = false) + => (int?)overrides.SetOrRemoveAnnotation(JetAnnotationNames.IdentityIncrement, increment, fromDataAnnotation) + ?.Value; /// /// Returns the for the identity increment. @@ -290,12 +444,8 @@ private static JetValueGenerationStrategy GetDefaultValueGenerationStrategy( /// The property. /// The strategy to use. public static void SetValueGenerationStrategy( - [NotNull] this IMutableProperty property, JetValueGenerationStrategy? value) - { - CheckValueGenerationStrategy(property, value); - - property.SetOrRemoveAnnotation(JetAnnotationNames.ValueGenerationStrategy, value); - } + this IMutableProperty property, JetValueGenerationStrategy? value) + => property.SetOrRemoveAnnotation(JetAnnotationNames.ValueGenerationStrategy, value); /// /// Sets the to use for the property. @@ -305,32 +455,64 @@ public static void SetValueGenerationStrategy( /// Indicates whether the configuration was specified using a data annotation. /// The configured value. public static JetValueGenerationStrategy? SetValueGenerationStrategy( - [NotNull] this IConventionProperty property, + this IConventionProperty property, JetValueGenerationStrategy? value, bool fromDataAnnotation = false) - { - CheckValueGenerationStrategy(property, value); + => (JetValueGenerationStrategy?)property.SetOrRemoveAnnotation( + JetAnnotationNames.ValueGenerationStrategy, value, fromDataAnnotation)?.Value; - property.SetOrRemoveAnnotation(JetAnnotationNames.ValueGenerationStrategy, value, fromDataAnnotation); + /// + /// Sets the to use for the property for a particular table. + /// + /// The property. + /// The strategy to use. + /// The identifier of the table containing the column. + public static void SetValueGenerationStrategy( + this IMutableProperty property, + JetValueGenerationStrategy? value, + in StoreObjectIdentifier storeObject) + => property.GetOrCreateOverrides(storeObject) + .SetValueGenerationStrategy(value); - return value; - } + /// + /// Sets the to use for the property for a particular table. + /// + /// The property. + /// The strategy to use. + /// The identifier of the table containing the column. + /// Indicates whether the configuration was specified using a data annotation. + /// The configured value. + public static JetValueGenerationStrategy? SetValueGenerationStrategy( + this IConventionProperty property, + JetValueGenerationStrategy? value, + in StoreObjectIdentifier storeObject, + bool fromDataAnnotation = false) + => property.GetOrCreateOverrides(storeObject, fromDataAnnotation) + .SetValueGenerationStrategy(value, fromDataAnnotation); - private static void CheckValueGenerationStrategy(IReadOnlyProperty property, JetValueGenerationStrategy? value) - { - if (value != null) - { - var propertyType = property.ClrType; + /// + /// Sets the to use for the property for a particular table. + /// + /// The property overrides. + /// The strategy to use. + public static void SetValueGenerationStrategy( + this IMutableRelationalPropertyOverrides overrides, + JetValueGenerationStrategy? value) + => overrides.SetOrRemoveAnnotation(JetAnnotationNames.ValueGenerationStrategy, value); - if (value == JetValueGenerationStrategy.IdentityColumn - && !IsCompatibleWithValueGeneration(property)) - { - throw new ArgumentException( - JetStrings.IdentityBadType( - property.Name, property.DeclaringType.DisplayName(), propertyType.ShortDisplayName())); - } - } - } + /// + /// Sets the to use for the property for a particular table. + /// + /// The property overrides. + /// The strategy to use. + /// Indicates whether the configuration was specified using a data annotation. + /// The configured value. + public static JetValueGenerationStrategy? SetValueGenerationStrategy( + this IConventionRelationalPropertyOverrides overrides, + JetValueGenerationStrategy? value, + bool fromDataAnnotation = false) + => (JetValueGenerationStrategy?)overrides.SetOrRemoveAnnotation( + JetAnnotationNames.ValueGenerationStrategy, value, fromDataAnnotation)?.Value; /// /// Returns the for the . diff --git a/src/EFCore.Jet/Extensions/JetServiceCollectionExtensions.cs b/src/EFCore.Jet/Extensions/JetServiceCollectionExtensions.cs index 5b5a4018..4fb71d20 100644 --- a/src/EFCore.Jet/Extensions/JetServiceCollectionExtensions.cs +++ b/src/EFCore.Jet/Extensions/JetServiceCollectionExtensions.cs @@ -56,6 +56,7 @@ public static IServiceCollection AddEntityFrameworkJet([NotNull] this IServiceCo .TryAdd() .TryAdd() .TryAdd(p => p.GetRequiredService()) + .TryAdd() .TryAdd() .TryAdd() .TryAdd() diff --git a/src/EFCore.Jet/JetRetryingExecutionStrategy.cs b/src/EFCore.Jet/JetRetryingExecutionStrategy.cs index 59c6dc7a..ad8b484f 100644 --- a/src/EFCore.Jet/JetRetryingExecutionStrategy.cs +++ b/src/EFCore.Jet/JetRetryingExecutionStrategy.cs @@ -153,10 +153,6 @@ protected override bool ShouldRetryOn(Exception exception) { return null; } - - // TODO: Remove - Debug.WriteLine("DELAY: " + (int)baseDelay.GetValueOrDefault().TotalMilliseconds); - return baseDelay; } } diff --git a/src/EFCore.Jet/Metadata/Conventions/JetConventionSetBuilder.cs b/src/EFCore.Jet/Metadata/Conventions/JetConventionSetBuilder.cs index 29e155df..d0d85b1a 100644 --- a/src/EFCore.Jet/Metadata/Conventions/JetConventionSetBuilder.cs +++ b/src/EFCore.Jet/Metadata/Conventions/JetConventionSetBuilder.cs @@ -36,6 +36,8 @@ public override ConventionSet CreateConventionSet() new JetStoreGenerationConvention(Dependencies, RelationalDependencies)); conventionSet.Replace( new JetValueGenerationConvention(Dependencies, RelationalDependencies)); + conventionSet.Replace( + new JetSharedTableConvention(Dependencies, RelationalDependencies)); return conventionSet; } diff --git a/src/EFCore.Jet/Metadata/Conventions/JetSharedTableConvention.cs b/src/EFCore.Jet/Metadata/Conventions/JetSharedTableConvention.cs new file mode 100644 index 00000000..26217bf7 --- /dev/null +++ b/src/EFCore.Jet/Metadata/Conventions/JetSharedTableConvention.cs @@ -0,0 +1,30 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Microsoft.EntityFrameworkCore.Metadata.Conventions.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata.Internal; + +// ReSharper disable once CheckNamespace +namespace Microsoft.EntityFrameworkCore.Metadata.Conventions; + +/// +/// A convention that manipulates names of database objects for entity types that share a table to avoid clashes. +/// +public class JetSharedTableConvention : SharedTableConvention +{ + /// + /// Creates a new instance of . + /// + /// Parameter object containing dependencies for this convention. + /// Parameter object containing relational dependencies for this convention. + public JetSharedTableConvention( + ProviderConventionSetBuilderDependencies dependencies, + RelationalConventionSetBuilderDependencies relationalDependencies) + : base(dependencies, relationalDependencies) + { + } + + /// + protected override bool IndexesUniqueAcrossTables + => false; +} diff --git a/src/EFCore.Jet/Metadata/Internal/JetAnnotationProvider.cs b/src/EFCore.Jet/Metadata/Internal/JetAnnotationProvider.cs index b69589dd..bc128600 100644 --- a/src/EFCore.Jet/Metadata/Internal/JetAnnotationProvider.cs +++ b/src/EFCore.Jet/Metadata/Internal/JetAnnotationProvider.cs @@ -77,10 +77,10 @@ public override IEnumerable For(ITableIndex index, bool designTime) public override IEnumerable For(IColumn column, bool designTime) { //Need to do this in both design and runtime - /*if (!designTime) + if (!designTime) { yield break; - }*/ + } var table = StoreObjectIdentifier.Table(column.Table.Name, column.Table.Schema); var property = column.PropertyMappings diff --git a/src/EFCore.Jet/Migrations/Internal/JetHistoryRepository.cs b/src/EFCore.Jet/Migrations/Internal/JetHistoryRepository.cs index ea1e6a6e..e7f00d4c 100644 --- a/src/EFCore.Jet/Migrations/Internal/JetHistoryRepository.cs +++ b/src/EFCore.Jet/Migrations/Internal/JetHistoryRepository.cs @@ -1,7 +1,10 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; +using System.Data.Common; using System.Text; +using System.Threading; +using System.Threading.Tasks; using EntityFrameworkCore.Jet.Internal; using JetBrains.Annotations; using Microsoft.EntityFrameworkCore.Migrations; @@ -10,6 +13,7 @@ using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Storage; using Microsoft.Extensions.DependencyInjection; +using Microsoft.EntityFrameworkCore.Diagnostics; namespace EntityFrameworkCore.Jet.Migrations.Internal { @@ -29,6 +33,8 @@ namespace EntityFrameworkCore.Jet.Migrations.Internal /// public class JetHistoryRepository : HistoryRepository { + private static readonly TimeSpan _retryDelay = TimeSpan.FromSeconds(1); + /// /// 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 @@ -40,25 +46,26 @@ public JetHistoryRepository([NotNull] HistoryRepositoryDependencies dependencies { } + /// + /// The name of the table that will serve as a database-wide lock for migrations. + /// + protected virtual string LockTableName { get; } = "__EFMigrationsLock"; + /// /// 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 string ExistsSql - { - get - { - var stringTypeMapping = Dependencies.TypeMappingSource.GetMapping(typeof(string)); + protected override string ExistsSql => CreateExistsSql(TableName); - var builder = new StringBuilder(); - builder - .Append("SELECT * FROM `INFORMATION_SCHEMA.TABLES` WHERE `TABLE_NAME` = ") - .Append(stringTypeMapping.GenerateSqlLiteral(TableName)); + private string CreateExistsSql(string tableName) + { + var stringTypeMapping = Dependencies.TypeMappingSource.GetMapping(typeof(string)); - return builder.ToString(); - } + return $""" +SELECT * FROM `INFORMATION_SCHEMA.TABLES` WHERE `TABLE_NAME` = {stringTypeMapping.GenerateSqlLiteral(tableName)}; +"""; } /// @@ -121,6 +128,173 @@ public override string GetDeleteScript(string migrationId) .ToString(); } + public override IDisposable GetDatabaseLock(TimeSpan timeout) + { + if (!InterpretExistsResult(Dependencies.RawSqlCommandBuilder.Build(CreateExistsSql(LockTableName)) + .ExecuteScalar(CreateRelationalCommandParameters()))) + { + try + { + CreateLockTableCommand().ExecuteNonQuery(CreateRelationalCommandParameters()); + } + catch (DbException) + { + //if (!e.Message.Contains("already exists")) throw; + } + } + + var retryDelay = _retryDelay; + var startTime = DateTimeOffset.UtcNow; + while (DateTimeOffset.UtcNow - startTime < timeout) + { + var dbLock = CreateMigrationDatabaseLock(); + int? insertCount = 0; + //No CREATE TABLE IF EXISTS in Jet. We try a normal CREATE TABLE and catch the exception if it already exists + try + { + insertCount = (int?)CreateInsertLockCommand(DateTimeOffset.UtcNow) + .ExecuteScalar(CreateRelationalCommandParameters()); + } + catch (DbException) + { + //if (!e.Message.Contains("duplicate")) throw; + } + if ((int)insertCount! == 1) + { + return dbLock; + } + + using var reader = CreateGetLockCommand().ExecuteReader(CreateRelationalCommandParameters()); + if (reader.Read()) + { + var timestamp = reader.DbDataReader.GetFieldValue(1); + if (DateTimeOffset.UtcNow - timestamp > timeout) + { + var id = reader.DbDataReader.GetFieldValue(0); + CreateDeleteLockCommand(id).ExecuteNonQuery(CreateRelationalCommandParameters()); + } + } + + Thread.Sleep(retryDelay); + if (retryDelay < TimeSpan.FromMinutes(1)) + { + retryDelay = retryDelay.Add(retryDelay); + } + } + + throw new TimeoutException(); + } + + public override async Task GetDatabaseLockAsync(TimeSpan timeout, CancellationToken cancellationToken = new CancellationToken()) + { + if (!InterpretExistsResult(await Dependencies.RawSqlCommandBuilder.Build(CreateExistsSql(LockTableName)) + .ExecuteScalarAsync(CreateRelationalCommandParameters(), cancellationToken).ConfigureAwait(false))) + { + //No CREATE TABLE IF EXISTS in Jet. We try a normal CREATE TABLE and catch the exception if it already exists + try + { + await CreateLockTableCommand() + .ExecuteNonQueryAsync(CreateRelationalCommandParameters(), cancellationToken) + .ConfigureAwait(false); + } + catch (DbException) + { + //if (!e.Message.Contains("already exists")) throw; + } + } + + var retryDelay = _retryDelay; + var startTime = DateTimeOffset.UtcNow; + while (DateTimeOffset.UtcNow - startTime < timeout) + { + var dbLock = CreateMigrationDatabaseLock(); + int? insertCount = 0; + try + { + insertCount = (int?)await CreateInsertLockCommand(DateTimeOffset.UtcNow) + .ExecuteScalarAsync(CreateRelationalCommandParameters(), cancellationToken) + .ConfigureAwait(false); + + } + catch (DbException) + { + //if (!e.Message.Contains("duplicate")) throw; + } + if ((int)insertCount! == 1) + { + return dbLock; + } + + using var reader = await CreateGetLockCommand().ExecuteReaderAsync(CreateRelationalCommandParameters(), cancellationToken) + .ConfigureAwait(false); + if (await reader.ReadAsync(cancellationToken).ConfigureAwait(false)) + { + var timestamp = await reader.DbDataReader.GetFieldValueAsync(1).ConfigureAwait(false); + if (DateTimeOffset.UtcNow - timestamp > timeout) + { + var id = await reader.DbDataReader.GetFieldValueAsync(0).ConfigureAwait(false); + await CreateDeleteLockCommand(id).ExecuteNonQueryAsync(CreateRelationalCommandParameters(), cancellationToken) + .ConfigureAwait(false); + } + } + + await Task.Delay(_retryDelay, cancellationToken).ConfigureAwait(true); + if (retryDelay < TimeSpan.FromMinutes(1)) + { + retryDelay = retryDelay.Add(retryDelay); + } + } + + throw new TimeoutException(); + } + + private IRelationalCommand CreateLockTableCommand() + => Dependencies.RawSqlCommandBuilder.Build($""" +CREATE TABLE `{LockTableName}` ( + `Id` INTEGER NOT NULL CONSTRAINT `PK_{LockTableName}` PRIMARY KEY, + `Timestamp` TEXT NOT NULL +); +"""); + + private IRelationalCommand CreateInsertLockCommand(DateTimeOffset timestamp) + { + var timestampLiteral = Dependencies.TypeMappingSource.GetMapping(typeof(DateTimeOffset)).GenerateSqlLiteral(timestamp); + + return Dependencies.RawSqlCommandBuilder.Build($""" +INSERT INTO `{LockTableName}` (`Id`, `Timestamp`) VALUES(1, {timestampLiteral}); +SELECT 1 FROM `{LockTableName}` WHERE `Id` = 1; +"""); + } + + private IRelationalCommand CreateGetLockCommand() + => Dependencies.RawSqlCommandBuilder.Build($""" +SELECT TOP 1 `Id`, `Timestamp` FROM `{LockTableName}`; +"""); + + private IRelationalCommand CreateDeleteLockCommand(int? id = null) + { + var sql = $""" +DELETE FROM `{LockTableName}` +"""; + if (id != null) + { + sql += $""" WHERE `Id` = {id}"""; + } + sql += ";"; + return Dependencies.RawSqlCommandBuilder.Build(sql); + } + + private JetMigrationDatabaseLock CreateMigrationDatabaseLock() + => new(CreateDeleteLockCommand(), CreateRelationalCommandParameters()); + + private RelationalCommandParameterObject CreateRelationalCommandParameters() + => new( + Dependencies.Connection, + null, + null, + Dependencies.CurrentContext.Context, + Dependencies.CommandLogger, CommandSource.Migrations); + /// /// 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/Migrations/Internal/JetMigrationDatabaseLock.cs b/src/EFCore.Jet/Migrations/Internal/JetMigrationDatabaseLock.cs new file mode 100644 index 00000000..b0c4755c --- /dev/null +++ b/src/EFCore.Jet/Migrations/Internal/JetMigrationDatabaseLock.cs @@ -0,0 +1,40 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore.Storage; + +namespace EntityFrameworkCore.Jet.Migrations.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. +/// +public class JetMigrationDatabaseLock( + IRelationalCommand relationalCommand, + RelationalCommandParameterObject relationalCommandParameters, + CancellationToken cancellationToken = default) + : IDisposable, IAsyncDisposable +{ + /// + /// 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. + /// + public void Dispose() + => relationalCommand.ExecuteScalar(relationalCommandParameters); + + /// + /// 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. + /// + public async ValueTask DisposeAsync() + => await relationalCommand.ExecuteScalarAsync(relationalCommandParameters, cancellationToken).ConfigureAwait(false); +} diff --git a/src/EFCore.Jet/Migrations/JetMigrationsSqlGenerator.cs b/src/EFCore.Jet/Migrations/JetMigrationsSqlGenerator.cs index fc13c83b..6945cdc0 100644 --- a/src/EFCore.Jet/Migrations/JetMigrationsSqlGenerator.cs +++ b/src/EFCore.Jet/Migrations/JetMigrationsSqlGenerator.cs @@ -796,7 +796,7 @@ protected override void ColumnDefinition( var storeType = operation.ColumnType; if (IsIdentity(operation) && - (storeType == null || Dependencies.TypeMappingSource.FindMapping(storeType) is JetIntTypeMapping)) + (storeType == null || Dependencies.TypeMappingSource.FindMapping(storeType) is JetIntTypeMapping or ShortTypeMapping)) { // This column represents the actual identity. storeType = "counter"; diff --git a/src/EFCore.Jet/Query/ExpressionTranslators/Internal/JetByteArrayMethodTranslator.cs b/src/EFCore.Jet/Query/ExpressionTranslators/Internal/JetByteArrayMethodTranslator.cs index 2fe1bc53..a3b2db88 100644 --- a/src/EFCore.Jet/Query/ExpressionTranslators/Internal/JetByteArrayMethodTranslator.cs +++ b/src/EFCore.Jet/Query/ExpressionTranslators/Internal/JetByteArrayMethodTranslator.cs @@ -65,7 +65,7 @@ public JetByteArrayMethodTranslator(ISqlExpressionFactory sqlExpressionFactory) "RIGHTB", new[] { arguments[1], _sqlExpressionFactory.Constant(1) }, nullable: true, - argumentsPropagateNullability: new[] { true, true, true }, + argumentsPropagateNullability: new[] { true, true }, typeof(byte[])) }, nullable: true, @@ -114,7 +114,7 @@ public JetByteArrayMethodTranslator(ISqlExpressionFactory sqlExpressionFactory) _sqlExpressionFactory.Constant(0) }, nullable: true, - argumentsPropagateNullability: new[] { true, true }, + argumentsPropagateNullability: new[] { false, true, true, false }, typeof(int)), _sqlExpressionFactory.Constant(0)); } diff --git a/src/EFCore.Jet/Query/ExpressionTranslators/Internal/JetDateDiffFunctionsTranslator.cs b/src/EFCore.Jet/Query/ExpressionTranslators/Internal/JetDateDiffFunctionsTranslator.cs index 7d97a379..4281bc8d 100644 --- a/src/EFCore.Jet/Query/ExpressionTranslators/Internal/JetDateDiffFunctionsTranslator.cs +++ b/src/EFCore.Jet/Query/ExpressionTranslators/Internal/JetDateDiffFunctionsTranslator.cs @@ -220,7 +220,7 @@ public JetDateDiffFunctionsTranslator( "DATEDIFF", new[] { _sqlExpressionFactory.Constant(datePart), startDate, endDate }, false, - new[] {false}, + new[] {false, false, false}, typeof(int)); } diff --git a/src/EFCore.Jet/Query/ExpressionTranslators/Internal/JetDateTimeMemberTranslator.cs b/src/EFCore.Jet/Query/ExpressionTranslators/Internal/JetDateTimeMemberTranslator.cs index 05b5ab20..cfbad5ff 100644 --- a/src/EFCore.Jet/Query/ExpressionTranslators/Internal/JetDateTimeMemberTranslator.cs +++ b/src/EFCore.Jet/Query/ExpressionTranslators/Internal/JetDateTimeMemberTranslator.cs @@ -62,7 +62,7 @@ public JetDateTimeMemberTranslator( instance!, }, false, - new[] { false }, + new[] { false, false }, returnType); if (datePart == "w") { @@ -77,15 +77,15 @@ public JetDateTimeMemberTranslator( return member.Name switch { nameof(DateTime.Now) => _sqlExpressionFactory.Function("NOW", Array.Empty(), - false, new[] { false }, returnType), + false, [], returnType), nameof(DateTime.UtcNow) => _sqlExpressionFactory.Function( "DATEADD", new SqlExpression[] { - new SqlConstantExpression(Expression.Constant("n"), null), - new SqlConstantExpression(Expression.Constant(-1 * TimeZoneInfo.Local.BaseUtcOffset.TotalMinutes), null) , + new SqlConstantExpression("n", null), + new SqlConstantExpression(-1 * TimeZoneInfo.Local.BaseUtcOffset.TotalMinutes, null) , _sqlExpressionFactory.Function("NOW", Array.Empty(), - false, new[] { false }, returnType) + false, [], returnType) }, true, argumentsPropagateNullability: new[] { false, false, true }, @@ -94,7 +94,7 @@ public JetDateTimeMemberTranslator( "DATEVALUE", new[] { - _sqlExpressionFactory.Function("DATE", Array.Empty(), false, new[] { false }, + _sqlExpressionFactory.Function("DATE", Array.Empty(), false, [], returnType) }, false, @@ -109,7 +109,7 @@ public JetDateTimeMemberTranslator( false, new[] { false }, returnType)), - nameof(DateTime.TimeOfDay) => _sqlExpressionFactory.NullChecked( + nameof(DateTime.TimeOfDay) => TimeSpanNullChecked( instance!, _sqlExpressionFactory.Function( "TIMEVALUE", @@ -129,14 +129,28 @@ public JetDateTimeMemberTranslator( public CaseExpression DateTimeNullChecked( SqlExpression checkSqlExpression, SqlExpression notNullSqlExpression) - => _sqlExpressionFactory.Case( + => (CaseExpression)_sqlExpressionFactory.Case( + new[] + { + new CaseWhenClause( + _sqlExpressionFactory.IsNull(checkSqlExpression), + _sqlExpressionFactory.Constant( + null,typeof(DateTime), + notNullSqlExpression.TypeMapping)) + }, + notNullSqlExpression); + + public CaseExpression TimeSpanNullChecked( + SqlExpression checkSqlExpression, + SqlExpression notNullSqlExpression) + => (CaseExpression)_sqlExpressionFactory.Case( new[] { new CaseWhenClause( _sqlExpressionFactory.IsNull(checkSqlExpression), _sqlExpressionFactory.Constant( - null, - checkSqlExpression.TypeMapping)) + null,typeof(TimeSpan), + notNullSqlExpression.TypeMapping)) }, notNullSqlExpression); } diff --git a/src/EFCore.Jet/Query/ExpressionTranslators/Internal/JetDateTimeMethodTranslator.cs b/src/EFCore.Jet/Query/ExpressionTranslators/Internal/JetDateTimeMethodTranslator.cs index 54a8f214..083df1ec 100644 --- a/src/EFCore.Jet/Query/ExpressionTranslators/Internal/JetDateTimeMethodTranslator.cs +++ b/src/EFCore.Jet/Query/ExpressionTranslators/Internal/JetDateTimeMethodTranslator.cs @@ -82,7 +82,7 @@ public JetDateTimeMethodTranslator(ISqlExpressionFactory sqlExpressionFactory) "DATEADD", new[] { - new SqlConstantExpression(Expression.Constant(datePart), null), + new SqlConstantExpression(datePart, null), amountToAdd, instance }, @@ -98,7 +98,7 @@ public JetDateTimeMethodTranslator(ISqlExpressionFactory sqlExpressionFactory) "DATEDIFF", new[] { - new SqlConstantExpression(Expression.Constant(timePart), null), + new SqlConstantExpression(timePart, null), _sqlExpressionFactory.Constant(DateTimeOffset.UnixEpoch, instance!.TypeMapping), instance }, diff --git a/src/EFCore.Jet/Query/ExpressionTranslators/Internal/JetObjectToStringTranslator.cs b/src/EFCore.Jet/Query/ExpressionTranslators/Internal/JetObjectToStringTranslator.cs index 961cc9e5..afc08d8b 100644 --- a/src/EFCore.Jet/Query/ExpressionTranslators/Internal/JetObjectToStringTranslator.cs +++ b/src/EFCore.Jet/Query/ExpressionTranslators/Internal/JetObjectToStringTranslator.cs @@ -57,9 +57,14 @@ public JetObjectToStringTranslator(SqlExpressionFactory sqlExpressionFactory) return null; } + if (instance.TypeMapping?.ClrType == typeof(string)) + { + return instance; + } + if (instance.Type == typeof(bool)) { - if (instance is ColumnExpression columnExpression && columnExpression.IsNullable) + if (instance is not ColumnExpression { IsNullable: false }) { return _sqlExpressionFactory.Case( new[] @@ -71,7 +76,7 @@ public JetObjectToStringTranslator(SqlExpressionFactory sqlExpressionFactory) _sqlExpressionFactory.Equal(instance, _sqlExpressionFactory.Constant(true)), _sqlExpressionFactory.Constant(true.ToString())) }, - _sqlExpressionFactory.Constant(null)); + _sqlExpressionFactory.Constant(string.Empty)); } return _sqlExpressionFactory.Case( @@ -85,7 +90,7 @@ public JetObjectToStringTranslator(SqlExpressionFactory sqlExpressionFactory) } return TypeMapping.TryGetValue(instance.Type, out var storeType) - ? _sqlExpressionFactory.Convert(instance, typeof(string)) + ? _sqlExpressionFactory.Coalesce(_sqlExpressionFactory.Convert(instance, typeof(string)), _sqlExpressionFactory.Constant(string.Empty)) : null; } } diff --git a/src/EFCore.Jet/Query/ExpressionTranslators/Internal/JetStringMethodTranslator.cs b/src/EFCore.Jet/Query/ExpressionTranslators/Internal/JetStringMethodTranslator.cs index 709e6ecd..6ae83134 100644 --- a/src/EFCore.Jet/Query/ExpressionTranslators/Internal/JetStringMethodTranslator.cs +++ b/src/EFCore.Jet/Query/ExpressionTranslators/Internal/JetStringMethodTranslator.cs @@ -308,29 +308,31 @@ private SqlExpression TranslateIndexOf( argumentsPropagateNullability, method.ReturnType); - charIndexExpression = _sqlExpressionFactory.Subtract(charIndexExpression, _sqlExpressionFactory.Constant(1)); - // If the pattern is an empty string, we need to special case to always return 0 (since CHARINDEX return 0, which we'd subtract to // -1). Handle separately for constant and non-constant patterns. - if (searchExpression is SqlConstantExpression { Value: string constantSearchPattern }) + if (searchExpression is SqlConstantExpression { Value: "" }) { - return constantSearchPattern == string.Empty - ? _sqlExpressionFactory.Constant(0, typeof(int)) - : charIndexExpression; + return _sqlExpressionFactory.Case( + [new(_sqlExpressionFactory.IsNotNull(instance), _sqlExpressionFactory.Constant(0))], + elseResult: null + ); } - return _sqlExpressionFactory.Case( - new[] - { - new CaseWhenClause( - _sqlExpressionFactory.Equal( - searchExpression, - _sqlExpressionFactory.Constant(string.Empty, stringTypeMapping)), - _sqlExpressionFactory.Constant(0)) - }, - charIndexExpression); - } + SqlExpression offsetExpression = searchExpression is SqlConstantExpression + ? _sqlExpressionFactory.Constant(1) + : _sqlExpressionFactory.Case( + new[] + { + new CaseWhenClause( + _sqlExpressionFactory.Equal( + searchExpression, + _sqlExpressionFactory.Constant(string.Empty, stringTypeMapping)), + _sqlExpressionFactory.Constant(0)) + }, + _sqlExpressionFactory.Constant(1)); + return _sqlExpressionFactory.Subtract(charIndexExpression, offsetExpression); + } } } \ No newline at end of file diff --git a/src/EFCore.Jet/Query/Internal/JetCompatibilityExpressionVisitor.cs b/src/EFCore.Jet/Query/Internal/JetCompatibilityExpressionVisitor.cs index 675be49f..22dad175 100644 --- a/src/EFCore.Jet/Query/Internal/JetCompatibilityExpressionVisitor.cs +++ b/src/EFCore.Jet/Query/Internal/JetCompatibilityExpressionVisitor.cs @@ -2,6 +2,8 @@ // Licensed under the MIT. See LICENSE in the project root for license information. using System; +using System.Collections.Generic; +using System.Linq; using System.Linq.Expressions; using Microsoft.EntityFrameworkCore.Diagnostics; using Microsoft.EntityFrameworkCore.Infrastructure; @@ -21,8 +23,11 @@ protected override Expression VisitExtension(Expression extensionExpression) ExceptExpression exceptExpression => VisitExcept(exceptExpression), IntersectExpression intersectExpression => VisitIntersect(intersectExpression), JsonScalarExpression jsonScalarExpression => VisitJsonScalar(jsonScalarExpression), - + InnerJoinExpression innerJoinExpression => VisitInnerJoin(innerJoinExpression), + LeftJoinExpression leftJoinExpression => VisitLeftJoin(leftJoinExpression), + SelectExpression selectExpression => VisitSelect(selectExpression), ShapedQueryExpression shapedQueryExpression => shapedQueryExpression.Update(Visit(shapedQueryExpression.QueryExpression), Visit(shapedQueryExpression.ShaperExpression)), + CrossJoinExpression crossJoinExpression => VisitCrossJoin(crossJoinExpression), _ => base.VisitExtension(extensionExpression) }; @@ -46,6 +51,75 @@ protected virtual Expression VisitJsonScalar(JsonScalarExpression jsonScalarExpr ? TranslationFailed(jsonScalarExpression) : jsonScalarExpression; + protected virtual Expression VisitLeftJoin(LeftJoinExpression leftJoinExpression) + { + if (leftJoinExpression.JoinPredicate is SqlBinaryExpression sqlBinaryExpression) + { + if (ContainsUnsupportCol(sqlBinaryExpression)) + { + return TranslationFailed(leftJoinExpression.JoinPredicate); + } + } + + if (leftJoinExpression.JoinPredicate is SqlUnaryExpression) + { + return TranslationFailed(leftJoinExpression.JoinPredicate); + } + return base.VisitExtension(leftJoinExpression); + } + + protected virtual Expression VisitInnerJoin(InnerJoinExpression innerJoinExpression) + { + if (innerJoinExpression.JoinPredicate is SqlBinaryExpression sqlBinaryExpression) + { + if (ContainsUnsupportCol(sqlBinaryExpression)) + { + return TranslationFailed(innerJoinExpression.JoinPredicate); + } + } + + if (innerJoinExpression.JoinPredicate is SqlUnaryExpression) + { + return TranslationFailed(innerJoinExpression.JoinPredicate); + } + return base.VisitExtension(innerJoinExpression); + } + + protected virtual Expression VisitSelect(SelectExpression selectExpression) + { + + return base.VisitExtension(selectExpression); + } + + protected virtual Expression VisitCrossJoin(CrossJoinExpression crossJoinExpression) + { + return base.VisitExtension(crossJoinExpression); + } + protected virtual Expression TranslationFailed(Expression expression) - => throw new InvalidOperationException(CoreStrings.TranslationFailed(expression.Print())); + => throw new InvalidOperationException("Unsupported Jet expression: " + expression.Print()); + + private bool ContainsUnsupportCol(SqlBinaryExpression binaryexp) + { + bool containsunsupported = false; + if (binaryexp.Left is SqlBinaryExpression left) + { + containsunsupported = ContainsUnsupportCol(left) ^ containsunsupported; + } + else if (binaryexp.Left is SqlConstantExpression or ScalarSubqueryExpression) + { + containsunsupported = true; + } + + if (binaryexp.Right is SqlBinaryExpression right) + { + containsunsupported = ContainsUnsupportCol(right) ^ containsunsupported; + } + else if (binaryexp.Right is SqlConstantExpression or ScalarSubqueryExpression) + { + containsunsupported = true; + } + + return containsunsupported; + } } \ No newline at end of file diff --git a/src/EFCore.Jet/Query/Internal/JetDateTimeExpressionVisitor.cs b/src/EFCore.Jet/Query/Internal/JetDateTimeExpressionVisitor.cs index 3989d604..e0dcd72c 100644 --- a/src/EFCore.Jet/Query/Internal/JetDateTimeExpressionVisitor.cs +++ b/src/EFCore.Jet/Query/Internal/JetDateTimeExpressionVisitor.cs @@ -50,14 +50,14 @@ protected virtual SelectExpression VisitSelect(SelectExpression selectExpression .ToList(); var expression = selectExpression.Update( - newProjections, selectExpression.Tables.ToList(), selectExpression.Predicate, selectExpression.GroupBy.ToList(), selectExpression.Having, + newProjections, selectExpression.Orderings.ToList(), - selectExpression.Limit, - selectExpression.Offset); + selectExpression.Offset, + selectExpression.Limit); return expression; } diff --git a/src/EFCore.Jet/Query/Internal/JetLiftOrderByPostprocessor.cs b/src/EFCore.Jet/Query/Internal/JetLiftOrderByPostprocessor.cs index b92b8ad7..ccc78358 100644 --- a/src/EFCore.Jet/Query/Internal/JetLiftOrderByPostprocessor.cs +++ b/src/EFCore.Jet/Query/Internal/JetLiftOrderByPostprocessor.cs @@ -3,36 +3,26 @@ using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Linq.Expressions; +using System.Reflection; +using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Query; using Microsoft.EntityFrameworkCore.Query.SqlExpressions; using Microsoft.EntityFrameworkCore.Storage; namespace EntityFrameworkCore.Jet.Query.Internal; - +#pragma warning disable CS9113 /// /// 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. /// -public class JetLiftOrderByPostprocessor : ExpressionVisitor +[EntityFrameworkInternal] +public class JetLiftOrderByPostprocessor(IRelationalTypeMappingSource typeMappingSource, + ISqlExpressionFactory sqlExpressionFactory, + SqlAliasManager sqlAliasManager) + : ExpressionVisitor { - private readonly IRelationalTypeMappingSource _typeMappingSource; - private readonly ISqlExpressionFactory _sqlExpressionFactory; - - /// - /// 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. - /// - public JetLiftOrderByPostprocessor( - IRelationalTypeMappingSource typeMappingSource, - ISqlExpressionFactory sqlExpressionFactory) - { - (_typeMappingSource, _sqlExpressionFactory) = (typeMappingSource, sqlExpressionFactory); - } - /// /// 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 @@ -56,9 +46,11 @@ public virtual Expression Process(Expression expression) switch (expression) { case ShapedQueryExpression shapedQueryExpression: - shapedQueryExpression = shapedQueryExpression.UpdateQueryExpression(Visit(shapedQueryExpression.QueryExpression)); - shapedQueryExpression = shapedQueryExpression.UpdateShaperExpression(Visit(shapedQueryExpression.ShaperExpression)); - return shapedQueryExpression; + shapedQueryExpression = shapedQueryExpression + .UpdateQueryExpression(Visit(shapedQueryExpression.QueryExpression)) + .UpdateShaperExpression(Visit(shapedQueryExpression.ShaperExpression)); + + return shapedQueryExpression.UpdateShaperExpression(Visit(shapedQueryExpression.ShaperExpression)); case RelationalSplitCollectionShaperExpression relationalSplitCollectionShaperExpression: var newSelect = Visit(relationalSplitCollectionShaperExpression.SelectExpression); var newInner = Visit(relationalSplitCollectionShaperExpression.InnerShaper); @@ -77,7 +69,7 @@ public virtual Expression Process(Expression expression) var sqlExpression = selectExpression.Orderings[i].Expression; if (sqlExpression is not ColumnExpression && sqlExpression is not SqlConstantExpression && sqlExpression is not SqlParameterExpression) { - var locate = new JetLocateScalarSubqueryVisitor(_typeMappingSource, _sqlExpressionFactory); + var locate = new JetLocateScalarSubqueryVisitor(typeMappingSource, sqlExpressionFactory); var locatedExpression = locate.Visit(sqlExpression); bool containsscalar = locatedExpression is ScalarSubqueryExpression or ExistsExpression; if (containsscalar) @@ -99,7 +91,7 @@ public virtual Expression Process(Expression expression) if (existingIndex != -1) { bool referouter = sqlExpression is ColumnExpression colexp1 && - selectExpression.Tables.Contains(colexp1.Table); + selectExpression.Tables.Select(d => d.Alias).Contains(colexp1.TableAlias); columnsToRewrite.Add(i, (existingIndex, selectExpression.Orderings[i], selectExpression.Orderings[i].IsAscending, false, referouter)); } @@ -117,14 +109,21 @@ public virtual Expression Process(Expression expression) if (selectExpression.Limit != null) { var limit = selectExpression.Limit; - selectExpression = selectExpression.Update(selectExpression.Projection, selectExpression.Tables, - selectExpression.Predicate, selectExpression.GroupBy, selectExpression.Having, - selectExpression.Orderings, null, null); + MethodInfo? dynMethod1 = selectExpression.GetType().GetMethod("set_Limit", + BindingFlags.NonPublic | BindingFlags.Instance); + dynMethod1?.Invoke(selectExpression, new object?[] { null }); + + //This doesn't work. Update returns a new select expression but without the sql alias manager. Pushdown requires the alias manager + /*selectExpression = selectExpression.Update(selectExpression.Tables, + selectExpression.Predicate, selectExpression.GroupBy, selectExpression.Having, selectExpression.Projection, + selectExpression.Orderings, null, null);*/ + selectExpression = AddAliasManager(selectExpression); selectExpression.PushdownIntoSubquery(); selectExpression.ApplyLimit(limit); } else { + selectExpression = AddAliasManager(selectExpression); selectExpression.PushdownIntoSubquery(); } @@ -148,15 +147,44 @@ public virtual Expression Process(Expression expression) if (isscalarselect && selectExpression.Projection.Count > 1) { List newProjections = [selectExpression.Projection[0]]; - selectExpression = selectExpression.Update(newProjections, selectExpression.Tables, selectExpression.Predicate, - selectExpression.GroupBy, selectExpression.Having, selectExpression.Orderings, - selectExpression.Limit, selectExpression.Offset); + selectExpression = selectExpression.Update(selectExpression.Tables, selectExpression.Predicate, + selectExpression.GroupBy, selectExpression.Having, newProjections, selectExpression.Orderings, + selectExpression.Offset, selectExpression.Limit); } var result = base.Visit(selectExpression); return result; } + case RelationalGroupByShaperExpression relationalGroupByShaperExpression: + { + return base.VisitExtension(relationalGroupByShaperExpression); + } } return base.Visit(expression); } + + private SelectExpression AddAliasManager(SelectExpression selectExpression) + { + //get private IsMutable property + var ismutable = selectExpression.GetType().GetProperty("IsMutable", BindingFlags.NonPublic | BindingFlags.Instance); + //get value + var ismut = (bool)ismutable?.GetValue(selectExpression)!; + + //create new selectexp from selectexpression with aliasmanager + var newselect = new SelectExpression(selectExpression.Alias, + selectExpression.Tables.ToList(), + selectExpression.Predicate, selectExpression.GroupBy.ToList(), selectExpression.Having, + selectExpression.Projection.ToList(), selectExpression.IsDistinct, + selectExpression.Orderings.ToList(), selectExpression.Offset, selectExpression.Limit, + selectExpression.Tags, new Dictionary(), sqlAliasManager, ismut); + + //do private stuff + //_projectionMapping = newProjectionMappings, + //_clientProjections = newClientProjections, + var clientProj = selectExpression.GetType().GetField("_clientProjections", BindingFlags.NonPublic | BindingFlags.Instance); + var projMap = selectExpression.GetType().GetField("_projectionMapping", BindingFlags.NonPublic | BindingFlags.Instance); + clientProj?.SetValue(newselect, clientProj.GetValue(selectExpression)); + projMap?.SetValue(newselect, projMap.GetValue(selectExpression)); + return newselect; + } } diff --git a/src/EFCore.Jet/Query/Internal/JetLocateScalarSubqueryVisitor.cs b/src/EFCore.Jet/Query/Internal/JetLocateScalarSubqueryVisitor.cs index 2691a6a4..3de8a119 100644 --- a/src/EFCore.Jet/Query/Internal/JetLocateScalarSubqueryVisitor.cs +++ b/src/EFCore.Jet/Query/Internal/JetLocateScalarSubqueryVisitor.cs @@ -86,7 +86,7 @@ protected override Expression VisitCrossJoin(CrossJoinExpression crossJoinExpres protected override Expression VisitDelete(DeleteExpression deleteExpression) { - return deleteExpression.Update((SelectExpression)Visit(deleteExpression.SelectExpression)); + return deleteExpression.Update(deleteExpression.Table,(SelectExpression)Visit(deleteExpression.SelectExpression)); } protected override Expression VisitDistinct(DistinctExpression distinctExpression) @@ -290,7 +290,7 @@ protected override Expression VisitSelect(SelectExpression selectExpression) return changed ? selectExpression.Update( - projections, tables, predicate, groupBy, havingExpression, orderings, limit, offset) + tables, predicate, groupBy, havingExpression, projections, orderings, offset, limit) : selectExpression; } diff --git a/src/EFCore.Jet/Query/Internal/JetQueryCompilationContext.cs b/src/EFCore.Jet/Query/Internal/JetQueryCompilationContext.cs new file mode 100644 index 00000000..abbc9a8a --- /dev/null +++ b/src/EFCore.Jet/Query/Internal/JetQueryCompilationContext.cs @@ -0,0 +1,61 @@ +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using Microsoft.EntityFrameworkCore.Query; + +namespace EntityFrameworkCore.Jet.Query.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. +/// +public class JetQueryCompilationContext : RelationalQueryCompilationContext +{ + /// + /// 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. + /// + public JetQueryCompilationContext( + QueryCompilationContextDependencies dependencies, + RelationalQueryCompilationContextDependencies relationalDependencies, + bool async) + : this( + dependencies, relationalDependencies, async, precompiling: false, + nonNullableReferenceTypeParameters: null) + { + } + + /// + /// 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. + /// + public JetQueryCompilationContext( + QueryCompilationContextDependencies dependencies, + RelationalQueryCompilationContextDependencies relationalDependencies, + bool async, + bool precompiling, + IReadOnlySet? nonNullableReferenceTypeParameters) + : base(dependencies, relationalDependencies, async, precompiling, nonNullableReferenceTypeParameters) + { + } + + /// + /// Tracks whether translation is currently within the argument of an aggregate method (e.g. MAX, COUNT); SQL Server does not + /// allow subqueries and aggregates in that context. + /// + /// + /// 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. + /// + public virtual bool InAggregateFunction { get; set; } + + /// + public override bool SupportsPrecompiledQuery => true; +} diff --git a/src/EFCore.Jet/Query/Internal/JetQueryCompilationContextFactory.cs b/src/EFCore.Jet/Query/Internal/JetQueryCompilationContextFactory.cs new file mode 100644 index 00000000..09f27cc2 --- /dev/null +++ b/src/EFCore.Jet/Query/Internal/JetQueryCompilationContextFactory.cs @@ -0,0 +1,64 @@ +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using EntityFrameworkCore.Jet.Storage.Internal; +using Microsoft.EntityFrameworkCore.Query; + +namespace EntityFrameworkCore.Jet.Query.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. +/// +public class JetQueryCompilationContextFactory : IQueryCompilationContextFactory +{ + private readonly IJetRelationalConnection _jetConnection; + + /// + /// 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. + /// + public JetQueryCompilationContextFactory( + QueryCompilationContextDependencies dependencies, + RelationalQueryCompilationContextDependencies relationalDependencies, + IJetRelationalConnection jetConnection) + { + Dependencies = dependencies; + RelationalDependencies = relationalDependencies; + _jetConnection = jetConnection; + } + + /// + /// Dependencies for this service. + /// + protected virtual QueryCompilationContextDependencies Dependencies { get; } + + /// + /// Relational provider-specific dependencies for this service. + /// + protected virtual RelationalQueryCompilationContextDependencies RelationalDependencies { get; } + + /// + /// 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. + /// + public virtual QueryCompilationContext Create(bool async) + => new JetQueryCompilationContext( + Dependencies, RelationalDependencies, async); + + /// + /// 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. + /// + public virtual QueryCompilationContext CreatePrecompiled(bool async, IReadOnlySet nonNullableReferenceTypeParameters) + => new JetQueryCompilationContext( + Dependencies, RelationalDependencies, async, precompiling: true, + nonNullableReferenceTypeParameters); +} diff --git a/src/EFCore.Jet/Query/Internal/JetQueryTranslationPostprocessor.cs b/src/EFCore.Jet/Query/Internal/JetQueryTranslationPostprocessor.cs index 8976c19a..1d680b99 100644 --- a/src/EFCore.Jet/Query/Internal/JetQueryTranslationPostprocessor.cs +++ b/src/EFCore.Jet/Query/Internal/JetQueryTranslationPostprocessor.cs @@ -22,14 +22,14 @@ public class JetQueryTranslationPostprocessor : RelationalQueryTranslationPostpr public JetQueryTranslationPostprocessor( QueryTranslationPostprocessorDependencies dependencies, RelationalQueryTranslationPostprocessorDependencies relationalDependencies, - QueryCompilationContext queryCompilationContext, + RelationalQueryCompilationContext queryCompilationContext, IRelationalTypeMappingSource relationalTypeMappingSource, IJetOptions options) : base(dependencies, relationalDependencies, queryCompilationContext) { _relationalTypeMappingSource = relationalTypeMappingSource; _options = options; - _liftOrderByPostprocessor = new JetLiftOrderByPostprocessor(relationalTypeMappingSource, relationalDependencies.SqlExpressionFactory); + _liftOrderByPostprocessor = new JetLiftOrderByPostprocessor(relationalTypeMappingSource, relationalDependencies.SqlExpressionFactory, queryCompilationContext.SqlAliasManager); _skipTakePostprocessor = new JetSkipTakePostprocessor(relationalTypeMappingSource, relationalDependencies.SqlExpressionFactory, ((RelationalQueryCompilationContext)QueryCompilationContext).QuerySplittingBehavior); } @@ -37,6 +37,7 @@ public JetQueryTranslationPostprocessor( public override Expression Process(Expression query) { query = _skipTakePostprocessor.Process(query); + //query = _liftOrderByPostprocessor.Process(query); query = base.Process(query); //query = _skipTakePostprocessor.Process(query); diff --git a/src/EFCore.Jet/Query/Internal/JetQueryTranslationPostprocessorFactory.cs b/src/EFCore.Jet/Query/Internal/JetQueryTranslationPostprocessorFactory.cs index fb00addf..e5bb5576 100644 --- a/src/EFCore.Jet/Query/Internal/JetQueryTranslationPostprocessorFactory.cs +++ b/src/EFCore.Jet/Query/Internal/JetQueryTranslationPostprocessorFactory.cs @@ -43,7 +43,7 @@ public virtual QueryTranslationPostprocessor Create(QueryCompilationContext quer => new JetQueryTranslationPostprocessor( _dependencies, _relationalDependencies, - queryCompilationContext, + (RelationalQueryCompilationContext)queryCompilationContext, _relationalTypeMappingSource, _options); } diff --git a/src/EFCore.Jet/Query/Internal/JetQueryableMethodTranslatingExpressionVisitor.cs b/src/EFCore.Jet/Query/Internal/JetQueryableMethodTranslatingExpressionVisitor.cs index b2c3c03b..ee372b7c 100644 --- a/src/EFCore.Jet/Query/Internal/JetQueryableMethodTranslatingExpressionVisitor.cs +++ b/src/EFCore.Jet/Query/Internal/JetQueryableMethodTranslatingExpressionVisitor.cs @@ -9,6 +9,7 @@ using System.Reflection; using System.Text.RegularExpressions; using EntityFrameworkCore.Jet.Internal; +using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; using Microsoft.EntityFrameworkCore.Metadata; using Microsoft.EntityFrameworkCore.Metadata.Internal; @@ -36,7 +37,7 @@ public class JetQueryableMethodTranslatingExpressionVisitor : RelationalQueryabl public JetQueryableMethodTranslatingExpressionVisitor( QueryableMethodTranslatingExpressionVisitorDependencies dependencies, RelationalQueryableMethodTranslatingExpressionVisitorDependencies relationalDependencies, - QueryCompilationContext queryCompilationContext) + RelationalQueryCompilationContext queryCompilationContext) : base(dependencies, relationalDependencies, queryCompilationContext) { } @@ -108,7 +109,8 @@ protected override bool IsValidSelectExpressionForExecuteDelete( var projectionBindingExpression = (ProjectionBindingExpression)shaper.ValueBufferExpression; var projection = (StructuralTypeProjectionExpression)selectExpression.GetProjection(projectionBindingExpression); var column = projection.BindProperty(shaper.StructuralType.GetProperties().First()); - table = column.Table; + table = selectExpression.GetTable(column).UnwrapJoin(); + //TODO: do I need the following given we now have an unwrapjoin in the above line? if (table is JoinExpressionBase joinExpressionBase) { table = joinExpressionBase.Table; @@ -162,4 +164,10 @@ protected override bool IsValidSelectExpressionForExecuteUpdate( tableExpression = null; return false; } + + protected override ShapedQueryExpression? TranslateFirstOrDefault(ShapedQueryExpression source, LambdaExpression? predicate, + Type returnType, bool returnDefault) + { + return base.TranslateFirstOrDefault(source, predicate, returnType, returnDefault); + } } \ No newline at end of file diff --git a/src/EFCore.Jet/Query/Internal/JetQueryableMethodTranslatingExpressionVisitorFactory.cs b/src/EFCore.Jet/Query/Internal/JetQueryableMethodTranslatingExpressionVisitorFactory.cs index faae9007..2514e0d1 100644 --- a/src/EFCore.Jet/Query/Internal/JetQueryableMethodTranslatingExpressionVisitorFactory.cs +++ b/src/EFCore.Jet/Query/Internal/JetQueryableMethodTranslatingExpressionVisitorFactory.cs @@ -44,5 +44,5 @@ public JetQueryableMethodTranslatingExpressionVisitorFactory( /// doing so can result in application failures when updating to a new Entity Framework Core release. /// public virtual QueryableMethodTranslatingExpressionVisitor Create(QueryCompilationContext queryCompilationContext) - => new JetQueryableMethodTranslatingExpressionVisitor(Dependencies, RelationalDependencies, queryCompilationContext); + => new JetQueryableMethodTranslatingExpressionVisitor(Dependencies, RelationalDependencies, (RelationalQueryCompilationContext)queryCompilationContext); } diff --git a/src/EFCore.Jet/Query/Internal/JetSkipTakePostprocessor.cs b/src/EFCore.Jet/Query/Internal/JetSkipTakePostprocessor.cs index de78c4e1..5c5c1b48 100644 --- a/src/EFCore.Jet/Query/Internal/JetSkipTakePostprocessor.cs +++ b/src/EFCore.Jet/Query/Internal/JetSkipTakePostprocessor.cs @@ -74,6 +74,11 @@ public virtual Expression Process(Expression expression) { SqlExpression offset = selectExpression.Offset!; SqlExpression limit = selectExpression.Limit!; + if (offset is ColumnExpression || limit is ColumnExpression) + { + throw new InvalidOperationException( + "Unsupported Jet expression: Limit or offset can not reference a column"); + } var total = new SqlBinaryExpression(ExpressionType.Add, offset, limit, typeof(int), RelationalTypeMapping.NullMapping); MethodInfo? dynMethodO = selectExpression.GetType().GetMethod("set_Offset", diff --git a/src/EFCore.Jet/Query/Internal/JetSqlTranslatingExpressionVisitor.cs b/src/EFCore.Jet/Query/Internal/JetSqlTranslatingExpressionVisitor.cs index 2f3a494a..3f78265d 100644 --- a/src/EFCore.Jet/Query/Internal/JetSqlTranslatingExpressionVisitor.cs +++ b/src/EFCore.Jet/Query/Internal/JetSqlTranslatingExpressionVisitor.cs @@ -14,6 +14,9 @@ using System.Text; using EntityFrameworkCore.Jet.Internal; using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.EntityFrameworkCore.Metadata.Internal; +using Microsoft.EntityFrameworkCore.Storage; + namespace EntityFrameworkCore.Jet.Query.Internal; /// @@ -154,6 +157,26 @@ protected override Expression VisitUnary(UnaryExpression unaryExpression) return base.VisitUnary(unaryExpression); } + protected override Expression VisitExtension(Expression extensionExpression) + { + var result = base.VisitExtension(extensionExpression); + if (extensionExpression is ShapedQueryExpression shapedQueryExpression) + { + var shaperExpression = shapedQueryExpression.ShaperExpression; + if (shapedQueryExpression.ResultCardinality == ResultCardinality.SingleOrDefault + && !shaperExpression.Type.IsNullableType() && result is SqlFunctionExpression { Name: "COALESCE"} sqlFunctionExpression) + { + if (sqlFunctionExpression.Arguments?[1] is SqlConstantExpression { Value: DateTime { Ticks: 0 } }) + { + var newconst = new SqlConstantExpression(new DateTime(100, 1, 1), sqlFunctionExpression.Arguments[1].TypeMapping); + return _sqlExpressionFactory.Coalesce(sqlFunctionExpression.Arguments[0], + (SqlExpression)Visit(newconst)); + } + } + } + return result; + } + protected override Expression VisitMethodCall(MethodCallExpression methodCallExpression) { var method = methodCallExpression.Method; @@ -217,7 +240,7 @@ bool TryTranslateStartsEndsWithContains( // simple LIKE translation = patternConstant.Value switch { - null => _sqlExpressionFactory.Like(translatedInstance, _sqlExpressionFactory.Constant(null, stringTypeMapping)), + null => _sqlExpressionFactory.Like(translatedInstance, _sqlExpressionFactory.Constant(null,typeof(string), stringTypeMapping)), // In .NET, all strings start with/end with/contain the empty string, but SQL LIKE return false for empty patterns. // Return % which always matches instead. @@ -305,7 +328,7 @@ StartsEndsWithContains.StartsWith or StartsEndsWithContains.EndsWith "LEN", new[] { translatedPattern }, nullable: true, - argumentsPropagateNullability: new[] { true }, + argumentsPropagateNullability: new[] { false }, typeof(int)), _sqlExpressionFactory.Constant(0) ) @@ -344,7 +367,7 @@ StartsEndsWithContains.StartsWith or StartsEndsWithContains.EndsWith } } - private static string? ConstructLikePatternParameter( + public static string? ConstructLikePatternParameter( QueryContext queryContext, string baseParameterName, StartsEndsWithContains methodType) @@ -367,7 +390,7 @@ StartsEndsWithContains.StartsWith or StartsEndsWithContains.EndsWith _ => throw new UnreachableException() }; - private enum StartsEndsWithContains + public enum StartsEndsWithContains { StartsWith, EndsWith, diff --git a/src/EFCore.Jet/Query/Internal/SearchConditionConvertingExpressionVisitor.cs b/src/EFCore.Jet/Query/Internal/SearchConditionConvertingExpressionVisitor.cs index 858df924..27a44b5c 100644 --- a/src/EFCore.Jet/Query/Internal/SearchConditionConvertingExpressionVisitor.cs +++ b/src/EFCore.Jet/Query/Internal/SearchConditionConvertingExpressionVisitor.cs @@ -244,7 +244,7 @@ protected override Expression VisitSelect(SelectExpression selectExpression) return changed ? selectExpression.Update( - projections, tables, predicate, groupBy, havingExpression, orderings, limit, offset) + tables, predicate, groupBy, havingExpression, projections, orderings, offset, limit) : selectExpression; } @@ -626,7 +626,7 @@ protected override Expression VisitCollate([NotNull] CollateExpression collateEx /// doing so can result in application failures when updating to a new Entity Framework Core release. /// protected override Expression VisitDelete(DeleteExpression deleteExpression) - => deleteExpression.Update((SelectExpression)Visit(deleteExpression.SelectExpression)); + => deleteExpression.Update(deleteExpression.Table, (SelectExpression)Visit(deleteExpression.SelectExpression)); protected override Expression VisitDistinct([NotNull] DistinctExpression distinctExpression) { diff --git a/src/EFCore.Jet/Query/Internal/SkipTakeCollapsingExpressionVisitor.cs b/src/EFCore.Jet/Query/Internal/SkipTakeCollapsingExpressionVisitor.cs index f2d31139..8a728a38 100644 --- a/src/EFCore.Jet/Query/Internal/SkipTakeCollapsingExpressionVisitor.cs +++ b/src/EFCore.Jet/Query/Internal/SkipTakeCollapsingExpressionVisitor.cs @@ -64,11 +64,11 @@ protected override Expression VisitExtension(Expression extensionExpression) if (IsZero(selectExpression.Limit)) { var result = selectExpression.Update( - selectExpression.Projection, selectExpression.Tables, selectExpression.GroupBy.Count > 0 ? selectExpression.Predicate : _sqlExpressionFactory.Constant(false), selectExpression.GroupBy, selectExpression.GroupBy.Count > 0 ? _sqlExpressionFactory.Constant(false) : null, + selectExpression.Projection, new List(0), limit: null, offset: null); diff --git a/src/EFCore.Jet/Query/JetSqlExpressionFactory.cs b/src/EFCore.Jet/Query/JetSqlExpressionFactory.cs index 88f14b3a..f4517089 100644 --- a/src/EFCore.Jet/Query/JetSqlExpressionFactory.cs +++ b/src/EFCore.Jet/Query/JetSqlExpressionFactory.cs @@ -5,36 +5,32 @@ namespace EntityFrameworkCore.Jet.Query { - public class JetSqlExpressionFactory : SqlExpressionFactory + public class JetSqlExpressionFactory(SqlExpressionFactoryDependencies dependencies) : SqlExpressionFactory(dependencies) { - public JetSqlExpressionFactory(SqlExpressionFactoryDependencies dependencies) - : base(dependencies) - { - } #region Expression factory methods public SqlBinaryExpression? NullChecked( SqlExpression sqlExpression, RelationalTypeMapping? typeMapping = null) - => MakeBinary( + => (SqlBinaryExpression?)MakeBinary( ExpressionType.Coalesce, sqlExpression, Constant( - null, + null,typeof(string), RelationalTypeMapping.NullMapping), typeMapping); public CaseExpression NullChecked( SqlExpression checkSqlExpression, SqlExpression notNullSqlExpression) - => Case( + => (CaseExpression)Case( new[] { new CaseWhenClause( IsNull(checkSqlExpression), Constant( - null, + null,typeof(string), RelationalTypeMapping.NullMapping)) }, notNullSqlExpression); diff --git a/src/EFCore.Jet/Query/Sql/Internal/JetQuerySqlGenerator.cs b/src/EFCore.Jet/Query/Sql/Internal/JetQuerySqlGenerator.cs index 4b2e672e..f5c7c35a 100644 --- a/src/EFCore.Jet/Query/Sql/Internal/JetQuerySqlGenerator.cs +++ b/src/EFCore.Jet/Query/Sql/Internal/JetQuerySqlGenerator.cs @@ -67,6 +67,16 @@ public JetQuerySqlGenerator( //_jetSqlExpressionFactory = jetSqlExpressionFactory; } + protected override bool TryGenerateWithoutWrappingSelect(SelectExpression selectExpression) + { + parent.TryPeek(out var exp); + if (exp is InExpression) + { + return false; + } + return base.TryGenerateWithoutWrappingSelect(selectExpression); + } + protected override Expression VisitSelect(SelectExpression selectExpression) { // Copy & pasted from `QuerySqlGenerator` to implement Jet's non-standard JOIN syntax and DUAL table @@ -117,7 +127,7 @@ protected override Expression VisitSelect(SelectExpression selectExpression) } var collist = cols.Where(c => - selectExpression.Tables.Contains(c.Table)).ToList(); + selectExpression.Tables.Select(d => d.Alias).Contains(c.TableAlias)).ToList(); parent.TryPeek(out var parentExpression); if (selectExpression.Tables.Count > 1 && selectExpression.Tables.Any(c => c is InnerJoinExpression) && collist.Count > 0 && parentExpression is SqlUnaryExpression or SqlBinaryExpression) { @@ -266,13 +276,11 @@ private void VisitJetTables(IReadOnlyList Tables, bool addf List tempcolexp; if (tableExpression is InnerJoinExpression expression) { - SqlBinaryExpression? binaryJoin = expression.JoinPredicate as SqlBinaryExpression; - SqlUnaryExpression? unaryJoin = expression.JoinPredicate as SqlUnaryExpression; - if (binaryJoin != null) + if (expression.JoinPredicate is SqlBinaryExpression binaryJoin) { tempcolexp = ExtractColumnExpressions(binaryJoin!); } - else if (unaryJoin != null) + else if (expression.JoinPredicate is SqlUnaryExpression unaryJoin) { tempcolexp = ExtractColumnExpressions(unaryJoin!); } @@ -284,7 +292,7 @@ private void VisitJetTables(IReadOnlyList Tables, bool addf bool refrencesfirsttable = false; foreach (ColumnExpression col in tempcolexp) { - if (col.Table == Tables[0]) + if (col.TableAlias == Tables[0].Alias) { refrencesfirsttable = true; break; @@ -429,7 +437,7 @@ private bool IsNonComposedSetOperation(SelectExpression selectExpression) && selectExpression.Projection.Count == setOperation.Source1.Projection.Count && selectExpression.Projection.Select( (pe, index) => pe.Expression is ColumnExpression column - && string.Equals(column.Table.Alias, setOperation.Alias, + && string.Equals(column.TableAlias, setOperation.Alias, StringComparison.OrdinalIgnoreCase) && string.Equals( column.Name, setOperation.Source1.Projection[index] @@ -534,7 +542,7 @@ protected override Expression VisitSqlBinary(SqlBinaryExpression sqlBinaryExpres if (sqlBinaryExpression.OperatorType == ExpressionType.Coalesce) { - SqlConstantExpression nullcons = new SqlConstantExpression(Expression.Constant(null), RelationalTypeMapping.NullMapping); + SqlConstantExpression nullcons = new SqlConstantExpression(null,typeof(string), RelationalTypeMapping.NullMapping); SqlUnaryExpression isnullexp = new SqlUnaryExpression(ExpressionType.Equal, sqlBinaryExpression.Left, typeof(bool), null); List whenclause = new List { @@ -571,8 +579,9 @@ protected override void GenerateIn(InExpression inExpression, bool negated) } } }*/ - + parent.Push(inExpression); base.GenerateIn(inExpression, negated); + parent.Pop(); } protected override Expression VisitSqlConstant(SqlConstantExpression sqlConstantExpression) @@ -651,7 +660,7 @@ protected Expression VisitJetConvertExpression(SqlUnaryExpression convertExpress SqlFunctionExpression notnullsqlexp = new SqlFunctionExpression(function, new SqlExpression[] { convertExpression.Operand }, false, new[] { false }, typeMapping.ClrType, null); - SqlConstantExpression nullcons = new SqlConstantExpression(Expression.Constant(null), RelationalTypeMapping.NullMapping); + SqlConstantExpression nullcons = new SqlConstantExpression(null,typeof(string), RelationalTypeMapping.NullMapping); SqlUnaryExpression isnullexp = new SqlUnaryExpression(ExpressionType.Equal, checksqlexp, typeof(bool), null); List whenclause = new List { @@ -741,6 +750,7 @@ protected override string GetOperator([JetBrains.Annotations.NotNull] SqlBinaryE ExpressionType.Modulo => " MOD ", ExpressionType.Or => " BOR ", ExpressionType.Not => " BNOT ", + ExpressionType.ExclusiveOr => " BXOR ", ExpressionType.Divide when binaryExpression.Type == typeof(Int32) => " \\ ", _ => base.GetOperator(binaryExpression), }; @@ -1006,7 +1016,7 @@ protected override Expression VisitDelete(DeleteExpression deleteExpression) } throw new InvalidOperationException( - RelationalStrings.ExecuteOperationWithUnsupportedOperatorInSqlGeneration(nameof(RelationalQueryableExtensions.ExecuteDelete))); + RelationalStrings.ExecuteOperationWithUnsupportedOperatorInSqlGeneration(nameof(EntityFrameworkQueryableExtensions.ExecuteDelete))); } /// @@ -1056,7 +1066,7 @@ protected override Expression VisitUpdate(UpdateExpression updateExpression) } throw new InvalidOperationException( - RelationalStrings.ExecuteOperationWithUnsupportedOperatorInSqlGeneration(nameof(RelationalQueryableExtensions.ExecuteUpdate))); + RelationalStrings.ExecuteOperationWithUnsupportedOperatorInSqlGeneration(nameof(EntityFrameworkQueryableExtensions.ExecuteUpdate))); } /// diff --git a/src/EFCore.Jet/Scaffolding/Internal/JetDatabaseModelFactory.cs b/src/EFCore.Jet/Scaffolding/Internal/JetDatabaseModelFactory.cs index 7a11e9f4..f4b9f521 100644 --- a/src/EFCore.Jet/Scaffolding/Internal/JetDatabaseModelFactory.cs +++ b/src/EFCore.Jet/Scaffolding/Internal/JetDatabaseModelFactory.cs @@ -405,7 +405,7 @@ private string GetStoreType(string dataTypeName, int precision, int scale, int m (string.Equals(dataTypeName, "decimal", StringComparison.OrdinalIgnoreCase) || string.Equals(dataTypeName, "numeric", StringComparison.OrdinalIgnoreCase))) { - return $"{dataTypeName}({precision}, {scale})"; + return $"{dataTypeName}({precision},{scale})"; } if (maxLength > 0) diff --git a/src/EFCore.Jet/Storage/Internal/JetDateTimeTypeMapping.cs b/src/EFCore.Jet/Storage/Internal/JetDateTimeTypeMapping.cs index 626e68e7..67676892 100644 --- a/src/EFCore.Jet/Storage/Internal/JetDateTimeTypeMapping.cs +++ b/src/EFCore.Jet/Storage/Internal/JetDateTimeTypeMapping.cs @@ -148,14 +148,14 @@ private static decimal GetDateTimeDoubleValueAsDecimal(DateTime dateTime, bool m private static DateTime CheckDateTimeValue(DateTime dateTime) { - if (dateTime < JetConfiguration.TimeSpanOffset) + if (dateTime < new DateTime(100,1,1)) { if (dateTime != default) { throw new InvalidOperationException($"The {nameof(DateTime)} value '{dateTime}' is smaller than the minimum supported value of '{JetConfiguration.TimeSpanOffset}'."); } - dateTime = JetConfiguration.TimeSpanOffset; + //dateTime = JetConfiguration.TimeSpanOffset; } return dateTime; diff --git a/src/EFCore.Jet/Storage/Internal/JetTypeMappingSource.cs b/src/EFCore.Jet/Storage/Internal/JetTypeMappingSource.cs index 663580b2..031372f8 100644 --- a/src/EFCore.Jet/Storage/Internal/JetTypeMappingSource.cs +++ b/src/EFCore.Jet/Storage/Internal/JetTypeMappingSource.cs @@ -43,7 +43,7 @@ public class JetTypeMappingSource : RelationalTypeMappingSource private readonly JetFloatTypeMapping _single = new JetFloatTypeMapping("single"); private readonly JetDoubleTypeMapping _double = new JetDoubleTypeMapping("double"); - private readonly JetDecimalTypeMapping _decimal = new JetDecimalTypeMapping("decimal(18, 2)", DbType.Decimal, precision: 18, scale: 2, StoreTypePostfix.PrecisionAndScale); + private readonly JetDecimalTypeMapping _decimal = new JetDecimalTypeMapping("decimal(18,2)", DbType.Decimal, precision: 18, scale: 2, StoreTypePostfix.PrecisionAndScale); private readonly JetDecimalTypeMapping _decimal18_0 = new JetDecimalTypeMapping("decimal", DbType.Decimal, precision: 18, scale: 0); private readonly JetDecimalTypeMapping _currency = new JetDecimalTypeMapping("currency", DbType.Currency, storeTypePostfix:StoreTypePostfix.None); diff --git a/test/Directory.Build.props b/test/Directory.Build.props index 2bfb85bb..bf7fc493 100644 --- a/test/Directory.Build.props +++ b/test/Directory.Build.props @@ -2,9 +2,9 @@ - $(NoWarn);EF1001;xUnit1003;xUnit1013 - True - + $(NoWarn);CA1707;1591;xUnit1000;xUnit1003;xUnit1004;xUnit1010;xUnit1013;xUnit1026;xUnit2013;xUnit1024;NU1903;EF1001 + preview + net9.0 $(DefineConstants);FIXED_TEST_ORDER diff --git a/test/EFCore.Jet.Data.Tests/EFCore.Jet.Data.Tests.csproj b/test/EFCore.Jet.Data.Tests/EFCore.Jet.Data.Tests.csproj index 7865a910..bf125a66 100644 --- a/test/EFCore.Jet.Data.Tests/EFCore.Jet.Data.Tests.csproj +++ b/test/EFCore.Jet.Data.Tests/EFCore.Jet.Data.Tests.csproj @@ -4,6 +4,7 @@ $(JetTestWindowsOnlyTargetFramework) AnyCPU;x86;x64 EntityFrameworkCore.Jet.Data.Tests + disable diff --git a/test/EFCore.Jet.FunctionalTests/BatchingTest.cs b/test/EFCore.Jet.FunctionalTests/BatchingTest.cs index dbea563f..88b02eeb 100644 --- a/test/EFCore.Jet.FunctionalTests/BatchingTest.cs +++ b/test/EFCore.Jet.FunctionalTests/BatchingTest.cs @@ -3,16 +3,20 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore.Diagnostics.Internal; using Microsoft.EntityFrameworkCore.Infrastructure; using EntityFrameworkCore.Jet.Diagnostics.Internal; using EntityFrameworkCore.Jet.FunctionalTests.TestUtilities; using EntityFrameworkCore.Jet.Infrastructure; +using EntityFrameworkCore.Jet.Infrastructure.Internal; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Storage; using Microsoft.EntityFrameworkCore.TestUtilities; using Xunit; +using Microsoft.Extensions.Options; +#nullable disable // ReSharper disable UnusedAutoPropertyAccessor.Local // ReSharper disable InconsistentNaming namespace EntityFrameworkCore.Jet.FunctionalTests @@ -35,10 +39,10 @@ public BatchingTest(BatchingTestFixture fixture) [InlineData(false, true, false)] [InlineData(true, false, false)] [InlineData(false, false, false)] - public void Inserts_are_batched_correctly(bool clientPk, bool clientFk, bool clientOrder) + public Task Inserts_are_batched_correctly(bool clientPk, bool clientFk, bool clientOrder) { var expectedBlogs = new List(); - ExecuteWithStrategyInTransaction( + return ExecuteWithStrategyInTransactionAsync( context => { var owner1 = new Owner(); @@ -68,18 +72,18 @@ public void Inserts_are_batched_correctly(bool clientPk, bool clientFk, bool cli expectedBlogs.Add(blog); } - context.SaveChanges(); + return context.SaveChangesAsync(); }, context => AssertDatabaseState(context, clientOrder, expectedBlogs)); } [ConditionalFact] - public void Inserts_and_updates_are_batched_correctly() + public Task Inserts_and_updates_are_batched_correctly() { var expectedBlogs = new List(); - ExecuteWithStrategyInTransaction( - context => + return ExecuteWithStrategyInTransactionAsync( + async context => { var owner1 = new Owner { Name = "0" }; var owner2 = new Owner { Name = "1" }; @@ -96,7 +100,7 @@ public void Inserts_and_updates_are_batched_correctly() context.Set().Add(blog1); expectedBlogs.Add(blog1); - context.SaveChanges(); + await context.SaveChangesAsync(); owner2.Name = "2"; @@ -121,15 +125,178 @@ public void Inserts_and_updates_are_batched_correctly() context.Set().Add(blog3); expectedBlogs.Add(blog3); - context.SaveChanges(); + await context.SaveChangesAsync(); }, context => AssertDatabaseState(context, true, expectedBlogs)); } + [ConditionalTheory] + [InlineData(1)] + [InlineData(3)] + [InlineData(4)] + [InlineData(100)] + public Task Insertion_order_is_preserved(int maxBatchSize) + { + var blogId = new Guid(); + + return TestHelpers.ExecuteWithStrategyInTransactionAsync( + () => (BloggingContext)Fixture.CreateContext(maxBatchSize: maxBatchSize), + UseTransaction, async context => + { + var owner = new Owner(); + var blog = new Blog { Owner = owner }; + + for (var i = 0; i < 20; i++) + { + context.Add(new Post { Order = i, Blog = blog }); + } + + await context.SaveChangesAsync(); + + blogId = blog.Id; + }, async context => + { + var posts = context.Set().Where(p => p.BlogId == blogId).OrderBy(p => p.Order); + var lastId = 0; + foreach (var post in await posts.ToListAsync()) + { + Assert.True(post.PostId > lastId, $"Last ID: {lastId}, current ID: {post.PostId}"); + lastId = post.PostId; + } + }); + } + [ConditionalFact] - public void Inserts_when_database_type_is_different() + public async Task Deadlock_on_inserts_and_deletes_with_dependents_is_handled_correctly() { - ExecuteWithStrategyInTransaction( + var blogs = new List(); + + using (var context = CreateContext()) + { + var owner1 = new Owner { Name = "0" }; + var owner2 = new Owner { Name = "1" }; + context.Owners.Add(owner1); + context.Owners.Add(owner2); + + blogs.Add( + new Blog + { + Id = Guid.NewGuid(), + Owner = owner1, + Order = 1 + }); + blogs.Add( + new Blog + { + Id = Guid.NewGuid(), + Owner = owner2, + Order = 2 + }); + blogs.Add( + new Blog + { + Id = Guid.NewGuid(), + Owner = owner1, + Order = 3 + }); + blogs.Add( + new Blog + { + Id = Guid.NewGuid(), + Owner = owner2, + Order = 4 + }); + + context.AddRange(blogs); + + await context.SaveChangesAsync(); + } + + var tasks = new List(); + for (var i = 0; i < 10; i++) + { + foreach (var blog in blogs) + { + tasks.Add(RemoveAndAddPosts(blog)); + } + } + + Task.WaitAll(tasks.ToArray()); + + async Task RemoveAndAddPosts(Blog blog) + { + using var context = (BloggingContext)Fixture.CreateContext(useConnectionString: true); + + context.Attach(blog); + blog.Posts.Clear(); + + blog.Posts.Add(new Post { Comments = { new Comment() } }); + blog.Posts.Add(new Post { Comments = { new Comment() } }); + blog.Posts.Add(new Post { Comments = { new Comment() } }); + + await context.SaveChangesAsync(); + } + + await Fixture.ReseedAsync(); + } + + [ConditionalFact] + public async Task Deadlock_on_deletes_with_dependents_is_handled_correctly() + { + var owners = new[] { new Owner { Name = "0" }, new Owner { Name = "1" } }; + using (var context = CreateContext()) + { + context.Owners.AddRange(owners); + + for (var h = 0; h <= 40; h++) + { + var owner = owners[h % 2]; + var blog = new Blog + { + Id = Guid.NewGuid(), + Owner = owner, + Order = h + }; + + for (var i = 0; i <= 40; i++) + { + blog.Posts.Add(new Post { Comments = { new Comment() } }); + } + + context.Add(blog); + } + + await context.SaveChangesAsync(); + } + + async Task Action(Owner owner) + { + using var context = (BloggingContext)Fixture.CreateContext(useConnectionString: true); + + context.RemoveRange(await context.Blogs.Where(b => b.OwnerId == owner.Id).ToListAsync()); + + await context.SaveChangesAsync(); + } + + var tasks = new List(); + foreach (var owner in owners) + { + tasks.Add(Action(owner)); + } + + Task.WaitAll(tasks.ToArray()); + + using (var context = CreateContext()) + { + Assert.Empty(await context.Blogs.ToListAsync()); + } + + await Fixture.ReseedAsync(); + } + + [ConditionalFact] + public Task Inserts_when_database_type_is_different() + => ExecuteWithStrategyInTransactionAsync( context => { var owner1 = new Owner { Id = "0", Name = "Zero" }; @@ -137,26 +304,23 @@ public void Inserts_when_database_type_is_different() context.Owners.Add(owner1); context.Owners.Add(owner2); - context.SaveChanges(); - }, - context => Assert.Equal(2, context.Owners.Count())); - } + return context.SaveChangesAsync(); + }, async context => Assert.Equal(2, await context.Owners.CountAsync())); [ConditionalTheory] [InlineData(3)] [InlineData(4)] - public void Inserts_are_batched_only_when_necessary(int minBatchSize) + public Task Inserts_are_batched_only_when_necessary(int minBatchSize) { var expectedBlogs = new List(); - TestHelpers.ExecuteWithStrategyInTransaction( + return TestHelpers.ExecuteWithStrategyInTransactionAsync( () => (BloggingContext)Fixture.CreateContext(minBatchSize), - UseTransaction, - context => + UseTransaction, async context => { var owner = new Owner(); context.Owners.Add(owner); - for (var i = 1; i < 4; i++) + for (var i = 1; i < 3; i++) { var blog = new Blog { Id = Guid.NewGuid(), Owner = owner }; @@ -166,7 +330,7 @@ public void Inserts_are_batched_only_when_necessary(int minBatchSize) Fixture.TestSqlLoggerFactory.Clear(); - context.SaveChanges(); + await context.SaveChangesAsync(); Assert.Contains( minBatchSize == 3 @@ -176,17 +340,17 @@ public void Inserts_are_batched_only_when_necessary(int minBatchSize) .GenerateMessage(3, 4), Fixture.TestSqlLoggerFactory.Log.Select(l => l.Message)); - Assert.Equal(minBatchSize <= 3 ? 2 : 4, Fixture.TestSqlLoggerFactory.SqlStatements.Count); + Assert.Equal(minBatchSize <= 3 ? 1 : 3, Fixture.TestSqlLoggerFactory.SqlStatements.Count); }, context => AssertDatabaseState(context, false, expectedBlogs)); } - private void AssertDatabaseState(DbContext context, bool clientOrder, List expectedBlogs) + private async Task AssertDatabaseState(DbContext context, bool clientOrder, List expectedBlogs) { expectedBlogs = clientOrder ? expectedBlogs.OrderBy(b => b.Order).ToList() : expectedBlogs.OrderBy(b => b.Id).ToList(); var actualBlogs = clientOrder - ? context.Set().OrderBy(b => b.Order).ToList() + ? await context.Set().OrderBy(b => b.Order).ToListAsync() : expectedBlogs.OrderBy(b => b.Id).ToList(); Assert.Equal(expectedBlogs.Count, actualBlogs.Count); @@ -203,10 +367,10 @@ private void AssertDatabaseState(DbContext context, bool clientOrder, List private BloggingContext CreateContext() => (BloggingContext)Fixture.CreateContext(); - private void ExecuteWithStrategyInTransaction( - Action testOperation, - Action nestedTestOperation) - => TestHelpers.ExecuteWithStrategyInTransaction( + private Task ExecuteWithStrategyInTransactionAsync( + Func testOperation, + Func nestedTestOperation) + => TestHelpers.ExecuteWithStrategyInTransactionAsync( CreateContext, UseTransaction, testOperation, nestedTestOperation); protected void UseTransaction(DatabaseFacade facade, IDbContextTransaction transaction) @@ -248,6 +412,7 @@ private class Blog public string OwnerId { get; set; } public Owner Owner { get; set; } public byte[] Version { get; set; } + public ICollection Posts { get; } = new HashSet(); } private class Owner @@ -257,6 +422,22 @@ private class Owner public byte[] Version { get; set; } } + private class Post + { + public int PostId { get; set; } + public int? Order { get; set; } + public Guid BlogId { get; set; } + public Blog Blog { get; set; } + public ICollection Comments { get; } = new HashSet(); + } + + private class Comment + { + public int CommentId { get; set; } + public int PostId { get; set; } + public Post Post { get; set; } + } + public class BatchingTestFixture : SharedStoreFixtureBase { protected override string StoreName { get; } = "BatchingTest"; @@ -267,19 +448,39 @@ public class BatchingTestFixture : SharedStoreFixtureBase protected override bool ShouldLogCategory(string logCategory) => logCategory == DbLoggerCategory.Update.Name; - protected override void Seed(PoolableDbContext context) + protected override async Task SeedAsync(PoolableDbContext context) { - context.Database.EnsureCreatedResiliently(); - context.Database.ExecuteSqlRaw( + await context.Database.EnsureCreatedResilientlyAsync(); + await context.Database.ExecuteSqlRawAsync( @" ALTER TABLE Owners ALTER COLUMN Name nvarchar(255);"); } - public DbContext CreateContext(int minBatchSize) + public DbContext CreateContext(int? minBatchSize = null, + int? maxBatchSize = null, + bool useConnectionString = false) { - var optionsBuilder = new DbContextOptionsBuilder(CreateOptions()); - new JetDbContextOptionsBuilder(optionsBuilder).MinBatchSize(minBatchSize); + var options = CreateOptions(); + var optionsBuilder = new DbContextOptionsBuilder(options); + if (useConnectionString) + { + RelationalOptionsExtension extension = options.FindExtension() + ?? new JetOptionsExtension(); + + extension = extension.WithConnection(null).WithConnectionString(((JetTestStore)TestStore).ConnectionString); + ((IDbContextOptionsBuilderInfrastructure)optionsBuilder).AddOrUpdateExtension(extension); + } + + if (minBatchSize.HasValue) + { + new JetDbContextOptionsBuilder(optionsBuilder).MinBatchSize(minBatchSize.Value); + } + + if (maxBatchSize.HasValue) + { + new JetDbContextOptionsBuilder(optionsBuilder).MinBatchSize(maxBatchSize.Value); + } return new BloggingContext(optionsBuilder.Options); } } diff --git a/test/EFCore.Jet.FunctionalTests/BuiltInDataTypesJetTest.cs b/test/EFCore.Jet.FunctionalTests/BuiltInDataTypesJetTest.cs index 9cca119d..53c55cb2 100644 --- a/test/EFCore.Jet.FunctionalTests/BuiltInDataTypesJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/BuiltInDataTypesJetTest.cs @@ -9,6 +9,7 @@ using System.Linq; using System.Linq.Expressions; using System.Text; +using System.Threading.Tasks; using EntityFrameworkCore.Jet.FunctionalTests.TestUtilities; using EntityFrameworkCore.Jet.Infrastructure; using Microsoft.EntityFrameworkCore; @@ -27,6 +28,9 @@ // ReSharper disable CompareOfFloatsByEqualityOperator // ReSharper disable UnusedParameter.Local // ReSharper disable PossibleInvalidOperationException + +#nullable disable + namespace EntityFrameworkCore.Jet.FunctionalTests { public class BuiltInDataTypesJetTest : BuiltInDataTypesTestBase @@ -4295,7 +4299,7 @@ public class ColumnInfo public int? DateTimePrecision { get; set; } } - public override void Can_insert_and_read_back_all_non_nullable_data_types() + public override async Task Can_insert_and_read_back_all_non_nullable_data_types() { using (var context = CreateContext()) { @@ -4332,7 +4336,7 @@ public override void Can_insert_and_read_back_all_non_nullable_data_types() EnumS8 = EnumS8.SomeValue }); - Assert.Equal(1, context.SaveChanges()); + Assert.Equal(1, await context.SaveChangesAsync()); } using (var context = CreateContext()) @@ -4373,7 +4377,7 @@ public override void Can_insert_and_read_back_all_non_nullable_data_types() } } - public override void Can_insert_and_read_back_all_nullable_data_types_with_values_set_to_non_null() + public override async Task Can_insert_and_read_back_all_nullable_data_types_with_values_set_to_non_null() { using (var context = CreateContext()) { @@ -4412,7 +4416,7 @@ public override void Can_insert_and_read_back_all_nullable_data_types_with_value EnumS8 = EnumS8.SomeValue }); - Assert.Equal(1, context.SaveChanges()); + Assert.Equal(1, await context.SaveChangesAsync()); } using (var context = CreateContext()) @@ -4453,7 +4457,7 @@ public override void Can_insert_and_read_back_all_nullable_data_types_with_value } } - public override void Can_insert_and_read_back_object_backed_data_types() + public override async Task Can_insert_and_read_back_object_backed_data_types() { using (var context = CreateContext()) { @@ -4492,7 +4496,7 @@ public override void Can_insert_and_read_back_object_backed_data_types() EnumS8 = EnumS8.SomeValue }); - Assert.Equal(1, context.SaveChanges()); + Assert.Equal(1, await context.SaveChangesAsync()); } using (var context = CreateContext()) @@ -4533,7 +4537,7 @@ public override void Can_insert_and_read_back_object_backed_data_types() } } - public override void Can_insert_and_read_back_nullable_backed_data_types() + public override async Task Can_insert_and_read_back_nullable_backed_data_types() { using (var context = CreateContext()) { @@ -4570,7 +4574,7 @@ public override void Can_insert_and_read_back_nullable_backed_data_types() EnumS8 = EnumS8.SomeValue }); - Assert.Equal(1, context.SaveChanges()); + Assert.Equal(1, await context.SaveChangesAsync()); } using (var context = CreateContext()) @@ -4609,7 +4613,7 @@ public override void Can_insert_and_read_back_nullable_backed_data_types() } } - public override void Can_insert_and_read_back_non_nullable_backed_data_types() + public override async Task Can_insert_and_read_back_non_nullable_backed_data_types() { using (var context = CreateContext()) { @@ -4646,7 +4650,7 @@ public override void Can_insert_and_read_back_non_nullable_backed_data_types() EnumS8 = EnumS8.SomeValue }); - Assert.Equal(1, context.SaveChanges()); + Assert.Equal(1, await context.SaveChangesAsync()); } using (var context = CreateContext()) @@ -4686,22 +4690,22 @@ public override void Can_insert_and_read_back_non_nullable_backed_data_types() } } - public override void Can_query_using_any_data_type() + public override async Task Can_query_using_any_data_type() { using var context = CreateContext(); var source = AddTestBuiltInDataTypes(context.Set()); - Assert.Equal(1, context.SaveChanges()); + Assert.Equal(1, await context.SaveChangesAsync()); QueryBuiltInDataTypesTest(source); } - public override void Can_query_using_any_data_type_shadow() + public override async Task Can_query_using_any_data_type_shadow() { using var context = CreateContext(); var source = AddTestBuiltInDataTypes(context.Set()); - Assert.Equal(1, context.SaveChanges()); + Assert.Equal(1, await context.SaveChangesAsync()); QueryBuiltInDataTypesTest(source); } @@ -5044,22 +5048,22 @@ private void QueryBuiltInDataTypesTest(EntityEntry source) return entityEntry; } - public override void Can_query_using_any_nullable_data_type() + public override async Task Can_query_using_any_nullable_data_type() { using var context = CreateContext(); var source = AddTestBuiltInNullableDataTypes(context.Set()); - Assert.Equal(1, context.SaveChanges()); + Assert.Equal(1, await context.SaveChangesAsync()); QueryBuiltInNullableDataTypesTest(source); } - public override void Can_query_using_any_data_type_nullable_shadow() + public override async Task Can_query_using_any_data_type_nullable_shadow() { using var context = CreateContext(); var source = AddTestBuiltInNullableDataTypes(context.Set()); - Assert.Equal(1, context.SaveChanges()); + Assert.Equal(1, await context.SaveChangesAsync()); QueryBuiltInNullableDataTypesTest(source); } diff --git a/test/EFCore.Jet.FunctionalTests/BulkUpdates/ComplexTypeBulkUpdatesJetTest.cs b/test/EFCore.Jet.FunctionalTests/BulkUpdates/ComplexTypeBulkUpdatesJetTest.cs index f5d1cbd1..99c5c556 100644 --- a/test/EFCore.Jet.FunctionalTests/BulkUpdates/ComplexTypeBulkUpdatesJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/BulkUpdates/ComplexTypeBulkUpdatesJetTest.cs @@ -4,13 +4,15 @@ using System.Threading.Tasks; using EntityFrameworkCore.Jet.FunctionalTests.TestUtilities; using Microsoft.EntityFrameworkCore.BulkUpdates; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage; using Microsoft.EntityFrameworkCore.TestUtilities; using Xunit; using Xunit.Abstractions; namespace EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates; -public class ComplexTypeBulkUpdatesJetTest : ComplexTypeBulkUpdatesTestBase< +public class ComplexTypeBulkUpdatesJetTest : ComplexTypeBulkUpdatesRelationalTestBase< ComplexTypeBulkUpdatesJetTest.ComplexTypeBulkUpdatesJetFixture> { public ComplexTypeBulkUpdatesJetTest(ComplexTypeBulkUpdatesJetFixture fixture, ITestOutputHelper testOutputHelper) @@ -29,9 +31,9 @@ DELETE FROM `Customer` AS `c` """); } - public override async Task Delete_complex_type_throws(bool async) + public override async Task Delete_complex_type(bool async) { - await base.Delete_complex_type_throws(async); + await base.Delete_complex_type(async); AssertSql(); } @@ -97,13 +99,135 @@ public override async Task Update_multiple_projected_complex_types_via_anonymous """); } - public override async Task Update_projected_complex_type_via_OrderBy_Skip_throws(bool async) + public override async Task Update_projected_complex_type_via_OrderBy_Skip(bool async) { - await base.Update_projected_complex_type_via_OrderBy_Skip_throws(async); + await base.Update_projected_complex_type_via_OrderBy_Skip(async); AssertExecuteUpdateSql(); } + public override async Task Update_complex_type_to_parameter(bool async) + { + await base.Update_complex_type_to_parameter(async); + + AssertExecuteUpdateSql( + """ +@__complex_type_newAddress_0_AddressLine1='New AddressLine1' (Size = 255) +@__complex_type_newAddress_0_AddressLine2='New AddressLine2' (Size = 255) +@__complex_type_newAddress_0_Tags='["new_tag1","new_tag2"]' (Size = 255) +@__complex_type_newAddress_0_ZipCode='99999' (Nullable = true) +@__complex_type_newAddress_0_Code='FR' (Size = 255) +@__complex_type_newAddress_0_FullName='France' (Size = 255) + +UPDATE `Customer` AS `c` +SET `c`.`ShippingAddress_AddressLine1` = @__complex_type_newAddress_0_AddressLine1, + `c`.`ShippingAddress_AddressLine2` = @__complex_type_newAddress_0_AddressLine2, + `c`.`ShippingAddress_Tags` = @__complex_type_newAddress_0_Tags, + `c`.`ShippingAddress_ZipCode` = @__complex_type_newAddress_0_ZipCode, + `c`.`ShippingAddress_Country_Code` = @__complex_type_newAddress_0_Code, + `c`.`ShippingAddress_Country_FullName` = @__complex_type_newAddress_0_FullName +"""); + } + + public override async Task Update_nested_complex_type_to_parameter(bool async) + { + await base.Update_nested_complex_type_to_parameter(async); + + AssertExecuteUpdateSql( + """ +@__complex_type_newCountry_0_Code='FR' (Size = 255) +@__complex_type_newCountry_0_FullName='France' (Size = 255) + +UPDATE `Customer` AS `c` +SET `c`.`ShippingAddress_Country_Code` = @__complex_type_newCountry_0_Code, + `c`.`ShippingAddress_Country_FullName` = @__complex_type_newCountry_0_FullName +"""); + } + + public override async Task Update_complex_type_to_another_database_complex_type(bool async) + { + await base.Update_complex_type_to_another_database_complex_type(async); + + AssertExecuteUpdateSql( + """ +UPDATE `Customer` AS `c` +SET `c`.`ShippingAddress_AddressLine1` = `c`.`BillingAddress_AddressLine1`, + `c`.`ShippingAddress_AddressLine2` = `c`.`BillingAddress_AddressLine2`, + `c`.`ShippingAddress_Tags` = `c`.`BillingAddress_Tags`, + `c`.`ShippingAddress_ZipCode` = `c`.`BillingAddress_ZipCode`, + `c`.`ShippingAddress_Country_Code` = `c`.`ShippingAddress_Country_Code`, + `c`.`ShippingAddress_Country_FullName` = `c`.`ShippingAddress_Country_FullName` +"""); + } + + public override async Task Update_complex_type_to_inline_without_lambda(bool async) + { + await base.Update_complex_type_to_inline_without_lambda(async); + + AssertExecuteUpdateSql( + """ +UPDATE `Customer` AS `c` +SET `c`.`ShippingAddress_AddressLine1` = 'New AddressLine1', + `c`.`ShippingAddress_AddressLine2` = 'New AddressLine2', + `c`.`ShippingAddress_Tags` = '["new_tag1","new_tag2"]', + `c`.`ShippingAddress_ZipCode` = 99999, + `c`.`ShippingAddress_Country_Code` = 'FR', + `c`.`ShippingAddress_Country_FullName` = 'France' +"""); + } + + public override async Task Update_complex_type_to_inline_with_lambda(bool async) + { + await base.Update_complex_type_to_inline_with_lambda(async); + + AssertExecuteUpdateSql( + """ +UPDATE `Customer` AS `c` +SET `c`.`ShippingAddress_AddressLine1` = 'New AddressLine1', + `c`.`ShippingAddress_AddressLine2` = 'New AddressLine2', + `c`.`ShippingAddress_Tags` = '["new_tag1","new_tag2"]', + `c`.`ShippingAddress_ZipCode` = 99999, + `c`.`ShippingAddress_Country_Code` = 'FR', + `c`.`ShippingAddress_Country_FullName` = 'France' +"""); + } + + public override async Task Update_complex_type_to_another_database_complex_type_with_subquery(bool async) + { + await base.Update_complex_type_to_another_database_complex_type_with_subquery(async); + + AssertExecuteUpdateSql( + """ +@__p_0='1' + +UPDATE [c0] +SET [c0].[ShippingAddress_AddressLine1] = [c1].[BillingAddress_AddressLine1], + [c0].[ShippingAddress_AddressLine2] = [c1].[BillingAddress_AddressLine2], + [c0].[ShippingAddress_Tags] = [c1].[BillingAddress_Tags], + [c0].[ShippingAddress_ZipCode] = [c1].[BillingAddress_ZipCode], + [c0].[ShippingAddress_Country_Code] = [c1].[ShippingAddress_Country_Code], + [c0].[ShippingAddress_Country_FullName] = [c1].[ShippingAddress_Country_FullName] +FROM [Customer] AS [c0] +INNER JOIN ( + SELECT [c].[Id], [c].[BillingAddress_AddressLine1], [c].[BillingAddress_AddressLine2], [c].[BillingAddress_Tags], [c].[BillingAddress_ZipCode], [c].[ShippingAddress_Country_Code], [c].[ShippingAddress_Country_FullName] + FROM [Customer] AS [c] + ORDER BY [c].[Id] + OFFSET @__p_0 ROWS +) AS [c1] ON [c0].[Id] = [c1].[Id] +"""); + } + + public override async Task Update_collection_inside_complex_type(bool async) + { + await base.Update_collection_inside_complex_type(async); + + AssertExecuteUpdateSql( + """ +UPDATE `Customer` AS `c` +SET `c`.`ShippingAddress_Tags` = '["new_tag1","new_tag2"]' +"""); + } + [ConditionalFact] public virtual void Check_all_tests_overridden() => TestHelpers.AssertAllMethodsOverridden(GetType()); @@ -117,7 +241,7 @@ private void AssertSql(params string[] expected) protected void ClearLog() => Fixture.TestSqlLoggerFactory.Clear(); - public class ComplexTypeBulkUpdatesJetFixture : ComplexTypeBulkUpdatesFixtureBase + public class ComplexTypeBulkUpdatesJetFixture : ComplexTypeBulkUpdatesRelationalFixtureBase { protected override ITestStoreFactory TestStoreFactory => JetTestStoreFactory.Instance; diff --git a/test/EFCore.Jet.FunctionalTests/BulkUpdates/NonSharedModelBulkUpdatesJetTest.cs b/test/EFCore.Jet.FunctionalTests/BulkUpdates/NonSharedModelBulkUpdatesJetTest.cs index 8dce3ce4..1adcd955 100644 --- a/test/EFCore.Jet.FunctionalTests/BulkUpdates/NonSharedModelBulkUpdatesJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/BulkUpdates/NonSharedModelBulkUpdatesJetTest.cs @@ -11,7 +11,7 @@ namespace EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates; -public class NonSharedModelBulkUpdatesJetTest : NonSharedModelBulkUpdatesTestBase +public class NonSharedModelBulkUpdatesJetTest : NonSharedModelBulkUpdatesRelationalTestBase { protected override ITestStoreFactory TestStoreFactory => JetTestStoreFactory.Instance; @@ -30,6 +30,25 @@ DELETE FROM `Owner` AS `o` """); } + public override async Task Delete_with_owned_collection_and_non_natively_translatable_query(bool async) + { + await base.Delete_with_owned_collection_and_non_natively_translatable_query(async); + + AssertSql( + """ +@__p_0='1' + +DELETE FROM [o] +FROM [Owner] AS [o] +WHERE [o].[Id] IN ( + SELECT [o0].[Id] + FROM [Owner] AS [o0] + ORDER BY [o0].[Title] + OFFSET @__p_0 ROWS +) +"""); + } + public override async Task Delete_aggregate_root_when_table_sharing_with_owned(bool async) { await base.Delete_aggregate_root_when_table_sharing_with_owned(async); @@ -47,6 +66,18 @@ public override async Task Delete_aggregate_root_when_table_sharing_with_non_own AssertSql(); } + public override async Task Replace_ColumnExpression_in_column_setter(bool async) + { + await base.Replace_ColumnExpression_in_column_setter(async); + + AssertSql( + """ +UPDATE `Owner` AS `o` +INNER JOIN `OwnedCollection` AS `o0` ON `o`.`Id` = `o0`.`OwnerId` +SET `o0`.`Value` = 'SomeValue' +"""); + } + public override async Task Update_non_owned_property_on_entity_with_owned(bool async) { await base.Update_non_owned_property_on_entity_with_owned(async); @@ -69,6 +100,18 @@ public override async Task Update_non_owned_property_on_entity_with_owned2(bool """); } + public override async Task Update_non_owned_property_on_entity_with_owned_in_join(bool async) + { + await base.Update_non_owned_property_on_entity_with_owned_in_join(async); + + AssertSql( + """ +UPDATE `Owner` AS `o` +INNER JOIN `Owner` AS `o0` ON `o`.`Id` = `o0`.`Id` +SET `o`.`Title` = 'NewValue' +"""); + } + public override async Task Update_owned_and_non_owned_properties_with_table_sharing(bool async) { await base.Update_owned_and_non_owned_properties_with_table_sharing(async); @@ -77,7 +120,7 @@ public override async Task Update_owned_and_non_owned_properties_with_table_shar """ UPDATE `Owner` AS `o` SET `o`.`OwnedReference_Number` = IIF(LEN(`o`.`Title`) IS NULL, NULL, CLNG(LEN(`o`.`Title`))), - `o`.`Title` = (`o`.`OwnedReference_Number` & '') + `o`.`Title` = IIF((`o`.`OwnedReference_Number` & '') IS NULL, '', (`o`.`OwnedReference_Number` & '')) """); } @@ -92,17 +135,17 @@ public override async Task Update_main_table_in_entity_with_entity_splitting(boo """); } - //see efcore 31407 for the same problem on SQL Server - public override Task Update_non_main_table_in_entity_with_entity_splitting(bool async) + public override async Task Update_non_main_table_in_entity_with_entity_splitting(bool async) { - return Assert.ThrowsAnyAsync( - () => base.Update_non_main_table_in_entity_with_entity_splitting(async)); - /*AssertSql( - """ -UPDATE `BlogsPart1` AS `b0` + await base.Update_non_main_table_in_entity_with_entity_splitting(async); + + AssertSql( + """ +UPDATE `Blogs` AS `b` +INNER JOIN `BlogsPart1` AS `b0` ON `b`.`Id` = `b0`.`Id` SET `b0`.`Rating` = IIF(LEN(`b0`.`Title`) IS NULL, NULL, CLNG(LEN(`b0`.`Title`))), `b0`.`Title` = (`b0`.`Rating` & '') -""");*/ +"""); } public override async Task Delete_entity_with_auto_include(bool async) diff --git a/test/EFCore.Jet.FunctionalTests/BulkUpdates/NorthwindBulkUpdatesJetFixture.cs b/test/EFCore.Jet.FunctionalTests/BulkUpdates/NorthwindBulkUpdatesJetFixture.cs index f5b0c49e..a3e0a7ee 100644 --- a/test/EFCore.Jet.FunctionalTests/BulkUpdates/NorthwindBulkUpdatesJetFixture.cs +++ b/test/EFCore.Jet.FunctionalTests/BulkUpdates/NorthwindBulkUpdatesJetFixture.cs @@ -12,8 +12,8 @@ namespace EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates; -public class NorthwindBulkUpdatesJetFixture : NorthwindBulkUpdatesFixture - where TModelCustomizer : IModelCustomizer, new() +public class NorthwindBulkUpdatesJetFixture : NorthwindBulkUpdatesRelationalFixture + where TModelCustomizer : ITestModelCustomizer, new() { protected override ITestStoreFactory TestStoreFactory => JetNorthwindTestStoreFactory.Instance; @@ -22,35 +22,6 @@ protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext con { base.OnModelCreating(modelBuilder, context); - modelBuilder.Entity() - .Property(c => c.CustomerID) - .HasColumnType("nchar(5)"); - - modelBuilder.Entity( - b => - { - b.Property(c => c.EmployeeID).HasColumnType("int"); - b.Property(c => c.ReportsTo).HasColumnType("int"); - }); - - modelBuilder.Entity( - b => - { - b.Property(o => o.EmployeeID).HasColumnType("int"); - b.Property(o => o.OrderDate).HasColumnType("datetime"); - }); - - modelBuilder.Entity() - .Property(od => od.UnitPrice) - .HasColumnType("money"); - - modelBuilder.Entity( - b => - { - b.Property(p => p.UnitPrice).HasColumnType("money"); - b.Property(p => p.UnitsInStock).HasColumnType("smallint"); - }); - modelBuilder.Entity() .Property(p => p.UnitPrice) .HasColumnType("money"); diff --git a/test/EFCore.Jet.FunctionalTests/BulkUpdates/NorthwindBulkUpdatesJetTest.cs b/test/EFCore.Jet.FunctionalTests/BulkUpdates/NorthwindBulkUpdatesJetTest.cs index 72652e3f..962ee6af 100644 --- a/test/EFCore.Jet.FunctionalTests/BulkUpdates/NorthwindBulkUpdatesJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/BulkUpdates/NorthwindBulkUpdatesJetTest.cs @@ -10,15 +10,10 @@ namespace EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates; -public class NorthwindBulkUpdatesJetTest : NorthwindBulkUpdatesTestBase> +public class NorthwindBulkUpdatesJetTest( + NorthwindBulkUpdatesJetFixture fixture, + ITestOutputHelper testOutputHelper) : NorthwindBulkUpdatesRelationalTestBase>(fixture, testOutputHelper) { - public NorthwindBulkUpdatesJetTest( - NorthwindBulkUpdatesJetFixture fixture, - ITestOutputHelper testOutputHelper) - : base(fixture, testOutputHelper) - { - } - [ConditionalFact] public virtual void Check_all_tests_overridden() => TestHelpers.AssertAllMethodsOverridden(GetType()); @@ -178,11 +173,11 @@ DELETE FROM `Order Details` AS `o` WHERE EXISTS ( SELECT 1 FROM ( - SELECT TOP 100 `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` + SELECT TOP 100 `o0`.`OrderID`, `o0`.`ProductID` FROM `Order Details` AS `o0` WHERE `o0`.`OrderID` < 10300 - ) AS `t` - WHERE `t`.`OrderID` = `o`.`OrderID` AND `t`.`ProductID` = `o`.`ProductID`) + ) AS `o1` + WHERE `o1`.`OrderID` = `o`.`OrderID` AND `o1`.`ProductID` = `o`.`ProductID`) """); } @@ -267,31 +262,31 @@ public override async Task Delete_Where_Skip_Take_Skip_Take_causing_subquery(boo await base.Delete_Where_Skip_Take_Skip_Take_causing_subquery(async); AssertSql( -""" + """ DELETE FROM `Order Details` AS `o` WHERE EXISTS ( SELECT 1 FROM ( - SELECT `t2`.`OrderID`, `t2`.`ProductID`, `t2`.`Discount`, `t2`.`Quantity`, `t2`.`UnitPrice` + SELECT `o4`.`OrderID`, `o4`.`ProductID` FROM ( - SELECT TOP 5 `t1`.`OrderID`, `t1`.`ProductID`, `t1`.`Discount`, `t1`.`Quantity`, `t1`.`UnitPrice` + SELECT TOP 5 `o3`.`OrderID`, `o3`.`ProductID` FROM ( - SELECT TOP 25 `t`.`OrderID`, `t`.`ProductID`, `t`.`Discount`, `t`.`Quantity`, `t`.`UnitPrice` + SELECT TOP 25 `o0`.`OrderID`, `o0`.`ProductID` FROM ( - SELECT `t1`.`OrderID`, `t1`.`ProductID`, `t1`.`Discount`, `t1`.`Quantity`, `t1`.`UnitPrice` + SELECT `o6`.`OrderID`, `o6`.`ProductID` FROM ( - SELECT TOP 100 `t0`.`OrderID`, `t0`.`ProductID`, `t0`.`Discount`, `t0`.`Quantity`, `t0`.`UnitPrice` + SELECT TOP 100 `o5`.`OrderID`, `o5`.`ProductID` FROM ( - SELECT TOP 200 `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` - FROM `Order Details` AS `o0` - WHERE `o0`.`OrderID` < 10300 - ) AS `t0` - ) AS `t1` - ) AS `t` - ) AS `t1` - ) AS `t2` - ) AS `t0` - WHERE `t0`.`OrderID` = `o`.`OrderID` AND `t0`.`ProductID` = `o`.`ProductID`) + SELECT TOP 200 `o1`.`OrderID`, `o1`.`ProductID` + FROM `Order Details` AS `o1` + WHERE `o1`.`OrderID` < 10300 + ) AS `o5` + ) AS `o6` + ) AS `o0` + ) AS `o3` + ) AS `o4` + ) AS `o2` + WHERE `o2`.`OrderID` = `o`.`OrderID` AND `o2`.`ProductID` = `o`.`ProductID`) """); } @@ -330,11 +325,11 @@ WHERE EXISTS ( SELECT 1 FROM `Orders` AS `o0` INNER JOIN ( - SELECT `o1`.`OrderID`, `o1`.`ProductID`, `o1`.`Discount`, `o1`.`Quantity`, `o1`.`UnitPrice` - FROM `Order Details` AS `o1` - WHERE `o1`.`ProductID` > 0 - ) AS `t` ON `o0`.`OrderID` = `t`.`OrderID` - WHERE `o0`.`OrderID` < 10250 AND `t`.`OrderID` = `o`.`OrderID` AND `t`.`ProductID` = `o`.`ProductID`) + SELECT `o2`.`OrderID`, `o2`.`ProductID` + FROM `Order Details` AS `o2` + WHERE `o2`.`ProductID` > 0 + ) AS `o1` ON `o0`.`OrderID` = `o1`.`OrderID` + WHERE `o0`.`OrderID` < 10250 AND `o1`.`OrderID` = `o`.`OrderID` AND `o1`.`ProductID` = `o`.`ProductID`) """); } @@ -382,8 +377,8 @@ SELECT 1 SELECT `o1`.`OrderID`, `o1`.`ProductID`, `o1`.`Discount`, `o1`.`Quantity`, `o1`.`UnitPrice` FROM `Order Details` AS `o1` WHERE `o1`.`OrderID` > 11250 - ) AS `t` - WHERE `t`.`OrderID` = `o`.`OrderID` AND `t`.`ProductID` = `o`.`ProductID`) + ) AS `u` + WHERE `u`.`OrderID` = `o`.`OrderID` AND `u`.`ProductID` = `o`.`ProductID`) """); } @@ -397,15 +392,15 @@ DELETE FROM `Order Details` AS `o` WHERE EXISTS ( SELECT 1 FROM ( - SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` + SELECT `o0`.`OrderID`, `o0`.`ProductID` FROM `Order Details` AS `o0` WHERE `o0`.`OrderID` < 10250 UNION ALL - SELECT `o1`.`OrderID`, `o1`.`ProductID`, `o1`.`Discount`, `o1`.`Quantity`, `o1`.`UnitPrice` + SELECT `o1`.`OrderID`, `o1`.`ProductID` FROM `Order Details` AS `o1` WHERE `o1`.`OrderID` > 11250 - ) AS `t` - WHERE `t`.`OrderID` = `o`.`OrderID` AND `t`.`ProductID` = `o`.`ProductID`) + ) AS `u` + WHERE `u`.`OrderID` = `o`.`OrderID` AND `u`.`ProductID` = `o`.`ProductID`) """); } @@ -513,23 +508,23 @@ public override async Task Delete_with_join(bool async) await base.Delete_with_join(async); AssertSql( -""" + """ DELETE `o`.* FROM `Order Details` AS `o` INNER JOIN ( - SELECT `t1`.`OrderID`, `t1`.`CustomerID`, `t1`.`EmployeeID`, `t1`.`OrderDate` + SELECT `o3`.`OrderID` FROM ( - SELECT TOP 100 `t0`.`OrderID`, `t0`.`CustomerID`, `t0`.`EmployeeID`, `t0`.`OrderDate` + SELECT TOP 100 `o2`.`OrderID` FROM ( - SELECT TOP 100 `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` + SELECT TOP 100 `o0`.`OrderID` FROM `Orders` AS `o0` WHERE `o0`.`OrderID` < 10300 ORDER BY `o0`.`OrderID` - ) AS `t0` - ORDER BY `t0`.`OrderID` DESC - ) AS `t1` - ORDER BY `t1`.`OrderID` -) AS `t` ON `o`.`OrderID` = `t`.`OrderID` + ) AS `o2` + ORDER BY `o2`.`OrderID` DESC + ) AS `o3` + ORDER BY `o3`.`OrderID` +) AS `o1` ON `o`.`OrderID` = `o1`.`OrderID` """); } @@ -538,23 +533,23 @@ public override async Task Delete_with_left_join(bool async) await base.Delete_with_left_join(async); AssertSql( -""" + """ DELETE `o`.* FROM `Order Details` AS `o` LEFT JOIN ( - SELECT `t1`.`OrderID`, `t1`.`CustomerID`, `t1`.`EmployeeID`, `t1`.`OrderDate` + SELECT `o3`.`OrderID` FROM ( - SELECT TOP 100 `t0`.`OrderID`, `t0`.`CustomerID`, `t0`.`EmployeeID`, `t0`.`OrderDate` + SELECT TOP 100 `o2`.`OrderID` FROM ( - SELECT TOP 100 `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` + SELECT TOP 100 `o0`.`OrderID` FROM `Orders` AS `o0` WHERE `o0`.`OrderID` < 10300 ORDER BY `o0`.`OrderID` - ) AS `t0` - ORDER BY `t0`.`OrderID` DESC - ) AS `t1` - ORDER BY `t1`.`OrderID` -) AS `t` ON `o`.`OrderID` = `t`.`OrderID` + ) AS `o2` + ORDER BY `o2`.`OrderID` DESC + ) AS `o3` + ORDER BY `o3`.`OrderID` +) AS `o1` ON `o`.`OrderID` = `o1`.`OrderID` WHERE `o`.`OrderID` < 10276 """); } @@ -755,13 +750,13 @@ public override async Task Update_Where_Take_set_constant(bool async) AssertExecuteUpdateSql( """ -UPDATE `Customers` AS `c` +UPDATE `Customers` AS `c0` INNER JOIN ( - SELECT TOP 4 `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` - FROM `Customers` AS `c0` - WHERE `c0`.`CustomerID` LIKE 'F%' -) AS `t` ON `c`.`CustomerID` = `t`.`CustomerID` -SET `c`.`ContactName` = 'Updated' + SELECT TOP 4 `c`.`CustomerID` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'F%' +) AS `c1` ON `c0`.`CustomerID` = `c1`.`CustomerID` +SET `c0`.`ContactName` = 'Updated' """); } @@ -770,20 +765,20 @@ public override async Task Update_Where_Skip_Take_set_constant(bool async) await base.Update_Where_Skip_Take_set_constant(async); AssertExecuteUpdateSql( -""" -UPDATE `Customers` AS `c` + """ +UPDATE `Customers` AS `c0` INNER JOIN ( - SELECT `t1`.`CustomerID`, `t1`.`Address`, `t1`.`City`, `t1`.`CompanyName`, `t1`.`ContactName`, `t1`.`ContactTitle`, `t1`.`Country`, `t1`.`Fax`, `t1`.`Phone`, `t1`.`PostalCode`, `t1`.`Region` + SELECT `c3`.`CustomerID` FROM ( - SELECT TOP 4 `t0`.`CustomerID`, `t0`.`Address`, `t0`.`City`, `t0`.`CompanyName`, `t0`.`ContactName`, `t0`.`ContactTitle`, `t0`.`Country`, `t0`.`Fax`, `t0`.`Phone`, `t0`.`PostalCode`, `t0`.`Region` + SELECT TOP 4 `c2`.`CustomerID` FROM ( - SELECT TOP 6 `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` - FROM `Customers` AS `c0` - WHERE `c0`.`CustomerID` LIKE 'F%' - ) AS `t0` - ) AS `t1` -) AS `t` ON `c`.`CustomerID` = `t`.`CustomerID` -SET `c`.`ContactName` = 'Updated' + SELECT TOP 6 `c`.`CustomerID` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'F%' + ) AS `c2` + ) AS `c3` +) AS `c1` ON `c0`.`CustomerID` = `c1`.`CustomerID` +SET `c0`.`ContactName` = 'Updated' """); } @@ -793,13 +788,13 @@ public override async Task Update_Where_OrderBy_set_constant(bool async) AssertExecuteUpdateSql( """ -UPDATE `Customers` AS `c` +UPDATE `Customers` AS `c0` INNER JOIN ( - SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` - FROM `Customers` AS `c0` - WHERE `c0`.`CustomerID` LIKE 'F%' -) AS `t` ON `c`.`CustomerID` = `t`.`CustomerID` -SET `c`.`ContactName` = 'Updated' + SELECT `c`.`CustomerID` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'F%' +) AS `c1` ON `c0`.`CustomerID` = `c1`.`CustomerID` +SET `c0`.`ContactName` = 'Updated' """); } @@ -830,14 +825,14 @@ public override async Task Update_Where_OrderBy_Take_set_constant(bool async) AssertExecuteUpdateSql( """ -UPDATE `Customers` AS `c` +UPDATE `Customers` AS `c0` INNER JOIN ( - SELECT TOP 4 `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` - FROM `Customers` AS `c0` - WHERE `c0`.`CustomerID` LIKE 'F%' - ORDER BY `c0`.`City` -) AS `t` ON `c`.`CustomerID` = `t`.`CustomerID` -SET `c`.`ContactName` = 'Updated' + SELECT TOP 4 `c`.`CustomerID` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'F%' + ORDER BY `c`.`City` +) AS `c1` ON `c0`.`CustomerID` = `c1`.`CustomerID` +SET `c0`.`ContactName` = 'Updated' """); } @@ -846,23 +841,23 @@ public override async Task Update_Where_OrderBy_Skip_Take_set_constant(bool asyn await base.Update_Where_OrderBy_Skip_Take_set_constant(async); AssertExecuteUpdateSql( -""" -UPDATE `Customers` AS `c` + """ +UPDATE `Customers` AS `c0` INNER JOIN ( - SELECT `t1`.`CustomerID`, `t1`.`Address`, `t1`.`City`, `t1`.`CompanyName`, `t1`.`ContactName`, `t1`.`ContactTitle`, `t1`.`Country`, `t1`.`Fax`, `t1`.`Phone`, `t1`.`PostalCode`, `t1`.`Region` + SELECT `c3`.`CustomerID` FROM ( - SELECT TOP 4 `t0`.`CustomerID`, `t0`.`Address`, `t0`.`City`, `t0`.`CompanyName`, `t0`.`ContactName`, `t0`.`ContactTitle`, `t0`.`Country`, `t0`.`Fax`, `t0`.`Phone`, `t0`.`PostalCode`, `t0`.`Region` + SELECT TOP 4 `c2`.`CustomerID`, `c2`.`City` FROM ( - SELECT TOP 6 `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` - FROM `Customers` AS `c0` - WHERE `c0`.`CustomerID` LIKE 'F%' - ORDER BY `c0`.`City` - ) AS `t0` - ORDER BY `t0`.`City` DESC - ) AS `t1` - ORDER BY `t1`.`City` -) AS `t` ON `c`.`CustomerID` = `t`.`CustomerID` -SET `c`.`ContactName` = 'Updated' + SELECT TOP 6 `c`.`CustomerID`, `c`.`City` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'F%' + ORDER BY `c`.`City` + ) AS `c2` + ORDER BY `c2`.`City` DESC + ) AS `c3` + ORDER BY `c3`.`City` +) AS `c1` ON `c0`.`CustomerID` = `c1`.`CustomerID` +SET `c0`.`ContactName` = 'Updated' """); } @@ -871,31 +866,31 @@ public override async Task Update_Where_OrderBy_Skip_Take_Skip_Take_set_constant await base.Update_Where_OrderBy_Skip_Take_Skip_Take_set_constant(async); AssertExecuteUpdateSql( -""" -UPDATE `Customers` AS `c` + """ +UPDATE `Customers` AS `c1` INNER JOIN ( - SELECT `t2`.`CustomerID`, `t2`.`Address`, `t2`.`City`, `t2`.`CompanyName`, `t2`.`ContactName`, `t2`.`ContactTitle`, `t2`.`Country`, `t2`.`Fax`, `t2`.`Phone`, `t2`.`PostalCode`, `t2`.`Region` + SELECT `c4`.`CustomerID` FROM ( - SELECT TOP 2 `t1`.`CustomerID`, `t1`.`Address`, `t1`.`City`, `t1`.`CompanyName`, `t1`.`ContactName`, `t1`.`ContactTitle`, `t1`.`Country`, `t1`.`Fax`, `t1`.`Phone`, `t1`.`PostalCode`, `t1`.`Region` + SELECT TOP 2 `c3`.`CustomerID`, `c3`.`City` FROM ( - SELECT TOP 4 `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region` + SELECT TOP 4 `c0`.`CustomerID`, `c0`.`City` FROM ( - SELECT TOP 6 `t3`.`CustomerID`, `t3`.`Address`, `t3`.`City`, `t3`.`CompanyName`, `t3`.`ContactName`, `t3`.`ContactTitle`, `t3`.`Country`, `t3`.`Fax`, `t3`.`Phone`, `t3`.`PostalCode`, `t3`.`Region` + SELECT TOP 6 `c5`.`CustomerID`, `c5`.`City` FROM ( - SELECT TOP 8 `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` - FROM `Customers` AS `c0` - WHERE `c0`.`CustomerID` LIKE 'F%' - ORDER BY `c0`.`City` - ) AS `t3` - ORDER BY `t3`.`City` DESC - ) AS `t` - ORDER BY `t`.`City` - ) AS `t1` - ORDER BY `t1`.`City` DESC - ) AS `t2` - ORDER BY `t2`.`City` -) AS `t0` ON `c`.`CustomerID` = `t0`.`CustomerID` -SET `c`.`ContactName` = 'Updated' + SELECT TOP 8 `c`.`CustomerID`, `c`.`City` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` LIKE 'F%' + ORDER BY `c`.`City` + ) AS `c5` + ORDER BY `c5`.`City` DESC + ) AS `c0` + ORDER BY `c0`.`City` + ) AS `c3` + ORDER BY `c3`.`City` DESC + ) AS `c4` + ORDER BY `c4`.`City` +) AS `c2` ON `c1`.`CustomerID` = `c2`.`CustomerID` +SET `c1`.`ContactName` = 'Updated' """); } @@ -1218,10 +1213,10 @@ public override async Task Update_with_join_set_constant(bool async) """ UPDATE `Customers` AS `c` INNER JOIN ( - SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + SELECT `o`.`CustomerID` FROM `Orders` AS `o` WHERE `o`.`OrderID` < 10300 -) AS `t` ON `c`.`CustomerID` = `t`.`CustomerID` +) AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` SET `c`.`ContactName` = 'Updated' WHERE `c`.`CustomerID` LIKE 'F%' """); @@ -1235,10 +1230,10 @@ public override async Task Update_with_left_join_set_constant(bool async) """ UPDATE `Customers` AS `c` LEFT JOIN ( - SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + SELECT `o`.`CustomerID` FROM `Orders` AS `o` WHERE `o`.`OrderID` < 10300 -) AS `t` ON `c`.`CustomerID` = `t`.`CustomerID` +) AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` SET `c`.`ContactName` = 'Updated' WHERE `c`.`CustomerID` LIKE 'F%' """); @@ -1380,18 +1375,18 @@ public override async Task Update_Where_SelectMany_subquery_set_null(bool async) AssertExecuteUpdateSql( """ -UPDATE `Orders` AS `o` +UPDATE `Orders` AS `o1` INNER JOIN ( - SELECT `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate`, `c`.`CustomerID` AS `CustomerID0` + SELECT `o0`.`OrderID` FROM `Customers` AS `c` INNER JOIN ( - SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` - FROM `Orders` AS `o0` - WHERE DATEPART('yyyy', `o0`.`OrderDate`) = 1997 - ) AS `t` ON `c`.`CustomerID` = `t`.`CustomerID` + SELECT `o`.`OrderID`, `o`.`CustomerID` + FROM `Orders` AS `o` + WHERE DATEPART('yyyy', `o`.`OrderDate`) = 1997 + ) AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` WHERE `c`.`CustomerID` LIKE 'F%' -) AS `t0` ON `o`.`OrderID` = `t0`.`OrderID` -SET `o`.`OrderDate` = NULL +) AS `s` ON `o1`.`OrderID` = `s`.`OrderID` +SET `o1`.`OrderDate` = NULL """); } @@ -1420,11 +1415,11 @@ public override async Task Update_Where_Join_set_property_from_joined_table(bool """ UPDATE `Customers` AS `c`, ( - SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + SELECT `c0`.`City` FROM `Customers` AS `c0` WHERE `c0`.`CustomerID` = 'ALFKI' -) AS `t` -SET `c`.`City` = `t`.`City` +) AS `c1` +SET `c`.`City` = `c1`.`City` WHERE `c`.`CustomerID` LIKE 'F%' """); } diff --git a/test/EFCore.Jet.FunctionalTests/BulkUpdates/TPCFiltersInheritanceBulkUpdatesJetTest.cs b/test/EFCore.Jet.FunctionalTests/BulkUpdates/TPCFiltersInheritanceBulkUpdatesJetTest.cs index f9905a9a..9252507c 100644 --- a/test/EFCore.Jet.FunctionalTests/BulkUpdates/TPCFiltersInheritanceBulkUpdatesJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/BulkUpdates/TPCFiltersInheritanceBulkUpdatesJetTest.cs @@ -49,13 +49,13 @@ DELETE FROM `Countries` AS `c` WHERE ( SELECT COUNT(*) FROM ( - SELECT `e`.`Id`, `e`.`CountryId`, `e`.`Name`, `e`.`Species`, `e`.`EagleId`, `e`.`IsFlightless`, `e`.`Group`, CVar(NULL) AS `FoundOn`, 'Eagle' AS `Discriminator` + SELECT `e`.`CountryId` FROM `Eagle` AS `e` UNION ALL - SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, CVar(NULL) AS `Group`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` + SELECT `k`.`CountryId` FROM `Kiwi` AS `k` - ) AS `t` - WHERE `t`.`CountryId` = 1 AND `c`.`Id` = `t`.`CountryId` AND `t`.`CountryId` > 0) > 0 + ) AS `u` + WHERE `u`.`CountryId` = 1 AND `c`.`Id` = `u`.`CountryId` AND `u`.`CountryId` > 0) > 0 """); } @@ -69,10 +69,10 @@ DELETE FROM `Countries` AS `c` WHERE ( SELECT COUNT(*) FROM ( - SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, CVar(NULL) AS `Group`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` + SELECT `k`.`CountryId` FROM `Kiwi` AS `k` - ) AS `t` - WHERE `t`.`CountryId` = 1 AND `c`.`Id` = `t`.`CountryId` AND `t`.`CountryId` > 0) > 0 + ) AS `u` + WHERE `u`.`CountryId` = 1 AND `c`.`Id` = `u`.`CountryId` AND `u`.`CountryId` > 0) > 0 """); } @@ -167,13 +167,13 @@ public override async Task Update_where_using_hierarchy(bool async) WHERE ( SELECT COUNT(*) FROM ( - SELECT `e`.`Id`, `e`.`CountryId`, `e`.`Name`, `e`.`Species`, `e`.`EagleId`, `e`.`IsFlightless`, `e`.`Group`, CVar(NULL) AS `FoundOn`, 'Eagle' AS `Discriminator` + SELECT `e`.`CountryId` FROM `Eagle` AS `e` UNION ALL - SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, CVar(NULL) AS `Group`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` + SELECT `k`.`CountryId` FROM `Kiwi` AS `k` - ) AS `t` - WHERE `t`.`CountryId` = 1 AND `c`.`Id` = `t`.`CountryId` AND `t`.`CountryId` > 0) > 0 + ) AS `u` + WHERE `u`.`CountryId` = 1 AND `c`.`Id` = `u`.`CountryId` AND `u`.`CountryId` > 0) > 0 """); } @@ -201,10 +201,10 @@ public override async Task Update_where_using_hierarchy_derived(bool async) WHERE ( SELECT COUNT(*) FROM ( - SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, CVar(NULL) AS `Group`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` + SELECT `k`.`CountryId` FROM `Kiwi` AS `k` - ) AS `t` - WHERE `t`.`CountryId` = 1 AND `c`.`Id` = `t`.`CountryId` AND `t`.`CountryId` > 0) > 0 + ) AS `u` + WHERE `u`.`CountryId` = 1 AND `c`.`Id` = `u`.`CountryId` AND `u`.`CountryId` > 0) > 0 """); } diff --git a/test/EFCore.Jet.FunctionalTests/BulkUpdates/TPCInheritanceBulkUpdatesJetTest.cs b/test/EFCore.Jet.FunctionalTests/BulkUpdates/TPCInheritanceBulkUpdatesJetTest.cs index e08341b7..c78b4a39 100644 --- a/test/EFCore.Jet.FunctionalTests/BulkUpdates/TPCInheritanceBulkUpdatesJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/BulkUpdates/TPCInheritanceBulkUpdatesJetTest.cs @@ -50,13 +50,13 @@ DELETE FROM `Countries` AS `c` WHERE ( SELECT COUNT(*) FROM ( - SELECT `e`.`Id`, `e`.`CountryId`, `e`.`Name`, `e`.`Species`, `e`.`EagleId`, `e`.`IsFlightless`, `e`.`Group`, CVar(NULL) AS `FoundOn`, 'Eagle' AS `Discriminator` + SELECT `e`.`CountryId` FROM `Eagle` AS `e` UNION ALL - SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, CVar(NULL) AS `Group`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` + SELECT `k`.`CountryId` FROM `Kiwi` AS `k` - ) AS `t` - WHERE `c`.`Id` = `t`.`CountryId` AND `t`.`CountryId` > 0) > 0 + ) AS `u` + WHERE `c`.`Id` = `u`.`CountryId` AND `u`.`CountryId` > 0) > 0 """); } @@ -70,10 +70,10 @@ DELETE FROM `Countries` AS `c` WHERE ( SELECT COUNT(*) FROM ( - SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, CVar(NULL) AS `Group`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` + SELECT `k`.`CountryId` FROM `Kiwi` AS `k` - ) AS `t` - WHERE `c`.`Id` = `t`.`CountryId` AND `t`.`CountryId` > 0) > 0 + ) AS `u` + WHERE `c`.`Id` = `u`.`CountryId` AND `u`.`CountryId` > 0) > 0 """); } @@ -166,13 +166,13 @@ public override async Task Update_where_using_hierarchy(bool async) WHERE ( SELECT COUNT(*) FROM ( - SELECT `e`.`Id`, `e`.`CountryId`, `e`.`Name`, `e`.`Species`, `e`.`EagleId`, `e`.`IsFlightless`, `e`.`Group`, CVar(NULL) AS `FoundOn`, 'Eagle' AS `Discriminator` + SELECT `e`.`CountryId` FROM `Eagle` AS `e` UNION ALL - SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, CVar(NULL) AS `Group`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` + SELECT `k`.`CountryId` FROM `Kiwi` AS `k` - ) AS `t` - WHERE `c`.`Id` = `t`.`CountryId` AND `t`.`CountryId` > 0) > 0 + ) AS `u` + WHERE `c`.`Id` = `u`.`CountryId` AND `u`.`CountryId` > 0) > 0 """); } @@ -199,10 +199,10 @@ public override async Task Update_where_using_hierarchy_derived(bool async) WHERE ( SELECT COUNT(*) FROM ( - SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, CVar(NULL) AS `Group`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` + SELECT `k`.`CountryId` FROM `Kiwi` AS `k` - ) AS `t` - WHERE `c`.`Id` = `t`.`CountryId` AND `t`.`CountryId` > 0) > 0 + ) AS `u` + WHERE `c`.`Id` = `u`.`CountryId` AND `u`.`CountryId` > 0) > 0 """); } diff --git a/test/EFCore.Jet.FunctionalTests/BulkUpdates/TPHInheritanceBulkUpdatesJetTest.cs b/test/EFCore.Jet.FunctionalTests/BulkUpdates/TPHInheritanceBulkUpdatesJetTest.cs index 49b70e74..ea7b11ed 100644 --- a/test/EFCore.Jet.FunctionalTests/BulkUpdates/TPHInheritanceBulkUpdatesJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/BulkUpdates/TPHInheritanceBulkUpdatesJetTest.cs @@ -9,17 +9,11 @@ namespace EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates; -public class TPHInheritanceBulkUpdatesJetTest : TPHInheritanceBulkUpdatesTestBase +public class TPHInheritanceBulkUpdatesJetTest( + TPHInheritanceBulkUpdatesJetFixture fixture, + ITestOutputHelper testOutputHelper) + : TPHInheritanceBulkUpdatesTestBase(fixture, testOutputHelper) { - public TPHInheritanceBulkUpdatesJetTest( - TPHInheritanceBulkUpdatesJetFixture fixture, - ITestOutputHelper testOutputHelper) - : base(fixture) - { - ClearLog(); - Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); - } - [ConditionalFact] public virtual void Check_all_tests_overridden() => TestHelpers.AssertAllMethodsOverridden(GetType()); @@ -120,21 +114,21 @@ public override async Task Delete_where_hierarchy_subquery(bool async) await base.Delete_where_hierarchy_subquery(async); AssertSql( -""" + """ DELETE FROM `Animals` AS `a` WHERE `a`.`Id` IN ( - SELECT `t0`.`Id` + SELECT `a2`.`Id` FROM ( - SELECT TOP 3 `t`.`Id`, `t`.`Name` + SELECT TOP 3 `a1`.`Id`, `a1`.`Name` FROM ( SELECT TOP 3 `a0`.`Id`, `a0`.`Name` FROM `Animals` AS `a0` WHERE `a0`.`Name` = 'Great spotted kiwi' ORDER BY `a0`.`Name` - ) AS `t` - ORDER BY `t`.`Name` DESC - ) AS `t0` - ORDER BY `t0`.`Name` + ) AS `a1` + ORDER BY `a1`.`Name` DESC + ) AS `a2` + ORDER BY `a2`.`Name` ) """); } diff --git a/test/EFCore.Jet.FunctionalTests/BulkUpdates/TPTFiltersInheritanceBulkUpdatesJetTest.cs b/test/EFCore.Jet.FunctionalTests/BulkUpdates/TPTFiltersInheritanceBulkUpdatesJetTest.cs index df1dcb94..5ab26b65 100644 --- a/test/EFCore.Jet.FunctionalTests/BulkUpdates/TPTFiltersInheritanceBulkUpdatesJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/BulkUpdates/TPTFiltersInheritanceBulkUpdatesJetTest.cs @@ -45,10 +45,7 @@ public override async Task Delete_where_using_hierarchy(bool async) DELETE FROM `Countries` AS `c` WHERE ( SELECT COUNT(*) - FROM ((`Animals` AS `a` - LEFT JOIN `Birds` AS `b` ON `a`.`Id` = `b`.`Id`) - LEFT JOIN `Eagle` AS `e` ON `a`.`Id` = `e`.`Id`) - LEFT JOIN `Kiwi` AS `k` ON `a`.`Id` = `k`.`Id` + FROM `Animals` AS `a` WHERE `a`.`CountryId` = 1 AND `c`.`Id` = `a`.`CountryId` AND `a`.`CountryId` > 0) > 0 """); } @@ -62,9 +59,7 @@ public override async Task Delete_where_using_hierarchy_derived(bool async) DELETE FROM `Countries` AS `c` WHERE ( SELECT COUNT(*) - FROM ((`Animals` AS `a` - LEFT JOIN `Birds` AS `b` ON `a`.`Id` = `b`.`Id`) - LEFT JOIN `Eagle` AS `e` ON `a`.`Id` = `e`.`Id`) + FROM `Animals` AS `a` LEFT JOIN `Kiwi` AS `k` ON `a`.`Id` = `k`.`Id` WHERE `a`.`CountryId` = 1 AND `c`.`Id` = `a`.`CountryId` AND `k`.`Id` IS NOT NULL AND `a`.`CountryId` > 0) > 0 """); @@ -182,10 +177,7 @@ public override async Task Update_where_using_hierarchy(bool async) SET `c`.`Name` = 'Monovia' WHERE ( SELECT COUNT(*) - FROM ((`Animals` AS `a` - LEFT JOIN `Birds` AS `b` ON `a`.`Id` = `b`.`Id`) - LEFT JOIN `Eagle` AS `e` ON `a`.`Id` = `e`.`Id`) - LEFT JOIN `Kiwi` AS `k` ON `a`.`Id` = `k`.`Id` + FROM `Animals` AS `a` WHERE `a`.`CountryId` = 1 AND `c`.`Id` = `a`.`CountryId` AND `a`.`CountryId` > 0) > 0 """); } @@ -200,9 +192,7 @@ public override async Task Update_where_using_hierarchy_derived(bool async) SET `c`.`Name` = 'Monovia' WHERE ( SELECT COUNT(*) - FROM ((`Animals` AS `a` - LEFT JOIN `Birds` AS `b` ON `a`.`Id` = `b`.`Id`) - LEFT JOIN `Eagle` AS `e` ON `a`.`Id` = `e`.`Id`) + FROM `Animals` AS `a` LEFT JOIN `Kiwi` AS `k` ON `a`.`Id` = `k`.`Id` WHERE `a`.`CountryId` = 1 AND `c`.`Id` = `a`.`CountryId` AND `k`.`Id` IS NOT NULL AND `a`.`CountryId` > 0) > 0 """); diff --git a/test/EFCore.Jet.FunctionalTests/BulkUpdates/TPTInheritanceBulkUpdatesJetTest.cs b/test/EFCore.Jet.FunctionalTests/BulkUpdates/TPTInheritanceBulkUpdatesJetTest.cs index 3ec576d6..326bda22 100644 --- a/test/EFCore.Jet.FunctionalTests/BulkUpdates/TPTInheritanceBulkUpdatesJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/BulkUpdates/TPTInheritanceBulkUpdatesJetTest.cs @@ -159,10 +159,7 @@ public override async Task Update_where_using_hierarchy(bool async) SET `c`.`Name` = 'Monovia' WHERE ( SELECT COUNT(*) - FROM ((`Animals` AS `a` - LEFT JOIN `Birds` AS `b` ON `a`.`Id` = `b`.`Id`) - LEFT JOIN `Eagle` AS `e` ON `a`.`Id` = `e`.`Id`) - LEFT JOIN `Kiwi` AS `k` ON `a`.`Id` = `k`.`Id` + FROM `Animals` AS `a` WHERE `c`.`Id` = `a`.`CountryId` AND `a`.`CountryId` > 0) > 0 """); } @@ -177,9 +174,7 @@ public override async Task Update_where_using_hierarchy_derived(bool async) SET `c`.`Name` = 'Monovia' WHERE ( SELECT COUNT(*) - FROM ((`Animals` AS `a` - LEFT JOIN `Birds` AS `b` ON `a`.`Id` = `b`.`Id`) - LEFT JOIN `Eagle` AS `e` ON `a`.`Id` = `e`.`Id`) + FROM `Animals` AS `a` LEFT JOIN `Kiwi` AS `k` ON `a`.`Id` = `k`.`Id` WHERE `c`.`Id` = `a`.`CountryId` AND `k`.`Id` IS NOT NULL AND `a`.`CountryId` > 0) > 0 """); diff --git a/test/EFCore.Jet.FunctionalTests/CommandConfigurationTest.cs b/test/EFCore.Jet.FunctionalTests/CommandConfigurationTest.cs index 111cee32..3eadee10 100644 --- a/test/EFCore.Jet.FunctionalTests/CommandConfigurationTest.cs +++ b/test/EFCore.Jet.FunctionalTests/CommandConfigurationTest.cs @@ -11,6 +11,9 @@ // ReSharper disable UnusedAutoPropertyAccessor.Local // ReSharper disable InconsistentNaming + +#nullable disable + namespace EntityFrameworkCore.Jet.FunctionalTests { public class CommandConfigurationTest : IClassFixture diff --git a/test/EFCore.Jet.FunctionalTests/CommandInterceptionJetTest.cs b/test/EFCore.Jet.FunctionalTests/CommandInterceptionJetTest.cs index a1207a45..e6041f9b 100644 --- a/test/EFCore.Jet.FunctionalTests/CommandInterceptionJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/CommandInterceptionJetTest.cs @@ -12,6 +12,7 @@ using Microsoft.Extensions.DependencyInjection; using Xunit; +#nullable disable namespace EntityFrameworkCore.Jet.FunctionalTests { public abstract class CommandInterceptionJetTestBase : CommandInterceptionTestBase diff --git a/test/EFCore.Jet.FunctionalTests/ComputedColumnTest.cs b/test/EFCore.Jet.FunctionalTests/ComputedColumnTest.cs index 61fce34e..f711a291 100644 --- a/test/EFCore.Jet.FunctionalTests/ComputedColumnTest.cs +++ b/test/EFCore.Jet.FunctionalTests/ComputedColumnTest.cs @@ -1,41 +1,40 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; +using System.Threading.Tasks; using EntityFrameworkCore.Jet.Data; using EntityFrameworkCore.Jet.FunctionalTests.TestUtilities; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.TestUtilities; using Microsoft.Extensions.DependencyInjection; using Xunit; - +#nullable disable namespace EntityFrameworkCore.Jet.FunctionalTests { - public class ComputedColumnTest : IDisposable + public class ComputedColumnTest : IAsyncLifetime { [ConditionalFact] public void Can_use_computed_columns() { var serviceProvider = new ServiceCollection() .AddEntityFrameworkJet() - .BuildServiceProvider(); + .BuildServiceProvider(validateScopes: true); - using (var context = new Context(serviceProvider, TestStore.Name)) - { - context.Database.EnsureCreatedResiliently(); + using var context = new Context(serviceProvider, TestStore.Name); + context.Database.EnsureCreatedResiliently(); - var entity = context.Add( - new Entity - { - P1 = 20, - P2 = 30, - P3 = 80 - }).Entity; + var entity = context.Add( + new Entity + { + P1 = 20, + P2 = 30, + P3 = 80 + }).Entity; - context.SaveChanges(); + context.SaveChanges(); - Assert.Equal(50, entity.P4); - Assert.Equal(100, entity.P5); - } + Assert.Equal(50, entity.P4); + Assert.Equal(100, entity.P5); } [ConditionalFact] @@ -43,38 +42,27 @@ public void Can_use_computed_columns_with_null_values() { var serviceProvider = new ServiceCollection() .AddEntityFrameworkJet() - .BuildServiceProvider(); + .BuildServiceProvider(validateScopes: true); - using (var context = new Context(serviceProvider, TestStore.Name)) - { - context.Database.EnsureCreatedResiliently(); + using var context = new Context(serviceProvider, TestStore.Name); + context.Database.EnsureCreatedResiliently(); - var entity = context.Add(new Entity { P1 = 20, P2 = 30 }).Entity; + var entity = context.Add(new Entity { P1 = 20, P2 = 30 }).Entity; - context.SaveChanges(); + context.SaveChanges(); - Assert.Equal(50, entity.P4); - Assert.Null(entity.P5); - } + Assert.Equal(50, entity.P4); + Assert.Null(entity.P5); } - private class Context : DbContext + private class Context(IServiceProvider serviceProvider, string databaseName) : DbContext { - private readonly IServiceProvider _serviceProvider; - private readonly string _databaseName; - - public Context(IServiceProvider serviceProvider, string databaseName) - { - _serviceProvider = serviceProvider; - _databaseName = databaseName; - } - public DbSet Entities { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => optionsBuilder - .UseJet(JetTestStore.CreateConnectionString(_databaseName), TestEnvironment.DataAccessProviderFactory, b => b.ApplyConfiguration()) - .UseInternalServiceProvider(_serviceProvider); + .UseJet(JetTestStore.CreateConnectionString(databaseName), TestEnvironment.DataAccessProviderFactory, b => b.ApplyConfiguration()) + .UseInternalServiceProvider(serviceProvider); protected override void OnModelCreating(ModelBuilder modelBuilder) { @@ -114,23 +102,14 @@ public class EnumItem public FlagEnum? CalculatedFlagEnum { get; set; } } - private class NullableContext : DbContext + private class NullableContext(IServiceProvider serviceProvider, string databaseName) : DbContext { - private readonly IServiceProvider _serviceProvider; - private readonly string _databaseName; - - public NullableContext(IServiceProvider serviceProvider, string databaseName) - { - _serviceProvider = serviceProvider; - _databaseName = databaseName; - } - public DbSet EnumItems { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => optionsBuilder - .UseJet(JetTestStore.CreateConnectionString(_databaseName), TestEnvironment.DataAccessProviderFactory, b => b.ApplyConfiguration()) - .UseInternalServiceProvider(_serviceProvider); + .UseJet(JetTestStore.CreateConnectionString(databaseName), TestEnvironment.DataAccessProviderFactory, b => b.ApplyConfiguration()) + .UseInternalServiceProvider(serviceProvider); protected override void OnModelCreating(ModelBuilder modelBuilder) => modelBuilder.Entity() @@ -143,26 +122,26 @@ public void Can_use_computed_columns_with_nullable_enum() { var serviceProvider = new ServiceCollection() .AddEntityFrameworkJet() - .BuildServiceProvider(); + .BuildServiceProvider(validateScopes: true); - using (var context = new NullableContext(serviceProvider, TestStore.Name)) - { - context.Database.EnsureCreatedResiliently(); + using var context = new NullableContext(serviceProvider, TestStore.Name); + context.Database.EnsureCreatedResiliently(); - var entity = context.EnumItems.Add(new EnumItem { FlagEnum = FlagEnum.AValue, OptionalFlagEnum = FlagEnum.BValue }).Entity; - context.SaveChanges(); + var entity = context.EnumItems.Add(new EnumItem { FlagEnum = FlagEnum.AValue, OptionalFlagEnum = FlagEnum.BValue }).Entity; + context.SaveChanges(); - Assert.Equal(FlagEnum.AValue | FlagEnum.BValue, entity.CalculatedFlagEnum); - } + Assert.Equal(FlagEnum.AValue | FlagEnum.BValue, entity.CalculatedFlagEnum); } - public ComputedColumnTest() - { - TestStore = JetTestStore.CreateInitialized("ComputedColumnTest"); - } + protected JetTestStore TestStore { get; private set; } - protected JetTestStore TestStore { get; } + public async Task InitializeAsync() + => TestStore = await JetTestStore.CreateInitializedAsync("ComputedColumnTest"); - public virtual void Dispose() => TestStore.Dispose(); + public Task DisposeAsync() + { + TestStore.Dispose(); + return Task.CompletedTask; + } } } diff --git a/test/EFCore.Jet.FunctionalTests/ConnectionInterceptionJetTest.cs b/test/EFCore.Jet.FunctionalTests/ConnectionInterceptionJetTest.cs index 5fa0f203..4a3cf335 100644 --- a/test/EFCore.Jet.FunctionalTests/ConnectionInterceptionJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/ConnectionInterceptionJetTest.cs @@ -4,6 +4,7 @@ using System.Collections.Generic; using System.Data; using System.Data.Common; +using System.Diagnostics.CodeAnalysis; using EntityFrameworkCore.Jet.Data; using EntityFrameworkCore.Jet.FunctionalTests.TestUtilities; using Microsoft.EntityFrameworkCore; @@ -39,6 +40,7 @@ protected override BadUniverseContext CreateBadUniverse(DbContextOptionsBuilder public class FakeDbConnection : DbConnection { + [AllowNull] public override string ConnectionString { get; set; } public override string Database => "Database"; public override string DataSource => "DataSource"; diff --git a/test/EFCore.Jet.FunctionalTests/ConnectionSpecificationTest.cs b/test/EFCore.Jet.FunctionalTests/ConnectionSpecificationTest.cs index 96d1a56f..73863f5a 100644 --- a/test/EFCore.Jet.FunctionalTests/ConnectionSpecificationTest.cs +++ b/test/EFCore.Jet.FunctionalTests/ConnectionSpecificationTest.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; using EntityFrameworkCore.Jet.FunctionalTests.TestUtilities; using EntityFrameworkCore.Jet.Data; using Microsoft.EntityFrameworkCore; @@ -11,40 +12,92 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Xunit; +using System.Data; // ReSharper disable InconsistentNaming // ReSharper disable ClassNeverInstantiated.Local // ReSharper disable UnusedAutoPropertyAccessor.Local + +#nullable disable + namespace EntityFrameworkCore.Jet.FunctionalTests { public class ConnectionSpecificationTest { [ConditionalFact] - public void Can_specify_connection_string_in_OnConfiguring() + public async Task Can_specify_no_connection_string_in_OnConfiguring() + { + var serviceProvider + = new ServiceCollection() + .AddDbContext() + .BuildServiceProvider(validateScopes: true); + + using (await JetTestStore.GetNorthwindStoreAsync()) + { + using var scope = serviceProvider.CreateScope(); + var context = scope.ServiceProvider.GetRequiredService(); + + context.Database.SetConnectionString(JetNorthwindTestStoreFactory.NorthwindConnectionString); + + Assert.True(await context.Customers.AnyAsync()); + } + } + + [ConditionalFact] + public async Task Can_specify_no_connection_string_in_OnConfiguring_with_default_service_provider() + { + using (await JetTestStore.GetNorthwindStoreAsync()) + { + using var context = new NoneInOnConfiguringContext(); + + context.Database.SetConnectionString(JetNorthwindTestStoreFactory.NorthwindConnectionString); + + Assert.True(await context.Customers.AnyAsync()); + } + } + + [ConditionalFact] + public async Task Throws_if_context_used_with_no_connection_or_connection_string() + { + using (await JetTestStore.GetNorthwindStoreAsync()) + { + using var context = new NoneInOnConfiguringContext(); + + await Assert.ThrowsAsync(() => context.Customers.AnyAsync()); + } + } + + private class NoneInOnConfiguringContext : NorthwindContextBase + { + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + => optionsBuilder + .EnableServiceProviderCaching(false) + .UseJet(b => b.ApplyConfiguration()); + } + + [ConditionalFact] + public async Task Can_specify_connection_string_in_OnConfiguring() { var serviceProvider = new ServiceCollection() .AddDbContext() - .BuildServiceProvider(); + .BuildServiceProvider(validateScopes: true); - using (JetTestStore.GetNorthwindStore()) + using (await JetTestStore.GetNorthwindStoreAsync()) { - using (var context = serviceProvider.GetRequiredService()) - { - Assert.True(context.Customers.Any()); - } + using var scope = serviceProvider.CreateScope(); + var context = scope.ServiceProvider.GetRequiredService(); + Assert.True(await context.Customers.AnyAsync()); } } [ConditionalFact] - public void Can_specify_connection_string_in_OnConfiguring_with_default_service_provider() + public async Task Can_specify_connection_string_in_OnConfiguring_with_default_service_provider() { - using (JetTestStore.GetNorthwindStore()) + using (await JetTestStore.GetNorthwindStoreAsync()) { - using (var context = new StringInOnConfiguringContext()) - { - Assert.True(context.Customers.Any()); - } + using var context = new StringInOnConfiguringContext(); + Assert.True(await context.Customers.AnyAsync()); } } @@ -53,47 +106,222 @@ private class StringInOnConfiguringContext : NorthwindContextBase protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => optionsBuilder .EnableServiceProviderCaching(false) - .UseJet(JetNorthwindTestStoreFactory.NorthwindConnectionString, TestEnvironment.DataAccessProviderFactory, b => b.ApplyConfiguration()); + .UseJet(JetNorthwindTestStoreFactory.NorthwindConnectionString, b => b.ApplyConfiguration()); + } + + [ConditionalTheory] + [InlineData(false)] + [InlineData(true)] + public async Task Can_specify_no_connection_in_OnConfiguring(bool contextOwnsConnection) + { + var serviceProvider + = new ServiceCollection() + .AddScoped(p => new JetConnection(JetNorthwindTestStoreFactory.NorthwindConnectionString)) + .AddDbContext().BuildServiceProvider(validateScopes: true); + + JetConnection connection; + + using (await JetTestStore.GetNorthwindStoreAsync()) + { + using var scope = serviceProvider.CreateScope(); + var context = scope.ServiceProvider.GetRequiredService(); + + connection = new JetConnection(JetNorthwindTestStoreFactory.NorthwindConnectionString); + context.Database.SetDbConnection(connection, contextOwnsConnection); + + Assert.True(await context.Customers.AnyAsync()); + } + + if (contextOwnsConnection) + { + await Assert.ThrowsAsync(() => connection.OpenAsync()); // Disposed + } + else + { + await connection.OpenAsync(); + await connection.CloseAsync(); + await connection.DisposeAsync(); + } + } + + [ConditionalTheory] + [InlineData(false)] + [InlineData(true)] + public async Task Can_specify_no_connection_in_OnConfiguring_with_default_service_provider(bool contextOwnsConnection) + { + JetConnection connection; + + using (await JetTestStore.GetNorthwindStoreAsync()) + { + using var context = new NoneInOnConfiguringContext(); + + connection = new JetConnection(JetNorthwindTestStoreFactory.NorthwindConnectionString); + context.Database.SetDbConnection(connection, contextOwnsConnection); + + Assert.True(await context.Customers.AnyAsync()); + } + + if (contextOwnsConnection) + { + Assert.Throws(() => connection.Open()); // Disposed + } + else + { + connection.Open(); + connection.Close(); + connection.Dispose(); + } } [ConditionalFact] - public void Can_specify_connection_in_OnConfiguring() + public async Task Can_specify_connection_in_OnConfiguring() { var serviceProvider = new ServiceCollection() .AddScoped(p => new JetConnection(JetNorthwindTestStoreFactory.NorthwindConnectionString)) - .AddDbContext().BuildServiceProvider(); + .AddDbContext().BuildServiceProvider(validateScopes: true); - using (JetTestStore.GetNorthwindStore()) + using (await JetTestStore.GetNorthwindStoreAsync()) { - using (var context = serviceProvider.GetRequiredService()) - { - Assert.True(context.Customers.Any()); - } + using var scope = serviceProvider.CreateScope(); + var context = scope.ServiceProvider.GetRequiredService(); + Assert.True(await context.Customers.AnyAsync()); } } [ConditionalFact] - public void Can_specify_connection_in_OnConfiguring_with_default_service_provider() + public async Task Can_specify_connection_in_OnConfiguring_with_default_service_provider() { - using (JetTestStore.GetNorthwindStore()) + using (await JetTestStore.GetNorthwindStoreAsync()) { - using (var context = new ConnectionInOnConfiguringContext( - new JetConnection(JetNorthwindTestStoreFactory.NorthwindConnectionString))) - { - Assert.True(context.Customers.Any()); - } + using var connection = new JetConnection(JetNorthwindTestStoreFactory.NorthwindConnectionString); + using var context = new ConnectionInOnConfiguringContext(connection); + + Assert.True(await context.Customers.AnyAsync()); + } + } + + [ConditionalFact] + public async Task Can_specify_owned_connection_in_OnConfiguring() + { + var serviceProvider + = new ServiceCollection() + .AddSingleton(_ => new JetConnection(JetNorthwindTestStoreFactory.NorthwindConnectionString)) + .AddDbContext().BuildServiceProvider(validateScopes: true); + + JetConnection connection; + + using (await JetTestStore.GetNorthwindStoreAsync()) + { + connection = serviceProvider.GetRequiredService(); + + using var scope = serviceProvider.CreateScope(); + var context = scope.ServiceProvider.GetRequiredService(); + Assert.True(await context.Customers.AnyAsync()); + } + + Assert.Throws(() => connection.Open()); // Disposed + } + + [ConditionalFact] + public async Task Can_specify_owned_connection_in_OnConfiguring_with_default_service_provider() + { + JetConnection connection; + + using (await JetTestStore.GetNorthwindStoreAsync()) + { + connection = new JetConnection(JetNorthwindTestStoreFactory.NorthwindConnectionString); + using var context = new OwnedConnectionInOnConfiguringContext(connection); + + Assert.True(await context.Customers.AnyAsync()); } + + Assert.Throws(() => connection.Open()); // Disposed } - private class ConnectionInOnConfiguringContext : NorthwindContextBase + [ConditionalFact] + public async Task Can_specify_then_change_connection() { - private readonly JetConnection _connection; + var connection = new JetConnection(JetNorthwindTestStoreFactory.NorthwindConnectionString); - public ConnectionInOnConfiguringContext(JetConnection connection) + var serviceProvider + = new ServiceCollection() + .AddScoped(p => connection) + .AddDbContext().BuildServiceProvider(validateScopes: true); + + using (await JetTestStore.GetNorthwindStoreAsync()) { - _connection = connection; + using var scope = serviceProvider.CreateScope(); + var context = scope.ServiceProvider.GetRequiredService(); + + Assert.Same(connection, context.Database.GetDbConnection()); + Assert.True(await context.Customers.AnyAsync()); + + using var newConnection = new JetConnection(JetNorthwindTestStoreFactory.NorthwindConnectionString); + context.Database.SetDbConnection(newConnection); + + Assert.Same(newConnection, context.Database.GetDbConnection()); + Assert.True(await context.Customers.AnyAsync()); } + } + + [ConditionalFact] + public async Task Cannot_change_connection_when_open_and_owned() + { + var connection = new JetConnection(JetNorthwindTestStoreFactory.NorthwindConnectionString); + + var serviceProvider + = new ServiceCollection() + .AddScoped(p => connection) + .AddDbContext().BuildServiceProvider(validateScopes: true); + + using (await JetTestStore.GetNorthwindStoreAsync()) + { + using var scope = serviceProvider.CreateScope(); + var context = scope.ServiceProvider.GetRequiredService(); + + context.Database.OpenConnection(); + Assert.Same(connection, context.Database.GetDbConnection()); + Assert.True(await context.Customers.AnyAsync()); + + using var newConnection = new JetConnection(JetNorthwindTestStoreFactory.NorthwindConnectionString); + + Assert.Equal( + RelationalStrings.CannotChangeWhenOpen, + Assert.Throws(() => context.Database.SetDbConnection(newConnection)).Message); + } + } + + [ConditionalFact] + public async Task Can_change_connection_when_open_and_not_owned() + { + var connection = new JetConnection(JetNorthwindTestStoreFactory.NorthwindConnectionString); + + var serviceProvider + = new ServiceCollection() + .AddScoped(p => connection) + .AddDbContext().BuildServiceProvider(validateScopes: true); + + using (await JetTestStore.GetNorthwindStoreAsync()) + { + using var scope = serviceProvider.CreateScope(); + var context = scope.ServiceProvider.GetRequiredService(); + + context.Database.OpenConnection(); + Assert.Same(connection, context.Database.GetDbConnection()); + Assert.True(await context.Customers.AnyAsync()); + + using var newConnection = new JetConnection(JetNorthwindTestStoreFactory.NorthwindConnectionString); + context.Database.SetDbConnection(newConnection); + + Assert.Same(newConnection, context.Database.GetDbConnection()); + Assert.True(await context.Customers.AnyAsync()); + } + } + + private class ConnectionInOnConfiguringContext(JetConnection connection) : NorthwindContextBase + { + private readonly JetConnection _connection = connection; protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => optionsBuilder @@ -107,41 +335,42 @@ public override void Dispose() } } - // ReSharper disable once UnusedMember.Local - private class StringInConfigContext : NorthwindContextBase + private class OwnedConnectionInOnConfiguringContext(JetConnection connection) : NorthwindContextBase { + private readonly JetConnection _connection = connection; + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) - => optionsBuilder.UseJet("Database=Crunchie", TestEnvironment.DataAccessProviderFactory, b => b.ApplyConfiguration()); + => optionsBuilder + .EnableServiceProviderCaching(false) + .UseJet(_connection, contextOwnsConnection: true, b => b.ApplyConfiguration()); } [ConditionalFact] - public void Throws_if_no_connection_found_in_config_without_UseJet() + public async Task Throws_if_no_connection_found_in_config_without_UseJet() { var serviceProvider = new ServiceCollection() - .AddDbContext().BuildServiceProvider(); + .AddDbContext().BuildServiceProvider(validateScopes: true); - using (var context = serviceProvider.GetRequiredService()) - { - Assert.Equal( - CoreStrings.NoProviderConfigured, - Assert.Throws(() => context.Customers.Any()).Message); - } + using var scope = serviceProvider.CreateScope(); + var context = scope.ServiceProvider.GetRequiredService(); + Assert.Equal( + CoreStrings.NoProviderConfigured, + (await Assert.ThrowsAsync(() => context.Customers.AnyAsync())).Message); } [ConditionalFact] - public void Throws_if_no_config_without_UseJet() + public async Task Throws_if_no_config_without_UseJet() { var serviceProvider = new ServiceCollection() - .AddDbContext().BuildServiceProvider(); + .AddDbContext().BuildServiceProvider(validateScopes: true); - using (var context = serviceProvider.GetRequiredService()) - { - Assert.Equal( - CoreStrings.NoProviderConfigured, - Assert.Throws(() => context.Customers.Any()).Message); - } + using var scope = serviceProvider.CreateScope(); + var context = scope.ServiceProvider.GetRequiredService(); + Assert.Equal( + CoreStrings.NoProviderConfigured, + (await Assert.ThrowsAsync(() => context.Customers.AnyAsync())).Message); } private class NoUseJetContext : NorthwindContextBase @@ -151,48 +380,41 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) } [ConditionalFact] - public void Can_depend_on_DbContextOptions() + public async Task Can_depend_on_DbContextOptions() { var serviceProvider = new ServiceCollection() .AddScoped(p => new JetConnection(JetNorthwindTestStoreFactory.NorthwindConnectionString)) .AddDbContext() - .BuildServiceProvider(); + .BuildServiceProvider(validateScopes: true); - using (JetTestStore.GetNorthwindStore()) + using (await JetTestStore.GetNorthwindStoreAsync()) { - using (var context = serviceProvider.GetRequiredService()) - { - Assert.True(context.Customers.Any()); - } + using var scope = serviceProvider.CreateScope(); + var context = scope.ServiceProvider.GetRequiredService(); + Assert.True(await context.Customers.AnyAsync()); } } [ConditionalFact] - public void Can_depend_on_DbContextOptions_with_default_service_provider() + public async Task Can_depend_on_DbContextOptions_with_default_service_provider() { - using (JetTestStore.GetNorthwindStore()) + using (await JetTestStore.GetNorthwindStoreAsync()) { - using (var context = new OptionsContext( + using var connection = new JetConnection(JetNorthwindTestStoreFactory.NorthwindConnectionString); + + using var context = new OptionsContext( new DbContextOptions(), - new JetConnection(JetNorthwindTestStoreFactory.NorthwindConnectionString))) - { - Assert.True(context.Customers.Any()); - } + connection); + + Assert.True(await context.Customers.AnyAsync()); } } - private class OptionsContext : NorthwindContextBase + private class OptionsContext(DbContextOptions options, JetConnection connection) : NorthwindContextBase(options) { - private readonly JetConnection _connection; - private readonly DbContextOptions _options; - - public OptionsContext(DbContextOptions options, JetConnection connection) - : base(options) - { - _options = options; - _connection = connection; - } + private readonly JetConnection _connection = connection; + private readonly DbContextOptions _options = options; protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { @@ -213,43 +435,34 @@ public override void Dispose() } [ConditionalFact] - public void Can_depend_on_non_generic_options_when_only_one_context() + public async Task Can_depend_on_non_generic_options_when_only_one_context() { var serviceProvider = new ServiceCollection() .AddDbContext() - .BuildServiceProvider(); + .BuildServiceProvider(validateScopes: true); - using (JetTestStore.GetNorthwindStore()) + using (await JetTestStore.GetNorthwindStoreAsync()) { - using (var context = serviceProvider.GetRequiredService()) - { - Assert.True(context.Customers.Any()); - } + using var scope = serviceProvider.CreateScope(); + var context = scope.ServiceProvider.GetRequiredService(); + Assert.True(await context.Customers.AnyAsync()); } } [ConditionalFact] - public void Can_depend_on_non_generic_options_when_only_one_context_with_default_service_provider() + public async Task Can_depend_on_non_generic_options_when_only_one_context_with_default_service_provider() { - using (JetTestStore.GetNorthwindStore()) + using (await JetTestStore.GetNorthwindStoreAsync()) { - using (var context = new NonGenericOptionsContext(new DbContextOptions())) - { - Assert.True(context.Customers.Any()); - } + using var context = new NonGenericOptionsContext(new DbContextOptions()); + Assert.True(await context.Customers.AnyAsync()); } } - private class NonGenericOptionsContext : NorthwindContextBase + private class NonGenericOptionsContext(DbContextOptions options) : NorthwindContextBase(options) { - private readonly DbContextOptions _options; - - public NonGenericOptionsContext(DbContextOptions options) - : base(options) - { - _options = options; - } + private readonly DbContextOptions _options = options; protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { @@ -257,7 +470,7 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) optionsBuilder .EnableServiceProviderCaching(false) - .UseJet(JetNorthwindTestStoreFactory.NorthwindConnectionString, TestEnvironment.DataAccessProviderFactory, b => b.ApplyConfiguration()); + .UseJet(JetNorthwindTestStoreFactory.NorthwindConnectionString, b => b.ApplyConfiguration()); Assert.NotSame(_options, optionsBuilder.Options); } @@ -267,7 +480,7 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) [InlineData("MyConnectionString", "name=MyConnectionString")] [InlineData("ConnectionStrings:DefaultConnection", "name=ConnectionStrings:DefaultConnection")] [InlineData("ConnectionStrings:DefaultConnection", " NamE = ConnectionStrings:DefaultConnection ")] - public void Can_use_AddDbContext_and_get_connection_string_from_config(string key, string connectionString) + public async Task Can_use_AddDbContext_and_get_connection_string_from_config(string key, string connectionString) { var configBuilder = new ConfigurationBuilder() .AddInMemoryCollection( @@ -277,28 +490,18 @@ var serviceProvider = new ServiceCollection() .AddSingleton(configBuilder.Build()) .AddDbContext( - b => b.UseJet(connectionString, TestEnvironment.DataAccessProviderFactory).EnableServiceProviderCaching(false)) - .BuildServiceProvider(); + b => b.UseJet(connectionString).EnableServiceProviderCaching(false)) + .BuildServiceProvider(validateScopes: true); - using (JetTestStore.GetNorthwindStore()) + using (await JetTestStore.GetNorthwindStoreAsync()) { - using (var serviceScope = serviceProvider.GetRequiredService().CreateScope()) - { - using (var context = serviceScope.ServiceProvider.GetRequiredService()) - { - Assert.True(context.Customers.Any()); - } - } + using var serviceScope = serviceProvider.GetRequiredService().CreateScope(); + using var context = serviceScope.ServiceProvider.GetRequiredService(); + Assert.True(await context.Customers.AnyAsync()); } } - private class UseConfigurationContext : NorthwindContextBase - { - public UseConfigurationContext(DbContextOptions options) - : base(options) - { - } - } + private class UseConfigurationContext(DbContextOptions options) : NorthwindContextBase(options); private class NorthwindContextBase : DbContext { @@ -314,14 +517,12 @@ protected NorthwindContextBase(DbContextOptions options) public DbSet Customers { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) - { - modelBuilder.Entity( + => modelBuilder.Entity( b => { b.HasKey(c => c.CustomerID); b.ToTable("Customers"); }); - } } private class Customer @@ -334,5 +535,84 @@ private class Customer public string Fax { get; set; } // ReSharper restore UnusedMember.Local } + + [ConditionalTheory] + [InlineData(true)] + [InlineData(false)] + public async Task Can_use_an_existing_closed_connection_test(bool openConnection) + { + var serviceProvider = new ServiceCollection() + .AddEntityFrameworkJet() + .BuildServiceProvider(validateScopes: true); + + using var store = await JetTestStore.GetNorthwindStoreAsync(); + store.CloseConnection(); + + var openCount = 0; + var closeCount = 0; + var disposeCount = 0; + + using var connection = new JetConnection(store.ConnectionString); + if (openConnection) + { + await connection.OpenAsync(); + } + + connection.StateChange += (_, a) => + { + switch (a.CurrentState) + { + case ConnectionState.Open: + openCount++; + break; + case ConnectionState.Closed: + closeCount++; + break; + } + }; + connection.Disposed += (_, __) => disposeCount++; + + using (var context = new NorthwindContext(serviceProvider, connection)) + { + Assert.Equal(91, await context.Customers.CountAsync()); + } + + if (openConnection) + { + Assert.Equal(ConnectionState.Open, connection.State); + Assert.Equal(0, openCount); + Assert.Equal(0, closeCount); + } + else + { + Assert.Equal(ConnectionState.Closed, connection.State); + Assert.Equal(1, openCount); + Assert.Equal(1, closeCount); + } + + Assert.Equal(0, disposeCount); + } + + private class NorthwindContext(IServiceProvider serviceProvider, JetConnection connection) : DbContext + { + private readonly IServiceProvider _serviceProvider = serviceProvider; + private readonly JetConnection _connection = connection; + + // ReSharper disable once UnusedAutoPropertyAccessor.Local + public DbSet Customers { get; set; } + + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + => optionsBuilder + .UseJet(_connection, b => b.ApplyConfiguration()) + .UseInternalServiceProvider(_serviceProvider); + + protected override void OnModelCreating(ModelBuilder modelBuilder) + => modelBuilder.Entity( + b => + { + b.HasKey(c => c.CustomerID); + b.ToTable("Customers"); + }); + } } } diff --git a/test/EFCore.Jet.FunctionalTests/ConvertToProviderTypesJetTest.cs b/test/EFCore.Jet.FunctionalTests/ConvertToProviderTypesJetTest.cs index 454a4ce1..ebcbe1ed 100644 --- a/test/EFCore.Jet.FunctionalTests/ConvertToProviderTypesJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/ConvertToProviderTypesJetTest.cs @@ -4,6 +4,7 @@ using System.Globalization; using System.Linq; using System.Linq.Expressions; +using System.Threading.Tasks; using EntityFrameworkCore.Jet.FunctionalTests.TestUtilities; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.ChangeTracking; @@ -12,6 +13,8 @@ using Microsoft.EntityFrameworkCore.TestUtilities; using Xunit; +#nullable disable + namespace EntityFrameworkCore.Jet.FunctionalTests { public class ConvertToProviderTypesJetTest : ConvertToProviderTypesTestBase< @@ -183,7 +186,7 @@ public virtual void Columns_have_expected_data_types() Assert.Equal(expected, actual, ignoreLineEndingDifferences: true); } - public override void Can_insert_and_read_back_all_non_nullable_data_types() + public override async Task Can_insert_and_read_back_all_non_nullable_data_types() { using (var context = CreateContext()) { @@ -220,7 +223,7 @@ public override void Can_insert_and_read_back_all_non_nullable_data_types() EnumS8 = EnumS8.SomeValue }); - Assert.Equal(1, context.SaveChanges()); + Assert.Equal(1, await context.SaveChangesAsync()); } using (var context = CreateContext()) @@ -261,7 +264,7 @@ public override void Can_insert_and_read_back_all_non_nullable_data_types() } } - public override void Can_insert_and_read_back_all_nullable_data_types_with_values_set_to_non_null() + public override async Task Can_insert_and_read_back_all_nullable_data_types_with_values_set_to_non_null() { using (var context = CreateContext()) { @@ -300,7 +303,7 @@ public override void Can_insert_and_read_back_all_nullable_data_types_with_value EnumS8 = EnumS8.SomeValue }); - Assert.Equal(1, context.SaveChanges()); + Assert.Equal(1, await context.SaveChangesAsync()); } using (var context = CreateContext()) @@ -341,7 +344,7 @@ public override void Can_insert_and_read_back_all_nullable_data_types_with_value } } - public override void Can_insert_and_read_back_object_backed_data_types() + public override async Task Can_insert_and_read_back_object_backed_data_types() { using (var context = CreateContext()) { @@ -380,7 +383,7 @@ public override void Can_insert_and_read_back_object_backed_data_types() EnumS8 = EnumS8.SomeValue }); - Assert.Equal(1, context.SaveChanges()); + Assert.Equal(1, await context.SaveChangesAsync()); } using (var context = CreateContext()) @@ -421,7 +424,7 @@ public override void Can_insert_and_read_back_object_backed_data_types() } } - public override void Can_insert_and_read_back_nullable_backed_data_types() + public override async Task Can_insert_and_read_back_nullable_backed_data_types() { using (var context = CreateContext()) { @@ -458,7 +461,7 @@ public override void Can_insert_and_read_back_nullable_backed_data_types() EnumS8 = EnumS8.SomeValue }); - Assert.Equal(1, context.SaveChanges()); + Assert.Equal(1, await context.SaveChangesAsync()); } using (var context = CreateContext()) @@ -497,7 +500,7 @@ public override void Can_insert_and_read_back_nullable_backed_data_types() } } - public override void Can_insert_and_read_back_non_nullable_backed_data_types() + public override async Task Can_insert_and_read_back_non_nullable_backed_data_types() { using (var context = CreateContext()) { @@ -534,7 +537,7 @@ public override void Can_insert_and_read_back_non_nullable_backed_data_types() EnumS8 = EnumS8.SomeValue }); - Assert.Equal(1, context.SaveChanges()); + Assert.Equal(1, await context.SaveChangesAsync()); } using (var context = CreateContext()) @@ -574,22 +577,22 @@ public override void Can_insert_and_read_back_non_nullable_backed_data_types() } } - public override void Can_query_using_any_data_type() + public override async Task Can_query_using_any_data_type() { using var context = CreateContext(); var source = AddTestBuiltInDataTypes(context.Set()); - Assert.Equal(1, context.SaveChanges()); - + Assert.Equal(1, await context.SaveChangesAsync()); + QueryBuiltInDataTypesTest(source); } - public override void Can_query_using_any_data_type_shadow() + public override async Task Can_query_using_any_data_type_shadow() { using var context = CreateContext(); var source = AddTestBuiltInDataTypes(context.Set()); - Assert.Equal(1, context.SaveChanges()); + Assert.Equal(1, await context.SaveChangesAsync()); QueryBuiltInDataTypesTest(source); } @@ -932,22 +935,22 @@ private void QueryBuiltInDataTypesTest(EntityEntry source) return entityEntry; } - public override void Can_query_using_any_nullable_data_type() + public override async Task Can_query_using_any_nullable_data_type() { using var context = CreateContext(); var source = AddTestBuiltInNullableDataTypes(context.Set()); - Assert.Equal(1, context.SaveChanges()); + Assert.Equal(1, await context.SaveChangesAsync()); QueryBuiltInNullableDataTypesTest(source); } - public override void Can_query_using_any_data_type_nullable_shadow() + public override async Task Can_query_using_any_data_type_nullable_shadow() { using var context = CreateContext(); var source = AddTestBuiltInNullableDataTypes(context.Set()); - Assert.Equal(1, context.SaveChanges()); + Assert.Equal(1, await context.SaveChangesAsync()); QueryBuiltInNullableDataTypesTest(source); } diff --git a/test/EFCore.Jet.FunctionalTests/CustomConvertersJetTest.cs b/test/EFCore.Jet.FunctionalTests/CustomConvertersJetTest.cs index 3f0b60a0..0b8cd41b 100644 --- a/test/EFCore.Jet.FunctionalTests/CustomConvertersJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/CustomConvertersJetTest.cs @@ -3,6 +3,7 @@ using System; using System.Linq; using System.Linq.Expressions; +using System.Threading.Tasks; using EntityFrameworkCore.Jet.FunctionalTests.TestUtilities; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; @@ -10,6 +11,7 @@ using Microsoft.EntityFrameworkCore.TestUtilities; using Xunit; +#nullable disable // ReSharper disable InconsistentNaming namespace EntityFrameworkCore.Jet.FunctionalTests { @@ -227,7 +229,7 @@ public virtual void Columns_have_expected_data_types() Assert.Equal(expected, actual, ignoreLineEndingDifferences: true); } - public override void Can_insert_and_read_back_object_backed_data_types() + public override async Task Can_insert_and_read_back_object_backed_data_types() { using (var context = CreateContext()) { @@ -266,7 +268,7 @@ public override void Can_insert_and_read_back_object_backed_data_types() EnumS8 = EnumS8.SomeValue }); - Assert.Equal(1, context.SaveChanges()); + Assert.Equal(1, await context.SaveChangesAsync()); } using (var context = CreateContext()) @@ -307,7 +309,7 @@ public override void Can_insert_and_read_back_object_backed_data_types() } } - public override void Can_insert_and_read_back_nullable_backed_data_types() + public override async Task Can_insert_and_read_back_nullable_backed_data_types() { using (var context = CreateContext()) { @@ -344,7 +346,7 @@ public override void Can_insert_and_read_back_nullable_backed_data_types() EnumS8 = EnumS8.SomeValue }); - Assert.Equal(1, context.SaveChanges()); + Assert.Equal(1, await context.SaveChangesAsync()); } using (var context = CreateContext()) @@ -383,7 +385,7 @@ public override void Can_insert_and_read_back_nullable_backed_data_types() } } - public override void Can_insert_and_read_back_non_nullable_backed_data_types() + public override async Task Can_insert_and_read_back_non_nullable_backed_data_types() { using (var context = CreateContext()) { @@ -420,7 +422,7 @@ public override void Can_insert_and_read_back_non_nullable_backed_data_types() EnumS8 = EnumS8.SomeValue }); - Assert.Equal(1, context.SaveChanges()); + Assert.Equal(1, await context.SaveChangesAsync()); } using (var context = CreateContext()) @@ -547,9 +549,9 @@ private static bool IsUnsignedInteger(Type type) || type == typeof(char); [ConditionalFact] - public override void Value_conversion_is_appropriately_used_for_join_condition() + public override async Task Value_conversion_is_appropriately_used_for_join_condition() { - base.Value_conversion_is_appropriately_used_for_join_condition(); + await base.Value_conversion_is_appropriately_used_for_join_condition(); AssertSql( """ @@ -563,9 +565,9 @@ FROM [Blog] AS [b] } [ConditionalFact] - public override void Value_conversion_is_appropriately_used_for_left_join_condition() + public override async Task Value_conversion_is_appropriately_used_for_left_join_condition() { - base.Value_conversion_is_appropriately_used_for_left_join_condition(); + await base.Value_conversion_is_appropriately_used_for_left_join_condition(); AssertSql( """ @@ -579,9 +581,9 @@ FROM [Blog] AS [b] } [ConditionalFact] - public override void Where_bool_gets_converted_to_equality_when_value_conversion_is_used() + public override async Task Where_bool_gets_converted_to_equality_when_value_conversion_is_used() { - base.Where_bool_gets_converted_to_equality_when_value_conversion_is_used(); + await base.Where_bool_gets_converted_to_equality_when_value_conversion_is_used(); AssertSql( """ @@ -592,9 +594,9 @@ public override void Where_bool_gets_converted_to_equality_when_value_conversion } [ConditionalFact] - public override void Where_negated_bool_gets_converted_to_equality_when_value_conversion_is_used() + public override async Task Where_negated_bool_gets_converted_to_equality_when_value_conversion_is_used() { - base.Where_negated_bool_gets_converted_to_equality_when_value_conversion_is_used(); + await base.Where_negated_bool_gets_converted_to_equality_when_value_conversion_is_used(); AssertSql( """ @@ -604,9 +606,9 @@ public override void Where_negated_bool_gets_converted_to_equality_when_value_co """); } - public override void Where_bool_gets_converted_to_equality_when_value_conversion_is_used_using_EFProperty() + public override async Task Where_bool_gets_converted_to_equality_when_value_conversion_is_used_using_EFProperty() { - base.Where_bool_gets_converted_to_equality_when_value_conversion_is_used_using_EFProperty(); + await base.Where_bool_gets_converted_to_equality_when_value_conversion_is_used_using_EFProperty(); AssertSql( """ @@ -616,9 +618,9 @@ public override void Where_bool_gets_converted_to_equality_when_value_conversion """); } - public override void Where_bool_gets_converted_to_equality_when_value_conversion_is_used_using_indexer() + public override async Task Where_bool_gets_converted_to_equality_when_value_conversion_is_used_using_indexer() { - base.Where_bool_gets_converted_to_equality_when_value_conversion_is_used_using_indexer(); + await base.Where_bool_gets_converted_to_equality_when_value_conversion_is_used_using_indexer(); AssertSql( """ @@ -628,14 +630,13 @@ public override void Where_bool_gets_converted_to_equality_when_value_conversion """); } - public override void Object_to_string_conversion() - { + public override Task Object_to_string_conversion() // Return values are not string - } + => Task.CompletedTask; - public override void Id_object_as_entity_key() + public override async Task Id_object_as_entity_key() { - base.Id_object_as_entity_key(); + await base.Id_object_as_entity_key(); AssertSql( """ diff --git a/test/EFCore.Jet.FunctionalTests/DataAnnotationJetTest.cs b/test/EFCore.Jet.FunctionalTests/DataAnnotationJetTest.cs index 35e34f37..47180796 100644 --- a/test/EFCore.Jet.FunctionalTests/DataAnnotationJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/DataAnnotationJetTest.cs @@ -14,6 +14,9 @@ using Xunit; using Xunit.Abstractions; using System.ComponentModel.DataAnnotations; +using System.Threading.Tasks; + +#nullable disable // ReSharper disable InconsistentNaming namespace EntityFrameworkCore.Jet.FunctionalTests @@ -148,9 +151,9 @@ public override IModel DatabaseGeneratedOption_Identity_does_not_throw_on_nonint return modelBuilder; } - public override void ConcurrencyCheckAttribute_throws_if_value_in_database_changed() + public override async Task ConcurrencyCheckAttribute_throws_if_value_in_database_changed() { - base.ConcurrencyCheckAttribute_throws_if_value_in_database_changed(); + await base.ConcurrencyCheckAttribute_throws_if_value_in_database_changed(); AssertSql( $@"SELECT TOP 1 `s`.`Unique_No`, `s`.`MaxLengthProperty`, `s`.`Name`, `s`.`RowVersion`, `s`.`AdditionalDetails_Name`, `s`.`AdditionalDetails_Value`, `s`.`Details_Name`, `s`.`Details_Value` @@ -180,9 +183,9 @@ public override void ConcurrencyCheckAttribute_throws_if_value_in_database_chang SELECT @@ROWCOUNT;"); } - public override void DatabaseGeneratedAttribute_autogenerates_values_when_set_to_identity() + public override async Task DatabaseGeneratedAttribute_autogenerates_values_when_set_to_identity() { - base.DatabaseGeneratedAttribute_autogenerates_values_when_set_to_identity(); + await base.DatabaseGeneratedAttribute_autogenerates_values_when_set_to_identity(); AssertSql( $@"@p0=NULL (Size = 10) @@ -200,9 +203,9 @@ public override void DatabaseGeneratedAttribute_autogenerates_values_when_set_to WHERE @@ROWCOUNT = 1 AND `Unique_No` = @@identity;"); } - public override void MaxLengthAttribute_throws_while_inserting_value_longer_than_max_length() + public override async Task MaxLengthAttribute_throws_while_inserting_value_longer_than_max_length() { - base.MaxLengthAttribute_throws_while_inserting_value_longer_than_max_length(); + await base.MaxLengthAttribute_throws_while_inserting_value_longer_than_max_length(); AssertSql( $@"{AssertSqlHelper.Declaration("@p0='Short' (Size = 10)")} @@ -234,9 +237,9 @@ public override void MaxLengthAttribute_throws_while_inserting_value_longer_than WHERE @@ROWCOUNT = 1 AND `Unique_No` = @@identity;"); } - public override void RequiredAttribute_for_navigation_throws_while_inserting_null_value() + public override async Task RequiredAttribute_for_navigation_throws_while_inserting_null_value() { - base.RequiredAttribute_for_navigation_throws_while_inserting_null_value(); + await base.RequiredAttribute_for_navigation_throws_while_inserting_null_value(); AssertSql( $@"@p0=NULL (DbType = Int32) @@ -258,9 +261,9 @@ public override void RequiredAttribute_for_navigation_throws_while_inserting_nul WHERE @@ROWCOUNT = 1 AND `Id` = @@identity;"); } - public override void RequiredAttribute_for_property_throws_while_inserting_null_value() + public override async Task RequiredAttribute_for_property_throws_while_inserting_null_value() { - base.RequiredAttribute_for_property_throws_while_inserting_null_value(); + await base.RequiredAttribute_for_property_throws_while_inserting_null_value(); AssertSql( $@"@p0=NULL (Size = 10) @@ -292,9 +295,9 @@ public override void RequiredAttribute_for_property_throws_while_inserting_null_ WHERE @@ROWCOUNT = 1 AND `Unique_No` = @@identity;"); } - public override void StringLengthAttribute_throws_while_inserting_value_longer_than_max_length() + public override async Task StringLengthAttribute_throws_while_inserting_value_longer_than_max_length() { - base.StringLengthAttribute_throws_while_inserting_value_longer_than_max_length(); + await base.StringLengthAttribute_throws_while_inserting_value_longer_than_max_length(); AssertSql( $@"{AssertSqlHelper.Declaration("@p0='ValidString' (Size = 16)")} @@ -314,9 +317,9 @@ public override void StringLengthAttribute_throws_while_inserting_value_longer_t WHERE @@ROWCOUNT = 1 AND `Id` = @@identity;"); } - public override void TimestampAttribute_throws_if_value_in_database_changed() + public override async Task TimestampAttribute_throws_if_value_in_database_changed() { - base.TimestampAttribute_throws_if_value_in_database_changed(); + await base.TimestampAttribute_throws_if_value_in_database_changed(); // Not validating SQL because not significantly different from other tests and // row version value is not stable. diff --git a/test/EFCore.Jet.FunctionalTests/DbContextPoolingTest.cs b/test/EFCore.Jet.FunctionalTests/DbContextPoolingTest.cs index a5dac66c..79044663 100644 --- a/test/EFCore.Jet.FunctionalTests/DbContextPoolingTest.cs +++ b/test/EFCore.Jet.FunctionalTests/DbContextPoolingTest.cs @@ -29,8 +29,10 @@ // ReSharper disable ClassNeverInstantiated.Local // ReSharper disable VirtualMemberCallInConstructor namespace EntityFrameworkCore.Jet.FunctionalTests; - -public class DbContextPoolingTest : IClassFixture> +#nullable disable +#pragma warning disable CS9113 // Parameter is unread. +public class DbContextPoolingTest(NorthwindQueryJetFixture fixture, ITestOutputHelper testOutputHelper) : IClassFixture> +#pragma warning restore CS9113 // Parameter is unread. { private static DbContextOptionsBuilder ConfigureOptions(DbContextOptionsBuilder optionsBuilder) where TContext : DbContext @@ -2189,10 +2191,5 @@ private async Task Dispose(IDisposable disposable, bool async) } } - private readonly ITestOutputHelper _testOutputHelper; - - public DbContextPoolingTest(NorthwindQueryJetFixture fixture, ITestOutputHelper testOutputHelper) - { - _testOutputHelper = testOutputHelper; - } + private readonly ITestOutputHelper _testOutputHelper = testOutputHelper; } diff --git a/test/EFCore.Jet.FunctionalTests/DefaultValuesTest.cs b/test/EFCore.Jet.FunctionalTests/DefaultValuesTest.cs index d50d3f02..d5d846e3 100644 --- a/test/EFCore.Jet.FunctionalTests/DefaultValuesTest.cs +++ b/test/EFCore.Jet.FunctionalTests/DefaultValuesTest.cs @@ -3,15 +3,16 @@ using System; using EntityFrameworkCore.Jet.Data; using System.Linq; +using System.Threading.Tasks; using EntityFrameworkCore.Jet.FunctionalTests.TestUtilities; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.TestUtilities; using Microsoft.Extensions.DependencyInjection; using Xunit; - +#nullable disable namespace EntityFrameworkCore.Jet.FunctionalTests { - public class DefaultValuesTest : IDisposable + public class DefaultValuesTest : IAsyncLifetime { private readonly IServiceProvider _serviceProvider = new ServiceCollection() .AddEntityFrameworkJet() @@ -47,24 +48,15 @@ public void Can_use_SQL_Server_default_values() } } - private class ChipsContext : DbContext + private class ChipsContext(IServiceProvider serviceProvider, string databaseName) : DbContext { - private readonly IServiceProvider _serviceProvider; - private readonly string _databaseName; - - public ChipsContext(IServiceProvider serviceProvider, string databaseName) - { - _serviceProvider = serviceProvider; - _databaseName = databaseName; - } - public DbSet Chips { get; set; } public DbSet Chippers { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => optionsBuilder - .UseJet(JetTestStore.CreateConnectionString(_databaseName), TestEnvironment.DataAccessProviderFactory, b => b.ApplyConfiguration()) - .UseInternalServiceProvider(_serviceProvider); + .UseJet(JetTestStore.CreateConnectionString(databaseName), TestEnvironment.DataAccessProviderFactory, b => b.ApplyConfiguration()) + .UseInternalServiceProvider(serviceProvider); protected override void OnModelCreating(ModelBuilder modelBuilder) => modelBuilder.Entity( @@ -95,13 +87,15 @@ private class Chipper public string Id { get; set; } } - public DefaultValuesTest() - { - TestStore = JetTestStore.CreateInitialized("DefaultValuesTest"); - } + protected JetTestStore TestStore { get; private set; } - protected JetTestStore TestStore { get; } + public async Task InitializeAsync() + => TestStore = await JetTestStore.CreateInitializedAsync("DefaultValuesTest"); - public virtual void Dispose() => TestStore.Dispose(); + public Task DisposeAsync() + { + TestStore.Dispose(); + return Task.CompletedTask; + } } } diff --git a/test/EFCore.Jet.FunctionalTests/EFCore.Jet.FunctionalTests.csproj b/test/EFCore.Jet.FunctionalTests/EFCore.Jet.FunctionalTests.csproj index fe332d0b..a5bf5e16 100644 --- a/test/EFCore.Jet.FunctionalTests/EFCore.Jet.FunctionalTests.csproj +++ b/test/EFCore.Jet.FunctionalTests/EFCore.Jet.FunctionalTests.csproj @@ -5,6 +5,7 @@ EntityFrameworkCore.Jet.FunctionalTests EntityFrameworkCore.Jet.FunctionalTests AnyCPU;x86;x64 + true @@ -30,7 +31,6 @@ - @@ -44,9 +44,6 @@ $(LocalEFCoreRepository)\artifacts\bin\EFCore.Relational.Specification.Tests\Debug\$(EfCoreTestTargetFramework)\Microsoft.EntityFrameworkCore.Analyzers.dll - - $(LocalEFCoreRepository)\artifacts\bin\EFCore.Design.Tests\Debug\$(EfCoreTestTargetFramework)\Microsoft.EntityFrameworkCore.Design.dll - $(LocalEFCoreRepository)\artifacts\bin\EFCore.Relational.Specification.Tests\Debug\$(EfCoreTestTargetFramework)\Microsoft.EntityFrameworkCore.Proxies.dll @@ -75,7 +72,6 @@ - @@ -108,7 +104,6 @@ - diff --git a/test/EFCore.Jet.FunctionalTests/EverythingIsBytesJetTest.cs b/test/EFCore.Jet.FunctionalTests/EverythingIsBytesJetTest.cs index 005b0991..1686e242 100644 --- a/test/EFCore.Jet.FunctionalTests/EverythingIsBytesJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/EverythingIsBytesJetTest.cs @@ -11,17 +11,14 @@ using Microsoft.Extensions.DependencyInjection; using Xunit; using System.Linq; - +using System.Threading.Tasks; +#nullable disable // ReSharper disable InconsistentNaming namespace EntityFrameworkCore.Jet.FunctionalTests { - public class EverythingIsBytesJetTest : BuiltInDataTypesTestBase + public class EverythingIsBytesJetTest(EverythingIsBytesJetTest.EverythingIsBytesJetFixture fixture) + : BuiltInDataTypesTestBase(fixture) { - public EverythingIsBytesJetTest(EverythingIsBytesJetFixture fixture) - : base(fixture) - { - } - [ConditionalFact] public virtual void Columns_have_expected_data_types() { @@ -179,30 +176,25 @@ public virtual void Columns_have_expected_data_types() Assert.Equal(expected, actual, ignoreLineEndingDifferences: true); } - public override void Can_read_back_mapped_enum_from_collection_first_or_default() - { + public override Task Can_read_back_mapped_enum_from_collection_first_or_default() // The query needs to generate TOP(1) - } + => Task.CompletedTask; - public override void Can_read_back_bool_mapped_as_int_through_navigation() - { + public override Task Can_read_back_bool_mapped_as_int_through_navigation() // Column is mapped as int rather than byte[] - } + => Task.CompletedTask; - public override void Object_to_string_conversion() - { + public override Task Object_to_string_conversion() // Return values are string which byte[] cannot read - } + => Task.CompletedTask; - public override void Can_compare_enum_to_constant() - { + public override Task Can_compare_enum_to_constant() // Column is mapped as int rather than byte[] - } + => Task.CompletedTask; - public override void Can_compare_enum_to_parameter() - { + public override Task Can_compare_enum_to_parameter() // Column is mapped as int rather than byte[] - } + => Task.CompletedTask; public class EverythingIsBytesJetFixture : BuiltInDataTypesFixtureBase { diff --git a/test/EFCore.Jet.FunctionalTests/EverythingIsStringsJetTest.cs b/test/EFCore.Jet.FunctionalTests/EverythingIsStringsJetTest.cs index 24ce27a6..8b406998 100644 --- a/test/EFCore.Jet.FunctionalTests/EverythingIsStringsJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/EverythingIsStringsJetTest.cs @@ -11,8 +11,10 @@ using Microsoft.Extensions.DependencyInjection; using Xunit; using System.Linq; +using System.Threading.Tasks; // ReSharper disable InconsistentNaming +#nullable disable namespace EntityFrameworkCore.Jet.FunctionalTests { public class EverythingIsStringsJetTest : BuiltInDataTypesTestBase< @@ -184,15 +186,21 @@ public virtual void Columns_have_expected_data_types() Assert.Equal(expected, actual, ignoreLineEndingDifferences: true); } - public override void Can_read_back_mapped_enum_from_collection_first_or_default() - { - // The query needs to generate TOP 1 - } + public override Task Can_read_back_mapped_enum_from_collection_first_or_default() + // The query needs to generate TOP(1) + => Task.CompletedTask; - public override void Can_read_back_bool_mapped_as_int_through_navigation() - { + public override Task Can_read_back_bool_mapped_as_int_through_navigation() // Column is mapped as int rather than string - } + => Task.CompletedTask; + + public override Task Can_compare_enum_to_constant() + // Column is mapped as int rather than string + => Task.CompletedTask; + + public override Task Can_compare_enum_to_parameter() + // Column is mapped as int rather than string + => Task.CompletedTask; public class EverythingIsStringsJetFixture : BuiltInDataTypesFixtureBase { diff --git a/test/EFCore.Jet.FunctionalTests/ExecutionStrategyTest.cs b/test/EFCore.Jet.FunctionalTests/ExecutionStrategyTest.cs index 32ac049c..06afee98 100644 --- a/test/EFCore.Jet.FunctionalTests/ExecutionStrategyTest.cs +++ b/test/EFCore.Jet.FunctionalTests/ExecutionStrategyTest.cs @@ -25,6 +25,7 @@ // ReSharper disable MethodSupportsCancellation // ReSharper disable AccessToDisposedClosure // ReSharper disable InconsistentNaming +#nullable disable namespace EntityFrameworkCore.Jet.FunctionalTests { public class ExecutionStrategyTest : IClassFixture @@ -109,7 +110,7 @@ private void Test_commit_failure(bool realFailure, Action - { - switch (a.CurrentState) - { - case ConnectionState.Open: - openCount++; - break; - case ConnectionState.Closed: - closeCount++; - break; - } - }; - connection.Disposed += (_, __) => disposeCount++; - - using (var context = new NorthwindContext(serviceProvider, connection)) - { - Assert.Equal(91, await context.Customers.CountAsync()); - } - - if (openConnection) - { - Assert.Equal(ConnectionState.Open, connection.State); - Assert.Equal(0, openCount); - Assert.Equal(0, closeCount); - } - else - { - Assert.Equal(ConnectionState.Closed, connection.State); - Assert.Equal(1, openCount); - Assert.Equal(1, closeCount); - } - - Assert.Equal(0, disposeCount); - } - } - } - - private class NorthwindContext : DbContext - { - private readonly IServiceProvider _serviceProvider; - private readonly JetConnection _connection; - - public NorthwindContext(IServiceProvider serviceProvider, JetConnection connection) - { - _serviceProvider = serviceProvider; - _connection = connection; - } - - // ReSharper disable once UnusedAutoPropertyAccessor.Local - public DbSet Customers { get; set; } - - protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) - => optionsBuilder - .UseJet(_connection, b => b.ApplyConfiguration()) - .UseInternalServiceProvider(_serviceProvider); - - protected override void OnModelCreating(ModelBuilder modelBuilder) - => modelBuilder.Entity( - b => - { - b.HasKey(c => c.CustomerID); - b.ToTable("Customers"); - }); - } - - // ReSharper disable once ClassNeverInstantiated.Local - private class Customer - { - // ReSharper disable once UnusedAutoPropertyAccessor.Local - public string CustomerID { get; set; } - - // ReSharper disable UnusedMember.Local - public string CompanyName { get; set; } - - public string Fax { get; set; } - } - } -} diff --git a/test/EFCore.Jet.FunctionalTests/FindJetTest.cs b/test/EFCore.Jet.FunctionalTests/FindJetTest.cs index e158cc94..4fb46996 100644 --- a/test/EFCore.Jet.FunctionalTests/FindJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/FindJetTest.cs @@ -58,11 +58,23 @@ public override void Find_int_key_from_store() base.Find_int_key_from_store(); AssertSql( - $@"{AssertSqlHelper.Declaration("@__p_0='77'")} - -SELECT TOP 1 `i`.`Id`, `i`.`Foo` -FROM `IntKey` AS `i` -WHERE `i`.`Id` = {AssertSqlHelper.Parameter("@__p_0")}"); + $""" +@__p_0='77' + +SELECT `i3`.`Id`, `i3`.`Foo`, `s`.`IntKeyId`, `s`.`Id`, `s`.`Prop`, `s`.`NestedOwned_Prop`, `s`.`Owned1IntKeyId`, `s`.`Owned1Id`, `s`.`Id0`, `s`.`Prop0`, `i3`.`OwnedReference_Prop`, `i3`.`OwnedReference_NestedOwned_Prop`, `i2`.`Owned1IntKeyId`, `i2`.`Id`, `i2`.`Prop` +FROM (( + SELECT TOP 1 `i`.`Id`, `i`.`Foo`, `i`.`OwnedReference_Prop`, `i`.`OwnedReference_NestedOwned_Prop` + FROM `IntKey` AS `i` + WHERE `i`.`Id` = {AssertSqlHelper.Parameter("@__p_0")} +) AS `i3` +LEFT JOIN ( + SELECT `i0`.`IntKeyId`, `i0`.`Id`, `i0`.`Prop`, `i0`.`NestedOwned_Prop`, `i1`.`Owned1IntKeyId`, `i1`.`Owned1Id`, `i1`.`Id` AS `Id0`, `i1`.`Prop` AS `Prop0` + FROM `IntKey_OwnedCollection` AS `i0` + LEFT JOIN `IntKey_OwnedCollection_NestedOwnedCollection` AS `i1` ON `i0`.`IntKeyId` = `i1`.`Owned1IntKeyId` AND `i0`.`Id` = `i1`.`Owned1Id` +) AS `s` ON `i3`.`Id` = `s`.`IntKeyId`) +LEFT JOIN `IntKey_NestedOwnedCollection` AS `i2` ON IIF(`i3`.`OwnedReference_Prop` IS NOT NULL, `i3`.`Id`, NULL) = `i2`.`Owned1IntKeyId` +ORDER BY `i3`.`Id`, `s`.`IntKeyId`, `s`.`Id`, `s`.`Owned1IntKeyId`, `s`.`Owned1Id`, `s`.`Id0`, `i2`.`Owned1IntKeyId` +"""); } public override void Returns_null_for_int_key_not_in_store() @@ -70,11 +82,23 @@ public override void Returns_null_for_int_key_not_in_store() base.Returns_null_for_int_key_not_in_store(); AssertSql( - $@"{AssertSqlHelper.Declaration("@__p_0='99'")} - -SELECT TOP 1 `i`.`Id`, `i`.`Foo` -FROM `IntKey` AS `i` -WHERE `i`.`Id` = {AssertSqlHelper.Parameter("@__p_0")}"); + $""" +@__p_0='99' + +SELECT `i3`.`Id`, `i3`.`Foo`, `s`.`IntKeyId`, `s`.`Id`, `s`.`Prop`, `s`.`NestedOwned_Prop`, `s`.`Owned1IntKeyId`, `s`.`Owned1Id`, `s`.`Id0`, `s`.`Prop0`, `i3`.`OwnedReference_Prop`, `i3`.`OwnedReference_NestedOwned_Prop`, `i2`.`Owned1IntKeyId`, `i2`.`Id`, `i2`.`Prop` +FROM (( + SELECT TOP 1 `i`.`Id`, `i`.`Foo`, `i`.`OwnedReference_Prop`, `i`.`OwnedReference_NestedOwned_Prop` + FROM `IntKey` AS `i` + WHERE `i`.`Id` = {AssertSqlHelper.Parameter("@__p_0")} +) AS `i3` +LEFT JOIN ( + SELECT `i0`.`IntKeyId`, `i0`.`Id`, `i0`.`Prop`, `i0`.`NestedOwned_Prop`, `i1`.`Owned1IntKeyId`, `i1`.`Owned1Id`, `i1`.`Id` AS `Id0`, `i1`.`Prop` AS `Prop0` + FROM `IntKey_OwnedCollection` AS `i0` + LEFT JOIN `IntKey_OwnedCollection_NestedOwnedCollection` AS `i1` ON `i0`.`IntKeyId` = `i1`.`Owned1IntKeyId` AND `i0`.`Id` = `i1`.`Owned1Id` +) AS `s` ON `i3`.`Id` = `s`.`IntKeyId`) +LEFT JOIN `IntKey_NestedOwnedCollection` AS `i2` ON IIF(`i3`.`OwnedReference_Prop` IS NOT NULL, `i3`.`Id`, NULL) = `i2`.`Owned1IntKeyId` +ORDER BY `i3`.`Id`, `s`.`IntKeyId`, `s`.`Id`, `s`.`Owned1IntKeyId`, `s`.`Owned1Id`, `s`.`Id0`, `i2`.`Owned1IntKeyId` +"""); } public override void Find_nullable_int_key_tracked() @@ -89,11 +113,23 @@ public override void Find_nullable_int_key_from_store() base.Find_int_key_from_store(); AssertSql( - $@"{AssertSqlHelper.Declaration("@__p_0='77'")} - -SELECT TOP 1 `i`.`Id`, `i`.`Foo` -FROM `IntKey` AS `i` -WHERE `i`.`Id` = {AssertSqlHelper.Parameter("@__p_0")}"); + $""" +@__p_0='77' + +SELECT `i3`.`Id`, `i3`.`Foo`, `s`.`IntKeyId`, `s`.`Id`, `s`.`Prop`, `s`.`NestedOwned_Prop`, `s`.`Owned1IntKeyId`, `s`.`Owned1Id`, `s`.`Id0`, `s`.`Prop0`, `i3`.`OwnedReference_Prop`, `i3`.`OwnedReference_NestedOwned_Prop`, `i2`.`Owned1IntKeyId`, `i2`.`Id`, `i2`.`Prop` +FROM (( + SELECT TOP 1 `i`.`Id`, `i`.`Foo`, `i`.`OwnedReference_Prop`, `i`.`OwnedReference_NestedOwned_Prop` + FROM `IntKey` AS `i` + WHERE `i`.`Id` = {AssertSqlHelper.Parameter("@__p_0")} +) AS `i3` +LEFT JOIN ( + SELECT `i0`.`IntKeyId`, `i0`.`Id`, `i0`.`Prop`, `i0`.`NestedOwned_Prop`, `i1`.`Owned1IntKeyId`, `i1`.`Owned1Id`, `i1`.`Id` AS `Id0`, `i1`.`Prop` AS `Prop0` + FROM `IntKey_OwnedCollection` AS `i0` + LEFT JOIN `IntKey_OwnedCollection_NestedOwnedCollection` AS `i1` ON `i0`.`IntKeyId` = `i1`.`Owned1IntKeyId` AND `i0`.`Id` = `i1`.`Owned1Id` +) AS `s` ON `i3`.`Id` = `s`.`IntKeyId`) +LEFT JOIN `IntKey_NestedOwnedCollection` AS `i2` ON IIF(`i3`.`OwnedReference_Prop` IS NOT NULL, `i3`.`Id`, NULL) = `i2`.`Owned1IntKeyId` +ORDER BY `i3`.`Id`, `s`.`IntKeyId`, `s`.`Id`, `s`.`Owned1IntKeyId`, `s`.`Owned1Id`, `s`.`Id0`, `i2`.`Owned1IntKeyId` +"""); } public override void Returns_null_for_nullable_int_key_not_in_store() @@ -101,11 +137,23 @@ public override void Returns_null_for_nullable_int_key_not_in_store() base.Returns_null_for_int_key_not_in_store(); AssertSql( - $@"{AssertSqlHelper.Declaration("@__p_0='99'")} - -SELECT TOP 1 `i`.`Id`, `i`.`Foo` -FROM `IntKey` AS `i` -WHERE `i`.`Id` = {AssertSqlHelper.Parameter("@__p_0")}"); + $""" +@__p_0='99' + +SELECT `i3`.`Id`, `i3`.`Foo`, `s`.`IntKeyId`, `s`.`Id`, `s`.`Prop`, `s`.`NestedOwned_Prop`, `s`.`Owned1IntKeyId`, `s`.`Owned1Id`, `s`.`Id0`, `s`.`Prop0`, `i3`.`OwnedReference_Prop`, `i3`.`OwnedReference_NestedOwned_Prop`, `i2`.`Owned1IntKeyId`, `i2`.`Id`, `i2`.`Prop` +FROM (( + SELECT TOP 1 `i`.`Id`, `i`.`Foo`, `i`.`OwnedReference_Prop`, `i`.`OwnedReference_NestedOwned_Prop` + FROM `IntKey` AS `i` + WHERE `i`.`Id` = {AssertSqlHelper.Parameter("@__p_0")} +) AS `i3` +LEFT JOIN ( + SELECT `i0`.`IntKeyId`, `i0`.`Id`, `i0`.`Prop`, `i0`.`NestedOwned_Prop`, `i1`.`Owned1IntKeyId`, `i1`.`Owned1Id`, `i1`.`Id` AS `Id0`, `i1`.`Prop` AS `Prop0` + FROM `IntKey_OwnedCollection` AS `i0` + LEFT JOIN `IntKey_OwnedCollection_NestedOwnedCollection` AS `i1` ON `i0`.`IntKeyId` = `i1`.`Owned1IntKeyId` AND `i0`.`Id` = `i1`.`Owned1Id` +) AS `s` ON `i3`.`Id` = `s`.`IntKeyId`) +LEFT JOIN `IntKey_NestedOwnedCollection` AS `i2` ON IIF(`i3`.`OwnedReference_Prop` IS NOT NULL, `i3`.`Id`, NULL) = `i2`.`Owned1IntKeyId` +ORDER BY `i3`.`Id`, `s`.`IntKeyId`, `s`.`Id`, `s`.`Owned1IntKeyId`, `s`.`Owned1Id`, `s`.`Id0`, `i2`.`Owned1IntKeyId` +"""); } public override void Find_string_key_tracked() 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 4103cfc3..2a907815 100644 --- a/test/EFCore.Jet.FunctionalTests/GreenTests/ace_2010_odbc_x86.txt +++ b/test/EFCore.Jet.FunctionalTests/GreenTests/ace_2010_odbc_x86.txt @@ -1,3 +1,4 @@ +EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Deadlock_on_inserts_and_deletes_with_dependents_is_handled_correctly EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Inserts_and_updates_are_batched_correctly EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Inserts_are_batched_correctly(clientPk: True, clientFk: False, clientOrder: False) EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Inserts_are_batched_correctly(clientPk: True, clientFk: False, clientOrder: True) @@ -67,10 +68,18 @@ EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Optional_datetim EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Sql_translation_uses_type_mapper_when_constant EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Sql_translation_uses_type_mapper_when_parameter EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.ComplexTypeBulkUpdatesJetTest.Check_all_tests_overridden -EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.ComplexTypeBulkUpdatesJetTest.Delete_complex_type_throws(async: False) -EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.ComplexTypeBulkUpdatesJetTest.Delete_complex_type_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.ComplexTypeBulkUpdatesJetTest.Delete_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.ComplexTypeBulkUpdatesJetTest.Delete_complex_type(async: True) EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.ComplexTypeBulkUpdatesJetTest.Delete_entity_type_with_complex_type(async: False) EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.ComplexTypeBulkUpdatesJetTest.Delete_entity_type_with_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.ComplexTypeBulkUpdatesJetTest.Update_collection_inside_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.ComplexTypeBulkUpdatesJetTest.Update_collection_inside_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.ComplexTypeBulkUpdatesJetTest.Update_complex_type_to_another_database_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.ComplexTypeBulkUpdatesJetTest.Update_complex_type_to_another_database_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.ComplexTypeBulkUpdatesJetTest.Update_complex_type_to_inline_with_lambda(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.ComplexTypeBulkUpdatesJetTest.Update_complex_type_to_inline_with_lambda(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.ComplexTypeBulkUpdatesJetTest.Update_complex_type_to_inline_without_lambda(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.ComplexTypeBulkUpdatesJetTest.Update_complex_type_to_inline_without_lambda(async: True) EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.ComplexTypeBulkUpdatesJetTest.Update_multiple_projected_complex_types_via_anonymous_type(async: False) EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.ComplexTypeBulkUpdatesJetTest.Update_multiple_projected_complex_types_via_anonymous_type(async: True) EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.ComplexTypeBulkUpdatesJetTest.Update_multiple_properties_inside_multiple_complex_types_and_on_entity_type(async: False) @@ -92,10 +101,14 @@ EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJet EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Delete_entity_with_auto_include(async: True) EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Delete_predicate_based_on_optional_navigation(async: False) EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Delete_predicate_based_on_optional_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Replace_ColumnExpression_in_column_setter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Replace_ColumnExpression_in_column_setter(async: True) EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Update_main_table_in_entity_with_entity_splitting(async: False) EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Update_main_table_in_entity_with_entity_splitting(async: True) EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Update_non_main_table_in_entity_with_entity_splitting(async: False) EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Update_non_main_table_in_entity_with_entity_splitting(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Update_non_owned_property_on_entity_with_owned_in_join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Update_non_owned_property_on_entity_with_owned_in_join(async: True) EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Update_non_owned_property_on_entity_with_owned(async: False) EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Update_non_owned_property_on_entity_with_owned(async: True) EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Update_non_owned_property_on_entity_with_owned2(async: False) @@ -105,8 +118,6 @@ EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJet EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Check_all_tests_overridden EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Concat(async: False) EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Concat(async: True) -EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_FromSql_converted_to_subquery(async: False) -EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_FromSql_converted_to_subquery(async: True) EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_non_entity_projection_2(async: False) EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_non_entity_projection_2(async: True) EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_non_entity_projection_3(async: False) @@ -808,6 +819,7 @@ EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+Connec EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionWithDiagnosticsJetTest.Intercept_connection_to_suppress_dispose(async: True) EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionWithDiagnosticsJetTest.Intercept_connection_with_multiple_interceptors(async: False) EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionWithDiagnosticsJetTest.Intercept_connection_with_multiple_interceptors(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_change_connection_when_open_and_not_owned EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_depend_on_DbContextOptions EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_depend_on_DbContextOptions_with_default_service_provider EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_depend_on_non_generic_options_when_only_one_context @@ -816,9 +828,22 @@ EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_specify_ EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_specify_connection_in_OnConfiguring_with_default_service_provider EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_specify_connection_string_in_OnConfiguring EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_specify_connection_string_in_OnConfiguring_with_default_service_provider +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_specify_no_connection_in_OnConfiguring_with_default_service_provider(contextOwnsConnection: False) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_specify_no_connection_in_OnConfiguring_with_default_service_provider(contextOwnsConnection: True) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_specify_no_connection_in_OnConfiguring(contextOwnsConnection: False) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_specify_no_connection_in_OnConfiguring(contextOwnsConnection: True) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_specify_no_connection_string_in_OnConfiguring +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_specify_no_connection_string_in_OnConfiguring_with_default_service_provider +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_specify_owned_connection_in_OnConfiguring +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_specify_owned_connection_in_OnConfiguring_with_default_service_provider +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_specify_then_change_connection EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_use_AddDbContext_and_get_connection_string_from_config(key: "ConnectionStrings:DefaultConnection", connectionString: " NamE = ConnectionStrings:DefaultConnection ") EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_use_AddDbContext_and_get_connection_string_from_config(key: "ConnectionStrings:DefaultConnection", connectionString: "name=ConnectionStrings:DefaultConnection") EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_use_AddDbContext_and_get_connection_string_from_config(key: "MyConnectionString", connectionString: "name=MyConnectionString") +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_use_an_existing_closed_connection_test(openConnection: False) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_use_an_existing_closed_connection_test(openConnection: True) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Cannot_change_connection_when_open_and_owned +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Throws_if_context_used_with_no_connection_or_connection_string EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Throws_if_no_config_without_UseJet EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Throws_if_no_connection_found_in_config_without_UseJet EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Can_compare_enum_to_constant @@ -935,6 +960,7 @@ EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.ForeignKeyAttribut EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.ForeignKeyAttribute_throws_if_applied_on_two_relationships_targetting_the_same_property EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Inverse_and_self_ref_ForeignKey EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.InverseProperty_with_case_sensitive_clr_property +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.InverseProperty_with_potentially_ambigous_derived_types EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.InversePropertyAttribute_from_ignored_base_can_be_ignored_to_remove_ambiguity EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.InversePropertyAttribute_from_ignored_base_causes_ambiguity EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.InversePropertyAttribute_is_noop_in_unambiguous_models @@ -1290,8 +1316,6 @@ EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Can_read_back EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Columns_have_expected_data_types EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Object_to_string_conversion EntityFrameworkCore.Jet.FunctionalTests.EverythingIsStringsJetTest.Optional_datetime_reading_null_from_database -EntityFrameworkCore.Jet.FunctionalTests.ExistingConnectionTest.Can_use_an_existing_closed_connection -EntityFrameworkCore.Jet.FunctionalTests.ExistingConnectionTest.Can_use_an_existing_open_connection EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Can_define_a_backing_field_for_a_navigation_and_query_and_update_it EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Field_mapping_with_conversion_does_not_throw EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_collection_auto_props(tracking: False) @@ -2583,6 +2607,7 @@ EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Throws_for_wr EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Throws_for_wrong_number_of_values_for_composite_key_async(cancellationType: 0) EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Throws_for_wrong_number_of_values_for_composite_key_async(cancellationType: 1) EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Throws_for_wrong_number_of_values_for_composite_key_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.JetComplianceTest.All_query_test_fixtures_must_implement_ITestSqlLoggerFactory EntityFrameworkCore.Jet.FunctionalTests.JetConfigPatternsTest+ConstructorArgsToBuilder.Can_pass_context_options_to_constructor_and_use_in_builder EntityFrameworkCore.Jet.FunctionalTests.JetConfigPatternsTest+ConstructorArgsToOnConfiguring.Can_pass_connection_string_to_constructor_and_use_in_OnConfiguring EntityFrameworkCore.Jet.FunctionalTests.JetConfigPatternsTest+ExplicitServicesAndConfig.Can_query_with_explicit_services_and_explicit_config @@ -2646,8 +2671,14 @@ EntityFrameworkCore.Jet.FunctionalTests.JetDatabaseCreatorHasTablesTest.Returns_ EntityFrameworkCore.Jet.FunctionalTests.JetDatabaseCreatorHasTablesTest.Returns_true_when_database_exists_and_has_any_tables(async: True, ambientTransaction: False) EntityFrameworkCore.Jet.FunctionalTests.JetDatabaseCreatorHasTablesTest.Throws_when_database_does_not_exist(async: False) EntityFrameworkCore.Jet.FunctionalTests.JetDatabaseCreatorHasTablesTest.Throws_when_database_does_not_exist(async: True) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_add_and_remove_entities_with_keys_of_different_type +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_add_table_splitting_dependent_after_principal EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_enumerate_entity_set +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 0, courseCount: 0) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_non_owner_principal_for_owned +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_TPT_dependents_with_identity EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_remove_multiple_byte_array_as_key +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_replace_identifying_FK_entity_with_many_to_many EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_round_trip_changes_with_changed_only_notification_entities EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_round_trip_changes_with_full_notification_entities EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_round_trip_changes_with_snapshot_change_tracking @@ -2656,6 +2687,7 @@ EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_run_linq_query_on_en EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_save_changes EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_save_changes_in_tracked_entities EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_use_string_enum_or_byte_array_as_key +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Throws_when_adding_table_splitting_dependent_without_principal EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Tracking_entities_asynchronously_returns_tracked_entities_back EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.AddCheckConstraint_generates_exec_when_idempotent EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.AddColumnOperation_datetime_with_defaultValue_sql @@ -2731,6 +2763,9 @@ EntityFrameworkCore.Jet.FunctionalTests.JetServiceCollectionExtensionsTest.Calli EntityFrameworkCore.Jet.FunctionalTests.JetServiceCollectionExtensionsTest.Repeated_calls_to_add_do_not_modify_collection EntityFrameworkCore.Jet.FunctionalTests.JetServiceCollectionExtensionsTest.Required_services_are_registered_with_expected_lifetimes EntityFrameworkCore.Jet.FunctionalTests.JetValueGenerationScenariosTest.Insert_explicit_value_throws_when_readonly_before_save +EntityFrameworkCore.Jet.FunctionalTests.JetValueGenerationScenariosTest.Insert_int_enum_to_Identity_column +EntityFrameworkCore.Jet.FunctionalTests.JetValueGenerationScenariosTest.Insert_string_to_Identity_column_using_value_converter +EntityFrameworkCore.Jet.FunctionalTests.JetValueGenerationScenariosTest.Insert_uint_to_Identity_column_using_value_converter EntityFrameworkCore.Jet.FunctionalTests.JetValueGenerationScenariosTest.Insert_with_client_generated_GUID_key EntityFrameworkCore.Jet.FunctionalTests.JetValueGenerationScenariosTest.Insert_with_explicit_default_keys EntityFrameworkCore.Jet.FunctionalTests.JetValueGenerationScenariosTest.Insert_with_explicit_non_default_keys @@ -2740,6 +2775,15 @@ EntityFrameworkCore.Jet.FunctionalTests.JetValueGenerationScenariosTest.Insert_w EntityFrameworkCore.Jet.FunctionalTests.JetValueGenerationScenariosTest.Insert_with_non_key_default_value EntityFrameworkCore.Jet.FunctionalTests.JetValueGenerationScenariosTest.Insert_with_non_key_default_value_readonly EntityFrameworkCore.Jet.FunctionalTests.JetValueGenerationScenariosTest.Insert_with_ValueGeneratedOnAdd_GUID_nonkey_property_throws +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_array_of_array_of_array_of_int_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_array_of_list_of_array_of_IPAddress_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_array_of_list_of_array_of_string_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_array_of_list_of_binary_JSON_values(expected: "{\"Prop\":[[\"AAEC\",\"AQ==\",\"TQ==\"],[],[\"Tg=="···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_array_of_list_of_GUID_JSON_values(expected: "{\"Prop\":[[\"00000000-0000-0000-0000-000000000000"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_array_of_list_of_int_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_array_of_list_of_IPAddress_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_array_of_list_of_string_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_array_of_list_of_ulong_JSON_values EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_binary_as_collection EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_binary_JSON_values(value: "", json: "{\"Prop\":\"\"}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_binary_JSON_values(value: "0,0,0,1", json: "{\"Prop\":\"AAAAAQ==\"}") @@ -2758,7 +2802,7 @@ EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_char_JSO EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_char_JSON_values(value: "Z", json: "{\"Prop\":\"Z\"}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_char_JSON_values(value: 0xffff, json: "{\"Prop\":\"\\uFFFF\"}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_ASCII_string_JSON_values(storeType: null) -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_binary_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_binary_JSON_values(expected: "{\"Prop\":[\"AAAAAQ==\",\"/////w==\",\"\",\"AQIDBA"···) EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_binary_values_with_converter_as_JSON_string EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_bool_JSON_values EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_bool_values_with_converter_as_JSON_string @@ -2768,17 +2812,17 @@ EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collecti EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_char_values_with_converter_as_JSON_string EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_DateOnly_JSON_values EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_DateOnly_values_with_converter_as_JSON_string -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_DateTime_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_DateTime_JSON_values(expected: "{\"Prop\":[\"0001-01-01T00:00:00\",\"2023-05-29T10"···) EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_DateTime_values_with_converter_as_JSON_string -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_DateTimeOffset_JSON_values -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_decimal_JSON_values -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_decimal_with_precision_and_scale_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_DateTimeOffset_JSON_values(expected: "{\"Prop\":[\"0001-01-01T00:00:00+00:00\",\"2023-05"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_decimal_JSON_values(expected: "{\"Prop\":[-79228162514264337593543950335,0,792281"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_decimal_with_precision_and_scale_JSON_values(expected: "{\"Prop\":[-79228162514264337593543950335,0,792281"···) EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_double_JSON_values EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_double_values_with_converter_as_JSON_string EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_fixed_length_string_JSON_values(storeType: null) EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_float_JSON_values -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_Guid_converted_to_bytes_JSON_values -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_GUID_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_Guid_converted_to_bytes_JSON_values(expected: "{\"Prop\":[\"AAAAAAAAAAAAAAAAAAAAAA==\",\"LyREjD+O"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_GUID_JSON_values(expected: "{\"Prop\":[\"00000000-0000-0000-0000-000000000000\"···) EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_int_enum_JSON_values EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_int_enum_values_with_converter_as_JSON_string EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_int_JSON_values @@ -2787,7 +2831,7 @@ EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collecti EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_IP_address_JSON_values EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_long_enum_JSON_values EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_long_JSON_values -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_binary_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_binary_JSON_values(expected: "{\"Prop\":[\"AAAAAQ==\",null,\"/////w==\",\"\",\"A"···) EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_binary_values_with_converter_as_JSON_string EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_bool_JSON_values EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_bool_values_with_converter_as_JSON_string @@ -2797,14 +2841,14 @@ EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collecti EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_char_values_with_converter_as_JSON_string EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_DateOnly_JSON_values EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_DateOnly_values_with_converter_as_JSON_string -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_DateTime_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_DateTime_JSON_values(expected: "{\"Prop\":[\"0001-01-01T00:00:00\",null,\"2023-05-"···) EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_DateTime_values_with_converter_as_JSON_string -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_DateTimeOffset_JSON_values -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_decimal_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_DateTimeOffset_JSON_values(expected: "{\"Prop\":[\"0001-01-01T00:00:00+00:00\",\"2023-05"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_decimal_JSON_values(expected: "{\"Prop\":[-79228162514264337593543950335,0,null,7"···) EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_double_JSON_values EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_double_values_with_converter_as_JSON_string EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_float_JSON_values -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_GUID_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_GUID_JSON_values(expected: "{\"Prop\":[\"00000000-0000-0000-0000-000000000000\"···) EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_int_enum_JSON_values EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_int_enum_values_with_converter_as_JSON_string EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_int_JSON_values @@ -2861,7 +2905,7 @@ EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_custom_c EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_custom_converted_type_JSON_values(value: "127.0.0.1", json: "{\"Prop\":\"127.0.0.1\"}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_custom_converted_type_JSON_values(value: "192.168.1.156", json: "{\"Prop\":\"192.168.1.156\"}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_custom_converted_type_JSON_values(value: "255.255.255.255", json: "{\"Prop\":\"255.255.255.255\"}") -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_custom_converted_type_JSON_values(value: "2a00:23c7:c60f:4f01:ba43:6d5a:e648:7577", json: "{\"Prop\":\"2a00:23c7:c60f:4f01:ba43:6d5a:e648:757"...) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_custom_converted_type_JSON_values(value: "2a00:23c7:c60f:4f01:ba43:6d5a:e648:7577", json: "{\"Prop\":\"2a00:23c7:c60f:4f01:ba43:6d5a:e648:757"···) EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_DateOnly_JSON_values(value: "1/1/0001", json: "{\"Prop\":\"0001-01-01\"}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_DateOnly_JSON_values(value: "12/31/9999", json: "{\"Prop\":\"9999-12-31\"}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_DateOnly_JSON_values(value: "5/29/2023", json: "{\"Prop\":\"2023-05-29\"}") @@ -2886,9 +2930,9 @@ EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_float_JS EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_float_JSON_values(value: 0, json: "{\"Prop\":0}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_float_JSON_values(value: 1.10000002, json: "{\"Prop\":1.1}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_float_JSON_values(value: 3.40282347E+38, json: "{\"Prop\":3.4028235E+38}") -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_GUID_JSON_values(value: "00000000-0000-0000-0000-000000000000", json: "{\"Prop\":\"00000000-0000-0000-0000-000000000000\""...) -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_GUID_JSON_values(value: "8C44242F-8E3F-4A20-8BE8-98C7C1AADEBD", json: "{\"Prop\":\"8c44242f-8e3f-4a20-8be8-98c7c1aadebd\""...) -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_GUID_JSON_values(value: "FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF", json: "{\"Prop\":\"ffffffff-ffff-ffff-ffff-ffffffffffff\""...) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_GUID_JSON_values(value: "00000000-0000-0000-0000-000000000000", json: "{\"Prop\":\"00000000-0000-0000-0000-000000000000\""···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_GUID_JSON_values(value: "8C44242F-8E3F-4A20-8BE8-98C7C1AADEBD", json: "{\"Prop\":\"8c44242f-8e3f-4a20-8be8-98c7c1aadebd\""···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_GUID_JSON_values(value: "FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF", json: "{\"Prop\":\"ffffffff-ffff-ffff-ffff-ffffffffffff\""···) EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_int_enum_JSON_values(value: -2147483648, json: "{\"Prop\":-2147483648}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_int_enum_JSON_values(value: 0, json: "{\"Prop\":0}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_int_enum_JSON_values(value: 1, json: "{\"Prop\":1}") @@ -2903,9 +2947,23 @@ EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_IP_addre EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_IP_address_JSON_values(value: "127.0.0.1", json: "{\"Prop\":\"127.0.0.1\"}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_IP_address_JSON_values(value: "192.168.1.156", json: "{\"Prop\":\"192.168.1.156\"}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_IP_address_JSON_values(value: "255.255.255.255", json: "{\"Prop\":\"255.255.255.255\"}") -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_IP_address_JSON_values(value: "2a00:23c7:c60f:4f01:ba43:6d5a:e648:7577", json: "{\"Prop\":\"2a00:23c7:c60f:4f01:ba43:6d5a:e648:757"...) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_IP_address_JSON_values(value: "2a00:23c7:c60f:4f01:ba43:6d5a:e648:7577", json: "{\"Prop\":\"2a00:23c7:c60f:4f01:ba43:6d5a:e648:757"···) EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_line_string EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_line_string_as_GeoJson +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_list_of_array_of_binary_JSON_values(expected: "{\"Prop\":[[\"AAEC\",\"AQ==\",\"TQ==\"],[],[\"Tg=="···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_list_of_array_of_GUID_JSON_values(expected: "{\"Prop\":[[\"00000000-0000-0000-0000-000000000000"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_list_of_array_of_int_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_list_of_array_of_IPAddress_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_list_of_array_of_list_of_array_of_binary_JSON_values(expected: "{\"Prop\":[[[[\"AAEC\",\"AQ==\",\"TQ==\"]],[],[[],"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_list_of_array_of_list_of_IPAddress_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_list_of_array_of_list_of_string_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_list_of_array_of_list_of_ulong_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_list_of_array_of_nullable_GUID_JSON_values(expected: "{\"Prop\":[[\"00000000-0000-0000-0000-000000000000"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_list_of_array_of_nullable_int_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_list_of_array_of_nullable_ulong_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_list_of_array_of_string_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_list_of_array_of_ulong_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_list_of_list_of_list_of_int_JSON_values EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_long_enum_JSON_values(value: -9223372036854775808, json: "{\"Prop\":-9223372036854775808}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_long_enum_JSON_values(value: 0, json: "{\"Prop\":0}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_long_enum_JSON_values(value: 1, json: "{\"Prop\":1}") @@ -2916,9 +2974,9 @@ EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_long_JSO EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_long_JSON_values(value: 9223372036854775807, json: "{\"Prop\":9223372036854775807}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_multi_line_string EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_multi_line_string_as_GeoJson -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_as_string_GUID_JSON_values(value: "00000000-0000-0000-0000-000000000000", json: "{\"Prop\":\"00000000-0000-0000-0000-000000000000\""...) -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_as_string_GUID_JSON_values(value: "8C44242F-8E3F-4A20-8BE8-98C7C1AADEBD", json: "{\"Prop\":\"8c44242f-8e3f-4a20-8be8-98c7c1aadebd\""...) -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_as_string_GUID_JSON_values(value: "FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF", json: "{\"Prop\":\"ffffffff-ffff-ffff-ffff-ffffffffffff\""...) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_as_string_GUID_JSON_values(value: "00000000-0000-0000-0000-000000000000", json: "{\"Prop\":\"00000000-0000-0000-0000-000000000000\""···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_as_string_GUID_JSON_values(value: "8C44242F-8E3F-4A20-8BE8-98C7C1AADEBD", json: "{\"Prop\":\"8c44242f-8e3f-4a20-8be8-98c7c1aadebd\""···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_as_string_GUID_JSON_values(value: "FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF", json: "{\"Prop\":\"ffffffff-ffff-ffff-ffff-ffffffffffff\""···) EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_as_string_GUID_JSON_values(value: null, json: "{\"Prop\":null}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_binary_as_string_JSON_values(value: "", json: "{\"Prop\":\"\"}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_binary_as_string_JSON_values(value: "0,0,0,1", json: "{\"Prop\":\"AAAAAQ==\"}") @@ -2986,8 +3044,8 @@ EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateTime_JSON_values(value: null, json: "{\"Prop\":null}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateTimeOffset_as_string_JSON_values(value: "0001-01-01T00:00:00.0000000-01:00", json: "{\"Prop\":\"0001-01-01 00:00:00-01:00\"}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateTimeOffset_as_string_JSON_values(value: "0001-01-01T00:00:00.0000000-03:00", json: "{\"Prop\":\"0001-01-01 00:00:00-03:00\"}") -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateTimeOffset_as_string_JSON_values(value: "2023-05-29T11:11:15.5672854+04:00", json: "{\"Prop\":\"2023-05-29 11:11:15.5672854\\u002B04:0"...) -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateTimeOffset_as_string_JSON_values(value: "9999-12-31T23:59:59.9999999+02:00", json: "{\"Prop\":\"9999-12-31 23:59:59.9999999\\u002B02:0"...) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateTimeOffset_as_string_JSON_values(value: "2023-05-29T11:11:15.5672854+04:00", json: "{\"Prop\":\"2023-05-29 11:11:15.5672854\\u002B04:0"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateTimeOffset_as_string_JSON_values(value: "9999-12-31T23:59:59.9999999+02:00", json: "{\"Prop\":\"9999-12-31 23:59:59.9999999\\u002B02:0"···) EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateTimeOffset_as_string_JSON_values(value: null, json: "{\"Prop\":null}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateTimeOffset_JSON_values(value: "0001-01-01T00:00:00.0000000-01:00", json: "{\"Prop\":\"0001-01-01T00:00:00-01:00\"}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateTimeOffset_JSON_values(value: "0001-01-01T00:00:00.0000000-03:00", json: "{\"Prop\":\"0001-01-01T00:00:00-03:00\"}") @@ -3024,9 +3082,9 @@ EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_float_JSON_values(value: 1.10000002, json: "{\"Prop\":1.1}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_float_JSON_values(value: 3.40282347E+38, json: "{\"Prop\":3.4028235E+38}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_float_JSON_values(value: null, json: "{\"Prop\":null}") -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_GUID_JSON_values(value: "00000000-0000-0000-0000-000000000000", json: "{\"Prop\":\"00000000-0000-0000-0000-000000000000\""...) -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_GUID_JSON_values(value: "8C44242F-8E3F-4A20-8BE8-98C7C1AADEBD", json: "{\"Prop\":\"8c44242f-8e3f-4a20-8be8-98c7c1aadebd\""...) -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_GUID_JSON_values(value: "FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF", json: "{\"Prop\":\"ffffffff-ffff-ffff-ffff-ffffffffffff\""...) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_GUID_JSON_values(value: "00000000-0000-0000-0000-000000000000", json: "{\"Prop\":\"00000000-0000-0000-0000-000000000000\""···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_GUID_JSON_values(value: "8C44242F-8E3F-4A20-8BE8-98C7C1AADEBD", json: "{\"Prop\":\"8c44242f-8e3f-4a20-8be8-98c7c1aadebd\""···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_GUID_JSON_values(value: "FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF", json: "{\"Prop\":\"ffffffff-ffff-ffff-ffff-ffffffffffff\""···) EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_GUID_JSON_values(value: null, json: "{\"Prop\":null}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_int_as_string_JSON_values(value: -2147483648, json: "{\"Prop\":\"-2147483648\"}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_int_as_string_JSON_values(value: 0, json: "{\"Prop\":\"0\"}") @@ -3055,7 +3113,7 @@ EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_IP_address_as_string_JSON_values(value: "127.0.0.1", json: "{\"Prop\":\"127.0.0.1\"}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_IP_address_as_string_JSON_values(value: "192.168.1.156", json: "{\"Prop\":\"192.168.1.156\"}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_IP_address_as_string_JSON_values(value: "255.255.255.255", json: "{\"Prop\":\"255.255.255.255\"}") -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_IP_address_as_string_JSON_values(value: "2a00:23c7:c60f:4f01:ba43:6d5a:e648:7577", json: "{\"Prop\":\"2a00:23c7:c60f:4f01:ba43:6d5a:e648:757"...) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_IP_address_as_string_JSON_values(value: "2a00:23c7:c60f:4f01:ba43:6d5a:e648:7577", json: "{\"Prop\":\"2a00:23c7:c60f:4f01:ba43:6d5a:e648:757"···) EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_IP_address_as_string_JSON_values(value: null, json: "{\"Prop\":null}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_IP_address_JSON_values(value: "::", json: "{\"Prop\":\"::\"}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_IP_address_JSON_values(value: "::1", json: "{\"Prop\":\"::1\"}") @@ -3063,7 +3121,7 @@ EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_IP_address_JSON_values(value: "127.0.0.1", json: "{\"Prop\":\"127.0.0.1\"}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_IP_address_JSON_values(value: "192.168.1.156", json: "{\"Prop\":\"192.168.1.156\"}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_IP_address_JSON_values(value: "255.255.255.255", json: "{\"Prop\":\"255.255.255.255\"}") -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_IP_address_JSON_values(value: "2a00:23c7:c60f:4f01:ba43:6d5a:e648:7577", json: "{\"Prop\":\"2a00:23c7:c60f:4f01:ba43:6d5a:e648:757"...) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_IP_address_JSON_values(value: "2a00:23c7:c60f:4f01:ba43:6d5a:e648:7577", json: "{\"Prop\":\"2a00:23c7:c60f:4f01:ba43:6d5a:e648:757"···) EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_IP_address_JSON_values(value: null, json: "{\"Prop\":null}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_line_string EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_line_string_as_GeoJson @@ -3145,12 +3203,12 @@ EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_short_JSON_values(value: 32767, json: "{\"Prop\":32767}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_short_JSON_values(value: null, json: "{\"Prop\":null}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_string_as_string_JSON_values(value: "", json: "{\"Prop\":\"\"}") -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_string_as_string_JSON_values(value: "❤❥웃유♋☮✌☏☢☠✔☑♚▲♪฿Ɖ⛏♥❣♂♀☿\ud83d\udc4d✍✉☣☤✘☒♛▼♫⌘⌛¡♡ღツ☼☁❅♾️✎©®™Σ"..., json: "{\"Prop\":\"\\u2764\\u2765\\uC6C3\\uC720\\u264B\\u"...) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_string_as_string_JSON_values(value: "❤❥웃유♋☮✌☏☢☠✔☑♚▲♪฿Ɖ⛏♥❣♂♀☿\ud83d\udc4d✍✉☣☤✘☒♛▼♫⌘⌛¡♡ღツ☼☁❅♾️✎©®™Σ"···, json: "{\"Prop\":\"\\u2764\\u2765\\uC6C3\\uC720\\u264B\\u"···) EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_string_as_string_JSON_values(value: "MaxValue", json: "{\"Prop\":\"MaxValue\"}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_string_as_string_JSON_values(value: "MinValue", json: "{\"Prop\":\"MinValue\"}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_string_as_string_JSON_values(value: null, json: "{\"Prop\":null}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_string_JSON_values(value: "", json: "{\"Prop\":\"\"}") -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_string_JSON_values(value: "❤❥웃유♋☮✌☏☢☠✔☑♚▲♪฿Ɖ⛏♥❣♂♀☿\ud83d\udc4d✍✉☣☤✘☒♛▼♫⌘⌛¡♡ღツ☼☁❅♾️✎©®™Σ"..., json: "{\"Prop\":\"\\u2764\\u2765\\uC6C3\\uC720\\u264B\\u"...) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_string_JSON_values(value: "❤❥웃유♋☮✌☏☢☠✔☑♚▲♪฿Ɖ⛏♥❣♂♀☿\ud83d\udc4d✍✉☣☤✘☒♛▼♫⌘⌛¡♡ღツ☼☁❅♾️✎©®™Σ"···, json: "{\"Prop\":\"\\u2764\\u2765\\uC6C3\\uC720\\u264B\\u"···) EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_string_JSON_values(value: "MaxValue", json: "{\"Prop\":\"MaxValue\"}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_string_JSON_values(value: "MinValue", json: "{\"Prop\":\"MinValue\"}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_string_JSON_values(value: null, json: "{\"Prop\":null}") @@ -3207,10 +3265,10 @@ EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ulong_JSON_values(value: 18446744073709551615, json: "{\"Prop\":18446744073709551615}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ulong_JSON_values(value: null, json: "{\"Prop\":null}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_URI_as_string_JSON_values(value: "file:///C:/test/path/file.txt", json: "{\"Prop\":\"file:///C:/test/path/file.txt\"}") -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_URI_as_string_JSON_values(value: "https://user:password@www.contoso.com:80/Home/Inde"..., json: "{\"Prop\":\"https://user:password@www.contoso.com:"...) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_URI_as_string_JSON_values(value: "https://user:password@www.contoso.com:80/Home/Inde"···, json: "{\"Prop\":\"https://user:password@www.contoso.com:"···) EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_URI_as_string_JSON_values(value: null, json: "{\"Prop\":null}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_URI_JSON_values(value: "file:///C:/test/path/file.txt", json: "{\"Prop\":\"file:///C:/test/path/file.txt\"}") -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_URI_JSON_values(value: "https://user:password@www.contoso.com:80/Home/Inde"..., json: "{\"Prop\":\"https://user:password@www.contoso.com:"...) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_URI_JSON_values(value: "https://user:password@www.contoso.com:80/Home/Inde"···, json: "{\"Prop\":\"https://user:password@www.contoso.com:"···) EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_URI_JSON_values(value: null, json: "{\"Prop\":null}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ushort_as_string_JSON_values(value: 0, json: "{\"Prop\":\"0\"}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ushort_as_string_JSON_values(value: 1, json: "{\"Prop\":\"1\"}") @@ -3263,7 +3321,7 @@ EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_short_JS EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_short_JSON_values(value: 1, json: "{\"Prop\":1}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_short_JSON_values(value: 32767, json: "{\"Prop\":32767}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_string_JSON_values(value: "", json: "{\"Prop\":\"\"}") -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_string_JSON_values(value: "❤❥웃유♋☮✌☏☢☠✔☑♚▲♪฿Ɖ⛏♥❣♂♀☿\ud83d\udc4d✍✉☣☤✘☒♛▼♫⌘⌛¡♡ღツ☼☁❅♾️✎©®™Σ"..., json: "{\"Prop\":\"\\u2764\\u2765\\uC6C3\\uC720\\u264B\\u"...) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_string_JSON_values(value: "❤❥웃유♋☮✌☏☢☠✔☑♚▲♪฿Ɖ⛏♥❣♂♀☿\ud83d\udc4d✍✉☣☤✘☒♛▼♫⌘⌛¡♡ღツ☼☁❅♾️✎©®™Σ"···, json: "{\"Prop\":\"\\u2764\\u2765\\uC6C3\\uC720\\u264B\\u"···) EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_string_JSON_values(value: "MaxValue", json: "{\"Prop\":\"MaxValue\"}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_string_JSON_values(value: "MinValue", json: "{\"Prop\":\"MinValue\"}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_TimeOnly_JSON_values(value: "00:00:00.0000000", json: "{\"Prop\":\"00:00:00.0000000\"}") @@ -3286,7 +3344,7 @@ EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_ulong_JS EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_ulong_JSON_values(value: 1, json: "{\"Prop\":1}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_ulong_JSON_values(value: 18446744073709551615, json: "{\"Prop\":18446744073709551615}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_URI_JSON_values(value: "file:///C:/test/path/file.txt", json: "{\"Prop\":\"file:///C:/test/path/file.txt\"}") -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_URI_JSON_values(value: "https://user:password@www.contoso.com:80/Home/Inde"..., json: "{\"Prop\":\"https://user:password@www.contoso.com:"...) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_URI_JSON_values(value: "https://user:password@www.contoso.com:80/Home/Inde"···, json: "{\"Prop\":\"https://user:password@www.contoso.com:"···) EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_ushort_enum_JSON_values(value: 0, json: "{\"Prop\":0}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_ushort_enum_JSON_values(value: 1, json: "{\"Prop\":1}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_ushort_enum_JSON_values(value: 65535, json: "{\"Prop\":65535}") @@ -3659,6 +3717,7 @@ EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Non_virtual_one_to_ EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Non_virtual_reference_to_dependent_is_not_lazy_loaded EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Setting_reference_to_owned_type_to_null_is_allowed_on_non_virtual_navigation EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Setting_reference_to_owned_type_to_null_is_allowed_on_virtual_navigation +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Top_level_projection_track_entities_before_passing_to_client_method EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Attached_collections_are_not_marked_as_loaded(state: Added, lazy: False) EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Attached_collections_are_not_marked_as_loaded(state: Added, lazy: True) EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Attached_collections_are_not_marked_as_loaded(state: Modified, lazy: False) @@ -6804,6 +6863,7 @@ EntityFrameworkCore.Jet.FunctionalTests.LoggingJetTest.Logs_context_initializati EntityFrameworkCore.Jet.FunctionalTests.LoggingJetTest.Logs_context_initialization_no_tracking EntityFrameworkCore.Jet.FunctionalTests.LoggingJetTest.Logs_context_initialization_relational_nulls EntityFrameworkCore.Jet.FunctionalTests.LoggingJetTest.Logs_context_initialization_sensitive_data_logging +EntityFrameworkCore.Jet.FunctionalTests.LoggingJetTest.StoredProcedureConcurrencyTokenNotMapped_throws_by_default EntityFrameworkCore.Jet.FunctionalTests.LoggingJetTest.UnnamedIndexPropertiesMappedToNonOverlappingTables_throws_by_default EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Attached_collections_are_not_marked_as_loaded(state: Added) EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Attached_collections_are_not_marked_as_loaded(state: Modified) @@ -8045,42 +8105,1599 @@ EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_updat EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Initial_tracking_uses_skip_navigations(async: False) EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Initial_tracking_uses_skip_navigations(async: True) EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Many_to_many_delete_behaviors_are_set -EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Binding_interceptors_are_used_by_queries(inject: False) -EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Binding_interceptors_are_used_by_queries(inject: True) -EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Binding_interceptors_are_used_when_creating_instances(inject: False) -EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Binding_interceptors_are_used_when_creating_instances(inject: True) -EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Intercept_query_materialization_for_empty_constructor(inject: False) -EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Intercept_query_materialization_for_empty_constructor(inject: True) -EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Intercept_query_materialization_for_full_constructor(inject: False) -EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Intercept_query_materialization_for_full_constructor(inject: True) -EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Intercept_query_materialization_with_owned_types(async: False) -EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Intercept_query_materialization_with_owned_types(async: True) -EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Multiple_materialization_interceptors_can_be_used(inject: False) -EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Multiple_materialization_interceptors_can_be_used(inject: True) -EntityFrameworkCore.Jet.FunctionalTests.MigrationsInfrastructureJetTest.Can_apply_all_migrations -EntityFrameworkCore.Jet.FunctionalTests.MigrationsInfrastructureJetTest.Can_apply_all_migrations_async -EntityFrameworkCore.Jet.FunctionalTests.MigrationsInfrastructureJetTest.Can_apply_one_migration -EntityFrameworkCore.Jet.FunctionalTests.MigrationsInfrastructureJetTest.Can_apply_range_of_migrations -EntityFrameworkCore.Jet.FunctionalTests.MigrationsInfrastructureJetTest.Can_diff_against_2_1_ASP_NET_Identity_model -EntityFrameworkCore.Jet.FunctionalTests.MigrationsInfrastructureJetTest.Can_diff_against_2_2_ASP_NET_Identity_model -EntityFrameworkCore.Jet.FunctionalTests.MigrationsInfrastructureJetTest.Can_diff_against_2_2_model -EntityFrameworkCore.Jet.FunctionalTests.MigrationsInfrastructureJetTest.Can_diff_against_3_0_ASP_NET_Identity_model -EntityFrameworkCore.Jet.FunctionalTests.MigrationsInfrastructureJetTest.Can_generate_down_script_using_names -EntityFrameworkCore.Jet.FunctionalTests.MigrationsInfrastructureJetTest.Can_generate_down_scripts -EntityFrameworkCore.Jet.FunctionalTests.MigrationsInfrastructureJetTest.Can_generate_idempotent_down_scripts -EntityFrameworkCore.Jet.FunctionalTests.MigrationsInfrastructureJetTest.Can_generate_idempotent_up_scripts -EntityFrameworkCore.Jet.FunctionalTests.MigrationsInfrastructureJetTest.Can_generate_idempotent_up_scripts_noTransactions -EntityFrameworkCore.Jet.FunctionalTests.MigrationsInfrastructureJetTest.Can_generate_migration_from_initial_database_to_initial -EntityFrameworkCore.Jet.FunctionalTests.MigrationsInfrastructureJetTest.Can_generate_no_migration_script -EntityFrameworkCore.Jet.FunctionalTests.MigrationsInfrastructureJetTest.Can_generate_one_down_script -EntityFrameworkCore.Jet.FunctionalTests.MigrationsInfrastructureJetTest.Can_generate_one_up_script -EntityFrameworkCore.Jet.FunctionalTests.MigrationsInfrastructureJetTest.Can_generate_up_script_using_names -EntityFrameworkCore.Jet.FunctionalTests.MigrationsInfrastructureJetTest.Can_generate_up_scripts -EntityFrameworkCore.Jet.FunctionalTests.MigrationsInfrastructureJetTest.Can_generate_up_scripts_noTransactions -EntityFrameworkCore.Jet.FunctionalTests.MigrationsInfrastructureJetTest.Can_get_active_provider -EntityFrameworkCore.Jet.FunctionalTests.MigrationsInfrastructureJetTest.Can_revert_all_migrations -EntityFrameworkCore.Jet.FunctionalTests.MigrationsInfrastructureJetTest.Can_revert_one_migrations -EntityFrameworkCore.Jet.FunctionalTests.MigrationsInfrastructureJetTest.Empty_Migration_Creates_Database +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Binding_interceptors_are_used_by_queries(inject: False, usePooling: False) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Binding_interceptors_are_used_by_queries(inject: False, usePooling: True) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Binding_interceptors_are_used_by_queries(inject: True, usePooling: False) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Binding_interceptors_are_used_by_queries(inject: True, usePooling: True) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Binding_interceptors_are_used_when_creating_instances(inject: False, usePooling: False) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Binding_interceptors_are_used_when_creating_instances(inject: False, usePooling: True) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Binding_interceptors_are_used_when_creating_instances(inject: True, usePooling: False) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Binding_interceptors_are_used_when_creating_instances(inject: True, usePooling: True) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Intercept_query_materialization_for_empty_constructor(inject: False, usePooling: False) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Intercept_query_materialization_for_empty_constructor(inject: False, usePooling: True) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Intercept_query_materialization_for_empty_constructor(inject: True, usePooling: False) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Intercept_query_materialization_for_empty_constructor(inject: True, usePooling: True) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Intercept_query_materialization_for_full_constructor(inject: False, usePooling: False) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Intercept_query_materialization_for_full_constructor(inject: False, usePooling: True) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Intercept_query_materialization_for_full_constructor(inject: True, usePooling: False) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Intercept_query_materialization_for_full_constructor(inject: True, usePooling: True) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Intercept_query_materialization_with_owned_types(async: False, usePooling: False) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Intercept_query_materialization_with_owned_types(async: False, usePooling: True) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Intercept_query_materialization_with_owned_types(async: True, usePooling: False) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Intercept_query_materialization_with_owned_types(async: True, usePooling: True) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Multiple_materialization_interceptors_can_be_used(inject: False, usePooling: False) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Multiple_materialization_interceptors_can_be_used(inject: False, usePooling: True) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Multiple_materialization_interceptors_can_be_used(inject: True, usePooling: False) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Multiple_materialization_interceptors_can_be_used(inject: True, usePooling: True) +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_apply_all_migrations +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_apply_all_migrations_async +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_apply_one_migration +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_apply_range_of_migrations +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_apply_second_migration_in_parallel +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_apply_second_migration_in_parallel_async +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_diff_against_2_1_ASP_NET_Identity_model +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_diff_against_2_2_ASP_NET_Identity_model +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_diff_against_2_2_model +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_diff_against_3_0_ASP_NET_Identity_model +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_generate_down_script_using_names +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_generate_down_scripts +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_generate_idempotent_down_scripts +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_generate_idempotent_up_scripts +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_generate_idempotent_up_scripts_noTransactions +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_generate_migration_from_initial_database_to_initial +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_generate_no_migration_script +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_generate_one_down_script +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_generate_one_up_script +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_generate_up_script_using_names +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_generate_up_scripts +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_generate_up_scripts_noTransactions +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_get_active_provider +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_revert_all_migrations +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_revert_one_migrations +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Empty_Migration_Creates_Database +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_check_constraint_generates_exec_when_idempotent +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_check_constraint_with_name +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_identity +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_identity_seed_increment +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_identity_seed_increment_for_TPC +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_shared +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_ansi +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_check_constraint +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_comment +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_computedSql_unspecified +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_datetime +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_datetime_store_type +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_datetime_with_explicit_precision(precision: 0, fractionalSeconds: "", ticksToAdd: 1234567) +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_datetime_with_explicit_precision(precision: 1, fractionalSeconds: ".1", ticksToAdd: 1234567) +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_datetime_with_explicit_precision(precision: 2, fractionalSeconds: ".12", ticksToAdd: 1234567) +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_datetime_with_explicit_precision(precision: 3, fractionalSeconds: ".123", ticksToAdd: 1234567) +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_datetime_with_explicit_precision(precision: 4, fractionalSeconds: ".1234", ticksToAdd: 1234567) +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_datetime_with_explicit_precision(precision: 5, fractionalSeconds: ".12345", ticksToAdd: 1234567) +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_datetime_with_explicit_precision(precision: 6, fractionalSeconds: ".123456", ticksToAdd: 1234567) +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_datetime_with_explicit_precision(precision: 7, fractionalSeconds: ".1200000", ticksToAdd: 1200000) +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_datetime_with_explicit_precision(precision: 7, fractionalSeconds: ".1234567", ticksToAdd: 1234567) +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_datetimeoffset_with_explicit_precision(precision: 0, fractionalSeconds: "", ticksToAdd: 1234567) +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_datetimeoffset_with_explicit_precision(precision: 1, fractionalSeconds: ".1", ticksToAdd: 1234567) +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_datetimeoffset_with_explicit_precision(precision: 2, fractionalSeconds: ".12", ticksToAdd: 1234567) +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_datetimeoffset_with_explicit_precision(precision: 3, fractionalSeconds: ".123", ticksToAdd: 1234567) +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_datetimeoffset_with_explicit_precision(precision: 4, fractionalSeconds: ".1234", ticksToAdd: 1234567) +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_datetimeoffset_with_explicit_precision(precision: 5, fractionalSeconds: ".12345", ticksToAdd: 1234567) +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_datetimeoffset_with_explicit_precision(precision: 6, fractionalSeconds: ".123456", ticksToAdd: 1234567) +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_datetimeoffset_with_explicit_precision(precision: 7, fractionalSeconds: ".1200000", ticksToAdd: 1200000) +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_datetimeoffset_with_explicit_precision(precision: 7, fractionalSeconds: ".1234567", ticksToAdd: 1234567) +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_string +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_time_with_explicit_precision(precision: 0, fractionalSeconds: "", ticksToAdd: 1234567) +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_time_with_explicit_precision(precision: 1, fractionalSeconds: ".1", ticksToAdd: 1234567) +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_time_with_explicit_precision(precision: 2, fractionalSeconds: ".12", ticksToAdd: 1234567) +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_time_with_explicit_precision(precision: 3, fractionalSeconds: ".123", ticksToAdd: 1234567) +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_time_with_explicit_precision(precision: 4, fractionalSeconds: ".1234", ticksToAdd: 1234567) +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_time_with_explicit_precision(precision: 5, fractionalSeconds: ".12345", ticksToAdd: 1234567) +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_time_with_explicit_precision(precision: 6, fractionalSeconds: ".123456", ticksToAdd: 1234567) +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_time_with_explicit_precision(precision: 7, fractionalSeconds: ".12", ticksToAdd: 1200000) +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_time_with_explicit_precision(precision: 7, fractionalSeconds: ".1234567", ticksToAdd: 1234567) +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_unspecified +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValueSql_unspecified +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_fixed_length +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_max_length +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_max_length_on_derived +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_required +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_foreign_key +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_foreign_key_with_name +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_json_columns_to_existing_table +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_optional_primitive_collection_to_existing_table +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_primary_key_composite_with_name +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_primary_key_int +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_primary_key_string +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_required_primitive_collection_to_existing_table +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_required_primitive_collection_with_custom_converter_and_custom_default_value_to_existing_table +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_required_primitive_collection_with_custom_default_value_sql_to_existing_table +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_required_primitive_collection_with_custom_default_value_to_existing_table +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_required_primitve_collection_to_existing_table +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_required_primitve_collection_with_custom_converter_and_custom_default_value_to_existing_table +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_required_primitve_collection_with_custom_default_value_sql_to_existing_table +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_required_primitve_collection_with_custom_default_value_to_existing_table +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_unique_constraint +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_unique_constraint_composite_with_name +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_check_constraint +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_column_add_comment +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_column_add_identity +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_column_change_comment +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_column_change_type +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_column_remove_identity +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_computed_column_add_comment +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_table_add_comment +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_table_add_comment_non_default_schema +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_table_change_comment +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Create_schema +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Create_table +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Create_table_no_key +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Create_table_with_comments +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Create_table_with_complex_type_with_required_properties_on_derived_entity_in_TPH +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Create_table_with_identity_column_value_converter +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Create_table_with_json_column +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Create_table_with_json_column_explicit_json_column_names +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Create_table_with_multiline_comments +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Create_table_with_optional_primitive_collection +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Create_table_with_required_primitive_collection +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.DeleteDataOperation_composite_key +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.DeleteDataOperation_simple_key +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Drop_check_constraint +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Drop_column +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Drop_foreign_key +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Drop_index +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Drop_primary_key_int +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Drop_primary_key_string +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Drop_table +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Drop_unique_constraint +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Rename_column +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Rename_json_column +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.UpdateDataOperation_composite_key +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.UpdateDataOperation_multiple_columns +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.UpdateDataOperation_simple_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Access_mode_can_be_overridden_at_entity_and_property_levels +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_add_shadow_primitive_collections_when_they_have_been_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_add_shadow_properties_when_they_have_been_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_call_PrimitiveCollection_on_a_field +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_call_Property_on_a_field +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_ignore_a_field +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_ignore_shadow_primitive_collections_when_they_have_been_added_explicitly +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_ignore_shadow_properties_when_they_have_been_added_explicitly +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_set_complex_property_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_set_custom_value_generator_for_primitive_collections +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_set_custom_value_generator_for_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_set_max_length_for_primitive_collections +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_set_max_length_for_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_set_max_length_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_set_precision_and_scale_for_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_set_precision_and_scale_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_set_primitive_collection_annotation_when_no_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_set_property_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_set_property_annotation_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_set_property_annotation_when_no_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_set_sentinel_for_primitive_collections +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_set_sentinel_for_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_set_sentinel_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_set_unbounded_max_length_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_set_unicode_for_primitive_collections +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_set_unicode_for_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_set_unicode_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_use_table_splitting +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_use_table_splitting_with_schema +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_use_TPH +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Complex_properties_can_be_configured_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Complex_properties_not_discovered_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Configuring_direction_on_RowsAffectedParameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Conflicting_sproc_rows_affected_parameter_and_result_column_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Conflicting_sproc_rows_affected_return_and_parameter_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Conflicting_sproc_rows_affected_return_and_result_column_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Duplicate_sproc_original_value_parameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Duplicate_sproc_parameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Duplicate_sproc_result_column_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Duplicate_sproc_rows_affected_parameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Duplicate_sproc_rows_affected_result_column_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.HasField_for_primitive_collection_throws_if_field_is_not_found +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.HasField_for_primitive_collection_throws_if_field_is_wrong_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.HasField_throws_if_field_is_not_found +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.HasField_throws_if_field_is_wrong_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.IEnumerable_properties_with_value_converter_set_are_not_discovered_as_complex_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Mapping_throws_for_empty_complex_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Mapping_throws_for_non_ignored_navigations_on_complex_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Non_nullable_properties_cannot_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Primitive_collections_are_required_by_default_only_if_CLR_type_is_nullable +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Primitive_collections_can_be_made_concurrency_tokens +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Primitive_collections_can_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Primitive_collections_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Primitive_collections_can_be_set_to_generate_values_on_Add +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Primitive_collections_can_have_field_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Primitive_collections_specified_by_string_are_shadow_properties_unless_already_known_to_be_CLR_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.PrimitiveCollectionBuilder_methods_can_be_chained +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Properties_are_required_by_default_only_if_CLR_type_is_nullable +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Properties_can_be_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Properties_can_be_ignored_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Properties_can_be_made_concurrency_tokens +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Properties_can_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Properties_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Properties_can_be_set_to_generate_values_on_Add +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Properties_can_have_access_mode_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Properties_can_have_custom_type_value_converter_type_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Properties_can_have_field_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Properties_can_have_non_generic_value_converter_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Properties_can_have_provider_type_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Properties_can_have_provider_type_set_for_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Properties_can_have_value_converter_configured_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Properties_can_have_value_converter_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Properties_can_have_value_converter_set_inline +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Properties_can_set_row_version +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Properties_specified_by_string_are_shadow_properties_unless_already_known_to_be_CLR_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.PropertyBuilder_methods_can_be_chained +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Throws_for_bad_value_generator_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Throws_for_optional_complex_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Throws_for_primitive_collection_with_bad_value_generator_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Throws_for_tuple +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Throws_for_value_generator_that_cannot_be_constructed +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Value_converter_configured_on_non_nullable_type_is_applied +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Value_converter_configured_on_nullable_type_overrides_non_nullable +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Value_converter_type_is_checked +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Adding_conflicting_check_constraint_to_derived_type_before_base_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Adding_conflicting_check_constraint_to_derived_type_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Base_type_can_be_discovered_after_creating_foreign_keys_on_derived +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Base_types_are_mapped_correctly_if_discovered_last +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_add_check_constraints +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_create_relationship_between_base_type_and_derived_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_get_set_discriminator_mapping_is_complete +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_ignore_base_entity_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_map_derived_self_ref_many_to_one +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_map_derived_types_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_match_navigation_to_derived_type_with_inverse_on_base +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_override_TPC_with_TPH +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_promote_shadow_fk_to_the_base_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_reconfigure_inherited_intraHierarchical_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_remove_objects_in_derived_type_which_was_set_using_data_annotation_while_setting_base_type_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_set_and_remove_base_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_specify_discriminator_values_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_specify_discriminator_without_derived_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_use_shadow_FK_that_collides_with_convention_shadow_FK_on_other_derived_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_use_table_splitting +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Cannot_remove_objects_in_derived_type_which_was_set_using_explicit_while_setting_base_type_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Index_convention_run_for_fk_when_derived_type_discovered_before_base_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Index_convention_sets_filter_for_unique_index_when_base_type_changed +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Index_removed_when_covered_by_an_inherited_foreign_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Index_removed_when_covered_by_an_inherited_index +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Inherited_clr_properties_are_mapped_to_the_same_column +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Ordering_of_entityType_discovery_does_not_affect_key_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Pulling_relationship_to_a_derived_type_creates_relationships_on_other_derived_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Pulling_relationship_to_a_derived_type_many_to_one_creates_relationships_on_other_derived_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Pulling_relationship_to_a_derived_type_one_to_one_creates_relationship_on_base +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Pulling_relationship_to_a_derived_type_one_to_one_with_fk_creates_relationship_on_base +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Pulling_relationship_to_a_derived_type_reverted_creates_relationships_on_other_derived_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Pulling_relationship_to_a_derived_type_with_fk_creates_relationships_on_other_derived_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Relationships_are_discovered_on_the_base_entity_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Relationships_on_derived_types_are_discovered_first_if_base_is_one_sided +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Removing_a_key_triggers_fk_discovery_on_derived_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Removing_derived_removes_it_from_directly_derived_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Setting_base_type_handles_require_value_generator_properly +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Setting_base_type_to_null_fixes_relationships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.TPC_identifying_FKs_are_created_on_all_tables +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.TPT_identifying_FK_is_created_only_on_declaring_table +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.TPT_index_can_use_inherited_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Can_configure_join_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Can_configure_join_type_with_implicit_join_relationships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Can_configure_shared_join_type_with_implicit_join_relationships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Can_ignore_existing_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Can_use_ForeignKeyAttribute_with_InversePropertyAttribute +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Can_use_implicit_shared_type_as_join_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Can_use_implicit_shared_type_with_default_name_and_implicit_relationships_as_join_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Can_use_implicit_shared_type_with_default_name_as_join_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Can_use_implicit_shared_type_with_implicit_relationships_as_join_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Can_use_shared_type_as_join_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Discovers_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Finds_existing_navigations_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Finds_existing_navigations_and_uses_associated_FK_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Finds_existing_navigations_and_uses_associated_FK_with_implicit_relationships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.FK_properties_matching_navigations_are_discovered_on_explicit_join_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.FK_properties_matching_types_are_discovered_on_explicit_join_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.ForeignKeyAttribute_configures_the_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.ForeignKeyAttribute_does_not_force_convention_join_table_inclusion_matching_key_names +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.ForeignKeyAttribute_does_not_force_convention_join_table_inclusion_mismatching_key_names +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.IsRequired_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Join_entity_type_uses_default_schema_if_related_are_different +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Join_entity_type_uses_same_schema +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Join_type_is_automatically_configured_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Join_type_is_not_automatically_configured_when_navigations_are_ambiguous +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Many_to_many_with_a_shadow_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Many_to_many_with_no_navigations_configured +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Many_to_many_with_only_Has_navigation_configured +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Many_to_many_with_only_With_navigation_configured +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Navigation_properties_can_set_access_mode +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Overrides_ForeignKeyAttribute +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Skip_navigation_field_can_be_set_via_attribute +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Throws_for_conflicting_many_to_one_on_left +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Throws_for_conflicting_many_to_one_on_right +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Throws_for_self_ref_using_self +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Throws_for_self_ref_with_same_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Unconfigured_many_to_many_navigations_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.UsingEntity_with_shared_type_passed_when_marked_as_shared_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.UsingEntity_with_shared_type_passes_when_configured_as_shared +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Access_mode_can_be_overridden_at_entity_and_navigation_property_levels +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Can_add_annotations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Can_change_delete_behavior +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Can_have_both_convention_properties_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Can_have_both_convention_properties_specified_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Can_have_FK_by_convention_specified_with_explicit_principal_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Can_have_FK_by_convention_specified_with_explicit_principal_key_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Can_have_principal_key_by_convention_specified_with_explicit_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Can_have_principal_key_by_convention_specified_with_explicit_PK_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Can_set_foreign_key_property_when_matching_property_added +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Can_use_alternate_composite_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Can_use_alternate_composite_key_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Can_use_explicitly_specified_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Can_use_non_PK_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_both_navigations_and_creates_composite_FK_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_both_navigations_and_creates_FK_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_both_navigations_and_creates_new_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_both_navigations_and_creates_shadow_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_both_navigations_and_does_not_use_existing_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_both_navigations_and_finds_existing_composite_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_both_navigations_and_matches_shadow_FK_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_both_navigations_and_overrides_existing_FK_if_uniqueness_does_not_match +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_both_navigations_and_uses_specified_FK_even_if_found_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_both_navigations_with_existing_FK_not_found_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_relationship_on_existing_FK_is_using_different_principal_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_relationship_on_existing_FK_is_using_different_principal_key_different_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_relationship_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_relationship_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_relationship_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_relationship_with_no_navigations_and_specified_composite_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_relationship_with_no_navigations_and_specified_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_shadow_FK_property_with_non_shadow_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_shadow_FK_property_with_shadow_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_shadow_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_shadow_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_shadow_FK_with_no_navigations_with +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_shadow_property_for_foreign_key_according_to_navigation_to_principal_name_when_present +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_shadow_property_for_foreign_key_according_to_target_type_when_navigation_to_principal_name_not_present +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_specified_composite_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_specified_composite_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_specified_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_specified_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Explicitly_set_shadow_FK_name_is_preserved_with_HasPrincipalKey +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Finds_existing_navigation_to_dependent_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Finds_existing_navigation_to_principal_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Finds_existing_navigations_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Finds_existing_navigations_and_uses_associated_FK_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Handles_identity_correctly_while_removing_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Navigation_properties_can_set_access_mode +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Non_nullable_FK_are_required_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Non_nullable_FK_can_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Non_nullable_FK_can_be_made_optional_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Nullable_FK_are_optional_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Nullable_FK_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.One_to_many_relationship_has_no_ambiguity_explicit +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Relationships_discovered_when_ambiguity_on_the_inverse_is_resolved +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Removes_existing_unidirectional_one_to_one_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Resolves_ambiguous_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Throws_on_existing_one_to_one_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Access_mode_can_be_overridden_at_entity_and_primitive_collection_levels +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Access_mode_can_be_overridden_at_entity_and_property_levels +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_add_contained_indexes +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_add_index +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_add_index_when_no_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_add_multiple_indexes +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_add_seed_data_anonymous_objects +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_add_seed_data_anonymous_objects_indexed_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_add_seed_data_anonymous_objects_indexed_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_add_seed_data_objects +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_add_seed_data_objects_indexed_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_add_seed_data_objects_indexed_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_add_shadow_properties_when_they_have_been_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_add_shared_type_entity_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_call_PrimitiveCollection_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_call_Property_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_get_entity_builder_for_clr_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_ignore_a_field_on_a_keyless_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_ignore_a_field_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_ignore_a_property_that_is_part_of_explicit_entity_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_ignore_explicit_interface_implementation_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_ignore_shadow_properties_when_they_have_been_added_explicitly +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_override_navigations_as_primitive_collections +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_override_navigations_as_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_alternate_key_for_primitive_collection_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_alternate_key_from_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_alternate_key_from_clr_property_when_property_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_alternate_key_from_property_name_when_no_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_alternate_key_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_collation_for_primitive_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_collation_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_composite_alternate_key_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_composite_entity_key_from_clr_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_composite_entity_key_from_property_names_when_mixed_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_composite_index_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_composite_key_for_primitive_collection_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_composite_key_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_custom_value_generator_for_primitive_collections +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_custom_value_generator_for_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_element_type_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_entity_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_entity_key_from_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_entity_key_from_clr_property_when_property_ignored_on_keyless +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_entity_key_from_property_name_when_no_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_entity_key_with_annotations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_fixed_length_for_primitive_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_fixed_length_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_index_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_key_for_primitive_collection_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_key_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_max_length_for_primitive_collections +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_max_length_for_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_max_length_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_model_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_precision_and_scale_for_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_precision_and_scale_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_primary_key_by_convention_for_user_specified_shadow_primitive_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_primary_key_by_convention_for_user_specified_shadow_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_primitive_collection_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_primitive_collection_annotation_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_primitive_collection_annotation_when_no_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_property_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_property_annotation_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_property_annotation_when_no_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_sentinel_for_primitive_collections +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_sentinel_for_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_sentinel_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_store_type_for_primitive_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_store_type_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_unbounded_max_length_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_unicode_for_primitive_collections +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_unicode_for_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_unicode_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_upgrade_candidate_key_to_primary_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_use_table_splitting +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_use_table_splitting_with_schema +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Cannot_add_shared_type_when_non_shared_exists +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Configuring_direction_on_RowsAffectedParameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Conflicting_sproc_rows_affected_parameter_and_result_column_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Conflicting_sproc_rows_affected_parameter_and_return_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Conflicting_sproc_rows_affected_result_column_and_parameter_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Conflicting_sproc_rows_affected_result_column_and_return_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Conflicting_sproc_rows_affected_return_and_parameter_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Conflicting_sproc_rows_affected_return_and_result_column_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Conventions_can_be_added +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Conventions_can_be_removed +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Conventions_can_be_removed_by_generic_method +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Conventions_can_be_replaced +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Conversion_on_base_property_prevents_primitive_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Conversion_on_base_property_prevents_primitive_collection_when_base_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Duplicate_sproc_original_value_parameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Duplicate_sproc_parameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Duplicate_sproc_result_column_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Duplicate_sproc_rows_affected_parameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Duplicate_sproc_rows_affected_result_column_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Element_types_are_nullable_by_default_if_the_type_is_nullable +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Element_types_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Element_types_can_have_custom_type_value_converter_type_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Element_types_can_have_max_length +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Element_types_can_have_non_generic_value_converter_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Element_types_can_have_precision_and_scale +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Element_types_can_have_provider_type_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Element_types_can_have_unicode_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Element_types_have_default_precision_and_scale +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Element_types_have_default_unicode +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Element_types_have_no_max_length_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Entity_key_on_secondary_property_is_discovered_by_convention_when_first_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Entity_key_on_shadow_property_is_discovered_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.EntityType_name_is_stored_culture_invariantly +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.HasField_for_primitive_collection_throws_if_field_is_not_found +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.HasField_for_primitive_collection_throws_if_field_is_wrong_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.HasField_throws_if_field_is_not_found +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.HasField_throws_if_field_is_wrong_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.IEnumerable_properties_with_value_converter_set_are_not_discovered_as_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Ignoring_a_base_type_removes_relationships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Ignoring_a_navigation_property_removes_discovered_entity_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Ignoring_a_navigation_property_removes_discovered_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Indexes_can_have_same_name_across_tables +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Int32_cannot_be_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Key_properties_cannot_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Mapping_for_primitive_collection_ignores_ignored_array +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Mapping_ignores_ignored_array +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Mapping_ignores_ignored_three_dimensional_array +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Mapping_ignores_ignored_two_dimensional_array +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Mapping_throws_for_non_ignored_three_dimensional_array +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Model_is_readonly_after_Finalize +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Nested_primitive_collection_are_discovered_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Non_nullable_properties_cannot_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Object_cannot_be_configured_as_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Object_cannot_be_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Primitive_collections_are_required_by_default_only_if_CLR_type_is_nullable +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Primitive_collections_can_be_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Primitive_collections_can_be_made_concurrency_tokens +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Primitive_collections_can_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Primitive_collections_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Primitive_collections_can_be_set_to_generate_values_on_Add +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Primitive_collections_can_have_access_mode_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Primitive_collections_can_have_field_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Primitive_collections_can_have_value_converter_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Primitive_collections_specified_by_string_are_shadow_properties_unless_already_known_to_be_CLR_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.PrimitiveCollection_Key_properties_cannot_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.PrimitiveCollectionBuilder_methods_can_be_chained +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Private_primitive_collection_is_not_discovered_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Private_property_is_not_discovered_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_are_required_by_default_only_if_CLR_type_is_nullable +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_be_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_be_ignored_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_be_made_concurrency_tokens +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_be_set_to_generate_values_on_Add +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_have_access_mode_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_have_custom_type_value_converter_type_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_have_field_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_have_non_generic_value_converter_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_have_provider_type_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_have_provider_type_set_for_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_have_value_converter_configured_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_have_value_converter_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_have_value_converter_set_inline +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_set_row_version +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_specified_by_string_are_shadow_properties_unless_already_known_to_be_CLR_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Property_bag_cannot_be_configured_as_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.PropertyBuilder_methods_can_be_chained +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Setting_alternate_key_makes_properties_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Setting_sentinel_throws_for_noncompatible +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Setting_sentinel_throws_for_null_on_nonnullable +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Throws_for_bad_value_generator_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Throws_for_bad_value_generator_type_for_primitive_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Throws_for_conflicting_base_configurations_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Throws_for_int_keyed_dictionary +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Throws_for_primitive_collection_for_value_generator_that_cannot_be_constructed +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Throws_for_value_generator_that_cannot_be_constructed +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Value_converter_configured_on_base_type_is_not_applied +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Value_converter_configured_on_non_nullable_type_is_applied +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Value_converter_configured_on_nullable_type_overrides_non_nullable +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Value_converter_type_is_checked +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Value_converter_type_on_primitive_collection_is_checked +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Ambiguous_relationship_candidate_does_not_block_creating_further_relationships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Annotations_are_preserved_when_rebuilding +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Attempt_to_configure_Navigation_property_which_is_actually_a_Property_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_add_annotations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_change_delete_behavior +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_exclude_navigation_pointed_by_foreign_key_attribute_from_explicit_configuration +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_exclude_navigation_with_foreign_key_attribute_from_explicit_configuration +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_exclude_navigation_with_foreign_key_attribute_on_principal_type_from_explicit_configuration +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_have_both_convention_properties_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_have_both_convention_properties_specified_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_have_FK_by_convention_specified_with_explicit_principal_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_have_FK_by_convention_specified_with_explicit_principal_key_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_have_FK_semi_specified_with_explicit_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_have_principal_key_by_convention_replaced_with_primary_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_have_principal_key_by_convention_specified_with_explicit_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_have_principal_key_by_convention_specified_with_explicit_PK_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_set_foreign_key_property_when_matching_property_added +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_specify_requiredness_after_OnDelete +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_use_alternate_composite_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_use_alternate_composite_key_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_use_explicitly_specified_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_use_non_PK_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_both_navigations_and_creates_composite_FK_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_both_navigations_and_creates_FK_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_both_navigations_and_creates_shadow_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_both_navigations_and_matches_shadow_FK_property_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_both_navigations_and_overrides_existing_FK_when_uniqueness_does_not_match +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_both_navigations_and_uses_existing_composite_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_both_navigations_and_uses_existing_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_both_navigations_and_uses_existing_FK_not_found_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_both_navigations_and_uses_specified_FK_even_if_found_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_one_to_many_relationship_with_single_ref_as_dependent_to_principal_if_matching_entity_name_properties_are_on_navigation_side +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_one_to_many_relationship_with_single_ref_as_dependent_to_principal_if_matching_navigation_name_properties_are_on_navigation_side +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_one_to_many_relationship_with_single_ref_as_dependent_to_principal_if_matching_properties_are_on_both_sides +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_one_to_many_relationship_with_single_ref_as_dependent_to_principal_if_no_matching_properties_either_side +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_overlapping_foreign_keys_with_different_nullability +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_relationship_on_existing_FK_is_using_different_principal_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_relationship_on_existing_FK_is_using_different_principal_key_different_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_relationship_with_both_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_relationship_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_relationship_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_relationship_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_relationship_with_no_navigations_and_specified_composite_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_relationship_with_no_navigations_and_specified_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_shadow_fk_configuring_using_ForeignKeyAttribute +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_shadow_FK_property_with_non_shadow_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_shadow_FK_property_with_shadow_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_shadow_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_shadow_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_shadow_FK_with_no_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_shadow_property_for_foreign_key_according_to_navigation_to_principal_name_when_present +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_shadow_property_for_foreign_key_according_to_target_type_when_navigation_to_principal_name_not_present +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_specified_composite_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_specified_composite_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_specified_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_specified_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Do_not_match_non_unique_FK_when_overlap_with_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Explicit_principal_key_is_not_replaced_with_new_primary_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Finds_existing_navigation_to_dependent_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Finds_existing_navigation_to_principal_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Finds_existing_navigations_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Finds_existing_navigations_and_uses_associated_FK_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Handles_identity_correctly_while_removing_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.HasMany_with_a_collection_navigation_CLR_property_to_derived_type_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.HasNoKey_call_on_principal_entity_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.HasNoKey_call_on_principal_with_navigation_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Keyless_type_discovered_before_referenced_entity_type_does_not_leave_temp_id +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Keyless_type_with_unmapped_collection_navigations_does_not_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Navigation_properties_can_set_access_mode +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Navigation_to_shared_type_is_not_discovered_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Non_nullable_FK_are_required_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Non_nullable_FK_can_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Non_nullable_FK_can_be_made_optional_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Nullable_FK_are_optional_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Nullable_FK_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Nullable_FK_overrides_NRT_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.One_to_many_relationship_has_no_ambiguity_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.One_to_many_relationship_has_no_ambiguity_explicit +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Principal_key_by_convention_is_not_replaced_with_new_incompatible_primary_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Reference_navigation_from_keyless_entity_type_works +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.RemoveKey_does_not_add_back_foreign_key_pointing_to_the_same_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Removes_existing_unidirectional_one_to_one_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Resolves_ambiguous_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Shadow_foreign_keys_to_generic_types_have_terrible_names_that_should_not_change +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Shadow_property_created_for_foreign_key_is_nullable +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Throws_on_existing_many_to_many +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Throws_on_existing_one_to_one_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Throws_on_keyless_type_as_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Throws_when_foreign_key_references_shadow_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.WithMany_call_on_keyless_entity_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.WithMany_pointing_to_keyless_entity_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_add_annotations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_be_defined_before_the_PK_from_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_be_defined_before_the_PK_from_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_change_delete_behavior +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_create_relationship_if_dependent_has_matching_property_with_entity_type_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_create_relationship_if_dependent_has_matching_property_with_navigation_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_create_relationship_if_foreign_key_attribute_is_used +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_create_relationship_if_navigations_have_same_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_create_relationship_if_user_specifies_principal_key_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_create_relationship_if_user_specify_foreign_key_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_create_self_referencing_relationship_without_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_create_two_FKs_using_the_same_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_have_both_alternate_keys_specified_explicitly +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_have_both_alternate_keys_specified_explicitly_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_have_both_keys_specified_explicitly +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_have_both_keys_specified_explicitly_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_have_dependent_side_specified_explicitly_on_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_invert_relationship_if_principal_has_matching_property_with_entity_type_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_invert_relationship_if_principal_has_matching_property_with_navigation_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_specify_shadow_fk_before_configuring_principal_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_specify_shadow_fk_before_reconfiguring_principal_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_specify_shadow_identifying_fk +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_use_alternate_composite_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_use_alternate_composite_key_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_use_alternate_principal_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_use_pk_as_fk_if_principal_end_is_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_use_PK_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Configuring_FK_properties_as_PK_sets_DeleteBehavior_Cascade +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Configuring_principal_type_as_keyless_inverts_the_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Configuring_principal_type_as_keyless_throws_if_not_invertible +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Configuring_principal_type_as_keyless_throws_when_there_is_an_explicit_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_both_navigations_and_creates_composite_FK_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_both_navigations_and_creates_new_FK_when_not_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_both_navigations_and_new_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_both_navigations_and_new_FK_over_PK_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_both_navigations_and_overrides_existing_FK_when_uniqueness_does_not_match +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_both_navigations_and_removes_existing_FK_when_not_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_both_navigations_and_shadow_FK_if_existing_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_both_navigations_and_specified_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_both_navigations_and_uses_existing_composite_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_both_navigations_and_uses_existing_FK_not_found_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_both_navigations_and_uses_specified_FK_even_if_found_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_both_navigations_and_uses_specified_FK_even_if_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_composite_FK_when_specified_on_principal_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_composite_FK_when_specified_on_principal_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_composite_FK_when_specified_on_principal_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_field_backed_FK_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_FK_when_principal_and_foreign_key_specified_on_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_FK_when_principal_and_foreign_key_specified_on_dependent_in_reverse_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_FK_when_principal_and_foreign_key_specified_on_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_FK_when_specified_on_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_FK_when_specified_on_dependent_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_FK_when_specified_on_dependent_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_FK_when_specified_on_dependent_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_FK_when_specified_on_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_FK_when_specified_on_principal_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_FK_when_specified_on_principal_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_FK_when_specified_on_principal_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_index_even_if_covered_by_an_alternate_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_one_to_one_relationship_with_single_ref_as_principal_to_dependent_if_matching_properties_are_on_the_other_side +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_principal_key_when_specified_on_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_principal_key_when_specified_on_dependent_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_principal_key_when_specified_on_dependent_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_principal_key_when_specified_on_dependent_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_principal_key_when_specified_on_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_principal_key_when_specified_on_principal_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_principal_key_when_specified_on_principal_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_principal_key_when_specified_on_principal_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_relationship_on_existing_FK_if_using_different_principal_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_relationship_on_existing_FK_if_using_different_principal_key_different_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_relationship_with_navigation_to_dependent_and_new_FK_from_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_relationship_with_navigation_to_dependent_and_new_FK_from_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_relationship_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_relationship_with_specified_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_relationship_with_specified_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_relationship_with_specified_FK_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_self_referencing_FK_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_self_referencing_FK_by_convention_inverted +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_self_referencing_FK_on_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_self_referencing_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_self_referencing_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_shadow_FK_property_with_non_shadow_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_shadow_FK_property_with_shadow_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Does_not_use_existing_FK_when_principal_key_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Does_not_use_pk_as_fk_if_principal_end_is_not_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Finds_existing_navigation_to_dependent_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Finds_existing_navigations_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Finds_existing_navigations_and_uses_associated_FK_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Foreign_key_properties_are_not_discovered_for_one_to_one_relationship_with_ambiguous_principal_end +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Handles_identity_correctly_while_removing_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Ignoring_properties_on_principal_resolves_ambiguity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Ignoring_properties_resolves_ambiguity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Inverse_discovered_after_entity_unignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.IsRequired_throws_principal_end_is_ambiguous +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Multiple_self_referencing_navigations_throw_as_ambiguous +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Navigation_properties_can_set_access_mode +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Navigation_to_shared_type_is_not_discovered_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Non_nullable_FK_are_required_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Non_nullable_FK_can_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Non_nullable_FK_can_be_made_optional_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Nullable_FK_are_optional_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Nullable_FK_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.OneToOne_can_have_PK_explicitly_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Overrides_FK_if_specified_PK_count_does_not_match_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Overrides_FK_if_specified_PK_types_do_not_match_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Overrides_PK_if_specified_FK_count_does_not_match_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Overrides_PK_if_specified_FK_types_do_not_match_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Principal_and_dependent_can_be_flipped_and_composite_PK_is_still_used_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Principal_and_dependent_can_be_flipped_twice_in_reverse_order_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Principal_and_dependent_can_be_flipped_twice_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Principal_and_dependent_can_be_flipped_using_principal_and_composite_PK_is_still_used_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Principal_and_dependent_can_be_flipped_when_self_referencing +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Principal_and_dependent_can_be_flipped_when_self_referencing_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Principal_and_dependent_can_be_flipped_when_self_referencing_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Principal_and_dependent_cannot_be_flipped_twice +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Principal_and_dependent_cannot_be_flipped_twice_in_reverse_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Removes_existing_FK_when_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Removes_existing_unidirectional_many_to_one_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Removes_existing_unidirectional_one_to_many_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Replaces_existing_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_for_one_to_one_relationship_if_both_sides_have_matching_PKs +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_for_one_to_one_relationship_if_both_sides_have_matching_property_mixed +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_for_one_to_one_relationship_if_both_sides_have_matching_property_with_entity_type_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_for_one_to_one_relationship_if_both_sides_have_matching_property_with_navigation_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_for_one_to_one_relationship_if_no_side_has_matching_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_for_one_to_one_relationship_if_no_side_has_matching_property_anymore +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_if_ambiguous_FK_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_if_multiple_navigations_are_pointing_to_same_foreign_key_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_if_not_principal_or_dependent_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_if_specified_FK_count_does_not_match +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_if_specified_FK_types_do_not_match +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_if_specified_PK_count_does_not_match +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_if_specified_PK_types_do_not_match +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_on_ambiguous_FK_when_self_referencing +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_on_duplicate_navigation_when_self_referencing +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_on_existing_many_to_one_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_on_existing_one_to_many_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_on_two_ambiguous_FK_when_self_referencing +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Unspecified_FK_can_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Unspecified_FK_can_be_made_optional_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Unspecified_FK_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Uses_composite_PK_for_FK_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Ambiguous_relationship_between_owned_types_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Attempt_to_create_OwnsMany_on_a_reference_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Attempt_to_create_OwnsOne_on_a_collection_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_call_Owner_fluent_api_after_calling_Entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_chain_owned_type_collection_configurations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_another_relationship_to_owner +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_chained_ownerships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_chained_ownerships_different_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_fk_on_multiple_ownerships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_hierarchy_with_reference_navigations_as_owned +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_hierarchy_with_reference_navigations_as_owned_afterwards +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_multiple_ownerships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_on_derived_type_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_on_derived_types_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_one_to_many_owned_type_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_one_to_one_owned_type_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_one_to_one_relationship_from_an_owned_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_one_to_one_relationship_from_an_owned_type_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_entity_and_property_of_same_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_collection_from_an_owned_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_collection_using_nested_closure +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_collection_with_one_call +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_collection_with_one_call_afterwards +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_collection_without_explicit_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_collection_without_explicit_key_or_candidate +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_from_an_owned_type_collection(hasDataOverload: Array) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_from_an_owned_type_collection(hasDataOverload: Enumerable | Generic) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_from_an_owned_type_collection(hasDataOverload: Enumerable) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_from_an_owned_type_collection(hasDataOverload: Generic | Params) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_from_an_owned_type_collection(hasDataOverload: Generic) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_from_an_owned_type_collection(hasDataOverload: Params) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_inverse +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_using_nested_closure +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_ownership_foreign_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_property_and_owned_entity_of_same_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_relationship_with_PK_ValueConverter +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_self_ownership +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_single_owned_type_using_attribute +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_map_base_of_owned_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_map_base_of_owned_type_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_map_derived_of_owned_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_map_derived_of_owned_type_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_use_sproc_mapping_with_owned_reference +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_use_table_splitting_with_owned_reference +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Changing_ownership_uniqueness_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.CLR_base_type_can_be_owned_when_not_in_hierarchy +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Configuring_base_type_as_owned_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Deriving_from_owned_type_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Entity_mapped_to_json_and_unwound_afterwards_properly_cleans_up_its_state +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Inheritance_where_base_has_multiple_owned_types_works +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Json_entity_and_normal_owned_can_exist_side_by_side_on_same_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Json_entity_and_normal_owned_can_exist_side_to_side_on_same_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Json_entity_mapped_to_view +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Json_entity_nested_enums_have_conversions_to_int_by_default_ToJson_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Json_entity_nested_enums_have_conversions_to_int_by_default_ToJson_last +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Json_entity_with_custom_property_names +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Json_entity_with_nested_structure_same_property_names +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Json_entity_with_nested_structure_same_property_names_ +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Json_entity_with_tph_inheritance +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Navigations_on_owned_type_can_set_access_mode_using_expressions +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Navigations_on_owned_type_collection_can_set_access_mode +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Owned_type_collections_can_be_mapped_to_a_view +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Owned_type_collections_can_be_mapped_to_different_tables +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Owned_types_can_be_mapped_to_different_tables +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Owned_types_use_table_splitting_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.OwnedType_can_derive_from_Collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Owner_can_be_mapped_to_a_view +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: 16, defaultScale: 2, mainPrecision: 16, mainScale: 4, otherPrecision: 16, otherScale: 4, onePrecision: 16, oneScale: 4, manyPrecision: 16, manyScale: 4) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: 16, defaultScale: 2, mainPrecision: 17, mainScale: 4, otherPrecision: 17, otherScale: 4, onePrecision: 17, oneScale: 4, manyPrecision: 17, manyScale: 4) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: 17, defaultScale: 5, mainPrecision: 16, mainScale: 4, otherPrecision: 15, otherScale: 3, onePrecision: 14, oneScale: 2, manyPrecision: 13, manyScale: 1) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: 17, defaultScale: 5, mainPrecision: null, mainScale: null, otherPrecision: null, otherScale: null, onePrecision: null, oneScale: null, manyPrecision: null, manyScale: null) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: 17, defaultScale: null, mainPrecision: 16, mainScale: null, otherPrecision: 15, otherScale: null, onePrecision: 14, oneScale: null, manyPrecision: 13, manyScale: null) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: null, defaultScale: null, mainPrecision: 16, mainScale: 4, otherPrecision: 15, otherScale: 3, onePrecision: 14, oneScale: 2, manyPrecision: 13, manyScale: 1) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: null, defaultScale: null, mainPrecision: 16, mainScale: 4, otherPrecision: 16, otherScale: 4, onePrecision: 16, oneScale: 4, manyPrecision: 16, manyScale: 4) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: null, defaultScale: null, mainPrecision: 16, mainScale: null, otherPrecision: 15, otherScale: null, onePrecision: 14, oneScale: null, manyPrecision: 13, manyScale: null) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.PrimitiveCollectionBuilder_methods_can_be_chained +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.PrimitiveCollectionBuilder_methods_can_be_chained_on_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Reconfiguring_entity_type_as_owned_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Reconfiguring_owned_type_as_non_owned_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Removing_ambiguous_inverse_allows_navigations_to_be_discovered +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Shared_type_can_be_used_as_owned_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Shared_type_entity_types_with_FK_to_another_entity_works +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Shared_type_used_as_owned_type_throws_for_same_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Throws_on_FK_matching_two_relationships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Access_mode_can_be_overridden_at_entity_and_property_levels +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_add_shadow_primitive_collections_when_they_have_been_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_add_shadow_properties_when_they_have_been_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_call_PrimitiveCollection_on_a_field +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_call_Property_on_a_field +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_ignore_a_field +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_ignore_shadow_primitive_collections_when_they_have_been_added_explicitly +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_ignore_shadow_properties_when_they_have_been_added_explicitly +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_set_complex_property_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_set_custom_value_generator_for_primitive_collections +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_set_custom_value_generator_for_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_set_max_length_for_primitive_collections +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_set_max_length_for_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_set_max_length_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_set_precision_and_scale_for_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_set_precision_and_scale_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_set_primitive_collection_annotation_when_no_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_set_property_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_set_property_annotation_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_set_property_annotation_when_no_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_set_sentinel_for_primitive_collections +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_set_sentinel_for_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_set_sentinel_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_set_unbounded_max_length_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_set_unicode_for_primitive_collections +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_set_unicode_for_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_set_unicode_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_use_table_splitting +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_use_table_splitting_with_schema +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_use_TPH +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Complex_properties_can_be_configured_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Complex_properties_not_discovered_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Configuring_direction_on_RowsAffectedParameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Conflicting_sproc_rows_affected_parameter_and_result_column_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Conflicting_sproc_rows_affected_return_and_parameter_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Conflicting_sproc_rows_affected_return_and_result_column_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Duplicate_sproc_original_value_parameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Duplicate_sproc_parameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Duplicate_sproc_result_column_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Duplicate_sproc_rows_affected_parameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Duplicate_sproc_rows_affected_result_column_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.HasField_for_primitive_collection_throws_if_field_is_not_found +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.HasField_for_primitive_collection_throws_if_field_is_wrong_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.HasField_throws_if_field_is_not_found +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.HasField_throws_if_field_is_wrong_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.IEnumerable_properties_with_value_converter_set_are_not_discovered_as_complex_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Mapping_throws_for_empty_complex_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Mapping_throws_for_non_ignored_navigations_on_complex_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Non_nullable_properties_cannot_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Primitive_collections_are_required_by_default_only_if_CLR_type_is_nullable +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Primitive_collections_can_be_made_concurrency_tokens +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Primitive_collections_can_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Primitive_collections_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Primitive_collections_can_be_set_to_generate_values_on_Add +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Primitive_collections_can_have_field_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Primitive_collections_specified_by_string_are_shadow_properties_unless_already_known_to_be_CLR_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.PrimitiveCollectionBuilder_methods_can_be_chained +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Properties_are_required_by_default_only_if_CLR_type_is_nullable +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Properties_can_be_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Properties_can_be_ignored_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Properties_can_be_made_concurrency_tokens +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Properties_can_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Properties_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Properties_can_be_set_to_generate_values_on_Add +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Properties_can_have_access_mode_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Properties_can_have_custom_type_value_converter_type_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Properties_can_have_field_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Properties_can_have_non_generic_value_converter_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Properties_can_have_provider_type_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Properties_can_have_provider_type_set_for_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Properties_can_have_value_converter_configured_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Properties_can_have_value_converter_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Properties_can_have_value_converter_set_inline +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Properties_can_set_row_version +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Properties_specified_by_string_are_shadow_properties_unless_already_known_to_be_CLR_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.PropertyBuilder_methods_can_be_chained +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Throws_for_bad_value_generator_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Throws_for_optional_complex_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Throws_for_primitive_collection_with_bad_value_generator_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Throws_for_tuple +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Throws_for_value_generator_that_cannot_be_constructed +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Value_converter_configured_on_non_nullable_type_is_applied +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Value_converter_configured_on_nullable_type_overrides_non_nullable +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Value_converter_type_is_checked +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Adding_conflicting_check_constraint_to_derived_type_before_base_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Adding_conflicting_check_constraint_to_derived_type_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Base_type_can_be_discovered_after_creating_foreign_keys_on_derived +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Base_types_are_mapped_correctly_if_discovered_last +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_add_check_constraints +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_create_relationship_between_base_type_and_derived_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_get_set_discriminator_mapping_is_complete +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_ignore_base_entity_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_map_derived_self_ref_many_to_one +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_map_derived_types_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_match_navigation_to_derived_type_with_inverse_on_base +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_override_TPC_with_TPH +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_promote_shadow_fk_to_the_base_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_reconfigure_inherited_intraHierarchical_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_remove_objects_in_derived_type_which_was_set_using_data_annotation_while_setting_base_type_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_set_and_remove_base_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_specify_discriminator_values_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_specify_discriminator_without_derived_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_use_shadow_FK_that_collides_with_convention_shadow_FK_on_other_derived_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_use_table_splitting +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Cannot_remove_objects_in_derived_type_which_was_set_using_explicit_while_setting_base_type_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Index_convention_run_for_fk_when_derived_type_discovered_before_base_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Index_convention_sets_filter_for_unique_index_when_base_type_changed +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Index_removed_when_covered_by_an_inherited_foreign_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Index_removed_when_covered_by_an_inherited_index +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Inherited_clr_properties_are_mapped_to_the_same_column +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Ordering_of_entityType_discovery_does_not_affect_key_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Pulling_relationship_to_a_derived_type_creates_relationships_on_other_derived_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Pulling_relationship_to_a_derived_type_many_to_one_creates_relationships_on_other_derived_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Pulling_relationship_to_a_derived_type_one_to_one_creates_relationship_on_base +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Pulling_relationship_to_a_derived_type_one_to_one_with_fk_creates_relationship_on_base +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Pulling_relationship_to_a_derived_type_reverted_creates_relationships_on_other_derived_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Pulling_relationship_to_a_derived_type_with_fk_creates_relationships_on_other_derived_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Relationships_are_discovered_on_the_base_entity_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Relationships_on_derived_types_are_discovered_first_if_base_is_one_sided +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Removing_a_key_triggers_fk_discovery_on_derived_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Removing_derived_removes_it_from_directly_derived_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Setting_base_type_handles_require_value_generator_properly +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Setting_base_type_to_null_fixes_relationships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.TPC_identifying_FKs_are_created_on_all_tables +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.TPT_identifying_FK_is_created_only_on_declaring_table +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.TPT_index_can_use_inherited_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Can_configure_join_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Can_configure_join_type_with_implicit_join_relationships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Can_configure_shared_join_type_with_implicit_join_relationships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Can_ignore_existing_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Can_use_ForeignKeyAttribute_with_InversePropertyAttribute +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Can_use_implicit_shared_type_as_join_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Can_use_implicit_shared_type_with_default_name_and_implicit_relationships_as_join_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Can_use_implicit_shared_type_with_default_name_as_join_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Can_use_implicit_shared_type_with_implicit_relationships_as_join_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Can_use_shared_type_as_join_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Discovers_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Finds_existing_navigations_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Finds_existing_navigations_and_uses_associated_FK_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Finds_existing_navigations_and_uses_associated_FK_with_implicit_relationships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.FK_properties_matching_navigations_are_discovered_on_explicit_join_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.FK_properties_matching_types_are_discovered_on_explicit_join_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.ForeignKeyAttribute_configures_the_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.ForeignKeyAttribute_does_not_force_convention_join_table_inclusion_matching_key_names +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.ForeignKeyAttribute_does_not_force_convention_join_table_inclusion_mismatching_key_names +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.IsRequired_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Join_entity_type_uses_default_schema_if_related_are_different +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Join_entity_type_uses_same_schema +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Join_type_is_automatically_configured_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Join_type_is_not_automatically_configured_when_navigations_are_ambiguous +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Many_to_many_with_a_shadow_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Many_to_many_with_no_navigations_configured +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Many_to_many_with_only_Has_navigation_configured +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Many_to_many_with_only_With_navigation_configured +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Navigation_properties_can_set_access_mode +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Overrides_ForeignKeyAttribute +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Skip_navigation_field_can_be_set_via_attribute +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Throws_for_conflicting_many_to_one_on_left +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Throws_for_conflicting_many_to_one_on_right +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Throws_for_self_ref_using_self +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Throws_for_self_ref_with_same_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Unconfigured_many_to_many_navigations_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.UsingEntity_with_shared_type_passed_when_marked_as_shared_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.UsingEntity_with_shared_type_passes_when_configured_as_shared +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Access_mode_can_be_overridden_at_entity_and_navigation_property_levels +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Can_add_annotations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Can_change_delete_behavior +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Can_have_both_convention_properties_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Can_have_both_convention_properties_specified_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Can_have_FK_by_convention_specified_with_explicit_principal_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Can_have_FK_by_convention_specified_with_explicit_principal_key_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Can_have_principal_key_by_convention_specified_with_explicit_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Can_have_principal_key_by_convention_specified_with_explicit_PK_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Can_set_foreign_key_property_when_matching_property_added +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Can_use_alternate_composite_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Can_use_alternate_composite_key_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Can_use_explicitly_specified_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Can_use_non_PK_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_both_navigations_and_creates_composite_FK_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_both_navigations_and_creates_FK_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_both_navigations_and_creates_new_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_both_navigations_and_creates_shadow_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_both_navigations_and_does_not_use_existing_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_both_navigations_and_finds_existing_composite_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_both_navigations_and_matches_shadow_FK_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_both_navigations_and_overrides_existing_FK_if_uniqueness_does_not_match +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_both_navigations_and_uses_specified_FK_even_if_found_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_both_navigations_with_existing_FK_not_found_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_relationship_on_existing_FK_is_using_different_principal_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_relationship_on_existing_FK_is_using_different_principal_key_different_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_relationship_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_relationship_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_relationship_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_relationship_with_no_navigations_and_specified_composite_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_relationship_with_no_navigations_and_specified_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_shadow_FK_property_with_non_shadow_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_shadow_FK_property_with_shadow_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_shadow_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_shadow_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_shadow_FK_with_no_navigations_with +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_shadow_property_for_foreign_key_according_to_navigation_to_principal_name_when_present +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_shadow_property_for_foreign_key_according_to_target_type_when_navigation_to_principal_name_not_present +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_specified_composite_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_specified_composite_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_specified_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_specified_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Explicitly_set_shadow_FK_name_is_preserved_with_HasPrincipalKey +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Finds_existing_navigation_to_dependent_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Finds_existing_navigation_to_principal_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Finds_existing_navigations_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Finds_existing_navigations_and_uses_associated_FK_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Handles_identity_correctly_while_removing_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Navigation_properties_can_set_access_mode +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Non_nullable_FK_are_required_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Non_nullable_FK_can_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Non_nullable_FK_can_be_made_optional_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Nullable_FK_are_optional_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Nullable_FK_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.One_to_many_relationship_has_no_ambiguity_explicit +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Relationships_discovered_when_ambiguity_on_the_inverse_is_resolved +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Removes_existing_unidirectional_one_to_one_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Resolves_ambiguous_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Throws_on_existing_one_to_one_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Access_mode_can_be_overridden_at_entity_and_primitive_collection_levels +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Access_mode_can_be_overridden_at_entity_and_property_levels +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_add_contained_indexes +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_add_index +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_add_index_when_no_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_add_multiple_indexes +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_add_seed_data_anonymous_objects +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_add_seed_data_anonymous_objects_indexed_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_add_seed_data_anonymous_objects_indexed_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_add_seed_data_objects +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_add_seed_data_objects_indexed_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_add_seed_data_objects_indexed_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_add_shadow_properties_when_they_have_been_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_add_shared_type_entity_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_call_PrimitiveCollection_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_call_Property_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_get_entity_builder_for_clr_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_ignore_a_field_on_a_keyless_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_ignore_a_field_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_ignore_a_property_that_is_part_of_explicit_entity_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_ignore_explicit_interface_implementation_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_ignore_shadow_properties_when_they_have_been_added_explicitly +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_override_navigations_as_primitive_collections +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_override_navigations_as_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_alternate_key_for_primitive_collection_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_alternate_key_from_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_alternate_key_from_clr_property_when_property_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_alternate_key_from_property_name_when_no_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_alternate_key_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_collation_for_primitive_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_collation_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_composite_alternate_key_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_composite_entity_key_from_clr_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_composite_entity_key_from_property_names_when_mixed_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_composite_index_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_composite_key_for_primitive_collection_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_composite_key_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_custom_value_generator_for_primitive_collections +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_custom_value_generator_for_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_element_type_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_entity_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_entity_key_from_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_entity_key_from_clr_property_when_property_ignored_on_keyless +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_entity_key_from_property_name_when_no_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_entity_key_with_annotations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_fixed_length_for_primitive_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_fixed_length_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_index_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_key_for_primitive_collection_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_key_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_max_length_for_primitive_collections +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_max_length_for_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_max_length_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_model_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_precision_and_scale_for_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_precision_and_scale_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_primary_key_by_convention_for_user_specified_shadow_primitive_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_primary_key_by_convention_for_user_specified_shadow_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_primitive_collection_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_primitive_collection_annotation_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_primitive_collection_annotation_when_no_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_property_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_property_annotation_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_property_annotation_when_no_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_sentinel_for_primitive_collections +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_sentinel_for_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_sentinel_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_store_type_for_primitive_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_store_type_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_unbounded_max_length_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_unicode_for_primitive_collections +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_unicode_for_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_unicode_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_upgrade_candidate_key_to_primary_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_use_table_splitting +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_use_table_splitting_with_schema +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Cannot_add_shared_type_when_non_shared_exists +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Configuring_direction_on_RowsAffectedParameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Conflicting_sproc_rows_affected_parameter_and_result_column_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Conflicting_sproc_rows_affected_parameter_and_return_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Conflicting_sproc_rows_affected_result_column_and_parameter_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Conflicting_sproc_rows_affected_result_column_and_return_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Conflicting_sproc_rows_affected_return_and_parameter_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Conflicting_sproc_rows_affected_return_and_result_column_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Conventions_can_be_added +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Conventions_can_be_removed +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Conventions_can_be_removed_by_generic_method +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Conventions_can_be_replaced +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Conversion_on_base_property_prevents_primitive_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Conversion_on_base_property_prevents_primitive_collection_when_base_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Duplicate_sproc_original_value_parameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Duplicate_sproc_parameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Duplicate_sproc_result_column_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Duplicate_sproc_rows_affected_parameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Duplicate_sproc_rows_affected_result_column_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Element_types_are_nullable_by_default_if_the_type_is_nullable +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Element_types_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Element_types_can_have_custom_type_value_converter_type_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Element_types_can_have_max_length +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Element_types_can_have_non_generic_value_converter_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Element_types_can_have_precision_and_scale +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Element_types_can_have_provider_type_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Element_types_can_have_unicode_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Element_types_have_default_precision_and_scale +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Element_types_have_default_unicode +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Element_types_have_no_max_length_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Entity_key_on_secondary_property_is_discovered_by_convention_when_first_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Entity_key_on_shadow_property_is_discovered_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.EntityType_name_is_stored_culture_invariantly +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.HasField_for_primitive_collection_throws_if_field_is_not_found +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.HasField_for_primitive_collection_throws_if_field_is_wrong_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.HasField_throws_if_field_is_not_found +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.HasField_throws_if_field_is_wrong_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.IEnumerable_properties_with_value_converter_set_are_not_discovered_as_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Ignoring_a_base_type_removes_relationships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Ignoring_a_navigation_property_removes_discovered_entity_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Ignoring_a_navigation_property_removes_discovered_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Indexes_can_have_same_name_across_tables +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Int32_cannot_be_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Key_properties_cannot_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Mapping_for_primitive_collection_ignores_ignored_array +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Mapping_ignores_ignored_array +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Mapping_ignores_ignored_three_dimensional_array +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Mapping_ignores_ignored_two_dimensional_array +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Mapping_throws_for_non_ignored_three_dimensional_array +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Model_is_readonly_after_Finalize +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Nested_primitive_collection_are_discovered_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Non_nullable_properties_cannot_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Object_cannot_be_configured_as_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Object_cannot_be_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Primitive_collections_are_required_by_default_only_if_CLR_type_is_nullable +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Primitive_collections_can_be_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Primitive_collections_can_be_made_concurrency_tokens +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Primitive_collections_can_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Primitive_collections_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Primitive_collections_can_be_set_to_generate_values_on_Add +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Primitive_collections_can_have_access_mode_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Primitive_collections_can_have_field_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Primitive_collections_can_have_value_converter_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Primitive_collections_specified_by_string_are_shadow_properties_unless_already_known_to_be_CLR_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.PrimitiveCollection_Key_properties_cannot_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.PrimitiveCollectionBuilder_methods_can_be_chained +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Private_primitive_collection_is_not_discovered_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Private_property_is_not_discovered_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_are_required_by_default_only_if_CLR_type_is_nullable +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_be_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_be_ignored_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_be_made_concurrency_tokens +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_be_set_to_generate_values_on_Add +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_have_access_mode_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_have_custom_type_value_converter_type_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_have_field_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_have_non_generic_value_converter_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_have_provider_type_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_have_provider_type_set_for_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_have_value_converter_configured_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_have_value_converter_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_have_value_converter_set_inline +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_set_row_version +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_specified_by_string_are_shadow_properties_unless_already_known_to_be_CLR_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Property_bag_cannot_be_configured_as_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.PropertyBuilder_methods_can_be_chained +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Setting_alternate_key_makes_properties_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Setting_sentinel_throws_for_noncompatible +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Setting_sentinel_throws_for_null_on_nonnullable +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Throws_for_bad_value_generator_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Throws_for_bad_value_generator_type_for_primitive_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Throws_for_conflicting_base_configurations_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Throws_for_int_keyed_dictionary +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Throws_for_primitive_collection_for_value_generator_that_cannot_be_constructed +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Throws_for_value_generator_that_cannot_be_constructed +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Value_converter_configured_on_base_type_is_not_applied +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Value_converter_configured_on_non_nullable_type_is_applied +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Value_converter_configured_on_nullable_type_overrides_non_nullable +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Value_converter_type_is_checked +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Value_converter_type_on_primitive_collection_is_checked +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Ambiguous_relationship_candidate_does_not_block_creating_further_relationships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Annotations_are_preserved_when_rebuilding +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Attempt_to_configure_Navigation_property_which_is_actually_a_Property_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_add_annotations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_change_delete_behavior +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_exclude_navigation_pointed_by_foreign_key_attribute_from_explicit_configuration +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_exclude_navigation_with_foreign_key_attribute_from_explicit_configuration +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_exclude_navigation_with_foreign_key_attribute_on_principal_type_from_explicit_configuration +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_have_both_convention_properties_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_have_both_convention_properties_specified_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_have_FK_by_convention_specified_with_explicit_principal_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_have_FK_by_convention_specified_with_explicit_principal_key_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_have_FK_semi_specified_with_explicit_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_have_principal_key_by_convention_replaced_with_primary_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_have_principal_key_by_convention_specified_with_explicit_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_have_principal_key_by_convention_specified_with_explicit_PK_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_set_foreign_key_property_when_matching_property_added +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_specify_requiredness_after_OnDelete +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_use_alternate_composite_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_use_alternate_composite_key_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_use_explicitly_specified_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_use_non_PK_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_both_navigations_and_creates_composite_FK_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_both_navigations_and_creates_FK_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_both_navigations_and_creates_shadow_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_both_navigations_and_matches_shadow_FK_property_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_both_navigations_and_overrides_existing_FK_when_uniqueness_does_not_match +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_both_navigations_and_uses_existing_composite_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_both_navigations_and_uses_existing_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_both_navigations_and_uses_existing_FK_not_found_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_both_navigations_and_uses_specified_FK_even_if_found_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_one_to_many_relationship_with_single_ref_as_dependent_to_principal_if_matching_entity_name_properties_are_on_navigation_side +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_one_to_many_relationship_with_single_ref_as_dependent_to_principal_if_matching_navigation_name_properties_are_on_navigation_side +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_one_to_many_relationship_with_single_ref_as_dependent_to_principal_if_matching_properties_are_on_both_sides +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_one_to_many_relationship_with_single_ref_as_dependent_to_principal_if_no_matching_properties_either_side +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_overlapping_foreign_keys_with_different_nullability +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_relationship_on_existing_FK_is_using_different_principal_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_relationship_on_existing_FK_is_using_different_principal_key_different_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_relationship_with_both_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_relationship_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_relationship_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_relationship_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_relationship_with_no_navigations_and_specified_composite_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_relationship_with_no_navigations_and_specified_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_shadow_fk_configuring_using_ForeignKeyAttribute +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_shadow_FK_property_with_non_shadow_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_shadow_FK_property_with_shadow_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_shadow_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_shadow_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_shadow_FK_with_no_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_shadow_property_for_foreign_key_according_to_navigation_to_principal_name_when_present +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_shadow_property_for_foreign_key_according_to_target_type_when_navigation_to_principal_name_not_present +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_specified_composite_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_specified_composite_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_specified_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_specified_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Do_not_match_non_unique_FK_when_overlap_with_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Explicit_principal_key_is_not_replaced_with_new_primary_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Finds_existing_navigation_to_dependent_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Finds_existing_navigation_to_principal_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Finds_existing_navigations_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Finds_existing_navigations_and_uses_associated_FK_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Handles_identity_correctly_while_removing_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.HasMany_with_a_collection_navigation_CLR_property_to_derived_type_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.HasNoKey_call_on_principal_entity_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.HasNoKey_call_on_principal_with_navigation_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Keyless_type_discovered_before_referenced_entity_type_does_not_leave_temp_id +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Keyless_type_with_unmapped_collection_navigations_does_not_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Navigation_properties_can_set_access_mode +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Navigation_to_shared_type_is_not_discovered_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Non_nullable_FK_are_required_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Non_nullable_FK_can_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Non_nullable_FK_can_be_made_optional_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Nullable_FK_are_optional_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Nullable_FK_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Nullable_FK_overrides_NRT_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.One_to_many_relationship_has_no_ambiguity_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.One_to_many_relationship_has_no_ambiguity_explicit +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Principal_key_by_convention_is_not_replaced_with_new_incompatible_primary_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Reference_navigation_from_keyless_entity_type_works +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.RemoveKey_does_not_add_back_foreign_key_pointing_to_the_same_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Removes_existing_unidirectional_one_to_one_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Resolves_ambiguous_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Shadow_foreign_keys_to_generic_types_have_terrible_names_that_should_not_change +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Shadow_property_created_for_foreign_key_is_nullable +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Throws_on_existing_many_to_many +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Throws_on_existing_one_to_one_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Throws_on_keyless_type_as_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Throws_when_foreign_key_references_shadow_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.WithMany_call_on_keyless_entity_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.WithMany_pointing_to_keyless_entity_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_add_annotations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_be_defined_before_the_PK_from_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_be_defined_before_the_PK_from_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_change_delete_behavior +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_create_relationship_if_dependent_has_matching_property_with_entity_type_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_create_relationship_if_dependent_has_matching_property_with_navigation_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_create_relationship_if_foreign_key_attribute_is_used +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_create_relationship_if_navigations_have_same_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_create_relationship_if_user_specifies_principal_key_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_create_relationship_if_user_specify_foreign_key_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_create_self_referencing_relationship_without_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_create_two_FKs_using_the_same_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_have_both_alternate_keys_specified_explicitly +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_have_both_alternate_keys_specified_explicitly_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_have_both_keys_specified_explicitly +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_have_both_keys_specified_explicitly_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_have_dependent_side_specified_explicitly_on_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_invert_relationship_if_principal_has_matching_property_with_entity_type_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_invert_relationship_if_principal_has_matching_property_with_navigation_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_specify_shadow_fk_before_configuring_principal_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_specify_shadow_fk_before_reconfiguring_principal_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_specify_shadow_identifying_fk +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_use_alternate_composite_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_use_alternate_composite_key_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_use_alternate_principal_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_use_pk_as_fk_if_principal_end_is_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_use_PK_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Configuring_FK_properties_as_PK_sets_DeleteBehavior_Cascade +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Configuring_principal_type_as_keyless_inverts_the_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Configuring_principal_type_as_keyless_throws_if_not_invertible +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Configuring_principal_type_as_keyless_throws_when_there_is_an_explicit_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_both_navigations_and_creates_composite_FK_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_both_navigations_and_creates_new_FK_when_not_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_both_navigations_and_new_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_both_navigations_and_new_FK_over_PK_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_both_navigations_and_overrides_existing_FK_when_uniqueness_does_not_match +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_both_navigations_and_removes_existing_FK_when_not_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_both_navigations_and_shadow_FK_if_existing_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_both_navigations_and_specified_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_both_navigations_and_uses_existing_composite_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_both_navigations_and_uses_existing_FK_not_found_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_both_navigations_and_uses_specified_FK_even_if_found_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_both_navigations_and_uses_specified_FK_even_if_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_composite_FK_when_specified_on_principal_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_composite_FK_when_specified_on_principal_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_composite_FK_when_specified_on_principal_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_field_backed_FK_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_FK_when_principal_and_foreign_key_specified_on_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_FK_when_principal_and_foreign_key_specified_on_dependent_in_reverse_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_FK_when_principal_and_foreign_key_specified_on_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_FK_when_specified_on_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_FK_when_specified_on_dependent_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_FK_when_specified_on_dependent_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_FK_when_specified_on_dependent_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_FK_when_specified_on_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_FK_when_specified_on_principal_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_FK_when_specified_on_principal_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_FK_when_specified_on_principal_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_index_even_if_covered_by_an_alternate_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_one_to_one_relationship_with_single_ref_as_principal_to_dependent_if_matching_properties_are_on_the_other_side +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_principal_key_when_specified_on_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_principal_key_when_specified_on_dependent_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_principal_key_when_specified_on_dependent_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_principal_key_when_specified_on_dependent_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_principal_key_when_specified_on_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_principal_key_when_specified_on_principal_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_principal_key_when_specified_on_principal_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_principal_key_when_specified_on_principal_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_relationship_on_existing_FK_if_using_different_principal_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_relationship_on_existing_FK_if_using_different_principal_key_different_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_relationship_with_navigation_to_dependent_and_new_FK_from_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_relationship_with_navigation_to_dependent_and_new_FK_from_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_relationship_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_relationship_with_specified_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_relationship_with_specified_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_relationship_with_specified_FK_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_self_referencing_FK_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_self_referencing_FK_by_convention_inverted +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_self_referencing_FK_on_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_self_referencing_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_self_referencing_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_shadow_FK_property_with_non_shadow_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_shadow_FK_property_with_shadow_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Does_not_use_existing_FK_when_principal_key_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Does_not_use_pk_as_fk_if_principal_end_is_not_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Finds_existing_navigation_to_dependent_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Finds_existing_navigations_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Finds_existing_navigations_and_uses_associated_FK_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Foreign_key_properties_are_not_discovered_for_one_to_one_relationship_with_ambiguous_principal_end +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Handles_identity_correctly_while_removing_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Ignoring_properties_on_principal_resolves_ambiguity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Ignoring_properties_resolves_ambiguity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Inverse_discovered_after_entity_unignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.IsRequired_throws_principal_end_is_ambiguous +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Multiple_self_referencing_navigations_throw_as_ambiguous +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Navigation_properties_can_set_access_mode +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Navigation_to_shared_type_is_not_discovered_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Non_nullable_FK_are_required_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Non_nullable_FK_can_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Non_nullable_FK_can_be_made_optional_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Nullable_FK_are_optional_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Nullable_FK_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.OneToOne_can_have_PK_explicitly_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Overrides_FK_if_specified_PK_count_does_not_match_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Overrides_FK_if_specified_PK_types_do_not_match_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Overrides_PK_if_specified_FK_count_does_not_match_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Overrides_PK_if_specified_FK_types_do_not_match_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Principal_and_dependent_can_be_flipped_and_composite_PK_is_still_used_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Principal_and_dependent_can_be_flipped_twice_in_reverse_order_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Principal_and_dependent_can_be_flipped_twice_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Principal_and_dependent_can_be_flipped_using_principal_and_composite_PK_is_still_used_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Principal_and_dependent_can_be_flipped_when_self_referencing +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Principal_and_dependent_can_be_flipped_when_self_referencing_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Principal_and_dependent_can_be_flipped_when_self_referencing_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Principal_and_dependent_cannot_be_flipped_twice +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Principal_and_dependent_cannot_be_flipped_twice_in_reverse_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Removes_existing_FK_when_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Removes_existing_unidirectional_many_to_one_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Removes_existing_unidirectional_one_to_many_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Replaces_existing_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_for_one_to_one_relationship_if_both_sides_have_matching_PKs +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_for_one_to_one_relationship_if_both_sides_have_matching_property_mixed +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_for_one_to_one_relationship_if_both_sides_have_matching_property_with_entity_type_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_for_one_to_one_relationship_if_both_sides_have_matching_property_with_navigation_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_for_one_to_one_relationship_if_no_side_has_matching_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_for_one_to_one_relationship_if_no_side_has_matching_property_anymore +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_if_ambiguous_FK_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_if_multiple_navigations_are_pointing_to_same_foreign_key_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_if_not_principal_or_dependent_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_if_specified_FK_count_does_not_match +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_if_specified_FK_types_do_not_match +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_if_specified_PK_count_does_not_match +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_if_specified_PK_types_do_not_match +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_on_ambiguous_FK_when_self_referencing +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_on_duplicate_navigation_when_self_referencing +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_on_existing_many_to_one_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_on_existing_one_to_many_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_on_two_ambiguous_FK_when_self_referencing +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Unspecified_FK_can_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Unspecified_FK_can_be_made_optional_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Unspecified_FK_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Uses_composite_PK_for_FK_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Ambiguous_relationship_between_owned_types_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Attempt_to_create_OwnsMany_on_a_reference_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Attempt_to_create_OwnsOne_on_a_collection_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_call_Owner_fluent_api_after_calling_Entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_chain_owned_type_collection_configurations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_another_relationship_to_owner +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_chained_ownerships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_chained_ownerships_different_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_fk_on_multiple_ownerships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_hierarchy_with_reference_navigations_as_owned +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_hierarchy_with_reference_navigations_as_owned_afterwards +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_multiple_ownerships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_on_derived_type_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_on_derived_types_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_one_to_many_owned_type_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_one_to_one_owned_type_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_one_to_one_relationship_from_an_owned_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_one_to_one_relationship_from_an_owned_type_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_entity_and_property_of_same_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_collection_from_an_owned_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_collection_using_nested_closure +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_collection_with_one_call +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_collection_with_one_call_afterwards +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_collection_without_explicit_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_collection_without_explicit_key_or_candidate +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_from_an_owned_type_collection(hasDataOverload: Array) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_from_an_owned_type_collection(hasDataOverload: Enumerable | Generic) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_from_an_owned_type_collection(hasDataOverload: Enumerable) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_from_an_owned_type_collection(hasDataOverload: Generic | Params) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_from_an_owned_type_collection(hasDataOverload: Generic) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_from_an_owned_type_collection(hasDataOverload: Params) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_inverse +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_using_nested_closure +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_ownership_foreign_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_property_and_owned_entity_of_same_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_relationship_with_PK_ValueConverter +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_self_ownership +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_single_owned_type_using_attribute +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_map_base_of_owned_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_map_base_of_owned_type_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_map_derived_of_owned_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_map_derived_of_owned_type_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_use_sproc_mapping_with_owned_reference +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_use_table_splitting_with_owned_reference +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Changing_ownership_uniqueness_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.CLR_base_type_can_be_owned_when_not_in_hierarchy +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Configuring_base_type_as_owned_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Deriving_from_owned_type_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Entity_mapped_to_json_and_unwound_afterwards_properly_cleans_up_its_state +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Inheritance_where_base_has_multiple_owned_types_works +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Json_entity_and_normal_owned_can_exist_side_by_side_on_same_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Json_entity_and_normal_owned_can_exist_side_to_side_on_same_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Json_entity_mapped_to_view +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Json_entity_nested_enums_have_conversions_to_int_by_default_ToJson_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Json_entity_nested_enums_have_conversions_to_int_by_default_ToJson_last +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Json_entity_with_custom_property_names +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Json_entity_with_nested_structure_same_property_names +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Json_entity_with_nested_structure_same_property_names_ +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Json_entity_with_tph_inheritance +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Navigations_on_owned_type_can_set_access_mode_using_expressions +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Navigations_on_owned_type_collection_can_set_access_mode +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Owned_type_collections_can_be_mapped_to_a_view +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Owned_type_collections_can_be_mapped_to_different_tables +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Owned_types_can_be_mapped_to_different_tables +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Owned_types_use_table_splitting_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.OwnedType_can_derive_from_Collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Owner_can_be_mapped_to_a_view +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: 16, defaultScale: 2, mainPrecision: 16, mainScale: 4, otherPrecision: 16, otherScale: 4, onePrecision: 16, oneScale: 4, manyPrecision: 16, manyScale: 4) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: 16, defaultScale: 2, mainPrecision: 17, mainScale: 4, otherPrecision: 17, otherScale: 4, onePrecision: 17, oneScale: 4, manyPrecision: 17, manyScale: 4) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: 17, defaultScale: 5, mainPrecision: 16, mainScale: 4, otherPrecision: 15, otherScale: 3, onePrecision: 14, oneScale: 2, manyPrecision: 13, manyScale: 1) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: 17, defaultScale: 5, mainPrecision: null, mainScale: null, otherPrecision: null, otherScale: null, onePrecision: null, oneScale: null, manyPrecision: null, manyScale: null) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: 17, defaultScale: null, mainPrecision: 16, mainScale: null, otherPrecision: 15, otherScale: null, onePrecision: 14, oneScale: null, manyPrecision: 13, manyScale: null) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: null, defaultScale: null, mainPrecision: 16, mainScale: 4, otherPrecision: 15, otherScale: 3, onePrecision: 14, oneScale: 2, manyPrecision: 13, manyScale: 1) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: null, defaultScale: null, mainPrecision: 16, mainScale: 4, otherPrecision: 16, otherScale: 4, onePrecision: 16, oneScale: 4, manyPrecision: 16, manyScale: 4) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: null, defaultScale: null, mainPrecision: 16, mainScale: null, otherPrecision: 15, otherScale: null, onePrecision: 14, oneScale: null, manyPrecision: 13, manyScale: null) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.PrimitiveCollectionBuilder_methods_can_be_chained +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.PrimitiveCollectionBuilder_methods_can_be_chained_on_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Reconfiguring_entity_type_as_owned_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Reconfiguring_owned_type_as_non_owned_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Removing_ambiguous_inverse_allows_navigations_to_be_discovered +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Shared_type_can_be_used_as_owned_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Shared_type_entity_types_with_FK_to_another_entity_works +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Shared_type_used_as_owned_type_throws_for_same_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Throws_on_FK_matching_two_relationships EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.BasicManyToManyTest EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.ManyToManyAlternateKeysTest EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.ManyToManyNamedForeignKeyColumnsTest @@ -8438,6 +10055,16 @@ EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Using_bad_IPropert EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Using_bad_IProperty_instances_throws_derived EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Using_bad_property_names_throws EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Using_bad_property_names_throws_derived +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state_with_inheritance(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state_with_inheritance(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state_with_inheritance(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state_with_inheritance(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state_with_inheritance(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state_with_inheritance(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state_with_inheritance(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state_with_inheritance(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state_with_inheritance(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state_with_inheritance(state: Unchanged, async: True) EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state(state: Added, async: False) EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state(state: Added, async: True) EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state(state: Deleted, async: False) @@ -8449,6 +10076,125 @@ EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_relo EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state(state: Unchanged, async: False) EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state(state: Unchanged, async: True) EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_in_cloned_dictionary_can_be_set_with_IProperty +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Can_query_hierarchy_with_non_nullable_property_on_derived +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Hierarchy_query_with_abstract_type_sibling_TPC(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Hierarchy_query_with_abstract_type_sibling_TPC(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Hierarchy_query_with_abstract_type_sibling_TPT(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Hierarchy_query_with_abstract_type_sibling_TPT(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Hierarchy_query_with_abstract_type_sibling(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Hierarchy_query_with_abstract_type_sibling(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Projecting_correlated_collection_along_with_non_mapped_property +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Projecting_one_of_two_similar_complex_types_picks_the_correct_one +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Projection_failing_with_EnumToStringConverter +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Setting_IsUnicode_generates_unicode_literal_in_SQL +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Two_similar_complex_properties_projected_with_split_query1 +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Two_similar_complex_properties_projected_with_split_query2 +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocJsonQueryJetTest.Accessing_missing_navigation_works(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocJsonQueryJetTest.Accessing_missing_navigation_works(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocJsonQueryJetTest.Junk_in_json_basic_no_tracking(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocJsonQueryJetTest.Junk_in_json_basic_no_tracking(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocJsonQueryJetTest.Junk_in_json_basic_tracking(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocJsonQueryJetTest.Junk_in_json_basic_tracking(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocJsonQueryJetTest.Not_ICollection_basic_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocJsonQueryJetTest.Not_ICollection_basic_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocJsonQueryJetTest.Optional_json_properties_materialized_as_null_when_the_element_in_json_is_not_present(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocJsonQueryJetTest.Optional_json_properties_materialized_as_null_when_the_element_in_json_is_not_present(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocJsonQueryJetTest.Project_json_with_no_properties +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocJsonQueryJetTest.Project_proxies_entity_with_json(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocJsonQueryJetTest.Project_proxies_entity_with_json(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocJsonQueryJetTest.Query_with_nested_json_collection_mapped_to_private_field_via_IReadOnlyList +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocJsonQueryJetTest.Read_json_entity_collection_with_enum_properties_with_legacy_values(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocJsonQueryJetTest.Read_json_entity_collection_with_enum_properties_with_legacy_values(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocJsonQueryJetTest.Read_json_entity_with_enum_properties_with_legacy_values(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocJsonQueryJetTest.Read_json_entity_with_enum_properties_with_legacy_values(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocJsonQueryJetTest.Shadow_properties_basic_no_tracking(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocJsonQueryJetTest.Shadow_properties_basic_no_tracking(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocJsonQueryJetTest.Shadow_properties_basic_tracking(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocJsonQueryJetTest.Shadow_properties_basic_tracking(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocJsonQueryJetTest.Tricky_buffering_basic(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocJsonQueryJetTest.Tricky_buffering_basic(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Aggregate_over_subquery_in_group_by_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Aggregate_over_subquery_in_group_by_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Average_with_cast +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Bool_discriminator_column_works(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Bool_discriminator_column_works(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Comparing_byte_column_to_enum_in_vb_creating_double_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Comparing_byte_column_to_enum_in_vb_creating_double_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Comparing_enum_casted_to_byte_with_int_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Comparing_enum_casted_to_byte_with_int_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Conditional_expression_with_conditions_does_not_collapse_if_nullable_bool +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.DateTime_Contains_with_smalldatetime_generates_correct_literal +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Discriminator_type_is_handled_correctly +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Explicitly_compiled_query_does_not_add_cache_entry +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Filter_on_nested_DTO_with_interface_gets_simplified_correctly(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Filter_on_nested_DTO_with_interface_gets_simplified_correctly(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Flattened_GroupJoin_on_interface_generic(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Flattened_GroupJoin_on_interface_generic(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.GroupBy_Aggregate_over_navigations_repeated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.GroupBy_Aggregate_over_navigations_repeated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.GroupJoin_Anonymous_projection_GroupBy_Aggregate_join_elimination +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Include_group_join_is_per_query_context +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Include_group_join_is_per_query_context_async +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Inlined_dbcontext_is_not_leaking +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Left_join_with_missing_key_values_on_both_sides(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Left_join_with_missing_key_values_on_both_sides(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Nested_queries_does_not_cause_concurrency_exception_sync(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Nested_queries_does_not_cause_concurrency_exception_sync(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.New_instances_in_projection_are_not_shared_across_results +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Null_check_removal_in_ternary_maintain_appropriate_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Null_check_removal_in_ternary_maintain_appropriate_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Parameterless_ctor_on_inner_DTO_gets_called_for_every_row +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Pushdown_does_not_add_grouping_key_to_projection_when_distinct_is_applied(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Pushdown_does_not_add_grouping_key_to_projection_when_distinct_is_applied(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Query_cache_entries_are_evicted_as_necessary +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.QueryBuffer_requirement_is_computed_when_querying_base_type_while_derived_type_has_shadow_prop +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.SaveChangesAsync_accepts_changes_with_ConfigureAwait_true +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Shadow_property_with_inheritance +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Subquery_first_member_compared_to_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Subquery_first_member_compared_to_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Thread_safety_in_relational_command_cache +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Can_ignore_invalid_include_path_error +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Collection_without_setter_materialized_correctly +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Correlated_collection_correctly_associates_entities_with_byte_array_keys +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Count_member_over_IReadOnlyCollection_works(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Count_member_over_IReadOnlyCollection_works(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Customer_collections_materialize_properly +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Cycles_in_auto_include +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Include_collection_optional_reference_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Include_collection_with_OfType_base +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Include_collection_works_when_defined_on_intermediate_type +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Include_with_order_by_on_interface_key +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Nested_include_queries_do_not_populate_navigation_twice +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Reference_include_on_derived_type_with_sibling_works +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Select_enumerable_navigation_backed_by_collection(async: False, split: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Select_enumerable_navigation_backed_by_collection(async: False, split: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Select_enumerable_navigation_backed_by_collection(async: True, split: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Select_enumerable_navigation_backed_by_collection(async: True, split: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.ThenInclude_with_interface_navigations +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Using_explicit_interface_implementation_as_navigation_works +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Walking_back_include_tree_is_not_allowed_1 +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Walking_back_include_tree_is_not_allowed_2 +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Walking_back_include_tree_is_not_allowed_3 +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Walking_back_include_tree_is_not_allowed_4 +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocPrecompiledQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.GroupJoin_SelectMany_gets_flattened +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.IsDeleted_query_filter_with_conversion_to_int_works(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.IsDeleted_query_filter_with_conversion_to_int_works(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.Keyless_type_used_inside_defining_query +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.Query_filter_with_contains_evaluates_correctly +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.Query_filter_with_db_set_should_not_block_other_filters +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.Query_filter_with_null_constant +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.Query_filter_with_pk_fk_optimization +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.Self_reference_in_query_filter_works +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.Weak_entities_with_query_filter_subquery_flattening +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQuerySplittingQueryJetTest.Can_configure_SingleQuery_at_context_level +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQuerySplittingQueryJetTest.Can_configure_SplitQuery_at_context_level +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQuerySplittingQueryJetTest.NoTracking_split_query_creates_only_required_instances(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQuerySplittingQueryJetTest.NoTracking_split_query_creates_only_required_instances(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQuerySplittingQueryJetTest.SplitQuery_disposes_inner_data_readers +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQuerySplittingQueryJetTest.Unconfigured_query_splitting_behavior_throws_a_warning +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQuerySplittingQueryJetTest.Using_AsSingleQuery_without_context_configuration_does_not_throw_warning +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQuerySplittingQueryJetTest.Using_AsSplitQuery_without_multiple_active_result_sets_works EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Check_all_tests_overridden EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Collection_projection_over_GroupBy_over_parameter(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Collection_projection_over_GroupBy_over_parameter(async: True) @@ -8600,6 +10346,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQuery EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Orderby_SelectMany_with_Include1(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Project_collection_and_include(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Project_collection_and_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Project_collection_and_nested_conditional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Project_collection_and_nested_conditional(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Project_collection_and_root_entity(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Project_collection_and_root_entity(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Project_collection_navigation_composed(async: False) @@ -8799,6 +10547,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplit EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Orderby_SelectMany_with_Include1(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Project_collection_and_include(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Project_collection_and_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Project_collection_and_nested_conditional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Project_collection_and_nested_conditional(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Project_collection_and_root_entity(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Project_collection_and_root_entity(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Project_collection_navigation_composed(async: False) @@ -9068,6 +10818,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Lev EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Level4_Include(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Manually_created_left_join_propagates_nullability_to_navigations(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Manually_created_left_join_propagates_nullability_to_navigations(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Max_in_multi_level_nested_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Max_in_multi_level_nested_subquery(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Member_doesnt_get_pushed_down_into_subquery_with_result_operator(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Member_doesnt_get_pushed_down_into_subquery_with_result_operator(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Member_over_null_check_ternary_and_nested_anonymous_type(async: False) @@ -9095,6 +10847,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Mul EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_conditionals_in_projection(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_joins_groupby_predicate(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_joins_groupby_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_optional_navs_should_not_deadlock(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_optional_navs_should_not_deadlock(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_required_navigation_using_multiple_selects_with_EF_Property_Include(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_required_navigation_using_multiple_selects_with_EF_Property_Include(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_required_navigation_using_multiple_selects_with_Include(isAsync: False) @@ -9145,6 +10899,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Nes EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Nested_object_constructed_from_group_key_properties(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Null_check_different_structure_does_not_remove_null_checks(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Null_check_different_structure_does_not_remove_null_checks(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Null_check_removal_applied_recursively_complex(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Null_check_removal_applied_recursively_complex(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Null_check_removal_applied_recursively(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Null_check_removal_applied_recursively(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Null_conditional_is_not_applied_explicitly_for_optional_navigation(async: False) @@ -9458,10 +11214,18 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Filter_on_ EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Filter_on_required_property_inside_required_struct_complex_type_on_optional_navigation(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Filter_on_required_property_inside_required_struct_complex_type_on_required_navigation(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Filter_on_required_property_inside_required_struct_complex_type_on_required_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.GroupBy_over_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.GroupBy_over_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.GroupBy_over_nested_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.GroupBy_over_nested_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.GroupBy_over_property_in_nested_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.GroupBy_over_property_in_nested_complex_type(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_complex_type_via_optional_navigation(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_complex_type_via_optional_navigation(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_complex_type_via_required_navigation(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_complex_type_via_required_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_entity_with_complex_type_pushdown_and_then_left_join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_entity_with_complex_type_pushdown_and_then_left_join(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_same_entity_with_nested_complex_type_twice_with_double_pushdown(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_same_entity_with_nested_complex_type_twice_with_double_pushdown(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_same_entity_with_nested_complex_type_twice_with_pushdown(async: False) @@ -9482,6 +11246,10 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_st EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_struct_complex_type_via_optional_navigation(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_struct_complex_type_via_required_navigation(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_struct_complex_type_via_required_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Projecting_complex_from_optional_navigation_using_conditional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Projecting_complex_from_optional_navigation_using_conditional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Projecting_property_of_complex_type_using_left_join_with_pushdown(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Projecting_property_of_complex_type_using_left_join_with_pushdown(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_complex_type_Distinct_with_FromSql(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_complex_type_Distinct_with_FromSql(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_complex_type_Distinct(async: False) @@ -9575,16 +11343,29 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysSplitQueryJetTest.Pro EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysSplitQueryJetTest.Projecting_multiple_collections_with_ordering_same_level(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysSplitQueryJetTest.Projecting_multiple_collections_with_ordering_same_level(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Check_all_tests_overridden -EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Day -EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Hour -EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Minute -EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Month -EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Second -EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Year -EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.IsDate_join_fields -EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.IsDate_not_valid +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Day(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Day(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Hour(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Hour(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Minute(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Minute(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Month(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Month(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Second(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Second(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Year(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Year(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Greatest_with_parameter_array_is_not_supported(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Greatest_with_parameter_array_is_not_supported(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.IsDate_join_fields(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.IsDate_join_fields(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.IsDate_not_valid(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.IsDate_not_valid(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.IsDate_should_throw_on_client_eval -EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.IsDate_valid +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.IsDate_valid(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.IsDate_valid(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Least_with_parameter_array_is_not_supported(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Least_with_parameter_array_is_not_supported(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Like_all_literals(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Like_all_literals(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Like_identity(async: False) @@ -9606,8 +11387,10 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Count_Grouped_fr EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Count_Grouped_from_LINQ_101(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Cross_Join_with_Group_Join_from_LINQ_101(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Cross_Join_with_Group_Join_from_LINQ_101(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_is_optimized_when_filerting_and_projecting_anonymous_type_with_group_key_and_function_aggregate(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_is_optimized_when_filerting_and_projecting_anonymous_type_with_group_key_and_function_aggregate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Group_Join_from_LINQ_101(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Group_Join_from_LINQ_101(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_is_optimized_when_filtering_and_projecting_anonymous_type_with_group_key_and_function_aggregate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_is_optimized_when_filtering_and_projecting_anonymous_type_with_group_key_and_function_aggregate(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_is_optimized_when_grouping_by_row_and_projecting_column_of_the_key_row(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_is_optimized_when_grouping_by_row_and_projecting_column_of_the_key_row(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_is_optimized_when_projecting_aggregate_on_the_group(async: False) @@ -9867,6 +11650,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_que EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_simple_columns_out_of_order(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_simple_composed_include(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_simple_composed_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_simple_different_cased_columns_and_not_enough_columns_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_simple_different_cased_columns_and_not_enough_columns_throws(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_simple_include(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_simple_include(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_simple_projection_composed(async: False) @@ -10144,8 +11929,6 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTe EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_reference_reverse(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_reference(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_reference(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyHeterogeneousQueryJetTest.Many_to_many_load_works_when_join_entity_has_custom_key(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyHeterogeneousQueryJetTest.Many_to_many_load_works_when_join_entity_has_custom_key(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Contains_on_skip_collection_navigation_unidirectional(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Contains_on_skip_collection_navigation_unidirectional(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Contains_on_skip_collection_navigation(async: False) @@ -10482,6 +12265,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.MappingQueryJetTest.All_orders EntityFrameworkCore.Jet.FunctionalTests.Query.MappingQueryJetTest.Project_nullable_enum EntityFrameworkCore.Jet.FunctionalTests.Query.NavigationTest.Duplicate_entries_are_not_created_for_navigations_to_dependent EntityFrameworkCore.Jet.FunctionalTests.Query.NavigationTest.Duplicate_entries_are_not_created_for_navigations_to_principal +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.All_true(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.All_true(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Array_cast_to_IEnumerable_Contains_with_constant(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Array_cast_to_IEnumerable_Contains_with_constant(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_no_data_cast_to_nullable(async: False) @@ -10761,6 +12546,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJe EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_with_non_matching_types_in_projection_introduces_explicit_cast(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Multiple_collection_navigation_with_FirstOrDefault_chained_projecting_scalar(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Multiple_collection_navigation_with_FirstOrDefault_chained_projecting_scalar(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Not_Any_false(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Not_Any_false(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OfType_Select_OfType_Select(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OfType_Select_OfType_Select(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OfType_Select(async: False) @@ -10791,6 +12578,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJe EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OrderBy_Where_Count(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Project_constant_Sum(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Project_constant_Sum(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Return_type_of_singular_operator_is_preserved(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Return_type_of_singular_operator_is_preserved(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Select_All(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Select_All(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Select_Select_Distinct_Count(isAsync: False) @@ -11169,6 +12958,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Rep EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Replace_using_property_arguments(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Replace_with_emptystring(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Replace_with_emptystring(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Select_IndexOf_ToString(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Select_IndexOf_ToString(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Select_math_round_int(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Select_math_round_int(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Select_math_truncate_int(isAsync: False) @@ -11179,6 +12970,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Sel EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Select_mathf_round2(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Select_mathf_truncate(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Select_mathf_truncate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Select_ToString_IndexOf(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Select_ToString_IndexOf(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Static_equals_int_compared_to_long(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Static_equals_int_compared_to_long(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Static_equals_nullable_datetime_compared_to_non_nullable(isAsync: False) @@ -11217,12 +13010,24 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Str EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_Contains_constant_with_whitespace(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_Contains_Identity(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_Contains_Identity(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_Contains_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_Contains_in_projection(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_Contains_Literal(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_Contains_Literal(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_Contains_MethodCall(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_Contains_MethodCall(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_Contains_negated_in_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_Contains_negated_in_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_Contains_negated_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_Contains_negated_in_projection(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_Contains_parameter_with_whitespace(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_Contains_parameter_with_whitespace(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_Contains_with_StringComparison_Ordinal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_Contains_with_StringComparison_Ordinal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_Contains_with_StringComparison_OrdinalIgnoreCase(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_Contains_with_StringComparison_OrdinalIgnoreCase(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_Contains_with_StringComparison_unsupported(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_Contains_with_StringComparison_unsupported(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_EndsWith_Column(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_EndsWith_Column(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_EndsWith_Identity(isAsync: False) @@ -11233,6 +13038,12 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Str EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_EndsWith_MethodCall(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_EndsWith_Parameter(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_EndsWith_Parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_EndsWith_with_StringComparison_Ordinal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_EndsWith_with_StringComparison_Ordinal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_EndsWith_with_StringComparison_OrdinalIgnoreCase(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_EndsWith_with_StringComparison_OrdinalIgnoreCase(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_EndsWith_with_StringComparison_unsupported(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_EndsWith_with_StringComparison_unsupported(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_FirstOrDefault_MethodCall(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_FirstOrDefault_MethodCall(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_Join_over_non_nullable_column(async: False) @@ -11255,6 +13066,12 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Str EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_StartsWith_MethodCall(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_StartsWith_Parameter(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_StartsWith_Parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_StartsWith_with_StringComparison_Ordinal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_StartsWith_with_StringComparison_Ordinal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_StartsWith_with_StringComparison_OrdinalIgnoreCase(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_StartsWith_with_StringComparison_OrdinalIgnoreCase(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_StartsWith_with_StringComparison_unsupported(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_StartsWith_with_StringComparison_unsupported(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Substring_with_one_arg_with_closure(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Substring_with_one_arg_with_closure(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Substring_with_one_arg_with_constant(async: False) @@ -12199,6 +14016,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Client_J EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Client_Join_select_many(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Condition_on_entity_with_include(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Condition_on_entity_with_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_as_final_operator(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_as_final_operator(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_customers_employees_shadow(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_customers_employees_shadow(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_customers_employees_subquery_shadow_take(async: False) @@ -12221,6 +14040,10 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoi EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_projection(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_SelectMany_subquery_with_filter_and_DefaultIfEmpty(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_SelectMany_subquery_with_filter_and_DefaultIfEmpty(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_SelectMany_subquery_with_filter_orderby_and_DefaultIfEmpty(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_SelectMany_subquery_with_filter_orderby_and_DefaultIfEmpty(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_SelectMany_subquery_with_filter_orderby(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_SelectMany_subquery_with_filter_orderby(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_SelectMany_subquery_with_filter(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_SelectMany_subquery_with_filter(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_simple_ordering(isAsync: False) @@ -12275,6 +14098,10 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_sel EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_select_many(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.SelectMany_with_client_eval_with_constructor(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.SelectMany_with_client_eval_with_constructor(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Unflattened_GroupJoin_composed_2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Unflattened_GroupJoin_composed_2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Unflattened_GroupJoin_composed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Unflattened_GroupJoin_composed(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.Auto_initialized_view_set(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.Auto_initialized_view_set(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.Check_all_tests_overridden @@ -12422,6 +14249,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Comparing_non_matching_entities_using_Equals(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Comparing_to_fixed_string_parameter(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Comparing_to_fixed_string_parameter(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Compiler_generated_local_closure_produces_valid_parameter_name(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Compiler_generated_local_closure_produces_valid_parameter_name(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Complex_nested_query_properly_binds_to_grandparent_when_parent_returns_scalar_result(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Complex_nested_query_properly_binds_to_grandparent_when_parent_returns_scalar_result(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Complex_query_with_repeated_nested_query_model_compiles_correctly(isAsync: False) @@ -12547,6 +14376,7 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Inner_parameter_in_nested_lambdas_gets_preserved(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Int16_parameter_can_be_used_for_int_column(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Int16_parameter_can_be_used_for_int_column(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.IQueryable_captured_variable EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Join_Customers_Orders_Orders_Skip_Take_Same_Properties(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Join_Customers_Orders_Orders_Skip_Take_Same_Properties(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Join_Customers_Orders_Projection_With_String_Concat_Skip_Take(isAsync: False) @@ -12973,6 +14803,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Subquery_member_pushdown_does_not_change_original_subquery_model(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Subquery_member_pushdown_does_not_change_original_subquery_model2(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Subquery_member_pushdown_does_not_change_original_subquery_model2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_0_works_when_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_0_works_when_constant(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_All(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_All(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_Any_with_predicate(isAsync: False) @@ -13027,6 +14859,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_bitwise_binary_not(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_bitwise_binary_or(isAync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_bitwise_binary_or(isAync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_bitwise_binary_xor(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_bitwise_binary_xor(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_bitwise_or_with_logical_and(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_bitwise_or_with_logical_and(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_bitwise_or_with_logical_or(isAsync: False) @@ -13321,6 +15155,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Collec EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Collection_projection_AsNoTracking_OrderBy(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Custom_projection_reference_navigation_PK_to_FK_optimization(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Custom_projection_reference_navigation_PK_to_FK_optimization(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Entity_passed_to_DTO_constructor_works(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Entity_passed_to_DTO_constructor_works(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Filtered_collection_projection_is_tracked(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Filtered_collection_projection_is_tracked(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Filtered_collection_projection_with_to_list_is_tracked(isAsync: False) @@ -13455,6 +15291,14 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_byte_constant(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_chained_entity_navigation_doesnt_materialize_intermittent_entities(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_chained_entity_navigation_doesnt_materialize_intermittent_entities(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_conditional_drops_false(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_conditional_drops_false(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_conditional_flatten_nested_results(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_conditional_flatten_nested_results(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_conditional_flatten_nested_tests(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_conditional_flatten_nested_tests(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_conditional_terminates_at_true(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_conditional_terminates_at_true(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_conditional_with_null_comparison_in_test(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_conditional_with_null_comparison_in_test(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_constant_int(isAsync: False) @@ -13483,6 +15327,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_datetime_second_component(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_datetime_Ticks_component(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_datetime_Ticks_component(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_datetime_TimeOfDay_component(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_datetime_TimeOfDay_component(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_datetime_year_component(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_datetime_year_component(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_entity_compared_to_null(isAsync: False) @@ -14292,6 +16138,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.EF_Cons EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.EF_Constant_with_subtree(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.EF_Constant(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.EF_Constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.EF_Parameter_with_non_evaluatable_argument_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.EF_Parameter_with_non_evaluatable_argument_throws(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Enclosing_class_const_member_does_not_generate_parameter(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Enclosing_class_const_member_does_not_generate_parameter(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Enclosing_class_readonly_member_generates_parameter(isAsync: False) @@ -14360,6 +16208,12 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.SingleO EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.SingleOrDefault_over_custom_projection_compared_to_not_null(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.SingleOrDefault_over_custom_projection_compared_to_null(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.SingleOrDefault_over_custom_projection_compared_to_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Take_and_Distinct_evaluation_order(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Take_and_Distinct_evaluation_order(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Take_and_Where_evaluation_order(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Take_and_Where_evaluation_order(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Time_of_day_datetime(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Time_of_day_datetime(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Two_sets_of_comparison_combine_correctly(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Two_sets_of_comparison_combine_correctly(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Two_sets_of_comparison_combine_correctly2(async: False) @@ -14701,6 +16555,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_s EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_subquery_FirstOrDefault_is_null(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_ternary_boolean_condition_false(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_ternary_boolean_condition_false(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_ternary_boolean_condition_negated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_ternary_boolean_condition_negated(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_ternary_boolean_condition_true(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_ternary_boolean_condition_true(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_ternary_boolean_condition_with_another_condition(isAsync: False) @@ -14730,6 +16586,16 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Bool_not EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Bool_not_equal_nullable_bool_HasValue(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Bool_not_equal_nullable_int_HasValue(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Bool_not_equal_nullable_int_HasValue(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.CaseOpWhen_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.CaseOpWhen_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.CaseWhen_equal_to_first_or_third_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.CaseWhen_equal_to_first_or_third_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.CaseWhen_equal_to_first_or_third_select(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.CaseWhen_equal_to_first_or_third_select(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.CaseWhen_equal_to_second_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.CaseWhen_equal_to_second_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.CaseWhen_equal_to_second_select(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.CaseWhen_equal_to_second_select(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Coalesce_deeply_nested(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Coalesce_deeply_nested(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Coalesce_not_equal(async: False) @@ -14937,6 +16803,10 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Projecti EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Projecting_nullable_bool_with_coalesce_nested(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Projecting_nullable_bool_with_coalesce(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Projecting_nullable_bool_with_coalesce(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Rewrite_compare_bool_with_bool(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Rewrite_compare_bool_with_bool(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Rewrite_compare_int_with_int(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Rewrite_compare_int_with_int(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Select_IndexOf(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Select_IndexOf(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.String_concat_with_both_arguments_being_null(async: False) @@ -14945,6 +16815,10 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Sum_func EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Sum_function_is_always_considered_non_nullable(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Switching_null_semantics_produces_different_cache_entry EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Switching_parameter_value_to_null_produces_different_cache_entry +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_coalesce_shortcircuit_many(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_coalesce_shortcircuit_many(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_coalesce_shortcircuit(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_coalesce_shortcircuit(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_coalesce(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_coalesce(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_comparison_nonnull_constant_and_null_parameter(async: False) @@ -14975,6 +16849,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_eq EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_equal_with_conditional_non_nullable(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_equal_with_conditional(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_equal_with_conditional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_IndexOf_empty(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_IndexOf_empty(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_multiple_ands_with_null(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_multiple_ands_with_null(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_multiple_ands_with_nullable_parameter_and_constant_not_optimized(async: False) @@ -15004,6 +16880,9 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_nu EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_nullable_bool_with_null_check(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_nullable_bool(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_nullable_bool(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OperatorsQueryJetTest.Bitwise_and_on_expression_with_like_and_null_check_being_compared_to_false +EntityFrameworkCore.Jet.FunctionalTests.Query.OperatorsQueryJetTest.Complex_predicate_with_bitwise_and_arithmetic_operations +EntityFrameworkCore.Jet.FunctionalTests.Query.OperatorsQueryJetTest.Complex_predicate_with_bitwise_and_modulo_and_negation EntityFrameworkCore.Jet.FunctionalTests.Query.OperatorsQueryJetTest.Double_negate_on_column EntityFrameworkCore.Jet.FunctionalTests.Query.OperatorsQueryJetTest.Negate_on_binary_expression(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.OperatorsQueryJetTest.Negate_on_binary_expression(async: True) @@ -15013,13 +16892,19 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.OperatorsQueryJetTest.Negate_on_li EntityFrameworkCore.Jet.FunctionalTests.Query.OperatorsQueryJetTest.Negate_on_like_expression(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.OperatorsQueryJetTest.Or_on_two_nested_binaries_and_another_simple_comparison EntityFrameworkCore.Jet.FunctionalTests.Query.OperatorsQueryJetTest.Projection_with_not_and_negation_on_integer +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.An_optional_dependent_without_any_columns_and_nested_dependent_throws +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Can_auto_include_navigation_from_model EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Can_have_required_owned_type_on_derived_type +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Include_collection_for_entity_with_owned_type_works EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Join_selects_with_duplicating_aliases_and_owned_expansion_uniquifies_correctly(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Join_selects_with_duplicating_aliases_and_owned_expansion_uniquifies_correctly(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Multilevel_owned_entities_determine_correct_nullability EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Multiple_owned_reference_mapped_to_own_table_containing_owned_collection_in_split_query(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Multiple_owned_reference_mapped_to_own_table_containing_owned_collection_in_split_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Nested_owned_required_dependents_are_materialized EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Owned_collection_basic_split_query(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Owned_collection_basic_split_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Owned_entity_multiple_level_in_aggregate EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Owned_entity_with_all_null_properties_entity_equality_when_not_containing_another_owned_entity(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Owned_entity_with_all_null_properties_entity_equality_when_not_containing_another_owned_entity(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Owned_entity_with_all_null_properties_in_compared_to_non_null_in_conditional_projection(async: False) @@ -15038,6 +16923,10 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.OwnsMany_c EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.OwnsMany_correlated_projection(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Projecting_owned_collection_and_aggregate(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Projecting_owned_collection_and_aggregate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Any_with_predicate_over_owned_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Any_with_predicate_over_owned_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Any_without_predicate_over_owned_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Any_without_predicate_over_owned_collection(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_group_by_converted_indexer_property(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_group_by_converted_indexer_property(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_group_by_converted_owned_indexer_property(async: False) @@ -15052,8 +16941,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_OrderBy_inde EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_OrderBy_indexer_properties_converted(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_OrderBy_indexer_properties(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_OrderBy_indexer_properties(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_OrderBy_owened_indexer_properties_converted(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_OrderBy_owened_indexer_properties_converted(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_OrderBy_owned_indexer_properties_converted(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_OrderBy_owned_indexer_properties_converted(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_OrderBy_owned_indexer_properties(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_OrderBy_owned_indexer_properties(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_project_indexer_properties_converted(async: False) @@ -15084,12 +16973,22 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Client_method_ta EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Client_method_take_loads_owned_navigations_variation_2(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Client_method_take_loads_owned_navigations(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Client_method_take_loads_owned_navigations(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Contains_over_owned_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Contains_over_owned_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Count_over_owned_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Count_over_owned_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.ElementAt_over_owned_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.ElementAt_over_owned_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.ElementAtOrDefault_over_owned_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.ElementAtOrDefault_over_owned_collection(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Filter_on_indexer_using_closure(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Filter_on_indexer_using_closure(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Filter_on_indexer_using_function_argument(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Filter_on_indexer_using_function_argument(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Filter_owned_entity_chained_with_regular_entity_followed_by_projecting_owned_collection(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Filter_owned_entity_chained_with_regular_entity_followed_by_projecting_owned_collection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.FirstOrDefault_over_owned_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.FirstOrDefault_over_owned_collection(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.GroupBy_aggregate_on_owned_navigation_in_aggregate_selector(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.GroupBy_aggregate_on_owned_navigation_in_aggregate_selector(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Indexer_property_is_pushdown_into_subquery(async: False) @@ -15150,6 +17049,10 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Project_multiple EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Project_multiple_owned_navigations_with_expansion_on_owned_collections(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Project_multiple_owned_navigations(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Project_multiple_owned_navigations(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Project_owned_reference_navigation_which_does_not_own_additional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Project_owned_reference_navigation_which_does_not_own_additional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Project_owned_reference_navigation_which_owns_additional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Project_owned_reference_navigation_which_owns_additional(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Projecting_collection_correlated_with_keyless_entity_after_navigation_works_using_parent_identifiers(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Projecting_collection_correlated_with_keyless_entity_after_navigation_works_using_parent_identifiers(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Projecting_indexer_property_ignores_include_converted(async: False) @@ -15186,10 +17089,14 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.SelectMany_on_ow EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.SelectMany_on_owned_reference_followed_by_regular_entity_and_collection(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.SelectMany_on_owned_reference_with_entity_in_between_ending_in_owned_collection(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.SelectMany_on_owned_reference_with_entity_in_between_ending_in_owned_collection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.SelectMany_with_result_selector(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.SelectMany_with_result_selector(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Set_throws_for_owned_type(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Set_throws_for_owned_type(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Simple_query_entity_with_owned_collection(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Simple_query_entity_with_owned_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Skip_Take_over_owned_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Skip_Take_over_owned_collection(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Throw_for_owned_entities_without_owner_in_tracking_query(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Throw_for_owned_entities_without_owner_in_tracking_query(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Trying_to_access_non_existent_indexer_property_throws_meaningful_exception(async: False) @@ -15210,13 +17117,111 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Where_collection EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Where_collection_navigation_ToList_Count_member(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Where_owned_collection_navigation_ToList_Count(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Where_owned_collection_navigation_ToList_Count(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Concat +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Conditional_no_evaluatable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Contains_with_parameterized_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.DbContext_as_captured_variable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.DbContext_as_field +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.DbContext_as_local_variable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.DbContext_as_method_invocation_result +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.DbContext_as_property +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Dynamic_query_does_not_get_precompiled +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.EF_Constant_is_not_supported +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Final_GroupBy +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Foreach_async_is_not_supported +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Foreach_sync_over_DbSet_property_is_not_supported +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Foreach_sync_over_operator +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.FromSqlRaw +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Include_single +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Include_split +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Invoke_no_evaluatability_is_not_supported +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.ListInit_fully_evaluatable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.ListInit_no_evaluatability +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.ListInit_with_evaluatable_with_captured_variable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.ListInit_with_evaluatable_without_captured_variable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.MemberInit_evaluatable_as_constant +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.MemberInit_evaluatable_as_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.MemberInit_no_evaluatable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.MethodCallExpression_fully_evaluatable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.MethodCallExpression_no_evaluatability +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.MethodCallExpression_with_evaluatable_without_captured_variable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.New_with_no_arguments +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.NotParameterizedAttribute_is_not_supported_with_non_constant_argument +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.NotParameterizedAttribute_with_constant +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.OrderBy +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Project_anonymous_object +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Query_compilation_failure +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Query_syntax_is_not_supported +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Select_changes_type +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Select_New_with_captured_variable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Take +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_All +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_AllAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_Any +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_AnyAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_AsAsyncEnumerable_on_DbSet +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_AsAsyncEnumerable_on_IQueryable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_AsEnumerable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_Average +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_AverageAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_Count +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_CountAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_ExecuteDelete +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_ExecuteDeleteAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_First +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_FirstAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_FirstOrDefault +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_FirstOrDefaultAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_GetEnumerator +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_Last +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_LastAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_LastOrDefault +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_LastOrDefaultAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_LongCount +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_LongCountAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_Max +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_MaxAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_Min +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_MinAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_Single +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_SingleAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_SingleOrDefault +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_SingleOrDefaultAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_Sum +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_SumAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_ToArray +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_ToArrayAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_ToDictionary +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_ToDictionaryAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_ToHashSet +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_ToHashSetAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_ToList +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_ToListAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_ToLookup +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.ToDictionary_over_anonymous_type +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.ToDictionaryAsync_over_anonymous_type +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.ToList_over_objects_does_not_get_precompiled +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Unary +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Union +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Unsafe_accessor_gets_generated_once_for_multiple_queries +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Where_New_with_captured_variable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledSqlPregenerationQueryJetTest.Do_not_cache_is_respected +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledSqlPregenerationQueryJetTest.Final_GroupBy +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledSqlPregenerationQueryJetTest.Include_single_query +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledSqlPregenerationQueryJetTest.Include_split_query +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledSqlPregenerationQueryJetTest.No_parameters EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Check_all_tests_overridden EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Any(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Any(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Concat_parameter_collection_equality_inline_collection(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Concat_parameter_collection_equality_inline_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Contains_over_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Contains_over_subquery(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Count_method(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Count_method(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Count_with_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Count_with_predicate(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Distinct(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Distinct(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_ElementAt(async: False) @@ -15227,6 +17232,10 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.C EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_equality_inline_collection(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_equality_parameter_collection(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_equality_parameter_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_First(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_First(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_FirstOrDefault(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_FirstOrDefault(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_in_subquery_Union_parameter_collection(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_in_subquery_Union_parameter_collection(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_index_beyond_end(async: False) @@ -15259,6 +17268,16 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.C EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_OrderByDescending_ElementAt(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_projection_from_top_level(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_projection_from_top_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_SelectMany_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_SelectMany_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_SelectMany_with_Select_to_anonymous_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_SelectMany_with_Select_to_anonymous_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_SelectMany(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_SelectMany(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Single(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Single(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_SingleOrDefault(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_SingleOrDefault(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Skip_Take(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Skip_Take(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Skip(async: False) @@ -15267,6 +17286,20 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.C EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Take(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Union_parameter_collection(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Union_parameter_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Where_Count(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Where_Count(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Where_ElementAt(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Where_ElementAt(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Where_equality_inline_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Where_equality_inline_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Where_Skip_Take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Where_Skip_Take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Where_Skip(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Where_Skip(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Where_Take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Where_Take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Where_Union(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Where_Union(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_Contains_as_Any_with_predicate(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_Contains_as_Any_with_predicate(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_Contains_with_all_parameters(async: False) @@ -15318,6 +17351,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.P EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_Concat_column_collection(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_Count(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_Count(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_HashSet_of_ints_Contains_int(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_HashSet_of_ints_Contains_int(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_in_subquery_and_Convert_as_compiled_query EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_in_subquery_Count_as_compiled_query(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_in_subquery_Count_as_compiled_query(async: True) @@ -15365,6 +17400,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.P EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_collection_of_ints_simple(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_collection_of_ints_with_distinct(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_collection_of_ints_with_distinct(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_collection_of_ints_with_ToList_and_FirstOrDefault(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_collection_of_ints_with_ToList_and_FirstOrDefault(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_collection_of_nullable_ints_with_paging(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_collection_of_nullable_ints_with_paging(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_collection_of_nullable_ints_with_paging2(async: False) @@ -15373,145 +17410,14 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.P EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_collection_of_nullable_ints_with_paging3(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_empty_collection_of_nullables_and_collection_only_containing_nulls(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_empty_collection_of_nullables_and_collection_only_containing_nulls(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_inline_collection_with_Concat(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_inline_collection_with_Concat(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_inline_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_inline_collection(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_multiple_collections(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_multiple_collections(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_primitive_collections_element(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_primitive_collections_element(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.An_optional_dependent_without_any_columns_and_nested_dependent_throws -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Average_with_cast -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Can_auto_include_navigation_from_model -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Can_configure_SingleQuery_at_context_level -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Can_configure_SplitQuery_at_context_level -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Can_ignore_invalid_include_path_error -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Can_query_hierarchy_with_non_nullable_property_on_derived -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Can_query_with_nav_collection_in_projection_with_split_query_in_parallel_async -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Can_query_with_nav_collection_in_projection_with_split_query_in_parallel_sync -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Casts_are_removed_from_expression_tree_when_redundant -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Collection_include_on_owner_with_owned_type_mapped_to_different_table -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Collection_without_setter_materialized_correctly -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Compiler_generated_local_closure_produces_valid_parameter_name_1742 -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Conditional_expression_with_conditions_does_not_collapse_if_nullable_bool -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Correlated_collection_correctly_associates_entities_with_byte_array_keys -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Correlated_subquery_with_owned_navigation_being_compared_to_null_works -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Customer_collections_materialize_properly_3758 -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Cycles_in_auto_include -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.DateTime_Contains_with_smalldatetime_generates_correct_literal -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Derived_reference_is_skipped_when_base_type -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Discriminator_type_is_handled_correctly -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Double_convert_interface_created_expression_tree -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Entity_passed_to_DTO_constructor_works -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Explicitly_compiled_query_does_not_add_cache_entry -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Expression_tree_constructed_via_interface_works_17276 -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Find_underlying_property_after_GroupJoin_DefaultIfEmpty -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.First_FirstOrDefault_ix_async_Issue_603 -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.From_sql_expression_compares_correctly -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.GroupJoin_Anonymous_projection_GroupBy_Aggregate_join_elimination -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.GroupJoin_SelectMany_gets_flattened -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Implicit_cast_6864 -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Include_collection_for_entity_with_owned_type_works -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Include_collection_optional_reference_collection -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Include_collection_with_OfType_base -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Include_collection_works_when_defined_on_intermediate_type -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Include_on_entity_with_composite_key_Many_To_One_Issues_925_926 -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Include_on_entity_with_composite_key_One_To_Many_Issues_925_926 -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Include_on_optional_navigation -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Include_with_order_by_on_interface_key -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Inlined_dbcontext_is_not_leaking -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Invoke_inside_query_filter_gets_correctly_evaluated_during_translation -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Keyless_type_used_inside_defining_query -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Left_outer_join_Issue_6091 -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Max_in_multi_level_nested_subquery -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.MultiContext_query_filter_test -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Multilevel_owned_entities_determine_correct_nullability -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Multiple_optional_navs_should_not_deadlock_Issue_5481 -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Nested_contains_with_enum -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Nested_include_queries_do_not_populate_navigation_twice -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Nested_owned_required_dependents_are_materialized -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Nested_queries_does_not_cause_concurrency_exception_sync(tracking: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Nested_queries_does_not_cause_concurrency_exception_sync(tracking: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.New_instances_in_projection_are_not_shared_across_results -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.NoTracking_split_query_creates_only_required_instances(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.NoTracking_split_query_creates_only_required_instances(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Null_check_removal_applied_recursively -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Owned_entity_mapped_to_separate_table -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Owned_entity_multiple_level_in_aggregate -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Parameterless_ctor_on_inner_DTO_gets_called_for_every_row -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Projecting_column_with_value_converter_of_ulong_byte_array -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Projecting_correlated_collection_along_with_non_mapped_property -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Projecting_entity_with_value_converter_and_include_works -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Projection_failing_with_EnumToStringConverter -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Query_cache_entries_are_evicted_as_necessary -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Query_filter_with_contains_evaluates_correctly -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Query_filter_with_db_set_should_not_block_other_filters -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Query_filter_with_null_constant -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Query_filter_with_pk_fk_optimization_Issue_13517 -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Query_generates_correct_datetime2_parameter_definition(fractionalSeconds: 1, postfix: " (Scale = 1)") -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Query_generates_correct_datetime2_parameter_definition(fractionalSeconds: 2, postfix: " (Scale = 2)") -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Query_generates_correct_datetime2_parameter_definition(fractionalSeconds: 3, postfix: " (Scale = 3)") -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Query_generates_correct_datetime2_parameter_definition(fractionalSeconds: 4, postfix: " (Scale = 4)") -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Query_generates_correct_datetime2_parameter_definition(fractionalSeconds: 5, postfix: " (Scale = 5)") -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Query_generates_correct_datetime2_parameter_definition(fractionalSeconds: 6, postfix: " (Scale = 6)") -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Query_generates_correct_datetime2_parameter_definition(fractionalSeconds: 7, postfix: " (Scale = 7)") -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Query_generates_correct_datetime2_parameter_definition(fractionalSeconds: null, postfix: "") -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Query_generates_correct_datetimeoffset_parameter_definition(fractionalSeconds: 1, postfix: " (Scale = 1)") -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Query_generates_correct_datetimeoffset_parameter_definition(fractionalSeconds: 2, postfix: " (Scale = 2)") -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Query_generates_correct_datetimeoffset_parameter_definition(fractionalSeconds: 3, postfix: " (Scale = 3)") -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Query_generates_correct_datetimeoffset_parameter_definition(fractionalSeconds: 4, postfix: " (Scale = 4)") -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Query_generates_correct_datetimeoffset_parameter_definition(fractionalSeconds: 5, postfix: " (Scale = 5)") -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Query_generates_correct_datetimeoffset_parameter_definition(fractionalSeconds: 6, postfix: " (Scale = 6)") -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Query_generates_correct_datetimeoffset_parameter_definition(fractionalSeconds: 7, postfix: " (Scale = 7)") -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Query_generates_correct_datetimeoffset_parameter_definition(fractionalSeconds: null, postfix: "") -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Query_generates_correct_timespan_parameter_definition(fractionalSeconds: 1, postfix: " (Scale = 1)") -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Query_generates_correct_timespan_parameter_definition(fractionalSeconds: 2, postfix: " (Scale = 2)") -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Query_generates_correct_timespan_parameter_definition(fractionalSeconds: 3, postfix: " (Scale = 3)") -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Query_generates_correct_timespan_parameter_definition(fractionalSeconds: 4, postfix: " (Scale = 4)") -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Query_generates_correct_timespan_parameter_definition(fractionalSeconds: 5, postfix: " (Scale = 5)") -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Query_generates_correct_timespan_parameter_definition(fractionalSeconds: 6, postfix: " (Scale = 6)") -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Query_generates_correct_timespan_parameter_definition(fractionalSeconds: 7, postfix: " (Scale = 7)") -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Query_generates_correct_timespan_parameter_definition(fractionalSeconds: null, postfix: "") -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.QueryBuffer_requirement_is_computed_when_querying_base_type_while_derived_type_has_shadow_prop -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Reference_include_on_derived_type_with_sibling_works_Issue_7312 -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Relational_command_cache_creates_new_entry_when_parameter_nullability_changes -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Repeated_parameters_in_generated_query_sql -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Repro3101_coalesce_tracking -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Repro3101_complex_coalesce -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Repro3101_conditional -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Repro3101_nested_coalesce -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Repro3101_simple_coalesce -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Repro5456_include_group_join_is_per_query_context -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Repro5456_include_group_join_is_per_query_context_async -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Repro6986 -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Return_type_of_singular_operator_is_preserved -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.SaveChangesAsync_accepts_changes_with_ConfigureAwait_true_22841 -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Select_enumerable_navigation_backed_by_collection(async: False, split: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Select_enumerable_navigation_backed_by_collection(async: False, split: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Select_enumerable_navigation_backed_by_collection(async: True, split: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Select_enumerable_navigation_backed_by_collection(async: True, split: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Select_nested_projection -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Self_reference_in_query_filter_works -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Setting_IsUnicode_generates_unicode_literal_in_SQL -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.SplitQuery_disposes_inner_data_readers -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.ThenInclude_with_interface_navigations_3409 -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Thread_safety_in_relational_command_cache -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Unconfigured_query_splitting_behavior_throws_a_warning -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Union_and_insert_12549 -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Using_AsSingleQuery_without_context_configuration_does_not_throw_warning -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Using_AsSplitQuery_without_multiple_active_result_sets_works -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Using_explicit_interface_implementation_as_navigation_works -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Variable_from_closure_is_parametrized -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Walking_back_include_tree_is_not_allowed_1 -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Walking_back_include_tree_is_not_allowed_2 -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Walking_back_include_tree_is_not_allowed_3 -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Walking_back_include_tree_is_not_allowed_4 -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Weak_entities_with_query_filter_subquery_flattening -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Where_contains_DateTime_literals(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Where_contains_DateTime_literals(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Where_equals_DateTime_Now(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Where_equals_DateTime_Now(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Where_equals_new_DateTime(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Where_equals_new_DateTime(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Where_not_equals_DateTime_Now(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Where_not_equals_DateTime_Now(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.DbContext_complex_expression_is_parameterized EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.DbContext_field_is_parameterized EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.DbContext_list_is_parameterized @@ -15568,54 +17474,6 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.SharedTypeQueryJetTest.Can_use_sha EntityFrameworkCore.Jet.FunctionalTests.Query.SharedTypeQueryJetTest.Can_use_shared_type_entity_type_in_query_filter_with_from_sql(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.SharedTypeQueryJetTest.Can_use_shared_type_entity_type_in_query_filter(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.SharedTypeQueryJetTest.Can_use_shared_type_entity_type_in_query_filter(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Aggregate_over_subquery_in_group_by_projection(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Aggregate_over_subquery_in_group_by_projection(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Bool_discriminator_column_works(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Bool_discriminator_column_works(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Comparing_byte_column_to_enum_in_vb_creating_double_cast(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Comparing_byte_column_to_enum_in_vb_creating_double_cast(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Comparing_enum_casted_to_byte_with_int_constant(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Comparing_enum_casted_to_byte_with_int_constant(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Comparing_enum_casted_to_byte_with_int_parameter(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Comparing_enum_casted_to_byte_with_int_parameter(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Count_member_over_IReadOnlyCollection_works(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Count_member_over_IReadOnlyCollection_works(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Enum_with_value_converter_matching_take_value(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Enum_with_value_converter_matching_take_value(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Filter_on_nested_DTO_with_interface_gets_simplified_correctly(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Filter_on_nested_DTO_with_interface_gets_simplified_correctly(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Flattened_GroupJoin_on_interface_generic(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Flattened_GroupJoin_on_interface_generic(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.GroupBy_aggregate_on_right_side_of_join(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.GroupBy_aggregate_on_right_side_of_join(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.GroupBy_Aggregate_over_navigations_repeated(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.GroupBy_Aggregate_over_navigations_repeated(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Hierarchy_query_with_abstract_type_sibling_TPC(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Hierarchy_query_with_abstract_type_sibling_TPC(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Hierarchy_query_with_abstract_type_sibling_TPT(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Hierarchy_query_with_abstract_type_sibling_TPT(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Hierarchy_query_with_abstract_type_sibling(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Hierarchy_query_with_abstract_type_sibling(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.IsDeleted_query_filter_with_conversion_to_int_works(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.IsDeleted_query_filter_with_conversion_to_int_works(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Muliple_occurrences_of_FromSql_in_group_by_aggregate(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Muliple_occurrences_of_FromSql_in_group_by_aggregate(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Multiple_nested_reference_navigations(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Multiple_nested_reference_navigations(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Null_check_removal_in_ternary_maintain_appropriate_cast(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Null_check_removal_in_ternary_maintain_appropriate_cast(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Pushdown_does_not_add_grouping_key_to_projection_when_distinct_is_applied(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Pushdown_does_not_add_grouping_key_to_projection_when_distinct_is_applied(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.StoreType_for_UDF_used(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.StoreType_for_UDF_used(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Subquery_first_member_compared_to_null(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Subquery_first_member_compared_to_null(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Unwrap_convert_node_over_projection_when_translating_contains_over_subquery_2(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Unwrap_convert_node_over_projection_when_translating_contains_over_subquery_2(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Unwrap_convert_node_over_projection_when_translating_contains_over_subquery_3(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Unwrap_convert_node_over_projection_when_translating_contains_over_subquery_3(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Unwrap_convert_node_over_projection_when_translating_contains_over_subquery(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Unwrap_convert_node_over_projection_when_translating_contains_over_subquery(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Executes_stored_procedure_with_generated_parameter(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Executes_stored_procedure_with_generated_parameter(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Executes_stored_procedure_with_parameter(async: False) @@ -15630,6 +17488,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Query_with_DbPa EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Query_with_DbParameters_interpolated(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Query_with_dbParameters_mixed(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Query_with_dbParameters_mixed(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Query_with_parameters_custom_converter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Query_with_parameters_custom_converter(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Query_with_parameters_interpolated_2(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Query_with_parameters_interpolated_2(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Query_with_parameters_interpolated(async: False) @@ -15723,6 +17583,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_querya EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_simple_columns_out_of_order_and_not_enough_columns_throws(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_simple_columns_out_of_order(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_simple_columns_out_of_order(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_simple_different_cased_columns_and_not_enough_columns_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_simple_different_cased_columns_and_not_enough_columns_throws(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_simple_mapped_type(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_simple_mapped_type(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_simple_projection_composed(async: False) @@ -15741,6 +17603,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_querya EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_with_parameters_inline(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_with_parameters(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_with_parameters(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_then_String_ToUpper_String_Length(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_then_String_ToUpper_String_Length(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_with_db_parameters_called_multiple_times(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_with_db_parameters_called_multiple_times(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_with_dbParameter_mixed_in_subquery(async: False) diff --git a/test/EFCore.Jet.FunctionalTests/GreenTests/ace_2010_oledb_x86.txt b/test/EFCore.Jet.FunctionalTests/GreenTests/ace_2010_oledb_x86.txt index df366f1d..88c5385e 100644 --- a/test/EFCore.Jet.FunctionalTests/GreenTests/ace_2010_oledb_x86.txt +++ b/test/EFCore.Jet.FunctionalTests/GreenTests/ace_2010_oledb_x86.txt @@ -1,3 +1,4 @@ +EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Deadlock_on_inserts_and_deletes_with_dependents_is_handled_correctly EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Inserts_and_updates_are_batched_correctly EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Inserts_are_batched_correctly(clientPk: True, clientFk: False, clientOrder: False) EntityFrameworkCore.Jet.FunctionalTests.BatchingTest.Inserts_are_batched_correctly(clientPk: True, clientFk: False, clientOrder: True) @@ -68,14 +69,26 @@ EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Optional_datetim EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Sql_translation_uses_type_mapper_when_constant EntityFrameworkCore.Jet.FunctionalTests.BuiltInDataTypesJetTest.Sql_translation_uses_type_mapper_when_parameter EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.ComplexTypeBulkUpdatesJetTest.Check_all_tests_overridden -EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.ComplexTypeBulkUpdatesJetTest.Delete_complex_type_throws(async: False) -EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.ComplexTypeBulkUpdatesJetTest.Delete_complex_type_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.ComplexTypeBulkUpdatesJetTest.Delete_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.ComplexTypeBulkUpdatesJetTest.Delete_complex_type(async: True) EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.ComplexTypeBulkUpdatesJetTest.Delete_entity_type_with_complex_type(async: False) EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.ComplexTypeBulkUpdatesJetTest.Delete_entity_type_with_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.ComplexTypeBulkUpdatesJetTest.Update_collection_inside_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.ComplexTypeBulkUpdatesJetTest.Update_collection_inside_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.ComplexTypeBulkUpdatesJetTest.Update_complex_type_to_another_database_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.ComplexTypeBulkUpdatesJetTest.Update_complex_type_to_another_database_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.ComplexTypeBulkUpdatesJetTest.Update_complex_type_to_inline_with_lambda(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.ComplexTypeBulkUpdatesJetTest.Update_complex_type_to_inline_with_lambda(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.ComplexTypeBulkUpdatesJetTest.Update_complex_type_to_inline_without_lambda(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.ComplexTypeBulkUpdatesJetTest.Update_complex_type_to_inline_without_lambda(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.ComplexTypeBulkUpdatesJetTest.Update_complex_type_to_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.ComplexTypeBulkUpdatesJetTest.Update_complex_type_to_parameter(async: True) EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.ComplexTypeBulkUpdatesJetTest.Update_multiple_projected_complex_types_via_anonymous_type(async: False) EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.ComplexTypeBulkUpdatesJetTest.Update_multiple_projected_complex_types_via_anonymous_type(async: True) EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.ComplexTypeBulkUpdatesJetTest.Update_multiple_properties_inside_multiple_complex_types_and_on_entity_type(async: False) EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.ComplexTypeBulkUpdatesJetTest.Update_multiple_properties_inside_multiple_complex_types_and_on_entity_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.ComplexTypeBulkUpdatesJetTest.Update_nested_complex_type_to_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.ComplexTypeBulkUpdatesJetTest.Update_nested_complex_type_to_parameter(async: True) EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.ComplexTypeBulkUpdatesJetTest.Update_projected_complex_type(async: False) EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.ComplexTypeBulkUpdatesJetTest.Update_projected_complex_type(async: True) EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.ComplexTypeBulkUpdatesJetTest.Update_property_inside_complex_type(async: False) @@ -93,10 +106,14 @@ EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJet EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Delete_entity_with_auto_include(async: True) EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Delete_predicate_based_on_optional_navigation(async: False) EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Delete_predicate_based_on_optional_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Replace_ColumnExpression_in_column_setter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Replace_ColumnExpression_in_column_setter(async: True) EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Update_main_table_in_entity_with_entity_splitting(async: False) EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Update_main_table_in_entity_with_entity_splitting(async: True) EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Update_non_main_table_in_entity_with_entity_splitting(async: False) EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Update_non_main_table_in_entity_with_entity_splitting(async: True) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Update_non_owned_property_on_entity_with_owned_in_join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Update_non_owned_property_on_entity_with_owned_in_join(async: True) EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Update_non_owned_property_on_entity_with_owned(async: False) EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Update_non_owned_property_on_entity_with_owned(async: True) EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJetTest.Update_non_owned_property_on_entity_with_owned2(async: False) @@ -106,8 +123,6 @@ EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NonSharedModelBulkUpdatesJet EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Check_all_tests_overridden EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Concat(async: False) EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_Concat(async: True) -EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_FromSql_converted_to_subquery(async: False) -EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_FromSql_converted_to_subquery(async: True) EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_non_entity_projection_2(async: False) EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_non_entity_projection_2(async: True) EntityFrameworkCore.Jet.FunctionalTests.BulkUpdates.NorthwindBulkUpdatesJetTest.Delete_non_entity_projection_3(async: False) @@ -833,6 +848,7 @@ EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+Connec EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionWithDiagnosticsJetTest.Intercept_connection_to_suppress_dispose(async: True) EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionWithDiagnosticsJetTest.Intercept_connection_with_multiple_interceptors(async: False) EntityFrameworkCore.Jet.FunctionalTests.ConnectionInterceptionJetTestBase+ConnectionInterceptionWithDiagnosticsJetTest.Intercept_connection_with_multiple_interceptors(async: True) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_change_connection_when_open_and_not_owned EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_depend_on_DbContextOptions EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_depend_on_DbContextOptions_with_default_service_provider EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_depend_on_non_generic_options_when_only_one_context @@ -841,9 +857,22 @@ EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_specify_ EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_specify_connection_in_OnConfiguring_with_default_service_provider EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_specify_connection_string_in_OnConfiguring EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_specify_connection_string_in_OnConfiguring_with_default_service_provider +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_specify_no_connection_in_OnConfiguring_with_default_service_provider(contextOwnsConnection: False) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_specify_no_connection_in_OnConfiguring_with_default_service_provider(contextOwnsConnection: True) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_specify_no_connection_in_OnConfiguring(contextOwnsConnection: False) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_specify_no_connection_in_OnConfiguring(contextOwnsConnection: True) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_specify_no_connection_string_in_OnConfiguring +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_specify_no_connection_string_in_OnConfiguring_with_default_service_provider +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_specify_owned_connection_in_OnConfiguring +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_specify_owned_connection_in_OnConfiguring_with_default_service_provider +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_specify_then_change_connection EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_use_AddDbContext_and_get_connection_string_from_config(key: "ConnectionStrings:DefaultConnection", connectionString: " NamE = ConnectionStrings:DefaultConnection ") EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_use_AddDbContext_and_get_connection_string_from_config(key: "ConnectionStrings:DefaultConnection", connectionString: "name=ConnectionStrings:DefaultConnection") EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_use_AddDbContext_and_get_connection_string_from_config(key: "MyConnectionString", connectionString: "name=MyConnectionString") +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_use_an_existing_closed_connection_test(openConnection: False) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Can_use_an_existing_closed_connection_test(openConnection: True) +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Cannot_change_connection_when_open_and_owned +EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Throws_if_context_used_with_no_connection_or_connection_string EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Throws_if_no_config_without_UseJet EntityFrameworkCore.Jet.FunctionalTests.ConnectionSpecificationTest.Throws_if_no_connection_found_in_config_without_UseJet EntityFrameworkCore.Jet.FunctionalTests.ConvertToProviderTypesJetTest.Can_compare_enum_to_constant @@ -966,6 +995,7 @@ EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.ForeignKeyAttribut EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.ForeignKeyAttribute_throws_if_applied_on_two_relationships_targetting_the_same_property EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.Inverse_and_self_ref_ForeignKey EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.InverseProperty_with_case_sensitive_clr_property +EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.InverseProperty_with_potentially_ambigous_derived_types EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.InversePropertyAttribute_from_ignored_base_can_be_ignored_to_remove_ambiguity EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.InversePropertyAttribute_from_ignored_base_causes_ambiguity EntityFrameworkCore.Jet.FunctionalTests.DataAnnotationJetTest.InversePropertyAttribute_is_noop_in_unambiguous_models @@ -1358,8 +1388,6 @@ EntityFrameworkCore.Jet.FunctionalTests.ExecutionStrategyTest.Retries_SaveChange EntityFrameworkCore.Jet.FunctionalTests.ExecutionStrategyTest.Retries_SaveChanges_on_execution_failure(realFailure: True, externalStrategy: True, openConnection: True, async: False) EntityFrameworkCore.Jet.FunctionalTests.ExecutionStrategyTest.Retries_SaveChanges_on_execution_failure(realFailure: True, externalStrategy: True, openConnection: True, async: True) EntityFrameworkCore.Jet.FunctionalTests.ExecutionStrategyTest.Verification_is_retried_using_same_retry_limit -EntityFrameworkCore.Jet.FunctionalTests.ExistingConnectionTest.Can_use_an_existing_closed_connection -EntityFrameworkCore.Jet.FunctionalTests.ExistingConnectionTest.Can_use_an_existing_open_connection EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Can_define_a_backing_field_for_a_navigation_and_query_and_update_it EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Field_mapping_with_conversion_does_not_throw EntityFrameworkCore.Jet.FunctionalTests.FieldMappingJetTest.Include_collection_auto_props(tracking: False) @@ -2651,6 +2679,7 @@ EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Throws_for_wr EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Throws_for_wrong_number_of_values_for_composite_key_async(cancellationType: 0) EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Throws_for_wrong_number_of_values_for_composite_key_async(cancellationType: 1) EntityFrameworkCore.Jet.FunctionalTests.FindJetTest+FindJetTestSet.Throws_for_wrong_number_of_values_for_composite_key_async(cancellationType: 2) +EntityFrameworkCore.Jet.FunctionalTests.JetComplianceTest.All_query_test_fixtures_must_implement_ITestSqlLoggerFactory EntityFrameworkCore.Jet.FunctionalTests.JetConfigPatternsTest+ConstructorArgsToBuilder.Can_pass_context_options_to_constructor_and_use_in_builder EntityFrameworkCore.Jet.FunctionalTests.JetConfigPatternsTest+ConstructorArgsToOnConfiguring.Can_pass_connection_string_to_constructor_and_use_in_OnConfiguring EntityFrameworkCore.Jet.FunctionalTests.JetConfigPatternsTest+ExplicitServicesAndConfig.Can_query_with_explicit_services_and_explicit_config @@ -2714,8 +2743,14 @@ EntityFrameworkCore.Jet.FunctionalTests.JetDatabaseCreatorHasTablesTest.Returns_ EntityFrameworkCore.Jet.FunctionalTests.JetDatabaseCreatorHasTablesTest.Returns_true_when_database_exists_and_has_any_tables(async: True, ambientTransaction: False) EntityFrameworkCore.Jet.FunctionalTests.JetDatabaseCreatorHasTablesTest.Throws_when_database_does_not_exist(async: False) EntityFrameworkCore.Jet.FunctionalTests.JetDatabaseCreatorHasTablesTest.Throws_when_database_does_not_exist(async: True) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_add_and_remove_entities_with_keys_of_different_type +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_add_table_splitting_dependent_after_principal EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_enumerate_entity_set +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_entities_with_generated_PKs(studentCount: 0, courseCount: 0) +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_non_owner_principal_for_owned +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_insert_TPT_dependents_with_identity EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_remove_multiple_byte_array_as_key +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_replace_identifying_FK_entity_with_many_to_many EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_round_trip_changes_with_changed_only_notification_entities EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_round_trip_changes_with_full_notification_entities EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_round_trip_changes_with_snapshot_change_tracking @@ -2724,6 +2759,7 @@ EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_run_linq_query_on_en EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_save_changes EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_save_changes_in_tracked_entities EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Can_use_string_enum_or_byte_array_as_key +EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Throws_when_adding_table_splitting_dependent_without_principal EntityFrameworkCore.Jet.FunctionalTests.JetEndToEndTest.Tracking_entities_asynchronously_returns_tracked_entities_back EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.AddCheckConstraint_generates_exec_when_idempotent EntityFrameworkCore.Jet.FunctionalTests.JetMigrationsSqlGeneratorTest.AddColumnOperation_datetime_with_defaultValue_sql @@ -2799,6 +2835,9 @@ EntityFrameworkCore.Jet.FunctionalTests.JetServiceCollectionExtensionsTest.Calli EntityFrameworkCore.Jet.FunctionalTests.JetServiceCollectionExtensionsTest.Repeated_calls_to_add_do_not_modify_collection EntityFrameworkCore.Jet.FunctionalTests.JetServiceCollectionExtensionsTest.Required_services_are_registered_with_expected_lifetimes EntityFrameworkCore.Jet.FunctionalTests.JetValueGenerationScenariosTest.Insert_explicit_value_throws_when_readonly_before_save +EntityFrameworkCore.Jet.FunctionalTests.JetValueGenerationScenariosTest.Insert_int_enum_to_Identity_column +EntityFrameworkCore.Jet.FunctionalTests.JetValueGenerationScenariosTest.Insert_string_to_Identity_column_using_value_converter +EntityFrameworkCore.Jet.FunctionalTests.JetValueGenerationScenariosTest.Insert_uint_to_Identity_column_using_value_converter EntityFrameworkCore.Jet.FunctionalTests.JetValueGenerationScenariosTest.Insert_with_client_generated_GUID_key EntityFrameworkCore.Jet.FunctionalTests.JetValueGenerationScenariosTest.Insert_with_explicit_default_keys EntityFrameworkCore.Jet.FunctionalTests.JetValueGenerationScenariosTest.Insert_with_explicit_non_default_keys @@ -2808,6 +2847,15 @@ EntityFrameworkCore.Jet.FunctionalTests.JetValueGenerationScenariosTest.Insert_w EntityFrameworkCore.Jet.FunctionalTests.JetValueGenerationScenariosTest.Insert_with_non_key_default_value EntityFrameworkCore.Jet.FunctionalTests.JetValueGenerationScenariosTest.Insert_with_non_key_default_value_readonly EntityFrameworkCore.Jet.FunctionalTests.JetValueGenerationScenariosTest.Insert_with_ValueGeneratedOnAdd_GUID_nonkey_property_throws +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_array_of_array_of_array_of_int_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_array_of_list_of_array_of_IPAddress_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_array_of_list_of_array_of_string_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_array_of_list_of_binary_JSON_values(expected: "{\"Prop\":[[\"AAEC\",\"AQ==\",\"TQ==\"],[],[\"Tg=="···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_array_of_list_of_GUID_JSON_values(expected: "{\"Prop\":[[\"00000000-0000-0000-0000-000000000000"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_array_of_list_of_int_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_array_of_list_of_IPAddress_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_array_of_list_of_string_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_array_of_list_of_ulong_JSON_values EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_binary_as_collection EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_binary_JSON_values(value: "", json: "{\"Prop\":\"\"}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_binary_JSON_values(value: "0,0,0,1", json: "{\"Prop\":\"AAAAAQ==\"}") @@ -2826,7 +2874,7 @@ EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_char_JSO EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_char_JSON_values(value: "Z", json: "{\"Prop\":\"Z\"}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_char_JSON_values(value: 0xffff, json: "{\"Prop\":\"\\uFFFF\"}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_ASCII_string_JSON_values(storeType: null) -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_binary_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_binary_JSON_values(expected: "{\"Prop\":[\"AAAAAQ==\",\"/////w==\",\"\",\"AQIDBA"···) EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_binary_values_with_converter_as_JSON_string EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_bool_JSON_values EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_bool_values_with_converter_as_JSON_string @@ -2836,17 +2884,17 @@ EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collecti EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_char_values_with_converter_as_JSON_string EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_DateOnly_JSON_values EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_DateOnly_values_with_converter_as_JSON_string -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_DateTime_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_DateTime_JSON_values(expected: "{\"Prop\":[\"0001-01-01T00:00:00\",\"2023-05-29T10"···) EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_DateTime_values_with_converter_as_JSON_string -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_DateTimeOffset_JSON_values -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_decimal_JSON_values -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_decimal_with_precision_and_scale_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_DateTimeOffset_JSON_values(expected: "{\"Prop\":[\"0001-01-01T00:00:00+00:00\",\"2023-05"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_decimal_JSON_values(expected: "{\"Prop\":[-79228162514264337593543950335,0,792281"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_decimal_with_precision_and_scale_JSON_values(expected: "{\"Prop\":[-79228162514264337593543950335,0,792281"···) EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_double_JSON_values EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_double_values_with_converter_as_JSON_string EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_fixed_length_string_JSON_values(storeType: null) EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_float_JSON_values -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_Guid_converted_to_bytes_JSON_values -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_GUID_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_Guid_converted_to_bytes_JSON_values(expected: "{\"Prop\":[\"AAAAAAAAAAAAAAAAAAAAAA==\",\"LyREjD+O"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_GUID_JSON_values(expected: "{\"Prop\":[\"00000000-0000-0000-0000-000000000000\"···) EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_int_enum_JSON_values EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_int_enum_values_with_converter_as_JSON_string EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_int_JSON_values @@ -2855,7 +2903,7 @@ EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collecti EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_IP_address_JSON_values EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_long_enum_JSON_values EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_long_JSON_values -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_binary_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_binary_JSON_values(expected: "{\"Prop\":[\"AAAAAQ==\",null,\"/////w==\",\"\",\"A"···) EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_binary_values_with_converter_as_JSON_string EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_bool_JSON_values EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_bool_values_with_converter_as_JSON_string @@ -2865,14 +2913,14 @@ EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collecti EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_char_values_with_converter_as_JSON_string EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_DateOnly_JSON_values EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_DateOnly_values_with_converter_as_JSON_string -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_DateTime_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_DateTime_JSON_values(expected: "{\"Prop\":[\"0001-01-01T00:00:00\",null,\"2023-05-"···) EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_DateTime_values_with_converter_as_JSON_string -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_DateTimeOffset_JSON_values -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_decimal_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_DateTimeOffset_JSON_values(expected: "{\"Prop\":[\"0001-01-01T00:00:00+00:00\",\"2023-05"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_decimal_JSON_values(expected: "{\"Prop\":[-79228162514264337593543950335,0,null,7"···) EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_double_JSON_values EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_double_values_with_converter_as_JSON_string EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_float_JSON_values -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_GUID_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_GUID_JSON_values(expected: "{\"Prop\":[\"00000000-0000-0000-0000-000000000000\"···) EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_int_enum_JSON_values EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_int_enum_values_with_converter_as_JSON_string EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_collection_of_nullable_int_JSON_values @@ -2929,7 +2977,7 @@ EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_custom_c EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_custom_converted_type_JSON_values(value: "127.0.0.1", json: "{\"Prop\":\"127.0.0.1\"}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_custom_converted_type_JSON_values(value: "192.168.1.156", json: "{\"Prop\":\"192.168.1.156\"}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_custom_converted_type_JSON_values(value: "255.255.255.255", json: "{\"Prop\":\"255.255.255.255\"}") -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_custom_converted_type_JSON_values(value: "2a00:23c7:c60f:4f01:ba43:6d5a:e648:7577", json: "{\"Prop\":\"2a00:23c7:c60f:4f01:ba43:6d5a:e648:757"...) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_custom_converted_type_JSON_values(value: "2a00:23c7:c60f:4f01:ba43:6d5a:e648:7577", json: "{\"Prop\":\"2a00:23c7:c60f:4f01:ba43:6d5a:e648:757"···) EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_DateOnly_JSON_values(value: "1/1/0001", json: "{\"Prop\":\"0001-01-01\"}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_DateOnly_JSON_values(value: "12/31/9999", json: "{\"Prop\":\"9999-12-31\"}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_DateOnly_JSON_values(value: "5/29/2023", json: "{\"Prop\":\"2023-05-29\"}") @@ -2954,9 +3002,9 @@ EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_float_JS EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_float_JSON_values(value: 0, json: "{\"Prop\":0}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_float_JSON_values(value: 1.10000002, json: "{\"Prop\":1.1}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_float_JSON_values(value: 3.40282347E+38, json: "{\"Prop\":3.4028235E+38}") -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_GUID_JSON_values(value: "00000000-0000-0000-0000-000000000000", json: "{\"Prop\":\"00000000-0000-0000-0000-000000000000\""...) -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_GUID_JSON_values(value: "8C44242F-8E3F-4A20-8BE8-98C7C1AADEBD", json: "{\"Prop\":\"8c44242f-8e3f-4a20-8be8-98c7c1aadebd\""...) -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_GUID_JSON_values(value: "FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF", json: "{\"Prop\":\"ffffffff-ffff-ffff-ffff-ffffffffffff\""...) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_GUID_JSON_values(value: "00000000-0000-0000-0000-000000000000", json: "{\"Prop\":\"00000000-0000-0000-0000-000000000000\""···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_GUID_JSON_values(value: "8C44242F-8E3F-4A20-8BE8-98C7C1AADEBD", json: "{\"Prop\":\"8c44242f-8e3f-4a20-8be8-98c7c1aadebd\""···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_GUID_JSON_values(value: "FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF", json: "{\"Prop\":\"ffffffff-ffff-ffff-ffff-ffffffffffff\""···) EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_int_enum_JSON_values(value: -2147483648, json: "{\"Prop\":-2147483648}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_int_enum_JSON_values(value: 0, json: "{\"Prop\":0}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_int_enum_JSON_values(value: 1, json: "{\"Prop\":1}") @@ -2971,9 +3019,23 @@ EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_IP_addre EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_IP_address_JSON_values(value: "127.0.0.1", json: "{\"Prop\":\"127.0.0.1\"}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_IP_address_JSON_values(value: "192.168.1.156", json: "{\"Prop\":\"192.168.1.156\"}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_IP_address_JSON_values(value: "255.255.255.255", json: "{\"Prop\":\"255.255.255.255\"}") -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_IP_address_JSON_values(value: "2a00:23c7:c60f:4f01:ba43:6d5a:e648:7577", json: "{\"Prop\":\"2a00:23c7:c60f:4f01:ba43:6d5a:e648:757"...) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_IP_address_JSON_values(value: "2a00:23c7:c60f:4f01:ba43:6d5a:e648:7577", json: "{\"Prop\":\"2a00:23c7:c60f:4f01:ba43:6d5a:e648:757"···) EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_line_string EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_line_string_as_GeoJson +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_list_of_array_of_binary_JSON_values(expected: "{\"Prop\":[[\"AAEC\",\"AQ==\",\"TQ==\"],[],[\"Tg=="···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_list_of_array_of_GUID_JSON_values(expected: "{\"Prop\":[[\"00000000-0000-0000-0000-000000000000"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_list_of_array_of_int_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_list_of_array_of_IPAddress_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_list_of_array_of_list_of_array_of_binary_JSON_values(expected: "{\"Prop\":[[[[\"AAEC\",\"AQ==\",\"TQ==\"]],[],[[],"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_list_of_array_of_list_of_IPAddress_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_list_of_array_of_list_of_string_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_list_of_array_of_list_of_ulong_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_list_of_array_of_nullable_GUID_JSON_values(expected: "{\"Prop\":[[\"00000000-0000-0000-0000-000000000000"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_list_of_array_of_nullable_int_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_list_of_array_of_nullable_ulong_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_list_of_array_of_string_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_list_of_array_of_ulong_JSON_values +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_list_of_list_of_list_of_int_JSON_values EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_long_enum_JSON_values(value: -9223372036854775808, json: "{\"Prop\":-9223372036854775808}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_long_enum_JSON_values(value: 0, json: "{\"Prop\":0}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_long_enum_JSON_values(value: 1, json: "{\"Prop\":1}") @@ -2984,9 +3046,9 @@ EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_long_JSO EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_long_JSON_values(value: 9223372036854775807, json: "{\"Prop\":9223372036854775807}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_multi_line_string EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_multi_line_string_as_GeoJson -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_as_string_GUID_JSON_values(value: "00000000-0000-0000-0000-000000000000", json: "{\"Prop\":\"00000000-0000-0000-0000-000000000000\""...) -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_as_string_GUID_JSON_values(value: "8C44242F-8E3F-4A20-8BE8-98C7C1AADEBD", json: "{\"Prop\":\"8c44242f-8e3f-4a20-8be8-98c7c1aadebd\""...) -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_as_string_GUID_JSON_values(value: "FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF", json: "{\"Prop\":\"ffffffff-ffff-ffff-ffff-ffffffffffff\""...) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_as_string_GUID_JSON_values(value: "00000000-0000-0000-0000-000000000000", json: "{\"Prop\":\"00000000-0000-0000-0000-000000000000\""···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_as_string_GUID_JSON_values(value: "8C44242F-8E3F-4A20-8BE8-98C7C1AADEBD", json: "{\"Prop\":\"8c44242f-8e3f-4a20-8be8-98c7c1aadebd\""···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_as_string_GUID_JSON_values(value: "FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF", json: "{\"Prop\":\"ffffffff-ffff-ffff-ffff-ffffffffffff\""···) EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_as_string_GUID_JSON_values(value: null, json: "{\"Prop\":null}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_binary_as_string_JSON_values(value: "", json: "{\"Prop\":\"\"}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_binary_as_string_JSON_values(value: "0,0,0,1", json: "{\"Prop\":\"AAAAAQ==\"}") @@ -3054,8 +3116,8 @@ EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateTime_JSON_values(value: null, json: "{\"Prop\":null}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateTimeOffset_as_string_JSON_values(value: "0001-01-01T00:00:00.0000000-01:00", json: "{\"Prop\":\"0001-01-01 00:00:00-01:00\"}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateTimeOffset_as_string_JSON_values(value: "0001-01-01T00:00:00.0000000-03:00", json: "{\"Prop\":\"0001-01-01 00:00:00-03:00\"}") -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateTimeOffset_as_string_JSON_values(value: "2023-05-29T11:11:15.5672854+04:00", json: "{\"Prop\":\"2023-05-29 11:11:15.5672854\\u002B04:0"...) -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateTimeOffset_as_string_JSON_values(value: "9999-12-31T23:59:59.9999999+02:00", json: "{\"Prop\":\"9999-12-31 23:59:59.9999999\\u002B02:0"...) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateTimeOffset_as_string_JSON_values(value: "2023-05-29T11:11:15.5672854+04:00", json: "{\"Prop\":\"2023-05-29 11:11:15.5672854\\u002B04:0"···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateTimeOffset_as_string_JSON_values(value: "9999-12-31T23:59:59.9999999+02:00", json: "{\"Prop\":\"9999-12-31 23:59:59.9999999\\u002B02:0"···) EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateTimeOffset_as_string_JSON_values(value: null, json: "{\"Prop\":null}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateTimeOffset_JSON_values(value: "0001-01-01T00:00:00.0000000-01:00", json: "{\"Prop\":\"0001-01-01T00:00:00-01:00\"}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_DateTimeOffset_JSON_values(value: "0001-01-01T00:00:00.0000000-03:00", json: "{\"Prop\":\"0001-01-01T00:00:00-03:00\"}") @@ -3092,9 +3154,9 @@ EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_float_JSON_values(value: 1.10000002, json: "{\"Prop\":1.1}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_float_JSON_values(value: 3.40282347E+38, json: "{\"Prop\":3.4028235E+38}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_float_JSON_values(value: null, json: "{\"Prop\":null}") -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_GUID_JSON_values(value: "00000000-0000-0000-0000-000000000000", json: "{\"Prop\":\"00000000-0000-0000-0000-000000000000\""...) -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_GUID_JSON_values(value: "8C44242F-8E3F-4A20-8BE8-98C7C1AADEBD", json: "{\"Prop\":\"8c44242f-8e3f-4a20-8be8-98c7c1aadebd\""...) -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_GUID_JSON_values(value: "FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF", json: "{\"Prop\":\"ffffffff-ffff-ffff-ffff-ffffffffffff\""...) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_GUID_JSON_values(value: "00000000-0000-0000-0000-000000000000", json: "{\"Prop\":\"00000000-0000-0000-0000-000000000000\""···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_GUID_JSON_values(value: "8C44242F-8E3F-4A20-8BE8-98C7C1AADEBD", json: "{\"Prop\":\"8c44242f-8e3f-4a20-8be8-98c7c1aadebd\""···) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_GUID_JSON_values(value: "FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF", json: "{\"Prop\":\"ffffffff-ffff-ffff-ffff-ffffffffffff\""···) EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_GUID_JSON_values(value: null, json: "{\"Prop\":null}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_int_as_string_JSON_values(value: -2147483648, json: "{\"Prop\":\"-2147483648\"}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_int_as_string_JSON_values(value: 0, json: "{\"Prop\":\"0\"}") @@ -3123,7 +3185,7 @@ EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_IP_address_as_string_JSON_values(value: "127.0.0.1", json: "{\"Prop\":\"127.0.0.1\"}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_IP_address_as_string_JSON_values(value: "192.168.1.156", json: "{\"Prop\":\"192.168.1.156\"}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_IP_address_as_string_JSON_values(value: "255.255.255.255", json: "{\"Prop\":\"255.255.255.255\"}") -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_IP_address_as_string_JSON_values(value: "2a00:23c7:c60f:4f01:ba43:6d5a:e648:7577", json: "{\"Prop\":\"2a00:23c7:c60f:4f01:ba43:6d5a:e648:757"...) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_IP_address_as_string_JSON_values(value: "2a00:23c7:c60f:4f01:ba43:6d5a:e648:7577", json: "{\"Prop\":\"2a00:23c7:c60f:4f01:ba43:6d5a:e648:757"···) EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_IP_address_as_string_JSON_values(value: null, json: "{\"Prop\":null}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_IP_address_JSON_values(value: "::", json: "{\"Prop\":\"::\"}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_IP_address_JSON_values(value: "::1", json: "{\"Prop\":\"::1\"}") @@ -3131,7 +3193,7 @@ EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_IP_address_JSON_values(value: "127.0.0.1", json: "{\"Prop\":\"127.0.0.1\"}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_IP_address_JSON_values(value: "192.168.1.156", json: "{\"Prop\":\"192.168.1.156\"}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_IP_address_JSON_values(value: "255.255.255.255", json: "{\"Prop\":\"255.255.255.255\"}") -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_IP_address_JSON_values(value: "2a00:23c7:c60f:4f01:ba43:6d5a:e648:7577", json: "{\"Prop\":\"2a00:23c7:c60f:4f01:ba43:6d5a:e648:757"...) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_IP_address_JSON_values(value: "2a00:23c7:c60f:4f01:ba43:6d5a:e648:7577", json: "{\"Prop\":\"2a00:23c7:c60f:4f01:ba43:6d5a:e648:757"···) EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_IP_address_JSON_values(value: null, json: "{\"Prop\":null}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_line_string EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_line_string_as_GeoJson @@ -3213,12 +3275,12 @@ EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_short_JSON_values(value: 32767, json: "{\"Prop\":32767}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_short_JSON_values(value: null, json: "{\"Prop\":null}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_string_as_string_JSON_values(value: "", json: "{\"Prop\":\"\"}") -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_string_as_string_JSON_values(value: "❤❥웃유♋☮✌☏☢☠✔☑♚▲♪฿Ɖ⛏♥❣♂♀☿\ud83d\udc4d✍✉☣☤✘☒♛▼♫⌘⌛¡♡ღツ☼☁❅♾️✎©®™Σ"..., json: "{\"Prop\":\"\\u2764\\u2765\\uC6C3\\uC720\\u264B\\u"...) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_string_as_string_JSON_values(value: "❤❥웃유♋☮✌☏☢☠✔☑♚▲♪฿Ɖ⛏♥❣♂♀☿\ud83d\udc4d✍✉☣☤✘☒♛▼♫⌘⌛¡♡ღツ☼☁❅♾️✎©®™Σ"···, json: "{\"Prop\":\"\\u2764\\u2765\\uC6C3\\uC720\\u264B\\u"···) EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_string_as_string_JSON_values(value: "MaxValue", json: "{\"Prop\":\"MaxValue\"}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_string_as_string_JSON_values(value: "MinValue", json: "{\"Prop\":\"MinValue\"}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_string_as_string_JSON_values(value: null, json: "{\"Prop\":null}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_string_JSON_values(value: "", json: "{\"Prop\":\"\"}") -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_string_JSON_values(value: "❤❥웃유♋☮✌☏☢☠✔☑♚▲♪฿Ɖ⛏♥❣♂♀☿\ud83d\udc4d✍✉☣☤✘☒♛▼♫⌘⌛¡♡ღツ☼☁❅♾️✎©®™Σ"..., json: "{\"Prop\":\"\\u2764\\u2765\\uC6C3\\uC720\\u264B\\u"...) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_string_JSON_values(value: "❤❥웃유♋☮✌☏☢☠✔☑♚▲♪฿Ɖ⛏♥❣♂♀☿\ud83d\udc4d✍✉☣☤✘☒♛▼♫⌘⌛¡♡ღツ☼☁❅♾️✎©®™Σ"···, json: "{\"Prop\":\"\\u2764\\u2765\\uC6C3\\uC720\\u264B\\u"···) EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_string_JSON_values(value: "MaxValue", json: "{\"Prop\":\"MaxValue\"}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_string_JSON_values(value: "MinValue", json: "{\"Prop\":\"MinValue\"}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_string_JSON_values(value: null, json: "{\"Prop\":null}") @@ -3275,10 +3337,10 @@ EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ulong_JSON_values(value: 18446744073709551615, json: "{\"Prop\":18446744073709551615}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ulong_JSON_values(value: null, json: "{\"Prop\":null}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_URI_as_string_JSON_values(value: "file:///C:/test/path/file.txt", json: "{\"Prop\":\"file:///C:/test/path/file.txt\"}") -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_URI_as_string_JSON_values(value: "https://user:password@www.contoso.com:80/Home/Inde"..., json: "{\"Prop\":\"https://user:password@www.contoso.com:"...) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_URI_as_string_JSON_values(value: "https://user:password@www.contoso.com:80/Home/Inde"···, json: "{\"Prop\":\"https://user:password@www.contoso.com:"···) EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_URI_as_string_JSON_values(value: null, json: "{\"Prop\":null}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_URI_JSON_values(value: "file:///C:/test/path/file.txt", json: "{\"Prop\":\"file:///C:/test/path/file.txt\"}") -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_URI_JSON_values(value: "https://user:password@www.contoso.com:80/Home/Inde"..., json: "{\"Prop\":\"https://user:password@www.contoso.com:"...) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_URI_JSON_values(value: "https://user:password@www.contoso.com:80/Home/Inde"···, json: "{\"Prop\":\"https://user:password@www.contoso.com:"···) EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_URI_JSON_values(value: null, json: "{\"Prop\":null}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ushort_as_string_JSON_values(value: 0, json: "{\"Prop\":\"0\"}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_nullable_ushort_as_string_JSON_values(value: 1, json: "{\"Prop\":\"1\"}") @@ -3331,7 +3393,7 @@ EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_short_JS EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_short_JSON_values(value: 1, json: "{\"Prop\":1}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_short_JSON_values(value: 32767, json: "{\"Prop\":32767}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_string_JSON_values(value: "", json: "{\"Prop\":\"\"}") -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_string_JSON_values(value: "❤❥웃유♋☮✌☏☢☠✔☑♚▲♪฿Ɖ⛏♥❣♂♀☿\ud83d\udc4d✍✉☣☤✘☒♛▼♫⌘⌛¡♡ღツ☼☁❅♾️✎©®™Σ"..., json: "{\"Prop\":\"\\u2764\\u2765\\uC6C3\\uC720\\u264B\\u"...) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_string_JSON_values(value: "❤❥웃유♋☮✌☏☢☠✔☑♚▲♪฿Ɖ⛏♥❣♂♀☿\ud83d\udc4d✍✉☣☤✘☒♛▼♫⌘⌛¡♡ღツ☼☁❅♾️✎©®™Σ"···, json: "{\"Prop\":\"\\u2764\\u2765\\uC6C3\\uC720\\u264B\\u"···) EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_string_JSON_values(value: "MaxValue", json: "{\"Prop\":\"MaxValue\"}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_string_JSON_values(value: "MinValue", json: "{\"Prop\":\"MinValue\"}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_TimeOnly_JSON_values(value: "00:00:00.0000000", json: "{\"Prop\":\"00:00:00.0000000\"}") @@ -3354,7 +3416,7 @@ EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_ulong_JS EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_ulong_JSON_values(value: 1, json: "{\"Prop\":1}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_ulong_JSON_values(value: 18446744073709551615, json: "{\"Prop\":18446744073709551615}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_URI_JSON_values(value: "file:///C:/test/path/file.txt", json: "{\"Prop\":\"file:///C:/test/path/file.txt\"}") -EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_URI_JSON_values(value: "https://user:password@www.contoso.com:80/Home/Inde"..., json: "{\"Prop\":\"https://user:password@www.contoso.com:"...) +EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_URI_JSON_values(value: "https://user:password@www.contoso.com:80/Home/Inde"···, json: "{\"Prop\":\"https://user:password@www.contoso.com:"···) EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_ushort_enum_JSON_values(value: 0, json: "{\"Prop\":0}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_ushort_enum_JSON_values(value: 1, json: "{\"Prop\":1}") EntityFrameworkCore.Jet.FunctionalTests.JsonTypesJetTest.Can_read_write_ushort_enum_JSON_values(value: 65535, json: "{\"Prop\":65535}") @@ -3727,6 +3789,7 @@ EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Non_virtual_one_to_ EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Non_virtual_reference_to_dependent_is_not_lazy_loaded EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Setting_reference_to_owned_type_to_null_is_allowed_on_non_virtual_navigation EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Setting_reference_to_owned_type_to_null_is_allowed_on_virtual_navigation +EntityFrameworkCore.Jet.FunctionalTests.LazyLoadProxyJetTest.Top_level_projection_track_entities_before_passing_to_client_method EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Attached_collections_are_not_marked_as_loaded(state: Added, lazy: False) EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Attached_collections_are_not_marked_as_loaded(state: Added, lazy: True) EntityFrameworkCore.Jet.FunctionalTests.LoadJetTest.Attached_collections_are_not_marked_as_loaded(state: Modified, lazy: False) @@ -6872,6 +6935,7 @@ EntityFrameworkCore.Jet.FunctionalTests.LoggingJetTest.Logs_context_initializati EntityFrameworkCore.Jet.FunctionalTests.LoggingJetTest.Logs_context_initialization_no_tracking EntityFrameworkCore.Jet.FunctionalTests.LoggingJetTest.Logs_context_initialization_relational_nulls EntityFrameworkCore.Jet.FunctionalTests.LoggingJetTest.Logs_context_initialization_sensitive_data_logging +EntityFrameworkCore.Jet.FunctionalTests.LoggingJetTest.StoredProcedureConcurrencyTokenNotMapped_throws_by_default EntityFrameworkCore.Jet.FunctionalTests.LoggingJetTest.UnnamedIndexPropertiesMappedToNonOverlappingTables_throws_by_default EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Attached_collections_are_not_marked_as_loaded(state: Added) EntityFrameworkCore.Jet.FunctionalTests.ManyToManyFieldsLoadJetTest.Attached_collections_are_not_marked_as_loaded(state: Modified) @@ -8113,42 +8177,1599 @@ EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Can_updat EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Initial_tracking_uses_skip_navigations(async: False) EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Initial_tracking_uses_skip_navigations(async: True) EntityFrameworkCore.Jet.FunctionalTests.ManyToManyTrackingProxyJetTest.Many_to_many_delete_behaviors_are_set -EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Binding_interceptors_are_used_by_queries(inject: False) -EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Binding_interceptors_are_used_by_queries(inject: True) -EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Binding_interceptors_are_used_when_creating_instances(inject: False) -EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Binding_interceptors_are_used_when_creating_instances(inject: True) -EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Intercept_query_materialization_for_empty_constructor(inject: False) -EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Intercept_query_materialization_for_empty_constructor(inject: True) -EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Intercept_query_materialization_for_full_constructor(inject: False) -EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Intercept_query_materialization_for_full_constructor(inject: True) -EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Intercept_query_materialization_with_owned_types(async: False) -EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Intercept_query_materialization_with_owned_types(async: True) -EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Multiple_materialization_interceptors_can_be_used(inject: False) -EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Multiple_materialization_interceptors_can_be_used(inject: True) -EntityFrameworkCore.Jet.FunctionalTests.MigrationsInfrastructureJetTest.Can_apply_all_migrations -EntityFrameworkCore.Jet.FunctionalTests.MigrationsInfrastructureJetTest.Can_apply_all_migrations_async -EntityFrameworkCore.Jet.FunctionalTests.MigrationsInfrastructureJetTest.Can_apply_one_migration -EntityFrameworkCore.Jet.FunctionalTests.MigrationsInfrastructureJetTest.Can_apply_range_of_migrations -EntityFrameworkCore.Jet.FunctionalTests.MigrationsInfrastructureJetTest.Can_diff_against_2_1_ASP_NET_Identity_model -EntityFrameworkCore.Jet.FunctionalTests.MigrationsInfrastructureJetTest.Can_diff_against_2_2_ASP_NET_Identity_model -EntityFrameworkCore.Jet.FunctionalTests.MigrationsInfrastructureJetTest.Can_diff_against_2_2_model -EntityFrameworkCore.Jet.FunctionalTests.MigrationsInfrastructureJetTest.Can_diff_against_3_0_ASP_NET_Identity_model -EntityFrameworkCore.Jet.FunctionalTests.MigrationsInfrastructureJetTest.Can_generate_down_script_using_names -EntityFrameworkCore.Jet.FunctionalTests.MigrationsInfrastructureJetTest.Can_generate_down_scripts -EntityFrameworkCore.Jet.FunctionalTests.MigrationsInfrastructureJetTest.Can_generate_idempotent_down_scripts -EntityFrameworkCore.Jet.FunctionalTests.MigrationsInfrastructureJetTest.Can_generate_idempotent_up_scripts -EntityFrameworkCore.Jet.FunctionalTests.MigrationsInfrastructureJetTest.Can_generate_idempotent_up_scripts_noTransactions -EntityFrameworkCore.Jet.FunctionalTests.MigrationsInfrastructureJetTest.Can_generate_migration_from_initial_database_to_initial -EntityFrameworkCore.Jet.FunctionalTests.MigrationsInfrastructureJetTest.Can_generate_no_migration_script -EntityFrameworkCore.Jet.FunctionalTests.MigrationsInfrastructureJetTest.Can_generate_one_down_script -EntityFrameworkCore.Jet.FunctionalTests.MigrationsInfrastructureJetTest.Can_generate_one_up_script -EntityFrameworkCore.Jet.FunctionalTests.MigrationsInfrastructureJetTest.Can_generate_up_script_using_names -EntityFrameworkCore.Jet.FunctionalTests.MigrationsInfrastructureJetTest.Can_generate_up_scripts -EntityFrameworkCore.Jet.FunctionalTests.MigrationsInfrastructureJetTest.Can_generate_up_scripts_noTransactions -EntityFrameworkCore.Jet.FunctionalTests.MigrationsInfrastructureJetTest.Can_get_active_provider -EntityFrameworkCore.Jet.FunctionalTests.MigrationsInfrastructureJetTest.Can_revert_all_migrations -EntityFrameworkCore.Jet.FunctionalTests.MigrationsInfrastructureJetTest.Can_revert_one_migrations -EntityFrameworkCore.Jet.FunctionalTests.MigrationsInfrastructureJetTest.Empty_Migration_Creates_Database +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Binding_interceptors_are_used_by_queries(inject: False, usePooling: False) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Binding_interceptors_are_used_by_queries(inject: False, usePooling: True) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Binding_interceptors_are_used_by_queries(inject: True, usePooling: False) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Binding_interceptors_are_used_by_queries(inject: True, usePooling: True) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Binding_interceptors_are_used_when_creating_instances(inject: False, usePooling: False) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Binding_interceptors_are_used_when_creating_instances(inject: False, usePooling: True) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Binding_interceptors_are_used_when_creating_instances(inject: True, usePooling: False) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Binding_interceptors_are_used_when_creating_instances(inject: True, usePooling: True) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Intercept_query_materialization_for_empty_constructor(inject: False, usePooling: False) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Intercept_query_materialization_for_empty_constructor(inject: False, usePooling: True) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Intercept_query_materialization_for_empty_constructor(inject: True, usePooling: False) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Intercept_query_materialization_for_empty_constructor(inject: True, usePooling: True) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Intercept_query_materialization_for_full_constructor(inject: False, usePooling: False) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Intercept_query_materialization_for_full_constructor(inject: False, usePooling: True) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Intercept_query_materialization_for_full_constructor(inject: True, usePooling: False) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Intercept_query_materialization_for_full_constructor(inject: True, usePooling: True) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Intercept_query_materialization_with_owned_types(async: False, usePooling: False) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Intercept_query_materialization_with_owned_types(async: False, usePooling: True) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Intercept_query_materialization_with_owned_types(async: True, usePooling: False) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Intercept_query_materialization_with_owned_types(async: True, usePooling: True) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Multiple_materialization_interceptors_can_be_used(inject: False, usePooling: False) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Multiple_materialization_interceptors_can_be_used(inject: False, usePooling: True) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Multiple_materialization_interceptors_can_be_used(inject: True, usePooling: False) +EntityFrameworkCore.Jet.FunctionalTests.MaterializationInterceptionJetTest.Multiple_materialization_interceptors_can_be_used(inject: True, usePooling: True) +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_apply_all_migrations +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_apply_all_migrations_async +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_apply_one_migration +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_apply_range_of_migrations +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_apply_second_migration_in_parallel +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_apply_second_migration_in_parallel_async +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_diff_against_2_1_ASP_NET_Identity_model +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_diff_against_2_2_ASP_NET_Identity_model +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_diff_against_2_2_model +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_diff_against_3_0_ASP_NET_Identity_model +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_generate_down_script_using_names +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_generate_down_scripts +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_generate_idempotent_down_scripts +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_generate_idempotent_up_scripts +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_generate_idempotent_up_scripts_noTransactions +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_generate_migration_from_initial_database_to_initial +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_generate_no_migration_script +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_generate_one_down_script +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_generate_one_up_script +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_generate_up_script_using_names +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_generate_up_scripts +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_generate_up_scripts_noTransactions +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_get_active_provider +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_revert_all_migrations +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Can_revert_one_migrations +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsInfrastructureJetTest.Empty_Migration_Creates_Database +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_check_constraint_generates_exec_when_idempotent +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_check_constraint_with_name +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_identity +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_identity_seed_increment +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_identity_seed_increment_for_TPC +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_shared +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_ansi +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_check_constraint +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_comment +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_computedSql_unspecified +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_datetime +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_datetime_store_type +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_datetime_with_explicit_precision(precision: 0, fractionalSeconds: "", ticksToAdd: 1234567) +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_datetime_with_explicit_precision(precision: 1, fractionalSeconds: ".1", ticksToAdd: 1234567) +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_datetime_with_explicit_precision(precision: 2, fractionalSeconds: ".12", ticksToAdd: 1234567) +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_datetime_with_explicit_precision(precision: 3, fractionalSeconds: ".123", ticksToAdd: 1234567) +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_datetime_with_explicit_precision(precision: 4, fractionalSeconds: ".1234", ticksToAdd: 1234567) +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_datetime_with_explicit_precision(precision: 5, fractionalSeconds: ".12345", ticksToAdd: 1234567) +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_datetime_with_explicit_precision(precision: 6, fractionalSeconds: ".123456", ticksToAdd: 1234567) +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_datetime_with_explicit_precision(precision: 7, fractionalSeconds: ".1200000", ticksToAdd: 1200000) +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_datetime_with_explicit_precision(precision: 7, fractionalSeconds: ".1234567", ticksToAdd: 1234567) +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_datetimeoffset_with_explicit_precision(precision: 0, fractionalSeconds: "", ticksToAdd: 1234567) +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_datetimeoffset_with_explicit_precision(precision: 1, fractionalSeconds: ".1", ticksToAdd: 1234567) +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_datetimeoffset_with_explicit_precision(precision: 2, fractionalSeconds: ".12", ticksToAdd: 1234567) +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_datetimeoffset_with_explicit_precision(precision: 3, fractionalSeconds: ".123", ticksToAdd: 1234567) +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_datetimeoffset_with_explicit_precision(precision: 4, fractionalSeconds: ".1234", ticksToAdd: 1234567) +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_datetimeoffset_with_explicit_precision(precision: 5, fractionalSeconds: ".12345", ticksToAdd: 1234567) +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_datetimeoffset_with_explicit_precision(precision: 6, fractionalSeconds: ".123456", ticksToAdd: 1234567) +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_datetimeoffset_with_explicit_precision(precision: 7, fractionalSeconds: ".1200000", ticksToAdd: 1200000) +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_datetimeoffset_with_explicit_precision(precision: 7, fractionalSeconds: ".1234567", ticksToAdd: 1234567) +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_string +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_time_with_explicit_precision(precision: 0, fractionalSeconds: "", ticksToAdd: 1234567) +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_time_with_explicit_precision(precision: 1, fractionalSeconds: ".1", ticksToAdd: 1234567) +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_time_with_explicit_precision(precision: 2, fractionalSeconds: ".12", ticksToAdd: 1234567) +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_time_with_explicit_precision(precision: 3, fractionalSeconds: ".123", ticksToAdd: 1234567) +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_time_with_explicit_precision(precision: 4, fractionalSeconds: ".1234", ticksToAdd: 1234567) +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_time_with_explicit_precision(precision: 5, fractionalSeconds: ".12345", ticksToAdd: 1234567) +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_time_with_explicit_precision(precision: 6, fractionalSeconds: ".123456", ticksToAdd: 1234567) +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_time_with_explicit_precision(precision: 7, fractionalSeconds: ".12", ticksToAdd: 1200000) +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_time_with_explicit_precision(precision: 7, fractionalSeconds: ".1234567", ticksToAdd: 1234567) +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValue_unspecified +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_defaultValueSql_unspecified +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_fixed_length +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_max_length +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_max_length_on_derived +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_column_with_required +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_foreign_key +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_foreign_key_with_name +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_json_columns_to_existing_table +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_optional_primitive_collection_to_existing_table +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_primary_key_composite_with_name +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_primary_key_int +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_primary_key_string +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_required_primitive_collection_to_existing_table +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_required_primitive_collection_with_custom_converter_and_custom_default_value_to_existing_table +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_required_primitive_collection_with_custom_default_value_sql_to_existing_table +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_required_primitive_collection_with_custom_default_value_to_existing_table +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_required_primitve_collection_to_existing_table +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_required_primitve_collection_with_custom_converter_and_custom_default_value_to_existing_table +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_required_primitve_collection_with_custom_default_value_sql_to_existing_table +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_required_primitve_collection_with_custom_default_value_to_existing_table +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_unique_constraint +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_unique_constraint_composite_with_name +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_check_constraint +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_column_add_comment +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_column_add_identity +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_column_change_comment +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_column_change_type +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_column_remove_identity +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_computed_column_add_comment +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_table_add_comment +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_table_add_comment_non_default_schema +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_table_change_comment +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Create_schema +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Create_table +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Create_table_no_key +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Create_table_with_comments +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Create_table_with_complex_type_with_required_properties_on_derived_entity_in_TPH +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Create_table_with_identity_column_value_converter +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Create_table_with_json_column +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Create_table_with_json_column_explicit_json_column_names +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Create_table_with_multiline_comments +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Create_table_with_optional_primitive_collection +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Create_table_with_required_primitive_collection +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.DeleteDataOperation_composite_key +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.DeleteDataOperation_simple_key +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Drop_check_constraint +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Drop_column +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Drop_foreign_key +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Drop_index +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Drop_primary_key_int +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Drop_primary_key_string +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Drop_table +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Drop_unique_constraint +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Rename_column +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Rename_json_column +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.UpdateDataOperation_composite_key +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.UpdateDataOperation_multiple_columns +EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.UpdateDataOperation_simple_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Access_mode_can_be_overridden_at_entity_and_property_levels +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_add_shadow_primitive_collections_when_they_have_been_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_add_shadow_properties_when_they_have_been_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_call_PrimitiveCollection_on_a_field +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_call_Property_on_a_field +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_ignore_a_field +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_ignore_shadow_primitive_collections_when_they_have_been_added_explicitly +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_ignore_shadow_properties_when_they_have_been_added_explicitly +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_set_complex_property_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_set_custom_value_generator_for_primitive_collections +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_set_custom_value_generator_for_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_set_max_length_for_primitive_collections +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_set_max_length_for_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_set_max_length_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_set_precision_and_scale_for_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_set_precision_and_scale_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_set_primitive_collection_annotation_when_no_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_set_property_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_set_property_annotation_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_set_property_annotation_when_no_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_set_sentinel_for_primitive_collections +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_set_sentinel_for_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_set_sentinel_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_set_unbounded_max_length_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_set_unicode_for_primitive_collections +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_set_unicode_for_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_set_unicode_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_use_table_splitting +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_use_table_splitting_with_schema +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Can_use_TPH +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Complex_properties_can_be_configured_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Complex_properties_not_discovered_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Configuring_direction_on_RowsAffectedParameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Conflicting_sproc_rows_affected_parameter_and_result_column_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Conflicting_sproc_rows_affected_return_and_parameter_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Conflicting_sproc_rows_affected_return_and_result_column_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Duplicate_sproc_original_value_parameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Duplicate_sproc_parameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Duplicate_sproc_result_column_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Duplicate_sproc_rows_affected_parameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Duplicate_sproc_rows_affected_result_column_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.HasField_for_primitive_collection_throws_if_field_is_not_found +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.HasField_for_primitive_collection_throws_if_field_is_wrong_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.HasField_throws_if_field_is_not_found +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.HasField_throws_if_field_is_wrong_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.IEnumerable_properties_with_value_converter_set_are_not_discovered_as_complex_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Mapping_throws_for_empty_complex_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Mapping_throws_for_non_ignored_navigations_on_complex_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Non_nullable_properties_cannot_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Primitive_collections_are_required_by_default_only_if_CLR_type_is_nullable +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Primitive_collections_can_be_made_concurrency_tokens +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Primitive_collections_can_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Primitive_collections_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Primitive_collections_can_be_set_to_generate_values_on_Add +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Primitive_collections_can_have_field_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Primitive_collections_specified_by_string_are_shadow_properties_unless_already_known_to_be_CLR_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.PrimitiveCollectionBuilder_methods_can_be_chained +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Properties_are_required_by_default_only_if_CLR_type_is_nullable +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Properties_can_be_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Properties_can_be_ignored_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Properties_can_be_made_concurrency_tokens +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Properties_can_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Properties_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Properties_can_be_set_to_generate_values_on_Add +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Properties_can_have_access_mode_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Properties_can_have_custom_type_value_converter_type_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Properties_can_have_field_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Properties_can_have_non_generic_value_converter_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Properties_can_have_provider_type_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Properties_can_have_provider_type_set_for_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Properties_can_have_value_converter_configured_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Properties_can_have_value_converter_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Properties_can_have_value_converter_set_inline +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Properties_can_set_row_version +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Properties_specified_by_string_are_shadow_properties_unless_already_known_to_be_CLR_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.PropertyBuilder_methods_can_be_chained +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Throws_for_bad_value_generator_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Throws_for_optional_complex_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Throws_for_primitive_collection_with_bad_value_generator_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Throws_for_tuple +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Throws_for_value_generator_that_cannot_be_constructed +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Value_converter_configured_on_non_nullable_type_is_applied +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Value_converter_configured_on_nullable_type_overrides_non_nullable +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericComplexType.Value_converter_type_is_checked +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Adding_conflicting_check_constraint_to_derived_type_before_base_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Adding_conflicting_check_constraint_to_derived_type_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Base_type_can_be_discovered_after_creating_foreign_keys_on_derived +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Base_types_are_mapped_correctly_if_discovered_last +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_add_check_constraints +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_create_relationship_between_base_type_and_derived_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_get_set_discriminator_mapping_is_complete +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_ignore_base_entity_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_map_derived_self_ref_many_to_one +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_map_derived_types_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_match_navigation_to_derived_type_with_inverse_on_base +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_override_TPC_with_TPH +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_promote_shadow_fk_to_the_base_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_reconfigure_inherited_intraHierarchical_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_remove_objects_in_derived_type_which_was_set_using_data_annotation_while_setting_base_type_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_set_and_remove_base_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_specify_discriminator_values_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_specify_discriminator_without_derived_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_use_shadow_FK_that_collides_with_convention_shadow_FK_on_other_derived_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Can_use_table_splitting +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Cannot_remove_objects_in_derived_type_which_was_set_using_explicit_while_setting_base_type_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Index_convention_run_for_fk_when_derived_type_discovered_before_base_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Index_convention_sets_filter_for_unique_index_when_base_type_changed +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Index_removed_when_covered_by_an_inherited_foreign_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Index_removed_when_covered_by_an_inherited_index +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Inherited_clr_properties_are_mapped_to_the_same_column +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Ordering_of_entityType_discovery_does_not_affect_key_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Pulling_relationship_to_a_derived_type_creates_relationships_on_other_derived_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Pulling_relationship_to_a_derived_type_many_to_one_creates_relationships_on_other_derived_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Pulling_relationship_to_a_derived_type_one_to_one_creates_relationship_on_base +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Pulling_relationship_to_a_derived_type_one_to_one_with_fk_creates_relationship_on_base +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Pulling_relationship_to_a_derived_type_reverted_creates_relationships_on_other_derived_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Pulling_relationship_to_a_derived_type_with_fk_creates_relationships_on_other_derived_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Relationships_are_discovered_on_the_base_entity_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Relationships_on_derived_types_are_discovered_first_if_base_is_one_sided +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Removing_a_key_triggers_fk_discovery_on_derived_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Removing_derived_removes_it_from_directly_derived_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Setting_base_type_handles_require_value_generator_properly +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.Setting_base_type_to_null_fixes_relationships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.TPC_identifying_FKs_are_created_on_all_tables +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.TPT_identifying_FK_is_created_only_on_declaring_table +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericInheritance.TPT_index_can_use_inherited_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Can_configure_join_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Can_configure_join_type_with_implicit_join_relationships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Can_configure_shared_join_type_with_implicit_join_relationships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Can_ignore_existing_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Can_use_ForeignKeyAttribute_with_InversePropertyAttribute +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Can_use_implicit_shared_type_as_join_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Can_use_implicit_shared_type_with_default_name_and_implicit_relationships_as_join_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Can_use_implicit_shared_type_with_default_name_as_join_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Can_use_implicit_shared_type_with_implicit_relationships_as_join_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Can_use_shared_type_as_join_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Discovers_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Finds_existing_navigations_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Finds_existing_navigations_and_uses_associated_FK_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Finds_existing_navigations_and_uses_associated_FK_with_implicit_relationships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.FK_properties_matching_navigations_are_discovered_on_explicit_join_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.FK_properties_matching_types_are_discovered_on_explicit_join_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.ForeignKeyAttribute_configures_the_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.ForeignKeyAttribute_does_not_force_convention_join_table_inclusion_matching_key_names +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.ForeignKeyAttribute_does_not_force_convention_join_table_inclusion_mismatching_key_names +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.IsRequired_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Join_entity_type_uses_default_schema_if_related_are_different +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Join_entity_type_uses_same_schema +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Join_type_is_automatically_configured_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Join_type_is_not_automatically_configured_when_navigations_are_ambiguous +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Many_to_many_with_a_shadow_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Many_to_many_with_no_navigations_configured +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Many_to_many_with_only_Has_navigation_configured +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Many_to_many_with_only_With_navigation_configured +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Navigation_properties_can_set_access_mode +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Overrides_ForeignKeyAttribute +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Skip_navigation_field_can_be_set_via_attribute +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Throws_for_conflicting_many_to_one_on_left +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Throws_for_conflicting_many_to_one_on_right +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Throws_for_self_ref_using_self +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Throws_for_self_ref_with_same_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.Unconfigured_many_to_many_navigations_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.UsingEntity_with_shared_type_passed_when_marked_as_shared_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToMany.UsingEntity_with_shared_type_passes_when_configured_as_shared +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Access_mode_can_be_overridden_at_entity_and_navigation_property_levels +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Can_add_annotations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Can_change_delete_behavior +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Can_have_both_convention_properties_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Can_have_both_convention_properties_specified_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Can_have_FK_by_convention_specified_with_explicit_principal_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Can_have_FK_by_convention_specified_with_explicit_principal_key_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Can_have_principal_key_by_convention_specified_with_explicit_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Can_have_principal_key_by_convention_specified_with_explicit_PK_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Can_set_foreign_key_property_when_matching_property_added +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Can_use_alternate_composite_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Can_use_alternate_composite_key_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Can_use_explicitly_specified_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Can_use_non_PK_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_both_navigations_and_creates_composite_FK_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_both_navigations_and_creates_FK_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_both_navigations_and_creates_new_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_both_navigations_and_creates_shadow_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_both_navigations_and_does_not_use_existing_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_both_navigations_and_finds_existing_composite_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_both_navigations_and_matches_shadow_FK_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_both_navigations_and_overrides_existing_FK_if_uniqueness_does_not_match +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_both_navigations_and_uses_specified_FK_even_if_found_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_both_navigations_with_existing_FK_not_found_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_relationship_on_existing_FK_is_using_different_principal_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_relationship_on_existing_FK_is_using_different_principal_key_different_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_relationship_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_relationship_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_relationship_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_relationship_with_no_navigations_and_specified_composite_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_relationship_with_no_navigations_and_specified_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_shadow_FK_property_with_non_shadow_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_shadow_FK_property_with_shadow_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_shadow_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_shadow_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_shadow_FK_with_no_navigations_with +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_shadow_property_for_foreign_key_according_to_navigation_to_principal_name_when_present +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_shadow_property_for_foreign_key_according_to_target_type_when_navigation_to_principal_name_not_present +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_specified_composite_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_specified_composite_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_specified_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Creates_specified_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Explicitly_set_shadow_FK_name_is_preserved_with_HasPrincipalKey +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Finds_existing_navigation_to_dependent_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Finds_existing_navigation_to_principal_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Finds_existing_navigations_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Finds_existing_navigations_and_uses_associated_FK_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Handles_identity_correctly_while_removing_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Navigation_properties_can_set_access_mode +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Non_nullable_FK_are_required_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Non_nullable_FK_can_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Non_nullable_FK_can_be_made_optional_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Nullable_FK_are_optional_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Nullable_FK_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.One_to_many_relationship_has_no_ambiguity_explicit +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Relationships_discovered_when_ambiguity_on_the_inverse_is_resolved +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Removes_existing_unidirectional_one_to_one_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Resolves_ambiguous_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericManyToOne.Throws_on_existing_one_to_one_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Access_mode_can_be_overridden_at_entity_and_primitive_collection_levels +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Access_mode_can_be_overridden_at_entity_and_property_levels +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_add_contained_indexes +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_add_index +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_add_index_when_no_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_add_multiple_indexes +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_add_seed_data_anonymous_objects +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_add_seed_data_anonymous_objects_indexed_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_add_seed_data_anonymous_objects_indexed_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_add_seed_data_objects +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_add_seed_data_objects_indexed_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_add_seed_data_objects_indexed_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_add_shadow_properties_when_they_have_been_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_add_shared_type_entity_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_call_PrimitiveCollection_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_call_Property_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_get_entity_builder_for_clr_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_ignore_a_field_on_a_keyless_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_ignore_a_field_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_ignore_a_property_that_is_part_of_explicit_entity_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_ignore_explicit_interface_implementation_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_ignore_shadow_properties_when_they_have_been_added_explicitly +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_override_navigations_as_primitive_collections +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_override_navigations_as_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_alternate_key_for_primitive_collection_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_alternate_key_from_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_alternate_key_from_clr_property_when_property_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_alternate_key_from_property_name_when_no_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_alternate_key_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_collation_for_primitive_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_collation_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_composite_alternate_key_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_composite_entity_key_from_clr_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_composite_entity_key_from_property_names_when_mixed_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_composite_index_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_composite_key_for_primitive_collection_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_composite_key_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_custom_value_generator_for_primitive_collections +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_custom_value_generator_for_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_element_type_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_entity_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_entity_key_from_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_entity_key_from_clr_property_when_property_ignored_on_keyless +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_entity_key_from_property_name_when_no_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_entity_key_with_annotations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_fixed_length_for_primitive_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_fixed_length_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_index_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_key_for_primitive_collection_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_key_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_max_length_for_primitive_collections +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_max_length_for_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_max_length_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_model_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_precision_and_scale_for_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_precision_and_scale_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_primary_key_by_convention_for_user_specified_shadow_primitive_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_primary_key_by_convention_for_user_specified_shadow_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_primitive_collection_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_primitive_collection_annotation_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_primitive_collection_annotation_when_no_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_property_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_property_annotation_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_property_annotation_when_no_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_sentinel_for_primitive_collections +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_sentinel_for_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_sentinel_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_store_type_for_primitive_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_store_type_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_unbounded_max_length_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_unicode_for_primitive_collections +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_unicode_for_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_set_unicode_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_upgrade_candidate_key_to_primary_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_use_table_splitting +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Can_use_table_splitting_with_schema +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Cannot_add_shared_type_when_non_shared_exists +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Configuring_direction_on_RowsAffectedParameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Conflicting_sproc_rows_affected_parameter_and_result_column_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Conflicting_sproc_rows_affected_parameter_and_return_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Conflicting_sproc_rows_affected_result_column_and_parameter_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Conflicting_sproc_rows_affected_result_column_and_return_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Conflicting_sproc_rows_affected_return_and_parameter_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Conflicting_sproc_rows_affected_return_and_result_column_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Conventions_can_be_added +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Conventions_can_be_removed +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Conventions_can_be_removed_by_generic_method +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Conventions_can_be_replaced +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Conversion_on_base_property_prevents_primitive_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Conversion_on_base_property_prevents_primitive_collection_when_base_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Duplicate_sproc_original_value_parameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Duplicate_sproc_parameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Duplicate_sproc_result_column_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Duplicate_sproc_rows_affected_parameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Duplicate_sproc_rows_affected_result_column_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Element_types_are_nullable_by_default_if_the_type_is_nullable +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Element_types_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Element_types_can_have_custom_type_value_converter_type_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Element_types_can_have_max_length +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Element_types_can_have_non_generic_value_converter_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Element_types_can_have_precision_and_scale +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Element_types_can_have_provider_type_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Element_types_can_have_unicode_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Element_types_have_default_precision_and_scale +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Element_types_have_default_unicode +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Element_types_have_no_max_length_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Entity_key_on_secondary_property_is_discovered_by_convention_when_first_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Entity_key_on_shadow_property_is_discovered_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.EntityType_name_is_stored_culture_invariantly +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.HasField_for_primitive_collection_throws_if_field_is_not_found +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.HasField_for_primitive_collection_throws_if_field_is_wrong_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.HasField_throws_if_field_is_not_found +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.HasField_throws_if_field_is_wrong_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.IEnumerable_properties_with_value_converter_set_are_not_discovered_as_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Ignoring_a_base_type_removes_relationships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Ignoring_a_navigation_property_removes_discovered_entity_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Ignoring_a_navigation_property_removes_discovered_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Indexes_can_have_same_name_across_tables +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Int32_cannot_be_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Key_properties_cannot_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Mapping_for_primitive_collection_ignores_ignored_array +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Mapping_ignores_ignored_array +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Mapping_ignores_ignored_three_dimensional_array +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Mapping_ignores_ignored_two_dimensional_array +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Mapping_throws_for_non_ignored_three_dimensional_array +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Model_is_readonly_after_Finalize +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Nested_primitive_collection_are_discovered_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Non_nullable_properties_cannot_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Object_cannot_be_configured_as_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Object_cannot_be_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Primitive_collections_are_required_by_default_only_if_CLR_type_is_nullable +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Primitive_collections_can_be_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Primitive_collections_can_be_made_concurrency_tokens +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Primitive_collections_can_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Primitive_collections_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Primitive_collections_can_be_set_to_generate_values_on_Add +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Primitive_collections_can_have_access_mode_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Primitive_collections_can_have_field_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Primitive_collections_can_have_value_converter_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Primitive_collections_specified_by_string_are_shadow_properties_unless_already_known_to_be_CLR_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.PrimitiveCollection_Key_properties_cannot_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.PrimitiveCollectionBuilder_methods_can_be_chained +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Private_primitive_collection_is_not_discovered_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Private_property_is_not_discovered_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_are_required_by_default_only_if_CLR_type_is_nullable +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_be_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_be_ignored_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_be_made_concurrency_tokens +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_be_set_to_generate_values_on_Add +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_have_access_mode_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_have_custom_type_value_converter_type_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_have_field_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_have_non_generic_value_converter_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_have_provider_type_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_have_provider_type_set_for_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_have_value_converter_configured_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_have_value_converter_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_have_value_converter_set_inline +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_can_set_row_version +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Properties_specified_by_string_are_shadow_properties_unless_already_known_to_be_CLR_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Property_bag_cannot_be_configured_as_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.PropertyBuilder_methods_can_be_chained +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Setting_alternate_key_makes_properties_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Setting_sentinel_throws_for_noncompatible +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Setting_sentinel_throws_for_null_on_nonnullable +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Throws_for_bad_value_generator_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Throws_for_bad_value_generator_type_for_primitive_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Throws_for_conflicting_base_configurations_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Throws_for_int_keyed_dictionary +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Throws_for_primitive_collection_for_value_generator_that_cannot_be_constructed +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Throws_for_value_generator_that_cannot_be_constructed +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Value_converter_configured_on_base_type_is_not_applied +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Value_converter_configured_on_non_nullable_type_is_applied +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Value_converter_configured_on_nullable_type_overrides_non_nullable +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Value_converter_type_is_checked +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericNonRelationship.Value_converter_type_on_primitive_collection_is_checked +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Ambiguous_relationship_candidate_does_not_block_creating_further_relationships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Annotations_are_preserved_when_rebuilding +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Attempt_to_configure_Navigation_property_which_is_actually_a_Property_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_add_annotations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_change_delete_behavior +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_exclude_navigation_pointed_by_foreign_key_attribute_from_explicit_configuration +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_exclude_navigation_with_foreign_key_attribute_from_explicit_configuration +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_exclude_navigation_with_foreign_key_attribute_on_principal_type_from_explicit_configuration +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_have_both_convention_properties_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_have_both_convention_properties_specified_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_have_FK_by_convention_specified_with_explicit_principal_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_have_FK_by_convention_specified_with_explicit_principal_key_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_have_FK_semi_specified_with_explicit_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_have_principal_key_by_convention_replaced_with_primary_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_have_principal_key_by_convention_specified_with_explicit_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_have_principal_key_by_convention_specified_with_explicit_PK_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_set_foreign_key_property_when_matching_property_added +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_specify_requiredness_after_OnDelete +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_use_alternate_composite_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_use_alternate_composite_key_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_use_explicitly_specified_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Can_use_non_PK_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_both_navigations_and_creates_composite_FK_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_both_navigations_and_creates_FK_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_both_navigations_and_creates_shadow_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_both_navigations_and_matches_shadow_FK_property_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_both_navigations_and_overrides_existing_FK_when_uniqueness_does_not_match +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_both_navigations_and_uses_existing_composite_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_both_navigations_and_uses_existing_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_both_navigations_and_uses_existing_FK_not_found_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_both_navigations_and_uses_specified_FK_even_if_found_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_one_to_many_relationship_with_single_ref_as_dependent_to_principal_if_matching_entity_name_properties_are_on_navigation_side +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_one_to_many_relationship_with_single_ref_as_dependent_to_principal_if_matching_navigation_name_properties_are_on_navigation_side +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_one_to_many_relationship_with_single_ref_as_dependent_to_principal_if_matching_properties_are_on_both_sides +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_one_to_many_relationship_with_single_ref_as_dependent_to_principal_if_no_matching_properties_either_side +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_overlapping_foreign_keys_with_different_nullability +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_relationship_on_existing_FK_is_using_different_principal_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_relationship_on_existing_FK_is_using_different_principal_key_different_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_relationship_with_both_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_relationship_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_relationship_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_relationship_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_relationship_with_no_navigations_and_specified_composite_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_relationship_with_no_navigations_and_specified_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_shadow_fk_configuring_using_ForeignKeyAttribute +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_shadow_FK_property_with_non_shadow_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_shadow_FK_property_with_shadow_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_shadow_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_shadow_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_shadow_FK_with_no_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_shadow_property_for_foreign_key_according_to_navigation_to_principal_name_when_present +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_shadow_property_for_foreign_key_according_to_target_type_when_navigation_to_principal_name_not_present +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_specified_composite_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_specified_composite_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_specified_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Creates_specified_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Do_not_match_non_unique_FK_when_overlap_with_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Explicit_principal_key_is_not_replaced_with_new_primary_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Finds_existing_navigation_to_dependent_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Finds_existing_navigation_to_principal_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Finds_existing_navigations_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Finds_existing_navigations_and_uses_associated_FK_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Handles_identity_correctly_while_removing_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.HasMany_with_a_collection_navigation_CLR_property_to_derived_type_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.HasNoKey_call_on_principal_entity_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.HasNoKey_call_on_principal_with_navigation_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Keyless_type_discovered_before_referenced_entity_type_does_not_leave_temp_id +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Keyless_type_with_unmapped_collection_navigations_does_not_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Navigation_properties_can_set_access_mode +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Navigation_to_shared_type_is_not_discovered_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Non_nullable_FK_are_required_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Non_nullable_FK_can_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Non_nullable_FK_can_be_made_optional_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Nullable_FK_are_optional_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Nullable_FK_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Nullable_FK_overrides_NRT_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.One_to_many_relationship_has_no_ambiguity_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.One_to_many_relationship_has_no_ambiguity_explicit +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Principal_key_by_convention_is_not_replaced_with_new_incompatible_primary_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Reference_navigation_from_keyless_entity_type_works +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.RemoveKey_does_not_add_back_foreign_key_pointing_to_the_same_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Removes_existing_unidirectional_one_to_one_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Resolves_ambiguous_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Shadow_foreign_keys_to_generic_types_have_terrible_names_that_should_not_change +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Shadow_property_created_for_foreign_key_is_nullable +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Throws_on_existing_many_to_many +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Throws_on_existing_one_to_one_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Throws_on_keyless_type_as_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.Throws_when_foreign_key_references_shadow_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.WithMany_call_on_keyless_entity_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToMany.WithMany_pointing_to_keyless_entity_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_add_annotations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_be_defined_before_the_PK_from_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_be_defined_before_the_PK_from_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_change_delete_behavior +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_create_relationship_if_dependent_has_matching_property_with_entity_type_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_create_relationship_if_dependent_has_matching_property_with_navigation_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_create_relationship_if_foreign_key_attribute_is_used +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_create_relationship_if_navigations_have_same_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_create_relationship_if_user_specifies_principal_key_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_create_relationship_if_user_specify_foreign_key_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_create_self_referencing_relationship_without_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_create_two_FKs_using_the_same_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_have_both_alternate_keys_specified_explicitly +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_have_both_alternate_keys_specified_explicitly_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_have_both_keys_specified_explicitly +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_have_both_keys_specified_explicitly_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_have_dependent_side_specified_explicitly_on_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_invert_relationship_if_principal_has_matching_property_with_entity_type_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_invert_relationship_if_principal_has_matching_property_with_navigation_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_specify_shadow_fk_before_configuring_principal_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_specify_shadow_fk_before_reconfiguring_principal_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_specify_shadow_identifying_fk +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_use_alternate_composite_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_use_alternate_composite_key_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_use_alternate_principal_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_use_pk_as_fk_if_principal_end_is_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Can_use_PK_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Configuring_FK_properties_as_PK_sets_DeleteBehavior_Cascade +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Configuring_principal_type_as_keyless_inverts_the_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Configuring_principal_type_as_keyless_throws_if_not_invertible +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Configuring_principal_type_as_keyless_throws_when_there_is_an_explicit_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_both_navigations_and_creates_composite_FK_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_both_navigations_and_creates_new_FK_when_not_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_both_navigations_and_new_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_both_navigations_and_new_FK_over_PK_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_both_navigations_and_overrides_existing_FK_when_uniqueness_does_not_match +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_both_navigations_and_removes_existing_FK_when_not_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_both_navigations_and_shadow_FK_if_existing_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_both_navigations_and_specified_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_both_navigations_and_uses_existing_composite_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_both_navigations_and_uses_existing_FK_not_found_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_both_navigations_and_uses_specified_FK_even_if_found_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_both_navigations_and_uses_specified_FK_even_if_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_composite_FK_when_specified_on_principal_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_composite_FK_when_specified_on_principal_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_composite_FK_when_specified_on_principal_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_field_backed_FK_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_FK_when_principal_and_foreign_key_specified_on_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_FK_when_principal_and_foreign_key_specified_on_dependent_in_reverse_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_FK_when_principal_and_foreign_key_specified_on_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_FK_when_specified_on_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_FK_when_specified_on_dependent_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_FK_when_specified_on_dependent_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_FK_when_specified_on_dependent_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_FK_when_specified_on_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_FK_when_specified_on_principal_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_FK_when_specified_on_principal_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_FK_when_specified_on_principal_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_index_even_if_covered_by_an_alternate_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_one_to_one_relationship_with_single_ref_as_principal_to_dependent_if_matching_properties_are_on_the_other_side +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_principal_key_when_specified_on_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_principal_key_when_specified_on_dependent_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_principal_key_when_specified_on_dependent_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_principal_key_when_specified_on_dependent_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_principal_key_when_specified_on_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_principal_key_when_specified_on_principal_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_principal_key_when_specified_on_principal_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_principal_key_when_specified_on_principal_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_relationship_on_existing_FK_if_using_different_principal_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_relationship_on_existing_FK_if_using_different_principal_key_different_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_relationship_with_navigation_to_dependent_and_new_FK_from_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_relationship_with_navigation_to_dependent_and_new_FK_from_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_relationship_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_relationship_with_specified_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_relationship_with_specified_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_relationship_with_specified_FK_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_self_referencing_FK_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_self_referencing_FK_by_convention_inverted +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_self_referencing_FK_on_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_self_referencing_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_self_referencing_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_shadow_FK_property_with_non_shadow_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Creates_shadow_FK_property_with_shadow_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Does_not_use_existing_FK_when_principal_key_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Does_not_use_pk_as_fk_if_principal_end_is_not_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Finds_existing_navigation_to_dependent_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Finds_existing_navigations_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Finds_existing_navigations_and_uses_associated_FK_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Foreign_key_properties_are_not_discovered_for_one_to_one_relationship_with_ambiguous_principal_end +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Handles_identity_correctly_while_removing_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Ignoring_properties_on_principal_resolves_ambiguity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Ignoring_properties_resolves_ambiguity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Inverse_discovered_after_entity_unignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.IsRequired_throws_principal_end_is_ambiguous +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Multiple_self_referencing_navigations_throw_as_ambiguous +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Navigation_properties_can_set_access_mode +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Navigation_to_shared_type_is_not_discovered_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Non_nullable_FK_are_required_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Non_nullable_FK_can_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Non_nullable_FK_can_be_made_optional_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Nullable_FK_are_optional_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Nullable_FK_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.OneToOne_can_have_PK_explicitly_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Overrides_FK_if_specified_PK_count_does_not_match_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Overrides_FK_if_specified_PK_types_do_not_match_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Overrides_PK_if_specified_FK_count_does_not_match_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Overrides_PK_if_specified_FK_types_do_not_match_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Principal_and_dependent_can_be_flipped_and_composite_PK_is_still_used_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Principal_and_dependent_can_be_flipped_twice_in_reverse_order_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Principal_and_dependent_can_be_flipped_twice_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Principal_and_dependent_can_be_flipped_using_principal_and_composite_PK_is_still_used_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Principal_and_dependent_can_be_flipped_when_self_referencing +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Principal_and_dependent_can_be_flipped_when_self_referencing_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Principal_and_dependent_can_be_flipped_when_self_referencing_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Principal_and_dependent_cannot_be_flipped_twice +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Principal_and_dependent_cannot_be_flipped_twice_in_reverse_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Removes_existing_FK_when_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Removes_existing_unidirectional_many_to_one_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Removes_existing_unidirectional_one_to_many_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Replaces_existing_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_for_one_to_one_relationship_if_both_sides_have_matching_PKs +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_for_one_to_one_relationship_if_both_sides_have_matching_property_mixed +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_for_one_to_one_relationship_if_both_sides_have_matching_property_with_entity_type_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_for_one_to_one_relationship_if_both_sides_have_matching_property_with_navigation_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_for_one_to_one_relationship_if_no_side_has_matching_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_for_one_to_one_relationship_if_no_side_has_matching_property_anymore +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_if_ambiguous_FK_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_if_multiple_navigations_are_pointing_to_same_foreign_key_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_if_not_principal_or_dependent_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_if_specified_FK_count_does_not_match +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_if_specified_FK_types_do_not_match +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_if_specified_PK_count_does_not_match +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_if_specified_PK_types_do_not_match +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_on_ambiguous_FK_when_self_referencing +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_on_duplicate_navigation_when_self_referencing +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_on_existing_many_to_one_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_on_existing_one_to_many_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Throws_on_two_ambiguous_FK_when_self_referencing +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Unspecified_FK_can_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Unspecified_FK_can_be_made_optional_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Unspecified_FK_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOneToOne.Uses_composite_PK_for_FK_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Ambiguous_relationship_between_owned_types_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Attempt_to_create_OwnsMany_on_a_reference_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Attempt_to_create_OwnsOne_on_a_collection_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_call_Owner_fluent_api_after_calling_Entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_chain_owned_type_collection_configurations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_another_relationship_to_owner +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_chained_ownerships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_chained_ownerships_different_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_fk_on_multiple_ownerships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_hierarchy_with_reference_navigations_as_owned +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_hierarchy_with_reference_navigations_as_owned_afterwards +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_multiple_ownerships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_on_derived_type_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_on_derived_types_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_one_to_many_owned_type_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_one_to_one_owned_type_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_one_to_one_relationship_from_an_owned_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_one_to_one_relationship_from_an_owned_type_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_entity_and_property_of_same_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_collection_from_an_owned_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_collection_using_nested_closure +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_collection_with_one_call +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_collection_with_one_call_afterwards +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_collection_without_explicit_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_collection_without_explicit_key_or_candidate +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_from_an_owned_type_collection(hasDataOverload: Array) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_from_an_owned_type_collection(hasDataOverload: Enumerable | Generic) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_from_an_owned_type_collection(hasDataOverload: Enumerable) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_from_an_owned_type_collection(hasDataOverload: Generic | Params) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_from_an_owned_type_collection(hasDataOverload: Generic) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_from_an_owned_type_collection(hasDataOverload: Params) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_inverse +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_owned_type_using_nested_closure +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_ownership_foreign_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_property_and_owned_entity_of_same_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_relationship_with_PK_ValueConverter +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_self_ownership +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_configure_single_owned_type_using_attribute +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_map_base_of_owned_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_map_base_of_owned_type_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_map_derived_of_owned_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_map_derived_of_owned_type_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_use_sproc_mapping_with_owned_reference +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Can_use_table_splitting_with_owned_reference +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Changing_ownership_uniqueness_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.CLR_base_type_can_be_owned_when_not_in_hierarchy +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Configuring_base_type_as_owned_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Deriving_from_owned_type_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Entity_mapped_to_json_and_unwound_afterwards_properly_cleans_up_its_state +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Inheritance_where_base_has_multiple_owned_types_works +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Json_entity_and_normal_owned_can_exist_side_by_side_on_same_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Json_entity_and_normal_owned_can_exist_side_to_side_on_same_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Json_entity_mapped_to_view +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Json_entity_nested_enums_have_conversions_to_int_by_default_ToJson_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Json_entity_nested_enums_have_conversions_to_int_by_default_ToJson_last +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Json_entity_with_custom_property_names +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Json_entity_with_nested_structure_same_property_names +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Json_entity_with_nested_structure_same_property_names_ +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Json_entity_with_tph_inheritance +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Navigations_on_owned_type_can_set_access_mode_using_expressions +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Navigations_on_owned_type_collection_can_set_access_mode +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Owned_type_collections_can_be_mapped_to_a_view +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Owned_type_collections_can_be_mapped_to_different_tables +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Owned_types_can_be_mapped_to_different_tables +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Owned_types_use_table_splitting_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.OwnedType_can_derive_from_Collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Owner_can_be_mapped_to_a_view +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: 16, defaultScale: 2, mainPrecision: 16, mainScale: 4, otherPrecision: 16, otherScale: 4, onePrecision: 16, oneScale: 4, manyPrecision: 16, manyScale: 4) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: 16, defaultScale: 2, mainPrecision: 17, mainScale: 4, otherPrecision: 17, otherScale: 4, onePrecision: 17, oneScale: 4, manyPrecision: 17, manyScale: 4) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: 17, defaultScale: 5, mainPrecision: 16, mainScale: 4, otherPrecision: 15, otherScale: 3, onePrecision: 14, oneScale: 2, manyPrecision: 13, manyScale: 1) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: 17, defaultScale: 5, mainPrecision: null, mainScale: null, otherPrecision: null, otherScale: null, onePrecision: null, oneScale: null, manyPrecision: null, manyScale: null) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: 17, defaultScale: null, mainPrecision: 16, mainScale: null, otherPrecision: 15, otherScale: null, onePrecision: 14, oneScale: null, manyPrecision: 13, manyScale: null) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: null, defaultScale: null, mainPrecision: 16, mainScale: 4, otherPrecision: 15, otherScale: 3, onePrecision: 14, oneScale: 2, manyPrecision: 13, manyScale: 1) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: null, defaultScale: null, mainPrecision: 16, mainScale: 4, otherPrecision: 16, otherScale: 4, onePrecision: 16, oneScale: 4, manyPrecision: 16, manyScale: 4) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: null, defaultScale: null, mainPrecision: 16, mainScale: null, otherPrecision: 15, otherScale: null, onePrecision: 14, oneScale: null, manyPrecision: 13, manyScale: null) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.PrimitiveCollectionBuilder_methods_can_be_chained +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.PrimitiveCollectionBuilder_methods_can_be_chained_on_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Reconfiguring_entity_type_as_owned_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Reconfiguring_owned_type_as_non_owned_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Removing_ambiguous_inverse_allows_navigations_to_be_discovered +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Shared_type_can_be_used_as_owned_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Shared_type_entity_types_with_FK_to_another_entity_works +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Shared_type_used_as_owned_type_throws_for_same_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderGenericTest+JetGenericOwnedTypes.Throws_on_FK_matching_two_relationships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Access_mode_can_be_overridden_at_entity_and_property_levels +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_add_shadow_primitive_collections_when_they_have_been_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_add_shadow_properties_when_they_have_been_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_call_PrimitiveCollection_on_a_field +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_call_Property_on_a_field +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_ignore_a_field +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_ignore_shadow_primitive_collections_when_they_have_been_added_explicitly +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_ignore_shadow_properties_when_they_have_been_added_explicitly +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_set_complex_property_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_set_custom_value_generator_for_primitive_collections +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_set_custom_value_generator_for_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_set_max_length_for_primitive_collections +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_set_max_length_for_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_set_max_length_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_set_precision_and_scale_for_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_set_precision_and_scale_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_set_primitive_collection_annotation_when_no_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_set_property_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_set_property_annotation_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_set_property_annotation_when_no_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_set_sentinel_for_primitive_collections +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_set_sentinel_for_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_set_sentinel_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_set_unbounded_max_length_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_set_unicode_for_primitive_collections +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_set_unicode_for_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_set_unicode_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_use_table_splitting +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_use_table_splitting_with_schema +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Can_use_TPH +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Complex_properties_can_be_configured_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Complex_properties_not_discovered_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Configuring_direction_on_RowsAffectedParameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Conflicting_sproc_rows_affected_parameter_and_result_column_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Conflicting_sproc_rows_affected_return_and_parameter_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Conflicting_sproc_rows_affected_return_and_result_column_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Duplicate_sproc_original_value_parameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Duplicate_sproc_parameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Duplicate_sproc_result_column_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Duplicate_sproc_rows_affected_parameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Duplicate_sproc_rows_affected_result_column_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.HasField_for_primitive_collection_throws_if_field_is_not_found +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.HasField_for_primitive_collection_throws_if_field_is_wrong_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.HasField_throws_if_field_is_not_found +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.HasField_throws_if_field_is_wrong_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.IEnumerable_properties_with_value_converter_set_are_not_discovered_as_complex_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Mapping_throws_for_empty_complex_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Mapping_throws_for_non_ignored_navigations_on_complex_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Non_nullable_properties_cannot_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Primitive_collections_are_required_by_default_only_if_CLR_type_is_nullable +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Primitive_collections_can_be_made_concurrency_tokens +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Primitive_collections_can_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Primitive_collections_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Primitive_collections_can_be_set_to_generate_values_on_Add +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Primitive_collections_can_have_field_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Primitive_collections_specified_by_string_are_shadow_properties_unless_already_known_to_be_CLR_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.PrimitiveCollectionBuilder_methods_can_be_chained +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Properties_are_required_by_default_only_if_CLR_type_is_nullable +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Properties_can_be_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Properties_can_be_ignored_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Properties_can_be_made_concurrency_tokens +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Properties_can_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Properties_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Properties_can_be_set_to_generate_values_on_Add +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Properties_can_have_access_mode_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Properties_can_have_custom_type_value_converter_type_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Properties_can_have_field_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Properties_can_have_non_generic_value_converter_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Properties_can_have_provider_type_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Properties_can_have_provider_type_set_for_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Properties_can_have_value_converter_configured_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Properties_can_have_value_converter_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Properties_can_have_value_converter_set_inline +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Properties_can_set_row_version +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Properties_specified_by_string_are_shadow_properties_unless_already_known_to_be_CLR_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.PropertyBuilder_methods_can_be_chained +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Throws_for_bad_value_generator_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Throws_for_optional_complex_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Throws_for_primitive_collection_with_bad_value_generator_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Throws_for_tuple +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Throws_for_value_generator_that_cannot_be_constructed +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Value_converter_configured_on_non_nullable_type_is_applied +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Value_converter_configured_on_nullable_type_overrides_non_nullable +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericComplexType.Value_converter_type_is_checked +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Adding_conflicting_check_constraint_to_derived_type_before_base_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Adding_conflicting_check_constraint_to_derived_type_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Base_type_can_be_discovered_after_creating_foreign_keys_on_derived +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Base_types_are_mapped_correctly_if_discovered_last +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_add_check_constraints +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_create_relationship_between_base_type_and_derived_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_get_set_discriminator_mapping_is_complete +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_ignore_base_entity_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_map_derived_self_ref_many_to_one +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_map_derived_types_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_match_navigation_to_derived_type_with_inverse_on_base +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_override_TPC_with_TPH +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_promote_shadow_fk_to_the_base_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_reconfigure_inherited_intraHierarchical_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_remove_objects_in_derived_type_which_was_set_using_data_annotation_while_setting_base_type_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_set_and_remove_base_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_specify_discriminator_values_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_specify_discriminator_without_derived_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_use_shadow_FK_that_collides_with_convention_shadow_FK_on_other_derived_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Can_use_table_splitting +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Cannot_remove_objects_in_derived_type_which_was_set_using_explicit_while_setting_base_type_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Index_convention_run_for_fk_when_derived_type_discovered_before_base_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Index_convention_sets_filter_for_unique_index_when_base_type_changed +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Index_removed_when_covered_by_an_inherited_foreign_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Index_removed_when_covered_by_an_inherited_index +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Inherited_clr_properties_are_mapped_to_the_same_column +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Ordering_of_entityType_discovery_does_not_affect_key_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Pulling_relationship_to_a_derived_type_creates_relationships_on_other_derived_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Pulling_relationship_to_a_derived_type_many_to_one_creates_relationships_on_other_derived_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Pulling_relationship_to_a_derived_type_one_to_one_creates_relationship_on_base +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Pulling_relationship_to_a_derived_type_one_to_one_with_fk_creates_relationship_on_base +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Pulling_relationship_to_a_derived_type_reverted_creates_relationships_on_other_derived_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Pulling_relationship_to_a_derived_type_with_fk_creates_relationships_on_other_derived_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Relationships_are_discovered_on_the_base_entity_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Relationships_on_derived_types_are_discovered_first_if_base_is_one_sided +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Removing_a_key_triggers_fk_discovery_on_derived_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Removing_derived_removes_it_from_directly_derived_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Setting_base_type_handles_require_value_generator_properly +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.Setting_base_type_to_null_fixes_relationships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.TPC_identifying_FKs_are_created_on_all_tables +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.TPT_identifying_FK_is_created_only_on_declaring_table +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericInheritance.TPT_index_can_use_inherited_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Can_configure_join_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Can_configure_join_type_with_implicit_join_relationships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Can_configure_shared_join_type_with_implicit_join_relationships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Can_ignore_existing_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Can_use_ForeignKeyAttribute_with_InversePropertyAttribute +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Can_use_implicit_shared_type_as_join_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Can_use_implicit_shared_type_with_default_name_and_implicit_relationships_as_join_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Can_use_implicit_shared_type_with_default_name_as_join_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Can_use_implicit_shared_type_with_implicit_relationships_as_join_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Can_use_shared_type_as_join_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Discovers_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Finds_existing_navigations_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Finds_existing_navigations_and_uses_associated_FK_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Finds_existing_navigations_and_uses_associated_FK_with_implicit_relationships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.FK_properties_matching_navigations_are_discovered_on_explicit_join_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.FK_properties_matching_types_are_discovered_on_explicit_join_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.ForeignKeyAttribute_configures_the_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.ForeignKeyAttribute_does_not_force_convention_join_table_inclusion_matching_key_names +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.ForeignKeyAttribute_does_not_force_convention_join_table_inclusion_mismatching_key_names +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.IsRequired_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Join_entity_type_uses_default_schema_if_related_are_different +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Join_entity_type_uses_same_schema +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Join_type_is_automatically_configured_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Join_type_is_not_automatically_configured_when_navigations_are_ambiguous +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Many_to_many_with_a_shadow_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Many_to_many_with_no_navigations_configured +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Many_to_many_with_only_Has_navigation_configured +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Many_to_many_with_only_With_navigation_configured +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Navigation_properties_can_set_access_mode +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Overrides_ForeignKeyAttribute +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Skip_navigation_field_can_be_set_via_attribute +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Throws_for_conflicting_many_to_one_on_left +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Throws_for_conflicting_many_to_one_on_right +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Throws_for_self_ref_using_self +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Throws_for_self_ref_with_same_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.Unconfigured_many_to_many_navigations_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.UsingEntity_with_shared_type_passed_when_marked_as_shared_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToMany.UsingEntity_with_shared_type_passes_when_configured_as_shared +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Access_mode_can_be_overridden_at_entity_and_navigation_property_levels +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Can_add_annotations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Can_change_delete_behavior +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Can_have_both_convention_properties_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Can_have_both_convention_properties_specified_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Can_have_FK_by_convention_specified_with_explicit_principal_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Can_have_FK_by_convention_specified_with_explicit_principal_key_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Can_have_principal_key_by_convention_specified_with_explicit_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Can_have_principal_key_by_convention_specified_with_explicit_PK_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Can_set_foreign_key_property_when_matching_property_added +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Can_use_alternate_composite_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Can_use_alternate_composite_key_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Can_use_explicitly_specified_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Can_use_non_PK_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_both_navigations_and_creates_composite_FK_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_both_navigations_and_creates_FK_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_both_navigations_and_creates_new_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_both_navigations_and_creates_shadow_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_both_navigations_and_does_not_use_existing_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_both_navigations_and_finds_existing_composite_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_both_navigations_and_matches_shadow_FK_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_both_navigations_and_overrides_existing_FK_if_uniqueness_does_not_match +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_both_navigations_and_uses_specified_FK_even_if_found_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_both_navigations_with_existing_FK_not_found_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_relationship_on_existing_FK_is_using_different_principal_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_relationship_on_existing_FK_is_using_different_principal_key_different_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_relationship_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_relationship_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_relationship_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_relationship_with_no_navigations_and_specified_composite_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_relationship_with_no_navigations_and_specified_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_shadow_FK_property_with_non_shadow_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_shadow_FK_property_with_shadow_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_shadow_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_shadow_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_shadow_FK_with_no_navigations_with +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_shadow_property_for_foreign_key_according_to_navigation_to_principal_name_when_present +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_shadow_property_for_foreign_key_according_to_target_type_when_navigation_to_principal_name_not_present +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_specified_composite_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_specified_composite_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_specified_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Creates_specified_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Explicitly_set_shadow_FK_name_is_preserved_with_HasPrincipalKey +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Finds_existing_navigation_to_dependent_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Finds_existing_navigation_to_principal_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Finds_existing_navigations_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Finds_existing_navigations_and_uses_associated_FK_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Handles_identity_correctly_while_removing_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Navigation_properties_can_set_access_mode +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Non_nullable_FK_are_required_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Non_nullable_FK_can_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Non_nullable_FK_can_be_made_optional_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Nullable_FK_are_optional_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Nullable_FK_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.One_to_many_relationship_has_no_ambiguity_explicit +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Relationships_discovered_when_ambiguity_on_the_inverse_is_resolved +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Removes_existing_unidirectional_one_to_one_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Resolves_ambiguous_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericManyToOne.Throws_on_existing_one_to_one_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Access_mode_can_be_overridden_at_entity_and_primitive_collection_levels +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Access_mode_can_be_overridden_at_entity_and_property_levels +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_add_contained_indexes +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_add_index +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_add_index_when_no_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_add_multiple_indexes +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_add_seed_data_anonymous_objects +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_add_seed_data_anonymous_objects_indexed_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_add_seed_data_anonymous_objects_indexed_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_add_seed_data_objects +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_add_seed_data_objects_indexed_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_add_seed_data_objects_indexed_property_dictionary +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_add_shadow_properties_when_they_have_been_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_add_shared_type_entity_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_call_PrimitiveCollection_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_call_Property_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_get_entity_builder_for_clr_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_ignore_a_field_on_a_keyless_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_ignore_a_field_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_ignore_a_property_that_is_part_of_explicit_entity_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_ignore_explicit_interface_implementation_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_ignore_shadow_properties_when_they_have_been_added_explicitly +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_override_navigations_as_primitive_collections +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_override_navigations_as_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_alternate_key_for_primitive_collection_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_alternate_key_from_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_alternate_key_from_clr_property_when_property_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_alternate_key_from_property_name_when_no_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_alternate_key_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_collation_for_primitive_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_collation_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_composite_alternate_key_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_composite_entity_key_from_clr_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_composite_entity_key_from_property_names_when_mixed_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_composite_index_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_composite_key_for_primitive_collection_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_composite_key_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_custom_value_generator_for_primitive_collections +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_custom_value_generator_for_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_element_type_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_entity_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_entity_key_from_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_entity_key_from_clr_property_when_property_ignored_on_keyless +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_entity_key_from_property_name_when_no_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_entity_key_with_annotations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_fixed_length_for_primitive_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_fixed_length_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_index_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_key_for_primitive_collection_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_key_on_an_entity_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_max_length_for_primitive_collections +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_max_length_for_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_max_length_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_model_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_precision_and_scale_for_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_precision_and_scale_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_primary_key_by_convention_for_user_specified_shadow_primitive_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_primary_key_by_convention_for_user_specified_shadow_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_primitive_collection_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_primitive_collection_annotation_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_primitive_collection_annotation_when_no_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_property_annotation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_property_annotation_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_property_annotation_when_no_clr_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_sentinel_for_primitive_collections +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_sentinel_for_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_sentinel_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_store_type_for_primitive_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_store_type_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_unbounded_max_length_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_unicode_for_primitive_collections +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_unicode_for_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_set_unicode_for_property_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_upgrade_candidate_key_to_primary_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_use_table_splitting +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Can_use_table_splitting_with_schema +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Cannot_add_shared_type_when_non_shared_exists +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Configuring_direction_on_RowsAffectedParameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Conflicting_sproc_rows_affected_parameter_and_result_column_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Conflicting_sproc_rows_affected_parameter_and_return_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Conflicting_sproc_rows_affected_result_column_and_parameter_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Conflicting_sproc_rows_affected_result_column_and_return_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Conflicting_sproc_rows_affected_return_and_parameter_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Conflicting_sproc_rows_affected_return_and_result_column_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Conventions_can_be_added +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Conventions_can_be_removed +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Conventions_can_be_removed_by_generic_method +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Conventions_can_be_replaced +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Conversion_on_base_property_prevents_primitive_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Conversion_on_base_property_prevents_primitive_collection_when_base_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Duplicate_sproc_original_value_parameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Duplicate_sproc_parameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Duplicate_sproc_result_column_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Duplicate_sproc_rows_affected_parameter_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Duplicate_sproc_rows_affected_result_column_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Element_types_are_nullable_by_default_if_the_type_is_nullable +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Element_types_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Element_types_can_have_custom_type_value_converter_type_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Element_types_can_have_max_length +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Element_types_can_have_non_generic_value_converter_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Element_types_can_have_precision_and_scale +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Element_types_can_have_provider_type_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Element_types_can_have_unicode_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Element_types_have_default_precision_and_scale +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Element_types_have_default_unicode +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Element_types_have_no_max_length_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Entity_key_on_secondary_property_is_discovered_by_convention_when_first_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Entity_key_on_shadow_property_is_discovered_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.EntityType_name_is_stored_culture_invariantly +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.HasField_for_primitive_collection_throws_if_field_is_not_found +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.HasField_for_primitive_collection_throws_if_field_is_wrong_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.HasField_throws_if_field_is_not_found +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.HasField_throws_if_field_is_wrong_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.IEnumerable_properties_with_value_converter_set_are_not_discovered_as_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Ignoring_a_base_type_removes_relationships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Ignoring_a_navigation_property_removes_discovered_entity_types +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Ignoring_a_navigation_property_removes_discovered_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Indexes_can_have_same_name_across_tables +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Int32_cannot_be_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Key_properties_cannot_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Mapping_for_primitive_collection_ignores_ignored_array +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Mapping_ignores_ignored_array +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Mapping_ignores_ignored_three_dimensional_array +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Mapping_ignores_ignored_two_dimensional_array +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Mapping_throws_for_non_ignored_three_dimensional_array +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Model_is_readonly_after_Finalize +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Nested_primitive_collection_are_discovered_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Non_nullable_properties_cannot_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Object_cannot_be_configured_as_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Object_cannot_be_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Primitive_collections_are_required_by_default_only_if_CLR_type_is_nullable +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Primitive_collections_can_be_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Primitive_collections_can_be_made_concurrency_tokens +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Primitive_collections_can_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Primitive_collections_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Primitive_collections_can_be_set_to_generate_values_on_Add +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Primitive_collections_can_have_access_mode_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Primitive_collections_can_have_field_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Primitive_collections_can_have_value_converter_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Primitive_collections_specified_by_string_are_shadow_properties_unless_already_known_to_be_CLR_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.PrimitiveCollection_Key_properties_cannot_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.PrimitiveCollectionBuilder_methods_can_be_chained +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Private_primitive_collection_is_not_discovered_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Private_property_is_not_discovered_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_are_required_by_default_only_if_CLR_type_is_nullable +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_be_ignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_be_ignored_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_be_made_concurrency_tokens +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_be_set_to_generate_values_on_Add +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_have_access_mode_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_have_custom_type_value_converter_type_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_have_field_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_have_non_generic_value_converter_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_have_provider_type_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_have_provider_type_set_for_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_have_value_converter_configured_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_have_value_converter_set +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_have_value_converter_set_inline +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_can_set_row_version +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Properties_specified_by_string_are_shadow_properties_unless_already_known_to_be_CLR_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Property_bag_cannot_be_configured_as_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.PropertyBuilder_methods_can_be_chained +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Setting_alternate_key_makes_properties_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Setting_sentinel_throws_for_noncompatible +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Setting_sentinel_throws_for_null_on_nonnullable +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Throws_for_bad_value_generator_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Throws_for_bad_value_generator_type_for_primitive_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Throws_for_conflicting_base_configurations_by_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Throws_for_int_keyed_dictionary +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Throws_for_primitive_collection_for_value_generator_that_cannot_be_constructed +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Throws_for_value_generator_that_cannot_be_constructed +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Value_converter_configured_on_base_type_is_not_applied +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Value_converter_configured_on_non_nullable_type_is_applied +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Value_converter_configured_on_nullable_type_overrides_non_nullable +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Value_converter_type_is_checked +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericNonRelationship.Value_converter_type_on_primitive_collection_is_checked +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Ambiguous_relationship_candidate_does_not_block_creating_further_relationships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Annotations_are_preserved_when_rebuilding +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Attempt_to_configure_Navigation_property_which_is_actually_a_Property_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_add_annotations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_change_delete_behavior +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_exclude_navigation_pointed_by_foreign_key_attribute_from_explicit_configuration +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_exclude_navigation_with_foreign_key_attribute_from_explicit_configuration +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_exclude_navigation_with_foreign_key_attribute_on_principal_type_from_explicit_configuration +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_have_both_convention_properties_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_have_both_convention_properties_specified_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_have_FK_by_convention_specified_with_explicit_principal_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_have_FK_by_convention_specified_with_explicit_principal_key_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_have_FK_semi_specified_with_explicit_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_have_principal_key_by_convention_replaced_with_primary_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_have_principal_key_by_convention_specified_with_explicit_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_have_principal_key_by_convention_specified_with_explicit_PK_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_set_foreign_key_property_when_matching_property_added +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_specify_requiredness_after_OnDelete +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_use_alternate_composite_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_use_alternate_composite_key_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_use_explicitly_specified_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Can_use_non_PK_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_both_navigations_and_creates_composite_FK_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_both_navigations_and_creates_FK_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_both_navigations_and_creates_shadow_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_both_navigations_and_matches_shadow_FK_property_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_both_navigations_and_overrides_existing_FK_when_uniqueness_does_not_match +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_both_navigations_and_uses_existing_composite_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_both_navigations_and_uses_existing_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_both_navigations_and_uses_existing_FK_not_found_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_both_navigations_and_uses_specified_FK_even_if_found_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_one_to_many_relationship_with_single_ref_as_dependent_to_principal_if_matching_entity_name_properties_are_on_navigation_side +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_one_to_many_relationship_with_single_ref_as_dependent_to_principal_if_matching_navigation_name_properties_are_on_navigation_side +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_one_to_many_relationship_with_single_ref_as_dependent_to_principal_if_matching_properties_are_on_both_sides +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_one_to_many_relationship_with_single_ref_as_dependent_to_principal_if_no_matching_properties_either_side +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_overlapping_foreign_keys_with_different_nullability +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_relationship_on_existing_FK_is_using_different_principal_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_relationship_on_existing_FK_is_using_different_principal_key_different_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_relationship_with_both_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_relationship_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_relationship_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_relationship_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_relationship_with_no_navigations_and_specified_composite_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_relationship_with_no_navigations_and_specified_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_shadow_fk_configuring_using_ForeignKeyAttribute +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_shadow_FK_property_with_non_shadow_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_shadow_FK_property_with_shadow_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_shadow_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_shadow_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_shadow_FK_with_no_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_shadow_property_for_foreign_key_according_to_navigation_to_principal_name_when_present +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_shadow_property_for_foreign_key_according_to_target_type_when_navigation_to_principal_name_not_present +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_specified_composite_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_specified_composite_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_specified_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Creates_specified_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Do_not_match_non_unique_FK_when_overlap_with_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Explicit_principal_key_is_not_replaced_with_new_primary_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Finds_existing_navigation_to_dependent_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Finds_existing_navigation_to_principal_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Finds_existing_navigations_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Finds_existing_navigations_and_uses_associated_FK_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Handles_identity_correctly_while_removing_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.HasMany_with_a_collection_navigation_CLR_property_to_derived_type_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.HasNoKey_call_on_principal_entity_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.HasNoKey_call_on_principal_with_navigation_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Keyless_type_discovered_before_referenced_entity_type_does_not_leave_temp_id +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Keyless_type_with_unmapped_collection_navigations_does_not_throw +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Navigation_properties_can_set_access_mode +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Navigation_to_shared_type_is_not_discovered_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Non_nullable_FK_are_required_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Non_nullable_FK_can_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Non_nullable_FK_can_be_made_optional_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Nullable_FK_are_optional_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Nullable_FK_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Nullable_FK_overrides_NRT_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.One_to_many_relationship_has_no_ambiguity_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.One_to_many_relationship_has_no_ambiguity_explicit +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Principal_key_by_convention_is_not_replaced_with_new_incompatible_primary_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Reference_navigation_from_keyless_entity_type_works +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.RemoveKey_does_not_add_back_foreign_key_pointing_to_the_same_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Removes_existing_unidirectional_one_to_one_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Resolves_ambiguous_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Shadow_foreign_keys_to_generic_types_have_terrible_names_that_should_not_change +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Shadow_property_created_for_foreign_key_is_nullable +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Throws_on_existing_many_to_many +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Throws_on_existing_one_to_one_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Throws_on_keyless_type_as_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.Throws_when_foreign_key_references_shadow_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.WithMany_call_on_keyless_entity_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToMany.WithMany_pointing_to_keyless_entity_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_add_annotations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_be_defined_before_the_PK_from_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_be_defined_before_the_PK_from_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_change_delete_behavior +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_create_relationship_if_dependent_has_matching_property_with_entity_type_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_create_relationship_if_dependent_has_matching_property_with_navigation_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_create_relationship_if_foreign_key_attribute_is_used +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_create_relationship_if_navigations_have_same_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_create_relationship_if_user_specifies_principal_key_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_create_relationship_if_user_specify_foreign_key_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_create_self_referencing_relationship_without_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_create_two_FKs_using_the_same_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_have_both_alternate_keys_specified_explicitly +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_have_both_alternate_keys_specified_explicitly_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_have_both_keys_specified_explicitly +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_have_both_keys_specified_explicitly_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_have_dependent_side_specified_explicitly_on_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_invert_relationship_if_principal_has_matching_property_with_entity_type_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_invert_relationship_if_principal_has_matching_property_with_navigation_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_specify_shadow_fk_before_configuring_principal_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_specify_shadow_fk_before_reconfiguring_principal_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_specify_shadow_identifying_fk +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_use_alternate_composite_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_use_alternate_composite_key_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_use_alternate_principal_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_use_pk_as_fk_if_principal_end_is_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Can_use_PK_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Configuring_FK_properties_as_PK_sets_DeleteBehavior_Cascade +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Configuring_principal_type_as_keyless_inverts_the_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Configuring_principal_type_as_keyless_throws_if_not_invertible +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Configuring_principal_type_as_keyless_throws_when_there_is_an_explicit_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_both_navigations_and_creates_composite_FK_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_both_navigations_and_creates_new_FK_when_not_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_both_navigations_and_new_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_both_navigations_and_new_FK_over_PK_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_both_navigations_and_overrides_existing_FK_when_uniqueness_does_not_match +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_both_navigations_and_removes_existing_FK_when_not_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_both_navigations_and_shadow_FK_if_existing_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_both_navigations_and_specified_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_both_navigations_and_uses_existing_composite_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_both_navigations_and_uses_existing_FK_not_found_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_both_navigations_and_uses_specified_FK_even_if_found_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_both_navigations_and_uses_specified_FK_even_if_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_composite_FK_when_specified_on_principal_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_composite_FK_when_specified_on_principal_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_composite_FK_when_specified_on_principal_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_field_backed_FK_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_FK_when_principal_and_foreign_key_specified_on_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_FK_when_principal_and_foreign_key_specified_on_dependent_in_reverse_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_FK_when_principal_and_foreign_key_specified_on_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_FK_when_specified_on_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_FK_when_specified_on_dependent_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_FK_when_specified_on_dependent_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_FK_when_specified_on_dependent_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_FK_when_specified_on_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_FK_when_specified_on_principal_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_FK_when_specified_on_principal_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_FK_when_specified_on_principal_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_index_even_if_covered_by_an_alternate_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_one_to_one_relationship_with_single_ref_as_principal_to_dependent_if_matching_properties_are_on_the_other_side +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_principal_key_when_specified_on_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_principal_key_when_specified_on_dependent_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_principal_key_when_specified_on_dependent_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_principal_key_when_specified_on_dependent_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_principal_key_when_specified_on_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_principal_key_when_specified_on_principal_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_principal_key_when_specified_on_principal_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_principal_key_when_specified_on_principal_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_relationship_on_existing_FK_if_using_different_principal_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_relationship_on_existing_FK_if_using_different_principal_key_different_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_relationship_with_navigation_to_dependent_and_new_FK_from_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_relationship_with_navigation_to_dependent_and_new_FK_from_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_relationship_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_relationship_with_specified_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_relationship_with_specified_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_relationship_with_specified_FK_with_no_navigations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_self_referencing_FK_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_self_referencing_FK_by_convention_inverted +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_self_referencing_FK_on_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_self_referencing_FK_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_self_referencing_FK_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_shadow_FK_property_with_non_shadow_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Creates_shadow_FK_property_with_shadow_PK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Does_not_use_existing_FK_when_principal_key_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Does_not_use_pk_as_fk_if_principal_end_is_not_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Finds_existing_navigation_to_dependent_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Finds_existing_navigations_and_uses_associated_FK +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Finds_existing_navigations_and_uses_associated_FK_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Foreign_key_properties_are_not_discovered_for_one_to_one_relationship_with_ambiguous_principal_end +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Handles_identity_correctly_while_removing_navigation +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Ignoring_properties_on_principal_resolves_ambiguity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Ignoring_properties_resolves_ambiguity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Inverse_discovered_after_entity_unignored +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.IsRequired_throws_principal_end_is_ambiguous +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Multiple_self_referencing_navigations_throw_as_ambiguous +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Navigation_properties_can_set_access_mode +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Navigation_to_shared_type_is_not_discovered_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Non_nullable_FK_are_required_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Non_nullable_FK_can_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Non_nullable_FK_can_be_made_optional_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Nullable_FK_are_optional_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Nullable_FK_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.OneToOne_can_have_PK_explicitly_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Overrides_FK_if_specified_PK_count_does_not_match_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Overrides_FK_if_specified_PK_types_do_not_match_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Overrides_PK_if_specified_FK_count_does_not_match_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Overrides_PK_if_specified_FK_types_do_not_match_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Principal_and_dependent_can_be_flipped_and_composite_PK_is_still_used_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Principal_and_dependent_can_be_flipped_twice_in_reverse_order_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Principal_and_dependent_can_be_flipped_twice_separately +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Principal_and_dependent_can_be_flipped_using_principal_and_composite_PK_is_still_used_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Principal_and_dependent_can_be_flipped_when_self_referencing +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Principal_and_dependent_can_be_flipped_when_self_referencing_with_navigation_to_dependent +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Principal_and_dependent_can_be_flipped_when_self_referencing_with_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Principal_and_dependent_cannot_be_flipped_twice +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Principal_and_dependent_cannot_be_flipped_twice_in_reverse_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Removes_existing_FK_when_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Removes_existing_unidirectional_many_to_one_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Removes_existing_unidirectional_one_to_many_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Replaces_existing_navigation_to_principal +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_for_one_to_one_relationship_if_both_sides_have_matching_PKs +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_for_one_to_one_relationship_if_both_sides_have_matching_property_mixed +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_for_one_to_one_relationship_if_both_sides_have_matching_property_with_entity_type_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_for_one_to_one_relationship_if_both_sides_have_matching_property_with_navigation_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_for_one_to_one_relationship_if_no_side_has_matching_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_for_one_to_one_relationship_if_no_side_has_matching_property_anymore +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_if_ambiguous_FK_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_if_multiple_navigations_are_pointing_to_same_foreign_key_property +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_if_not_principal_or_dependent_specified +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_if_specified_FK_count_does_not_match +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_if_specified_FK_types_do_not_match +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_if_specified_PK_count_does_not_match +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_if_specified_PK_types_do_not_match +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_on_ambiguous_FK_when_self_referencing +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_on_duplicate_navigation_when_self_referencing +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_on_existing_many_to_one_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_on_existing_one_to_many_relationship +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Throws_on_two_ambiguous_FK_when_self_referencing +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Unspecified_FK_can_be_made_optional +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Unspecified_FK_can_be_made_optional_in_any_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Unspecified_FK_can_be_made_required +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOneToOne.Uses_composite_PK_for_FK_by_convention +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Ambiguous_relationship_between_owned_types_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Attempt_to_create_OwnsMany_on_a_reference_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Attempt_to_create_OwnsOne_on_a_collection_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_call_Owner_fluent_api_after_calling_Entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_chain_owned_type_collection_configurations +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_another_relationship_to_owner +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_chained_ownerships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_chained_ownerships_different_order +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_fk_on_multiple_ownerships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_hierarchy_with_reference_navigations_as_owned +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_hierarchy_with_reference_navigations_as_owned_afterwards +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_multiple_ownerships +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_on_derived_type_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_on_derived_types_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_one_to_many_owned_type_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_one_to_one_owned_type_with_fields +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_one_to_one_relationship_from_an_owned_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_one_to_one_relationship_from_an_owned_type_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_entity_and_property_of_same_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_collection_from_an_owned_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_collection_using_nested_closure +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_collection_with_one_call +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_collection_with_one_call_afterwards +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_collection_without_explicit_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_collection_without_explicit_key_or_candidate +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_from_an_owned_type_collection(hasDataOverload: Array) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_from_an_owned_type_collection(hasDataOverload: Enumerable | Generic) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_from_an_owned_type_collection(hasDataOverload: Enumerable) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_from_an_owned_type_collection(hasDataOverload: Generic | Params) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_from_an_owned_type_collection(hasDataOverload: Generic) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_from_an_owned_type_collection(hasDataOverload: Params) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_inverse +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_properties +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_owned_type_using_nested_closure +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_ownership_foreign_key +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_property_and_owned_entity_of_same_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_relationship_with_PK_ValueConverter +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_self_ownership +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_configure_single_owned_type_using_attribute +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_map_base_of_owned_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_map_base_of_owned_type_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_map_derived_of_owned_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_map_derived_of_owned_type_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_use_sproc_mapping_with_owned_reference +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Can_use_table_splitting_with_owned_reference +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Changing_ownership_uniqueness_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.CLR_base_type_can_be_owned_when_not_in_hierarchy +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Configuring_base_type_as_owned_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Deriving_from_owned_type_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Entity_mapped_to_json_and_unwound_afterwards_properly_cleans_up_its_state +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Inheritance_where_base_has_multiple_owned_types_works +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Json_entity_and_normal_owned_can_exist_side_by_side_on_same_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Json_entity_and_normal_owned_can_exist_side_to_side_on_same_entity +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Json_entity_mapped_to_view +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Json_entity_nested_enums_have_conversions_to_int_by_default_ToJson_first +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Json_entity_nested_enums_have_conversions_to_int_by_default_ToJson_last +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Json_entity_with_custom_property_names +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Json_entity_with_nested_structure_same_property_names +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Json_entity_with_nested_structure_same_property_names_ +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Json_entity_with_tph_inheritance +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Navigations_on_owned_type_can_set_access_mode_using_expressions +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Navigations_on_owned_type_collection_can_set_access_mode +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Owned_type_collections_can_be_mapped_to_a_view +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Owned_type_collections_can_be_mapped_to_different_tables +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Owned_types_can_be_mapped_to_different_tables +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Owned_types_use_table_splitting_by_default +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.OwnedType_can_derive_from_Collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Owner_can_be_mapped_to_a_view +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: 16, defaultScale: 2, mainPrecision: 16, mainScale: 4, otherPrecision: 16, otherScale: 4, onePrecision: 16, oneScale: 4, manyPrecision: 16, manyScale: 4) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: 16, defaultScale: 2, mainPrecision: 17, mainScale: 4, otherPrecision: 17, otherScale: 4, onePrecision: 17, oneScale: 4, manyPrecision: 17, manyScale: 4) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: 17, defaultScale: 5, mainPrecision: 16, mainScale: 4, otherPrecision: 15, otherScale: 3, onePrecision: 14, oneScale: 2, manyPrecision: 13, manyScale: 1) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: 17, defaultScale: 5, mainPrecision: null, mainScale: null, otherPrecision: null, otherScale: null, onePrecision: null, oneScale: null, manyPrecision: null, manyScale: null) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: 17, defaultScale: null, mainPrecision: 16, mainScale: null, otherPrecision: 15, otherScale: null, onePrecision: 14, oneScale: null, manyPrecision: 13, manyScale: null) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: null, defaultScale: null, mainPrecision: 16, mainScale: 4, otherPrecision: 15, otherScale: 3, onePrecision: 14, oneScale: 2, manyPrecision: 13, manyScale: 1) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: null, defaultScale: null, mainPrecision: 16, mainScale: 4, otherPrecision: 16, otherScale: 4, onePrecision: 16, oneScale: 4, manyPrecision: 16, manyScale: 4) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Precision_and_scale_for_property_type_used_in_owned_types_can_be_overwritten(defaultPrecision: null, defaultScale: null, mainPrecision: 16, mainScale: null, otherPrecision: 15, otherScale: null, onePrecision: 14, oneScale: null, manyPrecision: 13, manyScale: null) +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.PrimitiveCollectionBuilder_methods_can_be_chained +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.PrimitiveCollectionBuilder_methods_can_be_chained_on_collection +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Reconfiguring_entity_type_as_owned_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Reconfiguring_owned_type_as_non_owned_throws +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Removing_ambiguous_inverse_allows_navigations_to_be_discovered +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Shared_type_can_be_used_as_owned_type +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Shared_type_entity_types_with_FK_to_another_entity_works +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Shared_type_used_as_owned_type_throws_for_same_name +EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding.JetModelBuilderNonGenericTest+JetNonGenericOwnedTypes.Throws_on_FK_matching_two_relationships EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.BasicManyToManyTest EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.ManyToManyAlternateKeysTest EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding101JetTest.ManyToManyNamedForeignKeyColumnsTest @@ -8320,6 +9941,7 @@ EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Deleting_th EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Deleting_then_updating_the_same_entity_results_in_DbUpdateConcurrencyException_which_can_be_resolved_with_store_values EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.External_model_builder_uses_validation EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Nullable_client_side_concurrency_token_can_be_used +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyJetTest.Property_entry_original_value_is_set EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Adding_the_same_entity_twice_results_in_DbUpdateException EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Attempting_to_add_same_relationship_twice_for_many_to_many_results_in_independent_association_exception EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Attempting_to_delete_same_relationship_twice_for_many_to_many_results_in_independent_association_exception @@ -8353,6 +9975,7 @@ EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Deleti EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Deleting_then_updating_the_same_entity_results_in_DbUpdateConcurrencyException_which_can_be_resolved_with_store_values EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.External_model_builder_uses_validation EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Nullable_client_side_concurrency_token_can_be_used +EntityFrameworkCore.Jet.FunctionalTests.OptimisticConcurrencyULongJetTest.Property_entry_original_value_is_set EntityFrameworkCore.Jet.FunctionalTests.OverzealousInitializationJetTest.Fixup_ignores_eagerly_initialized_reference_navs EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Complex_current_values_can_be_accessed_as_a_property_dictionary_using_IProperty EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Complex_original_values_can_be_accessed_as_a_property_dictionary_using_IProperty @@ -8506,6 +10129,16 @@ EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Using_bad_IPropert EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Using_bad_IProperty_instances_throws_derived EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Using_bad_property_names_throws EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Using_bad_property_names_throws_derived +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state_with_inheritance(state: Added, async: False) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state_with_inheritance(state: Added, async: True) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state_with_inheritance(state: Deleted, async: False) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state_with_inheritance(state: Deleted, async: True) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state_with_inheritance(state: Detached, async: False) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state_with_inheritance(state: Detached, async: True) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state_with_inheritance(state: Modified, async: False) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state_with_inheritance(state: Modified, async: True) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state_with_inheritance(state: Unchanged, async: False) +EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state_with_inheritance(state: Unchanged, async: True) EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state(state: Added, async: False) EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state(state: Added, async: True) EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state(state: Deleted, async: False) @@ -8517,6 +10150,178 @@ EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_relo EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state(state: Unchanged, async: False) EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_can_be_reloaded_from_database_for_entity_in_any_state(state: Unchanged, async: True) EntityFrameworkCore.Jet.FunctionalTests.PropertyValuesJetTest.Values_in_cloned_dictionary_can_be_set_with_IProperty +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Can_query_hierarchy_with_non_nullable_property_on_derived +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Casts_are_removed_from_expression_tree_when_redundant +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Double_convert_interface_created_expression_tree +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Expression_tree_constructed_via_interface_works +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Hierarchy_query_with_abstract_type_sibling_TPC(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Hierarchy_query_with_abstract_type_sibling_TPC(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Hierarchy_query_with_abstract_type_sibling_TPT(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Hierarchy_query_with_abstract_type_sibling_TPT(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Hierarchy_query_with_abstract_type_sibling(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Hierarchy_query_with_abstract_type_sibling(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Projecting_correlated_collection_along_with_non_mapped_property +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Projecting_one_of_two_similar_complex_types_picks_the_correct_one +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Projection_failing_with_EnumToStringConverter +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_datetime2_parameter_definition(fractionalSeconds: 1, postfix: " (Scale = 1)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_datetime2_parameter_definition(fractionalSeconds: 2, postfix: " (Scale = 2)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_datetime2_parameter_definition(fractionalSeconds: 3, postfix: " (Scale = 3)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_datetime2_parameter_definition(fractionalSeconds: 4, postfix: " (Scale = 4)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_datetime2_parameter_definition(fractionalSeconds: 5, postfix: " (Scale = 5)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_datetime2_parameter_definition(fractionalSeconds: 6, postfix: " (Scale = 6)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_datetime2_parameter_definition(fractionalSeconds: 7, postfix: " (Scale = 7)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_datetime2_parameter_definition(fractionalSeconds: null, postfix: "") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_datetimeoffset_parameter_definition(fractionalSeconds: 1, postfix: " (Scale = 1)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_datetimeoffset_parameter_definition(fractionalSeconds: 2, postfix: " (Scale = 2)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_datetimeoffset_parameter_definition(fractionalSeconds: 3, postfix: " (Scale = 3)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_datetimeoffset_parameter_definition(fractionalSeconds: 4, postfix: " (Scale = 4)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_datetimeoffset_parameter_definition(fractionalSeconds: 5, postfix: " (Scale = 5)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_datetimeoffset_parameter_definition(fractionalSeconds: 6, postfix: " (Scale = 6)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_datetimeoffset_parameter_definition(fractionalSeconds: 7, postfix: " (Scale = 7)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_datetimeoffset_parameter_definition(fractionalSeconds: null, postfix: "") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_timespan_parameter_definition(fractionalSeconds: 1, postfix: " (Scale = 1)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_timespan_parameter_definition(fractionalSeconds: 2, postfix: " (Scale = 2)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_timespan_parameter_definition(fractionalSeconds: 3, postfix: " (Scale = 3)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_timespan_parameter_definition(fractionalSeconds: 4, postfix: " (Scale = 4)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_timespan_parameter_definition(fractionalSeconds: 5, postfix: " (Scale = 5)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_timespan_parameter_definition(fractionalSeconds: 6, postfix: " (Scale = 6)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_timespan_parameter_definition(fractionalSeconds: 7, postfix: " (Scale = 7)") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Query_generates_correct_timespan_parameter_definition(fractionalSeconds: null, postfix: "") +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Setting_IsUnicode_generates_unicode_literal_in_SQL +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Two_similar_complex_properties_projected_with_split_query1 +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocAdvancedMappingsQueryJetTest.Two_similar_complex_properties_projected_with_split_query2 +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocComplexTypeQueryJetTest.Complex_type_equals_parameter_with_nested_types_with_property_of_same_name +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocJsonQueryJetTest.Accessing_missing_navigation_works(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocJsonQueryJetTest.Accessing_missing_navigation_works(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocJsonQueryJetTest.Junk_in_json_basic_no_tracking(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocJsonQueryJetTest.Junk_in_json_basic_no_tracking(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocJsonQueryJetTest.Junk_in_json_basic_tracking(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocJsonQueryJetTest.Junk_in_json_basic_tracking(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocJsonQueryJetTest.Not_ICollection_basic_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocJsonQueryJetTest.Not_ICollection_basic_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocJsonQueryJetTest.Optional_json_properties_materialized_as_null_when_the_element_in_json_is_not_present(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocJsonQueryJetTest.Optional_json_properties_materialized_as_null_when_the_element_in_json_is_not_present(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocJsonQueryJetTest.Project_json_with_no_properties +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocJsonQueryJetTest.Project_proxies_entity_with_json(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocJsonQueryJetTest.Project_proxies_entity_with_json(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocJsonQueryJetTest.Query_with_nested_json_collection_mapped_to_private_field_via_IReadOnlyList +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocJsonQueryJetTest.Read_json_entity_collection_with_enum_properties_with_legacy_values(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocJsonQueryJetTest.Read_json_entity_collection_with_enum_properties_with_legacy_values(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocJsonQueryJetTest.Read_json_entity_with_enum_properties_with_legacy_values(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocJsonQueryJetTest.Read_json_entity_with_enum_properties_with_legacy_values(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocJsonQueryJetTest.Shadow_properties_basic_no_tracking(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocJsonQueryJetTest.Shadow_properties_basic_no_tracking(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocJsonQueryJetTest.Shadow_properties_basic_tracking(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocJsonQueryJetTest.Shadow_properties_basic_tracking(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocJsonQueryJetTest.Tricky_buffering_basic(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocJsonQueryJetTest.Tricky_buffering_basic(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocManyToManyQueryJetTest.Many_to_many_load_works_when_join_entity_has_custom_key(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocManyToManyQueryJetTest.Many_to_many_load_works_when_join_entity_has_custom_key(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Aggregate_over_subquery_in_group_by_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Aggregate_over_subquery_in_group_by_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Average_with_cast +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Bool_discriminator_column_works(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Bool_discriminator_column_works(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Comparing_byte_column_to_enum_in_vb_creating_double_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Comparing_byte_column_to_enum_in_vb_creating_double_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Comparing_enum_casted_to_byte_with_int_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Comparing_enum_casted_to_byte_with_int_constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Comparing_enum_casted_to_byte_with_int_parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Comparing_enum_casted_to_byte_with_int_parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Conditional_expression_with_conditions_does_not_collapse_if_nullable_bool +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.DateTime_Contains_with_smalldatetime_generates_correct_literal +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Discriminator_type_is_handled_correctly +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Enum_with_value_converter_matching_take_value(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Enum_with_value_converter_matching_take_value(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Explicitly_compiled_query_does_not_add_cache_entry +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Filter_on_nested_DTO_with_interface_gets_simplified_correctly(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Filter_on_nested_DTO_with_interface_gets_simplified_correctly(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.First_FirstOrDefault_ix_async +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Flattened_GroupJoin_on_interface_generic(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Flattened_GroupJoin_on_interface_generic(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.GroupBy_aggregate_on_right_side_of_join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.GroupBy_aggregate_on_right_side_of_join(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.GroupBy_Aggregate_over_navigations_repeated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.GroupBy_Aggregate_over_navigations_repeated(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.GroupJoin_Anonymous_projection_GroupBy_Aggregate_join_elimination +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Include_group_join_is_per_query_context +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Include_group_join_is_per_query_context_async +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Inlined_dbcontext_is_not_leaking +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Left_join_with_missing_key_values_on_both_sides(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Left_join_with_missing_key_values_on_both_sides(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Nested_queries_does_not_cause_concurrency_exception_sync(tracking: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Nested_queries_does_not_cause_concurrency_exception_sync(tracking: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.New_instances_in_projection_are_not_shared_across_results +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Null_check_removal_in_ternary_maintain_appropriate_cast(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Null_check_removal_in_ternary_maintain_appropriate_cast(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Parameterless_ctor_on_inner_DTO_gets_called_for_every_row +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Pushdown_does_not_add_grouping_key_to_projection_when_distinct_is_applied(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Pushdown_does_not_add_grouping_key_to_projection_when_distinct_is_applied(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Query_cache_entries_are_evicted_as_necessary +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.QueryBuffer_requirement_is_computed_when_querying_base_type_while_derived_type_has_shadow_prop +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Relational_command_cache_creates_new_entry_when_parameter_nullability_changes +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Repeated_parameters_in_generated_query_sql +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.SaveChangesAsync_accepts_changes_with_ConfigureAwait_true +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Select_nested_projection +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Shadow_property_with_inheritance +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.StoreType_for_UDF_used(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.StoreType_for_UDF_used(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Subquery_first_member_compared_to_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Subquery_first_member_compared_to_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Thread_safety_in_relational_command_cache +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Union_and_insert_works_correctly_together +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Unwrap_convert_node_over_projection_when_translating_contains_over_subquery_2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Unwrap_convert_node_over_projection_when_translating_contains_over_subquery_2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Unwrap_convert_node_over_projection_when_translating_contains_over_subquery_3(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Unwrap_convert_node_over_projection_when_translating_contains_over_subquery_3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Unwrap_convert_node_over_projection_when_translating_contains_over_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Unwrap_convert_node_over_projection_when_translating_contains_over_subquery(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocMiscellaneousQueryJetTest.Variable_from_closure_is_parametrized +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Can_ignore_invalid_include_path_error +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Collection_without_setter_materialized_correctly +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Correlated_collection_correctly_associates_entities_with_byte_array_keys +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Count_member_over_IReadOnlyCollection_works(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Count_member_over_IReadOnlyCollection_works(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Customer_collections_materialize_properly +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Cycles_in_auto_include +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Include_collection_optional_reference_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Include_collection_with_OfType_base +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Include_collection_works_when_defined_on_intermediate_type +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Include_with_order_by_on_interface_key +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Nested_include_queries_do_not_populate_navigation_twice +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Reference_include_on_derived_type_with_sibling_works +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Select_enumerable_navigation_backed_by_collection(async: False, split: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Select_enumerable_navigation_backed_by_collection(async: False, split: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Select_enumerable_navigation_backed_by_collection(async: True, split: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Select_enumerable_navigation_backed_by_collection(async: True, split: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.ThenInclude_with_interface_navigations +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Using_explicit_interface_implementation_as_navigation_works +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Walking_back_include_tree_is_not_allowed_1 +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Walking_back_include_tree_is_not_allowed_2 +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Walking_back_include_tree_is_not_allowed_3 +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocNavigationsQueryJetTest.Walking_back_include_tree_is_not_allowed_4 +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocPrecompiledQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocPrecompiledQueryJetTest.Materialize_non_public +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.GroupJoin_SelectMany_gets_flattened +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.Invoke_inside_query_filter_gets_correctly_evaluated_during_translation +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.IsDeleted_query_filter_with_conversion_to_int_works(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.IsDeleted_query_filter_with_conversion_to_int_works(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.Keyless_type_used_inside_defining_query +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.MultiContext_query_filter_test +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.Query_filter_with_contains_evaluates_correctly +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.Query_filter_with_db_set_should_not_block_other_filters +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.Query_filter_with_null_constant +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.Query_filter_with_pk_fk_optimization +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.Self_reference_in_query_filter_works +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQueryFiltersQueryJetTest.Weak_entities_with_query_filter_subquery_flattening +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQuerySplittingQueryJetTest.Can_configure_SingleQuery_at_context_level +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQuerySplittingQueryJetTest.Can_configure_SplitQuery_at_context_level +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQuerySplittingQueryJetTest.NoTracking_split_query_creates_only_required_instances(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQuerySplittingQueryJetTest.NoTracking_split_query_creates_only_required_instances(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQuerySplittingQueryJetTest.SplitQuery_disposes_inner_data_readers +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQuerySplittingQueryJetTest.Unconfigured_query_splitting_behavior_throws_a_warning +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQuerySplittingQueryJetTest.Using_AsSingleQuery_without_context_configuration_does_not_throw_warning +EntityFrameworkCore.Jet.FunctionalTests.Query.AdHocQuerySplittingQueryJetTest.Using_AsSplitQuery_without_multiple_active_result_sets_works EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Check_all_tests_overridden EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Collection_projection_over_GroupBy_over_parameter(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Collection_projection_over_GroupBy_over_parameter(async: True) @@ -8668,6 +10473,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQuery EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Orderby_SelectMany_with_Include1(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Project_collection_and_include(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Project_collection_and_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Project_collection_and_nested_conditional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Project_collection_and_nested_conditional(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Project_collection_and_root_entity(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Project_collection_and_root_entity(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsQueryJetTest.Project_collection_navigation_composed(async: False) @@ -8867,6 +10674,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplit EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Orderby_SelectMany_with_Include1(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Project_collection_and_include(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Project_collection_and_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Project_collection_and_nested_conditional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Project_collection_and_nested_conditional(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Project_collection_and_root_entity(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Project_collection_and_root_entity(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsCollectionsSplitQueryJetTest.Project_collection_navigation_composed(async: False) @@ -9136,6 +10945,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Lev EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Level4_Include(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Manually_created_left_join_propagates_nullability_to_navigations(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Manually_created_left_join_propagates_nullability_to_navigations(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Max_in_multi_level_nested_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Max_in_multi_level_nested_subquery(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Member_doesnt_get_pushed_down_into_subquery_with_result_operator(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Member_doesnt_get_pushed_down_into_subquery_with_result_operator(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Member_over_null_check_ternary_and_nested_anonymous_type(async: False) @@ -9163,6 +10974,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Mul EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_conditionals_in_projection(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_joins_groupby_predicate(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_joins_groupby_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_optional_navs_should_not_deadlock(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_optional_navs_should_not_deadlock(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_required_navigation_using_multiple_selects_with_EF_Property_Include(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_required_navigation_using_multiple_selects_with_EF_Property_Include(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Multiple_required_navigation_using_multiple_selects_with_Include(isAsync: False) @@ -9213,6 +11026,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Nes EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Nested_object_constructed_from_group_key_properties(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Null_check_different_structure_does_not_remove_null_checks(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Null_check_different_structure_does_not_remove_null_checks(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Null_check_removal_applied_recursively_complex(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Null_check_removal_applied_recursively_complex(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Null_check_removal_applied_recursively(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Null_check_removal_applied_recursively(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexNavigationsQueryJetTest.Null_conditional_is_not_applied_explicitly_for_optional_navigation(async: False) @@ -9526,10 +11341,18 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Filter_on_ EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Filter_on_required_property_inside_required_struct_complex_type_on_optional_navigation(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Filter_on_required_property_inside_required_struct_complex_type_on_required_navigation(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Filter_on_required_property_inside_required_struct_complex_type_on_required_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.GroupBy_over_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.GroupBy_over_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.GroupBy_over_nested_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.GroupBy_over_nested_complex_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.GroupBy_over_property_in_nested_complex_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.GroupBy_over_property_in_nested_complex_type(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_complex_type_via_optional_navigation(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_complex_type_via_optional_navigation(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_complex_type_via_required_navigation(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_complex_type_via_required_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_entity_with_complex_type_pushdown_and_then_left_join(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_entity_with_complex_type_pushdown_and_then_left_join(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_same_entity_with_nested_complex_type_twice_with_double_pushdown(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_same_entity_with_nested_complex_type_twice_with_double_pushdown(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_same_entity_with_nested_complex_type_twice_with_pushdown(async: False) @@ -9550,6 +11373,10 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_st EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_struct_complex_type_via_optional_navigation(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_struct_complex_type_via_required_navigation(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Project_struct_complex_type_via_required_navigation(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Projecting_complex_from_optional_navigation_using_conditional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Projecting_complex_from_optional_navigation_using_conditional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Projecting_property_of_complex_type_using_left_join_with_pushdown(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Projecting_property_of_complex_type_using_left_join_with_pushdown(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_complex_type_Distinct_with_FromSql(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_complex_type_Distinct_with_FromSql(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.ComplexTypeQueryJetTest.Select_complex_type_Distinct(async: False) @@ -9643,16 +11470,29 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysSplitQueryJetTest.Pro EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysSplitQueryJetTest.Projecting_multiple_collections_with_ordering_same_level(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.CompositeKeysSplitQueryJetTest.Projecting_multiple_collections_with_ordering_same_level(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Check_all_tests_overridden -EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Day -EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Hour -EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Minute -EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Month -EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Second -EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Year -EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.IsDate_join_fields -EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.IsDate_not_valid +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Day(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Day(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Hour(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Hour(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Minute(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Minute(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Month(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Month(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Second(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Second(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Year(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.DateDiff_Year(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Greatest_with_parameter_array_is_not_supported(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Greatest_with_parameter_array_is_not_supported(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.IsDate_join_fields(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.IsDate_join_fields(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.IsDate_not_valid(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.IsDate_not_valid(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.IsDate_should_throw_on_client_eval -EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.IsDate_valid +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.IsDate_valid(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.IsDate_valid(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Least_with_parameter_array_is_not_supported(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Least_with_parameter_array_is_not_supported(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Like_all_literals(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Like_all_literals(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.DbFunctionsJetTest.Like_identity(async: False) @@ -9674,8 +11514,10 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Count_Grouped_fr EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Count_Grouped_from_LINQ_101(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Cross_Join_with_Group_Join_from_LINQ_101(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Cross_Join_with_Group_Join_from_LINQ_101(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_is_optimized_when_filerting_and_projecting_anonymous_type_with_group_key_and_function_aggregate(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_is_optimized_when_filerting_and_projecting_anonymous_type_with_group_key_and_function_aggregate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Group_Join_from_LINQ_101(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.Group_Join_from_LINQ_101(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_is_optimized_when_filtering_and_projecting_anonymous_type_with_group_key_and_function_aggregate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_is_optimized_when_filtering_and_projecting_anonymous_type_with_group_key_and_function_aggregate(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_is_optimized_when_grouping_by_row_and_projecting_column_of_the_key_row(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_is_optimized_when_grouping_by_row_and_projecting_column_of_the_key_row(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.Ef6GroupByJetTest.GroupBy_is_optimized_when_projecting_aggregate_on_the_group(async: False) @@ -9935,6 +11777,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_que EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_simple_columns_out_of_order(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_simple_composed_include(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_simple_composed_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_simple_different_cased_columns_and_not_enough_columns_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_simple_different_cased_columns_and_not_enough_columns_throws(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_simple_include(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_simple_include(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.FromSqlQueryJetTest.FromSqlRaw_queryable_simple_projection_composed(async: False) @@ -10331,6 +12175,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.DateTimeOff EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.DateTimeOffset_to_unix_time_seconds(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.Derived_reference_is_skipped_when_base_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Derived_reference_is_skipped_when_base_type(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Distinct_on_subquery_doesnt_get_lifted(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Distinct_on_subquery_doesnt_get_lifted(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Distinct_with_optional_navigation_is_translated_to_sql(isAsync: False) @@ -10365,8 +12211,6 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Enum_flags_ EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Enum_flags_closure_typed_as_underlying_type_generates_correct_parameter_type(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Enum_matching_take_value_gets_different_type_mapping(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Enum_matching_take_value_gets_different_type_mapping(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Enum_ToString_is_client_eval(isAsync: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Enum_ToString_is_client_eval(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Filter_on_subquery_projecting_one_value_type_from_empty_collection(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Filter_on_subquery_projecting_one_value_type_from_empty_collection(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Filter_with_complex_predicate_containing_subquery(isAsync: False) @@ -10379,6 +12223,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Filtered_co EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Filtered_collection_projection_with_order_comparison_predicate_converted_to_join2(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Filtered_collection_projection_with_order_comparison_predicate_converted_to_join3(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Filtered_collection_projection_with_order_comparison_predicate_converted_to_join3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Find_underlying_property_after_GroupJoin_DefaultIfEmpty(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Find_underlying_property_after_GroupJoin_DefaultIfEmpty(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.First_on_byte_array(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.First_on_byte_array(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.FirstOrDefault_navigation_access_entity_equality_in_where_predicate_apply_peneding_selector(isAsync: False) @@ -10509,6 +12355,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_on_ EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_conditional_result(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_inheritance_and_coalesce_result(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_inheritance_and_coalesce_result(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_one_to_many_on_composite_key_then_orderby_key_properties(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_one_to_many_on_composite_key_then_orderby_key_properties(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_reference_on_derived_type_using_EF_Property(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_reference_on_derived_type_using_EF_Property(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_reference_on_derived_type_using_lambda_with_soft_cast(isAsync: False) @@ -10561,6 +12409,12 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_wit EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Include_with_projection_of_unmapped_property_still_gets_applied(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Join_entity_with_itself_grouped_by_key_followed_by_include_skip_take(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Join_entity_with_itself_grouped_by_key_followed_by_include_skip_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Join_include_coalesce_nested(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Join_include_coalesce_nested(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Join_include_coalesce_simple(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Join_include_coalesce_simple(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Join_include_conditional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Join_include_conditional(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Join_inner_source_custom_projection_followed_by_filter(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Join_inner_source_custom_projection_followed_by_filter(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Join_navigation_translated_to_subquery_composite_key(isAsync: False) @@ -10652,6 +12506,10 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Navigation_ EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Navigation_inside_interpolated_string_expanded(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Negated_bool_ternary_inside_anonymous_type_in_projection(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Negated_bool_ternary_inside_anonymous_type_in_projection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Nested_contains_with_enum(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Nested_contains_with_enum(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Non_string_concat_uses_appropriate_type_mapping(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Non_string_concat_uses_appropriate_type_mapping(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Non_unicode_parameter_is_used_for_non_unicode_column(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Non_unicode_parameter_is_used_for_non_unicode_column(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Non_unicode_string_literal_is_used_for_non_unicode_column_right(isAsync: False) @@ -10792,6 +12650,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Projecting_ EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_and_use_it_in_order_by(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_into_element_init(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_into_element_init(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_into_member_access(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_into_member_access(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_into_member_assignment(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_into_member_assignment(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_into_new_array(async: False) @@ -11014,6 +12874,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.ThenInclude EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.ThenInclude_collection_on_derived_after_derived_reference(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.ThenInclude_reference_on_derived_after_derived_collection(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.ThenInclude_reference_on_derived_after_derived_collection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Time_of_day_datetimeoffset(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Time_of_day_datetimeoffset(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.TimeSpan_Hours(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.TimeSpan_Hours(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.TimeSpan_Minutes(async: False) @@ -11024,8 +12886,16 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.ToString_bo EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.ToString_boolean_property_non_nullable(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.ToString_boolean_property_nullable(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.ToString_boolean_property_nullable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.ToString_enum_contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.ToString_enum_contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.ToString_enum_property_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.ToString_enum_property_projection(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.ToString_guid_property_projection(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.ToString_guid_property_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.ToString_nullable_enum_contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.ToString_nullable_enum_contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.ToString_nullable_enum_property_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.ToString_nullable_enum_property_projection(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.ToString_string_property_projection(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.ToString_string_property_projection(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Trying_to_access_unmapped_property_in_projection(async: False) @@ -11092,6 +12962,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_DateO 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_FromDateTime_compared_to_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.GearsOfWarQueryJetTest.Where_DateOnly_FromDateTime_compared_to_property(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) @@ -11337,8 +13209,6 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTe EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_reference_reverse(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_reference(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.InheritanceRelationshipsQueryJetTest.Nested_include_with_inheritance_reference_reference(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyHeterogeneousQueryJetTest.Many_to_many_load_works_when_join_entity_has_custom_key(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyHeterogeneousQueryJetTest.Many_to_many_load_works_when_join_entity_has_custom_key(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Contains_on_skip_collection_navigation_unidirectional(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Contains_on_skip_collection_navigation_unidirectional(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.ManyToManyNoTrackingQueryJetTest.Contains_on_skip_collection_navigation(async: False) @@ -11675,6 +13545,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.MappingQueryJetTest.All_orders EntityFrameworkCore.Jet.FunctionalTests.Query.MappingQueryJetTest.Project_nullable_enum EntityFrameworkCore.Jet.FunctionalTests.Query.NavigationTest.Duplicate_entries_are_not_created_for_navigations_to_dependent EntityFrameworkCore.Jet.FunctionalTests.Query.NavigationTest.Duplicate_entries_are_not_created_for_navigations_to_principal +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.All_true(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.All_true(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Array_cast_to_IEnumerable_Contains_with_constant(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Array_cast_to_IEnumerable_Contains_with_constant(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Average_no_data_cast_to_nullable(async: False) @@ -11954,6 +13826,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJe EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Min_with_non_matching_types_in_projection_introduces_explicit_cast(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Multiple_collection_navigation_with_FirstOrDefault_chained_projecting_scalar(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Multiple_collection_navigation_with_FirstOrDefault_chained_projecting_scalar(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Not_Any_false(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Not_Any_false(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OfType_Select_OfType_Select(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OfType_Select_OfType_Select(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OfType_Select(async: False) @@ -11984,6 +13858,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJe EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.OrderBy_Where_Count(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Project_constant_Sum(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Project_constant_Sum(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Return_type_of_singular_operator_is_preserved(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Return_type_of_singular_operator_is_preserved(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Select_All(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Select_All(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindAggregateOperatorsQueryJetTest.Select_Select_Distinct_Count(isAsync: False) @@ -12362,6 +14238,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Rep EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Replace_using_property_arguments(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Replace_with_emptystring(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Replace_with_emptystring(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Select_IndexOf_ToString(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Select_IndexOf_ToString(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Select_math_round_int(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Select_math_round_int(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Select_math_truncate_int(isAsync: False) @@ -12372,6 +14250,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Sel EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Select_mathf_round2(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Select_mathf_truncate(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Select_mathf_truncate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Select_ToString_IndexOf(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Select_ToString_IndexOf(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Static_equals_int_compared_to_long(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Static_equals_int_compared_to_long(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Static_equals_nullable_datetime_compared_to_non_nullable(isAsync: False) @@ -12410,12 +14290,24 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Str EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_Contains_constant_with_whitespace(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_Contains_Identity(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_Contains_Identity(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_Contains_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_Contains_in_projection(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_Contains_Literal(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_Contains_Literal(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_Contains_MethodCall(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_Contains_MethodCall(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_Contains_negated_in_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_Contains_negated_in_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_Contains_negated_in_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_Contains_negated_in_projection(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_Contains_parameter_with_whitespace(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_Contains_parameter_with_whitespace(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_Contains_with_StringComparison_Ordinal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_Contains_with_StringComparison_Ordinal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_Contains_with_StringComparison_OrdinalIgnoreCase(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_Contains_with_StringComparison_OrdinalIgnoreCase(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_Contains_with_StringComparison_unsupported(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_Contains_with_StringComparison_unsupported(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_EndsWith_Column(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_EndsWith_Column(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_EndsWith_Identity(isAsync: False) @@ -12426,6 +14318,12 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Str EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_EndsWith_MethodCall(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_EndsWith_Parameter(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_EndsWith_Parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_EndsWith_with_StringComparison_Ordinal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_EndsWith_with_StringComparison_Ordinal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_EndsWith_with_StringComparison_OrdinalIgnoreCase(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_EndsWith_with_StringComparison_OrdinalIgnoreCase(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_EndsWith_with_StringComparison_unsupported(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_EndsWith_with_StringComparison_unsupported(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_FirstOrDefault_MethodCall(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_FirstOrDefault_MethodCall(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_Join_over_non_nullable_column(async: False) @@ -12448,6 +14346,12 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Str EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_StartsWith_MethodCall(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_StartsWith_Parameter(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_StartsWith_Parameter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_StartsWith_with_StringComparison_Ordinal(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_StartsWith_with_StringComparison_Ordinal(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_StartsWith_with_StringComparison_OrdinalIgnoreCase(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_StartsWith_with_StringComparison_OrdinalIgnoreCase(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_StartsWith_with_StringComparison_unsupported(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.String_StartsWith_with_StringComparison_unsupported(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Substring_with_one_arg_with_closure(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Substring_with_one_arg_with_closure(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindFunctionsQueryJetTest.Substring_with_one_arg_with_constant(async: False) @@ -13392,6 +15296,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Client_J EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Client_Join_select_many(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Condition_on_entity_with_include(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Condition_on_entity_with_include(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_as_final_operator(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_as_final_operator(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_customers_employees_shadow(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_customers_employees_shadow(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_customers_employees_subquery_shadow_take(async: False) @@ -13414,6 +15320,10 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoi EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_projection(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_SelectMany_subquery_with_filter_and_DefaultIfEmpty(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_SelectMany_subquery_with_filter_and_DefaultIfEmpty(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_SelectMany_subquery_with_filter_orderby_and_DefaultIfEmpty(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_SelectMany_subquery_with_filter_orderby_and_DefaultIfEmpty(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_SelectMany_subquery_with_filter_orderby(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_SelectMany_subquery_with_filter_orderby(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_SelectMany_subquery_with_filter(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_SelectMany_subquery_with_filter(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.GroupJoin_simple_ordering(isAsync: False) @@ -13468,6 +15378,10 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_sel EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Join_select_many(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.SelectMany_with_client_eval_with_constructor(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.SelectMany_with_client_eval_with_constructor(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Unflattened_GroupJoin_composed_2(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Unflattened_GroupJoin_composed_2(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Unflattened_GroupJoin_composed(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindJoinQueryJetTest.Unflattened_GroupJoin_composed(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.Auto_initialized_view_set(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.Auto_initialized_view_set(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindKeylessEntitiesQueryJetTest.Check_all_tests_overridden @@ -13615,6 +15529,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Comparing_non_matching_entities_using_Equals(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Comparing_to_fixed_string_parameter(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Comparing_to_fixed_string_parameter(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Compiler_generated_local_closure_produces_valid_parameter_name(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Compiler_generated_local_closure_produces_valid_parameter_name(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Complex_nested_query_properly_binds_to_grandparent_when_parent_returns_scalar_result(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Complex_nested_query_properly_binds_to_grandparent_when_parent_returns_scalar_result(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Complex_query_with_repeated_nested_query_model_compiles_correctly(isAsync: False) @@ -13744,6 +15660,7 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Inner_parameter_in_nested_lambdas_gets_preserved(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Int16_parameter_can_be_used_for_int_column(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Int16_parameter_can_be_used_for_int_column(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.IQueryable_captured_variable EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Join_Customers_Orders_Orders_Skip_Take_Same_Properties(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Join_Customers_Orders_Orders_Skip_Take_Same_Properties(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Join_Customers_Orders_Projection_With_String_Concat_Skip_Take(isAsync: False) @@ -14156,6 +16073,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Skip_Take(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SkipWhile_throws_meaningful_exception(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.SkipWhile_throws_meaningful_exception(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Static_member_access_gets_parameterized_within_larger_evaluatable(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Static_member_access_gets_parameterized_within_larger_evaluatable(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.String_concat_with_navigation1(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.String_concat_with_navigation1(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.String_concat_with_navigation2(isAsync: False) @@ -14170,6 +16089,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Subquery_member_pushdown_does_not_change_original_subquery_model(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Subquery_member_pushdown_does_not_change_original_subquery_model2(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Subquery_member_pushdown_does_not_change_original_subquery_model2(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_0_works_when_constant(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_0_works_when_constant(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_All(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_All(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Take_Any_with_predicate(isAsync: False) @@ -14224,6 +16145,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_bitwise_binary_not(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_bitwise_binary_or(isAync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_bitwise_binary_or(isAync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_bitwise_binary_xor(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_bitwise_binary_xor(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_bitwise_or_with_logical_and(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_bitwise_or_with_logical_and(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindMiscellaneousQueryJetTest.Where_bitwise_or_with_logical_or(isAsync: False) @@ -14518,6 +16441,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Collec EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Collection_projection_AsNoTracking_OrderBy(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Custom_projection_reference_navigation_PK_to_FK_optimization(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Custom_projection_reference_navigation_PK_to_FK_optimization(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Entity_passed_to_DTO_constructor_works(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Entity_passed_to_DTO_constructor_works(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Filtered_collection_projection_is_tracked(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Filtered_collection_projection_is_tracked(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Filtered_collection_projection_with_to_list_is_tracked(isAsync: False) @@ -14652,6 +16577,14 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_byte_constant(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_chained_entity_navigation_doesnt_materialize_intermittent_entities(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_chained_entity_navigation_doesnt_materialize_intermittent_entities(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_conditional_drops_false(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_conditional_drops_false(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_conditional_flatten_nested_results(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_conditional_flatten_nested_results(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_conditional_flatten_nested_tests(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_conditional_flatten_nested_tests(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_conditional_terminates_at_true(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_conditional_terminates_at_true(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_conditional_with_null_comparison_in_test(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_conditional_with_null_comparison_in_test(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_constant_int(isAsync: False) @@ -14680,6 +16613,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_datetime_second_component(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_datetime_Ticks_component(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_datetime_Ticks_component(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_datetime_TimeOfDay_component(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_datetime_TimeOfDay_component(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_datetime_year_component(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_datetime_year_component(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindSelectQueryJetTest.Select_entity_compared_to_null(isAsync: False) @@ -15489,6 +17424,14 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.EF_Cons EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.EF_Constant_with_subtree(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.EF_Constant(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.EF_Constant(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.EF_Parameter_does_not_parameterized_as_part_of_bigger_subtree(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.EF_Parameter_does_not_parameterized_as_part_of_bigger_subtree(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.EF_Parameter_with_non_evaluatable_argument_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.EF_Parameter_with_non_evaluatable_argument_throws(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.EF_Parameter_with_subtree(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.EF_Parameter_with_subtree(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.EF_Parameter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.EF_Parameter(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Enclosing_class_const_member_does_not_generate_parameter(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Enclosing_class_const_member_does_not_generate_parameter(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Enclosing_class_readonly_member_generates_parameter(isAsync: False) @@ -15525,6 +17468,10 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.GetType EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.GetType_on_non_hierarchy3(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.GetType_on_non_hierarchy4(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.GetType_on_non_hierarchy4(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Implicit_cast_in_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Implicit_cast_in_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Interface_casting_though_generic_method(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Interface_casting_though_generic_method(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Last_over_custom_projection_compared_to_not_null(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Last_over_custom_projection_compared_to_not_null(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Last_over_custom_projection_compared_to_null(async: False) @@ -15557,6 +17504,12 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.SingleO EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.SingleOrDefault_over_custom_projection_compared_to_not_null(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.SingleOrDefault_over_custom_projection_compared_to_null(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.SingleOrDefault_over_custom_projection_compared_to_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Take_and_Distinct_evaluation_order(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Take_and_Distinct_evaluation_order(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Take_and_Where_evaluation_order(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Take_and_Where_evaluation_order(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Time_of_day_datetime(isAsync: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Time_of_day_datetime(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Two_sets_of_comparison_combine_correctly(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Two_sets_of_comparison_combine_correctly(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Two_sets_of_comparison_combine_correctly2(async: False) @@ -15900,6 +17853,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_s EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_subquery_FirstOrDefault_is_null(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_ternary_boolean_condition_false(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_ternary_boolean_condition_false(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_ternary_boolean_condition_negated(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_ternary_boolean_condition_negated(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_ternary_boolean_condition_true(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_ternary_boolean_condition_true(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NorthwindWhereQueryJetTest.Where_ternary_boolean_condition_with_another_condition(isAsync: False) @@ -15929,6 +17884,16 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Bool_not EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Bool_not_equal_nullable_bool_HasValue(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Bool_not_equal_nullable_int_HasValue(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Bool_not_equal_nullable_int_HasValue(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.CaseOpWhen_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.CaseOpWhen_predicate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.CaseWhen_equal_to_first_or_third_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.CaseWhen_equal_to_first_or_third_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.CaseWhen_equal_to_first_or_third_select(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.CaseWhen_equal_to_first_or_third_select(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.CaseWhen_equal_to_second_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.CaseWhen_equal_to_second_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.CaseWhen_equal_to_second_select(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.CaseWhen_equal_to_second_select(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Coalesce_deeply_nested(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Coalesce_deeply_nested(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Coalesce_not_equal(async: False) @@ -16054,6 +18019,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Negated_ EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Negated_contains_with_comparison_without_null_get_combined_for_relational_null_semantics(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Negated_order_comparison_on_non_nullable_arguments_gets_optimized(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Negated_order_comparison_on_non_nullable_arguments_gets_optimized(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Negated_order_comparison_on_nullable_arguments_doesnt_get_optimized(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Negated_order_comparison_on_nullable_arguments_doesnt_get_optimized(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Nested_CompareTo_optimized(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Nested_CompareTo_optimized(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Null_comparison_in_order_by_with_relational_nulls(async: False) @@ -16136,6 +18103,10 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Projecti EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Projecting_nullable_bool_with_coalesce_nested(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Projecting_nullable_bool_with_coalesce(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Projecting_nullable_bool_with_coalesce(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Rewrite_compare_bool_with_bool(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Rewrite_compare_bool_with_bool(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Rewrite_compare_int_with_int(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Rewrite_compare_int_with_int(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Select_IndexOf(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Select_IndexOf(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.String_concat_with_both_arguments_being_null(async: False) @@ -16144,6 +18115,10 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Sum_func EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Sum_function_is_always_considered_non_nullable(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Switching_null_semantics_produces_different_cache_entry EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Switching_parameter_value_to_null_produces_different_cache_entry +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_coalesce_shortcircuit_many(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_coalesce_shortcircuit_many(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_coalesce_shortcircuit(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_coalesce_shortcircuit(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_coalesce(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_coalesce(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_comparison_nonnull_constant_and_null_parameter(async: False) @@ -16174,6 +18149,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_eq EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_equal_with_conditional_non_nullable(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_equal_with_conditional(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_equal_with_conditional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_IndexOf_empty(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_IndexOf_empty(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_multiple_ands_with_null(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_multiple_ands_with_null(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_multiple_ands_with_nullable_parameter_and_constant_not_optimized(async: False) @@ -16203,6 +18180,9 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_nu EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_nullable_bool_with_null_check(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_nullable_bool(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.NullSemanticsQueryJetTest.Where_nullable_bool(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OperatorsQueryJetTest.Bitwise_and_on_expression_with_like_and_null_check_being_compared_to_false +EntityFrameworkCore.Jet.FunctionalTests.Query.OperatorsQueryJetTest.Complex_predicate_with_bitwise_and_arithmetic_operations +EntityFrameworkCore.Jet.FunctionalTests.Query.OperatorsQueryJetTest.Complex_predicate_with_bitwise_and_modulo_and_negation EntityFrameworkCore.Jet.FunctionalTests.Query.OperatorsQueryJetTest.Double_negate_on_column EntityFrameworkCore.Jet.FunctionalTests.Query.OperatorsQueryJetTest.Negate_on_binary_expression(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.OperatorsQueryJetTest.Negate_on_binary_expression(async: True) @@ -16212,13 +18192,31 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.OperatorsQueryJetTest.Negate_on_li EntityFrameworkCore.Jet.FunctionalTests.Query.OperatorsQueryJetTest.Negate_on_like_expression(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.OperatorsQueryJetTest.Or_on_two_nested_binaries_and_another_simple_comparison EntityFrameworkCore.Jet.FunctionalTests.Query.OperatorsQueryJetTest.Projection_with_not_and_negation_on_integer +EntityFrameworkCore.Jet.FunctionalTests.Query.OptionalDependentQueryJetTest.Basic_projection_entity_with_all_optional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OptionalDependentQueryJetTest.Basic_projection_entity_with_all_optional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OptionalDependentQueryJetTest.Basic_projection_entity_with_some_required(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OptionalDependentQueryJetTest.Basic_projection_entity_with_some_required(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OptionalDependentQueryJetTest.Filter_optional_dependent_with_all_optional_compared_to_not_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OptionalDependentQueryJetTest.Filter_optional_dependent_with_all_optional_compared_to_not_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OptionalDependentQueryJetTest.Filter_optional_dependent_with_all_optional_compared_to_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OptionalDependentQueryJetTest.Filter_optional_dependent_with_all_optional_compared_to_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OptionalDependentQueryJetTest.Filter_optional_dependent_with_some_required_compared_to_not_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OptionalDependentQueryJetTest.Filter_optional_dependent_with_some_required_compared_to_not_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OptionalDependentQueryJetTest.Filter_optional_dependent_with_some_required_compared_to_null(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OptionalDependentQueryJetTest.Filter_optional_dependent_with_some_required_compared_to_null(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.An_optional_dependent_without_any_columns_and_nested_dependent_throws +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Can_auto_include_navigation_from_model EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Can_have_required_owned_type_on_derived_type +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Include_collection_for_entity_with_owned_type_works EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Join_selects_with_duplicating_aliases_and_owned_expansion_uniquifies_correctly(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Join_selects_with_duplicating_aliases_and_owned_expansion_uniquifies_correctly(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Multilevel_owned_entities_determine_correct_nullability EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Multiple_owned_reference_mapped_to_own_table_containing_owned_collection_in_split_query(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Multiple_owned_reference_mapped_to_own_table_containing_owned_collection_in_split_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Nested_owned_required_dependents_are_materialized EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Owned_collection_basic_split_query(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Owned_collection_basic_split_query(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Owned_entity_multiple_level_in_aggregate EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Owned_entity_with_all_null_properties_entity_equality_when_not_containing_another_owned_entity(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Owned_entity_with_all_null_properties_entity_equality_when_not_containing_another_owned_entity(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Owned_entity_with_all_null_properties_in_compared_to_non_null_in_conditional_projection(async: False) @@ -16237,6 +18235,10 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.OwnsMany_c EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.OwnsMany_correlated_projection(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Projecting_owned_collection_and_aggregate(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedEntityQueryJetTest.Projecting_owned_collection_and_aggregate(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Any_with_predicate_over_owned_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Any_with_predicate_over_owned_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Any_without_predicate_over_owned_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Any_without_predicate_over_owned_collection(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_group_by_converted_indexer_property(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_group_by_converted_indexer_property(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_group_by_converted_owned_indexer_property(async: False) @@ -16251,8 +18253,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_OrderBy_inde EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_OrderBy_indexer_properties_converted(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_OrderBy_indexer_properties(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_OrderBy_indexer_properties(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_OrderBy_owened_indexer_properties_converted(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_OrderBy_owened_indexer_properties_converted(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_OrderBy_owned_indexer_properties_converted(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_OrderBy_owned_indexer_properties_converted(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_OrderBy_owned_indexer_properties(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_OrderBy_owned_indexer_properties(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Can_project_indexer_properties_converted(async: False) @@ -16283,12 +18285,22 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Client_method_ta EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Client_method_take_loads_owned_navigations_variation_2(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Client_method_take_loads_owned_navigations(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Client_method_take_loads_owned_navigations(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Contains_over_owned_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Contains_over_owned_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Count_over_owned_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Count_over_owned_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.ElementAt_over_owned_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.ElementAt_over_owned_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.ElementAtOrDefault_over_owned_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.ElementAtOrDefault_over_owned_collection(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Filter_on_indexer_using_closure(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Filter_on_indexer_using_closure(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Filter_on_indexer_using_function_argument(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Filter_on_indexer_using_function_argument(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Filter_owned_entity_chained_with_regular_entity_followed_by_projecting_owned_collection(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Filter_owned_entity_chained_with_regular_entity_followed_by_projecting_owned_collection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.FirstOrDefault_over_owned_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.FirstOrDefault_over_owned_collection(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.GroupBy_aggregate_on_owned_navigation_in_aggregate_selector(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.GroupBy_aggregate_on_owned_navigation_in_aggregate_selector(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Indexer_property_is_pushdown_into_subquery(async: False) @@ -16349,6 +18361,10 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Project_multiple EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Project_multiple_owned_navigations_with_expansion_on_owned_collections(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Project_multiple_owned_navigations(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Project_multiple_owned_navigations(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Project_owned_reference_navigation_which_does_not_own_additional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Project_owned_reference_navigation_which_does_not_own_additional(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Project_owned_reference_navigation_which_owns_additional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Project_owned_reference_navigation_which_owns_additional(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Projecting_collection_correlated_with_keyless_entity_after_navigation_works_using_parent_identifiers(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Projecting_collection_correlated_with_keyless_entity_after_navigation_works_using_parent_identifiers(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Projecting_indexer_property_ignores_include_converted(async: False) @@ -16385,10 +18401,14 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.SelectMany_on_ow EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.SelectMany_on_owned_reference_followed_by_regular_entity_and_collection(isAsync: True) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.SelectMany_on_owned_reference_with_entity_in_between_ending_in_owned_collection(isAsync: False) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.SelectMany_on_owned_reference_with_entity_in_between_ending_in_owned_collection(isAsync: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.SelectMany_with_result_selector(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.SelectMany_with_result_selector(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Set_throws_for_owned_type(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Set_throws_for_owned_type(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Simple_query_entity_with_owned_collection(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Simple_query_entity_with_owned_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Skip_Take_over_owned_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Skip_Take_over_owned_collection(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Throw_for_owned_entities_without_owner_in_tracking_query(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Throw_for_owned_entities_without_owner_in_tracking_query(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Trying_to_access_non_existent_indexer_property_throws_meaningful_exception(async: False) @@ -16409,13 +18429,136 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Where_collection EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Where_collection_navigation_ToList_Count_member(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Where_owned_collection_navigation_ToList_Count(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.OwnedQueryJetTest.Where_owned_collection_navigation_ToList_Count(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.BinaryExpression +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Check_all_tests_overridden +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Concat +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Conditional_contains_captured_variable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Conditional_no_evaluatable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Contains_with_parameterized_collection +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.DbContext_as_captured_variable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.DbContext_as_field +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.DbContext_as_local_variable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.DbContext_as_method_invocation_result +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.DbContext_as_property +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Dynamic_query_does_not_get_precompiled +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.EF_Constant_is_not_supported +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Final_GroupBy +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Foreach_async_is_not_supported +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Foreach_sync_over_DbSet_property_is_not_supported +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Foreach_sync_over_operator +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.FromSql_with_FormattableString_parameters +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.FromSqlRaw +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Include_single +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Include_split +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Invoke_no_evaluatability_is_not_supported +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.ListInit_fully_evaluatable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.ListInit_no_evaluatability +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.ListInit_with_evaluatable_with_captured_variable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.ListInit_with_evaluatable_without_captured_variable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.MemberInit_contains_captured_variable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.MemberInit_evaluatable_as_constant +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.MemberInit_evaluatable_as_parameter +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.MemberInit_no_evaluatable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.MethodCallExpression_fully_evaluatable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.MethodCallExpression_no_evaluatability +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.MethodCallExpression_with_evaluatable_with_captured_variable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.MethodCallExpression_with_evaluatable_without_captured_variable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Multiple_queries_with_captured_variables +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.New_with_no_arguments +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.NewArray +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.NotParameterizedAttribute_is_not_supported_with_non_constant_argument +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.NotParameterizedAttribute_with_constant +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.OrderBy +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Project_anonymous_object +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Query_compilation_failure +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Query_syntax_is_not_supported +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Same_captured_variable_twice_in_different_lambdas +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Same_captured_variable_twice_in_same_lambda +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Select_changes_type +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Select_New_with_captured_variable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Take +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_All +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_AllAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_Any +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_AnyAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_AsAsyncEnumerable_on_DbSet +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_AsAsyncEnumerable_on_IQueryable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_AsEnumerable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_Average +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_AverageAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_Contains +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_ContainsAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_Count +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_CountAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_ExecuteDelete +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_ExecuteDeleteAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_ExecuteUpdate +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_ExecuteUpdateAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_First +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_FirstAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_FirstOrDefault +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_FirstOrDefaultAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_GetEnumerator +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_Last +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_LastAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_LastOrDefault +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_LastOrDefaultAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_LongCount +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_LongCountAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_Max +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_MaxAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_Min +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_MinAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_Single +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_SingleAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_SingleOrDefault +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_SingleOrDefaultAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_Sum +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_SumAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_ToArray +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_ToArrayAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_ToDictionary +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_ToDictionaryAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_ToHashSet +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_ToHashSetAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_ToList +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_ToListAsync +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Terminating_ToLookup +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.ToDictionary_over_anonymous_type +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.ToDictionaryAsync_over_anonymous_type +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.ToList_over_objects_does_not_get_precompiled +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Two_captured_variables_in_different_lambdas +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Two_captured_variables_in_same_lambda +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Unary +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Union +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Unsafe_accessor_gets_generated_once_for_multiple_queries +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledQueryJetTest.Where_New_with_captured_variable +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledSqlPregenerationQueryJetTest.Do_not_cache_is_respected +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledSqlPregenerationQueryJetTest.Final_GroupBy +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledSqlPregenerationQueryJetTest.Include_single_query +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledSqlPregenerationQueryJetTest.Include_split_query +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledSqlPregenerationQueryJetTest.Many_non_nullable_parameters_do_not_prevent_pregeneration +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledSqlPregenerationQueryJetTest.No_parameters +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledSqlPregenerationQueryJetTest.Non_nullable_reference_type +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledSqlPregenerationQueryJetTest.Non_nullable_value_type +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledSqlPregenerationQueryJetTest.Nullable_and_non_nullable_reference_types +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledSqlPregenerationQueryJetTest.Nullable_and_non_nullable_value_types +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledSqlPregenerationQueryJetTest.Nullable_reference_type +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledSqlPregenerationQueryJetTest.Nullable_value_type +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledSqlPregenerationQueryJetTest.Too_many_nullable_parameters_prevent_pregeneration +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledSqlPregenerationQueryJetTest.Two_non_nullable_reference_types +EntityFrameworkCore.Jet.FunctionalTests.Query.PrecompiledSqlPregenerationQueryJetTest.Two_nullable_reference_types EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Check_all_tests_overridden EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Any(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Any(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Concat_parameter_collection_equality_inline_collection(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Concat_parameter_collection_equality_inline_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Contains_over_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Contains_over_subquery(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Count_method(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Count_method(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Count_with_predicate(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Count_with_predicate(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Distinct(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Distinct(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_ElementAt(async: False) @@ -16426,6 +18569,10 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.C EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_equality_inline_collection(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_equality_parameter_collection(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_equality_parameter_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_First(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_First(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_FirstOrDefault(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_FirstOrDefault(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_in_subquery_Union_parameter_collection(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_in_subquery_Union_parameter_collection(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_index_beyond_end(async: False) @@ -16458,6 +18605,16 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.C EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_OrderByDescending_ElementAt(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_projection_from_top_level(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_projection_from_top_level(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_SelectMany_with_filter(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_SelectMany_with_filter(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_SelectMany_with_Select_to_anonymous_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_SelectMany_with_Select_to_anonymous_type(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_SelectMany(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_SelectMany(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Single(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Single(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_SingleOrDefault(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_SingleOrDefault(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Skip_Take(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Skip_Take(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Skip(async: False) @@ -16466,6 +18623,20 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.C EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Take(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Union_parameter_collection(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Union_parameter_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Where_Count(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Where_Count(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Where_ElementAt(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Where_ElementAt(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Where_equality_inline_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Where_equality_inline_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Where_Skip_Take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Where_Skip_Take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Where_Skip(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Where_Skip(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Where_Take(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Where_Take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Where_Union(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Column_collection_Where_Union(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_Contains_as_Any_with_predicate(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_Contains_as_Any_with_predicate(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_Contains_with_all_parameters(async: False) @@ -16496,6 +18667,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.I EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_Except_column_collection(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_Join_ordered_column_collection(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_Join_ordered_column_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_List_Contains_with_mixed_value_types(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_List_Contains_with_mixed_value_types(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_negated_Contains_as_All(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_negated_Contains_as_All(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Inline_collection_of_ints_Contains(async: False) @@ -16517,6 +18690,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.P EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_Concat_column_collection(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_Count(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_Count(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_HashSet_of_ints_Contains_int(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_HashSet_of_ints_Contains_int(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_in_subquery_and_Convert_as_compiled_query EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_in_subquery_Count_as_compiled_query(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Parameter_collection_in_subquery_Count_as_compiled_query(async: True) @@ -16564,6 +18739,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.P EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_collection_of_ints_simple(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_collection_of_ints_with_distinct(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_collection_of_ints_with_distinct(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_collection_of_ints_with_ToList_and_FirstOrDefault(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_collection_of_ints_with_ToList_and_FirstOrDefault(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_collection_of_nullable_ints_with_paging(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_collection_of_nullable_ints_with_paging(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_collection_of_nullable_ints_with_paging2(async: False) @@ -16572,145 +18749,14 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.P EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_collection_of_nullable_ints_with_paging3(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_empty_collection_of_nullables_and_collection_only_containing_nulls(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_empty_collection_of_nullables_and_collection_only_containing_nulls(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_inline_collection_with_Concat(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_inline_collection_with_Concat(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_inline_collection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_inline_collection(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_multiple_collections(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_multiple_collections(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_primitive_collections_element(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.PrimitiveCollectionsQueryJetTest.Project_primitive_collections_element(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.An_optional_dependent_without_any_columns_and_nested_dependent_throws -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Average_with_cast -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Can_auto_include_navigation_from_model -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Can_configure_SingleQuery_at_context_level -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Can_configure_SplitQuery_at_context_level -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Can_ignore_invalid_include_path_error -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Can_query_hierarchy_with_non_nullable_property_on_derived -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Can_query_with_nav_collection_in_projection_with_split_query_in_parallel_async -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Can_query_with_nav_collection_in_projection_with_split_query_in_parallel_sync -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Casts_are_removed_from_expression_tree_when_redundant -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Collection_include_on_owner_with_owned_type_mapped_to_different_table -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Collection_without_setter_materialized_correctly -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Compiler_generated_local_closure_produces_valid_parameter_name_1742 -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Conditional_expression_with_conditions_does_not_collapse_if_nullable_bool -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Correlated_collection_correctly_associates_entities_with_byte_array_keys -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Correlated_subquery_with_owned_navigation_being_compared_to_null_works -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Customer_collections_materialize_properly_3758 -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Cycles_in_auto_include -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.DateTime_Contains_with_smalldatetime_generates_correct_literal -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Derived_reference_is_skipped_when_base_type -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Discriminator_type_is_handled_correctly -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Double_convert_interface_created_expression_tree -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Entity_passed_to_DTO_constructor_works -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Explicitly_compiled_query_does_not_add_cache_entry -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Expression_tree_constructed_via_interface_works_17276 -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Find_underlying_property_after_GroupJoin_DefaultIfEmpty -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.First_FirstOrDefault_ix_async_Issue_603 -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.From_sql_expression_compares_correctly -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.GroupJoin_Anonymous_projection_GroupBy_Aggregate_join_elimination -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.GroupJoin_SelectMany_gets_flattened -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Implicit_cast_6864 -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Include_collection_for_entity_with_owned_type_works -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Include_collection_optional_reference_collection -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Include_collection_with_OfType_base -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Include_collection_works_when_defined_on_intermediate_type -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Include_on_entity_with_composite_key_Many_To_One_Issues_925_926 -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Include_on_entity_with_composite_key_One_To_Many_Issues_925_926 -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Include_on_optional_navigation -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Include_with_order_by_on_interface_key -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Inlined_dbcontext_is_not_leaking -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Invoke_inside_query_filter_gets_correctly_evaluated_during_translation -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Keyless_type_used_inside_defining_query -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Left_outer_join_Issue_6091 -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Max_in_multi_level_nested_subquery -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.MultiContext_query_filter_test -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Multilevel_owned_entities_determine_correct_nullability -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Multiple_optional_navs_should_not_deadlock_Issue_5481 -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Nested_contains_with_enum -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Nested_include_queries_do_not_populate_navigation_twice -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Nested_owned_required_dependents_are_materialized -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Nested_queries_does_not_cause_concurrency_exception_sync(tracking: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Nested_queries_does_not_cause_concurrency_exception_sync(tracking: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.New_instances_in_projection_are_not_shared_across_results -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.NoTracking_split_query_creates_only_required_instances(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.NoTracking_split_query_creates_only_required_instances(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Null_check_removal_applied_recursively -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Owned_entity_mapped_to_separate_table -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Owned_entity_multiple_level_in_aggregate -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Parameterless_ctor_on_inner_DTO_gets_called_for_every_row -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Projecting_column_with_value_converter_of_ulong_byte_array -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Projecting_correlated_collection_along_with_non_mapped_property -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Projecting_entity_with_value_converter_and_include_works -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Projection_failing_with_EnumToStringConverter -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Query_cache_entries_are_evicted_as_necessary -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Query_filter_with_contains_evaluates_correctly -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Query_filter_with_db_set_should_not_block_other_filters -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Query_filter_with_null_constant -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Query_filter_with_pk_fk_optimization_Issue_13517 -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Query_generates_correct_datetime2_parameter_definition(fractionalSeconds: 1, postfix: " (Scale = 1)") -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Query_generates_correct_datetime2_parameter_definition(fractionalSeconds: 2, postfix: " (Scale = 2)") -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Query_generates_correct_datetime2_parameter_definition(fractionalSeconds: 3, postfix: " (Scale = 3)") -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Query_generates_correct_datetime2_parameter_definition(fractionalSeconds: 4, postfix: " (Scale = 4)") -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Query_generates_correct_datetime2_parameter_definition(fractionalSeconds: 5, postfix: " (Scale = 5)") -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Query_generates_correct_datetime2_parameter_definition(fractionalSeconds: 6, postfix: " (Scale = 6)") -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Query_generates_correct_datetime2_parameter_definition(fractionalSeconds: 7, postfix: " (Scale = 7)") -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Query_generates_correct_datetime2_parameter_definition(fractionalSeconds: null, postfix: "") -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Query_generates_correct_datetimeoffset_parameter_definition(fractionalSeconds: 1, postfix: " (Scale = 1)") -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Query_generates_correct_datetimeoffset_parameter_definition(fractionalSeconds: 2, postfix: " (Scale = 2)") -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Query_generates_correct_datetimeoffset_parameter_definition(fractionalSeconds: 3, postfix: " (Scale = 3)") -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Query_generates_correct_datetimeoffset_parameter_definition(fractionalSeconds: 4, postfix: " (Scale = 4)") -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Query_generates_correct_datetimeoffset_parameter_definition(fractionalSeconds: 5, postfix: " (Scale = 5)") -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Query_generates_correct_datetimeoffset_parameter_definition(fractionalSeconds: 6, postfix: " (Scale = 6)") -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Query_generates_correct_datetimeoffset_parameter_definition(fractionalSeconds: 7, postfix: " (Scale = 7)") -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Query_generates_correct_datetimeoffset_parameter_definition(fractionalSeconds: null, postfix: "") -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Query_generates_correct_timespan_parameter_definition(fractionalSeconds: 1, postfix: " (Scale = 1)") -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Query_generates_correct_timespan_parameter_definition(fractionalSeconds: 2, postfix: " (Scale = 2)") -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Query_generates_correct_timespan_parameter_definition(fractionalSeconds: 3, postfix: " (Scale = 3)") -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Query_generates_correct_timespan_parameter_definition(fractionalSeconds: 4, postfix: " (Scale = 4)") -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Query_generates_correct_timespan_parameter_definition(fractionalSeconds: 5, postfix: " (Scale = 5)") -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Query_generates_correct_timespan_parameter_definition(fractionalSeconds: 6, postfix: " (Scale = 6)") -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Query_generates_correct_timespan_parameter_definition(fractionalSeconds: 7, postfix: " (Scale = 7)") -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Query_generates_correct_timespan_parameter_definition(fractionalSeconds: null, postfix: "") -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.QueryBuffer_requirement_is_computed_when_querying_base_type_while_derived_type_has_shadow_prop -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Reference_include_on_derived_type_with_sibling_works_Issue_7312 -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Relational_command_cache_creates_new_entry_when_parameter_nullability_changes -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Repeated_parameters_in_generated_query_sql -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Repro3101_coalesce_tracking -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Repro3101_complex_coalesce -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Repro3101_conditional -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Repro3101_nested_coalesce -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Repro3101_simple_coalesce -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Repro5456_include_group_join_is_per_query_context -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Repro5456_include_group_join_is_per_query_context_async -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Repro6986 -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Return_type_of_singular_operator_is_preserved -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.SaveChangesAsync_accepts_changes_with_ConfigureAwait_true_22841 -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Select_enumerable_navigation_backed_by_collection(async: False, split: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Select_enumerable_navigation_backed_by_collection(async: False, split: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Select_enumerable_navigation_backed_by_collection(async: True, split: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Select_enumerable_navigation_backed_by_collection(async: True, split: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Select_nested_projection -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Self_reference_in_query_filter_works -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Setting_IsUnicode_generates_unicode_literal_in_SQL -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.SplitQuery_disposes_inner_data_readers -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.ThenInclude_with_interface_navigations_3409 -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Thread_safety_in_relational_command_cache -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Unconfigured_query_splitting_behavior_throws_a_warning -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Union_and_insert_12549 -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Using_AsSingleQuery_without_context_configuration_does_not_throw_warning -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Using_AsSplitQuery_without_multiple_active_result_sets_works -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Using_explicit_interface_implementation_as_navigation_works -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Variable_from_closure_is_parametrized -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Walking_back_include_tree_is_not_allowed_1 -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Walking_back_include_tree_is_not_allowed_2 -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Walking_back_include_tree_is_not_allowed_3 -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Walking_back_include_tree_is_not_allowed_4 -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Weak_entities_with_query_filter_subquery_flattening -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Where_contains_DateTime_literals(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Where_contains_DateTime_literals(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Where_equals_DateTime_Now(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Where_equals_DateTime_Now(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Where_equals_new_DateTime(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Where_equals_new_DateTime(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Where_not_equals_DateTime_Now(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.QueryBugsTest.Where_not_equals_DateTime_Now(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.DbContext_complex_expression_is_parameterized EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.DbContext_field_is_parameterized EntityFrameworkCore.Jet.FunctionalTests.Query.QueryFilterFuncletizationJetTest.DbContext_list_is_parameterized @@ -16767,54 +18813,6 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.SharedTypeQueryJetTest.Can_use_sha EntityFrameworkCore.Jet.FunctionalTests.Query.SharedTypeQueryJetTest.Can_use_shared_type_entity_type_in_query_filter_with_from_sql(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.SharedTypeQueryJetTest.Can_use_shared_type_entity_type_in_query_filter(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.SharedTypeQueryJetTest.Can_use_shared_type_entity_type_in_query_filter(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Aggregate_over_subquery_in_group_by_projection(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Aggregate_over_subquery_in_group_by_projection(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Bool_discriminator_column_works(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Bool_discriminator_column_works(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Comparing_byte_column_to_enum_in_vb_creating_double_cast(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Comparing_byte_column_to_enum_in_vb_creating_double_cast(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Comparing_enum_casted_to_byte_with_int_constant(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Comparing_enum_casted_to_byte_with_int_constant(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Comparing_enum_casted_to_byte_with_int_parameter(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Comparing_enum_casted_to_byte_with_int_parameter(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Count_member_over_IReadOnlyCollection_works(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Count_member_over_IReadOnlyCollection_works(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Enum_with_value_converter_matching_take_value(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Enum_with_value_converter_matching_take_value(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Filter_on_nested_DTO_with_interface_gets_simplified_correctly(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Filter_on_nested_DTO_with_interface_gets_simplified_correctly(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Flattened_GroupJoin_on_interface_generic(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Flattened_GroupJoin_on_interface_generic(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.GroupBy_aggregate_on_right_side_of_join(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.GroupBy_aggregate_on_right_side_of_join(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.GroupBy_Aggregate_over_navigations_repeated(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.GroupBy_Aggregate_over_navigations_repeated(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Hierarchy_query_with_abstract_type_sibling_TPC(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Hierarchy_query_with_abstract_type_sibling_TPC(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Hierarchy_query_with_abstract_type_sibling_TPT(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Hierarchy_query_with_abstract_type_sibling_TPT(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Hierarchy_query_with_abstract_type_sibling(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Hierarchy_query_with_abstract_type_sibling(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.IsDeleted_query_filter_with_conversion_to_int_works(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.IsDeleted_query_filter_with_conversion_to_int_works(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Muliple_occurrences_of_FromSql_in_group_by_aggregate(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Muliple_occurrences_of_FromSql_in_group_by_aggregate(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Multiple_nested_reference_navigations(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Multiple_nested_reference_navigations(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Null_check_removal_in_ternary_maintain_appropriate_cast(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Null_check_removal_in_ternary_maintain_appropriate_cast(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Pushdown_does_not_add_grouping_key_to_projection_when_distinct_is_applied(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Pushdown_does_not_add_grouping_key_to_projection_when_distinct_is_applied(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.StoreType_for_UDF_used(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.StoreType_for_UDF_used(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Subquery_first_member_compared_to_null(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Subquery_first_member_compared_to_null(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Unwrap_convert_node_over_projection_when_translating_contains_over_subquery_2(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Unwrap_convert_node_over_projection_when_translating_contains_over_subquery_2(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Unwrap_convert_node_over_projection_when_translating_contains_over_subquery_3(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Unwrap_convert_node_over_projection_when_translating_contains_over_subquery_3(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Unwrap_convert_node_over_projection_when_translating_contains_over_subquery(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.SimpleQueryJetTest.Unwrap_convert_node_over_projection_when_translating_contains_over_subquery(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Executes_stored_procedure_with_generated_parameter(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Executes_stored_procedure_with_generated_parameter(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.SqlExecutorJetTest.Executes_stored_procedure_with_parameter(async: False) @@ -16922,6 +18920,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_querya EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_simple_columns_out_of_order_and_not_enough_columns_throws(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_simple_columns_out_of_order(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_simple_columns_out_of_order(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_simple_different_cased_columns_and_not_enough_columns_throws(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_simple_different_cased_columns_and_not_enough_columns_throws(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_simple_mapped_type(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_simple_mapped_type(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_simple_projection_composed(async: False) @@ -16940,6 +18940,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_querya EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_with_parameters_inline(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_with_parameters(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_queryable_with_parameters(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_then_String_ToUpper_String_Length(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_then_String_ToUpper_String_Length(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_with_db_parameters_called_multiple_times(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_with_db_parameters_called_multiple_times(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.SqlQueryJetTest.SqlQueryRaw_with_dbParameter_mixed_in_subquery(async: False) @@ -17121,6 +19123,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Constant EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Constant_enum_with_same_underlying_value_as_previously_parameterized_int(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Contains_on_byte_array_property_using_byte_column(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Contains_on_byte_array_property_using_byte_column(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Contains_on_collection_of_byte_subquery(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Contains_on_collection_of_byte_subquery(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Contains_on_collection_of_nullable_byte_subquery_null_constant(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Contains_on_collection_of_nullable_byte_subquery_null_constant(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Contains_on_collection_of_nullable_byte_subquery_null_parameter(async: False) @@ -17243,6 +19247,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.DateTime EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.DateTimeOffset_to_unix_time_seconds(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.Derived_reference_is_skipped_when_base_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Derived_reference_is_skipped_when_base_type(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Distinct_on_subquery_doesnt_get_lifted(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Distinct_on_subquery_doesnt_get_lifted(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Distinct_with_optional_navigation_is_translated_to_sql(async: False) @@ -17277,8 +19283,6 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Enum_fla EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Enum_flags_closure_typed_as_underlying_type_generates_correct_parameter_type(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Enum_matching_take_value_gets_different_type_mapping(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Enum_matching_take_value_gets_different_type_mapping(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Enum_ToString_is_client_eval(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Enum_ToString_is_client_eval(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Filter_on_subquery_projecting_one_value_type_from_empty_collection(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Filter_on_subquery_projecting_one_value_type_from_empty_collection(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Filter_with_complex_predicate_containing_subquery(async: False) @@ -17291,6 +19295,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Filtered EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Filtered_collection_projection_with_order_comparison_predicate_converted_to_join2(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Filtered_collection_projection_with_order_comparison_predicate_converted_to_join3(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Filtered_collection_projection_with_order_comparison_predicate_converted_to_join3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Find_underlying_property_after_GroupJoin_DefaultIfEmpty(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Find_underlying_property_after_GroupJoin_DefaultIfEmpty(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.First_on_byte_array(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.First_on_byte_array(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.FirstOrDefault_navigation_access_entity_equality_in_where_predicate_apply_peneding_selector(async: False) @@ -17421,6 +19427,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_ EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_conditional_result(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_inheritance_and_coalesce_result(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_inheritance_and_coalesce_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_one_to_many_on_composite_key_then_orderby_key_properties(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_one_to_many_on_composite_key_then_orderby_key_properties(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_reference_on_derived_type_using_EF_Property(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_reference_on_derived_type_using_EF_Property(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_reference_on_derived_type_using_lambda_with_soft_cast(async: False) @@ -17473,6 +19481,12 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_ EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Include_with_projection_of_unmapped_property_still_gets_applied(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Join_entity_with_itself_grouped_by_key_followed_by_include_skip_take(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Join_entity_with_itself_grouped_by_key_followed_by_include_skip_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Join_include_coalesce_nested(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Join_include_coalesce_nested(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Join_include_coalesce_simple(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Join_include_coalesce_simple(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Join_include_conditional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Join_include_conditional(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Join_inner_source_custom_projection_followed_by_filter(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Join_inner_source_custom_projection_followed_by_filter(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Join_navigation_translated_to_subquery_composite_key(async: False) @@ -17564,6 +19578,10 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Navigati EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Navigation_inside_interpolated_string_expanded(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Negated_bool_ternary_inside_anonymous_type_in_projection(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Negated_bool_ternary_inside_anonymous_type_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Nested_contains_with_enum(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Nested_contains_with_enum(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Non_string_concat_uses_appropriate_type_mapping(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Non_string_concat_uses_appropriate_type_mapping(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Non_unicode_parameter_is_used_for_non_unicode_column(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Non_unicode_parameter_is_used_for_non_unicode_column(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Non_unicode_string_literal_is_used_for_non_unicode_column_right(async: False) @@ -17620,6 +19638,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Optional EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_binary_expression(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_conditional_expression(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_conditional_expression(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_contains(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_DTOs(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_DTOs(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Optional_navigation_type_compensation_works_with_list_initializers(async: False) @@ -17702,6 +19722,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Projecti EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_and_use_it_in_order_by(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_into_element_init(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_into_element_init(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_into_member_access(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_into_member_access(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_into_member_assignment(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_into_member_assignment(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_into_new_array(async: False) @@ -17924,6 +19946,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.ThenIncl EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.ThenInclude_collection_on_derived_after_derived_reference(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.ThenInclude_reference_on_derived_after_derived_collection(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.ThenInclude_reference_on_derived_after_derived_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Time_of_day_datetimeoffset(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Time_of_day_datetimeoffset(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.TimeSpan_Hours(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.TimeSpan_Hours(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.TimeSpan_Minutes(async: False) @@ -17934,8 +19958,16 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.ToString EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.ToString_boolean_property_non_nullable(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.ToString_boolean_property_nullable(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.ToString_boolean_property_nullable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.ToString_enum_contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.ToString_enum_contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.ToString_enum_property_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.ToString_enum_property_projection(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.ToString_guid_property_projection(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.ToString_guid_property_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.ToString_nullable_enum_contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.ToString_nullable_enum_contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.ToString_nullable_enum_property_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.ToString_nullable_enum_property_projection(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.ToString_string_property_projection(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.ToString_string_property_projection(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Trying_to_access_unmapped_property_in_projection(async: False) @@ -18002,6 +20034,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_Da 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_FromDateTime_compared_to_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPCGearsOfWarQueryJetTest.Where_DateOnly_FromDateTime_compared_to_property(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) @@ -19046,6 +21080,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.DateTime EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.DateTimeOffset_to_unix_time_seconds(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.Derived_reference_is_skipped_when_base_type(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Derived_reference_is_skipped_when_base_type(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Distinct_on_subquery_doesnt_get_lifted(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Distinct_on_subquery_doesnt_get_lifted(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Distinct_with_optional_navigation_is_translated_to_sql(async: False) @@ -19080,8 +21116,6 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Enum_fla EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Enum_flags_closure_typed_as_underlying_type_generates_correct_parameter_type(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Enum_matching_take_value_gets_different_type_mapping(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Enum_matching_take_value_gets_different_type_mapping(async: True) -EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Enum_ToString_is_client_eval(async: False) -EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Enum_ToString_is_client_eval(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Filter_on_subquery_projecting_one_value_type_from_empty_collection(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Filter_on_subquery_projecting_one_value_type_from_empty_collection(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Filter_with_complex_predicate_containing_subquery(async: False) @@ -19094,6 +21128,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Filtered EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Filtered_collection_projection_with_order_comparison_predicate_converted_to_join2(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Filtered_collection_projection_with_order_comparison_predicate_converted_to_join3(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Filtered_collection_projection_with_order_comparison_predicate_converted_to_join3(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Find_underlying_property_after_GroupJoin_DefaultIfEmpty(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Find_underlying_property_after_GroupJoin_DefaultIfEmpty(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.First_on_byte_array(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.First_on_byte_array(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.FirstOrDefault_navigation_access_entity_equality_in_where_predicate_apply_peneding_selector(async: False) @@ -19224,6 +21260,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_ EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_conditional_result(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_inheritance_and_coalesce_result(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_inheritance_and_coalesce_result(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_one_to_many_on_composite_key_then_orderby_key_properties(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_one_to_many_on_composite_key_then_orderby_key_properties(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_reference_on_derived_type_using_EF_Property(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_reference_on_derived_type_using_EF_Property(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_reference_on_derived_type_using_lambda_with_soft_cast(async: False) @@ -19276,6 +21314,12 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_ EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Include_with_projection_of_unmapped_property_still_gets_applied(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Join_entity_with_itself_grouped_by_key_followed_by_include_skip_take(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Join_entity_with_itself_grouped_by_key_followed_by_include_skip_take(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Join_include_coalesce_nested(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Join_include_coalesce_nested(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Join_include_coalesce_simple(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Join_include_coalesce_simple(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Join_include_conditional(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Join_include_conditional(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Join_inner_source_custom_projection_followed_by_filter(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Join_inner_source_custom_projection_followed_by_filter(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Join_navigation_translated_to_subquery_composite_key(async: False) @@ -19365,6 +21409,10 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Navigati EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Navigation_inside_interpolated_string_expanded(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Negated_bool_ternary_inside_anonymous_type_in_projection(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Negated_bool_ternary_inside_anonymous_type_in_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Nested_contains_with_enum(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Nested_contains_with_enum(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Non_string_concat_uses_appropriate_type_mapping(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Non_string_concat_uses_appropriate_type_mapping(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Non_unicode_parameter_is_used_for_non_unicode_column(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Non_unicode_parameter_is_used_for_non_unicode_column(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Non_unicode_string_literal_is_used_for_non_unicode_column_right(async: False) @@ -19505,6 +21553,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Projecti EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_and_use_it_in_order_by(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_into_element_init(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_into_element_init(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_into_member_access(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_into_member_access(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_into_member_assignment(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_into_member_assignment(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Projecting_property_converted_to_nullable_into_new_array(async: False) @@ -19727,6 +21777,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.ThenIncl EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.ThenInclude_collection_on_derived_after_derived_reference(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.ThenInclude_reference_on_derived_after_derived_collection(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.ThenInclude_reference_on_derived_after_derived_collection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Time_of_day_datetimeoffset(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Time_of_day_datetimeoffset(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.TimeSpan_Hours(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.TimeSpan_Hours(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.TimeSpan_Minutes(async: False) @@ -19737,8 +21789,16 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.ToString EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.ToString_boolean_property_non_nullable(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.ToString_boolean_property_nullable(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.ToString_boolean_property_nullable(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.ToString_enum_contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.ToString_enum_contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.ToString_enum_property_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.ToString_enum_property_projection(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.ToString_guid_property_projection(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.ToString_guid_property_projection(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.ToString_nullable_enum_contains(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.ToString_nullable_enum_contains(async: True) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.ToString_nullable_enum_property_projection(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.ToString_nullable_enum_property_projection(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.ToString_string_property_projection(async: False) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.ToString_string_property_projection(async: True) EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Trying_to_access_unmapped_property_in_projection(async: False) @@ -19805,6 +21865,8 @@ EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_Da 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_FromDateTime_compared_to_property(async: False) +EntityFrameworkCore.Jet.FunctionalTests.Query.TPTGearsOfWarQueryJetTest.Where_DateOnly_FromDateTime_compared_to_property(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) @@ -21616,6 +23678,8 @@ EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.UseTransaction_throws EntityFrameworkCore.Jet.FunctionalTests.TransactionJetTest.UseTransaction_will_not_dispose_external_transaction EntityFrameworkCore.Jet.FunctionalTests.TwoDatabasesJetTest.Can_query_from_one_connection_and_save_changes_to_another EntityFrameworkCore.Jet.FunctionalTests.TwoDatabasesJetTest.Can_query_from_one_connection_string_and_save_changes_to_another +EntityFrameworkCore.Jet.FunctionalTests.TwoDatabasesJetTest.Can_set_connection_string_in_interceptor(withConnectionString: True, withNullConnectionString: False) +EntityFrameworkCore.Jet.FunctionalTests.TwoDatabasesJetTest.Can_set_connection_string_in_interceptor(withConnectionString: True, withNullConnectionString: True) EntityFrameworkCore.Jet.FunctionalTests.Update.JetUpdateSqlGeneratorTest.AppendBatchHeader_should_append_SET_NOCOUNT_ON EntityFrameworkCore.Jet.FunctionalTests.Update.JetUpdateSqlGeneratorTest.AppendBulkInsertOperation_appends_insert_if_no_store_generated_columns_exist EntityFrameworkCore.Jet.FunctionalTests.Update.JetUpdateSqlGeneratorTest.AppendBulkInsertOperation_appends_insert_if_no_store_generated_columns_exist_default_values_only diff --git a/test/EFCore.Jet.FunctionalTests/JetComplianceTest.cs b/test/EFCore.Jet.FunctionalTests/JetComplianceTest.cs index cfcba029..8bb02726 100644 --- a/test/EFCore.Jet.FunctionalTests/JetComplianceTest.cs +++ b/test/EFCore.Jet.FunctionalTests/JetComplianceTest.cs @@ -22,7 +22,6 @@ public class JetComplianceTest : RelationalComplianceTestBase typeof(NonSharedPrimitiveCollectionsQueryRelationalTestBase), //No Json query support in Jet typeof(JsonQueryTestBase<>), - typeof(JsonQueryAdHocTestBase), typeof(JsonUpdateTestBase<>), //Too complex table structure for Jet/MS Access. Too many indexes on table. //Caused by having too many navs (foreign keys) on a single table. diff --git a/test/EFCore.Jet.FunctionalTests/JetConfigPatternsTest.cs b/test/EFCore.Jet.FunctionalTests/JetConfigPatternsTest.cs index 2811e1f7..236c0cf7 100644 --- a/test/EFCore.Jet.FunctionalTests/JetConfigPatternsTest.cs +++ b/test/EFCore.Jet.FunctionalTests/JetConfigPatternsTest.cs @@ -15,6 +15,7 @@ // ReSharper disable InconsistentNaming // ReSharper disable UnusedAutoPropertyAccessor.Local #pragma warning disable RCS1102 // Make class static. +#nullable disable namespace EntityFrameworkCore.Jet.FunctionalTests { public class JetConfigPatternsTest @@ -24,12 +25,10 @@ public class ImplicitServicesAndConfig [ConditionalFact] public async Task Can_query_with_implicit_services_and_OnConfiguring() { - using (JetTestStore.GetNorthwindStore()) + using (await JetTestStore.GetNorthwindStoreAsync()) { - using (var context = new NorthwindContext()) - { - Assert.Equal(91, await context.Customers.CountAsync()); - } + using var context = new NorthwindContext(); + Assert.Equal(91, await context.Customers.CountAsync()); } } @@ -55,26 +54,20 @@ public class ImplicitServicesExplicitConfig [ConditionalFact] public async Task Can_query_with_implicit_services_and_explicit_config() { - using (JetTestStore.GetNorthwindStore()) + using (await JetTestStore.GetNorthwindStoreAsync()) { - using (var context = new NorthwindContext( + await using var context = new NorthwindContext( new DbContextOptionsBuilder() .EnableServiceProviderCaching(false) - .UseJet(JetNorthwindTestStoreFactory.NorthwindConnectionString, TestEnvironment.DataAccessProviderFactory, b => b.ApplyConfiguration()) - .Options)) - { - Assert.Equal(91, await context.Customers.CountAsync()); - } + .UseJet(JetNorthwindTestStoreFactory.NorthwindConnectionString, + TestEnvironment.DataAccessProviderFactory, b => b.ApplyConfiguration()) + .Options); + Assert.Equal(91, await context.Customers.CountAsync()); } } - private class NorthwindContext : DbContext + private class NorthwindContext(DbContextOptions options) : DbContext(options) { - public NorthwindContext(DbContextOptions options) - : base(options) - { - } - public DbSet Customers { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) @@ -87,26 +80,17 @@ public class ExplicitServicesImplicitConfig [ConditionalFact] public async Task Can_query_with_explicit_services_and_OnConfiguring() { - using (JetTestStore.GetNorthwindStore()) - { - using (var context = new NorthwindContext( - new DbContextOptionsBuilder().UseInternalServiceProvider( - new ServiceCollection() - .AddEntityFrameworkJet() - .BuildServiceProvider()).Options)) - { - Assert.Equal(91, await context.Customers.CountAsync()); - } - } + using var async = await JetTestStore.GetNorthwindStoreAsync(); + using var context = new NorthwindContext( + new DbContextOptionsBuilder().UseInternalServiceProvider( + new ServiceCollection() + .AddEntityFrameworkJet() + .BuildServiceProvider()).Options); + Assert.Equal(91, await context.Customers.CountAsync()); } - private class NorthwindContext : DbContext + private class NorthwindContext(DbContextOptions options) : DbContext(options) { - public NorthwindContext(DbContextOptions options) - : base(options) - { - } - public DbSet Customers { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) @@ -123,28 +107,21 @@ public class ExplicitServicesAndConfig [ConditionalFact] public async Task Can_query_with_explicit_services_and_explicit_config() { - using (JetTestStore.GetNorthwindStore()) + using (await JetTestStore.GetNorthwindStoreAsync()) { - using (var context = new NorthwindContext( + using var context = new NorthwindContext( new DbContextOptionsBuilder() .UseJet(JetNorthwindTestStoreFactory.NorthwindConnectionString, TestEnvironment.DataAccessProviderFactory, b => b.ApplyConfiguration()) .UseInternalServiceProvider( new ServiceCollection() .AddEntityFrameworkJet() - .BuildServiceProvider()).Options)) - { - Assert.Equal(91, await context.Customers.CountAsync()); - } + .BuildServiceProvider()).Options); + Assert.Equal(91, await context.Customers.CountAsync()); } } - private class NorthwindContext : DbContext + private class NorthwindContext(DbContextOptions options) : DbContext(options) { - public NorthwindContext(DbContextOptions options) - : base(options) - { - } - public DbSet Customers { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) @@ -155,34 +132,27 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) public class ExplicitServicesAndNoConfig { [ConditionalFact] - public void Throws_on_attempt_to_use_SQL_Server_without_providing_connection_string() + public async Task Throws_on_attempt_to_use_SQL_Server_without_providing_connection_string() { - using (JetTestStore.GetNorthwindStore()) + using (await JetTestStore.GetNorthwindStoreAsync()) { Assert.Equal( CoreStrings.NoProviderConfigured, Assert.Throws( () => { - using (var context = new NorthwindContext( + using var context = new NorthwindContext( new DbContextOptionsBuilder().UseInternalServiceProvider( new ServiceCollection() .AddEntityFrameworkJet() - .BuildServiceProvider()).Options)) - { - Assert.Equal(91, context.Customers.Count()); - } + .BuildServiceProvider(validateScopes: true)).Options); + Assert.Equal(91, context.Customers.Count()); }).Message); } } - private class NorthwindContext : DbContext + private class NorthwindContext(DbContextOptions options) : DbContext(options) { - public NorthwindContext(DbContextOptions options) - : base(options) - { - } - public DbSet Customers { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) @@ -193,19 +163,17 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) public class NoServicesAndNoConfig { [ConditionalFact] - public void Throws_on_attempt_to_use_context_with_no_store() + public async Task Throws_on_attempt_to_use_context_with_no_store() { - using (JetTestStore.GetNorthwindStore()) + using (await JetTestStore.GetNorthwindStoreAsync()) { Assert.Equal( CoreStrings.NoProviderConfigured, Assert.Throws( () => { - using (var context = new NorthwindContext()) - { - Assert.Equal(91, context.Customers.Count()); - } + using var context = new NorthwindContext(); + Assert.Equal(91, context.Customers.Count()); }).Message); } } @@ -225,36 +193,29 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) public class ImplicitConfigButNoServices { [ConditionalFact] - public void Throws_on_attempt_to_use_store_with_no_store_services() + public async Task Throws_on_attempt_to_use_store_with_no_store_services() { var serviceCollection = new ServiceCollection(); new EntityFrameworkServicesBuilder(serviceCollection).TryAddCoreServices(); - var serviceProvider = serviceCollection.BuildServiceProvider(); + var serviceProvider = serviceCollection.BuildServiceProvider(validateScopes: true); - using (JetTestStore.GetNorthwindStore()) + using (await JetTestStore.GetNorthwindStoreAsync()) { Assert.Equal( CoreStrings.NoProviderConfigured, Assert.Throws( () => { - using (var context = new NorthwindContext( + using var context = new NorthwindContext( new DbContextOptionsBuilder() - .UseInternalServiceProvider(serviceProvider).Options)) - { - Assert.Equal(91, context.Customers.Count()); - } + .UseInternalServiceProvider(serviceProvider).Options); + Assert.Equal(91, context.Customers.Count()); }).Message); } } - private class NorthwindContext : DbContext + private class NorthwindContext(DbContextOptions options) : DbContext(options) { - public NorthwindContext(DbContextOptions options) - : base(options) - { - } - public DbSet Customers { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => @@ -275,9 +236,9 @@ public async Task Can_register_context_with_DI_container_and_have_it_injected() .AddTransient() .AddTransient() .AddSingleton(p => new DbContextOptionsBuilder().UseInternalServiceProvider(p).Options) - .BuildServiceProvider(); + .BuildServiceProvider(validateScopes: true); - using (JetTestStore.GetNorthwindStore()) + using (await JetTestStore.GetNorthwindStoreAsync()) { await serviceProvider.GetRequiredService().TestAsync(); } @@ -331,7 +292,7 @@ public async Task Can_register_context_and_configuration_with_DI_container_and_h .UseJet(JetNorthwindTestStoreFactory.NorthwindConnectionString, TestEnvironment.DataAccessProviderFactory, b => b.ApplyConfiguration()) .Options).BuildServiceProvider(); - using (JetTestStore.GetNorthwindStore()) + using (await JetTestStore.GetNorthwindStoreAsync()) { await serviceProvider.GetRequiredService().TestAsync(); } @@ -372,26 +333,19 @@ public class ConstructorArgsToBuilder [ConditionalFact] public async Task Can_pass_context_options_to_constructor_and_use_in_builder() { - using (JetTestStore.GetNorthwindStore()) + using (await JetTestStore.GetNorthwindStoreAsync()) { - using (var context = new NorthwindContext( + using var context = new NorthwindContext( new DbContextOptionsBuilder() .EnableServiceProviderCaching(false) .UseJet(JetNorthwindTestStoreFactory.NorthwindConnectionString, TestEnvironment.DataAccessProviderFactory, b => b.ApplyConfiguration()) - .Options)) - { - Assert.Equal(91, await context.Customers.CountAsync()); - } + .Options); + Assert.Equal(91, await context.Customers.CountAsync()); } } - private class NorthwindContext : DbContext + private class NorthwindContext(DbContextOptions options) : DbContext(options) { - public NorthwindContext(DbContextOptions options) - : base(options) - { - } - public DbSet Customers { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) @@ -404,30 +358,21 @@ public class ConstructorArgsToOnConfiguring [ConditionalFact] public async Task Can_pass_connection_string_to_constructor_and_use_in_OnConfiguring() { - using (JetTestStore.GetNorthwindStore()) + using (await JetTestStore.GetNorthwindStoreAsync()) { - using (var context = new NorthwindContext(JetNorthwindTestStoreFactory.NorthwindConnectionString)) - { - Assert.Equal(91, await context.Customers.CountAsync()); - } + using var context = new NorthwindContext(JetNorthwindTestStoreFactory.NorthwindConnectionString); + Assert.Equal(91, await context.Customers.CountAsync()); } } - private class NorthwindContext : DbContext + private class NorthwindContext(string connectionString) : DbContext { - private readonly string _connectionString; - - public NorthwindContext(string connectionString) - { - _connectionString = connectionString; - } - public DbSet Customers { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => optionsBuilder .EnableServiceProviderCaching(false) - .UseJet(_connectionString, TestEnvironment.DataAccessProviderFactory, b => b.ApplyConfiguration()); + .UseJet(connectionString, TestEnvironment.DataAccessProviderFactory, b => b.ApplyConfiguration()); protected override void OnModelCreating(ModelBuilder modelBuilder) => ConfigureModel(modelBuilder); @@ -439,49 +384,38 @@ public class NestedContext [ConditionalFact] public async Task Can_use_one_context_nested_inside_another_of_the_same_type() { - using (JetTestStore.GetNorthwindStore()) + using (await JetTestStore.GetNorthwindStoreAsync()) { var serviceProvider = new ServiceCollection() .AddEntityFrameworkJet() - .BuildServiceProvider(); - - using (var context1 = new NorthwindContext(serviceProvider)) - { - var customers1 = await context1.Customers.ToListAsync(); - Assert.Equal(91, customers1.Count); - Assert.Equal(91, context1.ChangeTracker.Entries().Count()); - - using (var context2 = new NorthwindContext(serviceProvider)) - { - Assert.Empty(context2.ChangeTracker.Entries()); - - var customers2 = await context2.Customers.ToListAsync(); - Assert.Equal(91, customers2.Count); - Assert.Equal(91, context2.ChangeTracker.Entries().Count()); - - Assert.Equal(customers1[0].CustomerID, customers2[0].CustomerID); - Assert.NotSame(customers1[0], customers2[0]); - } - } - } - } + .BuildServiceProvider(validateScopes: true); - private class NorthwindContext : DbContext - { - private readonly IServiceProvider _serviceProvider; + using var context1 = new NorthwindContext(serviceProvider); + var customers1 = await context1.Customers.ToListAsync(); + Assert.Equal(91, customers1.Count); + Assert.Equal(91, context1.ChangeTracker.Entries().Count()); - public NorthwindContext(IServiceProvider serviceProvider) - { - _serviceProvider = serviceProvider; + using var context2 = new NorthwindContext(serviceProvider); + Assert.Empty(context2.ChangeTracker.Entries()); + + var customers2 = await context2.Customers.ToListAsync(); + Assert.Equal(91, customers2.Count); + Assert.Equal(91, context2.ChangeTracker.Entries().Count()); + + Assert.Equal(customers1[0].CustomerID, customers2[0].CustomerID); + Assert.NotSame(customers1[0], customers2[0]); } + } + private class NorthwindContext(IServiceProvider serviceProvider) : DbContext + { public DbSet Customers { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) => ConfigureModel(modelBuilder); protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => optionsBuilder - .UseInternalServiceProvider(_serviceProvider) + .UseInternalServiceProvider(serviceProvider) .UseJet(JetNorthwindTestStoreFactory.NorthwindConnectionString, TestEnvironment.DataAccessProviderFactory, b => b.ApplyConfiguration()); } } diff --git a/test/EFCore.Jet.FunctionalTests/JetDatabaseCreatorTest.cs b/test/EFCore.Jet.FunctionalTests/JetDatabaseCreatorTest.cs index 2d5158f0..406d017d 100644 --- a/test/EFCore.Jet.FunctionalTests/JetDatabaseCreatorTest.cs +++ b/test/EFCore.Jet.FunctionalTests/JetDatabaseCreatorTest.cs @@ -21,6 +21,7 @@ using Xunit; using JetDatabaseCreator = EntityFrameworkCore.Jet.Storage.Internal.JetDatabaseCreator; +#nullable disable // ReSharper disable InconsistentNaming namespace EntityFrameworkCore.Jet.FunctionalTests { @@ -101,31 +102,28 @@ public Task Returns_true_when_database_with_filename_exists(bool async, bool amb private static async Task Returns_true_when_database_exists_test(bool async, bool ambientTransaction, bool useCanConnect) { - using (var testDatabase = JetTestStore.CreateInitialized("ExistingBloggingFile")) - { - using (var context = new BloggingContext(testDatabase)) - { - var creator = GetDatabaseCreator(context); + using var testDatabase = + await JetTestStore.CreateInitializedAsync("ExistingBloggingFile"); + using var context = new BloggingContext(testDatabase); + var creator = GetDatabaseCreator(context); - await context.Database.CreateExecutionStrategy().ExecuteAsync( - async () => + await context.Database.CreateExecutionStrategy().ExecuteAsync( + async () => + { + using (CreateTransactionScope(ambientTransaction)) + { + if (useCanConnect) { - using (CreateTransactionScope(ambientTransaction)) - { - if (useCanConnect) - { - Assert.True(async ? await creator.CanConnectAsync() : creator.CanConnect()); - } - else - { - Assert.True(async ? await creator.ExistsAsync() : creator.Exists()); - } - } - }); + Assert.True(async ? await creator.CanConnectAsync() : creator.CanConnect()); + } + else + { + Assert.True(async ? await creator.ExistsAsync() : creator.Exists()); + } + } + }); - Assert.Equal(ConnectionState.Closed, context.Database.GetDbConnection().State); - } - } + Assert.Equal(ConnectionState.Closed, context.Database.GetDbConnection().State); } } @@ -154,42 +152,38 @@ public Task Deletes_database_with_filename(bool async, bool open, bool ambientTr private static async Task Delete_database_test(bool async, bool open, bool ambientTransaction) { - using (var testDatabase = JetTestStore.CreateInitialized("EnsureDeleteBloggingFile")) + using var testDatabase = await JetTestStore.CreateInitializedAsync("EnsureDeleteBloggingFile"); + if (!open) { - if (!open) - { - testDatabase.CloseConnection(); - } + testDatabase.CloseConnection(); + } - using (var context = new BloggingContext(testDatabase)) - { - var creator = GetDatabaseCreator(context); + using var context = new BloggingContext(testDatabase); + var creator = GetDatabaseCreator(context); - Assert.True(async ? await creator.ExistsAsync() : creator.Exists()); + Assert.True(async ? await creator.ExistsAsync() : creator.Exists()); - await GetExecutionStrategy(testDatabase).ExecuteAsync( - async () => + await GetExecutionStrategy(testDatabase).ExecuteAsync( + async () => + { + using (CreateTransactionScope(ambientTransaction)) + { + if (async) { - using (CreateTransactionScope(ambientTransaction)) - { - if (async) - { - Assert.True(await context.Database.EnsureDeletedAsync()); - } - else - { - Assert.True(context.Database.EnsureDeleted()); - } - } - }); + Assert.True(await context.Database.EnsureDeletedAsync()); + } + else + { + Assert.True(context.Database.EnsureDeleted()); + } + } + }); - Assert.Equal(ConnectionState.Closed, context.Database.GetDbConnection().State); + Assert.Equal(ConnectionState.Closed, context.Database.GetDbConnection().State); - Assert.False(async ? await creator.ExistsAsync() : creator.Exists()); + Assert.False(async ? await creator.ExistsAsync() : creator.Exists()); - Assert.Equal(ConnectionState.Closed, context.Database.GetDbConnection().State); - } - } + Assert.Equal(ConnectionState.Closed, context.Database.GetDbConnection().State); } [ConditionalTheory] @@ -210,30 +204,26 @@ public Task Noop_when_database_with_filename_does_not_exist(bool async) private static async Task Noop_when_database_does_not_exist_test(bool async) { - using (var testDatabase = JetTestStore.Create("NonExisting")) - { - using (var context = new BloggingContext(testDatabase)) - { - var creator = GetDatabaseCreator(context); + using var testDatabase = JetTestStore.Create("NonExisting"); + using var context = new BloggingContext(testDatabase); + var creator = GetDatabaseCreator(context); - Assert.False(async ? await creator.ExistsAsync() : creator.Exists()); + Assert.False(async ? await creator.ExistsAsync() : creator.Exists()); - if (async) - { - Assert.False(await creator.EnsureDeletedAsync()); - } - else - { - Assert.False(creator.EnsureDeleted()); - } + if (async) + { + Assert.False(await creator.EnsureDeletedAsync()); + } + else + { + Assert.False(creator.EnsureDeleted()); + } - Assert.Equal(ConnectionState.Closed, context.Database.GetDbConnection().State); + Assert.Equal(ConnectionState.Closed, context.Database.GetDbConnection().State); - Assert.False(async ? await creator.ExistsAsync() : creator.Exists()); + Assert.False(async ? await creator.ExistsAsync() : creator.Exists()); - Assert.Equal(ConnectionState.Closed, context.Database.GetDbConnection().State); - } - } + Assert.Equal(ConnectionState.Closed, context.Database.GetDbConnection().State); } } @@ -286,53 +276,51 @@ private static async Task Creates_physical_database_and_schema_test( (bool CreateDatabase, bool Async, bool ambientTransaction) options) { var (createDatabase, async, ambientTransaction) = options; - using (var testDatabase = JetTestStore.Create("EnsureCreatedTestFile")) + using var testDatabase = JetTestStore.Create("EnsureCreatedTestFile"); + using var context = new BloggingContext(testDatabase); + if (createDatabase) { - using (var context = new BloggingContext(testDatabase)) - { - if (createDatabase) - { - testDatabase.Initialize(null, (Func)null); - } - else - { - testDatabase.DeleteDatabase(); - } + await testDatabase.InitializeAsync(null, (Func)null); + } + else + { + testDatabase.DeleteDatabase(); + } - var creator = GetDatabaseCreator(context); + var creator = GetDatabaseCreator(context); - Assert.Equal(ConnectionState.Closed, context.Database.GetDbConnection().State); + Assert.Equal(ConnectionState.Closed, context.Database.GetDbConnection().State); - using (CreateTransactionScope(ambientTransaction)) - { - if (async) - { - Assert.True(await creator.EnsureCreatedAsync()); - } - else - { - Assert.True(creator.EnsureCreated()); - } - } + using (CreateTransactionScope(ambientTransaction)) + { + if (async) + { + Assert.True(await creator.EnsureCreatedAsync()); + } + else + { + Assert.True(creator.EnsureCreated()); + } + } - Assert.Equal(ConnectionState.Closed, context.Database.GetDbConnection().State); + Assert.Equal(ConnectionState.Closed, context.Database.GetDbConnection().State); - if (testDatabase.ConnectionState != ConnectionState.Open) - { - await testDatabase.OpenConnectionAsync(); - } + if (testDatabase.ConnectionState != ConnectionState.Open) + { + await testDatabase.OpenConnectionAsync(); + } - var tables = testDatabase.Query( - "SELECT * FROM `INFORMATION_SCHEMA.TABLES` WHERE TABLE_TYPE = 'BASE TABLE'").ToList(); - Assert.Single(tables); - Assert.Equal("Blogs", tables.Single()); + var tables = testDatabase.Query( + "SELECT * FROM `INFORMATION_SCHEMA.TABLES` WHERE TABLE_TYPE = 'BASE TABLE'").ToList(); + Assert.Single(tables); + Assert.Equal("Blogs", tables.Single()); - /*var dcolumns = testDatabase.ExecuteScalar<>()( + /*var dcolumns = testDatabase.ExecuteScalar<>()( "SELECT * FROM `INFORMATION_SCHEMA.COLUMNS` WHERE TABLE_NAME = 'Blogs' ORDER BY TABLE_NAME, COLUMN_NAME") .ToArray();*/ - //Assert.Single(dcolumns); - //TABLE_NAME + '.' + COLUMN_NAME + ' (' + DATA_TYPE + ')' - /*dcolumns.Select( f => f.) + //Assert.Single(dcolumns); + //TABLE_NAME + '.' + COLUMN_NAME + ' (' + DATA_TYPE + ')' + /*dcolumns.Select( f => f.) Assert.Equal(14, columns.Length); Assert.Equal( @@ -354,8 +342,6 @@ private static async Task Creates_physical_database_and_schema_test( "Blogs.WayRound (bigint)" }, columns);*/ - } - } } [ConditionalTheory] @@ -376,24 +362,20 @@ public Task Noop_when_database_with_filename_exists_and_has_schema(bool async) private static async Task Noop_when_database_exists_and_has_schema_test(bool async) { - using (var testDatabase = JetTestStore.CreateInitialized("InitializedBloggingFile")) - { - using (var context = new BloggingContext(testDatabase)) - { - context.Database.EnsureCreatedResiliently(); - - if (async) - { - Assert.False(await context.Database.EnsureCreatedResilientlyAsync()); - } - else - { - Assert.False(context.Database.EnsureCreatedResiliently()); - } + using var testDatabase = await JetTestStore.CreateInitializedAsync("InitializedBloggingFile"); + using var context = new BloggingContext(testDatabase); + context.Database.EnsureCreatedResiliently(); - Assert.Equal(ConnectionState.Closed, context.Database.GetDbConnection().State); - } + if (async) + { + Assert.False(await context.Database.EnsureCreatedResilientlyAsync()); + } + else + { + Assert.False(context.Database.EnsureCreatedResiliently()); } + + Assert.Equal(ConnectionState.Closed, context.Database.GetDbConnection().State); } } @@ -405,20 +387,18 @@ public class JetDatabaseCreatorHasTablesTest : JetDatabaseCreatorTest [InlineData(false)] public async Task Throws_when_database_does_not_exist(bool async) { - using (var testDatabase = JetTestStore.GetOrCreate("NonExisting")) - { - var databaseCreator = GetDatabaseCreator(testDatabase); - await databaseCreator.ExecutionStrategy.ExecuteAsync( - databaseCreator, - async creator => - { - var errorNumber = async - ? (await Assert.ThrowsAnyAsync(() => creator.HasTablesAsyncBase())).ErrorCode - : Assert.ThrowsAny(() => creator.HasTablesBase()).ErrorCode; + using var testDatabase = JetTestStore.GetOrCreate("NonExisting"); + var databaseCreator = GetDatabaseCreator(testDatabase); + await databaseCreator.ExecutionStrategy.ExecuteAsync( + databaseCreator, + async creator => + { + var errorNumber = async + ? (await Assert.ThrowsAnyAsync(() => creator.HasTablesAsyncBase())).ErrorCode + : Assert.ThrowsAny(() => creator.HasTablesBase()).ErrorCode; - Assert.NotEqual(errorNumber, 0); - }); - } + Assert.NotEqual(errorNumber, 0); + }); } [ConditionalTheory] @@ -428,19 +408,17 @@ await databaseCreator.ExecutionStrategy.ExecuteAsync( [InlineData(false, false)] public async Task Returns_false_when_database_exists_but_has_no_tables(bool async, bool ambientTransaction) { - using (var testDatabase = JetTestStore.GetOrCreateInitialized("Empty")) - { - var creator = GetDatabaseCreator(testDatabase); + using var testDatabase = await JetTestStore.GetOrCreateInitializedAsync("Empty"); + var creator = GetDatabaseCreator(testDatabase); - await GetExecutionStrategy(testDatabase).ExecuteAsync( - async () => + await GetExecutionStrategy(testDatabase).ExecuteAsync( + async () => + { + using (CreateTransactionScope(ambientTransaction)) { - using (CreateTransactionScope(ambientTransaction)) - { - Assert.False(async ? await creator.HasTablesAsyncBase() : creator.HasTablesBase()); - } - }); - } + Assert.False(async ? await creator.HasTablesAsyncBase() : creator.HasTablesBase()); + } + }); } [ConditionalTheory] @@ -450,20 +428,18 @@ await GetExecutionStrategy(testDatabase).ExecuteAsync( [InlineData(false, false)] public async Task Returns_true_when_database_exists_and_has_any_tables(bool async, bool ambientTransaction) { - using (var testDatabase = JetTestStore.GetOrCreate("ExistingTables") - .InitializeJet(null, t => new BloggingContext(t), null)) - { - var creator = GetDatabaseCreator(testDatabase); + using var testDatabase = await JetTestStore.GetOrCreate("ExistingTables") + .InitializeJetAsync(null, t => new BloggingContext(t), null); + var creator = GetDatabaseCreator(testDatabase); - await GetExecutionStrategy(testDatabase).ExecuteAsync( - async () => + await GetExecutionStrategy(testDatabase).ExecuteAsync( + async () => + { + using (CreateTransactionScope(ambientTransaction)) { - using (CreateTransactionScope(ambientTransaction)) - { - Assert.True(async ? await creator.HasTablesAsyncBase() : creator.HasTablesBase()); - } - }); - } + Assert.True(async ? await creator.HasTablesAsyncBase() : creator.HasTablesBase()); + } + }); } } @@ -475,28 +451,26 @@ public class JetDatabaseCreatorDeleteTest : JetDatabaseCreatorTest [InlineData(false, false)] public static async Task Deletes_database(bool async, bool ambientTransaction) { - using (var testDatabase = JetTestStore.CreateInitialized("DeleteBlogging")) - { - testDatabase.CloseConnection(); + using var testDatabase = await JetTestStore.CreateInitializedAsync("DeleteBlogging"); + testDatabase.CloseConnection(); - var creator = GetDatabaseCreator(testDatabase); + var creator = GetDatabaseCreator(testDatabase); - Assert.True(async ? await creator.ExistsAsync() : creator.Exists()); + Assert.True(async ? await creator.ExistsAsync() : creator.Exists()); - using (CreateTransactionScope(ambientTransaction)) + using (CreateTransactionScope(ambientTransaction)) + { + if (async) { - if (async) - { - await creator.DeleteAsync(); - } - else - { - creator.Delete(); - } + await creator.DeleteAsync(); + } + else + { + creator.Delete(); } - - Assert.False(async ? await creator.ExistsAsync() : creator.Exists()); } + + Assert.False(async ? await creator.ExistsAsync() : creator.Exists()); } [ConditionalTheory] @@ -504,18 +478,16 @@ public static async Task Deletes_database(bool async, bool ambientTransaction) [InlineData(false)] public async Task Throws_when_database_does_not_exist(bool async) { - using (var testDatabase = JetTestStore.GetOrCreate("NonExistingBlogging")) - { - var creator = GetDatabaseCreator(testDatabase); + using var testDatabase = JetTestStore.GetOrCreate("NonExistingBlogging"); + var creator = GetDatabaseCreator(testDatabase); - if (async) - { - await Assert.ThrowsAnyAsync(() => creator.DeleteAsync()); - } - else - { - Assert.ThrowsAny(() => creator.Delete()); - } + if (async) + { + await Assert.ThrowsAnyAsync(() => creator.DeleteAsync()); + } + else + { + Assert.ThrowsAny(() => creator.Delete()); } } } @@ -528,53 +500,49 @@ public class JetDatabaseCreatorCreateTablesTest : JetDatabaseCreatorTest [InlineData(false, false)] public async Task Creates_schema_in_existing_database_test(bool async, bool ambientTransaction) { - using (var testDatabase = JetTestStore.GetOrCreateInitialized("ExistingBlogging" + (async ? "Async" : ""))) + using var testDatabase = await JetTestStore.GetOrCreateInitializedAsync("ExistingBlogging" + (async ? "Async" : "")); + using var context = new BloggingContext(testDatabase); + var creator = GetDatabaseCreator(context); + + using (CreateTransactionScope(ambientTransaction)) { - using (var context = new BloggingContext(testDatabase)) + if (async) { - var creator = GetDatabaseCreator(context); - - using (CreateTransactionScope(ambientTransaction)) - { - if (async) - { - await creator.CreateTablesAsync(); - } - else - { - creator.CreateTables(); - } - } - - if (testDatabase.ConnectionState != ConnectionState.Open) - { - await testDatabase.OpenConnectionAsync(); - } - - var tables = (await testDatabase.QueryAsync( - "SELECT * FROM `INFORMATION_SCHEMA.TABLES` WHERE TABLE_TYPE = 'BASE TABLE'")).ToList(); - Assert.Single(tables); - Assert.Equal("Blogs", tables.Single()); - - var columns = (await testDatabase.QueryAsync( - "SELECT * FROM `INFORMATION_SCHEMA.COLUMNS` WHERE TABLE_NAME = 'Blogs'")).ToList(); - Assert.Equal(14, columns.Count); - Assert.Contains(columns, c => c == "Blogs.Key1"); - Assert.Contains(columns, c => c == "Blogs.Key2"); - Assert.Contains(columns, c => c == "Blogs.Cheese"); - Assert.Contains(columns, c => c == "Blogs.ErMilan"); - Assert.Contains(columns, c => c == "Blogs.George"); - Assert.Contains(columns, c => c == "Blogs.TheGu"); - Assert.Contains(columns, c => c == "Blogs.NotFigTime"); - Assert.Contains(columns, c => c == "Blogs.ToEat"); - Assert.Contains(columns, c => c == "Blogs.OrNothing"); - Assert.Contains(columns, c => c == "Blogs.Fuse"); - Assert.Contains(columns, c => c == "Blogs.WayRound"); - Assert.Contains(columns, c => c == "Blogs.On"); - Assert.Contains(columns, c => c == "Blogs.AndChew"); - Assert.Contains(columns, c => c == "Blogs.AndRow"); + await creator.CreateTablesAsync(); + } + else + { + creator.CreateTables(); } } + + if (testDatabase.ConnectionState != ConnectionState.Open) + { + await testDatabase.OpenConnectionAsync(); + } + + var tables = (await testDatabase.QueryAsync( + "SELECT * FROM `INFORMATION_SCHEMA.TABLES` WHERE TABLE_TYPE = 'BASE TABLE'")).ToList(); + Assert.Single(tables); + Assert.Equal("Blogs", tables.Single()); + + var columns = (await testDatabase.QueryAsync( + "SELECT * FROM `INFORMATION_SCHEMA.COLUMNS` WHERE TABLE_NAME = 'Blogs'")).ToList(); + Assert.Equal(14, columns.Count); + Assert.Contains(columns, c => c == "Blogs.Key1"); + Assert.Contains(columns, c => c == "Blogs.Key2"); + Assert.Contains(columns, c => c == "Blogs.Cheese"); + Assert.Contains(columns, c => c == "Blogs.ErMilan"); + Assert.Contains(columns, c => c == "Blogs.George"); + Assert.Contains(columns, c => c == "Blogs.TheGu"); + Assert.Contains(columns, c => c == "Blogs.NotFigTime"); + Assert.Contains(columns, c => c == "Blogs.ToEat"); + Assert.Contains(columns, c => c == "Blogs.OrNothing"); + Assert.Contains(columns, c => c == "Blogs.Fuse"); + Assert.Contains(columns, c => c == "Blogs.WayRound"); + Assert.Contains(columns, c => c == "Blogs.On"); + Assert.Contains(columns, c => c == "Blogs.AndChew"); + Assert.Contains(columns, c => c == "Blogs.AndRow"); } [ConditionalTheory] @@ -662,39 +630,37 @@ public class JetDatabaseCreatorCreateTest : JetDatabaseCreatorTest [InlineData(false, true)] public async Task Creates_physical_database_but_not_tables(bool async, bool ambientTransaction) { - using (var testDatabase = JetTestStore.GetOrCreate("CreateTest")) - { - var creator = GetDatabaseCreator(testDatabase); + using var testDatabase = JetTestStore.GetOrCreate("CreateTest"); + var creator = GetDatabaseCreator(testDatabase); - creator.EnsureDeleted(); + creator.EnsureDeleted(); - await GetExecutionStrategy(testDatabase).ExecuteAsync( - async () => + await GetExecutionStrategy(testDatabase).ExecuteAsync( + async () => + { + using (CreateTransactionScope(ambientTransaction)) { - using (CreateTransactionScope(ambientTransaction)) + if (async) { - if (async) - { - await creator.CreateAsync(); - } - else - { - creator.Create(); - } + await creator.CreateAsync(); } - }); + else + { + creator.Create(); + } + } + }); - Assert.True(creator.Exists()); + Assert.True(creator.Exists()); - if (testDatabase.ConnectionState != ConnectionState.Open) - { - await testDatabase.OpenConnectionAsync(); - } - - Assert.Empty( - (await testDatabase.QueryAsync( - "SELECT * FROM `INFORMATION_SCHEMA.TABLES` WHERE TABLE_TYPE = 'BASE TABLE'"))); + if (testDatabase.ConnectionState != ConnectionState.Open) + { + await testDatabase.OpenConnectionAsync(); } + + Assert.Empty( + (await testDatabase.QueryAsync( + "SELECT * FROM `INFORMATION_SCHEMA.TABLES` WHERE TABLE_TYPE = 'BASE TABLE'"))); } [ConditionalTheory] @@ -702,15 +668,13 @@ await GetExecutionStrategy(testDatabase).ExecuteAsync( [InlineData(false)] public async Task Throws_if_database_already_exists(bool async) { - using (var testDatabase = JetTestStore.GetOrCreateInitialized("ExistingBlogging")) - { - var creator = GetDatabaseCreator(testDatabase); + using var testDatabase = await JetTestStore.GetOrCreateInitializedAsync("ExistingBlogging"); + var creator = GetDatabaseCreator(testDatabase); - var ex = async - ? await Assert.ThrowsAsync(() => creator.CreateAsync()) - : Assert.Throws(() => creator.Create()); - //todo:check message - } + var ex = async + ? await Assert.ThrowsAsync(() => creator.CreateAsync()) + : Assert.Throws(() => creator.Create()); + //todo:check message } } @@ -734,13 +698,9 @@ protected static IExecutionStrategy GetExecutionStrategy(JetTestStore testStore) => new BloggingContext(testStore).GetService().Create(); // ReSharper disable once ClassNeverInstantiated.Local - private class TestJetExecutionStrategyFactory : JetExecutionStrategyFactory + private class TestJetExecutionStrategyFactory(ExecutionStrategyDependencies dependencies) + : JetExecutionStrategyFactory(dependencies) { - public TestJetExecutionStrategyFactory(ExecutionStrategyDependencies dependencies) - : base(dependencies) - { - } - protected override IExecutionStrategy CreateDefaultStrategy(ExecutionStrategyDependencies dependencies) { return new NonRetryingExecutionStrategy(dependencies); @@ -756,24 +716,17 @@ private static IServiceProvider CreateServiceProvider() .BuildServiceProvider(); } - protected class BloggingContext : DbContext + protected class BloggingContext(string connectionString) : DbContext { - private readonly string _connectionString; - public BloggingContext(JetTestStore testStore) : this(testStore.ConnectionString) { } - public BloggingContext(string connectionString) - { - _connectionString = connectionString; - } - protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder - .UseJet(_connectionString, TestEnvironment.DataAccessProviderFactory, b => b.ApplyConfiguration()) + .UseJet(connectionString, TestEnvironment.DataAccessProviderFactory, b => b.ApplyConfiguration()) .UseInternalServiceProvider(CreateServiceProvider()); } @@ -809,27 +762,20 @@ public class Blog public byte[] AndRow { get; set; } } - public class TestDatabaseCreator : JetDatabaseCreator + public class TestDatabaseCreator( + RelationalDatabaseCreatorDependencies dependencies, + IJetRelationalConnection connection, + IRawSqlCommandBuilder rawSqlCommandBuilder) + : JetDatabaseCreator(dependencies, connection, rawSqlCommandBuilder) { - public TestDatabaseCreator( - RelationalDatabaseCreatorDependencies dependencies, - IJetRelationalConnection connection, - IRawSqlCommandBuilder rawSqlCommandBuilder) - : base(dependencies, connection, rawSqlCommandBuilder) - { - } - public bool HasTablesBase() - { - return HasTables(); - } + => HasTables(); public Task HasTablesAsyncBase(CancellationToken cancellationToken = default) - { - return HasTablesAsync(cancellationToken); - } + => HasTablesAsync(cancellationToken); - public IExecutionStrategy ExecutionStrategy => Dependencies.ExecutionStrategy; + public IExecutionStrategy ExecutionStrategy + => Dependencies.ExecutionStrategy; } } } diff --git a/test/EFCore.Jet.FunctionalTests/JetEndToEndTest.cs b/test/EFCore.Jet.FunctionalTests/JetEndToEndTest.cs index fc1e9cbb..bb980c5a 100644 --- a/test/EFCore.Jet.FunctionalTests/JetEndToEndTest.cs +++ b/test/EFCore.Jet.FunctionalTests/JetEndToEndTest.cs @@ -3,7 +3,9 @@ using System; using System.Collections.Generic; using System.ComponentModel; +using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; +using System.IO.Pipelines; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; @@ -12,12 +14,15 @@ using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.TestUtilities; using Xunit; +using static Microsoft.EntityFrameworkCore.Scaffolding.CompiledModelRelationalTestBase; // ReSharper disable StringStartsWithIsCultureSpecific // ReSharper disable VirtualMemberCallInConstructor // ReSharper disable ClassNeverInstantiated.Local // ReSharper disable UnusedAutoPropertyAccessor.Local // ReSharper disable InconsistentNaming + +#nullable disable namespace EntityFrameworkCore.Jet.FunctionalTests { public class JetEndToEndTest : IClassFixture @@ -33,105 +38,98 @@ public JetEndToEndTest(JetFixture fixture) } [ConditionalFact] - public void Can_use_decimal_and_byte_as_identity_columns() + public async Task Can_use_decimal_and_byte_as_identity_columns() { - using (var testDatabase = JetTestStore.CreateInitialized(DatabaseName)) - { - var nownNum1 = new NownNum { Id = 77.0m, TheWalrus = "Crying" }; - var nownNum2 = new NownNum { Id = 78.0m, TheWalrus = "Walrus" }; + using var testDatabase = await JetTestStore.CreateInitializedAsync(DatabaseName); + var nownNum1 = new NownNum { Id = 77.0m, TheWalrus = "Crying" }; + var nownNum2 = new NownNum { Id = 78.0m, TheWalrus = "Walrus" }; - var numNum1 = new NumNum { TheWalrus = "I" }; - var numNum2 = new NumNum { TheWalrus = "Am" }; + var numNum1 = new NumNum { TheWalrus = "I" }; + var numNum2 = new NumNum { TheWalrus = "Am" }; - var anNum1 = new AnNum { TheWalrus = "Goo goo" }; - var anNum2 = new AnNum { TheWalrus = "g'joob" }; + var anNum1 = new AnNum { TheWalrus = "Goo goo" }; + var anNum2 = new AnNum { TheWalrus = "g'joob" }; - var adNum1 = new AdNum { TheWalrus = "Eggman" }; - var adNum2 = new AdNum { TheWalrus = "Eggmen" }; + var adNum1 = new AdNum { TheWalrus = "Eggman" }; + var adNum2 = new AdNum { TheWalrus = "Eggmen" }; - var byteNownNum1 = new ByteNownNum { Id = 77, Lucy = "Tangerine" }; - var byteNownNum2 = new ByteNownNum { Id = 78, Lucy = "Trees" }; + var byteNownNum1 = new ByteNownNum { Id = 77, Lucy = "Tangerine" }; + var byteNownNum2 = new ByteNownNum { Id = 78, Lucy = "Trees" }; - var byteNum1 = new ByteNum { Lucy = "Marmalade" }; - var byteNum2 = new ByteNum { Lucy = "Skies" }; + var byteNum1 = new ByteNum { Lucy = "Marmalade" }; + var byteNum2 = new ByteNum { Lucy = "Skies" }; - var byteAnNum1 = new ByteAnNum { Lucy = "Cellophane" }; - var byteAnNum2 = new ByteAnNum { Lucy = "Flowers" }; + var byteAnNum1 = new ByteAnNum { Lucy = "Cellophane" }; + var byteAnNum2 = new ByteAnNum { Lucy = "Flowers" }; - var byteAdNum1 = new ByteAdNum { Lucy = "Kaleidoscope" }; - var byteAdNum2 = new ByteAdNum { Lucy = "Eyes" }; + var byteAdNum1 = new ByteAdNum { Lucy = "Kaleidoscope" }; + var byteAdNum2 = new ByteAdNum { Lucy = "Eyes" }; - decimal[] preSaveValues; - byte[] preSaveByteValues; - - var options = Fixture.CreateOptions(testDatabase); - using (var context = new NumNumContext(options)) - { - context.Database.EnsureCreatedResiliently(); + decimal[] preSaveValues; + byte[] preSaveByteValues; - context.AddRange( - nownNum1, nownNum2, numNum1, numNum2, adNum1, adNum2, anNum1, anNum2, - byteNownNum1, byteNownNum2, byteNum1, byteNum2, byteAdNum1, byteAdNum2, byteAnNum1, byteAnNum2); + var options = Fixture.CreateOptions(testDatabase); + using (var context = new NumNumContext(options)) + { + context.Database.EnsureCreatedResiliently(); - preSaveValues = new[] { numNum1.Id, numNum2.Id, adNum1.Id, adNum2.Id, anNum1.Id, anNum2.Id }; + context.AddRange( + nownNum1, nownNum2, numNum1, numNum2, adNum1, adNum2, anNum1, anNum2, + byteNownNum1, byteNownNum2, byteNum1, byteNum2, byteAdNum1, byteAdNum2, byteAnNum1, byteAnNum2); - preSaveByteValues = new[] { byteNum1.Id, byteNum2.Id, byteAdNum1.Id, byteAdNum2.Id, byteAnNum1.Id, byteAnNum2.Id }; + preSaveValues = [numNum1.Id, numNum2.Id, adNum1.Id, adNum2.Id, anNum1.Id, anNum2.Id]; - context.SaveChanges(); - } + preSaveByteValues = [byteNum1.Id, byteNum2.Id, byteAdNum1.Id, byteAdNum2.Id, byteAnNum1.Id, byteAnNum2.Id]; - using (var context = new NumNumContext(options)) - { - Assert.Equal(nownNum1.Id, context.NownNums.Single(e => e.TheWalrus == "Crying").Id); - Assert.Equal(nownNum2.Id, context.NownNums.Single(e => e.TheWalrus == "Walrus").Id); - Assert.Equal(77.0m, nownNum1.Id); - Assert.Equal(78.0m, nownNum2.Id); - - Assert.Equal(numNum1.Id, context.NumNums.Single(e => e.TheWalrus == "I").Id); - Assert.Equal(numNum2.Id, context.NumNums.Single(e => e.TheWalrus == "Am").Id); - Assert.NotEqual(numNum1.Id, preSaveValues[0]); - Assert.NotEqual(numNum2.Id, preSaveValues[1]); - - Assert.Equal(anNum1.Id, context.AnNums.Single(e => e.TheWalrus == "Goo goo").Id); - Assert.Equal(anNum2.Id, context.AnNums.Single(e => e.TheWalrus == "g'joob").Id); - Assert.NotEqual(adNum1.Id, preSaveValues[2]); - Assert.NotEqual(adNum2.Id, preSaveValues[3]); - - Assert.Equal(adNum1.Id, context.AdNums.Single(e => e.TheWalrus == "Eggman").Id); - Assert.Equal(adNum2.Id, context.AdNums.Single(e => e.TheWalrus == "Eggmen").Id); - Assert.NotEqual(anNum1.Id, preSaveValues[4]); - Assert.NotEqual(anNum2.Id, preSaveValues[5]); - - Assert.Equal(byteNownNum1.Id, context.ByteNownNums.Single(e => e.Lucy == "Tangerine").Id); - Assert.Equal(byteNownNum2.Id, context.ByteNownNums.Single(e => e.Lucy == "Trees").Id); - Assert.Equal(77, byteNownNum1.Id); - Assert.Equal(78, byteNownNum2.Id); - - Assert.Equal(byteNum1.Id, context.ByteNums.Single(e => e.Lucy == "Marmalade").Id); - Assert.Equal(byteNum2.Id, context.ByteNums.Single(e => e.Lucy == "Skies").Id); - Assert.NotEqual(byteNum1.Id, preSaveByteValues[0]); - Assert.NotEqual(byteNum2.Id, preSaveByteValues[1]); - - Assert.Equal(byteAnNum1.Id, context.ByteAnNums.Single(e => e.Lucy == "Cellophane").Id); - Assert.Equal(byteAnNum2.Id, context.ByteAnNums.Single(e => e.Lucy == "Flowers").Id); - Assert.NotEqual(byteAdNum1.Id, preSaveByteValues[2]); - Assert.NotEqual(byteAdNum2.Id, preSaveByteValues[3]); - - Assert.Equal(byteAdNum1.Id, context.ByteAdNums.Single(e => e.Lucy == "Kaleidoscope").Id); - Assert.Equal(byteAdNum2.Id, context.ByteAdNums.Single(e => e.Lucy == "Eyes").Id); - Assert.NotEqual(byteAnNum1.Id, preSaveByteValues[4]); - Assert.NotEqual(byteAnNum2.Id, preSaveByteValues[5]); - } + context.SaveChanges(); } - } - private class NumNumContext : DbContext - { - public NumNumContext(DbContextOptions options) - : base(options) + using (var context = new NumNumContext(options)) { + Assert.Equal(nownNum1.Id, context.NownNums.Single(e => e.TheWalrus == "Crying").Id); + Assert.Equal(nownNum2.Id, context.NownNums.Single(e => e.TheWalrus == "Walrus").Id); + Assert.Equal(77.0m, nownNum1.Id); + Assert.Equal(78.0m, nownNum2.Id); + + Assert.Equal(numNum1.Id, context.NumNums.Single(e => e.TheWalrus == "I").Id); + Assert.Equal(numNum2.Id, context.NumNums.Single(e => e.TheWalrus == "Am").Id); + Assert.NotEqual(numNum1.Id, preSaveValues[0]); + Assert.NotEqual(numNum2.Id, preSaveValues[1]); + + Assert.Equal(anNum1.Id, context.AnNums.Single(e => e.TheWalrus == "Goo goo").Id); + Assert.Equal(anNum2.Id, context.AnNums.Single(e => e.TheWalrus == "g'joob").Id); + Assert.NotEqual(adNum1.Id, preSaveValues[2]); + Assert.NotEqual(adNum2.Id, preSaveValues[3]); + + Assert.Equal(adNum1.Id, context.AdNums.Single(e => e.TheWalrus == "Eggman").Id); + Assert.Equal(adNum2.Id, context.AdNums.Single(e => e.TheWalrus == "Eggmen").Id); + Assert.NotEqual(anNum1.Id, preSaveValues[4]); + Assert.NotEqual(anNum2.Id, preSaveValues[5]); + + Assert.Equal(byteNownNum1.Id, context.ByteNownNums.Single(e => e.Lucy == "Tangerine").Id); + Assert.Equal(byteNownNum2.Id, context.ByteNownNums.Single(e => e.Lucy == "Trees").Id); + Assert.Equal(77, byteNownNum1.Id); + Assert.Equal(78, byteNownNum2.Id); + + Assert.Equal(byteNum1.Id, context.ByteNums.Single(e => e.Lucy == "Marmalade").Id); + Assert.Equal(byteNum2.Id, context.ByteNums.Single(e => e.Lucy == "Skies").Id); + Assert.NotEqual(byteNum1.Id, preSaveByteValues[0]); + Assert.NotEqual(byteNum2.Id, preSaveByteValues[1]); + + Assert.Equal(byteAnNum1.Id, context.ByteAnNums.Single(e => e.Lucy == "Cellophane").Id); + Assert.Equal(byteAnNum2.Id, context.ByteAnNums.Single(e => e.Lucy == "Flowers").Id); + Assert.NotEqual(byteAdNum1.Id, preSaveByteValues[2]); + Assert.NotEqual(byteAdNum2.Id, preSaveByteValues[3]); + + Assert.Equal(byteAdNum1.Id, context.ByteAdNums.Single(e => e.Lucy == "Kaleidoscope").Id); + Assert.Equal(byteAdNum2.Id, context.ByteAdNums.Single(e => e.Lucy == "Eyes").Id); + Assert.NotEqual(byteAnNum1.Id, preSaveByteValues[4]); + Assert.NotEqual(byteAnNum2.Id, preSaveByteValues[5]); } + } + private class NumNumContext(DbContextOptions options) : DbContext(options) + { public DbSet NownNums { get; set; } public DbSet NumNums { get; set; } public DbSet AnNums { get; set; } @@ -226,84 +224,219 @@ private class ByteAdNum public string Lucy { get; set; } } + [ConditionalFact] // Issue #29931 + public async Task Can_use_SqlQuery_when_context_has_DbFunction() + { + using var testDatabase = await JetTestStore.CreateInitializedAsync(DatabaseName); + var options = Fixture.CreateOptions(testDatabase); + using (var context = new DbFunctionContext(options)) + { + var result = context.Database + .SqlQueryRaw("SELECT Name from sys.databases") + .OrderBy(d => d.Name) + .ToList(); + } + } + + private class DbFunctionContext(DbContextOptions options) : DbContext(options) + { + [DbFunction("tvp", "dbo")] + public IQueryable Tvp(int? storeid) + => FromExpression(() => Tvp(storeid)); + + protected override void OnModelCreating(ModelBuilder modelBuilder) + => modelBuilder.Entity().HasNoKey(); + } + + private class TvpResult + { + public int Id { get; set; } + + [Required] + public string Name { get; set; } + + [Column(TypeName = "decimal(18,2)")] + public decimal Total { get; set; } + } + + private class RawResult + { + public string Name { get; set; } + } + [ConditionalFact] - public void Can_use_string_enum_or_byte_array_as_key() + public async Task Can_use_string_enum_or_byte_array_as_key() { - using (var testDatabase = JetTestStore.CreateInitialized(DatabaseName)) + using var testDatabase = await JetTestStore.CreateInitializedAsync(DatabaseName); + var sNum1 = new SNum { TheWalrus = "I" }; + var sNum2 = new SNum { TheWalrus = "Am" }; + + var enNum1 = new EnNum { TheWalrus = "Goo goo", Id = ENum.BNum }; + var enNum2 = new EnNum { TheWalrus = "g'joob", Id = ENum.CNum }; + + var bNum1 = new BNum { TheWalrus = "Eggman" }; + var bNum2 = new BNum { TheWalrus = "Eggmen" }; + + var options = Fixture.CreateOptions(testDatabase); + using (var context = new ENumContext(options)) { - var sNum1 = new SNum { TheWalrus = "I" }; - var sNum2 = new SNum { TheWalrus = "Am" }; + context.Database.EnsureCreatedResiliently(); - var enNum1 = new EnNum { TheWalrus = "Goo goo", Id = ENum.BNum }; - var enNum2 = new EnNum { TheWalrus = "g'joob", Id = ENum.CNum }; + context.AddRange(sNum1, sNum2, enNum1, enNum2, bNum1, bNum2); - var bNum1 = new BNum { TheWalrus = "Eggman" }; - var bNum2 = new BNum { TheWalrus = "Eggmen" }; + context.SaveChanges(); + } - var options = Fixture.CreateOptions(testDatabase); - using (var context = new ENumContext(options)) - { - context.Database.EnsureCreatedResiliently(); + using (var context = new ENumContext(options)) + { + Assert.Equal(sNum1.Id, context.SNums.Single(e => e.TheWalrus == "I").Id); + Assert.Equal(sNum2.Id, context.SNums.Single(e => e.TheWalrus == "Am").Id); - context.AddRange(sNum1, sNum2, enNum1, enNum2, bNum1, bNum2); + Assert.Equal(enNum1.Id, context.EnNums.Single(e => e.TheWalrus == "Goo goo").Id); + Assert.Equal(enNum2.Id, context.EnNums.Single(e => e.TheWalrus == "g'joob").Id); - context.SaveChanges(); - } + Assert.Equal(bNum1.Id, context.BNums.Single(e => e.TheWalrus == "Eggman").Id); + Assert.Equal(bNum2.Id, context.BNums.Single(e => e.TheWalrus == "Eggmen").Id); + } + } - using (var context = new ENumContext(options)) - { - Assert.Equal(sNum1.Id, context.SNums.Single(e => e.TheWalrus == "I").Id); - Assert.Equal(sNum2.Id, context.SNums.Single(e => e.TheWalrus == "Am").Id); + [ConditionalFact] + public async Task Can_remove_multiple_byte_array_as_key() + { + using var testDatabase = await JetTestStore.CreateInitializedAsync(DatabaseName); + var bNum1 = new BNum { TheWalrus = "Eggman" }; + var bNum2 = new BNum { TheWalrus = "Eggmen" }; - Assert.Equal(enNum1.Id, context.EnNums.Single(e => e.TheWalrus == "Goo goo").Id); - Assert.Equal(enNum2.Id, context.EnNums.Single(e => e.TheWalrus == "g'joob").Id); + var options = Fixture.CreateOptions(testDatabase); + using (var context = new ENumContext(options)) + { + context.Database.EnsureCreatedResiliently(); - Assert.Equal(bNum1.Id, context.BNums.Single(e => e.TheWalrus == "Eggman").Id); - Assert.Equal(bNum2.Id, context.BNums.Single(e => e.TheWalrus == "Eggmen").Id); - } + context.AddRange(bNum1, bNum2); + + context.SaveChanges(); + } + + using (var context = new ENumContext(options)) + { + Assert.Equal(bNum1.Id, context.BNums.Single(e => e.TheWalrus == "Eggman").Id); + Assert.Equal(bNum2.Id, context.BNums.Single(e => e.TheWalrus == "Eggmen").Id); + + context.RemoveRange(context.BNums); + + context.SaveChanges(); } } + private class ENumContext(DbContextOptions options) : DbContext(options) + { + public DbSet SNums { get; set; } + public DbSet EnNums { get; set; } + public DbSet BNums { get; set; } + } + [ConditionalFact] - public void Can_remove_multiple_byte_array_as_key() + public async Task Can_add_table_splitting_dependent_after_principal() { - using (var testDatabase = JetTestStore.CreateInitialized(DatabaseName)) + using var testDatabase = await JetTestStore.CreateInitializedAsync(DatabaseName); + + var options = Fixture.CreateOptions(testDatabase); + EvaluationAction evaluationAction = null; + using (var context = new ProjectContext(options)) { - var bNum1 = new BNum { TheWalrus = "Eggman" }; - var bNum2 = new BNum { TheWalrus = "Eggmen" }; + context.Database.EnsureCreatedResiliently(); - var options = Fixture.CreateOptions(testDatabase); - using (var context = new ENumContext(options)) + evaluationAction = new EvaluationAction { - context.Database.EnsureCreatedResiliently(); - - context.AddRange(bNum1, bNum2); + Id = Guid.NewGuid().ToString(), + CreateId = "1", + UpdateId = "1" + }; + context.EvaluationActions.Add(evaluationAction); + context.SaveChanges(); + } - context.SaveChanges(); - } + using (var context = new ProjectContext(options)) + { + context.Database.EnsureCreatedResiliently(); - using (var context = new ENumContext(options)) + var projectAction = new ProjectAction { - Assert.Equal(bNum1.Id, context.BNums.Single(e => e.TheWalrus == "Eggman").Id); - Assert.Equal(bNum2.Id, context.BNums.Single(e => e.TheWalrus == "Eggmen").Id); + Id = evaluationAction.Id, + CreateId = "1", + UpdateId = "1", + Name = "123123123123" + }; + context.ProjectActions.Add(projectAction); + context.SaveChanges(); + } - context.RemoveRange(context.BNums); + using (var context = new ProjectContext(options)) + { + Assert.NotNull(context.ProjectActions.Single()); + Assert.NotNull(context.EvaluationActions.Single()); + } + } - context.SaveChanges(); - } + [ConditionalFact] + public async Task Throws_when_adding_table_splitting_dependent_without_principal() + { + using var testDatabase = await JetTestStore.CreateInitializedAsync(DatabaseName); + + var options = Fixture.CreateOptions(testDatabase); + using (var context = new ProjectContext(options)) + { + context.Database.EnsureCreatedResiliently(); + + var projectAction = new ProjectAction + { + Id = Guid.NewGuid().ToString(), + CreateId = "1", + UpdateId = "1", + Name = "123123123123" + }; + context.ProjectActions.Add(projectAction); + + Assert.Throws(() => context.SaveChanges()); } } - private class ENumContext : DbContext + private class ProjectContext(DbContextOptions options) : DbContext(options) { - public ENumContext(DbContextOptions options) - : base(options) + public DbSet EvaluationActions { get; set; } + public DbSet ProjectActions { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) { + modelBuilder.Entity() + .ToTable("projectaction") + .HasOne(o => o.EvaluationAction).WithOne(o => o.ProjectAction) + .HasForeignKey(o => o.Id); + + modelBuilder.Entity().Property(p => p.Name).IsRequired(); + + modelBuilder.Entity() + .ToTable("projectaction"); } + } - public DbSet SNums { get; set; } - public DbSet EnNums { get; set; } - public DbSet BNums { get; set; } + private class ProjectAction + { + public string Id { get; set; } + public string CreateId { get; set; } + public string UpdateId { get; set; } + public string Name { get; set; } + + public EvaluationAction EvaluationAction { get; set; } + } + + private class EvaluationAction + { + public string Id { get; set; } + public string CreateId { get; set; } + public string UpdateId { get; set; } + + public ProjectAction ProjectAction { get; set; } } private class SNum @@ -338,385 +471,867 @@ private class BNum } [ConditionalFact] - public void Can_run_linq_query_on_entity_set() + public async Task Can_add_and_remove_entities_with_keys_of_different_type() { - using (var testStore = JetTestStore.GetNorthwindStore()) + using var testDatabase = await JetTestStore.CreateInitializedAsync(DatabaseName); + + var options = Fixture.CreateOptions(testDatabase); + using (var context = new CompositeKeysDbContext(options)) { - using (var db = new NorthwindContext(Fixture.CreateOptions(testStore))) - { - var results = db.Customers - .Where(c => c.CompanyName.StartsWith("A")) - .OrderByDescending(c => c.CustomerID) - .ToList(); - - Assert.Equal(4, results.Count); - Assert.Equal("AROUT", results[0].CustomerID); - Assert.Equal("ANTON", results[1].CustomerID); - Assert.Equal("ANATR", results[2].CustomerID); - Assert.Equal("ALFKI", results[3].CustomerID); - - Assert.Equal("(171) 555-6750", results[0].Fax); - Assert.Null(results[1].Fax); - Assert.Equal("(5) 555-3745", results[2].Fax); - Assert.Equal("030-0076545", results[3].Fax); - } + context.Database.EnsureCreatedResiliently(); + var first = new Int32CompositeKeys { Id1 = 1, Id2 = 2 }; + + await context.AddAsync(first); + + var second = new Int64CompositeKeys { Id1 = 1, Id2 = 2 }; + + await context.AddAsync(second); + await context.SaveChangesAsync(); + } + + using (var context = new CompositeKeysDbContext(options)) + { + var first = context.Set().Single(); + context.Remove(first); + + var second = context.Set().Single(); + context.Remove(second); + + await context.SaveChangesAsync(); } } - [ConditionalFact] - public void Can_run_linq_query_on_entity_set_with_value_buffer_reader() + private class CompositeKeysDbContext(DbContextOptions options) : DbContext(options) { - using (var testStore = JetTestStore.GetNorthwindStore()) + protected override void OnModelCreating(ModelBuilder modelBuilder) { - using (var db = new NorthwindContext(Fixture.CreateOptions(testStore))) - { - var results = db.Customers - .Where(c => c.CompanyName.StartsWith("A")) - .OrderByDescending(c => c.CustomerID) - .ToList(); - - Assert.Equal(4, results.Count); - Assert.Equal("AROUT", results[0].CustomerID); - Assert.Equal("ANTON", results[1].CustomerID); - Assert.Equal("ANATR", results[2].CustomerID); - Assert.Equal("ALFKI", results[3].CustomerID); - - Assert.Equal("(171) 555-6750", results[0].Fax); - Assert.Null(results[1].Fax); - Assert.Equal("(5) 555-3745", results[2].Fax); - Assert.Equal("030-0076545", results[3].Fax); - } + modelBuilder.Entity().HasKey(i => new { i.Id1, i.Id2 }); + modelBuilder.Entity().HasKey(l => new { l.Id1, l.Id2 }); } } + private class Int32CompositeKeys + { + public int Id1 { get; set; } + public int Id2 { get; set; } + } + + private class Int64CompositeKeys + { + public long Id1 { get; set; } + public long Id2 { get; set; } + } + [ConditionalFact] - public void Can_enumerate_entity_set() + public async Task Can_insert_non_owner_principal_for_owned() { - using (var testStore = JetTestStore.GetNorthwindStore()) + using var testDatabase = await JetTestStore.CreateInitializedAsync(DatabaseName); + + var options = Fixture.CreateOptions(testDatabase); + using (var context = new FileContext(options)) { - using (var db = new NorthwindContext(Fixture.CreateOptions(testStore))) - { - var results = new List(); - foreach (var item in db.Customers) + context.Database.EnsureCreatedResiliently(); + + var category = new Category(); + context.Categories.Add(category); + + context.SaveChanges(); + + var fileMetadata = new FileMetadata(); + context.FileMetadata.Add(fileMetadata); + category.Picture = new FileSource { FileId = fileMetadata.Id }; + + context.SaveChanges(); + } + } + + private class FileContext(DbContextOptions options) : DbContext(options) + { + public DbSet FileMetadata { get; set; } + public DbSet Categories { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder.Entity( + builder => { - results.Add(item); - } + builder.OwnsOne( + x => x.Picture, fileSource => + { + fileSource.HasOne().WithOne().HasForeignKey(x => x.FileId); + }); + }); + } + } - Assert.Equal(91, results.Count); - Assert.Equal("ALFKI", results[0].CustomerID); - Assert.Equal("Alfreds Futterkiste", results[0].CompanyName); - } + private sealed class FileMetadata + { + public Guid Id { get; set; } + } + + private sealed class Category + { + public Guid Id { get; set; } + + public FileSource Picture { get; set; } + } + + private sealed class FileSource + { + public Guid? FileId { get; set; } + public bool Deleted { get; set; } + } + + [ConditionalFact] + public async Task Can_insert_TPT_dependents_with_identity() + { + using var testDatabase = await JetTestStore.CreateInitializedAsync(DatabaseName); + + var options = Fixture.CreateOptions(testDatabase); + using (var context = new CarContext(options)) + { + context.Database.EnsureCreatedResiliently(); + + var ferrari = new Ferrari { Special = new Car() }; + await context.AddAsync(ferrari); + + await context.SaveChangesAsync(); + + Assert.NotNull(ferrari.Special); + } + } + + private class CarContext(DbContextOptions options) : DbContext(options) + { + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity().ToTable("Car"); + modelBuilder.Entity().ToTable("Ferrari"); + } + } + + private class Car + { + public int Id { get; set; } + } + + private class Ferrari : Car + { + public Car Special { get; set; } + } + + [ConditionalFact] + public async Task Can_run_linq_query_on_entity_set() + { + using var testStore = await JetTestStore.GetNorthwindStoreAsync(); + using var db = new NorthwindContext(Fixture.CreateOptions(testStore)); + var results = db.Customers + .Where(c => c.CompanyName.StartsWith("A")) + .OrderByDescending(c => c.CustomerID) + .ToList(); + + Assert.Equal(4, results.Count); + Assert.Equal("AROUT", results[0].CustomerID); + Assert.Equal("ANTON", results[1].CustomerID); + Assert.Equal("ANATR", results[2].CustomerID); + Assert.Equal("ALFKI", results[3].CustomerID); + + Assert.Equal("(171) 555-6750", results[0].Fax); + Assert.Null(results[1].Fax); + Assert.Equal("(5) 555-3745", results[2].Fax); + Assert.Equal("030-0076545", results[3].Fax); + } + + [ConditionalFact] + public async Task Can_run_linq_query_on_entity_set_with_value_buffer_reader() + { + using var testStore = await JetTestStore.GetNorthwindStoreAsync(); + using var db = new NorthwindContext(Fixture.CreateOptions(testStore)); + var results = db.Customers + .Where(c => c.CompanyName.StartsWith("A")) + .OrderByDescending(c => c.CustomerID) + .ToList(); + + Assert.Equal(4, results.Count); + Assert.Equal("AROUT", results[0].CustomerID); + Assert.Equal("ANTON", results[1].CustomerID); + Assert.Equal("ANATR", results[2].CustomerID); + Assert.Equal("ALFKI", results[3].CustomerID); + + Assert.Equal("(171) 555-6750", results[0].Fax); + Assert.Null(results[1].Fax); + Assert.Equal("(5) 555-3745", results[2].Fax); + Assert.Equal("030-0076545", results[3].Fax); + } + + [ConditionalFact] + public async Task Can_enumerate_entity_set() + { + using var testStore = await JetTestStore.GetNorthwindStoreAsync(); + using var db = new NorthwindContext(Fixture.CreateOptions(testStore)); + var results = new List(); + foreach (var item in db.Customers) + { + results.Add(item); } + + Assert.Equal(91, results.Count); + Assert.Equal("ALFKI", results[0].CustomerID); + Assert.Equal("Alfreds Futterkiste", results[0].CompanyName); } [ConditionalFact] public async Task Can_save_changes() { - using (var testDatabase = JetTestStore.CreateInitialized(DatabaseName)) + using var testDatabase = await JetTestStore.CreateInitializedAsync(DatabaseName); + var options = Fixture.CreateOptions(testDatabase); + using (var db = new BloggingContext(options)) { - var options = Fixture.CreateOptions(testDatabase); - using (var db = new BloggingContext(options)) - { - await CreateBlogDatabaseAsync(db); - } + await CreateBlogDatabaseAsync(db); + } - Fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.Clear(); - using (var db = new BloggingContext(options)) - { - var toUpdate = db.Blogs.Single(b => b.Name == "Blog1"); - toUpdate.Name = "Blog is Updated"; - var updatedId = toUpdate.Id; - var toDelete = db.Blogs.Single(b => b.Name == "Blog2"); - toDelete.Name = "Blog to delete"; - var deletedId = toDelete.Id; - - db.Entry(toUpdate).State = EntityState.Modified; - db.Entry(toDelete).State = EntityState.Deleted; - - var toAdd = db.Add( - new Blog - { - Name = "Blog to Insert", - George = true, - TheGu = new Guid("0456AEF1-B7FC-47AA-8102-975D6BA3A9BF"), - NotFigTime = new DateTime(1973, 9, 3, 0, 10, 33, 777), - ToEat = 64, - OrNothing = 0.123456789, - Fuse = 777, - WayRound = 9876543210, - Away = 0.12345f, - AndChew = new byte[16] - }).Entity; + using (var db = new BloggingContext(options)) + { + var toUpdate = db.Blogs.Single(b => b.Name == "Blog1"); + toUpdate.Name = "Blog is Updated"; + var updatedId = toUpdate.Id; + var toDelete = db.Blogs.Single(b => b.Name == "Blog2"); + toDelete.Name = "Blog to delete"; + var deletedId = toDelete.Id; + + db.Entry(toUpdate).State = EntityState.Modified; + db.Entry(toDelete).State = EntityState.Deleted; + + var toAdd = db.Add( + new Blog + { + Name = "Blog to Insert", + George = true, + TheGu = new Guid("0456AEF1-B7FC-47AA-8102-975D6BA3A9BF"), + NotFigTime = new DateTime(1973, 9, 3, 0, 10, 33, 777), + ToEat = 64, + OrNothing = 0.123456789, + Fuse = 777, + WayRound = 9876543210, + Away = 0.12345f, + AndChew = new byte[16] + }).Entity; - await db.SaveChangesAsync(); + await db.SaveChangesAsync(); - var addedId = toAdd.Id; - Assert.NotEqual(0, addedId); + var addedId = toAdd.Id; + Assert.NotEqual(0, addedId); - Assert.Equal(EntityState.Unchanged, db.Entry(toUpdate).State); - Assert.Equal(EntityState.Unchanged, db.Entry(toAdd).State); - Assert.DoesNotContain(toDelete, db.ChangeTracker.Entries().Select(e => e.Entity)); + Assert.Equal(EntityState.Unchanged, db.Entry(toUpdate).State); + Assert.Equal(EntityState.Unchanged, db.Entry(toAdd).State); + Assert.DoesNotContain(toDelete, db.ChangeTracker.Entries().Select(e => e.Entity)); - Assert.Equal(5, Fixture.TestSqlLoggerFactory.SqlStatements.Count); - Assert.Contains("SELECT", Fixture.TestSqlLoggerFactory.SqlStatements[0]); - Assert.Contains("SELECT", Fixture.TestSqlLoggerFactory.SqlStatements[1]); - Assert.Contains("@p0='" + deletedId, Fixture.TestSqlLoggerFactory.SqlStatements[2]); - Assert.Contains("DELETE", Fixture.TestSqlLoggerFactory.SqlStatements[2]); - Assert.Contains("UPDATE", Fixture.TestSqlLoggerFactory.SqlStatements[3]); - Assert.Contains("INSERT", Fixture.TestSqlLoggerFactory.SqlStatements[4]); + Assert.Equal(5, Fixture.TestSqlLoggerFactory.SqlStatements.Count); + Assert.Contains("SELECT", Fixture.TestSqlLoggerFactory.SqlStatements[0]); + Assert.Contains("SELECT", Fixture.TestSqlLoggerFactory.SqlStatements[1]); + Assert.Contains("@p0='" + deletedId, Fixture.TestSqlLoggerFactory.SqlStatements[2]); + Assert.Contains("DELETE", Fixture.TestSqlLoggerFactory.SqlStatements[2]); + Assert.Contains("UPDATE", Fixture.TestSqlLoggerFactory.SqlStatements[3]); + Assert.Contains("INSERT", Fixture.TestSqlLoggerFactory.SqlStatements[4]); - var rows = await testDatabase.ExecuteScalarAsync( - $"SELECT Count(*) FROM `Blog` WHERE Id = {updatedId} AND Name = 'Blog is Updated'"); + var rows = await testDatabase.ExecuteScalarAsync( + $"SELECT Count(*) FROM `Blog` WHERE Id = {updatedId} AND Name = 'Blog is Updated'"); - Assert.Equal(1, rows); + Assert.Equal(1, rows); - rows = await testDatabase.ExecuteScalarAsync( - $"SELECT Count(*) FROM `Blog` WHERE Id = {deletedId}"); + rows = await testDatabase.ExecuteScalarAsync( + $"SELECT Count(*) FROM `Blog` WHERE Id = {deletedId}"); - Assert.Equal(0, rows); + Assert.Equal(0, rows); - rows = await testDatabase.ExecuteScalarAsync( - $"SELECT Count(*) FROM `Blog` WHERE Id = {addedId} AND Name = 'Blog to Insert'"); + rows = await testDatabase.ExecuteScalarAsync( + $"SELECT Count(*) FROM `Blog` WHERE Id = {addedId} AND Name = 'Blog to Insert'"); - Assert.Equal(1, rows); - } + Assert.Equal(1, rows); } } [ConditionalFact] public async Task Can_save_changes_in_tracked_entities() { - using (var testDatabase = JetTestStore.CreateInitialized(DatabaseName)) + using var testDatabase = await JetTestStore.CreateInitializedAsync(DatabaseName); + int updatedId; + int deletedId; + int addedId; + var options = Fixture.CreateOptions(testDatabase); + using (var db = new BloggingContext(options)) { - int updatedId; - int deletedId; - int addedId; - var options = Fixture.CreateOptions(testDatabase); - using (var db = new BloggingContext(options)) - { - var blogs = await CreateBlogDatabaseAsync(db); + var blogs = await CreateBlogDatabaseAsync(db); - var toAdd = db.Blogs.Add( - new Blog - { - Name = "Blog to Insert", - George = true, - TheGu = new Guid("0456AEF1-B7FC-47AA-8102-975D6BA3A9BF"), - NotFigTime = new DateTime(1973, 9, 3, 0, 10, 33, 777), - ToEat = 64, - OrNothing = 0.123456789, - Fuse = 777, - WayRound = 9876543210, - Away = 0.12345f, - AndChew = new byte[16] - }).Entity; - db.Entry(toAdd).State = EntityState.Detached; - - var toUpdate = blogs[0]; - toUpdate.Name = "Blog is Updated"; - updatedId = toUpdate.Id; - var toDelete = blogs[1]; - toDelete.Name = "Blog to delete"; - deletedId = toDelete.Id; - - db.Remove(toDelete); - db.Entry(toAdd).State = EntityState.Added; - - await db.SaveChangesAsync(); - - addedId = toAdd.Id; - Assert.NotEqual(0, addedId); - - Assert.Equal(EntityState.Unchanged, db.Entry(toUpdate).State); - Assert.Equal(EntityState.Unchanged, db.Entry(toAdd).State); - Assert.DoesNotContain(toDelete, db.ChangeTracker.Entries().Select(e => e.Entity)); - } + var toAdd = db.Blogs.Add( + new Blog + { + Name = "Blog to Insert", + George = true, + TheGu = new Guid("0456AEF1-B7FC-47AA-8102-975D6BA3A9BF"), + NotFigTime = new DateTime(1973, 9, 3, 0, 10, 33, 777), + ToEat = 64, + OrNothing = 0.123456789, + Fuse = 777, + WayRound = 9876543210, + Away = 0.12345f, + AndChew = new byte[16] + }).Entity; + db.Entry(toAdd).State = EntityState.Detached; + + var toUpdate = blogs[0]; + toUpdate.Name = "Blog is Updated"; + updatedId = toUpdate.Id; + var toDelete = blogs[1]; + toDelete.Name = "Blog to delete"; + deletedId = toDelete.Id; + + db.Remove(toDelete); + db.Entry(toAdd).State = EntityState.Added; + + await db.SaveChangesAsync(); + + addedId = toAdd.Id; + Assert.NotEqual(0, addedId); + + Assert.Equal(EntityState.Unchanged, db.Entry(toUpdate).State); + Assert.Equal(EntityState.Unchanged, db.Entry(toAdd).State); + Assert.DoesNotContain(toDelete, db.ChangeTracker.Entries().Select(e => e.Entity)); + } - using (var db = new BloggingContext(options)) - { - var toUpdate = db.Blogs.Single(b => b.Id == updatedId); - Assert.Equal("Blog is Updated", toUpdate.Name); - Assert.Equal(0, db.Blogs.Count(b => b.Id == deletedId)); - Assert.Equal("Blog to Insert", db.Blogs.Single(b => b.Id == addedId).Name); - } + using (var db = new BloggingContext(options)) + { + var toUpdate = db.Blogs.Single(b => b.Id == updatedId); + Assert.Equal("Blog is Updated", toUpdate.Name); + Assert.Equal(0, db.Blogs.Count(b => b.Id == deletedId)); + Assert.Equal("Blog to Insert", db.Blogs.Single(b => b.Id == addedId).Name); + } + } + + [ConditionalFact] + public async Task Can_track_an_entity_with_more_than_10_properties() + { + using var testDatabase = await JetTestStore.CreateInitializedAsync(DatabaseName); + var options = Fixture.CreateOptions(testDatabase); + using (var context = new GameDbContext(options)) + { + context.Database.EnsureCreatedResiliently(); + + context.Characters.Add( + new PlayerCharacter( + new Level { Game = new Game() })); + + context.SaveChanges(); + } + + using (var context = new GameDbContext(options)) + { + var character = context.Characters + .Include(c => c.Level.Game) + .OrderBy(c => c.Id) + .First(); + + Assert.NotNull(character.Game); + Assert.NotNull(character.Level); + Assert.NotNull(character.Level.Game); } } [ConditionalFact] - public void Can_track_an_entity_with_more_than_10_properties() + public async Task Can_replace_identifying_FK_entity_with_many_to_many() { - using (var testDatabase = JetTestStore.CreateInitialized(DatabaseName)) + using var testDatabase = await JetTestStore.CreateInitializedAsync(DatabaseName); + var options = Fixture.CreateOptions(testDatabase); + + using (var context = new SomeDbContext(options)) + { + context.Database.EnsureCreatedResiliently(); + + context.Add(new EntityA { EntityB = new EntityB { EntitiesC = { new EntityC() }, } }); + + context.SaveChanges(); + } + + var expectedCId = 0; + using (var context = new SomeDbContext(options)) + { + var entityA = context.EntitiesA.Include(x => x.EntityB).ThenInclude(x => x.EntitiesC).OrderBy(x => x.Id).First(); + + entityA.EntityB = new EntityB { EntitiesC = { new EntityC() } }; + + context.SaveChanges(); + + expectedCId = entityA.EntityB.EntitiesC.Single().Id; + } + + using (var context = new SomeDbContext(options)) + { + var entityA = context.EntitiesA.Include(x => x.EntityB).ThenInclude(x => x.EntitiesC).OrderBy(x => x.Id).First(); + + Assert.Equal(expectedCId, entityA.EntityB.EntitiesC.Single().Id); + } + } + + [ConditionalTheory] + [MemberData( + nameof(DataGenerator.GetCombinations), + new object[] { 0, 1, 2, 3, 4, 7 }, + 2, + MemberType = typeof(DataGenerator))] + public async Task Can_insert_entities_with_generated_PKs(int studentCount, int courseCount) + { + var students = new Student[] + { + new() + { + FirstMidName = "Carson", + LastName = "Alexander", + EnrollmentDate = DateTime.Parse("2019-09-01") + }, + new() { - var options = Fixture.CreateOptions(testDatabase); - using (var context = new GameDbContext(options)) + FirstMidName = "Meredith", + LastName = "Alonso", + EnrollmentDate = DateTime.Parse("2017-09-01") + }, + new() + { + FirstMidName = "Arturo", + LastName = "Anand", + EnrollmentDate = DateTime.Parse("2018-09-01") + }, + new() + { + FirstMidName = "Gytis", + LastName = "Barzdukas", + EnrollmentDate = DateTime.Parse("2017-09-01") + }, + new() + { + FirstMidName = "Yan", + LastName = "Li", + EnrollmentDate = DateTime.Parse("2017-09-01") + }, + new() + { + FirstMidName = "Peggy", + LastName = "Justice", + EnrollmentDate = DateTime.Parse("2016-09-01") + }, + new() + { + FirstMidName = "Laura", + LastName = "Norman", + EnrollmentDate = DateTime.Parse("2018-09-01") + }, + new() + { + FirstMidName = "Nino", + LastName = "Olivetto", + EnrollmentDate = DateTime.Parse("2019-09-01") + } + }; + + var courses = new Course[] + { + new() { Title = "Chemistry", Credits = 3 }, + new() { Title = "Microeconomics", Credits = 3 }, + new() { Title = "Macroeconomics", Credits = 3 }, + new() { Title = "Calculus", Credits = 4 }, + new() { Title = "Trigonometry", Credits = 4 }, + new() { Title = "Composition", Credits = 3 }, + new() { Title = "Literature", Credits = 4 } + }; + + using var testDatabase = await JetTestStore.CreateInitializedAsync(DatabaseName); + var options = Fixture.CreateOptions(testDatabase); + + var nextCourse = 0; + using (var context = new UniversityContext(options)) + { + context.Database.EnsureCreatedResiliently(); + for (var i = 0; i < studentCount; i++) { - context.Database.EnsureCreatedResiliently(); + if (courseCount > 1) + { + students[i].Courses.Add(courses[nextCourse++]); + if (nextCourse >= courseCount) + { + nextCourse = 0; + } - context.Characters.Add( - new PlayerCharacter( - new Level { Game = new Game() })); + students[i].Courses.Add(courses[nextCourse++]); + if (nextCourse >= courseCount) + { + nextCourse = 0; + } + } - context.SaveChanges(); + context.Students.Add(students[i]); } - using (var context = new GameDbContext(options)) + for (var i = 0; i < courseCount; i++) { - var character = context.Characters - .Include(c => c.Level.Game) - .OrderBy(c => c.Id) - .First(); - - Assert.NotNull(character.Game); - Assert.NotNull(character.Level); - Assert.NotNull(character.Level.Game); + context.Courses.Add(courses[i]); } + + Assert.All( + context.Enrollments.Local, e => + { + var entry = context.Entry(e); + var student = e.Student; + var course = e.Course; + Assert.Equal(student.Id, e.StudentId); + Assert.Equal(course.Id, e.CourseId); + Assert.Equal(context.Entry(student).Property(e => e.Id).CurrentValue, entry.Property(e => e.StudentId).CurrentValue); + Assert.Equal(context.Entry(course).Property(e => e.Id).CurrentValue, entry.Property(e => e.CourseId).CurrentValue); + Assert.True(entry.Property(e => e.StudentId).IsTemporary); + Assert.True(entry.Property(e => e.CourseId).IsTemporary); + Assert.True(context.Entry(student).Property(e => e.Id).IsTemporary); + Assert.True(context.Entry(course).Property(e => e.Id).IsTemporary); + }); + + context.SaveChanges(); + + Assert.All( + context.Enrollments.Local, e => + { + var entry = context.Entry(e); + var student = e.Student; + var course = e.Course; + Assert.Equal(student.Id, e.StudentId); + Assert.Equal(course.Id, e.CourseId); + Assert.False(entry.Property(e => e.StudentId).IsTemporary); + Assert.False(entry.Property(e => e.CourseId).IsTemporary); + }); + } + + using (var context = new UniversityContext(options)) + { + Assert.Equal(studentCount, context.Students.ToList().Count()); + Assert.Equal(courseCount, context.Courses.ToList().Count()); + + var enrollments = context.Enrollments.Include(e => e.Course).Include(e => e.Student).ToList(); + Assert.All( + enrollments, e => + { + var student = e.Student; + var course = e.Course; + Assert.Equal(student.Id, e.StudentId); + Assert.Equal(course.Id, e.CourseId); + }); } } - [ConditionalFact] - public void Adding_an_item_to_a_collection_marks_it_as_modified() + public class Course + { + public Guid Id { get; set; } + + public string Title { get; set; } = string.Empty; + + public int Credits { get; set; } + + public virtual ICollection Enrollments { get; set; } = new List(); + + public virtual ICollection Students { get; set; } = new List(); + + public byte[] RowVersion { get; set; } = []; + } + + public class Student + { + public Guid Id { get; set; } + + public string LastName { get; set; } = string.Empty; + + public string FirstMidName { get; set; } = string.Empty; + + public DateTime EnrollmentDate { get; set; } + + public virtual ICollection Enrollments { get; } = new List(); + + public virtual ICollection Courses { get; set; } = new List(); + + public byte[] RowVersion { get; set; } = []; + } + + public enum Grade + { + A, B, C, D, F + } + + public class Enrollment + { + public Guid Id { get; set; } + + public Guid CourseId { get; set; } + + public Guid StudentId { get; set; } + + public Grade? Grade { get; set; } + + public virtual Course Course { get; set; } = new(); + + public virtual Student Student { get; set; } = new(); + + public byte[] RowVersion { get; set; } = []; + } + + private class UniversityContext(DbContextOptions options) : DbContext(options) { - using (var testDatabase = JetTestStore.CreateInitialized(DatabaseName)) + public DbSet Students { get; set; } + public DbSet Courses { get; set; } + public DbSet Enrollments { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) { - var options = Fixture.CreateOptions(testDatabase); + modelBuilder.Entity( + builder => + { + builder.ToTable("Courses"); - using (var context = new GameDbContext(options)) - { - context.Database.EnsureCreatedResiliently(); + builder.HasKey(x => x.Id); - var player = new PlayerCharacter( - new Level { Game = new Game() }); + builder.Property(x => x.Id) + .ValueGeneratedOnAdd() + .HasDefaultValueSql("GenGUID()"); - var weapon = new Item { Id = 1, Game = player.Game }; + builder.Property(x => x.Title) + .IsRequired() + .HasMaxLength(50); - context.Characters.Add(player); + builder.Property(x => x.RowVersion) + .IsRowVersion(); - context.SaveChanges(); + builder.HasMany(x => x.Students) + .WithMany(x => x.Courses) + .UsingEntity(); + }); - player.Items.Add(weapon); + modelBuilder.Entity( + builder => + { + builder.ToTable("Students"); - context.ChangeTracker.DetectChanges(); + builder.HasKey(x => x.Id); - Assert.True(context.Entry(player).Collection(p => p.Items).IsModified); - } + builder.Property(x => x.Id) + .ValueGeneratedOnAdd() + .HasDefaultValueSql("GenGUID()"); + + builder.Property(x => x.LastName) + .IsRequired() + .HasMaxLength(50); + + builder.Property(x => x.FirstMidName) + .IsRequired() + .HasMaxLength(50); + + builder.Property(x => x.RowVersion) + .IsRowVersion(); + }); + + modelBuilder.Entity( + builder => + { + builder.ToTable("Enrollments"); + + builder.HasKey(x => x.Id); + + builder.Property(x => x.Id) + .ValueGeneratedOnAdd() + .HasDefaultValueSql("GenGUID()"); + + builder.Property(x => x.RowVersion) + .IsRowVersion(); + + builder.HasOne(t => t.Course) + .WithMany(t => t.Enrollments) + .HasPrincipalKey(d => d.Id) + .HasForeignKey(d => d.CourseId) + .OnDelete(DeleteBehavior.Cascade); + + builder.HasOne(t => t.Student) + .WithMany(t => t.Enrollments) + .HasPrincipalKey(d => d.Id) + .HasForeignKey(d => d.StudentId) + .OnDelete(DeleteBehavior.Cascade); + }); } } + private class EntityA + { + public int Id { get; set; } + public virtual EntityB EntityB { get; set; } + } + + private class EntityB + { + public int Id { get; set; } + public virtual EntityA EntityA { get; set; } + public virtual ICollection EntitiesC { get; } = new List(); + } + + private class EntityC + { + public int Id { get; set; } + public virtual ICollection EntitiesB { get; } = new List(); + } + + private class SomeDbContext(DbContextOptions options) : DbContext(options) + { + public DbSet EntitiesA { get; set; } + public DbSet EntitiesB { get; set; } + public DbSet EntitiesC { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + => modelBuilder + .Entity() + .HasOne(e => e.EntityB) + .WithOne(e => e.EntityA) + .HasForeignKey(e => e.Id); + } + [ConditionalFact] - public void Can_set_reference_twice() + public async Task Adding_an_item_to_a_collection_marks_it_as_modified() { - using (var testDatabase = JetTestStore.CreateInitialized(DatabaseName)) - { - var options = Fixture.CreateOptions(testDatabase); + using var testDatabase = await JetTestStore.CreateInitializedAsync(DatabaseName); + var options = Fixture.CreateOptions(testDatabase); - using (var context = new GameDbContext(options)) - { - context.Database.EnsureCreatedResiliently(); + using var context = new GameDbContext(options); + context.Database.EnsureCreatedResiliently(); - var player = new PlayerCharacter( - new Level { Game = new Game() }); + var player = new PlayerCharacter( + new Level { Game = new Game() }); - var weapon = new Item { Id = 1, Game = player.Game }; + var weapon = new Item { Id = 1, Game = player.Game }; - player.Items.Add(weapon); - context.Characters.Add(player); + context.Characters.Add(player); - context.SaveChanges(); + context.SaveChanges(); - player.CurrentWeapon = weapon; - context.SaveChanges(); + player.Items.Add(weapon); - player.CurrentWeapon = null; - context.SaveChanges(); + context.ChangeTracker.DetectChanges(); - player.CurrentWeapon = weapon; - context.SaveChanges(); - } + Assert.True(context.Entry(player).Collection(p => p.Items).IsModified); + } - using (var context = new GameDbContext(options)) - { - var player = context.Characters - .Include(c => c.Items) - .ToList().Single(); + [ConditionalFact] + public async Task Can_set_reference_twice() + { + using var testDatabase = await JetTestStore.CreateInitializedAsync(DatabaseName); + var options = Fixture.CreateOptions(testDatabase); - Assert.Equal(player.Items.Single(), player.CurrentWeapon); - } + using (var context = new GameDbContext(options)) + { + context.Database.EnsureCreatedResiliently(); + + var player = new PlayerCharacter( + new Level { Game = new Game() }); + + var weapon = new Item { Id = 1, Game = player.Game }; + + player.Items.Add(weapon); + context.Characters.Add(player); + + context.SaveChanges(); + + player.CurrentWeapon = weapon; + context.SaveChanges(); + + player.CurrentWeapon = null; + context.SaveChanges(); + + player.CurrentWeapon = weapon; + context.SaveChanges(); + } + + using (var context = new GameDbContext(options)) + { + var player = context.Characters + .Include(c => c.Items) + .ToList().Single(); + + Assert.Equal(player.Items.Single(), player.CurrentWeapon); } } [ConditionalFact] - public void Can_include_on_loaded_entity() + public async Task Can_include_on_loaded_entity() { - using (var testDatabase = JetTestStore.CreateInitialized(DatabaseName)) - { - var options = Fixture.CreateOptions(testDatabase); + using var testDatabase = await JetTestStore.CreateInitializedAsync(DatabaseName); + var options = Fixture.CreateOptions(testDatabase); - using (var context = new GameDbContext(options)) - { - context.Database.EnsureCreatedResiliently(); + using (var context = new GameDbContext(options)) + { + context.Database.EnsureCreatedResiliently(); - var player = new PlayerCharacter( - new Level { Game = new Game() }); + var player = new PlayerCharacter( + new Level { Game = new Game() }); - var weapon = new Item { Id = 1, Game = player.Game }; + var weapon = new Item { Id = 1, Game = player.Game }; - player.Items.Add(weapon); + player.Items.Add(weapon); - player.Items.Add( - new Item { Id = 2, Game = player.Game }); + player.Items.Add( + new Item { Id = 2, Game = player.Game }); - context.Characters.Add(player); + context.Characters.Add(player); - context.SaveChanges(); + context.SaveChanges(); - player.CurrentWeapon = weapon; + player.CurrentWeapon = weapon; - context.SaveChanges(); - } + context.SaveChanges(); + } - using (var context = new GameDbContext(options)) - { - var player = context.Characters - .Include(p => p.CurrentWeapon) - .Single(); + using (var context = new GameDbContext(options)) + { + var player = context.Characters + .Include(p => p.CurrentWeapon) + .Single(); - Assert.Equal(1, player.Items.Count); + Assert.Equal(1, player.Items.Count); - context.Attach(player); + context.Attach(player); - Assert.Equal(1, player.Items.Count); + Assert.Equal(1, player.Items.Count); - context.Levels - .Include(l => l.Actors) - .ThenInclude(a => a.Items) - .Load(); + context.Levels + .Include(l => l.Actors) + .ThenInclude(a => a.Items) + .Load(); - Assert.Equal(2, player.Items.Count); - } + Assert.Equal(2, player.Items.Count); + } - using (var context = new GameDbContext(options)) - { - var player = context.Characters - .Include(p => p.CurrentWeapon) - .AsNoTracking() - .Single(); + using (var context = new GameDbContext(options)) + { + var player = context.Characters + .Include(p => p.CurrentWeapon) + .AsNoTracking() + .Single(); - Assert.Equal(0, player.Items.Count); + Assert.Equal(0, player.Items.Count); - context.Entry(player.CurrentWeapon).Property("ActorId").CurrentValue = 0; + context.Entry(player.CurrentWeapon).Property("ActorId").CurrentValue = 0; - context.Attach(player); + context.Attach(player); - Assert.Equal(1, player.Items.Count); + Assert.Equal(1, player.Items.Count); - context.Levels - .Include(l => l.Actors) - .ThenInclude(a => a.Items) - .Load(); + context.Levels + .Include(l => l.Actors) + .ThenInclude(a => a.Items) + .Load(); - Assert.Equal(2, player.Items.Count); - } + Assert.Equal(2, player.Items.Count); } } @@ -798,13 +1413,8 @@ public class Game public virtual ICollection Levels { get; set; } = new HashSet(); } - public class GameDbContext : DbContext + public class GameDbContext(DbContextOptions options) : DbContext(options) { - public GameDbContext(DbContextOptions options) - : base(options) - { - } - public DbSet Games { get; set; } public DbSet Levels { get; set; } public DbSet Characters { get; set; } @@ -883,56 +1493,45 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) [ConditionalFact] public async Task Tracking_entities_asynchronously_returns_tracked_entities_back() { - using (var testStore = JetTestStore.GetNorthwindStore()) - { - using (var db = new NorthwindContext(Fixture.CreateOptions(testStore))) - { - var customer = await db.Customers.OrderBy(c => c.CustomerID).FirstOrDefaultAsync(); + using var testStore = await JetTestStore.GetNorthwindStoreAsync(); + using var db = new NorthwindContext(Fixture.CreateOptions(testStore)); + var customer = await db.Customers.OrderBy(c => c.CustomerID).FirstOrDefaultAsync(); - var trackedCustomerEntry = db.ChangeTracker.Entries().Single(); - Assert.Same(trackedCustomerEntry.Entity, customer); + var trackedCustomerEntry = db.ChangeTracker.Entries().Single(); + Assert.Same(trackedCustomerEntry.Entity, customer); - // if references are different this will throw - db.Customers.Remove(customer); - } - } + // if references are different this will throw + db.Customers.Remove(customer); } [ConditionalFact(Skip = "Jet does not support Schema")] // Issue #931 public async Task Can_save_and_query_with_schema() { - using (var testStore = JetTestStore.CreateInitialized(DatabaseName)) - { - var options = Fixture.CreateOptions(testStore); - - await testStore.ExecuteNonQueryAsync("CREATE SCHEMA Apple"); - await testStore.ExecuteNonQueryAsync("CREATE TABLE Apple.Jack (MyKey int)"); - await testStore.ExecuteNonQueryAsync("CREATE TABLE Apple.Black (MyKey int)"); + using var testStore = await JetTestStore.CreateInitializedAsync(DatabaseName); + var options = Fixture.CreateOptions(testStore); - using (var context = new SchemaContext(options)) - { - context.Add( - new Jack { MyKey = 1 }); - context.Add( - new Black { MyKey = 2 }); - context.SaveChanges(); - } + await testStore.ExecuteNonQueryAsync("CREATE SCHEMA Apple"); + await testStore.ExecuteNonQueryAsync("CREATE TABLE Apple.Jack (MyKey int)"); + await testStore.ExecuteNonQueryAsync("CREATE TABLE Apple.Black (MyKey int)"); - using (var context = new SchemaContext(options)) - { - Assert.Equal(1, context.Jacks.Count()); - Assert.Equal(1, context.Blacks.Count()); - } + using (var context = new SchemaContext(options)) + { + await context.AddAsync( + new Jack { MyKey = 1 }); + await context.AddAsync( + new Black { MyKey = 2 }); + context.SaveChanges(); } - } - private class SchemaContext : DbContext - { - public SchemaContext(DbContextOptions options) - : base(options) + using (var context = new SchemaContext(options)) { + Assert.Equal(1, context.Jacks.Count()); + Assert.Equal(1, context.Blacks.Count()); } + } + private class SchemaContext(DbContextOptions options) : DbContext(options) + { public DbSet Jacks { get; set; } public DbSet Blacks { get; set; } @@ -962,97 +1561,89 @@ private class Black [ConditionalFact] public Task Can_round_trip_changes_with_snapshot_change_tracking() - { - return RoundTripChanges(); - } + => RoundTripChanges(); [ConditionalFact] public Task Can_round_trip_changes_with_full_notification_entities() - { - return RoundTripChanges(); - } + => RoundTripChanges(); [ConditionalFact] public Task Can_round_trip_changes_with_changed_only_notification_entities() - { - return RoundTripChanges(); - } + => RoundTripChanges(); private async Task RoundTripChanges() - where TBlog : class, IBlog, new() + where TBlog : class, IBlog, new() { - using (var testDatabase = JetTestStore.CreateInitialized(DatabaseName)) - { - var options = Fixture.CreateOptions(testDatabase); + using var testDatabase = await JetTestStore.CreateInitializedAsync(DatabaseName); + var options = Fixture.CreateOptions(testDatabase); - int blog1Id; - int blog2Id; - int blog3Id; + int blog1Id; + int blog2Id; + int blog3Id; - using (var context = new BloggingContext(options)) - { - var blogs = await CreateBlogDatabaseAsync(context); - blog1Id = blogs[0].Id; - blog2Id = blogs[1].Id; + using (var context = new BloggingContext(options)) + { + var blogs = await CreateBlogDatabaseAsync(context); + blog1Id = blogs[0].Id; + blog2Id = blogs[1].Id; - Assert.NotEqual(0, blog1Id); - Assert.NotEqual(0, blog2Id); - Assert.NotEqual(blog1Id, blog2Id); - } + Assert.NotEqual(0, blog1Id); + Assert.NotEqual(0, blog2Id); + Assert.NotEqual(blog1Id, blog2Id); + } - using (var context = new BloggingContext(options)) - { - var blogs = context.Blogs.ToList(); - Assert.Equal(2, blogs.Count); + using (var context = new BloggingContext(options)) + { + var blogs = context.Blogs.ToList(); + Assert.Equal(2, blogs.Count); - var blog1 = blogs.Single(b => b.Name == "Blog1"); - Assert.Equal(blog1Id, blog1.Id); + var blog1 = blogs.Single(b => b.Name == "Blog1"); + Assert.Equal(blog1Id, blog1.Id); - Assert.Equal("Blog1", blog1.Name); - Assert.True(blog1.George); - Assert.Equal(new Guid("0456AEF1-B7FC-47AA-8102-975D6BA3A9BF"), blog1.TheGu); - Assert.Equal(new DateTime(1973, 9, 3, 0, 10, 33, 0), blog1.NotFigTime); - Assert.Equal(64, blog1.ToEat); - Assert.Equal(0.123456789, blog1.OrNothing); - Assert.Equal(777, blog1.Fuse); - Assert.Equal(9876543210, blog1.WayRound); - Assert.Equal(0.12345f, blog1.Away); - Assert.Equal(new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }, blog1.AndChew); + Assert.Equal("Blog1", blog1.Name); + Assert.True(blog1.George); + Assert.Equal(new Guid("0456AEF1-B7FC-47AA-8102-975D6BA3A9BF"), blog1.TheGu); + Assert.Equal(new DateTime(1973, 9, 3, 0, 10, 33, 0), blog1.NotFigTime); + Assert.Equal(64, blog1.ToEat); + Assert.Equal(0.123456789, blog1.OrNothing); + Assert.Equal(777, blog1.Fuse); + Assert.Equal(9876543210, blog1.WayRound); + Assert.Equal(0.12345f, blog1.Away); + Assert.Equal(new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }, blog1.AndChew); - blog1.Name = "New Name"; + blog1.Name = "New Name"; - var blog2 = blogs.Single(b => b.Name == "Blog2"); - Assert.Equal(blog2Id, blog2.Id); + var blog2 = blogs.Single(b => b.Name == "Blog2"); + Assert.Equal(blog2Id, blog2.Id); - blog2.Name = null; - blog2.NotFigTime = new DateTime(); - blog2.AndChew = null; + blog2.Name = null; + blog2.NotFigTime = new DateTime(); + blog2.AndChew = null; - var blog3 = context.Add(new TBlog()).Entity; + var blog3 = (await context.AddAsync(new TBlog())).Entity; - await context.SaveChangesAsync(); + await context.SaveChangesAsync(); - blog3Id = blog3.Id; - Assert.NotEqual(0, blog3Id); - } + blog3Id = blog3.Id; + Assert.NotEqual(0, blog3Id); + } - using (var context = new BloggingContext(options)) - { - var blogs = context.Blogs.ToList(); - Assert.Equal(3, blogs.Count); + using (var context = new BloggingContext(options)) + { + var blogs = context.Blogs.ToList(); + Assert.Equal(3, blogs.Count); - Assert.Equal("New Name", blogs.Single(b => b.Id == blog1Id).Name); + Assert.Equal("New Name", blogs.Single(b => b.Id == blog1Id).Name); - var blog2 = blogs.Single(b => b.Id == blog2Id); - Assert.Null(blog2.Name); - Assert.Equal(blog2.NotFigTime, new DateTime()); - Assert.Null(blog2.AndChew); + var blog2 = blogs.Single(b => b.Id == blog2Id); + Assert.Null(blog2.Name); + Assert.Equal(blog2.NotFigTime, new DateTime()); + Assert.Null(blog2.AndChew); - var blog3 = blogs.Single(b => b.Id == blog3Id); - Assert.Null(blog3.Name); - Assert.Equal(blog3.NotFigTime, new DateTime()); - Assert.Null(blog3.AndChew); - } + var blog3 = blogs.Single(b => b.Id == blog3Id); + Assert.Null(blog3.Name); + Assert.Equal(blog3.NotFigTime, new DateTime()); + Assert.Null(blog3.AndChew); } } @@ -1078,7 +1669,7 @@ private static async Task CreateBlogDatabaseAsync(DbContext cont OrULong = 888, OrUSkint = 8888888, OrUShort = 888888888888888, - AndChew = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 } + AndChew = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] })).Entity; var blog2 = (await context.AddAsync( new TBlog @@ -1101,27 +1692,20 @@ private static async Task CreateBlogDatabaseAsync(DbContext cont })).Entity; await context.SaveChangesAsync(); - return new[] { blog1, blog2 }; + return [blog1, blog2]; } - private class NorthwindContext : DbContext + private class NorthwindContext(DbContextOptions options) : DbContext(options) { - public NorthwindContext(DbContextOptions options) - : base(options) - { - } - public DbSet Customers { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) - { - modelBuilder.Entity( + => modelBuilder.Entity( b => { b.HasKey(c => c.CustomerID); b.ToTable("Customers"); }); - } } private class Customer @@ -1131,13 +1715,7 @@ private class Customer public string Fax { get; set; } } - private class BloggingContext : BloggingContext - { - public BloggingContext(DbContextOptions options) - : base(options) - { - } - } + private class BloggingContext(DbContextOptions options) : BloggingContext(options); private class Blog : IBlog { @@ -1165,26 +1743,21 @@ private class Blog : IBlog public byte[] AndChew { get; set; } } - private class BloggingContext : DbContext + private class BloggingContext(DbContextOptions options) : DbContext(options) where TBlog : class, IBlog { - public BloggingContext(DbContextOptions options) - : base(options) - { - } - protected override void OnModelCreating(ModelBuilder modelBuilder) { - if (typeof(INotifyPropertyChanging).GetTypeInfo().IsAssignableFrom(typeof(TBlog).GetTypeInfo())) + if (typeof(INotifyPropertyChanging).IsAssignableFrom(typeof(TBlog))) { modelBuilder.HasChangeTrackingStrategy(ChangeTrackingStrategy.ChangingAndChangedNotifications); } - else if (typeof(INotifyPropertyChanged).GetTypeInfo().IsAssignableFrom(typeof(TBlog).GetTypeInfo())) + else if (typeof(INotifyPropertyChanged).IsAssignableFrom(typeof(TBlog))) { modelBuilder.HasChangeTrackingStrategy(ChangeTrackingStrategy.ChangedNotifications); } - modelBuilder.Entity().ToTable("Blog"); + modelBuilder.Entity().ToTable("Blog", "dbo"); } public DbSet Blogs { get; set; } diff --git a/test/EFCore.Jet.FunctionalTests/JetValueGenerationScenariosTest.cs b/test/EFCore.Jet.FunctionalTests/JetValueGenerationScenariosTest.cs index 35e23384..ab9f8718 100644 --- a/test/EFCore.Jet.FunctionalTests/JetValueGenerationScenariosTest.cs +++ b/test/EFCore.Jet.FunctionalTests/JetValueGenerationScenariosTest.cs @@ -1,883 +1,47 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; -using System.Collections.Generic; -using EntityFrameworkCore.Jet.Data; -using System.Linq; -using EntityFrameworkCore.Jet.FunctionalTests.TestUtilities; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Diagnostics; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Storage; -using Microsoft.EntityFrameworkCore.TestUtilities; -using Xunit; -using NetTopologySuite.Geometries; +#nullable disable // ReSharper disable InconsistentNaming namespace EntityFrameworkCore.Jet.FunctionalTests { - public class JetValueGenerationScenariosTest + public class JetValueGenerationScenariosTest : JetValueGenerationScenariosTestBase { - private const string DatabaseName = "JetValueGenerationScenariosTest"; + protected override string DatabaseName + => "JetValueGenerationScenariosTest"; - // Positive cases + protected override Guid GuidSentinel + => new(); - [ConditionalFact] - public void Insert_with_Identity_column() - { - using var testStore = JetTestStore.CreateInitialized(DatabaseName); - using (var context = new BlogContextIdentity(testStore.Name)) - { - context.Database.EnsureCreatedResiliently(); + protected override int IntSentinel + => 0; - context.AddRange( - new Blog { Name = "One Unicorn" }, new Blog { Name = "Two Unicorns" }); + protected override uint UIntSentinel + => 0; - context.SaveChanges(); - } + protected override IntKey IntKeySentinel + => IntKey.Zero; - using (var context = new BlogContextIdentity(testStore.Name)) - { - var blogs = context.Blogs.OrderBy(e => e.Id).ToList(); + protected override ULongKey ULongKeySentinel + => ULongKey.Zero; - Assert.Equal(1, blogs[0].Id); - Assert.Equal(2, blogs[1].Id); - } - } + protected override int? NullableIntSentinel + => null; - public class BlogContextIdentity : ContextBase - { - public BlogContextIdentity(string databaseName) - : base(databaseName) - { - } - } + protected override string StringSentinel + => null; - [ConditionalFact] - public void Insert_with_explicit_non_default_keys() - { - using var testStore = JetTestStore.CreateInitialized(DatabaseName); - using (var context = new BlogContextNoKeyGeneration(testStore.Name)) - { - context.Database.EnsureCreatedResiliently(); + protected override DateTime DateTimeSentinel + => new(); - context.AddRange( - new Blog { Id = 66, Name = "One Unicorn" }, new Blog { Id = 67, Name = "Two Unicorns" }); + protected override NeedsConverter NeedsConverterSentinel + => new(0); - context.SaveChanges(); - } + /*protected override GeometryCollection GeometryCollectionSentinel + => null;*/ - using (var context = new BlogContextNoKeyGeneration(testStore.Name)) - { - var blogs = context.Blogs.OrderBy(e => e.Id).ToList(); - - Assert.Equal(66, blogs[0].Id); - Assert.Equal(67, blogs[1].Id); - } - } - - public class BlogContextNoKeyGeneration : ContextBase - { - public BlogContextNoKeyGeneration(string databaseName) - : base(databaseName) - { - } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - modelBuilder - .Entity() - .Property(e => e.Id) - .ValueGeneratedNever(); - } - } - - [ConditionalFact] - public void Insert_with_explicit_with_default_keys() - { - using var testStore = JetTestStore.CreateInitialized(DatabaseName); - using (var context = new BlogContextNoKeyGenerationNullableKey(testStore.Name)) - { - context.Database.EnsureCreatedResiliently(); - - context.AddRange( - new NullableKeyBlog { Id = 0, Name = "One Unicorn" }, - new NullableKeyBlog { Id = 1, Name = "Two Unicorns" }); - - context.SaveChanges(); - } - - using (var context = new BlogContextNoKeyGenerationNullableKey(testStore.Name)) - { - var blogs = context.NullableKeyBlogs.OrderBy(e => e.Id).ToList(); - - Assert.Equal(0, blogs[0].Id); - Assert.Equal(1, blogs[1].Id); - } - } - - public class BlogContextNoKeyGenerationNullableKey : ContextBase - { - public BlogContextNoKeyGenerationNullableKey(string databaseName) - : base(databaseName) - { - } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - modelBuilder - .Entity() - .Property(e => e.Id) - .ValueGeneratedNever(); - } - } - - [ConditionalFact] - public void Insert_with_non_key_default_value() - { - using var testStore = JetTestStore.CreateInitialized(DatabaseName); - - using (var context = new BlogContextNonKeyDefaultValue(testStore.Name)) - { - context.Database.EnsureCreatedResiliently(); - - var blogs = new List - { - new() { Name = "One Unicorn" }, - new() - { - Name = "Two Unicorns", - CreatedOn = new DateTime(1969, 8, 3, 0, 10, 0) - } - }; - - context.AddRange(blogs); - - context.SaveChanges(); - - Assert.NotEqual(new DateTime(), blogs[0].CreatedOn); - Assert.NotEqual(new DateTime(), blogs[1].CreatedOn); - } - - using (var context = new BlogContextNonKeyDefaultValue(testStore.Name)) - { - var blogs = context.Blogs.OrderBy(e => e.Name).ToList(); - Assert.Equal(3, blogs.Count); - - Assert.NotEqual(new DateTime(), blogs[0].CreatedOn); - Assert.Equal(new DateTime(1969, 8, 3, 0, 10, 0), blogs[1].CreatedOn); - Assert.Equal(new DateTime(1974, 8, 3, 0, 10, 0), blogs[2].CreatedOn); - - blogs[0].CreatedOn = new DateTime(1973, 9, 3, 0, 10, 0); - - blogs[1].Name = "X Unicorns"; - - blogs[2].Name = "Y Unicorns"; - - context.SaveChanges(); - } - - using (var context = new BlogContextNonKeyDefaultValue(testStore.Name)) - { - var blogs = context.Blogs.OrderBy(e => e.Name).ToList(); - Assert.Equal(3, blogs.Count); - - Assert.Equal(new DateTime(1973, 9, 3, 0, 10, 0), blogs[0].CreatedOn); - Assert.Equal(new DateTime(1969, 8, 3, 0, 10, 0), blogs[1].CreatedOn); - Assert.Equal(new DateTime(1974, 8, 3, 0, 10, 0), blogs[2].CreatedOn); - } - } - - public class BlogContextNonKeyDefaultValue : ContextBase - { - public BlogContextNonKeyDefaultValue(string databaseName) - : base(databaseName) - { - } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - modelBuilder.Entity( - b => - { - b.Property(e => e.CreatedOn) - .HasDefaultValueSql("now()"); - - b.HasData( - new Blog - { - Id = 9979, - Name = "W Unicorns", - CreatedOn = new DateTime(1974, 8, 3, 0, 10, 0) - }); - }); - } - } - - [ConditionalFact] - public void Insert_with_non_key_default_value_readonly() - { - using (var testStore = JetTestStore.CreateInitialized(DatabaseName)) - { - using (var context = new BlogContextNonKeyReadOnlyDefaultValue(testStore.Name)) - { - context.Database.EnsureCreatedResiliently(); - - context.AddRange( - new Blog { Name = "One Unicorn" }, - new Blog { Name = "Two Unicorns" }); - - context.SaveChanges(); - - Assert.NotEqual(new DateTime(), context.Blogs.ToList()[0].CreatedOn); - } - - DateTime dateTime0; - - using (var context = new BlogContextNonKeyReadOnlyDefaultValue(testStore.Name)) - { - var blogs = context.Blogs.OrderBy(e => e.Id).ToList(); - - dateTime0 = blogs[0].CreatedOn; - - Assert.NotEqual(new DateTime(), dateTime0); - Assert.NotEqual(new DateTime(), blogs[1].CreatedOn); - - blogs[0].Name = "One Pegasus"; - blogs[1].CreatedOn = new DateTime(1973, 9, 3, 0, 10, 0); - - context.SaveChanges(); - } - - using (var context = new BlogContextNonKeyReadOnlyDefaultValue(testStore.Name)) - { - var blogs = context.Blogs.OrderBy(e => e.Id).ToList(); - - Assert.Equal(dateTime0, blogs[0].CreatedOn); - Assert.Equal(new DateTime(1973, 9, 3, 0, 10, 0), blogs[1].CreatedOn); - } - } - } - - public class BlogContextNonKeyReadOnlyDefaultValue : ContextBase - { - public BlogContextNonKeyReadOnlyDefaultValue(string databaseName) - : base(databaseName) - { - } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - modelBuilder.Entity() - .Property(e => e.CreatedOn) - .HasDefaultValueSql("now()") - .Metadata.SetBeforeSaveBehavior(PropertySaveBehavior.Throw); - } - } - - [ConditionalFact] - public void Insert_and_update_with_computed_column() - { - using (var testStore = JetTestStore.CreateInitialized(DatabaseName)) - { - using (var context = new BlogContextComputedColumn(testStore.Name)) - { - context.Database.EnsureCreatedResiliently(); - - var blog = context.Add( - new FullNameBlog { FirstName = "One", LastName = "Unicorn" }).Entity; - - context.SaveChanges(); - - Assert.Equal("One Unicorn", blog.FullName); - } - - using (var context = new BlogContextComputedColumn(testStore.Name)) - { - var blog = context.FullNameBlogs.Single(); - - Assert.Equal("One Unicorn", blog.FullName); - - blog.LastName = "Pegasus"; - - context.SaveChanges(); - - Assert.Equal("One Pegasus", blog.FullName); - } - } - } - - public class BlogContextComputedColumn : ContextBase - { - public BlogContextComputedColumn(string databaseName) - : base(databaseName) - { - } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - var property = modelBuilder.Entity() - .Property(e => e.FullName) - .HasComputedColumnSql("FirstName + ' ' + LastName") - .Metadata; - - property.SetBeforeSaveBehavior(PropertySaveBehavior.Throw); - property.SetAfterSaveBehavior(PropertySaveBehavior.Throw); - } - } - - // #6044 - [ConditionalFact] - public void Insert_and_update_with_computed_column_with_function() - { - using (var testStore = JetTestStore.CreateInitialized(DatabaseName)) - { - using (var context = new BlogContextComputedColumnWithFunction(testStore.Name)) - { - context.Database.ExecuteSqlRaw - ( - @"CREATE FUNCTION -`GetFullName`(@First NVARCHAR(MAX), @Second NVARCHAR(MAX)) -RETURNS NVARCHAR(MAX) WITH SCHEMABINDING AS BEGIN RETURN @First + @Second END"); - - context.GetService().CreateTables(); - } - - using (var context = new BlogContextComputedColumnWithFunction(testStore.Name)) - { - var blog = context.Add( - new FullNameBlog { FirstName = "One", LastName = "Unicorn" }).Entity; - - context.SaveChanges(); - - Assert.Equal("OneUnicorn", blog.FullName); - } - - using (var context = new BlogContextComputedColumnWithFunction(testStore.Name)) - { - var blog = context.FullNameBlogs.Single(); - - Assert.Equal("OneUnicorn", blog.FullName); - - blog.LastName = "Pegasus"; - - context.SaveChanges(); - - Assert.Equal("OnePegasus", blog.FullName); - } - } - } - - public class BlogContextComputedColumnWithFunction : ContextBase - { - public BlogContextComputedColumnWithFunction(string databaseName) - : base(databaseName) - { - } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - modelBuilder.Entity() - .Property(e => e.FullName) - .HasComputedColumnSql("`GetFullName`(`FirstName`, `LastName`)") - .Metadata.SetAfterSaveBehavior(PropertySaveBehavior.Throw); - } - } - - // #6044 - [ConditionalFact] - public void Insert_and_update_with_computed_column_with_querying_function() - { - using (var testStore = JetTestStore.CreateInitialized(DatabaseName)) - { - using (var context = new BlogContextComputedColumn(testStore.Name)) - { - context.GetService().CreateTables(); - - context.Database.ExecuteSqlRaw("ALTER TABLE FullNameBlogs DROP COLUMN FullName;"); - - context.Database.ExecuteSqlRaw( - @"CREATE FUNCTION `GetFullName`(@Id int) -RETURNS NVARCHAR(MAX) WITH SCHEMABINDING AS -BEGIN - DECLARE @FullName NVARCHAR(MAX); - SELECT @FullName = `FirstName` + `LastName` FROM `FullNameBlogs` WHERE `Id` = @Id; - RETURN @FullName -END"); - - context.Database.ExecuteSqlRaw("ALTER TABLE FullNameBlogs ADD FullName AS `GetFullName`(`Id`); "); - } - - try - { - using (var context = new BlogContextComputedColumn(testStore.Name)) - { - var blog = context.Add( - new FullNameBlog { FirstName = "One", LastName = "Unicorn" }).Entity; - - context.SaveChanges(); - - Assert.Equal("OneUnicorn", blog.FullName); - } - - using (var context = new BlogContextComputedColumn(testStore.Name)) - { - var blog = context.FullNameBlogs.Single(); - - Assert.Equal("OneUnicorn", blog.FullName); - - blog.LastName = "Pegasus"; - - context.SaveChanges(); - - Assert.Equal("OnePegasus", blog.FullName); - } - - using (var context = new BlogContextComputedColumn(testStore.Name)) - { - var blog1 = context.Add( - new FullNameBlog { FirstName = "Hank", LastName = "Unicorn" }).Entity; - var blog2 = context.Add( - new FullNameBlog { FirstName = "Jeff", LastName = "Unicorn" }).Entity; - - context.SaveChanges(); - - Assert.Equal("HankUnicorn", blog1.FullName); - Assert.Equal("JeffUnicorn", blog2.FullName); - } - } - finally - { - using (var context = new BlogContextComputedColumn(testStore.Name)) - { - context.Database.ExecuteSqlRaw("ALTER TABLE FullNameBlogs DROP COLUMN FullName;"); - context.Database.ExecuteSqlRaw("DROP FUNCTION `GetFullName`;"); - } - } - } - } - - [ConditionalFact] - public void Insert_with_client_generated_GUID_key() - { - using (var testStore = JetTestStore.CreateInitialized(DatabaseName)) - { - Guid afterSave; - using (var context = new BlogContextClientGuidKey(testStore.Name)) - { - context.Database.EnsureCreatedResiliently(); - - var blog = context.Add( - new GuidBlog { Name = "One Unicorn" }).Entity; - - var beforeSave = blog.Id; - var beforeSaveNotId = blog.NotId; - - Assert.NotEqual(default, beforeSave); - Assert.NotEqual(default, beforeSaveNotId); - - context.SaveChanges(); - - afterSave = blog.Id; - var afterSaveNotId = blog.NotId; - - Assert.Equal(beforeSave, afterSave); - Assert.Equal(beforeSaveNotId, afterSaveNotId); - } - - using (var context = new BlogContextClientGuidKey(testStore.Name)) - { - Assert.Equal(afterSave, context.GuidBlogs.Single().Id); - } - } - } - - public class BlogContextClientGuidKey : ContextBase - { - public BlogContextClientGuidKey(string databaseName) - : base(databaseName) - { - } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - => modelBuilder.Entity( - eb => - { - eb.HasAlternateKey(e => e.NotId); - eb.Property(e => e.NotId).ValueGeneratedOnAdd(); - }); - } - - [ConditionalFact] - public void Insert_with_ValueGeneratedOnAdd_GUID_nonkey_property_throws() - { - using (var testStore = JetTestStore.CreateInitialized(DatabaseName)) - { - using (var context = new BlogContextClientGuidNonKey(testStore.Name)) - { - context.Database.EnsureCreatedResiliently(); - - var blog = context.Add( - new GuidBlog { Name = "One Unicorn" }).Entity; - - Assert.Equal(default, blog.NotId); - - // No value set on a required column - Assert.Throws(() => context.SaveChanges()); - } - } - } - - public class BlogContextClientGuidNonKey : ContextBase - { - public BlogContextClientGuidNonKey(string databaseName) - : base(databaseName) - { - } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - => modelBuilder.Entity().Property(e => e.NotId).ValueGeneratedOnAdd(); - } - - [ConditionalFact] - public void Insert_with_server_generated_GUID_key() - { - using (var testStore = JetTestStore.CreateInitialized(DatabaseName)) - { - Guid afterSave; - using (var context = new BlogContextServerGuidKey(testStore.Name)) - { - context.Database.EnsureCreatedResiliently(); - - var blog = context.Add( - new GuidBlog { Name = "One Unicorn" }).Entity; - - var beforeSave = blog.Id; - var beforeSaveNotId = blog.NotId; - - Assert.Equal(default, beforeSave); - Assert.Equal(default, beforeSaveNotId); - - context.SaveChanges(); - - afterSave = blog.Id; - var afterSaveNotId = blog.NotId; - - Assert.NotEqual(default, afterSave); - Assert.NotEqual(default, afterSaveNotId); - Assert.NotEqual(beforeSave, afterSave); - Assert.NotEqual(beforeSaveNotId, afterSaveNotId); - } - - using (var context = new BlogContextServerGuidKey(testStore.Name)) - { - Assert.Equal(afterSave, context.GuidBlogs.Single().Id); - } - } - } - - public class BlogContextServerGuidKey : ContextBase - { - public BlogContextServerGuidKey(string databaseName) - : base(databaseName) - { - } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - modelBuilder - .Entity( - eb => - { - eb.Property(e => e.Id) - .HasDefaultValueSql("GenGUID()"); - eb.Property(e => e.NotId) - .HasDefaultValueSql("GenGUID()"); - }); - } - } - - // Negative cases - [ConditionalFact] - public void Insert_with_explicit_non_default_keys_by_default() - { - using var testStore = JetTestStore.CreateInitialized(DatabaseName); - using var context = new BlogContext(testStore.Name); - context.Database.EnsureCreatedResiliently(); - - context.AddRange( - new Blog { Id = 1, Name = "One Unicorn" }, new Blog { Id = 2, Name = "Two Unicorns" }); - - // DbUpdateException : An error occurred while updating the entries. See the - // inner exception for details. - // SqlException : Cannot insert explicit value for identity column in table - // 'Blog' when IDENTITY_INSERT is set to OFF. - context.Database.CreateExecutionStrategy().Execute( - context, c => { - var updateException = Assert.Throws(() => c.SaveChanges()); - Assert.Single(updateException.Entries); - }); - } - - [ConditionalFact] - public void Insert_with_explicit_default_keys() - { - using var testStore = JetTestStore.CreateInitialized(DatabaseName); - using var context = new BlogContext(testStore.Name); - context.Database.EnsureCreatedResiliently(); - - context.AddRange( - new Blog { Id = 0, Name = "One Unicorn" }, new Blog { Id = 1, Name = "Two Unicorns" }); - - // DbUpdateException : An error occurred while updating the entries. See the - // inner exception for details. - // SqlException : Cannot insert explicit value for identity column in table - // 'Blog' when IDENTITY_INSERT is set to OFF. - var updateException = Assert.Throws(() => context.SaveChanges()); - Assert.Single(updateException.Entries); - } - - public class BlogContext : ContextBase - { - public BlogContext(string databaseName) - : base(databaseName) - { - } - } - - [ConditionalFact] - public void Insert_with_implicit_default_keys() - { - using (var testStore = JetTestStore.CreateInitialized(DatabaseName)) - { - using (var context = new BlogContextSpecifyKeysUsingDefault(testStore.Name)) - { - context.Database.EnsureCreatedResiliently(); - - context.AddRange( - new Blog { Id = 0, Name = "One Unicorn" }, new Blog { Id = 1, Name = "Two Unicorns" }); - - context.SaveChanges(); - } - - using (var context = new BlogContextSpecifyKeysUsingDefault(testStore.Name)) - { - var blogs = context.Blogs.OrderBy(e => e.Id).ToList(); - - Assert.Equal(0, blogs[0].Id); - Assert.Equal(1, blogs[1].Id); - } - } - } - - public class BlogContextSpecifyKeysUsingDefault : ContextBase - { - public BlogContextSpecifyKeysUsingDefault(string databaseName) - : base(databaseName) - { - } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - modelBuilder - .Entity() - .Property(e => e.Id) - .ValueGeneratedNever(); - } - } - - [ConditionalFact] - public void Insert_explicit_value_throws_when_readonly_before_save() - { - using (var testStore = JetTestStore.CreateInitialized(DatabaseName)) - { - using (var context = new BlogContextNonKeyReadOnlyDefaultValue(testStore.Name)) - { - context.Database.EnsureCreatedResiliently(); - - context.AddRange( - new Blog { Name = "One Unicorn" }, - new Blog { Name = "Two Unicorns", CreatedOn = new DateTime(1969, 8, 3, 0, 10, 0) }); - - // The property 'CreatedOn' on entity type 'Blog' is defined to be read-only before it is - // saved, but its value has been set to something other than a temporary or default value. - Assert.Equal( - CoreStrings.PropertyReadOnlyBeforeSave("CreatedOn", "Blog"), - Assert.Throws(() => context.SaveChanges()).Message); - } - } - } - - [ConditionalFact] - public void Insert_explicit_value_into_computed_column() - { - using (var testStore = JetTestStore.CreateInitialized(DatabaseName)) - { - using (var context = new BlogContextComputedColumn(testStore.Name)) - { - context.Database.EnsureCreatedResiliently(); - - context.Add( - new FullNameBlog - { - FirstName = "One", - LastName = "Unicorn", - FullName = "Gerald" - }); - - // The property 'FullName' on entity type 'FullNameBlog' is defined to be read-only before it is - // saved, but its value has been set to something other than a temporary or default value. - Assert.Equal( - CoreStrings.PropertyReadOnlyBeforeSave("FullName", "FullNameBlog"), - Assert.Throws(() => context.SaveChanges()).Message); - } - } - } - - [ConditionalFact] - public void Update_explicit_value_in_computed_column() - { - using (var testStore = JetTestStore.CreateInitialized(DatabaseName)) - { - using (var context = new BlogContextComputedColumn(testStore.Name)) - { - context.Database.EnsureCreatedResiliently(); - - context.Add( - new FullNameBlog { FirstName = "One", LastName = "Unicorn" }); - - context.SaveChanges(); - } - - using (var context = new BlogContextComputedColumn(testStore.Name)) - { - var blog = context.FullNameBlogs.Single(); - - blog.FullName = "The Gorilla"; - - // The property 'FullName' on entity type 'FullNameBlog' is defined to be read-only after it has been saved, - // but its value has been modified or marked as modified. - Assert.Equal( - CoreStrings.PropertyReadOnlyAfterSave("FullName", "FullNameBlog"), - Assert.Throws(() => context.SaveChanges()).Message); - } - } - } - - // Concurrency - [ConditionalFact] - public void Resolve_concurrency() - { - using var testStore = JetTestStore.CreateInitialized(DatabaseName); - using var context = new BlogContextConcurrencyWithRowversion(testStore.Name); - context.Database.EnsureCreatedResiliently(); - - var blog = context.Add( - new ConcurrentBlog { Name = "One Unicorn" }).Entity; - - context.SaveChanges(); - - using var innerContext = new BlogContextConcurrencyWithRowversion(testStore.Name); - var updatedBlog = innerContext.ConcurrentBlogs.Single(); - updatedBlog.Name = "One Pegasus"; - innerContext.SaveChanges(); - var currentTimestamp = updatedBlog.Timestamp.ToArray(); - - try - { - blog.Name = "One Earth Pony"; - context.SaveChanges(); - } - catch (DbUpdateConcurrencyException) - { - // Update original values (and optionally any current values) - // Would normally do this with just one method call - context.Entry(blog).Property(e => e.Id).OriginalValue = updatedBlog.Id; - context.Entry(blog).Property(e => e.Name).OriginalValue = updatedBlog.Name; - context.Entry(blog).Property(e => e.Timestamp).OriginalValue = updatedBlog.Timestamp; - - context.SaveChanges(); - - Assert.NotEqual(blog.Timestamp, currentTimestamp); - } - } - - public class BlogContextConcurrencyWithRowversion : ContextBase - { - public BlogContextConcurrencyWithRowversion(string databaseName) - : base(databaseName) - { - } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - modelBuilder.Entity() - .Property(e => e.Timestamp) - .ValueGeneratedOnAddOrUpdate() - .IsConcurrencyToken(); - } - } - - public class Blog - { - public int Id { get; set; } - public string Name { get; set; } - public DateTime CreatedOn { get; set; } - public int? OtherId { get; set; } - } - - public class NullableKeyBlog - { - public int? Id { get; set; } - public string Name { get; set; } - public DateTime CreatedOn { get; set; } - } - - public class FullNameBlog - { - public int Id { get; set; } - public string FirstName { get; set; } - public string LastName { get; set; } - public string FullName { get; set; } - } - - public class GuidBlog - { - public Guid Id { get; set; } - public string Name { get; set; } - public Guid NotId { get; set; } - } - - public class ConcurrentBlog - { - public int Id { get; set; } - public string Name { get; set; } - public byte[] Timestamp { get; set; } - } - - public abstract class ContextBase : DbContext - { - private readonly string _databaseName; - - protected ContextBase(string databaseName) - { - _databaseName = databaseName; - } - - public DbSet Blogs { get; set; } - public DbSet NullableKeyBlogs { get; set; } - public DbSet FullNameBlogs { get; set; } - public DbSet GuidBlogs { get; set; } - public DbSet ConcurrentBlogs { get; set; } - - protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) - => optionsBuilder - .EnableServiceProviderCaching(false) - .UseJet( - JetTestStore.CreateConnectionString(_databaseName), - TestEnvironment.DataAccessProviderFactory, - b => b.ApplyConfiguration()); - } + protected override byte[] TimestampSentinel + => null; } } diff --git a/test/EFCore.Jet.FunctionalTests/JetValueGenerationScenariosTestBase.cs b/test/EFCore.Jet.FunctionalTests/JetValueGenerationScenariosTestBase.cs new file mode 100644 index 00000000..aa2d0755 --- /dev/null +++ b/test/EFCore.Jet.FunctionalTests/JetValueGenerationScenariosTestBase.cs @@ -0,0 +1,1570 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using EntityFrameworkCore.Jet.FunctionalTests.TestUtilities; +using EntityFrameworkCore.Jet.Internal; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.ChangeTracking; +using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Storage; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Microsoft.EntityFrameworkCore.ValueGeneration.Internal; +using Xunit; + +namespace EntityFrameworkCore.Jet.FunctionalTests; + +#nullable disable + +public abstract class JetValueGenerationScenariosTestBase +{ + //protected static readonly GeometryFactory GeometryFactory = NtsGeometryServices.Instance.CreateGeometryFactory(srid: 4326); + + protected abstract string DatabaseName { get; } + + protected abstract Guid GuidSentinel { get; } + protected abstract int IntSentinel { get; } + protected abstract uint UIntSentinel { get; } + protected abstract IntKey IntKeySentinel { get; } + protected abstract ULongKey ULongKeySentinel { get; } + protected abstract int? NullableIntSentinel { get; } + protected abstract string StringSentinel { get; } + protected abstract DateTime DateTimeSentinel { get; } + protected abstract NeedsConverter NeedsConverterSentinel { get; } + //protected abstract GeometryCollection GeometryCollectionSentinel { get; } + protected abstract byte[] TimestampSentinel { get; } + + // Positive cases + + [ConditionalFact] + public async Task Insert_with_Identity_column() + { + using var testStore = await JetTestStore.CreateInitializedAsync(DatabaseName); + using (var context = new BlogContextIdentity(testStore.Name, OnModelCreating)) + { + context.Database.EnsureCreatedResiliently(); + + context.AddRange(CreateBlog("One Unicorn"), CreateBlog("Two Unicorns")); + + context.SaveChanges(); + } + + using (var context = new BlogContextIdentity(testStore.Name, OnModelCreating)) + { + var blogs = context.Blogs.OrderBy(e => e.Id).ToList(); + + Assert.Equal(1, blogs[0].Id); + Assert.Equal(2, blogs[1].Id); + } + } + + public class BlogContextIdentity(string databaseName, Action modelBuilder) : ContextBase(databaseName, modelBuilder); + + [ConditionalFact] + public async Task Insert_with_default_value_from_sequence() + { + using var testStore = await JetTestStore.CreateInitializedAsync(DatabaseName); + using (var context = new BlogContextDefaultValue(testStore.Name, OnModelCreating)) + { + context.Database.EnsureCreatedResiliently(); + + context.AddRange(CreateBlog("One Unicorn"), CreateBlog("Two Unicorns")); + + context.SaveChanges(); + } + + using (var context = new BlogContextDefaultValue(testStore.Name, OnModelCreating)) + { + var blogs = context.Blogs.OrderBy(e => e.Id).ToList(); + + Assert.Equal(0, blogs[0].Id); + Assert.Equal(1, blogs[1].Id); + } + + using (var context = new BlogContextDefaultValueNoMigrations(testStore.Name, OnModelCreating)) + { + context.AddRange(CreateBlog("One Unicorn"), CreateBlog("Two Unicorns")); + + context.SaveChanges(); + } + + using (var context = new BlogContextDefaultValueNoMigrations(testStore.Name, OnModelCreating)) + { + var blogs = context.Blogs.OrderBy(e => e.Id).ToList(); + + Assert.Equal(0, blogs[0].Id); + Assert.Equal(1, blogs[1].Id); + Assert.Equal(2, blogs[2].Id); + Assert.Equal(3, blogs[3].Id); + } + } + + public class BlogContextDefaultValue(string databaseName, Action modelBuilder) : ContextBase(databaseName, modelBuilder) + { + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder + .HasSequence("MySequence") + .StartsAt(0); + + modelBuilder + .Entity() + .Property(e => e.Id) + .HasDefaultValueSql("next value for MySequence"); + } + } + + public class BlogContextDefaultValueNoMigrations(string databaseName, Action modelBuilder) + : ContextBase(databaseName, modelBuilder) + { + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder + .Entity() + .Property(e => e.Id) + .HasDefaultValue(); + } + } + + [ConditionalFact] + public async Task Insert_with_default_string_value_from_sequence() + { + using var testStore = await JetTestStore.CreateInitializedAsync(DatabaseName); + using (var context = new BlogContextStringDefaultValue(testStore.Name, OnModelCreating, StringSentinel)) + { + context.Database.EnsureCreatedResiliently(); + + context.AddRange( + new BlogWithStringKey { Id = StringSentinel, Name = "One Unicorn" }, + new BlogWithStringKey { Id = StringSentinel, Name = "Two Unicorns" }); + + context.SaveChanges(); + } + + using (var context = new BlogContextStringDefaultValue(testStore.Name, OnModelCreating, StringSentinel)) + { + var blogs = context.StringyBlogs.OrderBy(e => e.Id).ToList(); + + Assert.Equal("i77", blogs[0].Id); + Assert.Equal("i78", blogs[1].Id); + } + } + + public class BlogContextStringDefaultValue(string databaseName, Action modelBuilder, string stringSentinel) + : ContextBase(databaseName, modelBuilder) + { + private readonly string _stringSentinel = stringSentinel; + + public DbSet StringyBlogs { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder + .HasSequence("MyStringSequence") + .StartsAt(77); + + modelBuilder + .Entity() + .Property(e => e.Id) + .HasDefaultValueSql("'i' + CAST((NEXT VALUE FOR MyStringSequence) AS VARCHAR(20))") + .HasSentinel(_stringSentinel); + } + } + + public class BlogWithStringKey + { + public string Id { get; set; } + public string Name { get; set; } + } + + [ConditionalFact] + public async Task Insert_with_key_default_value_from_sequence() + { + using var testStore = await JetTestStore.CreateInitializedAsync(DatabaseName); + using (var context = new BlogContextKeyColumnWithDefaultValue(testStore.Name, OnModelCreating)) + { + context.Database.EnsureCreatedResiliently(); + + context.AddRange(CreateBlog("One Unicorn"), CreateBlog("Two Unicorns")); + + context.SaveChanges(); + } + + using (var context = new BlogContextKeyColumnWithDefaultValue(testStore.Name, OnModelCreating)) + { + var blogs = context.Blogs.OrderBy(e => e.Id).ToList(); + + Assert.Equal(77, blogs[0].Id); + Assert.Equal(78, blogs[1].Id); + } + } + + public class BlogContextKeyColumnWithDefaultValue(string databaseName, Action modelBuilder) + : ContextBase(databaseName, modelBuilder) + { + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder + .HasSequence("MySequence") + .StartsAt(77); + + modelBuilder + .Entity() + .Property(e => e.Id) + .HasDefaultValueSql("next value for MySequence") + .Metadata.SetBeforeSaveBehavior(PropertySaveBehavior.Throw); + } + } + + [ConditionalFact] + public async Task Insert_uint_to_Identity_column_using_value_converter() + { + using var testStore = await JetTestStore.CreateInitializedAsync(DatabaseName); + using (var context = new BlogContextUIntToIdentityUsingValueConverter(testStore.Name, OnModelCreating, UIntSentinel)) + { + context.Database.EnsureCreatedResiliently(); + + context.AddRange( + new BlogWithUIntKey { Id = UIntSentinel, Name = "One Unicorn" }, + new BlogWithUIntKey { Id = UIntSentinel, Name = "Two Unicorns" }); + + context.SaveChanges(); + } + + using (var context = new BlogContextUIntToIdentityUsingValueConverter(testStore.Name, OnModelCreating, UIntSentinel)) + { + var blogs = context.UnsignedBlogs.OrderBy(e => e.Id).ToList(); + + Assert.Equal((uint)1, blogs[0].Id); + Assert.Equal((uint)2, blogs[1].Id); + } + } + + public class BlogContextUIntToIdentityUsingValueConverter(string databaseName, Action modelBuilder, uint uintSentinel) + : ContextBase(databaseName, modelBuilder) + { + private readonly uint _uintSentinel = uintSentinel; + + public DbSet UnsignedBlogs { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder + .Entity() + .Property(e => e.Id) + .HasConversion() + .HasSentinel(_uintSentinel); + } + } + + public class BlogWithUIntKey + { + public uint Id { get; set; } + public string Name { get; set; } + } + + [ConditionalFact] + public async Task Insert_int_enum_to_Identity_column() + { + using var testStore = await JetTestStore.CreateInitializedAsync(DatabaseName); + using (var context = new BlogContextIntEnumToIdentity(testStore.Name, OnModelCreating, IntKeySentinel)) + { + context.Database.EnsureCreatedResiliently(); + + context.AddRange( + new BlogWithIntEnumKey { Id = IntKeySentinel, Name = "One Unicorn" }, + new BlogWithIntEnumKey { Id = IntKeySentinel, Name = "Two Unicorns" }); + + context.SaveChanges(); + } + + using (var context = new BlogContextIntEnumToIdentity(testStore.Name, OnModelCreating, IntKeySentinel)) + { + var blogs = context.EnumBlogs.OrderBy(e => e.Id).ToList(); + + Assert.Equal(1, (int)blogs[0].Id); + Assert.Equal(2, (int)blogs[1].Id); + } + } + + public class BlogContextIntEnumToIdentity(string databaseName, Action modelBuilder, IntKey sentinel) + : ContextBase(databaseName, modelBuilder) + { + private readonly IntKey _sentinel = sentinel; + + public DbSet EnumBlogs { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder + .Entity() + .Property(e => e.Id) + .ValueGeneratedOnAdd() + .HasSentinel(_sentinel); + } + } + + public class BlogWithIntEnumKey + { + public IntKey Id { get; set; } + public string Name { get; set; } + } + + public enum IntKey + { + Zero, + One, + SixSixSeven, + } + + [ConditionalFact] + public async Task Insert_ulong_enum_to_Identity_column() + { + using var testStore = await JetTestStore.CreateInitializedAsync(DatabaseName); + using (var context = new BlogContextULongEnumToIdentity(testStore.Name, OnModelCreating, ULongKeySentinel)) + { + context.Database.EnsureCreatedResiliently(); + + context.AddRange( + new BlogWithULongEnumKey { Id = ULongKeySentinel, Name = "One Unicorn" }, + new BlogWithULongEnumKey { Id = ULongKeySentinel, Name = "Two Unicorns" }); + + context.SaveChanges(); + } + + using (var context = new BlogContextULongEnumToIdentity(testStore.Name, OnModelCreating, ULongKeySentinel)) + { + var blogs = context.EnumBlogs.OrderBy(e => e.Id).ToList(); + + Assert.Equal(1, (int)blogs[0].Id); + Assert.Equal(2, (int)blogs[1].Id); + } + } + + public class BlogContextULongEnumToIdentity(string databaseName, Action modelBuilder, ULongKey sentinel) + : ContextBase(databaseName, modelBuilder) + { + private readonly ULongKey _sentinel = sentinel; + + public DbSet EnumBlogs { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder + .Entity() + .Property(e => e.Id) + .ValueGeneratedOnAdd() + .HasSentinel(_sentinel); + } + } + + public class BlogWithULongEnumKey + { + public ULongKey Id { get; set; } + public string Name { get; set; } + } + + public enum ULongKey : ulong + { + Zero, + Sentinel + } + + [ConditionalFact] + public async Task Insert_string_to_Identity_column_using_value_converter() + { + using var testStore = await JetTestStore.CreateInitializedAsync(DatabaseName); + using (var context = new BlogContextStringToIdentityUsingValueConverter(testStore.Name, OnModelCreating, StringSentinel)) + { + context.Database.EnsureCreatedResiliently(); + + context.AddRange( + new BlogWithStringKey { Id = StringSentinel, Name = "One Unicorn" }, + new BlogWithStringKey { Id = StringSentinel, Name = "Two Unicorns" }); + + context.SaveChanges(); + } + + using (var context = new BlogContextStringToIdentityUsingValueConverter(testStore.Name, OnModelCreating, StringSentinel)) + { + var blogs = context.StringyBlogs.OrderBy(e => e.Id).ToList(); + + Assert.Equal("1", blogs[0].Id); + Assert.Equal("2", blogs[1].Id); + } + } + + public class BlogContextStringToIdentityUsingValueConverter(string databaseName, Action modelBuilder, string sentinel) + : ContextBase(databaseName, modelBuilder) + { + private readonly string _sentinel = sentinel; + + public DbSet StringyBlogs { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + Guid guid; + modelBuilder + .Entity() + .Property(e => e.Id) + .HasValueGenerator() + .HasConversion( + v => Guid.TryParse(v, out guid) + ? default + : int.Parse(v), + v => v.ToString()) + .ValueGeneratedOnAdd() + .HasSentinel(_sentinel); + } + } + + [ConditionalFact] + public async Task Insert_with_explicit_non_default_keys() + { + using var testStore = await JetTestStore.CreateInitializedAsync(DatabaseName); + using (var context = new BlogContextNoKeyGeneration(testStore.Name, OnModelCreating)) + { + context.Database.EnsureCreatedResiliently(); + + context.AddRange( + new Blog { Id = 66, Name = "One Unicorn" }, new Blog { Id = 67, Name = "Two Unicorns" }); + + context.SaveChanges(); + } + + using (var context = new BlogContextNoKeyGeneration(testStore.Name, OnModelCreating)) + { + var blogs = context.Blogs.OrderBy(e => e.Id).ToList(); + + Assert.Equal(66, blogs[0].Id); + Assert.Equal(67, blogs[1].Id); + } + } + + public class BlogContextNoKeyGeneration(string databaseName, Action modelBuilder) + : ContextBase(databaseName, modelBuilder) + { + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder + .Entity() + .Property(e => e.Id) + .ValueGeneratedNever(); + } + } + + [ConditionalFact] + public async Task Insert_with_explicit_with_default_keys() + { + using var testStore = await JetTestStore.CreateInitializedAsync(DatabaseName); + using (var context = new BlogContextNoKeyGenerationNullableKey(testStore.Name, OnModelCreating, NullableIntSentinel)) + { + context.Database.EnsureCreatedResiliently(); + + context.AddRange( + new NullableKeyBlog { Id = 0, Name = "One Unicorn" }, + new NullableKeyBlog { Id = 1, Name = "Two Unicorns" }); + + context.SaveChanges(); + } + + using (var context = new BlogContextNoKeyGenerationNullableKey(testStore.Name, OnModelCreating, NullableIntSentinel)) + { + var blogs = context.NullableKeyBlogs.OrderBy(e => e.Id).ToList(); + + Assert.Equal(0, blogs[0].Id); + Assert.Equal(1, blogs[1].Id); + } + } + + public class BlogContextNoKeyGenerationNullableKey(string databaseName, Action modelBuilder, int? sentinel) + : ContextBase(databaseName, modelBuilder) + { + private readonly int? _sentinel = sentinel; + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder + .Entity() + .Property(e => e.Id) + .ValueGeneratedNever() + .HasSentinel(_sentinel); + } + } + + [ConditionalFact] + public async Task Insert_with_non_key_default_value() + { + using var testStore = await JetTestStore.CreateInitializedAsync(DatabaseName); + + using (var context = new BlogContextNonKeyDefaultValue(testStore.Name, OnModelCreating)) + { + context.Database.EnsureCreatedResiliently(); + + var blogs = new List + { + new() + { + Id = IntSentinel, + Name = "One Unicorn", + CreatedOn = DateTimeSentinel, + NeedsConverter = NeedsConverterSentinel + }, + new() + { + Id = IntSentinel, + Name = "Two Unicorns", + CreatedOn = new DateTime(1969, 8, 3, 0, 10, 0), + NeedsConverter = new NeedsConverter(111) + } + }; + + context.AddRange(blogs); + + context.SaveChanges(); + + Assert.NotEqual(new DateTime(), blogs[0].CreatedOn); + Assert.NotEqual(new DateTime(), blogs[1].CreatedOn); + Assert.Equal(111, blogs[1].NeedsConverter.Value); + } + + using (var context = new BlogContextNonKeyDefaultValue(testStore.Name, OnModelCreating)) + { + var blogs = context.Blogs.OrderBy(e => e.Name).ToList(); + Assert.Equal(3, blogs.Count); + + Assert.NotEqual(new DateTime(), blogs[0].CreatedOn); + Assert.Equal(new DateTime(1969, 8, 3, 0, 10, 0), blogs[1].CreatedOn); + Assert.Equal(new DateTime(1974, 8, 3, 0, 10, 0), blogs[2].CreatedOn); + + blogs[0].CreatedOn = new DateTime(1973, 9, 3, 0, 10, 0); + + blogs[1].Name = "X Unicorns"; + blogs[1].NeedsConverter = new NeedsConverter(222); + + blogs[2].Name = "Y Unicorns"; + blogs[2].NeedsConverter = new NeedsConverter(333); + + context.SaveChanges(); + } + + using (var context = new BlogContextNonKeyDefaultValue(testStore.Name, OnModelCreating)) + { + var blogs = context.Blogs.OrderBy(e => e.Name).ToList(); + Assert.Equal(3, blogs.Count); + + Assert.Equal(new DateTime(1973, 9, 3, 0, 10, 0), blogs[0].CreatedOn); + Assert.Equal(new DateTime(1969, 8, 3, 0, 10, 0), blogs[1].CreatedOn); + Assert.Equal(222, blogs[1].NeedsConverter.Value); + Assert.Equal(new DateTime(1974, 8, 3, 0, 10, 0), blogs[2].CreatedOn); + Assert.Equal(333, blogs[2].NeedsConverter.Value); + } + } + + /*[ConditionalFact] + public async Task Insert_with_non_key_default_spatial_value() + { + using var testStore = await JetTestStore.CreateInitializedAsync(DatabaseName); + + using (var context = new BlogContextNonKeyDefaultSpatialValue(testStore.Name, OnModelCreating)) + { + context.Database.EnsureCreatedResiliently(); + + var blogs = new List + { + new() + { + Id = IntSentinel, + Name = "One Unicorn", + GeometryCollection = GeometryCollectionSentinel + }, + new() + { + Id = IntSentinel, + Name = "Two Unicorns", + GeometryCollection = GeometryFactory.CreateGeometryCollection( + [GeometryFactory.CreatePoint(new Coordinate(1, 3))]) + } + }; + + context.AddRange(blogs); + + context.SaveChanges(); + + var point = ((Point)blogs[1].GeometryCollection.Geometries[0]); + Assert.Equal(1, point.X); + Assert.Equal(3, point.Y); + } + + using (var context = new BlogContextNonKeyDefaultSpatialValue(testStore.Name, OnModelCreating)) + { + var blogs = context.SpatialBlogs.OrderBy(e => e.Name).ToList(); + Assert.Equal(3, blogs.Count); + + var point1 = ((Point)blogs[1].GeometryCollection.Geometries[0]); + Assert.Equal(1, point1.X); + Assert.Equal(3, point1.Y); + + var point2 = ((Point)blogs[2].GeometryCollection.Geometries[0]); + Assert.Equal(1, point2.X); + Assert.Equal(2, point2.Y); + + blogs[1].GeometryCollection.Geometries[0] = GeometryFactory.CreatePoint(new Coordinate(1, 11)); + blogs[2].GeometryCollection.Geometries[0] = GeometryFactory.CreatePoint(new Coordinate(1, 22)); + + context.SaveChanges(); + } + + using (var context = new BlogContextNonKeyDefaultSpatialValue(testStore.Name, OnModelCreating)) + { + var blogs = context.SpatialBlogs.OrderBy(e => e.Name).ToList(); + Assert.Equal(3, blogs.Count); + + var point1 = ((Point)blogs[1].GeometryCollection.Geometries[0]); + Assert.Equal(1, point1.X); + Assert.Equal(11, point1.Y); + + var point2 = ((Point)blogs[2].GeometryCollection.Geometries[0]); + Assert.Equal(1, point2.X); + Assert.Equal(22, point2.Y); + } + }*/ + + public class BlogContextNonKeyDefaultValue(string databaseName, Action modelBuilder) + : ContextBase(databaseName, modelBuilder) + { + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder.Entity( + b => + { + b.Property(e => e.CreatedOn).HasDefaultValueSql("NOW()"); + + b.HasData( + new Blog + { + Id = 9979, + Name = "W Unicorns", + CreatedOn = new DateTime(1974, 8, 3, 0, 10, 0), + NeedsConverter = new NeedsConverter(111), + }); + }); + } + } + + /*public class BlogContextNonKeyDefaultSpatialValue(string databaseName, Action modelBuilder) + : ContextBase(databaseName, modelBuilder) + { + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder.Entity( + b => + { + b.Property(e => e.GeometryCollection).HasDefaultValue(GeometryFactory.CreateGeometryCollection()); + + b.HasData( + new BlogWithSpatial + { + Id = 9979, + Name = "W Unicorns", + GeometryCollection = GeometryFactory.CreateGeometryCollection( + [GeometryFactory.CreatePoint(new Coordinate(1, 2))]) + }); + }); + } + }*/ + + [ConditionalFact] + public async Task Insert_with_non_key_default_value_readonly() + { + using var testStore = await JetTestStore.CreateInitializedAsync(DatabaseName); + using (var context = new BlogContextNonKeyReadOnlyDefaultValue(testStore.Name, OnModelCreating, IntSentinel, DateTimeSentinel)) + { + context.Database.EnsureCreatedResiliently(); + + context.AddRange( + new Blog + { + Id = IntSentinel, + Name = "One Unicorn", + CreatedOn = DateTimeSentinel + }, + new Blog + { + Id = IntSentinel, + Name = "Two Unicorns", + CreatedOn = DateTimeSentinel + }); + + context.SaveChanges(); + + Assert.NotEqual(new DateTime(), context.Blogs.ToList()[0].CreatedOn); + } + + DateTime dateTime0; + + using (var context = new BlogContextNonKeyReadOnlyDefaultValue(testStore.Name, OnModelCreating, IntSentinel, DateTimeSentinel)) + { + var blogs = context.Blogs.OrderBy(e => e.Id).ToList(); + + dateTime0 = blogs[0].CreatedOn; + + Assert.NotEqual(new DateTime(), dateTime0); + Assert.NotEqual(new DateTime(), blogs[1].CreatedOn); + + blogs[0].Name = "One Pegasus"; + blogs[1].CreatedOn = new DateTime(1973, 9, 3, 0, 10, 0); + + context.SaveChanges(); + } + + using (var context = new BlogContextNonKeyReadOnlyDefaultValue(testStore.Name, OnModelCreating, IntSentinel, DateTimeSentinel)) + { + var blogs = context.Blogs.OrderBy(e => e.Id).ToList(); + + Assert.Equal(dateTime0, blogs[0].CreatedOn); + Assert.Equal(new DateTime(1973, 9, 3, 0, 10, 0), blogs[1].CreatedOn); + } + } + + public class BlogContextNonKeyReadOnlyDefaultValue( + string databaseName, + Action modelBuilder, + int intSentinel, + DateTime dateTimeSentinel) : ContextBase(databaseName, modelBuilder) + { + private readonly int _intSentinel = intSentinel; + private readonly DateTime _dateTimeSentinel = dateTimeSentinel; + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder.Entity( + b => + { + b.Property(e => e.Id).HasSentinel(_intSentinel); + + var property = b.Property(e => e.CreatedOn).HasDefaultValueSql("NOW()").HasSentinel(_dateTimeSentinel); + property.Metadata.SetBeforeSaveBehavior(PropertySaveBehavior.Throw); + }); + } + } + + [ConditionalFact] + public async Task Insert_and_update_with_computed_column() + { + using var testStore = await JetTestStore.CreateInitializedAsync(DatabaseName); + using (var context = new BlogContextComputedColumn(testStore.Name, OnModelCreating, IntSentinel, StringSentinel)) + { + context.Database.EnsureCreatedResiliently(); + + var blog = context.Add( + new FullNameBlog + { + Id = IntSentinel, + FirstName = "One", + LastName = "Unicorn", + FullName = StringSentinel + }).Entity; + + context.SaveChanges(); + + Assert.Equal("One Unicorn", blog.FullName); + } + + using (var context = new BlogContextComputedColumn(testStore.Name, OnModelCreating, IntSentinel, StringSentinel)) + { + var blog = context.FullNameBlogs.Single(); + + Assert.Equal("One Unicorn", blog.FullName); + + blog.LastName = "Pegasus"; + + context.SaveChanges(); + + Assert.Equal("One Pegasus", blog.FullName); + } + } + + public class BlogContextComputedColumn(string databaseName, Action modelBuilder, int intSentinel, string stringSentinel) + : ContextBase(databaseName, modelBuilder) + { + private readonly int _intSentinel = intSentinel; + private readonly string _stringSentinel = stringSentinel; + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder.Entity( + b => + { + b.Property(e => e.Id).HasSentinel(_intSentinel); + + var property = b.Property(e => e.FullName) + .HasComputedColumnSql("FirstName + ' ' + LastName") + .HasSentinel(_stringSentinel) + .Metadata; + + property.SetBeforeSaveBehavior(PropertySaveBehavior.Throw); + property.SetAfterSaveBehavior(PropertySaveBehavior.Throw); + }); + } + } + + public class BlogContextComputedColumnWithTriggerMetadata( + string databaseName, + Action modelBuilder, + int intSentinel, + string stringSentinel) : BlogContextComputedColumn(databaseName, modelBuilder, intSentinel, stringSentinel) + { + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder.Entity().ToTable(tb => tb.HasTrigger("SomeTrigger")); + } + } + + /*// #6044 + [ConditionalFact] + public async Task Insert_and_update_with_computed_column_with_function() + { + using var testStore = await JetTestStore.CreateInitializedAsync(DatabaseName); + using (var context = new BlogContextComputedColumnWithFunction(testStore.Name, OnModelCreating, IntSentinel, StringSentinel)) + { + context.Database.ExecuteSqlRaw + ( + @"CREATE FUNCTION +[dbo].[GetFullName](@First NVARCHAR(MAX), @Second NVARCHAR(MAX)) +RETURNS NVARCHAR(MAX) WITH SCHEMABINDING AS BEGIN RETURN @First + @Second END"); + + context.GetService().CreateTables(); + } + + using (var context = new BlogContextComputedColumnWithFunction(testStore.Name, OnModelCreating, IntSentinel, StringSentinel)) + { + var blog = context.Add( + new FullNameBlog + { + Id = IntSentinel, + FirstName = "One", + LastName = "Unicorn", + FullName = StringSentinel + }).Entity; + + context.SaveChanges(); + + Assert.Equal("OneUnicorn", blog.FullName); + } + + using (var context = new BlogContextComputedColumnWithFunction(testStore.Name, OnModelCreating, IntSentinel, StringSentinel)) + { + var blog = context.FullNameBlogs.Single(); + + Assert.Equal("OneUnicorn", blog.FullName); + + blog.LastName = "Pegasus"; + + context.SaveChanges(); + + Assert.Equal("OnePegasus", blog.FullName); + } + } + + public class BlogContextComputedColumnWithFunction( + string databaseName, + Action modelBuilder, + int intSentinel, + string stringSentinel) : ContextBase(databaseName, modelBuilder) + { + private readonly int _intSentinel = intSentinel; + private readonly string _stringSentinel = stringSentinel; + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder.Entity( + b => + { + b.Property(e => e.Id).HasSentinel(_intSentinel); + + var property = modelBuilder.Entity() + .Property(e => e.FullName) + .HasComputedColumnSql("[dbo].[GetFullName]([FirstName], [LastName])") + .HasSentinel(_stringSentinel) + .Metadata; + + property.SetAfterSaveBehavior(PropertySaveBehavior.Throw); + }); + } + } + + // #6044 + [ConditionalFact] + public async Task Insert_and_update_with_computed_column_with_querying_function() + { + JetTestStore testStore = null; + try + { + testStore = await JetTestStore.CreateInitializedAsync(DatabaseName); + using (var context = new BlogContextComputedColumnWithTriggerMetadata( + testStore.Name, OnModelCreating, IntSentinel, StringSentinel)) + { + context.GetService().CreateTables(); + + context.Database.ExecuteSqlRaw("ALTER TABLE dbo.FullNameBlogs DROP COLUMN FullName;"); + + context.Database.ExecuteSqlRaw( + @"CREATE FUNCTION [dbo].[GetFullName](@Id int) +RETURNS nvarchar(max) WITH SCHEMABINDING AS +BEGIN + DECLARE @FullName nvarchar(max); + SELECT @FullName = [FirstName] + [LastName] FROM [dbo].[FullNameBlogs] WHERE [Id] = @Id; + RETURN @FullName +END"); + + context.Database.ExecuteSqlRaw("ALTER TABLE dbo.FullNameBlogs ADD FullName AS [dbo].[GetFullName]([Id]); "); + } + + using (var context = new BlogContextComputedColumnWithTriggerMetadata( + testStore.Name, OnModelCreating, IntSentinel, StringSentinel)) + { + var blog = context.Add( + new FullNameBlog + { + Id = IntSentinel, + FirstName = "One", + LastName = "Unicorn", + FullName = StringSentinel + }).Entity; + + context.SaveChanges(); + + Assert.Equal("OneUnicorn", blog.FullName); + } + + using (var context = new BlogContextComputedColumnWithTriggerMetadata( + testStore.Name, OnModelCreating, IntSentinel, StringSentinel)) + { + var blog = context.FullNameBlogs.Single(); + + Assert.Equal("OneUnicorn", blog.FullName); + + blog.LastName = "Pegasus"; + + context.SaveChanges(); + + Assert.Equal("OnePegasus", blog.FullName); + } + + using (var context = new BlogContextComputedColumnWithTriggerMetadata( + testStore.Name, OnModelCreating, IntSentinel, StringSentinel)) + { + var blog1 = context.Add( + new FullNameBlog + { + Id = IntSentinel, + FirstName = "Hank", + LastName = "Unicorn", + FullName = StringSentinel + }).Entity; + + var blog2 = context.Add( + new FullNameBlog + { + Id = IntSentinel, + FirstName = "Jeff", + LastName = "Unicorn", + FullName = StringSentinel + }).Entity; + + context.SaveChanges(); + + Assert.Equal("HankUnicorn", blog1.FullName); + Assert.Equal("JeffUnicorn", blog2.FullName); + } + } + finally + { + using var context = new BlogContextComputedColumnWithTriggerMetadata( + DatabaseName, OnModelCreating, IntSentinel, StringSentinel); + context.Database.ExecuteSqlRaw("ALTER TABLE dbo.FullNameBlogs DROP COLUMN FullName;"); + context.Database.ExecuteSqlRaw("DROP FUNCTION [dbo].[GetFullName];"); + testStore?.Dispose(); + } + }*/ + + [ConditionalFact] + public async Task Insert_with_client_generated_GUID_key() + { + using var testStore = await JetTestStore.CreateInitializedAsync(DatabaseName); + Guid afterSave; + using (var context = new BlogContextClientGuidKey(testStore.Name, OnModelCreating, GuidSentinel)) + { + context.Database.EnsureCreatedResiliently(); + + var blog = context.Add( + new GuidBlog + { + Id = GuidSentinel, + Name = "One Unicorn", + NotId = GuidSentinel + }).Entity; + + var beforeSave = blog.Id; + var beforeSaveNotId = blog.NotId; + + Assert.NotEqual(default, beforeSave); + Assert.NotEqual(default, beforeSaveNotId); + + context.SaveChanges(); + + afterSave = blog.Id; + var afterSaveNotId = blog.NotId; + + Assert.Equal(beforeSave, afterSave); + Assert.Equal(beforeSaveNotId, afterSaveNotId); + } + + using (var context = new BlogContextClientGuidKey(testStore.Name, OnModelCreating, GuidSentinel)) + { + Assert.Equal(afterSave, context.GuidBlogs.Single().Id); + } + } + + public class BlogContextClientGuidKey(string databaseName, Action modelBuilder, Guid sentinel) + : ContextBase(databaseName, modelBuilder) + { + private readonly Guid _sentinel = sentinel; + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder.Entity( + eb => + { + eb.HasAlternateKey(e => e.NotId); + eb.Property(e => e.NotId).ValueGeneratedOnAdd().HasSentinel(_sentinel); + eb.Property(e => e.Id).HasSentinel(_sentinel); + }); + } + } + + [ConditionalFact] + public async Task Insert_with_ValueGeneratedOnAdd_GUID_nonkey_property_throws() + { + using var testStore = await JetTestStore.CreateInitializedAsync(DatabaseName); + using var context = new BlogContextClientGuidNonKey(testStore.Name, OnModelCreating, GuidSentinel); + context.Database.EnsureCreatedResiliently(); + + var blog = context.Add( + new GuidBlog + { + Id = GuidSentinel, + Name = "One Unicorn", + NotId = GuidSentinel + }).Entity; + + Assert.Equal(GuidSentinel, blog.NotId); + + // No value set on a required column + var updateException = Assert.Throws(() => context.SaveChanges()); + Assert.Single(updateException.Entries); + } + + public class BlogContextClientGuidNonKey(string databaseName, Action modelBuilder, Guid sentinel) + : ContextBase(databaseName, modelBuilder) + { + private readonly Guid _sentinel = sentinel; + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder.Entity( + b => + { + b.Property(e => e.Id).HasSentinel(_sentinel); + b.Property(e => e.NotId).ValueGeneratedOnAdd().HasSentinel(_sentinel); + }); + } + } + + [ConditionalFact] + public async Task Insert_with_server_generated_GUID_key() + { + using var testStore = await JetTestStore.CreateInitializedAsync(DatabaseName); + Guid afterSave; + using (var context = new BlogContextServerGuidKey(testStore.Name, OnModelCreating, GuidSentinel)) + { + context.Database.EnsureCreatedResiliently(); + + var blog = context.Add( + new GuidBlog + { + Id = GuidSentinel, + Name = "One Unicorn", + NotId = GuidSentinel + }).Entity; + + var beforeSave = blog.Id; + var beforeSaveNotId = blog.NotId; + + Assert.Equal(GuidSentinel, beforeSave); + Assert.Equal(GuidSentinel, beforeSaveNotId); + + context.SaveChanges(); + + afterSave = blog.Id; + var afterSaveNotId = blog.NotId; + + Assert.NotEqual(GuidSentinel, afterSave); + Assert.NotEqual(GuidSentinel, afterSaveNotId); + Assert.NotEqual(beforeSave, afterSave); + Assert.NotEqual(beforeSaveNotId, afterSaveNotId); + } + + using (var context = new BlogContextServerGuidKey(testStore.Name, OnModelCreating, GuidSentinel)) + { + Assert.Equal(afterSave, context.GuidBlogs.Single().Id); + } + } + + public class BlogContextServerGuidKey(string databaseName, Action modelBuilder, Guid sentinel) + : ContextBase(databaseName, modelBuilder) + { + private readonly Guid _sentinel = sentinel; + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder + .Entity( + eb => + { + eb.Property(e => e.Id).HasDefaultValueSql("GenGUID()").HasSentinel(_sentinel); + eb.Property(e => e.NotId).HasDefaultValueSql("GenGUID()").HasSentinel(_sentinel); + }); + } + } + + // Negative cases + [ConditionalFact] + public async Task Insert_with_explicit_non_default_keys_by_default() + { + using var testStore = await JetTestStore.CreateInitializedAsync(DatabaseName); + using var context = new BlogContext(testStore.Name, OnModelCreating); + context.Database.EnsureCreatedResiliently(); + + context.AddRange( + new Blog { Id = 1, Name = "One Unicorn" }, new Blog { Id = 2, Name = "Two Unicorns" }); + + // DbUpdateException : An error occurred while updating the entries. See the + // inner exception for details. + // SqlException : Cannot insert explicit value for identity column in table + // 'Blog' when IDENTITY_INSERT is set to OFF. + context.Database.CreateExecutionStrategy().Execute(context, c => Assert.Throws(() => c.SaveChanges())); + } + + [ConditionalFact] + public async Task Insert_with_explicit_default_keys() + { + using var testStore = await JetTestStore.CreateInitializedAsync(DatabaseName); + using var context = new BlogContext(testStore.Name, OnModelCreating); + context.Database.EnsureCreatedResiliently(); + + context.AddRange( + new Blog { Id = IntSentinel, Name = "One Unicorn" }, new Blog { Id = 1, Name = "Two Unicorns" }); + + // DbUpdateException : An error occurred while updating the entries. See the + // inner exception for details. + // SqlException : Cannot insert explicit value for identity column in table + // 'Blog' when IDENTITY_INSERT is set to OFF. + var updateException = Assert.Throws(() => context.SaveChanges()); + Assert.Single(updateException.Entries); + } + + public class BlogContext(string databaseName, Action modelBuilder) : ContextBase(databaseName, modelBuilder); + + [ConditionalFact] + public async Task Insert_with_implicit_default_keys() + { + using var testStore = await JetTestStore.CreateInitializedAsync(DatabaseName); + using (var context = new BlogContextSpecifyKeysUsingDefault(testStore.Name, OnModelCreating, IntSentinel)) + { + context.Database.EnsureCreatedResiliently(); + + context.AddRange( + new Blog { Id = 0, Name = "One Unicorn" }, new Blog { Id = 667, Name = "Two Unicorns" }); + + context.SaveChanges(); + } + + using (var context = new BlogContextSpecifyKeysUsingDefault(testStore.Name, OnModelCreating, IntSentinel)) + { + var blogs = context.Blogs.OrderBy(e => e.Id).ToList(); + + Assert.Equal(0, blogs[0].Id); + Assert.Equal(667, blogs[1].Id); + } + } + + public class BlogContextSpecifyKeysUsingDefault(string databaseName, Action modelBuilder, int sentinel) + : ContextBase(databaseName, modelBuilder) + { + private readonly int _sentinel = sentinel; + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder + .Entity() + .Property(e => e.Id) + .ValueGeneratedNever() + .HasSentinel(_sentinel); + } + } + + [ConditionalFact] + public async Task Insert_explicit_value_throws_when_readonly_sequence_before_save() + { + using var testStore = await JetTestStore.CreateInitializedAsync(DatabaseName); + using var context = new BlogContextReadOnlySequenceKeyColumnWithDefaultValue(testStore.Name, OnModelCreating, IntSentinel); + context.Database.EnsureCreatedResiliently(); + + context.AddRange( + new Blog { Id = 1, Name = "One Unicorn" }, new Blog { Id = IntSentinel, Name = "Two Unicorns" }); + + // The property 'Id' on entity type 'Blog' is defined to be read-only before it is + // saved, but its value has been set to something other than a temporary or default value. + Assert.Equal( + CoreStrings.PropertyReadOnlyBeforeSave("Id", "Blog"), + Assert.Throws(() => context.SaveChanges()).Message); + } + + public class BlogContextReadOnlySequenceKeyColumnWithDefaultValue(string databaseName, Action modelBuilder, int sentinel) + : ContextBase(databaseName, modelBuilder) + { + private readonly int _sentinel = sentinel; + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder.HasSequence("MySequence"); + + var property = modelBuilder + .Entity() + .Property(e => e.Id) + .HasDefaultValueSql("next value for MySequence") + .HasSentinel(_sentinel); + + property.Metadata.SetBeforeSaveBehavior(PropertySaveBehavior.Throw); + } + } + + [ConditionalFact] + public async Task Insert_explicit_value_throws_when_readonly_before_save() + { + using var testStore = await JetTestStore.CreateInitializedAsync(DatabaseName); + using var context = new BlogContextNonKeyReadOnlyDefaultValue(testStore.Name, OnModelCreating, IntSentinel, DateTimeSentinel); + context.Database.EnsureCreatedResiliently(); + + context.AddRange( + new Blog + { + Id = IntSentinel, + Name = "One Unicorn", + CreatedOn = DateTimeSentinel + }, + new Blog + { + Id = IntSentinel, + Name = "Two Unicorns", + CreatedOn = new DateTime(1973, 8, 3, 0, 10, 0) + }); + + // The property 'CreatedOn' on entity type 'Blog' is defined to be read-only before it is + // saved, but its value has been set to something other than a temporary or default value. + Assert.Equal( + CoreStrings.PropertyReadOnlyBeforeSave("CreatedOn", "Blog"), + Assert.Throws(() => context.SaveChanges()).Message); + } + + [ConditionalFact] + public async Task Insert_explicit_value_into_computed_column() + { + using var testStore = await JetTestStore.CreateInitializedAsync(DatabaseName); + using var context = new BlogContextComputedColumn(testStore.Name, OnModelCreating, IntSentinel, StringSentinel); + context.Database.EnsureCreatedResiliently(); + + context.Add( + new FullNameBlog + { + Id = IntSentinel, + FirstName = "One", + LastName = "Unicorn", + FullName = "Gerald" + }); + + // The property 'FullName' on entity type 'FullNameBlog' is defined to be read-only before it is + // saved, but its value has been set to something other than a temporary or default value. + Assert.Equal( + CoreStrings.PropertyReadOnlyBeforeSave("FullName", "FullNameBlog"), + Assert.Throws(() => context.SaveChanges()).Message); + } + + [ConditionalFact] + public async Task Update_explicit_value_in_computed_column() + { + using var testStore = await JetTestStore.CreateInitializedAsync(DatabaseName); + using (var context = new BlogContextComputedColumn(testStore.Name, OnModelCreating, IntSentinel, StringSentinel)) + { + context.Database.EnsureCreatedResiliently(); + + context.Add( + new FullNameBlog + { + Id = IntSentinel, + FirstName = "One", + LastName = "Unicorn", + FullName = StringSentinel + }); + + context.SaveChanges(); + } + + using (var context = new BlogContextComputedColumn(testStore.Name, OnModelCreating, IntSentinel, StringSentinel)) + { + var blog = context.FullNameBlogs.Single(); + + blog.FullName = "The Gorilla"; + + // The property 'FullName' on entity type 'FullNameBlog' is defined to be read-only after it has been saved, + // but its value has been modified or marked as modified. + Assert.Equal( + CoreStrings.PropertyReadOnlyAfterSave("FullName", "FullNameBlog"), + Assert.Throws(() => context.SaveChanges()).Message); + } + } + + // Concurrency + [ConditionalFact] + public async Task Resolve_concurrency() + { + using var testStore = await JetTestStore.CreateInitializedAsync(DatabaseName); + using var context = new BlogContextConcurrencyWithRowversion(testStore.Name, OnModelCreating, IntSentinel, TimestampSentinel); + context.Database.EnsureCreatedResiliently(); + + var blog = context.Add( + new ConcurrentBlog + { + Id = IntSentinel, + Name = "One Unicorn", + Timestamp = TimestampSentinel + }).Entity; + + context.SaveChanges(); + + using var innerContext = new BlogContextConcurrencyWithRowversion(testStore.Name, OnModelCreating, IntSentinel, TimestampSentinel); + var updatedBlog = innerContext.ConcurrentBlogs.Single(); + updatedBlog.Name = "One Pegasus"; + innerContext.SaveChanges(); + var currentTimestamp = updatedBlog.Timestamp.ToArray(); + + try + { + blog.Name = "One Earth Pony"; + context.SaveChanges(); + } + catch (DbUpdateConcurrencyException) + { + // Update original values (and optionally any current values) + // Would normally do this with just one method call + context.Entry(blog).Property(e => e.Id).OriginalValue = updatedBlog.Id; + context.Entry(blog).Property(e => e.Name).OriginalValue = updatedBlog.Name; + context.Entry(blog).Property(e => e.Timestamp).OriginalValue = updatedBlog.Timestamp; + + context.SaveChanges(); + + Assert.NotEqual(blog.Timestamp, currentTimestamp); + } + } + + public class BlogContextConcurrencyWithRowversion( + string databaseName, + Action modelBuilder, + int intSentinel, + byte[] timestampSentinel) : ContextBase(databaseName, modelBuilder) + { + private readonly int _intSentinel = intSentinel; + private readonly byte[] _timestampSentinel = timestampSentinel; + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder.Entity( + b => + { + b.Property(e => e.Id).HasSentinel(_intSentinel); + b.Property(e => e.Timestamp) + .ValueGeneratedOnAddOrUpdate() + .IsConcurrencyToken() + .HasSentinel(_timestampSentinel); + }); + } + } + + protected Blog CreateBlog(string name) + => new() + { + Id = IntSentinel, + Name = name, + CreatedOn = DateTimeSentinel, + NeedsConverter = NeedsConverterSentinel, + OtherId = NullableIntSentinel + }; + + public class Blog + { + public int Id { get; set; } + public string Name { get; set; } + public DateTime CreatedOn { get; set; } + public NeedsConverter NeedsConverter { get; set; } + public int? OtherId { get; set; } + } + + /*protected BlogWithSpatial CreateBlogWithSpatial(string name) + => new() + { + Id = IntSentinel, + Name = name, + GeometryCollection = GeometryCollectionSentinel, + }; + + public class BlogWithSpatial + { + public int Id { get; set; } + public string Name { get; set; } + public GeometryCollection GeometryCollection { get; set; } + }*/ + + public class NeedsConverter(int value) + { + public int Value { get; } = value; + + public override bool Equals(object obj) + => throw new InvalidOperationException(); + + public override int GetHashCode() + => throw new InvalidOperationException(); + } + + public class NullableKeyBlog + { + public int? Id { get; set; } + public string Name { get; set; } + public DateTime CreatedOn { get; set; } + } + + public class FullNameBlog + { + public int Id { get; set; } + public string FirstName { get; set; } + public string LastName { get; set; } + public string FullName { get; set; } + } + + public class GuidBlog + { + public Guid Id { get; set; } + public string Name { get; set; } + public Guid NotId { get; set; } + } + + public class ConcurrentBlog + { + public int Id { get; set; } + public string Name { get; set; } + public byte[] Timestamp { get; set; } + } + + protected virtual void OnModelCreating(ModelBuilder modelBuilder) + => modelBuilder.Entity() + .Property(e => e.NeedsConverter) + .HasConversion( + v => v.Value, + v => new NeedsConverter(v), + new ValueComparer( + (l, r) => (l == null && r == null) || (l != null && r != null && l.Value == r.Value), + v => v.Value.GetHashCode(), + v => new NeedsConverter(v.Value))) + .HasDefaultValue(new NeedsConverter(999)); + + public abstract class ContextBase : DbContext + { + private readonly string _databaseName; + private readonly Action _modelBuilder; + + protected ContextBase(string databaseName, Action modelBuilder) + { + _databaseName = databaseName; + _modelBuilder = modelBuilder; + } + + public DbSet Blogs { get; set; } + //public DbSet SpatialBlogs { get; set; } + public DbSet NullableKeyBlogs { get; set; } + public DbSet FullNameBlogs { get; set; } + public DbSet GuidBlogs { get; set; } + public DbSet ConcurrentBlogs { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + => _modelBuilder(modelBuilder); + + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + => optionsBuilder + .EnableServiceProviderCaching(false) + .UseJet( + JetTestStore.CreateConnectionString(_databaseName), + b => b.ApplyConfiguration()); + } + + public static IEnumerable IsAsyncData = new object[][] { [false], [true] }; +} diff --git a/test/EFCore.Jet.FunctionalTests/JsonTypesJetTest.cs b/test/EFCore.Jet.FunctionalTests/JsonTypesJetTest.cs index 58172690..8e2b1fee 100644 --- a/test/EFCore.Jet.FunctionalTests/JsonTypesJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/JsonTypesJetTest.cs @@ -5,8 +5,12 @@ using System; using System.Collections.Generic; +using System.Threading.Tasks; using EntityFrameworkCore.Jet.FunctionalTests.TestUtilities; +using EntityFrameworkCore.Jet.Infrastructure; using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.EntityFrameworkCore.TestUtilities; using Xunit; using Xunit.Sdk; @@ -14,28 +18,28 @@ namespace EntityFrameworkCore.Jet.FunctionalTests; public class JsonTypesJetTest : JsonTypesRelationalTestBase { - public override void Can_read_write_ulong_enum_JSON_values(EnumU64 value, string json) + public override async Task Can_read_write_ulong_enum_JSON_values(EnumU64 value, string json) { if (value == EnumU64.Max) { json = """{"Prop":-1}"""; // Because ulong is converted to long on Jet } - base.Can_read_write_ulong_enum_JSON_values(value, json); + await base.Can_read_write_ulong_enum_JSON_values(value, json); } - public override void Can_read_write_nullable_ulong_enum_JSON_values(object? value, string json) + public override async Task Can_read_write_nullable_ulong_enum_JSON_values(object? value, string json) { if (Equals(value, ulong.MaxValue)) { json = """{"Prop":-1}"""; // Because ulong is converted to long on Jet } - base.Can_read_write_nullable_ulong_enum_JSON_values(value, json); + await base.Can_read_write_nullable_ulong_enum_JSON_values(value, json); } - public override void Can_read_write_collection_of_ulong_enum_JSON_values() - => Can_read_and_write_JSON_value>( + public override async Task Can_read_write_collection_of_ulong_enum_JSON_values() + => await Can_read_and_write_JSON_value>( nameof(EnumU64CollectionType.EnumU64), new List { @@ -48,8 +52,8 @@ public override void Can_read_write_collection_of_ulong_enum_JSON_values() """{"Prop":[0,-1,0,1,8]}""", // Because ulong is converted to long on Jet mappedCollection: true); - public override void Can_read_write_collection_of_nullable_ulong_enum_JSON_values() - => Can_read_and_write_JSON_value>( + public override async Task Can_read_write_collection_of_nullable_ulong_enum_JSON_values() + => await Can_read_and_write_JSON_value>( nameof(NullableEnumU64CollectionType.EnumU64), new List { @@ -63,113 +67,118 @@ public override void Can_read_write_collection_of_nullable_ulong_enum_JSON_value """{"Prop":[0,null,-1,0,1,8]}""", // Because ulong is converted to long on Jet mappedCollection: true); - public override void Can_read_write_point() + public override async Task Can_read_write_point() // No built-in JSON support for spatial types in the Jet provider - => Assert.Throws(() => base.Can_read_write_point()); + => await Assert.ThrowsAsync(() => base.Can_read_write_point()); - public override void Can_read_write_point_with_Z() + public override async Task Can_read_write_point_with_Z() // No built-in JSON support for spatial types in the Jet provider - => Assert.Throws(() => base.Can_read_write_point_with_Z()); + => await Assert.ThrowsAsync(() => base.Can_read_write_point_with_Z()); - public override void Can_read_write_point_with_M() + public override async Task Can_read_write_point_with_M() // No built-in JSON support for spatial types in the Jet provider - => Assert.Throws(() => base.Can_read_write_point_with_M()); + => await Assert.ThrowsAsync(() => base.Can_read_write_point_with_M()); - public override void Can_read_write_point_with_Z_and_M() + public override async Task Can_read_write_point_with_Z_and_M() // No built-in JSON support for spatial types in the Jet provider - => Assert.Throws(() => base.Can_read_write_point_with_Z_and_M()); + => await Assert.ThrowsAsync(() => base.Can_read_write_point_with_Z_and_M()); - public override void Can_read_write_line_string() + public override async Task Can_read_write_line_string() // No built-in JSON support for spatial types in the Jet provider - => Assert.Throws(() => base.Can_read_write_line_string()); + => await Assert.ThrowsAsync(() => base.Can_read_write_line_string()); - public override void Can_read_write_multi_line_string() + public override async Task Can_read_write_multi_line_string() // No built-in JSON support for spatial types in the Jet provider - => Assert.Throws(() => base.Can_read_write_multi_line_string()); + => await Assert.ThrowsAsync(() => base.Can_read_write_multi_line_string()); - public override void Can_read_write_polygon() + public override async Task Can_read_write_polygon() // No built-in JSON support for spatial types in the Jet provider - => Assert.Throws(() => base.Can_read_write_polygon()); + => await Assert.ThrowsAsync(() => base.Can_read_write_polygon()); - public override void Can_read_write_polygon_typed_as_geometry() + public override async Task Can_read_write_polygon_typed_as_geometry() // No built-in JSON support for spatial types in the Jet provider - => Assert.Throws(() => base.Can_read_write_polygon_typed_as_geometry()); + => await Assert.ThrowsAsync(() => base.Can_read_write_polygon_typed_as_geometry()); - public override void Can_read_write_point_as_GeoJson() + public override async Task Can_read_write_point_as_GeoJson() // No built-in JSON support for spatial types in the Jet provider - => Assert.Throws(() => base.Can_read_write_point_as_GeoJson()); + => await Assert.ThrowsAsync(() => base.Can_read_write_point_as_GeoJson()); - public override void Can_read_write_point_with_Z_as_GeoJson() + public override async Task Can_read_write_point_with_Z_as_GeoJson() // No built-in JSON support for spatial types in the Jet provider - => Assert.Throws(() => base.Can_read_write_point_with_Z_as_GeoJson()); + => await Assert.ThrowsAsync(() => base.Can_read_write_point_with_Z_as_GeoJson()); - public override void Can_read_write_point_with_M_as_GeoJson() + public override async Task Can_read_write_point_with_M_as_GeoJson() // No built-in JSON support for spatial types in the Jet provider - => Assert.Throws(() => base.Can_read_write_point_with_M_as_GeoJson()); + => await Assert.ThrowsAsync(() => base.Can_read_write_point_with_M_as_GeoJson()); - public override void Can_read_write_point_with_Z_and_M_as_GeoJson() + public override async Task Can_read_write_point_with_Z_and_M_as_GeoJson() // No built-in JSON support for spatial types in the Jet provider - => Assert.Throws(() => base.Can_read_write_point_with_Z_and_M_as_GeoJson()); + => await Assert.ThrowsAsync(() => base.Can_read_write_point_with_Z_and_M_as_GeoJson()); - public override void Can_read_write_line_string_as_GeoJson() + public override async Task Can_read_write_line_string_as_GeoJson() // No built-in JSON support for spatial types in the Jet provider - => Assert.Throws(() => base.Can_read_write_line_string_as_GeoJson()); + => await Assert.ThrowsAsync(() => base.Can_read_write_line_string_as_GeoJson()); - public override void Can_read_write_multi_line_string_as_GeoJson() + public override async Task Can_read_write_multi_line_string_as_GeoJson() // No built-in JSON support for spatial types in the Jet provider - => Assert.Throws(() => base.Can_read_write_multi_line_string_as_GeoJson()); + => await Assert.ThrowsAsync(() => base.Can_read_write_multi_line_string_as_GeoJson()); - public override void Can_read_write_polygon_as_GeoJson() + public override async Task Can_read_write_polygon_as_GeoJson() // No built-in JSON support for spatial types in the Jet provider - => Assert.Throws(() => base.Can_read_write_polygon_as_GeoJson()); + => await Assert.ThrowsAsync(() => base.Can_read_write_polygon_as_GeoJson()); - public override void Can_read_write_polygon_typed_as_geometry_as_GeoJson() + public override async Task Can_read_write_polygon_typed_as_geometry_as_GeoJson() // No built-in JSON support for spatial types in the Jet provider - => Assert.Throws(() => base.Can_read_write_polygon_typed_as_geometry_as_GeoJson()); + => await Assert.ThrowsAsync(() => base.Can_read_write_polygon_typed_as_geometry_as_GeoJson()); - public override void Can_read_write_nullable_point() + public override async Task Can_read_write_nullable_point() // No built-in JSON support for spatial types in the Jet provider - => Assert.Throws(() => base.Can_read_write_point()); + => await Assert.ThrowsAsync(() => base.Can_read_write_point()); - public override void Can_read_write_nullable_line_string() + public override async Task Can_read_write_nullable_line_string() // No built-in JSON support for spatial types in the Jet provider - => Assert.Throws(() => base.Can_read_write_line_string()); + => await Assert.ThrowsAsync(() => base.Can_read_write_line_string()); - public override void Can_read_write_nullable_multi_line_string() + public override async Task Can_read_write_nullable_multi_line_string() // No built-in JSON support for spatial types in the Jet provider - => Assert.Throws(() => base.Can_read_write_multi_line_string()); + => await Assert.ThrowsAsync(() => base.Can_read_write_multi_line_string()); - public override void Can_read_write_nullable_polygon() + public override async Task Can_read_write_nullable_polygon() // No built-in JSON support for spatial types in the Jet provider - => Assert.Throws(() => base.Can_read_write_polygon()); + => await Assert.ThrowsAsync(() => base.Can_read_write_polygon()); - public override void Can_read_write_nullable_point_as_GeoJson() + public override async Task Can_read_write_nullable_point_as_GeoJson() // No built-in JSON support for spatial types in the Jet provider - => Assert.Throws(() => base.Can_read_write_point_as_GeoJson()); + => await Assert.ThrowsAsync(() => base.Can_read_write_point_as_GeoJson()); - public override void Can_read_write_nullable_line_string_as_GeoJson() + public override async Task Can_read_write_nullable_line_string_as_GeoJson() // No built-in JSON support for spatial types in the Jet provider - => Assert.Throws(() => base.Can_read_write_line_string_as_GeoJson()); + => await Assert.ThrowsAsync(() => base.Can_read_write_line_string_as_GeoJson()); - public override void Can_read_write_nullable_multi_line_string_as_GeoJson() + public override async Task Can_read_write_nullable_multi_line_string_as_GeoJson() // No built-in JSON support for spatial types in the Jet provider - => Assert.Throws(() => base.Can_read_write_multi_line_string_as_GeoJson()); + => await Assert.ThrowsAsync(() => base.Can_read_write_multi_line_string_as_GeoJson()); - public override void Can_read_write_nullable_polygon_as_GeoJson() + public override async Task Can_read_write_nullable_polygon_as_GeoJson() // No built-in JSON support for spatial types in the Jet provider - => Assert.Throws(() => base.Can_read_write_polygon_as_GeoJson()); + => await Assert.ThrowsAsync(() => base.Can_read_write_polygon_as_GeoJson()); - public override void Can_read_write_polygon_typed_as_nullable_geometry() + public override async Task Can_read_write_polygon_typed_as_nullable_geometry() // No built-in JSON support for spatial types in the Jet provider - => Assert.Throws(() => base.Can_read_write_polygon_typed_as_nullable_geometry()); + => await Assert.ThrowsAsync(() => base.Can_read_write_polygon_typed_as_nullable_geometry()); - public override void Can_read_write_polygon_typed_as_nullable_geometry_as_GeoJson() + public override async Task Can_read_write_polygon_typed_as_nullable_geometry_as_GeoJson() // No built-in JSON support for spatial types in the Jet provider - => Assert.Throws(() => base.Can_read_write_polygon_typed_as_nullable_geometry_as_GeoJson()); + => await Assert.ThrowsAsync(() => base.Can_read_write_polygon_typed_as_nullable_geometry_as_GeoJson()); - protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + protected override ITestStoreFactory TestStoreFactory + => JetTestStoreFactory.Instance; + + protected override DbContextOptionsBuilder AddOptions(DbContextOptionsBuilder builder) { - var store = JetTestStore.GetOrCreate(nameof(JsonTypesJetTest)); - base.OnConfiguring(optionsBuilder.UseJet(store.ConnectionString)); + builder = base.AddOptions(builder) + .ConfigureWarnings(w => w.Ignore(JetEventId.DecimalTypeDefaultWarning)); + new JetDbContextOptionsBuilder(builder); + return builder; } } diff --git a/test/EFCore.Jet.FunctionalTests/LazyLoadProxyJetTest.cs b/test/EFCore.Jet.FunctionalTests/LazyLoadProxyJetTest.cs index f17acbb1..86d5bf5e 100644 --- a/test/EFCore.Jet.FunctionalTests/LazyLoadProxyJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/LazyLoadProxyJetTest.cs @@ -1,12 +1,14 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +using System.IO; +using System; using System.Threading.Tasks; using EntityFrameworkCore.Jet.FunctionalTests.TestUtilities; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.ChangeTracking; using Microsoft.EntityFrameworkCore.TestUtilities; using Xunit; - +#nullable disable namespace EntityFrameworkCore.Jet.FunctionalTests { public class LazyLoadProxyJetTest : LazyLoadProxyTestBase @@ -21,402 +23,412 @@ public override void Lazy_load_collection(EntityState state, bool useAttach, boo { base.Lazy_load_collection(state, useAttach, useDetach); -// Assert.Equal( -// $@"{AssertSqlHelper.Declaration("@__p_0='707' (Nullable = true)")} + AssertSql( + state == EntityState.Detached && useAttach + ? "" + : $""" +@__p_0='707' (Nullable = true) -//SELECT `e`.`Id`, `e`.`ParentId` -//FROM `Child` AS `e` -//WHERE `e`.`ParentId` = @__p_0", -// Sql, -// ignoreLineEndingDifferences: true); +SELECT `c`.`Id`, `c`.`ParentId`, `c`.`Culture_Rating`, `c`.`Culture_Species`, `c`.`Culture_Subspecies`, `c`.`Culture_Validation`, `c`.`Culture_License_Charge`, `c`.`Culture_License_Title`, `c`.`Culture_License_Tag_Text`, `c`.`Culture_License_Tog_Text`, `c`.`Culture_Manufacturer_Name`, `c`.`Culture_Manufacturer_Rating`, `c`.`Culture_Manufacturer_Tag_Text`, `c`.`Culture_Manufacturer_Tog_Text`, `c`.`Milk_Rating`, `c`.`Milk_Species`, `c`.`Milk_Subspecies`, `c`.`Milk_Validation`, `c`.`Milk_License_Charge`, `c`.`Milk_License_Title`, `c`.`Milk_License_Tag_Text`, `c`.`Milk_License_Tog_Text`, `c`.`Milk_Manufacturer_Name`, `c`.`Milk_Manufacturer_Rating`, `c`.`Milk_Manufacturer_Tag_Text`, `c`.`Milk_Manufacturer_Tog_Text` +FROM `Child` AS `c` +WHERE `c`.`ParentId` = {AssertSqlHelper.Parameter("@__p_0")} +"""); } public override void Lazy_load_many_to_one_reference_to_principal(EntityState state, bool useAttach, bool useDetach) { base.Lazy_load_many_to_one_reference_to_principal(state, useAttach, useDetach); -// Assert.Equal( -// $@"{AssertSqlHelper.Declaration("@__p_0='707'")} + AssertSql( + state == EntityState.Detached && useAttach + ? "" + : $""" +@__p_0='707' -//SELECT `e`.`Id`, `e`.`AlternateId` -//FROM `Parent` AS `e` -//WHERE `e`.`Id` = @__p_0", -// Sql, -// ignoreLineEndingDifferences: true); +SELECT TOP 1 `p`.`Id`, `p`.`AlternateId`, `p`.`Discriminator`, `p`.`Culture_Rating`, `p`.`Culture_Species`, `p`.`Culture_Subspecies`, `p`.`Culture_Validation`, `p`.`Culture_License_Charge`, `p`.`Culture_License_Title`, `p`.`Culture_License_Tag_Text`, `p`.`Culture_License_Tog_Text`, `p`.`Culture_Manufacturer_Name`, `p`.`Culture_Manufacturer_Rating`, `p`.`Culture_Manufacturer_Tag_Text`, `p`.`Culture_Manufacturer_Tog_Text`, `p`.`Milk_Rating`, `p`.`Milk_Species`, `p`.`Milk_Subspecies`, `p`.`Milk_Validation`, `p`.`Milk_License_Charge`, `p`.`Milk_License_Title`, `p`.`Milk_License_Tag_Text`, `p`.`Milk_License_Tog_Text`, `p`.`Milk_Manufacturer_Name`, `p`.`Milk_Manufacturer_Rating`, `p`.`Milk_Manufacturer_Tag_Text`, `p`.`Milk_Manufacturer_Tog_Text` +FROM `Parent` AS `p` +WHERE `p`.`Id` = {AssertSqlHelper.Parameter("@__p_0")} +"""); } public override void Lazy_load_one_to_one_reference_to_principal(EntityState state, bool useAttach, bool useDetach) { base.Lazy_load_one_to_one_reference_to_principal(state, useAttach, useDetach); -// Assert.Equal( -// $@"{AssertSqlHelper.Declaration("@__p_0='707'")} + AssertSql( + state == EntityState.Detached && useAttach + ? "" + : $""" +@__p_0='707' -//SELECT `e`.`Id`, `e`.`AlternateId` -//FROM `Parent` AS `e` -//WHERE `e`.`Id` = @__p_0", -// Sql, -// ignoreLineEndingDifferences: true); +SELECT TOP 1 `p`.`Id`, `p`.`AlternateId`, `p`.`Discriminator`, `p`.`Culture_Rating`, `p`.`Culture_Species`, `p`.`Culture_Subspecies`, `p`.`Culture_Validation`, `p`.`Culture_License_Charge`, `p`.`Culture_License_Title`, `p`.`Culture_License_Tag_Text`, `p`.`Culture_License_Tog_Text`, `p`.`Culture_Manufacturer_Name`, `p`.`Culture_Manufacturer_Rating`, `p`.`Culture_Manufacturer_Tag_Text`, `p`.`Culture_Manufacturer_Tog_Text`, `p`.`Milk_Rating`, `p`.`Milk_Species`, `p`.`Milk_Subspecies`, `p`.`Milk_Validation`, `p`.`Milk_License_Charge`, `p`.`Milk_License_Title`, `p`.`Milk_License_Tag_Text`, `p`.`Milk_License_Tog_Text`, `p`.`Milk_Manufacturer_Name`, `p`.`Milk_Manufacturer_Rating`, `p`.`Milk_Manufacturer_Tag_Text`, `p`.`Milk_Manufacturer_Tog_Text` +FROM `Parent` AS `p` +WHERE `p`.`Id` = {AssertSqlHelper.Parameter("@__p_0")} +"""); } public override void Lazy_load_one_to_one_reference_to_dependent(EntityState state, bool useAttach, bool useDetach) { base.Lazy_load_one_to_one_reference_to_dependent(state, useAttach, useDetach); -// Assert.Equal( -// $@"{AssertSqlHelper.Declaration("@__p_0='707' (Nullable = true)")} + AssertSql( + state == EntityState.Detached && useAttach + ? "" + : $""" +@__p_0='707' (Nullable = true) -//SELECT `e`.`Id`, `e`.`ParentId` -//FROM `Single` AS `e` -//WHERE `e`.`ParentId` = @__p_0", -// Sql, -// ignoreLineEndingDifferences: true); +SELECT TOP 1 `s`.`Id`, `s`.`ParentId`, `s`.`Culture_Rating`, `s`.`Culture_Species`, `s`.`Culture_Subspecies`, `s`.`Culture_Validation`, `s`.`Culture_License_Charge`, `s`.`Culture_License_Title`, `s`.`Culture_License_Tag_Text`, `s`.`Culture_License_Tog_Text`, `s`.`Culture_Manufacturer_Name`, `s`.`Culture_Manufacturer_Rating`, `s`.`Culture_Manufacturer_Tag_Text`, `s`.`Culture_Manufacturer_Tog_Text`, `s`.`Milk_Rating`, `s`.`Milk_Species`, `s`.`Milk_Subspecies`, `s`.`Milk_Validation`, `s`.`Milk_License_Charge`, `s`.`Milk_License_Title`, `s`.`Milk_License_Tag_Text`, `s`.`Milk_License_Tog_Text`, `s`.`Milk_Manufacturer_Name`, `s`.`Milk_Manufacturer_Rating`, `s`.`Milk_Manufacturer_Tag_Text`, `s`.`Milk_Manufacturer_Tog_Text` +FROM `Single` AS `s` +WHERE `s`.`ParentId` = {AssertSqlHelper.Parameter("@__p_0")} +"""); } public override void Lazy_load_one_to_one_PK_to_PK_reference_to_principal(EntityState state) { base.Lazy_load_one_to_one_PK_to_PK_reference_to_principal(state); -// Assert.Equal( -// $@"{AssertSqlHelper.Declaration("@__p_0='707'")} + AssertSql( + $""" +@__p_0='707' -//SELECT `e`.`Id`, `e`.`AlternateId` -//FROM `Parent` AS `e` -//WHERE `e`.`Id` = @__p_0", -// Sql, -// ignoreLineEndingDifferences: true); +SELECT TOP 1 `p`.`Id`, `p`.`AlternateId`, `p`.`Discriminator`, `p`.`Culture_Rating`, `p`.`Culture_Species`, `p`.`Culture_Subspecies`, `p`.`Culture_Validation`, `p`.`Culture_License_Charge`, `p`.`Culture_License_Title`, `p`.`Culture_License_Tag_Text`, `p`.`Culture_License_Tog_Text`, `p`.`Culture_Manufacturer_Name`, `p`.`Culture_Manufacturer_Rating`, `p`.`Culture_Manufacturer_Tag_Text`, `p`.`Culture_Manufacturer_Tog_Text`, `p`.`Milk_Rating`, `p`.`Milk_Species`, `p`.`Milk_Subspecies`, `p`.`Milk_Validation`, `p`.`Milk_License_Charge`, `p`.`Milk_License_Title`, `p`.`Milk_License_Tag_Text`, `p`.`Milk_License_Tog_Text`, `p`.`Milk_Manufacturer_Name`, `p`.`Milk_Manufacturer_Rating`, `p`.`Milk_Manufacturer_Tag_Text`, `p`.`Milk_Manufacturer_Tog_Text` +FROM `Parent` AS `p` +WHERE `p`.`Id` = {AssertSqlHelper.Parameter("@__p_0")} +"""); } public override void Lazy_load_one_to_one_PK_to_PK_reference_to_dependent(EntityState state) { base.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent(state); -// Assert.Equal( -// $@"{AssertSqlHelper.Declaration("@__p_0='707'")} + AssertSql( + $""" +@__p_0='707' -//SELECT `e`.`Id` -//FROM `SinglePkToPk` AS `e` -//WHERE `e`.`Id` = @__p_0", -// Sql, -// ignoreLineEndingDifferences: true); +SELECT TOP 1 `s`.`Id`, `s`.`Culture_Rating`, `s`.`Culture_Species`, `s`.`Culture_Subspecies`, `s`.`Culture_Validation`, `s`.`Culture_License_Charge`, `s`.`Culture_License_Title`, `s`.`Culture_License_Tag_Text`, `s`.`Culture_License_Tog_Text`, `s`.`Culture_Manufacturer_Name`, `s`.`Culture_Manufacturer_Rating`, `s`.`Culture_Manufacturer_Tag_Text`, `s`.`Culture_Manufacturer_Tog_Text`, `s`.`Milk_Rating`, `s`.`Milk_Species`, `s`.`Milk_Subspecies`, `s`.`Milk_Validation`, `s`.`Milk_License_Charge`, `s`.`Milk_License_Title`, `s`.`Milk_License_Tag_Text`, `s`.`Milk_License_Tog_Text`, `s`.`Milk_Manufacturer_Name`, `s`.`Milk_Manufacturer_Rating`, `s`.`Milk_Manufacturer_Tag_Text`, `s`.`Milk_Manufacturer_Tog_Text` +FROM `SinglePkToPk` AS `s` +WHERE `s`.`Id` = {AssertSqlHelper.Parameter("@__p_0")} +"""); } public override void Lazy_load_many_to_one_reference_to_principal_null_FK(EntityState state) { base.Lazy_load_many_to_one_reference_to_principal_null_FK(state); - Assert.Equal("", Sql); + AssertSql(@""); } public override void Lazy_load_one_to_one_reference_to_principal_null_FK(EntityState state) { base.Lazy_load_one_to_one_reference_to_principal_null_FK(state); - Assert.Equal("", Sql); + AssertSql(@""); } public override void Lazy_load_collection_not_found(EntityState state) { base.Lazy_load_collection_not_found(state); -// Assert.Equal( -// $@"{AssertSqlHelper.Declaration("@__p_0='767' (Nullable = true)")} + AssertSql( + $""" +@__p_0='767' (Nullable = true) -//SELECT `e`.`Id`, `e`.`ParentId` -//FROM `Child` AS `e` -//WHERE `e`.`ParentId` = @__p_0", -// Sql, -// ignoreLineEndingDifferences: true); +SELECT `c`.`Id`, `c`.`ParentId`, `c`.`Culture_Rating`, `c`.`Culture_Species`, `c`.`Culture_Subspecies`, `c`.`Culture_Validation`, `c`.`Culture_License_Charge`, `c`.`Culture_License_Title`, `c`.`Culture_License_Tag_Text`, `c`.`Culture_License_Tog_Text`, `c`.`Culture_Manufacturer_Name`, `c`.`Culture_Manufacturer_Rating`, `c`.`Culture_Manufacturer_Tag_Text`, `c`.`Culture_Manufacturer_Tog_Text`, `c`.`Milk_Rating`, `c`.`Milk_Species`, `c`.`Milk_Subspecies`, `c`.`Milk_Validation`, `c`.`Milk_License_Charge`, `c`.`Milk_License_Title`, `c`.`Milk_License_Tag_Text`, `c`.`Milk_License_Tog_Text`, `c`.`Milk_Manufacturer_Name`, `c`.`Milk_Manufacturer_Rating`, `c`.`Milk_Manufacturer_Tag_Text`, `c`.`Milk_Manufacturer_Tog_Text` +FROM `Child` AS `c` +WHERE `c`.`ParentId` = {AssertSqlHelper.Parameter("@__p_0")} +"""); } public override void Lazy_load_many_to_one_reference_to_principal_not_found(EntityState state) { base.Lazy_load_many_to_one_reference_to_principal_not_found(state); -// Assert.Equal( -// $@"{AssertSqlHelper.Declaration("@__p_0='787'")} + AssertSql( + $""" +@__p_0='787' -//SELECT `e`.`Id`, `e`.`AlternateId` -//FROM `Parent` AS `e` -//WHERE `e`.`Id` = @__p_0", -// Sql, -// ignoreLineEndingDifferences: true); +SELECT TOP 1 `p`.`Id`, `p`.`AlternateId`, `p`.`Discriminator`, `p`.`Culture_Rating`, `p`.`Culture_Species`, `p`.`Culture_Subspecies`, `p`.`Culture_Validation`, `p`.`Culture_License_Charge`, `p`.`Culture_License_Title`, `p`.`Culture_License_Tag_Text`, `p`.`Culture_License_Tog_Text`, `p`.`Culture_Manufacturer_Name`, `p`.`Culture_Manufacturer_Rating`, `p`.`Culture_Manufacturer_Tag_Text`, `p`.`Culture_Manufacturer_Tog_Text`, `p`.`Milk_Rating`, `p`.`Milk_Species`, `p`.`Milk_Subspecies`, `p`.`Milk_Validation`, `p`.`Milk_License_Charge`, `p`.`Milk_License_Title`, `p`.`Milk_License_Tag_Text`, `p`.`Milk_License_Tog_Text`, `p`.`Milk_Manufacturer_Name`, `p`.`Milk_Manufacturer_Rating`, `p`.`Milk_Manufacturer_Tag_Text`, `p`.`Milk_Manufacturer_Tog_Text` +FROM `Parent` AS `p` +WHERE `p`.`Id` = {AssertSqlHelper.Parameter("@__p_0")} +"""); } public override void Lazy_load_one_to_one_reference_to_principal_not_found(EntityState state) { base.Lazy_load_one_to_one_reference_to_principal_not_found(state); -// Assert.Equal( -// $@"{AssertSqlHelper.Declaration("@__p_0='787'")} + AssertSql( + $""" +@__p_0='787' -//SELECT `e`.`Id`, `e`.`AlternateId` -//FROM `Parent` AS `e` -//WHERE `e`.`Id` = @__p_0", -// Sql, -// ignoreLineEndingDifferences: true); +SELECT TOP 1 `p`.`Id`, `p`.`AlternateId`, `p`.`Discriminator`, `p`.`Culture_Rating`, `p`.`Culture_Species`, `p`.`Culture_Subspecies`, `p`.`Culture_Validation`, `p`.`Culture_License_Charge`, `p`.`Culture_License_Title`, `p`.`Culture_License_Tag_Text`, `p`.`Culture_License_Tog_Text`, `p`.`Culture_Manufacturer_Name`, `p`.`Culture_Manufacturer_Rating`, `p`.`Culture_Manufacturer_Tag_Text`, `p`.`Culture_Manufacturer_Tog_Text`, `p`.`Milk_Rating`, `p`.`Milk_Species`, `p`.`Milk_Subspecies`, `p`.`Milk_Validation`, `p`.`Milk_License_Charge`, `p`.`Milk_License_Title`, `p`.`Milk_License_Tag_Text`, `p`.`Milk_License_Tog_Text`, `p`.`Milk_Manufacturer_Name`, `p`.`Milk_Manufacturer_Rating`, `p`.`Milk_Manufacturer_Tag_Text`, `p`.`Milk_Manufacturer_Tog_Text` +FROM `Parent` AS `p` +WHERE `p`.`Id` = {AssertSqlHelper.Parameter("@__p_0")} +"""); } public override void Lazy_load_one_to_one_reference_to_dependent_not_found(EntityState state) { base.Lazy_load_one_to_one_reference_to_dependent_not_found(state); -// Assert.Equal( -// $@"{AssertSqlHelper.Declaration("@__p_0='767' (Nullable = true)")} + AssertSql( + $""" +@__p_0='767' (Nullable = true) -//SELECT `e`.`Id`, `e`.`ParentId` -//FROM `Single` AS `e` -//WHERE `e`.`ParentId` = @__p_0", -// Sql, -// ignoreLineEndingDifferences: true); +SELECT TOP 1 `s`.`Id`, `s`.`ParentId`, `s`.`Culture_Rating`, `s`.`Culture_Species`, `s`.`Culture_Subspecies`, `s`.`Culture_Validation`, `s`.`Culture_License_Charge`, `s`.`Culture_License_Title`, `s`.`Culture_License_Tag_Text`, `s`.`Culture_License_Tog_Text`, `s`.`Culture_Manufacturer_Name`, `s`.`Culture_Manufacturer_Rating`, `s`.`Culture_Manufacturer_Tag_Text`, `s`.`Culture_Manufacturer_Tog_Text`, `s`.`Milk_Rating`, `s`.`Milk_Species`, `s`.`Milk_Subspecies`, `s`.`Milk_Validation`, `s`.`Milk_License_Charge`, `s`.`Milk_License_Title`, `s`.`Milk_License_Tag_Text`, `s`.`Milk_License_Tog_Text`, `s`.`Milk_Manufacturer_Name`, `s`.`Milk_Manufacturer_Rating`, `s`.`Milk_Manufacturer_Tag_Text`, `s`.`Milk_Manufacturer_Tog_Text` +FROM `Single` AS `s` +WHERE `s`.`ParentId` = {AssertSqlHelper.Parameter("@__p_0")} +"""); } public override void Lazy_load_collection_already_loaded(EntityState state, CascadeTiming cascadeDeleteTiming) { base.Lazy_load_collection_already_loaded(state, cascadeDeleteTiming); - Assert.Equal("", Sql); + AssertSql(@""); } public override void Lazy_load_many_to_one_reference_to_principal_already_loaded( - EntityState state, CascadeTiming cascadeDeleteTiming) + EntityState state, + CascadeTiming cascadeDeleteTiming) { base.Lazy_load_many_to_one_reference_to_principal_already_loaded(state, cascadeDeleteTiming); - Assert.Equal("", Sql); + AssertSql(@""); } public override void Lazy_load_one_to_one_reference_to_principal_already_loaded(EntityState state) { base.Lazy_load_one_to_one_reference_to_principal_already_loaded(state); - Assert.Equal("", Sql); + AssertSql(@""); } public override void Lazy_load_one_to_one_reference_to_dependent_already_loaded( - EntityState state, CascadeTiming cascadeDeleteTiming) + EntityState state, + CascadeTiming cascadeDeleteTiming) { base.Lazy_load_one_to_one_reference_to_dependent_already_loaded(state, cascadeDeleteTiming); - Assert.Equal("", Sql); + AssertSql(@""); } public override void Lazy_load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(EntityState state) { base.Lazy_load_one_to_one_PK_to_PK_reference_to_principal_already_loaded(state); - Assert.Equal("", Sql); + AssertSql(@""); } public override void Lazy_load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(EntityState state) { base.Lazy_load_one_to_one_PK_to_PK_reference_to_dependent_already_loaded(state); - Assert.Equal("", Sql); + AssertSql(@""); } public override void Lazy_load_many_to_one_reference_to_principal_alternate_key(EntityState state) { base.Lazy_load_many_to_one_reference_to_principal_alternate_key(state); -// Assert.Equal( -// $@"{AssertSqlHelper.Declaration("@__p_0='Root' (Size = 450)")} + AssertSql( + $""" +@__p_0='Root' (Size = 255) -//SELECT `e`.`Id`, `e`.`AlternateId` -//FROM `Parent` AS `e` -//WHERE `e`.`AlternateId` = @__p_0", -// Sql, -// ignoreLineEndingDifferences: true); +SELECT TOP 1 `p`.`Id`, `p`.`AlternateId`, `p`.`Discriminator`, `p`.`Culture_Rating`, `p`.`Culture_Species`, `p`.`Culture_Subspecies`, `p`.`Culture_Validation`, `p`.`Culture_License_Charge`, `p`.`Culture_License_Title`, `p`.`Culture_License_Tag_Text`, `p`.`Culture_License_Tog_Text`, `p`.`Culture_Manufacturer_Name`, `p`.`Culture_Manufacturer_Rating`, `p`.`Culture_Manufacturer_Tag_Text`, `p`.`Culture_Manufacturer_Tog_Text`, `p`.`Milk_Rating`, `p`.`Milk_Species`, `p`.`Milk_Subspecies`, `p`.`Milk_Validation`, `p`.`Milk_License_Charge`, `p`.`Milk_License_Title`, `p`.`Milk_License_Tag_Text`, `p`.`Milk_License_Tog_Text`, `p`.`Milk_Manufacturer_Name`, `p`.`Milk_Manufacturer_Rating`, `p`.`Milk_Manufacturer_Tag_Text`, `p`.`Milk_Manufacturer_Tog_Text` +FROM `Parent` AS `p` +WHERE `p`.`AlternateId` = {AssertSqlHelper.Parameter("@__p_0")} +"""); } public override void Lazy_load_one_to_one_reference_to_principal_alternate_key(EntityState state) { base.Lazy_load_one_to_one_reference_to_principal_alternate_key(state); -// Assert.Equal( -// $@"{AssertSqlHelper.Declaration("@__p_0='Root' (Size = 450)")} + AssertSql( + $""" +@__p_0='Root' (Size = 255) -//SELECT `e`.`Id`, `e`.`AlternateId` -//FROM `Parent` AS `e` -//WHERE `e`.`AlternateId` = @__p_0", -// Sql, -// ignoreLineEndingDifferences: true); +SELECT TOP 1 `p`.`Id`, `p`.`AlternateId`, `p`.`Discriminator`, `p`.`Culture_Rating`, `p`.`Culture_Species`, `p`.`Culture_Subspecies`, `p`.`Culture_Validation`, `p`.`Culture_License_Charge`, `p`.`Culture_License_Title`, `p`.`Culture_License_Tag_Text`, `p`.`Culture_License_Tog_Text`, `p`.`Culture_Manufacturer_Name`, `p`.`Culture_Manufacturer_Rating`, `p`.`Culture_Manufacturer_Tag_Text`, `p`.`Culture_Manufacturer_Tog_Text`, `p`.`Milk_Rating`, `p`.`Milk_Species`, `p`.`Milk_Subspecies`, `p`.`Milk_Validation`, `p`.`Milk_License_Charge`, `p`.`Milk_License_Title`, `p`.`Milk_License_Tag_Text`, `p`.`Milk_License_Tog_Text`, `p`.`Milk_Manufacturer_Name`, `p`.`Milk_Manufacturer_Rating`, `p`.`Milk_Manufacturer_Tag_Text`, `p`.`Milk_Manufacturer_Tog_Text` +FROM `Parent` AS `p` +WHERE `p`.`AlternateId` = {AssertSqlHelper.Parameter("@__p_0")} +"""); } public override void Lazy_load_one_to_one_reference_to_dependent_alternate_key(EntityState state) { base.Lazy_load_one_to_one_reference_to_dependent_alternate_key(state); -// Assert.Equal( -// $@"{AssertSqlHelper.Declaration("@__p_0='Root' (Size = 450)")} + AssertSql( + $""" +@__p_0='Root' (Size = 255) -//SELECT `e`.`Id`, `e`.`ParentId` -//FROM `SingleAk` AS `e` -//WHERE `e`.`ParentId` = @__p_0", -// Sql, -// ignoreLineEndingDifferences: true); +SELECT TOP 1 `s`.`Id`, `s`.`ParentId`, `s`.`Culture_Rating`, `s`.`Culture_Species`, `s`.`Culture_Subspecies`, `s`.`Culture_Validation`, `s`.`Culture_License_Charge`, `s`.`Culture_License_Title`, `s`.`Culture_License_Tag_Text`, `s`.`Culture_License_Tog_Text`, `s`.`Culture_Manufacturer_Name`, `s`.`Culture_Manufacturer_Rating`, `s`.`Culture_Manufacturer_Tag_Text`, `s`.`Culture_Manufacturer_Tog_Text`, `s`.`Milk_Rating`, `s`.`Milk_Species`, `s`.`Milk_Subspecies`, `s`.`Milk_Validation`, `s`.`Milk_License_Charge`, `s`.`Milk_License_Title`, `s`.`Milk_License_Tag_Text`, `s`.`Milk_License_Tog_Text`, `s`.`Milk_Manufacturer_Name`, `s`.`Milk_Manufacturer_Rating`, `s`.`Milk_Manufacturer_Tag_Text`, `s`.`Milk_Manufacturer_Tog_Text` +FROM `SingleAk` AS `s` +WHERE `s`.`ParentId` = {AssertSqlHelper.Parameter("@__p_0")} +"""); } public override void Lazy_load_many_to_one_reference_to_principal_null_FK_alternate_key(EntityState state) { base.Lazy_load_many_to_one_reference_to_principal_null_FK_alternate_key(state); - Assert.Equal("", Sql); + AssertSql(@""); } public override void Lazy_load_one_to_one_reference_to_principal_null_FK_alternate_key(EntityState state) { base.Lazy_load_one_to_one_reference_to_principal_null_FK_alternate_key(state); - Assert.Equal("", Sql); + AssertSql(@""); } public override void Lazy_load_collection_shadow_fk(EntityState state) { base.Lazy_load_collection_shadow_fk(state); -// Assert.Equal( -// $@"{AssertSqlHelper.Declaration("@__p_0='707' (Nullable = true)")} + AssertSql( + $""" +@__p_0='707' (Nullable = true) -//SELECT `e`.`Id`, `e`.`ParentId` -//FROM `ChildShadowFk` AS `e` -//WHERE `e`.`ParentId` = @__p_0", -// Sql, -// ignoreLineEndingDifferences: true); +SELECT `c`.`Id`, `c`.`ParentId`, `c`.`Culture_Rating`, `c`.`Culture_Species`, `c`.`Culture_Subspecies`, `c`.`Culture_Validation`, `c`.`Culture_License_Charge`, `c`.`Culture_License_Title`, `c`.`Culture_License_Tag_Text`, `c`.`Culture_License_Tog_Text`, `c`.`Culture_Manufacturer_Name`, `c`.`Culture_Manufacturer_Rating`, `c`.`Culture_Manufacturer_Tag_Text`, `c`.`Culture_Manufacturer_Tog_Text`, `c`.`Milk_Rating`, `c`.`Milk_Species`, `c`.`Milk_Subspecies`, `c`.`Milk_Validation`, `c`.`Milk_License_Charge`, `c`.`Milk_License_Title`, `c`.`Milk_License_Tag_Text`, `c`.`Milk_License_Tog_Text`, `c`.`Milk_Manufacturer_Name`, `c`.`Milk_Manufacturer_Rating`, `c`.`Milk_Manufacturer_Tag_Text`, `c`.`Milk_Manufacturer_Tog_Text` +FROM `ChildShadowFk` AS `c` +WHERE `c`.`ParentId` = {AssertSqlHelper.Parameter("@__p_0")} +"""); } public override void Lazy_load_many_to_one_reference_to_principal_shadow_fk(EntityState state) { base.Lazy_load_many_to_one_reference_to_principal_shadow_fk(state); -// Assert.Equal( -// $@"{AssertSqlHelper.Declaration("@__p_0='707'")} + AssertSql( + state == EntityState.Detached + ? "" + : $""" +@__p_0='707' -//SELECT `e`.`Id`, `e`.`AlternateId` -//FROM `Parent` AS `e` -//WHERE `e`.`Id` = @__p_0", -// Sql, -// ignoreLineEndingDifferences: true); +SELECT TOP 1 `p`.`Id`, `p`.`AlternateId`, `p`.`Discriminator`, `p`.`Culture_Rating`, `p`.`Culture_Species`, `p`.`Culture_Subspecies`, `p`.`Culture_Validation`, `p`.`Culture_License_Charge`, `p`.`Culture_License_Title`, `p`.`Culture_License_Tag_Text`, `p`.`Culture_License_Tog_Text`, `p`.`Culture_Manufacturer_Name`, `p`.`Culture_Manufacturer_Rating`, `p`.`Culture_Manufacturer_Tag_Text`, `p`.`Culture_Manufacturer_Tog_Text`, `p`.`Milk_Rating`, `p`.`Milk_Species`, `p`.`Milk_Subspecies`, `p`.`Milk_Validation`, `p`.`Milk_License_Charge`, `p`.`Milk_License_Title`, `p`.`Milk_License_Tag_Text`, `p`.`Milk_License_Tog_Text`, `p`.`Milk_Manufacturer_Name`, `p`.`Milk_Manufacturer_Rating`, `p`.`Milk_Manufacturer_Tag_Text`, `p`.`Milk_Manufacturer_Tog_Text` +FROM `Parent` AS `p` +WHERE `p`.`Id` = {AssertSqlHelper.Parameter("@__p_0")} +"""); } public override void Lazy_load_one_to_one_reference_to_principal_shadow_fk(EntityState state) { base.Lazy_load_one_to_one_reference_to_principal_shadow_fk(state); -// Assert.Equal( -// $@"{AssertSqlHelper.Declaration("@__p_0='707'")} + AssertSql( + state == EntityState.Detached + ? "" + : $""" +@__p_0='707' -//SELECT `e`.`Id`, `e`.`AlternateId` -//FROM `Parent` AS `e` -//WHERE `e`.`Id` = @__p_0", -// Sql, -// ignoreLineEndingDifferences: true); +SELECT TOP 1 `p`.`Id`, `p`.`AlternateId`, `p`.`Discriminator`, `p`.`Culture_Rating`, `p`.`Culture_Species`, `p`.`Culture_Subspecies`, `p`.`Culture_Validation`, `p`.`Culture_License_Charge`, `p`.`Culture_License_Title`, `p`.`Culture_License_Tag_Text`, `p`.`Culture_License_Tog_Text`, `p`.`Culture_Manufacturer_Name`, `p`.`Culture_Manufacturer_Rating`, `p`.`Culture_Manufacturer_Tag_Text`, `p`.`Culture_Manufacturer_Tog_Text`, `p`.`Milk_Rating`, `p`.`Milk_Species`, `p`.`Milk_Subspecies`, `p`.`Milk_Validation`, `p`.`Milk_License_Charge`, `p`.`Milk_License_Title`, `p`.`Milk_License_Tag_Text`, `p`.`Milk_License_Tog_Text`, `p`.`Milk_Manufacturer_Name`, `p`.`Milk_Manufacturer_Rating`, `p`.`Milk_Manufacturer_Tag_Text`, `p`.`Milk_Manufacturer_Tog_Text` +FROM `Parent` AS `p` +WHERE `p`.`Id` = {AssertSqlHelper.Parameter("@__p_0")} +"""); } public override void Lazy_load_one_to_one_reference_to_dependent_shadow_fk(EntityState state) { base.Lazy_load_one_to_one_reference_to_dependent_shadow_fk(state); -// Assert.Equal( -// $@"{AssertSqlHelper.Declaration("@__p_0='707' (Nullable = true)")} + AssertSql( + $""" +@__p_0='707' (Nullable = true) -//SELECT `e`.`Id`, `e`.`ParentId` -//FROM `SingleShadowFk` AS `e` -//WHERE `e`.`ParentId` = @__p_0", -// Sql, -// ignoreLineEndingDifferences: true); +SELECT TOP 1 `s`.`Id`, `s`.`ParentId`, `s`.`Culture_Rating`, `s`.`Culture_Species`, `s`.`Culture_Subspecies`, `s`.`Culture_Validation`, `s`.`Culture_License_Charge`, `s`.`Culture_License_Title`, `s`.`Culture_License_Tag_Text`, `s`.`Culture_License_Tog_Text`, `s`.`Culture_Manufacturer_Name`, `s`.`Culture_Manufacturer_Rating`, `s`.`Culture_Manufacturer_Tag_Text`, `s`.`Culture_Manufacturer_Tog_Text`, `s`.`Milk_Rating`, `s`.`Milk_Species`, `s`.`Milk_Subspecies`, `s`.`Milk_Validation`, `s`.`Milk_License_Charge`, `s`.`Milk_License_Title`, `s`.`Milk_License_Tag_Text`, `s`.`Milk_License_Tog_Text`, `s`.`Milk_Manufacturer_Name`, `s`.`Milk_Manufacturer_Rating`, `s`.`Milk_Manufacturer_Tag_Text`, `s`.`Milk_Manufacturer_Tog_Text` +FROM `SingleShadowFk` AS `s` +WHERE `s`.`ParentId` = {AssertSqlHelper.Parameter("@__p_0")} +"""); } public override void Lazy_load_many_to_one_reference_to_principal_null_FK_shadow_fk(EntityState state) { base.Lazy_load_many_to_one_reference_to_principal_null_FK_shadow_fk(state); - Assert.Equal("", Sql); + AssertSql(@""); } public override void Lazy_load_one_to_one_reference_to_principal_null_FK_shadow_fk(EntityState state) { base.Lazy_load_one_to_one_reference_to_principal_null_FK_shadow_fk(state); - Assert.Equal("", Sql); + AssertSql(@""); } public override void Lazy_load_collection_composite_key(EntityState state) { base.Lazy_load_collection_composite_key(state); -// Assert.Equal( -// $@"{AssertSqlHelper.Declaration("@__p_0='Root' (Size = 450)")} - -//@__p_1='707' (Nullable = true) + AssertSql( + $""" +@__p_0='Root' (Size = 255) +@__p_1='707' (Nullable = true) -//SELECT `e`.`Id`, `e`.`ParentAlternateId`, `e`.`ParentId` -//FROM `ChildCompositeKey` AS `e` -//WHERE (`e`.`ParentAlternateId` = @__p_0) AND (`e`.`ParentId` = @__p_1)", -// Sql, -// ignoreLineEndingDifferences: true); +SELECT `c`.`Id`, `c`.`ParentAlternateId`, `c`.`ParentId`, `c`.`Culture_Rating`, `c`.`Culture_Species`, `c`.`Culture_Subspecies`, `c`.`Culture_Validation`, `c`.`Culture_License_Charge`, `c`.`Culture_License_Title`, `c`.`Culture_License_Tag_Text`, `c`.`Culture_License_Tog_Text`, `c`.`Culture_Manufacturer_Name`, `c`.`Culture_Manufacturer_Rating`, `c`.`Culture_Manufacturer_Tag_Text`, `c`.`Culture_Manufacturer_Tog_Text`, `c`.`Milk_Rating`, `c`.`Milk_Species`, `c`.`Milk_Subspecies`, `c`.`Milk_Validation`, `c`.`Milk_License_Charge`, `c`.`Milk_License_Title`, `c`.`Milk_License_Tag_Text`, `c`.`Milk_License_Tog_Text`, `c`.`Milk_Manufacturer_Name`, `c`.`Milk_Manufacturer_Rating`, `c`.`Milk_Manufacturer_Tag_Text`, `c`.`Milk_Manufacturer_Tog_Text` +FROM `ChildCompositeKey` AS `c` +WHERE `c`.`ParentAlternateId` = {AssertSqlHelper.Parameter("@__p_0")} AND `c`.`ParentId` = {AssertSqlHelper.Parameter("@__p_1")} +"""); } public override void Lazy_load_many_to_one_reference_to_principal_composite_key(EntityState state) { base.Lazy_load_many_to_one_reference_to_principal_composite_key(state); -// Assert.Equal( -// $@"{AssertSqlHelper.Declaration("@__p_0='Root' (Size = 450)")} + AssertSql( + $""" +@__p_0='Root' (Size = 255) +@__p_1='707' -//@__p_1='707' - -//SELECT `e`.`Id`, `e`.`AlternateId` -//FROM `Parent` AS `e` -//WHERE (`e`.`AlternateId` = @__p_0) AND (`e`.`Id` = @__p_1)", -// Sql, -// ignoreLineEndingDifferences: true); +SELECT TOP 1 `p`.`Id`, `p`.`AlternateId`, `p`.`Discriminator`, `p`.`Culture_Rating`, `p`.`Culture_Species`, `p`.`Culture_Subspecies`, `p`.`Culture_Validation`, `p`.`Culture_License_Charge`, `p`.`Culture_License_Title`, `p`.`Culture_License_Tag_Text`, `p`.`Culture_License_Tog_Text`, `p`.`Culture_Manufacturer_Name`, `p`.`Culture_Manufacturer_Rating`, `p`.`Culture_Manufacturer_Tag_Text`, `p`.`Culture_Manufacturer_Tog_Text`, `p`.`Milk_Rating`, `p`.`Milk_Species`, `p`.`Milk_Subspecies`, `p`.`Milk_Validation`, `p`.`Milk_License_Charge`, `p`.`Milk_License_Title`, `p`.`Milk_License_Tag_Text`, `p`.`Milk_License_Tog_Text`, `p`.`Milk_Manufacturer_Name`, `p`.`Milk_Manufacturer_Rating`, `p`.`Milk_Manufacturer_Tag_Text`, `p`.`Milk_Manufacturer_Tog_Text` +FROM `Parent` AS `p` +WHERE `p`.`AlternateId` = {AssertSqlHelper.Parameter("@__p_0")} AND `p`.`Id` = {AssertSqlHelper.Parameter("@__p_1")} +"""); } public override void Lazy_load_one_to_one_reference_to_principal_composite_key(EntityState state) { base.Lazy_load_one_to_one_reference_to_principal_composite_key(state); -// Assert.Equal( -// $@"{AssertSqlHelper.Declaration("@__p_0='Root' (Size = 450)")} - -//@__p_1='707' + AssertSql( + $""" +@__p_0='Root' (Size = 255) +@__p_1='707' -//SELECT `e`.`Id`, `e`.`AlternateId` -//FROM `Parent` AS `e` -//WHERE (`e`.`AlternateId` = @__p_0) AND (`e`.`Id` = @__p_1)", -// Sql, -// ignoreLineEndingDifferences: true); +SELECT TOP 1 `p`.`Id`, `p`.`AlternateId`, `p`.`Discriminator`, `p`.`Culture_Rating`, `p`.`Culture_Species`, `p`.`Culture_Subspecies`, `p`.`Culture_Validation`, `p`.`Culture_License_Charge`, `p`.`Culture_License_Title`, `p`.`Culture_License_Tag_Text`, `p`.`Culture_License_Tog_Text`, `p`.`Culture_Manufacturer_Name`, `p`.`Culture_Manufacturer_Rating`, `p`.`Culture_Manufacturer_Tag_Text`, `p`.`Culture_Manufacturer_Tog_Text`, `p`.`Milk_Rating`, `p`.`Milk_Species`, `p`.`Milk_Subspecies`, `p`.`Milk_Validation`, `p`.`Milk_License_Charge`, `p`.`Milk_License_Title`, `p`.`Milk_License_Tag_Text`, `p`.`Milk_License_Tog_Text`, `p`.`Milk_Manufacturer_Name`, `p`.`Milk_Manufacturer_Rating`, `p`.`Milk_Manufacturer_Tag_Text`, `p`.`Milk_Manufacturer_Tog_Text` +FROM `Parent` AS `p` +WHERE `p`.`AlternateId` = {AssertSqlHelper.Parameter("@__p_0")} AND `p`.`Id` = {AssertSqlHelper.Parameter("@__p_1")} +"""); } public override void Lazy_load_one_to_one_reference_to_dependent_composite_key(EntityState state) { base.Lazy_load_one_to_one_reference_to_dependent_composite_key(state); -// Assert.Equal( -// $@"{AssertSqlHelper.Declaration("@__p_0='Root' (Size = 450)")} + AssertSql( + $""" +@__p_0='Root' (Size = 255) +@__p_1='707' (Nullable = true) -//@__p_1='707' (Nullable = true) - -//SELECT `e`.`Id`, `e`.`ParentAlternateId`, `e`.`ParentId` -//FROM `SingleCompositeKey` AS `e` -//WHERE (`e`.`ParentAlternateId` = @__p_0) AND (`e`.`ParentId` = @__p_1)", -// Sql, -// ignoreLineEndingDifferences: true); +SELECT TOP 1 `s`.`Id`, `s`.`ParentAlternateId`, `s`.`ParentId`, `s`.`Culture_Rating`, `s`.`Culture_Species`, `s`.`Culture_Subspecies`, `s`.`Culture_Validation`, `s`.`Culture_License_Charge`, `s`.`Culture_License_Title`, `s`.`Culture_License_Tag_Text`, `s`.`Culture_License_Tog_Text`, `s`.`Culture_Manufacturer_Name`, `s`.`Culture_Manufacturer_Rating`, `s`.`Culture_Manufacturer_Tag_Text`, `s`.`Culture_Manufacturer_Tog_Text`, `s`.`Milk_Rating`, `s`.`Milk_Species`, `s`.`Milk_Subspecies`, `s`.`Milk_Validation`, `s`.`Milk_License_Charge`, `s`.`Milk_License_Title`, `s`.`Milk_License_Tag_Text`, `s`.`Milk_License_Tog_Text`, `s`.`Milk_Manufacturer_Name`, `s`.`Milk_Manufacturer_Rating`, `s`.`Milk_Manufacturer_Tag_Text`, `s`.`Milk_Manufacturer_Tog_Text` +FROM `SingleCompositeKey` AS `s` +WHERE `s`.`ParentAlternateId` = {AssertSqlHelper.Parameter("@__p_0")} AND `s`.`ParentId` = {AssertSqlHelper.Parameter("@__p_1")} +"""); } public override void Lazy_load_many_to_one_reference_to_principal_null_FK_composite_key(EntityState state) { base.Lazy_load_many_to_one_reference_to_principal_null_FK_composite_key(state); - Assert.Equal("", Sql); + AssertSql(@""); } public override void Lazy_load_one_to_one_reference_to_principal_null_FK_composite_key(EntityState state) { base.Lazy_load_one_to_one_reference_to_principal_null_FK_composite_key(state); - Assert.Equal("", Sql); + AssertSql(@""); } public override async Task Load_collection(EntityState state, bool async) @@ -425,36 +437,102 @@ public override async Task Load_collection(EntityState state, bool async) if (!async) { -// Assert.Equal( -// $@"{AssertSqlHelper.Declaration("@__p_0='707' (Nullable = true)")} - -//SELECT `e`.`Id`, `e`.`ParentId` -//FROM `Child` AS `e` -//WHERE `e`.`ParentId` = @__p_0", -// Sql, -// ignoreLineEndingDifferences: true); + AssertSql( + $""" +@__p_0='707' (Nullable = true) + +SELECT `c`.`Id`, `c`.`ParentId`, `c`.`Culture_Rating`, `c`.`Culture_Species`, `c`.`Culture_Subspecies`, `c`.`Culture_Validation`, `c`.`Culture_License_Charge`, `c`.`Culture_License_Title`, `c`.`Culture_License_Tag_Text`, `c`.`Culture_License_Tog_Text`, `c`.`Culture_Manufacturer_Name`, `c`.`Culture_Manufacturer_Rating`, `c`.`Culture_Manufacturer_Tag_Text`, `c`.`Culture_Manufacturer_Tog_Text`, `c`.`Milk_Rating`, `c`.`Milk_Species`, `c`.`Milk_Subspecies`, `c`.`Milk_Validation`, `c`.`Milk_License_Charge`, `c`.`Milk_License_Title`, `c`.`Milk_License_Tag_Text`, `c`.`Milk_License_Tog_Text`, `c`.`Milk_Manufacturer_Name`, `c`.`Milk_Manufacturer_Rating`, `c`.`Milk_Manufacturer_Tag_Text`, `c`.`Milk_Manufacturer_Tog_Text` +FROM `Child` AS `c` +WHERE `c`.`ParentId` = {AssertSqlHelper.Parameter("@__p_0")} +"""); } } - [ConditionalFact(Skip = "Issue#1015")] + [ConditionalFact] public override void Top_level_projection_track_entities_before_passing_to_client_method() { base.Top_level_projection_track_entities_before_passing_to_client_method(); - Assert.Equal( - $@"{AssertSqlHelper.Declaration("@__p_0='707' (Nullable = true)")} + AssertSql( + $""" +SELECT TOP 1 `p`.`Id`, `p`.`AlternateId`, `p`.`Discriminator`, `p`.`Culture_Rating`, `p`.`Culture_Species`, `p`.`Culture_Subspecies`, `p`.`Culture_Validation`, `p`.`Culture_License_Charge`, `p`.`Culture_License_Title`, `p`.`Culture_License_Tag_Text`, `p`.`Culture_License_Tog_Text`, `p`.`Culture_Manufacturer_Name`, `p`.`Culture_Manufacturer_Rating`, `p`.`Culture_Manufacturer_Tag_Text`, `p`.`Culture_Manufacturer_Tog_Text`, `p`.`Milk_Rating`, `p`.`Milk_Species`, `p`.`Milk_Subspecies`, `p`.`Milk_Validation`, `p`.`Milk_License_Charge`, `p`.`Milk_License_Title`, `p`.`Milk_License_Tag_Text`, `p`.`Milk_License_Tog_Text`, `p`.`Milk_Manufacturer_Name`, `p`.`Milk_Manufacturer_Rating`, `p`.`Milk_Manufacturer_Tag_Text`, `p`.`Milk_Manufacturer_Tog_Text` +FROM `Parent` AS `p` +ORDER BY `p`.`Id` + +@__p_0='707' (Nullable = true) + +SELECT TOP 1 `s`.`Id`, `s`.`ParentId`, `s`.`Culture_Rating`, `s`.`Culture_Species`, `s`.`Culture_Subspecies`, `s`.`Culture_Validation`, `s`.`Culture_License_Charge`, `s`.`Culture_License_Title`, `s`.`Culture_License_Tag_Text`, `s`.`Culture_License_Tog_Text`, `s`.`Culture_Manufacturer_Name`, `s`.`Culture_Manufacturer_Rating`, `s`.`Culture_Manufacturer_Tag_Text`, `s`.`Culture_Manufacturer_Tog_Text`, `s`.`Milk_Rating`, `s`.`Milk_Species`, `s`.`Milk_Subspecies`, `s`.`Milk_Validation`, `s`.`Milk_License_Charge`, `s`.`Milk_License_Title`, `s`.`Milk_License_Tag_Text`, `s`.`Milk_License_Tog_Text`, `s`.`Milk_Manufacturer_Name`, `s`.`Milk_Manufacturer_Rating`, `s`.`Milk_Manufacturer_Tag_Text`, `s`.`Milk_Manufacturer_Tog_Text` +FROM `Single` AS `s` +WHERE `s`.`ParentId` = {AssertSqlHelper.Parameter("@__p_0")} +"""); + } + + public override async Task Entity_equality_with_proxy_parameter(bool async) + { + await base.Entity_equality_with_proxy_parameter(async); + + AssertSql( + $""" +@__entity_equality_called_0_Id='707' (Nullable = true) + +SELECT `c`.`Id`, `c`.`ParentId`, `c`.`Culture_Rating`, `c`.`Culture_Species`, `c`.`Culture_Subspecies`, `c`.`Culture_Validation`, `c`.`Culture_License_Charge`, `c`.`Culture_License_Title`, `c`.`Culture_License_Tag_Text`, `c`.`Culture_License_Tog_Text`, `c`.`Culture_Manufacturer_Name`, `c`.`Culture_Manufacturer_Rating`, `c`.`Culture_Manufacturer_Tag_Text`, `c`.`Culture_Manufacturer_Tog_Text`, `c`.`Milk_Rating`, `c`.`Milk_Species`, `c`.`Milk_Subspecies`, `c`.`Milk_Validation`, `c`.`Milk_License_Charge`, `c`.`Milk_License_Title`, `c`.`Milk_License_Tag_Text`, `c`.`Milk_License_Tog_Text`, `c`.`Milk_Manufacturer_Name`, `c`.`Milk_Manufacturer_Rating`, `c`.`Milk_Manufacturer_Tag_Text`, `c`.`Milk_Manufacturer_Tog_Text` +FROM `Child` AS `c` +LEFT JOIN `Parent` AS `p` ON `c`.`ParentId` = `p`.`Id` +WHERE `p`.`Id` = {AssertSqlHelper.Parameter("@__entity_equality_called_0_Id")} +"""); + } + + private void AssertSql(string expected) + { + expected ??= ""; + var sql = Sql ?? ""; + try + { + Assert.Equal( + expected, sql, ignoreLineEndingDifferences: true); + } + catch + { + var methodCallLine = Environment.StackTrace.Split( + [Environment.NewLine], + StringSplitOptions.RemoveEmptyEntries)[2][6..]; + + var indexMethodEnding = methodCallLine.IndexOf(')') + 1; + var testName = methodCallLine.Substring(0, indexMethodEnding); + var parts = methodCallLine[indexMethodEnding..].Split(" ", StringSplitOptions.RemoveEmptyEntries); + var fileName = parts[1][..^5]; + var lineNumber = int.Parse(parts[2]); + + var currentDirectory = Directory.GetCurrentDirectory(); + var logFile = currentDirectory.Substring( + 0, + currentDirectory.LastIndexOf( + $"{Path.DirectorySeparatorChar}artifacts{Path.DirectorySeparatorChar}", + StringComparison.Ordinal) + + 1) + + "QueryBaseline.txt"; -SELECT `e`.`Id`, `e`.`ParentId` - FROM `Child` AS `e` - WHERE `e`.`ParentId` = {AssertSqlHelper.Parameter("@__p_0")}", - Sql, - ignoreLineEndingDifferences: true); + var testInfo = testName + " : " + lineNumber + FileNewLine; + var newBaseLine = $@" AssertSql( + {"@\"" + sql.Replace("\"", "\"\"") + "\""}); + +"; + + var contents = testInfo + newBaseLine + FileNewLine + "--------------------" + FileNewLine; + + File.AppendAllText(logFile, contents); + + throw; + } } protected override void ClearLog() => Fixture.TestSqlLoggerFactory.Clear(); protected override void RecordLog() => Sql = Fixture.TestSqlLoggerFactory.Sql; + private const string FileNewLine = @" +"; + private string Sql { get; set; } public class LoadJetFixture : LoadFixtureBase diff --git a/test/EFCore.Jet.FunctionalTests/LoadJetTest.cs b/test/EFCore.Jet.FunctionalTests/LoadJetTest.cs index d76b8219..98b282ba 100644 --- a/test/EFCore.Jet.FunctionalTests/LoadJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/LoadJetTest.cs @@ -1592,7 +1592,7 @@ public override async Task Load_one_to_one_reference_to_principal_using_Query_nu private const string FileNewLine = @" "; - private void AssertSql(string expected = null) + private void AssertSql(string? expected = null) { var sql = Sql ?? ""; expected ??= ""; @@ -1636,7 +1636,7 @@ private void AssertSql(string expected = null) } } - private string Sql { get; set; } + private string? Sql { get; set; } public class LoadJetFixture : LoadFixtureBase { diff --git a/test/EFCore.Jet.FunctionalTests/LoggingJetTest.cs b/test/EFCore.Jet.FunctionalTests/LoggingJetTest.cs index a4b6c10e..14d6ed07 100644 --- a/test/EFCore.Jet.FunctionalTests/LoggingJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/LoggingJetTest.cs @@ -12,12 +12,48 @@ using System.Reflection; using EntityFrameworkCore.Jet.Diagnostics.Internal; using Microsoft.EntityFrameworkCore.TestUtilities; +using Microsoft.EntityFrameworkCore.Diagnostics.Internal; +using Microsoft.EntityFrameworkCore.Diagnostics; +#nullable disable // ReSharper disable InconsistentNaming namespace EntityFrameworkCore.Jet.FunctionalTests { public class LoggingJetTest : LoggingRelationalTestBase { + [ConditionalFact] + public virtual void StoredProcedureConcurrencyTokenNotMapped_throws_by_default() + { + using var context = new StoredProcedureConcurrencyTokenNotMappedContext(CreateOptionsBuilder(new ServiceCollection())); + + var definition = RelationalResources.LogStoredProcedureConcurrencyTokenNotMapped(CreateTestLogger()); + Assert.Equal( + CoreStrings.WarningAsErrorTemplate( + RelationalEventId.StoredProcedureConcurrencyTokenNotMapped.ToString(), + definition.GenerateMessage(nameof(Animal), "Animal_Update", nameof(Animal.Name)), + "RelationalEventId.StoredProcedureConcurrencyTokenNotMapped"), + Assert.Throws( + () => context.Model).Message); + } + + protected class StoredProcedureConcurrencyTokenNotMappedContext(DbContextOptionsBuilder optionsBuilder) : DbContext(optionsBuilder.Options) + { + protected override void OnModelCreating(ModelBuilder modelBuilder) + => modelBuilder.Entity( + b => + { + b.Ignore(a => a.FavoritePerson); + b.Property(e => e.Name).IsRowVersion(); + b.UpdateUsingStoredProcedure( + b => + { + b.HasOriginalValueParameter(e => e.Id); + b.HasParameter(e => e.Name, p => p.IsOutput()); + b.HasRowsAffectedReturnValue(); + }); + }); + } + protected override DbContextOptionsBuilder CreateOptionsBuilder( IServiceCollection services, Action> relationalAction) diff --git a/test/EFCore.Jet.FunctionalTests/ManyToManyFieldsLoadSqlServerTest.cs b/test/EFCore.Jet.FunctionalTests/ManyToManyFieldsLoadSqlServerTest.cs index 1060b00f..61e8e1ea 100644 --- a/test/EFCore.Jet.FunctionalTests/ManyToManyFieldsLoadSqlServerTest.cs +++ b/test/EFCore.Jet.FunctionalTests/ManyToManyFieldsLoadSqlServerTest.cs @@ -15,6 +15,7 @@ namespace EntityFrameworkCore.Jet.FunctionalTests; +#nullable disable public class ManyToManyFieldsLoadJetTest : ManyToManyFieldsLoadTestBase< ManyToManyFieldsLoadJetTest.ManyToManyFieldsLoadJetFixture> { @@ -34,21 +35,21 @@ public override async Task Load_collection(EntityState state, QueryTrackingBehav @__p_0='3' @__p_0='3' -SELECT `t`.`Id`, `t`.`CollectionInverseId`, `t`.`Name`, `t`.`ReferenceInverseId`, `e`.`Id`, `t`.`OneId`, `t`.`TwoId`, `t0`.`OneId`, `t0`.`TwoId`, `t0`.`Id`, `t0`.`Name` +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s0`.`OneId`, `s0`.`TwoId`, `s0`.`Id`, `s0`.`Name` FROM (`EntityOnes` AS `e` INNER JOIN ( SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `j`.`OneId`, `j`.`TwoId` FROM `JoinOneToTwo` AS `j` INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` -) AS `t` ON `e`.`Id` = `t`.`OneId`) +) AS `s` ON `e`.`Id` = `s`.`OneId`) LEFT JOIN ( SELECT `j0`.`OneId`, `j0`.`TwoId`, `e1`.`Id`, `e1`.`Name` FROM `JoinOneToTwo` AS `j0` INNER JOIN `EntityOnes` AS `e1` ON `j0`.`OneId` = `e1`.`Id` WHERE `e1`.`Id` = {AssertSqlHelper.Parameter("@__p_0")} -) AS `t0` ON `t`.`Id` = `t0`.`TwoId` +) AS `s0` ON `s`.`Id` = `s0`.`TwoId` WHERE `e`.`Id` = {AssertSqlHelper.Parameter("@__p_0")} -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`TwoId`, `t`.`Id`, `t0`.`OneId`, `t0`.`TwoId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s0`.`OneId`, `s0`.`TwoId` """); } @@ -61,21 +62,21 @@ public override async Task Load_collection_using_Query_with_Include_for_inverse( @__p_0='3' @__p_0='3' -SELECT `t`.`Id`, `t`.`CollectionInverseId`, `t`.`Name`, `t`.`ReferenceInverseId`, `e`.`Id`, `t`.`OneSkipSharedId`, `t`.`TwoSkipSharedId`, `t0`.`OneSkipSharedId`, `t0`.`TwoSkipSharedId`, `t0`.`Id`, `t0`.`Name` +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId`, `s0`.`OneSkipSharedId`, `s0`.`TwoSkipSharedId`, `s0`.`Id`, `s0`.`Name` FROM (`EntityOnes` AS `e` INNER JOIN ( SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`Name`, `e1`.`ReferenceInverseId`, `e0`.`OneSkipSharedId`, `e0`.`TwoSkipSharedId` FROM `EntityOneEntityTwo` AS `e0` INNER JOIN `EntityTwos` AS `e1` ON `e0`.`TwoSkipSharedId` = `e1`.`Id` -) AS `t` ON `e`.`Id` = `t`.`OneSkipSharedId`) +) AS `s` ON `e`.`Id` = `s`.`OneSkipSharedId`) LEFT JOIN ( SELECT `e2`.`OneSkipSharedId`, `e2`.`TwoSkipSharedId`, `e3`.`Id`, `e3`.`Name` FROM `EntityOneEntityTwo` AS `e2` INNER JOIN `EntityOnes` AS `e3` ON `e2`.`OneSkipSharedId` = `e3`.`Id` WHERE `e3`.`Id` = {AssertSqlHelper.Parameter("@__p_0")} -) AS `t0` ON `t`.`Id` = `t0`.`TwoSkipSharedId` +) AS `s0` ON `s`.`Id` = `s0`.`TwoSkipSharedId` WHERE `e`.`Id` = {AssertSqlHelper.Parameter("@__p_0")} -ORDER BY `e`.`Id`, `t`.`OneSkipSharedId`, `t`.`TwoSkipSharedId`, `t`.`Id`, `t0`.`OneSkipSharedId`, `t0`.`TwoSkipSharedId` +ORDER BY `e`.`Id`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId`, `s`.`Id`, `s0`.`OneSkipSharedId`, `s0`.`TwoSkipSharedId` """); } @@ -88,26 +89,26 @@ public override async Task Load_collection_using_Query_with_Include_for_same_col @__p_0='3' @__p_0='3' -SELECT `t`.`Id`, `t`.`CollectionInverseId`, `t`.`Name`, `t`.`ReferenceInverseId`, `e`.`Id`, `t`.`OneSkipSharedId`, `t`.`TwoSkipSharedId`, `t0`.`OneSkipSharedId`, `t0`.`TwoSkipSharedId`, `t0`.`Id`, `t0`.`Name`, `t0`.`OneSkipSharedId0`, `t0`.`TwoSkipSharedId0`, `t0`.`Id0`, `t0`.`CollectionInverseId`, `t0`.`Name0`, `t0`.`ReferenceInverseId` +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId`, `s1`.`OneSkipSharedId`, `s1`.`TwoSkipSharedId`, `s1`.`Id`, `s1`.`Name`, `s1`.`OneSkipSharedId0`, `s1`.`TwoSkipSharedId0`, `s1`.`Id0`, `s1`.`CollectionInverseId`, `s1`.`Name0`, `s1`.`ReferenceInverseId` FROM (`EntityOnes` AS `e` INNER JOIN ( SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`Name`, `e1`.`ReferenceInverseId`, `e0`.`OneSkipSharedId`, `e0`.`TwoSkipSharedId` FROM `EntityOneEntityTwo` AS `e0` INNER JOIN `EntityTwos` AS `e1` ON `e0`.`TwoSkipSharedId` = `e1`.`Id` -) AS `t` ON `e`.`Id` = `t`.`OneSkipSharedId`) +) AS `s` ON `e`.`Id` = `s`.`OneSkipSharedId`) LEFT JOIN ( - SELECT `e2`.`OneSkipSharedId`, `e2`.`TwoSkipSharedId`, `e3`.`Id`, `e3`.`Name`, `t1`.`OneSkipSharedId` AS `OneSkipSharedId0`, `t1`.`TwoSkipSharedId` AS `TwoSkipSharedId0`, `t1`.`Id` AS `Id0`, `t1`.`CollectionInverseId`, `t1`.`Name` AS `Name0`, `t1`.`ReferenceInverseId` + SELECT `e2`.`OneSkipSharedId`, `e2`.`TwoSkipSharedId`, `e3`.`Id`, `e3`.`Name`, `s0`.`OneSkipSharedId` AS `OneSkipSharedId0`, `s0`.`TwoSkipSharedId` AS `TwoSkipSharedId0`, `s0`.`Id` AS `Id0`, `s0`.`CollectionInverseId`, `s0`.`Name` AS `Name0`, `s0`.`ReferenceInverseId` FROM (`EntityOneEntityTwo` AS `e2` INNER JOIN `EntityOnes` AS `e3` ON `e2`.`OneSkipSharedId` = `e3`.`Id`) LEFT JOIN ( SELECT `e4`.`OneSkipSharedId`, `e4`.`TwoSkipSharedId`, `e5`.`Id`, `e5`.`CollectionInverseId`, `e5`.`Name`, `e5`.`ReferenceInverseId` FROM `EntityOneEntityTwo` AS `e4` INNER JOIN `EntityTwos` AS `e5` ON `e4`.`TwoSkipSharedId` = `e5`.`Id` - ) AS `t1` ON `e3`.`Id` = `t1`.`OneSkipSharedId` + ) AS `s0` ON `e3`.`Id` = `s0`.`OneSkipSharedId` WHERE `e3`.`Id` = {AssertSqlHelper.Parameter("@__p_0")} -) AS `t0` ON `t`.`Id` = `t0`.`TwoSkipSharedId` +) AS `s1` ON `s`.`Id` = `s1`.`TwoSkipSharedId` WHERE `e`.`Id` = {AssertSqlHelper.Parameter("@__p_0")} -ORDER BY `e`.`Id`, `t`.`OneSkipSharedId`, `t`.`TwoSkipSharedId`, `t`.`Id`, `t0`.`OneSkipSharedId`, `t0`.`TwoSkipSharedId`, `t0`.`Id`, `t0`.`OneSkipSharedId0`, `t0`.`TwoSkipSharedId0` +ORDER BY `e`.`Id`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId`, `s`.`Id`, `s1`.`OneSkipSharedId`, `s1`.`TwoSkipSharedId`, `s1`.`Id`, `s1`.`OneSkipSharedId0`, `s1`.`TwoSkipSharedId0` """); } @@ -120,26 +121,26 @@ public override async Task Load_collection_using_Query_with_Include(bool async) @__p_0='3' @__p_0='3' -SELECT `t`.`Id`, `t`.`CollectionInverseId`, `t`.`Name`, `t`.`ReferenceInverseId`, `e`.`Id`, `t`.`OneSkipSharedId`, `t`.`TwoSkipSharedId`, `t0`.`OneSkipSharedId`, `t0`.`TwoSkipSharedId`, `t0`.`Id`, `t0`.`Name`, `t1`.`ThreeId`, `t1`.`TwoId`, `t1`.`Id`, `t1`.`CollectionInverseId`, `t1`.`Name`, `t1`.`ReferenceInverseId` +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId`, `s0`.`OneSkipSharedId`, `s0`.`TwoSkipSharedId`, `s0`.`Id`, `s0`.`Name`, `s1`.`ThreeId`, `s1`.`TwoId`, `s1`.`Id`, `s1`.`CollectionInverseId`, `s1`.`Name`, `s1`.`ReferenceInverseId` FROM ((`EntityOnes` AS `e` INNER JOIN ( SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`Name`, `e1`.`ReferenceInverseId`, `e0`.`OneSkipSharedId`, `e0`.`TwoSkipSharedId` FROM `EntityOneEntityTwo` AS `e0` INNER JOIN `EntityTwos` AS `e1` ON `e0`.`TwoSkipSharedId` = `e1`.`Id` -) AS `t` ON `e`.`Id` = `t`.`OneSkipSharedId`) +) AS `s` ON `e`.`Id` = `s`.`OneSkipSharedId`) LEFT JOIN ( SELECT `e2`.`OneSkipSharedId`, `e2`.`TwoSkipSharedId`, `e3`.`Id`, `e3`.`Name` FROM `EntityOneEntityTwo` AS `e2` INNER JOIN `EntityOnes` AS `e3` ON `e2`.`OneSkipSharedId` = `e3`.`Id` WHERE `e3`.`Id` = {AssertSqlHelper.Parameter("@__p_0")} -) AS `t0` ON `t`.`Id` = `t0`.`TwoSkipSharedId`) +) AS `s0` ON `s`.`Id` = `s0`.`TwoSkipSharedId`) LEFT JOIN ( SELECT `j`.`ThreeId`, `j`.`TwoId`, `e4`.`Id`, `e4`.`CollectionInverseId`, `e4`.`Name`, `e4`.`ReferenceInverseId` FROM `JoinTwoToThree` AS `j` INNER JOIN `EntityThrees` AS `e4` ON `j`.`ThreeId` = `e4`.`Id` -) AS `t1` ON `t`.`Id` = `t1`.`TwoId` +) AS `s1` ON `s`.`Id` = `s1`.`TwoId` WHERE `e`.`Id` = {AssertSqlHelper.Parameter("@__p_0")} -ORDER BY `e`.`Id`, `t`.`OneSkipSharedId`, `t`.`TwoSkipSharedId`, `t`.`Id`, `t0`.`OneSkipSharedId`, `t0`.`TwoSkipSharedId`, `t0`.`Id`, `t1`.`ThreeId`, `t1`.`TwoId` +ORDER BY `e`.`Id`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId`, `s`.`Id`, `s0`.`OneSkipSharedId`, `s0`.`TwoSkipSharedId`, `s0`.`Id`, `s1`.`ThreeId`, `s1`.`TwoId` """); } @@ -152,27 +153,27 @@ public override async Task Load_collection_using_Query_with_filtered_Include(boo @__p_0='3' @__p_0='3' -SELECT `t`.`Id`, `t`.`CollectionInverseId`, `t`.`Name`, `t`.`ReferenceInverseId`, `e`.`Id`, `t`.`OneSkipSharedId`, `t`.`TwoSkipSharedId`, `t0`.`OneSkipSharedId`, `t0`.`TwoSkipSharedId`, `t0`.`Id`, `t0`.`Name`, `t1`.`ThreeId`, `t1`.`TwoId`, `t1`.`Id`, `t1`.`CollectionInverseId`, `t1`.`Name`, `t1`.`ReferenceInverseId` +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId`, `s0`.`OneSkipSharedId`, `s0`.`TwoSkipSharedId`, `s0`.`Id`, `s0`.`Name`, `s1`.`ThreeId`, `s1`.`TwoId`, `s1`.`Id`, `s1`.`CollectionInverseId`, `s1`.`Name`, `s1`.`ReferenceInverseId` FROM ((`EntityOnes` AS `e` INNER JOIN ( SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`Name`, `e1`.`ReferenceInverseId`, `e0`.`OneSkipSharedId`, `e0`.`TwoSkipSharedId` FROM `EntityOneEntityTwo` AS `e0` INNER JOIN `EntityTwos` AS `e1` ON `e0`.`TwoSkipSharedId` = `e1`.`Id` -) AS `t` ON `e`.`Id` = `t`.`OneSkipSharedId`) +) AS `s` ON `e`.`Id` = `s`.`OneSkipSharedId`) LEFT JOIN ( SELECT `e2`.`OneSkipSharedId`, `e2`.`TwoSkipSharedId`, `e3`.`Id`, `e3`.`Name` FROM `EntityOneEntityTwo` AS `e2` INNER JOIN `EntityOnes` AS `e3` ON `e2`.`OneSkipSharedId` = `e3`.`Id` WHERE `e3`.`Id` = {AssertSqlHelper.Parameter("@__p_0")} -) AS `t0` ON `t`.`Id` = `t0`.`TwoSkipSharedId`) +) AS `s0` ON `s`.`Id` = `s0`.`TwoSkipSharedId`) LEFT JOIN ( SELECT `j`.`ThreeId`, `j`.`TwoId`, `e4`.`Id`, `e4`.`CollectionInverseId`, `e4`.`Name`, `e4`.`ReferenceInverseId` FROM `JoinTwoToThree` AS `j` INNER JOIN `EntityThrees` AS `e4` ON `j`.`ThreeId` = `e4`.`Id` WHERE `e4`.`Id` IN (13, 11) -) AS `t1` ON `t`.`Id` = `t1`.`TwoId` +) AS `s1` ON `s`.`Id` = `s1`.`TwoId` WHERE `e`.`Id` = {AssertSqlHelper.Parameter("@__p_0")} -ORDER BY `e`.`Id`, `t`.`OneSkipSharedId`, `t`.`TwoSkipSharedId`, `t`.`Id`, `t0`.`OneSkipSharedId`, `t0`.`TwoSkipSharedId`, `t0`.`Id`, `t1`.`ThreeId`, `t1`.`TwoId` +ORDER BY `e`.`Id`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId`, `s`.`Id`, `s0`.`OneSkipSharedId`, `s0`.`TwoSkipSharedId`, `s0`.`Id`, `s1`.`ThreeId`, `s1`.`TwoId` """); } @@ -213,30 +214,30 @@ public override async Task Load_collection_using_Query_with_join(bool async) @__p_0='3' @__p_0='3' -SELECT `t`.`Id`, `t`.`CollectionInverseId`, `t`.`Name`, `t`.`ReferenceInverseId`, `e`.`Id`, `t`.`OneSkipSharedId`, `t`.`TwoSkipSharedId`, `t0`.`Id`, `t0`.`OneSkipSharedId`, `t0`.`TwoSkipSharedId`, `t0`.`Id0`, `t2`.`OneSkipSharedId`, `t2`.`TwoSkipSharedId`, `t2`.`Id`, `t2`.`Name`, `t0`.`CollectionInverseId`, `t0`.`Name0`, `t0`.`ReferenceInverseId` +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId`, `s1`.`Id`, `s1`.`OneSkipSharedId`, `s1`.`TwoSkipSharedId`, `s1`.`Id0`, `s2`.`OneSkipSharedId`, `s2`.`TwoSkipSharedId`, `s2`.`Id`, `s2`.`Name`, `s1`.`CollectionInverseId`, `s1`.`Name0`, `s1`.`ReferenceInverseId` FROM ((`EntityOnes` AS `e` INNER JOIN ( SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`Name`, `e1`.`ReferenceInverseId`, `e0`.`OneSkipSharedId`, `e0`.`TwoSkipSharedId` FROM `EntityOneEntityTwo` AS `e0` INNER JOIN `EntityTwos` AS `e1` ON `e0`.`TwoSkipSharedId` = `e1`.`Id` -) AS `t` ON `e`.`Id` = `t`.`OneSkipSharedId`) +) AS `s` ON `e`.`Id` = `s`.`OneSkipSharedId`) LEFT JOIN ( - SELECT `e2`.`Id`, `t1`.`Id` AS `Id0`, `t1`.`CollectionInverseId`, `t1`.`Name` AS `Name0`, `t1`.`ReferenceInverseId`, `t1`.`OneSkipSharedId`, `t1`.`TwoSkipSharedId` + SELECT `e2`.`Id`, `s0`.`Id` AS `Id0`, `s0`.`CollectionInverseId`, `s0`.`Name` AS `Name0`, `s0`.`ReferenceInverseId`, `s0`.`OneSkipSharedId`, `s0`.`TwoSkipSharedId` FROM `EntityOnes` AS `e2` INNER JOIN ( SELECT `e4`.`Id`, `e4`.`CollectionInverseId`, `e4`.`Name`, `e4`.`ReferenceInverseId`, `e3`.`OneSkipSharedId`, `e3`.`TwoSkipSharedId` FROM `EntityOneEntityTwo` AS `e3` INNER JOIN `EntityTwos` AS `e4` ON `e3`.`TwoSkipSharedId` = `e4`.`Id` - ) AS `t1` ON `e2`.`Id` = `t1`.`OneSkipSharedId` -) AS `t0` ON `t`.`Id` = `t0`.`Id0`) + ) AS `s0` ON `e2`.`Id` = `s0`.`OneSkipSharedId` +) AS `s1` ON `s`.`Id` = `s1`.`Id0`) LEFT JOIN ( SELECT `e5`.`OneSkipSharedId`, `e5`.`TwoSkipSharedId`, `e6`.`Id`, `e6`.`Name` FROM `EntityOneEntityTwo` AS `e5` INNER JOIN `EntityOnes` AS `e6` ON `e5`.`OneSkipSharedId` = `e6`.`Id` WHERE `e6`.`Id` = {AssertSqlHelper.Parameter("@__p_0")} -) AS `t2` ON `t`.`Id` = `t2`.`TwoSkipSharedId` -WHERE (`e`.`Id` = {AssertSqlHelper.Parameter("@__p_0")}) AND (`t`.`Id` IS NOT NULL AND `t0`.`Id0` IS NOT NULL) -ORDER BY `e`.`Id`, `t`.`OneSkipSharedId`, `t`.`TwoSkipSharedId`, `t`.`Id`, `t0`.`Id`, `t0`.`OneSkipSharedId`, `t0`.`TwoSkipSharedId`, `t0`.`Id0`, `t2`.`OneSkipSharedId`, `t2`.`TwoSkipSharedId` +) AS `s2` ON `s`.`Id` = `s2`.`TwoSkipSharedId` +WHERE (`e`.`Id` = {AssertSqlHelper.Parameter("@__p_0")}) AND (`s`.`Id` IS NOT NULL AND `s1`.`Id0` IS NOT NULL) +ORDER BY `e`.`Id`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId`, `s`.`Id`, `s1`.`Id`, `s1`.`OneSkipSharedId`, `s1`.`TwoSkipSharedId`, `s1`.`Id0`, `s2`.`OneSkipSharedId`, `s2`.`TwoSkipSharedId` """); } @@ -295,7 +296,7 @@ private void AssertSql(params string[] expected) private string Sql { get; set; } - public class ManyToManyFieldsLoadJetFixture : ManyToManyFieldsLoadFixtureBase + public class ManyToManyFieldsLoadJetFixture : ManyToManyFieldsLoadFixtureBase, ITestSqlLoggerFactory { public TestSqlLoggerFactory TestSqlLoggerFactory => (TestSqlLoggerFactory)ListLoggerFactory; diff --git a/test/EFCore.Jet.FunctionalTests/ManyToManyLoadSqlServerTest.cs b/test/EFCore.Jet.FunctionalTests/ManyToManyLoadSqlServerTest.cs index 2c75fd74..1de6b61d 100644 --- a/test/EFCore.Jet.FunctionalTests/ManyToManyLoadSqlServerTest.cs +++ b/test/EFCore.Jet.FunctionalTests/ManyToManyLoadSqlServerTest.cs @@ -13,7 +13,7 @@ using Xunit.Abstractions; namespace EntityFrameworkCore.Jet.FunctionalTests; - +#nullable disable public class ManyToManyLoadJetTest : ManyToManyLoadTestBase { public ManyToManyLoadJetTest(ManyToManyLoadJetFixture fixture, ITestOutputHelper testOutputHelper) @@ -33,41 +33,41 @@ public override async Task Load_collection(EntityState state, QueryTrackingBehav @__p_0='3' @__p_0='3' -SELECT `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name`, `t`.`ReferenceInverseId`, `e`.`Id`, `t`.`OneId`, `t`.`TwoId`, `t0`.`Id`, `t0`.`Name`, `t0`.`OneId`, `t0`.`TwoId` +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s0`.`Id`, `s0`.`Name`, `s0`.`OneId`, `s0`.`TwoId` FROM (`EntityOnes` AS `e` INNER JOIN ( SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `j`.`OneId`, `j`.`TwoId` FROM `JoinOneToTwo` AS `j` INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` -) AS `t` ON `e`.`Id` = `t`.`OneId`) +) AS `s` ON `e`.`Id` = `s`.`OneId`) LEFT JOIN ( SELECT `e1`.`Id`, `e1`.`Name`, `j0`.`OneId`, `j0`.`TwoId` FROM `JoinOneToTwo` AS `j0` INNER JOIN `EntityOnes` AS `e1` ON `j0`.`OneId` = `e1`.`Id` WHERE `e1`.`Id` = {AssertSqlHelper.Parameter("@__p_0")} -) AS `t0` ON `t`.`Id` = `t0`.`TwoId` +) AS `s0` ON `s`.`Id` = `s0`.`TwoId` WHERE `e`.`Id` = {AssertSqlHelper.Parameter("@__p_0")} -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`TwoId`, `t`.`Id`, `t0`.`OneId`, `t0`.`TwoId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s0`.`OneId`, `s0`.`TwoId` """ : $""" @__p_0='3' @__p_0='3' -SELECT `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name`, `t`.`ReferenceInverseId`, `e`.`Id`, `t`.`OneId`, `t`.`TwoId`, `t0`.`OneId`, `t0`.`TwoId`, `t0`.`JoinOneToTwoExtraId`, `t0`.`Id`, `t0`.`Name` +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s0`.`OneId`, `s0`.`TwoId`, `s0`.`JoinOneToTwoExtraId`, `s0`.`Id`, `s0`.`Name` FROM (`EntityOnes` AS `e` INNER JOIN ( SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `j`.`OneId`, `j`.`TwoId` FROM `JoinOneToTwo` AS `j` INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` -) AS `t` ON `e`.`Id` = `t`.`OneId`) +) AS `s` ON `e`.`Id` = `s`.`OneId`) LEFT JOIN ( SELECT `j0`.`OneId`, `j0`.`TwoId`, `j0`.`JoinOneToTwoExtraId`, `e1`.`Id`, `e1`.`Name` FROM `JoinOneToTwo` AS `j0` INNER JOIN `EntityOnes` AS `e1` ON `j0`.`OneId` = `e1`.`Id` WHERE `e1`.`Id` = {AssertSqlHelper.Parameter("@__p_0")} -) AS `t0` ON `t`.`Id` = `t0`.`TwoId` +) AS `s0` ON `s`.`Id` = `s0`.`TwoId` WHERE `e`.`Id` = {AssertSqlHelper.Parameter("@__p_0")} -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`TwoId`, `t`.`Id`, `t0`.`OneId`, `t0`.`TwoId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s0`.`OneId`, `s0`.`TwoId` """); } @@ -80,21 +80,21 @@ public override async Task Load_collection_using_Query_with_Include_for_inverse( @__p_0='3' @__p_0='3' -SELECT `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name`, `t`.`ReferenceInverseId`, `e`.`Id`, `t`.`OneSkipSharedId`, `t`.`TwoSkipSharedId`, `t0`.`OneSkipSharedId`, `t0`.`TwoSkipSharedId`, `t0`.`Id`, `t0`.`Name` +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId`, `s0`.`OneSkipSharedId`, `s0`.`TwoSkipSharedId`, `s0`.`Id`, `s0`.`Name` FROM (`EntityOnes` AS `e` INNER JOIN ( SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name`, `e1`.`ReferenceInverseId`, `e0`.`OneSkipSharedId`, `e0`.`TwoSkipSharedId` FROM `EntityOneEntityTwo` AS `e0` INNER JOIN `EntityTwos` AS `e1` ON `e0`.`TwoSkipSharedId` = `e1`.`Id` -) AS `t` ON `e`.`Id` = `t`.`OneSkipSharedId`) +) AS `s` ON `e`.`Id` = `s`.`OneSkipSharedId`) LEFT JOIN ( SELECT `e2`.`OneSkipSharedId`, `e2`.`TwoSkipSharedId`, `e3`.`Id`, `e3`.`Name` FROM `EntityOneEntityTwo` AS `e2` INNER JOIN `EntityOnes` AS `e3` ON `e2`.`OneSkipSharedId` = `e3`.`Id` WHERE `e3`.`Id` = {AssertSqlHelper.Parameter("@__p_0")} -) AS `t0` ON `t`.`Id` = `t0`.`TwoSkipSharedId` +) AS `s0` ON `s`.`Id` = `s0`.`TwoSkipSharedId` WHERE `e`.`Id` = {AssertSqlHelper.Parameter("@__p_0")} -ORDER BY `e`.`Id`, `t`.`OneSkipSharedId`, `t`.`TwoSkipSharedId`, `t`.`Id`, `t0`.`OneSkipSharedId`, `t0`.`TwoSkipSharedId` +ORDER BY `e`.`Id`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId`, `s`.`Id`, `s0`.`OneSkipSharedId`, `s0`.`TwoSkipSharedId` """); } @@ -107,26 +107,26 @@ public override async Task Load_collection_using_Query_with_Include_for_same_col @__p_0='3' @__p_0='3' -SELECT `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name`, `t`.`ReferenceInverseId`, `e`.`Id`, `t`.`OneSkipSharedId`, `t`.`TwoSkipSharedId`, `t0`.`OneSkipSharedId`, `t0`.`TwoSkipSharedId`, `t0`.`Id`, `t0`.`Name`, `t0`.`OneSkipSharedId0`, `t0`.`TwoSkipSharedId0`, `t0`.`Id0`, `t0`.`CollectionInverseId`, `t0`.`ExtraId`, `t0`.`Name0`, `t0`.`ReferenceInverseId` +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId`, `s1`.`OneSkipSharedId`, `s1`.`TwoSkipSharedId`, `s1`.`Id`, `s1`.`Name`, `s1`.`OneSkipSharedId0`, `s1`.`TwoSkipSharedId0`, `s1`.`Id0`, `s1`.`CollectionInverseId`, `s1`.`ExtraId`, `s1`.`Name0`, `s1`.`ReferenceInverseId` FROM (`EntityOnes` AS `e` INNER JOIN ( SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name`, `e1`.`ReferenceInverseId`, `e0`.`OneSkipSharedId`, `e0`.`TwoSkipSharedId` FROM `EntityOneEntityTwo` AS `e0` INNER JOIN `EntityTwos` AS `e1` ON `e0`.`TwoSkipSharedId` = `e1`.`Id` -) AS `t` ON `e`.`Id` = `t`.`OneSkipSharedId`) +) AS `s` ON `e`.`Id` = `s`.`OneSkipSharedId`) LEFT JOIN ( - SELECT `e2`.`OneSkipSharedId`, `e2`.`TwoSkipSharedId`, `e3`.`Id`, `e3`.`Name`, `t1`.`OneSkipSharedId` AS `OneSkipSharedId0`, `t1`.`TwoSkipSharedId` AS `TwoSkipSharedId0`, `t1`.`Id` AS `Id0`, `t1`.`CollectionInverseId`, `t1`.`ExtraId`, `t1`.`Name` AS `Name0`, `t1`.`ReferenceInverseId` + SELECT `e2`.`OneSkipSharedId`, `e2`.`TwoSkipSharedId`, `e3`.`Id`, `e3`.`Name`, `s0`.`OneSkipSharedId` AS `OneSkipSharedId0`, `s0`.`TwoSkipSharedId` AS `TwoSkipSharedId0`, `s0`.`Id` AS `Id0`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name` AS `Name0`, `s0`.`ReferenceInverseId` FROM (`EntityOneEntityTwo` AS `e2` INNER JOIN `EntityOnes` AS `e3` ON `e2`.`OneSkipSharedId` = `e3`.`Id`) LEFT JOIN ( SELECT `e4`.`OneSkipSharedId`, `e4`.`TwoSkipSharedId`, `e5`.`Id`, `e5`.`CollectionInverseId`, `e5`.`ExtraId`, `e5`.`Name`, `e5`.`ReferenceInverseId` FROM `EntityOneEntityTwo` AS `e4` INNER JOIN `EntityTwos` AS `e5` ON `e4`.`TwoSkipSharedId` = `e5`.`Id` - ) AS `t1` ON `e3`.`Id` = `t1`.`OneSkipSharedId` + ) AS `s0` ON `e3`.`Id` = `s0`.`OneSkipSharedId` WHERE `e3`.`Id` = {AssertSqlHelper.Parameter("@__p_0")} -) AS `t0` ON `t`.`Id` = `t0`.`TwoSkipSharedId` +) AS `s1` ON `s`.`Id` = `s1`.`TwoSkipSharedId` WHERE `e`.`Id` = {AssertSqlHelper.Parameter("@__p_0")} -ORDER BY `e`.`Id`, `t`.`OneSkipSharedId`, `t`.`TwoSkipSharedId`, `t`.`Id`, `t0`.`OneSkipSharedId`, `t0`.`TwoSkipSharedId`, `t0`.`Id`, `t0`.`OneSkipSharedId0`, `t0`.`TwoSkipSharedId0` +ORDER BY `e`.`Id`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId`, `s`.`Id`, `s1`.`OneSkipSharedId`, `s1`.`TwoSkipSharedId`, `s1`.`Id`, `s1`.`OneSkipSharedId0`, `s1`.`TwoSkipSharedId0` """); } @@ -139,26 +139,26 @@ public override async Task Load_collection_using_Query_with_Include(bool async) @__p_0='3' @__p_0='3' -SELECT `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name`, `t`.`ReferenceInverseId`, `e`.`Id`, `t`.`OneSkipSharedId`, `t`.`TwoSkipSharedId`, `t0`.`OneSkipSharedId`, `t0`.`TwoSkipSharedId`, `t0`.`Id`, `t0`.`Name`, `t1`.`ThreeId`, `t1`.`TwoId`, `t1`.`Id`, `t1`.`CollectionInverseId`, `t1`.`Name`, `t1`.`ReferenceInverseId` +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId`, `s0`.`OneSkipSharedId`, `s0`.`TwoSkipSharedId`, `s0`.`Id`, `s0`.`Name`, `s1`.`ThreeId`, `s1`.`TwoId`, `s1`.`Id`, `s1`.`CollectionInverseId`, `s1`.`Name`, `s1`.`ReferenceInverseId` FROM ((`EntityOnes` AS `e` INNER JOIN ( SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name`, `e1`.`ReferenceInverseId`, `e0`.`OneSkipSharedId`, `e0`.`TwoSkipSharedId` FROM `EntityOneEntityTwo` AS `e0` INNER JOIN `EntityTwos` AS `e1` ON `e0`.`TwoSkipSharedId` = `e1`.`Id` -) AS `t` ON `e`.`Id` = `t`.`OneSkipSharedId`) +) AS `s` ON `e`.`Id` = `s`.`OneSkipSharedId`) LEFT JOIN ( SELECT `e2`.`OneSkipSharedId`, `e2`.`TwoSkipSharedId`, `e3`.`Id`, `e3`.`Name` FROM `EntityOneEntityTwo` AS `e2` INNER JOIN `EntityOnes` AS `e3` ON `e2`.`OneSkipSharedId` = `e3`.`Id` WHERE `e3`.`Id` = {AssertSqlHelper.Parameter("@__p_0")} -) AS `t0` ON `t`.`Id` = `t0`.`TwoSkipSharedId`) +) AS `s0` ON `s`.`Id` = `s0`.`TwoSkipSharedId`) LEFT JOIN ( SELECT `j`.`ThreeId`, `j`.`TwoId`, `e4`.`Id`, `e4`.`CollectionInverseId`, `e4`.`Name`, `e4`.`ReferenceInverseId` FROM `JoinTwoToThree` AS `j` INNER JOIN `EntityThrees` AS `e4` ON `j`.`ThreeId` = `e4`.`Id` -) AS `t1` ON `t`.`Id` = `t1`.`TwoId` +) AS `s1` ON `s`.`Id` = `s1`.`TwoId` WHERE `e`.`Id` = {AssertSqlHelper.Parameter("@__p_0")} -ORDER BY `e`.`Id`, `t`.`OneSkipSharedId`, `t`.`TwoSkipSharedId`, `t`.`Id`, `t0`.`OneSkipSharedId`, `t0`.`TwoSkipSharedId`, `t0`.`Id`, `t1`.`ThreeId`, `t1`.`TwoId` +ORDER BY `e`.`Id`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId`, `s`.`Id`, `s0`.`OneSkipSharedId`, `s0`.`TwoSkipSharedId`, `s0`.`Id`, `s1`.`ThreeId`, `s1`.`TwoId` """); } @@ -171,27 +171,27 @@ public override async Task Load_collection_using_Query_with_filtered_Include(boo @__p_0='3' @__p_0='3' -SELECT `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name`, `t`.`ReferenceInverseId`, `e`.`Id`, `t`.`OneSkipSharedId`, `t`.`TwoSkipSharedId`, `t0`.`OneSkipSharedId`, `t0`.`TwoSkipSharedId`, `t0`.`Id`, `t0`.`Name`, `t1`.`ThreeId`, `t1`.`TwoId`, `t1`.`Id`, `t1`.`CollectionInverseId`, `t1`.`Name`, `t1`.`ReferenceInverseId` +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId`, `s0`.`OneSkipSharedId`, `s0`.`TwoSkipSharedId`, `s0`.`Id`, `s0`.`Name`, `s1`.`ThreeId`, `s1`.`TwoId`, `s1`.`Id`, `s1`.`CollectionInverseId`, `s1`.`Name`, `s1`.`ReferenceInverseId` FROM ((`EntityOnes` AS `e` INNER JOIN ( SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name`, `e1`.`ReferenceInverseId`, `e0`.`OneSkipSharedId`, `e0`.`TwoSkipSharedId` FROM `EntityOneEntityTwo` AS `e0` INNER JOIN `EntityTwos` AS `e1` ON `e0`.`TwoSkipSharedId` = `e1`.`Id` -) AS `t` ON `e`.`Id` = `t`.`OneSkipSharedId`) +) AS `s` ON `e`.`Id` = `s`.`OneSkipSharedId`) LEFT JOIN ( SELECT `e2`.`OneSkipSharedId`, `e2`.`TwoSkipSharedId`, `e3`.`Id`, `e3`.`Name` FROM `EntityOneEntityTwo` AS `e2` INNER JOIN `EntityOnes` AS `e3` ON `e2`.`OneSkipSharedId` = `e3`.`Id` WHERE `e3`.`Id` = {AssertSqlHelper.Parameter("@__p_0")} -) AS `t0` ON `t`.`Id` = `t0`.`TwoSkipSharedId`) +) AS `s0` ON `s`.`Id` = `s0`.`TwoSkipSharedId`) LEFT JOIN ( SELECT `j`.`ThreeId`, `j`.`TwoId`, `e4`.`Id`, `e4`.`CollectionInverseId`, `e4`.`Name`, `e4`.`ReferenceInverseId` FROM `JoinTwoToThree` AS `j` INNER JOIN `EntityThrees` AS `e4` ON `j`.`ThreeId` = `e4`.`Id` WHERE `e4`.`Id` IN (13, 11) -) AS `t1` ON `t`.`Id` = `t1`.`TwoId` +) AS `s1` ON `s`.`Id` = `s1`.`TwoId` WHERE `e`.`Id` = {AssertSqlHelper.Parameter("@__p_0")} -ORDER BY `e`.`Id`, `t`.`OneSkipSharedId`, `t`.`TwoSkipSharedId`, `t`.`Id`, `t0`.`OneSkipSharedId`, `t0`.`TwoSkipSharedId`, `t0`.`Id`, `t1`.`ThreeId`, `t1`.`TwoId` +ORDER BY `e`.`Id`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId`, `s`.`Id`, `s0`.`OneSkipSharedId`, `s0`.`TwoSkipSharedId`, `s0`.`Id`, `s1`.`ThreeId`, `s1`.`TwoId` """); } @@ -232,30 +232,30 @@ public override async Task Load_collection_using_Query_with_join(bool async) @__p_0='3' @__p_0='3' -SELECT `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name`, `t`.`ReferenceInverseId`, `e`.`Id`, `t`.`OneSkipSharedId`, `t`.`TwoSkipSharedId`, `t0`.`Id`, `t0`.`OneSkipSharedId`, `t0`.`TwoSkipSharedId`, `t0`.`Id0`, `t2`.`OneSkipSharedId`, `t2`.`TwoSkipSharedId`, `t2`.`Id`, `t2`.`Name`, `t0`.`CollectionInverseId`, `t0`.`ExtraId`, `t0`.`Name0`, `t0`.`ReferenceInverseId` +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId`, `s1`.`Id`, `s1`.`OneSkipSharedId`, `s1`.`TwoSkipSharedId`, `s1`.`Id0`, `s2`.`OneSkipSharedId`, `s2`.`TwoSkipSharedId`, `s2`.`Id`, `s2`.`Name`, `s1`.`CollectionInverseId`, `s1`.`ExtraId`, `s1`.`Name0`, `s1`.`ReferenceInverseId` FROM ((`EntityOnes` AS `e` INNER JOIN ( SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name`, `e1`.`ReferenceInverseId`, `e0`.`OneSkipSharedId`, `e0`.`TwoSkipSharedId` FROM `EntityOneEntityTwo` AS `e0` INNER JOIN `EntityTwos` AS `e1` ON `e0`.`TwoSkipSharedId` = `e1`.`Id` -) AS `t` ON `e`.`Id` = `t`.`OneSkipSharedId`) +) AS `s` ON `e`.`Id` = `s`.`OneSkipSharedId`) LEFT JOIN ( - SELECT `e2`.`Id`, `t1`.`Id` AS `Id0`, `t1`.`CollectionInverseId`, `t1`.`ExtraId`, `t1`.`Name` AS `Name0`, `t1`.`ReferenceInverseId`, `t1`.`OneSkipSharedId`, `t1`.`TwoSkipSharedId` + SELECT `e2`.`Id`, `s0`.`Id` AS `Id0`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name` AS `Name0`, `s0`.`ReferenceInverseId`, `s0`.`OneSkipSharedId`, `s0`.`TwoSkipSharedId` FROM `EntityOnes` AS `e2` INNER JOIN ( SELECT `e4`.`Id`, `e4`.`CollectionInverseId`, `e4`.`ExtraId`, `e4`.`Name`, `e4`.`ReferenceInverseId`, `e3`.`OneSkipSharedId`, `e3`.`TwoSkipSharedId` FROM `EntityOneEntityTwo` AS `e3` INNER JOIN `EntityTwos` AS `e4` ON `e3`.`TwoSkipSharedId` = `e4`.`Id` - ) AS `t1` ON `e2`.`Id` = `t1`.`OneSkipSharedId` -) AS `t0` ON `t`.`Id` = `t0`.`Id0`) + ) AS `s0` ON `e2`.`Id` = `s0`.`OneSkipSharedId` +) AS `s1` ON `s`.`Id` = `s1`.`Id0`) LEFT JOIN ( SELECT `e5`.`OneSkipSharedId`, `e5`.`TwoSkipSharedId`, `e6`.`Id`, `e6`.`Name` FROM `EntityOneEntityTwo` AS `e5` INNER JOIN `EntityOnes` AS `e6` ON `e5`.`OneSkipSharedId` = `e6`.`Id` WHERE `e6`.`Id` = {AssertSqlHelper.Parameter("@__p_0")} -) AS `t2` ON `t`.`Id` = `t2`.`TwoSkipSharedId` -WHERE (`e`.`Id` = {AssertSqlHelper.Parameter("@__p_0")}) AND (`t`.`Id` IS NOT NULL AND `t0`.`Id0` IS NOT NULL) -ORDER BY `e`.`Id`, `t`.`OneSkipSharedId`, `t`.`TwoSkipSharedId`, `t`.`Id`, `t0`.`Id`, `t0`.`OneSkipSharedId`, `t0`.`TwoSkipSharedId`, `t0`.`Id0`, `t2`.`OneSkipSharedId`, `t2`.`TwoSkipSharedId` +) AS `s2` ON `s`.`Id` = `s2`.`TwoSkipSharedId` +WHERE (`e`.`Id` = {AssertSqlHelper.Parameter("@__p_0")}) AND (`s`.`Id` IS NOT NULL AND `s1`.`Id0` IS NOT NULL) +ORDER BY `e`.`Id`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId`, `s`.`Id`, `s1`.`Id`, `s1`.`OneSkipSharedId`, `s1`.`TwoSkipSharedId`, `s1`.`Id0`, `s2`.`OneSkipSharedId`, `s2`.`TwoSkipSharedId` """); } @@ -273,7 +273,7 @@ private void AssertSql(params string[] expected) private string Sql { get; set; } - public class ManyToManyLoadJetFixture : ManyToManyLoadFixtureBase + public class ManyToManyLoadJetFixture : ManyToManyLoadFixtureBase, ITestSqlLoggerFactory { public TestSqlLoggerFactory TestSqlLoggerFactory => (TestSqlLoggerFactory)ListLoggerFactory; diff --git a/test/EFCore.Jet.FunctionalTests/ManyToManyTrackingJetTestBase.cs b/test/EFCore.Jet.FunctionalTests/ManyToManyTrackingJetTestBase.cs index 3e11b89f..45154244 100644 --- a/test/EFCore.Jet.FunctionalTests/ManyToManyTrackingJetTestBase.cs +++ b/test/EFCore.Jet.FunctionalTests/ManyToManyTrackingJetTestBase.cs @@ -30,8 +30,11 @@ protected ManyToManyTrackingJetTestBase(TFixture fixture) { "UnidirectionalEntityTwo.SelfSkipSharedRight", DeleteBehavior.ClientCascade }, }; - public class ManyToManyTrackingJetFixtureBase : ManyToManyTrackingRelationalFixture + public class ManyToManyTrackingJetFixtureBase : ManyToManyTrackingRelationalFixture, ITestSqlLoggerFactory { + public TestSqlLoggerFactory TestSqlLoggerFactory + => (TestSqlLoggerFactory)ListLoggerFactory; + protected override ITestStoreFactory TestStoreFactory => JetTestStoreFactory.Instance; diff --git a/test/EFCore.Jet.FunctionalTests/ManyToManyTrackingProxyGeneratedKeysJetTest.cs b/test/EFCore.Jet.FunctionalTests/ManyToManyTrackingProxyGeneratedKeysJetTest.cs index 2a8a2833..a978f80f 100644 --- a/test/EFCore.Jet.FunctionalTests/ManyToManyTrackingProxyGeneratedKeysJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/ManyToManyTrackingProxyGeneratedKeysJetTest.cs @@ -22,24 +22,21 @@ public override Task Can_insert_many_to_many_shared_with_payload(bool async) // Mutable properties aren't proxyable on Dictionary => Task.CompletedTask; - public override void Can_update_many_to_many_shared_with_payload() - { + public override Task Can_update_many_to_many_shared_with_payload() // Mutable properties aren't proxyable on Dictionary - } + => Task.CompletedTask; - public override void Can_insert_update_delete_shared_type_entity_type() - { + public override Task Can_insert_update_delete_shared_type_entity_type() // Mutable properties aren't proxyable on Dictionary - } + => Task.CompletedTask; public override Task Can_insert_many_to_many_shared_with_payload_unidirectional(bool async) // Mutable properties aren't proxyable on Dictionary => Task.CompletedTask; - public override void Can_update_many_to_many_shared_with_payload_unidirectional() - { + public override Task Can_update_many_to_many_shared_with_payload_unidirectional() // Mutable properties aren't proxyable on Dictionary - } + => Task.CompletedTask; protected override bool RequiresDetectChanges => false; diff --git a/test/EFCore.Jet.FunctionalTests/ManyToManyTrackingProxyJetTest.cs b/test/EFCore.Jet.FunctionalTests/ManyToManyTrackingProxyJetTest.cs index 93d3ec6f..8567bac6 100644 --- a/test/EFCore.Jet.FunctionalTests/ManyToManyTrackingProxyJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/ManyToManyTrackingProxyJetTest.cs @@ -35,24 +35,21 @@ public override Task Can_insert_many_to_many_shared_with_payload(bool async) // Mutable properties aren't proxyable on Dictionary => Task.CompletedTask; - public override void Can_update_many_to_many_shared_with_payload() - { + public override Task Can_update_many_to_many_shared_with_payload() // Mutable properties aren't proxyable on Dictionary - } + => Task.CompletedTask; - public override void Can_insert_update_delete_shared_type_entity_type() - { + public override Task Can_insert_update_delete_shared_type_entity_type() // Mutable properties aren't proxyable on Dictionary - } + => Task.CompletedTask; public override Task Can_insert_many_to_many_shared_with_payload_unidirectional(bool async) // Mutable properties aren't proxyable on Dictionary => Task.CompletedTask; - public override void Can_update_many_to_many_shared_with_payload_unidirectional() - { + public override Task Can_update_many_to_many_shared_with_payload_unidirectional() // Mutable properties aren't proxyable on Dictionary - } + => Task.CompletedTask; protected override bool RequiresDetectChanges => false; diff --git a/test/EFCore.Jet.FunctionalTests/MaterializationInterceptionJetTest.cs b/test/EFCore.Jet.FunctionalTests/MaterializationInterceptionJetTest.cs index 4e921f79..c3a5edcc 100644 --- a/test/EFCore.Jet.FunctionalTests/MaterializationInterceptionJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/MaterializationInterceptionJetTest.cs @@ -15,21 +15,10 @@ namespace EntityFrameworkCore.Jet.FunctionalTests; -public class MaterializationInterceptionJetTest : MaterializationInterceptionTestBase, - IClassFixture +public class MaterializationInterceptionJetTest : MaterializationInterceptionTestBase { - public MaterializationInterceptionJetTest(MaterializationInterceptionJetFixture fixture) - : base(fixture) + public class JetLibraryContext(DbContextOptions options) : LibraryContext(options) { - } - - public class JetLibraryContext : LibraryContext - { - public JetLibraryContext(DbContextOptions options) - : base(options) - { - } - protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); @@ -38,27 +27,6 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) } } - public override LibraryContext CreateContext(IEnumerable interceptors, bool inject) - => new JetLibraryContext(Fixture.CreateOptions(interceptors, inject)); - - public class MaterializationInterceptionJetFixture : SingletonInterceptorsFixtureBase - { - protected override string StoreName - => "MaterializationInterception"; - - protected override ITestStoreFactory TestStoreFactory - => JetTestStoreFactory.Instance; - - protected override IServiceCollection InjectInterceptors( - IServiceCollection serviceCollection, - IEnumerable injectedInterceptors) - => base.InjectInterceptors(serviceCollection.AddEntityFrameworkJet(), injectedInterceptors); - - public override DbContextOptionsBuilder AddOptions(DbContextOptionsBuilder builder) - { - new JetDbContextOptionsBuilder(base.AddOptions(builder)) - .ExecutionStrategy(d => new JetExecutionStrategy(d)); - return builder; - } - } + protected override ITestStoreFactory TestStoreFactory + => JetTestStoreFactory.Instance; } diff --git a/test/EFCore.Jet.FunctionalTests/MigrationsInfrastructureJetTest.cs b/test/EFCore.Jet.FunctionalTests/Migrations/MigrationsInfrastructureJetTest.cs similarity index 97% rename from test/EFCore.Jet.FunctionalTests/MigrationsInfrastructureJetTest.cs rename to test/EFCore.Jet.FunctionalTests/Migrations/MigrationsInfrastructureJetTest.cs index f2dc9bc6..b27a766c 100644 --- a/test/EFCore.Jet.FunctionalTests/MigrationsInfrastructureJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Migrations/MigrationsInfrastructureJetTest.cs @@ -17,16 +17,15 @@ using JetDatabaseCreator = EntityFrameworkCore.Jet.Storage.Internal.JetDatabaseCreator; // ReSharper disable InconsistentNaming -namespace EntityFrameworkCore.Jet.FunctionalTests + +#nullable disable +namespace EntityFrameworkCore.Jet.FunctionalTests.Migrations { [JetCondition(JetCondition.IsNotCI)] - public class MigrationsInfrastructureJetTest : MigrationsInfrastructureTestBase + public class MigrationsInfrastructureJetTest( + MigrationsInfrastructureJetTest.MigrationsInfrastructureJetFixture fixture) + : MigrationsInfrastructureTestBase(fixture) { - public MigrationsInfrastructureJetTest(MigrationsInfrastructureJetFixture fixture) - : base(fixture) - { - } - public override void Can_generate_migration_from_initial_database_to_initial() { base.Can_generate_migration_from_initial_database_to_initial(); @@ -112,7 +111,7 @@ public override void Can_generate_up_scripts() BEGIN TRANSACTION; -INSERT INTO Table1 (Id, Bar, Description) VALUES (-1, ' ', 'Value With +INSERT INTO Table1 (Id, Bar, Description) VALUES (-1, 3, 'Value With Empty Lines') @@ -123,7 +122,7 @@ INSERT INTO Table1 (Id, Bar, Description) VALUES (-1, ' ', 'Value With BEGIN TRANSACTION; -INSERT INTO Table1 (Id, Bar, Description) VALUES (-2, ' ', 'GO +INSERT INTO Table1 (Id, Bar, Description) VALUES (-2, 4, 'GO Value With Empty Lines') @@ -135,7 +134,7 @@ Value With BEGIN TRANSACTION; -INSERT INTO Table1 (Id, Bar, Description) VALUES (-3, ' ', 'GO +INSERT INTO Table1 (Id, Bar, Description) VALUES (-3, 5, 'GO Value With Empty Lines @@ -270,7 +269,7 @@ public override void Can_get_active_provider() Assert.Equal("EntityFrameworkCore.Jet", ActiveProvider); } - + [ConditionalFact] public async Task Empty_Migration_Creates_Database() { @@ -293,15 +292,6 @@ public override void Can_apply_all_migrations() // Issue efcore #33331 public override Task Can_apply_all_migrations_async() // Issue efcore #33331 => Assert.ThrowsAnyAsync(() => base.Can_apply_all_migrations_async()); - public override void Can_apply_range_of_migrations() // Issue efcore #33331 - => Assert.ThrowsAny(() => base.Can_apply_range_of_migrations()); - - public override void Can_revert_all_migrations() // Issue efcore #33331 - => Assert.ThrowsAny(() => base.Can_revert_all_migrations()); - - public override void Can_revert_one_migrations() // Issue efcore #33331 - => Assert.ThrowsAny(() => base.Can_revert_one_migrations()); - private class BloggingContext : DbContext { public BloggingContext(DbContextOptions options) diff --git a/test/EFCore.Jet.FunctionalTests/Migrations/MigrationsJetTest.cs b/test/EFCore.Jet.FunctionalTests/Migrations/MigrationsJetTest.cs index 0d6af433..3d423873 100644 --- a/test/EFCore.Jet.FunctionalTests/Migrations/MigrationsJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Migrations/MigrationsJetTest.cs @@ -1,3 +1,4 @@ + // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. @@ -14,6 +15,7 @@ using Microsoft.EntityFrameworkCore.Metadata; using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Scaffolding; +using Microsoft.EntityFrameworkCore.Scaffolding.Metadata.Internal; using Microsoft.EntityFrameworkCore.TestUtilities; using Microsoft.Extensions.DependencyInjection; using Xunit; @@ -44,11 +46,11 @@ public override async Task Create_table() await base.Create_table(); AssertSql( -""" -CREATE TABLE [People] ( - [Id] int NOT NULL IDENTITY, - [Name] nvarchar(max) NULL, - CONSTRAINT [PK_People] PRIMARY KEY ([Id]) + """ +CREATE TABLE `People` ( + `Id` counter NOT NULL, + `Name` varchar(255) NULL, + CONSTRAINT `PK_People` PRIMARY KEY (`Id`) ); """); } @@ -58,11 +60,11 @@ public override async Task Create_table_all_settings() await base.Create_table_all_settings(); AssertSql( -""" + """ IF SCHEMA_ID(N'dbo2') IS NULL EXEC(N'CREATE SCHEMA [dbo2];'); """, -// -""" + // + """ CREATE TABLE [dbo2].[People] ( [CustomId] int NOT NULL IDENTITY, [EmployerId] int NOT NULL, @@ -78,8 +80,8 @@ CONSTRAINT [FK_People_Employers_EmployerId] FOREIGN KEY ([EmployerId]) REFERENCE SET @description = N'Employer ID comment'; EXEC sp_addextendedproperty 'MS_Description', @description, 'SCHEMA', N'dbo2', 'TABLE', N'People', 'COLUMN', N'EmployerId'; """, -// -""" + // + """ CREATE INDEX [IX_People_EmployerId] ON [dbo2].[People] ([EmployerId]); """); } @@ -89,9 +91,9 @@ public override async Task Create_table_no_key() await base.Create_table_no_key(); AssertSql( -""" -CREATE TABLE [Anonymous] ( - [SomeColumn] int NOT NULL + """ +CREATE TABLE `Anonymous` ( + `SomeColumn` integer NOT NULL ); """); } @@ -101,19 +103,12 @@ public override async Task Create_table_with_comments() await base.Create_table_with_comments(); AssertSql( -""" -CREATE TABLE [People] ( - [Id] int NOT NULL IDENTITY, - [Name] nvarchar(max) NULL, - CONSTRAINT [PK_People] PRIMARY KEY ([Id]) + """ +CREATE TABLE `People` ( + `Id` counter NOT NULL, + `Name` varchar(255) NULL, + CONSTRAINT `PK_People` PRIMARY KEY (`Id`) ); -DECLARE @defaultSchema AS sysname; -SET @defaultSchema = SCHEMA_NAME(); -DECLARE @description AS sql_variant; -SET @description = N'Table comment'; -EXEC sp_addextendedproperty 'MS_Description', @description, 'SCHEMA', @defaultSchema, 'TABLE', N'People'; -SET @description = N'Column comment'; -EXEC sp_addextendedproperty 'MS_Description', @description, 'SCHEMA', @defaultSchema, 'TABLE', N'People', 'COLUMN', N'Name'; """); } @@ -122,19 +117,12 @@ public override async Task Create_table_with_multiline_comments() await base.Create_table_with_multiline_comments(); AssertSql( -""" -CREATE TABLE [People] ( - [Id] int NOT NULL IDENTITY, - [Name] nvarchar(max) NULL, - CONSTRAINT [PK_People] PRIMARY KEY ([Id]) + """ +CREATE TABLE `People` ( + `Id` counter NOT NULL, + `Name` varchar(255) NULL, + CONSTRAINT `PK_People` PRIMARY KEY (`Id`) ); -DECLARE @defaultSchema AS sysname; -SET @defaultSchema = SCHEMA_NAME(); -DECLARE @description AS sql_variant; -SET @description = CONCAT(N'This is a multi-line', NCHAR(13), NCHAR(10), N'table comment.', NCHAR(13), NCHAR(10), N'More information can', NCHAR(13), NCHAR(10), N'be found in the docs.'); -EXEC sp_addextendedproperty 'MS_Description', @description, 'SCHEMA', @defaultSchema, 'TABLE', N'People'; -SET @description = CONCAT(N'This is a multi-line', NCHAR(10), N'column comment.', NCHAR(10), N'More information can', NCHAR(10), N'be found in the docs.'); -EXEC sp_addextendedproperty 'MS_Description', @description, 'SCHEMA', @defaultSchema, 'TABLE', N'People', 'COLUMN', N'Name'; """); } @@ -145,7 +133,7 @@ public override async Task Create_table_with_computed_column(bool? stored) var storedSql = stored == true ? " PERSISTED" : ""; AssertSql( -$""" + $""" CREATE TABLE [People] ( [Id] int NOT NULL IDENTITY, [Sum] AS [X] + [Y]{storedSql}, @@ -156,6 +144,39 @@ CONSTRAINT [PK_People] PRIMARY KEY ([Id]) """); } + public override async Task Create_table_with_json_column() + { + await base.Create_table_with_json_column(); + + AssertSql( + """ +CREATE TABLE `Entity` ( + `Id` counter NOT NULL, + `Name` varchar(255) NULL, + `OwnedCollection` longchar NULL, + `OwnedReference` longchar NULL, + `OwnedRequiredReference` longchar NOT NULL, + CONSTRAINT `PK_Entity` PRIMARY KEY (`Id`) +); +"""); + } + + public override async Task Create_table_with_json_column_explicit_json_column_names() + { + await base.Create_table_with_json_column_explicit_json_column_names(); + + AssertSql( + """ +CREATE TABLE `Entity` ( + `Id` counter NOT NULL, + `Name` varchar(255) NULL, + `json_collection` longchar NULL, + `json_reference` longchar NULL, + CONSTRAINT `PK_Entity` PRIMARY KEY (`Id`) +); +"""); + } + [ConditionalFact] public virtual async Task Create_table_with_identity_column_value_converter() { @@ -171,9 +192,9 @@ await Test( }); AssertSql( -""" -CREATE TABLE [People] ( - [IdentityColumn] smallint NOT NULL IDENTITY + """ +CREATE TABLE `People` ( + `IdentityColumn` counter NOT NULL ); """); } @@ -183,8 +204,8 @@ public override async Task Drop_table() await base.Drop_table(); AssertSql( -""" -DROP TABLE [People]; + """ +DROP TABLE `People`; """); } @@ -193,13 +214,7 @@ public override async Task Alter_table_add_comment() await base.Alter_table_add_comment(); AssertSql( -""" -DECLARE @defaultSchema AS sysname; -SET @defaultSchema = SCHEMA_NAME(); -DECLARE @description AS sql_variant; -SET @description = N'Table comment'; -EXEC sp_addextendedproperty 'MS_Description', @description, 'SCHEMA', @defaultSchema, 'TABLE', N'People'; -"""); +); } public override async Task Alter_table_add_comment_non_default_schema() @@ -207,11 +222,7 @@ public override async Task Alter_table_add_comment_non_default_schema() await base.Alter_table_add_comment_non_default_schema(); AssertSql( -""" -DECLARE @description AS sql_variant; -SET @description = N'Table comment'; -EXEC sp_addextendedproperty 'MS_Description', @description, 'SCHEMA', N'SomeOtherSchema', 'TABLE', N'People'; -"""); +); } public override async Task Alter_table_change_comment() @@ -219,14 +230,7 @@ public override async Task Alter_table_change_comment() await base.Alter_table_change_comment(); AssertSql( -""" -DECLARE @defaultSchema AS sysname; -SET @defaultSchema = SCHEMA_NAME(); -DECLARE @description AS sql_variant; -EXEC sp_dropextendedproperty 'MS_Description', 'SCHEMA', @defaultSchema, 'TABLE', N'People'; -SET @description = N'Table comment2'; -EXEC sp_addextendedproperty 'MS_Description', @description, 'SCHEMA', @defaultSchema, 'TABLE', N'People'; -"""); +); } public override async Task Alter_table_remove_comment() @@ -234,7 +238,7 @@ public override async Task Alter_table_remove_comment() await base.Alter_table_remove_comment(); AssertSql( -""" + """ DECLARE @defaultSchema AS sysname; SET @defaultSchema = SCHEMA_NAME(); DECLARE @description AS sql_variant; @@ -247,15 +251,15 @@ public override async Task Rename_table() await base.Rename_table(); AssertSql( -""" + """ ALTER TABLE [People] DROP CONSTRAINT [PK_People]; """, -// -""" -EXEC sp_rename N'[People]', N'Persons'; + // + """ +EXEC sp_rename '[People]', 'Persons', 'OBJECT'; """, -// -""" + // + """ ALTER TABLE [Persons] ADD CONSTRAINT [PK_Persons] PRIMARY KEY ([Id]); """); } @@ -265,53 +269,48 @@ public override async Task Rename_table_with_primary_key() await base.Rename_table_with_primary_key(); AssertSql( -""" + """ ALTER TABLE [People] DROP CONSTRAINT [PK_People]; """, -// -""" -EXEC sp_rename N'[People]', N'Persons'; + // + """ +EXEC sp_rename '[People]', N'Persons', 'OBJECT'; """, -// -""" + // + """ ALTER TABLE [Persons] ADD CONSTRAINT [PK_Persons] PRIMARY KEY ([Id]); """); } - public override async Task Move_table() + public override async Task Rename_table_with_json_column() { - await base.Move_table(); + await base.Rename_table_with_json_column(); AssertSql( -""" -IF SCHEMA_ID(N'TestTableSchema') IS NULL EXEC(N'CREATE SCHEMA [TestTableSchema];'); + """ +ALTER TABLE [Entities] DROP CONSTRAINT [PK_Entities]; """, -// -""" -ALTER SCHEMA [TestTableSchema] TRANSFER [TestTable]; + // + """ +EXEC sp_rename N'[Entities]', N'NewEntities', 'OBJECT'; +""", + // + """ +ALTER TABLE [NewEntities] ADD CONSTRAINT [PK_NewEntities] PRIMARY KEY ([Id]); """); } - [ConditionalFact] - public virtual async Task Move_table_into_default_schema() + public override async Task Move_table() { - await Test( - builder => builder.Entity("TestTable") - .ToTable("TestTable", "TestTableSchema") - .Property("Id"), - builder => builder.Entity("TestTable") - .Property("Id"), - model => - { - var table = Assert.Single(model.Tables); - Assert.Equal("dbo", table.Schema); - Assert.Equal("TestTable", table.Name); - }); + await base.Move_table(); AssertSql( -""" -DECLARE @defaultSchema sysname = SCHEMA_NAME(); -EXEC(N'ALTER SCHEMA [' + @defaultSchema + N'] TRANSFER [TestTableSchema].[TestTable];'); + """ +IF SCHEMA_ID(N'TestTableSchema') IS NULL EXEC(N'CREATE SCHEMA [TestTableSchema];'); +""", + // + """ +ALTER SCHEMA [TestTableSchema] TRANSFER [TestTable]; """); } @@ -320,14 +319,10 @@ public override async Task Create_schema() await base.Create_schema(); AssertSql( -""" -IF SCHEMA_ID(N'SomeOtherSchema') IS NULL EXEC(N'CREATE SCHEMA [SomeOtherSchema];'); -""", -// -""" -CREATE TABLE [SomeOtherSchema].[People] ( - [Id] int NOT NULL IDENTITY, - CONSTRAINT [PK_People] PRIMARY KEY ([Id]) + """ +CREATE TABLE `People` ( + `Id` counter NOT NULL, + CONSTRAINT `PK_People` PRIMARY KEY (`Id`) ); """); } @@ -340,10 +335,10 @@ await Test( builder => builder.Entity("People") .ToTable("People", "dbo") .Property("Id"), - model => Assert.Equal("dbo", Assert.Single(model.Tables).Schema)); + model => Assert.Equal(null, Assert.Single(model.Tables).Schema)); AssertSql( -""" + """ CREATE TABLE [dbo].[People] ( [Id] int NOT NULL IDENTITY, CONSTRAINT [PK_People] PRIMARY KEY ([Id]) @@ -356,8 +351,8 @@ public override async Task Add_column_with_defaultValue_string() await base.Add_column_with_defaultValue_string(); AssertSql( -""" -ALTER TABLE [People] ADD [Name] nvarchar(max) NOT NULL DEFAULT N'John Doe'; + """ +ALTER TABLE `People` ADD `Name` varchar(255) NOT NULL DEFAULT 'John Doe'; """); } @@ -366,8 +361,8 @@ public override async Task Add_column_with_defaultValue_datetime() await base.Add_column_with_defaultValue_datetime(); AssertSql( -""" -ALTER TABLE [People] ADD [Birthday] datetime2 NOT NULL DEFAULT '2015-04-12T17:05:00.0000000'; + """ +ALTER TABLE `People` ADD `Birthday` datetime NOT NULL DEFAULT '2015-04-12 17:05:00'; """); } @@ -397,8 +392,8 @@ await Test( }); AssertSql( -$""" -ALTER TABLE [People] ADD [Birthday] datetime2({precision}) NOT NULL DEFAULT '2015-04-12T17:05:00{fractionalSeconds}'; + $""" +ALTER TABLE `People` ADD `Birthday` datetime NOT NULL DEFAULT '2015-04-12 17:05:00'; """); } @@ -431,8 +426,8 @@ await Test( }); AssertSql( -$""" -ALTER TABLE [People] ADD [Birthday] datetimeoffset({precision}) NOT NULL DEFAULT '2015-04-12T17:05:00{fractionalSeconds}+10:00'; + $""" +ALTER TABLE `People` ADD `Birthday` datetime NOT NULL DEFAULT CDATE('2015-04-12 07:05:00'); """); } @@ -463,8 +458,8 @@ await Test( }); AssertSql( -$""" -ALTER TABLE [People] ADD [Age] time({precision}) NOT NULL DEFAULT '12:34:56{fractionalSeconds}'; + """ +ALTER TABLE `People` ADD `Age` datetime NOT NULL DEFAULT TIMEVALUE('12:34:56'); """); } @@ -485,34 +480,12 @@ await Test( }); AssertSql( -""" -ALTER TABLE [People] ADD [Birthday] datetime NOT NULL DEFAULT '2019-01-01T00:00:00.000'; + """ +ALTER TABLE `People` ADD `Birthday` datetime NOT NULL DEFAULT '2019-01-01'; """); } [ConditionalFact] - public virtual async Task Add_column_with_defaultValue_smalldatetime_store_type() - { - await Test( - builder => builder.Entity("People").Property("Id"), - builder => { }, - builder => builder.Entity("People").Property("Birthday") - .HasColumnType("smalldatetime") - .HasDefaultValue(new DateTime(2019, 1, 1)), - model => - { - var table = Assert.Single(model.Tables); - var column = Assert.Single(table.Columns, c => c.Name == "Birthday"); - Assert.Contains("2019", column.DefaultValueSql); - }); - - AssertSql( -""" -ALTER TABLE [People] ADD [Birthday] smalldatetime NOT NULL DEFAULT '2019-01-01T00:00:00'; -"""); - } - - /*[ConditionalFact] public virtual async Task Add_column_with_rowversion() { await Test( @@ -528,12 +501,12 @@ await Test( }); AssertSql( -""" + """ ALTER TABLE [People] ADD [RowVersion] rowversion NULL; """); - }*/ + } - /*[ConditionalFact] + [ConditionalFact] public virtual async Task Add_column_with_rowversion_and_value_conversion() { await Test( @@ -551,21 +524,39 @@ await Test( }); AssertSql( -""" + """ ALTER TABLE [People] ADD [RowVersion] rowversion NOT NULL; """); - }*/ + } public override async Task Add_column_with_defaultValueSql() { await base.Add_column_with_defaultValueSql(); AssertSql( -""" + """ ALTER TABLE [People] ADD [Sum] int NOT NULL DEFAULT (1 + 2); """); } + public override async Task Add_json_columns_to_existing_table() + { + await base.Add_json_columns_to_existing_table(); + + AssertSql( + """ +ALTER TABLE `Entity` ADD `OwnedCollection` longchar NULL; +""", + // + """ +ALTER TABLE `Entity` ADD `OwnedReference` longchar NULL; +""", + // + """ +ALTER TABLE `Entity` ADD `OwnedRequiredReference` longchar NOT NULL DEFAULT '{}'; +"""); + } + public override async Task Add_column_with_computedSql(bool? stored) { await base.Add_column_with_computedSql(stored); @@ -573,7 +564,7 @@ public override async Task Add_column_with_computedSql(bool? stored) var computedColumnTypeSql = stored == true ? " PERSISTED" : ""; AssertSql( -$""" + $""" ALTER TABLE [People] ADD [Sum] AS [X] + [Y]{computedColumnTypeSql}; """); } @@ -595,7 +586,7 @@ await Test( migrationsSqlGenerationOptions: MigrationsSqlGenerationOptions.Idempotent); AssertSql( -""" + """ EXEC(N'ALTER TABLE [People] ADD [IdPlusOne] AS [Id] + 1'); """); } @@ -605,8 +596,8 @@ public override async Task Add_column_with_required() await base.Add_column_with_required(); AssertSql( -""" -ALTER TABLE [People] ADD [Name] nvarchar(max) NOT NULL DEFAULT N''; + """ +ALTER TABLE `People` ADD `Name` varchar(255) NOT NULL DEFAULT ''; """); } @@ -615,8 +606,8 @@ public override async Task Add_column_with_ansi() await base.Add_column_with_ansi(); AssertSql( -""" -ALTER TABLE [People] ADD [Name] varchar(max) NULL; + """ +ALTER TABLE `People` ADD `Name` varchar(255) NULL; """); } @@ -625,8 +616,8 @@ public override async Task Add_column_with_max_length() await base.Add_column_with_max_length(); AssertSql( -""" -ALTER TABLE [People] ADD [Name] nvarchar(30) NULL; + """ +ALTER TABLE `People` ADD `Name` varchar(30) NULL; """); } @@ -642,8 +633,8 @@ public override async Task Add_column_with_fixed_length() await base.Add_column_with_fixed_length(); AssertSql( -""" -ALTER TABLE [People] ADD [Name] nchar(100) NULL; + """ +ALTER TABLE `People` ADD `Name` char(100) NULL; """); } @@ -652,13 +643,8 @@ public override async Task Add_column_with_comment() await base.Add_column_with_comment(); AssertSql( -""" -ALTER TABLE [People] ADD [FullName] nvarchar(max) NULL; -DECLARE @defaultSchema AS sysname; -SET @defaultSchema = SCHEMA_NAME(); -DECLARE @description AS sql_variant; -SET @description = N'My comment'; -EXEC sp_addextendedproperty 'MS_Description', @description, 'SCHEMA', @defaultSchema, 'TABLE', N'People', 'COLUMN', N'FullName'; + """ +ALTER TABLE `People` ADD `FullName` varchar(255) NULL; """); } @@ -667,7 +653,7 @@ public override async Task Add_column_with_collation() await base.Add_column_with_collation(); AssertSql( -""" + """ ALTER TABLE [People] ADD [Name] nvarchar(max) COLLATE German_PhoneBook_CI_AS NULL; """); } @@ -694,12 +680,12 @@ public override async Task Add_column_with_check_constraint() await base.Add_column_with_check_constraint(); AssertSql( -""" -ALTER TABLE [People] ADD [DriverLicense] int NOT NULL DEFAULT 0; + """ +ALTER TABLE `People` ADD `DriverLicense` integer NOT NULL DEFAULT 0; """, -// -""" -ALTER TABLE [People] ADD CONSTRAINT [CK_People_Foo] CHECK ([DriverLicense] > 0); + // + """ +ALTER TABLE `People` ADD CONSTRAINT `CK_People_Foo` CHECK (`DriverLicense` > 0); """); } @@ -718,8 +704,8 @@ await Test( }); AssertSql( -""" -ALTER TABLE [People] ADD [IdentityColumn] int NOT NULL IDENTITY; + """ +ALTER TABLE `People` ADD `IdentityColumn` counter NOT NULL; """); } @@ -736,13 +722,13 @@ await Test( var column = Assert.Single(table.Columns, c => c.Name == "IdentityColumn"); Assert.Equal(ValueGenerated.OnAdd, column.ValueGenerated); // TODO: Do we not reverse-engineer identity facets? - // Assert.Equal(100, column[JetAnnotationNames.IdentitySeed]); - // Assert.Equal(5, column[JetAnnotationNames.IdentityIncrement]); + // Assert.Equal(100, column[SqlServerAnnotationNames.IdentitySeed]); + // Assert.Equal(5, column[SqlServerAnnotationNames.IdentityIncrement]); }); AssertSql( -""" -ALTER TABLE [People] ADD [IdentityColumn] int NOT NULL IDENTITY(100, 5); + """ +ALTER TABLE `People` ADD `IdentityColumn` counter(100, 5) NOT NULL; """); } @@ -750,21 +736,21 @@ await Test( public virtual async Task Add_column_identity_seed_increment_for_TPC() { await Test( - builder => + buildCommonAction: builder => { builder.Entity("Animal").UseTpcMappingStrategy().Property("Id"); builder.Entity("Cat").HasBaseType("Animal").ToTable("Cats"); builder.Entity("Dog").HasBaseType("Animal").ToTable("Dogs"); }, - builder => { }, - builder => + buildSourceAction:builder => { }, + buildTargetAction:builder => { builder.Entity("Animal") .Property("IdentityColumn"); builder.Entity("Cat").ToTable("Cats", tb => tb.Property("IdentityColumn").UseJetIdentityColumn(1, 2)); builder.Entity("Dog").ToTable("Dogs", tb => tb.Property("IdentityColumn").UseJetIdentityColumn(2, 2)); }, - model => + asserter:model => { Assert.Collection( model.Tables, @@ -780,8 +766,8 @@ await Test( var column = Assert.Single(t.Columns, c => c.Name == "IdentityColumn"); Assert.Equal(ValueGenerated.OnAdd, column.ValueGenerated); // TODO: Do we not reverse-engineer identity facets? - // Assert.Equal(100, column[JetAnnotationNames.IdentitySeed]); - // Assert.Equal(5, column[JetAnnotationNames.IdentityIncrement]); + // Assert.Equal(100, column[SqlServerAnnotationNames.IdentitySeed]); + // Assert.Equal(5, column[SqlServerAnnotationNames.IdentityIncrement]); }, t => { @@ -789,22 +775,22 @@ await Test( var column = Assert.Single(t.Columns, c => c.Name == "IdentityColumn"); Assert.Equal(ValueGenerated.OnAdd, column.ValueGenerated); // TODO: Do we not reverse-engineer identity facets? - // Assert.Equal(100, column[JetAnnotationNames.IdentitySeed]); - // Assert.Equal(5, column[JetAnnotationNames.IdentityIncrement]); + // Assert.Equal(100, column[SqlServerAnnotationNames.IdentitySeed]); + // Assert.Equal(5, column[SqlServerAnnotationNames.IdentityIncrement]); }); }); AssertSql( -""" -ALTER TABLE [Dogs] ADD [IdentityColumn] int NOT NULL IDENTITY(2, 2); + """ +ALTER TABLE `Dogs` ADD `IdentityColumn` counter(2, 2) NOT NULL; """, -// -""" -ALTER TABLE [Cats] ADD [IdentityColumn] int NOT NULL IDENTITY(1, 2); + // + """ +ALTER TABLE `Cats` ADD `IdentityColumn` counter(1, 2) NOT NULL; """, -// -""" -ALTER TABLE [Animal] ADD [IdentityColumn] int NOT NULL DEFAULT 0; + // + """ +ALTER TABLE `Animal` ADD `IdentityColumn` integer NOT NULL DEFAULT 0; """); } @@ -813,14 +799,9 @@ public override async Task Alter_column_change_type() await base.Alter_column_change_type(); AssertSql( -""" -DECLARE @var0 sysname; -SELECT @var0 = [d].[name] -FROM [sys].[default_constraints] [d] -INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id] -WHERE ([d].[parent_object_id] = OBJECT_ID(N'[People]') AND [c].[name] = N'SomeColumn'); -IF @var0 IS NOT NULL EXEC(N'ALTER TABLE [People] DROP CONSTRAINT [' + @var0 + '];'); -ALTER TABLE [People] ALTER COLUMN [SomeColumn] bigint NOT NULL; + """ +ALTER TABLE `People` ALTER COLUMN `SomeColumn` DROP DEFAULT; +ALTER TABLE `People` ALTER COLUMN `SomeColumn` decimal(20,0) NOT NULL; """); } @@ -829,7 +810,7 @@ public override async Task Alter_column_make_required() await base.Alter_column_make_required(); AssertSql( -""" + """ DECLARE @var0 sysname; SELECT @var0 = [d].[name] FROM [sys].[default_constraints] [d] @@ -847,7 +828,7 @@ public override async Task Alter_column_make_required_with_null_data() await base.Alter_column_make_required_with_null_data(); AssertSql( -""" + """ DECLARE @var0 sysname; SELECT @var0 = [d].[name] FROM [sys].[default_constraints] [d] @@ -866,7 +847,7 @@ public override async Task Alter_column_make_required_with_index() await base.Alter_column_make_required_with_index(); AssertSql( -""" + """ DROP INDEX [IX_People_SomeColumn] ON [People]; DECLARE @var0 sysname; SELECT @var0 = [d].[name] @@ -887,7 +868,7 @@ public override async Task Alter_column_make_required_with_composite_index() await base.Alter_column_make_required_with_composite_index(); AssertSql( -""" + """ DROP INDEX [IX_People_FirstName_LastName] ON [People]; DECLARE @var0 sysname; SELECT @var0 = [d].[name] @@ -909,7 +890,7 @@ public override async Task Alter_column_make_computed(bool? stored) var computedColumnTypeSql = stored == true ? " PERSISTED" : ""; AssertSql( -$""" + $""" DECLARE @var0 sysname; SELECT @var0 = [d].[name] FROM [sys].[default_constraints] [d] @@ -926,7 +907,7 @@ public override async Task Alter_column_change_computed() await base.Alter_column_change_computed(); AssertSql( -""" + """ DECLARE @var0 sysname; SELECT @var0 = [d].[name] FROM [sys].[default_constraints] [d] @@ -943,7 +924,7 @@ public override async Task Alter_column_change_computed_recreates_indexes() await base.Alter_column_change_computed_recreates_indexes(); AssertSql( -""" + """ DROP INDEX [IX_People_Sum] ON [People]; DECLARE @var0 sysname; SELECT @var0 = [d].[name] @@ -954,8 +935,8 @@ FROM [sys].[default_constraints] [d] ALTER TABLE [People] DROP COLUMN [Sum]; ALTER TABLE [People] ADD [Sum] AS [X] - [Y]; """, -// -""" + // + """ CREATE INDEX [IX_People_Sum] ON [People] ([Sum]); """); } @@ -965,7 +946,7 @@ public override async Task Alter_column_change_computed_type() await base.Alter_column_change_computed_type(); AssertSql( -""" + """ DECLARE @var0 sysname; SELECT @var0 = [d].[name] FROM [sys].[default_constraints] [d] @@ -982,7 +963,7 @@ public override async Task Alter_column_make_non_computed() await base.Alter_column_make_non_computed(); AssertSql( -""" + """ DECLARE @var0 sysname; SELECT @var0 = [d].[name] FROM [sys].[default_constraints] [d] @@ -1000,12 +981,9 @@ public override async Task Alter_column_add_comment() await base.Alter_column_add_comment(); AssertSql( -""" -DECLARE @defaultSchema AS sysname; -SET @defaultSchema = SCHEMA_NAME(); -DECLARE @description AS sql_variant; -SET @description = N'Some comment'; -EXEC sp_addextendedproperty 'MS_Description', @description, 'SCHEMA', @defaultSchema, 'TABLE', N'People', 'COLUMN', N'Id'; + """ +ALTER TABLE `People` ALTER COLUMN `Id` DROP DEFAULT; +ALTER TABLE `People` ALTER COLUMN `Id` integer NOT NULL; """); } @@ -1015,12 +993,10 @@ public override async Task Alter_computed_column_add_comment() await base.Alter_computed_column_add_comment(); AssertSql( -""" -DECLARE @defaultSchema AS sysname; -SET @defaultSchema = SCHEMA_NAME(); -DECLARE @description AS sql_variant; -SET @description = N'Some comment'; -EXEC sp_addextendedproperty 'MS_Description', @description, 'SCHEMA', @defaultSchema, 'TABLE', N'People', 'COLUMN', N'SomeColumn'; + """ +ALTER TABLE `People` ALTER COLUMN `SomeColumn` DROP DEFAULT; +ALTER TABLE `People` DROP COLUMN `SomeColumn`; +ALTER TABLE `People` ADD `SomeColumn` integer NOT NULL DEFAULT 42; """); } @@ -1030,13 +1006,9 @@ public override async Task Alter_column_change_comment() await base.Alter_column_change_comment(); AssertSql( -""" -DECLARE @defaultSchema AS sysname; -SET @defaultSchema = SCHEMA_NAME(); -DECLARE @description AS sql_variant; -EXEC sp_dropextendedproperty 'MS_Description', 'SCHEMA', @defaultSchema, 'TABLE', N'People', 'COLUMN', N'Id'; -SET @description = N'Some comment2'; -EXEC sp_addextendedproperty 'MS_Description', @description, 'SCHEMA', @defaultSchema, 'TABLE', N'People', 'COLUMN', N'Id'; + """ +ALTER TABLE `People` ALTER COLUMN `Id` DROP DEFAULT; +ALTER TABLE `People` ALTER COLUMN `Id` integer NOT NULL; """); } @@ -1046,7 +1018,7 @@ public override async Task Alter_column_remove_comment() await base.Alter_column_remove_comment(); AssertSql( -""" + """ DECLARE @defaultSchema AS sysname; SET @defaultSchema = SCHEMA_NAME(); DECLARE @description AS sql_variant; @@ -1060,7 +1032,7 @@ public override async Task Alter_column_set_collation() await base.Alter_column_set_collation(); AssertSql( -""" + """ DECLARE @var0 sysname; SELECT @var0 = [d].[name] FROM [sys].[default_constraints] [d] @@ -1091,7 +1063,7 @@ await Test( }); AssertSql( -""" + """ DROP INDEX [IX_People_Name] ON [People]; DECLARE @var0 sysname; SELECT @var0 = [d].[name] @@ -1110,7 +1082,7 @@ public override async Task Alter_column_reset_collation() await base.Alter_column_reset_collation(); AssertSql( -""" + """ DECLARE @var0 sysname; SELECT @var0 = [d].[name] FROM [sys].[default_constraints] [d] @@ -1121,82 +1093,152 @@ FROM [sys].[default_constraints] [d] """); } - [ConditionalFact] - public virtual async Task Alter_column_make_required_with_index_with_included_properties() + public override async Task Convert_json_entities_to_regular_owned() { - await Test( - builder => builder.Entity( - "People", e => - { - e.Property("Id"); - e.Property("SomeColumn"); - e.Property("SomeOtherColumn"); - e.HasIndex("SomeColumn").IncludeProperties("SomeOtherColumn"); - }), - builder => { }, - builder => builder.Entity("People").Property("SomeColumn").IsRequired(), - model => - { - var table = Assert.Single(model.Tables); - var column = Assert.Single(table.Columns, c => c.Name == "SomeColumn"); - Assert.False(column.IsNullable); - var index = Assert.Single(table.Indexes); - Assert.Equal(1, index.Columns.Count); - Assert.Contains(table.Columns.Single(c => c.Name == "SomeColumn"), index.Columns); - var includedColumns = (IReadOnlyList?)index[JetAnnotationNames.Include]; - Assert.Null(includedColumns); - }); + await base.Convert_json_entities_to_regular_owned(); AssertSql( -""" -DROP INDEX [IX_People_SomeColumn] ON [People]; + """ DECLARE @var0 sysname; SELECT @var0 = [d].[name] FROM [sys].[default_constraints] [d] INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id] -WHERE ([d].[parent_object_id] = OBJECT_ID(N'[People]') AND [c].[name] = N'SomeColumn'); -IF @var0 IS NOT NULL EXEC(N'ALTER TABLE [People] DROP CONSTRAINT [' + @var0 + '];'); -UPDATE [People] SET [SomeColumn] = N'' WHERE [SomeColumn] IS NULL; -ALTER TABLE [People] ALTER COLUMN [SomeColumn] nvarchar(450) NOT NULL; -ALTER TABLE [People] ADD DEFAULT N'' FOR [SomeColumn]; -CREATE INDEX [IX_People_SomeColumn] ON [People] ([SomeColumn]) INCLUDE ([SomeOtherColumn]); +WHERE ([d].[parent_object_id] = OBJECT_ID(N'[Entity]') AND [c].[name] = N'OwnedCollection'); +IF @var0 IS NOT NULL EXEC(N'ALTER TABLE [Entity] DROP CONSTRAINT [' + @var0 + '];'); +ALTER TABLE [Entity] DROP COLUMN [OwnedCollection]; +""", + // + """ +DECLARE @var1 sysname; +SELECT @var1 = [d].[name] +FROM [sys].[default_constraints] [d] +INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id] +WHERE ([d].[parent_object_id] = OBJECT_ID(N'[Entity]') AND [c].[name] = N'OwnedReference'); +IF @var1 IS NOT NULL EXEC(N'ALTER TABLE [Entity] DROP CONSTRAINT [' + @var1 + '];'); +ALTER TABLE [Entity] DROP COLUMN [OwnedReference]; +""", + // + """ +ALTER TABLE [Entity] ADD [OwnedReference_Date] datetime2 NULL; +""", + // + """ +ALTER TABLE [Entity] ADD [OwnedReference_NestedReference_Number] int NULL; +""", + // + """ +CREATE TABLE [Entity_NestedCollection] ( + [OwnedEntityId] int NOT NULL, + [Id] int NOT NULL IDENTITY, + [Number2] int NOT NULL, + CONSTRAINT [PK_Entity_NestedCollection] PRIMARY KEY ([OwnedEntityId], [Id]), + CONSTRAINT [FK_Entity_NestedCollection_Entity_OwnedEntityId] FOREIGN KEY ([OwnedEntityId]) REFERENCES [Entity] ([Id]) ON DELETE CASCADE +); +""", + // + """ +CREATE TABLE [Entity_OwnedCollection] ( + [EntityId] int NOT NULL, + [Id] int NOT NULL IDENTITY, + [Date2] datetime2 NOT NULL, + [NestedReference2_Number3] int NULL, + CONSTRAINT [PK_Entity_OwnedCollection] PRIMARY KEY ([EntityId], [Id]), + CONSTRAINT [FK_Entity_OwnedCollection_Entity_EntityId] FOREIGN KEY ([EntityId]) REFERENCES [Entity] ([Id]) ON DELETE CASCADE +); +""", + // + """ +CREATE TABLE [Entity_OwnedCollection_NestedCollection2] ( + [Owned2EntityId] int NOT NULL, + [Owned2Id] int NOT NULL, + [Id] int NOT NULL IDENTITY, + [Number4] int NOT NULL, + CONSTRAINT [PK_Entity_OwnedCollection_NestedCollection2] PRIMARY KEY ([Owned2EntityId], [Owned2Id], [Id]), + CONSTRAINT [FK_Entity_OwnedCollection_NestedCollection2_Entity_OwnedCollection_Owned2EntityId_Owned2Id] FOREIGN KEY ([Owned2EntityId], [Owned2Id]) REFERENCES [Entity_OwnedCollection] ([EntityId], [Id]) ON DELETE CASCADE +); """); } - [ConditionalFact] - public virtual async Task Alter_column_with_index_no_narrowing() + public override async Task Convert_regular_owned_entities_to_json() { - await Test( - builder => builder.Entity( - "People", e => - { - e.Property("Id"); - e.Property("Name"); - e.HasIndex("Name"); - }), - builder => builder.Entity("People").Property("Name").IsRequired(), - builder => builder.Entity("People").Property("Name").IsRequired(false), - model => - { - var table = Assert.Single(model.Tables); - var column = Assert.Single(table.Columns, c => c.Name == "Name"); - Assert.True(column.IsNullable); - }); + await base.Convert_regular_owned_entities_to_json(); AssertSql( -""" + """ +DROP TABLE [Entity_NestedCollection]; +""", + // + """ +DROP TABLE [Entity_OwnedCollection_NestedCollection2]; +""", + // + """ +DROP TABLE [Entity_OwnedCollection]; +""", + // + """ DECLARE @var0 sysname; SELECT @var0 = [d].[name] FROM [sys].[default_constraints] [d] INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id] -WHERE ([d].[parent_object_id] = OBJECT_ID(N'[People]') AND [c].[name] = N'Name'); -IF @var0 IS NOT NULL EXEC(N'ALTER TABLE [People] DROP CONSTRAINT [' + @var0 + '];'); -ALTER TABLE [People] ALTER COLUMN [Name] nvarchar(450) NULL; +WHERE ([d].[parent_object_id] = OBJECT_ID(N'[Entity]') AND [c].[name] = N'OwnedReference_Date'); +IF @var0 IS NOT NULL EXEC(N'ALTER TABLE [Entity] DROP CONSTRAINT [' + @var0 + '];'); +ALTER TABLE [Entity] DROP COLUMN [OwnedReference_Date]; +""", + // + """ +DECLARE @var1 sysname; +SELECT @var1 = [d].[name] +FROM [sys].[default_constraints] [d] +INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id] +WHERE ([d].[parent_object_id] = OBJECT_ID(N'[Entity]') AND [c].[name] = N'OwnedReference_NestedReference_Number'); +IF @var1 IS NOT NULL EXEC(N'ALTER TABLE [Entity] DROP CONSTRAINT [' + @var1 + '];'); +ALTER TABLE [Entity] DROP COLUMN [OwnedReference_NestedReference_Number]; +""", + // + """ +ALTER TABLE [Entity] ADD [OwnedCollection] nvarchar(max) NULL; +""", + // + """ +ALTER TABLE [Entity] ADD [OwnedReference] nvarchar(max) NULL; +"""); + } + + public override async Task Convert_string_column_to_a_json_column_containing_reference() + { + await base.Convert_string_column_to_a_json_column_containing_reference(); + + AssertSql(); + } + + public override async Task Convert_string_column_to_a_json_column_containing_required_reference() + { + await base.Convert_string_column_to_a_json_column_containing_required_reference(); + + AssertSql( + """ +DECLARE @var0 sysname; +SELECT @var0 = [d].[name] +FROM [sys].[default_constraints] [d] +INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id] +WHERE ([d].[parent_object_id] = OBJECT_ID(N'[Entity]') AND [c].[name] = N'Name'); +IF @var0 IS NOT NULL EXEC(N'ALTER TABLE [Entity] DROP CONSTRAINT [' + @var0 + '];'); +UPDATE [Entity] SET [Name] = N'{}' WHERE [Name] IS NULL; +ALTER TABLE [Entity] ALTER COLUMN [Name] nvarchar(max) NOT NULL; +ALTER TABLE [Entity] ADD DEFAULT N'{}' FOR [Name]; """); } + public override async Task Convert_string_column_to_a_json_column_containing_collection() + { + await base.Convert_string_column_to_a_json_column_containing_collection(); + + AssertSql(); + } + [ConditionalFact] - public virtual async Task Alter_column_with_index_included_column() + public virtual async Task Alter_column_with_index_no_narrowing() { await Test( builder => builder.Entity( @@ -1204,34 +1246,26 @@ await Test( { e.Property("Id"); e.Property("Name"); - e.Property("FirstName"); - e.Property("LastName"); - e.HasIndex("FirstName", "LastName").IncludeProperties("Name"); + e.HasIndex("Name"); }), - builder => { }, - builder => builder.Entity("People").Property("Name").HasMaxLength(30), + builder => builder.Entity("People").Property("Name").IsRequired(), + builder => builder.Entity("People").Property("Name").IsRequired(false), model => { var table = Assert.Single(model.Tables); - var index = Assert.Single(table.Indexes); - Assert.Equal(2, index.Columns.Count); - Assert.Contains(table.Columns.Single(c => c.Name == "FirstName"), index.Columns); - Assert.Contains(table.Columns.Single(c => c.Name == "LastName"), index.Columns); - var includedColumns = (IReadOnlyList?)index[JetAnnotationNames.Include]; - Assert.Null(includedColumns); + var column = Assert.Single(table.Columns, c => c.Name == "Name"); + Assert.True(column.IsNullable); }); AssertSql( -""" -DROP INDEX [IX_People_FirstName_LastName] ON [People]; + """ DECLARE @var0 sysname; SELECT @var0 = [d].[name] FROM [sys].[default_constraints] [d] INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id] WHERE ([d].[parent_object_id] = OBJECT_ID(N'[People]') AND [c].[name] = N'Name'); IF @var0 IS NOT NULL EXEC(N'ALTER TABLE [People] DROP CONSTRAINT [' + @var0 + '];'); -ALTER TABLE [People] ALTER COLUMN [Name] nvarchar(30) NULL; -CREATE INDEX [IX_People_FirstName_LastName] ON [People] ([FirstName], [LastName]) INCLUDE ([Name]); +ALTER TABLE [People] ALTER COLUMN [Name] nvarchar(450) NULL; """); } @@ -1275,12 +1309,12 @@ await Test( { var table = Assert.Single(model.Tables); var column = Assert.Single(table.Columns, c => c.Name == "IdentityColumn"); - Assert.Equal("bigint", column.StoreType); + Assert.Equal("decimal(20,0)", column.StoreType); Assert.Equal(ValueGenerated.OnAdd, column.ValueGenerated); }); AssertSql( -""" + """ DECLARE @var0 sysname; SELECT @var0 = [d].[name] FROM [sys].[default_constraints] [d] @@ -1291,6 +1325,25 @@ FROM [sys].[default_constraints] [d] """); } + [ConditionalFact] + public virtual async Task Alter_column_change_identity_seed() + { + await Test( + builder => builder.Entity("People", e => e.Property("Id").UseJetIdentityColumn(seed: 10)), + builder => builder.Entity("People", e => e.Property("Id").UseJetIdentityColumn(seed: 100)), + model => + { + // DBCC CHECKIDENT RESEED doesn't actually change the table definition, it only resets the current identity value. + // For example, if the table is truncated, the identity is reset back to its original value (with the RESEED lost). + // Therefore we cannot check the value via scaffolding. + }); + + AssertSql( + """ +DBCC CHECKIDENT(N'[People]', RESEED, 100); +"""); + } + [ConditionalFact] public virtual async Task Alter_column_change_default() { @@ -1306,7 +1359,7 @@ await Test( }); AssertSql( -""" + """ DECLARE @var0 sysname; SELECT @var0 = [d].[name] FROM [sys].[default_constraints] [d] @@ -1333,7 +1386,7 @@ await Test( }); AssertSql( -""" + """ DECLARE @defaultSchema AS sysname; SET @defaultSchema = SCHEMA_NAME(); DECLARE @description AS sql_variant; @@ -1347,14 +1400,9 @@ public override async Task Drop_column() await base.Drop_column(); AssertSql( -""" -DECLARE @var0 sysname; -SELECT @var0 = [d].[name] -FROM [sys].[default_constraints] [d] -INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id] -WHERE ([d].[parent_object_id] = OBJECT_ID(N'[People]') AND [c].[name] = N'SomeColumn'); -IF @var0 IS NOT NULL EXEC(N'ALTER TABLE [People] DROP CONSTRAINT [' + @var0 + '];'); -ALTER TABLE [People] DROP COLUMN [SomeColumn]; + """ +ALTER TABLE `People` ALTER COLUMN `SomeColumn` DROP DEFAULT; +ALTER TABLE `People` DROP COLUMN `SomeColumn`; """); } @@ -1363,11 +1411,11 @@ public override async Task Drop_column_primary_key() await base.Drop_column_primary_key(); AssertSql( -""" + """ ALTER TABLE [People] DROP CONSTRAINT [PK_People]; """, -// -""" + // + """ DECLARE @var0 sysname; SELECT @var0 = [d].[name] FROM [sys].[default_constraints] [d] @@ -1383,7 +1431,7 @@ public override async Task Drop_column_computed_and_non_computed_with_dependency await base.Drop_column_computed_and_non_computed_with_dependency(); AssertSql( -""" + """ DECLARE @var0 sysname; SELECT @var0 = [d].[name] FROM [sys].[default_constraints] [d] @@ -1392,8 +1440,8 @@ FROM [sys].[default_constraints] [d] IF @var0 IS NOT NULL EXEC(N'ALTER TABLE [People] DROP CONSTRAINT [' + @var0 + '];'); ALTER TABLE [People] DROP COLUMN [Y]; """, -// -""" + // + """ DECLARE @var1 sysname; SELECT @var1 = [d].[name] FROM [sys].[default_constraints] [d] @@ -1404,13 +1452,53 @@ FROM [sys].[default_constraints] [d] """); } + public override async Task Drop_json_columns_from_existing_table() + { + await base.Drop_json_columns_from_existing_table(); + + AssertSql( + """ +DECLARE @var0 sysname; +SELECT @var0 = [d].[name] +FROM [sys].[default_constraints] [d] +INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id] +WHERE ([d].[parent_object_id] = OBJECT_ID(N'[Entity]') AND [c].[name] = N'OwnedCollection'); +IF @var0 IS NOT NULL EXEC(N'ALTER TABLE [Entity] DROP CONSTRAINT [' + @var0 + '];'); +ALTER TABLE [Entity] DROP COLUMN [OwnedCollection]; +""", + // + """ +DECLARE @var1 sysname; +SELECT @var1 = [d].[name] +FROM [sys].[default_constraints] [d] +INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id] +WHERE ([d].[parent_object_id] = OBJECT_ID(N'[Entity]') AND [c].[name] = N'OwnedReference'); +IF @var1 IS NOT NULL EXEC(N'ALTER TABLE [Entity] DROP CONSTRAINT [' + @var1 + '];'); +ALTER TABLE [Entity] DROP COLUMN [OwnedReference]; +"""); + } + public override async Task Rename_column() { await base.Rename_column(); AssertSql( -""" -EXEC sp_rename N'[People].[SomeColumn]', N'SomeOtherColumn', N'COLUMN'; + """ +ALTER TABLE `People` RENAME COLUMN `SomeColumn` TO `SomeOtherColumn`; +"""); + } + + public override async Task Rename_json_column() + { + await base.Rename_json_column(); + + AssertSql( + """ +ALTER TABLE `Entity` RENAME COLUMN `json_reference` TO `new_json_reference`; +""", + // + """ +ALTER TABLE `Entity` RENAME COLUMN `json_collection` TO `new_json_collection`; """); } @@ -1419,7 +1507,7 @@ public override async Task Create_index() await base.Create_index(); AssertSql( -""" + """ DECLARE @var0 sysname; SELECT @var0 = [d].[name] FROM [sys].[default_constraints] [d] @@ -1428,8 +1516,8 @@ FROM [sys].[default_constraints] [d] IF @var0 IS NOT NULL EXEC(N'ALTER TABLE [People] DROP CONSTRAINT [' + @var0 + '];'); ALTER TABLE [People] ALTER COLUMN [FirstName] nvarchar(450) NULL; """, -// -""" + // + """ CREATE INDEX [IX_People_FirstName] ON [People] ([FirstName]); """); } @@ -1439,7 +1527,7 @@ public override async Task Create_index_unique() await base.Create_index_unique(); AssertSql( -""" + """ DECLARE @var0 sysname; SELECT @var0 = [d].[name] FROM [sys].[default_constraints] [d] @@ -1448,8 +1536,8 @@ FROM [sys].[default_constraints] [d] IF @var0 IS NOT NULL EXEC(N'ALTER TABLE [People] DROP CONSTRAINT [' + @var0 + '];'); ALTER TABLE [People] ALTER COLUMN [LastName] nvarchar(450) NULL; """, -// -""" + // + """ DECLARE @var1 sysname; SELECT @var1 = [d].[name] FROM [sys].[default_constraints] [d] @@ -1458,8 +1546,8 @@ FROM [sys].[default_constraints] [d] IF @var1 IS NOT NULL EXEC(N'ALTER TABLE [People] DROP CONSTRAINT [' + @var1 + '];'); ALTER TABLE [People] ALTER COLUMN [FirstName] nvarchar(450) NULL; """, -// -""" + // + """ CREATE UNIQUE INDEX [IX_People_FirstName_LastName] ON [People] ([FirstName], [LastName]) WHERE [FirstName] IS NOT NULL AND [LastName] IS NOT NULL; """); } @@ -1469,7 +1557,7 @@ public override async Task Create_index_descending() await base.Create_index_descending(); AssertSql( -""" + """ CREATE INDEX [IX_People_X] ON [People] ([X] DESC); """); } @@ -1479,7 +1567,7 @@ public override async Task Create_index_descending_mixed() await base.Create_index_descending_mixed(); AssertSql( -""" + """ CREATE INDEX [IX_People_X_Y_Z] ON [People] ([X], [Y] DESC, [Z]); """); } @@ -1489,11 +1577,11 @@ public override async Task Alter_index_make_unique() await base.Alter_index_make_unique(); AssertSql( -""" + """ DROP INDEX [IX_People_X] ON [People]; """, -// -""" + // + """ CREATE UNIQUE INDEX [IX_People_X] ON [People] ([X]); """); } @@ -1503,11 +1591,11 @@ public override async Task Alter_index_change_sort_order() await base.Alter_index_change_sort_order(); AssertSql( -""" + """ DROP INDEX [IX_People_X_Y_Z] ON [People]; """, -// -""" + // + """ CREATE INDEX [IX_People_X_Y_Z] ON [People] ([X], [Y] DESC, [Z]); """); } @@ -1517,7 +1605,7 @@ public override async Task Create_index_with_filter() await base.Create_index_with_filter(); AssertSql( -""" + """ DECLARE @var0 sysname; SELECT @var0 = [d].[name] FROM [sys].[default_constraints] [d] @@ -1526,8 +1614,8 @@ FROM [sys].[default_constraints] [d] IF @var0 IS NOT NULL EXEC(N'ALTER TABLE [People] DROP CONSTRAINT [' + @var0 + '];'); ALTER TABLE [People] ALTER COLUMN [Name] nvarchar(450) NULL; """, -// -""" + // + """ CREATE INDEX [IX_People_Name] ON [People] ([Name]) WHERE [Name] IS NOT NULL; """); } @@ -1554,7 +1642,7 @@ await Test( migrationsSqlGenerationOptions: MigrationsSqlGenerationOptions.Idempotent); AssertSql( -""" + """ DECLARE @var0 sysname; SELECT @var0 = [d].[name] FROM [sys].[default_constraints] [d] @@ -1563,8 +1651,8 @@ FROM [sys].[default_constraints] [d] IF @var0 IS NOT NULL EXEC(N'ALTER TABLE [People] DROP CONSTRAINT [' + @var0 + '];'); ALTER TABLE [People] ALTER COLUMN [Name] nvarchar(450) NULL; """, -// -""" + // + """ EXEC(N'CREATE INDEX [IX_People_Name] ON [People] ([Name]) WHERE [Name] IS NOT NULL'); """); } @@ -1574,7 +1662,7 @@ public override async Task Create_unique_index_with_filter() await base.Create_unique_index_with_filter(); AssertSql( -""" + """ DECLARE @var0 sysname; SELECT @var0 = [d].[name] FROM [sys].[default_constraints] [d] @@ -1583,307 +1671,78 @@ FROM [sys].[default_constraints] [d] IF @var0 IS NOT NULL EXEC(N'ALTER TABLE [People] DROP CONSTRAINT [' + @var0 + '];'); ALTER TABLE [People] ALTER COLUMN [Name] nvarchar(450) NULL; """, -// -""" + // + """ CREATE UNIQUE INDEX [IX_People_Name] ON [People] ([Name]) WHERE [Name] IS NOT NULL AND [Name] <> ''; """); } - [ConditionalFact] - public virtual async Task Create_index_with_include() + public override async Task Drop_index() { - await Test( - builder => builder.Entity( - "People", e => - { - e.Property("Id"); - e.Property("FirstName"); - e.Property("LastName"); - e.Property("Name"); - }), - builder => { }, - builder => builder.Entity("People").HasIndex("Name") - .IncludeProperties("FirstName", "LastName"), - model => - { - var table = Assert.Single(model.Tables); - var index = Assert.Single(table.Indexes); - Assert.Equal(1, index.Columns.Count); - Assert.Contains(table.Columns.Single(c => c.Name == "Name"), index.Columns); - var includedColumns = (IReadOnlyList?)index[JetAnnotationNames.Include]; - Assert.Null(includedColumns); - }); + await base.Drop_index(); AssertSql( -""" -DECLARE @var0 sysname; -SELECT @var0 = [d].[name] -FROM [sys].[default_constraints] [d] -INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id] -WHERE ([d].[parent_object_id] = OBJECT_ID(N'[People]') AND [c].[name] = N'Name'); -IF @var0 IS NOT NULL EXEC(N'ALTER TABLE [People] DROP CONSTRAINT [' + @var0 + '];'); -ALTER TABLE [People] ALTER COLUMN [Name] nvarchar(450) NULL; -""", -// -""" -CREATE INDEX [IX_People_Name] ON [People] ([Name]) INCLUDE ([FirstName], [LastName]); + """ +DROP INDEX `IX_People_SomeField` ON `People`; """); } - [ConditionalFact] - public virtual async Task Create_index_with_include_and_filter() + public override async Task Rename_index() { - await Test( - builder => builder.Entity( - "People", e => - { - e.Property("Id"); - e.Property("FirstName"); - e.Property("LastName"); - e.Property("Name"); - }), - builder => { }, - builder => builder.Entity("People").HasIndex("Name") - .IncludeProperties("FirstName", "LastName") - .HasFilter("[Name] IS NOT NULL"), - model => - { - var table = Assert.Single(model.Tables); - var index = Assert.Single(table.Indexes); - Assert.Equal("([Name] IS NOT NULL)", index.Filter); - Assert.Equal(1, index.Columns.Count); - Assert.Contains(table.Columns.Single(c => c.Name == "Name"), index.Columns); - var includedColumns = (IReadOnlyList?)index[JetAnnotationNames.Include]; - Assert.Null(includedColumns); - }); + await base.Rename_index(); AssertSql( -""" -DECLARE @var0 sysname; -SELECT @var0 = [d].[name] -FROM [sys].[default_constraints] [d] -INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id] -WHERE ([d].[parent_object_id] = OBJECT_ID(N'[People]') AND [c].[name] = N'Name'); -IF @var0 IS NOT NULL EXEC(N'ALTER TABLE [People] DROP CONSTRAINT [' + @var0 + '];'); -ALTER TABLE [People] ALTER COLUMN [Name] nvarchar(450) NULL; -""", -// -""" -CREATE INDEX [IX_People_Name] ON [People] ([Name]) INCLUDE ([FirstName], [LastName]) WHERE [Name] IS NOT NULL; + """ +EXEC sp_rename N'[People].[Foo]', N'foo', 'INDEX'; """); } - [ConditionalFact] - public virtual async Task Create_index_unique_with_include() + public override async Task Add_primary_key_int() { - await Test( - builder => builder.Entity( - "People", e => - { - e.Property("Id"); - e.Property("FirstName"); - e.Property("LastName"); - e.Property("Name").IsRequired(); - }), - builder => { }, - builder => builder.Entity("People").HasIndex("Name") - .IsUnique() - .IncludeProperties("FirstName", "LastName"), - model => - { - var table = Assert.Single(model.Tables); - var index = Assert.Single(table.Indexes); - Assert.True(index.IsUnique); - Assert.Equal(1, index.Columns.Count); - Assert.Contains(table.Columns.Single(c => c.Name == "Name"), index.Columns); - var includedColumns = (IReadOnlyList?)index[JetAnnotationNames.Include]; - Assert.Null(includedColumns); - }); + var exception = await Assert.ThrowsAsync(() => base.Add_primary_key_int()); + + Assert.Equal(JetStrings.AlterIdentityColumn, exception.Message); + } + + public override async Task Add_primary_key_string() + { + await base.Add_primary_key_string(); AssertSql( -""" -DECLARE @var0 sysname; -SELECT @var0 = [d].[name] -FROM [sys].[default_constraints] [d] -INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id] -WHERE ([d].[parent_object_id] = OBJECT_ID(N'[People]') AND [c].[name] = N'Name'); -IF @var0 IS NOT NULL EXEC(N'ALTER TABLE [People] DROP CONSTRAINT [' + @var0 + '];'); -ALTER TABLE [People] ALTER COLUMN [Name] nvarchar(450) NOT NULL; -""", -// -""" -CREATE UNIQUE INDEX [IX_People_Name] ON [People] ([Name]) INCLUDE ([FirstName], [LastName]); + """ +ALTER TABLE `People` ADD CONSTRAINT `PK_People` PRIMARY KEY (`SomeField`); """); } - [ConditionalFact] - public virtual async Task Create_index_unique_with_include_and_filter() + public override async Task Add_primary_key_with_name() { - await Test( - builder => builder.Entity( - "People", e => - { - e.Property("Id"); - e.Property("FirstName"); - e.Property("LastName"); - e.Property("Name").IsRequired(); - }), - builder => { }, - builder => builder.Entity("People").HasIndex("Name") - .IsUnique() - .IncludeProperties("FirstName", "LastName") - .HasFilter("[Name] IS NOT NULL"), - model => - { - var table = Assert.Single(model.Tables); - var index = Assert.Single(table.Indexes); - Assert.True(index.IsUnique); - Assert.Equal("([Name] IS NOT NULL)", index.Filter); - Assert.Equal(1, index.Columns.Count); - Assert.Contains(table.Columns.Single(c => c.Name == "Name"), index.Columns); - var includedColumns = (IReadOnlyList?)index[JetAnnotationNames.Include]; - Assert.Null(includedColumns); - }); + await base.Add_primary_key_with_name(); AssertSql( -""" + """ DECLARE @var0 sysname; SELECT @var0 = [d].[name] FROM [sys].[default_constraints] [d] INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id] -WHERE ([d].[parent_object_id] = OBJECT_ID(N'[People]') AND [c].[name] = N'Name'); +WHERE ([d].[parent_object_id] = OBJECT_ID(N'[People]') AND [c].[name] = N'SomeField'); IF @var0 IS NOT NULL EXEC(N'ALTER TABLE [People] DROP CONSTRAINT [' + @var0 + '];'); -ALTER TABLE [People] ALTER COLUMN [Name] nvarchar(450) NOT NULL; +UPDATE [People] SET [SomeField] = N'' WHERE [SomeField] IS NULL; +ALTER TABLE [People] ALTER COLUMN [SomeField] nvarchar(450) NOT NULL; +ALTER TABLE [People] ADD DEFAULT N'' FOR [SomeField]; """, -// -""" -CREATE UNIQUE INDEX [IX_People_Name] ON [People] ([Name]) INCLUDE ([FirstName], [LastName]) WHERE [Name] IS NOT NULL; + // + """ +ALTER TABLE [People] ADD CONSTRAINT [PK_Foo] PRIMARY KEY ([SomeField]); """); } - [ConditionalFact] - public virtual async Task Create_index_unique_with_include_filter_and_fillfactor() - { - await Test( - builder => builder.Entity( - "People", e => - { - e.Property("Id"); - e.Property("FirstName"); - e.Property("LastName"); - e.Property("Name").IsRequired(); - }), - builder => { }, - builder => builder.Entity("People").HasIndex("Name") - .IsUnique() - .IncludeProperties("FirstName", "LastName") - .HasFilter("[Name] IS NOT NULL") - .HasFillFactor(90), - model => - { - var table = Assert.Single(model.Tables); - var index = Assert.Single(table.Indexes); - Assert.True(index.IsUnique); - Assert.Equal("([Name] IS NOT NULL)", index.Filter); - Assert.Equal(1, index.Columns.Count); - Assert.Contains(table.Columns.Single(c => c.Name == "Name"), index.Columns); - var includedColumns = (IReadOnlyList?)index[JetAnnotationNames.Include]; - Assert.Null(includedColumns); - // TODO: Online index not scaffolded? - }); - - AssertSql( -""" -DECLARE @var0 sysname; -SELECT @var0 = [d].[name] -FROM [sys].[default_constraints] [d] -INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id] -WHERE ([d].[parent_object_id] = OBJECT_ID(N'[People]') AND [c].[name] = N'Name'); -IF @var0 IS NOT NULL EXEC(N'ALTER TABLE [People] DROP CONSTRAINT [' + @var0 + '];'); -ALTER TABLE [People] ALTER COLUMN [Name] nvarchar(450) NOT NULL; -""", -// -""" -CREATE UNIQUE INDEX [IX_People_Name] ON [People] ([Name]) INCLUDE ([FirstName], [LastName]) WHERE [Name] IS NOT NULL WITH (FILLFACTOR = 90); -"""); - } - - public override async Task Drop_index() - { - await base.Drop_index(); - - AssertSql( -""" -DROP INDEX [IX_People_SomeField] ON [People]; -"""); - } - - public override async Task Rename_index() - { - await base.Rename_index(); - - AssertSql( -""" -EXEC sp_rename N'[People].[Foo]', N'foo', N'INDEX'; -"""); - } - - public override async Task Add_primary_key_int() - { - var exception = await Assert.ThrowsAsync(() => base.Add_primary_key_int()); - - Assert.Equal(JetStrings.AlterIdentityColumn, exception.Message); - } - - public override async Task Add_primary_key_string() - { - await base.Add_primary_key_string(); - - AssertSql( -""" -DECLARE @var0 sysname; -SELECT @var0 = [d].[name] -FROM [sys].[default_constraints] [d] -INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id] -WHERE ([d].[parent_object_id] = OBJECT_ID(N'[People]') AND [c].[name] = N'SomeField'); -IF @var0 IS NOT NULL EXEC(N'ALTER TABLE [People] DROP CONSTRAINT [' + @var0 + '];'); -ALTER TABLE [People] ALTER COLUMN [SomeField] nvarchar(450) NOT NULL; -""", -// -""" -ALTER TABLE [People] ADD CONSTRAINT [PK_People] PRIMARY KEY ([SomeField]); -"""); - } - - public override async Task Add_primary_key_with_name() - { - await base.Add_primary_key_with_name(); - - AssertSql( -""" -DECLARE @var0 sysname; -SELECT @var0 = [d].[name] -FROM [sys].[default_constraints] [d] -INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id] -WHERE ([d].[parent_object_id] = OBJECT_ID(N'[People]') AND [c].[name] = N'SomeField'); -IF @var0 IS NOT NULL EXEC(N'ALTER TABLE [People] DROP CONSTRAINT [' + @var0 + '];'); -UPDATE [People] SET [SomeField] = N'' WHERE [SomeField] IS NULL; -ALTER TABLE [People] ALTER COLUMN [SomeField] nvarchar(450) NOT NULL; -ALTER TABLE [People] ADD DEFAULT N'' FOR [SomeField]; -""", -// -""" -ALTER TABLE [People] ADD CONSTRAINT [PK_Foo] PRIMARY KEY ([SomeField]); -"""); - } - - public override async Task Add_primary_key_composite_with_name() + public override async Task Add_primary_key_composite_with_name() { await base.Add_primary_key_composite_with_name(); AssertSql( -""" -ALTER TABLE [People] ADD CONSTRAINT [PK_Foo] PRIMARY KEY ([SomeField1], [SomeField2]); + """ +ALTER TABLE `People` ADD CONSTRAINT `PK_Foo` PRIMARY KEY (`SomeField1`, `SomeField2`); """); } @@ -1899,18 +1758,8 @@ public override async Task Drop_primary_key_string() await base.Drop_primary_key_string(); AssertSql( -""" -ALTER TABLE [People] DROP CONSTRAINT [PK_People]; -""", -// -""" -DECLARE @var0 sysname; -SELECT @var0 = [d].[name] -FROM [sys].[default_constraints] [d] -INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id] -WHERE ([d].[parent_object_id] = OBJECT_ID(N'[People]') AND [c].[name] = N'SomeField'); -IF @var0 IS NOT NULL EXEC(N'ALTER TABLE [People] DROP CONSTRAINT [' + @var0 + '];'); -ALTER TABLE [People] ALTER COLUMN [SomeField] nvarchar(max) NOT NULL; + """ +ALTER TABLE `People` DROP CONSTRAINT `PK_People`; """); } @@ -1919,12 +1768,12 @@ public override async Task Add_foreign_key() await base.Add_foreign_key(); AssertSql( -""" -CREATE INDEX [IX_Orders_CustomerId] ON [Orders] ([CustomerId]); + """ +CREATE INDEX `IX_Orders_CustomerId` ON `Orders` (`CustomerId`); """, -// -""" -ALTER TABLE [Orders] ADD CONSTRAINT [FK_Orders_Customers_CustomerId] FOREIGN KEY ([CustomerId]) REFERENCES [Customers] ([Id]) ON DELETE CASCADE; + // + """ +ALTER TABLE `Orders` ADD CONSTRAINT `FK_Orders_Customers_CustomerId` FOREIGN KEY (`CustomerId`) REFERENCES `Customers` (`Id`) ON DELETE CASCADE; """); } @@ -1938,12 +1787,12 @@ public override async Task Add_foreign_key_with_name() // @"DROP INDEX [IX_Orders_CustomerId] ON [Orders];"); AssertSql( -""" -CREATE INDEX [IX_Orders_CustomerId] ON [Orders] ([CustomerId]); + """ +CREATE INDEX `IX_Orders_CustomerId` ON `Orders` (`CustomerId`); """, -// -""" -ALTER TABLE [Orders] ADD CONSTRAINT [FK_Foo] FOREIGN KEY ([CustomerId]) REFERENCES [Customers] ([Id]) ON DELETE CASCADE; + // + """ +ALTER TABLE `Orders` ADD CONSTRAINT `FK_Foo` FOREIGN KEY (`CustomerId`) REFERENCES `Customers` (`Id`) ON DELETE CASCADE; """); } @@ -1952,12 +1801,12 @@ public override async Task Drop_foreign_key() await base.Drop_foreign_key(); AssertSql( -""" -ALTER TABLE [Orders] DROP CONSTRAINT [FK_Orders_Customers_CustomerId]; + """ +ALTER TABLE `Orders` DROP CONSTRAINT `FK_Orders_Customers_CustomerId`; """, -// -""" -DROP INDEX [IX_Orders_CustomerId] ON [Orders]; + // + """ +DROP INDEX `IX_Orders_CustomerId` ON `Orders`; """); } @@ -1966,8 +1815,8 @@ public override async Task Add_unique_constraint() await base.Add_unique_constraint(); AssertSql( -""" -ALTER TABLE [People] ADD CONSTRAINT [AK_People_AlternateKeyColumn] UNIQUE ([AlternateKeyColumn]); + """ +ALTER TABLE `People` ADD CONSTRAINT `AK_People_AlternateKeyColumn` UNIQUE (`AlternateKeyColumn`); """); } @@ -1976,8 +1825,8 @@ public override async Task Add_unique_constraint_composite_with_name() await base.Add_unique_constraint_composite_with_name(); AssertSql( -""" -ALTER TABLE [People] ADD CONSTRAINT [AK_Foo] UNIQUE ([AlternateKeyColumn1], [AlternateKeyColumn2]); + """ +ALTER TABLE `People` ADD CONSTRAINT `AK_Foo` UNIQUE (`AlternateKeyColumn1`, `AlternateKeyColumn2`); """); } @@ -1986,8 +1835,8 @@ public override async Task Drop_unique_constraint() await base.Drop_unique_constraint(); AssertSql( -""" -ALTER TABLE [People] DROP CONSTRAINT [AK_People_AlternateKeyColumn]; + """ +ALTER TABLE `People` DROP CONSTRAINT `AK_People_AlternateKeyColumn`; """); } @@ -1996,8 +1845,8 @@ public override async Task Add_check_constraint_with_name() await base.Add_check_constraint_with_name(); AssertSql( -""" -ALTER TABLE [People] ADD CONSTRAINT [CK_People_Foo] CHECK ([DriverLicense] > 0); + """ +ALTER TABLE `People` ADD CONSTRAINT `CK_People_Foo` CHECK (`DriverLicense` > 0); """); } @@ -2020,8 +1869,8 @@ await Test( migrationsSqlGenerationOptions: MigrationsSqlGenerationOptions.Idempotent); AssertSql( -""" -EXEC(N'ALTER TABLE [People] ADD CONSTRAINT [CK_People_Foo] CHECK ([DriverLicense] > 0)'); + """ +ALTER TABLE `People` ADD CONSTRAINT `CK_People_Foo` CHECK ([DriverLicense] > 0); """); } @@ -2030,12 +1879,12 @@ public override async Task Alter_check_constraint() await base.Alter_check_constraint(); AssertSql( -""" -ALTER TABLE [People] DROP CONSTRAINT [CK_People_Foo]; + """ +ALTER TABLE `People` DROP CONSTRAINT `CK_People_Foo`; """, -// -""" -ALTER TABLE [People] ADD CONSTRAINT [CK_People_Foo] CHECK ([DriverLicense] > 1); + // + """ +ALTER TABLE `People` ADD CONSTRAINT `CK_People_Foo` CHECK (`DriverLicense` > 1); """); } @@ -2044,8 +1893,8 @@ public override async Task Drop_check_constraint() await base.Drop_check_constraint(); AssertSql( -""" -ALTER TABLE [People] DROP CONSTRAINT [CK_People_Foo]; + """ +ALTER TABLE `People` DROP CONSTRAINT `CK_People_Foo`; """); } @@ -2054,43 +1903,8 @@ public override async Task Create_sequence() await base.Create_sequence(); AssertSql( -""" -CREATE SEQUENCE [TestSequence] AS int START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE NO CYCLE; -"""); - } - - [ConditionalFact] - public async Task Create_sequence_byte() - { - await Test( - builder => { }, - builder => builder.HasSequence("TestSequence"), - model => - { - var sequence = Assert.Single(model.Sequences); - Assert.Equal("TestSequence", sequence.Name); - }); - AssertSql( -""" -CREATE SEQUENCE [TestSequence] AS tinyint START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE NO CYCLE; -"""); - } - - [ConditionalFact] - public async Task Create_sequence_decimal() - { - await Test( - builder => { }, - builder => builder.HasSequence("TestSequence"), - model => - { - var sequence = Assert.Single(model.Sequences); - Assert.Equal("TestSequence", sequence.Name); - }); - - AssertSql( -""" -CREATE SEQUENCE [TestSequence] AS decimal START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE NO CYCLE; + """ +CREATE SEQUENCE [TestSequence] AS int START WITH 1 INCREMENT BY 1 NO CYCLE; """); } @@ -2099,8 +1913,8 @@ public override async Task Create_sequence_long() await base.Create_sequence_long(); AssertSql( -""" -CREATE SEQUENCE [TestSequence] START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE NO CYCLE; + """ +CREATE SEQUENCE [TestSequence] START WITH 1 INCREMENT BY 1 NO CYCLE; """); } @@ -2109,8 +1923,8 @@ public override async Task Create_sequence_short() await base.Create_sequence_short(); AssertSql( -""" -CREATE SEQUENCE [TestSequence] AS smallint START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE NO CYCLE; + """ +CREATE SEQUENCE [TestSequence] AS smallint START WITH 1 INCREMENT BY 1 NO CYCLE; """); } @@ -2119,11 +1933,11 @@ public override async Task Create_sequence_all_settings() await base.Create_sequence_all_settings(); AssertSql( -""" + """ IF SCHEMA_ID(N'dbo2') IS NULL EXEC(N'CREATE SCHEMA [dbo2];'); """, -// -""" + // + """ CREATE SEQUENCE [dbo2].[TestSequence] START WITH 3 INCREMENT BY 2 MINVALUE 2 MAXVALUE 916 CYCLE; """); } @@ -2133,11 +1947,11 @@ public override async Task Alter_sequence_all_settings() await base.Alter_sequence_all_settings(); AssertSql( -""" + """ ALTER SEQUENCE [foo] INCREMENT BY 2 MINVALUE -5 MAXVALUE 10 CYCLE; """, -// -""" + // + """ ALTER SEQUENCE [foo] RESTART WITH -3; """); } @@ -2147,17 +1961,25 @@ public override async Task Alter_sequence_increment_by() await base.Alter_sequence_increment_by(); AssertSql( -""" + """ ALTER SEQUENCE [foo] INCREMENT BY 2 NO MINVALUE NO MAXVALUE NO CYCLE; """); } + public override async Task Alter_sequence_restart_with() + { + await base.Alter_sequence_restart_with(); + + AssertSql( + @"ALTER SEQUENCE [foo] RESTART WITH 3;"); + } + public override async Task Drop_sequence() { await base.Drop_sequence(); AssertSql( -""" + """ DROP SEQUENCE [TestSequence]; """); } @@ -2167,8 +1989,8 @@ public override async Task Rename_sequence() await base.Rename_sequence(); AssertSql( -""" -EXEC sp_rename N'[TestSequence]', N'testsequence'; + """ +EXEC sp_rename N'[TestSequence]', N'testsequence', 'OBJECT'; """); } @@ -2177,11 +1999,11 @@ public override async Task Move_sequence() await base.Move_sequence(); AssertSql( -""" + """ IF SCHEMA_ID(N'TestSequenceSchema') IS NULL EXEC(N'CREATE SCHEMA [TestSequenceSchema];'); """, -// -""" + // + """ ALTER SCHEMA [TestSequenceSchema] TRANSFER [TestSequence]; """); } @@ -2200,7 +2022,7 @@ await Test( }); AssertSql( -""" + """ DECLARE @defaultSchema sysname = SCHEMA_NAME(); EXEC(N'ALTER SCHEMA [' + @defaultSchema + N'] TRANSFER [TestSequenceSchema].[TestSequence];'); """); @@ -2224,11 +2046,11 @@ await Test( }); AssertSql( -""" -CREATE SEQUENCE [TestSequence] AS int START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE NO CYCLE; + """ +CREATE SEQUENCE [TestSequence] AS int START WITH 1 INCREMENT BY 1 NO CYCLE; """, -// -""" + // + """ ALTER TABLE [People] ADD [SeqProp] int NOT NULL DEFAULT (NEXT VALUE FOR TestSequence); """); } @@ -2247,7 +2069,7 @@ await Test( model => Assert.Empty(model.Sequences)); AssertSql( -""" + """ DECLARE @var0 sysname; SELECT @var0 = [d].[name] FROM [sys].[default_constraints] [d] @@ -2256,8 +2078,8 @@ FROM [sys].[default_constraints] [d] IF @var0 IS NOT NULL EXEC(N'ALTER TABLE [People] DROP CONSTRAINT [' + @var0 + '];'); ALTER TABLE [People] DROP COLUMN [SeqProp]; """, -// -""" + // + """ DROP SEQUENCE [TestSequence]; """); } @@ -2267,7 +2089,7 @@ public override async Task InsertDataOperation() await base.InsertDataOperation(); AssertSql( -""" + """ IF EXISTS (SELECT * FROM [sys].[identity_columns] WHERE [name] IN (N'Id', N'Name') AND [object_id] = OBJECT_ID(N'[Person]')) SET IDENTITY_INSERT [Person] ON; INSERT INTO [Person] ([Id], [Name]) @@ -2287,9 +2109,9 @@ public override async Task DeleteDataOperation_simple_key() // TODO remove rowcount AssertSql( -""" -DELETE FROM [Person] -WHERE [Id] = 2; + """ +DELETE FROM `Person` +WHERE `Id` = 2; SELECT @@ROWCOUNT; """); } @@ -2300,9 +2122,9 @@ public override async Task DeleteDataOperation_composite_key() // TODO remove rowcount AssertSql( -""" -DELETE FROM [Person] -WHERE [AnotherId] = 12 AND [Id] = 2; + """ +DELETE FROM `Person` +WHERE `AnotherId` = 12 AND `Id` = 2; SELECT @@ROWCOUNT; """); } @@ -2313,9 +2135,9 @@ public override async Task UpdateDataOperation_simple_key() // TODO remove rowcount AssertSql( -""" -UPDATE [Person] SET [Name] = N'Another John Snow' -WHERE [Id] = 2; + """ +UPDATE `Person` SET `Name` = 'Another John Snow' +WHERE `Id` = 2; SELECT @@ROWCOUNT; """); } @@ -2326,9 +2148,9 @@ public override async Task UpdateDataOperation_composite_key() // TODO remove rowcount AssertSql( -""" -UPDATE [Person] SET [Name] = N'Another John Snow' -WHERE [AnotherId] = 11 AND [Id] = 2; + """ +UPDATE `Person` SET `Name` = 'Another John Snow' +WHERE `AnotherId` = 11 AND `Id` = 2; SELECT @@ROWCOUNT; """); } @@ -2339,9 +2161,9 @@ public override async Task UpdateDataOperation_multiple_columns() // TODO remove rowcount AssertSql( -""" -UPDATE [Person] SET [Age] = 21, [Name] = N'Another John Snow' -WHERE [Id] = 2; + """ +UPDATE `Person` SET `Age` = 21, `Name` = 'Another John Snow' +WHERE `Id` = 2; SELECT @@ROWCOUNT; """); } @@ -2369,7 +2191,7 @@ await Test( migrationsSqlGenerationOptions: MigrationsSqlGenerationOptions.Idempotent); AssertSql( -""" + """ IF EXISTS (SELECT * FROM [sys].[identity_columns] WHERE [name] IN (N'Id', N'Name') AND [object_id] = OBJECT_ID(N'[Person]')) SET IDENTITY_INSERT [Person] ON; EXEC(N'INSERT INTO [Person] ([Id], [Name]) @@ -2401,7 +2223,7 @@ await Test( migrationsSqlGenerationOptions: MigrationsSqlGenerationOptions.Idempotent); AssertSql( -""" + """ EXEC(N'DELETE FROM [Person] WHERE [Id] = 2; SELECT @@ROWCOUNT'); @@ -2426,7 +2248,7 @@ await Test( migrationsSqlGenerationOptions: MigrationsSqlGenerationOptions.Idempotent); AssertSql( -""" + """ EXEC(N'UPDATE [Person] SET [Name] = N''Another John Snow'' WHERE [Id] = 2; SELECT @@ROWCOUNT'); @@ -2434,1127 +2256,176 @@ await Test( } [ConditionalFact] - public virtual async Task Create_table_with_json_column() + public override async Task Add_required_primitive_collection_to_existing_table() { - await Test( - builder => { }, - builder => - { - builder.Entity( - "Entity", e => - { - e.Property("Id").ValueGeneratedOnAdd(); - e.HasKey("Id"); - e.Property("Name"); - e.OwnsOne( - "Owned", "OwnedReference", o => - { - o.OwnsOne( - "Nested", "NestedReference", n => - { - n.Property("Number"); - }); - o.OwnsMany( - "Nested2", "NestedCollection", n => - { - n.Property("Number2"); - }); - o.Property("Date"); - o.ToJson(); - }); - - e.OwnsMany( - "Owned2", "OwnedCollection", o => - { - o.OwnsOne( - "Nested3", "NestedReference2", n => - { - n.Property("Number3"); - }); - o.OwnsMany( - "Nested4", "NestedCollection2", n => - { - n.Property("Number4"); - }); - o.Property("Date2"); - o.ToJson(); - }); - - e.OwnsOne( - "Owned", "OwnedRequiredReference", o => - { - o.Property("Date"); - o.ToJson(); - }); - - e.Navigation("OwnedRequiredReference").IsRequired(); - }); - }, - model => - { - var table = Assert.Single(model.Tables); - Assert.Equal("Entity", table.Name); + await base.Add_required_primitive_collection_to_existing_table(); - Assert.Collection( - table.Columns, - c => Assert.Equal("Id", c.Name), - c => Assert.Equal("Name", c.Name), - c => - { - Assert.Equal("OwnedCollection", c.Name); - Assert.Equal("nvarchar(max)", c.StoreType); - }, - c => - { - Assert.Equal("OwnedReference", c.Name); - Assert.Equal("nvarchar(max)", c.StoreType); - Assert.True(c.IsNullable); - }, - c => - { - Assert.Equal("OwnedRequiredReference", c.Name); - Assert.Equal("nvarchar(max)", c.StoreType); - Assert.False(c.IsNullable); - }); - Assert.Same( - table.Columns.Single(c => c.Name == "Id"), - Assert.Single(table.PrimaryKey!.Columns)); - }); + AssertSql( + """ +ALTER TABLE `Customers` ADD `Numbers` varchar(255) NOT NULL DEFAULT '[]'; +"""); + } + + [ConditionalFact] + public override async Task Add_required_primitive_collection_with_custom_default_value_to_existing_table() + { + await base.Add_required_primitive_collection_with_custom_default_value_to_existing_table(); AssertSql( -""" -CREATE TABLE [Entity] ( - [Id] int NOT NULL IDENTITY, - [Name] nvarchar(max) NULL, - [OwnedCollection] nvarchar(max) NULL, - [OwnedReference] nvarchar(max) NULL, - [OwnedRequiredReference] nvarchar(max) NOT NULL, - CONSTRAINT [PK_Entity] PRIMARY KEY ([Id]) -); + """ +ALTER TABLE `Customers` ADD `Numbers` varchar(255) NOT NULL DEFAULT '[1,2,3]'; """); } [ConditionalFact] - public virtual async Task Create_table_with_json_column_explicit_json_column_names() + public override async Task Add_required_primitive_collection_with_custom_default_value_sql_to_existing_table() { - await Test( - builder => { }, - builder => - { - builder.Entity( - "Entity", e => - { - e.Property("Id").ValueGeneratedOnAdd(); - e.HasKey("Id"); - e.Property("Name"); - e.OwnsOne( - "Owned", "json_reference", o => - { - o.OwnsOne( - "Nested", "json_reference", n => - { - n.Property("Number"); - }); - o.OwnsMany( - "Nested2", "NestedCollection", n => - { - n.Property("Number2"); - }); - o.Property("Date"); - o.ToJson(); - }); - - e.OwnsMany( - "Owned2", "json_collection", o => - { - o.OwnsOne( - "Nested3", "NestedReference2", n => - { - n.Property("Number3"); - }); - o.OwnsMany( - "Nested4", "NestedCollection2", n => - { - n.Property("Number4"); - }); - o.Property("Date2"); - o.ToJson(); - }); - }); - }, - model => - { - var table = Assert.Single(model.Tables); - Assert.Equal("Entity", table.Name); + await base.Add_required_primitive_collection_with_custom_default_value_sql_to_existing_table_core("'[3, 2, 1]'"); - Assert.Collection( - table.Columns, - c => Assert.Equal("Id", c.Name), - c => Assert.Equal("Name", c.Name), - c => - { - Assert.Equal("json_collection", c.Name); - Assert.Equal("nvarchar(max)", c.StoreType); - }, - c => - { - Assert.Equal("json_reference", c.Name); - Assert.Equal("nvarchar(max)", c.StoreType); - }); - Assert.Same( - table.Columns.Single(c => c.Name == "Id"), - Assert.Single(table.PrimaryKey!.Columns)); - }); + AssertSql( + """ +ALTER TABLE `Customers` ADD `Numbers` varchar(255) NOT NULL DEFAULT '[3, 2, 1]'; +"""); + } + + [ConditionalFact(Skip = "issue #33038")] + public override async Task Add_required_primitive_collection_with_custom_converter_to_existing_table() + { + await base.Add_required_primitive_collection_with_custom_converter_to_existing_table(); AssertSql( """ -CREATE TABLE [Entity] ( - [Id] int NOT NULL IDENTITY, - [Name] nvarchar(max) NULL, - [json_collection] nvarchar(max) NULL, - [json_reference] nvarchar(max) NULL, - CONSTRAINT [PK_Entity] PRIMARY KEY ([Id]) -); +ALTER TABLE [Customers] ADD [Numbers] nvarchar(max) NOT NULL DEFAULT N'nothing'; """); } [ConditionalFact] - public virtual async Task Add_json_columns_to_existing_table() + public override async Task Add_required_primitive_collection_with_custom_converter_and_custom_default_value_to_existing_table() { - await Test( - builder => builder.Entity( - "Entity", e => - { - e.Property("Id").ValueGeneratedOnAdd(); - e.HasKey("Id"); - e.Property("Name"); - }), - builder => - { - builder.Entity( - "Entity", e => - { - e.Property("Id").ValueGeneratedOnAdd(); - e.HasKey("Id"); - e.Property("Name"); - - e.OwnsOne( - "Owned", "OwnedReference", o => - { - o.OwnsOne( - "Nested", "NestedReference", n => - { - n.Property("Number"); - }); - o.OwnsMany( - "Nested2", "NestedCollection", n => - { - n.Property("Number2"); - }); - o.Property("Date"); - o.ToJson(); - }); - - e.OwnsOne( - "Owned", "OwnedRequiredReference", o => - { - o.Property("Date"); - o.ToJson(); - }); - - e.Navigation("OwnedRequiredReference").IsRequired(); - - e.OwnsMany( - "Owned2", "OwnedCollection", o => - { - o.OwnsOne( - "Nested3", "NestedReference2", n => - { - n.Property("Number3"); - }); - o.OwnsMany( - "Nested4", "NestedCollection2", n => - { - n.Property("Number4"); - }); - o.Property("Date2"); - o.ToJson(); - }); - }); - }, - model => - { - var table = Assert.Single(model.Tables); - Assert.Equal("Entity", table.Name); - - Assert.Collection( - table.Columns, - c => Assert.Equal("Id", c.Name), - c => Assert.Equal("Name", c.Name), - c => - { - Assert.Equal("OwnedCollection", c.Name); - Assert.Equal("nvarchar(max)", c.StoreType); - }, - c => - { - Assert.Equal("OwnedReference", c.Name); - Assert.Equal("nvarchar(max)", c.StoreType); - Assert.True(c.IsNullable); - }, - c => - { - Assert.Equal("OwnedRequiredReference", c.Name); - Assert.Equal("nvarchar(max)", c.StoreType); - Assert.False(c.IsNullable); - }); - Assert.Same( - table.Columns.Single(c => c.Name == "Id"), - Assert.Single(table.PrimaryKey!.Columns)); - }); + await base.Add_required_primitive_collection_with_custom_converter_and_custom_default_value_to_existing_table(); AssertSql( -""" -ALTER TABLE [Entity] ADD [OwnedCollection] nvarchar(max) NULL; -""", -// -""" -ALTER TABLE [Entity] ADD [OwnedReference] nvarchar(max) NULL; -""", -// -""" -ALTER TABLE [Entity] ADD [OwnedRequiredReference] nvarchar(max) NOT NULL DEFAULT N''; + """ +ALTER TABLE `Customers` ADD `Numbers` varchar(255) NOT NULL DEFAULT 'some numbers'; """); } [ConditionalFact] - public virtual async Task Remove_json_columns_from_existing_table() + public override async Task Add_optional_primitive_collection_to_existing_table() { - await Test( - builder => - { - builder.Entity( - "Entity", e => - { - e.Property("Id").ValueGeneratedOnAdd(); - e.HasKey("Id"); - e.Property("Name"); - e.OwnsOne( - "Owned", "OwnedReference", o => - { - o.OwnsOne( - "Nested", "NestedReference", n => - { - n.Property("Number"); - }); - o.OwnsMany( - "Nested2", "NestedCollection", n => - { - n.Property("Number2"); - }); - o.Property("Date"); - o.ToJson(); - }); - - e.OwnsMany( - "Owned2", "OwnedCollection", o => - { - o.OwnsOne( - "Nested3", "NestedReference2", n => - { - n.Property("Number3"); - }); - o.OwnsMany( - "Nested4", "NestedCollection2", n => - { - n.Property("Number4"); - }); - o.Property("Date2"); - o.ToJson(); - }); - }); - }, - builder => builder.Entity( - "Entity", e => - { - e.Property("Id").ValueGeneratedOnAdd(); - e.HasKey("Id"); - e.Property("Name"); - }), - model => - { - var table = Assert.Single(model.Tables); - Assert.Equal("Entity", table.Name); - - Assert.Collection( - table.Columns, - c => Assert.Equal("Id", c.Name), - c => Assert.Equal("Name", c.Name)); - Assert.Same( - table.Columns.Single(c => c.Name == "Id"), - Assert.Single(table.PrimaryKey!.Columns)); - }); + await base.Add_optional_primitive_collection_to_existing_table(); AssertSql( -""" -DECLARE @var0 sysname; -SELECT @var0 = [d].[name] -FROM [sys].[default_constraints] [d] -INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id] -WHERE ([d].[parent_object_id] = OBJECT_ID(N'[Entity]') AND [c].[name] = N'OwnedCollection'); -IF @var0 IS NOT NULL EXEC(N'ALTER TABLE [Entity] DROP CONSTRAINT [' + @var0 + '];'); -ALTER TABLE [Entity] DROP COLUMN [OwnedCollection]; -""", -// -""" -DECLARE @var1 sysname; -SELECT @var1 = [d].[name] -FROM [sys].[default_constraints] [d] -INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id] -WHERE ([d].[parent_object_id] = OBJECT_ID(N'[Entity]') AND [c].[name] = N'OwnedReference'); -IF @var1 IS NOT NULL EXEC(N'ALTER TABLE [Entity] DROP CONSTRAINT [' + @var1 + '];'); -ALTER TABLE [Entity] DROP COLUMN [OwnedReference]; + """ +ALTER TABLE `Customers` ADD `Numbers` varchar(255) NULL; """); } [ConditionalFact] - public virtual async Task Rename_json_column() + public override async Task Create_table_with_required_primitive_collection() { - await Test( - builder => - { - builder.Entity( - "Entity", e => - { - e.Property("Id").ValueGeneratedOnAdd(); - e.HasKey("Id"); - e.Property("Name"); - - e.OwnsOne( - "Owned", "OwnedReference", o => - { - o.OwnsOne( - "Nested", "NestedReference", n => - { - n.Property("Number"); - }); - o.OwnsMany( - "Nested2", "NestedCollection", n => - { - n.Property("Number2"); - }); - o.Property("Date"); - o.ToJson("json_reference"); - }); - - e.OwnsMany( - "Owned2", "OwnedCollection", o => - { - o.OwnsOne( - "Nested3", "NestedReference2", n => - { - n.Property("Number3"); - }); - o.OwnsMany( - "Nested4", "NestedCollection2", n => - { - n.Property("Number4"); - }); - o.Property("Date2"); - o.ToJson("json_collection"); - }); - }); - }, - builder => - { - builder.Entity( - "Entity", e => - { - e.Property("Id").ValueGeneratedOnAdd(); - e.HasKey("Id"); - e.Property("Name"); - - e.OwnsOne( - "Owned", "OwnedReference", o => - { - o.OwnsOne( - "Nested", "NestedReference", n => - { - n.Property("Number"); - }); - o.OwnsMany( - "Nested2", "NestedCollection", n => - { - n.Property("Number2"); - }); - o.Property("Date"); - o.ToJson("new_json_reference"); - }); - - e.OwnsMany( - "Owned2", "OwnedCollection", o => - { - o.OwnsOne( - "Nested3", "NestedReference2", n => - { - n.Property("Number3"); - }); - o.OwnsMany( - "Nested4", "NestedCollection2", n => - { - n.Property("Number4"); - }); - o.Property("Date2"); - o.ToJson("new_json_collection"); - }); - }); - }, - model => - { - var table = Assert.Single(model.Tables); - Assert.Equal("Entity", table.Name); - - Assert.Collection( - table.Columns, - c => Assert.Equal("Id", c.Name), - c => Assert.Equal("Name", c.Name), - c => - { - Assert.Equal("new_json_collection", c.Name); - Assert.Equal("nvarchar(max)", c.StoreType); - }, - c => - { - Assert.Equal("new_json_reference", c.Name); - Assert.Equal("nvarchar(max)", c.StoreType); - }); - Assert.Same( - table.Columns.Single(c => c.Name == "Id"), - Assert.Single(table.PrimaryKey!.Columns)); - }); + await base.Create_table_with_required_primitive_collection(); AssertSql( -""" -EXEC sp_rename N'[Entity].[json_reference]', N'new_json_reference', N'COLUMN'; -""", -// -""" -EXEC sp_rename N'[Entity].[json_collection]', N'new_json_collection', N'COLUMN'; + """ +CREATE TABLE `Customers` ( + `Id` counter NOT NULL, + `Name` varchar(255) NULL, + `Numbers` varchar(255) NOT NULL, + CONSTRAINT `PK_Customers` PRIMARY KEY (`Id`) +); """); } [ConditionalFact] - public virtual async Task Rename_table_with_json_column() + public override async Task Create_table_with_optional_primitive_collection() { - await Test( - builder => - { - builder.Entity( - "Entity", e => - { - e.Property("Id").ValueGeneratedOnAdd(); - e.HasKey("Id"); - e.Property("Name"); - e.ToTable("Entities"); - - e.OwnsOne( - "Owned", "OwnedReference", o => - { - o.OwnsOne( - "Nested", "NestedReference", n => - { - n.Property("Number"); - }); - o.OwnsMany( - "Nested2", "NestedCollection", n => - { - n.Property("Number2"); - }); - o.Property("Date"); - o.ToJson(); - }); - - e.OwnsMany( - "Owned2", "OwnedCollection", o => - { - o.OwnsOne( - "Nested3", "NestedReference2", n => - { - n.Property("Number3"); - }); - o.OwnsMany( - "Nested4", "NestedCollection2", n => - { - n.Property("Number4"); - }); - o.Property("Date2"); - o.ToJson(); - }); - }); - }, - builder => - { - builder.Entity( - "Entity", e => - { - e.Property("Id").ValueGeneratedOnAdd(); - e.HasKey("Id"); - e.Property("Name"); - e.ToTable("NewEntities"); - - e.OwnsOne( - "Owned", "OwnedReference", o => - { - o.OwnsOne( - "Nested", "NestedReference", n => - { - n.Property("Number"); - }); - o.OwnsMany( - "Nested2", "NestedCollection", n => - { - n.Property("Number2"); - }); - o.Property("Date"); - o.ToJson(); - }); - - e.OwnsMany( - "Owned2", "OwnedCollection", o => - { - o.OwnsOne( - "Nested3", "NestedReference2", n => - { - n.Property("Number3"); - }); - o.OwnsMany( - "Nested4", "NestedCollection2", n => - { - n.Property("Number4"); - }); - o.Property("Date2"); - o.ToJson(); - }); - }); - }, - model => - { - var table = Assert.Single(model.Tables); - Assert.Equal("NewEntities", table.Name); - - Assert.Collection( - table.Columns, - c => Assert.Equal("Id", c.Name), - c => Assert.Equal("Name", c.Name), - c => - { - Assert.Equal("OwnedCollection", c.Name); - Assert.Equal("nvarchar(max)", c.StoreType); - }, - c => - { - Assert.Equal("OwnedReference", c.Name); - Assert.Equal("nvarchar(max)", c.StoreType); - }); - Assert.Same( - table.Columns.Single(c => c.Name == "Id"), - Assert.Single(table.PrimaryKey!.Columns)); - }); + await base.Create_table_with_optional_primitive_collection(); AssertSql( -""" -ALTER TABLE [Entities] DROP CONSTRAINT [PK_Entities]; -""", -// -""" -EXEC sp_rename N'[Entities]', N'NewEntities'; -""", -// -""" -ALTER TABLE [NewEntities] ADD CONSTRAINT [PK_NewEntities] PRIMARY KEY ([Id]); + """ +CREATE TABLE `Customers` ( + `Id` counter NOT NULL, + `Name` varchar(255) NULL, + `Numbers` varchar(255) NULL, + CONSTRAINT `PK_Customers` PRIMARY KEY (`Id`) +); """); } [ConditionalFact] - public virtual async Task Convert_regular_owned_entities_to_json() + public override async Task Create_table_with_complex_type_with_required_properties_on_derived_entity_in_TPH() { - await Test( - builder => - { - builder.Entity( - "Entity", e => - { - e.Property("Id").ValueGeneratedOnAdd(); - e.HasKey("Id"); - e.Property("Name"); - - e.OwnsOne( - "Owned", "OwnedReference", o => - { - o.OwnsOne( - "Nested", "NestedReference", n => - { - n.Property("Number"); - }); - o.OwnsMany( - "Nested2", "NestedCollection", n => - { - n.Property("Number2"); - }); - o.Property("Date"); - }); - - e.OwnsMany( - "Owned2", "OwnedCollection", o => - { - o.OwnsOne( - "Nested3", "NestedReference2", n => - { - n.Property("Number3"); - }); - o.OwnsMany( - "Nested4", "NestedCollection2", n => - { - n.Property("Number4"); - }); - o.Property("Date2"); - }); - }); - }, - builder => - { - builder.Entity( - "Entity", e => - { - e.Property("Id").ValueGeneratedOnAdd(); - e.HasKey("Id"); - e.Property("Name"); - - e.OwnsOne( - "Owned", "OwnedReference", o => - { - o.OwnsOne( - "Nested", "NestedReference", n => - { - n.Property("Number"); - }); - o.OwnsMany( - "Nested2", "NestedCollection", n => - { - n.Property("Number2"); - }); - o.Property("Date"); - o.ToJson(); - }); - - e.OwnsMany( - "Owned2", "OwnedCollection", o => - { - o.OwnsOne( - "Nested3", "NestedReference2", n => - { - n.Property("Number3"); - }); - o.OwnsMany( - "Nested4", "NestedCollection2", n => - { - n.Property("Number4"); - }); - o.Property("Date2"); - o.ToJson(); - }); - }); - }, - model => - { - var table = Assert.Single(model.Tables); - Assert.Equal("Entity", table.Name); - - Assert.Collection( - table.Columns, - c => Assert.Equal("Id", c.Name), - c => Assert.Equal("Name", c.Name), - c => - { - Assert.Equal("OwnedCollection", c.Name); - Assert.Equal("nvarchar(max)", c.StoreType); - }, - c => - { - Assert.Equal("OwnedReference", c.Name); - Assert.Equal("nvarchar(max)", c.StoreType); - }); - Assert.Same( - table.Columns.Single(c => c.Name == "Id"), - Assert.Single(table.PrimaryKey!.Columns)); - }); + await base.Create_table_with_complex_type_with_required_properties_on_derived_entity_in_TPH(); AssertSql( -""" -DROP TABLE [Entity_NestedCollection]; -""", -// -""" -DROP TABLE [Entity_OwnedCollection_NestedCollection2]; -""", -// -""" -DROP TABLE [Entity_OwnedCollection]; -""", -// -""" -DECLARE @var0 sysname; -SELECT @var0 = [d].[name] -FROM [sys].[default_constraints] [d] -INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id] -WHERE ([d].[parent_object_id] = OBJECT_ID(N'[Entity]') AND [c].[name] = N'OwnedReference_Date'); -IF @var0 IS NOT NULL EXEC(N'ALTER TABLE [Entity] DROP CONSTRAINT [' + @var0 + '];'); -ALTER TABLE [Entity] DROP COLUMN [OwnedReference_Date]; -""", -// -""" -DECLARE @var1 sysname; -SELECT @var1 = [d].[name] -FROM [sys].[default_constraints] [d] -INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id] -WHERE ([d].[parent_object_id] = OBJECT_ID(N'[Entity]') AND [c].[name] = N'OwnedReference_NestedReference_Number'); -IF @var1 IS NOT NULL EXEC(N'ALTER TABLE [Entity] DROP CONSTRAINT [' + @var1 + '];'); -ALTER TABLE [Entity] DROP COLUMN [OwnedReference_NestedReference_Number]; -""", -// -""" -ALTER TABLE [Entity] ADD [OwnedCollection] nvarchar(max) NULL; -""", -// -""" -ALTER TABLE [Entity] ADD [OwnedReference] nvarchar(max) NULL; + """ +CREATE TABLE `Contacts` ( + `Id` counter NOT NULL, + `Discriminator` varchar(8) NOT NULL, + `Name` varchar(255) NULL, + `Number` integer NULL, + `MyComplex_Prop` varchar(255) NULL, + `MyComplex_MyNestedComplex_Bar` datetime NULL, + `MyComplex_MyNestedComplex_Foo` integer NULL, + CONSTRAINT `PK_Contacts` PRIMARY KEY (`Id`) +); """); } [ConditionalFact] - public virtual async Task Convert_json_entities_to_regular_owned() + public override async Task Add_required_primitve_collection_to_existing_table() { - await Test( - builder => - { - builder.Entity( - "Entity", e => - { - e.Property("Id").ValueGeneratedOnAdd(); - e.HasKey("Id"); - e.Property("Name"); - - e.OwnsOne( - "Owned", "OwnedReference", o => - { - o.OwnsOne( - "Nested", "NestedReference", n => - { - n.Property("Number"); - }); - o.OwnsMany( - "Nested2", "NestedCollection", n => - { - n.Property("Number2"); - }); - o.Property("Date"); - o.ToJson(); - }); - - e.OwnsMany( - "Owned2", "OwnedCollection", o => - { - o.OwnsOne( - "Nested3", "NestedReference2", n => - { - n.Property("Number3"); - }); - o.OwnsMany( - "Nested4", "NestedCollection2", n => - { - n.Property("Number4"); - }); - o.Property("Date2"); - o.ToJson(); - }); - }); - }, - builder => - { - builder.Entity( - "Entity", e => - { - e.Property("Id").ValueGeneratedOnAdd(); - e.HasKey("Id"); - e.Property("Name"); - - e.OwnsOne( - "Owned", "OwnedReference", o => - { - o.OwnsOne( - "Nested", "NestedReference", n => - { - n.Property("Number"); - }); - o.OwnsMany( - "Nested2", "NestedCollection", n => - { - n.Property("Number2"); - }); - o.Property("Date"); - }); - - e.OwnsMany( - "Owned2", "OwnedCollection", o => - { - o.OwnsOne( - "Nested3", "NestedReference2", n => - { - n.Property("Number3"); - }); - o.OwnsMany( - "Nested4", "NestedCollection2", n => - { - n.Property("Number4"); - }); - o.Property("Date2"); - }); - }); - }, - model => - { - Assert.Equal(4, model.Tables.Count()); - }); + await base.Add_required_primitve_collection_to_existing_table(); AssertSql( -""" -DECLARE @var0 sysname; -SELECT @var0 = [d].[name] -FROM [sys].[default_constraints] [d] -INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id] -WHERE ([d].[parent_object_id] = OBJECT_ID(N'[Entity]') AND [c].[name] = N'OwnedCollection'); -IF @var0 IS NOT NULL EXEC(N'ALTER TABLE [Entity] DROP CONSTRAINT [' + @var0 + '];'); -ALTER TABLE [Entity] DROP COLUMN [OwnedCollection]; -""", -// -""" -DECLARE @var1 sysname; -SELECT @var1 = [d].[name] -FROM [sys].[default_constraints] [d] -INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id] -WHERE ([d].[parent_object_id] = OBJECT_ID(N'[Entity]') AND [c].[name] = N'OwnedReference'); -IF @var1 IS NOT NULL EXEC(N'ALTER TABLE [Entity] DROP CONSTRAINT [' + @var1 + '];'); -ALTER TABLE [Entity] DROP COLUMN [OwnedReference]; -""", -// -""" -ALTER TABLE [Entity] ADD [OwnedReference_Date] datetime2 NULL; -""", -// -""" -ALTER TABLE [Entity] ADD [OwnedReference_NestedReference_Number] int NULL; -""", -// -""" -CREATE TABLE [Entity_NestedCollection] ( - [OwnedEntityId] int NOT NULL, - [Id] int NOT NULL IDENTITY, - [Number2] int NOT NULL, - CONSTRAINT [PK_Entity_NestedCollection] PRIMARY KEY ([OwnedEntityId], [Id]), - CONSTRAINT [FK_Entity_NestedCollection_Entity_OwnedEntityId] FOREIGN KEY ([OwnedEntityId]) REFERENCES [Entity] ([Id]) ON DELETE CASCADE -); -""", -// -""" -CREATE TABLE [Entity_OwnedCollection] ( - [EntityId] int NOT NULL, - [Id] int NOT NULL IDENTITY, - [Date2] datetime2 NOT NULL, - [NestedReference2_Number3] int NULL, - CONSTRAINT [PK_Entity_OwnedCollection] PRIMARY KEY ([EntityId], [Id]), - CONSTRAINT [FK_Entity_OwnedCollection_Entity_EntityId] FOREIGN KEY ([EntityId]) REFERENCES [Entity] ([Id]) ON DELETE CASCADE -); -""", -// -""" -CREATE TABLE [Entity_OwnedCollection_NestedCollection2] ( - [Owned2EntityId] int NOT NULL, - [Owned2Id] int NOT NULL, - [Id] int NOT NULL IDENTITY, - [Number4] int NOT NULL, - CONSTRAINT [PK_Entity_OwnedCollection_NestedCollection2] PRIMARY KEY ([Owned2EntityId], [Owned2Id], [Id]), - CONSTRAINT [FK_Entity_OwnedCollection_NestedCollection2_Entity_OwnedCollection_Owned2EntityId_Owned2Id] FOREIGN KEY ([Owned2EntityId], [Owned2Id]) REFERENCES [Entity_OwnedCollection] ([EntityId], [Id]) ON DELETE CASCADE -); + """ +ALTER TABLE `Customers` ADD `Numbers` varchar(255) NOT NULL DEFAULT '[]'; """); } [ConditionalFact] - public virtual async Task Convert_string_column_to_a_json_column_containing_reference() + public override async Task Add_required_primitve_collection_with_custom_default_value_to_existing_table() { - await Test( - builder => - { - builder.Entity( - "Entity", e => - { - e.Property("Id").ValueGeneratedOnAdd(); - e.HasKey("Id"); - e.Property("Name"); - }); - }, - builder => - { - builder.Entity( - "Entity", e => - { - e.Property("Id").ValueGeneratedOnAdd(); - e.HasKey("Id"); - - e.OwnsOne( - "Owned", "OwnedReference", o => - { - o.ToJson("Name"); - o.OwnsOne( - "Nested", "NestedReference", n => - { - n.Property("Number"); - }); - o.OwnsMany( - "Nested2", "NestedCollection", n => - { - n.Property("Number2"); - }); - o.Property("Date"); - }); - }); - }, - model => - { - var table = model.Tables.Single(); - Assert.Collection( - table.Columns, - c => Assert.Equal("Id", c.Name), - c => Assert.Equal("Name", c.Name)); - }); + await base.Add_required_primitve_collection_with_custom_default_value_to_existing_table(); - AssertSql(); + AssertSql( + """ +ALTER TABLE `Customers` ADD `Numbers` varchar(255) NOT NULL DEFAULT '[1,2,3]'; +"""); } [ConditionalFact] - public virtual async Task Convert_string_column_to_a_json_column_containing_required_reference() + public override async Task Add_required_primitve_collection_with_custom_default_value_sql_to_existing_table() { - await Test( - builder => - { - builder.Entity( - "Entity", e => - { - e.Property("Id").ValueGeneratedOnAdd(); - e.HasKey("Id"); - e.Property("Name"); - }); - }, - builder => - { - builder.Entity( - "Entity", e => - { - e.Property("Id").ValueGeneratedOnAdd(); - e.HasKey("Id"); - - e.OwnsOne( - "Owned", "OwnedReference", o => - { - o.ToJson("Name"); - o.OwnsOne( - "Nested", "NestedReference", n => - { - n.Property("Number"); - }); - o.OwnsMany( - "Nested2", "NestedCollection", n => - { - n.Property("Number2"); - }); - o.Property("Date"); - }); - - e.Navigation("OwnedReference").IsRequired(); - }); - }, - model => - { - var table = model.Tables.Single(); - Assert.Collection( - table.Columns, - c => Assert.Equal("Id", c.Name), - c => Assert.Equal("Name", c.Name)); - }); + await base.Add_required_primitve_collection_with_custom_default_value_sql_to_existing_table_core("'[3, 2, 1]'"); + + AssertSql( + """ +ALTER TABLE `Customers` ADD `Numbers` varchar(255) NOT NULL DEFAULT '[3, 2, 1]'; +"""); + } + + [ConditionalFact(Skip = "issue #33038")] + public override async Task Add_required_primitve_collection_with_custom_converter_to_existing_table() + { + await base.Add_required_primitve_collection_with_custom_converter_to_existing_table(); AssertSql( """ -DECLARE @var0 sysname; -SELECT @var0 = [d].[name] -FROM [sys].[default_constraints] [d] -INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id] -WHERE ([d].[parent_object_id] = OBJECT_ID(N'[Entity]') AND [c].[name] = N'Name'); -IF @var0 IS NOT NULL EXEC(N'ALTER TABLE [Entity] DROP CONSTRAINT [' + @var0 + '];'); -UPDATE [Entity] SET [Name] = N'' WHERE [Name] IS NULL; -ALTER TABLE [Entity] ALTER COLUMN [Name] nvarchar(max) NOT NULL; -ALTER TABLE [Entity] ADD DEFAULT N'' FOR [Name]; +ALTER TABLE [Customers] ADD [Numbers] nvarchar(max) NOT NULL DEFAULT N'nothing'; """); } [ConditionalFact] - public virtual async Task Convert_string_column_to_a_json_column_containing_collection() + public override async Task Add_required_primitve_collection_with_custom_converter_and_custom_default_value_to_existing_table() { - await Test( - builder => - { - builder.Entity( - "Entity", e => - { - e.Property("Id").ValueGeneratedOnAdd(); - e.HasKey("Id"); - e.Property("Name"); - }); - }, - builder => - { - builder.Entity( - "Entity", e => - { - e.Property("Id").ValueGeneratedOnAdd(); - e.HasKey("Id"); - - e.OwnsMany( - "Owned2", "OwnedCollection", o => - { - o.OwnsOne( - "Nested3", "NestedReference2", n => - { - n.Property("Number3"); - }); - o.OwnsMany( - "Nested4", "NestedCollection2", n => - { - n.Property("Number4"); - }); - o.Property("Date2"); - o.ToJson("Name"); - }); - }); - }, - model => - { - var table = model.Tables.Single(); - Assert.Collection( - table.Columns, - c => Assert.Equal("Id", c.Name), - c => Assert.Equal("Name", c.Name)); - }); + await base.Add_required_primitve_collection_with_custom_converter_and_custom_default_value_to_existing_table(); - AssertSql(); + AssertSql( + """ +ALTER TABLE `Customers` ADD `Numbers` varchar(255) NOT NULL DEFAULT 'some numbers'; +"""); } protected override string NonDefaultCollation @@ -3580,6 +2451,9 @@ FROM sys.databases : null; } + protected override bool AssertComments => false; + protected override bool AssertSchemaNames => false; + public class MigrationsJetFixture : MigrationsFixtureBase { protected override string StoreName diff --git a/test/EFCore.Jet.FunctionalTests/ModelBuilding/JetModelBuilderGenericTest.cs b/test/EFCore.Jet.FunctionalTests/ModelBuilding/JetModelBuilderGenericTest.cs new file mode 100644 index 00000000..395720aa --- /dev/null +++ b/test/EFCore.Jet.FunctionalTests/ModelBuilding/JetModelBuilderGenericTest.cs @@ -0,0 +1,68 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +// ReSharper disable InconsistentNaming + +using System; +using Microsoft.EntityFrameworkCore; + +namespace EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding; + +public class JetModelBuilderGenericTest : JetModelBuilderTestBase +{ + public class JetGenericNonRelationship(JetModelBuilderFixture fixture) : JetNonRelationship(fixture) + { + protected override TestModelBuilder CreateModelBuilder( + Action? configure) + => new GenericTestModelBuilder(Fixture, configure); + } + + public class JetGenericComplexType(JetModelBuilderFixture fixture) : JetComplexType(fixture) + { + protected override TestModelBuilder CreateModelBuilder( + Action? configure) + => new GenericTestModelBuilder(Fixture, configure); + } + + public class JetGenericInheritance(JetModelBuilderFixture fixture) : JetInheritance(fixture) + { + protected override TestModelBuilder CreateModelBuilder( + Action? configure) + => new GenericTestModelBuilder(Fixture, configure); + } + + public class JetGenericOneToMany(JetModelBuilderFixture fixture) : JetOneToMany(fixture) + { + protected override TestModelBuilder CreateModelBuilder( + Action? configure) + => new GenericTestModelBuilder(Fixture, configure); + } + + public class JetGenericManyToOne(JetModelBuilderFixture fixture) : JetManyToOne(fixture) + { + protected override TestModelBuilder CreateModelBuilder( + Action? configure) + => new GenericTestModelBuilder(Fixture, configure); + } + + public class JetGenericOneToOne(JetModelBuilderFixture fixture) : JetOneToOne(fixture) + { + protected override TestModelBuilder CreateModelBuilder( + Action? configure) + => new GenericTestModelBuilder(Fixture, configure); + } + + public class JetGenericManyToMany(JetModelBuilderFixture fixture) : JetManyToMany(fixture) + { + protected override TestModelBuilder CreateModelBuilder( + Action? configure) + => new GenericTestModelBuilder(Fixture, configure); + } + + public class JetGenericOwnedTypes(JetModelBuilderFixture fixture) : JetOwnedTypes(fixture) + { + protected override TestModelBuilder CreateModelBuilder( + Action? configure) + => new GenericTestModelBuilder(Fixture, configure); + } +} diff --git a/test/EFCore.Jet.FunctionalTests/ModelBuilding/JetModelBuilderNonGenericTest.cs b/test/EFCore.Jet.FunctionalTests/ModelBuilding/JetModelBuilderNonGenericTest.cs new file mode 100644 index 00000000..c180a7f1 --- /dev/null +++ b/test/EFCore.Jet.FunctionalTests/ModelBuilding/JetModelBuilderNonGenericTest.cs @@ -0,0 +1,60 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +// ReSharper disable InconsistentNaming + +using System; +using Microsoft.EntityFrameworkCore; + +namespace EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding; + +public class JetModelBuilderNonGenericTest : JetModelBuilderTestBase +{ + public class JetNonGenericNonRelationship(JetModelBuilderFixture fixture) : JetNonRelationship(fixture) + { + protected override TestModelBuilder CreateModelBuilder(Action? configure = null) + => new NonGenericTestModelBuilder(Fixture, configure); + } + + public class JetNonGenericComplexType(JetModelBuilderFixture fixture) : JetComplexType(fixture) + { + protected override TestModelBuilder CreateModelBuilder(Action? configure = null) + => new NonGenericTestModelBuilder(Fixture, configure); + } + + public class JetNonGenericInheritance(JetModelBuilderFixture fixture) : JetInheritance(fixture) + { + protected override TestModelBuilder CreateModelBuilder(Action? configure = null) + => new NonGenericTestModelBuilder(Fixture, configure); + } + + public class JetNonGenericOneToMany(JetModelBuilderFixture fixture) : JetOneToMany(fixture) + { + protected override TestModelBuilder CreateModelBuilder(Action? configure = null) + => new NonGenericTestModelBuilder(Fixture, configure); + } + + public class JetNonGenericManyToOne(JetModelBuilderFixture fixture) : JetManyToOne(fixture) + { + protected override TestModelBuilder CreateModelBuilder(Action? configure = null) + => new NonGenericTestModelBuilder(Fixture, configure); + } + + public class JetNonGenericOneToOne(JetModelBuilderFixture fixture) : JetOneToOne(fixture) + { + protected override TestModelBuilder CreateModelBuilder(Action? configure = null) + => new NonGenericTestModelBuilder(Fixture, configure); + } + + public class JetNonGenericManyToMany(JetModelBuilderFixture fixture) : JetManyToMany(fixture) + { + protected override TestModelBuilder CreateModelBuilder(Action? configure = null) + => new NonGenericTestModelBuilder(Fixture, configure); + } + + public class JetNonGenericOwnedTypes(JetModelBuilderFixture fixture) : JetOwnedTypes(fixture) + { + protected override TestModelBuilder CreateModelBuilder(Action? configure = null) + => new NonGenericTestModelBuilder(Fixture, configure); + } +} diff --git a/test/EFCore.Jet.FunctionalTests/ModelBuilding/JetModelBuilderTestBase.cs b/test/EFCore.Jet.FunctionalTests/ModelBuilding/JetModelBuilderTestBase.cs new file mode 100644 index 00000000..af88b8f9 --- /dev/null +++ b/test/EFCore.Jet.FunctionalTests/ModelBuilding/JetModelBuilderTestBase.cs @@ -0,0 +1,1770 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.ComponentModel.DataAnnotations.Schema; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Metadata.Conventions; +using Microsoft.EntityFrameworkCore.Metadata.Conventions.Infrastructure; +using Microsoft.EntityFrameworkCore.ModelBuilding; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; +using System.Linq; +using EntityFrameworkCore.Jet.FunctionalTests.TestUtilities; + +namespace EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding; + +public class JetModelBuilderTestBase : RelationalModelBuilderTest +{ + public abstract class JetNonRelationship(JetModelBuilderFixture fixture) : RelationalNonRelationshipTestBase(fixture), IClassFixture + { + [ConditionalFact] + public virtual void Index_has_a_filter_if_nonclustered_unique_with_nullable_properties() + { + var modelBuilder = CreateModelBuilder(); + var entityTypeBuilder = modelBuilder + .Entity(); + var indexBuilder = entityTypeBuilder + .HasIndex(ix => ix.Name) + .IsUnique(); + + var entityType = modelBuilder.Model.FindEntityType(typeof(Customer))!; + var index = entityType.GetIndexes().Single(); + Assert.Equal("IGNORE NULL", index.GetFilter()); + + indexBuilder.IsUnique(false); + + Assert.Null(index.GetFilter()); + + indexBuilder.IsUnique(); + + Assert.Equal("[Name] IS NOT NULL", index.GetFilter()); + + /*indexBuilder.IsClustered(); + + Assert.Null(index.GetFilter()); + + indexBuilder.IsClustered(false);*/ + + Assert.Equal("[Name] IS NOT NULL", index.GetFilter()); + + entityTypeBuilder.Property(e => e.Name).IsRequired(); + + Assert.Null(index.GetFilter()); + + entityTypeBuilder.Property(e => e.Name).IsRequired(false); + + Assert.Equal("[Name] IS NOT NULL", index.GetFilter()); + + entityTypeBuilder.Property(e => e.Name).HasColumnName("RelationalName"); + + Assert.Equal("[RelationalName] IS NOT NULL", index.GetFilter()); + + entityTypeBuilder.Property(e => e.Name).HasColumnName("SqlServerName"); + + Assert.Equal("[SqlServerName] IS NOT NULL", index.GetFilter()); + + entityTypeBuilder.Property(e => e.Name).HasColumnName(null); + + Assert.Equal("[Name] IS NOT NULL", index.GetFilter()); + + indexBuilder.HasFilter("Foo"); + + Assert.Equal("Foo", index.GetFilter()); + + indexBuilder.HasFilter(null); + + Assert.Null(index.GetFilter()); + } + + [ConditionalFact] + public void Indexes_can_have_same_name_across_tables() + { + var modelBuilder = CreateModelBuilder(); + modelBuilder.Entity() + .HasIndex(e => e.Id, "Ix_Id") + .IsUnique(); + modelBuilder.Entity() + .HasIndex(e => e.CustomerId, "Ix_Id") + .IsUnique(); + + var model = modelBuilder.FinalizeModel(); + + var customerIndex = model.FindEntityType(typeof(Customer))!.GetIndexes().Single(); + Assert.Equal("Ix_Id", customerIndex.Name); + Assert.Equal("Ix_Id", customerIndex.GetDatabaseName()); + Assert.Equal( + "Ix_Id", customerIndex.GetDatabaseName( + StoreObjectIdentifier.Table("Customer"))); + + var detailsIndex = model.FindEntityType(typeof(CustomerDetails))!.GetIndexes().Single(); + Assert.Equal("Ix_Id", detailsIndex.Name); + Assert.Equal("Ix_Id", detailsIndex.GetDatabaseName()); + Assert.Equal( + "Ix_Id", detailsIndex.GetDatabaseName( + StoreObjectIdentifier.Table("CustomerDetails"))); + } + + [ConditionalFact] + public virtual void Can_set_store_type_for_property_type() + { + var modelBuilder = CreateModelBuilder( + c => + { + c.Properties().HaveColumnType("smallint"); + c.Properties().HaveColumnType("nchar(max)"); + c.Properties(typeof(Nullable<>)).HavePrecision(2); + }); + + modelBuilder.Entity( + b => + { + b.Property("Charm"); + b.Property("Strange"); + b.Property("Top"); + b.Property("Bottom"); + }); + + var model = modelBuilder.FinalizeModel(); + var entityType = model.FindEntityType(typeof(Quarks))!; + + Assert.Equal("smallint", entityType.FindProperty(Customer.IdProperty.Name)!.GetColumnType()); + Assert.Equal("smallint", entityType.FindProperty("Up")!.GetColumnType()); + Assert.Equal("nchar(max)", entityType.FindProperty("Down")!.GetColumnType()); + var charm = entityType.FindProperty("Charm")!; + Assert.Equal("smallint", charm.GetColumnType()); + Assert.Null(charm.GetPrecision()); + Assert.Equal("nchar(max)", entityType.FindProperty("Strange")!.GetColumnType()); + var top = entityType.FindProperty("Top")!; + Assert.Equal("smallint", top.GetColumnType()); + Assert.Equal(2, top.GetPrecision()); + Assert.Equal("nchar(max)", entityType.FindProperty("Bottom")!.GetColumnType()); + } + + [ConditionalFact] + public virtual void Can_set_fixed_length_for_property_type() + { + var modelBuilder = CreateModelBuilder( + c => + { + c.Properties().AreFixedLength(false); + c.Properties().AreFixedLength(); + }); + + modelBuilder.Entity( + b => + { + b.Property("Charm"); + b.Property("Strange"); + b.Property("Top"); + b.Property("Bottom"); + }); + + var model = modelBuilder.FinalizeModel(); + var entityType = model.FindEntityType(typeof(Quarks))!; + + Assert.False(entityType.FindProperty(Customer.IdProperty.Name)!.IsFixedLength()); + Assert.False(entityType.FindProperty("Up")!.IsFixedLength()); + Assert.True(entityType.FindProperty("Down")!.IsFixedLength()); + Assert.False(entityType.FindProperty("Charm")!.IsFixedLength()); + Assert.True(entityType.FindProperty("Strange")!.IsFixedLength()); + Assert.False(entityType.FindProperty("Top")!.IsFixedLength()); + Assert.True(entityType.FindProperty("Bottom")!.IsFixedLength()); + } + + [ConditionalFact] + public virtual void Can_set_collation_for_property_type() + { + var modelBuilder = CreateModelBuilder( + c => + { + c.Properties().UseCollation("Latin1_General_CS_AS_KS_WS"); + c.Properties().UseCollation("Latin1_General_BIN"); + }); + + modelBuilder.Entity( + b => + { + b.Property("Charm"); + b.Property("Strange"); + b.Property("Top"); + b.Property("Bottom"); + }); + + var model = modelBuilder.FinalizeModel(); + var entityType = model.FindEntityType(typeof(Quarks))!; + + Assert.Equal("Latin1_General_CS_AS_KS_WS", entityType.FindProperty(Customer.IdProperty.Name)!.GetCollation()); + Assert.Equal("Latin1_General_CS_AS_KS_WS", entityType.FindProperty("Up")!.GetCollation()); + Assert.Equal("Latin1_General_BIN", entityType.FindProperty("Down")!.GetCollation()); + Assert.Equal("Latin1_General_CS_AS_KS_WS", entityType.FindProperty("Charm")!.GetCollation()); + Assert.Equal("Latin1_General_BIN", entityType.FindProperty("Strange")!.GetCollation()); + Assert.Equal("Latin1_General_CS_AS_KS_WS", entityType.FindProperty("Top")!.GetCollation()); + Assert.Equal("Latin1_General_BIN", entityType.FindProperty("Bottom")!.GetCollation()); + } + + [ConditionalFact] + public virtual void Can_set_store_type_for_primitive_collection() + { + var modelBuilder = CreateModelBuilder(); + modelBuilder.Entity( + b => + { + b.PrimitiveCollection(e => e.Up).HasColumnType("national character varying(255)"); + b.PrimitiveCollection(e => e.Down).HasColumnType("nchar(10)"); + b.PrimitiveCollection("Charm").HasColumnType("nvarchar(25)"); + b.PrimitiveCollection("Strange").HasColumnType("text"); + b.PrimitiveCollection>("Top").HasColumnType("char(100)"); + ; + b.PrimitiveCollection?>("Bottom").HasColumnType("varchar(max)"); + ; + }); + + var model = modelBuilder.FinalizeModel(); + var entityType = model.FindEntityType(typeof(CollectionQuarks))!; + + Assert.Equal("integer", entityType.FindProperty(nameof(CollectionQuarks.Id))!.GetColumnType()); + Assert.Equal("national character varying(255)", entityType.FindProperty("Up")!.GetColumnType()); + Assert.Equal("nchar(10)", entityType.FindProperty("Down")!.GetColumnType()); + Assert.Equal("nvarchar(25)", entityType.FindProperty("Charm")!.GetColumnType()); + Assert.Equal("text", entityType.FindProperty("Strange")!.GetColumnType()); + Assert.Equal("char(100)", entityType.FindProperty("Top")!.GetColumnType()); + Assert.Equal("varchar(max)", entityType.FindProperty("Bottom")!.GetColumnType()); + } + + [ConditionalFact] + public virtual void Can_set_fixed_length_for_primitive_collection() + { + var modelBuilder = CreateModelBuilder(); + modelBuilder.Entity( + b => + { + b.PrimitiveCollection(e => e.Up).IsFixedLength(false); + b.PrimitiveCollection(e => e.Down).IsFixedLength(); + b.PrimitiveCollection("Charm").IsFixedLength(); + }); + + var model = modelBuilder.FinalizeModel(); + var entityType = model.FindEntityType(typeof(CollectionQuarks))!; + + Assert.False(entityType.FindProperty("Up")!.IsFixedLength()); + Assert.True(entityType.FindProperty("Down")!.IsFixedLength()); + Assert.True(entityType.FindProperty("Charm")!.IsFixedLength()); + } + + [ConditionalFact] + public virtual void Can_set_collation_for_primitive_collection() + { + var modelBuilder = CreateModelBuilder(); + modelBuilder.Entity( + b => + { + b.PrimitiveCollection(e => e.Up).UseCollation("Latin1_General_CS_AS_KS_WS"); + b.PrimitiveCollection(e => e.Down).UseCollation("Latin1_General_BIN"); + b.PrimitiveCollection("Charm").UseCollation("Latin1_General_CI_AI"); + }); + + var model = modelBuilder.FinalizeModel(); + var entityType = model.FindEntityType(typeof(CollectionQuarks))!; + + Assert.Equal("Latin1_General_CS_AS_KS_WS", entityType.FindProperty("Up")!.GetCollation()); + Assert.Equal("Latin1_General_BIN", entityType.FindProperty("Down")!.GetCollation()); + Assert.Equal("Latin1_General_CI_AI", entityType.FindProperty("Charm")!.GetCollation()); + } + + /*[ConditionalTheory] + [InlineData(true)] + [InlineData(false)] + public virtual void Can_avoid_attributes_when_discovering_properties(bool useAttributes) + { + var modelBuilder = CreateModelBuilder(c => c.Conventions.Replace( + s => new PropertyDiscoveryConvention( + s.GetService()!, useAttributes))); + modelBuilder.Entity(); + + if (useAttributes) + { + var model = modelBuilder.FinalizeModel(); + var entityType = model.FindEntityType(typeof(SqlVariantEntity))!; + + Assert.Equal([nameof(SqlVariantEntity.Id), nameof(SqlVariantEntity.Value),], + entityType.GetProperties().Select(p => p.Name)); + } + else + { + Assert.Equal(CoreStrings.PropertyNotAdded(nameof(SqlVariantEntity), nameof(SqlVariantEntity.Value), "object"), + Assert.Throws(modelBuilder.FinalizeModel).Message); + } + }*/ + + protected class SqlVariantEntity + { + public int Id { get; set; } + [Column(TypeName = "sql_variant")] + public object? Value { get; set; } + } + } + + public abstract class JetComplexType(JetModelBuilderFixture fixture) : RelationalComplexTypeTestBase(fixture), IClassFixture; + + public abstract class JetInheritance(JetModelBuilderFixture fixture) : RelationalInheritanceTestBase(fixture), IClassFixture + { + [ConditionalFact] // #7240 + public void Can_use_shadow_FK_that_collides_with_convention_shadow_FK_on_other_derived_type() + { + var modelBuilder = CreateModelBuilder(); + modelBuilder.Entity(); + modelBuilder.Entity() + .HasOne(p => p.A) + .WithOne() + .HasForeignKey("ParentId"); + + var model = modelBuilder.FinalizeModel(); + + var property1 = model.FindEntityType(typeof(DisjointChildSubclass1))!.FindProperty("ParentId")!; + Assert.True(property1.IsForeignKey()); + Assert.Equal("ParentId", property1.GetColumnName()); + var property2 = model.FindEntityType(typeof(DisjointChildSubclass2))!.FindProperty("ParentId")!; + Assert.True(property2.IsForeignKey()); + Assert.Equal("ParentId", property2.GetColumnName()); + Assert.Equal("DisjointChildSubclass2_ParentId", property2.GetColumnName(StoreObjectIdentifier.Table(nameof(Child)))); + } + + [ConditionalFact] + public void Inherited_clr_properties_are_mapped_to_the_same_column() + { + var modelBuilder = CreateModelBuilder(); + modelBuilder.Entity(); + modelBuilder.Ignore(); + modelBuilder.Entity(); + modelBuilder.Entity(); + + var model = modelBuilder.FinalizeModel(); + + var property1 = model.FindEntityType(typeof(DisjointChildSubclass1))!.FindProperty(nameof(Child.Name))!; + Assert.Equal(nameof(Child.Name), property1.GetColumnName()); + var property2 = model.FindEntityType(typeof(DisjointChildSubclass2))!.FindProperty(nameof(Child.Name))!; + Assert.Equal(nameof(Child.Name), property2.GetColumnName()); + } + + [ConditionalFact] //Issue#10659 + public void Index_convention_run_for_fk_when_derived_type_discovered_before_base_type() + { + var modelBuilder = CreateModelBuilder(); + modelBuilder.Ignore(); + modelBuilder.Entity(); + modelBuilder.Entity(); + + var index = modelBuilder.Model.FindEntityType(typeof(CustomerDetails))!.GetIndexes().Single(); + + Assert.Equal("IGNORE NULL", index.GetFilter()); + } + + [ConditionalFact] + public void Index_convention_sets_filter_for_unique_index_when_base_type_changed() + { + var modelBuilder = CreateModelBuilder(); + modelBuilder.Ignore(); + modelBuilder.Entity() + .HasIndex(e => e.CustomerId) + .IsUnique(); + + modelBuilder.Entity(); + + var index = modelBuilder.Model.FindEntityType(typeof(CustomerDetails))!.GetIndexes().Single(); + + Assert.Equal("IGNORE NULL", index.GetFilter()); + + modelBuilder.Ignore(); + + Assert.Null(index.GetFilter()); + } + + [ConditionalFact] + public virtual void Can_override_TPC_with_TPH() + { + var modelBuilder = CreateModelBuilder(); + + modelBuilder.Entity

(); + modelBuilder.Entity(); + modelBuilder.Entity(); + modelBuilder.Entity() + .UseTpcMappingStrategy() + .UseTphMappingStrategy(); + + var model = modelBuilder.FinalizeModel(); + + Assert.Equal("Discriminator", model.FindEntityType(typeof(PBase))!.GetDiscriminatorPropertyName()); + Assert.Equal(nameof(PBase), model.FindEntityType(typeof(PBase))!.GetDiscriminatorValue()); + Assert.Equal(nameof(P), model.FindEntityType(typeof(P))!.GetDiscriminatorValue()); + Assert.Equal(nameof(Q), model.FindEntityType(typeof(Q))!.GetDiscriminatorValue()); + } + + [ConditionalFact] + public virtual void TPT_identifying_FK_is_created_only_on_declaring_table() + { + var modelBuilder = CreateModelBuilder(); + modelBuilder.Entity() + .Ignore(b => b.Bun) + .Ignore(b => b.Pickles); + modelBuilder.Entity( + b => + { + b.ToTable("Ingredients"); + b.Ignore(i => i.BigMak); + }); + modelBuilder.Entity( + b => + { + b.ToTable("Buns"); + b.HasOne(i => i.BigMak).WithOne().HasForeignKey(i => i.Id); + }); + modelBuilder.Entity( + b => + { + b.ToTable("SesameBuns"); + }); + + var model = modelBuilder.FinalizeModel(); + + var principalType = model.FindEntityType(typeof(BigMak))!; + Assert.Empty(principalType.GetForeignKeys()); + Assert.Empty(principalType.GetIndexes()); + Assert.Null(principalType.FindDiscriminatorProperty()); + + var ingredientType = model.FindEntityType(typeof(Ingredient))!; + + var bunType = model.FindEntityType(typeof(Bun))!; + Assert.Empty(bunType.GetIndexes()); + Assert.Null(bunType.FindDiscriminatorProperty()); + var bunFk = bunType.GetDeclaredForeignKeys().Single(fk => !fk.IsBaseLinking()); + Assert.Equal("FK_Buns_BigMak_Id", bunFk.GetConstraintName()); + Assert.Equal( + "FK_Buns_BigMak_Id", bunFk.GetConstraintName( + StoreObjectIdentifier.Create(bunType, StoreObjectType.Table)!.Value, + StoreObjectIdentifier.Create(principalType, StoreObjectType.Table)!.Value)); + Assert.Single(bunFk.GetMappedConstraints()); + + var bunLinkingFk = bunType.GetDeclaredForeignKeys().Single(fk => fk.IsBaseLinking()); + Assert.Equal("FK_Buns_Ingredients_Id", bunLinkingFk.GetConstraintName()); + Assert.Equal( + "FK_Buns_Ingredients_Id", bunLinkingFk.GetConstraintName( + StoreObjectIdentifier.Create(bunType, StoreObjectType.Table)!.Value, + StoreObjectIdentifier.Create(ingredientType, StoreObjectType.Table)!.Value)); + Assert.Single(bunLinkingFk.GetMappedConstraints()); + + var sesameBunType = model.FindEntityType(typeof(SesameBun))!; + Assert.Empty(sesameBunType.GetIndexes()); + var sesameBunFk = sesameBunType.GetDeclaredForeignKeys().Single(); + Assert.True(sesameBunFk.IsBaseLinking()); + Assert.Equal("FK_SesameBuns_Buns_Id", sesameBunFk.GetConstraintName()); + Assert.Equal( + "FK_SesameBuns_Buns_Id", sesameBunFk.GetConstraintName( + StoreObjectIdentifier.Create(sesameBunType, StoreObjectType.Table)!.Value, + StoreObjectIdentifier.Create(bunType, StoreObjectType.Table)!.Value)); + Assert.Single(sesameBunFk.GetMappedConstraints()); + } + + [ConditionalFact] + public virtual void TPC_identifying_FKs_are_created_on_all_tables() + { + var modelBuilder = CreateModelBuilder(); + modelBuilder.Entity() + .Ignore(b => b.Bun) + .Ignore(b => b.Pickles); + modelBuilder.Entity( + b => + { + b.ToTable("Ingredients"); + b.Ignore(i => i.BigMak); + b.HasIndex(e => e.BurgerId); + b.UseTpcMappingStrategy(); + }); + modelBuilder.Entity( + b => + { + b.ToTable("Buns"); + b.HasOne(i => i.BigMak).WithOne().HasForeignKey(i => i.Id); + b.UseTpcMappingStrategy(); + }); + modelBuilder.Entity( + b => + { + b.ToTable("SesameBuns"); + }); + + var model = modelBuilder.FinalizeModel(); + + var principalType = model.FindEntityType(typeof(BigMak))!; + Assert.Empty(principalType.GetForeignKeys()); + Assert.Empty(principalType.GetIndexes()); + Assert.Null(principalType.FindDiscriminatorProperty()); + + var bunType = model.FindEntityType(typeof(Bun))!; + Assert.Empty(bunType.GetDeclaredIndexes()); + Assert.Null(bunType.FindDiscriminatorProperty()); + var bunFk = bunType.GetDeclaredForeignKeys().Single(); + Assert.Equal("FK_Buns_BigMak_Id", bunFk.GetConstraintName()); + Assert.Equal( + "FK_Buns_BigMak_Id", bunFk.GetConstraintName( + StoreObjectIdentifier.Create(bunType, StoreObjectType.Table)!.Value, + StoreObjectIdentifier.Create(principalType, StoreObjectType.Table)!.Value)); + Assert.Equal(2, bunFk.GetMappedConstraints().Count()); + + Assert.DoesNotContain(bunType.GetDeclaredForeignKeys(), fk => fk.IsBaseLinking()); + + var sesameBunType = model.FindEntityType(typeof(SesameBun))!; + Assert.Empty(sesameBunType.GetDeclaredIndexes()); + Assert.Empty(sesameBunType.GetDeclaredForeignKeys()); + Assert.Equal( + "FK_SesameBuns_BigMak_Id", bunFk.GetConstraintName( + StoreObjectIdentifier.Create(sesameBunType, StoreObjectType.Table)!.Value, + StoreObjectIdentifier.Create(principalType, StoreObjectType.Table)!.Value)); + + var ingredientType = model.FindEntityType(typeof(Ingredient))!; + var ingredientIndex = ingredientType.GetDeclaredIndexes().Single(); + Assert.Equal("IX_Ingredients_BurgerId", ingredientIndex.GetDatabaseName()); + Assert.Equal( + "IX_SesameBuns_BurgerId", + ingredientIndex.GetDatabaseName(StoreObjectIdentifier.Create(sesameBunType, StoreObjectType.Table)!.Value)); + Assert.Equal( + "IX_Buns_BurgerId", + ingredientIndex.GetDatabaseName(StoreObjectIdentifier.Create(bunType, StoreObjectType.Table)!.Value)); + } + + [ConditionalFact] + public virtual void TPT_index_can_use_inherited_properties() + { + var modelBuilder = CreateModelBuilder(); + modelBuilder.Entity() + .Ignore(b => b.Bun) + .Ignore(b => b.Pickles); + modelBuilder.Entity( + b => + { + b.ToTable("Ingredients"); + b.Property("NullableProp"); + b.Ignore(i => i.BigMak); + }); + modelBuilder.Entity( + b => + { + b.ToTable("Buns"); + b.HasIndex(bun => bun.BurgerId); + b.HasIndex("NullableProp"); + b.HasOne(i => i.BigMak).WithOne().HasForeignKey(i => i.Id); + }); + + var model = modelBuilder.FinalizeModel(); + + var bunType = model.FindEntityType(typeof(Bun))!; + Assert.All(bunType.GetIndexes(), i => Assert.Null(i.GetFilter())); + } + + [ConditionalFact] + public void Can_add_check_constraints() + { + var modelBuilder = CreateModelBuilder(); + modelBuilder.Entity() + .HasBaseType(null) + .ToTable(tb => tb.HasCheckConstraint("CK_ChildBase_LargeId", "Id > 1000").HasName("CK_LargeId")); + modelBuilder.Entity() + .ToTable( + tb => + { + tb.HasCheckConstraint("PositiveId", "Id > 0"); + tb.HasCheckConstraint("CK_ChildBase_LargeId", "Id > 1000"); + }); + modelBuilder.Entity() + .HasBaseType(); + modelBuilder.Entity(); + + var model = modelBuilder.FinalizeModel(); + + var @base = model.FindEntityType(typeof(ChildBase))!; + Assert.Equal(2, @base.GetCheckConstraints().Count()); + + var firstCheckConstraint = @base.FindCheckConstraint("PositiveId")!; + Assert.Equal("PositiveId", firstCheckConstraint.ModelName); + Assert.Equal("Id > 0", firstCheckConstraint.Sql); + Assert.Equal("PositiveId", firstCheckConstraint.Name); + + var secondCheckConstraint = @base.FindCheckConstraint("CK_ChildBase_LargeId")!; + Assert.Equal("CK_ChildBase_LargeId", secondCheckConstraint.ModelName); + Assert.Equal("Id > 1000", secondCheckConstraint.Sql); + Assert.Equal("CK_LargeId", secondCheckConstraint.Name); + + var child = model.FindEntityType(typeof(Child))!; + Assert.Equal(@base.GetCheckConstraints(), child.GetCheckConstraints()); + Assert.Empty(child.GetDeclaredCheckConstraints()); + } + + [ConditionalFact] + public void Adding_conflicting_check_constraint_to_derived_type_throws() + { + var modelBuilder = CreateModelBuilder(); + modelBuilder.Entity() + .ToTable(tb => tb.HasCheckConstraint("LargeId", "Id > 100").HasName("CK_LargeId")); + + Assert.Equal( + RelationalStrings.DuplicateCheckConstraint("LargeId", nameof(Child), nameof(ChildBase)), + Assert.Throws( + () => modelBuilder.Entity().ToTable(tb => tb.HasCheckConstraint("LargeId", "Id > 1000"))).Message); + } + + [ConditionalFact] + public void Adding_conflicting_check_constraint_to_derived_type_before_base_throws() + { + var modelBuilder = CreateModelBuilder(); + modelBuilder.Entity() + .HasBaseType(null) + .ToTable(tb => tb.HasCheckConstraint("LargeId", "Id > 1000")); + modelBuilder.Entity() + .ToTable(tb => tb.HasCheckConstraint("LargeId", "Id > 100").HasName("CK_LargeId")); + + Assert.Equal( + RelationalStrings.DuplicateCheckConstraint("LargeId", nameof(Child), nameof(ChildBase)), + Assert.Throws( + () => modelBuilder.Entity().HasBaseType()).Message); + } + + protected class Parent + { + public int Id { get; set; } + public DisjointChildSubclass1? A { get; set; } + public IList? B { get; set; } + } + + protected abstract class ChildBase + { + public int Id { get; set; } + } + + protected abstract class Child : ChildBase + { + public string? Name { get; set; } + } + + protected class DisjointChildSubclass1 : Child; + + protected class DisjointChildSubclass2 : Child; + } + + public abstract class JetOneToMany(JetModelBuilderFixture fixture) : RelationalOneToManyTestBase(fixture), IClassFixture + { + [ConditionalFact] + public virtual void Shadow_foreign_keys_to_generic_types_have_terrible_names_that_should_not_change() + { + var modelBuilder = CreateModelBuilder(); + + modelBuilder.Entity().ToTable("Events"); + modelBuilder.Entity>().ToTable("CompanyActivities"); + modelBuilder.Entity>().ToTable("UserActivities"); + + var model = modelBuilder.FinalizeModel(); + + var companyActivityEventType = model.FindEntityType(typeof(ActivityEvent))!; + var eventTable = StoreObjectIdentifier.Create(companyActivityEventType, StoreObjectType.Table)!.Value; + var companyActivityEventFk = companyActivityEventType.GetForeignKeys().Single(); + var companyActivityEventFkProperty = companyActivityEventFk.Properties.Single(); + Assert.Equal("ActivityId", companyActivityEventFkProperty.GetColumnName(eventTable)); + Assert.Equal("FK_Events_CompanyActivities_ActivityId", companyActivityEventFk.GetConstraintName()); + Assert.Equal( + "FK_Events_CompanyActivities_ActivityId", companyActivityEventFk.GetConstraintName( + eventTable, + StoreObjectIdentifier.Create(companyActivityEventFk.PrincipalEntityType, StoreObjectType.Table)!.Value)); + + var userActivityEventType = model.FindEntityType(typeof(ActivityEvent))!; + var userActivityEventFk = userActivityEventType.GetForeignKeys().Single(); + var userActivityEventFkProperty = userActivityEventFk.Properties.Single(); + Assert.Equal("ActivityId", userActivityEventFkProperty.GetColumnName(eventTable)); + Assert.Equal("FK_Events_UserActivities_ActivityId", userActivityEventFk.GetConstraintName()); + Assert.Equal( + "FK_Events_UserActivities_ActivityId", userActivityEventFk.GetConstraintName( + eventTable, + StoreObjectIdentifier.Create(userActivityEventFk.PrincipalEntityType, StoreObjectType.Table)!.Value)); + } + + protected abstract class EventBase + { + public string? Id { get; set; } + } + + protected class Activity + { + public string? Id { get; set; } + public virtual List> Events { get; } = null!; + } + + protected class ActivityEvent : EventBase; + + protected class Company; + + protected class User; + } + + public abstract class JetManyToOne(JetModelBuilderFixture fixture) : RelationalManyToOneTestBase(fixture), IClassFixture; + + public abstract class JetOneToOne(JetModelBuilderFixture fixture) : RelationalOneToOneTestBase(fixture), IClassFixture; + + public abstract class JetManyToMany(JetModelBuilderFixture fixture) : RelationalManyToManyTestBase(fixture), IClassFixture + { + [ConditionalFact] + public virtual void Join_entity_type_uses_same_schema() + { + var modelBuilder = CreateModelBuilder(); + + modelBuilder.Entity().ToTable("Category", "mySchema").Ignore(c => c.ProductCategories); + modelBuilder.Entity().ToTable("Product", "mySchema"); + modelBuilder.Entity(); + + var model = modelBuilder.FinalizeModel(); + + var productType = model.FindEntityType(typeof(Product))!; + var categoryType = model.FindEntityType(typeof(Category))!; + + var categoriesNavigation = productType.GetSkipNavigations().Single(); + var productsNavigation = categoryType.GetSkipNavigations().Single(); + + var categoriesFk = categoriesNavigation.ForeignKey; + var productsFk = productsNavigation.ForeignKey; + var productCategoryType = categoriesFk.DeclaringEntityType; + + Assert.Equal(typeof(Dictionary), productCategoryType.ClrType); + Assert.Equal("mySchema", productCategoryType.GetSchema()); + Assert.Same(categoriesFk, productCategoryType.GetForeignKeys().Last()); + Assert.Same(productsFk, productCategoryType.GetForeignKeys().First()); + Assert.Equal(2, productCategoryType.GetForeignKeys().Count()); + } + + [ConditionalFact] + public virtual void Join_entity_type_uses_default_schema_if_related_are_different() + { + var modelBuilder = CreateModelBuilder(); + + modelBuilder.Entity().ToTable("Category").Ignore(c => c.ProductCategories); + modelBuilder.Entity().ToTable("Product", "dbo"); + modelBuilder.Entity(); + + var model = modelBuilder.FinalizeModel(); + + var productType = model.FindEntityType(typeof(Product))!; + var categoryType = model.FindEntityType(typeof(Category))!; + + var categoriesNavigation = productType.GetSkipNavigations().Single(); + var productsNavigation = categoryType.GetSkipNavigations().Single(); + + var categoriesFk = categoriesNavigation.ForeignKey; + var productsFk = productsNavigation.ForeignKey; + var productCategoryType = categoriesFk.DeclaringEntityType; + + Assert.Equal(typeof(Dictionary), productCategoryType.ClrType); + Assert.Null(productCategoryType.GetSchema()); + Assert.Same(categoriesFk, productCategoryType.GetForeignKeys().Last()); + Assert.Same(productsFk, productCategoryType.GetForeignKeys().First()); + Assert.Equal(2, productCategoryType.GetForeignKeys().Count()); + } + } + + public abstract class JetOwnedTypes(JetModelBuilderFixture fixture) : RelationalOwnedTypesTestBase(fixture), IClassFixture + { + [ConditionalFact] + public virtual void Owned_types_use_table_splitting_by_default() + { + var modelBuilder = CreateModelBuilder(); + + modelBuilder.Entity().OwnsOne( + b => b.AlternateLabel, + b => + { + b.Ignore(l => l.Book); + b.OwnsOne( + l => l.AnotherBookLabel, + ab => + { + ab.Property(l => l.BookId).HasColumnName("BookId2"); + ab.Ignore(l => l.Book); + ab.OwnsOne( + s => s.SpecialBookLabel, + s => + { + s.Property(l => l.BookId).HasColumnName("BookId2"); + s.Ignore(l => l.Book); + s.Ignore(l => l.BookLabel); + }); + }); + }); + + modelBuilder.Entity().OwnsOne(b => b.Label) + .Ignore(l => l.Book) + .OwnsOne(l => l.SpecialBookLabel) + .Ignore(l => l.Book) + .OwnsOne(a => a.AnotherBookLabel) + .Ignore(l => l.Book); + + modelBuilder.Entity().OwnsOne(b => b.Label) + .OwnsOne(l => l.AnotherBookLabel) + .Ignore(l => l.Book) + .OwnsOne(a => a.SpecialBookLabel) + .Ignore(l => l.Book) + .Ignore(l => l.BookLabel); + + modelBuilder.Entity().OwnsOne( + b => b.AlternateLabel, + b => + { + b.Ignore(l => l.Book); + b.OwnsOne( + l => l.SpecialBookLabel, + ab => + { + ab.Property(l => l.BookId).HasColumnName("BookId2"); + ab.Ignore(l => l.Book); + ab.OwnsOne( + s => s.AnotherBookLabel, + s => + { + s.Property(l => l.BookId).HasColumnName("BookId2"); + s.Ignore(l => l.Book); + }); + }); + }); + + var model = (IModel)modelBuilder.Model; + var book = model.FindEntityType(typeof(Book))!; + var bookOwnership1 = book.FindNavigation(nameof(Book.Label))!.ForeignKey; + var bookOwnership2 = book.FindNavigation(nameof(Book.AlternateLabel))!.ForeignKey; + var bookLabel1Ownership1 = bookOwnership1.DeclaringEntityType.FindNavigation(nameof(BookLabel.AnotherBookLabel))!.ForeignKey; + var bookLabel1Ownership2 = bookOwnership1.DeclaringEntityType.FindNavigation(nameof(BookLabel.SpecialBookLabel))!.ForeignKey; + var bookLabel2Ownership1 = bookOwnership2.DeclaringEntityType.FindNavigation(nameof(BookLabel.AnotherBookLabel))!.ForeignKey; + var bookLabel2Ownership2 = bookOwnership2.DeclaringEntityType.FindNavigation(nameof(BookLabel.SpecialBookLabel))!.ForeignKey; + + Assert.Equal(book.GetTableName(), bookOwnership1.DeclaringEntityType.GetTableName()); + Assert.Equal(book.GetTableName(), bookOwnership2.DeclaringEntityType.GetTableName()); + Assert.Equal(book.GetTableName(), bookLabel1Ownership1.DeclaringEntityType.GetTableName()); + Assert.Equal(book.GetTableName(), bookLabel1Ownership2.DeclaringEntityType.GetTableName()); + Assert.Equal(book.GetTableName(), bookLabel2Ownership1.DeclaringEntityType.GetTableName()); + Assert.Equal(book.GetTableName(), bookLabel2Ownership2.DeclaringEntityType.GetTableName()); + + Assert.NotSame(bookOwnership1.DeclaringEntityType, bookOwnership2.DeclaringEntityType); + Assert.Single(bookOwnership1.DeclaringEntityType.GetForeignKeys()); + Assert.Single(bookOwnership1.DeclaringEntityType.GetForeignKeys()); + + Assert.NotSame(bookLabel1Ownership1.DeclaringEntityType, bookLabel2Ownership1.DeclaringEntityType); + Assert.NotSame(bookLabel1Ownership2.DeclaringEntityType, bookLabel2Ownership2.DeclaringEntityType); + Assert.Single(bookLabel1Ownership1.DeclaringEntityType.GetForeignKeys()); + Assert.Single(bookLabel1Ownership2.DeclaringEntityType.GetForeignKeys()); + Assert.Single(bookLabel2Ownership1.DeclaringEntityType.GetForeignKeys()); + Assert.Single(bookLabel2Ownership2.DeclaringEntityType.GetForeignKeys()); + + Assert.Equal(2, model.GetEntityTypes().Count(e => e.ClrType == typeof(BookLabel))); + Assert.Equal(4, model.GetEntityTypes().Count(e => e.ClrType == typeof(AnotherBookLabel))); + Assert.Equal(4, model.GetEntityTypes().Count(e => e.ClrType == typeof(SpecialBookLabel))); + + Assert.Null( + bookOwnership1.DeclaringEntityType.FindProperty(nameof(BookLabel.Id))! + .GetColumnName(StoreObjectIdentifier.Table("Label"))); + Assert.Null( + bookLabel2Ownership1.DeclaringEntityType.FindProperty(nameof(BookLabel.Id))! + .GetColumnName(StoreObjectIdentifier.Table("AlternateLabel"))); + + modelBuilder.Entity().OwnsOne(b => b.Label).ToTable("Label"); + modelBuilder.Entity().OwnsOne(b => b.AlternateLabel).ToTable("AlternateLabel"); + + model = modelBuilder.FinalizeModel(); + + Assert.Equal( + nameof(BookLabel.Id), + bookOwnership1.DeclaringEntityType.FindProperty(nameof(BookLabel.Id))! + .GetColumnName(StoreObjectIdentifier.Table("Label"))); + Assert.Equal( + nameof(BookLabel.AnotherBookLabel) + "_" + nameof(BookLabel.Id), + bookLabel2Ownership1.DeclaringEntityType.FindProperty(nameof(BookLabel.Id))! + .GetColumnName(StoreObjectIdentifier.Table("AlternateLabel"))); + + var alternateTable = model.GetRelationalModel().FindTable("AlternateLabel", null)!; + var bookId = alternateTable.FindColumn("BookId2")!; + + Assert.Equal(4, bookId.PropertyMappings.Count()); + Assert.All(bookId.PropertyMappings, m => Assert.Equal(ValueGenerated.OnUpdateSometimes, m.Property.ValueGenerated)); + } + + [ConditionalFact] + public virtual void Owned_types_can_be_mapped_to_different_tables() + { + var modelBuilder = CreateModelBuilder(); + var model = modelBuilder.Model; + + modelBuilder.Entity( + bb => + { + bb.ToTable( + "BT", "BS", t => + { + t.ExcludeFromMigrations(); + + Assert.Equal("BT", t.Name); + Assert.Equal("BS", t.Schema); + }); + bb.OwnsOne( + b => b.AlternateLabel, tb => + { + tb.Ignore(l => l.Book); + tb.WithOwner() + .HasConstraintName("AlternateLabelFK"); + tb.ToTable("TT", "TS"); + tb.OwnsOne( + l => l.AnotherBookLabel, ab => + { + ab.Ignore(l => l.Book); + ab.ToTable( + "AT1", "AS1", t => + { + t.ExcludeFromMigrations(false); + + Assert.Equal("AT1", t.Name); + Assert.Equal("AS1", t.Schema); + }); + ab.OwnsOne(s => s.SpecialBookLabel) + .ToTable("ST11", "SS11") + .Ignore(l => l.Book) + .Ignore(l => l.BookLabel); + + ab.OwnedEntityType.FindNavigation(nameof(BookLabel.SpecialBookLabel))! + .AddAnnotation("Foo", "Bar"); + }); + tb.OwnsOne( + l => l.SpecialBookLabel, sb => + { + sb.Ignore(l => l.Book); + sb.ToTable("ST2", "SS2"); + sb.OwnsOne(s => s.AnotherBookLabel) + .ToTable("AT21", "AS21") + .Ignore(l => l.Book); + }); + }); + bb.OwnsOne( + b => b.Label, lb => + { + lb.Ignore(l => l.Book); + lb.ToTable("LT", "LS"); + lb.OwnsOne( + l => l.SpecialBookLabel, sb => + { + sb.Ignore(l => l.Book); + sb.ToTable("ST1", "SS1"); + sb.OwnsOne(a => a.AnotherBookLabel) + .ToTable("AT11", "AS11") + .Ignore(l => l.Book); + }); + lb.OwnsOne( + l => l.AnotherBookLabel, ab => + { + ab.Ignore(l => l.Book); + ab.ToTable("AT2", "AS2"); + ab.OwnsOne(a => a.SpecialBookLabel) + .ToTable("ST21", "SS21") + .Ignore(l => l.BookLabel) + .Ignore(l => l.Book); + }); + }); + }); + + modelBuilder.FinalizeModel(); + + var book = model.FindEntityType(typeof(Book))!; + var bookOwnership1 = book.FindNavigation(nameof(Book.Label))!.ForeignKey; + var bookOwnership2 = book.FindNavigation(nameof(Book.AlternateLabel))!.ForeignKey; + var bookLabel1Ownership1 = bookOwnership1.DeclaringEntityType.FindNavigation(nameof(BookLabel.AnotherBookLabel))!.ForeignKey; + var bookLabel1Ownership2 = bookOwnership1.DeclaringEntityType.FindNavigation(nameof(BookLabel.SpecialBookLabel))!.ForeignKey; + var bookLabel2Ownership1 = bookOwnership2.DeclaringEntityType.FindNavigation(nameof(BookLabel.AnotherBookLabel))!.ForeignKey; + var bookLabel2Ownership2 = bookOwnership2.DeclaringEntityType.FindNavigation(nameof(BookLabel.SpecialBookLabel))!.ForeignKey; + var bookLabel1Ownership11 = bookLabel1Ownership1.DeclaringEntityType.FindNavigation(nameof(BookLabel.SpecialBookLabel))! + .ForeignKey; + var bookLabel1Ownership21 = bookLabel1Ownership2.DeclaringEntityType.FindNavigation(nameof(BookLabel.AnotherBookLabel))! + .ForeignKey; + var bookLabel2Ownership11 = bookLabel2Ownership1.DeclaringEntityType.FindNavigation(nameof(BookLabel.SpecialBookLabel))! + .ForeignKey; + var bookLabel2Ownership21 = bookLabel2Ownership2.DeclaringEntityType.FindNavigation(nameof(BookLabel.AnotherBookLabel))! + .ForeignKey; + + Assert.Equal("AlternateLabelFK", bookOwnership2.GetConstraintName()); + + Assert.Equal("BS", book.GetSchema()); + Assert.Equal("BT", book.GetTableName()); + Assert.True(book.IsTableExcludedFromMigrations()); + Assert.Equal("LS", bookOwnership1.DeclaringEntityType.GetSchema()); + Assert.Equal("LT", bookOwnership1.DeclaringEntityType.GetTableName()); + Assert.True(bookOwnership1.DeclaringEntityType.IsTableExcludedFromMigrations()); + Assert.Equal("TS", bookOwnership2.DeclaringEntityType.GetSchema()); + Assert.Equal("TT", bookOwnership2.DeclaringEntityType.GetTableName()); + Assert.True(bookOwnership2.DeclaringEntityType.IsTableExcludedFromMigrations()); + Assert.Equal("AS2", bookLabel1Ownership1.DeclaringEntityType.GetSchema()); + Assert.Equal("AT2", bookLabel1Ownership1.DeclaringEntityType.GetTableName()); + Assert.Equal("SS1", bookLabel1Ownership2.DeclaringEntityType.GetSchema()); + Assert.Equal("ST1", bookLabel1Ownership2.DeclaringEntityType.GetTableName()); + Assert.Equal("AS1", bookLabel2Ownership1.DeclaringEntityType.GetSchema()); + Assert.Equal("AT1", bookLabel2Ownership1.DeclaringEntityType.GetTableName()); + Assert.False(bookLabel2Ownership1.DeclaringEntityType.IsTableExcludedFromMigrations()); + Assert.Equal("SS2", bookLabel2Ownership2.DeclaringEntityType.GetSchema()); + Assert.Equal("ST2", bookLabel2Ownership2.DeclaringEntityType.GetTableName()); + Assert.Equal("SS21", bookLabel1Ownership11.DeclaringEntityType.GetSchema()); + Assert.Equal("ST21", bookLabel1Ownership11.DeclaringEntityType.GetTableName()); + Assert.Equal("AS11", bookLabel1Ownership21.DeclaringEntityType.GetSchema()); + Assert.Equal("AT11", bookLabel1Ownership21.DeclaringEntityType.GetTableName()); + Assert.Equal("SS11", bookLabel2Ownership11.DeclaringEntityType.GetSchema()); + Assert.Equal("ST11", bookLabel2Ownership11.DeclaringEntityType.GetTableName()); + Assert.Equal("AS21", bookLabel2Ownership21.DeclaringEntityType.GetSchema()); + Assert.Equal("AT21", bookLabel2Ownership21.DeclaringEntityType.GetTableName()); + + Assert.Equal("Bar", bookLabel2Ownership11.PrincipalToDependent?["Foo"]); + + Assert.NotSame(bookOwnership1.DeclaringEntityType, bookOwnership2.DeclaringEntityType); + Assert.Single(bookOwnership1.DeclaringEntityType.GetForeignKeys()); + Assert.Single(bookOwnership2.DeclaringEntityType.GetForeignKeys()); + + Assert.NotSame(bookLabel1Ownership1.DeclaringEntityType, bookLabel2Ownership1.DeclaringEntityType); + Assert.NotSame(bookLabel1Ownership2.DeclaringEntityType, bookLabel2Ownership2.DeclaringEntityType); + Assert.Single(bookLabel1Ownership1.DeclaringEntityType.GetForeignKeys()); + Assert.Single(bookLabel1Ownership2.DeclaringEntityType.GetForeignKeys()); + Assert.Single(bookLabel2Ownership1.DeclaringEntityType.GetForeignKeys()); + Assert.Single(bookLabel2Ownership2.DeclaringEntityType.GetForeignKeys()); + + Assert.NotSame(bookLabel1Ownership11.DeclaringEntityType, bookLabel2Ownership11.DeclaringEntityType); + Assert.NotSame(bookLabel1Ownership21.DeclaringEntityType, bookLabel2Ownership21.DeclaringEntityType); + Assert.Single(bookLabel1Ownership11.DeclaringEntityType.GetForeignKeys()); + Assert.Single(bookLabel1Ownership21.DeclaringEntityType.GetForeignKeys()); + Assert.Single(bookLabel2Ownership11.DeclaringEntityType.GetForeignKeys()); + Assert.Single(bookLabel2Ownership21.DeclaringEntityType.GetForeignKeys()); + + Assert.Equal(2, model.GetEntityTypes().Count(e => e.ClrType == typeof(BookLabel))); + Assert.Equal(4, model.GetEntityTypes().Count(e => e.ClrType == typeof(AnotherBookLabel))); + Assert.Equal(4, model.GetEntityTypes().Count(e => e.ClrType == typeof(SpecialBookLabel))); + + Assert.Equal(ValueGenerated.Never, bookOwnership1.DeclaringEntityType.FindPrimaryKey()!.Properties.Single().ValueGenerated); + Assert.Equal(ValueGenerated.Never, bookOwnership2.DeclaringEntityType.FindPrimaryKey()!.Properties.Single().ValueGenerated); + + Assert.Equal( + ValueGenerated.Never, bookLabel1Ownership1.DeclaringEntityType.FindPrimaryKey()!.Properties.Single().ValueGenerated); + Assert.Equal( + ValueGenerated.Never, bookLabel1Ownership2.DeclaringEntityType.FindPrimaryKey()!.Properties.Single().ValueGenerated); + Assert.Equal( + ValueGenerated.Never, bookLabel2Ownership1.DeclaringEntityType.FindPrimaryKey()!.Properties.Single().ValueGenerated); + Assert.Equal( + ValueGenerated.Never, bookLabel2Ownership2.DeclaringEntityType.FindPrimaryKey()!.Properties.Single().ValueGenerated); + + Assert.Equal( + ValueGenerated.Never, bookLabel1Ownership11.DeclaringEntityType.FindPrimaryKey()!.Properties.Single().ValueGenerated); + Assert.Equal( + ValueGenerated.Never, bookLabel1Ownership21.DeclaringEntityType.FindPrimaryKey()!.Properties.Single().ValueGenerated); + Assert.Equal( + ValueGenerated.Never, bookLabel2Ownership11.DeclaringEntityType.FindPrimaryKey()!.Properties.Single().ValueGenerated); + Assert.Equal( + ValueGenerated.Never, bookLabel2Ownership21.DeclaringEntityType.FindPrimaryKey()!.Properties.Single().ValueGenerated); + } + + [ConditionalFact] + public virtual void Owned_type_collections_can_be_mapped_to_different_tables() + { + var modelBuilder = CreateModelBuilder(); + var model = modelBuilder.Model; + + modelBuilder.Entity().OwnsMany( + c => c.Orders, + r => + { + r.HasKey(o => o.OrderId); + //r.ToTable(tb => tb.IsMemoryOptimized()); + r.Ignore(o => o.OrderCombination); + r.Ignore(o => o.Details); + }); + + var ownership = model.FindEntityType(typeof(Customer))!.FindNavigation(nameof(Customer.Orders))!.ForeignKey; + var owned = ownership.DeclaringEntityType; + Assert.True(ownership.IsOwnership); + Assert.Equal(nameof(Order.Customer), ownership.DependentToPrincipal?.Name); + Assert.Equal("FK_Order_Customer_CustomerId", ownership.GetConstraintName()); + + Assert.Single(owned.GetForeignKeys()); + Assert.Single(owned.GetIndexes()); + Assert.Equal( + new[] { nameof(Order.OrderId), nameof(Order.AnotherCustomerId), nameof(Order.CustomerId) }, + owned.GetProperties().Select(p => p.GetColumnName())); + Assert.Equal(nameof(Order), owned.GetTableName()); + Assert.Null(owned.GetSchema()); + + modelBuilder.Entity().OwnsMany( + c => c.Orders, + r => + { + r.WithOwner(o => o.Customer).HasConstraintName("Owned"); + r.ToTable("bar", "foo"); + }); + + Assert.Equal("bar", owned.GetTableName()); + Assert.Equal("foo", owned.GetSchema()); + Assert.Equal("Owned", ownership.GetConstraintName()); + + modelBuilder.Entity().OwnsMany( + c => c.Orders, + r => r.ToTable("blah")); + + modelBuilder.FinalizeModel(); + + Assert.Equal("blah", owned.GetTableName()); + Assert.Null(owned.GetSchema()); + } + + [ConditionalFact] + public virtual void Owned_type_collections_can_be_mapped_to_a_view() + { + var modelBuilder = CreateModelBuilder(); + + modelBuilder.Entity().OwnsMany( + c => c.Orders, + r => + { + r.HasKey(o => o.OrderId); + r.Ignore(o => o.OrderCombination); + r.Ignore(o => o.Details); + r.ToView("bar", "foo"); + }); + + var model = modelBuilder.FinalizeModel(); + + var owner = model.FindEntityType(typeof(Customer))!; + var ownership = owner.FindNavigation(nameof(Customer.Orders))!.ForeignKey; + var owned = ownership.DeclaringEntityType; + Assert.True(ownership.IsOwnership); + Assert.Equal(nameof(Order.Customer), ownership.DependentToPrincipal?.Name); + Assert.Empty(ownership.GetMappedConstraints()); + + Assert.Equal(nameof(Customer), owner.GetTableName()); + Assert.Null(owner.GetSchema()); + + Assert.Null(owned.GetForeignKeys().Single().GetConstraintName()); + Assert.Single(owned.GetIndexes()); + Assert.Null(owned.FindPrimaryKey()!.GetName()); + Assert.Equal( + new[] { nameof(Order.OrderId), nameof(Order.AnotherCustomerId), nameof(Order.CustomerId) }, + owned.GetProperties().Select(p => p.GetColumnName())); + Assert.Null(owned.GetTableName()); + Assert.Null(owned.GetSchema()); + Assert.Equal("bar", owned.GetViewName()); + Assert.Equal("foo", owned.GetViewSchema()); + } + + [ConditionalFact] + public virtual void Owner_can_be_mapped_to_a_view() + { + var modelBuilder = CreateModelBuilder(); + + modelBuilder.Entity().OwnsMany( + c => c.Orders, + r => + { + r.HasKey(o => o.OrderId); + r.Ignore(o => o.OrderCombination); + r.Ignore(o => o.Details); + }) + .ToView("bar", "foo"); + + var model = modelBuilder.FinalizeModel(); + + var owner = model.FindEntityType(typeof(Customer))!; + var ownership = owner.FindNavigation(nameof(Customer.Orders))!.ForeignKey; + var owned = ownership.DeclaringEntityType; + Assert.True(ownership.IsOwnership); + Assert.Equal(nameof(Order.Customer), ownership.DependentToPrincipal?.Name); + Assert.Empty(ownership.GetMappedConstraints()); + + Assert.Null(owner.GetTableName()); + Assert.Null(owner.GetSchema()); + Assert.Equal("bar", owner.GetViewName()); + Assert.Equal("foo", owner.GetViewSchema()); + + Assert.Null(owned.GetForeignKeys().Single().GetConstraintName()); + Assert.Equal("IX_Order_CustomerId", owned.GetIndexes().Single().GetDatabaseName()); + Assert.Equal("PK_Order", owned.FindPrimaryKey()!.GetName()); + Assert.Equal( + new[] { nameof(Order.OrderId), nameof(Order.AnotherCustomerId), nameof(Order.CustomerId) }, + owned.GetProperties().Select(p => p.GetColumnName())); + Assert.Equal(nameof(Order), owned.GetTableName()); + Assert.Null(owned.GetSchema()); + } + + [ConditionalFact] + public virtual void Json_entity_and_normal_owned_can_exist_side_by_side_on_same_entity() + { + var modelBuilder = CreateModelBuilder(); + + modelBuilder.Entity( + b => + { + b.OwnsOne(x => x.OwnedReference1); + b.OwnsOne(x => x.OwnedReference2, bb => bb.ToJson("reference")); + b.OwnsMany(x => x.OwnedCollection1); + b.OwnsMany(x => x.OwnedCollection2, bb => bb.ToJson("collection")); + }); + + var model = modelBuilder.FinalizeModel(); + var owner = model.FindEntityType(typeof(JsonEntity))!; + Assert.False(owner.IsMappedToJson()); + Assert.True(owner.GetDeclaredProperties().All(x => x.GetJsonPropertyName() == null)); + + var ownedEntities = model.FindEntityTypes(typeof(OwnedEntity)); + Assert.Equal(4, ownedEntities.Count()); + Assert.Equal(2, ownedEntities.Where(e => e.IsMappedToJson()).Count()); + Assert.Equal(2, ownedEntities.Where(e => e.IsOwned() && !e.IsMappedToJson()).Count()); + var reference = ownedEntities.Where(e => e.GetContainerColumnName() == "reference").Single(); + Assert.Equal("Date", reference.GetProperty("Date").GetJsonPropertyName()); + Assert.Equal("Fraction", reference.GetProperty("Fraction").GetJsonPropertyName()); + Assert.Equal("Enum", reference.GetProperty("Enum").GetJsonPropertyName()); + + var collection = ownedEntities.Where(e => e.GetContainerColumnName() == "collection").Single(); + Assert.Equal("Date", collection.GetProperty("Date").GetJsonPropertyName()); + Assert.Equal("Fraction", collection.GetProperty("Fraction").GetJsonPropertyName()); + Assert.Equal("Enum", collection.GetProperty("Enum").GetJsonPropertyName()); + + var nonJson = ownedEntities.Where(e => !e.IsMappedToJson()).ToList(); + Assert.True(nonJson.All(x => x.GetProperty("Date").GetJsonPropertyName() == null)); + Assert.True(nonJson.All(x => x.GetProperty("Fraction").GetJsonPropertyName() == null)); + Assert.True(nonJson.All(x => x.GetProperty("Enum").GetJsonPropertyName() == null)); + } + + [ConditionalFact] + public virtual void Json_entity_with_tph_inheritance() + { + var modelBuilder = CreateModelBuilder(); + + modelBuilder.Entity( + b => + { + b.OwnsOne(x => x.OwnedReferenceOnBase, bb => bb.ToJson("reference_on_base")); + b.OwnsMany(x => x.OwnedCollectionOnBase, bb => bb.ToJson("collection_on_base")); + }); + + modelBuilder.Entity( + b => + { + b.HasBaseType(); + b.OwnsOne(x => x.OwnedReferenceOnDerived, bb => bb.ToJson("reference_on_derived")); + b.OwnsMany(x => x.OwnedCollectionOnDerived, bb => bb.ToJson("collection_on_derived")); + }); + + var model = modelBuilder.FinalizeModel(); + var ownedEntities = model.FindEntityTypes(typeof(OwnedEntity)).ToList(); + Assert.Equal(4, ownedEntities.Count()); + + foreach (var ownedEntity in ownedEntities) + { + Assert.Equal("Date", ownedEntity.GetProperty("Date").GetJsonPropertyName()); + Assert.Equal("Fraction", ownedEntity.GetProperty("Fraction").GetJsonPropertyName()); + Assert.Equal("Enum", ownedEntity.GetProperty("Enum").GetJsonPropertyName()); + } + + var jsonColumnNames = ownedEntities.Select(x => x.GetContainerColumnName()).OrderBy(x => x).ToList(); + Assert.Equal("collection_on_base", jsonColumnNames[0]); + Assert.Equal("collection_on_derived", jsonColumnNames[1]); + Assert.Equal("reference_on_base", jsonColumnNames[2]); + Assert.Equal("reference_on_derived", jsonColumnNames[3]); + } + + [ConditionalFact] + public virtual void Json_entity_with_nested_structure_same_property_names() + { + var modelBuilder = CreateModelBuilder(); + modelBuilder.Entity( + b => + { + b.OwnsOne( + x => x.OwnedReference1, bb => + { + bb.ToJson("ref1"); + bb.OwnsOne(x => x.Reference1); + bb.OwnsOne(x => x.Reference2); + bb.OwnsMany(x => x.Collection1); + bb.OwnsMany(x => x.Collection2); + }); + + b.OwnsOne( + x => x.OwnedReference2, bb => + { + bb.ToJson("ref2"); + bb.OwnsOne(x => x.Reference1); + bb.OwnsOne(x => x.Reference2); + bb.OwnsMany(x => x.Collection1); + bb.OwnsMany(x => x.Collection2); + }); + + b.OwnsMany( + x => x.OwnedCollection1, bb => + { + bb.ToJson("col1"); + bb.OwnsOne(x => x.Reference1); + bb.OwnsOne(x => x.Reference2); + bb.OwnsMany(x => x.Collection1); + bb.OwnsMany(x => x.Collection2); + }); + + b.OwnsMany( + x => x.OwnedCollection2, bb => + { + bb.ToJson("col2"); + bb.OwnsOne(x => x.Reference1); + bb.OwnsOne(x => x.Reference2); + bb.OwnsMany(x => x.Collection1); + bb.OwnsMany(x => x.Collection2); + }); + }); + + var model = modelBuilder.FinalizeModel(); + var outerOwnedEntities = model.FindEntityTypes(typeof(OwnedEntityExtraLevel)); + Assert.Equal(4, outerOwnedEntities.Count()); + + foreach (var outerOwnedEntity in outerOwnedEntities) + { + Assert.Equal("Date", outerOwnedEntity.GetProperty("Date").GetJsonPropertyName()); + Assert.Equal("Fraction", outerOwnedEntity.GetProperty("Fraction").GetJsonPropertyName()); + Assert.Equal("Enum", outerOwnedEntity.GetProperty("Enum").GetJsonPropertyName()); + Assert.Equal( + "Reference1", + outerOwnedEntity.GetNavigations().Single(n => n.Name == "Reference1").TargetEntityType.GetJsonPropertyName()); + Assert.Equal( + "Reference2", + outerOwnedEntity.GetNavigations().Single(n => n.Name == "Reference2").TargetEntityType.GetJsonPropertyName()); + Assert.Equal( + "Collection1", + outerOwnedEntity.GetNavigations().Single(n => n.Name == "Collection1").TargetEntityType.GetJsonPropertyName()); + Assert.Equal( + "Collection2", + outerOwnedEntity.GetNavigations().Single(n => n.Name == "Collection2").TargetEntityType.GetJsonPropertyName()); + } + + var ownedEntities = model.FindEntityTypes(typeof(OwnedEntity)); + Assert.Equal(16, ownedEntities.Count()); + + foreach (var ownedEntity in ownedEntities) + { + Assert.Equal("Date", ownedEntity.GetProperty("Date").GetJsonPropertyName()); + Assert.Equal("Fraction", ownedEntity.GetProperty("Fraction").GetJsonPropertyName()); + Assert.Equal("Enum", ownedEntity.GetProperty("Enum").GetJsonPropertyName()); + } + } + + [ConditionalFact] + public virtual void Json_entity_nested_enums_have_conversions_to_int_by_default_ToJson_first() + { + var modelBuilder = CreateModelBuilder(); + modelBuilder.Entity( + b => + { + b.OwnsOne( + x => x.OwnedReference1, bb => + { + bb.ToJson(); + bb.OwnsOne(x => x.Reference1); + bb.OwnsOne(x => x.Reference2); + bb.OwnsMany(x => x.Collection1); + bb.OwnsMany(x => x.Collection2); + }); + + b.Ignore(x => x.OwnedReference2); + b.OwnsMany( + x => x.OwnedCollection1, bb => + { + bb.ToJson(); + bb.OwnsOne(x => x.Reference1); + bb.OwnsOne(x => x.Reference2); + bb.OwnsMany(x => x.Collection1); + bb.OwnsMany(x => x.Collection2); + }); + + b.Ignore(x => x.OwnedCollection2); + }); + + var model = modelBuilder.FinalizeModel(); + var outerOwnedEntities = model.FindEntityTypes(typeof(OwnedEntityExtraLevel)); + Assert.Equal(2, outerOwnedEntities.Count()); + + foreach (var outerOwnedEntity in outerOwnedEntities) + { + Assert.True(outerOwnedEntity.IsMappedToJson()); + var myEnum = outerOwnedEntity.GetDeclaredProperties().Where(p => p.ClrType.IsEnum).Single(); + var typeMapping = myEnum.FindRelationalTypeMapping()!; + Assert.True(typeMapping.Converter is EnumToNumberConverter); + } + + var ownedEntities = model.FindEntityTypes(typeof(OwnedEntity)); + Assert.Equal(8, ownedEntities.Count()); + + foreach (var ownedEntity in ownedEntities) + { + Assert.True(ownedEntity.IsMappedToJson()); + var myEnum = ownedEntity.GetDeclaredProperties().Where(p => p.ClrType.IsEnum).Single(); + var typeMapping = myEnum.FindRelationalTypeMapping()!; + Assert.True(typeMapping.Converter is EnumToNumberConverter); + } + } + + [ConditionalFact] + public virtual void Json_entity_nested_enums_have_conversions_to_int_by_default_ToJson_last() + { + var modelBuilder = CreateModelBuilder(); + modelBuilder.Entity( + b => + { + b.OwnsOne( + x => x.OwnedReference1, bb => + { + bb.OwnsOne(x => x.Reference1); + bb.OwnsOne(x => x.Reference2); + bb.OwnsMany(x => x.Collection1); + bb.OwnsMany(x => x.Collection2); + bb.ToJson(); + }); + + b.Ignore(x => x.OwnedReference2); + b.OwnsMany( + x => x.OwnedCollection1, bb => + { + bb.OwnsOne(x => x.Reference1); + bb.OwnsOne(x => x.Reference2); + bb.OwnsMany(x => x.Collection1); + bb.OwnsMany(x => x.Collection2); + bb.ToJson(); + }); + + b.Ignore(x => x.OwnedCollection2); + }); + + var model = modelBuilder.FinalizeModel(); + var outerOwnedEntities = model.FindEntityTypes(typeof(OwnedEntityExtraLevel)); + Assert.Equal(2, outerOwnedEntities.Count()); + + foreach (var outerOwnedEntity in outerOwnedEntities) + { + Assert.True(outerOwnedEntity.IsMappedToJson()); + var myEnum = outerOwnedEntity.GetDeclaredProperties().Where(p => p.ClrType.IsEnum).Single(); + var typeMapping = myEnum.FindRelationalTypeMapping()!; + Assert.True(typeMapping.Converter is EnumToNumberConverter); + } + + var ownedEntities = model.FindEntityTypes(typeof(OwnedEntity)); + Assert.Equal(8, ownedEntities.Count()); + + foreach (var ownedEntity in ownedEntities) + { + Assert.True(ownedEntity.IsMappedToJson()); + var myEnum = ownedEntity.GetDeclaredProperties().Where(p => p.ClrType.IsEnum).Single(); + var typeMapping = myEnum.FindRelationalTypeMapping()!; + Assert.True(typeMapping.Converter is EnumToNumberConverter); + } + } + + [ConditionalFact] + public virtual void Entity_mapped_to_json_and_unwound_afterwards_properly_cleans_up_its_state() + { + var modelBuilder = CreateModelBuilder(); + modelBuilder.Entity( + b => + { + b.OwnsOne( + x => x.OwnedReference1, bb => + { + bb.ToJson(); + bb.OwnsOne(x => x.Reference1); + bb.OwnsOne(x => x.Reference2); + bb.OwnsMany(x => x.Collection1); + bb.OwnsMany(x => x.Collection2); + bb.ToJson(null); + }); + + b.Ignore(x => x.OwnedReference2); + b.OwnsMany( + x => x.OwnedCollection1, bb => + { + bb.OwnsOne(x => x.Reference1); + bb.OwnsOne(x => x.Reference2); + bb.OwnsMany(x => x.Collection1); + bb.OwnsMany(x => x.Collection2); + bb.ToJson(); + bb.ToJson(null); + }); + + b.Ignore(x => x.OwnedCollection2); + }); + + var model = modelBuilder.FinalizeModel(); + var outerOwnedEntities = model.FindEntityTypes(typeof(OwnedEntityExtraLevel)); + Assert.Equal(2, outerOwnedEntities.Count()); + + foreach (var outerOwnedEntity in outerOwnedEntities) + { + Assert.False(outerOwnedEntity.IsMappedToJson()); +#pragma warning disable CS0618 + Assert.Null(outerOwnedEntity.GetContainerColumnTypeMapping()); +#pragma warning restore CS0618 + var myEnum = outerOwnedEntity.GetDeclaredProperties().Where(p => p.ClrType.IsEnum).Single(); + var typeMapping = myEnum.FindRelationalTypeMapping()!; + + Assert.True(typeMapping.Converter is EnumToNumberConverter); + } + + var ownedEntities = model.FindEntityTypes(typeof(OwnedEntity)); + Assert.Equal(8, ownedEntities.Count()); + + foreach (var ownedEntity in ownedEntities) + { + Assert.False(ownedEntity.IsMappedToJson()); +#pragma warning disable CS0618 + Assert.Null(ownedEntity.GetContainerColumnTypeMapping()); +#pragma warning restore CS0618 + var myEnum = ownedEntity.GetDeclaredProperties().Where(p => p.ClrType.IsEnum).Single(); + var typeMapping = myEnum.FindRelationalTypeMapping()!; + Assert.True(typeMapping.Converter is EnumToNumberConverter); + } + } + + [ConditionalFact] + public virtual void Json_entity_mapped_to_view() + { + var modelBuilder = CreateModelBuilder(); + modelBuilder.Entity( + b => + { + b.ToView("MyView"); + b.OwnsOne(x => x.OwnedReference1, bb => bb.ToJson()); + b.Ignore(x => x.OwnedReference2); + b.OwnsMany(x => x.OwnedCollection1, bb => bb.ToJson()); + b.Ignore(x => x.OwnedCollection2); + }); + + var model = modelBuilder.FinalizeModel(); + + var owner = model.FindEntityType(typeof(JsonEntity))!; + Assert.Equal("MyView", owner.GetViewName()); + + var ownedEntities = model.FindEntityTypes(typeof(OwnedEntity)); + Assert.Equal(2, ownedEntities.Count()); + Assert.Equal(2, ownedEntities.Where(e => e.IsMappedToJson()).Count()); + Assert.True(ownedEntities.All(x => x.GetViewName() == "MyView")); + } + + [ConditionalFact] + public virtual void Json_entity_with_custom_property_names() + { + var modelBuilder = CreateModelBuilder(); + modelBuilder.Entity( + b => + { + b.OwnsOne( + x => x.OwnedReference1, bb => + { + bb.ToJson(); + bb.Property(x => x.Date).HasJsonPropertyName("OuterDate"); + bb.Property(x => x.Fraction).HasJsonPropertyName("OuterFraction"); + bb.Property(x => x.Enum).HasJsonPropertyName("OuterEnum"); + bb.OwnsOne( + x => x.Reference1, bbb => + { + bbb.HasJsonPropertyName("RenamedReference1"); + bbb.Property(x => x.Date).HasJsonPropertyName("InnerDate"); + bbb.Property(x => x.Fraction).HasJsonPropertyName("InnerFraction"); + bbb.Property(x => x.Enum).HasJsonPropertyName("InnerEnum"); + }); + bb.OwnsOne( + x => x.Reference2, bbb => + { + bbb.HasJsonPropertyName("RenamedReference2"); + bbb.Property(x => x.Date).HasJsonPropertyName("InnerDate"); + bbb.Property(x => x.Fraction).HasJsonPropertyName("InnerFraction"); + bbb.Property(x => x.Enum).HasJsonPropertyName("InnerEnum"); + }); + bb.OwnsMany( + x => x.Collection1, bbb => + { + bbb.HasJsonPropertyName("RenamedCollection1"); + bbb.Property(x => x.Date).HasJsonPropertyName("InnerDate"); + bbb.Property(x => x.Fraction).HasJsonPropertyName("InnerFraction"); + bbb.Property(x => x.Enum).HasJsonPropertyName("InnerEnum"); + }); + bb.OwnsMany( + x => x.Collection2, bbb => + { + bbb.HasJsonPropertyName("RenamedCollection2"); + bbb.Property(x => x.Date).HasJsonPropertyName("InnerDate"); + bbb.Property(x => x.Fraction).HasJsonPropertyName("InnerFraction"); + bbb.Property(x => x.Enum).HasJsonPropertyName("InnerEnum"); + }); + }); + + b.OwnsMany( + x => x.OwnedCollection1, bb => + { + bb.Property(x => x.Date).HasJsonPropertyName("OuterDate"); + bb.Property(x => x.Fraction).HasJsonPropertyName("OuterFraction"); + bb.Property(x => x.Enum).HasJsonPropertyName("OuterEnum"); + bb.OwnsOne( + x => x.Reference1, bbb => + { + bbb.HasJsonPropertyName("RenamedReference1"); + bbb.Property(x => x.Date).HasJsonPropertyName("InnerDate"); + bbb.Property(x => x.Fraction).HasJsonPropertyName("InnerFraction"); + bbb.Property(x => x.Enum).HasJsonPropertyName("InnerEnum"); + }); + bb.OwnsOne( + x => x.Reference2, bbb => + { + bbb.HasJsonPropertyName("RenamedReference2"); + bbb.Property(x => x.Date).HasJsonPropertyName("InnerDate"); + bbb.Property(x => x.Fraction).HasJsonPropertyName("InnerFraction"); + bbb.Property(x => x.Enum).HasJsonPropertyName("InnerEnum"); + }); + bb.OwnsMany( + x => x.Collection1, bbb => + { + bbb.HasJsonPropertyName("RenamedCollection1"); + bbb.Property(x => x.Date).HasJsonPropertyName("InnerDate"); + bbb.Property(x => x.Fraction).HasJsonPropertyName("InnerFraction"); + bbb.Property(x => x.Enum).HasJsonPropertyName("InnerEnum"); + }); + bb.OwnsMany( + x => x.Collection2, bbb => + { + bbb.HasJsonPropertyName("RenamedCollection2"); + bbb.Property(x => x.Date).HasJsonPropertyName("InnerDate"); + bbb.Property(x => x.Fraction).HasJsonPropertyName("InnerFraction"); + bbb.Property(x => x.Enum).HasJsonPropertyName("InnerEnum"); + }); + bb.ToJson(); + }); + + b.Ignore(x => x.OwnedReference2); + b.Ignore(x => x.OwnedCollection2); + }); + + var model = modelBuilder.FinalizeModel(); + var outerOwnedEntities = model.FindEntityTypes(typeof(OwnedEntityExtraLevel)); + Assert.Equal(2, outerOwnedEntities.Count()); + + foreach (var outerOwnedEntity in outerOwnedEntities) + { + Assert.Equal("OuterDate", outerOwnedEntity.GetProperty("Date").GetJsonPropertyName()); + Assert.Equal("OuterFraction", outerOwnedEntity.GetProperty("Fraction").GetJsonPropertyName()); + Assert.Equal("OuterEnum", outerOwnedEntity.GetProperty("Enum").GetJsonPropertyName()); + Assert.Equal( + "RenamedReference1", + outerOwnedEntity.GetNavigations().Single(n => n.Name == "Reference1").TargetEntityType.GetJsonPropertyName()); + Assert.Equal( + "RenamedReference2", + outerOwnedEntity.GetNavigations().Single(n => n.Name == "Reference2").TargetEntityType.GetJsonPropertyName()); + Assert.Equal( + "RenamedCollection1", + outerOwnedEntity.GetNavigations().Single(n => n.Name == "Collection1").TargetEntityType.GetJsonPropertyName()); + Assert.Equal( + "RenamedCollection2", + outerOwnedEntity.GetNavigations().Single(n => n.Name == "Collection2").TargetEntityType.GetJsonPropertyName()); + } + + var ownedEntities = model.FindEntityTypes(typeof(OwnedEntity)); + Assert.Equal(8, ownedEntities.Count()); + + foreach (var ownedEntity in ownedEntities) + { + Assert.Equal("InnerDate", ownedEntity.GetProperty("Date").GetJsonPropertyName()); + Assert.Equal("InnerFraction", ownedEntity.GetProperty("Fraction").GetJsonPropertyName()); + Assert.Equal("InnerEnum", ownedEntity.GetProperty("Enum").GetJsonPropertyName()); + } + } + + [ConditionalFact] + public virtual void Json_entity_and_normal_owned_can_exist_side_to_side_on_same_entity() + { + var modelBuilder = CreateModelBuilder(); + + modelBuilder.Entity( + b => + { + b.OwnsOne(x => x.OwnedReference1); + b.OwnsOne(x => x.OwnedReference2, bb => bb.ToJson("reference")); + b.OwnsMany(x => x.OwnedCollection1); + b.OwnsMany(x => x.OwnedCollection2, bb => bb.ToJson("collection")); + }); + + var model = modelBuilder.FinalizeModel(); + + var ownedEntities = model.FindEntityTypes(typeof(OwnedEntity)); + Assert.Equal(4, ownedEntities.Count()); + Assert.Equal(2, ownedEntities.Where(e => e.IsMappedToJson()).Count()); + Assert.Equal(2, ownedEntities.Where(e => e.IsOwned() && !e.IsMappedToJson()).Count()); + } + + [ConditionalFact] + public virtual void Json_entity_with_nested_structure_same_property_names_() + { + var modelBuilder = CreateModelBuilder(); + modelBuilder.Entity( + b => + { + b.OwnsOne( + x => x.OwnedReference1, bb => + { + bb.ToJson("ref1"); + bb.OwnsOne(x => x.Reference1); + bb.OwnsOne(x => x.Reference2); + bb.OwnsMany(x => x.Collection1); + bb.OwnsMany(x => x.Collection2); + }); + + b.OwnsOne( + x => x.OwnedReference2, bb => + { + bb.ToJson("ref2"); + bb.OwnsOne(x => x.Reference1); + bb.OwnsOne(x => x.Reference2); + bb.OwnsMany(x => x.Collection1); + bb.OwnsMany(x => x.Collection2); + }); + + b.OwnsMany( + x => x.OwnedCollection1, bb => + { + bb.ToJson("col1"); + bb.OwnsOne(x => x.Reference1); + bb.OwnsOne(x => x.Reference2); + bb.OwnsMany(x => x.Collection1); + bb.OwnsMany(x => x.Collection2); + }); + + b.OwnsMany( + x => x.OwnedCollection2, bb => + { + bb.ToJson("col2"); + bb.OwnsOne(x => x.Reference1); + bb.OwnsOne(x => x.Reference2); + bb.OwnsMany(x => x.Collection1); + bb.OwnsMany(x => x.Collection2); + }); + }); + + var model = modelBuilder.FinalizeModel(); + var outerOwnedEntities = model.FindEntityTypes(typeof(OwnedEntityExtraLevel)); + Assert.Equal(4, outerOwnedEntities.Count()); + + var ownedEntities = model.FindEntityTypes(typeof(OwnedEntity)); + Assert.Equal(16, ownedEntities.Count()); + } + } + + public class JetModelBuilderFixture : RelationalModelBuilderFixture + { + public override TestHelpers TestHelpers => JetTestHelpers.Instance; + } +} diff --git a/test/EFCore.Jet.FunctionalTests/ModelBuilding/JetTestModelBuilderExtensions.cs b/test/EFCore.Jet.FunctionalTests/ModelBuilding/JetTestModelBuilderExtensions.cs new file mode 100644 index 00000000..1145292e --- /dev/null +++ b/test/EFCore.Jet.FunctionalTests/ModelBuilding/JetTestModelBuilderExtensions.cs @@ -0,0 +1,9 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace EntityFrameworkCore.Jet.FunctionalTests.ModelBuilding; + +public static class JetTestModelBuilderExtensions +{ + +} diff --git a/test/EFCore.Jet.FunctionalTests/OptimisticConcurrencyJetTest.cs b/test/EFCore.Jet.FunctionalTests/OptimisticConcurrencyJetTest.cs index 71a9b973..bf98961b 100644 --- a/test/EFCore.Jet.FunctionalTests/OptimisticConcurrencyJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/OptimisticConcurrencyJetTest.cs @@ -7,7 +7,7 @@ using Microsoft.EntityFrameworkCore.Storage; using Microsoft.EntityFrameworkCore.TestModels.ConcurrencyModel; using Xunit; - +#nullable disable // ReSharper disable InconsistentNaming namespace EntityFrameworkCore.Jet.FunctionalTests { @@ -367,25 +367,23 @@ public override void Property_entry_original_value_is_set() base.Property_entry_original_value_is_set(); AssertSql( -""" -SELECT TOP(1) [e].[Id], [e].[EngineSupplierId], [e].[Name], [e].[StorageLocation_Latitude], [e].[StorageLocation_Longitude] -FROM [Engines] AS [e] -ORDER BY [e].[Id] + """ +SELECT TOP 1 `e`.`Id`, `e`.`EngineSupplierId`, `e`.`Name`, `e`.`StorageLocation_Latitude`, `e`.`StorageLocation_Longitude` +FROM `Engines` AS `e` +ORDER BY `e`.`Id` """, // -""" + """ +@p0='FO 108X' (Size = 255) @p1='1' -@p2='Mercedes' (Size = 450) -@p0='FO 108X' (Size = 4000) -@p3='ChangedEngine' (Size = 4000) +@p2='Mercedes' (Size = 255) +@p3='ChangedEngine' (Size = 255) @p4='47.64491' (Nullable = true) @p5='-122.128101' (Nullable = true) -SET IMPLICIT_TRANSACTIONS OFF; -SET NOCOUNT ON; -UPDATE [Engines] SET [Name] = @p0 -OUTPUT 1 -WHERE [Id] = @p1 AND [EngineSupplierId] = @p2 AND [Name] = @p3 AND [StorageLocation_Latitude] = @p4 AND [StorageLocation_Longitude] = @p5; +UPDATE `Engines` SET `Name` = @p0 +WHERE `Id` = @p1 AND `EngineSupplierId` = @p2 AND `Name` = @p3 AND `StorageLocation_Latitude` = @p4 AND `StorageLocation_Longitude` = @p5; +SELECT @@ROWCOUNT; """); } diff --git a/test/EFCore.Jet.FunctionalTests/Query/AdHocAdvancedMappingsQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/AdHocAdvancedMappingsQueryJetTest.cs new file mode 100644 index 00000000..d1b23a4a --- /dev/null +++ b/test/EFCore.Jet.FunctionalTests/Query/AdHocAdvancedMappingsQueryJetTest.cs @@ -0,0 +1,304 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Threading.Tasks; +using EntityFrameworkCore.Jet.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; + +namespace EntityFrameworkCore.Jet.FunctionalTests.Query; + +#nullable disable + +public class AdHocAdvancedMappingsQueryJetTest : AdHocAdvancedMappingsQueryRelationalTestBase +{ + protected override ITestStoreFactory TestStoreFactory + => JetTestStoreFactory.Instance; + + public override async Task Setting_IsUnicode_generates_unicode_literal_in_SQL() + { + await base.Setting_IsUnicode_generates_unicode_literal_in_SQL(); + + AssertSql( + """ +SELECT `t`.`Id`, `t`.`Nombre` +FROM `TipoServicio` AS `t` +WHERE `t`.`Nombre` LIKE '%lla%' +"""); + } + + public override async Task Projecting_correlated_collection_along_with_non_mapped_property() + { + await base.Projecting_correlated_collection_along_with_non_mapped_property(); + + AssertSql( + """ +SELECT `b`.`Id`, `p0`.`Id`, `p0`.`BlogId`, `p0`.`Name` +FROM `Blogs` AS `b` +LEFT JOIN ( + SELECT `p`.`Id`, `p`.`BlogId`, `p`.`Name` + FROM `Posts` AS `p` + WHERE `p`.`Name` LIKE '%2%' +) AS `p0` ON `b`.`Id` = `p0`.`BlogId` +ORDER BY `b`.`Id` +""", + // + """ +SELECT `b`.`Id`, ( + SELECT TOP 1 `p`.`Name` + FROM `Posts` AS `p` + WHERE `b`.`Id` = `p`.`BlogId` + ORDER BY `p`.`Id`) +FROM `Blogs` AS `b` +"""); + } + + public override async Task Projection_failing_with_EnumToStringConverter() + { + await base.Projection_failing_with_EnumToStringConverter(); + + AssertSql( + """ +SELECT `p`.`Id`, `p`.`Name`, IIF(`c`.`Id` IS NULL, 'Other', `c`.`Name`) AS `CategoryName`, IIF(`c`.`Id` IS NULL, 'Active', `c`.`Status`) AS `CategoryStatus` +FROM `Products` AS `p` +LEFT JOIN `Categories` AS `c` ON `p`.`CategoryId` = `c`.`Id` +"""); + } + + public override async Task Expression_tree_constructed_via_interface_works() + { + await base.Expression_tree_constructed_via_interface_works(); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`IsRemoved`, `r`.`Removed`, `r`.`RemovedByUser`, `r`.`OwnedEntity_Exists`, `r`.`OwnedEntity_OwnedValue` +FROM `RemovableEntities` AS `r` +WHERE `r`.`IsRemoved` <> TRUE +""", + // + """ +SELECT `p`.`Id`, `p`.`RemovableEntityId` +FROM `Parents` AS `p` +LEFT JOIN `RemovableEntities` AS `r` ON `p`.`RemovableEntityId` = `r`.`Id` +WHERE `r`.`IsRemoved` = TRUE +""", + // + """ +SELECT `r`.`Id`, `r`.`IsRemoved`, `r`.`Removed`, `r`.`RemovedByUser`, `r`.`OwnedEntity_Exists`, `r`.`OwnedEntity_OwnedValue` +FROM `RemovableEntities` AS `r` +WHERE `r`.`OwnedEntity_OwnedValue` = 'Abc' +""", + // + """ +@__id_0='1' + +SELECT `p`.`Id`, `p`.`RemovableEntityId` +FROM `Parents` AS `p` +WHERE `p`.`Id` = @__id_0 +"""); + } + + public override async Task Double_convert_interface_created_expression_tree() + { + await base.Double_convert_interface_created_expression_tree(); + + AssertSql( + """ +@__action_0='1' + +SELECT COUNT(*) +FROM `Offers` AS `o` +WHERE EXISTS ( + SELECT 1 + FROM `OfferActions` AS `o0` + WHERE `o`.`Id` = `o0`.`OfferId` AND `o0`.`Action` = @__action_0) +"""); + } + + public override async Task Casts_are_removed_from_expression_tree_when_redundant() + { + await base.Casts_are_removed_from_expression_tree_when_redundant(); + + AssertSql( + """ +@__id_0='1' + +SELECT TOP 1 `m`.`Id`, `m`.`Name`, `m`.`NavigationEntityId` +FROM `MockEntities` AS `m` +WHERE `m`.`Id` = @__id_0 +""", + // + """ +SELECT COUNT(*) +FROM `MockEntities` AS `m` +"""); + } + + public override async Task Can_query_hierarchy_with_non_nullable_property_on_derived() + { + await base.Can_query_hierarchy_with_non_nullable_property_on_derived(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `b`.`Type`, `b`.`IsOnline` +FROM `Businesses` AS `b` +"""); + } + + public override async Task Query_generates_correct_datetime2_parameter_definition(int? fractionalSeconds, string postfix) + { + await base.Query_generates_correct_datetime2_parameter_definition(fractionalSeconds, postfix); + + AssertSql( + """ +@__parameter_0='2021-11-12T13:14:15.0000000' (DbType = DateTime) + +SELECT TOP 1 `e`.`DateTime` +FROM `Entities` AS `e` +WHERE `e`.`DateTime` = CDATE(@__parameter_0) +"""); + } + + public override async Task Query_generates_correct_datetimeoffset_parameter_definition(int? fractionalSeconds, string postfix) + { + await base.Query_generates_correct_datetimeoffset_parameter_definition(fractionalSeconds, postfix); + + AssertSql( + """ +@__parameter_0='2021-11-12T03:14:15.0000000Z' (DbType = DateTime) + +SELECT TOP 1 `e`.`DateTimeOffset` +FROM `Entities` AS `e` +WHERE `e`.`DateTimeOffset` = @__parameter_0 +"""); + } + + public override async Task Query_generates_correct_timespan_parameter_definition(int? fractionalSeconds, string postfix) + { + await base.Query_generates_correct_timespan_parameter_definition(fractionalSeconds, postfix); + + AssertSql( + """ +@__parameter_0='12:34:56.7890123' + +SELECT TOP 1 `e`.`TimeSpan` +FROM `Entities` AS `e` +WHERE `e`.`TimeSpan` = @__parameter_0 +"""); + } + + public override async Task Hierarchy_query_with_abstract_type_sibling(bool async) + { + await base.Hierarchy_query_with_abstract_type_sibling(async); + + AssertSql( + """ +SELECT `a`.`Id`, `a`.`Discriminator`, `a`.`Species`, `a`.`Name`, `a`.`EdcuationLevel`, `a`.`FavoriteToy` +FROM `Animals` AS `a` +WHERE `a`.`Discriminator` IN ('Cat', 'Dog') AND (`a`.`Species` LIKE 'F%') +"""); + } + + public override async Task Hierarchy_query_with_abstract_type_sibling_TPT(bool async) + { + await base.Hierarchy_query_with_abstract_type_sibling_TPT(async); + + AssertSql( + """ +SELECT `a`.`Id`, `a`.`Species`, `p`.`Name`, `c`.`EdcuationLevel`, `d`.`FavoriteToy`, IIF(`d`.`Id` IS NOT NULL, 'Dog', IIF(`c`.`Id` IS NOT NULL, 'Cat', NULL)) AS `Discriminator` +FROM ((`Animals` AS `a` +LEFT JOIN `Pets` AS `p` ON `a`.`Id` = `p`.`Id`) +LEFT JOIN `Cats` AS `c` ON `a`.`Id` = `c`.`Id`) +LEFT JOIN `Dogs` AS `d` ON `a`.`Id` = `d`.`Id` +WHERE (`d`.`Id` IS NOT NULL OR `c`.`Id` IS NOT NULL) AND (`a`.`Species` LIKE 'F%') +"""); + } + + public override async Task Hierarchy_query_with_abstract_type_sibling_TPC(bool async) + { + await base.Hierarchy_query_with_abstract_type_sibling_TPC(async); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Species`, `u`.`Name`, `u`.`EdcuationLevel`, `u`.`FavoriteToy`, `u`.`Discriminator` +FROM ( + SELECT `c`.`Id`, `c`.`Species`, `c`.`Name`, `c`.`EdcuationLevel`, NULL AS `FavoriteToy`, 'Cat' AS `Discriminator` + FROM `Cats` AS `c` + UNION ALL + SELECT `d`.`Id`, `d`.`Species`, `d`.`Name`, NULL AS `EdcuationLevel`, `d`.`FavoriteToy`, 'Dog' AS `Discriminator` + FROM `Dogs` AS `d` +) AS `u` +WHERE `u`.`Species` LIKE 'F%' +"""); + } + + public override async Task Two_similar_complex_properties_projected_with_split_query1() + { + await base.Two_similar_complex_properties_projected_with_split_query1(); + + AssertSql( + """ +SELECT `o`.`Id` +FROM `Offers` AS `o` +ORDER BY `o`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`NestedId`, `s`.`OfferId`, `s`.`payment_brutto`, `s`.`payment_netto`, `s`.`Id0`, `s`.`payment_brutto0`, `s`.`payment_netto0`, `o`.`Id` +FROM `Offers` AS `o` +INNER JOIN ( + SELECT `v`.`Id`, `v`.`NestedId`, `v`.`OfferId`, `v`.`payment_brutto`, `v`.`payment_netto`, `n`.`Id` AS `Id0`, `n`.`payment_brutto` AS `payment_brutto0`, `n`.`payment_netto` AS `payment_netto0` + FROM `Variation` AS `v` + LEFT JOIN `NestedEntity` AS `n` ON `v`.`NestedId` = `n`.`Id` +) AS `s` ON `o`.`Id` = `s`.`OfferId` +ORDER BY `o`.`Id` +"""); + } + + public override async Task Two_similar_complex_properties_projected_with_split_query2() + { + await base.Two_similar_complex_properties_projected_with_split_query2(); + + AssertSql( + """ +SELECT TOP 2 `o`.`Id` +FROM `Offers` AS `o` +WHERE `o`.`Id` = 1 +ORDER BY `o`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s`.`NestedId`, `s`.`OfferId`, `s`.`payment_brutto`, `s`.`payment_netto`, `s`.`Id0`, `s`.`payment_brutto0`, `s`.`payment_netto0`, `o0`.`Id` +FROM ( + SELECT TOP 1 `o`.`Id` + FROM `Offers` AS `o` + WHERE `o`.`Id` = 1 +) AS `o0` +INNER JOIN ( + SELECT `v`.`Id`, `v`.`NestedId`, `v`.`OfferId`, `v`.`payment_brutto`, `v`.`payment_netto`, `n`.`Id` AS `Id0`, `n`.`payment_brutto` AS `payment_brutto0`, `n`.`payment_netto` AS `payment_netto0` + FROM `Variation` AS `v` + LEFT JOIN `NestedEntity` AS `n` ON `v`.`NestedId` = `n`.`Id` +) AS `s` ON `o0`.`Id` = `s`.`OfferId` +ORDER BY `o0`.`Id` +"""); + } + + public override async Task Projecting_one_of_two_similar_complex_types_picks_the_correct_one() + { + await base.Projecting_one_of_two_similar_complex_types_picks_the_correct_one(); + + AssertSql( + """ +SELECT `a`.`Id`, `s`.`Info_Created0` AS `Created` +FROM ( + SELECT TOP 10 `c`.`Id`, `b`.`AId`, `b`.`Info_Created` AS `Info_Created0` + FROM `Cs` AS `c` + INNER JOIN `Bs` AS `b` ON `c`.`BId` = `b`.`Id` + WHERE `b`.`AId` = 1 + ORDER BY `c`.`Id` +) AS `s` +LEFT JOIN `As` AS `a` ON `s`.`AId` = `a`.`Id` +ORDER BY `s`.`Id` +"""); + } +} diff --git a/test/EFCore.Jet.FunctionalTests/Query/AdHocComplexTypeQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/AdHocComplexTypeQueryJetTest.cs new file mode 100644 index 00000000..20cb62c3 --- /dev/null +++ b/test/EFCore.Jet.FunctionalTests/Query/AdHocComplexTypeQueryJetTest.cs @@ -0,0 +1,37 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Threading.Tasks; +using EntityFrameworkCore.Jet.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; + +namespace EntityFrameworkCore.Jet.FunctionalTests.Query; + +public class AdHocComplexTypeQueryJetTest : AdHocComplexTypeQueryTestBase +{ + public override async Task Complex_type_equals_parameter_with_nested_types_with_property_of_same_name() + { + await base.Complex_type_equals_parameter_with_nested_types_with_property_of_same_name(); + + AssertSql( + """ +@__entity_equality_container_0_Id='1' (Nullable = true) +@__entity_equality_container_0_Containee1_Id='2' (Nullable = true) +@__entity_equality_container_0_Containee2_Id='3' (Nullable = true) + +SELECT TOP 2 `e`.`Id`, `e`.`ComplexContainer_Id`, `e`.`ComplexContainer_Containee1_Id`, `e`.`ComplexContainer_Containee2_Id` +FROM `EntityType` AS `e` +WHERE `e`.`ComplexContainer_Id` = @__entity_equality_container_0_Id AND `e`.`ComplexContainer_Containee1_Id` = @__entity_equality_container_0_Containee1_Id AND `e`.`ComplexContainer_Containee2_Id` = @__entity_equality_container_0_Containee2_Id +"""); + } + + protected TestSqlLoggerFactory TestSqlLoggerFactory + => (TestSqlLoggerFactory)ListLoggerFactory; + + protected void AssertSql(params string[] expected) + => TestSqlLoggerFactory.AssertBaseline(expected); + + protected override ITestStoreFactory TestStoreFactory + => JetTestStoreFactory.Instance; +} diff --git a/test/EFCore.Jet.FunctionalTests/Query/AdHocJsonQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/AdHocJsonQueryJetTest.cs new file mode 100644 index 00000000..ba53ecb1 --- /dev/null +++ b/test/EFCore.Jet.FunctionalTests/Query/AdHocJsonQueryJetTest.cs @@ -0,0 +1,393 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Collections.Generic; +using System.Data.Common; +using System.Threading.Tasks; +using EntityFrameworkCore.Jet.Diagnostics.Internal; +using EntityFrameworkCore.Jet.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.EntityFrameworkCore.Diagnostics.Internal; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; +using System.Linq; + +namespace EntityFrameworkCore.Jet.FunctionalTests.Query; + +#nullable disable + +public class AdHocJsonQueryJetTest : AdHocJsonQueryTestBase +{ + protected override ITestStoreFactory TestStoreFactory + => JetTestStoreFactory.Instance; + + protected override async Task Seed29219(MyContext29219 ctx) + { + var entity1 = new MyEntity29219 + { + Id = 1, + Reference = new MyJsonEntity29219 { NonNullableScalar = 10, NullableScalar = 11 }, + Collection = + [ + new() { NonNullableScalar = 100, NullableScalar = 101 }, + new() { NonNullableScalar = 200, NullableScalar = 201 }, + new() { NonNullableScalar = 300, NullableScalar = null } + ] + }; + + var entity2 = new MyEntity29219 + { + Id = 2, + Reference = new MyJsonEntity29219 { NonNullableScalar = 20, NullableScalar = null }, + Collection = [new() { NonNullableScalar = 1001, NullableScalar = null }] + }; + + ctx.Entities.AddRange(entity1, entity2); + await ctx.SaveChangesAsync(); + + await ctx.Database.ExecuteSqlAsync( + $$""" +INSERT INTO [Entities] ([Id], [Reference], [Collection]) +VALUES(3, '{ "NonNullableScalar" : 30 }', '[{ "NonNullableScalar" : 10001 }]') +"""); + } + + protected override async Task Seed30028(MyContext30028 ctx) + { + // complete + await ctx.Database.ExecuteSqlAsync( + $$$$""" +INSERT INTO [Entities] ([Id], [Json]) +VALUES( +1, +'{"RootName":"e1","Collection":[{"BranchName":"e1 c1","Nested":{"LeafName":"e1 c1 l"}},{"BranchName":"e1 c2","Nested":{"LeafName":"e1 c2 l"}}],"OptionalReference":{"BranchName":"e1 or","Nested":{"LeafName":"e1 or l"}},"RequiredReference":{"BranchName":"e1 rr","Nested":{"LeafName":"e1 rr l"}}}') +"""); + + // missing collection + await ctx.Database.ExecuteSqlAsync( + $$$$""" +INSERT INTO [Entities] ([Id], [Json]) +VALUES( +2, +'{"RootName":"e2","OptionalReference":{"BranchName":"e2 or","Nested":{"LeafName":"e2 or l"}},"RequiredReference":{"BranchName":"e2 rr","Nested":{"LeafName":"e2 rr l"}}}') +"""); + + // missing optional reference + await ctx.Database.ExecuteSqlAsync( + $$$$""" +INSERT INTO [Entities] ([Id], [Json]) +VALUES( +3, +'{"RootName":"e3","Collection":[{"BranchName":"e3 c1","Nested":{"LeafName":"e3 c1 l"}},{"BranchName":"e3 c2","Nested":{"LeafName":"e3 c2 l"}}],"RequiredReference":{"BranchName":"e3 rr","Nested":{"LeafName":"e3 rr l"}}}') +"""); + + // missing required reference + await ctx.Database.ExecuteSqlAsync( + $$$$""" +INSERT INTO [Entities] ([Id], [Json]) +VALUES( +4, +'{"RootName":"e4","Collection":[{"BranchName":"e4 c1","Nested":{"LeafName":"e4 c1 l"}},{"BranchName":"e4 c2","Nested":{"LeafName":"e4 c2 l"}}],"OptionalReference":{"BranchName":"e4 or","Nested":{"LeafName":"e4 or l"}}}') +"""); + } + + protected override Task Seed33046(Context33046 ctx) + => ctx.Database.ExecuteSqlAsync( + $$""" +INSERT INTO [Reviews] ([Rounds], [Id]) +VALUES('[{"RoundNumber":11,"SubRounds":[{"SubRoundNumber":111},{"SubRoundNumber":112}]}]', 1) +"""); + + protected override Task SeedArrayOfPrimitives(MyContextArrayOfPrimitives ctx) + { + var entity1 = new MyEntityArrayOfPrimitives + { + Id = 1, + Reference = new MyJsonEntityArrayOfPrimitives + { + IntArray = [1, 2, 3], + ListOfString = + [ + "Foo", + "Bar", + "Baz" + ] + }, + Collection = + [ + new() { IntArray = [111, 112, 113], ListOfString = ["Foo11", "Bar11"] }, + new() { IntArray = [211, 212, 213], ListOfString = ["Foo12", "Bar12"] } + ] + }; + + var entity2 = new MyEntityArrayOfPrimitives + { + Id = 2, + Reference = new MyJsonEntityArrayOfPrimitives + { + IntArray = [10, 20, 30], + ListOfString = + [ + "A", + "B", + "C" + ] + }, + Collection = + [ + new() { IntArray = [110, 120, 130], ListOfString = ["A1", "Z1"] }, + new() { IntArray = [210, 220, 230], ListOfString = ["A2", "Z2"] } + ] + }; + + ctx.Entities.AddRange(entity1, entity2); + return ctx.SaveChangesAsync(); + } + + protected override Task SeedJunkInJson(MyContextJunkInJson ctx) + => ctx.Database.ExecuteSqlAsync( + $$$$""" +INSERT INTO [Entities] ([Collection], [CollectionWithCtor], [Reference], [ReferenceWithCtor], [Id]) +VALUES( +'[{"JunkReference":{"Something":"SomeValue" },"Name":"c11","JunkProperty1":50,"Number":11.5,"JunkCollection1":[],"JunkCollection2":[{"Foo":"junk value"}],"NestedCollection":[{"DoB":"2002-04-01T00:00:00","DummyProp":"Dummy value"},{"DoB":"2002-04-02T00:00:00","DummyReference":{"Foo":5}}],"NestedReference":{"DoB":"2002-03-01T00:00:00"}},{"Name":"c12","Number":12.5,"NestedCollection":[{"DoB":"2002-06-01T00:00:00"},{"DoB":"2002-06-02T00:00:00"}],"NestedDummy":59,"NestedReference":{"DoB":"2002-05-01T00:00:00"}}]', +'[{"MyBool":true,"Name":"c11 ctor","JunkReference":{"Something":"SomeValue","JunkCollection":[{"Foo":"junk value"}]},"NestedCollection":[{"DoB":"2002-08-01T00:00:00"},{"DoB":"2002-08-02T00:00:00"}],"NestedReference":{"DoB":"2002-07-01T00:00:00"}},{"MyBool":false,"Name":"c12 ctor","NestedCollection":[{"DoB":"2002-10-01T00:00:00"},{"DoB":"2002-10-02T00:00:00"}],"JunkCollection":[{"Foo":"junk value"}],"NestedReference":{"DoB":"2002-09-01T00:00:00"}}]', +'{"Name":"r1","JunkCollection":[{"Foo":"junk value"}],"JunkReference":{"Something":"SomeValue" },"Number":1.5,"NestedCollection":[{"DoB":"2000-02-01T00:00:00","JunkReference":{"Something":"SomeValue"}},{"DoB":"2000-02-02T00:00:00"}],"NestedReference":{"DoB":"2000-01-01T00:00:00"}}', +'{"MyBool":true,"JunkCollection":[{"Foo":"junk value"}],"Name":"r1 ctor","JunkReference":{"Something":"SomeValue" },"NestedCollection":[{"DoB":"2001-02-01T00:00:00"},{"DoB":"2001-02-02T00:00:00"}],"NestedReference":{"JunkCollection":[{"Foo":"junk value"}],"DoB":"2001-01-01T00:00:00"}}', +1) +"""); + + protected override Task SeedTrickyBuffering(MyContextTrickyBuffering ctx) + => ctx.Database.ExecuteSqlAsync( + $$$""" +INSERT INTO [Entities] ([Reference], [Id]) +VALUES( +'{"Name": "r1", "Number": 7, "JunkReference":{"Something": "SomeValue" }, "JunkCollection": [{"Foo": "junk value"}], "NestedReference": {"DoB": "2000-01-01T00:00:00"}, "NestedCollection": [{"DoB": "2000-02-01T00:00:00", "JunkReference": {"Something": "SomeValue"}}, {"DoB": "2000-02-02T00:00:00"}]}',1) +"""); + + protected override Task SeedShadowProperties(MyContextShadowProperties ctx) + => ctx.Database.ExecuteSqlAsync( + $$""" +INSERT INTO [Entities] ([Collection], [CollectionWithCtor], [Reference], [ReferenceWithCtor], [Id], [Name]) +VALUES( +'[{"Name":"e1_c1","ShadowDouble":5.5},{"ShadowDouble":20.5,"Name":"e1_c2"}]', +'[{"Name":"e1_c1 ctor","ShadowNullableByte":6},{"ShadowNullableByte":null,"Name":"e1_c2 ctor"}]', +'{"Name":"e1_r", "ShadowString":"Foo"}', +'{"ShadowInt":143,"Name":"e1_r ctor"}', +1, +'e1') +"""); + + protected override async Task SeedNotICollection(MyContextNotICollection ctx) + { + await ctx.Database.ExecuteSqlAsync( + $$""" +INSERT INTO [Entities] ([Json], [Id]) +VALUES( +'{"Collection":[{"Bar":11,"Foo":"c11"},{"Bar":12,"Foo":"c12"},{"Bar":13,"Foo":"c13"}]}', +1) +"""); + + await ctx.Database.ExecuteSqlAsync( + $$$""" +INSERT INTO [Entities] ([Json], [Id]) +VALUES( +'{"Collection":[{"Bar":21,"Foo":"c21"},{"Bar":22,"Foo":"c22"}]}', +2) +"""); + } + + #region EnumLegacyValues + + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual async Task Read_enum_property_with_legacy_values(bool async) + { + var contextFactory = await InitializeAsync( + seed: SeedEnumLegacyValues); + + using (var context = contextFactory.CreateContext()) + { + var query = context.Entities.Select( + x => new + { + x.Reference.IntEnum, + x.Reference.ByteEnum, + x.Reference.LongEnum, + x.Reference.NullableEnum + }); + + var exception = async + ? await (Assert.ThrowsAsync(() => query.ToListAsync())) + : Assert.Throws(() => query.ToList()); + + // Conversion failed when converting the nvarchar value '...' to data type int + //Assert.Equal(245, exception.Number); + } + } + + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual async Task Read_json_entity_with_enum_properties_with_legacy_values(bool async) + { + var contextFactory = await InitializeAsync( + seed: SeedEnumLegacyValues, + shouldLogCategory: c => c == DbLoggerCategory.Query.Name); + + using (var context = contextFactory.CreateContext()) + { + var query = context.Entities.Select(x => x.Reference).AsNoTracking(); + + var result = async + ? await query.ToListAsync() + : query.ToList(); + + Assert.Equal(1, result.Count); + Assert.Equal(ByteEnumLegacyValues.Redmond, result[0].ByteEnum); + Assert.Equal(IntEnumLegacyValues.Foo, result[0].IntEnum); + Assert.Equal(LongEnumLegacyValues.Three, result[0].LongEnum); + Assert.Equal(ULongEnumLegacyValues.Three, result[0].ULongEnum); + Assert.Equal(IntEnumLegacyValues.Bar, result[0].NullableEnum); + } + + var testLogger = new TestLogger(); + Assert.Single( + ListLoggerFactory.Log.Where( + l => l.Message == CoreResources.LogStringEnumValueInJson(testLogger).GenerateMessage(nameof(ByteEnumLegacyValues)))); + Assert.Single( + ListLoggerFactory.Log.Where( + l => l.Message == CoreResources.LogStringEnumValueInJson(testLogger).GenerateMessage(nameof(IntEnumLegacyValues)))); + Assert.Single( + ListLoggerFactory.Log.Where( + l => l.Message == CoreResources.LogStringEnumValueInJson(testLogger).GenerateMessage(nameof(LongEnumLegacyValues)))); + Assert.Single( + ListLoggerFactory.Log.Where( + l => l.Message == CoreResources.LogStringEnumValueInJson(testLogger).GenerateMessage(nameof(ULongEnumLegacyValues)))); + } + + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual async Task Read_json_entity_collection_with_enum_properties_with_legacy_values(bool async) + { + var contextFactory = await InitializeAsync( + seed: SeedEnumLegacyValues, + shouldLogCategory: c => c == DbLoggerCategory.Query.Name); + + using (var context = contextFactory.CreateContext()) + { + var query = context.Entities.Select(x => x.Collection).AsNoTracking(); + + var result = async + ? await query.ToListAsync() + : query.ToList(); + + Assert.Equal(1, result.Count); + Assert.Equal(2, result[0].Count); + Assert.Equal(ByteEnumLegacyValues.Bellevue, result[0][0].ByteEnum); + Assert.Equal(IntEnumLegacyValues.Foo, result[0][0].IntEnum); + Assert.Equal(LongEnumLegacyValues.One, result[0][0].LongEnum); + Assert.Equal(ULongEnumLegacyValues.One, result[0][0].ULongEnum); + Assert.Equal(IntEnumLegacyValues.Bar, result[0][0].NullableEnum); + Assert.Equal(ByteEnumLegacyValues.Seattle, result[0][1].ByteEnum); + Assert.Equal(IntEnumLegacyValues.Baz, result[0][1].IntEnum); + Assert.Equal(LongEnumLegacyValues.Two, result[0][1].LongEnum); + Assert.Equal(ULongEnumLegacyValues.Two, result[0][1].ULongEnum); + Assert.Null(result[0][1].NullableEnum); + } + + var testLogger = new TestLogger(); + Assert.Single( + ListLoggerFactory.Log.Where( + l => l.Message == CoreResources.LogStringEnumValueInJson(testLogger).GenerateMessage(nameof(ByteEnumLegacyValues)))); + Assert.Single( + ListLoggerFactory.Log.Where( + l => l.Message == CoreResources.LogStringEnumValueInJson(testLogger).GenerateMessage(nameof(IntEnumLegacyValues)))); + Assert.Single( + ListLoggerFactory.Log.Where( + l => l.Message == CoreResources.LogStringEnumValueInJson(testLogger).GenerateMessage(nameof(LongEnumLegacyValues)))); + Assert.Single( + ListLoggerFactory.Log.Where( + l => l.Message == CoreResources.LogStringEnumValueInJson(testLogger).GenerateMessage(nameof(ULongEnumLegacyValues)))); + } + + private Task SeedEnumLegacyValues(MyContextEnumLegacyValues ctx) + => ctx.Database.ExecuteSqlAsync( + $$""" +INSERT INTO [Entities] ([Collection], [Reference], [Id], [Name]) +VALUES( +'[{"ByteEnum":"Bellevue","IntEnum":"Foo","LongEnum":"One","ULongEnum":"One","Name":"e1_c1","NullableEnum":"Bar"},{"ByteEnum":"Seattle","IntEnum":"Baz","LongEnum":"Two","ULongEnum":"Two","Name":"e1_c2","NullableEnum":null}]', +'{"ByteEnum":"Redmond","IntEnum":"Foo","LongEnum":"Three","ULongEnum":"Three","Name":"e1_r","NullableEnum":"Bar"}', +1, +'e1') +"""); + + private class MyContextEnumLegacyValues(DbContextOptions options) : DbContext((new DbContextOptionsBuilder(options)).ConfigureWarnings(b => b.Log(CoreEventId.StringEnumValueInJson)).Options) + { + + // ReSharper disable once UnusedAutoPropertyAccessor.Local + public DbSet Entities { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity().Property(x => x.Id).ValueGeneratedNever(); + modelBuilder.Entity().OwnsOne(x => x.Reference, b => b.ToJson()); + modelBuilder.Entity().OwnsMany(x => x.Collection, b => b.ToJson()); + } + } + + private class MyEntityEnumLegacyValues + { + public int Id { get; set; } + public string Name { get; set; } + + public MyJsonEntityEnumLegacyValues Reference { get; set; } + public List Collection { get; set; } + } + + private class MyJsonEntityEnumLegacyValues + { + public string Name { get; set; } + + // ReSharper disable once UnusedAutoPropertyAccessor.Local + public IntEnumLegacyValues IntEnum { get; set; } + // ReSharper disable once UnusedAutoPropertyAccessor.Local + public ByteEnumLegacyValues ByteEnum { get; set; } + // ReSharper disable once UnusedAutoPropertyAccessor.Local + public LongEnumLegacyValues LongEnum { get; set; } + // ReSharper disable once UnusedAutoPropertyAccessor.Local + public ULongEnumLegacyValues ULongEnum { get; set; } + // ReSharper disable once UnusedAutoPropertyAccessor.Local + public IntEnumLegacyValues? NullableEnum { get; set; } + } + + private enum IntEnumLegacyValues + { + Foo = int.MinValue, + Bar, + Baz = int.MaxValue, + } + + private enum ByteEnumLegacyValues : byte + { + Seattle, + Redmond, + Bellevue = 255, + } + + private enum LongEnumLegacyValues : long + { + One = long.MinValue, + Two = 1, + Three = long.MaxValue, + } + + private enum ULongEnumLegacyValues : ulong + { + One = ulong.MinValue, + Two = 1, + Three = ulong.MaxValue, + } + + #endregion +} diff --git a/test/EFCore.Jet.FunctionalTests/Query/ManyToManyHeterogeneousQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/AdHocManyToManyQueryJetTest.cs similarity index 55% rename from test/EFCore.Jet.FunctionalTests/Query/ManyToManyHeterogeneousQueryJetTest.cs rename to test/EFCore.Jet.FunctionalTests/Query/AdHocManyToManyQueryJetTest.cs index f345a9e3..b73fc21d 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/ManyToManyHeterogeneousQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/AdHocManyToManyQueryJetTest.cs @@ -10,72 +10,99 @@ namespace EntityFrameworkCore.Jet.FunctionalTests.Query; -public class ManyToManyHeterogeneousQueryJetTest : ManyToManyHeterogeneousQueryRelationalTestBase +#nullable disable + +public class AdHocManyToManyQueryJetTest : AdHocManyToManyQueryRelationalTestBase { protected override ITestStoreFactory TestStoreFactory => JetTestStoreFactory.Instance; + public override async Task SelectMany_with_collection_selector_having_subquery() + { + await base.SelectMany_with_collection_selector_having_subquery(); + + AssertSql( + """ +SELECT [u].[Id] AS [UserId], [s].[Id] AS [OrgId] +FROM [Users] AS [u] +CROSS JOIN ( + SELECT [o1].[Id] + FROM ( + SELECT 1 AS empty + ) AS [e] + LEFT JOIN ( + SELECT [o].[Id] + FROM [Organisations] AS [o] + WHERE EXISTS ( + SELECT 1 + FROM [OrganisationUser] AS [o0] + WHERE [o].[Id] = [o0].[OrganisationId]) + ) AS [o1] ON 1 = 1 +) AS [s] +"""); + } + public override async Task Many_to_many_load_works_when_join_entity_has_custom_key(bool async) { await base.Many_to_many_load_works_when_join_entity_has_custom_key(async); AssertSql( -$""" + """ @__p_0='1' SELECT TOP 1 `m`.`Id` FROM `ManyM_DB` AS `m` -WHERE `m`.`Id` = {AssertSqlHelper.Parameter("@__p_0")} +WHERE `m`.`Id` = @__p_0 """, // -$""" + """ @__p_0='1' @__p_0='1' -SELECT `t`.`Id`, `m`.`Id`, `t`.`Id0`, `t0`.`Id`, `t0`.`ManyM_Id`, `t0`.`ManyN_Id`, `t0`.`Id0` +SELECT `s`.`Id`, `m`.`Id`, `s`.`Id0`, `s0`.`Id`, `s0`.`ManyM_Id`, `s0`.`ManyN_Id`, `s0`.`Id0` FROM (`ManyM_DB` AS `m` INNER JOIN ( SELECT `m1`.`Id`, `m0`.`Id` AS `Id0`, `m0`.`ManyM_Id` FROM `ManyMN_DB` AS `m0` LEFT JOIN `ManyN_DB` AS `m1` ON `m0`.`ManyN_Id` = `m1`.`Id` -) AS `t` ON `m`.`Id` = `t`.`ManyM_Id`) +) AS `s` ON `m`.`Id` = `s`.`ManyM_Id`) LEFT JOIN ( SELECT `m2`.`Id`, `m2`.`ManyM_Id`, `m2`.`ManyN_Id`, `m3`.`Id` AS `Id0` FROM `ManyMN_DB` AS `m2` INNER JOIN `ManyM_DB` AS `m3` ON `m2`.`ManyM_Id` = `m3`.`Id` - WHERE `m3`.`Id` = {AssertSqlHelper.Parameter("@__p_0")} -) AS `t0` ON `t`.`Id` = `t0`.`ManyN_Id` -WHERE `m`.`Id` = {AssertSqlHelper.Parameter("@__p_0")} -ORDER BY `m`.`Id`, `t`.`Id0`, `t`.`Id`, `t0`.`Id` + WHERE `m3`.`Id` = @__p_0 +) AS `s0` ON `s`.`Id` = `s0`.`ManyN_Id` +WHERE `m`.`Id` = @__p_0 +ORDER BY `m`.`Id`, `s`.`Id0`, `s`.`Id`, `s0`.`Id` """, // -$""" + """ @__p_0='1' SELECT TOP 1 `m`.`Id` FROM `ManyN_DB` AS `m` -WHERE `m`.`Id` = {AssertSqlHelper.Parameter("@__p_0")} +WHERE `m`.`Id` = @__p_0 """, // -$""" + """ @__p_0='1' @__p_0='1' -SELECT `t`.`Id`, `m`.`Id`, `t`.`Id0`, `t0`.`Id`, `t0`.`ManyM_Id`, `t0`.`ManyN_Id`, `t0`.`Id0` +SELECT `s`.`Id`, `m`.`Id`, `s`.`Id0`, `s0`.`Id`, `s0`.`ManyM_Id`, `s0`.`ManyN_Id`, `s0`.`Id0` FROM (`ManyN_DB` AS `m` INNER JOIN ( SELECT `m1`.`Id`, `m0`.`Id` AS `Id0`, `m0`.`ManyN_Id` FROM `ManyMN_DB` AS `m0` INNER JOIN `ManyM_DB` AS `m1` ON `m0`.`ManyM_Id` = `m1`.`Id` -) AS `t` ON `m`.`Id` = `t`.`ManyN_Id`) +) AS `s` ON `m`.`Id` = `s`.`ManyN_Id`) LEFT JOIN ( SELECT `m2`.`Id`, `m2`.`ManyM_Id`, `m2`.`ManyN_Id`, `m3`.`Id` AS `Id0` FROM `ManyMN_DB` AS `m2` INNER JOIN `ManyN_DB` AS `m3` ON `m2`.`ManyN_Id` = `m3`.`Id` - WHERE `m3`.`Id` = {AssertSqlHelper.Parameter("@__p_0")} -) AS `t0` ON `t`.`Id` = `t0`.`ManyM_Id` -WHERE `m`.`Id` = {AssertSqlHelper.Parameter("@__p_0")} -ORDER BY `m`.`Id`, `t`.`Id0`, `t`.`Id`, `t0`.`Id` + WHERE `m3`.`Id` = @__p_0 +) AS `s0` ON `s`.`Id` = `s0`.`ManyM_Id` +WHERE `m`.`Id` = @__p_0 +ORDER BY `m`.`Id`, `s`.`Id0`, `s`.`Id`, `s0`.`Id` """); } } diff --git a/test/EFCore.Jet.FunctionalTests/Query/AdHocMiscellaneousQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/AdHocMiscellaneousQueryJetTest.cs new file mode 100644 index 00000000..00e99451 --- /dev/null +++ b/test/EFCore.Jet.FunctionalTests/Query/AdHocMiscellaneousQueryJetTest.cs @@ -0,0 +1,1963 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +// ReSharper disable InconsistentNaming + +using System; +using System.Collections; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using System.Data; +using System.Linq; +using System.Threading.Tasks; +using EntityFrameworkCore.Jet.FunctionalTests.TestUtilities; +using EntityFrameworkCore.Jet.Infrastructure.Internal; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Microsoft.EntityFrameworkCore.TestUtilities; +using NetTopologySuite.Geometries; +using Xunit; + +namespace EntityFrameworkCore.Jet.FunctionalTests.Query; + +#nullable disable + +public class AdHocMiscellaneousQueryJetTest : AdHocMiscellaneousQueryRelationalTestBase +{ + protected override ITestStoreFactory TestStoreFactory + => JetTestStoreFactory.Instance; + + protected override Task Seed2951(Context2951 context) + => context.Database.ExecuteSqlRawAsync( + """ +CREATE TABLE ZeroKey (Id int); +INSERT ZeroKey VALUES (NULL) +"""); + + #region 5456 + + [ConditionalFact] + public virtual async Task Include_group_join_is_per_query_context() + { + var contextFactory = await InitializeAsync( + seed: c => c.SeedAsync(), + createTestStore: async () => await JetTestStore.CreateInitializedAsync(StoreName, multipleActiveResultSets: true)); + + Parallel.For( + 0, 10, i => + { + using var ctx = contextFactory.CreateContext(); + var result = ctx.Posts.Where(x => x.Blog.Id > 1).Include(x => x.Blog).ToList(); + + Assert.Equal(198, result.Count); + }); + + Parallel.For( + 0, 10, i => + { + using var ctx = contextFactory.CreateContext(); + var result = ctx.Posts.Where(x => x.Blog.Id > 1).Include(x => x.Blog).Include(x => x.Comments).ToList(); + + Assert.Equal(198, result.Count); + }); + + Parallel.For( + 0, 10, i => + { + using var ctx = contextFactory.CreateContext(); + var result = ctx.Posts.Where(x => x.Blog.Id > 1).Include(x => x.Blog).ThenInclude(b => b.Author).ToList(); + + Assert.Equal(198, result.Count); + }); + } + + [ConditionalFact] + public virtual async Task Include_group_join_is_per_query_context_async() + { + var contextFactory = await InitializeAsync( + seed: c => c.SeedAsync(), + createTestStore: async () => await JetTestStore.CreateInitializedAsync(StoreName, multipleActiveResultSets: true)); + + await Parallel.ForAsync( + 0, 10, async (i, ct) => + { + using var ctx = contextFactory.CreateContext(); + var result = await ctx.Posts.Where(x => x.Blog.Id > 1).Include(x => x.Blog).ToListAsync(); + + Assert.Equal(198, result.Count); + }); + + await Parallel.ForAsync( + 0, 10, async (i, ct) => + { + using var ctx = contextFactory.CreateContext(); + var result = await ctx.Posts.Where(x => x.Blog.Id > 1).Include(x => x.Blog).Include(x => x.Comments) + .ToListAsync(); + + Assert.Equal(198, result.Count); + }); + + await Parallel.ForAsync( + 0, 10, async (i, ct) => + { + using var ctx = contextFactory.CreateContext(); + var result = await ctx.Posts.Where(x => x.Blog.Id > 1).Include(x => x.Blog).ThenInclude(b => b.Author) + .ToListAsync(); + + Assert.Equal(198, result.Count); + }); + } + + private class Context5456(DbContextOptions options) : DbContext(options) + { + public DbSet Blogs { get; set; } + public DbSet Posts { get; set; } + public DbSet Comments { get; set; } + public DbSet Authors { get; set; } + + public Task SeedAsync() + { + for (var i = 0; i < 100; i++) + { + Add( + new Blog { Posts = [new() { Comments = [new(), new()] }, new()], Author = new Author() }); + } + + return SaveChangesAsync(); + } + + public class Blog + { + public int Id { get; set; } + public List Posts { get; set; } + public Author Author { get; set; } + } + + public class Author + { + public int Id { get; set; } + public List Blogs { get; set; } + } + + public class Post + { + public int Id { get; set; } + public Blog Blog { get; set; } + public List Comments { get; set; } + } + + public class Comment + { + public int Id { get; set; } + public Post Blog { get; set; } + } + } + + #endregion + + #region 8864 + + [ConditionalFact] + public virtual async Task Select_nested_projection() + { + var contextFactory = await InitializeAsync(seed: c => c.SeedAsync()); + + using (var context = contextFactory.CreateContext()) + { + var customers = context.Customers + .Select(c => new { Customer = c, CustomerAgain = Context8864.Get(context, c.Id) }) + .ToList(); + + Assert.Equal(2, customers.Count); + + foreach (var customer in customers) + { + Assert.Same(customer.Customer, customer.CustomerAgain); + } + } + + AssertSql( + """ +SELECT `c`.`Id`, `c`.`Name` +FROM `Customers` AS `c` +""", + // + """ +@__id_0='1' + +SELECT TOP 2 `c`.`Id`, `c`.`Name` +FROM `Customers` AS `c` +WHERE `c`.`Id` = @__id_0 +""", + // + """ +@__id_0='2' + +SELECT TOP 2 `c`.`Id`, `c`.`Name` +FROM `Customers` AS `c` +WHERE `c`.`Id` = @__id_0 +"""); + } + + private class Context8864(DbContextOptions options) : DbContext(options) + { + public DbSet Customers { get; set; } + + public Task SeedAsync() + { + AddRange( + new Customer { Name = "Alan" }, + new Customer { Name = "Elon" }); + + return SaveChangesAsync(); + } + + public static Customer Get(Context8864 context, int id) + => context.Customers.Single(c => c.Id == id); + + public class Customer + { + public int Id { get; set; } + public string Name { get; set; } + } + } + + #endregion + + #region 12482 + + [ConditionalFact] + public virtual async Task Batch_insert_with_sqlvariant_different_types() + { + var contextFactory = await InitializeAsync(); + + using (var context = contextFactory.CreateContext()) + { + context.AddRange( + new Context12482.BaseEntity { Value = 10.0999 }, + new Context12482.BaseEntity { Value = -12345 }, + new Context12482.BaseEntity { Value = "String Value" }, + new Context12482.BaseEntity { Value = new DateTime(2020, 1, 1) }); + + context.SaveChanges(); + + AssertSql( + """ +@p0='10.0999' (Nullable = true) (DbType = Object) +@p1='-12345' (Nullable = true) (DbType = Object) +@p2='String Value' (Size = 12) (DbType = Object) +@p3='2020-01-01T00:00:00.0000000' (Nullable = true) (DbType = Object) + +SET IMPLICIT_TRANSACTIONS OFF; +SET NOCOUNT ON; +MERGE [BaseEntities] USING ( +VALUES (@p0, 0), +(@p1, 1), +(@p2, 2), +(@p3, 3)) AS i ([Value], _Position) ON 1=0 +WHEN NOT MATCHED THEN +INSERT ([Value]) +VALUES (i.[Value]) +OUTPUT INSERTED.[Id], i._Position; +"""); + } + } + + private class Context12482(DbContextOptions options) : DbContext(options) + { + public virtual DbSet BaseEntities { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + => modelBuilder.Entity(); + + public class BaseEntity + { + public int Id { get; set; } + + [Column(TypeName = "sql_variant")] + public object Value { get; set; } + } + } + + #endregion + + #region 12518 + + [ConditionalFact] + public virtual async Task Projecting_entity_with_value_converter_and_include_works() + { + var contextFactory = await InitializeAsync(seed: c => c.SeedAsync()); + using var context = contextFactory.CreateContext(); + var result = context.Parents.Include(p => p.Child).OrderBy(e => e.Id).FirstOrDefault(); + + AssertSql( + """ +SELECT TOP(1) [p].[Id], [p].[ChildId], [c].[Id], [c].[ParentId], [c].[ULongRowVersion] +FROM [Parents] AS [p] +LEFT JOIN [Children] AS [c] ON [p].[ChildId] = [c].[Id] +ORDER BY [p].[Id] +"""); + } + + [ConditionalFact] + public virtual async Task Projecting_column_with_value_converter_of_ulong_byte_array() + { + var contextFactory = await InitializeAsync(seed: c => c.SeedAsync()); + using var context = contextFactory.CreateContext(); + var result = context.Parents.OrderBy(e => e.Id).Select(p => (ulong?)p.Child.ULongRowVersion).FirstOrDefault(); + + AssertSql( + """ +SELECT TOP(1) [c].[ULongRowVersion] +FROM [Parents] AS [p] +LEFT JOIN [Children] AS [c] ON [p].[ChildId] = [c].[Id] +ORDER BY [p].[Id] +"""); + } + + protected class Context12518(DbContextOptions options) : DbContext(options) + { + public virtual DbSet Parents { get; set; } + public virtual DbSet Children { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + var child = modelBuilder.Entity(); + child.HasOne(_ => _.Parent) + .WithOne(_ => _.Child) + .HasForeignKey(_ => _.ChildId); + child.Property(x => x.ULongRowVersion) + .HasConversion(new NumberToBytesConverter()) + .IsRowVersion() + .IsRequired() + .HasColumnType("RowVersion"); + + modelBuilder.Entity(); + } + + public Task SeedAsync() + { + Parents.Add(new Parent12518()); + return SaveChangesAsync(); + } + + public class Parent12518 + { + public Guid Id { get; set; } = Guid.NewGuid(); + public Guid? ChildId { get; set; } + public Child12518 Child { get; set; } + } + + public class Child12518 + { + public Guid Id { get; set; } = Guid.NewGuid(); + public ulong ULongRowVersion { get; set; } + public Guid ParentId { get; set; } + public Parent12518 Parent { get; set; } + } + } + + #endregion + + #region 13118 + + [ConditionalFact] + public virtual async Task DateTime_Contains_with_smalldatetime_generates_correct_literal() + { + var contextFactory = await InitializeAsync(seed: c => c.SeedAsync()); + using var context = contextFactory.CreateContext(); + var testDateList = new List { new(2018, 10, 07) }; + var findRecordsWithDateInList = context.ReproEntity + .Where(a => testDateList.Contains(a.MyTime)) + .ToList(); + + Assert.Single((IEnumerable)findRecordsWithDateInList); + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`MyTime` +FROM `ReproEntity` AS `r` +WHERE `r`.`MyTime` = #2018-10-07# +"""); + } + + private class Context13118(DbContextOptions options) : DbContext(options) + { + public virtual DbSet ReproEntity { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + => modelBuilder.Entity(e => e.Property("MyTime").HasColumnType("smalldatetime")); + + public Task SeedAsync() + { + AddRange( + new ReproEntity13118 { MyTime = new DateTime(2018, 10, 07) }, + new ReproEntity13118 { MyTime = new DateTime(2018, 10, 08) }); + + return SaveChangesAsync(); + } + } + + private class ReproEntity13118 + { + public Guid Id { get; set; } + public DateTime MyTime { get; set; } + } + + #endregion + + #region 14095 + + [ConditionalTheory] + [InlineData(false)] + [InlineData(true)] + public async Task Where_equals_DateTime_Now(bool async) + { + var contextFactory = await InitializeAsync(seed: c => c.SeedAsync()); + + using var context = contextFactory.CreateContext(); + var query = context.Dates.Where( + d => d.DateTime2_2 == DateTime.Now + || d.DateTime2_7 == DateTime.Now + || d.DateTime == DateTime.Now + || d.SmallDateTime == DateTime.Now); + + var results = async + ? await query.ToListAsync() + : query.ToList(); + + Assert.Empty(results); + + AssertSql( + """ +SELECT [d].[Id], [d].[DateTime], [d].[DateTime2], [d].[DateTime2_0], [d].[DateTime2_1], [d].[DateTime2_2], [d].[DateTime2_3], [d].[DateTime2_4], [d].[DateTime2_5], [d].[DateTime2_6], [d].[DateTime2_7], [d].[SmallDateTime] +FROM [Dates] AS [d] +WHERE [d].[DateTime2_2] = GETDATE() OR [d].[DateTime2_7] = GETDATE() OR [d].[DateTime] = GETDATE() OR [d].[SmallDateTime] = GETDATE() +"""); + } + + [ConditionalTheory] + [InlineData(false)] + [InlineData(true)] + public async Task Where_not_equals_DateTime_Now(bool async) + { + var contextFactory = await InitializeAsync(seed: c => c.SeedAsync()); + + using var context = contextFactory.CreateContext(); + var query = context.Dates.Where( + d => d.DateTime2_2 != DateTime.Now + && d.DateTime2_7 != DateTime.Now + && d.DateTime != DateTime.Now + && d.SmallDateTime != DateTime.Now); + + var results = async + ? await query.ToListAsync() + : query.ToList(); + + Assert.Single((IEnumerable)results); + + AssertSql( + """ +SELECT [d].[Id], [d].[DateTime], [d].[DateTime2], [d].[DateTime2_0], [d].[DateTime2_1], [d].[DateTime2_2], [d].[DateTime2_3], [d].[DateTime2_4], [d].[DateTime2_5], [d].[DateTime2_6], [d].[DateTime2_7], [d].[SmallDateTime] +FROM [Dates] AS [d] +WHERE [d].[DateTime2_2] <> GETDATE() AND [d].[DateTime2_7] <> GETDATE() AND [d].[DateTime] <> GETDATE() AND [d].[SmallDateTime] <> GETDATE() +"""); + } + + [ConditionalTheory] + [InlineData(false)] + [InlineData(true)] + public async Task Where_equals_new_DateTime(bool async) + { + var contextFactory = await InitializeAsync(seed: c => c.SeedAsync()); + + using var context = contextFactory.CreateContext(); + var query = context.Dates.Where( + d => d.SmallDateTime == new DateTime(1970, 9, 3, 12, 0, 0) + && d.DateTime == new DateTime(1971, 9, 3, 12, 0, 10, 220) + && d.DateTime2 == new DateTime(1972, 9, 3, 12, 0, 10, 333) + && d.DateTime2_0 == new DateTime(1973, 9, 3, 12, 0, 10) + && d.DateTime2_1 == new DateTime(1974, 9, 3, 12, 0, 10, 500) + && d.DateTime2_2 == new DateTime(1975, 9, 3, 12, 0, 10, 660) + && d.DateTime2_3 == new DateTime(1976, 9, 3, 12, 0, 10, 777) + && d.DateTime2_4 == new DateTime(1977, 9, 3, 12, 0, 10, 888) + && d.DateTime2_5 == new DateTime(1978, 9, 3, 12, 0, 10, 999) + && d.DateTime2_6 == new DateTime(1979, 9, 3, 12, 0, 10, 111) + && d.DateTime2_7 == new DateTime(1980, 9, 3, 12, 0, 10, 222)); + + var results = async + ? await query.ToListAsync() + : query.ToList(); + + Assert.Single((IEnumerable)results); + + AssertSql( + """ +SELECT [d].[Id], [d].[DateTime], [d].[DateTime2], [d].[DateTime2_0], [d].[DateTime2_1], [d].[DateTime2_2], [d].[DateTime2_3], [d].[DateTime2_4], [d].[DateTime2_5], [d].[DateTime2_6], [d].[DateTime2_7], [d].[SmallDateTime] +FROM [Dates] AS [d] +WHERE [d].[SmallDateTime] = '1970-09-03T12:00:00' AND [d].[DateTime] = '1971-09-03T12:00:10.220' AND [d].[DateTime2] = '1972-09-03T12:00:10.3330000' AND [d].[DateTime2_0] = '1973-09-03T12:00:10' AND [d].[DateTime2_1] = '1974-09-03T12:00:10.5' AND [d].[DateTime2_2] = '1975-09-03T12:00:10.66' AND [d].[DateTime2_3] = '1976-09-03T12:00:10.777' AND [d].[DateTime2_4] = '1977-09-03T12:00:10.8880' AND [d].[DateTime2_5] = '1978-09-03T12:00:10.99900' AND [d].[DateTime2_6] = '1979-09-03T12:00:10.111000' AND [d].[DateTime2_7] = '1980-09-03T12:00:10.2220000' +"""); + } + + [ConditionalTheory] + [InlineData(false)] + [InlineData(true)] + public async Task Where_contains_DateTime_literals(bool async) + { + var dateTimes = new[] + { + new DateTime(1970, 9, 3, 12, 0, 0), + new DateTime(1971, 9, 3, 12, 0, 10, 220), + new DateTime(1972, 9, 3, 12, 0, 10, 333), + new DateTime(1973, 9, 3, 12, 0, 10), + new DateTime(1974, 9, 3, 12, 0, 10, 500), + new DateTime(1975, 9, 3, 12, 0, 10, 660), + new DateTime(1976, 9, 3, 12, 0, 10, 777), + new DateTime(1977, 9, 3, 12, 0, 10, 888), + new DateTime(1978, 9, 3, 12, 0, 10, 999), + new DateTime(1979, 9, 3, 12, 0, 10, 111), + new DateTime(1980, 9, 3, 12, 0, 10, 222) + }; + + var contextFactory = await InitializeAsync(seed: c => c.SeedAsync()); + + using var context = contextFactory.CreateContext(); + var query = context.Dates.Where( + d => dateTimes.Contains(d.SmallDateTime) + && dateTimes.Contains(d.DateTime) + && dateTimes.Contains(d.DateTime2) + && dateTimes.Contains(d.DateTime2_0) + && dateTimes.Contains(d.DateTime2_1) + && dateTimes.Contains(d.DateTime2_2) + && dateTimes.Contains(d.DateTime2_3) + && dateTimes.Contains(d.DateTime2_4) + && dateTimes.Contains(d.DateTime2_5) + && dateTimes.Contains(d.DateTime2_6) + && dateTimes.Contains(d.DateTime2_7)); + + var results = async + ? await query.ToListAsync() + : query.ToList(); + + Assert.Single((IEnumerable)results); + + AssertSql( + """ +@__dateTimes_0='["1970-09-03T12:00:00","1971-09-03T12:00:10.22","1972-09-03T12:00:10.333","1973-09-03T12:00:10","1974-09-03T12:00:10.5","1975-09-03T12:00:10.66","1976-09-03T12:00:10.777","1977-09-03T12:00:10.888","1978-09-03T12:00:10.999","1979-09-03T12:00:10.111","1980-09-03T12:00:10.222"]' (Size = 4000) +@__dateTimes_0_1='["1970-09-03T12:00:00","1971-09-03T12:00:10.22","1972-09-03T12:00:10.333","1973-09-03T12:00:10","1974-09-03T12:00:10.5","1975-09-03T12:00:10.66","1976-09-03T12:00:10.777","1977-09-03T12:00:10.888","1978-09-03T12:00:10.999","1979-09-03T12:00:10.111","1980-09-03T12:00:10.222"]' (Size = 4000) +@__dateTimes_0_2='["1970-09-03T12:00:00","1971-09-03T12:00:10.22","1972-09-03T12:00:10.333","1973-09-03T12:00:10","1974-09-03T12:00:10.5","1975-09-03T12:00:10.66","1976-09-03T12:00:10.777","1977-09-03T12:00:10.888","1978-09-03T12:00:10.999","1979-09-03T12:00:10.111","1980-09-03T12:00:10.222"]' (Size = 4000) +@__dateTimes_0_3='["1970-09-03T12:00:00","1971-09-03T12:00:10.22","1972-09-03T12:00:10.333","1973-09-03T12:00:10","1974-09-03T12:00:10.5","1975-09-03T12:00:10.66","1976-09-03T12:00:10.777","1977-09-03T12:00:10.888","1978-09-03T12:00:10.999","1979-09-03T12:00:10.111","1980-09-03T12:00:10.222"]' (Size = 4000) +@__dateTimes_0_4='["1970-09-03T12:00:00","1971-09-03T12:00:10.22","1972-09-03T12:00:10.333","1973-09-03T12:00:10","1974-09-03T12:00:10.5","1975-09-03T12:00:10.66","1976-09-03T12:00:10.777","1977-09-03T12:00:10.888","1978-09-03T12:00:10.999","1979-09-03T12:00:10.111","1980-09-03T12:00:10.222"]' (Size = 4000) +@__dateTimes_0_5='["1970-09-03T12:00:00","1971-09-03T12:00:10.22","1972-09-03T12:00:10.333","1973-09-03T12:00:10","1974-09-03T12:00:10.5","1975-09-03T12:00:10.66","1976-09-03T12:00:10.777","1977-09-03T12:00:10.888","1978-09-03T12:00:10.999","1979-09-03T12:00:10.111","1980-09-03T12:00:10.222"]' (Size = 4000) +@__dateTimes_0_6='["1970-09-03T12:00:00","1971-09-03T12:00:10.22","1972-09-03T12:00:10.333","1973-09-03T12:00:10","1974-09-03T12:00:10.5","1975-09-03T12:00:10.66","1976-09-03T12:00:10.777","1977-09-03T12:00:10.888","1978-09-03T12:00:10.999","1979-09-03T12:00:10.111","1980-09-03T12:00:10.222"]' (Size = 4000) +@__dateTimes_0_7='["1970-09-03T12:00:00","1971-09-03T12:00:10.22","1972-09-03T12:00:10.333","1973-09-03T12:00:10","1974-09-03T12:00:10.5","1975-09-03T12:00:10.66","1976-09-03T12:00:10.777","1977-09-03T12:00:10.888","1978-09-03T12:00:10.999","1979-09-03T12:00:10.111","1980-09-03T12:00:10.222"]' (Size = 4000) +@__dateTimes_0_8='["1970-09-03T12:00:00","1971-09-03T12:00:10.22","1972-09-03T12:00:10.333","1973-09-03T12:00:10","1974-09-03T12:00:10.5","1975-09-03T12:00:10.66","1976-09-03T12:00:10.777","1977-09-03T12:00:10.888","1978-09-03T12:00:10.999","1979-09-03T12:00:10.111","1980-09-03T12:00:10.222"]' (Size = 4000) +@__dateTimes_0_9='["1970-09-03T12:00:00","1971-09-03T12:00:10.22","1972-09-03T12:00:10.333","1973-09-03T12:00:10","1974-09-03T12:00:10.5","1975-09-03T12:00:10.66","1976-09-03T12:00:10.777","1977-09-03T12:00:10.888","1978-09-03T12:00:10.999","1979-09-03T12:00:10.111","1980-09-03T12:00:10.222"]' (Size = 4000) +@__dateTimes_0_10='["1970-09-03T12:00:00","1971-09-03T12:00:10.22","1972-09-03T12:00:10.333","1973-09-03T12:00:10","1974-09-03T12:00:10.5","1975-09-03T12:00:10.66","1976-09-03T12:00:10.777","1977-09-03T12:00:10.888","1978-09-03T12:00:10.999","1979-09-03T12:00:10.111","1980-09-03T12:00:10.222"]' (Size = 4000) + +SELECT [d].[Id], [d].[DateTime], [d].[DateTime2], [d].[DateTime2_0], [d].[DateTime2_1], [d].[DateTime2_2], [d].[DateTime2_3], [d].[DateTime2_4], [d].[DateTime2_5], [d].[DateTime2_6], [d].[DateTime2_7], [d].[SmallDateTime] +FROM [Dates] AS [d] +WHERE [d].[SmallDateTime] IN ( + SELECT [d0].[value] + FROM OPENJSON(@__dateTimes_0) WITH ([value] smalldatetime '$') AS [d0] +) AND [d].[DateTime] IN ( + SELECT [d1].[value] + FROM OPENJSON(@__dateTimes_0_1) WITH ([value] datetime '$') AS [d1] +) AND [d].[DateTime2] IN ( + SELECT [d2].[value] + FROM OPENJSON(@__dateTimes_0_2) WITH ([value] datetime2 '$') AS [d2] +) AND [d].[DateTime2_0] IN ( + SELECT [d3].[value] + FROM OPENJSON(@__dateTimes_0_3) WITH ([value] datetime2(0) '$') AS [d3] +) AND [d].[DateTime2_1] IN ( + SELECT [d4].[value] + FROM OPENJSON(@__dateTimes_0_4) WITH ([value] datetime2(1) '$') AS [d4] +) AND [d].[DateTime2_2] IN ( + SELECT [d5].[value] + FROM OPENJSON(@__dateTimes_0_5) WITH ([value] datetime2(2) '$') AS [d5] +) AND [d].[DateTime2_3] IN ( + SELECT [d6].[value] + FROM OPENJSON(@__dateTimes_0_6) WITH ([value] datetime2(3) '$') AS [d6] +) AND [d].[DateTime2_4] IN ( + SELECT [d7].[value] + FROM OPENJSON(@__dateTimes_0_7) WITH ([value] datetime2(4) '$') AS [d7] +) AND [d].[DateTime2_5] IN ( + SELECT [d8].[value] + FROM OPENJSON(@__dateTimes_0_8) WITH ([value] datetime2(5) '$') AS [d8] +) AND [d].[DateTime2_6] IN ( + SELECT [d9].[value] + FROM OPENJSON(@__dateTimes_0_9) WITH ([value] datetime2(6) '$') AS [d9] +) AND [d].[DateTime2_7] IN ( + SELECT [d10].[value] + FROM OPENJSON(@__dateTimes_0_10) WITH ([value] datetime2(7) '$') AS [d10] +) +"""); + } + + protected class Context14095(DbContextOptions options) : DbContext(options) + { + public DbSet Dates { get; set; } + + public Task SeedAsync() + { + Add( + new DatesAndPrunes14095 + { + SmallDateTime = new DateTime(1970, 9, 3, 12, 0, 0), + DateTime = new DateTime(1971, 9, 3, 12, 0, 10, 220), + DateTime2 = new DateTime(1972, 9, 3, 12, 0, 10, 333), + DateTime2_0 = new DateTime(1973, 9, 3, 12, 0, 10), + DateTime2_1 = new DateTime(1974, 9, 3, 12, 0, 10, 500), + DateTime2_2 = new DateTime(1975, 9, 3, 12, 0, 10, 660), + DateTime2_3 = new DateTime(1976, 9, 3, 12, 0, 10, 777), + DateTime2_4 = new DateTime(1977, 9, 3, 12, 0, 10, 888), + DateTime2_5 = new DateTime(1978, 9, 3, 12, 0, 10, 999), + DateTime2_6 = new DateTime(1979, 9, 3, 12, 0, 10, 111), + DateTime2_7 = new DateTime(1980, 9, 3, 12, 0, 10, 222) + }); + return SaveChangesAsync(); + } + + public class DatesAndPrunes14095 + { + public int Id { get; set; } + + [Column(TypeName = "smalldatetime")] + public DateTime SmallDateTime { get; set; } + + [Column(TypeName = "datetime")] + public DateTime DateTime { get; set; } + + [Column(TypeName = "datetime2")] + public DateTime DateTime2 { get; set; } + + [Column(TypeName = "datetime2(0)")] + public DateTime DateTime2_0 { get; set; } + + [Column(TypeName = "datetime2(1)")] + public DateTime DateTime2_1 { get; set; } + + [Column(TypeName = "datetime2(2)")] + public DateTime DateTime2_2 { get; set; } + + [Column(TypeName = "datetime2(3)")] + public DateTime DateTime2_3 { get; set; } + + [Column(TypeName = "datetime2(4)")] + public DateTime DateTime2_4 { get; set; } + + [Column(TypeName = "datetime2(5)")] + public DateTime DateTime2_5 { get; set; } + + [Column(TypeName = "datetime2(6)")] + public DateTime DateTime2_6 { get; set; } + + [Column(TypeName = "datetime2(7)")] + public DateTime DateTime2_7 { get; set; } + } + } + + #endregion + + #region 15518 + + [ConditionalTheory] + [InlineData(false)] + [InlineData(true)] + public virtual async Task Nested_queries_does_not_cause_concurrency_exception_sync(bool tracking) + { + var contextFactory = await InitializeAsync(seed: c => c.SeedAsync()); + + using (var context = contextFactory.CreateContext()) + { + var query = context.Repos.OrderBy(r => r.Id).Where(r => r.Id > 0); + query = tracking ? query.AsTracking() : query.AsNoTracking(); + + foreach (var a in query) + { + foreach (var b in query) + { + } + } + } + + using (var context = contextFactory.CreateContext()) + { + var query = context.Repos.OrderBy(r => r.Id).Where(r => r.Id > 0); + query = tracking ? query.AsTracking() : query.AsNoTracking(); + + await foreach (var a in query.AsAsyncEnumerable()) + { + await foreach (var b in query.AsAsyncEnumerable()) + { + } + } + } + + AssertSql( + """ +SELECT `r`.`Id`, `r`.`Name` +FROM `Repos` AS `r` +WHERE `r`.`Id` > 0 +ORDER BY `r`.`Id` +""", + // + """ +SELECT `r`.`Id`, `r`.`Name` +FROM `Repos` AS `r` +WHERE `r`.`Id` > 0 +ORDER BY `r`.`Id` +""", + // + """ +SELECT `r`.`Id`, `r`.`Name` +FROM `Repos` AS `r` +WHERE `r`.`Id` > 0 +ORDER BY `r`.`Id` +""", + // + """ +SELECT `r`.`Id`, `r`.`Name` +FROM `Repos` AS `r` +WHERE `r`.`Id` > 0 +ORDER BY `r`.`Id` +""", + // + """ +SELECT `r`.`Id`, `r`.`Name` +FROM `Repos` AS `r` +WHERE `r`.`Id` > 0 +ORDER BY `r`.`Id` +""", + // + """ +SELECT `r`.`Id`, `r`.`Name` +FROM `Repos` AS `r` +WHERE `r`.`Id` > 0 +ORDER BY `r`.`Id` +"""); + } + + private class Context15518(DbContextOptions options) : DbContext(options) + { + public DbSet Repos { get; set; } + + public Task SeedAsync() + { + AddRange( + new Repo { Name = "London" }, + new Repo { Name = "New York" }); + + return SaveChangesAsync(); + } + + public class Repo + { + public int Id { get; set; } + public string Name { get; set; } + } + } + + #endregion + + #region 19206 + + /*[ConditionalFact] + public virtual async Task From_sql_expression_compares_correctly() + { + var contextFactory = await InitializeAsync(seed: c => c.SeedAsync()); + + using (var context = contextFactory.CreateContext()) + { + var query = from t1 in context.Tests.FromSqlInterpolated( + $"Select * from Tests Where Type = {Context19206.TestType19206.Unit}") + from t2 in context.Tests.FromSqlInterpolated( + $"Select * from Tests Where Type = {Context19206.TestType19206.Integration}") + select new { t1, t2 }; + + var result = query.ToList(); + + var item = Assert.Single((IEnumerable)result); + Assert.Equal(Context19206.TestType19206.Unit, item.t1.Type); + Assert.Equal(Context19206.TestType19206.Integration, item.t2.Type); + + AssertSql( + """ +p0='0' +p1='1' + +SELECT [m].[Id], [m].[Type], [m0].[Id], [m0].[Type] +FROM ( + Select * from Tests Where Type = @p0 +) AS [m] +CROSS JOIN ( + Select * from Tests Where Type = @p1 +) AS [m0] +"""); + } + }*/ + + private class Context19206(DbContextOptions options) : DbContext(options) + { + public DbSet Tests { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + } + + public Task SeedAsync() + { + Add(new Test { Type = TestType19206.Unit }); + Add(new Test { Type = TestType19206.Integration }); + return SaveChangesAsync(); + } + + public class Test + { + public int Id { get; set; } + public TestType19206 Type { get; set; } + } + + public enum TestType19206 + { + Unit, + Integration, + } + } + + #endregion + + #region 21666 + + [ConditionalFact] + public virtual async Task Thread_safety_in_relational_command_cache() + { + var contextFactory = await InitializeAsync( + onConfiguring: options => ((IDbContextOptionsBuilderInfrastructure)options).AddOrUpdateExtension( + options.Options.FindExtension() + .WithConnection(null) + .WithConnectionString(JetTestStore.CreateConnectionString(StoreName)))); + + var ids = new[] { 1, 2, 3 }; + + Parallel.For( + 0, 100, + i => + { + using var context = contextFactory.CreateContext(); + var query = context.Lists.Where(l => !l.IsDeleted && ids.Contains(l.Id)).ToList(); + }); + } + + private class Context21666(DbContextOptions options) : DbContext(options) + { + public DbSet Lists { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + } + + public class List + { + public int Id { get; set; } + public bool IsDeleted { get; set; } + } + } + + #endregion + + #region 24216 + + [ConditionalFact] + public virtual async Task Subquery_take_SelectMany_with_TVF() + { + var contextFactory = await InitializeAsync(); + using var context = contextFactory.CreateContext(); + + context.Database.ExecuteSqlRaw( + """ +create function [dbo].[GetPersonStatusAsOf] (@personId bigint, @timestamp datetime2) +returns @personStatus table +( + Id bigint not null, + PersonId bigint not null, + GenderId bigint not null, + StatusMessage nvarchar(max) +) +as +begin + insert into @personStatus + select [m].[Id], [m].[PersonId], [m].[PersonId], null + from [Message] as [m] + where [m].[PersonId] = @personId and [m].[TimeStamp] = @timestamp + return +end +"""); + + ClearLog(); + + var q = from m in context.Message + orderby m.Id + select m; + + var q2 = + from m in q.Take(10) + from asof in context.GetPersonStatusAsOf(m.PersonId, m.Timestamp) + select new { Gender = (from g in context.Gender where g.Id == asof.GenderId select g.Description).Single() }; + + q2.ToList(); + + AssertSql( + """ +@__p_0='10' + +SELECT ( + SELECT TOP(1) [g0].[Description] + FROM [Gender] AS [g0] + WHERE [g0].[Id] = [g].[GenderId]) AS [Gender] +FROM ( + SELECT TOP(@__p_0) [m].[Id], [m].[PersonId], [m].[Timestamp] + FROM [Message] AS [m] + ORDER BY [m].[Id] +) AS [m0] +CROSS APPLY [dbo].[GetPersonStatusAsOf]([m0].[PersonId], [m0].[Timestamp]) AS [g] +ORDER BY [m0].[Id] +"""); + } + + private class Gender24216 + { + public long Id { get; set; } + + public string Description { get; set; } + } + + private class Message24216 + { + public long Id { get; set; } + + public long PersonId { get; set; } + + public DateTime Timestamp { get; set; } + } + + private class PersonStatus24216 + { + public long Id { get; set; } + + public long PersonId { get; set; } + + public long GenderId { get; set; } + + public string StatusMessage { get; set; } + } + + private class Context24216(DbContextOptions options) : DbContext(options) + { + public DbSet Gender { get; set; } + + public DbSet Message { get; set; } + + public IQueryable GetPersonStatusAsOf(long personId, DateTime asOf) + => FromExpression(() => GetPersonStatusAsOf(personId, asOf)); + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder.HasDbFunction( + typeof(Context24216).GetMethod( + nameof(GetPersonStatusAsOf), + [typeof(long), typeof(DateTime)])); + } + } + + #endregion + + #region 27427 + + /*[ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual async Task Muliple_occurrences_of_FromSql_in_group_by_aggregate(bool async) + { + var contextFactory = await InitializeAsync(); + using var context = contextFactory.CreateContext(); + var query = context.DemoEntities + .FromSqlRaw("SELECT * FROM DemoEntities WHERE Id = {0}", new SqlParameter { Value = 1 }) + .Select(e => e.Id); + + var query2 = context.DemoEntities + .Where(e => query.Contains(e.Id)) + .GroupBy(e => e.Id) + .Select(g => new { g.Key, Aggregate = g.Count() }); + + if (async) + { + await query2.ToListAsync(); + } + else + { + query2.ToList(); + } + + AssertSql( + """ +p0='1' + +SELECT [d].[Id] AS [Key], COUNT(*) AS [Aggregate] +FROM [DemoEntities] AS [d] +WHERE [d].[Id] IN ( + SELECT [m].[Id] + FROM ( + SELECT * FROM DemoEntities WHERE Id = @p0 + ) AS [m] +) +GROUP BY [d].[Id] +"""); + }*/ + + protected class Context27427(DbContextOptions options) : DbContext(options) + { + public DbSet DemoEntities { get; set; } + } + + protected class DemoEntity + { + public int Id { get; set; } + } + + #endregion + + public override async Task First_FirstOrDefault_ix_async() + { + await base.First_FirstOrDefault_ix_async(); + + AssertSql( + """ +SELECT TOP 1 `p`.`Id`, `p`.`Name` +FROM `Products` AS `p` +ORDER BY `p`.`Id` +""", + // + """ +@p0='1' + +DELETE FROM `Products` +WHERE `Id` = @p0; +SELECT @@ROWCOUNT; +""", + // + """ +@p0='Product 1' (Size = 255) + +INSERT INTO `Products` (`Name`) +VALUES (@p0); +SELECT `Id` +FROM `Products` +WHERE @@ROWCOUNT = 1 AND `Id` = @@identity; +""", + // + """ +SELECT TOP 1 `p`.`Id`, `p`.`Name` +FROM `Products` AS `p` +ORDER BY `p`.`Id` +""", + // + """ +@p0='2' + +DELETE FROM `Products` +WHERE `Id` = @p0; +SELECT @@ROWCOUNT; +"""); + } + + public override async Task Discriminator_type_is_handled_correctly() + { + await base.Discriminator_type_is_handled_correctly(); + + AssertSql( + """ +SELECT `p`.`Id`, `p`.`Discriminator`, `p`.`Name` +FROM `Products` AS `p` +WHERE `p`.`Discriminator` = 1 +""", + // + """ +SELECT `p`.`Id`, `p`.`Discriminator`, `p`.`Name` +FROM `Products` AS `p` +WHERE `p`.`Discriminator` = 1 +"""); + } + + public override async Task New_instances_in_projection_are_not_shared_across_results() + { + await base.New_instances_in_projection_are_not_shared_across_results(); + + AssertSql( + """ +SELECT `p`.`Id`, `p`.`BlogId`, `p`.`Title` +FROM `Posts` AS `p` +"""); + } + + public override async Task Enum_has_flag_applies_explicit_cast_for_constant() + { + await base.Enum_has_flag_applies_explicit_cast_for_constant(); + + AssertSql( + """ +SELECT [e].[Id], [e].[Permission], [e].[PermissionByte], [e].[PermissionShort] +FROM [Entities] AS [e] +WHERE [e].[Permission] & CAST(17179869184 AS bigint) = CAST(17179869184 AS bigint) +""", + // + """ +SELECT [e].[Id], [e].[Permission], [e].[PermissionByte], [e].[PermissionShort] +FROM [Entities] AS [e] +WHERE [e].[PermissionShort] & CAST(4 AS smallint) = CAST(4 AS smallint) +"""); + } + + public override async Task Enum_has_flag_does_not_apply_explicit_cast_for_non_constant() + { + await base.Enum_has_flag_does_not_apply_explicit_cast_for_non_constant(); + + AssertSql( + """ +SELECT [e].[Id], [e].[Permission], [e].[PermissionByte], [e].[PermissionShort] +FROM [Entities] AS [e] +WHERE [e].[Permission] & [e].[Permission] = [e].[Permission] +""", + // + """ +SELECT [e].[Id], [e].[Permission], [e].[PermissionByte], [e].[PermissionShort] +FROM [Entities] AS [e] +WHERE [e].[PermissionByte] & [e].[PermissionByte] = [e].[PermissionByte] +"""); + } + + public override async Task Variable_from_closure_is_parametrized() + { + await base.Variable_from_closure_is_parametrized(); + + AssertSql( + """ +@__id_0='1' + +SELECT `e`.`Id`, `e`.`Name` +FROM `Entities` AS `e` +WHERE `e`.`Id` = @__id_0 +""", + // + """ +@__id_0='2' + +SELECT `e`.`Id`, `e`.`Name` +FROM `Entities` AS `e` +WHERE `e`.`Id` = @__id_0 +""", + // + """ +@__id_0='1' + +SELECT `e`.`Id`, `e`.`Name` +FROM `Entities` AS `e` +WHERE `e`.`Id` = @__id_0 +""", + // + """ +@__id_0='2' + +SELECT `e`.`Id`, `e`.`Name` +FROM `Entities` AS `e` +WHERE `e`.`Id` = @__id_0 +""", + // + """ +@__id_0='1' + +SELECT `e`.`Id`, `e`.`Name` +FROM `Entities` AS `e` +WHERE `e`.`Id` IN ( + SELECT `e0`.`Id` + FROM `Entities` AS `e0` + WHERE `e0`.`Id` = @__id_0 +) +""", + // + """ +@__id_0='2' + +SELECT `e`.`Id`, `e`.`Name` +FROM `Entities` AS `e` +WHERE `e`.`Id` IN ( + SELECT `e0`.`Id` + FROM `Entities` AS `e0` + WHERE `e0`.`Id` = @__id_0 +) +"""); + } + + public override async Task Relational_command_cache_creates_new_entry_when_parameter_nullability_changes() + { + await base.Relational_command_cache_creates_new_entry_when_parameter_nullability_changes(); + + AssertSql( + """ +@__name_0='A' (Size = 255) + +SELECT `e`.`Id`, `e`.`Name` +FROM `Entities` AS `e` +WHERE `e`.`Name` = @__name_0 +""", + // + """ +SELECT `e`.`Id`, `e`.`Name` +FROM `Entities` AS `e` +WHERE `e`.`Name` IS NULL +"""); + } + + public override async Task Query_cache_entries_are_evicted_as_necessary() + { + await base.Query_cache_entries_are_evicted_as_necessary(); + + AssertSql(); + } + + public override async Task Explicitly_compiled_query_does_not_add_cache_entry() + { + await base.Explicitly_compiled_query_does_not_add_cache_entry(); + + AssertSql( + """ +SELECT TOP 2 `e`.`Id`, `e`.`Name` +FROM `Entities` AS `e` +WHERE `e`.`Id` = 1 +"""); + } + + public override async Task Conditional_expression_with_conditions_does_not_collapse_if_nullable_bool() + { + await base.Conditional_expression_with_conditions_does_not_collapse_if_nullable_bool(); + + AssertSql( + """ +SELECT IIF(`c0`.`Id` IS NOT NULL, IIF(`c0`.`Processed` <> TRUE, TRUE, FALSE), NULL) AS `Processing` +FROM `Carts` AS `c` +LEFT JOIN `Configuration` AS `c0` ON `c`.`ConfigurationId` = `c0`.`Id` +"""); + } + + public override async Task QueryBuffer_requirement_is_computed_when_querying_base_type_while_derived_type_has_shadow_prop() + { + await base.QueryBuffer_requirement_is_computed_when_querying_base_type_while_derived_type_has_shadow_prop(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`IsTwo`, `b`.`MoreStuffId` +FROM `Bases` AS `b` +"""); + } + + public override async Task Average_with_cast() + { + await base.Average_with_cast(); + + AssertSql( + """ +SELECT `p`.`Id`, `p`.`DecimalColumn`, `p`.`DoubleColumn`, `p`.`FloatColumn`, `p`.`IntColumn`, `p`.`LongColumn`, `p`.`NullableDecimalColumn`, `p`.`NullableDoubleColumn`, `p`.`NullableFloatColumn`, `p`.`NullableIntColumn`, `p`.`NullableLongColumn`, `p`.`Price` +FROM `Prices` AS `p` +""", + // + """ +SELECT AVG(`p`.`Price`) +FROM `Prices` AS `p` +""", + // + """ +SELECT AVG(CDBL(`p`.`IntColumn`)) +FROM `Prices` AS `p` +""", + // + """ +SELECT AVG(IIF(`p`.`NullableIntColumn` IS NULL, NULL, CDBL(`p`.`NullableIntColumn`))) +FROM `Prices` AS `p` +""", + // + """ +SELECT AVG(CDBL(`p`.`LongColumn`)) +FROM `Prices` AS `p` +""", + // + """ +SELECT AVG(IIF(`p`.`NullableLongColumn` IS NULL, NULL, CDBL(`p`.`NullableLongColumn`))) +FROM `Prices` AS `p` +""", + // + """ +SELECT CSNG(AVG(`p`.`FloatColumn`)) +FROM `Prices` AS `p` +""", + // + """ +SELECT CSNG(AVG(`p`.`NullableFloatColumn`)) +FROM `Prices` AS `p` +""", + // + """ +SELECT AVG(`p`.`DoubleColumn`) +FROM `Prices` AS `p` +""", + // + """ +SELECT AVG(`p`.`NullableDoubleColumn`) +FROM `Prices` AS `p` +""", + // + """ +SELECT AVG(`p`.`DecimalColumn`) +FROM `Prices` AS `p` +""", + // + """ +SELECT AVG(`p`.`NullableDecimalColumn`) +FROM `Prices` AS `p` +"""); + } + + public override async Task Parameterless_ctor_on_inner_DTO_gets_called_for_every_row() + { + await base.Parameterless_ctor_on_inner_DTO_gets_called_for_every_row(); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Name` +FROM `Entities` AS `e` +"""); + } + + public override async Task Union_and_insert_works_correctly_together() + { + await base.Union_and_insert_works_correctly_together(); + + AssertSql( + """ +@__id1_0='1' +@__id2_1='2' + +SELECT `t`.`Id` +FROM `Tables1` AS `t` +WHERE `t`.`Id` = @__id1_0 +UNION +SELECT `t0`.`Id` +FROM `Tables2` AS `t0` +WHERE `t0`.`Id` = @__id2_1 +""", + // + """ +INSERT INTO `Tables1` +DEFAULT VALUES; +SELECT `Id` +FROM `Tables1` +WHERE @@ROWCOUNT = 1 AND `Id` = @@identity; +""", + // + """ +INSERT INTO `Tables1` +DEFAULT VALUES; +SELECT `Id` +FROM `Tables1` +WHERE @@ROWCOUNT = 1 AND `Id` = @@identity; +""", + // + """ +INSERT INTO `Tables2` +DEFAULT VALUES; +SELECT `Id` +FROM `Tables2` +WHERE @@ROWCOUNT = 1 AND `Id` = @@identity; +""", + // + """ +INSERT INTO `Tables2` +DEFAULT VALUES; +SELECT `Id` +FROM `Tables2` +WHERE @@ROWCOUNT = 1 AND `Id` = @@identity; +"""); + } + + public override async Task Repeated_parameters_in_generated_query_sql() + { + await base.Repeated_parameters_in_generated_query_sql(); + + AssertSql( + """ +@__k_0='1' + +SELECT TOP 1 `a`.`Id`, `a`.`Name` +FROM `Autos` AS `a` +WHERE `a`.`Id` = @__k_0 +""", + // + """ +@__p_0='2' + +SELECT TOP 1 `a`.`Id`, `a`.`Name` +FROM `Autos` AS `a` +WHERE `a`.`Id` = @__p_0 +""", + // + """ +@__entity_equality_a_0_Id='1' (Nullable = true) +@__entity_equality_b_1_Id='2' (Nullable = true) +@__entity_equality_b_1_Id='2' (Nullable = true) +@__entity_equality_a_0_Id='1' (Nullable = true) + +SELECT `e`.`Id`, `e`.`AnotherAutoId`, `e`.`AutoId` +FROM (`EqualAutos` AS `e` +LEFT JOIN `Autos` AS `a` ON `e`.`AutoId` = `a`.`Id`) +LEFT JOIN `Autos` AS `a0` ON `e`.`AnotherAutoId` = `a0`.`Id` +WHERE (`a`.`Id` = @__entity_equality_a_0_Id AND `a0`.`Id` = @__entity_equality_b_1_Id) OR (`a`.`Id` = @__entity_equality_b_1_Id AND `a0`.`Id` = @__entity_equality_a_0_Id) +"""); + } + + public override async Task Operators_combine_nullability_of_entity_shapers() + { + await base.Operators_combine_nullability_of_entity_shapers(); + + AssertSql( + """ +SELECT [a].[Id], [a].[a], [a].[a1], [a].[forkey], [b].[Id] AS [Id0], [b].[b], [b].[b1], [b].[forkey] AS [forkey0] +FROM [As] AS [a] +LEFT JOIN [Bs] AS [b] ON [a].[forkey] = [b].[forkey] +UNION ALL +SELECT [a0].[Id], [a0].[a], [a0].[a1], [a0].[forkey], [b0].[Id] AS [Id0], [b0].[b], [b0].[b1], [b0].[forkey] AS [forkey0] +FROM [Bs] AS [b0] +LEFT JOIN [As] AS [a0] ON [b0].[forkey] = [a0].[forkey] +WHERE [a0].[Id] IS NULL +""", + // + """ +SELECT [a].[Id], [a].[a], [a].[a1], [a].[forkey], [b].[Id] AS [Id0], [b].[b], [b].[b1], [b].[forkey] AS [forkey0] +FROM [As] AS [a] +LEFT JOIN [Bs] AS [b] ON [a].[forkey] = [b].[forkey] +UNION +SELECT [a0].[Id], [a0].[a], [a0].[a1], [a0].[forkey], [b0].[Id] AS [Id0], [b0].[b], [b0].[b1], [b0].[forkey] AS [forkey0] +FROM [Bs] AS [b0] +LEFT JOIN [As] AS [a0] ON [b0].[forkey] = [a0].[forkey] +WHERE [a0].[Id] IS NULL +""", + // + """ +SELECT [a].[Id], [a].[a], [a].[a1], [a].[forkey], [b].[Id] AS [Id0], [b].[b], [b].[b1], [b].[forkey] AS [forkey0] +FROM [As] AS [a] +LEFT JOIN [Bs] AS [b] ON [a].[forkey] = [b].[forkey] +EXCEPT +SELECT [a0].[Id], [a0].[a], [a0].[a1], [a0].[forkey], [b0].[Id] AS [Id0], [b0].[b], [b0].[b1], [b0].[forkey] AS [forkey0] +FROM [Bs] AS [b0] +LEFT JOIN [As] AS [a0] ON [b0].[forkey] = [a0].[forkey] +""", + // + """ +SELECT [a].[Id], [a].[a], [a].[a1], [a].[forkey], [b].[Id] AS [Id0], [b].[b], [b].[b1], [b].[forkey] AS [forkey0] +FROM [As] AS [a] +LEFT JOIN [Bs] AS [b] ON [a].[forkey] = [b].[forkey] +INTERSECT +SELECT [a0].[Id], [a0].[a], [a0].[a1], [a0].[forkey], [b0].[Id] AS [Id0], [b0].[b], [b0].[b1], [b0].[forkey] AS [forkey0] +FROM [Bs] AS [b0] +LEFT JOIN [As] AS [a0] ON [b0].[forkey] = [a0].[forkey] +"""); + } + + public override async Task Shadow_property_with_inheritance() + { + await base.Shadow_property_with_inheritance(); + + AssertSql( + """ +SELECT `c`.`Id`, `c`.`Discriminator`, `c`.`IsPrimary`, `c`.`UserName`, `c`.`EmployerId`, `c`.`ServiceOperatorId` +FROM `Contacts` AS `c` +""", + // + """ +SELECT `c`.`Id`, `c`.`Discriminator`, `c`.`IsPrimary`, `c`.`UserName`, `c`.`ServiceOperatorId`, `s`.`Id` +FROM `Contacts` AS `c` +INNER JOIN `ServiceOperators` AS `s` ON `c`.`ServiceOperatorId` = `s`.`Id` +WHERE `c`.`Discriminator` = 'ServiceOperatorContact' +""", + // + """ +SELECT `c`.`Id`, `c`.`Discriminator`, `c`.`IsPrimary`, `c`.`UserName`, `c`.`ServiceOperatorId` +FROM `Contacts` AS `c` +WHERE `c`.`Discriminator` = 'ServiceOperatorContact' +"""); + } + + public override async Task Inlined_dbcontext_is_not_leaking() + { + await base.Inlined_dbcontext_is_not_leaking(); + + AssertSql( + """ +SELECT `b`.`Id` +FROM `Blogs` AS `b` +"""); + } + + public override async Task GroupJoin_Anonymous_projection_GroupBy_Aggregate_join_elimination() + { + await base.GroupJoin_Anonymous_projection_GroupBy_Aggregate_join_elimination(); + + AssertSql( + """ +SELECT `t1`.`AnotherEntity11818_Name` AS `Key`, COUNT(*) + 5 AS `cnt` +FROM `Table` AS `t` +LEFT JOIN ( + SELECT `t0`.`Id`, `t0`.`Exists`, `t0`.`AnotherEntity11818_Name` + FROM `Table` AS `t0` + WHERE `t0`.`Exists` IS NOT NULL +) AS `t1` ON `t`.`Id` = IIF(`t1`.`Exists` IS NOT NULL, `t1`.`Id`, NULL) +GROUP BY `t1`.`AnotherEntity11818_Name` +""", + // + """ +SELECT `t1`.`AnotherEntity11818_Name` AS `MyKey`, COUNT(*) + 5 AS `cnt` +FROM (`Table` AS `t` +LEFT JOIN ( + SELECT `t0`.`Id`, `t0`.`Exists`, `t0`.`AnotherEntity11818_Name` + FROM `Table` AS `t0` + WHERE `t0`.`Exists` IS NOT NULL +) AS `t1` ON `t`.`Id` = IIF(`t1`.`Exists` IS NOT NULL, `t1`.`Id`, NULL)) +LEFT JOIN ( + SELECT `t2`.`Id`, `t2`.`MaumarEntity11818_Exists`, `t2`.`MaumarEntity11818_Name` + FROM `Table` AS `t2` + WHERE `t2`.`MaumarEntity11818_Exists` IS NOT NULL +) AS `t3` ON `t`.`Id` = IIF(`t3`.`MaumarEntity11818_Exists` IS NOT NULL, `t3`.`Id`, NULL) +GROUP BY `t1`.`AnotherEntity11818_Name`, `t3`.`MaumarEntity11818_Name` +""", + // + """ +SELECT TOP 1 `t1`.`AnotherEntity11818_Name` AS `MyKey`, `t3`.`MaumarEntity11818_Name` AS `cnt` +FROM (`Table` AS `t` +LEFT JOIN ( + SELECT `t0`.`Id`, `t0`.`Exists`, `t0`.`AnotherEntity11818_Name` + FROM `Table` AS `t0` + WHERE `t0`.`Exists` IS NOT NULL +) AS `t1` ON `t`.`Id` = IIF(`t1`.`Exists` IS NOT NULL, `t1`.`Id`, NULL)) +LEFT JOIN ( + SELECT `t2`.`Id`, `t2`.`MaumarEntity11818_Exists`, `t2`.`MaumarEntity11818_Name` + FROM `Table` AS `t2` + WHERE `t2`.`MaumarEntity11818_Exists` IS NOT NULL +) AS `t3` ON `t`.`Id` = IIF(`t3`.`MaumarEntity11818_Exists` IS NOT NULL, `t3`.`Id`, NULL) +GROUP BY `t1`.`AnotherEntity11818_Name`, `t3`.`MaumarEntity11818_Name` +"""); + } + + public override async Task Left_join_with_missing_key_values_on_both_sides(bool async) + { + await base.Left_join_with_missing_key_values_on_both_sides(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`CustomerName`, IIF(`p`.`PostcodeID` IS NULL, '', `p`.`TownName`) AS `TownName`, IIF(`p`.`PostcodeID` IS NULL, '', `p`.`PostcodeValue`) AS `PostcodeValue` +FROM `Customers` AS `c` +LEFT JOIN `Postcodes` AS `p` ON `c`.`PostcodeID` = `p`.`PostcodeID` +"""); + } + + public override async Task Comparing_enum_casted_to_byte_with_int_parameter(bool async) + { + await base.Comparing_enum_casted_to_byte_with_int_parameter(async); + + AssertSql( + """ +@__bitterTaste_0='1' + +SELECT `i`.`IceCreamId`, `i`.`Name`, `i`.`Taste` +FROM `IceCreams` AS `i` +WHERE `i`.`Taste` = @__bitterTaste_0 +"""); + } + + public override async Task Comparing_enum_casted_to_byte_with_int_constant(bool async) + { + await base.Comparing_enum_casted_to_byte_with_int_constant(async); + + AssertSql( + """ +SELECT `i`.`IceCreamId`, `i`.`Name`, `i`.`Taste` +FROM `IceCreams` AS `i` +WHERE `i`.`Taste` = 1 +"""); + } + + public override async Task Comparing_byte_column_to_enum_in_vb_creating_double_cast(bool async) + { + await base.Comparing_byte_column_to_enum_in_vb_creating_double_cast(async); + + AssertSql( + """ +SELECT `f`.`Id`, `f`.`Taste` +FROM `Foods` AS `f` +WHERE `f`.`Taste` = CBYTE(1) +"""); + } + + public override async Task Null_check_removal_in_ternary_maintain_appropriate_cast(bool async) + { + await base.Null_check_removal_in_ternary_maintain_appropriate_cast(async); + + AssertSql( + """ +SELECT `f`.`Taste` AS `Bar` +FROM `Foods` AS `f` +"""); + } + + public override async Task SaveChangesAsync_accepts_changes_with_ConfigureAwait_true() + { + await base.SaveChangesAsync_accepts_changes_with_ConfigureAwait_true(); + + AssertSql( + """ +INSERT INTO `ObservableThings` +DEFAULT VALUES; +SELECT `Id` +FROM `ObservableThings` +WHERE @@ROWCOUNT = 1 AND `Id` = @@identity; +"""); + } + + public override async Task Bool_discriminator_column_works(bool async) + { + await base.Bool_discriminator_column_works(async); + + AssertSql( + """ +SELECT `a`.`Id`, `a`.`BlogId`, `b`.`Id`, `b`.`IsPhotoBlog`, `b`.`Title`, `b`.`NumberOfPhotos` +FROM `Authors` AS `a` +LEFT JOIN `Blog` AS `b` ON `a`.`BlogId` = `b`.`Id` +"""); + } + + public override async Task Multiple_different_entity_type_from_different_namespaces(bool async) + { + await base.Multiple_different_entity_type_from_different_namespaces(async); + + AssertSql( + """ +SELECT cast(null as int) AS MyValue +"""); + } + + public override async Task Unwrap_convert_node_over_projection_when_translating_contains_over_subquery(bool async) + { + await base.Unwrap_convert_node_over_projection_when_translating_contains_over_subquery(async); + + AssertSql( + """ +@__currentUserId_0='1' + +SELECT IIF(`u`.`Id` IN ( + SELECT `u0`.`Id` + FROM `Memberships` AS `m` + INNER JOIN `Users` AS `u0` ON `m`.`UserId` = `u0`.`Id` + WHERE `m`.`GroupId` IN ( + SELECT `m0`.`GroupId` + FROM `Memberships` AS `m0` + WHERE `m0`.`UserId` = @__currentUserId_0 + ) + ), TRUE, FALSE) AS `HasAccess` +FROM `Users` AS `u` +"""); + } + + public override async Task Unwrap_convert_node_over_projection_when_translating_contains_over_subquery_2(bool async) + { + await base.Unwrap_convert_node_over_projection_when_translating_contains_over_subquery_2(async); + + AssertSql( + """ +@__currentUserId_0='1' + +SELECT IIF(`u`.`Id` IN ( + SELECT `u0`.`Id` + FROM (`Memberships` AS `m` + INNER JOIN `Groups` AS `g` ON `m`.`GroupId` = `g`.`Id`) + INNER JOIN `Users` AS `u0` ON `m`.`UserId` = `u0`.`Id` + WHERE `g`.`Id` IN ( + SELECT `g0`.`Id` + FROM `Memberships` AS `m0` + INNER JOIN `Groups` AS `g0` ON `m0`.`GroupId` = `g0`.`Id` + WHERE `m0`.`UserId` = @__currentUserId_0 + ) + ), TRUE, FALSE) AS `HasAccess` +FROM `Users` AS `u` +"""); + } + + public override async Task Unwrap_convert_node_over_projection_when_translating_contains_over_subquery_3(bool async) + { + await base.Unwrap_convert_node_over_projection_when_translating_contains_over_subquery_3(async); + + AssertSql( + """ +@__currentUserId_0='1' + +SELECT IIF(EXISTS ( + SELECT 1 + FROM `Memberships` AS `m` + INNER JOIN `Users` AS `u0` ON `m`.`UserId` = `u0`.`Id` + WHERE `m`.`GroupId` IN ( + SELECT `m0`.`GroupId` + FROM `Memberships` AS `m0` + WHERE `m0`.`UserId` = @__currentUserId_0 + ) AND `u0`.`Id` = `u`.`Id`), TRUE, FALSE) AS `HasAccess` +FROM `Users` AS `u` +"""); + } + + public override async Task GroupBy_aggregate_on_right_side_of_join(bool async) + { + await base.GroupBy_aggregate_on_right_side_of_join(async); + + AssertSql( + """ +@__orderId_0='123456' +@__orderId_0='123456' + +SELECT `o`.`Id`, `o`.`CancellationDate`, `o`.`OrderId`, `o`.`ShippingDate` +FROM `OrderItems` AS `o` +INNER JOIN ( + SELECT `o0`.`OrderId` AS `Key` + FROM `OrderItems` AS `o0` + WHERE `o0`.`OrderId` = @__orderId_0 + GROUP BY `o0`.`OrderId` +) AS `o1` ON `o`.`OrderId` = `o1`.`Key` +WHERE `o`.`OrderId` = @__orderId_0 +ORDER BY `o`.`OrderId` +"""); + } + + public override async Task Enum_with_value_converter_matching_take_value(bool async) + { + await base.Enum_with_value_converter_matching_take_value(async); + + AssertSql( + """ +@__orderItemType_1='MyType1' (Nullable = false) (Size = 255) +@__orderItemType_1='MyType1' (Nullable = false) (Size = 255) + +SELECT `o1`.`Id`, IIF(( + SELECT TOP 1 `o3`.`Price` + FROM `OrderItems` AS `o3` + WHERE `o1`.`Id` = `o3`.`OrderId` AND `o3`.`Type` = @__orderItemType_1) IS NULL, 0.0, ( + SELECT TOP 1 `o3`.`Price` + FROM `OrderItems` AS `o3` + WHERE `o1`.`Id` = `o3`.`OrderId` AND `o3`.`Type` = @__orderItemType_1)) AS `SpecialSum` +FROM ( + SELECT TOP 1 `o`.`Id` + FROM `Orders` AS `o` + WHERE EXISTS ( + SELECT 1 + FROM `OrderItems` AS `o0` + WHERE `o`.`Id` = `o0`.`OrderId`) + ORDER BY `o`.`Id` +) AS `o2` +INNER JOIN `Orders` AS `o1` ON `o2`.`Id` = `o1`.`Id` +ORDER BY `o2`.`Id` +"""); + } + + public override async Task GroupBy_Aggregate_over_navigations_repeated(bool async) + { + await base.GroupBy_Aggregate_over_navigations_repeated(async); + + AssertSql( + """ +SELECT ( + SELECT MIN(`o`.`HourlyRate`) + FROM `TimeSheets` AS `t0` + LEFT JOIN `Order` AS `o` ON `t0`.`OrderId` = `o`.`Id` + WHERE `t0`.`OrderId` IS NOT NULL AND `t`.`OrderId` = `t0`.`OrderId`) AS `HourlyRate`, ( + SELECT MIN(`c`.`Id`) + FROM (`TimeSheets` AS `t1` + INNER JOIN `Project` AS `p` ON `t1`.`ProjectId` = `p`.`Id`) + LEFT JOIN `Customers` AS `c` ON `p`.`CustomerId` = `c`.`Id` + WHERE (`t1`.`OrderId` IS NOT NULL AND `t`.`OrderId` = `t1`.`OrderId`) AND (`p`.`CustomerId` IS NOT NULL AND `c`.`Id` IS NOT NULL)) AS `CustomerId`, ( + SELECT MIN(`c0`.`Name`) + FROM (`TimeSheets` AS `t2` + INNER JOIN `Project` AS `p0` ON `t2`.`ProjectId` = `p0`.`Id`) + LEFT JOIN `Customers` AS `c0` ON `p0`.`CustomerId` = `c0`.`Id` + WHERE (`t2`.`OrderId` IS NOT NULL AND `t`.`OrderId` = `t2`.`OrderId`) AND (`p0`.`CustomerId` IS NOT NULL AND `c0`.`Id` IS NOT NULL)) AS `CustomerName` +FROM `TimeSheets` AS `t` +WHERE `t`.`OrderId` IS NOT NULL +GROUP BY `t`.`OrderId` +"""); + } + + public override async Task Aggregate_over_subquery_in_group_by_projection(bool async) + { + await base.Aggregate_over_subquery_in_group_by_projection(async); + + AssertSql( + """ +SELECT `o`.`CustomerId`, ( + SELECT MIN(`o0`.`HourlyRate`) + FROM `Order` AS `o0` + WHERE `o0`.`CustomerId` = `o`.`CustomerId`) AS `CustomerMinHourlyRate`, MIN(`o`.`HourlyRate`) AS `HourlyRate`, COUNT(*) AS `Count` +FROM `Order` AS `o` +WHERE `o`.`Number` <> 'A1' OR `o`.`Number` IS NULL +GROUP BY `o`.`CustomerId`, `o`.`Number` +"""); + } + + public override async Task Aggregate_over_subquery_in_group_by_projection_2(bool async) + { + await base.Aggregate_over_subquery_in_group_by_projection_2(async); + + AssertSql( + """ +SELECT [t].[Value] AS [A], ( + SELECT MAX([t0].[Id]) + FROM [Tables] AS [t0] + WHERE [t0].[Value] = MAX([t].[Id]) * 6 OR ([t0].[Value] IS NULL AND MAX([t].[Id]) IS NULL)) AS [B] +FROM [Tables] AS [t] +GROUP BY [t].[Value] +"""); + } + + public override async Task Group_by_aggregate_in_subquery_projection_after_group_by(bool async) + { + await base.Group_by_aggregate_in_subquery_projection_after_group_by(async); + + AssertSql( + """ +SELECT [t].[Value] AS [A], COALESCE(SUM([t].[Id]), 0) AS [B], COALESCE(( + SELECT TOP(1) COALESCE(SUM([t].[Id]), 0) + COALESCE(SUM([t0].[Id]), 0) + FROM [Tables] AS [t0] + GROUP BY [t0].[Value] + ORDER BY (SELECT 1)), 0) AS [C] +FROM [Tables] AS [t] +GROUP BY [t].[Value] +"""); + } + + public override async Task Subquery_first_member_compared_to_null(bool async) + { + await base.Subquery_first_member_compared_to_null(async); + + AssertSql( + """ +SELECT ( + SELECT TOP 1 `c1`.`SomeOtherNullableDateTime` + FROM `Child` AS `c1` + WHERE `p`.`Id` = `c1`.`ParentId` AND `c1`.`SomeNullableDateTime` IS NULL + ORDER BY `c1`.`SomeInteger`) +FROM `Parents` AS `p` +WHERE EXISTS ( + SELECT 1 + FROM `Child` AS `c` + WHERE `p`.`Id` = `c`.`ParentId` AND `c`.`SomeNullableDateTime` IS NULL) AND ( + SELECT TOP 1 `c0`.`SomeOtherNullableDateTime` + FROM `Child` AS `c0` + WHERE `p`.`Id` = `c0`.`ParentId` AND `c0`.`SomeNullableDateTime` IS NULL + ORDER BY `c0`.`SomeInteger`) IS NOT NULL +"""); + } + + public override async Task SelectMany_where_Select(bool async) + { + await base.SelectMany_where_Select(async); + + AssertSql( + """ +SELECT [c1].[SomeNullableDateTime] +FROM [Parents] AS [p] +INNER JOIN ( + SELECT [c0].[ParentId], [c0].[SomeNullableDateTime], [c0].[SomeOtherNullableDateTime] + FROM ( + SELECT [c].[ParentId], [c].[SomeNullableDateTime], [c].[SomeOtherNullableDateTime], ROW_NUMBER() OVER(PARTITION BY [c].[ParentId] ORDER BY [c].[SomeInteger]) AS [row] + FROM [Child] AS [c] + WHERE [c].[SomeNullableDateTime] IS NULL + ) AS [c0] + WHERE [c0].[row] <= 1 +) AS [c1] ON [p].[Id] = [c1].[ParentId] +WHERE [c1].[SomeOtherNullableDateTime] IS NOT NULL +"""); + } + + public override async Task Flattened_GroupJoin_on_interface_generic(bool async) + { + await base.Flattened_GroupJoin_on_interface_generic(async); + + AssertSql( + """ +SELECT `c`.`Id`, `c`.`ParentId`, `c`.`SomeInteger`, `c`.`SomeNullableDateTime`, `c`.`SomeOtherNullableDateTime` +FROM `Parents` AS `p` +LEFT JOIN `Child` AS `c` ON `p`.`Id` = `c`.`Id` +"""); + } + + public override async Task StoreType_for_UDF_used(bool async) + { + await base.StoreType_for_UDF_used(async); + + AssertSql( + """ +@__date_0='2012-12-12T00:00:00.0000000' (DbType = DateTime) + +SELECT `m`.`Id`, `m`.`SomeDate` +FROM `MyEntities` AS `m` +WHERE `m`.`SomeDate` = CDATE(@__date_0) +""", + // + """ +@__date_0='2012-12-12T00:00:00.0000000' (DbType = DateTime) + +SELECT `m`.`Id`, `m`.`SomeDate` +FROM `MyEntities` AS `m` +WHERE `dbo`.`ModifyDate`(`m`.`SomeDate`) = CDATE(@__date_0) +"""); + } + + public override async Task Pushdown_does_not_add_grouping_key_to_projection_when_distinct_is_applied(bool async) + { + await base.Pushdown_does_not_add_grouping_key_to_projection_when_distinct_is_applied(async); + + AssertSql( + """ +SELECT TOP 123456 `t`.`JSON` +FROM `TableDatas` AS `t` +INNER JOIN ( + SELECT DISTINCT `i`.`Parcel` + FROM `IndexDatas` AS `i` + WHERE `i`.`Parcel` = 'some condition' + GROUP BY `i`.`Parcel`, `i`.`RowId` + HAVING COUNT(*) = 1 +) AS `i0` ON `t`.`ParcelNumber` = `i0`.`Parcel` +WHERE `t`.`TableId` = 123 +ORDER BY `t`.`ParcelNumber` +"""); + } + + public override async Task Filter_on_nested_DTO_with_interface_gets_simplified_correctly(bool async) + { + await base.Filter_on_nested_DTO_with_interface_gets_simplified_correctly(async); + + AssertSql( + """ +SELECT `c`.`Id`, `c`.`CompanyId`, IIF(`c0`.`Id` IS NOT NULL, TRUE, FALSE), `c0`.`Id`, `c0`.`CompanyName`, `c0`.`CountryId`, `c1`.`Id`, `c1`.`CountryName` +FROM (`Customers` AS `c` +LEFT JOIN `Companies` AS `c0` ON `c`.`CompanyId` = `c0`.`Id`) +LEFT JOIN `Countries` AS `c1` ON `c0`.`CountryId` = `c1`.`Id` +WHERE IIF(`c0`.`Id` IS NOT NULL, `c1`.`CountryName`, NULL) = 'COUNTRY' +"""); + } +} diff --git a/test/EFCore.Jet.FunctionalTests/Query/AdHocNavigationsQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/AdHocNavigationsQueryJetTest.cs new file mode 100644 index 00000000..5147bd0d --- /dev/null +++ b/test/EFCore.Jet.FunctionalTests/Query/AdHocNavigationsQueryJetTest.cs @@ -0,0 +1,634 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using EntityFrameworkCore.Jet.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; + +namespace EntityFrameworkCore.Jet.FunctionalTests.Query; + +#nullable disable + +public class AdHocNavigationsQueryJetTest : AdHocNavigationsQueryRelationalTestBase +{ + protected override ITestStoreFactory TestStoreFactory + => JetTestStoreFactory.Instance; + + #region 10447 + + [ConditionalFact] + public virtual async Task Nested_include_queries_do_not_populate_navigation_twice() + { + var contextFactory = await InitializeAsync(seed: c => c.SeedAsync()); + using var context = contextFactory.CreateContext(); + var query = context.Blogs.Include(b => b.Posts); + + foreach (var blog in query) + { + query.ToList(); + } + + Assert.Collection( + query, + b => Assert.Equal(3, b.Posts.Count), + b => Assert.Equal(2, b.Posts.Count), + b => Assert.Single(b.Posts)); + + AssertSql( + """ +SELECT `b`.`Id`, `p`.`Id`, `p`.`BlogId` +FROM `Blogs` AS `b` +LEFT JOIN `Post` AS `p` ON `b`.`Id` = `p`.`BlogId` +ORDER BY `b`.`Id` +""", + // + """ +SELECT `b`.`Id`, `p`.`Id`, `p`.`BlogId` +FROM `Blogs` AS `b` +LEFT JOIN `Post` AS `p` ON `b`.`Id` = `p`.`BlogId` +ORDER BY `b`.`Id` +""", + // + """ +SELECT `b`.`Id`, `p`.`Id`, `p`.`BlogId` +FROM `Blogs` AS `b` +LEFT JOIN `Post` AS `p` ON `b`.`Id` = `p`.`BlogId` +ORDER BY `b`.`Id` +""", + // + """ +SELECT `b`.`Id`, `p`.`Id`, `p`.`BlogId` +FROM `Blogs` AS `b` +LEFT JOIN `Post` AS `p` ON `b`.`Id` = `p`.`BlogId` +ORDER BY `b`.`Id` +""", + // + """ +SELECT `b`.`Id`, `p`.`Id`, `p`.`BlogId` +FROM `Blogs` AS `b` +LEFT JOIN `Post` AS `p` ON `b`.`Id` = `p`.`BlogId` +ORDER BY `b`.`Id` +"""); + } + + protected class Context10447(DbContextOptions options) : DbContext(options) + { + public DbSet Blogs { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + } + + public Task SeedAsync() + { + AddRange( + new Blog + { + Posts = + [ + new(), + new(), + new() + ] + }, + new Blog { Posts = [new(), new()] }, + new Blog { Posts = [new()] }); + + return SaveChangesAsync(); + } + + public class Blog + { + public int Id { get; set; } + public List Posts { get; set; } + } + + public class Post + { + public int Id { get; set; } + + public Blog Blog { get; set; } + } + } + + #endregion + + public override async Task ThenInclude_with_interface_navigations() + { + await base.ThenInclude_with_interface_navigations(); + + AssertSql( + """ +SELECT `p`.`Id`, `s`.`Id`, `s`.`ParentBackNavigationId`, `s`.`SelfReferenceBackNavigationId`, `s`.`Id0`, `s`.`ParentBackNavigationId0`, `s`.`SelfReferenceBackNavigationId0` +FROM `Parents` AS `p` +LEFT JOIN ( + SELECT `c`.`Id`, `c`.`ParentBackNavigationId`, `c`.`SelfReferenceBackNavigationId`, `c0`.`Id` AS `Id0`, `c0`.`ParentBackNavigationId` AS `ParentBackNavigationId0`, `c0`.`SelfReferenceBackNavigationId` AS `SelfReferenceBackNavigationId0` + FROM `Children` AS `c` + LEFT JOIN `Children` AS `c0` ON `c`.`Id` = `c0`.`SelfReferenceBackNavigationId` +) AS `s` ON `p`.`Id` = `s`.`ParentBackNavigationId` +ORDER BY `p`.`Id`, `s`.`Id` +""", + // + """ +SELECT `c0`.`Id`, `c0`.`ParentBackNavigationId`, `c0`.`SelfReferenceBackNavigationId`, `p`.`Id` +FROM (`Children` AS `c` +LEFT JOIN `Children` AS `c0` ON `c`.`SelfReferenceBackNavigationId` = `c0`.`Id`) +LEFT JOIN `Parents` AS `p` ON `c0`.`ParentBackNavigationId` = `p`.`Id` +""", + // + """ +SELECT `c0`.`Id`, `c0`.`ParentBackNavigationId`, `c0`.`SelfReferenceBackNavigationId`, `p`.`Id` +FROM (`Children` AS `c` +LEFT JOIN `Children` AS `c0` ON `c`.`SelfReferenceBackNavigationId` = `c0`.`Id`) +LEFT JOIN `Parents` AS `p` ON `c0`.`ParentBackNavigationId` = `p`.`Id` +""", + // + """ +SELECT `c`.`Id`, `c`.`ParentBackNavigationId`, `c`.`SelfReferenceBackNavigationId`, `c0`.`Id`, `c0`.`ParentBackNavigationId`, `c0`.`SelfReferenceBackNavigationId`, `p`.`Id` +FROM (`Children` AS `c` +LEFT JOIN `Children` AS `c0` ON `c`.`SelfReferenceBackNavigationId` = `c0`.`Id`) +LEFT JOIN `Parents` AS `p` ON `c0`.`ParentBackNavigationId` = `p`.`Id` +"""); + } + + public override async Task Customer_collections_materialize_properly() + { + await base.Customer_collections_materialize_properly(); + + AssertSql( + """ +SELECT `c`.`Id`, `o`.`Id`, `o`.`CustomerId1`, `o`.`CustomerId2`, `o`.`CustomerId3`, `o`.`CustomerId4`, `o`.`Name` +FROM `Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`Id` = `o`.`CustomerId1` +ORDER BY `c`.`Id` +""", + // + """ +SELECT `c`.`Id`, `o`.`Id`, `o`.`CustomerId1`, `o`.`CustomerId2`, `o`.`CustomerId3`, `o`.`CustomerId4`, `o`.`Name` +FROM `Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`Id` = `o`.`CustomerId2` +ORDER BY `c`.`Id` +""", + // + """ +SELECT `c`.`Id`, `o`.`Id`, `o`.`CustomerId1`, `o`.`CustomerId2`, `o`.`CustomerId3`, `o`.`CustomerId4`, `o`.`Name` +FROM `Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`Id` = `o`.`CustomerId3` +ORDER BY `c`.`Id` +""", + // + """ +SELECT `c`.`Id`, `o`.`Id`, `o`.`CustomerId1`, `o`.`CustomerId2`, `o`.`CustomerId3`, `o`.`CustomerId4`, `o`.`Name` +FROM `Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`Id` = `o`.`CustomerId4` +ORDER BY `c`.`Id` +"""); + } + + public override async Task Reference_include_on_derived_type_with_sibling_works() + { + await base.Reference_include_on_derived_type_with_sibling_works(); + + AssertSql( + """ +SELECT `p`.`Id`, `p`.`Discriminator`, `p`.`LeaveStart`, `p`.`LeaveTypeId`, `p0`.`Id` +FROM `Proposals` AS `p` +LEFT JOIN `ProposalLeaveType` AS `p0` ON `p`.`LeaveTypeId` = `p0`.`Id` +WHERE `p`.`Discriminator` = 'ProposalLeave' +"""); + } + + public override async Task Include_collection_optional_reference_collection() + { + await base.Include_collection_optional_reference_collection(); + + AssertSql( + """ +SELECT `p`.`Id`, `p`.`Discriminator`, `p`.`FamilyId`, `p`.`Name`, `p`.`TeacherId`, `s`.`Id`, `s`.`Discriminator`, `s`.`FamilyId`, `s`.`Name`, `s`.`TeacherId`, `s`.`Grade`, `s`.`Id0`, `s`.`LastName`, `s`.`Id1`, `s`.`Discriminator0`, `s`.`FamilyId0`, `s`.`Name0`, `s`.`TeacherId0`, `s`.`Grade0` +FROM `People` AS `p` +LEFT JOIN ( + SELECT `p0`.`Id`, `p0`.`Discriminator`, `p0`.`FamilyId`, `p0`.`Name`, `p0`.`TeacherId`, `p0`.`Grade`, `f`.`Id` AS `Id0`, `f`.`LastName`, `p1`.`Id` AS `Id1`, `p1`.`Discriminator` AS `Discriminator0`, `p1`.`FamilyId` AS `FamilyId0`, `p1`.`Name` AS `Name0`, `p1`.`TeacherId` AS `TeacherId0`, `p1`.`Grade` AS `Grade0` + FROM (`People` AS `p0` + LEFT JOIN `Families` AS `f` ON `p0`.`FamilyId` = `f`.`Id`) + LEFT JOIN `People` AS `p1` ON `f`.`Id` = `p1`.`FamilyId` + WHERE `p0`.`Discriminator` = 'PersonKid9038' +) AS `s` ON `p`.`Id` = `s`.`TeacherId` +WHERE `p`.`Discriminator` = 'PersonTeacher9038' +ORDER BY `p`.`Id`, `s`.`Id`, `s`.`Id0` +""", + // + """ +SELECT `p`.`Id`, `p`.`Discriminator`, `p`.`FamilyId`, `p`.`Name`, `p`.`TeacherId`, `f`.`Id`, `f`.`LastName`, `p0`.`Id`, `p0`.`Discriminator`, `p0`.`FamilyId`, `p0`.`Name`, `p0`.`TeacherId`, `p0`.`Grade`, `p2`.`Id`, `p2`.`Discriminator`, `p2`.`FamilyId`, `p2`.`Name`, `p2`.`TeacherId`, `p2`.`Grade` +FROM ((`People` AS `p` +LEFT JOIN `Families` AS `f` ON `p`.`FamilyId` = `f`.`Id`) +LEFT JOIN `People` AS `p0` ON `f`.`Id` = `p0`.`FamilyId`) +LEFT JOIN ( + SELECT `p1`.`Id`, `p1`.`Discriminator`, `p1`.`FamilyId`, `p1`.`Name`, `p1`.`TeacherId`, `p1`.`Grade` + FROM `People` AS `p1` + WHERE `p1`.`Discriminator` = 'PersonKid9038' +) AS `p2` ON `p`.`Id` = `p2`.`TeacherId` +WHERE `p`.`Discriminator` = 'PersonTeacher9038' +ORDER BY `p`.`Id`, `f`.`Id`, `p0`.`Id` +"""); + } + + public override async Task Include_with_order_by_on_interface_key() + { + await base.Include_with_order_by_on_interface_key(); + + AssertSql( + """ +SELECT `p`.`Id`, `p`.`Name`, `c`.`Id`, `c`.`Name`, `c`.`Parent10635Id`, `c`.`ParentId` +FROM `Parents` AS `p` +LEFT JOIN `Children` AS `c` ON `p`.`Id` = `c`.`Parent10635Id` +ORDER BY `p`.`Id` +""", + // + """ +SELECT `p`.`Id`, `c`.`Id`, `c`.`Name`, `c`.`Parent10635Id`, `c`.`ParentId` +FROM `Parents` AS `p` +LEFT JOIN `Children` AS `c` ON `p`.`Id` = `c`.`Parent10635Id` +ORDER BY `p`.`Id` +"""); + } + + public override async Task Collection_without_setter_materialized_correctly() + { + await base.Collection_without_setter_materialized_correctly(); + + AssertSql( + """ +SELECT `b`.`Id`, `p`.`Id`, `p`.`BlogId1`, `p`.`BlogId2`, `p`.`BlogId3`, `p`.`Name`, `p0`.`Id`, `p0`.`BlogId1`, `p0`.`BlogId2`, `p0`.`BlogId3`, `p0`.`Name`, `p1`.`Id`, `p1`.`BlogId1`, `p1`.`BlogId2`, `p1`.`BlogId3`, `p1`.`Name` +FROM ((`Blogs` AS `b` +LEFT JOIN `Posts` AS `p` ON `b`.`Id` = `p`.`BlogId1`) +LEFT JOIN `Posts` AS `p0` ON `b`.`Id` = `p0`.`BlogId2`) +LEFT JOIN `Posts` AS `p1` ON `b`.`Id` = `p1`.`BlogId3` +ORDER BY `b`.`Id`, `p`.`Id`, `p0`.`Id` +""", + // + """ +SELECT ( + SELECT TOP 1 ( + SELECT COUNT(*) + FROM `Comments` AS `c` + WHERE `p`.`Id` = `c`.`PostId`) + FROM `Posts` AS `p` + WHERE `b`.`Id` = `p`.`BlogId1` + ORDER BY `p`.`Id`) AS `Collection1`, ( + SELECT TOP 1 ( + SELECT COUNT(*) + FROM `Comments` AS `c0` + WHERE `p0`.`Id` = `c0`.`PostId`) + FROM `Posts` AS `p0` + WHERE `b`.`Id` = `p0`.`BlogId2` + ORDER BY `p0`.`Id`) AS `Collection2`, ( + SELECT TOP 1 ( + SELECT COUNT(*) + FROM `Comments` AS `c1` + WHERE `p1`.`Id` = `c1`.`PostId`) + FROM `Posts` AS `p1` + WHERE `b`.`Id` = `p1`.`BlogId3` + ORDER BY `p1`.`Id`) AS `Collection3` +FROM `Blogs` AS `b` +"""); + } + + public override async Task Include_collection_works_when_defined_on_intermediate_type() + { + await base.Include_collection_works_when_defined_on_intermediate_type(); + + AssertSql( + """ +SELECT `s`.`Id`, `s`.`Discriminator`, `s0`.`Id`, `s0`.`SchoolId` +FROM `Schools` AS `s` +LEFT JOIN `Students` AS `s0` ON `s`.`Id` = `s0`.`SchoolId` +ORDER BY `s`.`Id` +""", + // + """ +SELECT `s`.`Id`, `s0`.`Id`, `s0`.`SchoolId` +FROM `Schools` AS `s` +LEFT JOIN `Students` AS `s0` ON `s`.`Id` = `s0`.`SchoolId` +ORDER BY `s`.`Id` +"""); + } + + public override async Task Let_multiple_references_with_reference_to_outer() + { + await base.Let_multiple_references_with_reference_to_outer(); + + AssertSql( + """ +SELECT ( + SELECT TOP(1) [c].[Id] + FROM [CompetitionSeasons] AS [c] + WHERE [c].[StartDate] <= [a].[DateTime] AND [a].[DateTime] < [c].[EndDate]), [a].[Id], [a0].[Id], [s].[Id], [s].[ActivityTypeId], [s].[CompetitionSeasonId], [s].[Points], [s].[Id0] +FROM [Activities] AS [a] +INNER JOIN [ActivityType] AS [a0] ON [a].[ActivityTypeId] = [a0].[Id] +OUTER APPLY ( + SELECT [a1].[Id], [a1].[ActivityTypeId], [a1].[CompetitionSeasonId], [a1].[Points], [c0].[Id] AS [Id0] + FROM [ActivityTypePoints] AS [a1] + INNER JOIN [CompetitionSeasons] AS [c0] ON [a1].[CompetitionSeasonId] = [c0].[Id] + WHERE [a0].[Id] = [a1].[ActivityTypeId] AND [c0].[Id] = ( + SELECT TOP(1) [c1].[Id] + FROM [CompetitionSeasons] AS [c1] + WHERE [c1].[StartDate] <= [a].[DateTime] AND [a].[DateTime] < [c1].[EndDate]) +) AS [s] +ORDER BY [a].[Id], [a0].[Id], [s].[Id] +""", + // + """ +SELECT [a].[Id], [a].[ActivityTypeId], [a].[DateTime], [a].[Points], ( + SELECT TOP(1) [c].[Id] + FROM [CompetitionSeasons] AS [c] + WHERE [c].[StartDate] <= [a].[DateTime] AND [a].[DateTime] < [c].[EndDate]) AS [CompetitionSeasonId], COALESCE([a].[Points], ( + SELECT TOP(1) [a1].[Points] + FROM [ActivityTypePoints] AS [a1] + INNER JOIN [CompetitionSeasons] AS [c0] ON [a1].[CompetitionSeasonId] = [c0].[Id] + WHERE [a0].[Id] = [a1].[ActivityTypeId] AND [c0].[Id] = ( + SELECT TOP(1) [c1].[Id] + FROM [CompetitionSeasons] AS [c1] + WHERE [c1].[StartDate] <= [a].[DateTime] AND [a].[DateTime] < [c1].[EndDate])), 0) AS [Points] +FROM [Activities] AS [a] +INNER JOIN [ActivityType] AS [a0] ON [a].[ActivityTypeId] = [a0].[Id] +"""); + } + + public override async Task Include_collection_with_OfType_base() + { + await base.Include_collection_with_OfType_base(); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Name`, `d`.`Id`, `d`.`Device`, `d`.`EmployeeId` +FROM `Employees` AS `e` +LEFT JOIN `Devices` AS `d` ON `e`.`Id` = `d`.`EmployeeId` +ORDER BY `e`.`Id` +""", + // + """ +SELECT `e`.`Id`, `d0`.`Id`, `d0`.`Device`, `d0`.`EmployeeId` +FROM `Employees` AS `e` +LEFT JOIN ( + SELECT `d`.`Id`, `d`.`Device`, `d`.`EmployeeId` + FROM `Devices` AS `d` + WHERE `d`.`Device` <> 'foo' OR `d`.`Device` IS NULL +) AS `d0` ON `e`.`Id` = `d0`.`EmployeeId` +ORDER BY `e`.`Id` +"""); + } + + public override async Task Correlated_collection_correctly_associates_entities_with_byte_array_keys() + { + await base.Correlated_collection_correctly_associates_entities_with_byte_array_keys(); + + AssertSql( + """ +SELECT `b`.`Name`, `c`.`Id` +FROM `Blogs` AS `b` +LEFT JOIN `Comments` AS `c` ON `b`.`Name` = `c`.`BlogName` +ORDER BY `b`.`Name` +"""); + } + + public override async Task Can_ignore_invalid_include_path_error() + { + await base.Can_ignore_invalid_include_path_error(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`SubAId` +FROM `BaseClasses` AS `b` +WHERE `b`.`Discriminator` = 'ClassA' +"""); + } + + public override async Task SelectMany_and_collection_in_projection_in_FirstOrDefault() + { + await base.SelectMany_and_collection_in_projection_in_FirstOrDefault(); + + AssertSql( + """ +@__referenceId_0='a' (Size = 4000) +@__customerId_1='1115c816-6c4c-4016-94df-d8b60a22ffa1' + +SELECT [o0].[Id], [s0].[Id], [s0].[Image], [s0].[Id0], [s0].[Id00] +FROM ( + SELECT TOP(2) [o].[Id] + FROM [Orders] AS [o] + WHERE [o].[ExternalReferenceId] = @__referenceId_0 AND [o].[CustomerId] = @__customerId_1 +) AS [o0] +OUTER APPLY ( + SELECT [i].[Id], [s].[Image], [s].[Id] AS [Id0], [s].[Id0] AS [Id00] + FROM [IdentityDocument] AS [i] + OUTER APPLY ( + SELECT [i1].[Image], [i0].[Id], [i1].[Id] AS [Id0] + FROM [IdentityDocument] AS [i0] + INNER JOIN [IdentityDocumentImage] AS [i1] ON [i0].[Id] = [i1].[IdentityDocumentId] + WHERE [o0].[Id] = [i0].[OrderId] + ) AS [s] + WHERE [o0].[Id] = [i].[OrderId] +) AS [s0] +ORDER BY [o0].[Id], [s0].[Id], [s0].[Id0] +"""); + } + + public override async Task Using_explicit_interface_implementation_as_navigation_works() + { + await base.Using_explicit_interface_implementation_as_navigation_works(); + + AssertSql( + """ +SELECT TOP 2 IIF(EXISTS ( + SELECT 1 + FROM `CoverIllustrations` AS `c` + WHERE `b0`.`Id` = `c`.`CoverId` AND `c`.`State` >= 2), TRUE, FALSE), ( + SELECT TOP 1 `c0`.`Uri` + FROM `CoverIllustrations` AS `c0` + WHERE `b0`.`Id` = `c0`.`CoverId` AND `c0`.`State` >= 2) +FROM `Books` AS `b` +INNER JOIN `BookCovers` AS `b0` ON `b`.`FrontCoverId` = `b0`.`Id` +WHERE `b`.`Id` = 1 +"""); + } + + public override async Task Select_enumerable_navigation_backed_by_collection(bool async, bool split) + { + await base.Select_enumerable_navigation_backed_by_collection(async, split); + + if (split) + { + AssertSql( + """ +SELECT `e`.`Id` +FROM `Entities` AS `e` +ORDER BY `e`.`Id` +""", + // + """ +SELECT `o`.`Id`, `o`.`AppEntityId`, `e`.`Id` +FROM `Entities` AS `e` +INNER JOIN `OtherEntity` AS `o` ON `e`.`Id` = `o`.`AppEntityId` +ORDER BY `e`.`Id` +"""); + } + else + { + AssertSql( + """ +SELECT `e`.`Id`, `o`.`Id`, `o`.`AppEntityId` +FROM `Entities` AS `e` +LEFT JOIN `OtherEntity` AS `o` ON `e`.`Id` = `o`.`AppEntityId` +ORDER BY `e`.`Id` +"""); + } + } + + public override async Task Cycles_in_auto_include() + { + await base.Cycles_in_auto_include(); + + AssertSql( + """ +SELECT `p`.`Id`, `d`.`Id`, `d`.`PrincipalId` +FROM `PrincipalOneToOne` AS `p` +LEFT JOIN `DependentOneToOne` AS `d` ON `p`.`Id` = `d`.`PrincipalId` +""", + // + """ +SELECT `d`.`Id`, `d`.`PrincipalId`, `p`.`Id` +FROM `DependentOneToOne` AS `d` +INNER JOIN `PrincipalOneToOne` AS `p` ON `d`.`PrincipalId` = `p`.`Id` +""", + // + """ +SELECT `p`.`Id`, `d`.`Id`, `d`.`PrincipalId` +FROM `PrincipalOneToMany` AS `p` +LEFT JOIN `DependentOneToMany` AS `d` ON `p`.`Id` = `d`.`PrincipalId` +ORDER BY `p`.`Id` +""", + // + """ +SELECT `d`.`Id`, `d`.`PrincipalId`, `p`.`Id`, `d0`.`Id`, `d0`.`PrincipalId` +FROM (`DependentOneToMany` AS `d` +INNER JOIN `PrincipalOneToMany` AS `p` ON `d`.`PrincipalId` = `p`.`Id`) +LEFT JOIN `DependentOneToMany` AS `d0` ON `p`.`Id` = `d0`.`PrincipalId` +ORDER BY `d`.`Id`, `p`.`Id` +""", + // + """ +SELECT `p`.`Id` +FROM `PrincipalManyToMany` AS `p` +""", + // + """ +SELECT `d`.`Id` +FROM `DependentManyToMany` AS `d` +""", + // + """ +SELECT `c`.`Id`, `c`.`CycleCId` +FROM `CycleA` AS `c` +""", + // + """ +SELECT `c`.`Id`, `c`.`CId`, `c`.`CycleAId` +FROM `CycleB` AS `c` +""", + // + """ +SELECT `c`.`Id`, `c`.`BId` +FROM `CycleC` AS `c` +"""); + } + + public override async Task Walking_back_include_tree_is_not_allowed_1() + { + await base.Walking_back_include_tree_is_not_allowed_1(); + + AssertSql(); + } + + public override async Task Walking_back_include_tree_is_not_allowed_2() + { + await base.Walking_back_include_tree_is_not_allowed_2(); + + AssertSql(); + } + + public override async Task Walking_back_include_tree_is_not_allowed_3() + { + await base.Walking_back_include_tree_is_not_allowed_3(); + + AssertSql( + """ +SELECT `m`.`Id`, `m`.`PrincipalId`, `p`.`Id`, `s0`.`Id`, `s0`.`PrincipalId`, `s0`.`Id0`, `s0`.`ManyDependentId`, `s0`.`PrincipalId0` +FROM (`ManyDependent` AS `m` +LEFT JOIN `Principal` AS `p` ON `m`.`PrincipalId` = `p`.`Id`) +LEFT JOIN ( + SELECT `m0`.`Id`, `m0`.`PrincipalId`, `s`.`Id` AS `Id0`, `s`.`ManyDependentId`, `s`.`PrincipalId` AS `PrincipalId0` + FROM `ManyDependent` AS `m0` + LEFT JOIN `SingleDependent` AS `s` ON `m0`.`Id` = `s`.`ManyDependentId` +) AS `s0` ON `p`.`Id` = `s0`.`PrincipalId` +ORDER BY `m`.`Id`, `p`.`Id`, `s0`.`Id` +"""); + } + + public override async Task Walking_back_include_tree_is_not_allowed_4() + { + await base.Walking_back_include_tree_is_not_allowed_4(); + + AssertSql(); + } + + public override async Task Projection_with_multiple_includes_and_subquery_with_set_operation() + { + await base.Projection_with_multiple_includes_and_subquery_with_set_operation(); + + AssertSql( + """ +@__id_0='1' + +SELECT [s].[Id], [s].[Name], [s].[Surname], [s].[Birthday], [s].[Hometown], [s].[Bio], [s].[AvatarUrl], [s].[Id0], [s].[Id1], [p0].[Id], [p0].[ImageUrl], [p0].[Height], [p0].[Width], [u].[Id], [u].[Name], [u].[PosterUrl], [u].[Rating] +FROM ( + SELECT TOP(1) [p].[Id], [p].[Name], [p].[Surname], [p].[Birthday], [p].[Hometown], [p].[Bio], [p].[AvatarUrl], [a].[Id] AS [Id0], [d].[Id] AS [Id1] + FROM [Persons] AS [p] + LEFT JOIN [ActorEntity] AS [a] ON [p].[Id] = [a].[PersonId] + LEFT JOIN [DirectorEntity] AS [d] ON [p].[Id] = [d].[PersonId] + WHERE [p].[Id] = @__id_0 +) AS [s] +LEFT JOIN [PersonImageEntity] AS [p0] ON [s].[Id] = [p0].[PersonId] +OUTER APPLY ( + SELECT [m0].[Id], [m0].[Budget], [m0].[Description], [m0].[DurationInMins], [m0].[Name], [m0].[PosterUrl], [m0].[Rating], [m0].[ReleaseDate], [m0].[Revenue] + FROM [MovieActorEntity] AS [m] + INNER JOIN [MovieEntity] AS [m0] ON [m].[MovieId] = [m0].[Id] + WHERE [s].[Id0] IS NOT NULL AND [s].[Id0] = [m].[ActorId] + UNION + SELECT [m2].[Id], [m2].[Budget], [m2].[Description], [m2].[DurationInMins], [m2].[Name], [m2].[PosterUrl], [m2].[Rating], [m2].[ReleaseDate], [m2].[Revenue] + FROM [MovieDirectorEntity] AS [m1] + INNER JOIN [MovieEntity] AS [m2] ON [m1].[MovieId] = [m2].[Id] + WHERE [s].[Id1] IS NOT NULL AND [s].[Id1] = [m1].[DirectorId] +) AS [u] +ORDER BY [s].[Id], [s].[Id0], [s].[Id1], [p0].[Id] +"""); + } + + public override async Task Count_member_over_IReadOnlyCollection_works(bool async) + { + await base.Count_member_over_IReadOnlyCollection_works(async); + + AssertSql( + """ +SELECT ( + SELECT COUNT(*) + FROM `Books` AS `b` + WHERE `a`.`AuthorId` = `b`.`AuthorId`) AS `BooksCount` +FROM `Authors` AS `a` +"""); + } +} diff --git a/test/EFCore.Jet.FunctionalTests/Query/AdHocPrecompiledQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/AdHocPrecompiledQueryJetTest.cs new file mode 100644 index 00000000..efe66afd --- /dev/null +++ b/test/EFCore.Jet.FunctionalTests/Query/AdHocPrecompiledQueryJetTest.cs @@ -0,0 +1,101 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Threading.Tasks; +using EntityFrameworkCore.Jet.FunctionalTests.TestUtilities; +using EntityFrameworkCore.Jet.Infrastructure; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.Storage; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.Jet.FunctionalTests.Query; + +public class AdHocPrecompiledQueryJetTest(ITestOutputHelper testOutputHelper) + : AdHocPrecompiledQueryRelationalTestBase(testOutputHelper) +{ + protected override bool AlwaysPrintGeneratedSources + => false; + + [ConditionalTheory(Skip = "Not supported in Jet")] + public override async Task Index_no_evaluatability() + { + await base.Index_no_evaluatability(); + + AssertSql(""" +SELECT [j].[Id], [j].[IntList], [j].[JsonThing] +FROM [JsonEntities] AS [j] +WHERE CAST(JSON_VALUE([j].[IntList], '$[' + CAST([j].[Id] AS nvarchar(max)) + ']') AS int) = 2 +"""); + } + + [ConditionalTheory(Skip = "Not supported in Jet")] + public override async Task Index_with_captured_variable() + { + await base.Index_with_captured_variable(); + + AssertSql(""" +@__id_0='1' + +SELECT [j].[Id], [j].[IntList], [j].[JsonThing] +FROM [JsonEntities] AS [j] +WHERE CAST(JSON_VALUE([j].[IntList], '$[' + CAST(@__id_0 AS nvarchar(max)) + ']') AS int) = 2 +"""); + } + + public override async Task JsonScalar() + { + await base.JsonScalar(); + + AssertSql(""" +SELECT [j].[Id], [j].[IntList], [j].[JsonThing] +FROM [JsonEntities] AS [j] +WHERE JSON_VALUE([j].[JsonThing], '$.StringProperty') = N'foo' +"""); + } + + public override async Task Materialize_non_public() + { + await base.Materialize_non_public(); + + AssertSql( + """" +@p0='10' (Nullable = true) +@p1='9' (Nullable = true) +@p2='8' (Nullable = true) + +INSERT INTO `NonPublicEntities` (`PrivateAutoProperty`, `PrivateProperty`, `_privateField`) +VALUES (@p0, @p1, @p2); +SELECT `Id` +FROM `NonPublicEntities` +WHERE @@ROWCOUNT = 1 AND `Id` = @@identity; +"""", +// +"""" +SELECT TOP 2 `n`.`Id`, `n`.`PrivateAutoProperty`, `n`.`PrivateProperty`, `n`.`_privateField` +FROM `NonPublicEntities` AS `n` +""""); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + protected override ITestStoreFactory TestStoreFactory + => JetTestStoreFactory.Instance; + + protected override PrecompiledQueryTestHelpers PrecompiledQueryTestHelpers + => JetPrecompiledQueryTestHelpers.Instance; + + protected override DbContextOptionsBuilder AddOptions(DbContextOptionsBuilder builder) + { + builder = base.AddOptions(builder); + + // TODO: Figure out if there's a nice way to continue using the retrying strategy + var sqlServerOptionsBuilder = new JetDbContextOptionsBuilder(builder); + sqlServerOptionsBuilder.ExecutionStrategy(d => new NonRetryingExecutionStrategy(d)); + return builder; + } +} diff --git a/test/EFCore.Jet.FunctionalTests/Query/AdHocQueryFiltersQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/AdHocQueryFiltersQueryJetTest.cs new file mode 100644 index 00000000..08a0273b --- /dev/null +++ b/test/EFCore.Jet.FunctionalTests/Query/AdHocQueryFiltersQueryJetTest.cs @@ -0,0 +1,383 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Collections.Generic; +using System.Threading.Tasks; +using EntityFrameworkCore.Jet.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; +using System.Linq; + +namespace EntityFrameworkCore.Jet.FunctionalTests.Query; + +#nullable disable + +public class AdHocQueryFiltersQueryJetTest : AdHocQueryFiltersQueryRelationalTestBase +{ + protected override ITestStoreFactory TestStoreFactory + => JetTestStoreFactory.Instance; + + #region 11803 + + [ConditionalFact] + public virtual async Task Query_filter_with_db_set_should_not_block_other_filters() + { + var contextFactory = await InitializeAsync(seed: c => c.SeedAsync()); + using var context = contextFactory.CreateContext(); + var query = context.Factions.ToList(); + + Assert.Empty(query); + + AssertSql( + """ +SELECT `f`.`Id`, `f`.`Name` +FROM `Factions` AS `f` +WHERE EXISTS ( + SELECT 1 + FROM `Leaders` AS `l` + WHERE (`l`.`Name` LIKE 'Bran%') AND `l`.`Name` = 'Crach an Craite') +"""); + } + + [ConditionalFact] + public virtual async Task Keyless_type_used_inside_defining_query() + { + var contextFactory = await InitializeAsync(seed: c => c.SeedAsync()); + using var context = contextFactory.CreateContext(); + var query = context.LeadersQuery.ToList(); + + Assert.Single(query); + + AssertSql( + """ +SELECT [t].[Name] +FROM ( + SELECT [l].[Name] + FROM [Leaders] AS [l] + WHERE ([l].[Name] LIKE 'Bran' + '%' AND (LEFT([l].[Name], LEN('Bran')) = 'Bran')) AND (([l].[Name] <> 'Foo') OR [l].[Name] IS NULL) +) AS [t] +WHERE ([t].[Name] <> 'Bar') OR [t].[Name] IS NULL +"""); + } + + protected class Context11803(DbContextOptions options) : DbContext(options) + { + public DbSet Factions { get; set; } + public DbSet Leaders { get; set; } + public DbSet LeadersQuery { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity().HasQueryFilter(l => l.Name.StartsWith("Bran")); // this one is ignored + modelBuilder.Entity().HasQueryFilter(f => Leaders.Any(l => l.Name == "Crach an Craite")); + + modelBuilder + .Entity() + .HasNoKey() + .ToSqlQuery( + """ +SELECT [t].[Name] +FROM ( + SELECT [l].[Name] + FROM [Leaders] AS [l] + WHERE ([l].[Name] LIKE 'Bran' + '%' AND (LEFT([l].[Name], LEN('Bran')) = 'Bran')) AND (([l].[Name] <> 'Foo') OR [l].[Name] IS NULL) +) AS [t] +WHERE ([t].[Name] <> 'Bar') OR [t].[Name] IS NULL +"""); + } + + public Task SeedAsync() + { + var f1 = new Faction11803 { Name = "Skeliege" }; + var f2 = new Faction11803 { Name = "Monsters" }; + var f3 = new Faction11803 { Name = "Nilfgaard" }; + var f4 = new Faction11803 { Name = "Northern Realms" }; + var f5 = new Faction11803 { Name = "Scioia'tael" }; + + var l11 = new Leader11803 { Faction = f1, Name = "Bran Tuirseach" }; + var l12 = new Leader11803 { Faction = f1, Name = "Crach an Craite" }; + var l13 = new Leader11803 { Faction = f1, Name = "Eist Tuirseach" }; + var l14 = new Leader11803 { Faction = f1, Name = "Harald the Cripple" }; + + Factions.AddRange(f1, f2, f3, f4, f5); + Leaders.AddRange(l11, l12, l13, l14); + + return SaveChangesAsync(); + } + + public class Faction11803 + { + public int Id { get; set; } + public string Name { get; set; } + + public List Leaders { get; set; } + } + + public class Leader11803 + { + public int Id { get; set; } + public string Name { get; set; } + public Faction11803 Faction { get; set; } + } + + public class LeaderQuery11803 + { + public string Name { get; set; } + } + } + + #endregion + + public override async Task Query_filter_with_contains_evaluates_correctly() + { + await base.Query_filter_with_contains_evaluates_correctly(); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Name` +FROM `Entities` AS `e` +WHERE `e`.`Id` NOT IN (1, 7) +"""); + } + + public override async Task MultiContext_query_filter_test() + { + await base.MultiContext_query_filter_test(); + + AssertSql( + """ +@__ef_filter__Tenant_0='0' + +SELECT `b`.`Id`, `b`.`SomeValue` +FROM `Blogs` AS `b` +WHERE `b`.`SomeValue` = @__ef_filter__Tenant_0 +""", + // + """ +@__ef_filter__Tenant_0='1' + +SELECT `b`.`Id`, `b`.`SomeValue` +FROM `Blogs` AS `b` +WHERE `b`.`SomeValue` = @__ef_filter__Tenant_0 +""", + // + """ +@__ef_filter__Tenant_0='2' + +SELECT COUNT(*) +FROM `Blogs` AS `b` +WHERE `b`.`SomeValue` = @__ef_filter__Tenant_0 +"""); + } + + public override async Task Weak_entities_with_query_filter_subquery_flattening() + { + await base.Weak_entities_with_query_filter_subquery_flattening(); + + AssertSql( + """ +SELECT IIF(EXISTS ( + SELECT 1 + FROM `Definitions` AS `d` + WHERE `d`.`ChangeInfo_RemovedPoint_Timestamp` IS NULL), TRUE, FALSE) +FROM (SELECT COUNT(*) FROM `#Dual`) +"""); + } + + public override async Task Query_filter_with_pk_fk_optimization() + { + await base.Query_filter_with_pk_fk_optimization(); + + AssertSql( + """ +SELECT TOP 2 `e`.`Id`, IIF(`r0`.`Id` IS NULL, TRUE, FALSE), `r0`.`Id`, `r0`.`Public`, `e`.`RefEntityId` +FROM `Entities` AS `e` +LEFT JOIN ( + SELECT `r`.`Id`, `r`.`Public` + FROM `RefEntities` AS `r` + WHERE `r`.`Public` = TRUE +) AS `r0` ON `e`.`RefEntityId` = `r0`.`Id` +WHERE `e`.`Id` = 1 +"""); + } + + public override async Task Self_reference_in_query_filter_works() + { + await base.Self_reference_in_query_filter_works(); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Name` +FROM `EntitiesWithQueryFilterSelfReference` AS `e` +WHERE EXISTS ( + SELECT 1 + FROM `EntitiesWithQueryFilterSelfReference` AS `e0`) AND (`e`.`Name` <> 'Foo' OR `e`.`Name` IS NULL) +""", + // + """ +SELECT `e`.`Id`, `e`.`Name` +FROM `EntitiesReferencingEntityWithQueryFilterSelfReference` AS `e` +WHERE EXISTS ( + SELECT 1 + FROM `EntitiesWithQueryFilterSelfReference` AS `e0` + WHERE EXISTS ( + SELECT 1 + FROM `EntitiesWithQueryFilterSelfReference` AS `e1`)) AND (`e`.`Name` <> 'Foo' OR `e`.`Name` IS NULL) +"""); + } + + public override async Task Invoke_inside_query_filter_gets_correctly_evaluated_during_translation() + { + await base.Invoke_inside_query_filter_gets_correctly_evaluated_during_translation(); + + AssertSql( + """ +@__ef_filter__p_0='1' + +SELECT `e`.`Id`, `e`.`Name`, `e`.`TenantId` +FROM `Entities` AS `e` +WHERE (`e`.`Name` <> 'Foo' OR `e`.`Name` IS NULL) AND `e`.`TenantId` = @__ef_filter__p_0 +""", + // + """ +@__ef_filter__p_0='2' + +SELECT `e`.`Id`, `e`.`Name`, `e`.`TenantId` +FROM `Entities` AS `e` +WHERE (`e`.`Name` <> 'Foo' OR `e`.`Name` IS NULL) AND `e`.`TenantId` = @__ef_filter__p_0 +"""); + } + + public override async Task Query_filter_with_null_constant() + { + await base.Query_filter_with_null_constant(); + + AssertSql( + """ +SELECT `p`.`Id`, `p`.`UserDeleteId` +FROM `People` AS `p` +LEFT JOIN `User18759` AS `u` ON `p`.`UserDeleteId` = `u`.`Id` +WHERE `u`.`Id` IS NOT NULL +"""); + } + + public override async Task GroupJoin_SelectMany_gets_flattened() + { + await base.GroupJoin_SelectMany_gets_flattened(); + + AssertSql( + """ +SELECT `c`.`CustomerId`, `c`.`CustomerMembershipId` +FROM `CustomerFilters` AS `c` +WHERE ( + SELECT COUNT(*) + FROM `Customers` AS `c0` + LEFT JOIN `CustomerMemberships` AS `c1` ON `c0`.`Id` = `c1`.`CustomerId` + WHERE `c1`.`Id` IS NOT NULL AND `c0`.`Id` = `c`.`CustomerId`) > 0 +""", + // + """ +SELECT `c`.`Id`, `c`.`Name`, `c0`.`Id` AS `CustomerMembershipId`, IIF(`c0`.`Id` IS NOT NULL, `c0`.`Name`, '') AS `CustomerMembershipName` +FROM `Customers` AS `c` +LEFT JOIN `CustomerMemberships` AS `c0` ON `c`.`Id` = `c0`.`CustomerId` +"""); + } + + public override async Task Group_by_multiple_aggregate_joining_different_tables(bool async) + { + await base.Group_by_multiple_aggregate_joining_different_tables(async); + + AssertSql( + """ +SELECT ( + SELECT COUNT(*) + FROM ( + SELECT DISTINCT [c].[Value1] + FROM ( + SELECT [p2].[Child1Id], 1 AS [Key] + FROM [Parents] AS [p2] + ) AS [p1] + LEFT JOIN [Child1] AS [c] ON [p1].[Child1Id] = [c].[Id] + WHERE [p0].[Key] = [p1].[Key] + ) AS [s]) AS [Test1], ( + SELECT COUNT(*) + FROM ( + SELECT DISTINCT [c0].[Value2] + FROM ( + SELECT [p4].[Child2Id], 1 AS [Key] + FROM [Parents] AS [p4] + ) AS [p3] + LEFT JOIN [Child2] AS [c0] ON [p3].[Child2Id] = [c0].[Id] + WHERE [p0].[Key] = [p3].[Key] + ) AS [s0]) AS [Test2] +FROM ( + SELECT 1 AS [Key] + FROM [Parents] AS [p] +) AS [p0] +GROUP BY [p0].[Key] +"""); + } + + public override async Task Group_by_multiple_aggregate_joining_different_tables_with_query_filter(bool async) + { + await base.Group_by_multiple_aggregate_joining_different_tables_with_query_filter(async); + + AssertSql( + """ +SELECT ( + SELECT COUNT(*) + FROM ( + SELECT DISTINCT [c0].[Value1] + FROM ( + SELECT [p2].[ChildFilter1Id], 1 AS [Key] + FROM [Parents] AS [p2] + ) AS [p1] + LEFT JOIN ( + SELECT [c].[Id], [c].[Value1] + FROM [ChildFilter1] AS [c] + WHERE [c].[Filter1] = N'Filter1' + ) AS [c0] ON [p1].[ChildFilter1Id] = [c0].[Id] + WHERE [p0].[Key] = [p1].[Key] + ) AS [s]) AS [Test1], ( + SELECT COUNT(*) + FROM ( + SELECT DISTINCT [c2].[Value2] + FROM ( + SELECT [p4].[ChildFilter2Id], 1 AS [Key] + FROM [Parents] AS [p4] + ) AS [p3] + LEFT JOIN ( + SELECT [c1].[Id], [c1].[Value2] + FROM [ChildFilter2] AS [c1] + WHERE [c1].[Filter2] = N'Filter2' + ) AS [c2] ON [p3].[ChildFilter2Id] = [c2].[Id] + WHERE [p0].[Key] = [p3].[Key] + ) AS [s0]) AS [Test2] +FROM ( + SELECT 1 AS [Key] + FROM [Parents] AS [p] +) AS [p0] +GROUP BY [p0].[Key] +"""); + } + + public override async Task IsDeleted_query_filter_with_conversion_to_int_works(bool async) + { + await base.IsDeleted_query_filter_with_conversion_to_int_works(async); + + AssertSql( + """ +SELECT `s`.`SupplierId`, `s`.`IsDeleted`, `s`.`LocationId`, `s`.`Name`, `l0`.`LocationId`, `l0`.`Address`, `l0`.`IsDeleted` +FROM `Suppliers` AS `s` +LEFT JOIN ( + SELECT `l`.`LocationId`, `l`.`Address`, `l`.`IsDeleted` + FROM `Locations` AS `l` + WHERE `l`.`IsDeleted` = 0 +) AS `l0` ON `s`.`LocationId` = `l0`.`LocationId` +WHERE `s`.`IsDeleted` = 0 +ORDER BY `s`.`Name` +"""); + } +} diff --git a/test/EFCore.Jet.FunctionalTests/Query/AdHocQuerySplittingQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/AdHocQuerySplittingQueryJetTest.cs new file mode 100644 index 00000000..cd4e5d97 --- /dev/null +++ b/test/EFCore.Jet.FunctionalTests/Query/AdHocQuerySplittingQueryJetTest.cs @@ -0,0 +1,322 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Linq; +using System.Reflection; +using System.Threading.Tasks; +using EntityFrameworkCore.Jet.FunctionalTests.TestUtilities; +using EntityFrameworkCore.Jet.Infrastructure; +using EntityFrameworkCore.Jet.Infrastructure.Internal; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; + +namespace EntityFrameworkCore.Jet.FunctionalTests.Query; + +#nullable disable + +public class AdHocQuerySplittingQueryJetTest : AdHocQuerySplittingQueryTestBase +{ + protected override ITestStoreFactory TestStoreFactory + => JetTestStoreFactory.Instance; + + private static readonly FieldInfo _querySplittingBehaviorFieldInfo = + typeof(RelationalOptionsExtension).GetField("_querySplittingBehavior", BindingFlags.NonPublic | BindingFlags.Instance); + + protected override DbContextOptionsBuilder SetQuerySplittingBehavior( + DbContextOptionsBuilder optionsBuilder, + QuerySplittingBehavior splittingBehavior) + { + new JetDbContextOptionsBuilder(optionsBuilder).UseQuerySplittingBehavior(splittingBehavior); + + return optionsBuilder; + } + + protected override DbContextOptionsBuilder ClearQuerySplittingBehavior(DbContextOptionsBuilder optionsBuilder) + { + var extension = optionsBuilder.Options.FindExtension(); + if (extension == null) + { + extension = new JetOptionsExtension(); + } + else + { + _querySplittingBehaviorFieldInfo.SetValue(extension, null); + } + + ((IDbContextOptionsBuilderInfrastructure)optionsBuilder).AddOrUpdateExtension(extension); + + return optionsBuilder; + } + + protected override async Task CreateTestStore25225() + => await JetTestStore.CreateInitializedAsync(StoreName, multipleActiveResultSets: true); + + public override async Task Can_configure_SingleQuery_at_context_level() + { + await base.Can_configure_SingleQuery_at_context_level(); + + AssertSql( + """ +SELECT `p`.`Id`, `c`.`Id`, `c`.`ParentId` +FROM `Parents` AS `p` +LEFT JOIN `Child` AS `c` ON `p`.`Id` = `c`.`ParentId` +ORDER BY `p`.`Id` +""", + // + """ +SELECT `p`.`Id` +FROM `Parents` AS `p` +ORDER BY `p`.`Id` +""", + // + """ +SELECT `c`.`Id`, `c`.`ParentId`, `p`.`Id` +FROM `Parents` AS `p` +INNER JOIN `Child` AS `c` ON `p`.`Id` = `c`.`ParentId` +ORDER BY `p`.`Id` +""", + // + """ +SELECT `p`.`Id`, `c`.`Id`, `c`.`ParentId`, `a`.`Id`, `a`.`ParentId` +FROM (`Parents` AS `p` +LEFT JOIN `Child` AS `c` ON `p`.`Id` = `c`.`ParentId`) +LEFT JOIN `AnotherChild` AS `a` ON `p`.`Id` = `a`.`ParentId` +ORDER BY `p`.`Id`, `c`.`Id` +"""); + } + + public override async Task Can_configure_SplitQuery_at_context_level() + { + await base.Can_configure_SplitQuery_at_context_level(); + + AssertSql( + """ +SELECT `p`.`Id` +FROM `Parents` AS `p` +ORDER BY `p`.`Id` +""", + // + """ +SELECT `c`.`Id`, `c`.`ParentId`, `p`.`Id` +FROM `Parents` AS `p` +INNER JOIN `Child` AS `c` ON `p`.`Id` = `c`.`ParentId` +ORDER BY `p`.`Id` +""", + // + """ +SELECT `p`.`Id`, `c`.`Id`, `c`.`ParentId` +FROM `Parents` AS `p` +LEFT JOIN `Child` AS `c` ON `p`.`Id` = `c`.`ParentId` +ORDER BY `p`.`Id` +""", + // + """ +SELECT `p`.`Id` +FROM `Parents` AS `p` +ORDER BY `p`.`Id` +""", + // + """ +SELECT `c`.`Id`, `c`.`ParentId`, `p`.`Id` +FROM `Parents` AS `p` +INNER JOIN `Child` AS `c` ON `p`.`Id` = `c`.`ParentId` +ORDER BY `p`.`Id` +""", + // + """ +SELECT `a`.`Id`, `a`.`ParentId`, `p`.`Id` +FROM `Parents` AS `p` +INNER JOIN `AnotherChild` AS `a` ON `p`.`Id` = `a`.`ParentId` +ORDER BY `p`.`Id` +"""); + } + + public override async Task Unconfigured_query_splitting_behavior_throws_a_warning() + { + await base.Unconfigured_query_splitting_behavior_throws_a_warning(); + + AssertSql( + """ +SELECT `p`.`Id` +FROM `Parents` AS `p` +ORDER BY `p`.`Id` +""", + // + """ +SELECT `c`.`Id`, `c`.`ParentId`, `p`.`Id` +FROM `Parents` AS `p` +INNER JOIN `Child` AS `c` ON `p`.`Id` = `c`.`ParentId` +ORDER BY `p`.`Id` +""", + // + """ +SELECT `a`.`Id`, `a`.`ParentId`, `p`.`Id` +FROM `Parents` AS `p` +INNER JOIN `AnotherChild` AS `a` ON `p`.`Id` = `a`.`ParentId` +ORDER BY `p`.`Id` +"""); + } + + public override async Task Using_AsSingleQuery_without_context_configuration_does_not_throw_warning() + { + await base.Using_AsSingleQuery_without_context_configuration_does_not_throw_warning(); + + AssertSql( + """ +SELECT `p`.`Id`, `c`.`Id`, `c`.`ParentId`, `a`.`Id`, `a`.`ParentId` +FROM (`Parents` AS `p` +LEFT JOIN `Child` AS `c` ON `p`.`Id` = `c`.`ParentId`) +LEFT JOIN `AnotherChild` AS `a` ON `p`.`Id` = `a`.`ParentId` +ORDER BY `p`.`Id`, `c`.`Id` +"""); + } + + public override async Task SplitQuery_disposes_inner_data_readers() + { + await base.SplitQuery_disposes_inner_data_readers(); + + AssertSql( + """ +SELECT `p`.`Id` +FROM `Parents` AS `p` +ORDER BY `p`.`Id` +""", + // + """ +SELECT `c`.`Id`, `c`.`ParentId`, `p`.`Id` +FROM `Parents` AS `p` +INNER JOIN `Child` AS `c` ON `p`.`Id` = `c`.`ParentId` +ORDER BY `p`.`Id` +""", + // + """ +SELECT `a`.`Id`, `a`.`ParentId`, `p`.`Id` +FROM `Parents` AS `p` +INNER JOIN `AnotherChild` AS `a` ON `p`.`Id` = `a`.`ParentId` +ORDER BY `p`.`Id` +""", + // + """ +SELECT `p`.`Id` +FROM `Parents` AS `p` +ORDER BY `p`.`Id` +""", + // + """ +SELECT `c`.`Id`, `c`.`ParentId`, `p`.`Id` +FROM `Parents` AS `p` +INNER JOIN `Child` AS `c` ON `p`.`Id` = `c`.`ParentId` +ORDER BY `p`.`Id` +""", + // + """ +SELECT `a`.`Id`, `a`.`ParentId`, `p`.`Id` +FROM `Parents` AS `p` +INNER JOIN `AnotherChild` AS `a` ON `p`.`Id` = `a`.`ParentId` +ORDER BY `p`.`Id` +""", + // + """ +SELECT TOP 2 `p`.`Id` +FROM `Parents` AS `p` +ORDER BY `p`.`Id` +""", + // + """ +SELECT `c`.`Id`, `c`.`ParentId`, `p0`.`Id` +FROM ( + SELECT TOP 1 `p`.`Id` + FROM `Parents` AS `p` + ORDER BY `p`.`Id` +) AS `p0` +INNER JOIN `Child` AS `c` ON `p0`.`Id` = `c`.`ParentId` +ORDER BY `p0`.`Id` +""", + // + """ +SELECT `a`.`Id`, `a`.`ParentId`, `p1`.`Id` +FROM ( + SELECT TOP 1 `p`.`Id` + FROM `Parents` AS `p` + ORDER BY `p`.`Id` +) AS `p1` +INNER JOIN `AnotherChild` AS `a` ON `p1`.`Id` = `a`.`ParentId` +ORDER BY `p1`.`Id` +""", + // + """ +SELECT TOP 2 `p`.`Id` +FROM `Parents` AS `p` +ORDER BY `p`.`Id` +""", + // + """ +SELECT `c`.`Id`, `c`.`ParentId`, `p0`.`Id` +FROM ( + SELECT TOP 1 `p`.`Id` + FROM `Parents` AS `p` + ORDER BY `p`.`Id` +) AS `p0` +INNER JOIN `Child` AS `c` ON `p0`.`Id` = `c`.`ParentId` +ORDER BY `p0`.`Id` +""", + // + """ +SELECT `a`.`Id`, `a`.`ParentId`, `p1`.`Id` +FROM ( + SELECT TOP 1 `p`.`Id` + FROM `Parents` AS `p` + ORDER BY `p`.`Id` +) AS `p1` +INNER JOIN `AnotherChild` AS `a` ON `p1`.`Id` = `a`.`ParentId` +ORDER BY `p1`.`Id` +"""); + } + + [ConditionalFact] + public virtual async Task Using_AsSplitQuery_without_multiple_active_result_sets_works() + { + var contextFactory = await InitializeAsync( + seed: c => c.SeedAsync(), + createTestStore: async () => await JetTestStore.CreateInitializedAsync(StoreName, multipleActiveResultSets: false)); + + using var context = contextFactory.CreateContext(); + context.Parents.Include(p => p.Children1).Include(p => p.Children2).AsSplitQuery().ToList(); + + AssertSql( + """ +SELECT `p`.`Id` +FROM `Parents` AS `p` +ORDER BY `p`.`Id` +""", + // + """ +SELECT `c`.`Id`, `c`.`ParentId`, `p`.`Id` +FROM `Parents` AS `p` +INNER JOIN `Child` AS `c` ON `p`.`Id` = `c`.`ParentId` +ORDER BY `p`.`Id` +""", + // + """ +SELECT `a`.`Id`, `a`.`ParentId`, `p`.`Id` +FROM `Parents` AS `p` +INNER JOIN `AnotherChild` AS `a` ON `p`.`Id` = `a`.`ParentId` +ORDER BY `p`.`Id` +"""); + } + + public override async Task NoTracking_split_query_creates_only_required_instances(bool async) + { + await base.NoTracking_split_query_creates_only_required_instances(async); + + AssertSql( + """ +SELECT TOP 1 `t`.`Id`, `t`.`Value` +FROM `Tests` AS `t` +ORDER BY `t`.`Id` +"""); + } +} diff --git a/test/EFCore.Jet.FunctionalTests/Query/ComplexNavigationsCollectionsQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/ComplexNavigationsCollectionsQueryJetTest.cs index 73f4decc..409db966 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/ComplexNavigationsCollectionsQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/ComplexNavigationsCollectionsQueryJetTest.cs @@ -31,14 +31,14 @@ public override async Task Multi_level_include_one_to_many_optional_and_one_to_m AssertSql( """ -SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `t`.`Id`, `t`.`Date`, `t`.`Level1_Optional_Id`, `t`.`Level1_Required_Id`, `t`.`Name`, `t`.`OneToMany_Optional_Inverse2Id`, `t`.`OneToMany_Optional_Self_Inverse2Id`, `t`.`OneToMany_Required_Inverse2Id`, `t`.`OneToMany_Required_Self_Inverse2Id`, `t`.`OneToOne_Optional_PK_Inverse2Id`, `t`.`OneToOne_Optional_Self2Id`, `t`.`Id0`, `t`.`Level2_Optional_Id`, `t`.`Level2_Required_Id`, `t`.`Name0`, `t`.`OneToMany_Optional_Inverse3Id`, `t`.`OneToMany_Optional_Self_Inverse3Id`, `t`.`OneToMany_Required_Inverse3Id`, `t`.`OneToMany_Required_Self_Inverse3Id`, `t`.`OneToOne_Optional_PK_Inverse3Id`, `t`.`OneToOne_Optional_Self3Id` +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id` FROM `LevelOne` AS `l` LEFT JOIN ( SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id` AS `Id0`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name` AS `Name0`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` FROM `LevelTwo` AS `l0` LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id` -) AS `t` ON `l`.`Id` = `t`.`OneToMany_Optional_Inverse2Id` -ORDER BY `l`.`Id`, `t`.`Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `s`.`Id` """); } @@ -49,20 +49,20 @@ await base .Multi_level_include_correct_PK_is_chosen_as_the_join_predicate_for_queries_that_join_same_table_multiple_times(async); AssertSql( -""" -SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `t0`.`Id`, `t0`.`Date`, `t0`.`Level1_Optional_Id`, `t0`.`Level1_Required_Id`, `t0`.`Name`, `t0`.`OneToMany_Optional_Inverse2Id`, `t0`.`OneToMany_Optional_Self_Inverse2Id`, `t0`.`OneToMany_Required_Inverse2Id`, `t0`.`OneToMany_Required_Self_Inverse2Id`, `t0`.`OneToOne_Optional_PK_Inverse2Id`, `t0`.`OneToOne_Optional_Self2Id`, `t0`.`Id0`, `t0`.`Level2_Optional_Id`, `t0`.`Level2_Required_Id`, `t0`.`Name0`, `t0`.`OneToMany_Optional_Inverse3Id`, `t0`.`OneToMany_Optional_Self_Inverse3Id`, `t0`.`OneToMany_Required_Inverse3Id`, `t0`.`OneToMany_Required_Self_Inverse3Id`, `t0`.`OneToOne_Optional_PK_Inverse3Id`, `t0`.`OneToOne_Optional_Self3Id`, `t0`.`Id00`, `t0`.`Date0`, `t0`.`Level1_Optional_Id0`, `t0`.`Level1_Required_Id0`, `t0`.`Name00`, `t0`.`OneToMany_Optional_Inverse2Id0`, `t0`.`OneToMany_Optional_Self_Inverse2Id0`, `t0`.`OneToMany_Required_Inverse2Id0`, `t0`.`OneToMany_Required_Self_Inverse2Id0`, `t0`.`OneToOne_Optional_PK_Inverse2Id0`, `t0`.`OneToOne_Optional_Self2Id0`, `t0`.`Id1`, `t0`.`Level2_Optional_Id0`, `t0`.`Level2_Required_Id0`, `t0`.`Name1`, `t0`.`OneToMany_Optional_Inverse3Id0`, `t0`.`OneToMany_Optional_Self_Inverse3Id0`, `t0`.`OneToMany_Required_Inverse3Id0`, `t0`.`OneToMany_Required_Self_Inverse3Id0`, `t0`.`OneToOne_Optional_PK_Inverse3Id0`, `t0`.`OneToOne_Optional_Self3Id0` + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `s0`.`Id`, `s0`.`Date`, `s0`.`Level1_Optional_Id`, `s0`.`Level1_Required_Id`, `s0`.`Name`, `s0`.`OneToMany_Optional_Inverse2Id`, `s0`.`OneToMany_Optional_Self_Inverse2Id`, `s0`.`OneToMany_Required_Inverse2Id`, `s0`.`OneToMany_Required_Self_Inverse2Id`, `s0`.`OneToOne_Optional_PK_Inverse2Id`, `s0`.`OneToOne_Optional_Self2Id`, `s0`.`Id0`, `s0`.`Level2_Optional_Id`, `s0`.`Level2_Required_Id`, `s0`.`Name0`, `s0`.`OneToMany_Optional_Inverse3Id`, `s0`.`OneToMany_Optional_Self_Inverse3Id`, `s0`.`OneToMany_Required_Inverse3Id`, `s0`.`OneToMany_Required_Self_Inverse3Id`, `s0`.`OneToOne_Optional_PK_Inverse3Id`, `s0`.`OneToOne_Optional_Self3Id`, `s0`.`Id00`, `s0`.`Date0`, `s0`.`Level1_Optional_Id0`, `s0`.`Level1_Required_Id0`, `s0`.`Name00`, `s0`.`OneToMany_Optional_Inverse2Id0`, `s0`.`OneToMany_Optional_Self_Inverse2Id0`, `s0`.`OneToMany_Required_Inverse2Id0`, `s0`.`OneToMany_Required_Self_Inverse2Id0`, `s0`.`OneToOne_Optional_PK_Inverse2Id0`, `s0`.`OneToOne_Optional_Self2Id0`, `s0`.`Id1`, `s0`.`Level2_Optional_Id0`, `s0`.`Level2_Required_Id0`, `s0`.`Name1`, `s0`.`OneToMany_Optional_Inverse3Id0`, `s0`.`OneToMany_Optional_Self_Inverse3Id0`, `s0`.`OneToMany_Required_Inverse3Id0`, `s0`.`OneToMany_Required_Self_Inverse3Id0`, `s0`.`OneToOne_Optional_PK_Inverse3Id0`, `s0`.`OneToOne_Optional_Self3Id0` FROM `LevelOne` AS `l` LEFT JOIN ( - SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `t`.`Id` AS `Id0`, `t`.`Level2_Optional_Id`, `t`.`Level2_Required_Id`, `t`.`Name` AS `Name0`, `t`.`OneToMany_Optional_Inverse3Id`, `t`.`OneToMany_Optional_Self_Inverse3Id`, `t`.`OneToMany_Required_Inverse3Id`, `t`.`OneToMany_Required_Self_Inverse3Id`, `t`.`OneToOne_Optional_PK_Inverse3Id`, `t`.`OneToOne_Optional_Self3Id`, `t`.`Id0` AS `Id00`, `t`.`Date` AS `Date0`, `t`.`Level1_Optional_Id` AS `Level1_Optional_Id0`, `t`.`Level1_Required_Id` AS `Level1_Required_Id0`, `t`.`Name0` AS `Name00`, `t`.`OneToMany_Optional_Inverse2Id` AS `OneToMany_Optional_Inverse2Id0`, `t`.`OneToMany_Optional_Self_Inverse2Id` AS `OneToMany_Optional_Self_Inverse2Id0`, `t`.`OneToMany_Required_Inverse2Id` AS `OneToMany_Required_Inverse2Id0`, `t`.`OneToMany_Required_Self_Inverse2Id` AS `OneToMany_Required_Self_Inverse2Id0`, `t`.`OneToOne_Optional_PK_Inverse2Id` AS `OneToOne_Optional_PK_Inverse2Id0`, `t`.`OneToOne_Optional_Self2Id` AS `OneToOne_Optional_Self2Id0`, `t`.`Id1`, `t`.`Level2_Optional_Id0`, `t`.`Level2_Required_Id0`, `t`.`Name1`, `t`.`OneToMany_Optional_Inverse3Id0`, `t`.`OneToMany_Optional_Self_Inverse3Id0`, `t`.`OneToMany_Required_Inverse3Id0`, `t`.`OneToMany_Required_Self_Inverse3Id0`, `t`.`OneToOne_Optional_PK_Inverse3Id0`, `t`.`OneToOne_Optional_Self3Id0` + SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `s`.`Id` AS `Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name` AS `Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `s`.`Id0` AS `Id00`, `s`.`Date` AS `Date0`, `s`.`Level1_Optional_Id` AS `Level1_Optional_Id0`, `s`.`Level1_Required_Id` AS `Level1_Required_Id0`, `s`.`Name0` AS `Name00`, `s`.`OneToMany_Optional_Inverse2Id` AS `OneToMany_Optional_Inverse2Id0`, `s`.`OneToMany_Optional_Self_Inverse2Id` AS `OneToMany_Optional_Self_Inverse2Id0`, `s`.`OneToMany_Required_Inverse2Id` AS `OneToMany_Required_Inverse2Id0`, `s`.`OneToMany_Required_Self_Inverse2Id` AS `OneToMany_Required_Self_Inverse2Id0`, `s`.`OneToOne_Optional_PK_Inverse2Id` AS `OneToOne_Optional_PK_Inverse2Id0`, `s`.`OneToOne_Optional_Self2Id` AS `OneToOne_Optional_Self2Id0`, `s`.`Id1`, `s`.`Level2_Optional_Id0`, `s`.`Level2_Required_Id0`, `s`.`Name1`, `s`.`OneToMany_Optional_Inverse3Id0`, `s`.`OneToMany_Optional_Self_Inverse3Id0`, `s`.`OneToMany_Required_Inverse3Id0`, `s`.`OneToMany_Required_Self_Inverse3Id0`, `s`.`OneToOne_Optional_PK_Inverse3Id0`, `s`.`OneToOne_Optional_Self3Id0` FROM `LevelTwo` AS `l0` LEFT JOIN ( SELECT `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l2`.`Id` AS `Id0`, `l2`.`Date`, `l2`.`Level1_Optional_Id`, `l2`.`Level1_Required_Id`, `l2`.`Name` AS `Name0`, `l2`.`OneToMany_Optional_Inverse2Id`, `l2`.`OneToMany_Optional_Self_Inverse2Id`, `l2`.`OneToMany_Required_Inverse2Id`, `l2`.`OneToMany_Required_Self_Inverse2Id`, `l2`.`OneToOne_Optional_PK_Inverse2Id`, `l2`.`OneToOne_Optional_Self2Id`, `l3`.`Id` AS `Id1`, `l3`.`Level2_Optional_Id` AS `Level2_Optional_Id0`, `l3`.`Level2_Required_Id` AS `Level2_Required_Id0`, `l3`.`Name` AS `Name1`, `l3`.`OneToMany_Optional_Inverse3Id` AS `OneToMany_Optional_Inverse3Id0`, `l3`.`OneToMany_Optional_Self_Inverse3Id` AS `OneToMany_Optional_Self_Inverse3Id0`, `l3`.`OneToMany_Required_Inverse3Id` AS `OneToMany_Required_Inverse3Id0`, `l3`.`OneToMany_Required_Self_Inverse3Id` AS `OneToMany_Required_Self_Inverse3Id0`, `l3`.`OneToOne_Optional_PK_Inverse3Id` AS `OneToOne_Optional_PK_Inverse3Id0`, `l3`.`OneToOne_Optional_Self3Id` AS `OneToOne_Optional_Self3Id0` FROM (`LevelThree` AS `l1` INNER JOIN `LevelTwo` AS `l2` ON `l1`.`OneToMany_Required_Inverse3Id` = `l2`.`Id`) LEFT JOIN `LevelThree` AS `l3` ON `l2`.`Id` = `l3`.`OneToMany_Optional_Inverse3Id` - ) AS `t` ON `l0`.`Id` = `t`.`OneToMany_Optional_Inverse3Id` -) AS `t0` ON `l`.`Id` = `t0`.`OneToMany_Optional_Inverse2Id` -ORDER BY `l`.`Id`, `t0`.`Id`, `t0`.`Id0`, `t0`.`Id00` + ) AS `s` ON `l0`.`Id` = `s`.`OneToMany_Optional_Inverse3Id` +) AS `s0` ON `l`.`Id` = `s0`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `s0`.`Id`, `s0`.`Id0`, `s0`.`Id00` """); } @@ -71,8 +71,8 @@ public override async Task Multiple_complex_includes(bool async) await base.Multiple_complex_includes(async); AssertSql( -""" -SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `t`.`Id`, `t`.`Date`, `t`.`Level1_Optional_Id`, `t`.`Level1_Required_Id`, `t`.`Name`, `t`.`OneToMany_Optional_Inverse2Id`, `t`.`OneToMany_Optional_Self_Inverse2Id`, `t`.`OneToMany_Required_Inverse2Id`, `t`.`OneToMany_Required_Self_Inverse2Id`, `t`.`OneToOne_Optional_PK_Inverse2Id`, `t`.`OneToOne_Optional_Self2Id`, `t`.`Id0`, `t`.`Level2_Optional_Id`, `t`.`Level2_Required_Id`, `t`.`Name0`, `t`.`OneToMany_Optional_Inverse3Id`, `t`.`OneToMany_Optional_Self_Inverse3Id`, `t`.`OneToMany_Required_Inverse3Id`, `t`.`OneToMany_Required_Self_Inverse3Id`, `t`.`OneToOne_Optional_PK_Inverse3Id`, `t`.`OneToOne_Optional_Self3Id` + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id` FROM ((`LevelOne` AS `l` LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id`) @@ -80,8 +80,8 @@ LEFT JOIN ( SELECT `l2`.`Id`, `l2`.`Date`, `l2`.`Level1_Optional_Id`, `l2`.`Level1_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse2Id`, `l2`.`OneToMany_Optional_Self_Inverse2Id`, `l2`.`OneToMany_Required_Inverse2Id`, `l2`.`OneToMany_Required_Self_Inverse2Id`, `l2`.`OneToOne_Optional_PK_Inverse2Id`, `l2`.`OneToOne_Optional_Self2Id`, `l3`.`Id` AS `Id0`, `l3`.`Level2_Optional_Id`, `l3`.`Level2_Required_Id`, `l3`.`Name` AS `Name0`, `l3`.`OneToMany_Optional_Inverse3Id`, `l3`.`OneToMany_Optional_Self_Inverse3Id`, `l3`.`OneToMany_Required_Inverse3Id`, `l3`.`OneToMany_Required_Self_Inverse3Id`, `l3`.`OneToOne_Optional_PK_Inverse3Id`, `l3`.`OneToOne_Optional_Self3Id` FROM `LevelTwo` AS `l2` LEFT JOIN `LevelThree` AS `l3` ON `l2`.`Id` = `l3`.`Level2_Optional_Id` -) AS `t` ON `l`.`Id` = `t`.`OneToMany_Optional_Inverse2Id` -ORDER BY `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `t`.`Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `s`.`Id` """); } @@ -91,7 +91,7 @@ public override async Task Multiple_complex_includes_self_ref(bool async) AssertSql( """ -SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Name`, `l0`.`OneToMany_Optional_Self_Inverse1Id`, `l0`.`OneToMany_Required_Self_Inverse1Id`, `l0`.`OneToOne_Optional_Self1Id`, `l1`.`Id`, `l1`.`Date`, `l1`.`Name`, `l1`.`OneToMany_Optional_Self_Inverse1Id`, `l1`.`OneToMany_Required_Self_Inverse1Id`, `l1`.`OneToOne_Optional_Self1Id`, `t`.`Id`, `t`.`Date`, `t`.`Name`, `t`.`OneToMany_Optional_Self_Inverse1Id`, `t`.`OneToMany_Required_Self_Inverse1Id`, `t`.`OneToOne_Optional_Self1Id`, `t`.`Id0`, `t`.`Date0`, `t`.`Name0`, `t`.`OneToMany_Optional_Self_Inverse1Id0`, `t`.`OneToMany_Required_Self_Inverse1Id0`, `t`.`OneToOne_Optional_Self1Id0` +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Name`, `l0`.`OneToMany_Optional_Self_Inverse1Id`, `l0`.`OneToMany_Required_Self_Inverse1Id`, `l0`.`OneToOne_Optional_Self1Id`, `l1`.`Id`, `l1`.`Date`, `l1`.`Name`, `l1`.`OneToMany_Optional_Self_Inverse1Id`, `l1`.`OneToMany_Required_Self_Inverse1Id`, `l1`.`OneToOne_Optional_Self1Id`, `s`.`Id`, `s`.`Date`, `s`.`Name`, `s`.`OneToMany_Optional_Self_Inverse1Id`, `s`.`OneToMany_Required_Self_Inverse1Id`, `s`.`OneToOne_Optional_Self1Id`, `s`.`Id0`, `s`.`Date0`, `s`.`Name0`, `s`.`OneToMany_Optional_Self_Inverse1Id0`, `s`.`OneToMany_Required_Self_Inverse1Id0`, `s`.`OneToOne_Optional_Self1Id0` FROM ((`LevelOne` AS `l` LEFT JOIN `LevelOne` AS `l0` ON `l`.`OneToOne_Optional_Self1Id` = `l0`.`Id`) LEFT JOIN `LevelOne` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Self_Inverse1Id`) @@ -99,8 +99,8 @@ LEFT JOIN ( SELECT `l2`.`Id`, `l2`.`Date`, `l2`.`Name`, `l2`.`OneToMany_Optional_Self_Inverse1Id`, `l2`.`OneToMany_Required_Self_Inverse1Id`, `l2`.`OneToOne_Optional_Self1Id`, `l3`.`Id` AS `Id0`, `l3`.`Date` AS `Date0`, `l3`.`Name` AS `Name0`, `l3`.`OneToMany_Optional_Self_Inverse1Id` AS `OneToMany_Optional_Self_Inverse1Id0`, `l3`.`OneToMany_Required_Self_Inverse1Id` AS `OneToMany_Required_Self_Inverse1Id0`, `l3`.`OneToOne_Optional_Self1Id` AS `OneToOne_Optional_Self1Id0` FROM `LevelOne` AS `l2` LEFT JOIN `LevelOne` AS `l3` ON `l2`.`OneToOne_Optional_Self1Id` = `l3`.`Id` -) AS `t` ON `l`.`Id` = `t`.`OneToMany_Optional_Self_Inverse1Id` -ORDER BY `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `t`.`Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Self_Inverse1Id` +ORDER BY `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `s`.`Id` """); } @@ -138,14 +138,14 @@ public override async Task Include_collection_then_reference(bool async) AssertSql( """ -SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `t`.`Id`, `t`.`Date`, `t`.`Level1_Optional_Id`, `t`.`Level1_Required_Id`, `t`.`Name`, `t`.`OneToMany_Optional_Inverse2Id`, `t`.`OneToMany_Optional_Self_Inverse2Id`, `t`.`OneToMany_Required_Inverse2Id`, `t`.`OneToMany_Required_Self_Inverse2Id`, `t`.`OneToOne_Optional_PK_Inverse2Id`, `t`.`OneToOne_Optional_Self2Id`, `t`.`Id0`, `t`.`Level2_Optional_Id`, `t`.`Level2_Required_Id`, `t`.`Name0`, `t`.`OneToMany_Optional_Inverse3Id`, `t`.`OneToMany_Optional_Self_Inverse3Id`, `t`.`OneToMany_Required_Inverse3Id`, `t`.`OneToMany_Required_Self_Inverse3Id`, `t`.`OneToOne_Optional_PK_Inverse3Id`, `t`.`OneToOne_Optional_Self3Id` +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id` FROM `LevelOne` AS `l` LEFT JOIN ( SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id` AS `Id0`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name` AS `Name0`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` FROM `LevelTwo` AS `l0` LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Optional_Id` -) AS `t` ON `l`.`Id` = `t`.`OneToMany_Optional_Inverse2Id` -ORDER BY `l`.`Id`, `t`.`Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `s`.`Id` """); } @@ -167,8 +167,8 @@ public override async Task Multiple_complex_include_select(bool async) await base.Multiple_complex_include_select(async); AssertSql( -""" -SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `t`.`Id`, `t`.`Date`, `t`.`Level1_Optional_Id`, `t`.`Level1_Required_Id`, `t`.`Name`, `t`.`OneToMany_Optional_Inverse2Id`, `t`.`OneToMany_Optional_Self_Inverse2Id`, `t`.`OneToMany_Required_Inverse2Id`, `t`.`OneToMany_Required_Self_Inverse2Id`, `t`.`OneToOne_Optional_PK_Inverse2Id`, `t`.`OneToOne_Optional_Self2Id`, `t`.`Id0`, `t`.`Level2_Optional_Id`, `t`.`Level2_Required_Id`, `t`.`Name0`, `t`.`OneToMany_Optional_Inverse3Id`, `t`.`OneToMany_Optional_Self_Inverse3Id`, `t`.`OneToMany_Required_Inverse3Id`, `t`.`OneToMany_Required_Self_Inverse3Id`, `t`.`OneToOne_Optional_PK_Inverse3Id`, `t`.`OneToOne_Optional_Self3Id` + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id` FROM ((`LevelOne` AS `l` LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id`) @@ -176,8 +176,8 @@ LEFT JOIN ( SELECT `l2`.`Id`, `l2`.`Date`, `l2`.`Level1_Optional_Id`, `l2`.`Level1_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse2Id`, `l2`.`OneToMany_Optional_Self_Inverse2Id`, `l2`.`OneToMany_Required_Inverse2Id`, `l2`.`OneToMany_Required_Self_Inverse2Id`, `l2`.`OneToOne_Optional_PK_Inverse2Id`, `l2`.`OneToOne_Optional_Self2Id`, `l3`.`Id` AS `Id0`, `l3`.`Level2_Optional_Id`, `l3`.`Level2_Required_Id`, `l3`.`Name` AS `Name0`, `l3`.`OneToMany_Optional_Inverse3Id`, `l3`.`OneToMany_Optional_Self_Inverse3Id`, `l3`.`OneToMany_Required_Inverse3Id`, `l3`.`OneToMany_Required_Self_Inverse3Id`, `l3`.`OneToOne_Optional_PK_Inverse3Id`, `l3`.`OneToOne_Optional_Self3Id` FROM `LevelTwo` AS `l2` LEFT JOIN `LevelThree` AS `l3` ON `l2`.`Id` = `l3`.`Level2_Optional_Id` -) AS `t` ON `l`.`Id` = `t`.`OneToMany_Optional_Inverse2Id` -ORDER BY `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `t`.`Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `s`.`Id` """); } @@ -186,17 +186,17 @@ public override async Task Include_nested_with_optional_navigation(bool async) await base.Include_nested_with_optional_navigation(async); AssertSql( -""" -SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `t`.`Id`, `t`.`Level2_Optional_Id`, `t`.`Level2_Required_Id`, `t`.`Name`, `t`.`OneToMany_Optional_Inverse3Id`, `t`.`OneToMany_Optional_Self_Inverse3Id`, `t`.`OneToMany_Required_Inverse3Id`, `t`.`OneToMany_Required_Self_Inverse3Id`, `t`.`OneToOne_Optional_PK_Inverse3Id`, `t`.`OneToOne_Optional_Self3Id`, `t`.`Id0`, `t`.`Level3_Optional_Id`, `t`.`Level3_Required_Id`, `t`.`Name0`, `t`.`OneToMany_Optional_Inverse4Id`, `t`.`OneToMany_Optional_Self_Inverse4Id`, `t`.`OneToMany_Required_Inverse4Id`, `t`.`OneToMany_Required_Self_Inverse4Id`, `t`.`OneToOne_Optional_PK_Inverse4Id`, `t`.`OneToOne_Optional_Self4Id` + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `s`.`Id`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `s`.`Id0`, `s`.`Level3_Optional_Id`, `s`.`Level3_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse4Id`, `s`.`OneToMany_Optional_Self_Inverse4Id`, `s`.`OneToMany_Required_Inverse4Id`, `s`.`OneToMany_Required_Self_Inverse4Id`, `s`.`OneToOne_Optional_PK_Inverse4Id`, `s`.`OneToOne_Optional_Self4Id` FROM (`LevelOne` AS `l` LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) LEFT JOIN ( SELECT `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l2`.`Id` AS `Id0`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name` AS `Name0`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id` FROM `LevelThree` AS `l1` LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`Level3_Required_Id` -) AS `t` ON `l0`.`Id` = `t`.`OneToMany_Required_Inverse3Id` +) AS `s` ON `l0`.`Id` = `s`.`OneToMany_Required_Inverse3Id` WHERE `l0`.`Name` <> 'L2 09' OR `l0`.`Name` IS NULL -ORDER BY `l`.`Id`, `l0`.`Id`, `t`.`Id` +ORDER BY `l`.`Id`, `l0`.`Id`, `s`.`Id` """); } @@ -205,21 +205,21 @@ public override async Task Complex_multi_include_with_order_by_and_paging(bool a await base.Complex_multi_include_with_order_by_and_paging(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`Date`, `t`.`Name`, `t`.`OneToMany_Optional_Self_Inverse1Id`, `t`.`OneToMany_Required_Self_Inverse1Id`, `t`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l2`.`Id`, `l2`.`Level2_Optional_Id`, `l2`.`Level2_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse3Id`, `l2`.`OneToMany_Optional_Self_Inverse3Id`, `l2`.`OneToMany_Required_Inverse3Id`, `l2`.`OneToMany_Required_Self_Inverse3Id`, `l2`.`OneToOne_Optional_PK_Inverse3Id`, `l2`.`OneToOne_Optional_Self3Id` + """ +SELECT `l1`.`Id`, `l1`.`Date`, `l1`.`Name`, `l1`.`OneToMany_Optional_Self_Inverse1Id`, `l1`.`OneToMany_Required_Self_Inverse1Id`, `l1`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l2`.`Id`, `l2`.`Level2_Optional_Id`, `l2`.`Level2_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse3Id`, `l2`.`OneToMany_Optional_Self_Inverse3Id`, `l2`.`OneToMany_Required_Inverse3Id`, `l2`.`OneToMany_Required_Self_Inverse3Id`, `l2`.`OneToOne_Optional_PK_Inverse3Id`, `l2`.`OneToOne_Optional_Self3Id`, `l3`.`Id`, `l3`.`Level2_Optional_Id`, `l3`.`Level2_Required_Id`, `l3`.`Name`, `l3`.`OneToMany_Optional_Inverse3Id`, `l3`.`OneToMany_Optional_Self_Inverse3Id`, `l3`.`OneToMany_Required_Inverse3Id`, `l3`.`OneToMany_Required_Self_Inverse3Id`, `l3`.`OneToOne_Optional_PK_Inverse3Id`, `l3`.`OneToOne_Optional_Self3Id` FROM ((( - SELECT TOP 10 `t0`.`Id`, `t0`.`Date`, `t0`.`Name`, `t0`.`OneToMany_Optional_Self_Inverse1Id`, `t0`.`OneToMany_Required_Self_Inverse1Id`, `t0`.`OneToOne_Optional_Self1Id` + SELECT TOP 10 `l4`.`Id`, `l4`.`Date`, `l4`.`Name`, `l4`.`OneToMany_Optional_Self_Inverse1Id`, `l4`.`OneToMany_Required_Self_Inverse1Id`, `l4`.`OneToOne_Optional_Self1Id` FROM ( SELECT TOP 10 `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` FROM `LevelOne` AS `l` ORDER BY `l`.`Name` - ) AS `t0` - ORDER BY `t0`.`Name` DESC -) AS `t` -LEFT JOIN `LevelTwo` AS `l0` ON `t`.`Id` = `l0`.`Level1_Required_Id`) -LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id`) -LEFT JOIN `LevelThree` AS `l2` ON `l0`.`Id` = `l2`.`OneToMany_Required_Inverse3Id` -ORDER BY `t`.`Name`, `t`.`Id`, `l0`.`Id`, `l1`.`Id` + ) AS `l4` + ORDER BY `l4`.`Name` DESC +) AS `l1` +LEFT JOIN `LevelTwo` AS `l0` ON `l1`.`Id` = `l0`.`Level1_Required_Id`) +LEFT JOIN `LevelThree` AS `l2` ON `l0`.`Id` = `l2`.`OneToMany_Optional_Inverse3Id`) +LEFT JOIN `LevelThree` AS `l3` ON `l0`.`Id` = `l3`.`OneToMany_Required_Inverse3Id` +ORDER BY `l1`.`Name`, `l1`.`Id`, `l0`.`Id`, `l2`.`Id` """); } @@ -228,22 +228,22 @@ public override async Task Complex_multi_include_with_order_by_and_paging_joins_ await base.Complex_multi_include_with_order_by_and_paging_joins_on_correct_key(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`Date`, `t`.`Name`, `t`.`OneToMany_Optional_Self_Inverse1Id`, `t`.`OneToMany_Required_Self_Inverse1Id`, `t`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id`, `l2`.`Id`, `l2`.`Level2_Optional_Id`, `l2`.`Level2_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse3Id`, `l2`.`OneToMany_Optional_Self_Inverse3Id`, `l2`.`OneToMany_Required_Inverse3Id`, `l2`.`OneToMany_Required_Self_Inverse3Id`, `l2`.`OneToOne_Optional_PK_Inverse3Id`, `l2`.`OneToOne_Optional_Self3Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id`, `l3`.`Id`, `l3`.`Level2_Optional_Id`, `l3`.`Level2_Required_Id`, `l3`.`Name`, `l3`.`OneToMany_Optional_Inverse3Id`, `l3`.`OneToMany_Optional_Self_Inverse3Id`, `l3`.`OneToMany_Required_Inverse3Id`, `l3`.`OneToMany_Required_Self_Inverse3Id`, `l3`.`OneToOne_Optional_PK_Inverse3Id`, `l3`.`OneToOne_Optional_Self3Id` + """ +SELECT `l1`.`Id`, `l1`.`Date`, `l1`.`Name`, `l1`.`OneToMany_Optional_Self_Inverse1Id`, `l1`.`OneToMany_Required_Self_Inverse1Id`, `l1`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l2`.`Id`, `l3`.`Id`, `l3`.`Level2_Optional_Id`, `l3`.`Level2_Required_Id`, `l3`.`Name`, `l3`.`OneToMany_Optional_Inverse3Id`, `l3`.`OneToMany_Optional_Self_Inverse3Id`, `l3`.`OneToMany_Required_Inverse3Id`, `l3`.`OneToMany_Required_Self_Inverse3Id`, `l3`.`OneToOne_Optional_PK_Inverse3Id`, `l3`.`OneToOne_Optional_Self3Id`, `l2`.`Date`, `l2`.`Level1_Optional_Id`, `l2`.`Level1_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse2Id`, `l2`.`OneToMany_Optional_Self_Inverse2Id`, `l2`.`OneToMany_Required_Inverse2Id`, `l2`.`OneToMany_Required_Self_Inverse2Id`, `l2`.`OneToOne_Optional_PK_Inverse2Id`, `l2`.`OneToOne_Optional_Self2Id`, `l4`.`Id`, `l4`.`Level2_Optional_Id`, `l4`.`Level2_Required_Id`, `l4`.`Name`, `l4`.`OneToMany_Optional_Inverse3Id`, `l4`.`OneToMany_Optional_Self_Inverse3Id`, `l4`.`OneToMany_Required_Inverse3Id`, `l4`.`OneToMany_Required_Self_Inverse3Id`, `l4`.`OneToOne_Optional_PK_Inverse3Id`, `l4`.`OneToOne_Optional_Self3Id` FROM (((( - SELECT TOP 10 `t0`.`Id`, `t0`.`Date`, `t0`.`Name`, `t0`.`OneToMany_Optional_Self_Inverse1Id`, `t0`.`OneToMany_Required_Self_Inverse1Id`, `t0`.`OneToOne_Optional_Self1Id` + SELECT TOP 10 `l5`.`Id`, `l5`.`Date`, `l5`.`Name`, `l5`.`OneToMany_Optional_Self_Inverse1Id`, `l5`.`OneToMany_Required_Self_Inverse1Id`, `l5`.`OneToOne_Optional_Self1Id` FROM ( SELECT TOP 10 `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` FROM `LevelOne` AS `l` ORDER BY `l`.`Name` - ) AS `t0` - ORDER BY `t0`.`Name` DESC -) AS `t` -LEFT JOIN `LevelTwo` AS `l0` ON `t`.`Id` = `l0`.`Level1_Optional_Id`) -LEFT JOIN `LevelTwo` AS `l1` ON `t`.`Id` = `l1`.`Level1_Required_Id`) -LEFT JOIN `LevelThree` AS `l2` ON `l0`.`Id` = `l2`.`OneToMany_Optional_Inverse3Id`) -LEFT JOIN `LevelThree` AS `l3` ON `l1`.`Id` = `l3`.`OneToMany_Required_Inverse3Id` -ORDER BY `t`.`Name`, `t`.`Id`, `l0`.`Id`, `l1`.`Id`, `l2`.`Id` + ) AS `l5` + ORDER BY `l5`.`Name` DESC +) AS `l1` +LEFT JOIN `LevelTwo` AS `l0` ON `l1`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelTwo` AS `l2` ON `l1`.`Id` = `l2`.`Level1_Required_Id`) +LEFT JOIN `LevelThree` AS `l3` ON `l0`.`Id` = `l3`.`OneToMany_Optional_Inverse3Id`) +LEFT JOIN `LevelThree` AS `l4` ON `l2`.`Id` = `l4`.`OneToMany_Required_Inverse3Id` +ORDER BY `l1`.`Name`, `l1`.`Id`, `l0`.`Id`, `l2`.`Id`, `l3`.`Id` """); } @@ -252,21 +252,21 @@ public override async Task Complex_multi_include_with_order_by_and_paging_joins_ await base.Complex_multi_include_with_order_by_and_paging_joins_on_correct_key2(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`Date`, `t`.`Name`, `t`.`OneToMany_Optional_Self_Inverse1Id`, `t`.`OneToMany_Required_Self_Inverse1Id`, `t`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l2`.`Id`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id` + """ +SELECT `l1`.`Id`, `l1`.`Date`, `l1`.`Name`, `l1`.`OneToMany_Optional_Self_Inverse1Id`, `l1`.`OneToMany_Required_Self_Inverse1Id`, `l1`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l2`.`Id`, `l2`.`Level2_Optional_Id`, `l2`.`Level2_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse3Id`, `l2`.`OneToMany_Optional_Self_Inverse3Id`, `l2`.`OneToMany_Required_Inverse3Id`, `l2`.`OneToMany_Required_Self_Inverse3Id`, `l2`.`OneToOne_Optional_PK_Inverse3Id`, `l2`.`OneToOne_Optional_Self3Id`, `l3`.`Id`, `l3`.`Level3_Optional_Id`, `l3`.`Level3_Required_Id`, `l3`.`Name`, `l3`.`OneToMany_Optional_Inverse4Id`, `l3`.`OneToMany_Optional_Self_Inverse4Id`, `l3`.`OneToMany_Required_Inverse4Id`, `l3`.`OneToMany_Required_Self_Inverse4Id`, `l3`.`OneToOne_Optional_PK_Inverse4Id`, `l3`.`OneToOne_Optional_Self4Id` FROM ((( - SELECT TOP 10 `t0`.`Id`, `t0`.`Date`, `t0`.`Name`, `t0`.`OneToMany_Optional_Self_Inverse1Id`, `t0`.`OneToMany_Required_Self_Inverse1Id`, `t0`.`OneToOne_Optional_Self1Id` + SELECT TOP 10 `l4`.`Id`, `l4`.`Date`, `l4`.`Name`, `l4`.`OneToMany_Optional_Self_Inverse1Id`, `l4`.`OneToMany_Required_Self_Inverse1Id`, `l4`.`OneToOne_Optional_Self1Id` FROM ( SELECT TOP 10 `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` FROM `LevelOne` AS `l` ORDER BY `l`.`Name` - ) AS `t0` - ORDER BY `t0`.`Name` DESC -) AS `t` -LEFT JOIN `LevelTwo` AS `l0` ON `t`.`Id` = `l0`.`Level1_Optional_Id`) -LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Required_Id`) -LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`OneToMany_Optional_Inverse4Id` -ORDER BY `t`.`Name`, `t`.`Id`, `l0`.`Id`, `l1`.`Id` + ) AS `l4` + ORDER BY `l4`.`Name` DESC +) AS `l1` +LEFT JOIN `LevelTwo` AS `l0` ON `l1`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelThree` AS `l2` ON `l0`.`Id` = `l2`.`Level2_Required_Id`) +LEFT JOIN `LevelFour` AS `l3` ON `l2`.`Id` = `l3`.`OneToMany_Optional_Inverse4Id` +ORDER BY `l1`.`Name`, `l1`.`Id`, `l0`.`Id`, `l2`.`Id` """); } @@ -397,15 +397,15 @@ public override async Task Optional_navigation_with_Include_ThenInclude(bool asy AssertSql( """ -SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l`.`Id`, `t`.`Id`, `t`.`Level2_Optional_Id`, `t`.`Level2_Required_Id`, `t`.`Name`, `t`.`OneToMany_Optional_Inverse3Id`, `t`.`OneToMany_Optional_Self_Inverse3Id`, `t`.`OneToMany_Required_Inverse3Id`, `t`.`OneToMany_Required_Self_Inverse3Id`, `t`.`OneToOne_Optional_PK_Inverse3Id`, `t`.`OneToOne_Optional_Self3Id`, `t`.`Id0`, `t`.`Level3_Optional_Id`, `t`.`Level3_Required_Id`, `t`.`Name0`, `t`.`OneToMany_Optional_Inverse4Id`, `t`.`OneToMany_Optional_Self_Inverse4Id`, `t`.`OneToMany_Required_Inverse4Id`, `t`.`OneToMany_Required_Self_Inverse4Id`, `t`.`OneToOne_Optional_PK_Inverse4Id`, `t`.`OneToOne_Optional_Self4Id` +SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l`.`Id`, `s`.`Id`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `s`.`Id0`, `s`.`Level3_Optional_Id`, `s`.`Level3_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse4Id`, `s`.`OneToMany_Optional_Self_Inverse4Id`, `s`.`OneToMany_Required_Inverse4Id`, `s`.`OneToMany_Required_Self_Inverse4Id`, `s`.`OneToOne_Optional_PK_Inverse4Id`, `s`.`OneToOne_Optional_Self4Id` FROM (`LevelOne` AS `l` LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) LEFT JOIN ( SELECT `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l2`.`Id` AS `Id0`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name` AS `Name0`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id` FROM `LevelThree` AS `l1` LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`Level3_Optional_Id` -) AS `t` ON `l0`.`Id` = `t`.`OneToMany_Optional_Inverse3Id` -ORDER BY `l`.`Id`, `l0`.`Id`, `t`.`Id` +) AS `s` ON `l0`.`Id` = `s`.`OneToMany_Optional_Inverse3Id` +ORDER BY `l`.`Id`, `l0`.`Id`, `s`.`Id` """); } @@ -471,14 +471,14 @@ public override async Task SelectMany_with_navigation_and_Distinct(bool async) AssertSql( """ -SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `t`.`Id`, `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id` +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l1`.`Id`, `l2`.`Id`, `l2`.`Date`, `l2`.`Level1_Optional_Id`, `l2`.`Level1_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse2Id`, `l2`.`OneToMany_Optional_Self_Inverse2Id`, `l2`.`OneToMany_Required_Inverse2Id`, `l2`.`OneToMany_Required_Self_Inverse2Id`, `l2`.`OneToOne_Optional_PK_Inverse2Id`, `l2`.`OneToOne_Optional_Self2Id` FROM (`LevelOne` AS `l` INNER JOIN ( SELECT DISTINCT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` FROM `LevelTwo` AS `l0` -) AS `t` ON `l`.`Id` = `t`.`OneToMany_Optional_Inverse2Id`) -LEFT JOIN `LevelTwo` AS `l1` ON `l`.`Id` = `l1`.`OneToMany_Optional_Inverse2Id` -ORDER BY `l`.`Id`, `t`.`Id` +) AS `l1` ON `l`.`Id` = `l1`.`OneToMany_Optional_Inverse2Id`) +LEFT JOIN `LevelTwo` AS `l2` ON `l`.`Id` = `l2`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `l1`.`Id` """); } @@ -488,14 +488,14 @@ public override async Task SelectMany_with_navigation_and_Distinct_projecting_co AssertSql( """ -SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `t`.`Id`, `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id` +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l1`.`Id`, `l2`.`Id`, `l2`.`Date`, `l2`.`Level1_Optional_Id`, `l2`.`Level1_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse2Id`, `l2`.`OneToMany_Optional_Self_Inverse2Id`, `l2`.`OneToMany_Required_Inverse2Id`, `l2`.`OneToMany_Required_Self_Inverse2Id`, `l2`.`OneToOne_Optional_PK_Inverse2Id`, `l2`.`OneToOne_Optional_Self2Id` FROM (`LevelOne` AS `l` INNER JOIN ( SELECT DISTINCT `l0`.`Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id` AS `FK` FROM `LevelTwo` AS `l0` -) AS `t` ON `l`.`Id` = `t`.`FK`) -LEFT JOIN `LevelTwo` AS `l1` ON `l`.`Id` = `l1`.`OneToMany_Optional_Inverse2Id` -ORDER BY `l`.`Id`, `t`.`Id` +) AS `l1` ON `l`.`Id` = `l1`.`FK`) +LEFT JOIN `LevelTwo` AS `l2` ON `l`.`Id` = `l2`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `l1`.`Id` """); } @@ -506,8 +506,8 @@ await base.Complex_SelectMany_with_nested_navigations_and_explicit_DefaultIfEmpt async); AssertSql( -""" -SELECT `l2`.`Id`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id`, `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `t`.`Id`, `t`.`Id0`, `t`.`Id1`, `t`.`Id2`, `t0`.`Id`, `t0`.`Id0`, `t0`.`Id1`, `t0`.`Id2`, `l11`.`Id`, `l12`.`Id`, `l13`.`Id`, `l14`.`Id`, `t1`.`Id`, `t1`.`Date`, `t1`.`Level1_Optional_Id`, `t1`.`Level1_Required_Id`, `t1`.`Name`, `t1`.`OneToMany_Optional_Inverse2Id`, `t1`.`OneToMany_Optional_Self_Inverse2Id`, `t1`.`OneToMany_Required_Inverse2Id`, `t1`.`OneToMany_Required_Self_Inverse2Id`, `t1`.`OneToOne_Optional_PK_Inverse2Id`, `t1`.`OneToOne_Optional_Self2Id`, `l14`.`Name` + """ +SELECT `l2`.`Id`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id`, `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `s0`.`Id`, `s0`.`Id0`, `s0`.`Id1`, `s0`.`Id2`, `l11`.`Id`, `l12`.`Id`, `l13`.`Id`, `l14`.`Id`, `l16`.`Id`, `l16`.`Date`, `l16`.`Level1_Optional_Id`, `l16`.`Level1_Required_Id`, `l16`.`Name`, `l16`.`OneToMany_Optional_Inverse2Id`, `l16`.`OneToMany_Optional_Self_Inverse2Id`, `l16`.`OneToMany_Required_Inverse2Id`, `l16`.`OneToMany_Required_Self_Inverse2Id`, `l16`.`OneToOne_Optional_PK_Inverse2Id`, `l16`.`OneToOne_Optional_Self2Id`, `l14`.`Name` FROM (((((((((`LevelOne` AS `l` LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Required_Id`) LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Optional_Id`) @@ -518,7 +518,7 @@ LEFT JOIN ( INNER JOIN `LevelThree` AS `l4` ON `l3`.`Level3_Required_Id` = `l4`.`Id`) LEFT JOIN `LevelTwo` AS `l5` ON `l4`.`Level2_Optional_Id` = `l5`.`Id`) LEFT JOIN `LevelTwo` AS `l6` ON `l5`.`Id` = `l6`.`OneToMany_Required_Self_Inverse2Id` -) AS `t` ON `l2`.`Id` = `t`.`Id2`) +) AS `s` ON `l2`.`Id` = `s`.`Id2`) LEFT JOIN ( SELECT `l7`.`Id`, `l8`.`Id` AS `Id0`, `l9`.`Id` AS `Id1`, `l10`.`Id` AS `Id2`, `l10`.`Level2_Optional_Id` AS `Level2_Optional_Id0` FROM ((`LevelFour` AS `l7` @@ -526,18 +526,18 @@ LEFT JOIN ( LEFT JOIN `LevelTwo` AS `l9` ON `l8`.`Level2_Required_Id` = `l9`.`Id`) LEFT JOIN `LevelThree` AS `l10` ON `l9`.`Id` = `l10`.`OneToMany_Required_Inverse3Id` WHERE `l8`.`Level2_Required_Id` IS NOT NULL AND `l9`.`Id` IS NOT NULL -) AS `t0` ON `t`.`Id2` = `t0`.`Id2`) +) AS `s0` ON `s`.`Id2` = `s0`.`Id2`) LEFT JOIN `LevelThree` AS `l11` ON `l2`.`OneToMany_Optional_Inverse4Id` = `l11`.`Id`) -LEFT JOIN `LevelThree` AS `l12` ON `t`.`Id2` = `l12`.`Level2_Optional_Id`) -LEFT JOIN `LevelTwo` AS `l13` ON `t0`.`Level2_Optional_Id0` = `l13`.`Id`) +LEFT JOIN `LevelThree` AS `l12` ON `s`.`Id2` = `l12`.`Level2_Optional_Id`) +LEFT JOIN `LevelTwo` AS `l13` ON `s0`.`Level2_Optional_Id0` = `l13`.`Id`) LEFT JOIN `LevelThree` AS `l14` ON `l13`.`Id` = `l14`.`Level2_Required_Id`) LEFT JOIN ( SELECT `l15`.`Id`, `l15`.`Date`, `l15`.`Level1_Optional_Id`, `l15`.`Level1_Required_Id`, `l15`.`Name`, `l15`.`OneToMany_Optional_Inverse2Id`, `l15`.`OneToMany_Optional_Self_Inverse2Id`, `l15`.`OneToMany_Required_Inverse2Id`, `l15`.`OneToMany_Required_Self_Inverse2Id`, `l15`.`OneToOne_Optional_PK_Inverse2Id`, `l15`.`OneToOne_Optional_Self2Id` FROM `LevelTwo` AS `l15` WHERE `l15`.`Id` <> 42 -) AS `t1` ON `t`.`Id2` = `t1`.`OneToMany_Optional_Self_Inverse2Id` -WHERE (`l11`.`Name` <> 'Foo' OR `l11`.`Name` IS NULL) AND (`l2`.`Id` IS NOT NULL AND `t`.`Id2` IS NOT NULL) -ORDER BY `l12`.`Id`, `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `l2`.`Id`, `t`.`Id`, `t`.`Id0`, `t`.`Id1`, `t`.`Id2`, `t0`.`Id`, `t0`.`Id0`, `t0`.`Id1`, `t0`.`Id2`, `l11`.`Id`, `l13`.`Id`, `l14`.`Id` +) AS `l16` ON `s`.`Id2` = `l16`.`OneToMany_Optional_Self_Inverse2Id` +WHERE (`l11`.`Name` <> 'Foo' OR `l11`.`Name` IS NULL) AND (`l2`.`Id` IS NOT NULL AND `s`.`Id2` IS NOT NULL) +ORDER BY `l12`.`Id`, `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `l2`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `s0`.`Id`, `s0`.`Id0`, `s0`.`Id1`, `s0`.`Id2`, `l11`.`Id`, `l13`.`Id`, `l14`.`Id` """); } @@ -601,14 +601,14 @@ public override async Task Project_collection_navigation_composed(bool async) await base.Project_collection_navigation_composed(async); AssertSql( -""" -SELECT `l`.`Id`, `t`.`Id`, `t`.`Date`, `t`.`Level1_Optional_Id`, `t`.`Level1_Required_Id`, `t`.`Name`, `t`.`OneToMany_Optional_Inverse2Id`, `t`.`OneToMany_Optional_Self_Inverse2Id`, `t`.`OneToMany_Required_Inverse2Id`, `t`.`OneToMany_Required_Self_Inverse2Id`, `t`.`OneToOne_Optional_PK_Inverse2Id`, `t`.`OneToOne_Optional_Self2Id` + """ +SELECT `l`.`Id`, `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id` FROM `LevelOne` AS `l` LEFT JOIN ( SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` FROM `LevelTwo` AS `l0` WHERE `l0`.`Name` <> 'Foo' OR `l0`.`Name` IS NULL -) AS `t` ON `l`.`Id` = `t`.`OneToMany_Optional_Inverse2Id` +) AS `l1` ON `l`.`Id` = `l1`.`OneToMany_Optional_Inverse2Id` WHERE `l`.`Id` < 3 ORDER BY `l`.`Id` """); @@ -884,14 +884,14 @@ public override async Task Null_check_in_anonymous_type_projection_should_not_be AssertSql( """ -SELECT `l`.`Id`, `t`.`c`, `t`.`Name`, `t`.`Id`, `t`.`Id0` +SELECT `l`.`Id`, `s`.`c`, `s`.`Name`, `s`.`Id`, `s`.`Id0` FROM `LevelOne` AS `l` LEFT JOIN ( SELECT IIF(`l1`.`Id` IS NULL, TRUE, FALSE) AS `c`, `l1`.`Name`, `l0`.`Id`, `l1`.`Id` AS `Id0`, `l0`.`OneToMany_Optional_Inverse2Id` FROM `LevelTwo` AS `l0` LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Required_Id` -) AS `t` ON `l`.`Id` = `t`.`OneToMany_Optional_Inverse2Id` -ORDER BY `l`.`Id`, `t`.`Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `s`.`Id` """); } @@ -901,14 +901,14 @@ public override async Task Null_check_in_Dto_projection_should_not_be_removed(bo AssertSql( """ -SELECT `l`.`Id`, `t`.`c`, `t`.`Name`, `t`.`Id`, `t`.`Id0` +SELECT `l`.`Id`, `s`.`c`, `s`.`Name`, `s`.`Id`, `s`.`Id0` FROM `LevelOne` AS `l` LEFT JOIN ( SELECT IIF(`l1`.`Id` IS NULL, TRUE, FALSE) AS `c`, `l1`.`Name`, `l0`.`Id`, `l1`.`Id` AS `Id0`, `l0`.`OneToMany_Optional_Inverse2Id` FROM `LevelTwo` AS `l0` LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Required_Id` -) AS `t` ON `l`.`Id` = `t`.`OneToMany_Optional_Inverse2Id` -ORDER BY `l`.`Id`, `t`.`Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `s`.`Id` """); } @@ -976,14 +976,14 @@ public override async Task Include_collection_followed_by_include_reference(bool AssertSql( """ -SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `t`.`Id`, `t`.`Date`, `t`.`Level1_Optional_Id`, `t`.`Level1_Required_Id`, `t`.`Name`, `t`.`OneToMany_Optional_Inverse2Id`, `t`.`OneToMany_Optional_Self_Inverse2Id`, `t`.`OneToMany_Required_Inverse2Id`, `t`.`OneToMany_Required_Self_Inverse2Id`, `t`.`OneToOne_Optional_PK_Inverse2Id`, `t`.`OneToOne_Optional_Self2Id`, `t`.`Id0`, `t`.`Level2_Optional_Id`, `t`.`Level2_Required_Id`, `t`.`Name0`, `t`.`OneToMany_Optional_Inverse3Id`, `t`.`OneToMany_Optional_Self_Inverse3Id`, `t`.`OneToMany_Required_Inverse3Id`, `t`.`OneToMany_Required_Self_Inverse3Id`, `t`.`OneToOne_Optional_PK_Inverse3Id`, `t`.`OneToOne_Optional_Self3Id` +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id` FROM `LevelOne` AS `l` LEFT JOIN ( SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id` AS `Id0`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name` AS `Name0`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` FROM `LevelTwo` AS `l0` LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToOne_Optional_PK_Inverse3Id` -) AS `t` ON `l`.`Id` = `t`.`OneToMany_Optional_Inverse2Id` -ORDER BY `l`.`Id`, `t`.`Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `s`.`Id` """); } @@ -1020,14 +1020,14 @@ public override async Task Include_and_ThenInclude_collections_followed_by_proje AssertSql( """ -SELECT `l`.`Id`, `t`.`Id`, `t`.`Date`, `t`.`Level1_Optional_Id`, `t`.`Level1_Required_Id`, `t`.`Name`, `t`.`OneToMany_Optional_Inverse2Id`, `t`.`OneToMany_Optional_Self_Inverse2Id`, `t`.`OneToMany_Required_Inverse2Id`, `t`.`OneToMany_Required_Self_Inverse2Id`, `t`.`OneToOne_Optional_PK_Inverse2Id`, `t`.`OneToOne_Optional_Self2Id`, `t`.`Id0`, `t`.`Level2_Optional_Id`, `t`.`Level2_Required_Id`, `t`.`Name0`, `t`.`OneToMany_Optional_Inverse3Id`, `t`.`OneToMany_Optional_Self_Inverse3Id`, `t`.`OneToMany_Required_Inverse3Id`, `t`.`OneToMany_Required_Self_Inverse3Id`, `t`.`OneToOne_Optional_PK_Inverse3Id`, `t`.`OneToOne_Optional_Self3Id` +SELECT `l`.`Id`, `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id` FROM `LevelOne` AS `l` LEFT JOIN ( SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id` AS `Id0`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name` AS `Name0`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` FROM `LevelTwo` AS `l0` LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToOne_Optional_PK_Inverse3Id` -) AS `t` ON `l`.`Id` = `t`.`OneToMany_Optional_Inverse2Id` -ORDER BY `l`.`Id`, `t`.`Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `s`.`Id` """); } @@ -1036,16 +1036,16 @@ public override async Task Include_collection_and_another_navigation_chain_follo await base.Include_collection_and_another_navigation_chain_followed_by_projecting_the_first_collection(async); AssertSql( -""" -SELECT `l`.`Id`, `t`.`Id`, `t`.`Date`, `t`.`Level1_Optional_Id`, `t`.`Level1_Required_Id`, `t`.`Name`, `t`.`OneToMany_Optional_Inverse2Id`, `t`.`OneToMany_Optional_Self_Inverse2Id`, `t`.`OneToMany_Required_Inverse2Id`, `t`.`OneToMany_Required_Self_Inverse2Id`, `t`.`OneToOne_Optional_PK_Inverse2Id`, `t`.`OneToOne_Optional_Self2Id`, `t`.`Id0`, `t`.`Level2_Optional_Id`, `t`.`Level2_Required_Id`, `t`.`Name0`, `t`.`OneToMany_Optional_Inverse3Id`, `t`.`OneToMany_Optional_Self_Inverse3Id`, `t`.`OneToMany_Required_Inverse3Id`, `t`.`OneToMany_Required_Self_Inverse3Id`, `t`.`OneToOne_Optional_PK_Inverse3Id`, `t`.`OneToOne_Optional_Self3Id`, `t`.`Id1`, `t`.`Level3_Optional_Id`, `t`.`Level3_Required_Id`, `t`.`Name1`, `t`.`OneToMany_Optional_Inverse4Id`, `t`.`OneToMany_Optional_Self_Inverse4Id`, `t`.`OneToMany_Required_Inverse4Id`, `t`.`OneToMany_Required_Self_Inverse4Id`, `t`.`OneToOne_Optional_PK_Inverse4Id`, `t`.`OneToOne_Optional_Self4Id` + """ +SELECT `l`.`Id`, `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `s`.`Id1`, `s`.`Level3_Optional_Id`, `s`.`Level3_Required_Id`, `s`.`Name1`, `s`.`OneToMany_Optional_Inverse4Id`, `s`.`OneToMany_Optional_Self_Inverse4Id`, `s`.`OneToMany_Required_Inverse4Id`, `s`.`OneToMany_Required_Self_Inverse4Id`, `s`.`OneToOne_Optional_PK_Inverse4Id`, `s`.`OneToOne_Optional_Self4Id` FROM `LevelOne` AS `l` LEFT JOIN ( SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id` AS `Id0`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name` AS `Name0`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l2`.`Id` AS `Id1`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name` AS `Name1`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id` FROM (`LevelTwo` AS `l0` LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToOne_Optional_PK_Inverse3Id`) LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`Level3_Optional_Id` -) AS `t` ON `l`.`Id` = `t`.`OneToMany_Optional_Inverse2Id` -ORDER BY `l`.`Id`, `t`.`Id`, `t`.`Id0` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `s`.`Id`, `s`.`Id0` """); } @@ -1054,16 +1054,16 @@ public override async Task Include_collection_ThenInclude_two_references(bool as await base.Include_collection_ThenInclude_two_references(async); AssertSql( -""" -SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `t`.`Id`, `t`.`Date`, `t`.`Level1_Optional_Id`, `t`.`Level1_Required_Id`, `t`.`Name`, `t`.`OneToMany_Optional_Inverse2Id`, `t`.`OneToMany_Optional_Self_Inverse2Id`, `t`.`OneToMany_Required_Inverse2Id`, `t`.`OneToMany_Required_Self_Inverse2Id`, `t`.`OneToOne_Optional_PK_Inverse2Id`, `t`.`OneToOne_Optional_Self2Id`, `t`.`Id0`, `t`.`Level2_Optional_Id`, `t`.`Level2_Required_Id`, `t`.`Name0`, `t`.`OneToMany_Optional_Inverse3Id`, `t`.`OneToMany_Optional_Self_Inverse3Id`, `t`.`OneToMany_Required_Inverse3Id`, `t`.`OneToMany_Required_Self_Inverse3Id`, `t`.`OneToOne_Optional_PK_Inverse3Id`, `t`.`OneToOne_Optional_Self3Id`, `t`.`Id1`, `t`.`Level3_Optional_Id`, `t`.`Level3_Required_Id`, `t`.`Name1`, `t`.`OneToMany_Optional_Inverse4Id`, `t`.`OneToMany_Optional_Self_Inverse4Id`, `t`.`OneToMany_Required_Inverse4Id`, `t`.`OneToMany_Required_Self_Inverse4Id`, `t`.`OneToOne_Optional_PK_Inverse4Id`, `t`.`OneToOne_Optional_Self4Id` + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `s`.`Id1`, `s`.`Level3_Optional_Id`, `s`.`Level3_Required_Id`, `s`.`Name1`, `s`.`OneToMany_Optional_Inverse4Id`, `s`.`OneToMany_Optional_Self_Inverse4Id`, `s`.`OneToMany_Required_Inverse4Id`, `s`.`OneToMany_Required_Self_Inverse4Id`, `s`.`OneToOne_Optional_PK_Inverse4Id`, `s`.`OneToOne_Optional_Self4Id` FROM `LevelOne` AS `l` LEFT JOIN ( SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id` AS `Id0`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name` AS `Name0`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l2`.`Id` AS `Id1`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name` AS `Name1`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id` FROM (`LevelTwo` AS `l0` LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToOne_Optional_PK_Inverse3Id`) LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`Level3_Optional_Id` -) AS `t` ON `l`.`Id` = `t`.`OneToMany_Optional_Inverse2Id` -ORDER BY `l`.`Id`, `t`.`Id`, `t`.`Id0` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `s`.`Id`, `s`.`Id0` """); } @@ -1072,8 +1072,8 @@ public override async Task Include_collection_followed_by_complex_includes_and_p await base.Include_collection_followed_by_complex_includes_and_projecting_the_included_collection(async); AssertSql( -""" -SELECT `l`.`Id`, `t`.`Id`, `t`.`Date`, `t`.`Level1_Optional_Id`, `t`.`Level1_Required_Id`, `t`.`Name`, `t`.`OneToMany_Optional_Inverse2Id`, `t`.`OneToMany_Optional_Self_Inverse2Id`, `t`.`OneToMany_Required_Inverse2Id`, `t`.`OneToMany_Required_Self_Inverse2Id`, `t`.`OneToOne_Optional_PK_Inverse2Id`, `t`.`OneToOne_Optional_Self2Id`, `t`.`Id0`, `t`.`Level2_Optional_Id`, `t`.`Level2_Required_Id`, `t`.`Name0`, `t`.`OneToMany_Optional_Inverse3Id`, `t`.`OneToMany_Optional_Self_Inverse3Id`, `t`.`OneToMany_Required_Inverse3Id`, `t`.`OneToMany_Required_Self_Inverse3Id`, `t`.`OneToOne_Optional_PK_Inverse3Id`, `t`.`OneToOne_Optional_Self3Id`, `t`.`Id1`, `t`.`Level3_Optional_Id`, `t`.`Level3_Required_Id`, `t`.`Name1`, `t`.`OneToMany_Optional_Inverse4Id`, `t`.`OneToMany_Optional_Self_Inverse4Id`, `t`.`OneToMany_Required_Inverse4Id`, `t`.`OneToMany_Required_Self_Inverse4Id`, `t`.`OneToOne_Optional_PK_Inverse4Id`, `t`.`OneToOne_Optional_Self4Id`, `t`.`Id2`, `t`.`Level2_Optional_Id0`, `t`.`Level2_Required_Id0`, `t`.`Name2`, `t`.`OneToMany_Optional_Inverse3Id0`, `t`.`OneToMany_Optional_Self_Inverse3Id0`, `t`.`OneToMany_Required_Inverse3Id0`, `t`.`OneToMany_Required_Self_Inverse3Id0`, `t`.`OneToOne_Optional_PK_Inverse3Id0`, `t`.`OneToOne_Optional_Self3Id0`, `t`.`Id3`, `t`.`Level3_Optional_Id0`, `t`.`Level3_Required_Id0`, `t`.`Name3`, `t`.`OneToMany_Optional_Inverse4Id0`, `t`.`OneToMany_Optional_Self_Inverse4Id0`, `t`.`OneToMany_Required_Inverse4Id0`, `t`.`OneToMany_Required_Self_Inverse4Id0`, `t`.`OneToOne_Optional_PK_Inverse4Id0`, `t`.`OneToOne_Optional_Self4Id0` + """ +SELECT `l`.`Id`, `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `s`.`Id1`, `s`.`Level3_Optional_Id`, `s`.`Level3_Required_Id`, `s`.`Name1`, `s`.`OneToMany_Optional_Inverse4Id`, `s`.`OneToMany_Optional_Self_Inverse4Id`, `s`.`OneToMany_Required_Inverse4Id`, `s`.`OneToMany_Required_Self_Inverse4Id`, `s`.`OneToOne_Optional_PK_Inverse4Id`, `s`.`OneToOne_Optional_Self4Id`, `s`.`Id2`, `s`.`Level2_Optional_Id0`, `s`.`Level2_Required_Id0`, `s`.`Name2`, `s`.`OneToMany_Optional_Inverse3Id0`, `s`.`OneToMany_Optional_Self_Inverse3Id0`, `s`.`OneToMany_Required_Inverse3Id0`, `s`.`OneToMany_Required_Self_Inverse3Id0`, `s`.`OneToOne_Optional_PK_Inverse3Id0`, `s`.`OneToOne_Optional_Self3Id0`, `s`.`Id3`, `s`.`Level3_Optional_Id0`, `s`.`Level3_Required_Id0`, `s`.`Name3`, `s`.`OneToMany_Optional_Inverse4Id0`, `s`.`OneToMany_Optional_Self_Inverse4Id0`, `s`.`OneToMany_Required_Inverse4Id0`, `s`.`OneToMany_Required_Self_Inverse4Id0`, `s`.`OneToOne_Optional_PK_Inverse4Id0`, `s`.`OneToOne_Optional_Self4Id0` FROM `LevelOne` AS `l` LEFT JOIN ( SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id` AS `Id0`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name` AS `Name0`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l2`.`Id` AS `Id1`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name` AS `Name1`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id`, `l3`.`Id` AS `Id2`, `l3`.`Level2_Optional_Id` AS `Level2_Optional_Id0`, `l3`.`Level2_Required_Id` AS `Level2_Required_Id0`, `l3`.`Name` AS `Name2`, `l3`.`OneToMany_Optional_Inverse3Id` AS `OneToMany_Optional_Inverse3Id0`, `l3`.`OneToMany_Optional_Self_Inverse3Id` AS `OneToMany_Optional_Self_Inverse3Id0`, `l3`.`OneToMany_Required_Inverse3Id` AS `OneToMany_Required_Inverse3Id0`, `l3`.`OneToMany_Required_Self_Inverse3Id` AS `OneToMany_Required_Self_Inverse3Id0`, `l3`.`OneToOne_Optional_PK_Inverse3Id` AS `OneToOne_Optional_PK_Inverse3Id0`, `l3`.`OneToOne_Optional_Self3Id` AS `OneToOne_Optional_Self3Id0`, `l4`.`Id` AS `Id3`, `l4`.`Level3_Optional_Id` AS `Level3_Optional_Id0`, `l4`.`Level3_Required_Id` AS `Level3_Required_Id0`, `l4`.`Name` AS `Name3`, `l4`.`OneToMany_Optional_Inverse4Id` AS `OneToMany_Optional_Inverse4Id0`, `l4`.`OneToMany_Optional_Self_Inverse4Id` AS `OneToMany_Optional_Self_Inverse4Id0`, `l4`.`OneToMany_Required_Inverse4Id` AS `OneToMany_Required_Inverse4Id0`, `l4`.`OneToMany_Required_Self_Inverse4Id` AS `OneToMany_Required_Self_Inverse4Id0`, `l4`.`OneToOne_Optional_PK_Inverse4Id` AS `OneToOne_Optional_PK_Inverse4Id0`, `l4`.`OneToOne_Optional_Self4Id` AS `OneToOne_Optional_Self4Id0` @@ -1082,8 +1082,8 @@ LEFT JOIN ( LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`Level3_Optional_Id`) LEFT JOIN `LevelThree` AS `l3` ON `l0`.`Id` = `l3`.`Level2_Optional_Id`) LEFT JOIN `LevelFour` AS `l4` ON `l3`.`Id` = `l4`.`OneToMany_Optional_Inverse4Id` -) AS `t` ON `l`.`Id` = `t`.`OneToMany_Optional_Inverse2Id` -ORDER BY `l`.`Id`, `t`.`Id`, `t`.`Id0`, `t`.`Id1`, `t`.`Id2` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2` """); } @@ -1092,8 +1092,8 @@ public override async Task Include_collection_multiple(bool async) await base.Include_collection_multiple(async); AssertSql( -""" -SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `t`.`Id`, `t`.`Date`, `t`.`Level1_Optional_Id`, `t`.`Level1_Required_Id`, `t`.`Name`, `t`.`OneToMany_Optional_Inverse2Id`, `t`.`OneToMany_Optional_Self_Inverse2Id`, `t`.`OneToMany_Required_Inverse2Id`, `t`.`OneToMany_Required_Self_Inverse2Id`, `t`.`OneToOne_Optional_PK_Inverse2Id`, `t`.`OneToOne_Optional_Self2Id`, `t`.`Id0`, `t`.`Level2_Optional_Id`, `t`.`Level2_Required_Id`, `t`.`Name0`, `t`.`OneToMany_Optional_Inverse3Id`, `t`.`OneToMany_Optional_Self_Inverse3Id`, `t`.`OneToMany_Required_Inverse3Id`, `t`.`OneToMany_Required_Self_Inverse3Id`, `t`.`OneToOne_Optional_PK_Inverse3Id`, `t`.`OneToOne_Optional_Self3Id`, `t`.`Id1`, `t`.`Level3_Optional_Id`, `t`.`Level3_Required_Id`, `t`.`Name1`, `t`.`OneToMany_Optional_Inverse4Id`, `t`.`OneToMany_Optional_Self_Inverse4Id`, `t`.`OneToMany_Required_Inverse4Id`, `t`.`OneToMany_Required_Self_Inverse4Id`, `t`.`OneToOne_Optional_PK_Inverse4Id`, `t`.`OneToOne_Optional_Self4Id`, `t`.`Id2`, `t`.`Level2_Optional_Id0`, `t`.`Level2_Required_Id0`, `t`.`Name2`, `t`.`OneToMany_Optional_Inverse3Id0`, `t`.`OneToMany_Optional_Self_Inverse3Id0`, `t`.`OneToMany_Required_Inverse3Id0`, `t`.`OneToMany_Required_Self_Inverse3Id0`, `t`.`OneToOne_Optional_PK_Inverse3Id0`, `t`.`OneToOne_Optional_Self3Id0`, `t`.`Id3`, `t`.`Level3_Optional_Id0`, `t`.`Level3_Required_Id0`, `t`.`Name3`, `t`.`OneToMany_Optional_Inverse4Id0`, `t`.`OneToMany_Optional_Self_Inverse4Id0`, `t`.`OneToMany_Required_Inverse4Id0`, `t`.`OneToMany_Required_Self_Inverse4Id0`, `t`.`OneToOne_Optional_PK_Inverse4Id0`, `t`.`OneToOne_Optional_Self4Id0` + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `s`.`Id1`, `s`.`Level3_Optional_Id`, `s`.`Level3_Required_Id`, `s`.`Name1`, `s`.`OneToMany_Optional_Inverse4Id`, `s`.`OneToMany_Optional_Self_Inverse4Id`, `s`.`OneToMany_Required_Inverse4Id`, `s`.`OneToMany_Required_Self_Inverse4Id`, `s`.`OneToOne_Optional_PK_Inverse4Id`, `s`.`OneToOne_Optional_Self4Id`, `s`.`Id2`, `s`.`Level2_Optional_Id0`, `s`.`Level2_Required_Id0`, `s`.`Name2`, `s`.`OneToMany_Optional_Inverse3Id0`, `s`.`OneToMany_Optional_Self_Inverse3Id0`, `s`.`OneToMany_Required_Inverse3Id0`, `s`.`OneToMany_Required_Self_Inverse3Id0`, `s`.`OneToOne_Optional_PK_Inverse3Id0`, `s`.`OneToOne_Optional_Self3Id0`, `s`.`Id3`, `s`.`Level3_Optional_Id0`, `s`.`Level3_Required_Id0`, `s`.`Name3`, `s`.`OneToMany_Optional_Inverse4Id0`, `s`.`OneToMany_Optional_Self_Inverse4Id0`, `s`.`OneToMany_Required_Inverse4Id0`, `s`.`OneToMany_Required_Self_Inverse4Id0`, `s`.`OneToOne_Optional_PK_Inverse4Id0`, `s`.`OneToOne_Optional_Self4Id0` FROM `LevelOne` AS `l` LEFT JOIN ( SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id` AS `Id0`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name` AS `Name0`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l2`.`Id` AS `Id1`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name` AS `Name1`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id`, `l3`.`Id` AS `Id2`, `l3`.`Level2_Optional_Id` AS `Level2_Optional_Id0`, `l3`.`Level2_Required_Id` AS `Level2_Required_Id0`, `l3`.`Name` AS `Name2`, `l3`.`OneToMany_Optional_Inverse3Id` AS `OneToMany_Optional_Inverse3Id0`, `l3`.`OneToMany_Optional_Self_Inverse3Id` AS `OneToMany_Optional_Self_Inverse3Id0`, `l3`.`OneToMany_Required_Inverse3Id` AS `OneToMany_Required_Inverse3Id0`, `l3`.`OneToMany_Required_Self_Inverse3Id` AS `OneToMany_Required_Self_Inverse3Id0`, `l3`.`OneToOne_Optional_PK_Inverse3Id` AS `OneToOne_Optional_PK_Inverse3Id0`, `l3`.`OneToOne_Optional_Self3Id` AS `OneToOne_Optional_Self3Id0`, `l4`.`Id` AS `Id3`, `l4`.`Level3_Optional_Id` AS `Level3_Optional_Id0`, `l4`.`Level3_Required_Id` AS `Level3_Required_Id0`, `l4`.`Name` AS `Name3`, `l4`.`OneToMany_Optional_Inverse4Id` AS `OneToMany_Optional_Inverse4Id0`, `l4`.`OneToMany_Optional_Self_Inverse4Id` AS `OneToMany_Optional_Self_Inverse4Id0`, `l4`.`OneToMany_Required_Inverse4Id` AS `OneToMany_Required_Inverse4Id0`, `l4`.`OneToMany_Required_Self_Inverse4Id` AS `OneToMany_Required_Self_Inverse4Id0`, `l4`.`OneToOne_Optional_PK_Inverse4Id` AS `OneToOne_Optional_PK_Inverse4Id0`, `l4`.`OneToOne_Optional_Self4Id` AS `OneToOne_Optional_Self4Id0` @@ -1102,8 +1102,8 @@ LEFT JOIN ( LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`Level3_Optional_Id`) LEFT JOIN `LevelThree` AS `l3` ON `l0`.`Id` = `l3`.`Level2_Optional_Id`) LEFT JOIN `LevelFour` AS `l4` ON `l3`.`Id` = `l4`.`OneToMany_Optional_Inverse4Id` -) AS `t` ON `l`.`Id` = `t`.`OneToMany_Optional_Inverse2Id` -ORDER BY `l`.`Id`, `t`.`Id`, `t`.`Id0`, `t`.`Id1`, `t`.`Id2` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2` """); } @@ -1113,15 +1113,15 @@ public override async Task Include_ThenInclude_ThenInclude_followed_by_two_neste AssertSql( """ -SELECT `l`.`Id`, `t`.`Id`, `t`.`Level2_Optional_Id`, `t`.`Level2_Required_Id`, `t`.`Name`, `t`.`OneToMany_Optional_Inverse3Id`, `t`.`OneToMany_Optional_Self_Inverse3Id`, `t`.`OneToMany_Required_Inverse3Id`, `t`.`OneToMany_Required_Self_Inverse3Id`, `t`.`OneToOne_Optional_PK_Inverse3Id`, `t`.`OneToOne_Optional_Self3Id`, `t`.`Id0`, `t`.`Level3_Optional_Id`, `t`.`Level3_Required_Id`, `t`.`Name0`, `t`.`OneToMany_Optional_Inverse4Id`, `t`.`OneToMany_Optional_Self_Inverse4Id`, `t`.`OneToMany_Required_Inverse4Id`, `t`.`OneToMany_Required_Self_Inverse4Id`, `t`.`OneToOne_Optional_PK_Inverse4Id`, `t`.`OneToOne_Optional_Self4Id`, `t`.`Id1` +SELECT `l`.`Id`, `s`.`Id`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `s`.`Id0`, `s`.`Level3_Optional_Id`, `s`.`Level3_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse4Id`, `s`.`OneToMany_Optional_Self_Inverse4Id`, `s`.`OneToMany_Required_Inverse4Id`, `s`.`OneToMany_Required_Self_Inverse4Id`, `s`.`OneToOne_Optional_PK_Inverse4Id`, `s`.`OneToOne_Optional_Self4Id`, `s`.`Id1` FROM `LevelOne` AS `l` LEFT JOIN ( SELECT `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l2`.`Id` AS `Id0`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name` AS `Name0`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id`, `l0`.`Id` AS `Id1`, `l0`.`OneToMany_Optional_Inverse2Id` FROM (`LevelTwo` AS `l0` LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToOne_Optional_PK_Inverse3Id`) LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`Level3_Optional_Id` -) AS `t` ON `l`.`Id` = `t`.`OneToMany_Optional_Inverse2Id` -ORDER BY `l`.`Id`, `t`.`Id1`, `t`.`Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `s`.`Id1`, `s`.`Id` """); } @@ -1130,20 +1130,20 @@ public override async Task Include_collection_ThenInclude_reference_followed_by_ await base.Include_collection_ThenInclude_reference_followed_by_projection_into_anonmous_type(async); AssertSql( -""" -SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `t`.`Id`, `t`.`Date`, `t`.`Level1_Optional_Id`, `t`.`Level1_Required_Id`, `t`.`Name`, `t`.`OneToMany_Optional_Inverse2Id`, `t`.`OneToMany_Optional_Self_Inverse2Id`, `t`.`OneToMany_Required_Inverse2Id`, `t`.`OneToMany_Required_Self_Inverse2Id`, `t`.`OneToOne_Optional_PK_Inverse2Id`, `t`.`OneToOne_Optional_Self2Id`, `t`.`Id0`, `t`.`Level2_Optional_Id`, `t`.`Level2_Required_Id`, `t`.`Name0`, `t`.`OneToMany_Optional_Inverse3Id`, `t`.`OneToMany_Optional_Self_Inverse3Id`, `t`.`OneToMany_Required_Inverse3Id`, `t`.`OneToMany_Required_Self_Inverse3Id`, `t`.`OneToOne_Optional_PK_Inverse3Id`, `t`.`OneToOne_Optional_Self3Id`, `t0`.`Id`, `t0`.`Date`, `t0`.`Level1_Optional_Id`, `t0`.`Level1_Required_Id`, `t0`.`Name`, `t0`.`OneToMany_Optional_Inverse2Id`, `t0`.`OneToMany_Optional_Self_Inverse2Id`, `t0`.`OneToMany_Required_Inverse2Id`, `t0`.`OneToMany_Required_Self_Inverse2Id`, `t0`.`OneToOne_Optional_PK_Inverse2Id`, `t0`.`OneToOne_Optional_Self2Id`, `t0`.`Id0`, `t0`.`Level2_Optional_Id`, `t0`.`Level2_Required_Id`, `t0`.`Name0`, `t0`.`OneToMany_Optional_Inverse3Id`, `t0`.`OneToMany_Optional_Self_Inverse3Id`, `t0`.`OneToMany_Required_Inverse3Id`, `t0`.`OneToMany_Required_Self_Inverse3Id`, `t0`.`OneToOne_Optional_PK_Inverse3Id`, `t0`.`OneToOne_Optional_Self3Id` + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `s0`.`Id`, `s0`.`Date`, `s0`.`Level1_Optional_Id`, `s0`.`Level1_Required_Id`, `s0`.`Name`, `s0`.`OneToMany_Optional_Inverse2Id`, `s0`.`OneToMany_Optional_Self_Inverse2Id`, `s0`.`OneToMany_Required_Inverse2Id`, `s0`.`OneToMany_Required_Self_Inverse2Id`, `s0`.`OneToOne_Optional_PK_Inverse2Id`, `s0`.`OneToOne_Optional_Self2Id`, `s0`.`Id0`, `s0`.`Level2_Optional_Id`, `s0`.`Level2_Required_Id`, `s0`.`Name0`, `s0`.`OneToMany_Optional_Inverse3Id`, `s0`.`OneToMany_Optional_Self_Inverse3Id`, `s0`.`OneToMany_Required_Inverse3Id`, `s0`.`OneToMany_Required_Self_Inverse3Id`, `s0`.`OneToOne_Optional_PK_Inverse3Id`, `s0`.`OneToOne_Optional_Self3Id` FROM (`LevelOne` AS `l` LEFT JOIN ( SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id` AS `Id0`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name` AS `Name0`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` FROM `LevelTwo` AS `l0` LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToOne_Optional_PK_Inverse3Id` -) AS `t` ON `l`.`Id` = `t`.`OneToMany_Optional_Inverse2Id`) +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id`) LEFT JOIN ( SELECT `l2`.`Id`, `l2`.`Date`, `l2`.`Level1_Optional_Id`, `l2`.`Level1_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse2Id`, `l2`.`OneToMany_Optional_Self_Inverse2Id`, `l2`.`OneToMany_Required_Inverse2Id`, `l2`.`OneToMany_Required_Self_Inverse2Id`, `l2`.`OneToOne_Optional_PK_Inverse2Id`, `l2`.`OneToOne_Optional_Self2Id`, `l3`.`Id` AS `Id0`, `l3`.`Level2_Optional_Id`, `l3`.`Level2_Required_Id`, `l3`.`Name` AS `Name0`, `l3`.`OneToMany_Optional_Inverse3Id`, `l3`.`OneToMany_Optional_Self_Inverse3Id`, `l3`.`OneToMany_Required_Inverse3Id`, `l3`.`OneToMany_Required_Self_Inverse3Id`, `l3`.`OneToOne_Optional_PK_Inverse3Id`, `l3`.`OneToOne_Optional_Self3Id` FROM `LevelTwo` AS `l2` LEFT JOIN `LevelThree` AS `l3` ON `l2`.`Id` = `l3`.`OneToOne_Optional_PK_Inverse3Id` -) AS `t0` ON `l`.`Id` = `t0`.`OneToMany_Optional_Inverse2Id` -ORDER BY `l`.`Id`, `t`.`Id`, `t`.`Id0`, `t0`.`Id` +) AS `s0` ON `l`.`Id` = `s0`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `s`.`Id`, `s`.`Id0`, `s0`.`Id` """); } @@ -1152,21 +1152,21 @@ public override async Task Include_collection_multiple_with_filter(bool async) await base.Include_collection_multiple_with_filter(async); AssertSql( -""" -SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `t`.`Id`, `t`.`Date`, `t`.`Level1_Optional_Id`, `t`.`Level1_Required_Id`, `t`.`Name`, `t`.`OneToMany_Optional_Inverse2Id`, `t`.`OneToMany_Optional_Self_Inverse2Id`, `t`.`OneToMany_Required_Inverse2Id`, `t`.`OneToMany_Required_Self_Inverse2Id`, `t`.`OneToOne_Optional_PK_Inverse2Id`, `t`.`OneToOne_Optional_Self2Id`, `t`.`Id0`, `t`.`Level2_Optional_Id`, `t`.`Level2_Required_Id`, `t`.`Name0`, `t`.`OneToMany_Optional_Inverse3Id`, `t`.`OneToMany_Optional_Self_Inverse3Id`, `t`.`OneToMany_Required_Inverse3Id`, `t`.`OneToMany_Required_Self_Inverse3Id`, `t`.`OneToOne_Optional_PK_Inverse3Id`, `t`.`OneToOne_Optional_Self3Id`, `t`.`Id1`, `t`.`Level3_Optional_Id`, `t`.`Level3_Required_Id`, `t`.`Name1`, `t`.`OneToMany_Optional_Inverse4Id`, `t`.`OneToMany_Optional_Self_Inverse4Id`, `t`.`OneToMany_Required_Inverse4Id`, `t`.`OneToMany_Required_Self_Inverse4Id`, `t`.`OneToOne_Optional_PK_Inverse4Id`, `t`.`OneToOne_Optional_Self4Id` + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `s`.`Id1`, `s`.`Level3_Optional_Id`, `s`.`Level3_Required_Id`, `s`.`Name1`, `s`.`OneToMany_Optional_Inverse4Id`, `s`.`OneToMany_Optional_Self_Inverse4Id`, `s`.`OneToMany_Required_Inverse4Id`, `s`.`OneToMany_Required_Self_Inverse4Id`, `s`.`OneToOne_Optional_PK_Inverse4Id`, `s`.`OneToOne_Optional_Self4Id` FROM `LevelOne` AS `l` LEFT JOIN ( SELECT `l2`.`Id`, `l2`.`Date`, `l2`.`Level1_Optional_Id`, `l2`.`Level1_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse2Id`, `l2`.`OneToMany_Optional_Self_Inverse2Id`, `l2`.`OneToMany_Required_Inverse2Id`, `l2`.`OneToMany_Required_Self_Inverse2Id`, `l2`.`OneToOne_Optional_PK_Inverse2Id`, `l2`.`OneToOne_Optional_Self2Id`, `l3`.`Id` AS `Id0`, `l3`.`Level2_Optional_Id`, `l3`.`Level2_Required_Id`, `l3`.`Name` AS `Name0`, `l3`.`OneToMany_Optional_Inverse3Id`, `l3`.`OneToMany_Optional_Self_Inverse3Id`, `l3`.`OneToMany_Required_Inverse3Id`, `l3`.`OneToMany_Required_Self_Inverse3Id`, `l3`.`OneToOne_Optional_PK_Inverse3Id`, `l3`.`OneToOne_Optional_Self3Id`, `l4`.`Id` AS `Id1`, `l4`.`Level3_Optional_Id`, `l4`.`Level3_Required_Id`, `l4`.`Name` AS `Name1`, `l4`.`OneToMany_Optional_Inverse4Id`, `l4`.`OneToMany_Optional_Self_Inverse4Id`, `l4`.`OneToMany_Required_Inverse4Id`, `l4`.`OneToMany_Required_Self_Inverse4Id`, `l4`.`OneToOne_Optional_PK_Inverse4Id`, `l4`.`OneToOne_Optional_Self4Id` FROM (`LevelTwo` AS `l2` LEFT JOIN `LevelThree` AS `l3` ON `l2`.`Id` = `l3`.`OneToOne_Optional_PK_Inverse3Id`) LEFT JOIN `LevelFour` AS `l4` ON `l3`.`Id` = `l4`.`Level3_Optional_Id` -) AS `t` ON `l`.`Id` = `t`.`OneToMany_Optional_Inverse2Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` WHERE ( SELECT COUNT(*) FROM `LevelTwo` AS `l0` LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToOne_Optional_PK_Inverse3Id` WHERE `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id` AND (`l1`.`Name` <> 'Foo' OR `l1`.`Name` IS NULL)) > 0 -ORDER BY `l`.`Id`, `t`.`Id`, `t`.`Id0` +ORDER BY `l`.`Id`, `s`.`Id`, `s`.`Id0` """); } @@ -1278,13 +1278,13 @@ public override async Task Filtered_include_basic_Where(bool async) AssertSql( """ -SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `t`.`Id`, `t`.`Date`, `t`.`Level1_Optional_Id`, `t`.`Level1_Required_Id`, `t`.`Name`, `t`.`OneToMany_Optional_Inverse2Id`, `t`.`OneToMany_Optional_Self_Inverse2Id`, `t`.`OneToMany_Required_Inverse2Id`, `t`.`OneToMany_Required_Self_Inverse2Id`, `t`.`OneToOne_Optional_PK_Inverse2Id`, `t`.`OneToOne_Optional_Self2Id` +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id` FROM `LevelOne` AS `l` LEFT JOIN ( SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` FROM `LevelTwo` AS `l0` WHERE `l0`.`Id` > 5 -) AS `t` ON `l`.`Id` = `t`.`OneToMany_Optional_Inverse2Id` +) AS `l1` ON `l`.`Id` = `l1`.`OneToMany_Optional_Inverse2Id` ORDER BY `l`.`Id` """); } @@ -1308,14 +1308,14 @@ public override async Task Filtered_ThenInclude_OrderBy(bool async) AssertSql( """ -SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `t`.`Id`, `t`.`Date`, `t`.`Level1_Optional_Id`, `t`.`Level1_Required_Id`, `t`.`Name`, `t`.`OneToMany_Optional_Inverse2Id`, `t`.`OneToMany_Optional_Self_Inverse2Id`, `t`.`OneToMany_Required_Inverse2Id`, `t`.`OneToMany_Required_Self_Inverse2Id`, `t`.`OneToOne_Optional_PK_Inverse2Id`, `t`.`OneToOne_Optional_Self2Id`, `t`.`Id0`, `t`.`Level2_Optional_Id`, `t`.`Level2_Required_Id`, `t`.`Name0`, `t`.`OneToMany_Optional_Inverse3Id`, `t`.`OneToMany_Optional_Self_Inverse3Id`, `t`.`OneToMany_Required_Inverse3Id`, `t`.`OneToMany_Required_Self_Inverse3Id`, `t`.`OneToOne_Optional_PK_Inverse3Id`, `t`.`OneToOne_Optional_Self3Id` +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id` FROM `LevelOne` AS `l` LEFT JOIN ( SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id` AS `Id0`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name` AS `Name0`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` FROM `LevelTwo` AS `l0` LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id` -) AS `t` ON `l`.`Id` = `t`.`OneToMany_Optional_Inverse2Id` -ORDER BY `l`.`Id`, `t`.`Id`, `t`.`Name0` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `s`.`Id`, `s`.`Name0` """); } @@ -1325,14 +1325,14 @@ public override async Task Filtered_include_ThenInclude_OrderBy(bool async) AssertSql( """ -SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `t`.`Id`, `t`.`Date`, `t`.`Level1_Optional_Id`, `t`.`Level1_Required_Id`, `t`.`Name`, `t`.`OneToMany_Optional_Inverse2Id`, `t`.`OneToMany_Optional_Self_Inverse2Id`, `t`.`OneToMany_Required_Inverse2Id`, `t`.`OneToMany_Required_Self_Inverse2Id`, `t`.`OneToOne_Optional_PK_Inverse2Id`, `t`.`OneToOne_Optional_Self2Id`, `t`.`Id0`, `t`.`Level2_Optional_Id`, `t`.`Level2_Required_Id`, `t`.`Name0`, `t`.`OneToMany_Optional_Inverse3Id`, `t`.`OneToMany_Optional_Self_Inverse3Id`, `t`.`OneToMany_Required_Inverse3Id`, `t`.`OneToMany_Required_Self_Inverse3Id`, `t`.`OneToOne_Optional_PK_Inverse3Id`, `t`.`OneToOne_Optional_Self3Id` +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id` FROM `LevelOne` AS `l` LEFT JOIN ( SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id` AS `Id0`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name` AS `Name0`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` FROM `LevelTwo` AS `l0` LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id` -) AS `t` ON `l`.`Id` = `t`.`OneToMany_Optional_Inverse2Id` -ORDER BY `l`.`Id`, `t`.`Name`, `t`.`Id`, `t`.`Name0` DESC +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `s`.`Name`, `s`.`Id`, `s`.`Name0` DESC """); } @@ -1867,8 +1867,8 @@ public override async Task SelectMany_DefaultIfEmpty_multiple_times_with_joins_p await base.SelectMany_DefaultIfEmpty_multiple_times_with_joins_projecting_a_collection(async); AssertSql( -""" -SELECT `l2`.`Id`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id`, `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `t`.`Id`, `t`.`Id0`, `t`.`Id1`, `t`.`Id2`, `t0`.`Id`, `t0`.`Id0`, `t0`.`Id1`, `t0`.`Id2`, `l11`.`Id`, `l12`.`Id`, `l13`.`Id`, `l14`.`Id`, `t1`.`Id`, `t1`.`Date`, `t1`.`Level1_Optional_Id`, `t1`.`Level1_Required_Id`, `t1`.`Name`, `t1`.`OneToMany_Optional_Inverse2Id`, `t1`.`OneToMany_Optional_Self_Inverse2Id`, `t1`.`OneToMany_Required_Inverse2Id`, `t1`.`OneToMany_Required_Self_Inverse2Id`, `t1`.`OneToOne_Optional_PK_Inverse2Id`, `t1`.`OneToOne_Optional_Self2Id`, `l14`.`Name` + """ +SELECT `l2`.`Id`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id`, `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `s0`.`Id`, `s0`.`Id0`, `s0`.`Id1`, `s0`.`Id2`, `l11`.`Id`, `l12`.`Id`, `l13`.`Id`, `l14`.`Id`, `l16`.`Id`, `l16`.`Date`, `l16`.`Level1_Optional_Id`, `l16`.`Level1_Required_Id`, `l16`.`Name`, `l16`.`OneToMany_Optional_Inverse2Id`, `l16`.`OneToMany_Optional_Self_Inverse2Id`, `l16`.`OneToMany_Required_Inverse2Id`, `l16`.`OneToMany_Required_Self_Inverse2Id`, `l16`.`OneToOne_Optional_PK_Inverse2Id`, `l16`.`OneToOne_Optional_Self2Id`, `l14`.`Name` FROM (((((((((`LevelOne` AS `l` LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Required_Id`) LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Optional_Id`) @@ -1879,7 +1879,7 @@ LEFT JOIN ( INNER JOIN `LevelThree` AS `l4` ON `l3`.`Level3_Required_Id` = `l4`.`Id`) LEFT JOIN `LevelTwo` AS `l5` ON `l4`.`Level2_Optional_Id` = `l5`.`Id`) LEFT JOIN `LevelTwo` AS `l6` ON `l5`.`Id` = `l6`.`OneToMany_Required_Self_Inverse2Id` -) AS `t` ON `l2`.`Id` = `t`.`Id2`) +) AS `s` ON `l2`.`Id` = `s`.`Id2`) LEFT JOIN ( SELECT `l7`.`Id`, `l8`.`Id` AS `Id0`, `l9`.`Id` AS `Id1`, `l10`.`Id` AS `Id2`, `l10`.`Level2_Optional_Id` AS `Level2_Optional_Id0` FROM ((`LevelFour` AS `l7` @@ -1887,18 +1887,18 @@ LEFT JOIN ( LEFT JOIN `LevelTwo` AS `l9` ON `l8`.`Level2_Required_Id` = `l9`.`Id`) LEFT JOIN `LevelThree` AS `l10` ON `l9`.`Id` = `l10`.`OneToMany_Required_Inverse3Id` WHERE `l8`.`Level2_Required_Id` IS NOT NULL AND `l9`.`Id` IS NOT NULL -) AS `t0` ON `t`.`Id2` = `t0`.`Id2`) +) AS `s0` ON `s`.`Id2` = `s0`.`Id2`) LEFT JOIN `LevelThree` AS `l11` ON `l2`.`OneToMany_Optional_Inverse4Id` = `l11`.`Id`) -LEFT JOIN `LevelThree` AS `l12` ON `t`.`Id2` = `l12`.`Level2_Optional_Id`) -LEFT JOIN `LevelTwo` AS `l13` ON `t0`.`Level2_Optional_Id0` = `l13`.`Id`) +LEFT JOIN `LevelThree` AS `l12` ON `s`.`Id2` = `l12`.`Level2_Optional_Id`) +LEFT JOIN `LevelTwo` AS `l13` ON `s0`.`Level2_Optional_Id0` = `l13`.`Id`) LEFT JOIN `LevelThree` AS `l14` ON `l13`.`Id` = `l14`.`Level2_Required_Id`) LEFT JOIN ( SELECT `l15`.`Id`, `l15`.`Date`, `l15`.`Level1_Optional_Id`, `l15`.`Level1_Required_Id`, `l15`.`Name`, `l15`.`OneToMany_Optional_Inverse2Id`, `l15`.`OneToMany_Optional_Self_Inverse2Id`, `l15`.`OneToMany_Required_Inverse2Id`, `l15`.`OneToMany_Required_Self_Inverse2Id`, `l15`.`OneToOne_Optional_PK_Inverse2Id`, `l15`.`OneToOne_Optional_Self2Id` FROM `LevelTwo` AS `l15` WHERE `l15`.`Id` <> 42 -) AS `t1` ON `t`.`Id2` = `t1`.`OneToMany_Optional_Self_Inverse2Id` -WHERE (`l11`.`Name` <> 'Foo' OR `l11`.`Name` IS NULL) AND (`l2`.`Id` IS NOT NULL AND `t`.`Id2` IS NOT NULL) -ORDER BY `l12`.`Id`, `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `l2`.`Id`, `t`.`Id`, `t`.`Id0`, `t`.`Id1`, `t`.`Id2`, `t0`.`Id`, `t0`.`Id0`, `t0`.`Id1`, `t0`.`Id2`, `l11`.`Id`, `l13`.`Id`, `l14`.`Id` +) AS `l16` ON `s`.`Id2` = `l16`.`OneToMany_Optional_Self_Inverse2Id` +WHERE (`l11`.`Name` <> 'Foo' OR `l11`.`Name` IS NULL) AND (`l2`.`Id` IS NOT NULL AND `s`.`Id2` IS NOT NULL) +ORDER BY `l12`.`Id`, `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `l2`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `s0`.`Id`, `s0`.`Id0`, `s0`.`Id1`, `s0`.`Id2`, `l11`.`Id`, `l13`.`Id`, `l14`.`Id` """); } @@ -1966,14 +1966,14 @@ public override async Task Projecting_collection_with_FirstOrDefault(bool async) AssertSql( """ -SELECT `t`.`Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` +SELECT `l1`.`Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` FROM ( SELECT TOP 1 `l`.`Id` FROM `LevelOne` AS `l` WHERE `l`.`Id` = 1 -) AS `t` -LEFT JOIN `LevelTwo` AS `l0` ON `t`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id` -ORDER BY `t`.`Id` +) AS `l1` +LEFT JOIN `LevelTwo` AS `l0` ON `l1`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l1`.`Id` """); } @@ -2326,19 +2326,19 @@ public override async Task Collection_projection_over_GroupBy_over_parameter(boo AssertSql( """ -SELECT `t`.`Date`, `t0`.`Id` +SELECT `l1`.`Date`, `l2`.`Id` FROM ( SELECT `l`.`Date` FROM `LevelOne` AS `l` WHERE `l`.`Name` IN ('L1 01', 'L1 02') GROUP BY `l`.`Date` -) AS `t` +) AS `l1` LEFT JOIN ( SELECT `l0`.`Id`, `l0`.`Date` FROM `LevelOne` AS `l0` WHERE `l0`.`Name` IN ('L1 01', 'L1 02') -) AS `t0` ON `t`.`Date` = `t0`.`Date` -ORDER BY `t`.`Date` +) AS `l2` ON `l1`.`Date` = `l2`.`Date` +ORDER BY `l1`.`Date` """); } @@ -2347,8 +2347,8 @@ public override async Task Include_partially_added_before_Where_and_then_build_u await base.Include_partially_added_before_Where_and_then_build_upon(async); AssertSql( -""" -SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id`, `l0`.`Id`, `t`.`Id`, `t`.`Level2_Optional_Id`, `t`.`Level2_Required_Id`, `t`.`Name`, `t`.`OneToMany_Optional_Inverse3Id`, `t`.`OneToMany_Optional_Self_Inverse3Id`, `t`.`OneToMany_Required_Inverse3Id`, `t`.`OneToMany_Required_Self_Inverse3Id`, `t`.`OneToOne_Optional_PK_Inverse3Id`, `t`.`OneToOne_Optional_Self3Id`, `t`.`Id0`, `t`.`Level3_Optional_Id`, `t`.`Level3_Required_Id`, `t`.`Name0`, `t`.`OneToMany_Optional_Inverse4Id`, `t`.`OneToMany_Optional_Self_Inverse4Id`, `t`.`OneToMany_Required_Inverse4Id`, `t`.`OneToMany_Required_Self_Inverse4Id`, `t`.`OneToOne_Optional_PK_Inverse4Id`, `t`.`OneToOne_Optional_Self4Id` + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id`, `l0`.`Id`, `s`.`Id`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `s`.`Id0`, `s`.`Level3_Optional_Id`, `s`.`Level3_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse4Id`, `s`.`OneToMany_Optional_Self_Inverse4Id`, `s`.`OneToMany_Required_Inverse4Id`, `s`.`OneToMany_Required_Self_Inverse4Id`, `s`.`OneToOne_Optional_PK_Inverse4Id`, `s`.`OneToOne_Optional_Self4Id` FROM ((`LevelOne` AS `l` LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToOne_Optional_PK_Inverse2Id`) LEFT JOIN `LevelTwo` AS `l1` ON `l`.`Id` = `l1`.`Level1_Optional_Id`) @@ -2356,9 +2356,9 @@ LEFT JOIN ( SELECT `l2`.`Id`, `l2`.`Level2_Optional_Id`, `l2`.`Level2_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse3Id`, `l2`.`OneToMany_Optional_Self_Inverse3Id`, `l2`.`OneToMany_Required_Inverse3Id`, `l2`.`OneToMany_Required_Self_Inverse3Id`, `l2`.`OneToOne_Optional_PK_Inverse3Id`, `l2`.`OneToOne_Optional_Self3Id`, `l3`.`Id` AS `Id0`, `l3`.`Level3_Optional_Id`, `l3`.`Level3_Required_Id`, `l3`.`Name` AS `Name0`, `l3`.`OneToMany_Optional_Inverse4Id`, `l3`.`OneToMany_Optional_Self_Inverse4Id`, `l3`.`OneToMany_Required_Inverse4Id`, `l3`.`OneToMany_Required_Self_Inverse4Id`, `l3`.`OneToOne_Optional_PK_Inverse4Id`, `l3`.`OneToOne_Optional_Self4Id` FROM `LevelThree` AS `l2` LEFT JOIN `LevelFour` AS `l3` ON `l2`.`Id` = `l3`.`Level3_Optional_Id` -) AS `t` ON `l1`.`Id` = `t`.`OneToMany_Optional_Inverse3Id` +) AS `s` ON `l1`.`Id` = `s`.`OneToMany_Optional_Inverse3Id` WHERE `l0`.`Id` < 3 OR `l1`.`Id` > 8 -ORDER BY `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `t`.`Id` +ORDER BY `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `s`.`Id` """); } @@ -2736,8 +2736,8 @@ public override async Task Multiple_complex_includes_EF_Property(bool async) await base.Multiple_complex_includes_EF_Property(async); AssertSql( -""" -SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `t`.`Id`, `t`.`Date`, `t`.`Level1_Optional_Id`, `t`.`Level1_Required_Id`, `t`.`Name`, `t`.`OneToMany_Optional_Inverse2Id`, `t`.`OneToMany_Optional_Self_Inverse2Id`, `t`.`OneToMany_Required_Inverse2Id`, `t`.`OneToMany_Required_Self_Inverse2Id`, `t`.`OneToOne_Optional_PK_Inverse2Id`, `t`.`OneToOne_Optional_Self2Id`, `t`.`Id0`, `t`.`Level2_Optional_Id`, `t`.`Level2_Required_Id`, `t`.`Name0`, `t`.`OneToMany_Optional_Inverse3Id`, `t`.`OneToMany_Optional_Self_Inverse3Id`, `t`.`OneToMany_Required_Inverse3Id`, `t`.`OneToMany_Required_Self_Inverse3Id`, `t`.`OneToOne_Optional_PK_Inverse3Id`, `t`.`OneToOne_Optional_Self3Id` + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id` FROM ((`LevelOne` AS `l` LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id`) @@ -2745,8 +2745,8 @@ LEFT JOIN ( SELECT `l2`.`Id`, `l2`.`Date`, `l2`.`Level1_Optional_Id`, `l2`.`Level1_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse2Id`, `l2`.`OneToMany_Optional_Self_Inverse2Id`, `l2`.`OneToMany_Required_Inverse2Id`, `l2`.`OneToMany_Required_Self_Inverse2Id`, `l2`.`OneToOne_Optional_PK_Inverse2Id`, `l2`.`OneToOne_Optional_Self2Id`, `l3`.`Id` AS `Id0`, `l3`.`Level2_Optional_Id`, `l3`.`Level2_Required_Id`, `l3`.`Name` AS `Name0`, `l3`.`OneToMany_Optional_Inverse3Id`, `l3`.`OneToMany_Optional_Self_Inverse3Id`, `l3`.`OneToMany_Required_Inverse3Id`, `l3`.`OneToMany_Required_Self_Inverse3Id`, `l3`.`OneToOne_Optional_PK_Inverse3Id`, `l3`.`OneToOne_Optional_Self3Id` FROM `LevelTwo` AS `l2` LEFT JOIN `LevelThree` AS `l3` ON `l2`.`Id` = `l3`.`Level2_Optional_Id` -) AS `t` ON `l`.`Id` = `t`.`OneToMany_Optional_Inverse2Id` -ORDER BY `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `t`.`Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `s`.`Id` """); } @@ -2756,7 +2756,7 @@ public override async Task Multiple_complex_includes_self_ref_EF_Property(bool a AssertSql( """ -SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Name`, `l0`.`OneToMany_Optional_Self_Inverse1Id`, `l0`.`OneToMany_Required_Self_Inverse1Id`, `l0`.`OneToOne_Optional_Self1Id`, `l1`.`Id`, `l1`.`Date`, `l1`.`Name`, `l1`.`OneToMany_Optional_Self_Inverse1Id`, `l1`.`OneToMany_Required_Self_Inverse1Id`, `l1`.`OneToOne_Optional_Self1Id`, `t`.`Id`, `t`.`Date`, `t`.`Name`, `t`.`OneToMany_Optional_Self_Inverse1Id`, `t`.`OneToMany_Required_Self_Inverse1Id`, `t`.`OneToOne_Optional_Self1Id`, `t`.`Id0`, `t`.`Date0`, `t`.`Name0`, `t`.`OneToMany_Optional_Self_Inverse1Id0`, `t`.`OneToMany_Required_Self_Inverse1Id0`, `t`.`OneToOne_Optional_Self1Id0` +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Name`, `l0`.`OneToMany_Optional_Self_Inverse1Id`, `l0`.`OneToMany_Required_Self_Inverse1Id`, `l0`.`OneToOne_Optional_Self1Id`, `l1`.`Id`, `l1`.`Date`, `l1`.`Name`, `l1`.`OneToMany_Optional_Self_Inverse1Id`, `l1`.`OneToMany_Required_Self_Inverse1Id`, `l1`.`OneToOne_Optional_Self1Id`, `s`.`Id`, `s`.`Date`, `s`.`Name`, `s`.`OneToMany_Optional_Self_Inverse1Id`, `s`.`OneToMany_Required_Self_Inverse1Id`, `s`.`OneToOne_Optional_Self1Id`, `s`.`Id0`, `s`.`Date0`, `s`.`Name0`, `s`.`OneToMany_Optional_Self_Inverse1Id0`, `s`.`OneToMany_Required_Self_Inverse1Id0`, `s`.`OneToOne_Optional_Self1Id0` FROM ((`LevelOne` AS `l` LEFT JOIN `LevelOne` AS `l0` ON `l`.`OneToOne_Optional_Self1Id` = `l0`.`Id`) LEFT JOIN `LevelOne` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Self_Inverse1Id`) @@ -2764,8 +2764,8 @@ LEFT JOIN ( SELECT `l2`.`Id`, `l2`.`Date`, `l2`.`Name`, `l2`.`OneToMany_Optional_Self_Inverse1Id`, `l2`.`OneToMany_Required_Self_Inverse1Id`, `l2`.`OneToOne_Optional_Self1Id`, `l3`.`Id` AS `Id0`, `l3`.`Date` AS `Date0`, `l3`.`Name` AS `Name0`, `l3`.`OneToMany_Optional_Self_Inverse1Id` AS `OneToMany_Optional_Self_Inverse1Id0`, `l3`.`OneToMany_Required_Self_Inverse1Id` AS `OneToMany_Required_Self_Inverse1Id0`, `l3`.`OneToOne_Optional_Self1Id` AS `OneToOne_Optional_Self1Id0` FROM `LevelOne` AS `l2` LEFT JOIN `LevelOne` AS `l3` ON `l2`.`OneToOne_Optional_Self1Id` = `l3`.`Id` -) AS `t` ON `l`.`Id` = `t`.`OneToMany_Optional_Self_Inverse1Id` -ORDER BY `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `t`.`Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Self_Inverse1Id` +ORDER BY `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `s`.`Id` """); } @@ -2774,21 +2774,21 @@ public override async Task Include_collection_multiple_with_filter_EF_Property(b await base.Include_collection_multiple_with_filter_EF_Property(async); AssertSql( -""" -SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `t`.`Id`, `t`.`Date`, `t`.`Level1_Optional_Id`, `t`.`Level1_Required_Id`, `t`.`Name`, `t`.`OneToMany_Optional_Inverse2Id`, `t`.`OneToMany_Optional_Self_Inverse2Id`, `t`.`OneToMany_Required_Inverse2Id`, `t`.`OneToMany_Required_Self_Inverse2Id`, `t`.`OneToOne_Optional_PK_Inverse2Id`, `t`.`OneToOne_Optional_Self2Id`, `t`.`Id0`, `t`.`Level2_Optional_Id`, `t`.`Level2_Required_Id`, `t`.`Name0`, `t`.`OneToMany_Optional_Inverse3Id`, `t`.`OneToMany_Optional_Self_Inverse3Id`, `t`.`OneToMany_Required_Inverse3Id`, `t`.`OneToMany_Required_Self_Inverse3Id`, `t`.`OneToOne_Optional_PK_Inverse3Id`, `t`.`OneToOne_Optional_Self3Id`, `t`.`Id1`, `t`.`Level3_Optional_Id`, `t`.`Level3_Required_Id`, `t`.`Name1`, `t`.`OneToMany_Optional_Inverse4Id`, `t`.`OneToMany_Optional_Self_Inverse4Id`, `t`.`OneToMany_Required_Inverse4Id`, `t`.`OneToMany_Required_Self_Inverse4Id`, `t`.`OneToOne_Optional_PK_Inverse4Id`, `t`.`OneToOne_Optional_Self4Id` + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `s`.`Id1`, `s`.`Level3_Optional_Id`, `s`.`Level3_Required_Id`, `s`.`Name1`, `s`.`OneToMany_Optional_Inverse4Id`, `s`.`OneToMany_Optional_Self_Inverse4Id`, `s`.`OneToMany_Required_Inverse4Id`, `s`.`OneToMany_Required_Self_Inverse4Id`, `s`.`OneToOne_Optional_PK_Inverse4Id`, `s`.`OneToOne_Optional_Self4Id` FROM `LevelOne` AS `l` LEFT JOIN ( SELECT `l2`.`Id`, `l2`.`Date`, `l2`.`Level1_Optional_Id`, `l2`.`Level1_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse2Id`, `l2`.`OneToMany_Optional_Self_Inverse2Id`, `l2`.`OneToMany_Required_Inverse2Id`, `l2`.`OneToMany_Required_Self_Inverse2Id`, `l2`.`OneToOne_Optional_PK_Inverse2Id`, `l2`.`OneToOne_Optional_Self2Id`, `l3`.`Id` AS `Id0`, `l3`.`Level2_Optional_Id`, `l3`.`Level2_Required_Id`, `l3`.`Name` AS `Name0`, `l3`.`OneToMany_Optional_Inverse3Id`, `l3`.`OneToMany_Optional_Self_Inverse3Id`, `l3`.`OneToMany_Required_Inverse3Id`, `l3`.`OneToMany_Required_Self_Inverse3Id`, `l3`.`OneToOne_Optional_PK_Inverse3Id`, `l3`.`OneToOne_Optional_Self3Id`, `l4`.`Id` AS `Id1`, `l4`.`Level3_Optional_Id`, `l4`.`Level3_Required_Id`, `l4`.`Name` AS `Name1`, `l4`.`OneToMany_Optional_Inverse4Id`, `l4`.`OneToMany_Optional_Self_Inverse4Id`, `l4`.`OneToMany_Required_Inverse4Id`, `l4`.`OneToMany_Required_Self_Inverse4Id`, `l4`.`OneToOne_Optional_PK_Inverse4Id`, `l4`.`OneToOne_Optional_Self4Id` FROM (`LevelTwo` AS `l2` LEFT JOIN `LevelThree` AS `l3` ON `l2`.`Id` = `l3`.`OneToOne_Optional_PK_Inverse3Id`) LEFT JOIN `LevelFour` AS `l4` ON `l3`.`Id` = `l4`.`Level3_Optional_Id` -) AS `t` ON `l`.`Id` = `t`.`OneToMany_Optional_Inverse2Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` WHERE ( SELECT COUNT(*) FROM `LevelTwo` AS `l0` LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToOne_Optional_PK_Inverse3Id` WHERE `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id` AND (`l1`.`Name` <> 'Foo' OR `l1`.`Name` IS NULL)) > 0 -ORDER BY `l`.`Id`, `t`.`Id`, `t`.`Id0` +ORDER BY `l`.`Id`, `s`.`Id`, `s`.`Id0` """); } @@ -2798,13 +2798,13 @@ public override async Task Filtered_include_basic_Where_EF_Property(bool async) AssertSql( """ -SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `t`.`Id`, `t`.`Date`, `t`.`Level1_Optional_Id`, `t`.`Level1_Required_Id`, `t`.`Name`, `t`.`OneToMany_Optional_Inverse2Id`, `t`.`OneToMany_Optional_Self_Inverse2Id`, `t`.`OneToMany_Required_Inverse2Id`, `t`.`OneToMany_Required_Self_Inverse2Id`, `t`.`OneToOne_Optional_PK_Inverse2Id`, `t`.`OneToOne_Optional_Self2Id` +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id` FROM `LevelOne` AS `l` LEFT JOIN ( SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` FROM `LevelTwo` AS `l0` WHERE `l0`.`Id` > 5 -) AS `t` ON `l`.`Id` = `t`.`OneToMany_Optional_Inverse2Id` +) AS `l1` ON `l`.`Id` = `l1`.`OneToMany_Optional_Inverse2Id` ORDER BY `l`.`Id` """); } @@ -2883,14 +2883,14 @@ public override async Task Final_GroupBy_property_entity_Include_collection_nest AssertSql( """ -SELECT `l`.`Name`, `l`.`Id`, `l`.`Date`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `t`.`Id`, `t`.`Date`, `t`.`Level1_Optional_Id`, `t`.`Level1_Required_Id`, `t`.`Name`, `t`.`OneToMany_Optional_Inverse2Id`, `t`.`OneToMany_Optional_Self_Inverse2Id`, `t`.`OneToMany_Required_Inverse2Id`, `t`.`OneToMany_Required_Self_Inverse2Id`, `t`.`OneToOne_Optional_PK_Inverse2Id`, `t`.`OneToOne_Optional_Self2Id`, `t`.`Id0`, `t`.`Level2_Optional_Id`, `t`.`Level2_Required_Id`, `t`.`Name0`, `t`.`OneToMany_Optional_Inverse3Id`, `t`.`OneToMany_Optional_Self_Inverse3Id`, `t`.`OneToMany_Required_Inverse3Id`, `t`.`OneToMany_Required_Self_Inverse3Id`, `t`.`OneToOne_Optional_PK_Inverse3Id`, `t`.`OneToOne_Optional_Self3Id` +SELECT `l`.`Name`, `l`.`Id`, `l`.`Date`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id` FROM `LevelOne` AS `l` LEFT JOIN ( SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id` AS `Id0`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name` AS `Name0`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` FROM `LevelTwo` AS `l0` LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id` -) AS `t` ON `l`.`Id` = `t`.`OneToMany_Optional_Inverse2Id` -ORDER BY `l`.`Name`, `l`.`Id`, `t`.`Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Name`, `l`.`Id`, `s`.`Id` """); } @@ -2900,14 +2900,14 @@ public override async Task Final_GroupBy_property_entity_Include_collection_refe AssertSql( """ -SELECT `l`.`Name`, `l`.`Id`, `l`.`Date`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `t`.`Id`, `t`.`Date`, `t`.`Level1_Optional_Id`, `t`.`Level1_Required_Id`, `t`.`Name`, `t`.`OneToMany_Optional_Inverse2Id`, `t`.`OneToMany_Optional_Self_Inverse2Id`, `t`.`OneToMany_Required_Inverse2Id`, `t`.`OneToMany_Required_Self_Inverse2Id`, `t`.`OneToOne_Optional_PK_Inverse2Id`, `t`.`OneToOne_Optional_Self2Id`, `t`.`Id0`, `t`.`Level2_Optional_Id`, `t`.`Level2_Required_Id`, `t`.`Name0`, `t`.`OneToMany_Optional_Inverse3Id`, `t`.`OneToMany_Optional_Self_Inverse3Id`, `t`.`OneToMany_Required_Inverse3Id`, `t`.`OneToMany_Required_Self_Inverse3Id`, `t`.`OneToOne_Optional_PK_Inverse3Id`, `t`.`OneToOne_Optional_Self3Id` +SELECT `l`.`Name`, `l`.`Id`, `l`.`Date`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id` FROM `LevelOne` AS `l` LEFT JOIN ( SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id` AS `Id0`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name` AS `Name0`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` FROM `LevelTwo` AS `l0` LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Optional_Id` -) AS `t` ON `l`.`Id` = `t`.`OneToMany_Optional_Inverse2Id` -ORDER BY `l`.`Name`, `l`.`Id`, `t`.`Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Name`, `l`.`Id`, `s`.`Id` """); } @@ -2966,6 +2966,20 @@ ORDER BY `l`.`Name` """); } + public override async Task Project_collection_and_nested_conditional(bool async) + { + await base.Project_collection_and_nested_conditional(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l0`.`Name`, `l0`.`Id`, IIF(`l`.`Id` = 1, '01', IIF(`l`.`Id` = 2, '02', IIF(`l`.`Id` = 3, '03', NULL))) +FROM `LevelOne` AS `l` +LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id` +WHERE IIF(`l`.`Id` = 1, '01', IIF(`l`.`Id` = 2, '02', IIF(`l`.`Id` = 3, '03', NULL))) = '02' +ORDER BY `l`.`Id`, `l0`.`Id` +"""); + } + private void AssertSql(params string[] expected) => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); } diff --git a/test/EFCore.Jet.FunctionalTests/Query/ComplexNavigationsCollectionsSplitQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/ComplexNavigationsCollectionsSplitQueryJetTest.cs index 47c10b91..44b71262 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/ComplexNavigationsCollectionsSplitQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/ComplexNavigationsCollectionsSplitQueryJetTest.cs @@ -37,13 +37,13 @@ ORDER BY `l`.`Id` """, // """ -SELECT `t`.`Id`, `t`.`Date`, `t`.`Level1_Optional_Id`, `t`.`Level1_Required_Id`, `t`.`Name`, `t`.`OneToMany_Optional_Inverse2Id`, `t`.`OneToMany_Optional_Self_Inverse2Id`, `t`.`OneToMany_Required_Inverse2Id`, `t`.`OneToMany_Required_Self_Inverse2Id`, `t`.`OneToOne_Optional_PK_Inverse2Id`, `t`.`OneToOne_Optional_Self2Id`, `l`.`Id` +SELECT `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id`, `l`.`Id` FROM `LevelOne` AS `l` INNER JOIN ( SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` FROM `LevelTwo` AS `l0` WHERE `l0`.`Id` > 5 -) AS `t` ON `l`.`Id` = `t`.`OneToMany_Optional_Inverse2Id` +) AS `l1` ON `l`.`Id` = `l1`.`OneToMany_Optional_Inverse2Id` ORDER BY `l`.`Id` """); } @@ -911,9 +911,9 @@ ORDER BY `l`.`Id` """, // """ -SELECT `l0`.`Id`, `l`.`Id` +SELECT `l2`.`Id`, `l`.`Id` FROM `LevelOne` AS `l` -INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Required_Inverse2Id` +INNER JOIN `LevelTwo` AS `l2` ON `l`.`Id` = `l2`.`OneToMany_Required_Inverse2Id` ORDER BY `l`.`Id` """); } @@ -925,8 +925,8 @@ await base.Complex_SelectMany_with_nested_navigations_and_explicit_DefaultIfEmpt async); AssertSql( -""" -SELECT `l2`.`Id`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id`, `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `t`.`Id`, `t`.`Id0`, `t`.`Id1`, `t`.`Id2`, `t0`.`Id`, `t0`.`Id0`, `t0`.`Id1`, `t0`.`Id2`, `l11`.`Id`, `l12`.`Id`, `l13`.`Id`, `l14`.`Id`, `l14`.`Name` + """ +SELECT `l2`.`Id`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id`, `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `s0`.`Id`, `s0`.`Id0`, `s0`.`Id1`, `s0`.`Id2`, `l11`.`Id`, `l12`.`Id`, `l13`.`Id`, `l14`.`Id`, `l14`.`Name` FROM ((((((((`LevelOne` AS `l` LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Required_Id`) LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Optional_Id`) @@ -937,7 +937,7 @@ LEFT JOIN ( INNER JOIN `LevelThree` AS `l4` ON `l3`.`Level3_Required_Id` = `l4`.`Id`) LEFT JOIN `LevelTwo` AS `l5` ON `l4`.`Level2_Optional_Id` = `l5`.`Id`) LEFT JOIN `LevelTwo` AS `l6` ON `l5`.`Id` = `l6`.`OneToMany_Required_Self_Inverse2Id` -) AS `t` ON `l2`.`Id` = `t`.`Id2`) +) AS `s` ON `l2`.`Id` = `s`.`Id2`) LEFT JOIN ( SELECT `l7`.`Id`, `l8`.`Id` AS `Id0`, `l9`.`Id` AS `Id1`, `l10`.`Id` AS `Id2`, `l10`.`Level2_Optional_Id` AS `Level2_Optional_Id0` FROM ((`LevelFour` AS `l7` @@ -945,17 +945,17 @@ LEFT JOIN ( LEFT JOIN `LevelTwo` AS `l9` ON `l8`.`Level2_Required_Id` = `l9`.`Id`) LEFT JOIN `LevelThree` AS `l10` ON `l9`.`Id` = `l10`.`OneToMany_Required_Inverse3Id` WHERE `l8`.`Level2_Required_Id` IS NOT NULL AND `l9`.`Id` IS NOT NULL -) AS `t0` ON `t`.`Id2` = `t0`.`Id2`) +) AS `s0` ON `s`.`Id2` = `s0`.`Id2`) LEFT JOIN `LevelThree` AS `l11` ON `l2`.`OneToMany_Optional_Inverse4Id` = `l11`.`Id`) -LEFT JOIN `LevelThree` AS `l12` ON `t`.`Id2` = `l12`.`Level2_Optional_Id`) -LEFT JOIN `LevelTwo` AS `l13` ON `t0`.`Level2_Optional_Id0` = `l13`.`Id`) +LEFT JOIN `LevelThree` AS `l12` ON `s`.`Id2` = `l12`.`Level2_Optional_Id`) +LEFT JOIN `LevelTwo` AS `l13` ON `s0`.`Level2_Optional_Id0` = `l13`.`Id`) LEFT JOIN `LevelThree` AS `l14` ON `l13`.`Id` = `l14`.`Level2_Required_Id` -WHERE (`l11`.`Name` <> 'Foo' OR `l11`.`Name` IS NULL) AND (`l2`.`Id` IS NOT NULL AND `t`.`Id2` IS NOT NULL) -ORDER BY `l12`.`Id`, `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `l2`.`Id`, `t`.`Id`, `t`.`Id0`, `t`.`Id1`, `t`.`Id2`, `t0`.`Id`, `t0`.`Id0`, `t0`.`Id1`, `t0`.`Id2`, `l11`.`Id`, `l13`.`Id`, `l14`.`Id` +WHERE (`l11`.`Name` <> 'Foo' OR `l11`.`Name` IS NULL) AND (`l2`.`Id` IS NOT NULL AND `s`.`Id2` IS NOT NULL) +ORDER BY `l12`.`Id`, `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `l2`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `s0`.`Id`, `s0`.`Id0`, `s0`.`Id1`, `s0`.`Id2`, `l11`.`Id`, `l13`.`Id`, `l14`.`Id` """, // -""" -SELECT `t1`.`Id`, `t1`.`Date`, `t1`.`Level1_Optional_Id`, `t1`.`Level1_Required_Id`, `t1`.`Name`, `t1`.`OneToMany_Optional_Inverse2Id`, `t1`.`OneToMany_Optional_Self_Inverse2Id`, `t1`.`OneToMany_Required_Inverse2Id`, `t1`.`OneToMany_Required_Self_Inverse2Id`, `t1`.`OneToOne_Optional_PK_Inverse2Id`, `t1`.`OneToOne_Optional_Self2Id`, `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `l2`.`Id`, `t`.`Id`, `t`.`Id0`, `t`.`Id1`, `t`.`Id2`, `t0`.`Id`, `t0`.`Id0`, `t0`.`Id1`, `t0`.`Id2`, `l11`.`Id`, `l12`.`Id`, `l13`.`Id`, `l14`.`Id` + """ +SELECT `l18`.`Id`, `l18`.`Date`, `l18`.`Level1_Optional_Id`, `l18`.`Level1_Required_Id`, `l18`.`Name`, `l18`.`OneToMany_Optional_Inverse2Id`, `l18`.`OneToMany_Optional_Self_Inverse2Id`, `l18`.`OneToMany_Required_Inverse2Id`, `l18`.`OneToMany_Required_Self_Inverse2Id`, `l18`.`OneToOne_Optional_PK_Inverse2Id`, `l18`.`OneToOne_Optional_Self2Id`, `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `l2`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `s0`.`Id`, `s0`.`Id0`, `s0`.`Id1`, `s0`.`Id2`, `l11`.`Id`, `l12`.`Id`, `l13`.`Id`, `l14`.`Id` FROM (((((((((`LevelOne` AS `l` LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Required_Id`) LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Optional_Id`) @@ -966,7 +966,7 @@ LEFT JOIN ( INNER JOIN `LevelThree` AS `l4` ON `l3`.`Level3_Required_Id` = `l4`.`Id`) LEFT JOIN `LevelTwo` AS `l5` ON `l4`.`Level2_Optional_Id` = `l5`.`Id`) LEFT JOIN `LevelTwo` AS `l6` ON `l5`.`Id` = `l6`.`OneToMany_Required_Self_Inverse2Id` -) AS `t` ON `l2`.`Id` = `t`.`Id2`) +) AS `s` ON `l2`.`Id` = `s`.`Id2`) LEFT JOIN ( SELECT `l7`.`Id`, `l8`.`Id` AS `Id0`, `l9`.`Id` AS `Id1`, `l10`.`Id` AS `Id2`, `l10`.`Level2_Optional_Id` AS `Level2_Optional_Id0` FROM ((`LevelFour` AS `l7` @@ -974,18 +974,18 @@ LEFT JOIN ( LEFT JOIN `LevelTwo` AS `l9` ON `l8`.`Level2_Required_Id` = `l9`.`Id`) LEFT JOIN `LevelThree` AS `l10` ON `l9`.`Id` = `l10`.`OneToMany_Required_Inverse3Id` WHERE `l8`.`Level2_Required_Id` IS NOT NULL AND `l9`.`Id` IS NOT NULL -) AS `t0` ON `t`.`Id2` = `t0`.`Id2`) +) AS `s0` ON `s`.`Id2` = `s0`.`Id2`) LEFT JOIN `LevelThree` AS `l11` ON `l2`.`OneToMany_Optional_Inverse4Id` = `l11`.`Id`) -LEFT JOIN `LevelThree` AS `l12` ON `t`.`Id2` = `l12`.`Level2_Optional_Id`) -LEFT JOIN `LevelTwo` AS `l13` ON `t0`.`Level2_Optional_Id0` = `l13`.`Id`) +LEFT JOIN `LevelThree` AS `l12` ON `s`.`Id2` = `l12`.`Level2_Optional_Id`) +LEFT JOIN `LevelTwo` AS `l13` ON `s0`.`Level2_Optional_Id0` = `l13`.`Id`) LEFT JOIN `LevelThree` AS `l14` ON `l13`.`Id` = `l14`.`Level2_Required_Id`) LEFT JOIN ( - SELECT `l15`.`Id`, `l15`.`Date`, `l15`.`Level1_Optional_Id`, `l15`.`Level1_Required_Id`, `l15`.`Name`, `l15`.`OneToMany_Optional_Inverse2Id`, `l15`.`OneToMany_Optional_Self_Inverse2Id`, `l15`.`OneToMany_Required_Inverse2Id`, `l15`.`OneToMany_Required_Self_Inverse2Id`, `l15`.`OneToOne_Optional_PK_Inverse2Id`, `l15`.`OneToOne_Optional_Self2Id` - FROM `LevelTwo` AS `l15` - WHERE `l15`.`Id` <> 42 -) AS `t1` ON `t`.`Id2` = `t1`.`OneToMany_Optional_Self_Inverse2Id` -WHERE (`l11`.`Name` <> 'Foo' OR `l11`.`Name` IS NULL) AND (`l2`.`Id` IS NOT NULL AND `t`.`Id2` IS NOT NULL AND `t`.`Id2` IS NOT NULL AND `t1`.`OneToMany_Optional_Self_Inverse2Id` IS NOT NULL) -ORDER BY `l12`.`Id`, `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `l2`.`Id`, `t`.`Id`, `t`.`Id0`, `t`.`Id1`, `t`.`Id2`, `t0`.`Id`, `t0`.`Id0`, `t0`.`Id1`, `t0`.`Id2`, `l11`.`Id`, `l13`.`Id`, `l14`.`Id` + SELECT `l17`.`Id`, `l17`.`Date`, `l17`.`Level1_Optional_Id`, `l17`.`Level1_Required_Id`, `l17`.`Name`, `l17`.`OneToMany_Optional_Inverse2Id`, `l17`.`OneToMany_Optional_Self_Inverse2Id`, `l17`.`OneToMany_Required_Inverse2Id`, `l17`.`OneToMany_Required_Self_Inverse2Id`, `l17`.`OneToOne_Optional_PK_Inverse2Id`, `l17`.`OneToOne_Optional_Self2Id` + FROM `LevelTwo` AS `l17` + WHERE `l17`.`Id` <> 42 +) AS `l18` ON `s`.`Id2` = `l18`.`OneToMany_Optional_Self_Inverse2Id` +WHERE (`l11`.`Name` <> 'Foo' OR `l11`.`Name` IS NULL) AND (`l2`.`Id` IS NOT NULL AND `s`.`Id2` IS NOT NULL AND `s`.`Id2` IS NOT NULL AND `l18`.`OneToMany_Optional_Self_Inverse2Id` IS NOT NULL) +ORDER BY `l12`.`Id`, `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `l2`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `s0`.`Id`, `s0`.`Id0`, `s0`.`Id1`, `s0`.`Id2`, `l11`.`Id`, `l13`.`Id`, `l14`.`Id` """); } @@ -1107,21 +1107,21 @@ public override async Task Project_collection_navigation_composed(bool async) await base.Project_collection_navigation_composed(async); AssertSql( -""" + """ SELECT `l`.`Id` FROM `LevelOne` AS `l` WHERE `l`.`Id` < 3 ORDER BY `l`.`Id` """, // -""" -SELECT `t`.`Id`, `t`.`Date`, `t`.`Level1_Optional_Id`, `t`.`Level1_Required_Id`, `t`.`Name`, `t`.`OneToMany_Optional_Inverse2Id`, `t`.`OneToMany_Optional_Self_Inverse2Id`, `t`.`OneToMany_Required_Inverse2Id`, `t`.`OneToMany_Required_Self_Inverse2Id`, `t`.`OneToOne_Optional_PK_Inverse2Id`, `t`.`OneToOne_Optional_Self2Id`, `l`.`Id` + """ +SELECT `l3`.`Id`, `l3`.`Date`, `l3`.`Level1_Optional_Id`, `l3`.`Level1_Required_Id`, `l3`.`Name`, `l3`.`OneToMany_Optional_Inverse2Id`, `l3`.`OneToMany_Optional_Self_Inverse2Id`, `l3`.`OneToMany_Required_Inverse2Id`, `l3`.`OneToMany_Required_Self_Inverse2Id`, `l3`.`OneToOne_Optional_PK_Inverse2Id`, `l3`.`OneToOne_Optional_Self2Id`, `l`.`Id` FROM `LevelOne` AS `l` INNER JOIN ( - SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` - FROM `LevelTwo` AS `l0` - WHERE `l0`.`Name` <> 'Foo' OR `l0`.`Name` IS NULL -) AS `t` ON `l`.`Id` = `t`.`OneToMany_Optional_Inverse2Id` + SELECT `l2`.`Id`, `l2`.`Date`, `l2`.`Level1_Optional_Id`, `l2`.`Level1_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse2Id`, `l2`.`OneToMany_Optional_Self_Inverse2Id`, `l2`.`OneToMany_Required_Inverse2Id`, `l2`.`OneToMany_Required_Self_Inverse2Id`, `l2`.`OneToOne_Optional_PK_Inverse2Id`, `l2`.`OneToOne_Optional_Self2Id` + FROM `LevelTwo` AS `l2` + WHERE `l2`.`Name` <> 'Foo' OR `l2`.`Name` IS NULL +) AS `l3` ON `l`.`Id` = `l3`.`OneToMany_Optional_Inverse2Id` WHERE `l`.`Id` < 3 ORDER BY `l`.`Id` """); @@ -1165,9 +1165,9 @@ ORDER BY `l`.`Id` """, // """ -SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l`.`Id` +SELECT `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id`, `l`.`Id` FROM `LevelOne` AS `l` -INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id` +INNER JOIN `LevelTwo` AS `l1` ON `l`.`Id` = `l1`.`OneToMany_Optional_Inverse2Id` ORDER BY `l`.`Id` """); } @@ -1244,13 +1244,13 @@ ORDER BY `l`.`Id` """, // """ -SELECT `t`.`c`, `t`.`Name`, `l`.`Id` +SELECT `s`.`c`, `s`.`Name`, `l`.`Id` FROM `LevelOne` AS `l` INNER JOIN ( - SELECT IIF(`l1`.`Id` IS NULL, TRUE, FALSE) AS `c`, `l1`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id` - FROM `LevelTwo` AS `l0` - LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Required_Id` -) AS `t` ON `l`.`Id` = `t`.`OneToMany_Optional_Inverse2Id` + SELECT IIF(`l5`.`Id` IS NULL, TRUE, FALSE) AS `c`, `l5`.`Name`, `l4`.`OneToMany_Optional_Inverse2Id` + FROM `LevelTwo` AS `l4` + LEFT JOIN `LevelThree` AS `l5` ON `l4`.`Id` = `l5`.`Level2_Required_Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` ORDER BY `l`.`Id` """); } @@ -1267,13 +1267,13 @@ ORDER BY `l`.`Id` """, // """ -SELECT `t`.`c`, `t`.`Name`, `l`.`Id` +SELECT `s`.`c`, `s`.`Name`, `l`.`Id` FROM `LevelOne` AS `l` INNER JOIN ( - SELECT IIF(`l1`.`Id` IS NULL, TRUE, FALSE) AS `c`, `l1`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id` - FROM `LevelTwo` AS `l0` - LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Required_Id` -) AS `t` ON `l`.`Id` = `t`.`OneToMany_Optional_Inverse2Id` + SELECT IIF(`l5`.`Id` IS NULL, TRUE, FALSE) AS `c`, `l5`.`Name`, `l4`.`OneToMany_Optional_Inverse2Id` + FROM `LevelTwo` AS `l4` + LEFT JOIN `LevelThree` AS `l5` ON `l4`.`Id` = `l5`.`Level2_Required_Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` ORDER BY `l`.`Id` """); } @@ -1347,11 +1347,11 @@ public override async Task SelectMany_navigation_property_with_include_and_follo """, // """ -SELECT `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l`.`Id`, `l0`.`Id` +SELECT `l2`.`Id`, `l2`.`Level2_Optional_Id`, `l2`.`Level2_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse3Id`, `l2`.`OneToMany_Optional_Self_Inverse3Id`, `l2`.`OneToMany_Required_Inverse3Id`, `l2`.`OneToMany_Required_Self_Inverse3Id`, `l2`.`OneToOne_Optional_PK_Inverse3Id`, `l2`.`OneToOne_Optional_Self3Id`, `l`.`Id`, `l0`.`Id` FROM (`LevelOne` AS `l` INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id`) -LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id` -WHERE `l0`.`Id` IS NOT NULL AND `l1`.`OneToMany_Optional_Inverse3Id` IS NOT NULL +LEFT JOIN `LevelThree` AS `l2` ON `l0`.`Id` = `l2`.`OneToMany_Optional_Inverse3Id` +WHERE `l0`.`Id` IS NOT NULL AND `l2`.`OneToMany_Optional_Inverse3Id` IS NOT NULL ORDER BY `l`.`Id`, `l0`.`Id` """); } @@ -1563,8 +1563,8 @@ public override async Task SelectMany_DefaultIfEmpty_multiple_times_with_joins_p await base.SelectMany_DefaultIfEmpty_multiple_times_with_joins_projecting_a_collection(async); AssertSql( -""" -SELECT `l2`.`Id`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id`, `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `t`.`Id`, `t`.`Id0`, `t`.`Id1`, `t`.`Id2`, `t0`.`Id`, `t0`.`Id0`, `t0`.`Id1`, `t0`.`Id2`, `l11`.`Id`, `l12`.`Id`, `l13`.`Id`, `l14`.`Id`, `l14`.`Name` + """ +SELECT `l2`.`Id`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id`, `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `s0`.`Id`, `s0`.`Id0`, `s0`.`Id1`, `s0`.`Id2`, `l11`.`Id`, `l12`.`Id`, `l13`.`Id`, `l14`.`Id`, `l14`.`Name` FROM ((((((((`LevelOne` AS `l` LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Required_Id`) LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Optional_Id`) @@ -1575,7 +1575,7 @@ LEFT JOIN ( INNER JOIN `LevelThree` AS `l4` ON `l3`.`Level3_Required_Id` = `l4`.`Id`) LEFT JOIN `LevelTwo` AS `l5` ON `l4`.`Level2_Optional_Id` = `l5`.`Id`) LEFT JOIN `LevelTwo` AS `l6` ON `l5`.`Id` = `l6`.`OneToMany_Required_Self_Inverse2Id` -) AS `t` ON `l2`.`Id` = `t`.`Id2`) +) AS `s` ON `l2`.`Id` = `s`.`Id2`) LEFT JOIN ( SELECT `l7`.`Id`, `l8`.`Id` AS `Id0`, `l9`.`Id` AS `Id1`, `l10`.`Id` AS `Id2`, `l10`.`Level2_Optional_Id` AS `Level2_Optional_Id0` FROM ((`LevelFour` AS `l7` @@ -1583,17 +1583,17 @@ LEFT JOIN ( LEFT JOIN `LevelTwo` AS `l9` ON `l8`.`Level2_Required_Id` = `l9`.`Id`) LEFT JOIN `LevelThree` AS `l10` ON `l9`.`Id` = `l10`.`OneToMany_Required_Inverse3Id` WHERE `l8`.`Level2_Required_Id` IS NOT NULL AND `l9`.`Id` IS NOT NULL -) AS `t0` ON `t`.`Id2` = `t0`.`Id2`) +) AS `s0` ON `s`.`Id2` = `s0`.`Id2`) LEFT JOIN `LevelThree` AS `l11` ON `l2`.`OneToMany_Optional_Inverse4Id` = `l11`.`Id`) -LEFT JOIN `LevelThree` AS `l12` ON `t`.`Id2` = `l12`.`Level2_Optional_Id`) -LEFT JOIN `LevelTwo` AS `l13` ON `t0`.`Level2_Optional_Id0` = `l13`.`Id`) +LEFT JOIN `LevelThree` AS `l12` ON `s`.`Id2` = `l12`.`Level2_Optional_Id`) +LEFT JOIN `LevelTwo` AS `l13` ON `s0`.`Level2_Optional_Id0` = `l13`.`Id`) LEFT JOIN `LevelThree` AS `l14` ON `l13`.`Id` = `l14`.`Level2_Required_Id` -WHERE (`l11`.`Name` <> 'Foo' OR `l11`.`Name` IS NULL) AND (`l2`.`Id` IS NOT NULL AND `t`.`Id2` IS NOT NULL) -ORDER BY `l12`.`Id`, `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `l2`.`Id`, `t`.`Id`, `t`.`Id0`, `t`.`Id1`, `t`.`Id2`, `t0`.`Id`, `t0`.`Id0`, `t0`.`Id1`, `t0`.`Id2`, `l11`.`Id`, `l13`.`Id`, `l14`.`Id` +WHERE (`l11`.`Name` <> 'Foo' OR `l11`.`Name` IS NULL) AND (`l2`.`Id` IS NOT NULL AND `s`.`Id2` IS NOT NULL) +ORDER BY `l12`.`Id`, `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `l2`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `s0`.`Id`, `s0`.`Id0`, `s0`.`Id1`, `s0`.`Id2`, `l11`.`Id`, `l13`.`Id`, `l14`.`Id` """, // -""" -SELECT `t1`.`Id`, `t1`.`Date`, `t1`.`Level1_Optional_Id`, `t1`.`Level1_Required_Id`, `t1`.`Name`, `t1`.`OneToMany_Optional_Inverse2Id`, `t1`.`OneToMany_Optional_Self_Inverse2Id`, `t1`.`OneToMany_Required_Inverse2Id`, `t1`.`OneToMany_Required_Self_Inverse2Id`, `t1`.`OneToOne_Optional_PK_Inverse2Id`, `t1`.`OneToOne_Optional_Self2Id`, `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `l2`.`Id`, `t`.`Id`, `t`.`Id0`, `t`.`Id1`, `t`.`Id2`, `t0`.`Id`, `t0`.`Id0`, `t0`.`Id1`, `t0`.`Id2`, `l11`.`Id`, `l12`.`Id`, `l13`.`Id`, `l14`.`Id` + """ +SELECT `l18`.`Id`, `l18`.`Date`, `l18`.`Level1_Optional_Id`, `l18`.`Level1_Required_Id`, `l18`.`Name`, `l18`.`OneToMany_Optional_Inverse2Id`, `l18`.`OneToMany_Optional_Self_Inverse2Id`, `l18`.`OneToMany_Required_Inverse2Id`, `l18`.`OneToMany_Required_Self_Inverse2Id`, `l18`.`OneToOne_Optional_PK_Inverse2Id`, `l18`.`OneToOne_Optional_Self2Id`, `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `l2`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `s0`.`Id`, `s0`.`Id0`, `s0`.`Id1`, `s0`.`Id2`, `l11`.`Id`, `l12`.`Id`, `l13`.`Id`, `l14`.`Id` FROM (((((((((`LevelOne` AS `l` LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Required_Id`) LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Optional_Id`) @@ -1604,7 +1604,7 @@ LEFT JOIN ( INNER JOIN `LevelThree` AS `l4` ON `l3`.`Level3_Required_Id` = `l4`.`Id`) LEFT JOIN `LevelTwo` AS `l5` ON `l4`.`Level2_Optional_Id` = `l5`.`Id`) LEFT JOIN `LevelTwo` AS `l6` ON `l5`.`Id` = `l6`.`OneToMany_Required_Self_Inverse2Id` -) AS `t` ON `l2`.`Id` = `t`.`Id2`) +) AS `s` ON `l2`.`Id` = `s`.`Id2`) LEFT JOIN ( SELECT `l7`.`Id`, `l8`.`Id` AS `Id0`, `l9`.`Id` AS `Id1`, `l10`.`Id` AS `Id2`, `l10`.`Level2_Optional_Id` AS `Level2_Optional_Id0` FROM ((`LevelFour` AS `l7` @@ -1612,18 +1612,18 @@ LEFT JOIN ( LEFT JOIN `LevelTwo` AS `l9` ON `l8`.`Level2_Required_Id` = `l9`.`Id`) LEFT JOIN `LevelThree` AS `l10` ON `l9`.`Id` = `l10`.`OneToMany_Required_Inverse3Id` WHERE `l8`.`Level2_Required_Id` IS NOT NULL AND `l9`.`Id` IS NOT NULL -) AS `t0` ON `t`.`Id2` = `t0`.`Id2`) +) AS `s0` ON `s`.`Id2` = `s0`.`Id2`) LEFT JOIN `LevelThree` AS `l11` ON `l2`.`OneToMany_Optional_Inverse4Id` = `l11`.`Id`) -LEFT JOIN `LevelThree` AS `l12` ON `t`.`Id2` = `l12`.`Level2_Optional_Id`) -LEFT JOIN `LevelTwo` AS `l13` ON `t0`.`Level2_Optional_Id0` = `l13`.`Id`) +LEFT JOIN `LevelThree` AS `l12` ON `s`.`Id2` = `l12`.`Level2_Optional_Id`) +LEFT JOIN `LevelTwo` AS `l13` ON `s0`.`Level2_Optional_Id0` = `l13`.`Id`) LEFT JOIN `LevelThree` AS `l14` ON `l13`.`Id` = `l14`.`Level2_Required_Id`) LEFT JOIN ( - SELECT `l15`.`Id`, `l15`.`Date`, `l15`.`Level1_Optional_Id`, `l15`.`Level1_Required_Id`, `l15`.`Name`, `l15`.`OneToMany_Optional_Inverse2Id`, `l15`.`OneToMany_Optional_Self_Inverse2Id`, `l15`.`OneToMany_Required_Inverse2Id`, `l15`.`OneToMany_Required_Self_Inverse2Id`, `l15`.`OneToOne_Optional_PK_Inverse2Id`, `l15`.`OneToOne_Optional_Self2Id` - FROM `LevelTwo` AS `l15` - WHERE `l15`.`Id` <> 42 -) AS `t1` ON `t`.`Id2` = `t1`.`OneToMany_Optional_Self_Inverse2Id` -WHERE (`l11`.`Name` <> 'Foo' OR `l11`.`Name` IS NULL) AND (`l2`.`Id` IS NOT NULL AND `t`.`Id2` IS NOT NULL AND `t`.`Id2` IS NOT NULL AND `t1`.`OneToMany_Optional_Self_Inverse2Id` IS NOT NULL) -ORDER BY `l12`.`Id`, `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `l2`.`Id`, `t`.`Id`, `t`.`Id0`, `t`.`Id1`, `t`.`Id2`, `t0`.`Id`, `t0`.`Id0`, `t0`.`Id1`, `t0`.`Id2`, `l11`.`Id`, `l13`.`Id`, `l14`.`Id` + SELECT `l17`.`Id`, `l17`.`Date`, `l17`.`Level1_Optional_Id`, `l17`.`Level1_Required_Id`, `l17`.`Name`, `l17`.`OneToMany_Optional_Inverse2Id`, `l17`.`OneToMany_Optional_Self_Inverse2Id`, `l17`.`OneToMany_Required_Inverse2Id`, `l17`.`OneToMany_Required_Self_Inverse2Id`, `l17`.`OneToOne_Optional_PK_Inverse2Id`, `l17`.`OneToOne_Optional_Self2Id` + FROM `LevelTwo` AS `l17` + WHERE `l17`.`Id` <> 42 +) AS `l18` ON `s`.`Id2` = `l18`.`OneToMany_Optional_Self_Inverse2Id` +WHERE (`l11`.`Name` <> 'Foo' OR `l11`.`Name` IS NULL) AND (`l2`.`Id` IS NOT NULL AND `s`.`Id2` IS NOT NULL AND `s`.`Id2` IS NOT NULL AND `l18`.`OneToMany_Optional_Self_Inverse2Id` IS NOT NULL) +ORDER BY `l12`.`Id`, `l`.`Id`, `l0`.`Id`, `l1`.`Id`, `l2`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2`, `s0`.`Id`, `s0`.`Id0`, `s0`.`Id1`, `s0`.`Id2`, `l11`.`Id`, `l13`.`Id`, `l14`.`Id` """); } @@ -1737,44 +1737,44 @@ await base .Multi_level_include_correct_PK_is_chosen_as_the_join_predicate_for_queries_that_join_same_table_multiple_times(async); AssertSql( -""" + """ SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` FROM `LevelOne` AS `l` ORDER BY `l`.`Id` """, - // - """ + // + """ SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l`.`Id` FROM `LevelOne` AS `l` INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id` ORDER BY `l`.`Id`, `l0`.`Id` """, - // - """ -SELECT `t`.`Id`, `t`.`Level2_Optional_Id`, `t`.`Level2_Required_Id`, `t`.`Name`, `t`.`OneToMany_Optional_Inverse3Id`, `t`.`OneToMany_Optional_Self_Inverse3Id`, `t`.`OneToMany_Required_Inverse3Id`, `t`.`OneToMany_Required_Self_Inverse3Id`, `t`.`OneToOne_Optional_PK_Inverse3Id`, `t`.`OneToOne_Optional_Self3Id`, `t`.`Id0`, `t`.`Date`, `t`.`Level1_Optional_Id`, `t`.`Level1_Required_Id`, `t`.`Name0`, `t`.`OneToMany_Optional_Inverse2Id`, `t`.`OneToMany_Optional_Self_Inverse2Id`, `t`.`OneToMany_Required_Inverse2Id`, `t`.`OneToMany_Required_Self_Inverse2Id`, `t`.`OneToOne_Optional_PK_Inverse2Id`, `t`.`OneToOne_Optional_Self2Id`, `l`.`Id`, `l0`.`Id` + // + """ +SELECT `s`.`Id`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `s`.`Id0`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `l`.`Id`, `l0`.`Id` FROM (`LevelOne` AS `l` INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id`) LEFT JOIN ( SELECT `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l2`.`Id` AS `Id0`, `l2`.`Date`, `l2`.`Level1_Optional_Id`, `l2`.`Level1_Required_Id`, `l2`.`Name` AS `Name0`, `l2`.`OneToMany_Optional_Inverse2Id`, `l2`.`OneToMany_Optional_Self_Inverse2Id`, `l2`.`OneToMany_Required_Inverse2Id`, `l2`.`OneToMany_Required_Self_Inverse2Id`, `l2`.`OneToOne_Optional_PK_Inverse2Id`, `l2`.`OneToOne_Optional_Self2Id` FROM `LevelThree` AS `l1` INNER JOIN `LevelTwo` AS `l2` ON `l1`.`OneToMany_Required_Inverse3Id` = `l2`.`Id` -) AS `t` ON `l0`.`Id` = `t`.`OneToMany_Optional_Inverse3Id` -WHERE `l0`.`Id` IS NOT NULL AND `t`.`OneToMany_Optional_Inverse3Id` IS NOT NULL -ORDER BY `l`.`Id`, `l0`.`Id`, `t`.`Id`, `t`.`Id0` +) AS `s` ON `l0`.`Id` = `s`.`OneToMany_Optional_Inverse3Id` +WHERE `l0`.`Id` IS NOT NULL AND `s`.`OneToMany_Optional_Inverse3Id` IS NOT NULL +ORDER BY `l`.`Id`, `l0`.`Id`, `s`.`Id`, `s`.`Id0` """, - // - """ -SELECT `l3`.`Id`, `l3`.`Level2_Optional_Id`, `l3`.`Level2_Required_Id`, `l3`.`Name`, `l3`.`OneToMany_Optional_Inverse3Id`, `l3`.`OneToMany_Optional_Self_Inverse3Id`, `l3`.`OneToMany_Required_Inverse3Id`, `l3`.`OneToMany_Required_Self_Inverse3Id`, `l3`.`OneToOne_Optional_PK_Inverse3Id`, `l3`.`OneToOne_Optional_Self3Id`, `l`.`Id`, `l0`.`Id`, `t`.`Id`, `t`.`Id0` + // + """ +SELECT `l3`.`Id`, `l3`.`Level2_Optional_Id`, `l3`.`Level2_Required_Id`, `l3`.`Name`, `l3`.`OneToMany_Optional_Inverse3Id`, `l3`.`OneToMany_Optional_Self_Inverse3Id`, `l3`.`OneToMany_Required_Inverse3Id`, `l3`.`OneToMany_Required_Self_Inverse3Id`, `l3`.`OneToOne_Optional_PK_Inverse3Id`, `l3`.`OneToOne_Optional_Self3Id`, `l`.`Id`, `l0`.`Id`, `s`.`Id`, `s`.`Id0` FROM ((`LevelOne` AS `l` INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id`) LEFT JOIN ( SELECT `l1`.`Id`, `l1`.`OneToMany_Optional_Inverse3Id`, `l2`.`Id` AS `Id0` FROM `LevelThree` AS `l1` INNER JOIN `LevelTwo` AS `l2` ON `l1`.`OneToMany_Required_Inverse3Id` = `l2`.`Id` -) AS `t` ON `l0`.`Id` = `t`.`OneToMany_Optional_Inverse3Id`) -LEFT JOIN `LevelThree` AS `l3` ON `t`.`Id0` = `l3`.`OneToMany_Optional_Inverse3Id` -WHERE `l0`.`Id` IS NOT NULL AND `t`.`OneToMany_Optional_Inverse3Id` IS NOT NULL AND `t`.`Id0` IS NOT NULL AND `l3`.`OneToMany_Optional_Inverse3Id` IS NOT NULL -ORDER BY `l`.`Id`, `l0`.`Id`, `t`.`Id`, `t`.`Id0` +) AS `s` ON `l0`.`Id` = `s`.`OneToMany_Optional_Inverse3Id`) +LEFT JOIN `LevelThree` AS `l3` ON `s`.`Id0` = `l3`.`OneToMany_Optional_Inverse3Id` +WHERE `l0`.`Id` IS NOT NULL AND `s`.`OneToMany_Optional_Inverse3Id` IS NOT NULL AND `s`.`Id0` IS NOT NULL AND `l3`.`OneToMany_Optional_Inverse3Id` IS NOT NULL +ORDER BY `l`.`Id`, `l0`.`Id`, `s`.`Id`, `s`.`Id0` """); } @@ -1783,14 +1783,14 @@ public override async Task Multiple_complex_includes(bool async) await base.Multiple_complex_includes(async); AssertSql( -""" + """ SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` FROM `LevelOne` AS `l` LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` ORDER BY `l`.`Id`, `l0`.`Id` """, - // - """ + // + """ SELECT `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l`.`Id`, `l0`.`Id` FROM (`LevelOne` AS `l` LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) @@ -1798,16 +1798,16 @@ public override async Task Multiple_complex_includes(bool async) WHERE `l0`.`Id` IS NOT NULL AND `l1`.`OneToMany_Optional_Inverse3Id` IS NOT NULL ORDER BY `l`.`Id`, `l0`.`Id` """, - // - """ -SELECT `t`.`Id`, `t`.`Date`, `t`.`Level1_Optional_Id`, `t`.`Level1_Required_Id`, `t`.`Name`, `t`.`OneToMany_Optional_Inverse2Id`, `t`.`OneToMany_Optional_Self_Inverse2Id`, `t`.`OneToMany_Required_Inverse2Id`, `t`.`OneToMany_Required_Self_Inverse2Id`, `t`.`OneToOne_Optional_PK_Inverse2Id`, `t`.`OneToOne_Optional_Self2Id`, `t`.`Id0`, `t`.`Level2_Optional_Id`, `t`.`Level2_Required_Id`, `t`.`Name0`, `t`.`OneToMany_Optional_Inverse3Id`, `t`.`OneToMany_Optional_Self_Inverse3Id`, `t`.`OneToMany_Required_Inverse3Id`, `t`.`OneToMany_Required_Self_Inverse3Id`, `t`.`OneToOne_Optional_PK_Inverse3Id`, `t`.`OneToOne_Optional_Self3Id`, `l`.`Id`, `l0`.`Id` + // + """ +SELECT `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `l`.`Id`, `l0`.`Id` FROM (`LevelOne` AS `l` LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) INNER JOIN ( - SELECT `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id`, `l2`.`Id` AS `Id0`, `l2`.`Level2_Optional_Id`, `l2`.`Level2_Required_Id`, `l2`.`Name` AS `Name0`, `l2`.`OneToMany_Optional_Inverse3Id`, `l2`.`OneToMany_Optional_Self_Inverse3Id`, `l2`.`OneToMany_Required_Inverse3Id`, `l2`.`OneToMany_Required_Self_Inverse3Id`, `l2`.`OneToOne_Optional_PK_Inverse3Id`, `l2`.`OneToOne_Optional_Self3Id` - FROM `LevelTwo` AS `l1` - LEFT JOIN `LevelThree` AS `l2` ON `l1`.`Id` = `l2`.`Level2_Optional_Id` -) AS `t` ON `l`.`Id` = `t`.`OneToMany_Optional_Inverse2Id` + SELECT `l2`.`Id`, `l2`.`Date`, `l2`.`Level1_Optional_Id`, `l2`.`Level1_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse2Id`, `l2`.`OneToMany_Optional_Self_Inverse2Id`, `l2`.`OneToMany_Required_Inverse2Id`, `l2`.`OneToMany_Required_Self_Inverse2Id`, `l2`.`OneToOne_Optional_PK_Inverse2Id`, `l2`.`OneToOne_Optional_Self2Id`, `l3`.`Id` AS `Id0`, `l3`.`Level2_Optional_Id`, `l3`.`Level2_Required_Id`, `l3`.`Name` AS `Name0`, `l3`.`OneToMany_Optional_Inverse3Id`, `l3`.`OneToMany_Optional_Self_Inverse3Id`, `l3`.`OneToMany_Required_Inverse3Id`, `l3`.`OneToMany_Required_Self_Inverse3Id`, `l3`.`OneToOne_Optional_PK_Inverse3Id`, `l3`.`OneToOne_Optional_Self3Id` + FROM `LevelTwo` AS `l2` + LEFT JOIN `LevelThree` AS `l3` ON `l2`.`Id` = `l3`.`Level2_Optional_Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` ORDER BY `l`.`Id`, `l0`.`Id` """); } @@ -1817,14 +1817,14 @@ public override async Task Multiple_complex_includes_self_ref(bool async) await base.Multiple_complex_includes_self_ref(async); AssertSql( -""" + """ SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Name`, `l0`.`OneToMany_Optional_Self_Inverse1Id`, `l0`.`OneToMany_Required_Self_Inverse1Id`, `l0`.`OneToOne_Optional_Self1Id` FROM `LevelOne` AS `l` LEFT JOIN `LevelOne` AS `l0` ON `l`.`OneToOne_Optional_Self1Id` = `l0`.`Id` ORDER BY `l`.`Id`, `l0`.`Id` """, - // - """ + // + """ SELECT `l1`.`Id`, `l1`.`Date`, `l1`.`Name`, `l1`.`OneToMany_Optional_Self_Inverse1Id`, `l1`.`OneToMany_Required_Self_Inverse1Id`, `l1`.`OneToOne_Optional_Self1Id`, `l`.`Id`, `l0`.`Id` FROM (`LevelOne` AS `l` LEFT JOIN `LevelOne` AS `l0` ON `l`.`OneToOne_Optional_Self1Id` = `l0`.`Id`) @@ -1832,16 +1832,16 @@ public override async Task Multiple_complex_includes_self_ref(bool async) WHERE `l0`.`Id` IS NOT NULL AND `l1`.`OneToMany_Optional_Self_Inverse1Id` IS NOT NULL ORDER BY `l`.`Id`, `l0`.`Id` """, - // - """ -SELECT `t`.`Id`, `t`.`Date`, `t`.`Name`, `t`.`OneToMany_Optional_Self_Inverse1Id`, `t`.`OneToMany_Required_Self_Inverse1Id`, `t`.`OneToOne_Optional_Self1Id`, `t`.`Id0`, `t`.`Date0`, `t`.`Name0`, `t`.`OneToMany_Optional_Self_Inverse1Id0`, `t`.`OneToMany_Required_Self_Inverse1Id0`, `t`.`OneToOne_Optional_Self1Id0`, `l`.`Id`, `l0`.`Id` + // + """ +SELECT `s`.`Id`, `s`.`Date`, `s`.`Name`, `s`.`OneToMany_Optional_Self_Inverse1Id`, `s`.`OneToMany_Required_Self_Inverse1Id`, `s`.`OneToOne_Optional_Self1Id`, `s`.`Id0`, `s`.`Date0`, `s`.`Name0`, `s`.`OneToMany_Optional_Self_Inverse1Id0`, `s`.`OneToMany_Required_Self_Inverse1Id0`, `s`.`OneToOne_Optional_Self1Id0`, `l`.`Id`, `l0`.`Id` FROM (`LevelOne` AS `l` LEFT JOIN `LevelOne` AS `l0` ON `l`.`OneToOne_Optional_Self1Id` = `l0`.`Id`) INNER JOIN ( - SELECT `l1`.`Id`, `l1`.`Date`, `l1`.`Name`, `l1`.`OneToMany_Optional_Self_Inverse1Id`, `l1`.`OneToMany_Required_Self_Inverse1Id`, `l1`.`OneToOne_Optional_Self1Id`, `l2`.`Id` AS `Id0`, `l2`.`Date` AS `Date0`, `l2`.`Name` AS `Name0`, `l2`.`OneToMany_Optional_Self_Inverse1Id` AS `OneToMany_Optional_Self_Inverse1Id0`, `l2`.`OneToMany_Required_Self_Inverse1Id` AS `OneToMany_Required_Self_Inverse1Id0`, `l2`.`OneToOne_Optional_Self1Id` AS `OneToOne_Optional_Self1Id0` - FROM `LevelOne` AS `l1` - LEFT JOIN `LevelOne` AS `l2` ON `l1`.`OneToOne_Optional_Self1Id` = `l2`.`Id` -) AS `t` ON `l`.`Id` = `t`.`OneToMany_Optional_Self_Inverse1Id` + SELECT `l2`.`Id`, `l2`.`Date`, `l2`.`Name`, `l2`.`OneToMany_Optional_Self_Inverse1Id`, `l2`.`OneToMany_Required_Self_Inverse1Id`, `l2`.`OneToOne_Optional_Self1Id`, `l3`.`Id` AS `Id0`, `l3`.`Date` AS `Date0`, `l3`.`Name` AS `Name0`, `l3`.`OneToMany_Optional_Self_Inverse1Id` AS `OneToMany_Optional_Self_Inverse1Id0`, `l3`.`OneToMany_Required_Self_Inverse1Id` AS `OneToMany_Required_Self_Inverse1Id0`, `l3`.`OneToOne_Optional_Self1Id` AS `OneToOne_Optional_Self1Id0` + FROM `LevelOne` AS `l2` + LEFT JOIN `LevelOne` AS `l3` ON `l2`.`OneToOne_Optional_Self1Id` = `l3`.`Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Self_Inverse1Id` ORDER BY `l`.`Id`, `l0`.`Id` """); } @@ -1902,13 +1902,13 @@ ORDER BY `l`.`Id` """, // """ -SELECT `t`.`Id`, `t`.`Date`, `t`.`Level1_Optional_Id`, `t`.`Level1_Required_Id`, `t`.`Name`, `t`.`OneToMany_Optional_Inverse2Id`, `t`.`OneToMany_Optional_Self_Inverse2Id`, `t`.`OneToMany_Required_Inverse2Id`, `t`.`OneToMany_Required_Self_Inverse2Id`, `t`.`OneToOne_Optional_PK_Inverse2Id`, `t`.`OneToOne_Optional_Self2Id`, `t`.`Id0`, `t`.`Level2_Optional_Id`, `t`.`Level2_Required_Id`, `t`.`Name0`, `t`.`OneToMany_Optional_Inverse3Id`, `t`.`OneToMany_Optional_Self_Inverse3Id`, `t`.`OneToMany_Required_Inverse3Id`, `t`.`OneToMany_Required_Self_Inverse3Id`, `t`.`OneToOne_Optional_PK_Inverse3Id`, `t`.`OneToOne_Optional_Self3Id`, `l`.`Id` +SELECT `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `l`.`Id` FROM `LevelOne` AS `l` INNER JOIN ( SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id` AS `Id0`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name` AS `Name0`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` FROM `LevelTwo` AS `l0` LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Optional_Id` -) AS `t` ON `l`.`Id` = `t`.`OneToMany_Optional_Inverse2Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` ORDER BY `l`.`Id` """); } @@ -1937,14 +1937,14 @@ public override async Task Multiple_complex_include_select(bool async) await base.Multiple_complex_include_select(async); AssertSql( -""" + """ SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` FROM `LevelOne` AS `l` LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` ORDER BY `l`.`Id`, `l0`.`Id` """, - // - """ + // + """ SELECT `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l`.`Id`, `l0`.`Id` FROM (`LevelOne` AS `l` LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) @@ -1952,16 +1952,16 @@ public override async Task Multiple_complex_include_select(bool async) WHERE `l0`.`Id` IS NOT NULL AND `l1`.`OneToMany_Optional_Inverse3Id` IS NOT NULL ORDER BY `l`.`Id`, `l0`.`Id` """, - // - """ -SELECT `t`.`Id`, `t`.`Date`, `t`.`Level1_Optional_Id`, `t`.`Level1_Required_Id`, `t`.`Name`, `t`.`OneToMany_Optional_Inverse2Id`, `t`.`OneToMany_Optional_Self_Inverse2Id`, `t`.`OneToMany_Required_Inverse2Id`, `t`.`OneToMany_Required_Self_Inverse2Id`, `t`.`OneToOne_Optional_PK_Inverse2Id`, `t`.`OneToOne_Optional_Self2Id`, `t`.`Id0`, `t`.`Level2_Optional_Id`, `t`.`Level2_Required_Id`, `t`.`Name0`, `t`.`OneToMany_Optional_Inverse3Id`, `t`.`OneToMany_Optional_Self_Inverse3Id`, `t`.`OneToMany_Required_Inverse3Id`, `t`.`OneToMany_Required_Self_Inverse3Id`, `t`.`OneToOne_Optional_PK_Inverse3Id`, `t`.`OneToOne_Optional_Self3Id`, `l`.`Id`, `l0`.`Id` + // + """ +SELECT `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `l`.`Id`, `l0`.`Id` FROM (`LevelOne` AS `l` LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) INNER JOIN ( - SELECT `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id`, `l2`.`Id` AS `Id0`, `l2`.`Level2_Optional_Id`, `l2`.`Level2_Required_Id`, `l2`.`Name` AS `Name0`, `l2`.`OneToMany_Optional_Inverse3Id`, `l2`.`OneToMany_Optional_Self_Inverse3Id`, `l2`.`OneToMany_Required_Inverse3Id`, `l2`.`OneToMany_Required_Self_Inverse3Id`, `l2`.`OneToOne_Optional_PK_Inverse3Id`, `l2`.`OneToOne_Optional_Self3Id` - FROM `LevelTwo` AS `l1` - LEFT JOIN `LevelThree` AS `l2` ON `l1`.`Id` = `l2`.`Level2_Optional_Id` -) AS `t` ON `l`.`Id` = `t`.`OneToMany_Optional_Inverse2Id` + SELECT `l2`.`Id`, `l2`.`Date`, `l2`.`Level1_Optional_Id`, `l2`.`Level1_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse2Id`, `l2`.`OneToMany_Optional_Self_Inverse2Id`, `l2`.`OneToMany_Required_Inverse2Id`, `l2`.`OneToMany_Required_Self_Inverse2Id`, `l2`.`OneToOne_Optional_PK_Inverse2Id`, `l2`.`OneToOne_Optional_Self2Id`, `l3`.`Id` AS `Id0`, `l3`.`Level2_Optional_Id`, `l3`.`Level2_Required_Id`, `l3`.`Name` AS `Name0`, `l3`.`OneToMany_Optional_Inverse3Id`, `l3`.`OneToMany_Optional_Self_Inverse3Id`, `l3`.`OneToMany_Required_Inverse3Id`, `l3`.`OneToMany_Required_Self_Inverse3Id`, `l3`.`OneToOne_Optional_PK_Inverse3Id`, `l3`.`OneToOne_Optional_Self3Id` + FROM `LevelTwo` AS `l2` + LEFT JOIN `LevelThree` AS `l3` ON `l2`.`Id` = `l3`.`Level2_Optional_Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` ORDER BY `l`.`Id`, `l0`.`Id` """); } @@ -1971,7 +1971,7 @@ public override async Task Include_nested_with_optional_navigation(bool async) await base.Include_nested_with_optional_navigation(async); AssertSql( -""" + """ SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` FROM `LevelOne` AS `l` LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` @@ -1979,16 +1979,16 @@ public override async Task Include_nested_with_optional_navigation(bool async) ORDER BY `l`.`Id`, `l0`.`Id` """, // -""" -SELECT `t`.`Id`, `t`.`Level2_Optional_Id`, `t`.`Level2_Required_Id`, `t`.`Name`, `t`.`OneToMany_Optional_Inverse3Id`, `t`.`OneToMany_Optional_Self_Inverse3Id`, `t`.`OneToMany_Required_Inverse3Id`, `t`.`OneToMany_Required_Self_Inverse3Id`, `t`.`OneToOne_Optional_PK_Inverse3Id`, `t`.`OneToOne_Optional_Self3Id`, `t`.`Id0`, `t`.`Level3_Optional_Id`, `t`.`Level3_Required_Id`, `t`.`Name0`, `t`.`OneToMany_Optional_Inverse4Id`, `t`.`OneToMany_Optional_Self_Inverse4Id`, `t`.`OneToMany_Required_Inverse4Id`, `t`.`OneToMany_Required_Self_Inverse4Id`, `t`.`OneToOne_Optional_PK_Inverse4Id`, `t`.`OneToOne_Optional_Self4Id`, `l`.`Id`, `l0`.`Id` + """ +SELECT `s`.`Id`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `s`.`Id0`, `s`.`Level3_Optional_Id`, `s`.`Level3_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse4Id`, `s`.`OneToMany_Optional_Self_Inverse4Id`, `s`.`OneToMany_Required_Inverse4Id`, `s`.`OneToMany_Required_Self_Inverse4Id`, `s`.`OneToOne_Optional_PK_Inverse4Id`, `s`.`OneToOne_Optional_Self4Id`, `l`.`Id`, `l0`.`Id` FROM (`LevelOne` AS `l` LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) LEFT JOIN ( SELECT `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l2`.`Id` AS `Id0`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name` AS `Name0`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id` FROM `LevelThree` AS `l1` LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`Level3_Required_Id` -) AS `t` ON `l0`.`Id` = `t`.`OneToMany_Required_Inverse3Id` -WHERE (`l0`.`Name` <> 'L2 09' OR `l0`.`Name` IS NULL) AND (`l0`.`Id` IS NOT NULL AND `t`.`OneToMany_Required_Inverse3Id` IS NOT NULL) +) AS `s` ON `l0`.`Id` = `s`.`OneToMany_Required_Inverse3Id` +WHERE (`l0`.`Name` <> 'L2 09' OR `l0`.`Name` IS NULL) AND (`l0`.`Id` IS NOT NULL AND `s`.`OneToMany_Required_Inverse3Id` IS NOT NULL) ORDER BY `l`.`Id`, `l0`.`Id` """); } @@ -1998,53 +1998,53 @@ public override async Task Complex_multi_include_with_order_by_and_paging(bool a await base.Complex_multi_include_with_order_by_and_paging(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`Date`, `t`.`Name`, `t`.`OneToMany_Optional_Self_Inverse1Id`, `t`.`OneToMany_Required_Self_Inverse1Id`, `t`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` + """ +SELECT `l1`.`Id`, `l1`.`Date`, `l1`.`Name`, `l1`.`OneToMany_Optional_Self_Inverse1Id`, `l1`.`OneToMany_Required_Self_Inverse1Id`, `l1`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` FROM ( - SELECT TOP 10 `t0`.`Id`, `t0`.`Date`, `t0`.`Name`, `t0`.`OneToMany_Optional_Self_Inverse1Id`, `t0`.`OneToMany_Required_Self_Inverse1Id`, `t0`.`OneToOne_Optional_Self1Id` + SELECT TOP 10 `l2`.`Id`, `l2`.`Date`, `l2`.`Name`, `l2`.`OneToMany_Optional_Self_Inverse1Id`, `l2`.`OneToMany_Required_Self_Inverse1Id`, `l2`.`OneToOne_Optional_Self1Id` FROM ( SELECT TOP 10 `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` FROM `LevelOne` AS `l` ORDER BY `l`.`Name` - ) AS `t0` - ORDER BY `t0`.`Name` DESC -) AS `t` -LEFT JOIN `LevelTwo` AS `l0` ON `t`.`Id` = `l0`.`Level1_Required_Id` -ORDER BY `t`.`Name`, `t`.`Id`, `l0`.`Id` + ) AS `l2` + ORDER BY `l2`.`Name` DESC +) AS `l1` +LEFT JOIN `LevelTwo` AS `l0` ON `l1`.`Id` = `l0`.`Level1_Required_Id` +ORDER BY `l1`.`Name`, `l1`.`Id`, `l0`.`Id` """, // -""" -SELECT `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `t`.`Id`, `l0`.`Id` + """ +SELECT `l2`.`Id`, `l2`.`Level2_Optional_Id`, `l2`.`Level2_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse3Id`, `l2`.`OneToMany_Optional_Self_Inverse3Id`, `l2`.`OneToMany_Required_Inverse3Id`, `l2`.`OneToMany_Required_Self_Inverse3Id`, `l2`.`OneToOne_Optional_PK_Inverse3Id`, `l2`.`OneToOne_Optional_Self3Id`, `l1`.`Id`, `l0`.`Id` FROM (( - SELECT TOP 10 `t0`.`Id`, `t0`.`Name` + SELECT TOP 10 `l4`.`Id`, `l4`.`Name` FROM ( SELECT TOP 10 `l`.`Id`, `l`.`Name` FROM `LevelOne` AS `l` ORDER BY `l`.`Name` - ) AS `t0` - ORDER BY `t0`.`Name` DESC -) AS `t` -LEFT JOIN `LevelTwo` AS `l0` ON `t`.`Id` = `l0`.`Level1_Required_Id`) -LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Optional_Inverse3Id` -WHERE `l0`.`Id` IS NOT NULL AND `l1`.`OneToMany_Optional_Inverse3Id` IS NOT NULL -ORDER BY `t`.`Name`, `t`.`Id`, `l0`.`Id` + ) AS `l4` + ORDER BY `l4`.`Name` DESC +) AS `l1` +LEFT JOIN `LevelTwo` AS `l0` ON `l1`.`Id` = `l0`.`Level1_Required_Id`) +LEFT JOIN `LevelThree` AS `l2` ON `l0`.`Id` = `l2`.`OneToMany_Optional_Inverse3Id` +WHERE `l0`.`Id` IS NOT NULL AND `l2`.`OneToMany_Optional_Inverse3Id` IS NOT NULL +ORDER BY `l1`.`Name`, `l1`.`Id`, `l0`.`Id` """, // -""" -SELECT `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `t`.`Id`, `l0`.`Id` + """ +SELECT `l3`.`Id`, `l3`.`Level2_Optional_Id`, `l3`.`Level2_Required_Id`, `l3`.`Name`, `l3`.`OneToMany_Optional_Inverse3Id`, `l3`.`OneToMany_Optional_Self_Inverse3Id`, `l3`.`OneToMany_Required_Inverse3Id`, `l3`.`OneToMany_Required_Self_Inverse3Id`, `l3`.`OneToOne_Optional_PK_Inverse3Id`, `l3`.`OneToOne_Optional_Self3Id`, `l1`.`Id`, `l0`.`Id` FROM (( - SELECT TOP 10 `t0`.`Id`, `t0`.`Name` + SELECT TOP 10 `l4`.`Id`, `l4`.`Name` FROM ( SELECT TOP 10 `l`.`Id`, `l`.`Name` FROM `LevelOne` AS `l` ORDER BY `l`.`Name` - ) AS `t0` - ORDER BY `t0`.`Name` DESC -) AS `t` -LEFT JOIN `LevelTwo` AS `l0` ON `t`.`Id` = `l0`.`Level1_Required_Id`) -LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToMany_Required_Inverse3Id` -WHERE `l0`.`Id` IS NOT NULL AND `l1`.`OneToMany_Required_Inverse3Id` IS NOT NULL -ORDER BY `t`.`Name`, `t`.`Id`, `l0`.`Id` + ) AS `l4` + ORDER BY `l4`.`Name` DESC +) AS `l1` +LEFT JOIN `LevelTwo` AS `l0` ON `l1`.`Id` = `l0`.`Level1_Required_Id`) +LEFT JOIN `LevelThree` AS `l3` ON `l0`.`Id` = `l3`.`OneToMany_Required_Inverse3Id` +WHERE `l0`.`Id` IS NOT NULL AND `l3`.`OneToMany_Required_Inverse3Id` IS NOT NULL +ORDER BY `l1`.`Name`, `l1`.`Id`, `l0`.`Id` """); } @@ -2053,56 +2053,56 @@ public override async Task Complex_multi_include_with_order_by_and_paging_joins_ await base.Complex_multi_include_with_order_by_and_paging_joins_on_correct_key(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`Date`, `t`.`Name`, `t`.`OneToMany_Optional_Self_Inverse1Id`, `t`.`OneToMany_Required_Self_Inverse1Id`, `t`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id` + """ +SELECT `l1`.`Id`, `l1`.`Date`, `l1`.`Name`, `l1`.`OneToMany_Optional_Self_Inverse1Id`, `l1`.`OneToMany_Required_Self_Inverse1Id`, `l1`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l2`.`Id`, `l2`.`Date`, `l2`.`Level1_Optional_Id`, `l2`.`Level1_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse2Id`, `l2`.`OneToMany_Optional_Self_Inverse2Id`, `l2`.`OneToMany_Required_Inverse2Id`, `l2`.`OneToMany_Required_Self_Inverse2Id`, `l2`.`OneToOne_Optional_PK_Inverse2Id`, `l2`.`OneToOne_Optional_Self2Id` FROM (( - SELECT TOP 10 `t0`.`Id`, `t0`.`Date`, `t0`.`Name`, `t0`.`OneToMany_Optional_Self_Inverse1Id`, `t0`.`OneToMany_Required_Self_Inverse1Id`, `t0`.`OneToOne_Optional_Self1Id` + SELECT TOP 10 `l3`.`Id`, `l3`.`Date`, `l3`.`Name`, `l3`.`OneToMany_Optional_Self_Inverse1Id`, `l3`.`OneToMany_Required_Self_Inverse1Id`, `l3`.`OneToOne_Optional_Self1Id` FROM ( SELECT TOP 10 `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` FROM `LevelOne` AS `l` ORDER BY `l`.`Name` - ) AS `t0` - ORDER BY `t0`.`Name` DESC -) AS `t` -LEFT JOIN `LevelTwo` AS `l0` ON `t`.`Id` = `l0`.`Level1_Optional_Id`) -LEFT JOIN `LevelTwo` AS `l1` ON `t`.`Id` = `l1`.`Level1_Required_Id` -ORDER BY `t`.`Name`, `t`.`Id`, `l0`.`Id`, `l1`.`Id` + ) AS `l3` + ORDER BY `l3`.`Name` DESC +) AS `l1` +LEFT JOIN `LevelTwo` AS `l0` ON `l1`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelTwo` AS `l2` ON `l1`.`Id` = `l2`.`Level1_Required_Id` +ORDER BY `l1`.`Name`, `l1`.`Id`, `l0`.`Id`, `l2`.`Id` """, // -""" -SELECT `l2`.`Id`, `l2`.`Level2_Optional_Id`, `l2`.`Level2_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse3Id`, `l2`.`OneToMany_Optional_Self_Inverse3Id`, `l2`.`OneToMany_Required_Inverse3Id`, `l2`.`OneToMany_Required_Self_Inverse3Id`, `l2`.`OneToOne_Optional_PK_Inverse3Id`, `l2`.`OneToOne_Optional_Self3Id`, `t`.`Id`, `l0`.`Id`, `l1`.`Id` + """ +SELECT `l3`.`Id`, `l3`.`Level2_Optional_Id`, `l3`.`Level2_Required_Id`, `l3`.`Name`, `l3`.`OneToMany_Optional_Inverse3Id`, `l3`.`OneToMany_Optional_Self_Inverse3Id`, `l3`.`OneToMany_Required_Inverse3Id`, `l3`.`OneToMany_Required_Self_Inverse3Id`, `l3`.`OneToOne_Optional_PK_Inverse3Id`, `l3`.`OneToOne_Optional_Self3Id`, `l1`.`Id`, `l0`.`Id`, `l2`.`Id` FROM ((( - SELECT TOP 10 `t0`.`Id`, `t0`.`Name` + SELECT TOP 10 `l5`.`Id`, `l5`.`Name` FROM ( SELECT TOP 10 `l`.`Id`, `l`.`Name` FROM `LevelOne` AS `l` ORDER BY `l`.`Name` - ) AS `t0` - ORDER BY `t0`.`Name` DESC -) AS `t` -LEFT JOIN `LevelTwo` AS `l0` ON `t`.`Id` = `l0`.`Level1_Optional_Id`) -LEFT JOIN `LevelTwo` AS `l1` ON `t`.`Id` = `l1`.`Level1_Required_Id`) -LEFT JOIN `LevelThree` AS `l2` ON `l0`.`Id` = `l2`.`OneToMany_Optional_Inverse3Id` -WHERE `l0`.`Id` IS NOT NULL AND `l2`.`OneToMany_Optional_Inverse3Id` IS NOT NULL -ORDER BY `t`.`Name`, `t`.`Id`, `l0`.`Id`, `l1`.`Id` + ) AS `l5` + ORDER BY `l5`.`Name` DESC +) AS `l1` +LEFT JOIN `LevelTwo` AS `l0` ON `l1`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelTwo` AS `l2` ON `l1`.`Id` = `l2`.`Level1_Required_Id`) +LEFT JOIN `LevelThree` AS `l3` ON `l0`.`Id` = `l3`.`OneToMany_Optional_Inverse3Id` +WHERE `l0`.`Id` IS NOT NULL AND `l3`.`OneToMany_Optional_Inverse3Id` IS NOT NULL +ORDER BY `l1`.`Name`, `l1`.`Id`, `l0`.`Id`, `l2`.`Id` """, // -""" -SELECT `l2`.`Id`, `l2`.`Level2_Optional_Id`, `l2`.`Level2_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse3Id`, `l2`.`OneToMany_Optional_Self_Inverse3Id`, `l2`.`OneToMany_Required_Inverse3Id`, `l2`.`OneToMany_Required_Self_Inverse3Id`, `l2`.`OneToOne_Optional_PK_Inverse3Id`, `l2`.`OneToOne_Optional_Self3Id`, `t`.`Id`, `l0`.`Id`, `l1`.`Id` + """ +SELECT `l4`.`Id`, `l4`.`Level2_Optional_Id`, `l4`.`Level2_Required_Id`, `l4`.`Name`, `l4`.`OneToMany_Optional_Inverse3Id`, `l4`.`OneToMany_Optional_Self_Inverse3Id`, `l4`.`OneToMany_Required_Inverse3Id`, `l4`.`OneToMany_Required_Self_Inverse3Id`, `l4`.`OneToOne_Optional_PK_Inverse3Id`, `l4`.`OneToOne_Optional_Self3Id`, `l1`.`Id`, `l0`.`Id`, `l2`.`Id` FROM ((( - SELECT TOP 10 `t0`.`Id`, `t0`.`Name` + SELECT TOP 10 `l5`.`Id`, `l5`.`Name` FROM ( SELECT TOP 10 `l`.`Id`, `l`.`Name` FROM `LevelOne` AS `l` ORDER BY `l`.`Name` - ) AS `t0` - ORDER BY `t0`.`Name` DESC -) AS `t` -LEFT JOIN `LevelTwo` AS `l0` ON `t`.`Id` = `l0`.`Level1_Optional_Id`) -LEFT JOIN `LevelTwo` AS `l1` ON `t`.`Id` = `l1`.`Level1_Required_Id`) -LEFT JOIN `LevelThree` AS `l2` ON `l1`.`Id` = `l2`.`OneToMany_Required_Inverse3Id` -WHERE `l1`.`Id` IS NOT NULL AND `l2`.`OneToMany_Required_Inverse3Id` IS NOT NULL -ORDER BY `t`.`Name`, `t`.`Id`, `l0`.`Id`, `l1`.`Id` + ) AS `l5` + ORDER BY `l5`.`Name` DESC +) AS `l1` +LEFT JOIN `LevelTwo` AS `l0` ON `l1`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelTwo` AS `l2` ON `l1`.`Id` = `l2`.`Level1_Required_Id`) +LEFT JOIN `LevelThree` AS `l4` ON `l2`.`Id` = `l4`.`OneToMany_Required_Inverse3Id` +WHERE `l2`.`Id` IS NOT NULL AND `l4`.`OneToMany_Required_Inverse3Id` IS NOT NULL +ORDER BY `l1`.`Name`, `l1`.`Id`, `l0`.`Id`, `l2`.`Id` """); } @@ -2111,38 +2111,38 @@ public override async Task Complex_multi_include_with_order_by_and_paging_joins_ await base.Complex_multi_include_with_order_by_and_paging_joins_on_correct_key2(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`Date`, `t`.`Name`, `t`.`OneToMany_Optional_Self_Inverse1Id`, `t`.`OneToMany_Required_Self_Inverse1Id`, `t`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` + """ +SELECT `l1`.`Id`, `l1`.`Date`, `l1`.`Name`, `l1`.`OneToMany_Optional_Self_Inverse1Id`, `l1`.`OneToMany_Required_Self_Inverse1Id`, `l1`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l2`.`Id`, `l2`.`Level2_Optional_Id`, `l2`.`Level2_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse3Id`, `l2`.`OneToMany_Optional_Self_Inverse3Id`, `l2`.`OneToMany_Required_Inverse3Id`, `l2`.`OneToMany_Required_Self_Inverse3Id`, `l2`.`OneToOne_Optional_PK_Inverse3Id`, `l2`.`OneToOne_Optional_Self3Id` FROM (( - SELECT TOP 10 `t0`.`Id`, `t0`.`Date`, `t0`.`Name`, `t0`.`OneToMany_Optional_Self_Inverse1Id`, `t0`.`OneToMany_Required_Self_Inverse1Id`, `t0`.`OneToOne_Optional_Self1Id` + SELECT TOP 10 `l3`.`Id`, `l3`.`Date`, `l3`.`Name`, `l3`.`OneToMany_Optional_Self_Inverse1Id`, `l3`.`OneToMany_Required_Self_Inverse1Id`, `l3`.`OneToOne_Optional_Self1Id` FROM ( SELECT TOP 10 `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` FROM `LevelOne` AS `l` ORDER BY `l`.`Name` - ) AS `t0` - ORDER BY `t0`.`Name` DESC -) AS `t` -LEFT JOIN `LevelTwo` AS `l0` ON `t`.`Id` = `l0`.`Level1_Optional_Id`) -LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Required_Id` -ORDER BY `t`.`Name`, `t`.`Id`, `l0`.`Id`, `l1`.`Id` + ) AS `l3` + ORDER BY `l3`.`Name` DESC +) AS `l1` +LEFT JOIN `LevelTwo` AS `l0` ON `l1`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelThree` AS `l2` ON `l0`.`Id` = `l2`.`Level2_Required_Id` +ORDER BY `l1`.`Name`, `l1`.`Id`, `l0`.`Id`, `l2`.`Id` """, // -""" -SELECT `l2`.`Id`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id`, `t`.`Id`, `l0`.`Id`, `l1`.`Id` + """ +SELECT `l3`.`Id`, `l3`.`Level3_Optional_Id`, `l3`.`Level3_Required_Id`, `l3`.`Name`, `l3`.`OneToMany_Optional_Inverse4Id`, `l3`.`OneToMany_Optional_Self_Inverse4Id`, `l3`.`OneToMany_Required_Inverse4Id`, `l3`.`OneToMany_Required_Self_Inverse4Id`, `l3`.`OneToOne_Optional_PK_Inverse4Id`, `l3`.`OneToOne_Optional_Self4Id`, `l1`.`Id`, `l0`.`Id`, `l2`.`Id` FROM ((( - SELECT TOP 10 `t0`.`Id`, `t0`.`Name` + SELECT TOP 10 `l4`.`Id`, `l4`.`Name` FROM ( SELECT TOP 10 `l`.`Id`, `l`.`Name` FROM `LevelOne` AS `l` ORDER BY `l`.`Name` - ) AS `t0` - ORDER BY `t0`.`Name` DESC -) AS `t` -LEFT JOIN `LevelTwo` AS `l0` ON `t`.`Id` = `l0`.`Level1_Optional_Id`) -LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Required_Id`) -LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`OneToMany_Optional_Inverse4Id` -WHERE `l1`.`Id` IS NOT NULL AND `l2`.`OneToMany_Optional_Inverse4Id` IS NOT NULL -ORDER BY `t`.`Name`, `t`.`Id`, `l0`.`Id`, `l1`.`Id` + ) AS `l4` + ORDER BY `l4`.`Name` DESC +) AS `l1` +LEFT JOIN `LevelTwo` AS `l0` ON `l1`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelThree` AS `l2` ON `l0`.`Id` = `l2`.`Level2_Required_Id`) +LEFT JOIN `LevelFour` AS `l3` ON `l2`.`Id` = `l3`.`OneToMany_Optional_Inverse4Id` +WHERE `l2`.`Id` IS NOT NULL AND `l3`.`OneToMany_Optional_Inverse4Id` IS NOT NULL +ORDER BY `l1`.`Name`, `l1`.`Id`, `l0`.`Id`, `l2`.`Id` """); } @@ -2319,23 +2319,23 @@ public override async Task Optional_navigation_with_Include_ThenInclude(bool asy await base.Optional_navigation_with_Include_ThenInclude(async); AssertSql( -""" + """ SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l`.`Id` FROM `LevelOne` AS `l` LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` ORDER BY `l`.`Id`, `l0`.`Id` """, - // - """ -SELECT `t`.`Id`, `t`.`Level2_Optional_Id`, `t`.`Level2_Required_Id`, `t`.`Name`, `t`.`OneToMany_Optional_Inverse3Id`, `t`.`OneToMany_Optional_Self_Inverse3Id`, `t`.`OneToMany_Required_Inverse3Id`, `t`.`OneToMany_Required_Self_Inverse3Id`, `t`.`OneToOne_Optional_PK_Inverse3Id`, `t`.`OneToOne_Optional_Self3Id`, `t`.`Id0`, `t`.`Level3_Optional_Id`, `t`.`Level3_Required_Id`, `t`.`Name0`, `t`.`OneToMany_Optional_Inverse4Id`, `t`.`OneToMany_Optional_Self_Inverse4Id`, `t`.`OneToMany_Required_Inverse4Id`, `t`.`OneToMany_Required_Self_Inverse4Id`, `t`.`OneToOne_Optional_PK_Inverse4Id`, `t`.`OneToOne_Optional_Self4Id`, `l`.`Id`, `l0`.`Id` + // + """ +SELECT `s`.`Id`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `s`.`Id0`, `s`.`Level3_Optional_Id`, `s`.`Level3_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse4Id`, `s`.`OneToMany_Optional_Self_Inverse4Id`, `s`.`OneToMany_Required_Inverse4Id`, `s`.`OneToMany_Required_Self_Inverse4Id`, `s`.`OneToOne_Optional_PK_Inverse4Id`, `s`.`OneToOne_Optional_Self4Id`, `l`.`Id`, `l0`.`Id` FROM (`LevelOne` AS `l` LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) LEFT JOIN ( SELECT `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l2`.`Id` AS `Id0`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name` AS `Name0`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id` FROM `LevelThree` AS `l1` LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`Level3_Optional_Id` -) AS `t` ON `l0`.`Id` = `t`.`OneToMany_Optional_Inverse3Id` -WHERE `l0`.`Id` IS NOT NULL AND `t`.`OneToMany_Optional_Inverse3Id` IS NOT NULL +) AS `s` ON `l0`.`Id` = `s`.`OneToMany_Optional_Inverse3Id` +WHERE `l0`.`Id` IS NOT NULL AND `s`.`OneToMany_Optional_Inverse3Id` IS NOT NULL ORDER BY `l`.`Id`, `l0`.`Id` """); } @@ -2482,24 +2482,24 @@ public override async Task SelectMany_with_navigation_and_Distinct(bool async) AssertSql( """ -SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `t`.`Id` +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l1`.`Id` FROM `LevelOne` AS `l` INNER JOIN ( SELECT DISTINCT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` FROM `LevelTwo` AS `l0` -) AS `t` ON `l`.`Id` = `t`.`OneToMany_Optional_Inverse2Id` -ORDER BY `l`.`Id`, `t`.`Id` +) AS `l1` ON `l`.`Id` = `l1`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `l1`.`Id` """, // """ -SELECT `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id`, `l`.`Id`, `t`.`Id` +SELECT `l2`.`Id`, `l2`.`Date`, `l2`.`Level1_Optional_Id`, `l2`.`Level1_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse2Id`, `l2`.`OneToMany_Optional_Self_Inverse2Id`, `l2`.`OneToMany_Required_Inverse2Id`, `l2`.`OneToMany_Required_Self_Inverse2Id`, `l2`.`OneToOne_Optional_PK_Inverse2Id`, `l2`.`OneToOne_Optional_Self2Id`, `l`.`Id`, `l1`.`Id` FROM (`LevelOne` AS `l` INNER JOIN ( SELECT DISTINCT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` FROM `LevelTwo` AS `l0` -) AS `t` ON `l`.`Id` = `t`.`OneToMany_Optional_Inverse2Id`) -INNER JOIN `LevelTwo` AS `l1` ON `l`.`Id` = `l1`.`OneToMany_Optional_Inverse2Id` -ORDER BY `l`.`Id`, `t`.`Id` +) AS `l1` ON `l`.`Id` = `l1`.`OneToMany_Optional_Inverse2Id`) +INNER JOIN `LevelTwo` AS `l2` ON `l`.`Id` = `l2`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `l1`.`Id` """); } @@ -2509,24 +2509,24 @@ public override async Task SelectMany_with_navigation_and_Distinct_projecting_co AssertSql( """ -SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `t`.`Id` +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l1`.`Id` FROM `LevelOne` AS `l` INNER JOIN ( SELECT DISTINCT `l0`.`Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id` AS `FK` FROM `LevelTwo` AS `l0` -) AS `t` ON `l`.`Id` = `t`.`FK` -ORDER BY `l`.`Id`, `t`.`Id` +) AS `l1` ON `l`.`Id` = `l1`.`FK` +ORDER BY `l`.`Id`, `l1`.`Id` """, // """ -SELECT `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id`, `l`.`Id`, `t`.`Id` +SELECT `l2`.`Id`, `l2`.`Date`, `l2`.`Level1_Optional_Id`, `l2`.`Level1_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse2Id`, `l2`.`OneToMany_Optional_Self_Inverse2Id`, `l2`.`OneToMany_Required_Inverse2Id`, `l2`.`OneToMany_Required_Self_Inverse2Id`, `l2`.`OneToOne_Optional_PK_Inverse2Id`, `l2`.`OneToOne_Optional_Self2Id`, `l`.`Id`, `l1`.`Id` FROM (`LevelOne` AS `l` INNER JOIN ( SELECT DISTINCT `l0`.`Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id` AS `FK` FROM `LevelTwo` AS `l0` -) AS `t` ON `l`.`Id` = `t`.`FK`) -INNER JOIN `LevelTwo` AS `l1` ON `l`.`Id` = `l1`.`OneToMany_Optional_Inverse2Id` -ORDER BY `l`.`Id`, `t`.`Id` +) AS `l1` ON `l`.`Id` = `l1`.`FK`) +INNER JOIN `LevelTwo` AS `l2` ON `l`.`Id` = `l2`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `l1`.`Id` """); } @@ -2907,13 +2907,13 @@ ORDER BY `l`.`Id` """, // """ -SELECT `t`.`Id`, `t`.`Date`, `t`.`Level1_Optional_Id`, `t`.`Level1_Required_Id`, `t`.`Name`, `t`.`OneToMany_Optional_Inverse2Id`, `t`.`OneToMany_Optional_Self_Inverse2Id`, `t`.`OneToMany_Required_Inverse2Id`, `t`.`OneToMany_Required_Self_Inverse2Id`, `t`.`OneToOne_Optional_PK_Inverse2Id`, `t`.`OneToOne_Optional_Self2Id`, `t`.`Id0`, `t`.`Level2_Optional_Id`, `t`.`Level2_Required_Id`, `t`.`Name0`, `t`.`OneToMany_Optional_Inverse3Id`, `t`.`OneToMany_Optional_Self_Inverse3Id`, `t`.`OneToMany_Required_Inverse3Id`, `t`.`OneToMany_Required_Self_Inverse3Id`, `t`.`OneToOne_Optional_PK_Inverse3Id`, `t`.`OneToOne_Optional_Self3Id`, `l`.`Id` +SELECT `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `l`.`Id` FROM `LevelOne` AS `l` INNER JOIN ( SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id` AS `Id0`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name` AS `Name0`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` FROM `LevelTwo` AS `l0` LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToOne_Optional_PK_Inverse3Id` -) AS `t` ON `l`.`Id` = `t`.`OneToMany_Optional_Inverse2Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` ORDER BY `l`.`Id` """); } @@ -2971,13 +2971,13 @@ ORDER BY `l`.`Id` """, // """ -SELECT `t`.`Id`, `t`.`Date`, `t`.`Level1_Optional_Id`, `t`.`Level1_Required_Id`, `t`.`Name`, `t`.`OneToMany_Optional_Inverse2Id`, `t`.`OneToMany_Optional_Self_Inverse2Id`, `t`.`OneToMany_Required_Inverse2Id`, `t`.`OneToMany_Required_Self_Inverse2Id`, `t`.`OneToOne_Optional_PK_Inverse2Id`, `t`.`OneToOne_Optional_Self2Id`, `t`.`Id0`, `t`.`Level2_Optional_Id`, `t`.`Level2_Required_Id`, `t`.`Name0`, `t`.`OneToMany_Optional_Inverse3Id`, `t`.`OneToMany_Optional_Self_Inverse3Id`, `t`.`OneToMany_Required_Inverse3Id`, `t`.`OneToMany_Required_Self_Inverse3Id`, `t`.`OneToOne_Optional_PK_Inverse3Id`, `t`.`OneToOne_Optional_Self3Id`, `l`.`Id` +SELECT `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `l`.`Id` FROM `LevelOne` AS `l` INNER JOIN ( SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id` AS `Id0`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name` AS `Name0`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` FROM `LevelTwo` AS `l0` LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToOne_Optional_PK_Inverse3Id` -) AS `t` ON `l`.`Id` = `t`.`OneToMany_Optional_Inverse2Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` ORDER BY `l`.`Id` """); } @@ -2987,21 +2987,21 @@ public override async Task Include_collection_and_another_navigation_chain_follo await base.Include_collection_and_another_navigation_chain_followed_by_projecting_the_first_collection(async); AssertSql( -""" + """ SELECT `l`.`Id` FROM `LevelOne` AS `l` ORDER BY `l`.`Id` """, - // - """ -SELECT `t`.`Id`, `t`.`Date`, `t`.`Level1_Optional_Id`, `t`.`Level1_Required_Id`, `t`.`Name`, `t`.`OneToMany_Optional_Inverse2Id`, `t`.`OneToMany_Optional_Self_Inverse2Id`, `t`.`OneToMany_Required_Inverse2Id`, `t`.`OneToMany_Required_Self_Inverse2Id`, `t`.`OneToOne_Optional_PK_Inverse2Id`, `t`.`OneToOne_Optional_Self2Id`, `t`.`Id0`, `t`.`Level2_Optional_Id`, `t`.`Level2_Required_Id`, `t`.`Name0`, `t`.`OneToMany_Optional_Inverse3Id`, `t`.`OneToMany_Optional_Self_Inverse3Id`, `t`.`OneToMany_Required_Inverse3Id`, `t`.`OneToMany_Required_Self_Inverse3Id`, `t`.`OneToOne_Optional_PK_Inverse3Id`, `t`.`OneToOne_Optional_Self3Id`, `t`.`Id1`, `t`.`Level3_Optional_Id`, `t`.`Level3_Required_Id`, `t`.`Name1`, `t`.`OneToMany_Optional_Inverse4Id`, `t`.`OneToMany_Optional_Self_Inverse4Id`, `t`.`OneToMany_Required_Inverse4Id`, `t`.`OneToMany_Required_Self_Inverse4Id`, `t`.`OneToOne_Optional_PK_Inverse4Id`, `t`.`OneToOne_Optional_Self4Id`, `l`.`Id` + // + """ +SELECT `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `s`.`Id1`, `s`.`Level3_Optional_Id`, `s`.`Level3_Required_Id`, `s`.`Name1`, `s`.`OneToMany_Optional_Inverse4Id`, `s`.`OneToMany_Optional_Self_Inverse4Id`, `s`.`OneToMany_Required_Inverse4Id`, `s`.`OneToMany_Required_Self_Inverse4Id`, `s`.`OneToOne_Optional_PK_Inverse4Id`, `s`.`OneToOne_Optional_Self4Id`, `l`.`Id` FROM `LevelOne` AS `l` INNER JOIN ( SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id` AS `Id0`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name` AS `Name0`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l2`.`Id` AS `Id1`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name` AS `Name1`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id` FROM (`LevelTwo` AS `l0` LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToOne_Optional_PK_Inverse3Id`) LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`Level3_Optional_Id` -) AS `t` ON `l`.`Id` = `t`.`OneToMany_Optional_Inverse2Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` ORDER BY `l`.`Id` """); } @@ -3011,21 +3011,21 @@ public override async Task Include_collection_ThenInclude_two_references(bool as await base.Include_collection_ThenInclude_two_references(async); AssertSql( -""" + """ SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` FROM `LevelOne` AS `l` ORDER BY `l`.`Id` """, - // - """ -SELECT `t`.`Id`, `t`.`Date`, `t`.`Level1_Optional_Id`, `t`.`Level1_Required_Id`, `t`.`Name`, `t`.`OneToMany_Optional_Inverse2Id`, `t`.`OneToMany_Optional_Self_Inverse2Id`, `t`.`OneToMany_Required_Inverse2Id`, `t`.`OneToMany_Required_Self_Inverse2Id`, `t`.`OneToOne_Optional_PK_Inverse2Id`, `t`.`OneToOne_Optional_Self2Id`, `t`.`Id0`, `t`.`Level2_Optional_Id`, `t`.`Level2_Required_Id`, `t`.`Name0`, `t`.`OneToMany_Optional_Inverse3Id`, `t`.`OneToMany_Optional_Self_Inverse3Id`, `t`.`OneToMany_Required_Inverse3Id`, `t`.`OneToMany_Required_Self_Inverse3Id`, `t`.`OneToOne_Optional_PK_Inverse3Id`, `t`.`OneToOne_Optional_Self3Id`, `t`.`Id1`, `t`.`Level3_Optional_Id`, `t`.`Level3_Required_Id`, `t`.`Name1`, `t`.`OneToMany_Optional_Inverse4Id`, `t`.`OneToMany_Optional_Self_Inverse4Id`, `t`.`OneToMany_Required_Inverse4Id`, `t`.`OneToMany_Required_Self_Inverse4Id`, `t`.`OneToOne_Optional_PK_Inverse4Id`, `t`.`OneToOne_Optional_Self4Id`, `l`.`Id` + // + """ +SELECT `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `s`.`Id1`, `s`.`Level3_Optional_Id`, `s`.`Level3_Required_Id`, `s`.`Name1`, `s`.`OneToMany_Optional_Inverse4Id`, `s`.`OneToMany_Optional_Self_Inverse4Id`, `s`.`OneToMany_Required_Inverse4Id`, `s`.`OneToMany_Required_Self_Inverse4Id`, `s`.`OneToOne_Optional_PK_Inverse4Id`, `s`.`OneToOne_Optional_Self4Id`, `l`.`Id` FROM `LevelOne` AS `l` INNER JOIN ( SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id` AS `Id0`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name` AS `Name0`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l2`.`Id` AS `Id1`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name` AS `Name1`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id` FROM (`LevelTwo` AS `l0` LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToOne_Optional_PK_Inverse3Id`) LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`Level3_Optional_Id` -) AS `t` ON `l`.`Id` = `t`.`OneToMany_Optional_Inverse2Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` ORDER BY `l`.`Id` """); } @@ -3035,14 +3035,14 @@ public override async Task Include_collection_followed_by_complex_includes_and_p await base.Include_collection_followed_by_complex_includes_and_projecting_the_included_collection(async); AssertSql( -""" + """ SELECT `l`.`Id` FROM `LevelOne` AS `l` ORDER BY `l`.`Id` """, - // - """ -SELECT `t`.`Id`, `t`.`Date`, `t`.`Level1_Optional_Id`, `t`.`Level1_Required_Id`, `t`.`Name`, `t`.`OneToMany_Optional_Inverse2Id`, `t`.`OneToMany_Optional_Self_Inverse2Id`, `t`.`OneToMany_Required_Inverse2Id`, `t`.`OneToMany_Required_Self_Inverse2Id`, `t`.`OneToOne_Optional_PK_Inverse2Id`, `t`.`OneToOne_Optional_Self2Id`, `t`.`Id0`, `t`.`Level2_Optional_Id`, `t`.`Level2_Required_Id`, `t`.`Name0`, `t`.`OneToMany_Optional_Inverse3Id`, `t`.`OneToMany_Optional_Self_Inverse3Id`, `t`.`OneToMany_Required_Inverse3Id`, `t`.`OneToMany_Required_Self_Inverse3Id`, `t`.`OneToOne_Optional_PK_Inverse3Id`, `t`.`OneToOne_Optional_Self3Id`, `t`.`Id1`, `t`.`Level3_Optional_Id`, `t`.`Level3_Required_Id`, `t`.`Name1`, `t`.`OneToMany_Optional_Inverse4Id`, `t`.`OneToMany_Optional_Self_Inverse4Id`, `t`.`OneToMany_Required_Inverse4Id`, `t`.`OneToMany_Required_Self_Inverse4Id`, `t`.`OneToOne_Optional_PK_Inverse4Id`, `t`.`OneToOne_Optional_Self4Id`, `t`.`Id2`, `t`.`Level2_Optional_Id0`, `t`.`Level2_Required_Id0`, `t`.`Name2`, `t`.`OneToMany_Optional_Inverse3Id0`, `t`.`OneToMany_Optional_Self_Inverse3Id0`, `t`.`OneToMany_Required_Inverse3Id0`, `t`.`OneToMany_Required_Self_Inverse3Id0`, `t`.`OneToOne_Optional_PK_Inverse3Id0`, `t`.`OneToOne_Optional_Self3Id0`, `l`.`Id` + // + """ +SELECT `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `s`.`Id1`, `s`.`Level3_Optional_Id`, `s`.`Level3_Required_Id`, `s`.`Name1`, `s`.`OneToMany_Optional_Inverse4Id`, `s`.`OneToMany_Optional_Self_Inverse4Id`, `s`.`OneToMany_Required_Inverse4Id`, `s`.`OneToMany_Required_Self_Inverse4Id`, `s`.`OneToOne_Optional_PK_Inverse4Id`, `s`.`OneToOne_Optional_Self4Id`, `s`.`Id2`, `s`.`Level2_Optional_Id0`, `s`.`Level2_Required_Id0`, `s`.`Name2`, `s`.`OneToMany_Optional_Inverse3Id0`, `s`.`OneToMany_Optional_Self_Inverse3Id0`, `s`.`OneToMany_Required_Inverse3Id0`, `s`.`OneToMany_Required_Self_Inverse3Id0`, `s`.`OneToOne_Optional_PK_Inverse3Id0`, `s`.`OneToOne_Optional_Self3Id0`, `l`.`Id` FROM `LevelOne` AS `l` INNER JOIN ( SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id` AS `Id0`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name` AS `Name0`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l2`.`Id` AS `Id1`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name` AS `Name1`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id`, `l3`.`Id` AS `Id2`, `l3`.`Level2_Optional_Id` AS `Level2_Optional_Id0`, `l3`.`Level2_Required_Id` AS `Level2_Required_Id0`, `l3`.`Name` AS `Name2`, `l3`.`OneToMany_Optional_Inverse3Id` AS `OneToMany_Optional_Inverse3Id0`, `l3`.`OneToMany_Optional_Self_Inverse3Id` AS `OneToMany_Optional_Self_Inverse3Id0`, `l3`.`OneToMany_Required_Inverse3Id` AS `OneToMany_Required_Inverse3Id0`, `l3`.`OneToMany_Required_Self_Inverse3Id` AS `OneToMany_Required_Self_Inverse3Id0`, `l3`.`OneToOne_Optional_PK_Inverse3Id` AS `OneToOne_Optional_PK_Inverse3Id0`, `l3`.`OneToOne_Optional_Self3Id` AS `OneToOne_Optional_Self3Id0` @@ -3050,12 +3050,12 @@ INNER JOIN ( LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToOne_Optional_PK_Inverse3Id`) LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`Level3_Optional_Id`) LEFT JOIN `LevelThree` AS `l3` ON `l0`.`Id` = `l3`.`Level2_Optional_Id` -) AS `t` ON `l`.`Id` = `t`.`OneToMany_Optional_Inverse2Id` -ORDER BY `l`.`Id`, `t`.`Id`, `t`.`Id0`, `t`.`Id1`, `t`.`Id2` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2` """, - // - """ -SELECT `l4`.`Id`, `l4`.`Level3_Optional_Id`, `l4`.`Level3_Required_Id`, `l4`.`Name`, `l4`.`OneToMany_Optional_Inverse4Id`, `l4`.`OneToMany_Optional_Self_Inverse4Id`, `l4`.`OneToMany_Required_Inverse4Id`, `l4`.`OneToMany_Required_Self_Inverse4Id`, `l4`.`OneToOne_Optional_PK_Inverse4Id`, `l4`.`OneToOne_Optional_Self4Id`, `l`.`Id`, `t`.`Id`, `t`.`Id0`, `t`.`Id1`, `t`.`Id2` + // + """ +SELECT `l4`.`Id`, `l4`.`Level3_Optional_Id`, `l4`.`Level3_Required_Id`, `l4`.`Name`, `l4`.`OneToMany_Optional_Inverse4Id`, `l4`.`OneToMany_Optional_Self_Inverse4Id`, `l4`.`OneToMany_Required_Inverse4Id`, `l4`.`OneToMany_Required_Self_Inverse4Id`, `l4`.`OneToOne_Optional_PK_Inverse4Id`, `l4`.`OneToOne_Optional_Self4Id`, `l`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2` FROM (`LevelOne` AS `l` INNER JOIN ( SELECT `l0`.`Id`, `l0`.`OneToMany_Optional_Inverse2Id`, `l1`.`Id` AS `Id0`, `l2`.`Id` AS `Id1`, `l3`.`Id` AS `Id2` @@ -3063,10 +3063,10 @@ INNER JOIN ( LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToOne_Optional_PK_Inverse3Id`) LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`Level3_Optional_Id`) LEFT JOIN `LevelThree` AS `l3` ON `l0`.`Id` = `l3`.`Level2_Optional_Id` -) AS `t` ON `l`.`Id` = `t`.`OneToMany_Optional_Inverse2Id`) -LEFT JOIN `LevelFour` AS `l4` ON `t`.`Id2` = `l4`.`OneToMany_Optional_Inverse4Id` -WHERE `t`.`Id2` IS NOT NULL AND `l4`.`OneToMany_Optional_Inverse4Id` IS NOT NULL -ORDER BY `l`.`Id`, `t`.`Id`, `t`.`Id0`, `t`.`Id1`, `t`.`Id2` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id`) +LEFT JOIN `LevelFour` AS `l4` ON `s`.`Id2` = `l4`.`OneToMany_Optional_Inverse4Id` +WHERE `s`.`Id2` IS NOT NULL AND `l4`.`OneToMany_Optional_Inverse4Id` IS NOT NULL +ORDER BY `l`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2` """); } @@ -3075,14 +3075,14 @@ public override async Task Include_collection_multiple(bool async) await base.Include_collection_multiple(async); AssertSql( -""" + """ SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` FROM `LevelOne` AS `l` ORDER BY `l`.`Id` """, - // - """ -SELECT `t`.`Id`, `t`.`Date`, `t`.`Level1_Optional_Id`, `t`.`Level1_Required_Id`, `t`.`Name`, `t`.`OneToMany_Optional_Inverse2Id`, `t`.`OneToMany_Optional_Self_Inverse2Id`, `t`.`OneToMany_Required_Inverse2Id`, `t`.`OneToMany_Required_Self_Inverse2Id`, `t`.`OneToOne_Optional_PK_Inverse2Id`, `t`.`OneToOne_Optional_Self2Id`, `t`.`Id0`, `t`.`Level2_Optional_Id`, `t`.`Level2_Required_Id`, `t`.`Name0`, `t`.`OneToMany_Optional_Inverse3Id`, `t`.`OneToMany_Optional_Self_Inverse3Id`, `t`.`OneToMany_Required_Inverse3Id`, `t`.`OneToMany_Required_Self_Inverse3Id`, `t`.`OneToOne_Optional_PK_Inverse3Id`, `t`.`OneToOne_Optional_Self3Id`, `t`.`Id1`, `t`.`Level3_Optional_Id`, `t`.`Level3_Required_Id`, `t`.`Name1`, `t`.`OneToMany_Optional_Inverse4Id`, `t`.`OneToMany_Optional_Self_Inverse4Id`, `t`.`OneToMany_Required_Inverse4Id`, `t`.`OneToMany_Required_Self_Inverse4Id`, `t`.`OneToOne_Optional_PK_Inverse4Id`, `t`.`OneToOne_Optional_Self4Id`, `t`.`Id2`, `t`.`Level2_Optional_Id0`, `t`.`Level2_Required_Id0`, `t`.`Name2`, `t`.`OneToMany_Optional_Inverse3Id0`, `t`.`OneToMany_Optional_Self_Inverse3Id0`, `t`.`OneToMany_Required_Inverse3Id0`, `t`.`OneToMany_Required_Self_Inverse3Id0`, `t`.`OneToOne_Optional_PK_Inverse3Id0`, `t`.`OneToOne_Optional_Self3Id0`, `l`.`Id` + // + """ +SELECT `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `s`.`Id1`, `s`.`Level3_Optional_Id`, `s`.`Level3_Required_Id`, `s`.`Name1`, `s`.`OneToMany_Optional_Inverse4Id`, `s`.`OneToMany_Optional_Self_Inverse4Id`, `s`.`OneToMany_Required_Inverse4Id`, `s`.`OneToMany_Required_Self_Inverse4Id`, `s`.`OneToOne_Optional_PK_Inverse4Id`, `s`.`OneToOne_Optional_Self4Id`, `s`.`Id2`, `s`.`Level2_Optional_Id0`, `s`.`Level2_Required_Id0`, `s`.`Name2`, `s`.`OneToMany_Optional_Inverse3Id0`, `s`.`OneToMany_Optional_Self_Inverse3Id0`, `s`.`OneToMany_Required_Inverse3Id0`, `s`.`OneToMany_Required_Self_Inverse3Id0`, `s`.`OneToOne_Optional_PK_Inverse3Id0`, `s`.`OneToOne_Optional_Self3Id0`, `l`.`Id` FROM `LevelOne` AS `l` INNER JOIN ( SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id` AS `Id0`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name` AS `Name0`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l2`.`Id` AS `Id1`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name` AS `Name1`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id`, `l3`.`Id` AS `Id2`, `l3`.`Level2_Optional_Id` AS `Level2_Optional_Id0`, `l3`.`Level2_Required_Id` AS `Level2_Required_Id0`, `l3`.`Name` AS `Name2`, `l3`.`OneToMany_Optional_Inverse3Id` AS `OneToMany_Optional_Inverse3Id0`, `l3`.`OneToMany_Optional_Self_Inverse3Id` AS `OneToMany_Optional_Self_Inverse3Id0`, `l3`.`OneToMany_Required_Inverse3Id` AS `OneToMany_Required_Inverse3Id0`, `l3`.`OneToMany_Required_Self_Inverse3Id` AS `OneToMany_Required_Self_Inverse3Id0`, `l3`.`OneToOne_Optional_PK_Inverse3Id` AS `OneToOne_Optional_PK_Inverse3Id0`, `l3`.`OneToOne_Optional_Self3Id` AS `OneToOne_Optional_Self3Id0` @@ -3090,12 +3090,12 @@ INNER JOIN ( LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToOne_Optional_PK_Inverse3Id`) LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`Level3_Optional_Id`) LEFT JOIN `LevelThree` AS `l3` ON `l0`.`Id` = `l3`.`Level2_Optional_Id` -) AS `t` ON `l`.`Id` = `t`.`OneToMany_Optional_Inverse2Id` -ORDER BY `l`.`Id`, `t`.`Id`, `t`.`Id0`, `t`.`Id1`, `t`.`Id2` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2` """, - // - """ -SELECT `l4`.`Id`, `l4`.`Level3_Optional_Id`, `l4`.`Level3_Required_Id`, `l4`.`Name`, `l4`.`OneToMany_Optional_Inverse4Id`, `l4`.`OneToMany_Optional_Self_Inverse4Id`, `l4`.`OneToMany_Required_Inverse4Id`, `l4`.`OneToMany_Required_Self_Inverse4Id`, `l4`.`OneToOne_Optional_PK_Inverse4Id`, `l4`.`OneToOne_Optional_Self4Id`, `l`.`Id`, `t`.`Id`, `t`.`Id0`, `t`.`Id1`, `t`.`Id2` + // + """ +SELECT `l4`.`Id`, `l4`.`Level3_Optional_Id`, `l4`.`Level3_Required_Id`, `l4`.`Name`, `l4`.`OneToMany_Optional_Inverse4Id`, `l4`.`OneToMany_Optional_Self_Inverse4Id`, `l4`.`OneToMany_Required_Inverse4Id`, `l4`.`OneToMany_Required_Self_Inverse4Id`, `l4`.`OneToOne_Optional_PK_Inverse4Id`, `l4`.`OneToOne_Optional_Self4Id`, `l`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2` FROM (`LevelOne` AS `l` INNER JOIN ( SELECT `l0`.`Id`, `l0`.`OneToMany_Optional_Inverse2Id`, `l1`.`Id` AS `Id0`, `l2`.`Id` AS `Id1`, `l3`.`Id` AS `Id2` @@ -3103,10 +3103,10 @@ INNER JOIN ( LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToOne_Optional_PK_Inverse3Id`) LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`Level3_Optional_Id`) LEFT JOIN `LevelThree` AS `l3` ON `l0`.`Id` = `l3`.`Level2_Optional_Id` -) AS `t` ON `l`.`Id` = `t`.`OneToMany_Optional_Inverse2Id`) -LEFT JOIN `LevelFour` AS `l4` ON `t`.`Id2` = `l4`.`OneToMany_Optional_Inverse4Id` -WHERE `t`.`Id2` IS NOT NULL AND `l4`.`OneToMany_Optional_Inverse4Id` IS NOT NULL -ORDER BY `l`.`Id`, `t`.`Id`, `t`.`Id0`, `t`.`Id1`, `t`.`Id2` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id`) +LEFT JOIN `LevelFour` AS `l4` ON `s`.`Id2` = `l4`.`OneToMany_Optional_Inverse4Id` +WHERE `s`.`Id2` IS NOT NULL AND `l4`.`OneToMany_Optional_Inverse4Id` IS NOT NULL +ORDER BY `l`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Id2` """); } @@ -3122,14 +3122,14 @@ ORDER BY `l`.`Id` """, // """ -SELECT `t`.`Id`, `t`.`Level2_Optional_Id`, `t`.`Level2_Required_Id`, `t`.`Name`, `t`.`OneToMany_Optional_Inverse3Id`, `t`.`OneToMany_Optional_Self_Inverse3Id`, `t`.`OneToMany_Required_Inverse3Id`, `t`.`OneToMany_Required_Self_Inverse3Id`, `t`.`OneToOne_Optional_PK_Inverse3Id`, `t`.`OneToOne_Optional_Self3Id`, `t`.`Id0`, `t`.`Level3_Optional_Id`, `t`.`Level3_Required_Id`, `t`.`Name0`, `t`.`OneToMany_Optional_Inverse4Id`, `t`.`OneToMany_Optional_Self_Inverse4Id`, `t`.`OneToMany_Required_Inverse4Id`, `t`.`OneToMany_Required_Self_Inverse4Id`, `t`.`OneToOne_Optional_PK_Inverse4Id`, `t`.`OneToOne_Optional_Self4Id`, `l`.`Id` +SELECT `s`.`Id`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `s`.`Id0`, `s`.`Level3_Optional_Id`, `s`.`Level3_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse4Id`, `s`.`OneToMany_Optional_Self_Inverse4Id`, `s`.`OneToMany_Required_Inverse4Id`, `s`.`OneToMany_Required_Self_Inverse4Id`, `s`.`OneToOne_Optional_PK_Inverse4Id`, `s`.`OneToOne_Optional_Self4Id`, `l`.`Id` FROM `LevelOne` AS `l` INNER JOIN ( - SELECT `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l2`.`Id` AS `Id0`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name` AS `Name0`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id`, `l0`.`OneToMany_Optional_Inverse2Id` - FROM (`LevelTwo` AS `l0` - LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToOne_Optional_PK_Inverse3Id`) - LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`Level3_Optional_Id` -) AS `t` ON `l`.`Id` = `t`.`OneToMany_Optional_Inverse2Id` + SELECT `l7`.`Id`, `l7`.`Level2_Optional_Id`, `l7`.`Level2_Required_Id`, `l7`.`Name`, `l7`.`OneToMany_Optional_Inverse3Id`, `l7`.`OneToMany_Optional_Self_Inverse3Id`, `l7`.`OneToMany_Required_Inverse3Id`, `l7`.`OneToMany_Required_Self_Inverse3Id`, `l7`.`OneToOne_Optional_PK_Inverse3Id`, `l7`.`OneToOne_Optional_Self3Id`, `l8`.`Id` AS `Id0`, `l8`.`Level3_Optional_Id`, `l8`.`Level3_Required_Id`, `l8`.`Name` AS `Name0`, `l8`.`OneToMany_Optional_Inverse4Id`, `l8`.`OneToMany_Optional_Self_Inverse4Id`, `l8`.`OneToMany_Required_Inverse4Id`, `l8`.`OneToMany_Required_Self_Inverse4Id`, `l8`.`OneToOne_Optional_PK_Inverse4Id`, `l8`.`OneToOne_Optional_Self4Id`, `l6`.`OneToMany_Optional_Inverse2Id` + FROM (`LevelTwo` AS `l6` + LEFT JOIN `LevelThree` AS `l7` ON `l6`.`Id` = `l7`.`OneToOne_Optional_PK_Inverse3Id`) + LEFT JOIN `LevelFour` AS `l8` ON `l7`.`Id` = `l8`.`Level3_Optional_Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` ORDER BY `l`.`Id` """); } @@ -3139,31 +3139,31 @@ public override async Task Include_collection_ThenInclude_reference_followed_by_ await base.Include_collection_ThenInclude_reference_followed_by_projection_into_anonmous_type(async); AssertSql( -""" + """ SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` FROM `LevelOne` AS `l` ORDER BY `l`.`Id` """, - // - """ -SELECT `t`.`Id`, `t`.`Date`, `t`.`Level1_Optional_Id`, `t`.`Level1_Required_Id`, `t`.`Name`, `t`.`OneToMany_Optional_Inverse2Id`, `t`.`OneToMany_Optional_Self_Inverse2Id`, `t`.`OneToMany_Required_Inverse2Id`, `t`.`OneToMany_Required_Self_Inverse2Id`, `t`.`OneToOne_Optional_PK_Inverse2Id`, `t`.`OneToOne_Optional_Self2Id`, `t`.`Id0`, `t`.`Level2_Optional_Id`, `t`.`Level2_Required_Id`, `t`.`Name0`, `t`.`OneToMany_Optional_Inverse3Id`, `t`.`OneToMany_Optional_Self_Inverse3Id`, `t`.`OneToMany_Required_Inverse3Id`, `t`.`OneToMany_Required_Self_Inverse3Id`, `t`.`OneToOne_Optional_PK_Inverse3Id`, `t`.`OneToOne_Optional_Self3Id`, `l`.`Id` + // + """ +SELECT `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `l`.`Id` FROM `LevelOne` AS `l` INNER JOIN ( SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id` AS `Id0`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name` AS `Name0`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` FROM `LevelTwo` AS `l0` LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToOne_Optional_PK_Inverse3Id` -) AS `t` ON `l`.`Id` = `t`.`OneToMany_Optional_Inverse2Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` ORDER BY `l`.`Id` """, - // - """ -SELECT `t`.`Id`, `t`.`Date`, `t`.`Level1_Optional_Id`, `t`.`Level1_Required_Id`, `t`.`Name`, `t`.`OneToMany_Optional_Inverse2Id`, `t`.`OneToMany_Optional_Self_Inverse2Id`, `t`.`OneToMany_Required_Inverse2Id`, `t`.`OneToMany_Required_Self_Inverse2Id`, `t`.`OneToOne_Optional_PK_Inverse2Id`, `t`.`OneToOne_Optional_Self2Id`, `t`.`Id0`, `t`.`Level2_Optional_Id`, `t`.`Level2_Required_Id`, `t`.`Name0`, `t`.`OneToMany_Optional_Inverse3Id`, `t`.`OneToMany_Optional_Self_Inverse3Id`, `t`.`OneToMany_Required_Inverse3Id`, `t`.`OneToMany_Required_Self_Inverse3Id`, `t`.`OneToOne_Optional_PK_Inverse3Id`, `t`.`OneToOne_Optional_Self3Id`, `l`.`Id` + // + """ +SELECT `s0`.`Id`, `s0`.`Date`, `s0`.`Level1_Optional_Id`, `s0`.`Level1_Required_Id`, `s0`.`Name`, `s0`.`OneToMany_Optional_Inverse2Id`, `s0`.`OneToMany_Optional_Self_Inverse2Id`, `s0`.`OneToMany_Required_Inverse2Id`, `s0`.`OneToMany_Required_Self_Inverse2Id`, `s0`.`OneToOne_Optional_PK_Inverse2Id`, `s0`.`OneToOne_Optional_Self2Id`, `s0`.`Id0`, `s0`.`Level2_Optional_Id`, `s0`.`Level2_Required_Id`, `s0`.`Name0`, `s0`.`OneToMany_Optional_Inverse3Id`, `s0`.`OneToMany_Optional_Self_Inverse3Id`, `s0`.`OneToMany_Required_Inverse3Id`, `s0`.`OneToMany_Required_Self_Inverse3Id`, `s0`.`OneToOne_Optional_PK_Inverse3Id`, `s0`.`OneToOne_Optional_Self3Id`, `l`.`Id` FROM `LevelOne` AS `l` INNER JOIN ( - SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id` AS `Id0`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name` AS `Name0`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` - FROM `LevelTwo` AS `l0` - LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`OneToOne_Optional_PK_Inverse3Id` -) AS `t` ON `l`.`Id` = `t`.`OneToMany_Optional_Inverse2Id` + SELECT `l2`.`Id`, `l2`.`Date`, `l2`.`Level1_Optional_Id`, `l2`.`Level1_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse2Id`, `l2`.`OneToMany_Optional_Self_Inverse2Id`, `l2`.`OneToMany_Required_Inverse2Id`, `l2`.`OneToMany_Required_Self_Inverse2Id`, `l2`.`OneToOne_Optional_PK_Inverse2Id`, `l2`.`OneToOne_Optional_Self2Id`, `l3`.`Id` AS `Id0`, `l3`.`Level2_Optional_Id`, `l3`.`Level2_Required_Id`, `l3`.`Name` AS `Name0`, `l3`.`OneToMany_Optional_Inverse3Id`, `l3`.`OneToMany_Optional_Self_Inverse3Id`, `l3`.`OneToMany_Required_Inverse3Id`, `l3`.`OneToMany_Required_Self_Inverse3Id`, `l3`.`OneToOne_Optional_PK_Inverse3Id`, `l3`.`OneToOne_Optional_Self3Id` + FROM `LevelTwo` AS `l2` + LEFT JOIN `LevelThree` AS `l3` ON `l2`.`Id` = `l3`.`OneToOne_Optional_PK_Inverse3Id` +) AS `s0` ON `l`.`Id` = `s0`.`OneToMany_Optional_Inverse2Id` ORDER BY `l`.`Id` """); } @@ -3173,7 +3173,7 @@ public override async Task Include_collection_multiple_with_filter(bool async) await base.Include_collection_multiple_with_filter(async); AssertSql( -""" + """ SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` FROM `LevelOne` AS `l` WHERE ( @@ -3184,15 +3184,15 @@ SELECT COUNT(*) ORDER BY `l`.`Id` """, // -""" -SELECT `t`.`Id`, `t`.`Date`, `t`.`Level1_Optional_Id`, `t`.`Level1_Required_Id`, `t`.`Name`, `t`.`OneToMany_Optional_Inverse2Id`, `t`.`OneToMany_Optional_Self_Inverse2Id`, `t`.`OneToMany_Required_Inverse2Id`, `t`.`OneToMany_Required_Self_Inverse2Id`, `t`.`OneToOne_Optional_PK_Inverse2Id`, `t`.`OneToOne_Optional_Self2Id`, `t`.`Id0`, `t`.`Level2_Optional_Id`, `t`.`Level2_Required_Id`, `t`.`Name0`, `t`.`OneToMany_Optional_Inverse3Id`, `t`.`OneToMany_Optional_Self_Inverse3Id`, `t`.`OneToMany_Required_Inverse3Id`, `t`.`OneToMany_Required_Self_Inverse3Id`, `t`.`OneToOne_Optional_PK_Inverse3Id`, `t`.`OneToOne_Optional_Self3Id`, `t`.`Id1`, `t`.`Level3_Optional_Id`, `t`.`Level3_Required_Id`, `t`.`Name1`, `t`.`OneToMany_Optional_Inverse4Id`, `t`.`OneToMany_Optional_Self_Inverse4Id`, `t`.`OneToMany_Required_Inverse4Id`, `t`.`OneToMany_Required_Self_Inverse4Id`, `t`.`OneToOne_Optional_PK_Inverse4Id`, `t`.`OneToOne_Optional_Self4Id`, `l`.`Id` + """ +SELECT `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `s`.`Id1`, `s`.`Level3_Optional_Id`, `s`.`Level3_Required_Id`, `s`.`Name1`, `s`.`OneToMany_Optional_Inverse4Id`, `s`.`OneToMany_Optional_Self_Inverse4Id`, `s`.`OneToMany_Required_Inverse4Id`, `s`.`OneToMany_Required_Self_Inverse4Id`, `s`.`OneToOne_Optional_PK_Inverse4Id`, `s`.`OneToOne_Optional_Self4Id`, `l`.`Id` FROM `LevelOne` AS `l` INNER JOIN ( SELECT `l2`.`Id`, `l2`.`Date`, `l2`.`Level1_Optional_Id`, `l2`.`Level1_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse2Id`, `l2`.`OneToMany_Optional_Self_Inverse2Id`, `l2`.`OneToMany_Required_Inverse2Id`, `l2`.`OneToMany_Required_Self_Inverse2Id`, `l2`.`OneToOne_Optional_PK_Inverse2Id`, `l2`.`OneToOne_Optional_Self2Id`, `l3`.`Id` AS `Id0`, `l3`.`Level2_Optional_Id`, `l3`.`Level2_Required_Id`, `l3`.`Name` AS `Name0`, `l3`.`OneToMany_Optional_Inverse3Id`, `l3`.`OneToMany_Optional_Self_Inverse3Id`, `l3`.`OneToMany_Required_Inverse3Id`, `l3`.`OneToMany_Required_Self_Inverse3Id`, `l3`.`OneToOne_Optional_PK_Inverse3Id`, `l3`.`OneToOne_Optional_Self3Id`, `l4`.`Id` AS `Id1`, `l4`.`Level3_Optional_Id`, `l4`.`Level3_Required_Id`, `l4`.`Name` AS `Name1`, `l4`.`OneToMany_Optional_Inverse4Id`, `l4`.`OneToMany_Optional_Self_Inverse4Id`, `l4`.`OneToMany_Required_Inverse4Id`, `l4`.`OneToMany_Required_Self_Inverse4Id`, `l4`.`OneToOne_Optional_PK_Inverse4Id`, `l4`.`OneToOne_Optional_Self4Id` FROM (`LevelTwo` AS `l2` LEFT JOIN `LevelThree` AS `l3` ON `l2`.`Id` = `l3`.`OneToOne_Optional_PK_Inverse3Id`) LEFT JOIN `LevelFour` AS `l4` ON `l3`.`Id` = `l4`.`Level3_Optional_Id` -) AS `t` ON `l`.`Id` = `t`.`OneToMany_Optional_Inverse2Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` WHERE ( SELECT COUNT(*) FROM `LevelTwo` AS `l0` @@ -3461,14 +3461,14 @@ ORDER BY `l`.`Id` """, // """ -SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `t`.`Id` +SELECT `l2`.`Id`, `l2`.`Date`, `l2`.`Level1_Optional_Id`, `l2`.`Level1_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse2Id`, `l2`.`OneToMany_Optional_Self_Inverse2Id`, `l2`.`OneToMany_Required_Inverse2Id`, `l2`.`OneToMany_Required_Self_Inverse2Id`, `l2`.`OneToOne_Optional_PK_Inverse2Id`, `l2`.`OneToOne_Optional_Self2Id`, `l3`.`Id` FROM ( SELECT TOP 1 `l`.`Id` FROM `LevelOne` AS `l` WHERE `l`.`Id` = 1 -) AS `t` -INNER JOIN `LevelTwo` AS `l0` ON `t`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id` -ORDER BY `t`.`Id` +) AS `l3` +INNER JOIN `LevelTwo` AS `l2` ON `l3`.`Id` = `l2`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l3`.`Id` """); } @@ -3783,19 +3783,19 @@ ORDER BY `l`.`Date` """, // """ -SELECT `t0`.`Id`, `t`.`Date` +SELECT `l5`.`Id`, `l4`.`Date` FROM ( SELECT `l`.`Date` FROM `LevelOne` AS `l` WHERE `l`.`Name` IN ('L1 01', 'L1 02') GROUP BY `l`.`Date` -) AS `t` +) AS `l4` INNER JOIN ( - SELECT `l0`.`Id`, `l0`.`Date` - FROM `LevelOne` AS `l0` - WHERE `l0`.`Name` IN ('L1 01', 'L1 02') -) AS `t0` ON `t`.`Date` = `t0`.`Date` -ORDER BY `t`.`Date` + SELECT `l3`.`Id`, `l3`.`Date` + FROM `LevelOne` AS `l3` + WHERE `l3`.`Name` IN ('L1 01', 'L1 02') +) AS `l5` ON `l4`.`Date` = `l5`.`Date` +ORDER BY `l4`.`Date` """); } @@ -3804,7 +3804,7 @@ public override async Task Include_partially_added_before_Where_and_then_build_u await base.Include_partially_added_before_Where_and_then_build_upon(async); AssertSql( -""" + """ SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id`, `l0`.`Id` FROM (`LevelOne` AS `l` LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToOne_Optional_PK_Inverse2Id`) @@ -3812,9 +3812,9 @@ public override async Task Include_partially_added_before_Where_and_then_build_u WHERE `l0`.`Id` < 3 OR `l1`.`Id` > 8 ORDER BY `l`.`Id`, `l0`.`Id`, `l1`.`Id` """, - // - """ -SELECT `t`.`Id`, `t`.`Level2_Optional_Id`, `t`.`Level2_Required_Id`, `t`.`Name`, `t`.`OneToMany_Optional_Inverse3Id`, `t`.`OneToMany_Optional_Self_Inverse3Id`, `t`.`OneToMany_Required_Inverse3Id`, `t`.`OneToMany_Required_Self_Inverse3Id`, `t`.`OneToOne_Optional_PK_Inverse3Id`, `t`.`OneToOne_Optional_Self3Id`, `t`.`Id0`, `t`.`Level3_Optional_Id`, `t`.`Level3_Required_Id`, `t`.`Name0`, `t`.`OneToMany_Optional_Inverse4Id`, `t`.`OneToMany_Optional_Self_Inverse4Id`, `t`.`OneToMany_Required_Inverse4Id`, `t`.`OneToMany_Required_Self_Inverse4Id`, `t`.`OneToOne_Optional_PK_Inverse4Id`, `t`.`OneToOne_Optional_Self4Id`, `l`.`Id`, `l0`.`Id`, `l1`.`Id` + // + """ +SELECT `s`.`Id`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `s`.`Id0`, `s`.`Level3_Optional_Id`, `s`.`Level3_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse4Id`, `s`.`OneToMany_Optional_Self_Inverse4Id`, `s`.`OneToMany_Required_Inverse4Id`, `s`.`OneToMany_Required_Self_Inverse4Id`, `s`.`OneToOne_Optional_PK_Inverse4Id`, `s`.`OneToOne_Optional_Self4Id`, `l`.`Id`, `l0`.`Id`, `l1`.`Id` FROM ((`LevelOne` AS `l` LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToOne_Optional_PK_Inverse2Id`) LEFT JOIN `LevelTwo` AS `l1` ON `l`.`Id` = `l1`.`Level1_Optional_Id`) @@ -3822,8 +3822,8 @@ LEFT JOIN ( SELECT `l2`.`Id`, `l2`.`Level2_Optional_Id`, `l2`.`Level2_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse3Id`, `l2`.`OneToMany_Optional_Self_Inverse3Id`, `l2`.`OneToMany_Required_Inverse3Id`, `l2`.`OneToMany_Required_Self_Inverse3Id`, `l2`.`OneToOne_Optional_PK_Inverse3Id`, `l2`.`OneToOne_Optional_Self3Id`, `l3`.`Id` AS `Id0`, `l3`.`Level3_Optional_Id`, `l3`.`Level3_Required_Id`, `l3`.`Name` AS `Name0`, `l3`.`OneToMany_Optional_Inverse4Id`, `l3`.`OneToMany_Optional_Self_Inverse4Id`, `l3`.`OneToMany_Required_Inverse4Id`, `l3`.`OneToMany_Required_Self_Inverse4Id`, `l3`.`OneToOne_Optional_PK_Inverse4Id`, `l3`.`OneToOne_Optional_Self4Id` FROM `LevelThree` AS `l2` LEFT JOIN `LevelFour` AS `l3` ON `l2`.`Id` = `l3`.`Level3_Optional_Id` -) AS `t` ON `l1`.`Id` = `t`.`OneToMany_Optional_Inverse3Id` -WHERE (`l0`.`Id` < 3 OR `l1`.`Id` > 8) AND (`l1`.`Id` IS NOT NULL AND `t`.`OneToMany_Optional_Inverse3Id` IS NOT NULL) +) AS `s` ON `l1`.`Id` = `s`.`OneToMany_Optional_Inverse3Id` +WHERE (`l0`.`Id` < 3 OR `l1`.`Id` > 8) AND (`l1`.`Id` IS NOT NULL AND `s`.`OneToMany_Optional_Inverse3Id` IS NOT NULL) ORDER BY `l`.`Id`, `l0`.`Id`, `l1`.`Id` """); } @@ -4096,14 +4096,14 @@ public override async Task Multiple_complex_includes_EF_Property(bool async) await base.Multiple_complex_includes_EF_Property(async); AssertSql( -""" + """ SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` FROM `LevelOne` AS `l` LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` ORDER BY `l`.`Id`, `l0`.`Id` """, - // - """ + // + """ SELECT `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l`.`Id`, `l0`.`Id` FROM (`LevelOne` AS `l` LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) @@ -4111,16 +4111,16 @@ public override async Task Multiple_complex_includes_EF_Property(bool async) WHERE `l0`.`Id` IS NOT NULL AND `l1`.`OneToMany_Optional_Inverse3Id` IS NOT NULL ORDER BY `l`.`Id`, `l0`.`Id` """, - // - """ -SELECT `t`.`Id`, `t`.`Date`, `t`.`Level1_Optional_Id`, `t`.`Level1_Required_Id`, `t`.`Name`, `t`.`OneToMany_Optional_Inverse2Id`, `t`.`OneToMany_Optional_Self_Inverse2Id`, `t`.`OneToMany_Required_Inverse2Id`, `t`.`OneToMany_Required_Self_Inverse2Id`, `t`.`OneToOne_Optional_PK_Inverse2Id`, `t`.`OneToOne_Optional_Self2Id`, `t`.`Id0`, `t`.`Level2_Optional_Id`, `t`.`Level2_Required_Id`, `t`.`Name0`, `t`.`OneToMany_Optional_Inverse3Id`, `t`.`OneToMany_Optional_Self_Inverse3Id`, `t`.`OneToMany_Required_Inverse3Id`, `t`.`OneToMany_Required_Self_Inverse3Id`, `t`.`OneToOne_Optional_PK_Inverse3Id`, `t`.`OneToOne_Optional_Self3Id`, `l`.`Id`, `l0`.`Id` + // + """ +SELECT `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `l`.`Id`, `l0`.`Id` FROM (`LevelOne` AS `l` LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) INNER JOIN ( - SELECT `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id`, `l2`.`Id` AS `Id0`, `l2`.`Level2_Optional_Id`, `l2`.`Level2_Required_Id`, `l2`.`Name` AS `Name0`, `l2`.`OneToMany_Optional_Inverse3Id`, `l2`.`OneToMany_Optional_Self_Inverse3Id`, `l2`.`OneToMany_Required_Inverse3Id`, `l2`.`OneToMany_Required_Self_Inverse3Id`, `l2`.`OneToOne_Optional_PK_Inverse3Id`, `l2`.`OneToOne_Optional_Self3Id` - FROM `LevelTwo` AS `l1` - LEFT JOIN `LevelThree` AS `l2` ON `l1`.`Id` = `l2`.`Level2_Optional_Id` -) AS `t` ON `l`.`Id` = `t`.`OneToMany_Optional_Inverse2Id` + SELECT `l2`.`Id`, `l2`.`Date`, `l2`.`Level1_Optional_Id`, `l2`.`Level1_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse2Id`, `l2`.`OneToMany_Optional_Self_Inverse2Id`, `l2`.`OneToMany_Required_Inverse2Id`, `l2`.`OneToMany_Required_Self_Inverse2Id`, `l2`.`OneToOne_Optional_PK_Inverse2Id`, `l2`.`OneToOne_Optional_Self2Id`, `l3`.`Id` AS `Id0`, `l3`.`Level2_Optional_Id`, `l3`.`Level2_Required_Id`, `l3`.`Name` AS `Name0`, `l3`.`OneToMany_Optional_Inverse3Id`, `l3`.`OneToMany_Optional_Self_Inverse3Id`, `l3`.`OneToMany_Required_Inverse3Id`, `l3`.`OneToMany_Required_Self_Inverse3Id`, `l3`.`OneToOne_Optional_PK_Inverse3Id`, `l3`.`OneToOne_Optional_Self3Id` + FROM `LevelTwo` AS `l2` + LEFT JOIN `LevelThree` AS `l3` ON `l2`.`Id` = `l3`.`Level2_Optional_Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` ORDER BY `l`.`Id`, `l0`.`Id` """); } @@ -4130,14 +4130,14 @@ public override async Task Multiple_complex_includes_self_ref_EF_Property(bool a await base.Multiple_complex_includes_self_ref_EF_Property(async); AssertSql( -""" + """ SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Name`, `l0`.`OneToMany_Optional_Self_Inverse1Id`, `l0`.`OneToMany_Required_Self_Inverse1Id`, `l0`.`OneToOne_Optional_Self1Id` FROM `LevelOne` AS `l` LEFT JOIN `LevelOne` AS `l0` ON `l`.`OneToOne_Optional_Self1Id` = `l0`.`Id` ORDER BY `l`.`Id`, `l0`.`Id` """, - // - """ + // + """ SELECT `l1`.`Id`, `l1`.`Date`, `l1`.`Name`, `l1`.`OneToMany_Optional_Self_Inverse1Id`, `l1`.`OneToMany_Required_Self_Inverse1Id`, `l1`.`OneToOne_Optional_Self1Id`, `l`.`Id`, `l0`.`Id` FROM (`LevelOne` AS `l` LEFT JOIN `LevelOne` AS `l0` ON `l`.`OneToOne_Optional_Self1Id` = `l0`.`Id`) @@ -4145,16 +4145,16 @@ public override async Task Multiple_complex_includes_self_ref_EF_Property(bool a WHERE `l0`.`Id` IS NOT NULL AND `l1`.`OneToMany_Optional_Self_Inverse1Id` IS NOT NULL ORDER BY `l`.`Id`, `l0`.`Id` """, - // - """ -SELECT `t`.`Id`, `t`.`Date`, `t`.`Name`, `t`.`OneToMany_Optional_Self_Inverse1Id`, `t`.`OneToMany_Required_Self_Inverse1Id`, `t`.`OneToOne_Optional_Self1Id`, `t`.`Id0`, `t`.`Date0`, `t`.`Name0`, `t`.`OneToMany_Optional_Self_Inverse1Id0`, `t`.`OneToMany_Required_Self_Inverse1Id0`, `t`.`OneToOne_Optional_Self1Id0`, `l`.`Id`, `l0`.`Id` + // + """ +SELECT `s`.`Id`, `s`.`Date`, `s`.`Name`, `s`.`OneToMany_Optional_Self_Inverse1Id`, `s`.`OneToMany_Required_Self_Inverse1Id`, `s`.`OneToOne_Optional_Self1Id`, `s`.`Id0`, `s`.`Date0`, `s`.`Name0`, `s`.`OneToMany_Optional_Self_Inverse1Id0`, `s`.`OneToMany_Required_Self_Inverse1Id0`, `s`.`OneToOne_Optional_Self1Id0`, `l`.`Id`, `l0`.`Id` FROM (`LevelOne` AS `l` LEFT JOIN `LevelOne` AS `l0` ON `l`.`OneToOne_Optional_Self1Id` = `l0`.`Id`) INNER JOIN ( - SELECT `l1`.`Id`, `l1`.`Date`, `l1`.`Name`, `l1`.`OneToMany_Optional_Self_Inverse1Id`, `l1`.`OneToMany_Required_Self_Inverse1Id`, `l1`.`OneToOne_Optional_Self1Id`, `l2`.`Id` AS `Id0`, `l2`.`Date` AS `Date0`, `l2`.`Name` AS `Name0`, `l2`.`OneToMany_Optional_Self_Inverse1Id` AS `OneToMany_Optional_Self_Inverse1Id0`, `l2`.`OneToMany_Required_Self_Inverse1Id` AS `OneToMany_Required_Self_Inverse1Id0`, `l2`.`OneToOne_Optional_Self1Id` AS `OneToOne_Optional_Self1Id0` - FROM `LevelOne` AS `l1` - LEFT JOIN `LevelOne` AS `l2` ON `l1`.`OneToOne_Optional_Self1Id` = `l2`.`Id` -) AS `t` ON `l`.`Id` = `t`.`OneToMany_Optional_Self_Inverse1Id` + SELECT `l2`.`Id`, `l2`.`Date`, `l2`.`Name`, `l2`.`OneToMany_Optional_Self_Inverse1Id`, `l2`.`OneToMany_Required_Self_Inverse1Id`, `l2`.`OneToOne_Optional_Self1Id`, `l3`.`Id` AS `Id0`, `l3`.`Date` AS `Date0`, `l3`.`Name` AS `Name0`, `l3`.`OneToMany_Optional_Self_Inverse1Id` AS `OneToMany_Optional_Self_Inverse1Id0`, `l3`.`OneToMany_Required_Self_Inverse1Id` AS `OneToMany_Required_Self_Inverse1Id0`, `l3`.`OneToOne_Optional_Self1Id` AS `OneToOne_Optional_Self1Id0` + FROM `LevelOne` AS `l2` + LEFT JOIN `LevelOne` AS `l3` ON `l2`.`OneToOne_Optional_Self1Id` = `l3`.`Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Self_Inverse1Id` ORDER BY `l`.`Id`, `l0`.`Id` """); } @@ -4164,7 +4164,7 @@ public override async Task Include_collection_multiple_with_filter_EF_Property(b await base.Include_collection_multiple_with_filter_EF_Property(async); AssertSql( -""" + """ SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` FROM `LevelOne` AS `l` WHERE ( @@ -4175,15 +4175,15 @@ SELECT COUNT(*) ORDER BY `l`.`Id` """, // -""" -SELECT `t`.`Id`, `t`.`Date`, `t`.`Level1_Optional_Id`, `t`.`Level1_Required_Id`, `t`.`Name`, `t`.`OneToMany_Optional_Inverse2Id`, `t`.`OneToMany_Optional_Self_Inverse2Id`, `t`.`OneToMany_Required_Inverse2Id`, `t`.`OneToMany_Required_Self_Inverse2Id`, `t`.`OneToOne_Optional_PK_Inverse2Id`, `t`.`OneToOne_Optional_Self2Id`, `t`.`Id0`, `t`.`Level2_Optional_Id`, `t`.`Level2_Required_Id`, `t`.`Name0`, `t`.`OneToMany_Optional_Inverse3Id`, `t`.`OneToMany_Optional_Self_Inverse3Id`, `t`.`OneToMany_Required_Inverse3Id`, `t`.`OneToMany_Required_Self_Inverse3Id`, `t`.`OneToOne_Optional_PK_Inverse3Id`, `t`.`OneToOne_Optional_Self3Id`, `t`.`Id1`, `t`.`Level3_Optional_Id`, `t`.`Level3_Required_Id`, `t`.`Name1`, `t`.`OneToMany_Optional_Inverse4Id`, `t`.`OneToMany_Optional_Self_Inverse4Id`, `t`.`OneToMany_Required_Inverse4Id`, `t`.`OneToMany_Required_Self_Inverse4Id`, `t`.`OneToOne_Optional_PK_Inverse4Id`, `t`.`OneToOne_Optional_Self4Id`, `l`.`Id` + """ +SELECT `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `s`.`Id1`, `s`.`Level3_Optional_Id`, `s`.`Level3_Required_Id`, `s`.`Name1`, `s`.`OneToMany_Optional_Inverse4Id`, `s`.`OneToMany_Optional_Self_Inverse4Id`, `s`.`OneToMany_Required_Inverse4Id`, `s`.`OneToMany_Required_Self_Inverse4Id`, `s`.`OneToOne_Optional_PK_Inverse4Id`, `s`.`OneToOne_Optional_Self4Id`, `l`.`Id` FROM `LevelOne` AS `l` INNER JOIN ( SELECT `l2`.`Id`, `l2`.`Date`, `l2`.`Level1_Optional_Id`, `l2`.`Level1_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse2Id`, `l2`.`OneToMany_Optional_Self_Inverse2Id`, `l2`.`OneToMany_Required_Inverse2Id`, `l2`.`OneToMany_Required_Self_Inverse2Id`, `l2`.`OneToOne_Optional_PK_Inverse2Id`, `l2`.`OneToOne_Optional_Self2Id`, `l3`.`Id` AS `Id0`, `l3`.`Level2_Optional_Id`, `l3`.`Level2_Required_Id`, `l3`.`Name` AS `Name0`, `l3`.`OneToMany_Optional_Inverse3Id`, `l3`.`OneToMany_Optional_Self_Inverse3Id`, `l3`.`OneToMany_Required_Inverse3Id`, `l3`.`OneToMany_Required_Self_Inverse3Id`, `l3`.`OneToOne_Optional_PK_Inverse3Id`, `l3`.`OneToOne_Optional_Self3Id`, `l4`.`Id` AS `Id1`, `l4`.`Level3_Optional_Id`, `l4`.`Level3_Required_Id`, `l4`.`Name` AS `Name1`, `l4`.`OneToMany_Optional_Inverse4Id`, `l4`.`OneToMany_Optional_Self_Inverse4Id`, `l4`.`OneToMany_Required_Inverse4Id`, `l4`.`OneToMany_Required_Self_Inverse4Id`, `l4`.`OneToOne_Optional_PK_Inverse4Id`, `l4`.`OneToOne_Optional_Self4Id` FROM (`LevelTwo` AS `l2` LEFT JOIN `LevelThree` AS `l3` ON `l2`.`Id` = `l3`.`OneToOne_Optional_PK_Inverse3Id`) LEFT JOIN `LevelFour` AS `l4` ON `l3`.`Id` = `l4`.`Level3_Optional_Id` -) AS `t` ON `l`.`Id` = `t`.`OneToMany_Optional_Inverse2Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` WHERE ( SELECT COUNT(*) FROM `LevelTwo` AS `l0` @@ -4205,13 +4205,13 @@ ORDER BY `l`.`Id` """, // """ -SELECT `t`.`Id`, `t`.`Date`, `t`.`Level1_Optional_Id`, `t`.`Level1_Required_Id`, `t`.`Name`, `t`.`OneToMany_Optional_Inverse2Id`, `t`.`OneToMany_Optional_Self_Inverse2Id`, `t`.`OneToMany_Required_Inverse2Id`, `t`.`OneToMany_Required_Self_Inverse2Id`, `t`.`OneToOne_Optional_PK_Inverse2Id`, `t`.`OneToOne_Optional_Self2Id`, `l`.`Id` +SELECT `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id`, `l`.`Id` FROM `LevelOne` AS `l` INNER JOIN ( SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` FROM `LevelTwo` AS `l0` WHERE `l0`.`Id` > 5 -) AS `t` ON `l`.`Id` = `t`.`OneToMany_Optional_Inverse2Id` +) AS `l1` ON `l`.`Id` = `l1`.`OneToMany_Optional_Inverse2Id` ORDER BY `l`.`Id` """); } @@ -4349,13 +4349,13 @@ public override async Task Final_GroupBy_property_entity_Include_collection_refe """, // """ -SELECT `l`.`Name`, `t`.`Id`, `t`.`Date`, `t`.`Level1_Optional_Id`, `t`.`Level1_Required_Id`, `t`.`Name`, `t`.`OneToMany_Optional_Inverse2Id`, `t`.`OneToMany_Optional_Self_Inverse2Id`, `t`.`OneToMany_Required_Inverse2Id`, `t`.`OneToMany_Required_Self_Inverse2Id`, `t`.`OneToOne_Optional_PK_Inverse2Id`, `t`.`OneToOne_Optional_Self2Id`, `t`.`Id0`, `t`.`Level2_Optional_Id`, `t`.`Level2_Required_Id`, `t`.`Name0`, `t`.`OneToMany_Optional_Inverse3Id`, `t`.`OneToMany_Optional_Self_Inverse3Id`, `t`.`OneToMany_Required_Inverse3Id`, `t`.`OneToMany_Required_Self_Inverse3Id`, `t`.`OneToOne_Optional_PK_Inverse3Id`, `t`.`OneToOne_Optional_Self3Id`, `l`.`Id` +SELECT `l`.`Name`, `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id`, `l`.`Id` FROM `LevelOne` AS `l` INNER JOIN ( SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id` AS `Id0`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name` AS `Name0`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` FROM `LevelTwo` AS `l0` LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Optional_Id` -) AS `t` ON `l`.`Id` = `t`.`OneToMany_Optional_Inverse2Id` +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` ORDER BY `l`.`Name`, `l`.`Id` """); } @@ -4379,9 +4379,9 @@ public override async Task Final_GroupBy_property_entity_Include_collection_mult """, // """ -SELECT `l`.`Name`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l`.`Id` +SELECT `l`.`Name`, `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id`, `l`.`Id` FROM `LevelOne` AS `l` -INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Required_Inverse2Id` +INNER JOIN `LevelTwo` AS `l1` ON `l`.`Id` = `l1`.`OneToMany_Required_Inverse2Id` ORDER BY `l`.`Name`, `l`.`Id` """); } @@ -4434,6 +4434,27 @@ ORDER BY `l`.`Name` """); } + public override async Task Project_collection_and_nested_conditional(bool async) + { + await base.Project_collection_and_nested_conditional(async); + + AssertSql( + """ +SELECT `l`.`Id`, IIF(`l`.`Id` = 1, '01', IIF(`l`.`Id` = 2, '02', IIF(`l`.`Id` = 3, '03', NULL))) +FROM `LevelOne` AS `l` +WHERE IIF(`l`.`Id` = 1, '01', IIF(`l`.`Id` = 2, '02', IIF(`l`.`Id` = 3, '03', NULL))) = '02' +ORDER BY `l`.`Id` +""", + // + """ +SELECT `l2`.`Name`, `l`.`Id` +FROM `LevelOne` AS `l` +INNER JOIN `LevelTwo` AS `l2` ON `l`.`Id` = `l2`.`OneToMany_Optional_Inverse2Id` +WHERE IIF(`l`.`Id` = 1, '01', IIF(`l`.`Id` = 2, '02', IIF(`l`.`Id` = 3, '03', NULL))) = '02' +ORDER BY `l`.`Id`, `l2`.`Id` +"""); + } + private void AssertSql(params string[] expected) => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); } diff --git a/test/EFCore.Jet.FunctionalTests/Query/ComplexNavigationsQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/ComplexNavigationsQueryJetTest.cs index 4cfb779c..2c5a2a13 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/ComplexNavigationsQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/ComplexNavigationsQueryJetTest.cs @@ -7,11 +7,12 @@ using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestModels.ComplexNavigationsModel; using Microsoft.EntityFrameworkCore.TestUtilities; using Xunit; using Xunit.Abstractions; using Xunit.Sdk; - +#nullable disable // ReSharper disable InconsistentNaming namespace EntityFrameworkCore.Jet.FunctionalTests.Query { @@ -27,13 +28,65 @@ public ComplexNavigationsQueryJetTest( private bool SupportsOffset => true; - protected override bool CanExecuteQueryString - => false; - [ConditionalFact] public virtual void Check_all_tests_overridden() => TestHelpers.AssertAllMethodsOverridden(GetType()); + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual async Task Distinct_skip_without_orderby(bool async) + { + await AssertQuery( + async, + ss => from l1 in ss.Set() + where l1.Id < 3 + select (from l3 in ss.Set() + select l3).Distinct().Skip(1).OrderBy(e => e.Id).FirstOrDefault().Name); + + AssertSql( + """ +SELECT ( + SELECT TOP(1) [l2].[Name] + FROM ( + SELECT [l1].[Id], [l1].[Name] + FROM ( + SELECT DISTINCT [l0].[Id], [l0].[Level2_Optional_Id], [l0].[Level2_Required_Id], [l0].[Name], [l0].[OneToMany_Optional_Inverse3Id], [l0].[OneToMany_Optional_Self_Inverse3Id], [l0].[OneToMany_Required_Inverse3Id], [l0].[OneToMany_Required_Self_Inverse3Id], [l0].[OneToOne_Optional_PK_Inverse3Id], [l0].[OneToOne_Optional_Self3Id] + FROM [LevelThree] AS [l0] + ) AS [l1] + ORDER BY (SELECT 1) + OFFSET 1 ROWS + ) AS [l2] + ORDER BY [l2].[Id]) +FROM [LevelOne] AS [l] +WHERE [l].[Id] < 3 +"""); + } + + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual async Task Distinct_take_without_orderby(bool async) + { + await AssertQuery( + async, + ss => from l1 in ss.Set() + where l1.Id < 3 + select (from l3 in ss.Set() + select l3).Distinct().Take(1).OrderBy(e => e.Id).FirstOrDefault().Name); + + AssertSql( + """ +SELECT ( + SELECT TOP 1 `l1`.`Name` + FROM ( + SELECT DISTINCT TOP 1 `l0`.`Id`, `l0`.`Level2_Optional_Id`, `l0`.`Level2_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse3Id`, `l0`.`OneToMany_Optional_Self_Inverse3Id`, `l0`.`OneToMany_Required_Inverse3Id`, `l0`.`OneToMany_Required_Self_Inverse3Id`, `l0`.`OneToOne_Optional_PK_Inverse3Id`, `l0`.`OneToOne_Optional_Self3Id` + FROM `LevelThree` AS `l0` + ) AS `l1` + ORDER BY `l1`.`Id`) +FROM `LevelOne` AS `l` +WHERE `l`.`Id` < 3 +"""); + } + public override async Task Entity_equality_empty(bool isAsync) { await base.Entity_equality_empty(isAsync); @@ -172,7 +225,7 @@ public override async Task Multi_level_include_with_short_circuiting(bool isAsyn AssertSql( """ -SELECT `f`.`Name`, `f`.`LabelDefaultText`, `f`.`PlaceholderDefaultText`, `m`.`DefaultText`, `m0`.`DefaultText`, `t`.`Text`, `t`.`ComplexNavigationStringDefaultText`, `t`.`LanguageName`, `t`.`Name`, `t`.`CultureString`, `t0`.`Text`, `t0`.`ComplexNavigationStringDefaultText`, `t0`.`LanguageName`, `t0`.`Name`, `t0`.`CultureString` +SELECT `f`.`Name`, `f`.`LabelDefaultText`, `f`.`PlaceholderDefaultText`, `m`.`DefaultText`, `m0`.`DefaultText`, `s`.`Text`, `s`.`ComplexNavigationStringDefaultText`, `s`.`LanguageName`, `s`.`Name`, `s`.`CultureString`, `s0`.`Text`, `s0`.`ComplexNavigationStringDefaultText`, `s0`.`LanguageName`, `s0`.`Name`, `s0`.`CultureString` FROM (((`Fields` AS `f` LEFT JOIN `MultilingualStrings` AS `m` ON `f`.`LabelDefaultText` = `m`.`DefaultText`) LEFT JOIN `MultilingualStrings` AS `m0` ON `f`.`PlaceholderDefaultText` = `m0`.`DefaultText`) @@ -180,13 +233,13 @@ LEFT JOIN ( SELECT `g`.`Text`, `g`.`ComplexNavigationStringDefaultText`, `g`.`LanguageName`, `l`.`Name`, `l`.`CultureString` FROM `Globalizations` AS `g` LEFT JOIN `Languages` AS `l` ON `g`.`LanguageName` = `l`.`Name` -) AS `t` ON `m`.`DefaultText` = `t`.`ComplexNavigationStringDefaultText`) +) AS `s` ON `m`.`DefaultText` = `s`.`ComplexNavigationStringDefaultText`) LEFT JOIN ( SELECT `g0`.`Text`, `g0`.`ComplexNavigationStringDefaultText`, `g0`.`LanguageName`, `l0`.`Name`, `l0`.`CultureString` FROM `Globalizations` AS `g0` LEFT JOIN `Languages` AS `l0` ON `g0`.`LanguageName` = `l0`.`Name` -) AS `t0` ON `m0`.`DefaultText` = `t0`.`ComplexNavigationStringDefaultText` -ORDER BY `f`.`Name`, `m`.`DefaultText`, `m0`.`DefaultText`, `t`.`Text`, `t`.`Name`, `t0`.`Text` +) AS `s0` ON `m0`.`DefaultText` = `s0`.`ComplexNavigationStringDefaultText` +ORDER BY `f`.`Name`, `m`.`DefaultText`, `m0`.`DefaultText`, `s`.`Text`, `s`.`Name`, `s0`.`Text` """); } @@ -195,13 +248,15 @@ public override async Task Join_navigation_key_access_optional(bool isAsync) await base.Join_navigation_key_access_optional(isAsync); AssertSql( - @"SELECT `l`.`Id` AS `Id1`, `t`.`Id` AS `Id2` + """ +SELECT `l`.`Id` AS `Id1`, `s`.`Id` AS `Id2` FROM `LevelOne` AS `l` INNER JOIN ( SELECT `l0`.`Id`, `l1`.`Id` AS `Id0` FROM `LevelTwo` AS `l0` LEFT JOIN `LevelOne` AS `l1` ON `l0`.`Level1_Optional_Id` = `l1`.`Id` -) AS `t` ON `l`.`Id` = `t`.`Id0`"); +) AS `s` ON `l`.`Id` = `s`.`Id0` +"""); } public override async Task Join_navigation_key_access_required(bool isAsync) @@ -209,13 +264,15 @@ public override async Task Join_navigation_key_access_required(bool isAsync) await base.Join_navigation_key_access_required(isAsync); AssertSql( - @"SELECT `l`.`Id` AS `Id1`, `t`.`Id` AS `Id2` + """ +SELECT `l`.`Id` AS `Id1`, `s`.`Id` AS `Id2` FROM `LevelOne` AS `l` INNER JOIN ( SELECT `l0`.`Id`, `l1`.`Id` AS `Id0` FROM `LevelTwo` AS `l0` INNER JOIN `LevelOne` AS `l1` ON `l0`.`Level1_Required_Id` = `l1`.`Id` -) AS `t` ON `l`.`Id` = `t`.`Id0`"); +) AS `s` ON `l`.`Id` = `s`.`Id0` +"""); } public override async Task Navigation_key_access_optional_comparison(bool isAsync) @@ -402,13 +459,15 @@ public override async Task Join_navigation_in_inner_selector(bool isAsync) await base.Join_navigation_in_inner_selector(isAsync); AssertSql( - @"SELECT `l`.`Id` AS `Id2`, `t`.`Id` AS `Id1` + """ +SELECT `l`.`Id` AS `Id2`, `s`.`Id` AS `Id1` FROM `LevelTwo` AS `l` INNER JOIN ( SELECT `l0`.`Id`, `l1`.`Id` AS `Id0` FROM `LevelOne` AS `l0` LEFT JOIN `LevelTwo` AS `l1` ON `l0`.`Id` = `l1`.`Level1_Optional_Id` -) AS `t` ON `l`.`Id` = `t`.`Id0`"); +) AS `s` ON `l`.`Id` = `s`.`Id0` +"""); } public override async Task Join_navigations_in_inner_selector_translated_without_collision(bool isAsync) @@ -416,18 +475,20 @@ public override async Task Join_navigations_in_inner_selector_translated_without await base.Join_navigations_in_inner_selector_translated_without_collision(isAsync); AssertSql( - @"SELECT `l`.`Id` AS `Id2`, `t`.`Id` AS `Id1`, `t0`.`Id` AS `Id3` + """ +SELECT `l`.`Id` AS `Id2`, `s`.`Id` AS `Id1`, `s0`.`Id` AS `Id3` FROM (`LevelTwo` AS `l` INNER JOIN ( SELECT `l0`.`Id`, `l1`.`Id` AS `Id0` FROM `LevelOne` AS `l0` LEFT JOIN `LevelTwo` AS `l1` ON `l0`.`Id` = `l1`.`Level1_Optional_Id` -) AS `t` ON `l`.`Id` = `t`.`Id0`) +) AS `s` ON `l`.`Id` = `s`.`Id0`) INNER JOIN ( SELECT `l2`.`Id`, `l3`.`Id` AS `Id0` FROM `LevelThree` AS `l2` LEFT JOIN `LevelTwo` AS `l3` ON `l2`.`Level2_Optional_Id` = `l3`.`Id` -) AS `t0` ON `l`.`Id` = `t0`.`Id0`"); +) AS `s0` ON `l`.`Id` = `s0`.`Id0` +"""); } public override async Task Join_navigation_non_key_join(bool isAsync) @@ -435,13 +496,15 @@ public override async Task Join_navigation_non_key_join(bool isAsync) await base.Join_navigation_non_key_join(isAsync); AssertSql( - @"SELECT `l`.`Id` AS `Id2`, `l`.`Name` AS `Name2`, `t`.`Id` AS `Id1`, `t`.`Name` AS `Name1` + """ +SELECT `l`.`Id` AS `Id2`, `l`.`Name` AS `Name2`, `s`.`Id` AS `Id1`, `s`.`Name` AS `Name1` FROM `LevelTwo` AS `l` INNER JOIN ( SELECT `l0`.`Id`, `l0`.`Name`, `l1`.`Name` AS `Name0` FROM `LevelOne` AS `l0` LEFT JOIN `LevelTwo` AS `l1` ON `l0`.`Id` = `l1`.`Level1_Optional_Id` -) AS `t` ON `l`.`Name` = `t`.`Name0`"); +) AS `s` ON `l`.`Name` = `s`.`Name0` +"""); } public override async Task Join_with_orderby_on_inner_sequence_navigation_non_key_join(bool isAsync) @@ -449,13 +512,15 @@ public override async Task Join_with_orderby_on_inner_sequence_navigation_non_ke await base.Join_with_orderby_on_inner_sequence_navigation_non_key_join(isAsync); AssertSql( - @"SELECT `l`.`Id` AS `Id2`, `l`.`Name` AS `Name2`, `t`.`Id` AS `Id1`, `t`.`Name` AS `Name1` + """ +SELECT `l`.`Id` AS `Id2`, `l`.`Name` AS `Name2`, `s`.`Id` AS `Id1`, `s`.`Name` AS `Name1` FROM `LevelTwo` AS `l` INNER JOIN ( SELECT `l0`.`Id`, `l0`.`Name`, `l1`.`Name` AS `Name0` FROM `LevelOne` AS `l0` LEFT JOIN `LevelTwo` AS `l1` ON `l0`.`Id` = `l1`.`Level1_Optional_Id` -) AS `t` ON `l`.`Name` = `t`.`Name0`"); +) AS `s` ON `l`.`Name` = `s`.`Name0` +"""); } public override async Task Join_navigation_self_ref(bool isAsync) @@ -463,13 +528,15 @@ public override async Task Join_navigation_self_ref(bool isAsync) await base.Join_navigation_self_ref(isAsync); AssertSql( - @"SELECT `l`.`Id` AS `Id1`, `t`.`Id` AS `Id2` + """ +SELECT `l`.`Id` AS `Id1`, `s`.`Id` AS `Id2` FROM `LevelOne` AS `l` INNER JOIN ( SELECT `l0`.`Id`, `l1`.`Id` AS `Id0` FROM `LevelOne` AS `l0` LEFT JOIN `LevelOne` AS `l1` ON `l0`.`OneToMany_Optional_Self_Inverse1Id` = `l1`.`Id` -) AS `t` ON `l`.`Id` = `t`.`Id0`"); +) AS `s` ON `l`.`Id` = `s`.`Id0` +"""); } public override async Task Join_navigation_nested(bool isAsync) @@ -477,14 +544,16 @@ public override async Task Join_navigation_nested(bool isAsync) await base.Join_navigation_nested(isAsync); AssertSql( - @"SELECT `l`.`Id` AS `Id3`, `t`.`Id` AS `Id1` + """ +SELECT `l`.`Id` AS `Id3`, `s`.`Id` AS `Id1` FROM `LevelThree` AS `l` INNER JOIN ( SELECT `l0`.`Id`, `l2`.`Id` AS `Id1` FROM (`LevelOne` AS `l0` LEFT JOIN `LevelTwo` AS `l1` ON `l0`.`Id` = `l1`.`Level1_Required_Id`) LEFT JOIN `LevelThree` AS `l2` ON `l1`.`Id` = `l2`.`Level2_Optional_Id` -) AS `t` ON `l`.`Id` = `t`.`Id1`"); +) AS `s` ON `l`.`Id` = `s`.`Id1` +"""); } public override async Task Join_navigation_nested2(bool isAsync) @@ -492,14 +561,16 @@ public override async Task Join_navigation_nested2(bool isAsync) await base.Join_navigation_nested2(isAsync); AssertSql( - @"SELECT `l`.`Id` AS `Id3`, `t`.`Id` AS `Id1` + """ +SELECT `l`.`Id` AS `Id3`, `s`.`Id` AS `Id1` FROM `LevelThree` AS `l` INNER JOIN ( SELECT `l0`.`Id`, `l2`.`Id` AS `Id1` FROM (`LevelOne` AS `l0` LEFT JOIN `LevelTwo` AS `l1` ON `l0`.`Id` = `l1`.`Level1_Required_Id`) LEFT JOIN `LevelThree` AS `l2` ON `l1`.`Id` = `l2`.`Level2_Optional_Id` -) AS `t` ON `l`.`Id` = `t`.`Id1`"); +) AS `s` ON `l`.`Id` = `s`.`Id1` +"""); } public override async Task Join_navigation_deeply_nested_non_key_join(bool isAsync) @@ -508,7 +579,7 @@ public override async Task Join_navigation_deeply_nested_non_key_join(bool isAsy AssertSql( """ -SELECT `l`.`Id` AS `Id4`, `l`.`Name` AS `Name4`, `t`.`Id` AS `Id1`, `t`.`Name` AS `Name1` +SELECT `l`.`Id` AS `Id4`, `l`.`Name` AS `Name4`, `s`.`Id` AS `Id1`, `s`.`Name` AS `Name1` FROM `LevelFour` AS `l` INNER JOIN ( SELECT `l0`.`Id`, `l0`.`Name`, `l3`.`Name` AS `Name2` @@ -516,7 +587,7 @@ INNER JOIN ( LEFT JOIN `LevelTwo` AS `l1` ON `l0`.`Id` = `l1`.`Level1_Required_Id`) LEFT JOIN `LevelThree` AS `l2` ON `l1`.`Id` = `l2`.`Level2_Optional_Id`) LEFT JOIN `LevelFour` AS `l3` ON `l2`.`Id` = `l3`.`Id` -) AS `t` ON `l`.`Name` = `t`.`Name2` +) AS `s` ON `l`.`Name` = `s`.`Name2` """); } @@ -526,7 +597,7 @@ public override async Task Join_navigation_deeply_nested_required(bool isAsync) AssertSql( """ -SELECT `t`.`Id` AS `Id4`, `t`.`Name` AS `Name4`, `l`.`Id` AS `Id1`, `l`.`Name` AS `Name1` +SELECT `s`.`Id` AS `Id4`, `s`.`Name` AS `Name4`, `l`.`Id` AS `Id1`, `l`.`Name` AS `Name1` FROM `LevelOne` AS `l` INNER JOIN ( SELECT `l0`.`Id`, `l0`.`Name`, `l3`.`Name` AS `Name2` @@ -535,7 +606,7 @@ INNER JOIN ( LEFT JOIN `LevelTwo` AS `l2` ON `l1`.`Level2_Required_Id` = `l2`.`Id`) LEFT JOIN `LevelOne` AS `l3` ON `l2`.`Id` = `l3`.`Id` WHERE `l1`.`Level2_Required_Id` IS NOT NULL AND `l2`.`Id` IS NOT NULL AND `l2`.`Id` IS NOT NULL AND `l3`.`Id` IS NOT NULL -) AS `t` ON `l`.`Name` = `t`.`Name2` +) AS `s` ON `l`.`Name` = `s`.`Name2` """); } @@ -816,15 +887,15 @@ public override async Task SelectMany_navigation_comparison2(bool isAsync) AssertSql( """ - SELECT `t`.`Id` AS `Id1`, `t`.`Id0` AS `Id2` - FROM ( - SELECT `l`.`Id`, `l0`.`Id` AS `Id0`, `l0`.`Level1_Optional_Id` - FROM `LevelOne` AS `l`, - `LevelTwo` AS `l0` - ) AS `t` - LEFT JOIN `LevelOne` AS `l1` ON `t`.`Level1_Optional_Id` = `l1`.`Id` - WHERE `t`.`Id` = `l1`.`Id` - """); +SELECT `s`.`Id` AS `Id1`, `s`.`Id0` AS `Id2` +FROM ( + SELECT `l`.`Id`, `l0`.`Id` AS `Id0`, `l0`.`Level1_Optional_Id` + FROM `LevelOne` AS `l`, + `LevelTwo` AS `l0` +) AS `s` +LEFT JOIN `LevelOne` AS `l1` ON `s`.`Level1_Optional_Id` = `l1`.`Id` +WHERE `s`.`Id` = `l1`.`Id` +"""); } public override async Task SelectMany_navigation_comparison3(bool isAsync) @@ -833,15 +904,15 @@ public override async Task SelectMany_navigation_comparison3(bool isAsync) AssertSql( """ - SELECT `t`.`Id` AS `Id1`, `t`.`Id0` AS `Id2` - FROM ( - SELECT `l`.`Id`, `l0`.`Id` AS `Id0` - FROM `LevelOne` AS `l`, - `LevelTwo` AS `l0` - ) AS `t` - LEFT JOIN `LevelTwo` AS `l1` ON `t`.`Id` = `l1`.`Level1_Optional_Id` - WHERE `l1`.`Id` = `t`.`Id0` - """); +SELECT `s`.`Id` AS `Id1`, `s`.`Id0` AS `Id2` +FROM ( + SELECT `l`.`Id`, `l0`.`Id` AS `Id0` + FROM `LevelOne` AS `l`, + `LevelTwo` AS `l0` +) AS `s` +LEFT JOIN `LevelTwo` AS `l1` ON `s`.`Id` = `l1`.`Level1_Optional_Id` +WHERE `l1`.`Id` = `s`.`Id0` +"""); } public override async Task Where_complex_predicate_with_with_nav_prop_and_OrElse1(bool isAsync) @@ -849,15 +920,15 @@ public override async Task Where_complex_predicate_with_with_nav_prop_and_OrElse await base.Where_complex_predicate_with_with_nav_prop_and_OrElse1(isAsync); AssertSql( -""" -SELECT `t`.`Id` AS `Id1`, `t`.`Id0` AS `Id2` + """ +SELECT `s`.`Id` AS `Id1`, `s`.`Id0` AS `Id2` FROM (( SELECT `l`.`Id`, `l0`.`Id` AS `Id0`, `l0`.`Level1_Required_Id` FROM `LevelOne` AS `l`, `LevelTwo` AS `l0` -) AS `t` -LEFT JOIN `LevelTwo` AS `l1` ON `t`.`Id` = `l1`.`Level1_Optional_Id`) -INNER JOIN `LevelOne` AS `l2` ON `t`.`Level1_Required_Id` = `l2`.`Id` +) AS `s` +LEFT JOIN `LevelTwo` AS `l1` ON `s`.`Id` = `l1`.`Level1_Optional_Id`) +INNER JOIN `LevelOne` AS `l2` ON `s`.`Level1_Required_Id` = `l2`.`Id` WHERE `l1`.`Name` = 'L2 01' OR `l2`.`Name` <> 'Bar' OR `l2`.`Name` IS NULL """); } @@ -1166,13 +1237,15 @@ public override async Task SelectMany_navigation_property_with_another_navigatio await base.SelectMany_navigation_property_with_another_navigation_in_subquery(isAsync); AssertSql( - @"SELECT `t`.`Id`, `t`.`Level2_Optional_Id`, `t`.`Level2_Required_Id`, `t`.`Name`, `t`.`OneToMany_Optional_Inverse3Id`, `t`.`OneToMany_Optional_Self_Inverse3Id`, `t`.`OneToMany_Required_Inverse3Id`, `t`.`OneToMany_Required_Self_Inverse3Id`, `t`.`OneToOne_Optional_PK_Inverse3Id`, `t`.`OneToOne_Optional_Self3Id` + """ +SELECT `s`.`Id`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id` FROM `LevelOne` AS `l` INNER JOIN ( SELECT `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id`, `l0`.`OneToMany_Optional_Inverse2Id` FROM `LevelTwo` AS `l0` LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Optional_Id` -) AS `t` ON `l`.`Id` = `t`.`OneToMany_Optional_Inverse2Id`"); +) AS `s` ON `l`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +"""); } [ConditionalFact] @@ -1191,20 +1264,20 @@ public void Multiple_complex_includes_from_sql() Assert.Equal(13, results.Count); AssertSql( - """ - SELECT `m`.`Id`, `m`.`Date`, `m`.`Name`, `m`.`OneToMany_Optional_Self_Inverse1Id`, `m`.`OneToMany_Required_Self_Inverse1Id`, `m`.`OneToOne_Optional_Self1Id`, `l`.`Id`, `l`.`Date`, `l`.`Level1_Optional_Id`, `l`.`Level1_Required_Id`, `l`.`Name`, `l`.`OneToMany_Optional_Inverse2Id`, `l`.`OneToMany_Optional_Self_Inverse2Id`, `l`.`OneToMany_Required_Inverse2Id`, `l`.`OneToMany_Required_Self_Inverse2Id`, `l`.`OneToOne_Optional_PK_Inverse2Id`, `l`.`OneToOne_Optional_Self2Id`, `l0`.`Id`, `l0`.`Level2_Optional_Id`, `l0`.`Level2_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse3Id`, `l0`.`OneToMany_Optional_Self_Inverse3Id`, `l0`.`OneToMany_Required_Inverse3Id`, `l0`.`OneToMany_Required_Self_Inverse3Id`, `l0`.`OneToOne_Optional_PK_Inverse3Id`, `l0`.`OneToOne_Optional_Self3Id`, `t`.`Id`, `t`.`Date`, `t`.`Level1_Optional_Id`, `t`.`Level1_Required_Id`, `t`.`Name`, `t`.`OneToMany_Optional_Inverse2Id`, `t`.`OneToMany_Optional_Self_Inverse2Id`, `t`.`OneToMany_Required_Inverse2Id`, `t`.`OneToMany_Required_Self_Inverse2Id`, `t`.`OneToOne_Optional_PK_Inverse2Id`, `t`.`OneToOne_Optional_Self2Id`, `t`.`Id0`, `t`.`Level2_Optional_Id`, `t`.`Level2_Required_Id`, `t`.`Name0`, `t`.`OneToMany_Optional_Inverse3Id`, `t`.`OneToMany_Optional_Self_Inverse3Id`, `t`.`OneToMany_Required_Inverse3Id`, `t`.`OneToMany_Required_Self_Inverse3Id`, `t`.`OneToOne_Optional_PK_Inverse3Id`, `t`.`OneToOne_Optional_Self3Id` - FROM ((( - SELECT * FROM `LevelOne` - ) AS `m` - LEFT JOIN `LevelTwo` AS `l` ON `m`.`Id` = `l`.`Level1_Optional_Id`) - LEFT JOIN `LevelThree` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse3Id`) - LEFT JOIN ( - SELECT `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id`, `l2`.`Id` AS `Id0`, `l2`.`Level2_Optional_Id`, `l2`.`Level2_Required_Id`, `l2`.`Name` AS `Name0`, `l2`.`OneToMany_Optional_Inverse3Id`, `l2`.`OneToMany_Optional_Self_Inverse3Id`, `l2`.`OneToMany_Required_Inverse3Id`, `l2`.`OneToMany_Required_Self_Inverse3Id`, `l2`.`OneToOne_Optional_PK_Inverse3Id`, `l2`.`OneToOne_Optional_Self3Id` - FROM `LevelTwo` AS `l1` - LEFT JOIN `LevelThree` AS `l2` ON `l1`.`Id` = `l2`.`Level2_Optional_Id` - ) AS `t` ON `m`.`Id` = `t`.`OneToMany_Optional_Inverse2Id` - ORDER BY `m`.`Id`, `l`.`Id`, `l0`.`Id`, `t`.`Id` - """); + """ +SELECT `m`.`Id`, `m`.`Date`, `m`.`Name`, `m`.`OneToMany_Optional_Self_Inverse1Id`, `m`.`OneToMany_Required_Self_Inverse1Id`, `m`.`OneToOne_Optional_Self1Id`, `l`.`Id`, `l`.`Date`, `l`.`Level1_Optional_Id`, `l`.`Level1_Required_Id`, `l`.`Name`, `l`.`OneToMany_Optional_Inverse2Id`, `l`.`OneToMany_Optional_Self_Inverse2Id`, `l`.`OneToMany_Required_Inverse2Id`, `l`.`OneToMany_Required_Self_Inverse2Id`, `l`.`OneToOne_Optional_PK_Inverse2Id`, `l`.`OneToOne_Optional_Self2Id`, `l0`.`Id`, `l0`.`Level2_Optional_Id`, `l0`.`Level2_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse3Id`, `l0`.`OneToMany_Optional_Self_Inverse3Id`, `l0`.`OneToMany_Required_Inverse3Id`, `l0`.`OneToMany_Required_Self_Inverse3Id`, `l0`.`OneToOne_Optional_PK_Inverse3Id`, `l0`.`OneToOne_Optional_Self3Id`, `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Level2_Optional_Id`, `s`.`Level2_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id`, `s`.`OneToMany_Optional_Self_Inverse3Id`, `s`.`OneToMany_Required_Inverse3Id`, `s`.`OneToMany_Required_Self_Inverse3Id`, `s`.`OneToOne_Optional_PK_Inverse3Id`, `s`.`OneToOne_Optional_Self3Id` +FROM ((( + SELECT * FROM `LevelOne` +) AS `m` +LEFT JOIN `LevelTwo` AS `l` ON `m`.`Id` = `l`.`Level1_Optional_Id`) +LEFT JOIN `LevelThree` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse3Id`) +LEFT JOIN ( + SELECT `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id`, `l2`.`Id` AS `Id0`, `l2`.`Level2_Optional_Id`, `l2`.`Level2_Required_Id`, `l2`.`Name` AS `Name0`, `l2`.`OneToMany_Optional_Inverse3Id`, `l2`.`OneToMany_Optional_Self_Inverse3Id`, `l2`.`OneToMany_Required_Inverse3Id`, `l2`.`OneToMany_Required_Self_Inverse3Id`, `l2`.`OneToOne_Optional_PK_Inverse3Id`, `l2`.`OneToOne_Optional_Self3Id` + FROM `LevelTwo` AS `l1` + LEFT JOIN `LevelThree` AS `l2` ON `l1`.`Id` = `l2`.`Level2_Optional_Id` +) AS `s` ON `m`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +ORDER BY `m`.`Id`, `l`.`Id`, `l0`.`Id`, `s`.`Id` +"""); } } @@ -1270,17 +1343,19 @@ public override async Task Correlated_subquery_doesnt_project_unnecessary_column await base.Correlated_subquery_doesnt_project_unnecessary_columns_in_top_level_join(isAsync); AssertSql( - @"SELECT `l`.`Name` AS `Name1`, `t`.`Id` AS `Id2` + """ +SELECT `l`.`Name` AS `Name1`, `s`.`Id` AS `Id2` FROM `LevelOne` AS `l` INNER JOIN ( SELECT `l0`.`Id`, `l1`.`Id` AS `Id0` FROM `LevelTwo` AS `l0` LEFT JOIN `LevelOne` AS `l1` ON `l0`.`Level1_Optional_Id` = `l1`.`Id` -) AS `t` ON `l`.`Id` = `t`.`Id0` +) AS `s` ON `l`.`Id` = `s`.`Id0` WHERE EXISTS ( SELECT 1 FROM `LevelTwo` AS `l2` - WHERE `l2`.`Level1_Required_Id` = `l`.`Id`)"); + WHERE `l2`.`Level1_Required_Id` = `l`.`Id`) +"""); } public override async Task Correlated_nested_subquery_doesnt_project_unnecessary_columns_in_top_level(bool isAsync) @@ -1380,15 +1455,17 @@ public override async Task Order_by_key_of_projected_navigation_doesnt_get_optim await base.Order_by_key_of_projected_navigation_doesnt_get_optimized_into_FK_access_subquery(isAsync); AssertSql( - @"SELECT `l1`.`Name` + """ +SELECT `l1`.`Name` FROM ( SELECT TOP 10 `l0`.`Id` AS `Id0`, `l0`.`Level1_Required_Id` FROM `LevelThree` AS `l` INNER JOIN `LevelTwo` AS `l0` ON `l`.`Level2_Required_Id` = `l0`.`Id` ORDER BY `l0`.`Id` -) AS `t` -INNER JOIN `LevelOne` AS `l1` ON `t`.`Level1_Required_Id` = `l1`.`Id` -ORDER BY `t`.`Id0`"); +) AS `s` +INNER JOIN `LevelOne` AS `l1` ON `s`.`Level1_Required_Id` = `l1`.`Id` +ORDER BY `s`.`Id0` +"""); } public override async Task Order_by_key_of_anonymous_type_projected_navigation_doesnt_get_optimized_into_FK_access_subquery( @@ -1408,15 +1485,17 @@ public override async Task Optional_navigation_take_optional_navigation(bool isA await base.Optional_navigation_take_optional_navigation(isAsync); AssertSql( - @"SELECT `l1`.`Name` + """ +SELECT `l1`.`Name` FROM ( SELECT TOP 10 `l0`.`Id` AS `Id0` FROM `LevelOne` AS `l` LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` ORDER BY `l0`.`Id` -) AS `t` -LEFT JOIN `LevelThree` AS `l1` ON `t`.`Id0` = `l1`.`Level2_Optional_Id` -ORDER BY `t`.`Id0`"); +) AS `s` +LEFT JOIN `LevelThree` AS `l1` ON `s`.`Id0` = `l1`.`Level2_Optional_Id` +ORDER BY `s`.`Id0` +"""); } public override async Task Projection_select_correct_table_from_subquery_when_materialization_is_not_required(bool isAsync) @@ -1563,14 +1642,16 @@ public override async Task SelectMany_with_navigation_filter_and_explicit_Defaul await base.SelectMany_with_navigation_filter_and_explicit_DefaultIfEmpty(isAsync); AssertSql( - @"SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` FROM `LevelOne` AS `l` LEFT JOIN ( SELECT `l0`.`Id`, `l0`.`OneToMany_Optional_Inverse2Id` FROM `LevelTwo` AS `l0` WHERE `l0`.`Id` > 5 -) AS `t` ON `l`.`Id` = `t`.`OneToMany_Optional_Inverse2Id` -WHERE `t`.`Id` IS NOT NULL"); +) AS `l1` ON `l`.`Id` = `l1`.`OneToMany_Optional_Inverse2Id` +WHERE `l1`.`Id` IS NOT NULL +"""); } public override async Task SelectMany_with_nested_navigation_and_explicit_DefaultIfEmpty(bool isAsync) @@ -1590,15 +1671,17 @@ public override async Task SelectMany_with_nested_navigation_filter_and_explicit await base.SelectMany_with_nested_navigation_filter_and_explicit_DefaultIfEmpty(isAsync); AssertSql( - @"SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` FROM (`LevelOne` AS `l` LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) LEFT JOIN ( SELECT `l1`.`Id`, `l1`.`OneToMany_Optional_Inverse3Id` FROM `LevelThree` AS `l1` WHERE `l1`.`Id` > 5 -) AS `t` ON `l0`.`Id` = `t`.`OneToMany_Optional_Inverse3Id` -WHERE `t`.`Id` IS NOT NULL"); +) AS `l2` ON `l0`.`Id` = `l2`.`OneToMany_Optional_Inverse3Id` +WHERE `l2`.`Id` IS NOT NULL +"""); } public override async Task SelectMany_with_nested_required_navigation_filter_and_explicit_DefaultIfEmpty(bool isAsync) @@ -1606,15 +1689,17 @@ public override async Task SelectMany_with_nested_required_navigation_filter_and await base.SelectMany_with_nested_required_navigation_filter_and_explicit_DefaultIfEmpty(isAsync); AssertSql( - @"SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` FROM (`LevelOne` AS `l` LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Required_Id`) LEFT JOIN ( SELECT `l1`.`Id`, `l1`.`OneToMany_Required_Inverse3Id` FROM `LevelThree` AS `l1` WHERE `l1`.`Id` > 5 -) AS `t` ON `l0`.`Id` = `t`.`OneToMany_Required_Inverse3Id` -WHERE `t`.`Id` IS NOT NULL"); +) AS `l2` ON `l0`.`Id` = `l2`.`OneToMany_Required_Inverse3Id` +WHERE `l2`.`Id` IS NOT NULL +"""); } public override async Task SelectMany_with_nested_navigations_and_additional_joins_outside_of_SelectMany(bool isAsync) @@ -1623,7 +1708,7 @@ public override async Task SelectMany_with_nested_navigations_and_additional_joi AssertSql( """ -SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `t`.`Id2`, `t`.`Date0`, `t`.`Level1_Optional_Id0`, `t`.`Level1_Required_Id0`, `t`.`Name2`, `t`.`OneToMany_Optional_Inverse2Id0`, `t`.`OneToMany_Optional_Self_Inverse2Id0`, `t`.`OneToMany_Required_Inverse2Id0`, `t`.`OneToMany_Required_Self_Inverse2Id0`, `t`.`OneToOne_Optional_PK_Inverse2Id0`, `t`.`OneToOne_Optional_Self2Id0` +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `s`.`Id2`, `s`.`Date0`, `s`.`Level1_Optional_Id0`, `s`.`Level1_Required_Id0`, `s`.`Name2`, `s`.`OneToMany_Optional_Inverse2Id0`, `s`.`OneToMany_Optional_Self_Inverse2Id0`, `s`.`OneToMany_Required_Inverse2Id0`, `s`.`OneToMany_Required_Self_Inverse2Id0`, `s`.`OneToOne_Optional_PK_Inverse2Id0`, `s`.`OneToOne_Optional_Self2Id0` FROM `LevelOne` AS `l` INNER JOIN ( SELECT `l3`.`Id` AS `Id2`, `l3`.`Date` AS `Date0`, `l3`.`Level1_Optional_Id` AS `Level1_Optional_Id0`, `l3`.`Level1_Required_Id` AS `Level1_Required_Id0`, `l3`.`Name` AS `Name2`, `l3`.`OneToMany_Optional_Inverse2Id` AS `OneToMany_Optional_Inverse2Id0`, `l3`.`OneToMany_Optional_Self_Inverse2Id` AS `OneToMany_Optional_Self_Inverse2Id0`, `l3`.`OneToMany_Required_Inverse2Id` AS `OneToMany_Required_Inverse2Id0`, `l3`.`OneToMany_Required_Self_Inverse2Id` AS `OneToMany_Required_Self_Inverse2Id0`, `l3`.`OneToOne_Optional_PK_Inverse2Id` AS `OneToOne_Optional_PK_Inverse2Id0`, `l3`.`OneToOne_Optional_Self2Id` AS `OneToOne_Optional_Self2Id0` @@ -1632,7 +1717,7 @@ INNER JOIN ( LEFT JOIN `LevelTwo` AS `l2` ON `l1`.`Level2_Optional_Id` = `l2`.`Id`) LEFT JOIN `LevelTwo` AS `l3` ON `l2`.`Id` = `l3`.`OneToMany_Required_Self_Inverse2Id` WHERE `l2`.`Id` IS NOT NULL AND `l3`.`OneToMany_Required_Self_Inverse2Id` IS NOT NULL -) AS `t` ON `l`.`Id` = `t`.`Level1_Optional_Id0` +) AS `s` ON `l`.`Id` = `s`.`Level1_Optional_Id0` """); } @@ -1642,7 +1727,8 @@ public override async Task SelectMany_with_nested_navigations_explicit_DefaultIf await base.SelectMany_with_nested_navigations_explicit_DefaultIfEmpty_and_additional_joins_outside_of_SelectMany(isAsync); AssertSql( - @"SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `t`.`Id2`, `t`.`Date0`, `t`.`Level1_Optional_Id0`, `t`.`Level1_Required_Id0`, `t`.`Name2`, `t`.`OneToMany_Optional_Inverse2Id0`, `t`.`OneToMany_Optional_Self_Inverse2Id0`, `t`.`OneToMany_Required_Inverse2Id0`, `t`.`OneToMany_Required_Self_Inverse2Id0`, `t`.`OneToOne_Optional_PK_Inverse2Id0`, `t`.`OneToOne_Optional_Self2Id0` + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `s`.`Id2`, `s`.`Date0`, `s`.`Level1_Optional_Id0`, `s`.`Level1_Required_Id0`, `s`.`Name2`, `s`.`OneToMany_Optional_Inverse2Id0`, `s`.`OneToMany_Optional_Self_Inverse2Id0`, `s`.`OneToMany_Required_Inverse2Id0`, `s`.`OneToMany_Required_Self_Inverse2Id0`, `s`.`OneToOne_Optional_PK_Inverse2Id0`, `s`.`OneToOne_Optional_Self2Id0` FROM `LevelOne` AS `l` INNER JOIN ( SELECT `l3`.`Id` AS `Id2`, `l3`.`Date` AS `Date0`, `l3`.`Level1_Optional_Id` AS `Level1_Optional_Id0`, `l3`.`Level1_Required_Id` AS `Level1_Required_Id0`, `l3`.`Name` AS `Name2`, `l3`.`OneToMany_Optional_Inverse2Id` AS `OneToMany_Optional_Inverse2Id0`, `l3`.`OneToMany_Optional_Self_Inverse2Id` AS `OneToMany_Optional_Self_Inverse2Id0`, `l3`.`OneToMany_Required_Inverse2Id` AS `OneToMany_Required_Inverse2Id0`, `l3`.`OneToMany_Required_Self_Inverse2Id` AS `OneToMany_Required_Self_Inverse2Id0`, `l3`.`OneToOne_Optional_PK_Inverse2Id` AS `OneToOne_Optional_PK_Inverse2Id0`, `l3`.`OneToOne_Optional_Self2Id` AS `OneToOne_Optional_Self2Id0` @@ -1650,7 +1736,8 @@ INNER JOIN ( INNER JOIN `LevelThree` AS `l1` ON `l0`.`Level3_Required_Id` = `l1`.`Id`) LEFT JOIN `LevelTwo` AS `l2` ON `l1`.`Level2_Optional_Id` = `l2`.`Id`) LEFT JOIN `LevelTwo` AS `l3` ON `l2`.`Id` = `l3`.`OneToMany_Required_Self_Inverse2Id` -) AS `t` ON `l`.`Id` = `t`.`Level1_Optional_Id0`"); +) AS `s` ON `l`.`Id` = `s`.`Level1_Optional_Id0` +"""); } public override async Task SelectMany_with_nested_navigations_explicit_DefaultIfEmpty_and_additional_joins_outside_of_SelectMany2( @@ -1709,7 +1796,7 @@ public override async Task Multiple_SelectMany_with_nested_navigations_and_expli AssertSql( """ -SELECT `l2`.`Id`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id`, `t`.`Id2`, `t`.`Date0`, `t`.`Level1_Optional_Id0`, `t`.`Level1_Required_Id0`, `t`.`Name2`, `t`.`OneToMany_Optional_Inverse2Id0`, `t`.`OneToMany_Optional_Self_Inverse2Id0`, `t`.`OneToMany_Required_Inverse2Id0`, `t`.`OneToMany_Required_Self_Inverse2Id0`, `t`.`OneToOne_Optional_PK_Inverse2Id0`, `t`.`OneToOne_Optional_Self2Id0` +SELECT `l2`.`Id`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id`, `s`.`Id2`, `s`.`Date0`, `s`.`Level1_Optional_Id0`, `s`.`Level1_Required_Id0`, `s`.`Name2`, `s`.`OneToMany_Optional_Inverse2Id0`, `s`.`OneToMany_Optional_Self_Inverse2Id0`, `s`.`OneToMany_Required_Inverse2Id0`, `s`.`OneToMany_Required_Self_Inverse2Id0`, `s`.`OneToOne_Optional_PK_Inverse2Id0`, `s`.`OneToOne_Optional_Self2Id0` FROM (((`LevelOne` AS `l` LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Required_Id`) LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Optional_Id`) @@ -1720,8 +1807,8 @@ LEFT JOIN ( INNER JOIN `LevelThree` AS `l4` ON `l3`.`Level3_Required_Id` = `l4`.`Id`) LEFT JOIN `LevelTwo` AS `l5` ON `l4`.`Level2_Optional_Id` = `l5`.`Id`) LEFT JOIN `LevelTwo` AS `l6` ON `l5`.`Id` = `l6`.`OneToMany_Required_Self_Inverse2Id` -) AS `t` ON `l2`.`Id` = `t`.`Id2` -WHERE `l2`.`Id` IS NOT NULL AND `t`.`Id2` IS NOT NULL +) AS `s` ON `l2`.`Id` = `s`.`Id2` +WHERE `l2`.`Id` IS NOT NULL AND `s`.`Id2` IS NOT NULL """); } @@ -1768,15 +1855,17 @@ public override async Task Multiple_SelectMany_with_navigation_and_explicit_Defa await base.Multiple_SelectMany_with_navigation_and_explicit_DefaultIfEmpty(isAsync); AssertSql( - @"SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` FROM (`LevelOne` AS `l` INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id`) LEFT JOIN ( SELECT `l1`.`Id`, `l1`.`OneToMany_Optional_Inverse3Id` FROM `LevelThree` AS `l1` WHERE `l1`.`Id` > 5 -) AS `t` ON `l0`.`Id` = `t`.`OneToMany_Optional_Inverse3Id` -WHERE `t`.`Id` IS NOT NULL"); +) AS `l2` ON `l0`.`Id` = `l2`.`OneToMany_Optional_Inverse3Id` +WHERE `l2`.`Id` IS NOT NULL +"""); } public override async Task SelectMany_with_navigation_filter_paging_and_explicit_DefaultIfEmpty(bool isAsync) @@ -1803,13 +1892,15 @@ public override async Task Select_join_subquery_containing_filter_and_distinct(b await base.Select_join_subquery_containing_filter_and_distinct(isAsync); AssertSql( - $@"SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `t`.`Id`, `t`.`Date`, `t`.`Level1_Optional_Id`, `t`.`Level1_Required_Id`, `t`.`Name`, `t`.`OneToMany_Optional_Inverse2Id`, `t`.`OneToMany_Optional_Self_Inverse2Id`, `t`.`OneToMany_Required_Inverse2Id`, `t`.`OneToMany_Required_Self_Inverse2Id`, `t`.`OneToOne_Optional_PK_Inverse2Id`, `t`.`OneToOne_Optional_Self2Id` + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id` FROM `LevelOne` AS `l` INNER JOIN ( SELECT DISTINCT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` FROM `LevelTwo` AS `l0` WHERE `l0`.`Id` > 2 -) AS `t` ON `l`.`Id` = `t`.`Level1_Optional_Id`"); +) AS `l1` ON `l`.`Id` = `l1`.`Level1_Optional_Id` +"""); } public override async Task Select_join_with_key_selector_being_a_subquery(bool isAsync) @@ -1940,13 +2031,15 @@ public override async Task Optional_navigation_propagates_nullability_to_manuall await base.Optional_navigation_propagates_nullability_to_manually_created_left_join2(isAsync); AssertSql( - @"SELECT `l`.`Name` AS `Name1`, `t`.`Name0` AS `Name2` + """ +SELECT `l`.`Name` AS `Name1`, `s`.`Name0` AS `Name2` FROM `LevelThree` AS `l` LEFT JOIN ( SELECT `l1`.`Id` AS `Id0`, `l1`.`Name` AS `Name0` FROM `LevelOne` AS `l0` LEFT JOIN `LevelTwo` AS `l1` ON `l0`.`Id` = `l1`.`Level1_Optional_Id` -) AS `t` ON `l`.`Level2_Required_Id` = `t`.`Id0`"); +) AS `s` ON `l`.`Level2_Required_Id` = `s`.`Id0` +"""); } public override async Task Null_reference_protection_complex(bool isAsync) @@ -1954,13 +2047,15 @@ public override async Task Null_reference_protection_complex(bool isAsync) await base.Null_reference_protection_complex(isAsync); AssertSql( - @"SELECT `t`.`Name0` + """ +SELECT `s`.`Name0` FROM `LevelThree` AS `l` LEFT JOIN ( SELECT `l1`.`Id` AS `Id0`, `l1`.`Name` AS `Name0` FROM `LevelOne` AS `l0` LEFT JOIN `LevelTwo` AS `l1` ON `l0`.`Id` = `l1`.`Level1_Optional_Id` -) AS `t` ON `l`.`Level2_Required_Id` = `t`.`Id0`"); +) AS `s` ON `l`.`Level2_Required_Id` = `s`.`Id0` +"""); } public override async Task Null_reference_protection_complex_materialization(bool isAsync) @@ -1968,13 +2063,15 @@ public override async Task Null_reference_protection_complex_materialization(boo await base.Null_reference_protection_complex_materialization(isAsync); AssertSql( - @"SELECT `t`.`Id0`, `t`.`Date0`, `t`.`Level1_Optional_Id`, `t`.`Level1_Required_Id`, `t`.`Name0`, `t`.`OneToMany_Optional_Inverse2Id`, `t`.`OneToMany_Optional_Self_Inverse2Id`, `t`.`OneToMany_Required_Inverse2Id`, `t`.`OneToMany_Required_Self_Inverse2Id`, `t`.`OneToOne_Optional_PK_Inverse2Id`, `t`.`OneToOne_Optional_Self2Id` + """ +SELECT `s`.`Id0`, `s`.`Date0`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id` FROM `LevelThree` AS `l` LEFT JOIN ( SELECT `l1`.`Id` AS `Id0`, `l1`.`Date` AS `Date0`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name` AS `Name0`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id` FROM `LevelOne` AS `l0` LEFT JOIN `LevelTwo` AS `l1` ON `l0`.`Id` = `l1`.`Level1_Optional_Id` -) AS `t` ON `l`.`Level2_Required_Id` = `t`.`Id0`"); +) AS `s` ON `l`.`Level2_Required_Id` = `s`.`Id0` +"""); } public override async Task Null_reference_protection_complex_client_eval(bool isAsync) @@ -1982,13 +2079,15 @@ public override async Task Null_reference_protection_complex_client_eval(bool is await base.Null_reference_protection_complex_client_eval(isAsync); AssertSql( - @"SELECT `t`.`Name0` + """ +SELECT `s`.`Name0` FROM `LevelThree` AS `l` LEFT JOIN ( SELECT `l1`.`Id` AS `Id0`, `l1`.`Name` AS `Name0` FROM `LevelOne` AS `l0` LEFT JOIN `LevelTwo` AS `l1` ON `l0`.`Id` = `l1`.`Level1_Optional_Id` -) AS `t` ON `l`.`Level2_Required_Id` = `t`.`Id0`"); +) AS `s` ON `l`.`Level2_Required_Id` = `s`.`Id0` +"""); } public override async Task GroupJoin_with_complex_subquery_with_joins_does_not_get_flattened(bool isAsync) @@ -1996,13 +2095,15 @@ public override async Task GroupJoin_with_complex_subquery_with_joins_does_not_g await base.GroupJoin_with_complex_subquery_with_joins_does_not_get_flattened(isAsync); AssertSql( - @"SELECT `t`.`Id` + """ +SELECT `s`.`Id` FROM `LevelOne` AS `l` LEFT JOIN ( SELECT `l0`.`Id`, `l0`.`Level1_Optional_Id` FROM `LevelTwo` AS `l0` INNER JOIN `LevelOne` AS `l1` ON `l0`.`Level1_Required_Id` = `l1`.`Id` -) AS `t` ON `l`.`Id` = `t`.`Level1_Optional_Id`"); +) AS `s` ON `l`.`Id` = `s`.`Level1_Optional_Id` +"""); } public override async Task GroupJoin_with_complex_subquery_with_joins_does_not_get_flattened2(bool isAsync) @@ -2010,13 +2111,15 @@ public override async Task GroupJoin_with_complex_subquery_with_joins_does_not_g await base.GroupJoin_with_complex_subquery_with_joins_does_not_get_flattened2(isAsync); AssertSql( - @"SELECT `t`.`Id` + """ +SELECT `s`.`Id` FROM `LevelOne` AS `l` LEFT JOIN ( SELECT `l0`.`Id`, `l0`.`Level1_Optional_Id` FROM `LevelTwo` AS `l0` INNER JOIN `LevelOne` AS `l1` ON `l0`.`Level1_Required_Id` = `l1`.`Id` -) AS `t` ON `l`.`Id` = `t`.`Level1_Optional_Id`"); +) AS `s` ON `l`.`Id` = `s`.`Level1_Optional_Id` +"""); } public override async Task GroupJoin_with_complex_subquery_with_joins_does_not_get_flattened3(bool isAsync) @@ -2024,13 +2127,15 @@ public override async Task GroupJoin_with_complex_subquery_with_joins_does_not_g await base.GroupJoin_with_complex_subquery_with_joins_does_not_get_flattened3(isAsync); AssertSql( - @"SELECT `t`.`Id` + """ +SELECT `s`.`Id` FROM `LevelOne` AS `l` LEFT JOIN ( SELECT `l0`.`Id`, `l0`.`Level1_Required_Id` FROM `LevelTwo` AS `l0` LEFT JOIN `LevelOne` AS `l1` ON `l0`.`Level1_Required_Id` = `l1`.`Id` -) AS `t` ON `l`.`Id` = `t`.`Level1_Required_Id`"); +) AS `s` ON `l`.`Id` = `s`.`Level1_Required_Id` +"""); } public override async Task GroupJoin_on_a_subquery_containing_another_GroupJoin_projecting_outer(bool isAsync) @@ -2038,15 +2143,17 @@ public override async Task GroupJoin_on_a_subquery_containing_another_GroupJoin_ await base.GroupJoin_on_a_subquery_containing_another_GroupJoin_projecting_outer(isAsync); AssertSql( - @"SELECT `l1`.`Name` + """ +SELECT `l1`.`Name` FROM ( SELECT TOP 2 `l`.`Id` FROM `LevelOne` AS `l` LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` ORDER BY `l`.`Id` -) AS `t` -LEFT JOIN `LevelTwo` AS `l1` ON `t`.`Id` = `l1`.`Level1_Optional_Id` -ORDER BY `t`.`Id`"); +) AS `s` +LEFT JOIN `LevelTwo` AS `l1` ON `s`.`Id` = `l1`.`Level1_Optional_Id` +ORDER BY `s`.`Id` +"""); } public override async Task GroupJoin_on_a_subquery_containing_another_GroupJoin_projecting_outer_with_client_method(bool isAsync) @@ -2061,15 +2168,17 @@ public override async Task GroupJoin_on_a_subquery_containing_another_GroupJoin_ await base.GroupJoin_on_a_subquery_containing_another_GroupJoin_projecting_inner(isAsync); AssertSql( - @"SELECT `l1`.`Name` + """ +SELECT `l1`.`Name` FROM ( SELECT TOP 2 `l`.`Id`, `l0`.`Level1_Optional_Id` FROM `LevelOne` AS `l` LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` ORDER BY `l`.`Id` -) AS `t` -LEFT JOIN `LevelOne` AS `l1` ON `t`.`Level1_Optional_Id` = `l1`.`Id` -ORDER BY `t`.`Id`"); +) AS `s` +LEFT JOIN `LevelOne` AS `l1` ON `s`.`Level1_Optional_Id` = `l1`.`Id` +ORDER BY `s`.`Id` +"""); } public override async Task GroupJoin_on_a_subquery_containing_another_GroupJoin_with_orderby_on_inner_sequence_projecting_inner( @@ -2078,16 +2187,16 @@ public override async Task GroupJoin_on_a_subquery_containing_another_GroupJoin_ await base.GroupJoin_on_a_subquery_containing_another_GroupJoin_with_orderby_on_inner_sequence_projecting_inner(isAsync); AssertSql( -""" + """ SELECT `l1`.`Name` FROM ( SELECT TOP 2 `l`.`Id`, `l0`.`Level1_Optional_Id` FROM `LevelOne` AS `l` LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` ORDER BY `l`.`Id` -) AS `t` -LEFT JOIN `LevelOne` AS `l1` ON `t`.`Level1_Optional_Id` = `l1`.`Id` -ORDER BY `t`.`Id` +) AS `s` +LEFT JOIN `LevelOne` AS `l1` ON `s`.`Level1_Optional_Id` = `l1`.`Id` +ORDER BY `s`.`Id` """); } @@ -2107,14 +2216,16 @@ public override async Task GroupJoin_on_right_side_being_a_subquery(bool isAsync await base.GroupJoin_on_right_side_being_a_subquery(isAsync); AssertSql( - @"SELECT `l`.`Id`, `t`.`Name` + """ +SELECT `l`.`Id`, `s`.`Name` FROM `LevelTwo` AS `l` LEFT JOIN ( SELECT TOP 2 `l0`.`Id`, `l0`.`Name` FROM `LevelOne` AS `l0` LEFT JOIN `LevelTwo` AS `l1` ON `l0`.`Id` = `l1`.`Level1_Optional_Id` ORDER BY `l1`.`Name` -) AS `t` ON `l`.`Level1_Optional_Id` = `t`.`Id`"); +) AS `s` ON `l`.`Level1_Optional_Id` = `s`.`Id` +"""); } public override async Task GroupJoin_in_subquery_with_client_result_operator(bool isAsync) @@ -2122,7 +2233,7 @@ public override async Task GroupJoin_in_subquery_with_client_result_operator(boo await base.GroupJoin_in_subquery_with_client_result_operator(isAsync); AssertSql( -""" + """ SELECT `l`.`Name` FROM `LevelOne` AS `l` WHERE ( @@ -2131,7 +2242,7 @@ SELECT COUNT(*) SELECT DISTINCT `l0`.`Id`, `l0`.`Date`, `l0`.`Name`, `l0`.`OneToMany_Optional_Self_Inverse1Id`, `l0`.`OneToMany_Required_Self_Inverse1Id`, `l0`.`OneToOne_Optional_Self1Id` FROM `LevelOne` AS `l0` LEFT JOIN `LevelTwo` AS `l1` ON `l0`.`Id` = `l1`.`Level1_Optional_Id` - ) AS `t`) > 7 AND `l`.`Id` < 3 + ) AS `s`) > 7 AND `l`.`Id` < 3 """); } @@ -2155,13 +2266,13 @@ public override async Task GroupJoin_in_subquery_with_client_projection_nested1( await base.GroupJoin_in_subquery_with_client_projection_nested1(isAsync); AssertSql( -""" + """ SELECT `l`.`Name` FROM `LevelOne` AS `l` WHERE ( SELECT COUNT(*) FROM ( - SELECT TOP 10 `l0`.`Id`, `l1`.`Id` AS `Id0` + SELECT TOP 10 1 FROM `LevelOne` AS `l0` LEFT JOIN `LevelTwo` AS `l1` ON `l0`.`Id` = `l1`.`Level1_Optional_Id` WHERE ( @@ -2169,7 +2280,7 @@ SELECT COUNT(*) FROM `LevelOne` AS `l2` LEFT JOIN `LevelTwo` AS `l3` ON `l2`.`Id` = `l3`.`Level1_Optional_Id`) > 7 ORDER BY `l0`.`Id` - ) AS `t`) > 4 AND `l`.`Id` < 2 + ) AS `s`) > 4 AND `l`.`Id` < 2 """); } @@ -2278,14 +2389,14 @@ public override async Task Explicit_GroupJoin_in_subquery_with_unrelated_project await base.Explicit_GroupJoin_in_subquery_with_unrelated_projection2(isAsync); AssertSql( -""" -SELECT `t`.`Id` + """ +SELECT `s`.`Id` FROM ( SELECT DISTINCT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` FROM `LevelOne` AS `l` LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` WHERE `l0`.`Name` <> 'Foo' OR `l0`.`Name` IS NULL -) AS `t` +) AS `s` """); } @@ -2307,15 +2418,15 @@ public override async Task Explicit_GroupJoin_in_subquery_with_unrelated_project await base.Explicit_GroupJoin_in_subquery_with_unrelated_projection4(isAsync); AssertSql( -""" -SELECT TOP 20 `t`.`Id` + """ +SELECT TOP 20 `s`.`Id` FROM ( SELECT DISTINCT `l`.`Id` FROM `LevelOne` AS `l` LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` WHERE `l0`.`Name` <> 'Foo' OR `l0`.`Name` IS NULL -) AS `t` -ORDER BY `t`.`Id` +) AS `s` +ORDER BY `s`.`Id` """); } @@ -2338,7 +2449,8 @@ public override async Task Explicit_GroupJoin_in_subquery_with_multiple_result_o await base.Explicit_GroupJoin_in_subquery_with_multiple_result_operator_distinct_count_materializes_main_clause(isAsync); AssertSql( - $@"SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` + """ +SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` FROM `LevelOne` AS `l` WHERE ( SELECT COUNT(*) @@ -2346,7 +2458,8 @@ SELECT COUNT(*) SELECT DISTINCT `l0`.`Id`, `l0`.`Date`, `l0`.`Name`, `l0`.`OneToMany_Optional_Self_Inverse1Id`, `l0`.`OneToMany_Required_Self_Inverse1Id`, `l0`.`OneToOne_Optional_Self1Id` FROM `LevelOne` AS `l0` LEFT JOIN `LevelTwo` AS `l1` ON `l0`.`Id` = `l1`.`Level1_Optional_Id` - ) AS `t`) > 4"); + ) AS `s`) > 4 +"""); } public override async Task Where_on_multilevel_reference_in_subquery_with_outer_projection(bool isAsync) @@ -2354,10 +2467,10 @@ public override async Task Where_on_multilevel_reference_in_subquery_with_outer_ await base.Where_on_multilevel_reference_in_subquery_with_outer_projection(isAsync); AssertSql( -""" -SELECT `t0`.`Name` + """ +SELECT `s0`.`Name` FROM ( - SELECT TOP 10 `t`.`Name`, `t`.`Level2_Required_Id` + SELECT TOP 10 `s`.`Name`, `s`.`Level2_Required_Id` FROM ( SELECT TOP 10 `l`.`Name`, `l`.`Level2_Required_Id` FROM (`LevelThree` AS `l` @@ -2365,10 +2478,10 @@ public override async Task Where_on_multilevel_reference_in_subquery_with_outer_ LEFT JOIN `LevelOne` AS `l1` ON `l0`.`Level1_Required_Id` = `l1`.`Id` WHERE (`l1`.`Name` IN ('L1 10', 'L1 01')) AND (`l0`.`Level1_Required_Id` IS NOT NULL AND `l1`.`Id` IS NOT NULL) ORDER BY `l`.`Level2_Required_Id` - ) AS `t` - ORDER BY `t`.`Level2_Required_Id` DESC -) AS `t0` -ORDER BY `t0`.`Level2_Required_Id` + ) AS `s` + ORDER BY `s`.`Level2_Required_Id` DESC +) AS `s0` +ORDER BY `s0`.`Level2_Required_Id` """); } @@ -2401,15 +2514,17 @@ public override async Task Nested_group_join_with_take(bool isAsync) await base.Nested_group_join_with_take(isAsync); AssertSql( - @"SELECT `l1`.`Name` + """ +SELECT `l1`.`Name` FROM ( SELECT TOP 2 `l`.`Id`, `l0`.`Id` AS `Id0` FROM `LevelOne` AS `l` LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` ORDER BY `l`.`Id` -) AS `t` -LEFT JOIN `LevelTwo` AS `l1` ON `t`.`Id0` = `l1`.`Level1_Optional_Id` -ORDER BY `t`.`Id`"); +) AS `s` +LEFT JOIN `LevelTwo` AS `l1` ON `s`.`Id0` = `l1`.`Level1_Optional_Id` +ORDER BY `s`.`Id` +"""); } public override async Task Navigation_with_same_navigation_compared_to_null(bool isAsync) @@ -2593,22 +2708,22 @@ public override async Task Member_doesnt_get_pushed_down_into_subquery_with_resu await base.Member_doesnt_get_pushed_down_into_subquery_with_result_operator(isAsync); AssertSql( -""" + """ SELECT ( - SELECT `t1`.`Name` + SELECT `l3`.`Name` FROM ( - SELECT TOP 1 `t0`.`Name`, `t0`.`Id` + SELECT TOP 1 `l2`.`Name`, `l2`.`Id` FROM ( - SELECT TOP 2 `t`.`Name`, `t`.`Id` + SELECT TOP 2 `l1`.`Name`, `l1`.`Id` FROM ( SELECT DISTINCT `l0`.`Id`, `l0`.`Level2_Optional_Id`, `l0`.`Level2_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse3Id`, `l0`.`OneToMany_Optional_Self_Inverse3Id`, `l0`.`OneToMany_Required_Inverse3Id`, `l0`.`OneToMany_Required_Self_Inverse3Id`, `l0`.`OneToOne_Optional_PK_Inverse3Id`, `l0`.`OneToOne_Optional_Self3Id` FROM `LevelThree` AS `l0` - ) AS `t` - ORDER BY `t`.`Id` - ) AS `t0` - ORDER BY `t0`.`Id` DESC - ) AS `t1` - ORDER BY `t1`.`Id`) + ) AS `l1` + ORDER BY `l1`.`Id` + ) AS `l2` + ORDER BY `l2`.`Id` DESC + ) AS `l3` + ORDER BY `l3`.`Id`) FROM `LevelOne` AS `l` WHERE `l`.`Id` < 3 """); @@ -2619,19 +2734,19 @@ public override async Task Subquery_with_Distinct_Skip_FirstOrDefault_without_Or await base.Subquery_with_Distinct_Skip_FirstOrDefault_without_OrderBy(isAsync); AssertSql( -""" + """ SELECT `l`.`Id` AS `Key`, ( - SELECT `t1`.`Name` + SELECT `l3`.`Name` FROM ( - SELECT TOP 1 `t0`.`Name`, `t0`.`Id` + SELECT TOP 1 `l2`.`Name` FROM ( - SELECT TOP 2 `t`.`Name`, `t`.`Id` + SELECT TOP 2 `l1`.`Name` FROM ( SELECT DISTINCT `l0`.`Id`, `l0`.`Level2_Optional_Id`, `l0`.`Level2_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse3Id`, `l0`.`OneToMany_Optional_Self_Inverse3Id`, `l0`.`OneToMany_Required_Inverse3Id`, `l0`.`OneToMany_Required_Self_Inverse3Id`, `l0`.`OneToOne_Optional_PK_Inverse3Id`, `l0`.`OneToOne_Optional_Self3Id` FROM `LevelThree` AS `l0` - ) AS `t` - ) AS `t0` - ) AS `t1`) AS `Subquery` + ) AS `l1` + ) AS `l2` + ) AS `l3`) AS `Subquery` FROM `LevelOne` AS `l` WHERE `l`.`Id` < 3 """); @@ -2657,13 +2772,15 @@ public override async Task Select_optional_navigation_property_string_concat(boo await base.Select_optional_navigation_property_string_concat(isAsync); AssertSql( - @"SELECT (IIF(`l`.`Name` IS NULL, '', `l`.`Name`) & ' ') & IIF(IIF(`t`.`Id` IS NOT NULL, `t`.`Name`, 'NULL') IS NULL, '', IIF(`t`.`Id` IS NOT NULL, `t`.`Name`, 'NULL')) + """ +SELECT (IIF(`l`.`Name` IS NULL, '', `l`.`Name`) & ' ') & IIF(IIF(`l1`.`Id` IS NOT NULL, `l1`.`Name`, 'NULL') IS NULL, '', IIF(`l1`.`Id` IS NOT NULL, `l1`.`Name`, 'NULL')) FROM `LevelOne` AS `l` LEFT JOIN ( SELECT `l0`.`Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id` FROM `LevelTwo` AS `l0` WHERE `l0`.`Id` > 5 -) AS `t` ON `l`.`Id` = `t`.`OneToMany_Optional_Inverse2Id`"); +) AS `l1` ON `l`.`Id` = `l1`.`OneToMany_Optional_Inverse2Id` +"""); } public override async Task Include_reference_with_groupby_in_subquery(bool async) @@ -2793,16 +2910,16 @@ await base AssertSql( """ - SELECT `i`.`Id`, `i`.`Discriminator`, `i`.`InheritanceBase2Id`, `i`.`InheritanceBase2Id1`, `i`.`Name`, `i0`.`Id`, `i0`.`DifferentTypeReference_InheritanceDerived1Id`, `i0`.`InheritanceDerived1Id`, `i0`.`InheritanceDerived1Id1`, `i0`.`InheritanceDerived2Id`, `i0`.`Name`, `i0`.`SameTypeReference_InheritanceDerived1Id`, `i0`.`SameTypeReference_InheritanceDerived2Id`, `t`.`Id`, `t`.`DifferentTypeReference_InheritanceDerived2Id`, `t`.`InheritanceDerived2Id`, `t`.`Name`, `t`.`Id0`, `t`.`InheritanceLeaf2Id`, `t`.`Name0` - FROM (`InheritanceOne` AS `i` - LEFT JOIN `InheritanceLeafOne` AS `i0` ON `i`.`Id` = `i0`.`InheritanceDerived1Id`) - LEFT JOIN ( - SELECT `i1`.`Id`, `i1`.`DifferentTypeReference_InheritanceDerived2Id`, `i1`.`InheritanceDerived2Id`, `i1`.`Name`, `i2`.`Id` AS `Id0`, `i2`.`InheritanceLeaf2Id`, `i2`.`Name` AS `Name0` - FROM `InheritanceLeafTwo` AS `i1` - LEFT JOIN `InheritanceTwo` AS `i2` ON `i1`.`Id` = `i2`.`InheritanceLeaf2Id` - ) AS `t` ON `i`.`Id` = `t`.`InheritanceDerived2Id` - ORDER BY `i`.`Id`, `i0`.`Id`, `t`.`Id` - """); +SELECT `i`.`Id`, `i`.`Discriminator`, `i`.`InheritanceBase2Id`, `i`.`InheritanceBase2Id1`, `i`.`Name`, `i0`.`Id`, `i0`.`DifferentTypeReference_InheritanceDerived1Id`, `i0`.`InheritanceDerived1Id`, `i0`.`InheritanceDerived1Id1`, `i0`.`InheritanceDerived2Id`, `i0`.`Name`, `i0`.`SameTypeReference_InheritanceDerived1Id`, `i0`.`SameTypeReference_InheritanceDerived2Id`, `s`.`Id`, `s`.`DifferentTypeReference_InheritanceDerived2Id`, `s`.`InheritanceDerived2Id`, `s`.`Name`, `s`.`Id0`, `s`.`InheritanceLeaf2Id`, `s`.`Name0` +FROM (`InheritanceOne` AS `i` +LEFT JOIN `InheritanceLeafOne` AS `i0` ON `i`.`Id` = `i0`.`InheritanceDerived1Id`) +LEFT JOIN ( + SELECT `i1`.`Id`, `i1`.`DifferentTypeReference_InheritanceDerived2Id`, `i1`.`InheritanceDerived2Id`, `i1`.`Name`, `i2`.`Id` AS `Id0`, `i2`.`InheritanceLeaf2Id`, `i2`.`Name` AS `Name0` + FROM `InheritanceLeafTwo` AS `i1` + LEFT JOIN `InheritanceTwo` AS `i2` ON `i1`.`Id` = `i2`.`InheritanceLeaf2Id` +) AS `s` ON `i`.`Id` = `s`.`InheritanceDerived2Id` +ORDER BY `i`.`Id`, `i0`.`Id`, `s`.`Id` +"""); } public override async Task String_include_multiple_derived_navigations_complex(bool isAsync) @@ -2810,8 +2927,8 @@ public override async Task String_include_multiple_derived_navigations_complex(b await base.String_include_multiple_derived_navigations_complex(isAsync); AssertSql( -""" -SELECT `i`.`Id`, `i`.`InheritanceLeaf2Id`, `i`.`Name`, `i0`.`Id`, `i0`.`Discriminator`, `i0`.`InheritanceBase2Id`, `i0`.`InheritanceBase2Id1`, `i0`.`Name`, `i1`.`Id`, `i1`.`DifferentTypeReference_InheritanceDerived1Id`, `i1`.`InheritanceDerived1Id`, `i1`.`InheritanceDerived1Id1`, `i1`.`InheritanceDerived2Id`, `i1`.`Name`, `i1`.`SameTypeReference_InheritanceDerived1Id`, `i1`.`SameTypeReference_InheritanceDerived2Id`, `i2`.`Id`, `i2`.`DifferentTypeReference_InheritanceDerived2Id`, `i2`.`InheritanceDerived2Id`, `i2`.`Name`, `t`.`Id`, `t`.`Discriminator`, `t`.`InheritanceBase2Id`, `t`.`InheritanceBase2Id1`, `t`.`Name`, `t`.`Id0`, `t`.`DifferentTypeReference_InheritanceDerived1Id`, `t`.`InheritanceDerived1Id`, `t`.`InheritanceDerived1Id1`, `t`.`InheritanceDerived2Id`, `t`.`Name0`, `t`.`SameTypeReference_InheritanceDerived1Id`, `t`.`SameTypeReference_InheritanceDerived2Id`, `t`.`Id1`, `t`.`DifferentTypeReference_InheritanceDerived1Id0`, `t`.`InheritanceDerived1Id0`, `t`.`InheritanceDerived1Id10`, `t`.`InheritanceDerived2Id0`, `t`.`Name1`, `t`.`SameTypeReference_InheritanceDerived1Id0`, `t`.`SameTypeReference_InheritanceDerived2Id0` + """ +SELECT `i`.`Id`, `i`.`InheritanceLeaf2Id`, `i`.`Name`, `i0`.`Id`, `i0`.`Discriminator`, `i0`.`InheritanceBase2Id`, `i0`.`InheritanceBase2Id1`, `i0`.`Name`, `i1`.`Id`, `i1`.`DifferentTypeReference_InheritanceDerived1Id`, `i1`.`InheritanceDerived1Id`, `i1`.`InheritanceDerived1Id1`, `i1`.`InheritanceDerived2Id`, `i1`.`Name`, `i1`.`SameTypeReference_InheritanceDerived1Id`, `i1`.`SameTypeReference_InheritanceDerived2Id`, `i2`.`Id`, `i2`.`DifferentTypeReference_InheritanceDerived2Id`, `i2`.`InheritanceDerived2Id`, `i2`.`Name`, `s`.`Id`, `s`.`Discriminator`, `s`.`InheritanceBase2Id`, `s`.`InheritanceBase2Id1`, `s`.`Name`, `s`.`Id0`, `s`.`DifferentTypeReference_InheritanceDerived1Id`, `s`.`InheritanceDerived1Id`, `s`.`InheritanceDerived1Id1`, `s`.`InheritanceDerived2Id`, `s`.`Name0`, `s`.`SameTypeReference_InheritanceDerived1Id`, `s`.`SameTypeReference_InheritanceDerived2Id`, `s`.`Id1`, `s`.`DifferentTypeReference_InheritanceDerived1Id0`, `s`.`InheritanceDerived1Id0`, `s`.`InheritanceDerived1Id10`, `s`.`InheritanceDerived2Id0`, `s`.`Name1`, `s`.`SameTypeReference_InheritanceDerived1Id0`, `s`.`SameTypeReference_InheritanceDerived2Id0` FROM (((`InheritanceTwo` AS `i` LEFT JOIN `InheritanceOne` AS `i0` ON `i`.`Id` = `i0`.`InheritanceBase2Id`) LEFT JOIN `InheritanceLeafOne` AS `i1` ON `i0`.`Id` = `i1`.`InheritanceDerived1Id`) @@ -2821,8 +2938,8 @@ LEFT JOIN ( FROM (`InheritanceOne` AS `i3` LEFT JOIN `InheritanceLeafOne` AS `i4` ON `i3`.`Id` = `i4`.`SameTypeReference_InheritanceDerived1Id`) LEFT JOIN `InheritanceLeafOne` AS `i5` ON `i3`.`Id` = `i5`.`SameTypeReference_InheritanceDerived2Id` -) AS `t` ON `i`.`Id` = `t`.`InheritanceBase2Id1` -ORDER BY `i`.`Id`, `i0`.`Id`, `i1`.`Id`, `i2`.`Id`, `t`.`Id`, `t`.`Id0` +) AS `s` ON `i`.`Id` = `s`.`InheritanceBase2Id1` +ORDER BY `i`.`Id`, `i0`.`Id`, `i1`.`Id`, `i2`.`Id`, `s`.`Id`, `s`.`Id0` """); } @@ -3026,12 +3143,14 @@ public override async Task Include18_1(bool isAsync) await base.Include18_1(isAsync); AssertSql( - $@"SELECT `t`.`Id`, `t`.`Date`, `t`.`Name`, `t`.`OneToMany_Optional_Self_Inverse1Id`, `t`.`OneToMany_Required_Self_Inverse1Id`, `t`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` + """ +SELECT `l1`.`Id`, `l1`.`Date`, `l1`.`Name`, `l1`.`OneToMany_Optional_Self_Inverse1Id`, `l1`.`OneToMany_Required_Self_Inverse1Id`, `l1`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` FROM ( SELECT DISTINCT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` FROM `LevelOne` AS `l` -) AS `t` -LEFT JOIN `LevelTwo` AS `l0` ON `t`.`Id` = `l0`.`Level1_Optional_Id`"); +) AS `l1` +LEFT JOIN `LevelTwo` AS `l0` ON `l1`.`Id` = `l0`.`Level1_Optional_Id` +"""); } public override async Task Include18_1_1(bool isAsync) @@ -3039,15 +3158,17 @@ public override async Task Include18_1_1(bool isAsync) await base.Include18_1_1(isAsync); AssertSql( - @"SELECT `t`.`Id`, `t`.`Date`, `t`.`Name`, `t`.`OneToMany_Optional_Self_Inverse1Id`, `t`.`OneToMany_Required_Self_Inverse1Id`, `t`.`OneToOne_Optional_Self1Id`, `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id` + """ +SELECT `s`.`Id`, `s`.`Date`, `s`.`Name`, `s`.`OneToMany_Optional_Self_Inverse1Id`, `s`.`OneToMany_Required_Self_Inverse1Id`, `s`.`OneToOne_Optional_Self1Id`, `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id` FROM ( SELECT TOP 10 `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Name` AS `Name0` FROM `LevelOne` AS `l` LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Required_Id` ORDER BY `l0`.`Name` -) AS `t` -LEFT JOIN `LevelTwo` AS `l1` ON `t`.`Id` = `l1`.`Level1_Optional_Id` -ORDER BY `t`.`Name0`"); +) AS `s` +LEFT JOIN `LevelTwo` AS `l1` ON `s`.`Id` = `l1`.`Level1_Optional_Id` +ORDER BY `s`.`Name0` +"""); } public override async Task Include18_2(bool isAsync) @@ -3055,15 +3176,15 @@ public override async Task Include18_2(bool isAsync) await base.Include18_2(isAsync); AssertSql( -""" -SELECT `t`.`Id`, `t`.`Date`, `t`.`Name`, `t`.`OneToMany_Optional_Self_Inverse1Id`, `t`.`OneToMany_Required_Self_Inverse1Id`, `t`.`OneToOne_Optional_Self1Id`, `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id` + """ +SELECT `s`.`Id`, `s`.`Date`, `s`.`Name`, `s`.`OneToMany_Optional_Self_Inverse1Id`, `s`.`OneToMany_Required_Self_Inverse1Id`, `s`.`OneToOne_Optional_Self1Id`, `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id` FROM ( SELECT DISTINCT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` FROM `LevelOne` AS `l` LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Required_Id` WHERE `l0`.`Name` <> 'Foo' OR `l0`.`Name` IS NULL -) AS `t` -LEFT JOIN `LevelTwo` AS `l1` ON `t`.`Id` = `l1`.`Level1_Optional_Id` +) AS `s` +LEFT JOIN `LevelTwo` AS `l1` ON `s`.`Id` = `l1`.`Level1_Optional_Id` """); } @@ -3073,15 +3194,17 @@ public override async Task Include18_3(bool isAsync) // issue #15783 AssertSql( - @"SELECT `t`.`Id`, `t`.`Date`, `t`.`Name`, `t`.`OneToMany_Optional_Self_Inverse1Id`, `t`.`OneToMany_Required_Self_Inverse1Id`, `t`.`OneToOne_Optional_Self1Id`, `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id` + """ +SELECT `s`.`Id`, `s`.`Date`, `s`.`Name`, `s`.`OneToMany_Optional_Self_Inverse1Id`, `s`.`OneToMany_Required_Self_Inverse1Id`, `s`.`OneToOne_Optional_Self1Id`, `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id` FROM ( SELECT TOP 10 `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Name` AS `Name0` FROM `LevelOne` AS `l` LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Required_Id` ORDER BY `l0`.`Name` -) AS `t` -LEFT JOIN `LevelTwo` AS `l1` ON `t`.`Id` = `l1`.`Level1_Optional_Id` -ORDER BY `t`.`Name0`"); +) AS `s` +LEFT JOIN `LevelTwo` AS `l1` ON `s`.`Id` = `l1`.`Level1_Optional_Id` +ORDER BY `s`.`Name0` +"""); } public override async Task Include18_3_1(bool isAsync) @@ -3090,15 +3213,17 @@ public override async Task Include18_3_1(bool isAsync) // issue #15783 AssertSql( - @"SELECT `t`.`Id`, `t`.`Date`, `t`.`Name`, `t`.`OneToMany_Optional_Self_Inverse1Id`, `t`.`OneToMany_Required_Self_Inverse1Id`, `t`.`OneToOne_Optional_Self1Id`, `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id` + """ +SELECT `s`.`Id`, `s`.`Date`, `s`.`Name`, `s`.`OneToMany_Optional_Self_Inverse1Id`, `s`.`OneToMany_Required_Self_Inverse1Id`, `s`.`OneToOne_Optional_Self1Id`, `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id` FROM ( SELECT TOP 10 `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Name` AS `Name0` FROM `LevelOne` AS `l` LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Required_Id` ORDER BY `l0`.`Name` -) AS `t` -LEFT JOIN `LevelTwo` AS `l1` ON `t`.`Id` = `l1`.`Level1_Optional_Id` -ORDER BY `t`.`Name0`"); +) AS `s` +LEFT JOIN `LevelTwo` AS `l1` ON `s`.`Id` = `l1`.`Level1_Optional_Id` +ORDER BY `s`.`Name0` +"""); } public override async Task Include18_3_2(bool isAsync) @@ -3107,15 +3232,17 @@ public override async Task Include18_3_2(bool isAsync) // issue #15783 AssertSql( - @"SELECT `t`.`Id`, `t`.`Date`, `t`.`Name`, `t`.`OneToMany_Optional_Self_Inverse1Id`, `t`.`OneToMany_Required_Self_Inverse1Id`, `t`.`OneToOne_Optional_Self1Id`, `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id` + """ +SELECT `s`.`Id`, `s`.`Date`, `s`.`Name`, `s`.`OneToMany_Optional_Self_Inverse1Id`, `s`.`OneToMany_Required_Self_Inverse1Id`, `s`.`OneToOne_Optional_Self1Id`, `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id` FROM ( SELECT TOP 10 `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id`, `l0`.`Name` AS `Name0` FROM `LevelOne` AS `l` LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Required_Id` ORDER BY `l0`.`Name` -) AS `t` -LEFT JOIN `LevelTwo` AS `l1` ON `t`.`Id` = `l1`.`Level1_Optional_Id` -ORDER BY `t`.`Name0`"); +) AS `s` +LEFT JOIN `LevelTwo` AS `l1` ON `s`.`Id` = `l1`.`Level1_Optional_Id` +ORDER BY `s`.`Name0` +"""); } public override async Task Include18_3_3(bool isAsync) @@ -3123,13 +3250,15 @@ public override async Task Include18_3_3(bool isAsync) await base.Include18_3_3(isAsync); AssertSql( - @"SELECT `t`.`Id`, `t`.`Date`, `t`.`Level1_Optional_Id`, `t`.`Level1_Required_Id`, `t`.`Name`, `t`.`OneToMany_Optional_Inverse2Id`, `t`.`OneToMany_Optional_Self_Inverse2Id`, `t`.`OneToMany_Required_Inverse2Id`, `t`.`OneToMany_Required_Self_Inverse2Id`, `t`.`OneToOne_Optional_PK_Inverse2Id`, `t`.`OneToOne_Optional_Self2Id`, `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` + """ +SELECT `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `l1`.`Id`, `l1`.`Level2_Optional_Id`, `l1`.`Level2_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse3Id`, `l1`.`OneToMany_Optional_Self_Inverse3Id`, `l1`.`OneToMany_Required_Inverse3Id`, `l1`.`OneToMany_Required_Self_Inverse3Id`, `l1`.`OneToOne_Optional_PK_Inverse3Id`, `l1`.`OneToOne_Optional_Self3Id` FROM ( SELECT DISTINCT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` FROM `LevelOne` AS `l` LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id` -) AS `t` -LEFT JOIN `LevelThree` AS `l1` ON `t`.`Id` = `l1`.`Level2_Optional_Id`"); +) AS `s` +LEFT JOIN `LevelThree` AS `l1` ON `s`.`Id` = `l1`.`Level2_Optional_Id` +"""); } public override async Task Include18_4(bool isAsync) @@ -3138,13 +3267,15 @@ public override async Task Include18_4(bool isAsync) // issue #15783 AssertSql( - @"SELECT `t`.`Id`, `t`.`Date`, `t`.`Name`, `t`.`OneToMany_Optional_Self_Inverse1Id`, `t`.`OneToMany_Required_Self_Inverse1Id`, `t`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id` + """ +SELECT `l1`.`Id`, `l1`.`Date`, `l1`.`Name`, `l1`.`OneToMany_Optional_Self_Inverse1Id`, `l1`.`OneToMany_Required_Self_Inverse1Id`, `l1`.`OneToOne_Optional_Self1Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l2`.`Id`, `l2`.`Date`, `l2`.`Level1_Optional_Id`, `l2`.`Level1_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse2Id`, `l2`.`OneToMany_Optional_Self_Inverse2Id`, `l2`.`OneToMany_Required_Inverse2Id`, `l2`.`OneToMany_Required_Self_Inverse2Id`, `l2`.`OneToOne_Optional_PK_Inverse2Id`, `l2`.`OneToOne_Optional_Self2Id` FROM (( SELECT DISTINCT `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` FROM `LevelOne` AS `l` -) AS `t` -LEFT JOIN `LevelTwo` AS `l0` ON `t`.`Id` = `l0`.`Level1_Optional_Id`) -LEFT JOIN `LevelTwo` AS `l1` ON `t`.`Id` = `l1`.`Level1_Optional_Id`"); +) AS `l1` +LEFT JOIN `LevelTwo` AS `l0` ON `l1`.`Id` = `l0`.`Level1_Optional_Id`) +LEFT JOIN `LevelTwo` AS `l2` ON `l1`.`Id` = `l2`.`Level1_Optional_Id` +"""); } public override async Task Include18(bool isAsync) @@ -3152,15 +3283,17 @@ public override async Task Include18(bool isAsync) await base.Include18(isAsync); AssertSql( - @"SELECT `t`.`Id`, `t`.`Date`, `t`.`Name`, `t`.`OneToMany_Optional_Self_Inverse1Id`, `t`.`OneToMany_Required_Self_Inverse1Id`, `t`.`OneToOne_Optional_Self1Id`, `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` + """ +SELECT `l1`.`Id`, `l1`.`Date`, `l1`.`Name`, `l1`.`OneToMany_Optional_Self_Inverse1Id`, `l1`.`OneToMany_Required_Self_Inverse1Id`, `l1`.`OneToOne_Optional_Self1Id`, `l2`.`Id`, `l2`.`Date`, `l2`.`Level1_Optional_Id`, `l2`.`Level1_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse2Id`, `l2`.`OneToMany_Optional_Self_Inverse2Id`, `l2`.`OneToMany_Required_Inverse2Id`, `l2`.`OneToMany_Required_Self_Inverse2Id`, `l2`.`OneToOne_Optional_PK_Inverse2Id`, `l2`.`OneToOne_Optional_Self2Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` FROM (( SELECT TOP 10 `l`.`Id`, `l`.`Date`, `l`.`Name`, `l`.`OneToMany_Optional_Self_Inverse1Id`, `l`.`OneToMany_Required_Self_Inverse1Id`, `l`.`OneToOne_Optional_Self1Id` FROM `LevelOne` AS `l` ORDER BY `l`.`Id` -) AS `t` -LEFT JOIN `LevelTwo` AS `l0` ON `t`.`Id` = `l0`.`OneToOne_Optional_PK_Inverse2Id`) -LEFT JOIN `LevelTwo` AS `l1` ON `t`.`Id` = `l1`.`Level1_Optional_Id` -ORDER BY `t`.`Id`"); +) AS `l1` +LEFT JOIN `LevelTwo` AS `l0` ON `l1`.`Id` = `l0`.`OneToOne_Optional_PK_Inverse2Id`) +LEFT JOIN `LevelTwo` AS `l2` ON `l1`.`Id` = `l2`.`Level1_Optional_Id` +ORDER BY `l1`.`Id` +"""); } public override async Task Include19(bool isAsync) @@ -3168,13 +3301,15 @@ public override async Task Include19(bool isAsync) await base.Include19(isAsync); AssertSql( - @"SELECT `t`.`Id`, `t`.`Date`, `t`.`Level1_Optional_Id`, `t`.`Level1_Required_Id`, `t`.`Name`, `t`.`OneToMany_Optional_Inverse2Id`, `t`.`OneToMany_Optional_Self_Inverse2Id`, `t`.`OneToMany_Required_Inverse2Id`, `t`.`OneToMany_Required_Self_Inverse2Id`, `t`.`OneToOne_Optional_PK_Inverse2Id`, `t`.`OneToOne_Optional_Self2Id`, `t`.`Id0`, `t`.`Date0`, `t`.`Level1_Optional_Id0`, `t`.`Level1_Required_Id0`, `t`.`Name0`, `t`.`OneToMany_Optional_Inverse2Id0`, `t`.`OneToMany_Optional_Self_Inverse2Id0`, `t`.`OneToMany_Required_Inverse2Id0`, `t`.`OneToMany_Required_Self_Inverse2Id0`, `t`.`OneToOne_Optional_PK_Inverse2Id0`, `t`.`OneToOne_Optional_Self2Id0` + """ +SELECT `s`.`Id`, `s`.`Date`, `s`.`Level1_Optional_Id`, `s`.`Level1_Required_Id`, `s`.`Name`, `s`.`OneToMany_Optional_Inverse2Id`, `s`.`OneToMany_Optional_Self_Inverse2Id`, `s`.`OneToMany_Required_Inverse2Id`, `s`.`OneToMany_Required_Self_Inverse2Id`, `s`.`OneToOne_Optional_PK_Inverse2Id`, `s`.`OneToOne_Optional_Self2Id`, `s`.`Id0`, `s`.`Date0`, `s`.`Level1_Optional_Id0`, `s`.`Level1_Required_Id0`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse2Id0`, `s`.`OneToMany_Optional_Self_Inverse2Id0`, `s`.`OneToMany_Required_Inverse2Id0`, `s`.`OneToMany_Required_Self_Inverse2Id0`, `s`.`OneToOne_Optional_PK_Inverse2Id0`, `s`.`OneToOne_Optional_Self2Id0` FROM ( SELECT DISTINCT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id` AS `Id0`, `l1`.`Date` AS `Date0`, `l1`.`Level1_Optional_Id` AS `Level1_Optional_Id0`, `l1`.`Level1_Required_Id` AS `Level1_Required_Id0`, `l1`.`Name` AS `Name0`, `l1`.`OneToMany_Optional_Inverse2Id` AS `OneToMany_Optional_Inverse2Id0`, `l1`.`OneToMany_Optional_Self_Inverse2Id` AS `OneToMany_Optional_Self_Inverse2Id0`, `l1`.`OneToMany_Required_Inverse2Id` AS `OneToMany_Required_Inverse2Id0`, `l1`.`OneToMany_Required_Self_Inverse2Id` AS `OneToMany_Required_Self_Inverse2Id0`, `l1`.`OneToOne_Optional_PK_Inverse2Id` AS `OneToOne_Optional_PK_Inverse2Id0`, `l1`.`OneToOne_Optional_Self2Id` AS `OneToOne_Optional_Self2Id0` FROM (`LevelOne` AS `l` LEFT JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) LEFT JOIN `LevelTwo` AS `l1` ON `l`.`Id` = `l1`.`OneToOne_Optional_PK_Inverse2Id` -) AS `t`"); +) AS `s` +"""); } public override async Task Include_with_all_method_include_gets_ignored(bool isAsnc) @@ -3182,11 +3317,11 @@ public override async Task Include_with_all_method_include_gets_ignored(bool isA await base.Include_with_all_method_include_gets_ignored(isAsnc); AssertSql( -""" + """ SELECT IIF(NOT EXISTS ( SELECT 1 FROM `LevelOne` AS `l` - WHERE `l`.`Name` = 'Foo' AND `l`.`Name` IS NOT NULL), TRUE, FALSE) + WHERE `l`.`Name` = 'Foo'), TRUE, FALSE) FROM (SELECT COUNT(*) FROM `#Dual`) """); } @@ -3664,47 +3799,6 @@ WHERE IIF(`l0`.`Id` IS NULL, NULL, `l1`.`Name`) <> 'L' OR IIF(`l0`.`Id` IS NULL, """); } - public override async Task Distinct_skip_without_orderby(bool async) - { - await base.Distinct_skip_without_orderby(async); - - AssertSql( - """ -SELECT ( - SELECT TOP(1) [t0].[Name] - FROM ( - SELECT [t].[Id], [t].[Level2_Optional_Id], [t].[Level2_Required_Id], [t].[Name], [t].[OneToMany_Optional_Inverse3Id], [t].[OneToMany_Optional_Self_Inverse3Id], [t].[OneToMany_Required_Inverse3Id], [t].[OneToMany_Required_Self_Inverse3Id], [t].[OneToOne_Optional_PK_Inverse3Id], [t].[OneToOne_Optional_Self3Id] - FROM ( - SELECT DISTINCT [l0].[Id], [l0].[Level2_Optional_Id], [l0].[Level2_Required_Id], [l0].[Name], [l0].[OneToMany_Optional_Inverse3Id], [l0].[OneToMany_Optional_Self_Inverse3Id], [l0].[OneToMany_Required_Inverse3Id], [l0].[OneToMany_Required_Self_Inverse3Id], [l0].[OneToOne_Optional_PK_Inverse3Id], [l0].[OneToOne_Optional_Self3Id] - FROM [LevelThree] AS [l0] - ) AS [t] - ORDER BY (SELECT 1) - OFFSET 1 ROWS - ) AS [t0] - ORDER BY [t0].[Id]) -FROM [LevelOne] AS [l] -WHERE [l].[Id] < 3 -"""); - } - - public override async Task Distinct_take_without_orderby(bool async) - { - await base.Distinct_take_without_orderby(async); - - AssertSql( -""" -SELECT ( - SELECT TOP 1 `t`.`Name` - FROM ( - SELECT DISTINCT TOP 1 `l0`.`Id`, `l0`.`Level2_Optional_Id`, `l0`.`Level2_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse3Id`, `l0`.`OneToMany_Optional_Self_Inverse3Id`, `l0`.`OneToMany_Required_Inverse3Id`, `l0`.`OneToMany_Required_Self_Inverse3Id`, `l0`.`OneToOne_Optional_PK_Inverse3Id`, `l0`.`OneToOne_Optional_Self3Id` - FROM `LevelThree` AS `l0` - ) AS `t` - ORDER BY `t`.`Id`) -FROM `LevelOne` AS `l` -WHERE `l`.`Id` < 3 -"""); - } - public override async Task Let_let_contains_from_outer_let(bool async) { await base.Let_let_contains_from_outer_let(async); @@ -3762,6 +3856,28 @@ ELSE CAST(0 AS bit) """); } + public override async Task Composite_key_join_on_groupby_aggregate_projecting_only_grouping_key2(bool async) + { + await base.Composite_key_join_on_groupby_aggregate_projecting_only_grouping_key2(async); + + AssertSql( + """ +SELECT [l2].[Key] +FROM [LevelOne] AS [l] +INNER JOIN ( + SELECT [l1].[Key], COALESCE(SUM([l1].[Id]), 0) AS [Sum] + FROM ( + SELECT [l0].[Id], [l0].[Id] % 3 AS [Key] + FROM [LevelTwo] AS [l0] + ) AS [l1] + GROUP BY [l1].[Key] +) AS [l2] ON [l].[Id] = [l2].[Key] AND CASE + WHEN [l2].[Sum] <= 10 THEN CAST(0 AS bit) + ELSE CAST(1 AS bit) +END = CAST(1 AS bit) +"""); + } + public override async Task Multiple_joins_groupby_predicate(bool async) { await base.Multiple_joins_groupby_predicate(async); @@ -3775,8 +3891,8 @@ LEFT JOIN ( SELECT `l1`.`Name` AS `Key`, COUNT(*) AS `Count` FROM `LevelThree` AS `l1` GROUP BY `l1`.`Name` -) AS `t` ON `l`.`Name` = `t`.`Key` -WHERE `l0`.`Name` IS NOT NULL OR `t`.`Count` > 0 +) AS `l2` ON `l`.`Name` = `l2`.`Key` +WHERE `l0`.`Name` IS NOT NULL OR `l2`.`Count` > 0 """); } @@ -3871,15 +3987,15 @@ public override async Task Projecting_columns_with_same_name_from_different_enti await base.Projecting_columns_with_same_name_from_different_entities_making_sure_aliasing_works_after_Distinct(async); AssertSql( -""" -SELECT `t`.`Id1` AS `Foo`, `t`.`Id2` AS `Bar`, `t`.`Id3` AS `Baz` + """ +SELECT `s`.`Id1` AS `Foo`, `s`.`Id2` AS `Bar`, `s`.`Id3` AS `Baz` FROM ( SELECT DISTINCT TOP 10 `l`.`Id` AS `Id1`, `l0`.`Id` AS `Id2`, `l1`.`Id` AS `Id3`, `l`.`Name` AS `Name1`, `l0`.`Name` AS `Name2` FROM (`LevelOne` AS `l` INNER JOIN `LevelTwo` AS `l0` ON `l`.`Id` = `l0`.`Level1_Optional_Id`) LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Optional_Id` WHERE `l0`.`Id` IS NOT NULL AND `l1`.`Level2_Optional_Id` IS NOT NULL -) AS `t` +) AS `s` """); } @@ -3896,13 +4012,13 @@ public override async Task SelectMany_without_collection_selector_returning_quer AssertSql( """ -SELECT `t`.`Id`, `t`.`Date`, `t`.`Level1_Optional_Id`, `t`.`Level1_Required_Id`, `t`.`Name`, `t`.`OneToMany_Optional_Inverse2Id`, `t`.`OneToMany_Optional_Self_Inverse2Id`, `t`.`OneToMany_Required_Inverse2Id`, `t`.`OneToMany_Required_Self_Inverse2Id`, `t`.`OneToOne_Optional_PK_Inverse2Id`, `t`.`OneToOne_Optional_Self2Id` +SELECT `l1`.`Id`, `l1`.`Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Optional_Self_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToMany_Required_Self_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`OneToOne_Optional_Self2Id` FROM `LevelOne` AS `l`, ( SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id` FROM `LevelTwo` AS `l0` WHERE `l0`.`Id` < 10 -) AS `t` +) AS `l1` """); } @@ -4254,13 +4370,13 @@ public override async Task GroupJoin_SelectMany_DefaultIfEmpty_with_predicate_us $""" @__prm_0='10' -SELECT `l`.`Id` AS `Id1`, `t`.`Id` AS `Id2` +SELECT `l`.`Id` AS `Id1`, `l1`.`Id` AS `Id2` FROM `LevelOne` AS `l` LEFT JOIN ( SELECT `l0`.`Id`, `l0`.`Level1_Optional_Id` FROM `LevelTwo` AS `l0` WHERE `l0`.`Id` <> {AssertSqlHelper.Parameter("@__prm_0")} -) AS `t` ON `l`.`Id` = `t`.`Level1_Optional_Id` +) AS `l1` ON `l`.`Id` = `l1`.`Level1_Optional_Id` """); } @@ -4272,13 +4388,13 @@ public override async Task GroupJoin_SelectMany_with_predicate_using_closure(boo $""" @__prm_0='10' -SELECT `l`.`Id` AS `Id1`, `t`.`Id` AS `Id2` +SELECT `l`.`Id` AS `Id1`, `l1`.`Id` AS `Id2` FROM `LevelOne` AS `l` INNER JOIN ( SELECT `l0`.`Id`, `l0`.`Level1_Optional_Id` FROM `LevelTwo` AS `l0` WHERE `l0`.`Id` <> {AssertSqlHelper.Parameter("@__prm_0")} -) AS `t` ON `l`.`Id` = `t`.`Level1_Optional_Id` +) AS `l1` ON `l`.`Id` = `l1`.`Level1_Optional_Id` """); } @@ -4291,18 +4407,18 @@ public override async Task GroupJoin_SelectMany_DefaultIfEmpty_with_predicate_us @__prm1_0='10' @__prm2_1='20' -SELECT `l`.`Id` AS `Id1`, `t`.`Id` AS `Id2`, `t0`.`Id` AS `Id3` +SELECT `l`.`Id` AS `Id1`, `l1`.`Id` AS `Id2`, `l3`.`Id` AS `Id3` FROM (`LevelOne` AS `l` LEFT JOIN ( SELECT `l0`.`Id`, `l0`.`Level1_Optional_Id` FROM `LevelTwo` AS `l0` WHERE `l0`.`Id` <> {AssertSqlHelper.Parameter("@__prm1_0")} -) AS `t` ON `l`.`Id` = `t`.`Level1_Optional_Id`) +) AS `l1` ON `l`.`Id` = `l1`.`Level1_Optional_Id`) LEFT JOIN ( - SELECT `l1`.`Id`, `l1`.`Level2_Optional_Id` - FROM `LevelThree` AS `l1` - WHERE `l1`.`Id` <> {AssertSqlHelper.Parameter("@__prm2_1")} -) AS `t0` ON `t`.`Id` = `t0`.`Level2_Optional_Id` + SELECT `l2`.`Id`, `l2`.`Level2_Optional_Id` + FROM `LevelThree` AS `l2` + WHERE `l2`.`Id` <> {AssertSqlHelper.Parameter("@__prm2_1")} +) AS `l3` ON `l1`.`Id` = `l3`.`Level2_Optional_Id` """); } @@ -4315,19 +4431,19 @@ public override async Task GroupJoin_SelectMany_with_predicate_using_closure_nes @__prm1_0='10' @__prm2_1='20' -SELECT `l`.`Id` AS `Id1`, `t`.`Id` AS `Id2`, `t0`.`Id` AS `Id3` +SELECT `l`.`Id` AS `Id1`, `l1`.`Id` AS `Id2`, `l3`.`Id` AS `Id3` FROM (`LevelOne` AS `l` INNER JOIN ( SELECT `l0`.`Id`, `l0`.`Level1_Optional_Id` FROM `LevelTwo` AS `l0` WHERE `l0`.`Id` <> {AssertSqlHelper.Parameter("@__prm1_0")} -) AS `t` ON `l`.`Id` = `t`.`Level1_Optional_Id`) +) AS `l1` ON `l`.`Id` = `l1`.`Level1_Optional_Id`) LEFT JOIN ( - SELECT `l1`.`Id`, `l1`.`Level2_Optional_Id` - FROM `LevelThree` AS `l1` - WHERE `l1`.`Id` <> {AssertSqlHelper.Parameter("@__prm2_1")} -) AS `t0` ON `t`.`Id` = `t0`.`Level2_Optional_Id` -WHERE `t`.`Id` IS NOT NULL AND `t0`.`Level2_Optional_Id` IS NOT NULL + SELECT `l2`.`Id`, `l2`.`Level2_Optional_Id` + FROM `LevelThree` AS `l2` + WHERE `l2`.`Id` <> {AssertSqlHelper.Parameter("@__prm2_1")} +) AS `l3` ON `l1`.`Id` = `l3`.`Level2_Optional_Id` +WHERE `l1`.`Id` IS NOT NULL AND `l3`.`Level2_Optional_Id` IS NOT NULL """); } @@ -4340,18 +4456,18 @@ public override async Task GroupJoin_SelectMany_DefaultIfEmpty_with_predicate_us @__prm_0='10' @__prm_0='10' -SELECT `l`.`Id` AS `Id1`, `t`.`Id` AS `Id2`, `t0`.`Id` AS `Id3` +SELECT `l`.`Id` AS `Id1`, `l1`.`Id` AS `Id2`, `l3`.`Id` AS `Id3` FROM (`LevelOne` AS `l` LEFT JOIN ( SELECT `l0`.`Id`, `l0`.`Level1_Optional_Id` FROM `LevelTwo` AS `l0` WHERE `l0`.`Id` <> {AssertSqlHelper.Parameter("@__prm_0")} -) AS `t` ON `l`.`Id` = `t`.`Level1_Optional_Id`) +) AS `l1` ON `l`.`Id` = `l1`.`Level1_Optional_Id`) LEFT JOIN ( - SELECT `l1`.`Id`, `l1`.`Level2_Optional_Id` - FROM `LevelThree` AS `l1` - WHERE `l1`.`Id` <> {AssertSqlHelper.Parameter("@__prm_0")} -) AS `t0` ON `t`.`Id` = `t0`.`Level2_Optional_Id` + SELECT `l2`.`Id`, `l2`.`Level2_Optional_Id` + FROM `LevelThree` AS `l2` + WHERE `l2`.`Id` <> {AssertSqlHelper.Parameter("@__prm_0")} +) AS `l3` ON `l1`.`Id` = `l3`.`Level2_Optional_Id` """); } @@ -4364,19 +4480,157 @@ public override async Task GroupJoin_SelectMany_with_predicate_using_closure_nes @__prm_0='10' @__prm_0='10' -SELECT `l`.`Id` AS `Id1`, `t`.`Id` AS `Id2`, `t0`.`Id` AS `Id3` +SELECT `l`.`Id` AS `Id1`, `l1`.`Id` AS `Id2`, `l3`.`Id` AS `Id3` FROM (`LevelOne` AS `l` INNER JOIN ( SELECT `l0`.`Id`, `l0`.`Level1_Optional_Id` FROM `LevelTwo` AS `l0` WHERE `l0`.`Id` <> {AssertSqlHelper.Parameter("@__prm_0")} -) AS `t` ON `l`.`Id` = `t`.`Level1_Optional_Id`) +) AS `l1` ON `l`.`Id` = `l1`.`Level1_Optional_Id`) LEFT JOIN ( - SELECT `l1`.`Id`, `l1`.`Level2_Optional_Id` - FROM `LevelThree` AS `l1` - WHERE `l1`.`Id` <> {AssertSqlHelper.Parameter("@__prm_0")} -) AS `t0` ON `t`.`Id` = `t0`.`Level2_Optional_Id` -WHERE `t`.`Id` IS NOT NULL AND `t0`.`Level2_Optional_Id` IS NOT NULL + SELECT `l2`.`Id`, `l2`.`Level2_Optional_Id` + FROM `LevelThree` AS `l2` + WHERE `l2`.`Id` <> {AssertSqlHelper.Parameter("@__prm_0")} +) AS `l3` ON `l1`.`Id` = `l3`.`Level2_Optional_Id` +WHERE `l1`.`Id` IS NOT NULL AND `l3`.`Level2_Optional_Id` IS NOT NULL +"""); + } + + public override async Task Multiple_optional_navs_should_not_deadlock(bool async) + { + await base.Multiple_optional_navs_should_not_deadlock(async); + + AssertSql( + """ +SELECT COUNT(*) +FROM (`LevelTwo` AS `l` +LEFT JOIN `LevelOne` AS `l0` ON `l`.`OneToMany_Optional_Inverse2Id` = `l0`.`Id`) +LEFT JOIN `LevelOne` AS `l1` ON `l`.`Level1_Optional_Id` = `l1`.`Id` +WHERE (`l0`.`Id` IS NOT NULL AND (`l0`.`Name` LIKE '%L1 01%')) OR (`l1`.`Id` IS NOT NULL AND (`l1`.`Name` LIKE '%L1 01%')) +"""); + } + + public override async Task Null_check_removal_applied_recursively_complex(bool async) + { + await base.Null_check_removal_applied_recursively_complex(async); + + AssertSql( + """ +SELECT `l`.`Id`, `l`.`Level2_Optional_Id`, `l`.`Level2_Required_Id`, `l`.`Name`, `l`.`OneToMany_Optional_Inverse3Id`, `l`.`OneToMany_Optional_Self_Inverse3Id`, `l`.`OneToMany_Required_Inverse3Id`, `l`.`OneToMany_Required_Self_Inverse3Id`, `l`.`OneToOne_Optional_PK_Inverse3Id`, `l`.`OneToOne_Optional_Self3Id`, `l0`.`Id`, `l0`.`Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Optional_Self_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToMany_Required_Self_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l0`.`OneToOne_Optional_Self2Id`, `l1`.`Id`, `l1`.`Date`, `l1`.`Name`, `l1`.`OneToMany_Optional_Self_Inverse1Id`, `l1`.`OneToMany_Required_Self_Inverse1Id`, `l1`.`OneToOne_Optional_Self1Id`, `l2`.`Id`, `l2`.`Level3_Optional_Id`, `l2`.`Level3_Required_Id`, `l2`.`Name`, `l2`.`OneToMany_Optional_Inverse4Id`, `l2`.`OneToMany_Optional_Self_Inverse4Id`, `l2`.`OneToMany_Required_Inverse4Id`, `l2`.`OneToMany_Required_Self_Inverse4Id`, `l2`.`OneToOne_Optional_PK_Inverse4Id`, `l2`.`OneToOne_Optional_Self4Id` +FROM ((`LevelThree` AS `l` +INNER JOIN `LevelTwo` AS `l0` ON `l`.`OneToMany_Required_Inverse3Id` = `l0`.`Id`) +LEFT JOIN `LevelOne` AS `l1` ON `l0`.`OneToMany_Required_Inverse2Id` = `l1`.`Id`) +LEFT JOIN `LevelFour` AS `l2` ON `l`.`Id` = `l2`.`OneToMany_Optional_Inverse4Id` +WHERE (`l1`.`Name` = 'L1 01') AND (`l0`.`OneToMany_Required_Inverse2Id` IS NOT NULL AND `l1`.`Id` IS NOT NULL) +ORDER BY `l`.`Id`, `l0`.`Id`, `l1`.`Id` +"""); + } + + public override async Task Correlated_projection_with_first(bool async) + { + await base.Correlated_projection_with_first(async); + + AssertSql( + """ +SELECT [l].[Id], [s].[Id], [s].[Id0] +FROM [LevelOne] AS [l] +OUTER APPLY ( + SELECT [l3].[Id], [l0].[Id] AS [Id0] + FROM [LevelThree] AS [l0] + LEFT JOIN [LevelFour] AS [l3] ON [l0].[Id] = [l3].[Level3_Required_Id] + WHERE ( + SELECT TOP(1) [l1].[Id] + FROM [LevelTwo] AS [l1] + WHERE [l].[Id] = [l1].[OneToMany_Optional_Inverse2Id] + ORDER BY [l1].[Id]) IS NOT NULL AND (( + SELECT TOP(1) [l2].[Id] + FROM [LevelTwo] AS [l2] + WHERE [l].[Id] = [l2].[OneToMany_Optional_Inverse2Id] + ORDER BY [l2].[Id]) = [l0].[OneToMany_Optional_Inverse3Id] OR (( + SELECT TOP(1) [l2].[Id] + FROM [LevelTwo] AS [l2] + WHERE [l].[Id] = [l2].[OneToMany_Optional_Inverse2Id] + ORDER BY [l2].[Id]) IS NULL AND [l0].[OneToMany_Optional_Inverse3Id] IS NULL)) +) AS [s] +ORDER BY [l].[Id], [s].[Id0] +"""); + } + + public override async Task Max_in_multi_level_nested_subquery(bool async) + { + await base.Max_in_multi_level_nested_subquery(async); + + AssertSql( + """ +SELECT `l4`.`Id`, `s`.`Id`, `s`.`Id0`, `s`.`Id1`, `s`.`Result` +FROM ( + SELECT TOP 2 `l`.`Id` + FROM `LevelOne` AS `l` + ORDER BY `l`.`Id` +) AS `l4` +LEFT JOIN ( + SELECT `l0`.`Id`, `l1`.`Id` AS `Id0`, `l2`.`Id` AS `Id1`, IIF(IIF(( + SELECT MAX(`l3`.`Id`) + FROM `LevelFour` AS `l3` + WHERE `l1`.`Id` IS NOT NULL AND `l1`.`Id` = `l3`.`OneToMany_Optional_Inverse4Id`) IS NULL, 0, ( + SELECT MAX(`l3`.`Id`) + FROM `LevelFour` AS `l3` + WHERE `l1`.`Id` IS NOT NULL AND `l1`.`Id` = `l3`.`OneToMany_Optional_Inverse4Id`)) > 1, TRUE, FALSE) AS `Result`, `l0`.`OneToMany_Optional_Inverse2Id` + FROM (`LevelTwo` AS `l0` + LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Level2_Required_Id`) + LEFT JOIN `LevelFour` AS `l2` ON `l1`.`Id` = `l2`.`Level3_Required_Id` +) AS `s` ON `l4`.`Id` = `s`.`OneToMany_Optional_Inverse2Id` +ORDER BY `l4`.`Id`, `s`.`Id`, `s`.`Id0` +"""); + } + + public override async Task Multiple_select_many_in_projection(bool async) + { + await base.Multiple_select_many_in_projection(async); + + AssertSql( + """ +SELECT [l].[Id], [s0].[Id], [s0].[RefId], [s0].[Id0], ( + SELECT COUNT(*) + FROM [LevelTwo] AS [l3] + INNER JOIN [LevelThree] AS [l4] ON [l3].[Id] = [l4].[OneToMany_Optional_Inverse3Id] + WHERE [l].[Id] = [l3].[OneToMany_Optional_Inverse2Id] AND ([l4].[Name] <> N'' OR [l4].[Name] IS NULL)) +FROM [LevelOne] AS [l] +OUTER APPLY ( + SELECT [s].[Id0] AS [Id], [l2].[Id] AS [RefId], [s].[Id] AS [Id0] + FROM ( + SELECT TOP(12) [l0].[Id], [l1].[Id] AS [Id0] + FROM [LevelTwo] AS [l0] + INNER JOIN [LevelThree] AS [l1] ON [l0].[Id] = [l1].[OneToMany_Optional_Inverse3Id] + WHERE [l].[Id] = [l0].[OneToMany_Optional_Inverse2Id] + ORDER BY [l1].[Id] + ) AS [s] + LEFT JOIN [LevelFour] AS [l2] ON [s].[Id0] = [l2].[Level3_Optional_Id] +) AS [s0] +ORDER BY [l].[Id], [s0].[Id], [s0].[Id0] +"""); + } + + public override async Task Single_select_many_in_projection_with_take(bool async) + { + await base.Single_select_many_in_projection_with_take(async); + + AssertSql( + """ +SELECT [l].[Id], [s0].[Id], [s0].[RefId], [s0].[Id0] +FROM [LevelOne] AS [l] +OUTER APPLY ( + SELECT [s].[Id0] AS [Id], [l2].[Id] AS [RefId], [s].[Id] AS [Id0] + FROM ( + SELECT TOP(12) [l0].[Id], [l1].[Id] AS [Id0] + FROM [LevelTwo] AS [l0] + INNER JOIN [LevelThree] AS [l1] ON [l0].[Id] = [l1].[OneToMany_Optional_Inverse3Id] + WHERE [l].[Id] = [l0].[OneToMany_Optional_Inverse2Id] + ORDER BY [l1].[Id] + ) AS [s] + LEFT JOIN [LevelFour] AS [l2] ON [s].[Id0] = [l2].[Level3_Optional_Id] +) AS [s0] +ORDER BY [l].[Id], [s0].[Id], [s0].[Id0] """); } diff --git a/test/EFCore.Jet.FunctionalTests/Query/ComplexTypeQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/ComplexTypeQueryJetTest.cs index e1975842..5976bca6 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/ComplexTypeQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/ComplexTypeQueryJetTest.cs @@ -31,7 +31,7 @@ public override async Task Filter_on_property_inside_complex_type(bool async) AssertSql( """ -SELECT `c`.`Id`, `c`.`Name`, `c`.`BillingAddress_AddressLine1`, `c`.`BillingAddress_AddressLine2`, `c`.`BillingAddress_ZipCode`, `c`.`BillingAddress_Country_Code`, `c`.`BillingAddress_Country_FullName`, `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName` +SELECT `c`.`Id`, `c`.`Name`, `c`.`BillingAddress_AddressLine1`, `c`.`BillingAddress_AddressLine2`, `c`.`BillingAddress_Tags`, `c`.`BillingAddress_ZipCode`, `c`.`BillingAddress_Country_Code`, `c`.`BillingAddress_Country_FullName`, `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_Tags`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName` FROM `Customer` AS `c` WHERE `c`.`ShippingAddress_ZipCode` = 7728 """); @@ -43,7 +43,7 @@ public override async Task Filter_on_property_inside_nested_complex_type(bool as AssertSql( """ -SELECT `c`.`Id`, `c`.`Name`, `c`.`BillingAddress_AddressLine1`, `c`.`BillingAddress_AddressLine2`, `c`.`BillingAddress_ZipCode`, `c`.`BillingAddress_Country_Code`, `c`.`BillingAddress_Country_FullName`, `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName` +SELECT `c`.`Id`, `c`.`Name`, `c`.`BillingAddress_AddressLine1`, `c`.`BillingAddress_AddressLine2`, `c`.`BillingAddress_Tags`, `c`.`BillingAddress_ZipCode`, `c`.`BillingAddress_Country_Code`, `c`.`BillingAddress_Country_FullName`, `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_Tags`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName` FROM `Customer` AS `c` WHERE `c`.`ShippingAddress_Country_Code` = 'DE' """); @@ -93,7 +93,7 @@ public override async Task Filter_on_required_property_inside_required_complex_t AssertSql( """ -SELECT `c`.`Id`, `c`.`OptionalCustomerId`, `c`.`RequiredCustomerId`, `c0`.`Id`, `c0`.`Name`, `c0`.`BillingAddress_AddressLine1`, `c0`.`BillingAddress_AddressLine2`, `c0`.`BillingAddress_ZipCode`, `c0`.`BillingAddress_Country_Code`, `c0`.`BillingAddress_Country_FullName`, `c0`.`ShippingAddress_AddressLine1`, `c0`.`ShippingAddress_AddressLine2`, `c0`.`ShippingAddress_ZipCode`, `c0`.`ShippingAddress_Country_Code`, `c0`.`ShippingAddress_Country_FullName`, `c1`.`Id`, `c1`.`Name`, `c1`.`BillingAddress_AddressLine1`, `c1`.`BillingAddress_AddressLine2`, `c1`.`BillingAddress_ZipCode`, `c1`.`BillingAddress_Country_Code`, `c1`.`BillingAddress_Country_FullName`, `c1`.`ShippingAddress_AddressLine1`, `c1`.`ShippingAddress_AddressLine2`, `c1`.`ShippingAddress_ZipCode`, `c1`.`ShippingAddress_Country_Code`, `c1`.`ShippingAddress_Country_FullName` +SELECT `c`.`Id`, `c`.`OptionalCustomerId`, `c`.`RequiredCustomerId`, `c0`.`Id`, `c0`.`Name`, `c0`.`BillingAddress_AddressLine1`, `c0`.`BillingAddress_AddressLine2`, `c0`.`BillingAddress_Tags`, `c0`.`BillingAddress_ZipCode`, `c0`.`BillingAddress_Country_Code`, `c0`.`BillingAddress_Country_FullName`, `c0`.`ShippingAddress_AddressLine1`, `c0`.`ShippingAddress_AddressLine2`, `c0`.`ShippingAddress_Tags`, `c0`.`ShippingAddress_ZipCode`, `c0`.`ShippingAddress_Country_Code`, `c0`.`ShippingAddress_Country_FullName`, `c1`.`Id`, `c1`.`Name`, `c1`.`BillingAddress_AddressLine1`, `c1`.`BillingAddress_AddressLine2`, `c1`.`BillingAddress_Tags`, `c1`.`BillingAddress_ZipCode`, `c1`.`BillingAddress_Country_Code`, `c1`.`BillingAddress_Country_FullName`, `c1`.`ShippingAddress_AddressLine1`, `c1`.`ShippingAddress_AddressLine2`, `c1`.`ShippingAddress_Tags`, `c1`.`ShippingAddress_ZipCode`, `c1`.`ShippingAddress_Country_Code`, `c1`.`ShippingAddress_Country_FullName` FROM (`CustomerGroup` AS `c` LEFT JOIN `Customer` AS `c0` ON `c`.`OptionalCustomerId` = `c0`.`Id`) INNER JOIN `Customer` AS `c1` ON `c`.`RequiredCustomerId` = `c1`.`Id` @@ -107,7 +107,7 @@ public override async Task Filter_on_required_property_inside_required_complex_t AssertSql( """ -SELECT `c`.`Id`, `c`.`OptionalCustomerId`, `c`.`RequiredCustomerId`, `c1`.`Id`, `c1`.`Name`, `c1`.`BillingAddress_AddressLine1`, `c1`.`BillingAddress_AddressLine2`, `c1`.`BillingAddress_ZipCode`, `c1`.`BillingAddress_Country_Code`, `c1`.`BillingAddress_Country_FullName`, `c1`.`ShippingAddress_AddressLine1`, `c1`.`ShippingAddress_AddressLine2`, `c1`.`ShippingAddress_ZipCode`, `c1`.`ShippingAddress_Country_Code`, `c1`.`ShippingAddress_Country_FullName`, `c0`.`Id`, `c0`.`Name`, `c0`.`BillingAddress_AddressLine1`, `c0`.`BillingAddress_AddressLine2`, `c0`.`BillingAddress_ZipCode`, `c0`.`BillingAddress_Country_Code`, `c0`.`BillingAddress_Country_FullName`, `c0`.`ShippingAddress_AddressLine1`, `c0`.`ShippingAddress_AddressLine2`, `c0`.`ShippingAddress_ZipCode`, `c0`.`ShippingAddress_Country_Code`, `c0`.`ShippingAddress_Country_FullName` +SELECT `c`.`Id`, `c`.`OptionalCustomerId`, `c`.`RequiredCustomerId`, `c1`.`Id`, `c1`.`Name`, `c1`.`BillingAddress_AddressLine1`, `c1`.`BillingAddress_AddressLine2`, `c1`.`BillingAddress_Tags`, `c1`.`BillingAddress_ZipCode`, `c1`.`BillingAddress_Country_Code`, `c1`.`BillingAddress_Country_FullName`, `c1`.`ShippingAddress_AddressLine1`, `c1`.`ShippingAddress_AddressLine2`, `c1`.`ShippingAddress_Tags`, `c1`.`ShippingAddress_ZipCode`, `c1`.`ShippingAddress_Country_Code`, `c1`.`ShippingAddress_Country_FullName`, `c0`.`Id`, `c0`.`Name`, `c0`.`BillingAddress_AddressLine1`, `c0`.`BillingAddress_AddressLine2`, `c0`.`BillingAddress_Tags`, `c0`.`BillingAddress_ZipCode`, `c0`.`BillingAddress_Country_Code`, `c0`.`BillingAddress_Country_FullName`, `c0`.`ShippingAddress_AddressLine1`, `c0`.`ShippingAddress_AddressLine2`, `c0`.`ShippingAddress_Tags`, `c0`.`ShippingAddress_ZipCode`, `c0`.`ShippingAddress_Country_Code`, `c0`.`ShippingAddress_Country_FullName` FROM (`CustomerGroup` AS `c` INNER JOIN `Customer` AS `c0` ON `c`.`RequiredCustomerId` = `c0`.`Id`) LEFT JOIN `Customer` AS `c1` ON `c`.`OptionalCustomerId` = `c1`.`Id` @@ -131,7 +131,7 @@ public override async Task Project_complex_type_via_required_navigation(bool asy AssertSql( """ -SELECT `c0`.`ShippingAddress_AddressLine1`, `c0`.`ShippingAddress_AddressLine2`, `c0`.`ShippingAddress_ZipCode`, `c0`.`ShippingAddress_Country_Code`, `c0`.`ShippingAddress_Country_FullName` +SELECT `c0`.`ShippingAddress_AddressLine1`, `c0`.`ShippingAddress_AddressLine2`, `c0`.`ShippingAddress_Tags`, `c0`.`ShippingAddress_ZipCode`, `c0`.`ShippingAddress_Country_Code`, `c0`.`ShippingAddress_Country_FullName` FROM `CustomerGroup` AS `c` INNER JOIN `Customer` AS `c0` ON `c`.`RequiredCustomerId` = `c0`.`Id` """); @@ -161,7 +161,7 @@ public override async Task Select_complex_type(bool async) AssertSql( """ -SELECT `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName` +SELECT `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_Tags`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName` FROM `Customer` AS `c` """); } @@ -194,7 +194,7 @@ public override async Task Select_complex_type_Where(bool async) AssertSql( """ -SELECT `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName` +SELECT `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_Tags`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName` FROM `Customer` AS `c` WHERE `c`.`ShippingAddress_ZipCode` = 7728 """); @@ -206,7 +206,7 @@ public override async Task Select_complex_type_Distinct(bool async) AssertSql( """ -SELECT DISTINCT `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName` +SELECT DISTINCT `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_Tags`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName` FROM `Customer` AS `c` """); } @@ -217,9 +217,9 @@ public override async Task Complex_type_equals_complex_type(bool async) AssertSql( """ -SELECT `c`.`Id`, `c`.`Name`, `c`.`BillingAddress_AddressLine1`, `c`.`BillingAddress_AddressLine2`, `c`.`BillingAddress_ZipCode`, `c`.`BillingAddress_Country_Code`, `c`.`BillingAddress_Country_FullName`, `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName` +SELECT `c`.`Id`, `c`.`Name`, `c`.`BillingAddress_AddressLine1`, `c`.`BillingAddress_AddressLine2`, `c`.`BillingAddress_Tags`, `c`.`BillingAddress_ZipCode`, `c`.`BillingAddress_Country_Code`, `c`.`BillingAddress_Country_FullName`, `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_Tags`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName` FROM `Customer` AS `c` -WHERE `c`.`ShippingAddress_AddressLine1` = `c`.`BillingAddress_AddressLine1` AND (`c`.`ShippingAddress_AddressLine2` = `c`.`BillingAddress_AddressLine2` OR (`c`.`ShippingAddress_AddressLine2` IS NULL AND `c`.`BillingAddress_AddressLine2` IS NULL)) AND `c`.`ShippingAddress_ZipCode` = `c`.`BillingAddress_ZipCode` +WHERE `c`.`ShippingAddress_AddressLine1` = `c`.`BillingAddress_AddressLine1` AND (`c`.`ShippingAddress_AddressLine2` = `c`.`BillingAddress_AddressLine2` OR (`c`.`ShippingAddress_AddressLine2` IS NULL AND `c`.`BillingAddress_AddressLine2` IS NULL)) AND `c`.`ShippingAddress_Tags` = `c`.`BillingAddress_Tags` AND `c`.`ShippingAddress_ZipCode` = `c`.`BillingAddress_ZipCode` """); } @@ -229,9 +229,9 @@ public override async Task Complex_type_equals_constant(bool async) AssertSql( """ -SELECT `c`.`Id`, `c`.`Name`, `c`.`BillingAddress_AddressLine1`, `c`.`BillingAddress_AddressLine2`, `c`.`BillingAddress_ZipCode`, `c`.`BillingAddress_Country_Code`, `c`.`BillingAddress_Country_FullName`, `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName` +SELECT `c`.`Id`, `c`.`Name`, `c`.`BillingAddress_AddressLine1`, `c`.`BillingAddress_AddressLine2`, `c`.`BillingAddress_Tags`, `c`.`BillingAddress_ZipCode`, `c`.`BillingAddress_Country_Code`, `c`.`BillingAddress_Country_FullName`, `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_Tags`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName` FROM `Customer` AS `c` -WHERE `c`.`ShippingAddress_AddressLine1` = '804 S. Lakeshore Road' AND `c`.`ShippingAddress_AddressLine2` IS NULL AND `c`.`ShippingAddress_ZipCode` = 38654 AND `c`.`ShippingAddress_Country_Code` = 'US' AND `c`.`ShippingAddress_Country_FullName` = 'United States' +WHERE `c`.`ShippingAddress_AddressLine1` = '804 S. Lakeshore Road' AND `c`.`ShippingAddress_AddressLine2` IS NULL AND `c`.`ShippingAddress_Tags` = '["foo","bar"]' AND `c`.`ShippingAddress_ZipCode` = 38654 AND `c`.`ShippingAddress_Country_Code` = 'US' AND `c`.`ShippingAddress_Country_FullName` = 'United States' """); } @@ -242,13 +242,14 @@ public override async Task Complex_type_equals_parameter(bool async) AssertSql( $""" @__entity_equality_address_0_AddressLine1='804 S. Lakeshore Road' (Size = 255) +@__entity_equality_address_0_Tags='["foo","bar"]' (Size = 255) @__entity_equality_address_0_ZipCode='38654' (Nullable = true) -@__entity_equality_address_0_Code='US' (Size = 255) -@__entity_equality_address_0_FullName='United States' (Size = 255) +@__entity_equality_address_0_Country_Code='US' (Size = 255) +@__entity_equality_address_0_Country_FullName='United States' (Size = 255) -SELECT `c`.`Id`, `c`.`Name`, `c`.`BillingAddress_AddressLine1`, `c`.`BillingAddress_AddressLine2`, `c`.`BillingAddress_ZipCode`, `c`.`BillingAddress_Country_Code`, `c`.`BillingAddress_Country_FullName`, `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName` +SELECT `c`.`Id`, `c`.`Name`, `c`.`BillingAddress_AddressLine1`, `c`.`BillingAddress_AddressLine2`, `c`.`BillingAddress_Tags`, `c`.`BillingAddress_ZipCode`, `c`.`BillingAddress_Country_Code`, `c`.`BillingAddress_Country_FullName`, `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_Tags`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName` FROM `Customer` AS `c` -WHERE `c`.`ShippingAddress_AddressLine1` = {AssertSqlHelper.Parameter("@__entity_equality_address_0_AddressLine1")} AND `c`.`ShippingAddress_AddressLine2` IS NULL AND `c`.`ShippingAddress_ZipCode` = {AssertSqlHelper.Parameter("@__entity_equality_address_0_ZipCode")} AND `c`.`ShippingAddress_Country_Code` = {AssertSqlHelper.Parameter("@__entity_equality_address_0_Code")} AND `c`.`ShippingAddress_Country_FullName` = {AssertSqlHelper.Parameter("@__entity_equality_address_0_FullName")} +WHERE `c`.`ShippingAddress_AddressLine1` = {AssertSqlHelper.Parameter("@__entity_equality_address_0_AddressLine1")} AND `c`.`ShippingAddress_AddressLine2` IS NULL AND `c`.`ShippingAddress_Tags` = {AssertSqlHelper.Parameter("@__entity_equality_address_0_Tags")} AND `c`.`ShippingAddress_ZipCode` = {AssertSqlHelper.Parameter("@__entity_equality_address_0_ZipCode")} AND `c`.`ShippingAddress_Country_Code` = {AssertSqlHelper.Parameter("@__entity_equality_address_0_Country_Code")} AND `c`.`ShippingAddress_Country_FullName` = {AssertSqlHelper.Parameter("@__entity_equality_address_0_Country_FullName")} """); } @@ -273,16 +274,17 @@ public override async Task Contains_over_complex_type(bool async) AssertSql( $""" @__entity_equality_address_0_AddressLine1='804 S. Lakeshore Road' (Size = 255) +@__entity_equality_address_0_Tags='["foo","bar"]' (Size = 255) @__entity_equality_address_0_ZipCode='38654' (Nullable = true) -@__entity_equality_address_0_Code='US' (Size = 255) -@__entity_equality_address_0_FullName='United States' (Size = 255) +@__entity_equality_address_0_Country_Code='US' (Size = 255) +@__entity_equality_address_0_Country_FullName='United States' (Size = 255) -SELECT `c`.`Id`, `c`.`Name`, `c`.`BillingAddress_AddressLine1`, `c`.`BillingAddress_AddressLine2`, `c`.`BillingAddress_ZipCode`, `c`.`BillingAddress_Country_Code`, `c`.`BillingAddress_Country_FullName`, `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName` +SELECT `c`.`Id`, `c`.`Name`, `c`.`BillingAddress_AddressLine1`, `c`.`BillingAddress_AddressLine2`, `c`.`BillingAddress_Tags`, `c`.`BillingAddress_ZipCode`, `c`.`BillingAddress_Country_Code`, `c`.`BillingAddress_Country_FullName`, `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_Tags`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName` FROM `Customer` AS `c` WHERE EXISTS ( SELECT 1 FROM `Customer` AS `c0` - WHERE `c0`.`ShippingAddress_AddressLine1` = {AssertSqlHelper.Parameter("@__entity_equality_address_0_AddressLine1")} AND `c0`.`ShippingAddress_AddressLine2` IS NULL AND `c0`.`ShippingAddress_ZipCode` = {AssertSqlHelper.Parameter("@__entity_equality_address_0_ZipCode")} AND `c0`.`ShippingAddress_Country_Code` = {AssertSqlHelper.Parameter("@__entity_equality_address_0_Code")} AND `c0`.`ShippingAddress_Country_FullName` = {AssertSqlHelper.Parameter("@__entity_equality_address_0_FullName")}) + WHERE `c0`.`ShippingAddress_AddressLine1` = {AssertSqlHelper.Parameter("@__entity_equality_address_0_AddressLine1")} AND `c0`.`ShippingAddress_AddressLine2` IS NULL AND `c0`.`ShippingAddress_Tags` = {AssertSqlHelper.Parameter("@__entity_equality_address_0_Tags")} AND `c0`.`ShippingAddress_ZipCode` = {AssertSqlHelper.Parameter("@__entity_equality_address_0_ZipCode")} AND `c0`.`ShippingAddress_Country_Code` = {AssertSqlHelper.Parameter("@__entity_equality_address_0_Country_Code")} AND `c0`.`ShippingAddress_Country_FullName` = {AssertSqlHelper.Parameter("@__entity_equality_address_0_Country_FullName")}) """); } @@ -292,11 +294,11 @@ public override async Task Concat_complex_type(bool async) AssertSql( """ -SELECT `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName` +SELECT `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_Tags`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName` FROM `Customer` AS `c` WHERE `c`.`Id` = 1 UNION ALL -SELECT `c0`.`ShippingAddress_AddressLine1`, `c0`.`ShippingAddress_AddressLine2`, `c0`.`ShippingAddress_ZipCode`, `c0`.`ShippingAddress_Country_Code`, `c0`.`ShippingAddress_Country_FullName` +SELECT `c0`.`ShippingAddress_AddressLine1`, `c0`.`ShippingAddress_AddressLine2`, `c0`.`ShippingAddress_Tags`, `c0`.`ShippingAddress_ZipCode`, `c0`.`ShippingAddress_Country_Code`, `c0`.`ShippingAddress_Country_FullName` FROM `Customer` AS `c0` WHERE `c0`.`Id` = 2 """); @@ -308,11 +310,11 @@ public override async Task Concat_entity_type_containing_complex_property(bool a AssertSql( """ -SELECT `c`.`Id`, `c`.`Name`, `c`.`BillingAddress_AddressLine1`, `c`.`BillingAddress_AddressLine2`, `c`.`BillingAddress_ZipCode`, `c`.`BillingAddress_Country_Code`, `c`.`BillingAddress_Country_FullName`, `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName` +SELECT `c`.`Id`, `c`.`Name`, `c`.`BillingAddress_AddressLine1`, `c`.`BillingAddress_AddressLine2`, `c`.`BillingAddress_Tags`, `c`.`BillingAddress_ZipCode`, `c`.`BillingAddress_Country_Code`, `c`.`BillingAddress_Country_FullName`, `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_Tags`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName` FROM `Customer` AS `c` WHERE `c`.`Id` = 1 UNION ALL -SELECT `c0`.`Id`, `c0`.`Name`, `c0`.`BillingAddress_AddressLine1`, `c0`.`BillingAddress_AddressLine2`, `c0`.`BillingAddress_ZipCode`, `c0`.`BillingAddress_Country_Code`, `c0`.`BillingAddress_Country_FullName`, `c0`.`ShippingAddress_AddressLine1`, `c0`.`ShippingAddress_AddressLine2`, `c0`.`ShippingAddress_ZipCode`, `c0`.`ShippingAddress_Country_Code`, `c0`.`ShippingAddress_Country_FullName` +SELECT `c0`.`Id`, `c0`.`Name`, `c0`.`BillingAddress_AddressLine1`, `c0`.`BillingAddress_AddressLine2`, `c0`.`BillingAddress_Tags`, `c0`.`BillingAddress_ZipCode`, `c0`.`BillingAddress_Country_Code`, `c0`.`BillingAddress_Country_FullName`, `c0`.`ShippingAddress_AddressLine1`, `c0`.`ShippingAddress_AddressLine2`, `c0`.`ShippingAddress_Tags`, `c0`.`ShippingAddress_ZipCode`, `c0`.`ShippingAddress_Country_Code`, `c0`.`ShippingAddress_Country_FullName` FROM `Customer` AS `c0` WHERE `c0`.`Id` = 2 """); @@ -324,11 +326,11 @@ public override async Task Union_entity_type_containing_complex_property(bool as AssertSql( """ -SELECT `c`.`Id`, `c`.`Name`, `c`.`BillingAddress_AddressLine1`, `c`.`BillingAddress_AddressLine2`, `c`.`BillingAddress_ZipCode`, `c`.`BillingAddress_Country_Code`, `c`.`BillingAddress_Country_FullName`, `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName` +SELECT `c`.`Id`, `c`.`Name`, `c`.`BillingAddress_AddressLine1`, `c`.`BillingAddress_AddressLine2`, `c`.`BillingAddress_Tags`, `c`.`BillingAddress_ZipCode`, `c`.`BillingAddress_Country_Code`, `c`.`BillingAddress_Country_FullName`, `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_Tags`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName` FROM `Customer` AS `c` WHERE `c`.`Id` = 1 UNION -SELECT `c0`.`Id`, `c0`.`Name`, `c0`.`BillingAddress_AddressLine1`, `c0`.`BillingAddress_AddressLine2`, `c0`.`BillingAddress_ZipCode`, `c0`.`BillingAddress_Country_Code`, `c0`.`BillingAddress_Country_FullName`, `c0`.`ShippingAddress_AddressLine1`, `c0`.`ShippingAddress_AddressLine2`, `c0`.`ShippingAddress_ZipCode`, `c0`.`ShippingAddress_Country_Code`, `c0`.`ShippingAddress_Country_FullName` +SELECT `c0`.`Id`, `c0`.`Name`, `c0`.`BillingAddress_AddressLine1`, `c0`.`BillingAddress_AddressLine2`, `c0`.`BillingAddress_Tags`, `c0`.`BillingAddress_ZipCode`, `c0`.`BillingAddress_Country_Code`, `c0`.`BillingAddress_Country_FullName`, `c0`.`ShippingAddress_AddressLine1`, `c0`.`ShippingAddress_AddressLine2`, `c0`.`ShippingAddress_Tags`, `c0`.`ShippingAddress_ZipCode`, `c0`.`ShippingAddress_Country_Code`, `c0`.`ShippingAddress_Country_FullName` FROM `Customer` AS `c0` WHERE `c0`.`Id` = 2 """); @@ -340,11 +342,11 @@ public override async Task Union_complex_type(bool async) AssertSql( """ -SELECT `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName` +SELECT `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_Tags`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName` FROM `Customer` AS `c` WHERE `c`.`Id` = 1 UNION -SELECT `c0`.`ShippingAddress_AddressLine1`, `c0`.`ShippingAddress_AddressLine2`, `c0`.`ShippingAddress_ZipCode`, `c0`.`ShippingAddress_Country_Code`, `c0`.`ShippingAddress_Country_FullName` +SELECT `c0`.`ShippingAddress_AddressLine1`, `c0`.`ShippingAddress_AddressLine2`, `c0`.`ShippingAddress_Tags`, `c0`.`ShippingAddress_ZipCode`, `c0`.`ShippingAddress_Country_Code`, `c0`.`ShippingAddress_Country_FullName` FROM `Customer` AS `c0` WHERE `c0`.`Id` = 2 """); @@ -608,12 +610,12 @@ public override async Task Struct_complex_type_equals_parameter(bool async) $""" @__entity_equality_address_0_AddressLine1='804 S. Lakeshore Road' (Size = 255) @__entity_equality_address_0_ZipCode='38654' (Nullable = true) -@__entity_equality_address_0_Code='US' (Size = 255) -@__entity_equality_address_0_FullName='United States' (Size = 255) +@__entity_equality_address_0_Country_Code='US' (Size = 255) +@__entity_equality_address_0_Country_FullName='United States' (Size = 255) SELECT `v`.`Id`, `v`.`Name`, `v`.`BillingAddress_AddressLine1`, `v`.`BillingAddress_AddressLine2`, `v`.`BillingAddress_ZipCode`, `v`.`BillingAddress_Country_Code`, `v`.`BillingAddress_Country_FullName`, `v`.`ShippingAddress_AddressLine1`, `v`.`ShippingAddress_AddressLine2`, `v`.`ShippingAddress_ZipCode`, `v`.`ShippingAddress_Country_Code`, `v`.`ShippingAddress_Country_FullName` FROM `ValuedCustomer` AS `v` -WHERE `v`.`ShippingAddress_AddressLine1` = {AssertSqlHelper.Parameter("@__entity_equality_address_0_AddressLine1")} AND `v`.`ShippingAddress_AddressLine2` IS NULL AND `v`.`ShippingAddress_ZipCode` = {AssertSqlHelper.Parameter("@__entity_equality_address_0_ZipCode")} AND `v`.`ShippingAddress_Country_Code` = {AssertSqlHelper.Parameter("@__entity_equality_address_0_Code")} AND `v`.`ShippingAddress_Country_FullName` = {AssertSqlHelper.Parameter("@__entity_equality_address_0_FullName")} +WHERE `v`.`ShippingAddress_AddressLine1` = {AssertSqlHelper.Parameter("@__entity_equality_address_0_AddressLine1")} AND `v`.`ShippingAddress_AddressLine2` IS NULL AND `v`.`ShippingAddress_ZipCode` = {AssertSqlHelper.Parameter("@__entity_equality_address_0_ZipCode")} AND `v`.`ShippingAddress_Country_Code` = {AssertSqlHelper.Parameter("@__entity_equality_address_0_Country_Code")} AND `v`.`ShippingAddress_Country_FullName` = {AssertSqlHelper.Parameter("@__entity_equality_address_0_Country_FullName")} """); } @@ -632,15 +634,15 @@ public override async Task Contains_over_struct_complex_type(bool async) $""" @__entity_equality_address_0_AddressLine1='804 S. Lakeshore Road' (Size = 255) @__entity_equality_address_0_ZipCode='38654' (Nullable = true) -@__entity_equality_address_0_Code='US' (Size = 255) -@__entity_equality_address_0_FullName='United States' (Size = 255) +@__entity_equality_address_0_Country_Code='US' (Size = 255) +@__entity_equality_address_0_Country_FullName='United States' (Size = 255) SELECT `v`.`Id`, `v`.`Name`, `v`.`BillingAddress_AddressLine1`, `v`.`BillingAddress_AddressLine2`, `v`.`BillingAddress_ZipCode`, `v`.`BillingAddress_Country_Code`, `v`.`BillingAddress_Country_FullName`, `v`.`ShippingAddress_AddressLine1`, `v`.`ShippingAddress_AddressLine2`, `v`.`ShippingAddress_ZipCode`, `v`.`ShippingAddress_Country_Code`, `v`.`ShippingAddress_Country_FullName` FROM `ValuedCustomer` AS `v` WHERE EXISTS ( SELECT 1 FROM `ValuedCustomer` AS `v0` - WHERE `v0`.`ShippingAddress_AddressLine1` = {AssertSqlHelper.Parameter("@__entity_equality_address_0_AddressLine1")} AND `v0`.`ShippingAddress_AddressLine2` IS NULL AND `v0`.`ShippingAddress_ZipCode` = {AssertSqlHelper.Parameter("@__entity_equality_address_0_ZipCode")} AND `v0`.`ShippingAddress_Country_Code` = {AssertSqlHelper.Parameter("@__entity_equality_address_0_Code")} AND `v0`.`ShippingAddress_Country_FullName` = {AssertSqlHelper.Parameter("@__entity_equality_address_0_FullName")}) + WHERE `v0`.`ShippingAddress_AddressLine1` = {AssertSqlHelper.Parameter("@__entity_equality_address_0_AddressLine1")} AND `v0`.`ShippingAddress_AddressLine2` IS NULL AND `v0`.`ShippingAddress_ZipCode` = {AssertSqlHelper.Parameter("@__entity_equality_address_0_ZipCode")} AND `v0`.`ShippingAddress_Country_Code` = {AssertSqlHelper.Parameter("@__entity_equality_address_0_Country_Code")} AND `v0`.`ShippingAddress_Country_FullName` = {AssertSqlHelper.Parameter("@__entity_equality_address_0_Country_FullName")}) """); } @@ -757,7 +759,7 @@ public virtual Task Filter_on_property_inside_complex_type_with_FromSql(bool asy async, ss => ((DbSet)ss.Set()).FromSqlRaw( """ -SELECT [c].[Id], [c].[Name], [c].[BillingAddress_AddressLine1], [c].[BillingAddress_AddressLine2], [c].[BillingAddress_ZipCode], [c].[BillingAddress_Country_Code], [c].[BillingAddress_Country_FullName], [c].[ShippingAddress_AddressLine1], [c].[ShippingAddress_AddressLine2], [c].[ShippingAddress_ZipCode], [c].[ShippingAddress_Country_Code], [c].[ShippingAddress_Country_FullName] +SELECT [c].[Id], [c].[Name], [c].[BillingAddress_AddressLine1], [c].[BillingAddress_AddressLine2], [c].[BillingAddress_Tags], [c].[BillingAddress_ZipCode], [c].[BillingAddress_Country_Code], [c].[BillingAddress_Country_FullName], [c].[ShippingAddress_AddressLine1], [c].[ShippingAddress_AddressLine2], [c].[ShippingAddress_Tags], [c].[ShippingAddress_ZipCode], [c].[ShippingAddress_Country_Code], [c].[ShippingAddress_Country_FullName] FROM [Customer] AS [c] WHERE [c].[ShippingAddress_ZipCode] = 7728 """), @@ -770,9 +772,9 @@ public virtual Task Filter_on_property_inside_complex_type_after_subquery_with_F async, ss => ((DbSet)ss.Set()).FromSql( $""" - SELECT DISTINCT [t].[Id], [t].[Name], [t].[BillingAddress_AddressLine1], [t].[BillingAddress_AddressLine2], [t].[BillingAddress_ZipCode], [t].[BillingAddress_Country_Code], [t].[BillingAddress_Country_FullName], [t].[ShippingAddress_AddressLine1], [t].[ShippingAddress_AddressLine2], [t].[ShippingAddress_ZipCode], [t].[ShippingAddress_Country_Code], [t].[ShippingAddress_Country_FullName] + SELECT DISTINCT [t].[Id], [t].[Name], [t].[BillingAddress_AddressLine1], [t].[BillingAddress_AddressLine2], [t].[BillingAddress_Tags], [t].[BillingAddress_ZipCode], [t].[BillingAddress_Country_Code], [t].[BillingAddress_Country_FullName], [t].[ShippingAddress_AddressLine1], [t].[ShippingAddress_AddressLine2], [t].[ShippingAddress_Tags], [t].[ShippingAddress_ZipCode], [t].[ShippingAddress_Country_Code], [t].[ShippingAddress_Country_FullName] FROM ( - SELECT [c].[Id], [c].[Name], [c].[BillingAddress_AddressLine1], [c].[BillingAddress_AddressLine2], [c].[BillingAddress_ZipCode], [c].[BillingAddress_Country_Code], [c].[BillingAddress_Country_FullName], [c].[ShippingAddress_AddressLine1], [c].[ShippingAddress_AddressLine2], [c].[ShippingAddress_ZipCode], [c].[ShippingAddress_Country_Code], [c].[ShippingAddress_Country_FullName] + SELECT [c].[Id], [c].[Name], [c].[BillingAddress_AddressLine1], [c].[BillingAddress_AddressLine2], [c].[BillingAddress_Tags], [c].[BillingAddress_ZipCode], [c].[BillingAddress_Country_Code], [c].[BillingAddress_Country_FullName], [c].[ShippingAddress_AddressLine1], [c].[ShippingAddress_AddressLine2], [c].[ShippingAddress_Tags], [c].[ShippingAddress_ZipCode], [c].[ShippingAddress_Country_Code], [c].[ShippingAddress_Country_FullName] FROM [Customer] AS [c] ORDER BY [c].[Id] OFFSET {1} ROWS @@ -792,9 +794,9 @@ public virtual Task Load_complex_type_after_subquery_on_entity_type_with_FromSql async, ss => ((DbSet)ss.Set()).FromSql( $""" - SELECT DISTINCT [t].[Id], [t].[Name], [t].[BillingAddress_AddressLine1], [t].[BillingAddress_AddressLine2], [t].[BillingAddress_ZipCode], [t].[BillingAddress_Country_Code], [t].[BillingAddress_Country_FullName], [t].[ShippingAddress_AddressLine1], [t].[ShippingAddress_AddressLine2], [t].[ShippingAddress_ZipCode], [t].[ShippingAddress_Country_Code], [t].[ShippingAddress_Country_FullName] + SELECT DISTINCT [t].[Id], [t].[Name], [t].[BillingAddress_AddressLine1], [t].[BillingAddress_AddressLine2], [t].[BillingAddress_Tags], [t].[BillingAddress_ZipCode], [t].[BillingAddress_Country_Code], [t].[BillingAddress_Country_FullName], [t].[ShippingAddress_AddressLine1], [t].[ShippingAddress_AddressLine2], [t].[ShippingAddress_Tags], [t].[ShippingAddress_ZipCode], [t].[ShippingAddress_Country_Code], [t].[ShippingAddress_Country_FullName] FROM ( - SELECT [c].[Id], [c].[Name], [c].[BillingAddress_AddressLine1], [c].[BillingAddress_AddressLine2], [c].[BillingAddress_ZipCode], [c].[BillingAddress_Country_Code], [c].[BillingAddress_Country_FullName], [c].[ShippingAddress_AddressLine1], [c].[ShippingAddress_AddressLine2], [c].[ShippingAddress_ZipCode], [c].[ShippingAddress_Country_Code], [c].[ShippingAddress_Country_FullName] + SELECT [c].[Id], [c].[Name], [c].[BillingAddress_AddressLine1], [c].[BillingAddress_AddressLine2], [c].[BillingAddress_Tags], [c].[BillingAddress_ZipCode], [c].[BillingAddress_Country_Code], [c].[BillingAddress_Country_FullName], [c].[ShippingAddress_AddressLine1], [c].[ShippingAddress_AddressLine2], [c].[ShippingAddress_Tags], [c].[ShippingAddress_ZipCode], [c].[ShippingAddress_Country_Code], [c].[ShippingAddress_Country_FullName] FROM [Customer] AS [c] ORDER BY [c].[Id] OFFSET {1} ROWS @@ -812,7 +814,7 @@ public virtual Task Select_complex_type_with_FromSql(bool async) async, ss => ((DbSet)ss.Set()).FromSqlRaw( """ - SELECT [c].[ShippingAddress_AddressLine1], [c].[ShippingAddress_AddressLine2], [c].[ShippingAddress_ZipCode], [c].[ShippingAddress_Country_Code], [c].[ShippingAddress_Country_FullName] + SELECT [c].[ShippingAddress_AddressLine1], [c].[ShippingAddress_AddressLine2], [c].[ShippingAddress_Tags], [c].[ShippingAddress_ZipCode], [c].[ShippingAddress_Country_Code], [c].[ShippingAddress_Country_FullName] FROM [Customer] AS [c] """).Select(c => c.ShippingAddress), ss => ss.Set().Select(c => c.ShippingAddress)); @@ -848,9 +850,8 @@ public virtual Task Select_complex_type_Where_with_FromSql(bool async) async, ss => ((DbSet)ss.Set()).FromSqlRaw( """ - SELECT [c].[ShippingAddress_AddressLine1], [c].[ShippingAddress_AddressLine2], [c].[ShippingAddress_ZipCode], [c].[ShippingAddress_Country_Code], [c].[ShippingAddress_Country_FullName] + SELECT [c].[ShippingAddress_AddressLine1], [c].[ShippingAddress_AddressLine2], [c].[ShippingAddress_Tags], [c].[ShippingAddress_ZipCode], [c].[ShippingAddress_Country_Code], [c].[ShippingAddress_Country_FullName] FROM [Customer] AS [c] - WHERE [c].[ShippingAddress_ZipCode] = 7728 """).Select(c => c.ShippingAddress).Where(a => a.ZipCode == 07728), ss => ss.Set().Select(c => c.ShippingAddress).Where(a => a.ZipCode == 07728)); @@ -861,7 +862,7 @@ public virtual Task Select_complex_type_Distinct_with_FromSql(bool async) async, ss => ((DbSet)ss.Set()).FromSqlRaw( """ - SELECT DISTINCT [c].[ShippingAddress_AddressLine1], [c].[ShippingAddress_AddressLine2], [c].[ShippingAddress_ZipCode], [c].[ShippingAddress_Country_Code], [c].[ShippingAddress_Country_FullName] + SELECT [c].[ShippingAddress_AddressLine1], [c].[ShippingAddress_AddressLine2], [c].[ShippingAddress_Tags], [c].[ShippingAddress_ZipCode], [c].[ShippingAddress_Country_Code], [c].[ShippingAddress_Country_FullName] FROM [Customer] AS [c] """).Select(c => c.ShippingAddress).Distinct(), ss => ss.Set().Select(c => c.ShippingAddress).Distinct()); @@ -871,13 +872,13 @@ public override async Task Project_same_entity_with_nested_complex_type_twice_wi await base.Project_same_entity_with_nested_complex_type_twice_with_pushdown(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`Name`, `t`.`BillingAddress_AddressLine1`, `t`.`BillingAddress_AddressLine2`, `t`.`BillingAddress_ZipCode`, `t`.`BillingAddress_Country_Code`, `t`.`BillingAddress_Country_FullName`, `t`.`ShippingAddress_AddressLine1`, `t`.`ShippingAddress_AddressLine2`, `t`.`ShippingAddress_ZipCode`, `t`.`ShippingAddress_Country_Code`, `t`.`ShippingAddress_Country_FullName`, `t`.`Id0`, `t`.`Name0`, `t`.`BillingAddress_AddressLine10`, `t`.`BillingAddress_AddressLine20`, `t`.`BillingAddress_ZipCode0`, `t`.`BillingAddress_Country_Code0`, `t`.`BillingAddress_Country_FullName0`, `t`.`ShippingAddress_AddressLine10`, `t`.`ShippingAddress_AddressLine20`, `t`.`ShippingAddress_ZipCode0`, `t`.`ShippingAddress_Country_Code0`, `t`.`ShippingAddress_Country_FullName0` + """ +SELECT `s`.`Id`, `s`.`Name`, `s`.`BillingAddress_AddressLine1`, `s`.`BillingAddress_AddressLine2`, `s`.`BillingAddress_Tags`, `s`.`BillingAddress_ZipCode`, `s`.`BillingAddress_Country_Code`, `s`.`BillingAddress_Country_FullName`, `s`.`ShippingAddress_AddressLine1`, `s`.`ShippingAddress_AddressLine2`, `s`.`ShippingAddress_Tags`, `s`.`ShippingAddress_ZipCode`, `s`.`ShippingAddress_Country_Code`, `s`.`ShippingAddress_Country_FullName`, `s`.`Id0`, `s`.`Name0`, `s`.`BillingAddress_AddressLine10`, `s`.`BillingAddress_AddressLine20`, `s`.`BillingAddress_Tags0`, `s`.`BillingAddress_ZipCode0`, `s`.`BillingAddress_Country_Code0`, `s`.`BillingAddress_Country_FullName0`, `s`.`ShippingAddress_AddressLine10`, `s`.`ShippingAddress_AddressLine20`, `s`.`ShippingAddress_Tags0`, `s`.`ShippingAddress_ZipCode0`, `s`.`ShippingAddress_Country_Code0`, `s`.`ShippingAddress_Country_FullName0` FROM ( - SELECT DISTINCT `c`.`Id`, `c`.`Name`, `c`.`BillingAddress_AddressLine1`, `c`.`BillingAddress_AddressLine2`, `c`.`BillingAddress_ZipCode`, `c`.`BillingAddress_Country_Code`, `c`.`BillingAddress_Country_FullName`, `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName`, `c0`.`Id` AS `Id0`, `c0`.`Name` AS `Name0`, `c0`.`BillingAddress_AddressLine1` AS `BillingAddress_AddressLine10`, `c0`.`BillingAddress_AddressLine2` AS `BillingAddress_AddressLine20`, `c0`.`BillingAddress_ZipCode` AS `BillingAddress_ZipCode0`, `c0`.`BillingAddress_Country_Code` AS `BillingAddress_Country_Code0`, `c0`.`BillingAddress_Country_FullName` AS `BillingAddress_Country_FullName0`, `c0`.`ShippingAddress_AddressLine1` AS `ShippingAddress_AddressLine10`, `c0`.`ShippingAddress_AddressLine2` AS `ShippingAddress_AddressLine20`, `c0`.`ShippingAddress_ZipCode` AS `ShippingAddress_ZipCode0`, `c0`.`ShippingAddress_Country_Code` AS `ShippingAddress_Country_Code0`, `c0`.`ShippingAddress_Country_FullName` AS `ShippingAddress_Country_FullName0` + SELECT DISTINCT `c`.`Id`, `c`.`Name`, `c`.`BillingAddress_AddressLine1`, `c`.`BillingAddress_AddressLine2`, `c`.`BillingAddress_Tags`, `c`.`BillingAddress_ZipCode`, `c`.`BillingAddress_Country_Code`, `c`.`BillingAddress_Country_FullName`, `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_Tags`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName`, `c0`.`Id` AS `Id0`, `c0`.`Name` AS `Name0`, `c0`.`BillingAddress_AddressLine1` AS `BillingAddress_AddressLine10`, `c0`.`BillingAddress_AddressLine2` AS `BillingAddress_AddressLine20`, `c0`.`BillingAddress_Tags` AS `BillingAddress_Tags0`, `c0`.`BillingAddress_ZipCode` AS `BillingAddress_ZipCode0`, `c0`.`BillingAddress_Country_Code` AS `BillingAddress_Country_Code0`, `c0`.`BillingAddress_Country_FullName` AS `BillingAddress_Country_FullName0`, `c0`.`ShippingAddress_AddressLine1` AS `ShippingAddress_AddressLine10`, `c0`.`ShippingAddress_AddressLine2` AS `ShippingAddress_AddressLine20`, `c0`.`ShippingAddress_Tags` AS `ShippingAddress_Tags0`, `c0`.`ShippingAddress_ZipCode` AS `ShippingAddress_ZipCode0`, `c0`.`ShippingAddress_Country_Code` AS `ShippingAddress_Country_Code0`, `c0`.`ShippingAddress_Country_FullName` AS `ShippingAddress_Country_FullName0` FROM `Customer` AS `c`, `Customer` AS `c0` -) AS `t` +) AS `s` """); } @@ -887,12 +888,12 @@ public override async Task Project_same_nested_complex_type_twice_with_pushdown( AssertSql( """ -SELECT `t`.`BillingAddress_AddressLine1`, `t`.`BillingAddress_AddressLine2`, `t`.`BillingAddress_ZipCode`, `t`.`BillingAddress_Country_Code`, `t`.`BillingAddress_Country_FullName`, `t`.`BillingAddress_AddressLine10`, `t`.`BillingAddress_AddressLine20`, `t`.`BillingAddress_ZipCode0`, `t`.`BillingAddress_Country_Code0`, `t`.`BillingAddress_Country_FullName0` +SELECT `s`.`BillingAddress_AddressLine1`, `s`.`BillingAddress_AddressLine2`, `s`.`BillingAddress_Tags`, `s`.`BillingAddress_ZipCode`, `s`.`BillingAddress_Country_Code`, `s`.`BillingAddress_Country_FullName`, `s`.`BillingAddress_AddressLine10`, `s`.`BillingAddress_AddressLine20`, `s`.`BillingAddress_Tags0`, `s`.`BillingAddress_ZipCode0`, `s`.`BillingAddress_Country_Code0`, `s`.`BillingAddress_Country_FullName0` FROM ( - SELECT DISTINCT `c`.`BillingAddress_AddressLine1`, `c`.`BillingAddress_AddressLine2`, `c`.`BillingAddress_ZipCode`, `c`.`BillingAddress_Country_Code`, `c`.`BillingAddress_Country_FullName`, `c0`.`BillingAddress_AddressLine1` AS `BillingAddress_AddressLine10`, `c0`.`BillingAddress_AddressLine2` AS `BillingAddress_AddressLine20`, `c0`.`BillingAddress_ZipCode` AS `BillingAddress_ZipCode0`, `c0`.`BillingAddress_Country_Code` AS `BillingAddress_Country_Code0`, `c0`.`BillingAddress_Country_FullName` AS `BillingAddress_Country_FullName0` + SELECT DISTINCT `c`.`BillingAddress_AddressLine1`, `c`.`BillingAddress_AddressLine2`, `c`.`BillingAddress_Tags`, `c`.`BillingAddress_ZipCode`, `c`.`BillingAddress_Country_Code`, `c`.`BillingAddress_Country_FullName`, `c0`.`BillingAddress_AddressLine1` AS `BillingAddress_AddressLine10`, `c0`.`BillingAddress_AddressLine2` AS `BillingAddress_AddressLine20`, `c0`.`BillingAddress_Tags` AS `BillingAddress_Tags0`, `c0`.`BillingAddress_ZipCode` AS `BillingAddress_ZipCode0`, `c0`.`BillingAddress_Country_Code` AS `BillingAddress_Country_Code0`, `c0`.`BillingAddress_Country_FullName` AS `BillingAddress_Country_FullName0` FROM `Customer` AS `c`, `Customer` AS `c0` -) AS `t` +) AS `s` """); } @@ -901,17 +902,17 @@ public override async Task Project_same_entity_with_nested_complex_type_twice_wi await base.Project_same_entity_with_nested_complex_type_twice_with_double_pushdown(async); AssertSql( -""" -SELECT `t0`.`Id`, `t0`.`Name`, `t0`.`BillingAddress_AddressLine1`, `t0`.`BillingAddress_AddressLine2`, `t0`.`BillingAddress_ZipCode`, `t0`.`BillingAddress_Country_Code`, `t0`.`BillingAddress_Country_FullName`, `t0`.`ShippingAddress_AddressLine1`, `t0`.`ShippingAddress_AddressLine2`, `t0`.`ShippingAddress_ZipCode`, `t0`.`ShippingAddress_Country_Code`, `t0`.`ShippingAddress_Country_FullName`, `t0`.`Id0`, `t0`.`Name0`, `t0`.`BillingAddress_AddressLine10`, `t0`.`BillingAddress_AddressLine20`, `t0`.`BillingAddress_ZipCode0`, `t0`.`BillingAddress_Country_Code0`, `t0`.`BillingAddress_Country_FullName0`, `t0`.`ShippingAddress_AddressLine10`, `t0`.`ShippingAddress_AddressLine20`, `t0`.`ShippingAddress_ZipCode0`, `t0`.`ShippingAddress_Country_Code0`, `t0`.`ShippingAddress_Country_FullName0` + """ +SELECT `s0`.`Id`, `s0`.`Name`, `s0`.`BillingAddress_AddressLine1`, `s0`.`BillingAddress_AddressLine2`, `s0`.`BillingAddress_Tags`, `s0`.`BillingAddress_ZipCode`, `s0`.`BillingAddress_Country_Code`, `s0`.`BillingAddress_Country_FullName`, `s0`.`ShippingAddress_AddressLine1`, `s0`.`ShippingAddress_AddressLine2`, `s0`.`ShippingAddress_Tags`, `s0`.`ShippingAddress_ZipCode`, `s0`.`ShippingAddress_Country_Code`, `s0`.`ShippingAddress_Country_FullName`, `s0`.`Id0`, `s0`.`Name0`, `s0`.`BillingAddress_AddressLine10`, `s0`.`BillingAddress_AddressLine20`, `s0`.`BillingAddress_Tags0`, `s0`.`BillingAddress_ZipCode0`, `s0`.`BillingAddress_Country_Code0`, `s0`.`BillingAddress_Country_FullName0`, `s0`.`ShippingAddress_AddressLine10`, `s0`.`ShippingAddress_AddressLine20`, `s0`.`ShippingAddress_Tags0`, `s0`.`ShippingAddress_ZipCode0`, `s0`.`ShippingAddress_Country_Code0`, `s0`.`ShippingAddress_Country_FullName0` FROM ( - SELECT DISTINCT `t`.`Id`, `t`.`Name`, `t`.`BillingAddress_AddressLine1`, `t`.`BillingAddress_AddressLine2`, `t`.`BillingAddress_ZipCode`, `t`.`BillingAddress_Country_Code`, `t`.`BillingAddress_Country_FullName`, `t`.`ShippingAddress_AddressLine1`, `t`.`ShippingAddress_AddressLine2`, `t`.`ShippingAddress_ZipCode`, `t`.`ShippingAddress_Country_Code`, `t`.`ShippingAddress_Country_FullName`, `t`.`Id0`, `t`.`Name0`, `t`.`BillingAddress_AddressLine10`, `t`.`BillingAddress_AddressLine20`, `t`.`BillingAddress_ZipCode0`, `t`.`BillingAddress_Country_Code0`, `t`.`BillingAddress_Country_FullName0`, `t`.`ShippingAddress_AddressLine10`, `t`.`ShippingAddress_AddressLine20`, `t`.`ShippingAddress_ZipCode0`, `t`.`ShippingAddress_Country_Code0`, `t`.`ShippingAddress_Country_FullName0` + SELECT DISTINCT `s`.`Id`, `s`.`Name`, `s`.`BillingAddress_AddressLine1`, `s`.`BillingAddress_AddressLine2`, `s`.`BillingAddress_Tags`, `s`.`BillingAddress_ZipCode`, `s`.`BillingAddress_Country_Code`, `s`.`BillingAddress_Country_FullName`, `s`.`ShippingAddress_AddressLine1`, `s`.`ShippingAddress_AddressLine2`, `s`.`ShippingAddress_Tags`, `s`.`ShippingAddress_ZipCode`, `s`.`ShippingAddress_Country_Code`, `s`.`ShippingAddress_Country_FullName`, `s`.`Id0`, `s`.`Name0`, `s`.`BillingAddress_AddressLine10`, `s`.`BillingAddress_AddressLine20`, `s`.`BillingAddress_Tags0`, `s`.`BillingAddress_ZipCode0`, `s`.`BillingAddress_Country_Code0`, `s`.`BillingAddress_Country_FullName0`, `s`.`ShippingAddress_AddressLine10`, `s`.`ShippingAddress_AddressLine20`, `s`.`ShippingAddress_Tags0`, `s`.`ShippingAddress_ZipCode0`, `s`.`ShippingAddress_Country_Code0`, `s`.`ShippingAddress_Country_FullName0` FROM ( - SELECT TOP 50 `c`.`Id`, `c`.`Name`, `c`.`BillingAddress_AddressLine1`, `c`.`BillingAddress_AddressLine2`, `c`.`BillingAddress_ZipCode`, `c`.`BillingAddress_Country_Code`, `c`.`BillingAddress_Country_FullName`, `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName`, `c0`.`Id` AS `Id0`, `c0`.`Name` AS `Name0`, `c0`.`BillingAddress_AddressLine1` AS `BillingAddress_AddressLine10`, `c0`.`BillingAddress_AddressLine2` AS `BillingAddress_AddressLine20`, `c0`.`BillingAddress_ZipCode` AS `BillingAddress_ZipCode0`, `c0`.`BillingAddress_Country_Code` AS `BillingAddress_Country_Code0`, `c0`.`BillingAddress_Country_FullName` AS `BillingAddress_Country_FullName0`, `c0`.`ShippingAddress_AddressLine1` AS `ShippingAddress_AddressLine10`, `c0`.`ShippingAddress_AddressLine2` AS `ShippingAddress_AddressLine20`, `c0`.`ShippingAddress_ZipCode` AS `ShippingAddress_ZipCode0`, `c0`.`ShippingAddress_Country_Code` AS `ShippingAddress_Country_Code0`, `c0`.`ShippingAddress_Country_FullName` AS `ShippingAddress_Country_FullName0` + SELECT TOP 50 `c`.`Id`, `c`.`Name`, `c`.`BillingAddress_AddressLine1`, `c`.`BillingAddress_AddressLine2`, `c`.`BillingAddress_Tags`, `c`.`BillingAddress_ZipCode`, `c`.`BillingAddress_Country_Code`, `c`.`BillingAddress_Country_FullName`, `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_Tags`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName`, `c0`.`Id` AS `Id0`, `c0`.`Name` AS `Name0`, `c0`.`BillingAddress_AddressLine1` AS `BillingAddress_AddressLine10`, `c0`.`BillingAddress_AddressLine2` AS `BillingAddress_AddressLine20`, `c0`.`BillingAddress_Tags` AS `BillingAddress_Tags0`, `c0`.`BillingAddress_ZipCode` AS `BillingAddress_ZipCode0`, `c0`.`BillingAddress_Country_Code` AS `BillingAddress_Country_Code0`, `c0`.`BillingAddress_Country_FullName` AS `BillingAddress_Country_FullName0`, `c0`.`ShippingAddress_AddressLine1` AS `ShippingAddress_AddressLine10`, `c0`.`ShippingAddress_AddressLine2` AS `ShippingAddress_AddressLine20`, `c0`.`ShippingAddress_Tags` AS `ShippingAddress_Tags0`, `c0`.`ShippingAddress_ZipCode` AS `ShippingAddress_ZipCode0`, `c0`.`ShippingAddress_Country_Code` AS `ShippingAddress_Country_Code0`, `c0`.`ShippingAddress_Country_FullName` AS `ShippingAddress_Country_FullName0` FROM `Customer` AS `c`, `Customer` AS `c0` ORDER BY `c`.`Id`, `c0`.`Id` - ) AS `t` -) AS `t0` + ) AS `s` +) AS `s0` """); } @@ -921,16 +922,16 @@ public override async Task Project_same_nested_complex_type_twice_with_double_pu AssertSql( """ -SELECT `t0`.`BillingAddress_AddressLine1`, `t0`.`BillingAddress_AddressLine2`, `t0`.`BillingAddress_ZipCode`, `t0`.`BillingAddress_Country_Code`, `t0`.`BillingAddress_Country_FullName`, `t0`.`BillingAddress_AddressLine10`, `t0`.`BillingAddress_AddressLine20`, `t0`.`BillingAddress_ZipCode0`, `t0`.`BillingAddress_Country_Code0`, `t0`.`BillingAddress_Country_FullName0` +SELECT `s0`.`BillingAddress_AddressLine1`, `s0`.`BillingAddress_AddressLine2`, `s0`.`BillingAddress_Tags`, `s0`.`BillingAddress_ZipCode`, `s0`.`BillingAddress_Country_Code`, `s0`.`BillingAddress_Country_FullName`, `s0`.`BillingAddress_AddressLine10`, `s0`.`BillingAddress_AddressLine20`, `s0`.`BillingAddress_Tags0`, `s0`.`BillingAddress_ZipCode0`, `s0`.`BillingAddress_Country_Code0`, `s0`.`BillingAddress_Country_FullName0` FROM ( - SELECT DISTINCT `t`.`BillingAddress_AddressLine1`, `t`.`BillingAddress_AddressLine2`, `t`.`BillingAddress_ZipCode`, `t`.`BillingAddress_Country_Code`, `t`.`BillingAddress_Country_FullName`, `t`.`BillingAddress_AddressLine10`, `t`.`BillingAddress_AddressLine20`, `t`.`BillingAddress_ZipCode0`, `t`.`BillingAddress_Country_Code0`, `t`.`BillingAddress_Country_FullName0` + SELECT DISTINCT `s`.`BillingAddress_AddressLine1`, `s`.`BillingAddress_AddressLine2`, `s`.`BillingAddress_Tags`, `s`.`BillingAddress_ZipCode`, `s`.`BillingAddress_Country_Code`, `s`.`BillingAddress_Country_FullName`, `s`.`BillingAddress_AddressLine10`, `s`.`BillingAddress_AddressLine20`, `s`.`BillingAddress_Tags0`, `s`.`BillingAddress_ZipCode0`, `s`.`BillingAddress_Country_Code0`, `s`.`BillingAddress_Country_FullName0` FROM ( - SELECT TOP 50 `c`.`BillingAddress_AddressLine1`, `c`.`BillingAddress_AddressLine2`, `c`.`BillingAddress_ZipCode`, `c`.`BillingAddress_Country_Code`, `c`.`BillingAddress_Country_FullName`, `c0`.`BillingAddress_AddressLine1` AS `BillingAddress_AddressLine10`, `c0`.`BillingAddress_AddressLine2` AS `BillingAddress_AddressLine20`, `c0`.`BillingAddress_ZipCode` AS `BillingAddress_ZipCode0`, `c0`.`BillingAddress_Country_Code` AS `BillingAddress_Country_Code0`, `c0`.`BillingAddress_Country_FullName` AS `BillingAddress_Country_FullName0` + SELECT TOP 50 `c`.`BillingAddress_AddressLine1`, `c`.`BillingAddress_AddressLine2`, `c`.`BillingAddress_Tags`, `c`.`BillingAddress_ZipCode`, `c`.`BillingAddress_Country_Code`, `c`.`BillingAddress_Country_FullName`, `c0`.`BillingAddress_AddressLine1` AS `BillingAddress_AddressLine10`, `c0`.`BillingAddress_AddressLine2` AS `BillingAddress_AddressLine20`, `c0`.`BillingAddress_Tags` AS `BillingAddress_Tags0`, `c0`.`BillingAddress_ZipCode` AS `BillingAddress_ZipCode0`, `c0`.`BillingAddress_Country_Code` AS `BillingAddress_Country_Code0`, `c0`.`BillingAddress_Country_FullName` AS `BillingAddress_Country_FullName0` FROM `Customer` AS `c`, `Customer` AS `c0` ORDER BY `c`.`Id`, `c0`.`Id` - ) AS `t` -) AS `t0` + ) AS `s` +) AS `s0` """); } @@ -939,13 +940,13 @@ public override async Task Project_same_entity_with_struct_nested_complex_type_t await base.Project_same_entity_with_struct_nested_complex_type_twice_with_pushdown(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`Name`, `t`.`BillingAddress_AddressLine1`, `t`.`BillingAddress_AddressLine2`, `t`.`BillingAddress_ZipCode`, `t`.`BillingAddress_Country_Code`, `t`.`BillingAddress_Country_FullName`, `t`.`ShippingAddress_AddressLine1`, `t`.`ShippingAddress_AddressLine2`, `t`.`ShippingAddress_ZipCode`, `t`.`ShippingAddress_Country_Code`, `t`.`ShippingAddress_Country_FullName`, `t`.`Id0`, `t`.`Name0`, `t`.`BillingAddress_AddressLine10`, `t`.`BillingAddress_AddressLine20`, `t`.`BillingAddress_ZipCode0`, `t`.`BillingAddress_Country_Code0`, `t`.`BillingAddress_Country_FullName0`, `t`.`ShippingAddress_AddressLine10`, `t`.`ShippingAddress_AddressLine20`, `t`.`ShippingAddress_ZipCode0`, `t`.`ShippingAddress_Country_Code0`, `t`.`ShippingAddress_Country_FullName0` + """ +SELECT `s`.`Id`, `s`.`Name`, `s`.`BillingAddress_AddressLine1`, `s`.`BillingAddress_AddressLine2`, `s`.`BillingAddress_ZipCode`, `s`.`BillingAddress_Country_Code`, `s`.`BillingAddress_Country_FullName`, `s`.`ShippingAddress_AddressLine1`, `s`.`ShippingAddress_AddressLine2`, `s`.`ShippingAddress_ZipCode`, `s`.`ShippingAddress_Country_Code`, `s`.`ShippingAddress_Country_FullName`, `s`.`Id0`, `s`.`Name0`, `s`.`BillingAddress_AddressLine10`, `s`.`BillingAddress_AddressLine20`, `s`.`BillingAddress_ZipCode0`, `s`.`BillingAddress_Country_Code0`, `s`.`BillingAddress_Country_FullName0`, `s`.`ShippingAddress_AddressLine10`, `s`.`ShippingAddress_AddressLine20`, `s`.`ShippingAddress_ZipCode0`, `s`.`ShippingAddress_Country_Code0`, `s`.`ShippingAddress_Country_FullName0` FROM ( SELECT DISTINCT `v`.`Id`, `v`.`Name`, `v`.`BillingAddress_AddressLine1`, `v`.`BillingAddress_AddressLine2`, `v`.`BillingAddress_ZipCode`, `v`.`BillingAddress_Country_Code`, `v`.`BillingAddress_Country_FullName`, `v`.`ShippingAddress_AddressLine1`, `v`.`ShippingAddress_AddressLine2`, `v`.`ShippingAddress_ZipCode`, `v`.`ShippingAddress_Country_Code`, `v`.`ShippingAddress_Country_FullName`, `v0`.`Id` AS `Id0`, `v0`.`Name` AS `Name0`, `v0`.`BillingAddress_AddressLine1` AS `BillingAddress_AddressLine10`, `v0`.`BillingAddress_AddressLine2` AS `BillingAddress_AddressLine20`, `v0`.`BillingAddress_ZipCode` AS `BillingAddress_ZipCode0`, `v0`.`BillingAddress_Country_Code` AS `BillingAddress_Country_Code0`, `v0`.`BillingAddress_Country_FullName` AS `BillingAddress_Country_FullName0`, `v0`.`ShippingAddress_AddressLine1` AS `ShippingAddress_AddressLine10`, `v0`.`ShippingAddress_AddressLine2` AS `ShippingAddress_AddressLine20`, `v0`.`ShippingAddress_ZipCode` AS `ShippingAddress_ZipCode0`, `v0`.`ShippingAddress_Country_Code` AS `ShippingAddress_Country_Code0`, `v0`.`ShippingAddress_Country_FullName` AS `ShippingAddress_Country_FullName0` FROM `ValuedCustomer` AS `v`, `ValuedCustomer` AS `v0` -) AS `t` +) AS `s` """); } @@ -955,12 +956,12 @@ public override async Task Project_same_struct_nested_complex_type_twice_with_pu AssertSql( """ -SELECT `t`.`BillingAddress_AddressLine1`, `t`.`BillingAddress_AddressLine2`, `t`.`BillingAddress_ZipCode`, `t`.`BillingAddress_Country_Code`, `t`.`BillingAddress_Country_FullName`, `t`.`BillingAddress_AddressLine10`, `t`.`BillingAddress_AddressLine20`, `t`.`BillingAddress_ZipCode0`, `t`.`BillingAddress_Country_Code0`, `t`.`BillingAddress_Country_FullName0` +SELECT `s`.`BillingAddress_AddressLine1`, `s`.`BillingAddress_AddressLine2`, `s`.`BillingAddress_ZipCode`, `s`.`BillingAddress_Country_Code`, `s`.`BillingAddress_Country_FullName`, `s`.`BillingAddress_AddressLine10`, `s`.`BillingAddress_AddressLine20`, `s`.`BillingAddress_ZipCode0`, `s`.`BillingAddress_Country_Code0`, `s`.`BillingAddress_Country_FullName0` FROM ( SELECT DISTINCT `v`.`BillingAddress_AddressLine1`, `v`.`BillingAddress_AddressLine2`, `v`.`BillingAddress_ZipCode`, `v`.`BillingAddress_Country_Code`, `v`.`BillingAddress_Country_FullName`, `v0`.`BillingAddress_AddressLine1` AS `BillingAddress_AddressLine10`, `v0`.`BillingAddress_AddressLine2` AS `BillingAddress_AddressLine20`, `v0`.`BillingAddress_ZipCode` AS `BillingAddress_ZipCode0`, `v0`.`BillingAddress_Country_Code` AS `BillingAddress_Country_Code0`, `v0`.`BillingAddress_Country_FullName` AS `BillingAddress_Country_FullName0` FROM `ValuedCustomer` AS `v`, `ValuedCustomer` AS `v0` -) AS `t` +) AS `s` """); } @@ -969,17 +970,17 @@ public override async Task Project_same_entity_with_struct_nested_complex_type_t await base.Project_same_entity_with_struct_nested_complex_type_twice_with_double_pushdown(async); AssertSql( -""" -SELECT `t0`.`Id`, `t0`.`Name`, `t0`.`BillingAddress_AddressLine1`, `t0`.`BillingAddress_AddressLine2`, `t0`.`BillingAddress_ZipCode`, `t0`.`BillingAddress_Country_Code`, `t0`.`BillingAddress_Country_FullName`, `t0`.`ShippingAddress_AddressLine1`, `t0`.`ShippingAddress_AddressLine2`, `t0`.`ShippingAddress_ZipCode`, `t0`.`ShippingAddress_Country_Code`, `t0`.`ShippingAddress_Country_FullName`, `t0`.`Id0`, `t0`.`Name0`, `t0`.`BillingAddress_AddressLine10`, `t0`.`BillingAddress_AddressLine20`, `t0`.`BillingAddress_ZipCode0`, `t0`.`BillingAddress_Country_Code0`, `t0`.`BillingAddress_Country_FullName0`, `t0`.`ShippingAddress_AddressLine10`, `t0`.`ShippingAddress_AddressLine20`, `t0`.`ShippingAddress_ZipCode0`, `t0`.`ShippingAddress_Country_Code0`, `t0`.`ShippingAddress_Country_FullName0` + """ +SELECT `s0`.`Id`, `s0`.`Name`, `s0`.`BillingAddress_AddressLine1`, `s0`.`BillingAddress_AddressLine2`, `s0`.`BillingAddress_ZipCode`, `s0`.`BillingAddress_Country_Code`, `s0`.`BillingAddress_Country_FullName`, `s0`.`ShippingAddress_AddressLine1`, `s0`.`ShippingAddress_AddressLine2`, `s0`.`ShippingAddress_ZipCode`, `s0`.`ShippingAddress_Country_Code`, `s0`.`ShippingAddress_Country_FullName`, `s0`.`Id0`, `s0`.`Name0`, `s0`.`BillingAddress_AddressLine10`, `s0`.`BillingAddress_AddressLine20`, `s0`.`BillingAddress_ZipCode0`, `s0`.`BillingAddress_Country_Code0`, `s0`.`BillingAddress_Country_FullName0`, `s0`.`ShippingAddress_AddressLine10`, `s0`.`ShippingAddress_AddressLine20`, `s0`.`ShippingAddress_ZipCode0`, `s0`.`ShippingAddress_Country_Code0`, `s0`.`ShippingAddress_Country_FullName0` FROM ( - SELECT DISTINCT `t`.`Id`, `t`.`Name`, `t`.`BillingAddress_AddressLine1`, `t`.`BillingAddress_AddressLine2`, `t`.`BillingAddress_ZipCode`, `t`.`BillingAddress_Country_Code`, `t`.`BillingAddress_Country_FullName`, `t`.`ShippingAddress_AddressLine1`, `t`.`ShippingAddress_AddressLine2`, `t`.`ShippingAddress_ZipCode`, `t`.`ShippingAddress_Country_Code`, `t`.`ShippingAddress_Country_FullName`, `t`.`Id0`, `t`.`Name0`, `t`.`BillingAddress_AddressLine10`, `t`.`BillingAddress_AddressLine20`, `t`.`BillingAddress_ZipCode0`, `t`.`BillingAddress_Country_Code0`, `t`.`BillingAddress_Country_FullName0`, `t`.`ShippingAddress_AddressLine10`, `t`.`ShippingAddress_AddressLine20`, `t`.`ShippingAddress_ZipCode0`, `t`.`ShippingAddress_Country_Code0`, `t`.`ShippingAddress_Country_FullName0` + SELECT DISTINCT `s`.`Id`, `s`.`Name`, `s`.`BillingAddress_AddressLine1`, `s`.`BillingAddress_AddressLine2`, `s`.`BillingAddress_ZipCode`, `s`.`BillingAddress_Country_Code`, `s`.`BillingAddress_Country_FullName`, `s`.`ShippingAddress_AddressLine1`, `s`.`ShippingAddress_AddressLine2`, `s`.`ShippingAddress_ZipCode`, `s`.`ShippingAddress_Country_Code`, `s`.`ShippingAddress_Country_FullName`, `s`.`Id0`, `s`.`Name0`, `s`.`BillingAddress_AddressLine10`, `s`.`BillingAddress_AddressLine20`, `s`.`BillingAddress_ZipCode0`, `s`.`BillingAddress_Country_Code0`, `s`.`BillingAddress_Country_FullName0`, `s`.`ShippingAddress_AddressLine10`, `s`.`ShippingAddress_AddressLine20`, `s`.`ShippingAddress_ZipCode0`, `s`.`ShippingAddress_Country_Code0`, `s`.`ShippingAddress_Country_FullName0` FROM ( SELECT TOP 50 `v`.`Id`, `v`.`Name`, `v`.`BillingAddress_AddressLine1`, `v`.`BillingAddress_AddressLine2`, `v`.`BillingAddress_ZipCode`, `v`.`BillingAddress_Country_Code`, `v`.`BillingAddress_Country_FullName`, `v`.`ShippingAddress_AddressLine1`, `v`.`ShippingAddress_AddressLine2`, `v`.`ShippingAddress_ZipCode`, `v`.`ShippingAddress_Country_Code`, `v`.`ShippingAddress_Country_FullName`, `v0`.`Id` AS `Id0`, `v0`.`Name` AS `Name0`, `v0`.`BillingAddress_AddressLine1` AS `BillingAddress_AddressLine10`, `v0`.`BillingAddress_AddressLine2` AS `BillingAddress_AddressLine20`, `v0`.`BillingAddress_ZipCode` AS `BillingAddress_ZipCode0`, `v0`.`BillingAddress_Country_Code` AS `BillingAddress_Country_Code0`, `v0`.`BillingAddress_Country_FullName` AS `BillingAddress_Country_FullName0`, `v0`.`ShippingAddress_AddressLine1` AS `ShippingAddress_AddressLine10`, `v0`.`ShippingAddress_AddressLine2` AS `ShippingAddress_AddressLine20`, `v0`.`ShippingAddress_ZipCode` AS `ShippingAddress_ZipCode0`, `v0`.`ShippingAddress_Country_Code` AS `ShippingAddress_Country_Code0`, `v0`.`ShippingAddress_Country_FullName` AS `ShippingAddress_Country_FullName0` FROM `ValuedCustomer` AS `v`, `ValuedCustomer` AS `v0` ORDER BY `v`.`Id`, `v0`.`Id` - ) AS `t` -) AS `t0` + ) AS `s` +) AS `s0` """); } @@ -989,16 +990,16 @@ public override async Task Project_same_struct_nested_complex_type_twice_with_do AssertSql( """ -SELECT `t0`.`BillingAddress_AddressLine1`, `t0`.`BillingAddress_AddressLine2`, `t0`.`BillingAddress_ZipCode`, `t0`.`BillingAddress_Country_Code`, `t0`.`BillingAddress_Country_FullName`, `t0`.`BillingAddress_AddressLine10`, `t0`.`BillingAddress_AddressLine20`, `t0`.`BillingAddress_ZipCode0`, `t0`.`BillingAddress_Country_Code0`, `t0`.`BillingAddress_Country_FullName0` +SELECT `s0`.`BillingAddress_AddressLine1`, `s0`.`BillingAddress_AddressLine2`, `s0`.`BillingAddress_ZipCode`, `s0`.`BillingAddress_Country_Code`, `s0`.`BillingAddress_Country_FullName`, `s0`.`BillingAddress_AddressLine10`, `s0`.`BillingAddress_AddressLine20`, `s0`.`BillingAddress_ZipCode0`, `s0`.`BillingAddress_Country_Code0`, `s0`.`BillingAddress_Country_FullName0` FROM ( - SELECT DISTINCT `t`.`BillingAddress_AddressLine1`, `t`.`BillingAddress_AddressLine2`, `t`.`BillingAddress_ZipCode`, `t`.`BillingAddress_Country_Code`, `t`.`BillingAddress_Country_FullName`, `t`.`BillingAddress_AddressLine10`, `t`.`BillingAddress_AddressLine20`, `t`.`BillingAddress_ZipCode0`, `t`.`BillingAddress_Country_Code0`, `t`.`BillingAddress_Country_FullName0` + SELECT DISTINCT `s`.`BillingAddress_AddressLine1`, `s`.`BillingAddress_AddressLine2`, `s`.`BillingAddress_ZipCode`, `s`.`BillingAddress_Country_Code`, `s`.`BillingAddress_Country_FullName`, `s`.`BillingAddress_AddressLine10`, `s`.`BillingAddress_AddressLine20`, `s`.`BillingAddress_ZipCode0`, `s`.`BillingAddress_Country_Code0`, `s`.`BillingAddress_Country_FullName0` FROM ( SELECT TOP 50 `v`.`BillingAddress_AddressLine1`, `v`.`BillingAddress_AddressLine2`, `v`.`BillingAddress_ZipCode`, `v`.`BillingAddress_Country_Code`, `v`.`BillingAddress_Country_FullName`, `v0`.`BillingAddress_AddressLine1` AS `BillingAddress_AddressLine10`, `v0`.`BillingAddress_AddressLine2` AS `BillingAddress_AddressLine20`, `v0`.`BillingAddress_ZipCode` AS `BillingAddress_ZipCode0`, `v0`.`BillingAddress_Country_Code` AS `BillingAddress_Country_Code0`, `v0`.`BillingAddress_Country_FullName` AS `BillingAddress_Country_FullName0` FROM `ValuedCustomer` AS `v`, `ValuedCustomer` AS `v0` ORDER BY `v`.`Id`, `v0`.`Id` - ) AS `t` -) AS `t0` + ) AS `s` +) AS `s0` """); } @@ -1007,18 +1008,18 @@ public override async Task Union_of_same_entity_with_nested_complex_type_project await base.Union_of_same_entity_with_nested_complex_type_projected_twice_with_pushdown(async); AssertSql( -""" -SELECT TOP 50 `t`.`Id`, `t`.`Name`, `t`.`BillingAddress_AddressLine1`, `t`.`BillingAddress_AddressLine2`, `t`.`BillingAddress_ZipCode`, `t`.`BillingAddress_Country_Code`, `t`.`BillingAddress_Country_FullName`, `t`.`ShippingAddress_AddressLine1`, `t`.`ShippingAddress_AddressLine2`, `t`.`ShippingAddress_ZipCode`, `t`.`ShippingAddress_Country_Code`, `t`.`ShippingAddress_Country_FullName`, `t`.`Id0`, `t`.`Name0`, `t`.`BillingAddress_AddressLine10`, `t`.`BillingAddress_AddressLine20`, `t`.`BillingAddress_ZipCode0`, `t`.`BillingAddress_Country_Code0`, `t`.`BillingAddress_Country_FullName0`, `t`.`ShippingAddress_AddressLine10`, `t`.`ShippingAddress_AddressLine20`, `t`.`ShippingAddress_ZipCode0`, `t`.`ShippingAddress_Country_Code0`, `t`.`ShippingAddress_Country_FullName0` + """ +SELECT TOP 50 `u`.`Id`, `u`.`Name`, `u`.`BillingAddress_AddressLine1`, `u`.`BillingAddress_AddressLine2`, `u`.`BillingAddress_Tags`, `u`.`BillingAddress_ZipCode`, `u`.`BillingAddress_Country_Code`, `u`.`BillingAddress_Country_FullName`, `u`.`ShippingAddress_AddressLine1`, `u`.`ShippingAddress_AddressLine2`, `u`.`ShippingAddress_Tags`, `u`.`ShippingAddress_ZipCode`, `u`.`ShippingAddress_Country_Code`, `u`.`ShippingAddress_Country_FullName`, `u`.`Id0`, `u`.`Name0`, `u`.`BillingAddress_AddressLine10`, `u`.`BillingAddress_AddressLine20`, `u`.`BillingAddress_Tags0`, `u`.`BillingAddress_ZipCode0`, `u`.`BillingAddress_Country_Code0`, `u`.`BillingAddress_Country_FullName0`, `u`.`ShippingAddress_AddressLine10`, `u`.`ShippingAddress_AddressLine20`, `u`.`ShippingAddress_Tags0`, `u`.`ShippingAddress_ZipCode0`, `u`.`ShippingAddress_Country_Code0`, `u`.`ShippingAddress_Country_FullName0` FROM ( - SELECT `c`.`Id`, `c`.`Name`, `c`.`BillingAddress_AddressLine1`, `c`.`BillingAddress_AddressLine2`, `c`.`BillingAddress_ZipCode`, `c`.`BillingAddress_Country_Code`, `c`.`BillingAddress_Country_FullName`, `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName`, `c0`.`Id` AS `Id0`, `c0`.`Name` AS `Name0`, `c0`.`BillingAddress_AddressLine1` AS `BillingAddress_AddressLine10`, `c0`.`BillingAddress_AddressLine2` AS `BillingAddress_AddressLine20`, `c0`.`BillingAddress_ZipCode` AS `BillingAddress_ZipCode0`, `c0`.`BillingAddress_Country_Code` AS `BillingAddress_Country_Code0`, `c0`.`BillingAddress_Country_FullName` AS `BillingAddress_Country_FullName0`, `c0`.`ShippingAddress_AddressLine1` AS `ShippingAddress_AddressLine10`, `c0`.`ShippingAddress_AddressLine2` AS `ShippingAddress_AddressLine20`, `c0`.`ShippingAddress_ZipCode` AS `ShippingAddress_ZipCode0`, `c0`.`ShippingAddress_Country_Code` AS `ShippingAddress_Country_Code0`, `c0`.`ShippingAddress_Country_FullName` AS `ShippingAddress_Country_FullName0` + SELECT `c`.`Id`, `c`.`Name`, `c`.`BillingAddress_AddressLine1`, `c`.`BillingAddress_AddressLine2`, `c`.`BillingAddress_Tags`, `c`.`BillingAddress_ZipCode`, `c`.`BillingAddress_Country_Code`, `c`.`BillingAddress_Country_FullName`, `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_Tags`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName`, `c0`.`Id` AS `Id0`, `c0`.`Name` AS `Name0`, `c0`.`BillingAddress_AddressLine1` AS `BillingAddress_AddressLine10`, `c0`.`BillingAddress_AddressLine2` AS `BillingAddress_AddressLine20`, `c0`.`BillingAddress_Tags` AS `BillingAddress_Tags0`, `c0`.`BillingAddress_ZipCode` AS `BillingAddress_ZipCode0`, `c0`.`BillingAddress_Country_Code` AS `BillingAddress_Country_Code0`, `c0`.`BillingAddress_Country_FullName` AS `BillingAddress_Country_FullName0`, `c0`.`ShippingAddress_AddressLine1` AS `ShippingAddress_AddressLine10`, `c0`.`ShippingAddress_AddressLine2` AS `ShippingAddress_AddressLine20`, `c0`.`ShippingAddress_Tags` AS `ShippingAddress_Tags0`, `c0`.`ShippingAddress_ZipCode` AS `ShippingAddress_ZipCode0`, `c0`.`ShippingAddress_Country_Code` AS `ShippingAddress_Country_Code0`, `c0`.`ShippingAddress_Country_FullName` AS `ShippingAddress_Country_FullName0` FROM `Customer` AS `c`, `Customer` AS `c0` UNION - SELECT `c1`.`Id`, `c1`.`Name`, `c1`.`BillingAddress_AddressLine1`, `c1`.`BillingAddress_AddressLine2`, `c1`.`BillingAddress_ZipCode`, `c1`.`BillingAddress_Country_Code`, `c1`.`BillingAddress_Country_FullName`, `c1`.`ShippingAddress_AddressLine1`, `c1`.`ShippingAddress_AddressLine2`, `c1`.`ShippingAddress_ZipCode`, `c1`.`ShippingAddress_Country_Code`, `c1`.`ShippingAddress_Country_FullName`, `c2`.`Id` AS `Id0`, `c2`.`Name` AS `Name0`, `c2`.`BillingAddress_AddressLine1` AS `BillingAddress_AddressLine10`, `c2`.`BillingAddress_AddressLine2` AS `BillingAddress_AddressLine20`, `c2`.`BillingAddress_ZipCode` AS `BillingAddress_ZipCode0`, `c2`.`BillingAddress_Country_Code` AS `BillingAddress_Country_Code0`, `c2`.`BillingAddress_Country_FullName` AS `BillingAddress_Country_FullName0`, `c2`.`ShippingAddress_AddressLine1` AS `ShippingAddress_AddressLine10`, `c2`.`ShippingAddress_AddressLine2` AS `ShippingAddress_AddressLine20`, `c2`.`ShippingAddress_ZipCode` AS `ShippingAddress_ZipCode0`, `c2`.`ShippingAddress_Country_Code` AS `ShippingAddress_Country_Code0`, `c2`.`ShippingAddress_Country_FullName` AS `ShippingAddress_Country_FullName0` + SELECT `c1`.`Id`, `c1`.`Name`, `c1`.`BillingAddress_AddressLine1`, `c1`.`BillingAddress_AddressLine2`, `c1`.`BillingAddress_Tags`, `c1`.`BillingAddress_ZipCode`, `c1`.`BillingAddress_Country_Code`, `c1`.`BillingAddress_Country_FullName`, `c1`.`ShippingAddress_AddressLine1`, `c1`.`ShippingAddress_AddressLine2`, `c1`.`ShippingAddress_Tags`, `c1`.`ShippingAddress_ZipCode`, `c1`.`ShippingAddress_Country_Code`, `c1`.`ShippingAddress_Country_FullName`, `c2`.`Id` AS `Id0`, `c2`.`Name` AS `Name0`, `c2`.`BillingAddress_AddressLine1` AS `BillingAddress_AddressLine10`, `c2`.`BillingAddress_AddressLine2` AS `BillingAddress_AddressLine20`, `c2`.`BillingAddress_Tags` AS `BillingAddress_Tags0`, `c2`.`BillingAddress_ZipCode` AS `BillingAddress_ZipCode0`, `c2`.`BillingAddress_Country_Code` AS `BillingAddress_Country_Code0`, `c2`.`BillingAddress_Country_FullName` AS `BillingAddress_Country_FullName0`, `c2`.`ShippingAddress_AddressLine1` AS `ShippingAddress_AddressLine10`, `c2`.`ShippingAddress_AddressLine2` AS `ShippingAddress_AddressLine20`, `c2`.`ShippingAddress_Tags` AS `ShippingAddress_Tags0`, `c2`.`ShippingAddress_ZipCode` AS `ShippingAddress_ZipCode0`, `c2`.`ShippingAddress_Country_Code` AS `ShippingAddress_Country_Code0`, `c2`.`ShippingAddress_Country_FullName` AS `ShippingAddress_Country_FullName0` FROM `Customer` AS `c1`, `Customer` AS `c2` -) AS `t` -ORDER BY `t`.`Id`, `t`.`Id0` +) AS `u` +ORDER BY `u`.`Id`, `u`.`Id0` """); } @@ -1027,25 +1028,25 @@ public override async Task Union_of_same_entity_with_nested_complex_type_project await base.Union_of_same_entity_with_nested_complex_type_projected_twice_with_double_pushdown(async); AssertSql( -""" -SELECT TOP 50 `t1`.`Id`, `t1`.`Name`, `t1`.`BillingAddress_AddressLine1`, `t1`.`BillingAddress_AddressLine2`, `t1`.`BillingAddress_ZipCode`, `t1`.`BillingAddress_Country_Code`, `t1`.`BillingAddress_Country_FullName`, `t1`.`ShippingAddress_AddressLine1`, `t1`.`ShippingAddress_AddressLine2`, `t1`.`ShippingAddress_ZipCode`, `t1`.`ShippingAddress_Country_Code`, `t1`.`ShippingAddress_Country_FullName`, `t1`.`Id0`, `t1`.`Name0`, `t1`.`BillingAddress_AddressLine10`, `t1`.`BillingAddress_AddressLine20`, `t1`.`BillingAddress_ZipCode0`, `t1`.`BillingAddress_Country_Code0`, `t1`.`BillingAddress_Country_FullName0`, `t1`.`ShippingAddress_AddressLine10`, `t1`.`ShippingAddress_AddressLine20`, `t1`.`ShippingAddress_ZipCode0`, `t1`.`ShippingAddress_Country_Code0`, `t1`.`ShippingAddress_Country_FullName0` + """ +SELECT TOP 50 `u1`.`Id`, `u1`.`Name`, `u1`.`BillingAddress_AddressLine1`, `u1`.`BillingAddress_AddressLine2`, `u1`.`BillingAddress_Tags`, `u1`.`BillingAddress_ZipCode`, `u1`.`BillingAddress_Country_Code`, `u1`.`BillingAddress_Country_FullName`, `u1`.`ShippingAddress_AddressLine1`, `u1`.`ShippingAddress_AddressLine2`, `u1`.`ShippingAddress_Tags`, `u1`.`ShippingAddress_ZipCode`, `u1`.`ShippingAddress_Country_Code`, `u1`.`ShippingAddress_Country_FullName`, `u1`.`Id0`, `u1`.`Name0`, `u1`.`BillingAddress_AddressLine10`, `u1`.`BillingAddress_AddressLine20`, `u1`.`BillingAddress_Tags0`, `u1`.`BillingAddress_ZipCode0`, `u1`.`BillingAddress_Country_Code0`, `u1`.`BillingAddress_Country_FullName0`, `u1`.`ShippingAddress_AddressLine10`, `u1`.`ShippingAddress_AddressLine20`, `u1`.`ShippingAddress_Tags0`, `u1`.`ShippingAddress_ZipCode0`, `u1`.`ShippingAddress_Country_Code0`, `u1`.`ShippingAddress_Country_FullName0` FROM ( - SELECT DISTINCT `t0`.`Id`, `t0`.`Name`, `t0`.`BillingAddress_AddressLine1`, `t0`.`BillingAddress_AddressLine2`, `t0`.`BillingAddress_ZipCode`, `t0`.`BillingAddress_Country_Code`, `t0`.`BillingAddress_Country_FullName`, `t0`.`ShippingAddress_AddressLine1`, `t0`.`ShippingAddress_AddressLine2`, `t0`.`ShippingAddress_ZipCode`, `t0`.`ShippingAddress_Country_Code`, `t0`.`ShippingAddress_Country_FullName`, `t0`.`Id0`, `t0`.`Name0`, `t0`.`BillingAddress_AddressLine10`, `t0`.`BillingAddress_AddressLine20`, `t0`.`BillingAddress_ZipCode0`, `t0`.`BillingAddress_Country_Code0`, `t0`.`BillingAddress_Country_FullName0`, `t0`.`ShippingAddress_AddressLine10`, `t0`.`ShippingAddress_AddressLine20`, `t0`.`ShippingAddress_ZipCode0`, `t0`.`ShippingAddress_Country_Code0`, `t0`.`ShippingAddress_Country_FullName0` + SELECT DISTINCT `u0`.`Id`, `u0`.`Name`, `u0`.`BillingAddress_AddressLine1`, `u0`.`BillingAddress_AddressLine2`, `u0`.`BillingAddress_Tags`, `u0`.`BillingAddress_ZipCode`, `u0`.`BillingAddress_Country_Code`, `u0`.`BillingAddress_Country_FullName`, `u0`.`ShippingAddress_AddressLine1`, `u0`.`ShippingAddress_AddressLine2`, `u0`.`ShippingAddress_Tags`, `u0`.`ShippingAddress_ZipCode`, `u0`.`ShippingAddress_Country_Code`, `u0`.`ShippingAddress_Country_FullName`, `u0`.`Id0`, `u0`.`Name0`, `u0`.`BillingAddress_AddressLine10`, `u0`.`BillingAddress_AddressLine20`, `u0`.`BillingAddress_Tags0`, `u0`.`BillingAddress_ZipCode0`, `u0`.`BillingAddress_Country_Code0`, `u0`.`BillingAddress_Country_FullName0`, `u0`.`ShippingAddress_AddressLine10`, `u0`.`ShippingAddress_AddressLine20`, `u0`.`ShippingAddress_Tags0`, `u0`.`ShippingAddress_ZipCode0`, `u0`.`ShippingAddress_Country_Code0`, `u0`.`ShippingAddress_Country_FullName0` FROM ( - SELECT TOP 50 `t`.`Id`, `t`.`Name`, `t`.`BillingAddress_AddressLine1`, `t`.`BillingAddress_AddressLine2`, `t`.`BillingAddress_ZipCode`, `t`.`BillingAddress_Country_Code`, `t`.`BillingAddress_Country_FullName`, `t`.`ShippingAddress_AddressLine1`, `t`.`ShippingAddress_AddressLine2`, `t`.`ShippingAddress_ZipCode`, `t`.`ShippingAddress_Country_Code`, `t`.`ShippingAddress_Country_FullName`, `t`.`Id0`, `t`.`Name0`, `t`.`BillingAddress_AddressLine10`, `t`.`BillingAddress_AddressLine20`, `t`.`BillingAddress_ZipCode0`, `t`.`BillingAddress_Country_Code0`, `t`.`BillingAddress_Country_FullName0`, `t`.`ShippingAddress_AddressLine10`, `t`.`ShippingAddress_AddressLine20`, `t`.`ShippingAddress_ZipCode0`, `t`.`ShippingAddress_Country_Code0`, `t`.`ShippingAddress_Country_FullName0` + SELECT TOP 50 `u`.`Id`, `u`.`Name`, `u`.`BillingAddress_AddressLine1`, `u`.`BillingAddress_AddressLine2`, `u`.`BillingAddress_Tags`, `u`.`BillingAddress_ZipCode`, `u`.`BillingAddress_Country_Code`, `u`.`BillingAddress_Country_FullName`, `u`.`ShippingAddress_AddressLine1`, `u`.`ShippingAddress_AddressLine2`, `u`.`ShippingAddress_Tags`, `u`.`ShippingAddress_ZipCode`, `u`.`ShippingAddress_Country_Code`, `u`.`ShippingAddress_Country_FullName`, `u`.`Id0`, `u`.`Name0`, `u`.`BillingAddress_AddressLine10`, `u`.`BillingAddress_AddressLine20`, `u`.`BillingAddress_Tags0`, `u`.`BillingAddress_ZipCode0`, `u`.`BillingAddress_Country_Code0`, `u`.`BillingAddress_Country_FullName0`, `u`.`ShippingAddress_AddressLine10`, `u`.`ShippingAddress_AddressLine20`, `u`.`ShippingAddress_Tags0`, `u`.`ShippingAddress_ZipCode0`, `u`.`ShippingAddress_Country_Code0`, `u`.`ShippingAddress_Country_FullName0` FROM ( - SELECT `c`.`Id`, `c`.`Name`, `c`.`BillingAddress_AddressLine1`, `c`.`BillingAddress_AddressLine2`, `c`.`BillingAddress_ZipCode`, `c`.`BillingAddress_Country_Code`, `c`.`BillingAddress_Country_FullName`, `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName`, `c0`.`Id` AS `Id0`, `c0`.`Name` AS `Name0`, `c0`.`BillingAddress_AddressLine1` AS `BillingAddress_AddressLine10`, `c0`.`BillingAddress_AddressLine2` AS `BillingAddress_AddressLine20`, `c0`.`BillingAddress_ZipCode` AS `BillingAddress_ZipCode0`, `c0`.`BillingAddress_Country_Code` AS `BillingAddress_Country_Code0`, `c0`.`BillingAddress_Country_FullName` AS `BillingAddress_Country_FullName0`, `c0`.`ShippingAddress_AddressLine1` AS `ShippingAddress_AddressLine10`, `c0`.`ShippingAddress_AddressLine2` AS `ShippingAddress_AddressLine20`, `c0`.`ShippingAddress_ZipCode` AS `ShippingAddress_ZipCode0`, `c0`.`ShippingAddress_Country_Code` AS `ShippingAddress_Country_Code0`, `c0`.`ShippingAddress_Country_FullName` AS `ShippingAddress_Country_FullName0` + SELECT `c`.`Id`, `c`.`Name`, `c`.`BillingAddress_AddressLine1`, `c`.`BillingAddress_AddressLine2`, `c`.`BillingAddress_Tags`, `c`.`BillingAddress_ZipCode`, `c`.`BillingAddress_Country_Code`, `c`.`BillingAddress_Country_FullName`, `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_Tags`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName`, `c0`.`Id` AS `Id0`, `c0`.`Name` AS `Name0`, `c0`.`BillingAddress_AddressLine1` AS `BillingAddress_AddressLine10`, `c0`.`BillingAddress_AddressLine2` AS `BillingAddress_AddressLine20`, `c0`.`BillingAddress_Tags` AS `BillingAddress_Tags0`, `c0`.`BillingAddress_ZipCode` AS `BillingAddress_ZipCode0`, `c0`.`BillingAddress_Country_Code` AS `BillingAddress_Country_Code0`, `c0`.`BillingAddress_Country_FullName` AS `BillingAddress_Country_FullName0`, `c0`.`ShippingAddress_AddressLine1` AS `ShippingAddress_AddressLine10`, `c0`.`ShippingAddress_AddressLine2` AS `ShippingAddress_AddressLine20`, `c0`.`ShippingAddress_Tags` AS `ShippingAddress_Tags0`, `c0`.`ShippingAddress_ZipCode` AS `ShippingAddress_ZipCode0`, `c0`.`ShippingAddress_Country_Code` AS `ShippingAddress_Country_Code0`, `c0`.`ShippingAddress_Country_FullName` AS `ShippingAddress_Country_FullName0` FROM `Customer` AS `c`, `Customer` AS `c0` UNION - SELECT `c1`.`Id`, `c1`.`Name`, `c1`.`BillingAddress_AddressLine1`, `c1`.`BillingAddress_AddressLine2`, `c1`.`BillingAddress_ZipCode`, `c1`.`BillingAddress_Country_Code`, `c1`.`BillingAddress_Country_FullName`, `c1`.`ShippingAddress_AddressLine1`, `c1`.`ShippingAddress_AddressLine2`, `c1`.`ShippingAddress_ZipCode`, `c1`.`ShippingAddress_Country_Code`, `c1`.`ShippingAddress_Country_FullName`, `c2`.`Id` AS `Id0`, `c2`.`Name` AS `Name0`, `c2`.`BillingAddress_AddressLine1` AS `BillingAddress_AddressLine10`, `c2`.`BillingAddress_AddressLine2` AS `BillingAddress_AddressLine20`, `c2`.`BillingAddress_ZipCode` AS `BillingAddress_ZipCode0`, `c2`.`BillingAddress_Country_Code` AS `BillingAddress_Country_Code0`, `c2`.`BillingAddress_Country_FullName` AS `BillingAddress_Country_FullName0`, `c2`.`ShippingAddress_AddressLine1` AS `ShippingAddress_AddressLine10`, `c2`.`ShippingAddress_AddressLine2` AS `ShippingAddress_AddressLine20`, `c2`.`ShippingAddress_ZipCode` AS `ShippingAddress_ZipCode0`, `c2`.`ShippingAddress_Country_Code` AS `ShippingAddress_Country_Code0`, `c2`.`ShippingAddress_Country_FullName` AS `ShippingAddress_Country_FullName0` + SELECT `c1`.`Id`, `c1`.`Name`, `c1`.`BillingAddress_AddressLine1`, `c1`.`BillingAddress_AddressLine2`, `c1`.`BillingAddress_Tags`, `c1`.`BillingAddress_ZipCode`, `c1`.`BillingAddress_Country_Code`, `c1`.`BillingAddress_Country_FullName`, `c1`.`ShippingAddress_AddressLine1`, `c1`.`ShippingAddress_AddressLine2`, `c1`.`ShippingAddress_Tags`, `c1`.`ShippingAddress_ZipCode`, `c1`.`ShippingAddress_Country_Code`, `c1`.`ShippingAddress_Country_FullName`, `c2`.`Id` AS `Id0`, `c2`.`Name` AS `Name0`, `c2`.`BillingAddress_AddressLine1` AS `BillingAddress_AddressLine10`, `c2`.`BillingAddress_AddressLine2` AS `BillingAddress_AddressLine20`, `c2`.`BillingAddress_Tags` AS `BillingAddress_Tags0`, `c2`.`BillingAddress_ZipCode` AS `BillingAddress_ZipCode0`, `c2`.`BillingAddress_Country_Code` AS `BillingAddress_Country_Code0`, `c2`.`BillingAddress_Country_FullName` AS `BillingAddress_Country_FullName0`, `c2`.`ShippingAddress_AddressLine1` AS `ShippingAddress_AddressLine10`, `c2`.`ShippingAddress_AddressLine2` AS `ShippingAddress_AddressLine20`, `c2`.`ShippingAddress_Tags` AS `ShippingAddress_Tags0`, `c2`.`ShippingAddress_ZipCode` AS `ShippingAddress_ZipCode0`, `c2`.`ShippingAddress_Country_Code` AS `ShippingAddress_Country_Code0`, `c2`.`ShippingAddress_Country_FullName` AS `ShippingAddress_Country_FullName0` FROM `Customer` AS `c1`, `Customer` AS `c2` - ) AS `t` - ORDER BY `t`.`Id`, `t`.`Id0` - ) AS `t0` -) AS `t1` -ORDER BY `t1`.`Id`, `t1`.`Id0` + ) AS `u` + ORDER BY `u`.`Id`, `u`.`Id0` + ) AS `u0` +) AS `u1` +ORDER BY `u1`.`Id`, `u1`.`Id0` """); } @@ -1055,17 +1056,17 @@ public override async Task Union_of_same_nested_complex_type_projected_twice_wit AssertSql( """ -SELECT TOP 50 `t`.`BillingAddress_AddressLine1`, `t`.`BillingAddress_AddressLine2`, `t`.`BillingAddress_ZipCode`, `t`.`BillingAddress_Country_Code`, `t`.`BillingAddress_Country_FullName`, `t`.`BillingAddress_AddressLine10`, `t`.`BillingAddress_AddressLine20`, `t`.`BillingAddress_ZipCode0`, `t`.`BillingAddress_Country_Code0`, `t`.`BillingAddress_Country_FullName0` +SELECT TOP 50 `u`.`BillingAddress_AddressLine1`, `u`.`BillingAddress_AddressLine2`, `u`.`BillingAddress_Tags`, `u`.`BillingAddress_ZipCode`, `u`.`BillingAddress_Country_Code`, `u`.`BillingAddress_Country_FullName`, `u`.`BillingAddress_AddressLine10`, `u`.`BillingAddress_AddressLine20`, `u`.`BillingAddress_Tags0`, `u`.`BillingAddress_ZipCode0`, `u`.`BillingAddress_Country_Code0`, `u`.`BillingAddress_Country_FullName0` FROM ( - SELECT `c`.`BillingAddress_AddressLine1`, `c`.`BillingAddress_AddressLine2`, `c`.`BillingAddress_ZipCode`, `c`.`BillingAddress_Country_Code`, `c`.`BillingAddress_Country_FullName`, `c0`.`BillingAddress_AddressLine1` AS `BillingAddress_AddressLine10`, `c0`.`BillingAddress_AddressLine2` AS `BillingAddress_AddressLine20`, `c0`.`BillingAddress_ZipCode` AS `BillingAddress_ZipCode0`, `c0`.`BillingAddress_Country_Code` AS `BillingAddress_Country_Code0`, `c0`.`BillingAddress_Country_FullName` AS `BillingAddress_Country_FullName0` + SELECT `c`.`BillingAddress_AddressLine1`, `c`.`BillingAddress_AddressLine2`, `c`.`BillingAddress_Tags`, `c`.`BillingAddress_ZipCode`, `c`.`BillingAddress_Country_Code`, `c`.`BillingAddress_Country_FullName`, `c0`.`BillingAddress_AddressLine1` AS `BillingAddress_AddressLine10`, `c0`.`BillingAddress_AddressLine2` AS `BillingAddress_AddressLine20`, `c0`.`BillingAddress_Tags` AS `BillingAddress_Tags0`, `c0`.`BillingAddress_ZipCode` AS `BillingAddress_ZipCode0`, `c0`.`BillingAddress_Country_Code` AS `BillingAddress_Country_Code0`, `c0`.`BillingAddress_Country_FullName` AS `BillingAddress_Country_FullName0` FROM `Customer` AS `c`, `Customer` AS `c0` UNION - SELECT `c1`.`BillingAddress_AddressLine1`, `c1`.`BillingAddress_AddressLine2`, `c1`.`BillingAddress_ZipCode`, `c1`.`BillingAddress_Country_Code`, `c1`.`BillingAddress_Country_FullName`, `c2`.`BillingAddress_AddressLine1` AS `BillingAddress_AddressLine10`, `c2`.`BillingAddress_AddressLine2` AS `BillingAddress_AddressLine20`, `c2`.`BillingAddress_ZipCode` AS `BillingAddress_ZipCode0`, `c2`.`BillingAddress_Country_Code` AS `BillingAddress_Country_Code0`, `c2`.`BillingAddress_Country_FullName` AS `BillingAddress_Country_FullName0` + SELECT `c1`.`BillingAddress_AddressLine1`, `c1`.`BillingAddress_AddressLine2`, `c1`.`BillingAddress_Tags`, `c1`.`BillingAddress_ZipCode`, `c1`.`BillingAddress_Country_Code`, `c1`.`BillingAddress_Country_FullName`, `c2`.`BillingAddress_AddressLine1` AS `BillingAddress_AddressLine10`, `c2`.`BillingAddress_AddressLine2` AS `BillingAddress_AddressLine20`, `c2`.`BillingAddress_Tags` AS `BillingAddress_Tags0`, `c2`.`BillingAddress_ZipCode` AS `BillingAddress_ZipCode0`, `c2`.`BillingAddress_Country_Code` AS `BillingAddress_Country_Code0`, `c2`.`BillingAddress_Country_FullName` AS `BillingAddress_Country_FullName0` FROM `Customer` AS `c1`, `Customer` AS `c2` -) AS `t` -ORDER BY `t`.`BillingAddress_ZipCode`, `t`.`BillingAddress_ZipCode0` +) AS `u` +ORDER BY `u`.`BillingAddress_ZipCode`, `u`.`BillingAddress_ZipCode0` """); } @@ -1074,25 +1075,25 @@ public override async Task Union_of_same_nested_complex_type_projected_twice_wit await base.Union_of_same_nested_complex_type_projected_twice_with_double_pushdown(async); AssertSql( -""" -SELECT TOP 50 `t1`.`BillingAddress_AddressLine1`, `t1`.`BillingAddress_AddressLine2`, `t1`.`BillingAddress_ZipCode`, `t1`.`BillingAddress_Country_Code`, `t1`.`BillingAddress_Country_FullName`, `t1`.`BillingAddress_AddressLine10`, `t1`.`BillingAddress_AddressLine20`, `t1`.`BillingAddress_ZipCode0`, `t1`.`BillingAddress_Country_Code0`, `t1`.`BillingAddress_Country_FullName0` + """ +SELECT TOP 50 `u1`.`BillingAddress_AddressLine1`, `u1`.`BillingAddress_AddressLine2`, `u1`.`BillingAddress_Tags`, `u1`.`BillingAddress_ZipCode`, `u1`.`BillingAddress_Country_Code`, `u1`.`BillingAddress_Country_FullName`, `u1`.`BillingAddress_AddressLine10`, `u1`.`BillingAddress_AddressLine20`, `u1`.`BillingAddress_Tags0`, `u1`.`BillingAddress_ZipCode0`, `u1`.`BillingAddress_Country_Code0`, `u1`.`BillingAddress_Country_FullName0` FROM ( - SELECT DISTINCT `t0`.`BillingAddress_AddressLine1`, `t0`.`BillingAddress_AddressLine2`, `t0`.`BillingAddress_ZipCode`, `t0`.`BillingAddress_Country_Code`, `t0`.`BillingAddress_Country_FullName`, `t0`.`BillingAddress_AddressLine10`, `t0`.`BillingAddress_AddressLine20`, `t0`.`BillingAddress_ZipCode0`, `t0`.`BillingAddress_Country_Code0`, `t0`.`BillingAddress_Country_FullName0` + SELECT DISTINCT `u0`.`BillingAddress_AddressLine1`, `u0`.`BillingAddress_AddressLine2`, `u0`.`BillingAddress_Tags`, `u0`.`BillingAddress_ZipCode`, `u0`.`BillingAddress_Country_Code`, `u0`.`BillingAddress_Country_FullName`, `u0`.`BillingAddress_AddressLine10`, `u0`.`BillingAddress_AddressLine20`, `u0`.`BillingAddress_Tags0`, `u0`.`BillingAddress_ZipCode0`, `u0`.`BillingAddress_Country_Code0`, `u0`.`BillingAddress_Country_FullName0` FROM ( - SELECT TOP 50 `t`.`BillingAddress_AddressLine1`, `t`.`BillingAddress_AddressLine2`, `t`.`BillingAddress_ZipCode`, `t`.`BillingAddress_Country_Code`, `t`.`BillingAddress_Country_FullName`, `t`.`BillingAddress_AddressLine10`, `t`.`BillingAddress_AddressLine20`, `t`.`BillingAddress_ZipCode0`, `t`.`BillingAddress_Country_Code0`, `t`.`BillingAddress_Country_FullName0` + SELECT TOP 50 `u`.`BillingAddress_AddressLine1`, `u`.`BillingAddress_AddressLine2`, `u`.`BillingAddress_Tags`, `u`.`BillingAddress_ZipCode`, `u`.`BillingAddress_Country_Code`, `u`.`BillingAddress_Country_FullName`, `u`.`BillingAddress_AddressLine10`, `u`.`BillingAddress_AddressLine20`, `u`.`BillingAddress_Tags0`, `u`.`BillingAddress_ZipCode0`, `u`.`BillingAddress_Country_Code0`, `u`.`BillingAddress_Country_FullName0` FROM ( - SELECT `c`.`BillingAddress_AddressLine1`, `c`.`BillingAddress_AddressLine2`, `c`.`BillingAddress_ZipCode`, `c`.`BillingAddress_Country_Code`, `c`.`BillingAddress_Country_FullName`, `c0`.`BillingAddress_AddressLine1` AS `BillingAddress_AddressLine10`, `c0`.`BillingAddress_AddressLine2` AS `BillingAddress_AddressLine20`, `c0`.`BillingAddress_ZipCode` AS `BillingAddress_ZipCode0`, `c0`.`BillingAddress_Country_Code` AS `BillingAddress_Country_Code0`, `c0`.`BillingAddress_Country_FullName` AS `BillingAddress_Country_FullName0` + SELECT `c`.`BillingAddress_AddressLine1`, `c`.`BillingAddress_AddressLine2`, `c`.`BillingAddress_Tags`, `c`.`BillingAddress_ZipCode`, `c`.`BillingAddress_Country_Code`, `c`.`BillingAddress_Country_FullName`, `c0`.`BillingAddress_AddressLine1` AS `BillingAddress_AddressLine10`, `c0`.`BillingAddress_AddressLine2` AS `BillingAddress_AddressLine20`, `c0`.`BillingAddress_Tags` AS `BillingAddress_Tags0`, `c0`.`BillingAddress_ZipCode` AS `BillingAddress_ZipCode0`, `c0`.`BillingAddress_Country_Code` AS `BillingAddress_Country_Code0`, `c0`.`BillingAddress_Country_FullName` AS `BillingAddress_Country_FullName0` FROM `Customer` AS `c`, `Customer` AS `c0` UNION - SELECT `c1`.`BillingAddress_AddressLine1`, `c1`.`BillingAddress_AddressLine2`, `c1`.`BillingAddress_ZipCode`, `c1`.`BillingAddress_Country_Code`, `c1`.`BillingAddress_Country_FullName`, `c2`.`BillingAddress_AddressLine1` AS `BillingAddress_AddressLine10`, `c2`.`BillingAddress_AddressLine2` AS `BillingAddress_AddressLine20`, `c2`.`BillingAddress_ZipCode` AS `BillingAddress_ZipCode0`, `c2`.`BillingAddress_Country_Code` AS `BillingAddress_Country_Code0`, `c2`.`BillingAddress_Country_FullName` AS `BillingAddress_Country_FullName0` + SELECT `c1`.`BillingAddress_AddressLine1`, `c1`.`BillingAddress_AddressLine2`, `c1`.`BillingAddress_Tags`, `c1`.`BillingAddress_ZipCode`, `c1`.`BillingAddress_Country_Code`, `c1`.`BillingAddress_Country_FullName`, `c2`.`BillingAddress_AddressLine1` AS `BillingAddress_AddressLine10`, `c2`.`BillingAddress_AddressLine2` AS `BillingAddress_AddressLine20`, `c2`.`BillingAddress_Tags` AS `BillingAddress_Tags0`, `c2`.`BillingAddress_ZipCode` AS `BillingAddress_ZipCode0`, `c2`.`BillingAddress_Country_Code` AS `BillingAddress_Country_Code0`, `c2`.`BillingAddress_Country_FullName` AS `BillingAddress_Country_FullName0` FROM `Customer` AS `c1`, `Customer` AS `c2` - ) AS `t` - ORDER BY `t`.`BillingAddress_ZipCode`, `t`.`BillingAddress_ZipCode0` - ) AS `t0` -) AS `t1` -ORDER BY `t1`.`BillingAddress_ZipCode`, `t1`.`BillingAddress_ZipCode0` + ) AS `u` + ORDER BY `u`.`BillingAddress_ZipCode`, `u`.`BillingAddress_ZipCode0` + ) AS `u0` +) AS `u1` +ORDER BY `u1`.`BillingAddress_ZipCode`, `u1`.`BillingAddress_ZipCode0` """); } @@ -1120,19 +1121,82 @@ public override async Task Same_complex_type_projected_twice_with_pushdown_as_pa AssertSql(""); } - /*public override async Task Projecting_property_of_complex_type_using_left_join_with_pushdown(bool async) + #region GroupBy + + public override async Task GroupBy_over_property_in_nested_complex_type(bool async) + { + await base.GroupBy_over_property_in_nested_complex_type(async); + + AssertSql( + """ +SELECT `c`.`ShippingAddress_Country_Code` AS `Code`, COUNT(*) AS `Count` +FROM `Customer` AS `c` +GROUP BY `c`.`ShippingAddress_Country_Code` +"""); + } + + public override async Task GroupBy_over_complex_type(bool async) + { + await base.GroupBy_over_complex_type(async); + + AssertSql( + """ +SELECT `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_Tags`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName`, COUNT(*) AS `Count` +FROM `Customer` AS `c` +GROUP BY `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_Tags`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName` +"""); + } + + public override async Task GroupBy_over_nested_complex_type(bool async) + { + await base.GroupBy_over_nested_complex_type(async); + + AssertSql( + """ +SELECT `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName`, COUNT(*) AS `Count` +FROM `Customer` AS `c` +GROUP BY `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName` +"""); + } + + public override async Task Entity_with_complex_type_with_group_by_and_first(bool async) + { + await base.Entity_with_complex_type_with_group_by_and_first(async); + + AssertSql( + """ +SELECT [c3].[Id], [c3].[Name], [c3].[BillingAddress_AddressLine1], [c3].[BillingAddress_AddressLine2], [c3].[BillingAddress_Tags], [c3].[BillingAddress_ZipCode], [c3].[BillingAddress_Country_Code], [c3].[BillingAddress_Country_FullName], [c3].[ShippingAddress_AddressLine1], [c3].[ShippingAddress_AddressLine2], [c3].[ShippingAddress_Tags], [c3].[ShippingAddress_ZipCode], [c3].[ShippingAddress_Country_Code], [c3].[ShippingAddress_Country_FullName] +FROM ( + SELECT [c].[Id] + FROM [Customer] AS [c] + GROUP BY [c].[Id] +) AS [c1] +LEFT JOIN ( + SELECT [c2].[Id], [c2].[Name], [c2].[BillingAddress_AddressLine1], [c2].[BillingAddress_AddressLine2], [c2].[BillingAddress_Tags], [c2].[BillingAddress_ZipCode], [c2].[BillingAddress_Country_Code], [c2].[BillingAddress_Country_FullName], [c2].[ShippingAddress_AddressLine1], [c2].[ShippingAddress_AddressLine2], [c2].[ShippingAddress_Tags], [c2].[ShippingAddress_ZipCode], [c2].[ShippingAddress_Country_Code], [c2].[ShippingAddress_Country_FullName] + FROM ( + SELECT [c0].[Id], [c0].[Name], [c0].[BillingAddress_AddressLine1], [c0].[BillingAddress_AddressLine2], [c0].[BillingAddress_Tags], [c0].[BillingAddress_ZipCode], [c0].[BillingAddress_Country_Code], [c0].[BillingAddress_Country_FullName], [c0].[ShippingAddress_AddressLine1], [c0].[ShippingAddress_AddressLine2], [c0].[ShippingAddress_Tags], [c0].[ShippingAddress_ZipCode], [c0].[ShippingAddress_Country_Code], [c0].[ShippingAddress_Country_FullName], ROW_NUMBER() OVER(PARTITION BY [c0].[Id] ORDER BY [c0].[Id]) AS [row] + FROM [Customer] AS [c0] + ) AS [c2] + WHERE [c2].[row] <= 1 +) AS [c3] ON [c1].[Id] = [c3].[Id] +"""); + } + + #endregion GroupBy + + public override async Task Projecting_property_of_complex_type_using_left_join_with_pushdown(bool async) { await base.Projecting_property_of_complex_type_using_left_join_with_pushdown(async); AssertSql( -""" -SELECT [t].[BillingAddress_ZipCode] -FROM [CustomerGroup] AS [c] + """ +SELECT `c1`.`BillingAddress_ZipCode` +FROM `CustomerGroup` AS `c` LEFT JOIN ( - SELECT [c0].[Id], [c0].[BillingAddress_ZipCode] - FROM [Customer] AS [c0] - WHERE [c0].[Id] > 5 -) AS [t] ON [c].[Id] = [t].[Id] + SELECT `c0`.`Id`, `c0`.`BillingAddress_ZipCode` + FROM `Customer` AS `c0` + WHERE `c0`.`Id` > 5 +) AS `c1` ON `c`.`Id` = `c1`.`Id` """); } @@ -1141,19 +1205,17 @@ public override async Task Projecting_complex_from_optional_navigation_using_con await base.Projecting_complex_from_optional_navigation_using_conditional(async); AssertSql( -""" -@__p_0='20' - -SELECT [t0].[ShippingAddress_ZipCode] + """ +SELECT `s0`.`ShippingAddress_ZipCode` FROM ( - SELECT DISTINCT [t].[ShippingAddress_AddressLine1], [t].[ShippingAddress_AddressLine2], [t].[ShippingAddress_ZipCode], [t].[ShippingAddress_Country_Code], [t].[ShippingAddress_Country_FullName] + SELECT DISTINCT `s`.`ShippingAddress_AddressLine1`, `s`.`ShippingAddress_AddressLine2`, `s`.`ShippingAddress_Tags`, `s`.`ShippingAddress_ZipCode`, `s`.`ShippingAddress_Country_Code`, `s`.`ShippingAddress_Country_FullName` FROM ( - SELECT TOP(@__p_0) [c0].[ShippingAddress_AddressLine1], [c0].[ShippingAddress_AddressLine2], [c0].[ShippingAddress_ZipCode], [c0].[ShippingAddress_Country_Code], [c0].[ShippingAddress_Country_FullName] - FROM [CustomerGroup] AS [c] - LEFT JOIN [Customer] AS [c0] ON [c].[OptionalCustomerId] = [c0].[Id] - ORDER BY [c0].[ShippingAddress_ZipCode] - ) AS [t] -) AS [t0] + SELECT TOP 20 `c0`.`ShippingAddress_AddressLine1`, `c0`.`ShippingAddress_AddressLine2`, `c0`.`ShippingAddress_Tags`, `c0`.`ShippingAddress_ZipCode`, `c0`.`ShippingAddress_Country_Code`, `c0`.`ShippingAddress_Country_FullName` + FROM `CustomerGroup` AS `c` + LEFT JOIN `Customer` AS `c0` ON `c`.`OptionalCustomerId` = `c0`.`Id` + ORDER BY `c0`.`ShippingAddress_ZipCode` + ) AS `s` +) AS `s0` """); } @@ -1162,29 +1224,26 @@ public override async Task Project_entity_with_complex_type_pushdown_and_then_le await base.Project_entity_with_complex_type_pushdown_and_then_left_join(async); AssertSql( -""" -@__p_0='20' -@__p_1='30' - -SELECT [t0].[BillingAddress_ZipCode] AS [Zip1], [t1].[ShippingAddress_ZipCode] AS [Zip2] + """ +SELECT `c3`.`BillingAddress_ZipCode` AS `Zip1`, `c4`.`ShippingAddress_ZipCode` AS `Zip2` FROM ( - SELECT DISTINCT [t].[Id], [t].[Name], [t].[BillingAddress_AddressLine1], [t].[BillingAddress_AddressLine2], [t].[BillingAddress_ZipCode], [t].[BillingAddress_Country_Code], [t].[BillingAddress_Country_FullName], [t].[ShippingAddress_AddressLine1], [t].[ShippingAddress_AddressLine2], [t].[ShippingAddress_ZipCode], [t].[ShippingAddress_Country_Code], [t].[ShippingAddress_Country_FullName] + SELECT DISTINCT `c0`.`Id`, `c0`.`Name`, `c0`.`BillingAddress_AddressLine1`, `c0`.`BillingAddress_AddressLine2`, `c0`.`BillingAddress_Tags`, `c0`.`BillingAddress_ZipCode`, `c0`.`BillingAddress_Country_Code`, `c0`.`BillingAddress_Country_FullName`, `c0`.`ShippingAddress_AddressLine1`, `c0`.`ShippingAddress_AddressLine2`, `c0`.`ShippingAddress_Tags`, `c0`.`ShippingAddress_ZipCode`, `c0`.`ShippingAddress_Country_Code`, `c0`.`ShippingAddress_Country_FullName` FROM ( - SELECT TOP(@__p_0) [c].[Id], [c].[Name], [c].[BillingAddress_AddressLine1], [c].[BillingAddress_AddressLine2], [c].[BillingAddress_ZipCode], [c].[BillingAddress_Country_Code], [c].[BillingAddress_Country_FullName], [c].[ShippingAddress_AddressLine1], [c].[ShippingAddress_AddressLine2], [c].[ShippingAddress_ZipCode], [c].[ShippingAddress_Country_Code], [c].[ShippingAddress_Country_FullName] - FROM [Customer] AS [c] - ORDER BY [c].[Id] - ) AS [t] -) AS [t0] + SELECT TOP 20 `c`.`Id`, `c`.`Name`, `c`.`BillingAddress_AddressLine1`, `c`.`BillingAddress_AddressLine2`, `c`.`BillingAddress_Tags`, `c`.`BillingAddress_ZipCode`, `c`.`BillingAddress_Country_Code`, `c`.`BillingAddress_Country_FullName`, `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_Tags`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName` + FROM `Customer` AS `c` + ORDER BY `c`.`Id` + ) AS `c0` +) AS `c3` LEFT JOIN ( - SELECT DISTINCT [t2].[Id], [t2].[Name], [t2].[BillingAddress_AddressLine1], [t2].[BillingAddress_AddressLine2], [t2].[BillingAddress_ZipCode], [t2].[BillingAddress_Country_Code], [t2].[BillingAddress_Country_FullName], [t2].[ShippingAddress_AddressLine1], [t2].[ShippingAddress_AddressLine2], [t2].[ShippingAddress_ZipCode], [t2].[ShippingAddress_Country_Code], [t2].[ShippingAddress_Country_FullName] + SELECT DISTINCT `c2`.`Id`, `c2`.`Name`, `c2`.`BillingAddress_AddressLine1`, `c2`.`BillingAddress_AddressLine2`, `c2`.`BillingAddress_Tags`, `c2`.`BillingAddress_ZipCode`, `c2`.`BillingAddress_Country_Code`, `c2`.`BillingAddress_Country_FullName`, `c2`.`ShippingAddress_AddressLine1`, `c2`.`ShippingAddress_AddressLine2`, `c2`.`ShippingAddress_Tags`, `c2`.`ShippingAddress_ZipCode`, `c2`.`ShippingAddress_Country_Code`, `c2`.`ShippingAddress_Country_FullName` FROM ( - SELECT TOP(@__p_1) [c0].[Id], [c0].[Name], [c0].[BillingAddress_AddressLine1], [c0].[BillingAddress_AddressLine2], [c0].[BillingAddress_ZipCode], [c0].[BillingAddress_Country_Code], [c0].[BillingAddress_Country_FullName], [c0].[ShippingAddress_AddressLine1], [c0].[ShippingAddress_AddressLine2], [c0].[ShippingAddress_ZipCode], [c0].[ShippingAddress_Country_Code], [c0].[ShippingAddress_Country_FullName] - FROM [Customer] AS [c0] - ORDER BY [c0].[Id] DESC - ) AS [t2] -) AS [t1] ON [t0].[Id] = [t1].[Id] + SELECT TOP 30 `c1`.`Id`, `c1`.`Name`, `c1`.`BillingAddress_AddressLine1`, `c1`.`BillingAddress_AddressLine2`, `c1`.`BillingAddress_Tags`, `c1`.`BillingAddress_ZipCode`, `c1`.`BillingAddress_Country_Code`, `c1`.`BillingAddress_Country_FullName`, `c1`.`ShippingAddress_AddressLine1`, `c1`.`ShippingAddress_AddressLine2`, `c1`.`ShippingAddress_Tags`, `c1`.`ShippingAddress_ZipCode`, `c1`.`ShippingAddress_Country_Code`, `c1`.`ShippingAddress_Country_FullName` + FROM `Customer` AS `c1` + ORDER BY `c1`.`Id` DESC + ) AS `c2` +) AS `c4` ON `c3`.`Id` = `c4`.`Id` """); - }*/ + } [ConditionalFact] public virtual void Check_all_tests_overridden() diff --git a/test/EFCore.Jet.FunctionalTests/Query/CompositeKeysQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/CompositeKeysQueryJetTest.cs index da089785..95ca34a3 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/CompositeKeysQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/CompositeKeysQueryJetTest.cs @@ -18,9 +18,6 @@ public CompositeKeysQueryJetTest( //Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); } - protected override bool CanExecuteQueryString - => false; - public override async Task Projecting_multiple_collections_same_level_top_level_ordering(bool async) { await base.Projecting_multiple_collections_same_level_top_level_ordering(async); @@ -82,15 +79,15 @@ public override async Task Projecting_collections_multi_level(bool async) await base.Projecting_collections_multi_level(async); AssertSql( -""" -SELECT `c`.`Name`, `c`.`Id1`, `c`.`Id2`, `t`.`Name`, `t`.`Id1`, `t`.`Id2`, `t`.`Id10`, `t`.`Id20`, `t`.`Level2_Optional_Id1`, `t`.`Level2_Optional_Id2`, `t`.`Level2_Required_Id1`, `t`.`Level2_Required_Id2`, `t`.`Name0`, `t`.`OneToMany_Optional_Inverse3Id1`, `t`.`OneToMany_Optional_Inverse3Id2`, `t`.`OneToMany_Optional_Self_Inverse3Id1`, `t`.`OneToMany_Optional_Self_Inverse3Id2`, `t`.`OneToMany_Required_Inverse3Id1`, `t`.`OneToMany_Required_Inverse3Id2`, `t`.`OneToMany_Required_Self_Inverse3Id1`, `t`.`OneToMany_Required_Self_Inverse3Id2`, `t`.`OneToOne_Optional_PK_Inverse3Id1`, `t`.`OneToOne_Optional_PK_Inverse3Id2`, `t`.`OneToOne_Optional_Self3Id1`, `t`.`OneToOne_Optional_Self3Id2` + """ +SELECT `c`.`Name`, `c`.`Id1`, `c`.`Id2`, `s`.`Name`, `s`.`Id1`, `s`.`Id2`, `s`.`Id10`, `s`.`Id20`, `s`.`Level2_Optional_Id1`, `s`.`Level2_Optional_Id2`, `s`.`Level2_Required_Id1`, `s`.`Level2_Required_Id2`, `s`.`Name0`, `s`.`OneToMany_Optional_Inverse3Id1`, `s`.`OneToMany_Optional_Inverse3Id2`, `s`.`OneToMany_Optional_Self_Inverse3Id1`, `s`.`OneToMany_Optional_Self_Inverse3Id2`, `s`.`OneToMany_Required_Inverse3Id1`, `s`.`OneToMany_Required_Inverse3Id2`, `s`.`OneToMany_Required_Self_Inverse3Id1`, `s`.`OneToMany_Required_Self_Inverse3Id2`, `s`.`OneToOne_Optional_PK_Inverse3Id1`, `s`.`OneToOne_Optional_PK_Inverse3Id2`, `s`.`OneToOne_Optional_Self3Id1`, `s`.`OneToOne_Optional_Self3Id2` FROM `CompositeOnes` AS `c` LEFT JOIN ( SELECT `c0`.`Name`, `c0`.`Id1`, `c0`.`Id2`, `c1`.`Id1` AS `Id10`, `c1`.`Id2` AS `Id20`, `c1`.`Level2_Optional_Id1`, `c1`.`Level2_Optional_Id2`, `c1`.`Level2_Required_Id1`, `c1`.`Level2_Required_Id2`, `c1`.`Name` AS `Name0`, `c1`.`OneToMany_Optional_Inverse3Id1`, `c1`.`OneToMany_Optional_Inverse3Id2`, `c1`.`OneToMany_Optional_Self_Inverse3Id1`, `c1`.`OneToMany_Optional_Self_Inverse3Id2`, `c1`.`OneToMany_Required_Inverse3Id1`, `c1`.`OneToMany_Required_Inverse3Id2`, `c1`.`OneToMany_Required_Self_Inverse3Id1`, `c1`.`OneToMany_Required_Self_Inverse3Id2`, `c1`.`OneToOne_Optional_PK_Inverse3Id1`, `c1`.`OneToOne_Optional_PK_Inverse3Id2`, `c1`.`OneToOne_Optional_Self3Id1`, `c1`.`OneToOne_Optional_Self3Id2`, `c0`.`OneToMany_Optional_Inverse2Id1`, `c0`.`OneToMany_Optional_Inverse2Id2` FROM `CompositeTwos` AS `c0` LEFT JOIN `CompositeThrees` AS `c1` ON `c0`.`Id1` = `c1`.`OneToMany_Required_Inverse3Id1` AND `c0`.`Id2` = `c1`.`OneToMany_Required_Inverse3Id2` -) AS `t` ON `c`.`Id1` = `t`.`OneToMany_Optional_Inverse2Id1` AND `c`.`Id2` = `t`.`OneToMany_Optional_Inverse2Id2` -ORDER BY `c`.`Id2`, `c`.`Id1`, `t`.`Id2`, `t`.`Id1`, `t`.`Id20` DESC +) AS `s` ON `c`.`Id1` = `s`.`OneToMany_Optional_Inverse2Id1` AND `c`.`Id2` = `s`.`OneToMany_Optional_Inverse2Id2` +ORDER BY `c`.`Id2`, `c`.`Id1`, `s`.`Id2`, `s`.`Id1`, `s`.`Id20` DESC """); } @@ -99,42 +96,42 @@ public override async Task Projecting_multiple_collections_on_multiple_levels_no await base.Projecting_multiple_collections_on_multiple_levels_no_explicit_ordering(async); AssertSql( -""" -SELECT `c`.`Name`, `c`.`Id1`, `c`.`Id2`, `t1`.`Name`, `t1`.`Id1`, `t1`.`Id2`, `t1`.`Name0`, `t1`.`Id10`, `t1`.`Id20`, `t1`.`Id100`, `t1`.`Id200`, `t1`.`Level3_Optional_Id1`, `t1`.`Level3_Optional_Id2`, `t1`.`Level3_Required_Id1`, `t1`.`Level3_Required_Id2`, `t1`.`Name00`, `t1`.`OneToMany_Optional_Inverse4Id1`, `t1`.`OneToMany_Optional_Inverse4Id2`, `t1`.`OneToMany_Optional_Self_Inverse4Id1`, `t1`.`OneToMany_Optional_Self_Inverse4Id2`, `t1`.`OneToMany_Required_Inverse4Id1`, `t1`.`OneToMany_Required_Inverse4Id2`, `t1`.`OneToMany_Required_Self_Inverse4Id1`, `t1`.`OneToMany_Required_Self_Inverse4Id2`, `t1`.`OneToOne_Optional_PK_Inverse4Id1`, `t1`.`OneToOne_Optional_PK_Inverse4Id2`, `t1`.`OneToOne_Optional_Self4Id1`, `t1`.`OneToOne_Optional_Self4Id2`, `t1`.`Id11`, `t1`.`Id21`, `t1`.`Level3_Optional_Id10`, `t1`.`Level3_Optional_Id20`, `t1`.`Level3_Required_Id10`, `t1`.`Level3_Required_Id20`, `t1`.`Name1`, `t1`.`OneToMany_Optional_Inverse4Id10`, `t1`.`OneToMany_Optional_Inverse4Id20`, `t1`.`OneToMany_Optional_Self_Inverse4Id10`, `t1`.`OneToMany_Optional_Self_Inverse4Id20`, `t1`.`OneToMany_Required_Inverse4Id10`, `t1`.`OneToMany_Required_Inverse4Id20`, `t1`.`OneToMany_Required_Self_Inverse4Id10`, `t1`.`OneToMany_Required_Self_Inverse4Id20`, `t1`.`OneToOne_Optional_PK_Inverse4Id10`, `t1`.`OneToOne_Optional_PK_Inverse4Id20`, `t1`.`OneToOne_Optional_Self4Id10`, `t1`.`OneToOne_Optional_Self4Id20`, `t1`.`Name2`, `t1`.`Id12`, `t1`.`Id22`, `t1`.`Id101`, `t1`.`Id201`, `t1`.`Level3_Optional_Id11`, `t1`.`Level3_Optional_Id21`, `t1`.`Level3_Required_Id11`, `t1`.`Level3_Required_Id21`, `t1`.`Name01`, `t1`.`OneToMany_Optional_Inverse4Id11`, `t1`.`OneToMany_Optional_Inverse4Id21`, `t1`.`OneToMany_Optional_Self_Inverse4Id11`, `t1`.`OneToMany_Optional_Self_Inverse4Id21`, `t1`.`OneToMany_Required_Inverse4Id11`, `t1`.`OneToMany_Required_Inverse4Id21`, `t1`.`OneToMany_Required_Self_Inverse4Id11`, `t1`.`OneToMany_Required_Self_Inverse4Id21`, `t1`.`OneToOne_Optional_PK_Inverse4Id11`, `t1`.`OneToOne_Optional_PK_Inverse4Id21`, `t1`.`OneToOne_Optional_Self4Id11`, `t1`.`OneToOne_Optional_Self4Id21`, `t1`.`Id110`, `t1`.`Id210`, `t1`.`Level3_Optional_Id100`, `t1`.`Level3_Optional_Id200`, `t1`.`Level3_Required_Id100`, `t1`.`Level3_Required_Id200`, `t1`.`Name10`, `t1`.`OneToMany_Optional_Inverse4Id100`, `t1`.`OneToMany_Optional_Inverse4Id200`, `t1`.`OneToMany_Optional_Self_Inverse4Id100`, `t1`.`OneToMany_Optional_Self_Inverse4Id200`, `t1`.`OneToMany_Required_Inverse4Id100`, `t1`.`OneToMany_Required_Inverse4Id200`, `t1`.`OneToMany_Required_Self_Inverse4Id100`, `t1`.`OneToMany_Required_Self_Inverse4Id200`, `t1`.`OneToOne_Optional_PK_Inverse4Id100`, `t1`.`OneToOne_Optional_PK_Inverse4Id200`, `t1`.`OneToOne_Optional_Self4Id100`, `t1`.`OneToOne_Optional_Self4Id200`, `t2`.`Name`, `t2`.`Id1`, `t2`.`Id2`, `t2`.`Name0`, `t2`.`Id10`, `t2`.`Id20`, `t2`.`Id100`, `t2`.`Id200`, `t2`.`Level3_Optional_Id1`, `t2`.`Level3_Optional_Id2`, `t2`.`Level3_Required_Id1`, `t2`.`Level3_Required_Id2`, `t2`.`Name00`, `t2`.`OneToMany_Optional_Inverse4Id1`, `t2`.`OneToMany_Optional_Inverse4Id2`, `t2`.`OneToMany_Optional_Self_Inverse4Id1`, `t2`.`OneToMany_Optional_Self_Inverse4Id2`, `t2`.`OneToMany_Required_Inverse4Id1`, `t2`.`OneToMany_Required_Inverse4Id2`, `t2`.`OneToMany_Required_Self_Inverse4Id1`, `t2`.`OneToMany_Required_Self_Inverse4Id2`, `t2`.`OneToOne_Optional_PK_Inverse4Id1`, `t2`.`OneToOne_Optional_PK_Inverse4Id2`, `t2`.`OneToOne_Optional_Self4Id1`, `t2`.`OneToOne_Optional_Self4Id2`, `t2`.`Id11`, `t2`.`Id21`, `t2`.`Level3_Optional_Id10`, `t2`.`Level3_Optional_Id20`, `t2`.`Level3_Required_Id10`, `t2`.`Level3_Required_Id20`, `t2`.`Name1`, `t2`.`OneToMany_Optional_Inverse4Id10`, `t2`.`OneToMany_Optional_Inverse4Id20`, `t2`.`OneToMany_Optional_Self_Inverse4Id10`, `t2`.`OneToMany_Optional_Self_Inverse4Id20`, `t2`.`OneToMany_Required_Inverse4Id10`, `t2`.`OneToMany_Required_Inverse4Id20`, `t2`.`OneToMany_Required_Self_Inverse4Id10`, `t2`.`OneToMany_Required_Self_Inverse4Id20`, `t2`.`OneToOne_Optional_PK_Inverse4Id10`, `t2`.`OneToOne_Optional_PK_Inverse4Id20`, `t2`.`OneToOne_Optional_Self4Id10`, `t2`.`OneToOne_Optional_Self4Id20`, `t2`.`Name2`, `t2`.`Id12`, `t2`.`Id22`, `t2`.`Id101`, `t2`.`Id201`, `t2`.`Level3_Optional_Id11`, `t2`.`Level3_Optional_Id21`, `t2`.`Level3_Required_Id11`, `t2`.`Level3_Required_Id21`, `t2`.`Name01`, `t2`.`OneToMany_Optional_Inverse4Id11`, `t2`.`OneToMany_Optional_Inverse4Id21`, `t2`.`OneToMany_Optional_Self_Inverse4Id11`, `t2`.`OneToMany_Optional_Self_Inverse4Id21`, `t2`.`OneToMany_Required_Inverse4Id11`, `t2`.`OneToMany_Required_Inverse4Id21`, `t2`.`OneToMany_Required_Self_Inverse4Id11`, `t2`.`OneToMany_Required_Self_Inverse4Id21`, `t2`.`OneToOne_Optional_PK_Inverse4Id11`, `t2`.`OneToOne_Optional_PK_Inverse4Id21`, `t2`.`OneToOne_Optional_Self4Id11`, `t2`.`OneToOne_Optional_Self4Id21`, `t2`.`Id110`, `t2`.`Id210`, `t2`.`Level3_Optional_Id100`, `t2`.`Level3_Optional_Id200`, `t2`.`Level3_Required_Id100`, `t2`.`Level3_Required_Id200`, `t2`.`Name10`, `t2`.`OneToMany_Optional_Inverse4Id100`, `t2`.`OneToMany_Optional_Inverse4Id200`, `t2`.`OneToMany_Optional_Self_Inverse4Id100`, `t2`.`OneToMany_Optional_Self_Inverse4Id200`, `t2`.`OneToMany_Required_Inverse4Id100`, `t2`.`OneToMany_Required_Inverse4Id200`, `t2`.`OneToMany_Required_Self_Inverse4Id100`, `t2`.`OneToMany_Required_Self_Inverse4Id200`, `t2`.`OneToOne_Optional_PK_Inverse4Id100`, `t2`.`OneToOne_Optional_PK_Inverse4Id200`, `t2`.`OneToOne_Optional_Self4Id100`, `t2`.`OneToOne_Optional_Self4Id200` + """ +SELECT `c`.`Name`, `c`.`Id1`, `c`.`Id2`, `s1`.`Name`, `s1`.`Id1`, `s1`.`Id2`, `s1`.`Name0`, `s1`.`Id10`, `s1`.`Id20`, `s1`.`Id100`, `s1`.`Id200`, `s1`.`Level3_Optional_Id1`, `s1`.`Level3_Optional_Id2`, `s1`.`Level3_Required_Id1`, `s1`.`Level3_Required_Id2`, `s1`.`Name00`, `s1`.`OneToMany_Optional_Inverse4Id1`, `s1`.`OneToMany_Optional_Inverse4Id2`, `s1`.`OneToMany_Optional_Self_Inverse4Id1`, `s1`.`OneToMany_Optional_Self_Inverse4Id2`, `s1`.`OneToMany_Required_Inverse4Id1`, `s1`.`OneToMany_Required_Inverse4Id2`, `s1`.`OneToMany_Required_Self_Inverse4Id1`, `s1`.`OneToMany_Required_Self_Inverse4Id2`, `s1`.`OneToOne_Optional_PK_Inverse4Id1`, `s1`.`OneToOne_Optional_PK_Inverse4Id2`, `s1`.`OneToOne_Optional_Self4Id1`, `s1`.`OneToOne_Optional_Self4Id2`, `s1`.`Id11`, `s1`.`Id21`, `s1`.`Level3_Optional_Id10`, `s1`.`Level3_Optional_Id20`, `s1`.`Level3_Required_Id10`, `s1`.`Level3_Required_Id20`, `s1`.`Name1`, `s1`.`OneToMany_Optional_Inverse4Id10`, `s1`.`OneToMany_Optional_Inverse4Id20`, `s1`.`OneToMany_Optional_Self_Inverse4Id10`, `s1`.`OneToMany_Optional_Self_Inverse4Id20`, `s1`.`OneToMany_Required_Inverse4Id10`, `s1`.`OneToMany_Required_Inverse4Id20`, `s1`.`OneToMany_Required_Self_Inverse4Id10`, `s1`.`OneToMany_Required_Self_Inverse4Id20`, `s1`.`OneToOne_Optional_PK_Inverse4Id10`, `s1`.`OneToOne_Optional_PK_Inverse4Id20`, `s1`.`OneToOne_Optional_Self4Id10`, `s1`.`OneToOne_Optional_Self4Id20`, `s1`.`Name2`, `s1`.`Id12`, `s1`.`Id22`, `s1`.`Id101`, `s1`.`Id201`, `s1`.`Level3_Optional_Id11`, `s1`.`Level3_Optional_Id21`, `s1`.`Level3_Required_Id11`, `s1`.`Level3_Required_Id21`, `s1`.`Name01`, `s1`.`OneToMany_Optional_Inverse4Id11`, `s1`.`OneToMany_Optional_Inverse4Id21`, `s1`.`OneToMany_Optional_Self_Inverse4Id11`, `s1`.`OneToMany_Optional_Self_Inverse4Id21`, `s1`.`OneToMany_Required_Inverse4Id11`, `s1`.`OneToMany_Required_Inverse4Id21`, `s1`.`OneToMany_Required_Self_Inverse4Id11`, `s1`.`OneToMany_Required_Self_Inverse4Id21`, `s1`.`OneToOne_Optional_PK_Inverse4Id11`, `s1`.`OneToOne_Optional_PK_Inverse4Id21`, `s1`.`OneToOne_Optional_Self4Id11`, `s1`.`OneToOne_Optional_Self4Id21`, `s1`.`Id110`, `s1`.`Id210`, `s1`.`Level3_Optional_Id100`, `s1`.`Level3_Optional_Id200`, `s1`.`Level3_Required_Id100`, `s1`.`Level3_Required_Id200`, `s1`.`Name10`, `s1`.`OneToMany_Optional_Inverse4Id100`, `s1`.`OneToMany_Optional_Inverse4Id200`, `s1`.`OneToMany_Optional_Self_Inverse4Id100`, `s1`.`OneToMany_Optional_Self_Inverse4Id200`, `s1`.`OneToMany_Required_Inverse4Id100`, `s1`.`OneToMany_Required_Inverse4Id200`, `s1`.`OneToMany_Required_Self_Inverse4Id100`, `s1`.`OneToMany_Required_Self_Inverse4Id200`, `s1`.`OneToOne_Optional_PK_Inverse4Id100`, `s1`.`OneToOne_Optional_PK_Inverse4Id200`, `s1`.`OneToOne_Optional_Self4Id100`, `s1`.`OneToOne_Optional_Self4Id200`, `s4`.`Name`, `s4`.`Id1`, `s4`.`Id2`, `s4`.`Name0`, `s4`.`Id10`, `s4`.`Id20`, `s4`.`Id100`, `s4`.`Id200`, `s4`.`Level3_Optional_Id1`, `s4`.`Level3_Optional_Id2`, `s4`.`Level3_Required_Id1`, `s4`.`Level3_Required_Id2`, `s4`.`Name00`, `s4`.`OneToMany_Optional_Inverse4Id1`, `s4`.`OneToMany_Optional_Inverse4Id2`, `s4`.`OneToMany_Optional_Self_Inverse4Id1`, `s4`.`OneToMany_Optional_Self_Inverse4Id2`, `s4`.`OneToMany_Required_Inverse4Id1`, `s4`.`OneToMany_Required_Inverse4Id2`, `s4`.`OneToMany_Required_Self_Inverse4Id1`, `s4`.`OneToMany_Required_Self_Inverse4Id2`, `s4`.`OneToOne_Optional_PK_Inverse4Id1`, `s4`.`OneToOne_Optional_PK_Inverse4Id2`, `s4`.`OneToOne_Optional_Self4Id1`, `s4`.`OneToOne_Optional_Self4Id2`, `s4`.`Id11`, `s4`.`Id21`, `s4`.`Level3_Optional_Id10`, `s4`.`Level3_Optional_Id20`, `s4`.`Level3_Required_Id10`, `s4`.`Level3_Required_Id20`, `s4`.`Name1`, `s4`.`OneToMany_Optional_Inverse4Id10`, `s4`.`OneToMany_Optional_Inverse4Id20`, `s4`.`OneToMany_Optional_Self_Inverse4Id10`, `s4`.`OneToMany_Optional_Self_Inverse4Id20`, `s4`.`OneToMany_Required_Inverse4Id10`, `s4`.`OneToMany_Required_Inverse4Id20`, `s4`.`OneToMany_Required_Self_Inverse4Id10`, `s4`.`OneToMany_Required_Self_Inverse4Id20`, `s4`.`OneToOne_Optional_PK_Inverse4Id10`, `s4`.`OneToOne_Optional_PK_Inverse4Id20`, `s4`.`OneToOne_Optional_Self4Id10`, `s4`.`OneToOne_Optional_Self4Id20`, `s4`.`Name2`, `s4`.`Id12`, `s4`.`Id22`, `s4`.`Id101`, `s4`.`Id201`, `s4`.`Level3_Optional_Id11`, `s4`.`Level3_Optional_Id21`, `s4`.`Level3_Required_Id11`, `s4`.`Level3_Required_Id21`, `s4`.`Name01`, `s4`.`OneToMany_Optional_Inverse4Id11`, `s4`.`OneToMany_Optional_Inverse4Id21`, `s4`.`OneToMany_Optional_Self_Inverse4Id11`, `s4`.`OneToMany_Optional_Self_Inverse4Id21`, `s4`.`OneToMany_Required_Inverse4Id11`, `s4`.`OneToMany_Required_Inverse4Id21`, `s4`.`OneToMany_Required_Self_Inverse4Id11`, `s4`.`OneToMany_Required_Self_Inverse4Id21`, `s4`.`OneToOne_Optional_PK_Inverse4Id11`, `s4`.`OneToOne_Optional_PK_Inverse4Id21`, `s4`.`OneToOne_Optional_Self4Id11`, `s4`.`OneToOne_Optional_Self4Id21`, `s4`.`Id110`, `s4`.`Id210`, `s4`.`Level3_Optional_Id100`, `s4`.`Level3_Optional_Id200`, `s4`.`Level3_Required_Id100`, `s4`.`Level3_Required_Id200`, `s4`.`Name10`, `s4`.`OneToMany_Optional_Inverse4Id100`, `s4`.`OneToMany_Optional_Inverse4Id200`, `s4`.`OneToMany_Optional_Self_Inverse4Id100`, `s4`.`OneToMany_Optional_Self_Inverse4Id200`, `s4`.`OneToMany_Required_Inverse4Id100`, `s4`.`OneToMany_Required_Inverse4Id200`, `s4`.`OneToMany_Required_Self_Inverse4Id100`, `s4`.`OneToMany_Required_Self_Inverse4Id200`, `s4`.`OneToOne_Optional_PK_Inverse4Id100`, `s4`.`OneToOne_Optional_PK_Inverse4Id200`, `s4`.`OneToOne_Optional_Self4Id100`, `s4`.`OneToOne_Optional_Self4Id200` FROM (`CompositeOnes` AS `c` LEFT JOIN ( - SELECT `c0`.`Name`, `c0`.`Id1`, `c0`.`Id2`, `t`.`Name` AS `Name0`, `t`.`Id1` AS `Id10`, `t`.`Id2` AS `Id20`, `t`.`Id10` AS `Id100`, `t`.`Id20` AS `Id200`, `t`.`Level3_Optional_Id1`, `t`.`Level3_Optional_Id2`, `t`.`Level3_Required_Id1`, `t`.`Level3_Required_Id2`, `t`.`Name0` AS `Name00`, `t`.`OneToMany_Optional_Inverse4Id1`, `t`.`OneToMany_Optional_Inverse4Id2`, `t`.`OneToMany_Optional_Self_Inverse4Id1`, `t`.`OneToMany_Optional_Self_Inverse4Id2`, `t`.`OneToMany_Required_Inverse4Id1`, `t`.`OneToMany_Required_Inverse4Id2`, `t`.`OneToMany_Required_Self_Inverse4Id1`, `t`.`OneToMany_Required_Self_Inverse4Id2`, `t`.`OneToOne_Optional_PK_Inverse4Id1`, `t`.`OneToOne_Optional_PK_Inverse4Id2`, `t`.`OneToOne_Optional_Self4Id1`, `t`.`OneToOne_Optional_Self4Id2`, `t`.`Id11`, `t`.`Id21`, `t`.`Level3_Optional_Id10`, `t`.`Level3_Optional_Id20`, `t`.`Level3_Required_Id10`, `t`.`Level3_Required_Id20`, `t`.`Name1`, `t`.`OneToMany_Optional_Inverse4Id10`, `t`.`OneToMany_Optional_Inverse4Id20`, `t`.`OneToMany_Optional_Self_Inverse4Id10`, `t`.`OneToMany_Optional_Self_Inverse4Id20`, `t`.`OneToMany_Required_Inverse4Id10`, `t`.`OneToMany_Required_Inverse4Id20`, `t`.`OneToMany_Required_Self_Inverse4Id10`, `t`.`OneToMany_Required_Self_Inverse4Id20`, `t`.`OneToOne_Optional_PK_Inverse4Id10`, `t`.`OneToOne_Optional_PK_Inverse4Id20`, `t`.`OneToOne_Optional_Self4Id10`, `t`.`OneToOne_Optional_Self4Id20`, `t0`.`Name` AS `Name2`, `t0`.`Id1` AS `Id12`, `t0`.`Id2` AS `Id22`, `t0`.`Id10` AS `Id101`, `t0`.`Id20` AS `Id201`, `t0`.`Level3_Optional_Id1` AS `Level3_Optional_Id11`, `t0`.`Level3_Optional_Id2` AS `Level3_Optional_Id21`, `t0`.`Level3_Required_Id1` AS `Level3_Required_Id11`, `t0`.`Level3_Required_Id2` AS `Level3_Required_Id21`, `t0`.`Name0` AS `Name01`, `t0`.`OneToMany_Optional_Inverse4Id1` AS `OneToMany_Optional_Inverse4Id11`, `t0`.`OneToMany_Optional_Inverse4Id2` AS `OneToMany_Optional_Inverse4Id21`, `t0`.`OneToMany_Optional_Self_Inverse4Id1` AS `OneToMany_Optional_Self_Inverse4Id11`, `t0`.`OneToMany_Optional_Self_Inverse4Id2` AS `OneToMany_Optional_Self_Inverse4Id21`, `t0`.`OneToMany_Required_Inverse4Id1` AS `OneToMany_Required_Inverse4Id11`, `t0`.`OneToMany_Required_Inverse4Id2` AS `OneToMany_Required_Inverse4Id21`, `t0`.`OneToMany_Required_Self_Inverse4Id1` AS `OneToMany_Required_Self_Inverse4Id11`, `t0`.`OneToMany_Required_Self_Inverse4Id2` AS `OneToMany_Required_Self_Inverse4Id21`, `t0`.`OneToOne_Optional_PK_Inverse4Id1` AS `OneToOne_Optional_PK_Inverse4Id11`, `t0`.`OneToOne_Optional_PK_Inverse4Id2` AS `OneToOne_Optional_PK_Inverse4Id21`, `t0`.`OneToOne_Optional_Self4Id1` AS `OneToOne_Optional_Self4Id11`, `t0`.`OneToOne_Optional_Self4Id2` AS `OneToOne_Optional_Self4Id21`, `t0`.`Id11` AS `Id110`, `t0`.`Id21` AS `Id210`, `t0`.`Level3_Optional_Id10` AS `Level3_Optional_Id100`, `t0`.`Level3_Optional_Id20` AS `Level3_Optional_Id200`, `t0`.`Level3_Required_Id10` AS `Level3_Required_Id100`, `t0`.`Level3_Required_Id20` AS `Level3_Required_Id200`, `t0`.`Name1` AS `Name10`, `t0`.`OneToMany_Optional_Inverse4Id10` AS `OneToMany_Optional_Inverse4Id100`, `t0`.`OneToMany_Optional_Inverse4Id20` AS `OneToMany_Optional_Inverse4Id200`, `t0`.`OneToMany_Optional_Self_Inverse4Id10` AS `OneToMany_Optional_Self_Inverse4Id100`, `t0`.`OneToMany_Optional_Self_Inverse4Id20` AS `OneToMany_Optional_Self_Inverse4Id200`, `t0`.`OneToMany_Required_Inverse4Id10` AS `OneToMany_Required_Inverse4Id100`, `t0`.`OneToMany_Required_Inverse4Id20` AS `OneToMany_Required_Inverse4Id200`, `t0`.`OneToMany_Required_Self_Inverse4Id10` AS `OneToMany_Required_Self_Inverse4Id100`, `t0`.`OneToMany_Required_Self_Inverse4Id20` AS `OneToMany_Required_Self_Inverse4Id200`, `t0`.`OneToOne_Optional_PK_Inverse4Id10` AS `OneToOne_Optional_PK_Inverse4Id100`, `t0`.`OneToOne_Optional_PK_Inverse4Id20` AS `OneToOne_Optional_PK_Inverse4Id200`, `t0`.`OneToOne_Optional_Self4Id10` AS `OneToOne_Optional_Self4Id100`, `t0`.`OneToOne_Optional_Self4Id20` AS `OneToOne_Optional_Self4Id200`, `c0`.`OneToMany_Optional_Inverse2Id1`, `c0`.`OneToMany_Optional_Inverse2Id2` + SELECT `c0`.`Name`, `c0`.`Id1`, `c0`.`Id2`, `s`.`Name` AS `Name0`, `s`.`Id1` AS `Id10`, `s`.`Id2` AS `Id20`, `s`.`Id10` AS `Id100`, `s`.`Id20` AS `Id200`, `s`.`Level3_Optional_Id1`, `s`.`Level3_Optional_Id2`, `s`.`Level3_Required_Id1`, `s`.`Level3_Required_Id2`, `s`.`Name0` AS `Name00`, `s`.`OneToMany_Optional_Inverse4Id1`, `s`.`OneToMany_Optional_Inverse4Id2`, `s`.`OneToMany_Optional_Self_Inverse4Id1`, `s`.`OneToMany_Optional_Self_Inverse4Id2`, `s`.`OneToMany_Required_Inverse4Id1`, `s`.`OneToMany_Required_Inverse4Id2`, `s`.`OneToMany_Required_Self_Inverse4Id1`, `s`.`OneToMany_Required_Self_Inverse4Id2`, `s`.`OneToOne_Optional_PK_Inverse4Id1`, `s`.`OneToOne_Optional_PK_Inverse4Id2`, `s`.`OneToOne_Optional_Self4Id1`, `s`.`OneToOne_Optional_Self4Id2`, `s`.`Id11`, `s`.`Id21`, `s`.`Level3_Optional_Id10`, `s`.`Level3_Optional_Id20`, `s`.`Level3_Required_Id10`, `s`.`Level3_Required_Id20`, `s`.`Name1`, `s`.`OneToMany_Optional_Inverse4Id10`, `s`.`OneToMany_Optional_Inverse4Id20`, `s`.`OneToMany_Optional_Self_Inverse4Id10`, `s`.`OneToMany_Optional_Self_Inverse4Id20`, `s`.`OneToMany_Required_Inverse4Id10`, `s`.`OneToMany_Required_Inverse4Id20`, `s`.`OneToMany_Required_Self_Inverse4Id10`, `s`.`OneToMany_Required_Self_Inverse4Id20`, `s`.`OneToOne_Optional_PK_Inverse4Id10`, `s`.`OneToOne_Optional_PK_Inverse4Id20`, `s`.`OneToOne_Optional_Self4Id10`, `s`.`OneToOne_Optional_Self4Id20`, `s0`.`Name` AS `Name2`, `s0`.`Id1` AS `Id12`, `s0`.`Id2` AS `Id22`, `s0`.`Id10` AS `Id101`, `s0`.`Id20` AS `Id201`, `s0`.`Level3_Optional_Id1` AS `Level3_Optional_Id11`, `s0`.`Level3_Optional_Id2` AS `Level3_Optional_Id21`, `s0`.`Level3_Required_Id1` AS `Level3_Required_Id11`, `s0`.`Level3_Required_Id2` AS `Level3_Required_Id21`, `s0`.`Name0` AS `Name01`, `s0`.`OneToMany_Optional_Inverse4Id1` AS `OneToMany_Optional_Inverse4Id11`, `s0`.`OneToMany_Optional_Inverse4Id2` AS `OneToMany_Optional_Inverse4Id21`, `s0`.`OneToMany_Optional_Self_Inverse4Id1` AS `OneToMany_Optional_Self_Inverse4Id11`, `s0`.`OneToMany_Optional_Self_Inverse4Id2` AS `OneToMany_Optional_Self_Inverse4Id21`, `s0`.`OneToMany_Required_Inverse4Id1` AS `OneToMany_Required_Inverse4Id11`, `s0`.`OneToMany_Required_Inverse4Id2` AS `OneToMany_Required_Inverse4Id21`, `s0`.`OneToMany_Required_Self_Inverse4Id1` AS `OneToMany_Required_Self_Inverse4Id11`, `s0`.`OneToMany_Required_Self_Inverse4Id2` AS `OneToMany_Required_Self_Inverse4Id21`, `s0`.`OneToOne_Optional_PK_Inverse4Id1` AS `OneToOne_Optional_PK_Inverse4Id11`, `s0`.`OneToOne_Optional_PK_Inverse4Id2` AS `OneToOne_Optional_PK_Inverse4Id21`, `s0`.`OneToOne_Optional_Self4Id1` AS `OneToOne_Optional_Self4Id11`, `s0`.`OneToOne_Optional_Self4Id2` AS `OneToOne_Optional_Self4Id21`, `s0`.`Id11` AS `Id110`, `s0`.`Id21` AS `Id210`, `s0`.`Level3_Optional_Id10` AS `Level3_Optional_Id100`, `s0`.`Level3_Optional_Id20` AS `Level3_Optional_Id200`, `s0`.`Level3_Required_Id10` AS `Level3_Required_Id100`, `s0`.`Level3_Required_Id20` AS `Level3_Required_Id200`, `s0`.`Name1` AS `Name10`, `s0`.`OneToMany_Optional_Inverse4Id10` AS `OneToMany_Optional_Inverse4Id100`, `s0`.`OneToMany_Optional_Inverse4Id20` AS `OneToMany_Optional_Inverse4Id200`, `s0`.`OneToMany_Optional_Self_Inverse4Id10` AS `OneToMany_Optional_Self_Inverse4Id100`, `s0`.`OneToMany_Optional_Self_Inverse4Id20` AS `OneToMany_Optional_Self_Inverse4Id200`, `s0`.`OneToMany_Required_Inverse4Id10` AS `OneToMany_Required_Inverse4Id100`, `s0`.`OneToMany_Required_Inverse4Id20` AS `OneToMany_Required_Inverse4Id200`, `s0`.`OneToMany_Required_Self_Inverse4Id10` AS `OneToMany_Required_Self_Inverse4Id100`, `s0`.`OneToMany_Required_Self_Inverse4Id20` AS `OneToMany_Required_Self_Inverse4Id200`, `s0`.`OneToOne_Optional_PK_Inverse4Id10` AS `OneToOne_Optional_PK_Inverse4Id100`, `s0`.`OneToOne_Optional_PK_Inverse4Id20` AS `OneToOne_Optional_PK_Inverse4Id200`, `s0`.`OneToOne_Optional_Self4Id10` AS `OneToOne_Optional_Self4Id100`, `s0`.`OneToOne_Optional_Self4Id20` AS `OneToOne_Optional_Self4Id200`, `c0`.`OneToMany_Optional_Inverse2Id1`, `c0`.`OneToMany_Optional_Inverse2Id2` FROM (`CompositeTwos` AS `c0` LEFT JOIN ( SELECT `c1`.`Name`, `c1`.`Id1`, `c1`.`Id2`, `c2`.`Id1` AS `Id10`, `c2`.`Id2` AS `Id20`, `c2`.`Level3_Optional_Id1`, `c2`.`Level3_Optional_Id2`, `c2`.`Level3_Required_Id1`, `c2`.`Level3_Required_Id2`, `c2`.`Name` AS `Name0`, `c2`.`OneToMany_Optional_Inverse4Id1`, `c2`.`OneToMany_Optional_Inverse4Id2`, `c2`.`OneToMany_Optional_Self_Inverse4Id1`, `c2`.`OneToMany_Optional_Self_Inverse4Id2`, `c2`.`OneToMany_Required_Inverse4Id1`, `c2`.`OneToMany_Required_Inverse4Id2`, `c2`.`OneToMany_Required_Self_Inverse4Id1`, `c2`.`OneToMany_Required_Self_Inverse4Id2`, `c2`.`OneToOne_Optional_PK_Inverse4Id1`, `c2`.`OneToOne_Optional_PK_Inverse4Id2`, `c2`.`OneToOne_Optional_Self4Id1`, `c2`.`OneToOne_Optional_Self4Id2`, `c3`.`Id1` AS `Id11`, `c3`.`Id2` AS `Id21`, `c3`.`Level3_Optional_Id1` AS `Level3_Optional_Id10`, `c3`.`Level3_Optional_Id2` AS `Level3_Optional_Id20`, `c3`.`Level3_Required_Id1` AS `Level3_Required_Id10`, `c3`.`Level3_Required_Id2` AS `Level3_Required_Id20`, `c3`.`Name` AS `Name1`, `c3`.`OneToMany_Optional_Inverse4Id1` AS `OneToMany_Optional_Inverse4Id10`, `c3`.`OneToMany_Optional_Inverse4Id2` AS `OneToMany_Optional_Inverse4Id20`, `c3`.`OneToMany_Optional_Self_Inverse4Id1` AS `OneToMany_Optional_Self_Inverse4Id10`, `c3`.`OneToMany_Optional_Self_Inverse4Id2` AS `OneToMany_Optional_Self_Inverse4Id20`, `c3`.`OneToMany_Required_Inverse4Id1` AS `OneToMany_Required_Inverse4Id10`, `c3`.`OneToMany_Required_Inverse4Id2` AS `OneToMany_Required_Inverse4Id20`, `c3`.`OneToMany_Required_Self_Inverse4Id1` AS `OneToMany_Required_Self_Inverse4Id10`, `c3`.`OneToMany_Required_Self_Inverse4Id2` AS `OneToMany_Required_Self_Inverse4Id20`, `c3`.`OneToOne_Optional_PK_Inverse4Id1` AS `OneToOne_Optional_PK_Inverse4Id10`, `c3`.`OneToOne_Optional_PK_Inverse4Id2` AS `OneToOne_Optional_PK_Inverse4Id20`, `c3`.`OneToOne_Optional_Self4Id1` AS `OneToOne_Optional_Self4Id10`, `c3`.`OneToOne_Optional_Self4Id2` AS `OneToOne_Optional_Self4Id20`, `c1`.`OneToMany_Required_Inverse3Id1`, `c1`.`OneToMany_Required_Inverse3Id2` FROM (`CompositeThrees` AS `c1` LEFT JOIN `CompositeFours` AS `c2` ON `c1`.`Id1` = `c2`.`OneToMany_Optional_Inverse4Id1` AND `c1`.`Id2` = `c2`.`OneToMany_Optional_Inverse4Id2`) LEFT JOIN `CompositeFours` AS `c3` ON `c1`.`Id1` = `c3`.`OneToMany_Required_Inverse4Id1` AND `c1`.`Id2` = `c3`.`OneToMany_Required_Inverse4Id2` - ) AS `t` ON `c0`.`Id1` = `t`.`OneToMany_Required_Inverse3Id1` AND `c0`.`Id2` = `t`.`OneToMany_Required_Inverse3Id2`) + ) AS `s` ON `c0`.`Id1` = `s`.`OneToMany_Required_Inverse3Id1` AND `c0`.`Id2` = `s`.`OneToMany_Required_Inverse3Id2`) LEFT JOIN ( SELECT `c4`.`Name`, `c4`.`Id1`, `c4`.`Id2`, `c5`.`Id1` AS `Id10`, `c5`.`Id2` AS `Id20`, `c5`.`Level3_Optional_Id1`, `c5`.`Level3_Optional_Id2`, `c5`.`Level3_Required_Id1`, `c5`.`Level3_Required_Id2`, `c5`.`Name` AS `Name0`, `c5`.`OneToMany_Optional_Inverse4Id1`, `c5`.`OneToMany_Optional_Inverse4Id2`, `c5`.`OneToMany_Optional_Self_Inverse4Id1`, `c5`.`OneToMany_Optional_Self_Inverse4Id2`, `c5`.`OneToMany_Required_Inverse4Id1`, `c5`.`OneToMany_Required_Inverse4Id2`, `c5`.`OneToMany_Required_Self_Inverse4Id1`, `c5`.`OneToMany_Required_Self_Inverse4Id2`, `c5`.`OneToOne_Optional_PK_Inverse4Id1`, `c5`.`OneToOne_Optional_PK_Inverse4Id2`, `c5`.`OneToOne_Optional_Self4Id1`, `c5`.`OneToOne_Optional_Self4Id2`, `c6`.`Id1` AS `Id11`, `c6`.`Id2` AS `Id21`, `c6`.`Level3_Optional_Id1` AS `Level3_Optional_Id10`, `c6`.`Level3_Optional_Id2` AS `Level3_Optional_Id20`, `c6`.`Level3_Required_Id1` AS `Level3_Required_Id10`, `c6`.`Level3_Required_Id2` AS `Level3_Required_Id20`, `c6`.`Name` AS `Name1`, `c6`.`OneToMany_Optional_Inverse4Id1` AS `OneToMany_Optional_Inverse4Id10`, `c6`.`OneToMany_Optional_Inverse4Id2` AS `OneToMany_Optional_Inverse4Id20`, `c6`.`OneToMany_Optional_Self_Inverse4Id1` AS `OneToMany_Optional_Self_Inverse4Id10`, `c6`.`OneToMany_Optional_Self_Inverse4Id2` AS `OneToMany_Optional_Self_Inverse4Id20`, `c6`.`OneToMany_Required_Inverse4Id1` AS `OneToMany_Required_Inverse4Id10`, `c6`.`OneToMany_Required_Inverse4Id2` AS `OneToMany_Required_Inverse4Id20`, `c6`.`OneToMany_Required_Self_Inverse4Id1` AS `OneToMany_Required_Self_Inverse4Id10`, `c6`.`OneToMany_Required_Self_Inverse4Id2` AS `OneToMany_Required_Self_Inverse4Id20`, `c6`.`OneToOne_Optional_PK_Inverse4Id1` AS `OneToOne_Optional_PK_Inverse4Id10`, `c6`.`OneToOne_Optional_PK_Inverse4Id2` AS `OneToOne_Optional_PK_Inverse4Id20`, `c6`.`OneToOne_Optional_Self4Id1` AS `OneToOne_Optional_Self4Id10`, `c6`.`OneToOne_Optional_Self4Id2` AS `OneToOne_Optional_Self4Id20`, `c4`.`OneToMany_Optional_Inverse3Id1`, `c4`.`OneToMany_Optional_Inverse3Id2` FROM (`CompositeThrees` AS `c4` LEFT JOIN `CompositeFours` AS `c5` ON `c4`.`Id1` = `c5`.`OneToMany_Required_Inverse4Id1` AND `c4`.`Id2` = `c5`.`OneToMany_Required_Inverse4Id2`) LEFT JOIN `CompositeFours` AS `c6` ON `c4`.`Id1` = `c6`.`OneToMany_Optional_Inverse4Id1` AND `c4`.`Id2` = `c6`.`OneToMany_Optional_Inverse4Id2` - ) AS `t0` ON `c0`.`Id1` = `t0`.`OneToMany_Optional_Inverse3Id1` AND `c0`.`Id2` = `t0`.`OneToMany_Optional_Inverse3Id2` -) AS `t1` ON `c`.`Id1` = `t1`.`OneToMany_Optional_Inverse2Id1` AND `c`.`Id2` = `t1`.`OneToMany_Optional_Inverse2Id2`) + ) AS `s0` ON `c0`.`Id1` = `s0`.`OneToMany_Optional_Inverse3Id1` AND `c0`.`Id2` = `s0`.`OneToMany_Optional_Inverse3Id2` +) AS `s1` ON `c`.`Id1` = `s1`.`OneToMany_Optional_Inverse2Id1` AND `c`.`Id2` = `s1`.`OneToMany_Optional_Inverse2Id2`) LEFT JOIN ( - SELECT `c7`.`Name`, `c7`.`Id1`, `c7`.`Id2`, `t3`.`Name` AS `Name0`, `t3`.`Id1` AS `Id10`, `t3`.`Id2` AS `Id20`, `t3`.`Id10` AS `Id100`, `t3`.`Id20` AS `Id200`, `t3`.`Level3_Optional_Id1`, `t3`.`Level3_Optional_Id2`, `t3`.`Level3_Required_Id1`, `t3`.`Level3_Required_Id2`, `t3`.`Name0` AS `Name00`, `t3`.`OneToMany_Optional_Inverse4Id1`, `t3`.`OneToMany_Optional_Inverse4Id2`, `t3`.`OneToMany_Optional_Self_Inverse4Id1`, `t3`.`OneToMany_Optional_Self_Inverse4Id2`, `t3`.`OneToMany_Required_Inverse4Id1`, `t3`.`OneToMany_Required_Inverse4Id2`, `t3`.`OneToMany_Required_Self_Inverse4Id1`, `t3`.`OneToMany_Required_Self_Inverse4Id2`, `t3`.`OneToOne_Optional_PK_Inverse4Id1`, `t3`.`OneToOne_Optional_PK_Inverse4Id2`, `t3`.`OneToOne_Optional_Self4Id1`, `t3`.`OneToOne_Optional_Self4Id2`, `t3`.`Id11`, `t3`.`Id21`, `t3`.`Level3_Optional_Id10`, `t3`.`Level3_Optional_Id20`, `t3`.`Level3_Required_Id10`, `t3`.`Level3_Required_Id20`, `t3`.`Name1`, `t3`.`OneToMany_Optional_Inverse4Id10`, `t3`.`OneToMany_Optional_Inverse4Id20`, `t3`.`OneToMany_Optional_Self_Inverse4Id10`, `t3`.`OneToMany_Optional_Self_Inverse4Id20`, `t3`.`OneToMany_Required_Inverse4Id10`, `t3`.`OneToMany_Required_Inverse4Id20`, `t3`.`OneToMany_Required_Self_Inverse4Id10`, `t3`.`OneToMany_Required_Self_Inverse4Id20`, `t3`.`OneToOne_Optional_PK_Inverse4Id10`, `t3`.`OneToOne_Optional_PK_Inverse4Id20`, `t3`.`OneToOne_Optional_Self4Id10`, `t3`.`OneToOne_Optional_Self4Id20`, `t4`.`Name` AS `Name2`, `t4`.`Id1` AS `Id12`, `t4`.`Id2` AS `Id22`, `t4`.`Id10` AS `Id101`, `t4`.`Id20` AS `Id201`, `t4`.`Level3_Optional_Id1` AS `Level3_Optional_Id11`, `t4`.`Level3_Optional_Id2` AS `Level3_Optional_Id21`, `t4`.`Level3_Required_Id1` AS `Level3_Required_Id11`, `t4`.`Level3_Required_Id2` AS `Level3_Required_Id21`, `t4`.`Name0` AS `Name01`, `t4`.`OneToMany_Optional_Inverse4Id1` AS `OneToMany_Optional_Inverse4Id11`, `t4`.`OneToMany_Optional_Inverse4Id2` AS `OneToMany_Optional_Inverse4Id21`, `t4`.`OneToMany_Optional_Self_Inverse4Id1` AS `OneToMany_Optional_Self_Inverse4Id11`, `t4`.`OneToMany_Optional_Self_Inverse4Id2` AS `OneToMany_Optional_Self_Inverse4Id21`, `t4`.`OneToMany_Required_Inverse4Id1` AS `OneToMany_Required_Inverse4Id11`, `t4`.`OneToMany_Required_Inverse4Id2` AS `OneToMany_Required_Inverse4Id21`, `t4`.`OneToMany_Required_Self_Inverse4Id1` AS `OneToMany_Required_Self_Inverse4Id11`, `t4`.`OneToMany_Required_Self_Inverse4Id2` AS `OneToMany_Required_Self_Inverse4Id21`, `t4`.`OneToOne_Optional_PK_Inverse4Id1` AS `OneToOne_Optional_PK_Inverse4Id11`, `t4`.`OneToOne_Optional_PK_Inverse4Id2` AS `OneToOne_Optional_PK_Inverse4Id21`, `t4`.`OneToOne_Optional_Self4Id1` AS `OneToOne_Optional_Self4Id11`, `t4`.`OneToOne_Optional_Self4Id2` AS `OneToOne_Optional_Self4Id21`, `t4`.`Id11` AS `Id110`, `t4`.`Id21` AS `Id210`, `t4`.`Level3_Optional_Id10` AS `Level3_Optional_Id100`, `t4`.`Level3_Optional_Id20` AS `Level3_Optional_Id200`, `t4`.`Level3_Required_Id10` AS `Level3_Required_Id100`, `t4`.`Level3_Required_Id20` AS `Level3_Required_Id200`, `t4`.`Name1` AS `Name10`, `t4`.`OneToMany_Optional_Inverse4Id10` AS `OneToMany_Optional_Inverse4Id100`, `t4`.`OneToMany_Optional_Inverse4Id20` AS `OneToMany_Optional_Inverse4Id200`, `t4`.`OneToMany_Optional_Self_Inverse4Id10` AS `OneToMany_Optional_Self_Inverse4Id100`, `t4`.`OneToMany_Optional_Self_Inverse4Id20` AS `OneToMany_Optional_Self_Inverse4Id200`, `t4`.`OneToMany_Required_Inverse4Id10` AS `OneToMany_Required_Inverse4Id100`, `t4`.`OneToMany_Required_Inverse4Id20` AS `OneToMany_Required_Inverse4Id200`, `t4`.`OneToMany_Required_Self_Inverse4Id10` AS `OneToMany_Required_Self_Inverse4Id100`, `t4`.`OneToMany_Required_Self_Inverse4Id20` AS `OneToMany_Required_Self_Inverse4Id200`, `t4`.`OneToOne_Optional_PK_Inverse4Id10` AS `OneToOne_Optional_PK_Inverse4Id100`, `t4`.`OneToOne_Optional_PK_Inverse4Id20` AS `OneToOne_Optional_PK_Inverse4Id200`, `t4`.`OneToOne_Optional_Self4Id10` AS `OneToOne_Optional_Self4Id100`, `t4`.`OneToOne_Optional_Self4Id20` AS `OneToOne_Optional_Self4Id200`, `c7`.`OneToMany_Required_Inverse2Id1`, `c7`.`OneToMany_Required_Inverse2Id2` + SELECT `c7`.`Name`, `c7`.`Id1`, `c7`.`Id2`, `s2`.`Name` AS `Name0`, `s2`.`Id1` AS `Id10`, `s2`.`Id2` AS `Id20`, `s2`.`Id10` AS `Id100`, `s2`.`Id20` AS `Id200`, `s2`.`Level3_Optional_Id1`, `s2`.`Level3_Optional_Id2`, `s2`.`Level3_Required_Id1`, `s2`.`Level3_Required_Id2`, `s2`.`Name0` AS `Name00`, `s2`.`OneToMany_Optional_Inverse4Id1`, `s2`.`OneToMany_Optional_Inverse4Id2`, `s2`.`OneToMany_Optional_Self_Inverse4Id1`, `s2`.`OneToMany_Optional_Self_Inverse4Id2`, `s2`.`OneToMany_Required_Inverse4Id1`, `s2`.`OneToMany_Required_Inverse4Id2`, `s2`.`OneToMany_Required_Self_Inverse4Id1`, `s2`.`OneToMany_Required_Self_Inverse4Id2`, `s2`.`OneToOne_Optional_PK_Inverse4Id1`, `s2`.`OneToOne_Optional_PK_Inverse4Id2`, `s2`.`OneToOne_Optional_Self4Id1`, `s2`.`OneToOne_Optional_Self4Id2`, `s2`.`Id11`, `s2`.`Id21`, `s2`.`Level3_Optional_Id10`, `s2`.`Level3_Optional_Id20`, `s2`.`Level3_Required_Id10`, `s2`.`Level3_Required_Id20`, `s2`.`Name1`, `s2`.`OneToMany_Optional_Inverse4Id10`, `s2`.`OneToMany_Optional_Inverse4Id20`, `s2`.`OneToMany_Optional_Self_Inverse4Id10`, `s2`.`OneToMany_Optional_Self_Inverse4Id20`, `s2`.`OneToMany_Required_Inverse4Id10`, `s2`.`OneToMany_Required_Inverse4Id20`, `s2`.`OneToMany_Required_Self_Inverse4Id10`, `s2`.`OneToMany_Required_Self_Inverse4Id20`, `s2`.`OneToOne_Optional_PK_Inverse4Id10`, `s2`.`OneToOne_Optional_PK_Inverse4Id20`, `s2`.`OneToOne_Optional_Self4Id10`, `s2`.`OneToOne_Optional_Self4Id20`, `s3`.`Name` AS `Name2`, `s3`.`Id1` AS `Id12`, `s3`.`Id2` AS `Id22`, `s3`.`Id10` AS `Id101`, `s3`.`Id20` AS `Id201`, `s3`.`Level3_Optional_Id1` AS `Level3_Optional_Id11`, `s3`.`Level3_Optional_Id2` AS `Level3_Optional_Id21`, `s3`.`Level3_Required_Id1` AS `Level3_Required_Id11`, `s3`.`Level3_Required_Id2` AS `Level3_Required_Id21`, `s3`.`Name0` AS `Name01`, `s3`.`OneToMany_Optional_Inverse4Id1` AS `OneToMany_Optional_Inverse4Id11`, `s3`.`OneToMany_Optional_Inverse4Id2` AS `OneToMany_Optional_Inverse4Id21`, `s3`.`OneToMany_Optional_Self_Inverse4Id1` AS `OneToMany_Optional_Self_Inverse4Id11`, `s3`.`OneToMany_Optional_Self_Inverse4Id2` AS `OneToMany_Optional_Self_Inverse4Id21`, `s3`.`OneToMany_Required_Inverse4Id1` AS `OneToMany_Required_Inverse4Id11`, `s3`.`OneToMany_Required_Inverse4Id2` AS `OneToMany_Required_Inverse4Id21`, `s3`.`OneToMany_Required_Self_Inverse4Id1` AS `OneToMany_Required_Self_Inverse4Id11`, `s3`.`OneToMany_Required_Self_Inverse4Id2` AS `OneToMany_Required_Self_Inverse4Id21`, `s3`.`OneToOne_Optional_PK_Inverse4Id1` AS `OneToOne_Optional_PK_Inverse4Id11`, `s3`.`OneToOne_Optional_PK_Inverse4Id2` AS `OneToOne_Optional_PK_Inverse4Id21`, `s3`.`OneToOne_Optional_Self4Id1` AS `OneToOne_Optional_Self4Id11`, `s3`.`OneToOne_Optional_Self4Id2` AS `OneToOne_Optional_Self4Id21`, `s3`.`Id11` AS `Id110`, `s3`.`Id21` AS `Id210`, `s3`.`Level3_Optional_Id10` AS `Level3_Optional_Id100`, `s3`.`Level3_Optional_Id20` AS `Level3_Optional_Id200`, `s3`.`Level3_Required_Id10` AS `Level3_Required_Id100`, `s3`.`Level3_Required_Id20` AS `Level3_Required_Id200`, `s3`.`Name1` AS `Name10`, `s3`.`OneToMany_Optional_Inverse4Id10` AS `OneToMany_Optional_Inverse4Id100`, `s3`.`OneToMany_Optional_Inverse4Id20` AS `OneToMany_Optional_Inverse4Id200`, `s3`.`OneToMany_Optional_Self_Inverse4Id10` AS `OneToMany_Optional_Self_Inverse4Id100`, `s3`.`OneToMany_Optional_Self_Inverse4Id20` AS `OneToMany_Optional_Self_Inverse4Id200`, `s3`.`OneToMany_Required_Inverse4Id10` AS `OneToMany_Required_Inverse4Id100`, `s3`.`OneToMany_Required_Inverse4Id20` AS `OneToMany_Required_Inverse4Id200`, `s3`.`OneToMany_Required_Self_Inverse4Id10` AS `OneToMany_Required_Self_Inverse4Id100`, `s3`.`OneToMany_Required_Self_Inverse4Id20` AS `OneToMany_Required_Self_Inverse4Id200`, `s3`.`OneToOne_Optional_PK_Inverse4Id10` AS `OneToOne_Optional_PK_Inverse4Id100`, `s3`.`OneToOne_Optional_PK_Inverse4Id20` AS `OneToOne_Optional_PK_Inverse4Id200`, `s3`.`OneToOne_Optional_Self4Id10` AS `OneToOne_Optional_Self4Id100`, `s3`.`OneToOne_Optional_Self4Id20` AS `OneToOne_Optional_Self4Id200`, `c7`.`OneToMany_Required_Inverse2Id1`, `c7`.`OneToMany_Required_Inverse2Id2` FROM (`CompositeTwos` AS `c7` LEFT JOIN ( SELECT `c8`.`Name`, `c8`.`Id1`, `c8`.`Id2`, `c9`.`Id1` AS `Id10`, `c9`.`Id2` AS `Id20`, `c9`.`Level3_Optional_Id1`, `c9`.`Level3_Optional_Id2`, `c9`.`Level3_Required_Id1`, `c9`.`Level3_Required_Id2`, `c9`.`Name` AS `Name0`, `c9`.`OneToMany_Optional_Inverse4Id1`, `c9`.`OneToMany_Optional_Inverse4Id2`, `c9`.`OneToMany_Optional_Self_Inverse4Id1`, `c9`.`OneToMany_Optional_Self_Inverse4Id2`, `c9`.`OneToMany_Required_Inverse4Id1`, `c9`.`OneToMany_Required_Inverse4Id2`, `c9`.`OneToMany_Required_Self_Inverse4Id1`, `c9`.`OneToMany_Required_Self_Inverse4Id2`, `c9`.`OneToOne_Optional_PK_Inverse4Id1`, `c9`.`OneToOne_Optional_PK_Inverse4Id2`, `c9`.`OneToOne_Optional_Self4Id1`, `c9`.`OneToOne_Optional_Self4Id2`, `c10`.`Id1` AS `Id11`, `c10`.`Id2` AS `Id21`, `c10`.`Level3_Optional_Id1` AS `Level3_Optional_Id10`, `c10`.`Level3_Optional_Id2` AS `Level3_Optional_Id20`, `c10`.`Level3_Required_Id1` AS `Level3_Required_Id10`, `c10`.`Level3_Required_Id2` AS `Level3_Required_Id20`, `c10`.`Name` AS `Name1`, `c10`.`OneToMany_Optional_Inverse4Id1` AS `OneToMany_Optional_Inverse4Id10`, `c10`.`OneToMany_Optional_Inverse4Id2` AS `OneToMany_Optional_Inverse4Id20`, `c10`.`OneToMany_Optional_Self_Inverse4Id1` AS `OneToMany_Optional_Self_Inverse4Id10`, `c10`.`OneToMany_Optional_Self_Inverse4Id2` AS `OneToMany_Optional_Self_Inverse4Id20`, `c10`.`OneToMany_Required_Inverse4Id1` AS `OneToMany_Required_Inverse4Id10`, `c10`.`OneToMany_Required_Inverse4Id2` AS `OneToMany_Required_Inverse4Id20`, `c10`.`OneToMany_Required_Self_Inverse4Id1` AS `OneToMany_Required_Self_Inverse4Id10`, `c10`.`OneToMany_Required_Self_Inverse4Id2` AS `OneToMany_Required_Self_Inverse4Id20`, `c10`.`OneToOne_Optional_PK_Inverse4Id1` AS `OneToOne_Optional_PK_Inverse4Id10`, `c10`.`OneToOne_Optional_PK_Inverse4Id2` AS `OneToOne_Optional_PK_Inverse4Id20`, `c10`.`OneToOne_Optional_Self4Id1` AS `OneToOne_Optional_Self4Id10`, `c10`.`OneToOne_Optional_Self4Id2` AS `OneToOne_Optional_Self4Id20`, `c8`.`OneToMany_Optional_Inverse3Id1`, `c8`.`OneToMany_Optional_Inverse3Id2` FROM (`CompositeThrees` AS `c8` LEFT JOIN `CompositeFours` AS `c9` ON `c8`.`Id1` = `c9`.`OneToMany_Required_Inverse4Id1` AND `c8`.`Id2` = `c9`.`OneToMany_Required_Inverse4Id2`) LEFT JOIN `CompositeFours` AS `c10` ON `c8`.`Id1` = `c10`.`OneToMany_Optional_Inverse4Id1` AND `c8`.`Id2` = `c10`.`OneToMany_Optional_Inverse4Id2` - ) AS `t3` ON `c7`.`Id1` = `t3`.`OneToMany_Optional_Inverse3Id1` AND `c7`.`Id2` = `t3`.`OneToMany_Optional_Inverse3Id2`) + ) AS `s2` ON `c7`.`Id1` = `s2`.`OneToMany_Optional_Inverse3Id1` AND `c7`.`Id2` = `s2`.`OneToMany_Optional_Inverse3Id2`) LEFT JOIN ( SELECT `c11`.`Name`, `c11`.`Id1`, `c11`.`Id2`, `c12`.`Id1` AS `Id10`, `c12`.`Id2` AS `Id20`, `c12`.`Level3_Optional_Id1`, `c12`.`Level3_Optional_Id2`, `c12`.`Level3_Required_Id1`, `c12`.`Level3_Required_Id2`, `c12`.`Name` AS `Name0`, `c12`.`OneToMany_Optional_Inverse4Id1`, `c12`.`OneToMany_Optional_Inverse4Id2`, `c12`.`OneToMany_Optional_Self_Inverse4Id1`, `c12`.`OneToMany_Optional_Self_Inverse4Id2`, `c12`.`OneToMany_Required_Inverse4Id1`, `c12`.`OneToMany_Required_Inverse4Id2`, `c12`.`OneToMany_Required_Self_Inverse4Id1`, `c12`.`OneToMany_Required_Self_Inverse4Id2`, `c12`.`OneToOne_Optional_PK_Inverse4Id1`, `c12`.`OneToOne_Optional_PK_Inverse4Id2`, `c12`.`OneToOne_Optional_Self4Id1`, `c12`.`OneToOne_Optional_Self4Id2`, `c13`.`Id1` AS `Id11`, `c13`.`Id2` AS `Id21`, `c13`.`Level3_Optional_Id1` AS `Level3_Optional_Id10`, `c13`.`Level3_Optional_Id2` AS `Level3_Optional_Id20`, `c13`.`Level3_Required_Id1` AS `Level3_Required_Id10`, `c13`.`Level3_Required_Id2` AS `Level3_Required_Id20`, `c13`.`Name` AS `Name1`, `c13`.`OneToMany_Optional_Inverse4Id1` AS `OneToMany_Optional_Inverse4Id10`, `c13`.`OneToMany_Optional_Inverse4Id2` AS `OneToMany_Optional_Inverse4Id20`, `c13`.`OneToMany_Optional_Self_Inverse4Id1` AS `OneToMany_Optional_Self_Inverse4Id10`, `c13`.`OneToMany_Optional_Self_Inverse4Id2` AS `OneToMany_Optional_Self_Inverse4Id20`, `c13`.`OneToMany_Required_Inverse4Id1` AS `OneToMany_Required_Inverse4Id10`, `c13`.`OneToMany_Required_Inverse4Id2` AS `OneToMany_Required_Inverse4Id20`, `c13`.`OneToMany_Required_Self_Inverse4Id1` AS `OneToMany_Required_Self_Inverse4Id10`, `c13`.`OneToMany_Required_Self_Inverse4Id2` AS `OneToMany_Required_Self_Inverse4Id20`, `c13`.`OneToOne_Optional_PK_Inverse4Id1` AS `OneToOne_Optional_PK_Inverse4Id10`, `c13`.`OneToOne_Optional_PK_Inverse4Id2` AS `OneToOne_Optional_PK_Inverse4Id20`, `c13`.`OneToOne_Optional_Self4Id1` AS `OneToOne_Optional_Self4Id10`, `c13`.`OneToOne_Optional_Self4Id2` AS `OneToOne_Optional_Self4Id20`, `c11`.`OneToMany_Optional_Inverse3Id1`, `c11`.`OneToMany_Optional_Inverse3Id2` FROM (`CompositeThrees` AS `c11` LEFT JOIN `CompositeFours` AS `c12` ON `c11`.`Id1` = `c12`.`OneToMany_Optional_Inverse4Id1` AND `c11`.`Id2` = `c12`.`OneToMany_Optional_Inverse4Id2`) LEFT JOIN `CompositeFours` AS `c13` ON `c11`.`Id1` = `c13`.`OneToMany_Required_Inverse4Id1` AND `c11`.`Id2` = `c13`.`OneToMany_Required_Inverse4Id2` - ) AS `t4` ON `c7`.`Id1` = `t4`.`OneToMany_Optional_Inverse3Id1` AND `c7`.`Id2` = `t4`.`OneToMany_Optional_Inverse3Id2` -) AS `t2` ON `c`.`Id1` = `t2`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `t2`.`OneToMany_Required_Inverse2Id2` -ORDER BY `c`.`Id1`, `c`.`Id2`, `t1`.`Id1`, `t1`.`Id2`, `t1`.`Id10`, `t1`.`Id20`, `t1`.`Id100`, `t1`.`Id200`, `t1`.`Id11`, `t1`.`Id21`, `t1`.`Id12`, `t1`.`Id22`, `t1`.`Id101`, `t1`.`Id201`, `t1`.`Id110`, `t1`.`Id210`, `t2`.`Id1`, `t2`.`Id2`, `t2`.`Id10`, `t2`.`Id20`, `t2`.`Id100`, `t2`.`Id200`, `t2`.`Id11`, `t2`.`Id21`, `t2`.`Id12`, `t2`.`Id22`, `t2`.`Id101`, `t2`.`Id201`, `t2`.`Id110` + ) AS `s3` ON `c7`.`Id1` = `s3`.`OneToMany_Optional_Inverse3Id1` AND `c7`.`Id2` = `s3`.`OneToMany_Optional_Inverse3Id2` +) AS `s4` ON `c`.`Id1` = `s4`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `s4`.`OneToMany_Required_Inverse2Id2` +ORDER BY `c`.`Id1`, `c`.`Id2`, `s1`.`Id1`, `s1`.`Id2`, `s1`.`Id10`, `s1`.`Id20`, `s1`.`Id100`, `s1`.`Id200`, `s1`.`Id11`, `s1`.`Id21`, `s1`.`Id12`, `s1`.`Id22`, `s1`.`Id101`, `s1`.`Id201`, `s1`.`Id110`, `s1`.`Id210`, `s4`.`Id1`, `s4`.`Id2`, `s4`.`Id10`, `s4`.`Id20`, `s4`.`Id100`, `s4`.`Id200`, `s4`.`Id11`, `s4`.`Id21`, `s4`.`Id12`, `s4`.`Id22`, `s4`.`Id101`, `s4`.`Id201`, `s4`.`Id110` """); } @@ -143,42 +140,42 @@ public override async Task Projecting_multiple_collections_on_multiple_levels_so await base.Projecting_multiple_collections_on_multiple_levels_some_explicit_ordering(async); AssertSql( -""" -SELECT `c`.`Id1`, `c`.`Id2`, `t1`.`Name`, `t1`.`Id1`, `t1`.`Id2`, `t1`.`Id10`, `t1`.`Id20`, `t1`.`Id100`, `t1`.`Id200`, `t1`.`Level3_Optional_Id1`, `t1`.`Level3_Optional_Id2`, `t1`.`Level3_Required_Id1`, `t1`.`Level3_Required_Id2`, `t1`.`Name0`, `t1`.`OneToMany_Optional_Inverse4Id1`, `t1`.`OneToMany_Optional_Inverse4Id2`, `t1`.`OneToMany_Optional_Self_Inverse4Id1`, `t1`.`OneToMany_Optional_Self_Inverse4Id2`, `t1`.`OneToMany_Required_Inverse4Id1`, `t1`.`OneToMany_Required_Inverse4Id2`, `t1`.`OneToMany_Required_Self_Inverse4Id1`, `t1`.`OneToMany_Required_Self_Inverse4Id2`, `t1`.`OneToOne_Optional_PK_Inverse4Id1`, `t1`.`OneToOne_Optional_PK_Inverse4Id2`, `t1`.`OneToOne_Optional_Self4Id1`, `t1`.`OneToOne_Optional_Self4Id2`, `t1`.`Id11`, `t1`.`Id21`, `t1`.`Level3_Optional_Id10`, `t1`.`Level3_Optional_Id20`, `t1`.`Level3_Required_Id10`, `t1`.`Level3_Required_Id20`, `t1`.`Name00`, `t1`.`OneToMany_Optional_Inverse4Id10`, `t1`.`OneToMany_Optional_Inverse4Id20`, `t1`.`OneToMany_Optional_Self_Inverse4Id10`, `t1`.`OneToMany_Optional_Self_Inverse4Id20`, `t1`.`OneToMany_Required_Inverse4Id10`, `t1`.`OneToMany_Required_Inverse4Id20`, `t1`.`OneToMany_Required_Self_Inverse4Id10`, `t1`.`OneToMany_Required_Self_Inverse4Id20`, `t1`.`OneToOne_Optional_PK_Inverse4Id10`, `t1`.`OneToOne_Optional_PK_Inverse4Id20`, `t1`.`OneToOne_Optional_Self4Id10`, `t1`.`OneToOne_Optional_Self4Id20`, `t1`.`Name1`, `t1`.`Id12`, `t1`.`Id22`, `t1`.`Id101`, `t1`.`Id201`, `t1`.`Level3_Optional_Id11`, `t1`.`Level3_Optional_Id21`, `t1`.`Level3_Required_Id11`, `t1`.`Level3_Required_Id21`, `t1`.`Name01`, `t1`.`OneToMany_Optional_Inverse4Id11`, `t1`.`OneToMany_Optional_Inverse4Id21`, `t1`.`OneToMany_Optional_Self_Inverse4Id11`, `t1`.`OneToMany_Optional_Self_Inverse4Id21`, `t1`.`OneToMany_Required_Inverse4Id11`, `t1`.`OneToMany_Required_Inverse4Id21`, `t1`.`OneToMany_Required_Self_Inverse4Id11`, `t1`.`OneToMany_Required_Self_Inverse4Id21`, `t1`.`OneToOne_Optional_PK_Inverse4Id11`, `t1`.`OneToOne_Optional_PK_Inverse4Id21`, `t1`.`OneToOne_Optional_Self4Id11`, `t1`.`OneToOne_Optional_Self4Id21`, `t1`.`Id110`, `t1`.`Id210`, `t1`.`Level3_Optional_Id100`, `t1`.`Level3_Optional_Id200`, `t1`.`Level3_Required_Id100`, `t1`.`Level3_Required_Id200`, `t1`.`Name10`, `t1`.`OneToMany_Optional_Inverse4Id100`, `t1`.`OneToMany_Optional_Inverse4Id200`, `t1`.`OneToMany_Optional_Self_Inverse4Id100`, `t1`.`OneToMany_Optional_Self_Inverse4Id200`, `t1`.`OneToMany_Required_Inverse4Id100`, `t1`.`OneToMany_Required_Inverse4Id200`, `t1`.`OneToMany_Required_Self_Inverse4Id100`, `t1`.`OneToMany_Required_Self_Inverse4Id200`, `t1`.`OneToOne_Optional_PK_Inverse4Id100`, `t1`.`OneToOne_Optional_PK_Inverse4Id200`, `t1`.`OneToOne_Optional_Self4Id100`, `t1`.`OneToOne_Optional_Self4Id200`, `t2`.`Name`, `t2`.`Id1`, `t2`.`Id2`, `t2`.`Name0`, `t2`.`Id10`, `t2`.`Id20`, `t2`.`Id100`, `t2`.`Id200`, `t2`.`Level3_Optional_Id1`, `t2`.`Level3_Optional_Id2`, `t2`.`Level3_Required_Id1`, `t2`.`Level3_Required_Id2`, `t2`.`Name00`, `t2`.`OneToMany_Optional_Inverse4Id1`, `t2`.`OneToMany_Optional_Inverse4Id2`, `t2`.`OneToMany_Optional_Self_Inverse4Id1`, `t2`.`OneToMany_Optional_Self_Inverse4Id2`, `t2`.`OneToMany_Required_Inverse4Id1`, `t2`.`OneToMany_Required_Inverse4Id2`, `t2`.`OneToMany_Required_Self_Inverse4Id1`, `t2`.`OneToMany_Required_Self_Inverse4Id2`, `t2`.`OneToOne_Optional_PK_Inverse4Id1`, `t2`.`OneToOne_Optional_PK_Inverse4Id2`, `t2`.`OneToOne_Optional_Self4Id1`, `t2`.`OneToOne_Optional_Self4Id2`, `t2`.`Id11`, `t2`.`Id21`, `t2`.`Level3_Optional_Id10`, `t2`.`Level3_Optional_Id20`, `t2`.`Level3_Required_Id10`, `t2`.`Level3_Required_Id20`, `t2`.`Name1`, `t2`.`OneToMany_Optional_Inverse4Id10`, `t2`.`OneToMany_Optional_Inverse4Id20`, `t2`.`OneToMany_Optional_Self_Inverse4Id10`, `t2`.`OneToMany_Optional_Self_Inverse4Id20`, `t2`.`OneToMany_Required_Inverse4Id10`, `t2`.`OneToMany_Required_Inverse4Id20`, `t2`.`OneToMany_Required_Self_Inverse4Id10`, `t2`.`OneToMany_Required_Self_Inverse4Id20`, `t2`.`OneToOne_Optional_PK_Inverse4Id10`, `t2`.`OneToOne_Optional_PK_Inverse4Id20`, `t2`.`OneToOne_Optional_Self4Id10`, `t2`.`OneToOne_Optional_Self4Id20`, `t2`.`Name2`, `t2`.`Id12`, `t2`.`Id22`, `t2`.`Id101`, `t2`.`Id201`, `t2`.`Level3_Optional_Id11`, `t2`.`Level3_Optional_Id21`, `t2`.`Level3_Required_Id11`, `t2`.`Level3_Required_Id21`, `t2`.`Name01`, `t2`.`OneToMany_Optional_Inverse4Id11`, `t2`.`OneToMany_Optional_Inverse4Id21`, `t2`.`OneToMany_Optional_Self_Inverse4Id11`, `t2`.`OneToMany_Optional_Self_Inverse4Id21`, `t2`.`OneToMany_Required_Inverse4Id11`, `t2`.`OneToMany_Required_Inverse4Id21`, `t2`.`OneToMany_Required_Self_Inverse4Id11`, `t2`.`OneToMany_Required_Self_Inverse4Id21`, `t2`.`OneToOne_Optional_PK_Inverse4Id11`, `t2`.`OneToOne_Optional_PK_Inverse4Id21`, `t2`.`OneToOne_Optional_Self4Id11`, `t2`.`OneToOne_Optional_Self4Id21`, `t2`.`Id110`, `t2`.`Id210`, `t2`.`Level3_Optional_Id100`, `t2`.`Level3_Optional_Id200`, `t2`.`Level3_Required_Id100`, `t2`.`Level3_Required_Id200`, `t2`.`Name10`, `t2`.`OneToMany_Optional_Inverse4Id100`, `t2`.`OneToMany_Optional_Inverse4Id200`, `t2`.`OneToMany_Optional_Self_Inverse4Id100`, `t2`.`OneToMany_Optional_Self_Inverse4Id200`, `t2`.`OneToMany_Required_Inverse4Id100`, `t2`.`OneToMany_Required_Inverse4Id200`, `t2`.`OneToMany_Required_Self_Inverse4Id100`, `t2`.`OneToMany_Required_Self_Inverse4Id200`, `t2`.`OneToOne_Optional_PK_Inverse4Id100`, `t2`.`OneToOne_Optional_PK_Inverse4Id200`, `t2`.`OneToOne_Optional_Self4Id100`, `t2`.`OneToOne_Optional_Self4Id200` + """ +SELECT `c`.`Id1`, `c`.`Id2`, `s1`.`Name`, `s1`.`Id1`, `s1`.`Id2`, `s1`.`Id10`, `s1`.`Id20`, `s1`.`Id100`, `s1`.`Id200`, `s1`.`Level3_Optional_Id1`, `s1`.`Level3_Optional_Id2`, `s1`.`Level3_Required_Id1`, `s1`.`Level3_Required_Id2`, `s1`.`Name0`, `s1`.`OneToMany_Optional_Inverse4Id1`, `s1`.`OneToMany_Optional_Inverse4Id2`, `s1`.`OneToMany_Optional_Self_Inverse4Id1`, `s1`.`OneToMany_Optional_Self_Inverse4Id2`, `s1`.`OneToMany_Required_Inverse4Id1`, `s1`.`OneToMany_Required_Inverse4Id2`, `s1`.`OneToMany_Required_Self_Inverse4Id1`, `s1`.`OneToMany_Required_Self_Inverse4Id2`, `s1`.`OneToOne_Optional_PK_Inverse4Id1`, `s1`.`OneToOne_Optional_PK_Inverse4Id2`, `s1`.`OneToOne_Optional_Self4Id1`, `s1`.`OneToOne_Optional_Self4Id2`, `s1`.`Id11`, `s1`.`Id21`, `s1`.`Level3_Optional_Id10`, `s1`.`Level3_Optional_Id20`, `s1`.`Level3_Required_Id10`, `s1`.`Level3_Required_Id20`, `s1`.`Name00`, `s1`.`OneToMany_Optional_Inverse4Id10`, `s1`.`OneToMany_Optional_Inverse4Id20`, `s1`.`OneToMany_Optional_Self_Inverse4Id10`, `s1`.`OneToMany_Optional_Self_Inverse4Id20`, `s1`.`OneToMany_Required_Inverse4Id10`, `s1`.`OneToMany_Required_Inverse4Id20`, `s1`.`OneToMany_Required_Self_Inverse4Id10`, `s1`.`OneToMany_Required_Self_Inverse4Id20`, `s1`.`OneToOne_Optional_PK_Inverse4Id10`, `s1`.`OneToOne_Optional_PK_Inverse4Id20`, `s1`.`OneToOne_Optional_Self4Id10`, `s1`.`OneToOne_Optional_Self4Id20`, `s1`.`Name1`, `s1`.`Id12`, `s1`.`Id22`, `s1`.`Id101`, `s1`.`Id201`, `s1`.`Level3_Optional_Id11`, `s1`.`Level3_Optional_Id21`, `s1`.`Level3_Required_Id11`, `s1`.`Level3_Required_Id21`, `s1`.`Name01`, `s1`.`OneToMany_Optional_Inverse4Id11`, `s1`.`OneToMany_Optional_Inverse4Id21`, `s1`.`OneToMany_Optional_Self_Inverse4Id11`, `s1`.`OneToMany_Optional_Self_Inverse4Id21`, `s1`.`OneToMany_Required_Inverse4Id11`, `s1`.`OneToMany_Required_Inverse4Id21`, `s1`.`OneToMany_Required_Self_Inverse4Id11`, `s1`.`OneToMany_Required_Self_Inverse4Id21`, `s1`.`OneToOne_Optional_PK_Inverse4Id11`, `s1`.`OneToOne_Optional_PK_Inverse4Id21`, `s1`.`OneToOne_Optional_Self4Id11`, `s1`.`OneToOne_Optional_Self4Id21`, `s1`.`Id110`, `s1`.`Id210`, `s1`.`Level3_Optional_Id100`, `s1`.`Level3_Optional_Id200`, `s1`.`Level3_Required_Id100`, `s1`.`Level3_Required_Id200`, `s1`.`Name10`, `s1`.`OneToMany_Optional_Inverse4Id100`, `s1`.`OneToMany_Optional_Inverse4Id200`, `s1`.`OneToMany_Optional_Self_Inverse4Id100`, `s1`.`OneToMany_Optional_Self_Inverse4Id200`, `s1`.`OneToMany_Required_Inverse4Id100`, `s1`.`OneToMany_Required_Inverse4Id200`, `s1`.`OneToMany_Required_Self_Inverse4Id100`, `s1`.`OneToMany_Required_Self_Inverse4Id200`, `s1`.`OneToOne_Optional_PK_Inverse4Id100`, `s1`.`OneToOne_Optional_PK_Inverse4Id200`, `s1`.`OneToOne_Optional_Self4Id100`, `s1`.`OneToOne_Optional_Self4Id200`, `s4`.`Name`, `s4`.`Id1`, `s4`.`Id2`, `s4`.`Name0`, `s4`.`Id10`, `s4`.`Id20`, `s4`.`Id100`, `s4`.`Id200`, `s4`.`Level3_Optional_Id1`, `s4`.`Level3_Optional_Id2`, `s4`.`Level3_Required_Id1`, `s4`.`Level3_Required_Id2`, `s4`.`Name00`, `s4`.`OneToMany_Optional_Inverse4Id1`, `s4`.`OneToMany_Optional_Inverse4Id2`, `s4`.`OneToMany_Optional_Self_Inverse4Id1`, `s4`.`OneToMany_Optional_Self_Inverse4Id2`, `s4`.`OneToMany_Required_Inverse4Id1`, `s4`.`OneToMany_Required_Inverse4Id2`, `s4`.`OneToMany_Required_Self_Inverse4Id1`, `s4`.`OneToMany_Required_Self_Inverse4Id2`, `s4`.`OneToOne_Optional_PK_Inverse4Id1`, `s4`.`OneToOne_Optional_PK_Inverse4Id2`, `s4`.`OneToOne_Optional_Self4Id1`, `s4`.`OneToOne_Optional_Self4Id2`, `s4`.`Id11`, `s4`.`Id21`, `s4`.`Level3_Optional_Id10`, `s4`.`Level3_Optional_Id20`, `s4`.`Level3_Required_Id10`, `s4`.`Level3_Required_Id20`, `s4`.`Name1`, `s4`.`OneToMany_Optional_Inverse4Id10`, `s4`.`OneToMany_Optional_Inverse4Id20`, `s4`.`OneToMany_Optional_Self_Inverse4Id10`, `s4`.`OneToMany_Optional_Self_Inverse4Id20`, `s4`.`OneToMany_Required_Inverse4Id10`, `s4`.`OneToMany_Required_Inverse4Id20`, `s4`.`OneToMany_Required_Self_Inverse4Id10`, `s4`.`OneToMany_Required_Self_Inverse4Id20`, `s4`.`OneToOne_Optional_PK_Inverse4Id10`, `s4`.`OneToOne_Optional_PK_Inverse4Id20`, `s4`.`OneToOne_Optional_Self4Id10`, `s4`.`OneToOne_Optional_Self4Id20`, `s4`.`Name2`, `s4`.`Id12`, `s4`.`Id22`, `s4`.`Id101`, `s4`.`Id201`, `s4`.`Level3_Optional_Id11`, `s4`.`Level3_Optional_Id21`, `s4`.`Level3_Required_Id11`, `s4`.`Level3_Required_Id21`, `s4`.`Name01`, `s4`.`OneToMany_Optional_Inverse4Id11`, `s4`.`OneToMany_Optional_Inverse4Id21`, `s4`.`OneToMany_Optional_Self_Inverse4Id11`, `s4`.`OneToMany_Optional_Self_Inverse4Id21`, `s4`.`OneToMany_Required_Inverse4Id11`, `s4`.`OneToMany_Required_Inverse4Id21`, `s4`.`OneToMany_Required_Self_Inverse4Id11`, `s4`.`OneToMany_Required_Self_Inverse4Id21`, `s4`.`OneToOne_Optional_PK_Inverse4Id11`, `s4`.`OneToOne_Optional_PK_Inverse4Id21`, `s4`.`OneToOne_Optional_Self4Id11`, `s4`.`OneToOne_Optional_Self4Id21`, `s4`.`Id110`, `s4`.`Id210`, `s4`.`Level3_Optional_Id100`, `s4`.`Level3_Optional_Id200`, `s4`.`Level3_Required_Id100`, `s4`.`Level3_Required_Id200`, `s4`.`Name10`, `s4`.`OneToMany_Optional_Inverse4Id100`, `s4`.`OneToMany_Optional_Inverse4Id200`, `s4`.`OneToMany_Optional_Self_Inverse4Id100`, `s4`.`OneToMany_Optional_Self_Inverse4Id200`, `s4`.`OneToMany_Required_Inverse4Id100`, `s4`.`OneToMany_Required_Inverse4Id200`, `s4`.`OneToMany_Required_Self_Inverse4Id100`, `s4`.`OneToMany_Required_Self_Inverse4Id200`, `s4`.`OneToOne_Optional_PK_Inverse4Id100`, `s4`.`OneToOne_Optional_PK_Inverse4Id200`, `s4`.`OneToOne_Optional_Self4Id100`, `s4`.`OneToOne_Optional_Self4Id200` FROM (`CompositeOnes` AS `c` LEFT JOIN ( - SELECT `c0`.`Name`, `c0`.`Id1`, `c0`.`Id2`, `t`.`Id1` AS `Id10`, `t`.`Id2` AS `Id20`, `t`.`Id10` AS `Id100`, `t`.`Id20` AS `Id200`, `t`.`Level3_Optional_Id1`, `t`.`Level3_Optional_Id2`, `t`.`Level3_Required_Id1`, `t`.`Level3_Required_Id2`, `t`.`Name` AS `Name0`, `t`.`OneToMany_Optional_Inverse4Id1`, `t`.`OneToMany_Optional_Inverse4Id2`, `t`.`OneToMany_Optional_Self_Inverse4Id1`, `t`.`OneToMany_Optional_Self_Inverse4Id2`, `t`.`OneToMany_Required_Inverse4Id1`, `t`.`OneToMany_Required_Inverse4Id2`, `t`.`OneToMany_Required_Self_Inverse4Id1`, `t`.`OneToMany_Required_Self_Inverse4Id2`, `t`.`OneToOne_Optional_PK_Inverse4Id1`, `t`.`OneToOne_Optional_PK_Inverse4Id2`, `t`.`OneToOne_Optional_Self4Id1`, `t`.`OneToOne_Optional_Self4Id2`, `t`.`Id11`, `t`.`Id21`, `t`.`Level3_Optional_Id10`, `t`.`Level3_Optional_Id20`, `t`.`Level3_Required_Id10`, `t`.`Level3_Required_Id20`, `t`.`Name0` AS `Name00`, `t`.`OneToMany_Optional_Inverse4Id10`, `t`.`OneToMany_Optional_Inverse4Id20`, `t`.`OneToMany_Optional_Self_Inverse4Id10`, `t`.`OneToMany_Optional_Self_Inverse4Id20`, `t`.`OneToMany_Required_Inverse4Id10`, `t`.`OneToMany_Required_Inverse4Id20`, `t`.`OneToMany_Required_Self_Inverse4Id10`, `t`.`OneToMany_Required_Self_Inverse4Id20`, `t`.`OneToOne_Optional_PK_Inverse4Id10`, `t`.`OneToOne_Optional_PK_Inverse4Id20`, `t`.`OneToOne_Optional_Self4Id10`, `t`.`OneToOne_Optional_Self4Id20`, `t0`.`Name` AS `Name1`, `t0`.`Id1` AS `Id12`, `t0`.`Id2` AS `Id22`, `t0`.`Id10` AS `Id101`, `t0`.`Id20` AS `Id201`, `t0`.`Level3_Optional_Id1` AS `Level3_Optional_Id11`, `t0`.`Level3_Optional_Id2` AS `Level3_Optional_Id21`, `t0`.`Level3_Required_Id1` AS `Level3_Required_Id11`, `t0`.`Level3_Required_Id2` AS `Level3_Required_Id21`, `t0`.`Name0` AS `Name01`, `t0`.`OneToMany_Optional_Inverse4Id1` AS `OneToMany_Optional_Inverse4Id11`, `t0`.`OneToMany_Optional_Inverse4Id2` AS `OneToMany_Optional_Inverse4Id21`, `t0`.`OneToMany_Optional_Self_Inverse4Id1` AS `OneToMany_Optional_Self_Inverse4Id11`, `t0`.`OneToMany_Optional_Self_Inverse4Id2` AS `OneToMany_Optional_Self_Inverse4Id21`, `t0`.`OneToMany_Required_Inverse4Id1` AS `OneToMany_Required_Inverse4Id11`, `t0`.`OneToMany_Required_Inverse4Id2` AS `OneToMany_Required_Inverse4Id21`, `t0`.`OneToMany_Required_Self_Inverse4Id1` AS `OneToMany_Required_Self_Inverse4Id11`, `t0`.`OneToMany_Required_Self_Inverse4Id2` AS `OneToMany_Required_Self_Inverse4Id21`, `t0`.`OneToOne_Optional_PK_Inverse4Id1` AS `OneToOne_Optional_PK_Inverse4Id11`, `t0`.`OneToOne_Optional_PK_Inverse4Id2` AS `OneToOne_Optional_PK_Inverse4Id21`, `t0`.`OneToOne_Optional_Self4Id1` AS `OneToOne_Optional_Self4Id11`, `t0`.`OneToOne_Optional_Self4Id2` AS `OneToOne_Optional_Self4Id21`, `t0`.`Id11` AS `Id110`, `t0`.`Id21` AS `Id210`, `t0`.`Level3_Optional_Id10` AS `Level3_Optional_Id100`, `t0`.`Level3_Optional_Id20` AS `Level3_Optional_Id200`, `t0`.`Level3_Required_Id10` AS `Level3_Required_Id100`, `t0`.`Level3_Required_Id20` AS `Level3_Required_Id200`, `t0`.`Name1` AS `Name10`, `t0`.`OneToMany_Optional_Inverse4Id10` AS `OneToMany_Optional_Inverse4Id100`, `t0`.`OneToMany_Optional_Inverse4Id20` AS `OneToMany_Optional_Inverse4Id200`, `t0`.`OneToMany_Optional_Self_Inverse4Id10` AS `OneToMany_Optional_Self_Inverse4Id100`, `t0`.`OneToMany_Optional_Self_Inverse4Id20` AS `OneToMany_Optional_Self_Inverse4Id200`, `t0`.`OneToMany_Required_Inverse4Id10` AS `OneToMany_Required_Inverse4Id100`, `t0`.`OneToMany_Required_Inverse4Id20` AS `OneToMany_Required_Inverse4Id200`, `t0`.`OneToMany_Required_Self_Inverse4Id10` AS `OneToMany_Required_Self_Inverse4Id100`, `t0`.`OneToMany_Required_Self_Inverse4Id20` AS `OneToMany_Required_Self_Inverse4Id200`, `t0`.`OneToOne_Optional_PK_Inverse4Id10` AS `OneToOne_Optional_PK_Inverse4Id100`, `t0`.`OneToOne_Optional_PK_Inverse4Id20` AS `OneToOne_Optional_PK_Inverse4Id200`, `t0`.`OneToOne_Optional_Self4Id10` AS `OneToOne_Optional_Self4Id100`, `t0`.`OneToOne_Optional_Self4Id20` AS `OneToOne_Optional_Self4Id200`, `c0`.`OneToMany_Optional_Inverse2Id1`, `c0`.`OneToMany_Optional_Inverse2Id2` + SELECT `c0`.`Name`, `c0`.`Id1`, `c0`.`Id2`, `s`.`Id1` AS `Id10`, `s`.`Id2` AS `Id20`, `s`.`Id10` AS `Id100`, `s`.`Id20` AS `Id200`, `s`.`Level3_Optional_Id1`, `s`.`Level3_Optional_Id2`, `s`.`Level3_Required_Id1`, `s`.`Level3_Required_Id2`, `s`.`Name` AS `Name0`, `s`.`OneToMany_Optional_Inverse4Id1`, `s`.`OneToMany_Optional_Inverse4Id2`, `s`.`OneToMany_Optional_Self_Inverse4Id1`, `s`.`OneToMany_Optional_Self_Inverse4Id2`, `s`.`OneToMany_Required_Inverse4Id1`, `s`.`OneToMany_Required_Inverse4Id2`, `s`.`OneToMany_Required_Self_Inverse4Id1`, `s`.`OneToMany_Required_Self_Inverse4Id2`, `s`.`OneToOne_Optional_PK_Inverse4Id1`, `s`.`OneToOne_Optional_PK_Inverse4Id2`, `s`.`OneToOne_Optional_Self4Id1`, `s`.`OneToOne_Optional_Self4Id2`, `s`.`Id11`, `s`.`Id21`, `s`.`Level3_Optional_Id10`, `s`.`Level3_Optional_Id20`, `s`.`Level3_Required_Id10`, `s`.`Level3_Required_Id20`, `s`.`Name0` AS `Name00`, `s`.`OneToMany_Optional_Inverse4Id10`, `s`.`OneToMany_Optional_Inverse4Id20`, `s`.`OneToMany_Optional_Self_Inverse4Id10`, `s`.`OneToMany_Optional_Self_Inverse4Id20`, `s`.`OneToMany_Required_Inverse4Id10`, `s`.`OneToMany_Required_Inverse4Id20`, `s`.`OneToMany_Required_Self_Inverse4Id10`, `s`.`OneToMany_Required_Self_Inverse4Id20`, `s`.`OneToOne_Optional_PK_Inverse4Id10`, `s`.`OneToOne_Optional_PK_Inverse4Id20`, `s`.`OneToOne_Optional_Self4Id10`, `s`.`OneToOne_Optional_Self4Id20`, `s0`.`Name` AS `Name1`, `s0`.`Id1` AS `Id12`, `s0`.`Id2` AS `Id22`, `s0`.`Id10` AS `Id101`, `s0`.`Id20` AS `Id201`, `s0`.`Level3_Optional_Id1` AS `Level3_Optional_Id11`, `s0`.`Level3_Optional_Id2` AS `Level3_Optional_Id21`, `s0`.`Level3_Required_Id1` AS `Level3_Required_Id11`, `s0`.`Level3_Required_Id2` AS `Level3_Required_Id21`, `s0`.`Name0` AS `Name01`, `s0`.`OneToMany_Optional_Inverse4Id1` AS `OneToMany_Optional_Inverse4Id11`, `s0`.`OneToMany_Optional_Inverse4Id2` AS `OneToMany_Optional_Inverse4Id21`, `s0`.`OneToMany_Optional_Self_Inverse4Id1` AS `OneToMany_Optional_Self_Inverse4Id11`, `s0`.`OneToMany_Optional_Self_Inverse4Id2` AS `OneToMany_Optional_Self_Inverse4Id21`, `s0`.`OneToMany_Required_Inverse4Id1` AS `OneToMany_Required_Inverse4Id11`, `s0`.`OneToMany_Required_Inverse4Id2` AS `OneToMany_Required_Inverse4Id21`, `s0`.`OneToMany_Required_Self_Inverse4Id1` AS `OneToMany_Required_Self_Inverse4Id11`, `s0`.`OneToMany_Required_Self_Inverse4Id2` AS `OneToMany_Required_Self_Inverse4Id21`, `s0`.`OneToOne_Optional_PK_Inverse4Id1` AS `OneToOne_Optional_PK_Inverse4Id11`, `s0`.`OneToOne_Optional_PK_Inverse4Id2` AS `OneToOne_Optional_PK_Inverse4Id21`, `s0`.`OneToOne_Optional_Self4Id1` AS `OneToOne_Optional_Self4Id11`, `s0`.`OneToOne_Optional_Self4Id2` AS `OneToOne_Optional_Self4Id21`, `s0`.`Id11` AS `Id110`, `s0`.`Id21` AS `Id210`, `s0`.`Level3_Optional_Id10` AS `Level3_Optional_Id100`, `s0`.`Level3_Optional_Id20` AS `Level3_Optional_Id200`, `s0`.`Level3_Required_Id10` AS `Level3_Required_Id100`, `s0`.`Level3_Required_Id20` AS `Level3_Required_Id200`, `s0`.`Name1` AS `Name10`, `s0`.`OneToMany_Optional_Inverse4Id10` AS `OneToMany_Optional_Inverse4Id100`, `s0`.`OneToMany_Optional_Inverse4Id20` AS `OneToMany_Optional_Inverse4Id200`, `s0`.`OneToMany_Optional_Self_Inverse4Id10` AS `OneToMany_Optional_Self_Inverse4Id100`, `s0`.`OneToMany_Optional_Self_Inverse4Id20` AS `OneToMany_Optional_Self_Inverse4Id200`, `s0`.`OneToMany_Required_Inverse4Id10` AS `OneToMany_Required_Inverse4Id100`, `s0`.`OneToMany_Required_Inverse4Id20` AS `OneToMany_Required_Inverse4Id200`, `s0`.`OneToMany_Required_Self_Inverse4Id10` AS `OneToMany_Required_Self_Inverse4Id100`, `s0`.`OneToMany_Required_Self_Inverse4Id20` AS `OneToMany_Required_Self_Inverse4Id200`, `s0`.`OneToOne_Optional_PK_Inverse4Id10` AS `OneToOne_Optional_PK_Inverse4Id100`, `s0`.`OneToOne_Optional_PK_Inverse4Id20` AS `OneToOne_Optional_PK_Inverse4Id200`, `s0`.`OneToOne_Optional_Self4Id10` AS `OneToOne_Optional_Self4Id100`, `s0`.`OneToOne_Optional_Self4Id20` AS `OneToOne_Optional_Self4Id200`, `c0`.`OneToMany_Optional_Inverse2Id1`, `c0`.`OneToMany_Optional_Inverse2Id2` FROM (`CompositeTwos` AS `c0` LEFT JOIN ( SELECT `c1`.`Id1`, `c1`.`Id2`, `c2`.`Id1` AS `Id10`, `c2`.`Id2` AS `Id20`, `c2`.`Level3_Optional_Id1`, `c2`.`Level3_Optional_Id2`, `c2`.`Level3_Required_Id1`, `c2`.`Level3_Required_Id2`, `c2`.`Name`, `c2`.`OneToMany_Optional_Inverse4Id1`, `c2`.`OneToMany_Optional_Inverse4Id2`, `c2`.`OneToMany_Optional_Self_Inverse4Id1`, `c2`.`OneToMany_Optional_Self_Inverse4Id2`, `c2`.`OneToMany_Required_Inverse4Id1`, `c2`.`OneToMany_Required_Inverse4Id2`, `c2`.`OneToMany_Required_Self_Inverse4Id1`, `c2`.`OneToMany_Required_Self_Inverse4Id2`, `c2`.`OneToOne_Optional_PK_Inverse4Id1`, `c2`.`OneToOne_Optional_PK_Inverse4Id2`, `c2`.`OneToOne_Optional_Self4Id1`, `c2`.`OneToOne_Optional_Self4Id2`, `c3`.`Id1` AS `Id11`, `c3`.`Id2` AS `Id21`, `c3`.`Level3_Optional_Id1` AS `Level3_Optional_Id10`, `c3`.`Level3_Optional_Id2` AS `Level3_Optional_Id20`, `c3`.`Level3_Required_Id1` AS `Level3_Required_Id10`, `c3`.`Level3_Required_Id2` AS `Level3_Required_Id20`, `c3`.`Name` AS `Name0`, `c3`.`OneToMany_Optional_Inverse4Id1` AS `OneToMany_Optional_Inverse4Id10`, `c3`.`OneToMany_Optional_Inverse4Id2` AS `OneToMany_Optional_Inverse4Id20`, `c3`.`OneToMany_Optional_Self_Inverse4Id1` AS `OneToMany_Optional_Self_Inverse4Id10`, `c3`.`OneToMany_Optional_Self_Inverse4Id2` AS `OneToMany_Optional_Self_Inverse4Id20`, `c3`.`OneToMany_Required_Inverse4Id1` AS `OneToMany_Required_Inverse4Id10`, `c3`.`OneToMany_Required_Inverse4Id2` AS `OneToMany_Required_Inverse4Id20`, `c3`.`OneToMany_Required_Self_Inverse4Id1` AS `OneToMany_Required_Self_Inverse4Id10`, `c3`.`OneToMany_Required_Self_Inverse4Id2` AS `OneToMany_Required_Self_Inverse4Id20`, `c3`.`OneToOne_Optional_PK_Inverse4Id1` AS `OneToOne_Optional_PK_Inverse4Id10`, `c3`.`OneToOne_Optional_PK_Inverse4Id2` AS `OneToOne_Optional_PK_Inverse4Id20`, `c3`.`OneToOne_Optional_Self4Id1` AS `OneToOne_Optional_Self4Id10`, `c3`.`OneToOne_Optional_Self4Id2` AS `OneToOne_Optional_Self4Id20`, `c1`.`OneToMany_Required_Inverse3Id1`, `c1`.`OneToMany_Required_Inverse3Id2` FROM (`CompositeThrees` AS `c1` LEFT JOIN `CompositeFours` AS `c2` ON `c1`.`Id1` = `c2`.`OneToMany_Optional_Inverse4Id1` AND `c1`.`Id2` = `c2`.`OneToMany_Optional_Inverse4Id2`) LEFT JOIN `CompositeFours` AS `c3` ON `c1`.`Id1` = `c3`.`OneToMany_Required_Inverse4Id1` AND `c1`.`Id2` = `c3`.`OneToMany_Required_Inverse4Id2` - ) AS `t` ON `c0`.`Id1` = `t`.`OneToMany_Required_Inverse3Id1` AND `c0`.`Id2` = `t`.`OneToMany_Required_Inverse3Id2`) + ) AS `s` ON `c0`.`Id1` = `s`.`OneToMany_Required_Inverse3Id1` AND `c0`.`Id2` = `s`.`OneToMany_Required_Inverse3Id2`) LEFT JOIN ( SELECT `c4`.`Name`, `c4`.`Id1`, `c4`.`Id2`, `c5`.`Id1` AS `Id10`, `c5`.`Id2` AS `Id20`, `c5`.`Level3_Optional_Id1`, `c5`.`Level3_Optional_Id2`, `c5`.`Level3_Required_Id1`, `c5`.`Level3_Required_Id2`, `c5`.`Name` AS `Name0`, `c5`.`OneToMany_Optional_Inverse4Id1`, `c5`.`OneToMany_Optional_Inverse4Id2`, `c5`.`OneToMany_Optional_Self_Inverse4Id1`, `c5`.`OneToMany_Optional_Self_Inverse4Id2`, `c5`.`OneToMany_Required_Inverse4Id1`, `c5`.`OneToMany_Required_Inverse4Id2`, `c5`.`OneToMany_Required_Self_Inverse4Id1`, `c5`.`OneToMany_Required_Self_Inverse4Id2`, `c5`.`OneToOne_Optional_PK_Inverse4Id1`, `c5`.`OneToOne_Optional_PK_Inverse4Id2`, `c5`.`OneToOne_Optional_Self4Id1`, `c5`.`OneToOne_Optional_Self4Id2`, `c6`.`Id1` AS `Id11`, `c6`.`Id2` AS `Id21`, `c6`.`Level3_Optional_Id1` AS `Level3_Optional_Id10`, `c6`.`Level3_Optional_Id2` AS `Level3_Optional_Id20`, `c6`.`Level3_Required_Id1` AS `Level3_Required_Id10`, `c6`.`Level3_Required_Id2` AS `Level3_Required_Id20`, `c6`.`Name` AS `Name1`, `c6`.`OneToMany_Optional_Inverse4Id1` AS `OneToMany_Optional_Inverse4Id10`, `c6`.`OneToMany_Optional_Inverse4Id2` AS `OneToMany_Optional_Inverse4Id20`, `c6`.`OneToMany_Optional_Self_Inverse4Id1` AS `OneToMany_Optional_Self_Inverse4Id10`, `c6`.`OneToMany_Optional_Self_Inverse4Id2` AS `OneToMany_Optional_Self_Inverse4Id20`, `c6`.`OneToMany_Required_Inverse4Id1` AS `OneToMany_Required_Inverse4Id10`, `c6`.`OneToMany_Required_Inverse4Id2` AS `OneToMany_Required_Inverse4Id20`, `c6`.`OneToMany_Required_Self_Inverse4Id1` AS `OneToMany_Required_Self_Inverse4Id10`, `c6`.`OneToMany_Required_Self_Inverse4Id2` AS `OneToMany_Required_Self_Inverse4Id20`, `c6`.`OneToOne_Optional_PK_Inverse4Id1` AS `OneToOne_Optional_PK_Inverse4Id10`, `c6`.`OneToOne_Optional_PK_Inverse4Id2` AS `OneToOne_Optional_PK_Inverse4Id20`, `c6`.`OneToOne_Optional_Self4Id1` AS `OneToOne_Optional_Self4Id10`, `c6`.`OneToOne_Optional_Self4Id2` AS `OneToOne_Optional_Self4Id20`, `c4`.`OneToMany_Optional_Inverse3Id1`, `c4`.`OneToMany_Optional_Inverse3Id2` FROM (`CompositeThrees` AS `c4` LEFT JOIN `CompositeFours` AS `c5` ON `c4`.`Id1` = `c5`.`OneToMany_Required_Inverse4Id1` AND `c4`.`Id2` = `c5`.`OneToMany_Required_Inverse4Id2`) LEFT JOIN `CompositeFours` AS `c6` ON `c4`.`Id1` = `c6`.`OneToMany_Optional_Inverse4Id1` AND `c4`.`Id2` = `c6`.`OneToMany_Optional_Inverse4Id2` - ) AS `t0` ON `c0`.`Id1` = `t0`.`OneToMany_Optional_Inverse3Id1` AND `c0`.`Id2` = `t0`.`OneToMany_Optional_Inverse3Id2` -) AS `t1` ON `c`.`Id1` = `t1`.`OneToMany_Optional_Inverse2Id1` AND `c`.`Id2` = `t1`.`OneToMany_Optional_Inverse2Id2`) + ) AS `s0` ON `c0`.`Id1` = `s0`.`OneToMany_Optional_Inverse3Id1` AND `c0`.`Id2` = `s0`.`OneToMany_Optional_Inverse3Id2` +) AS `s1` ON `c`.`Id1` = `s1`.`OneToMany_Optional_Inverse2Id1` AND `c`.`Id2` = `s1`.`OneToMany_Optional_Inverse2Id2`) LEFT JOIN ( - SELECT `c7`.`Name`, `c7`.`Id1`, `c7`.`Id2`, `t3`.`Name` AS `Name0`, `t3`.`Id1` AS `Id10`, `t3`.`Id2` AS `Id20`, `t3`.`Id10` AS `Id100`, `t3`.`Id20` AS `Id200`, `t3`.`Level3_Optional_Id1`, `t3`.`Level3_Optional_Id2`, `t3`.`Level3_Required_Id1`, `t3`.`Level3_Required_Id2`, `t3`.`Name0` AS `Name00`, `t3`.`OneToMany_Optional_Inverse4Id1`, `t3`.`OneToMany_Optional_Inverse4Id2`, `t3`.`OneToMany_Optional_Self_Inverse4Id1`, `t3`.`OneToMany_Optional_Self_Inverse4Id2`, `t3`.`OneToMany_Required_Inverse4Id1`, `t3`.`OneToMany_Required_Inverse4Id2`, `t3`.`OneToMany_Required_Self_Inverse4Id1`, `t3`.`OneToMany_Required_Self_Inverse4Id2`, `t3`.`OneToOne_Optional_PK_Inverse4Id1`, `t3`.`OneToOne_Optional_PK_Inverse4Id2`, `t3`.`OneToOne_Optional_Self4Id1`, `t3`.`OneToOne_Optional_Self4Id2`, `t3`.`Id11`, `t3`.`Id21`, `t3`.`Level3_Optional_Id10`, `t3`.`Level3_Optional_Id20`, `t3`.`Level3_Required_Id10`, `t3`.`Level3_Required_Id20`, `t3`.`Name1`, `t3`.`OneToMany_Optional_Inverse4Id10`, `t3`.`OneToMany_Optional_Inverse4Id20`, `t3`.`OneToMany_Optional_Self_Inverse4Id10`, `t3`.`OneToMany_Optional_Self_Inverse4Id20`, `t3`.`OneToMany_Required_Inverse4Id10`, `t3`.`OneToMany_Required_Inverse4Id20`, `t3`.`OneToMany_Required_Self_Inverse4Id10`, `t3`.`OneToMany_Required_Self_Inverse4Id20`, `t3`.`OneToOne_Optional_PK_Inverse4Id10`, `t3`.`OneToOne_Optional_PK_Inverse4Id20`, `t3`.`OneToOne_Optional_Self4Id10`, `t3`.`OneToOne_Optional_Self4Id20`, `t4`.`Name` AS `Name2`, `t4`.`Id1` AS `Id12`, `t4`.`Id2` AS `Id22`, `t4`.`Id10` AS `Id101`, `t4`.`Id20` AS `Id201`, `t4`.`Level3_Optional_Id1` AS `Level3_Optional_Id11`, `t4`.`Level3_Optional_Id2` AS `Level3_Optional_Id21`, `t4`.`Level3_Required_Id1` AS `Level3_Required_Id11`, `t4`.`Level3_Required_Id2` AS `Level3_Required_Id21`, `t4`.`Name0` AS `Name01`, `t4`.`OneToMany_Optional_Inverse4Id1` AS `OneToMany_Optional_Inverse4Id11`, `t4`.`OneToMany_Optional_Inverse4Id2` AS `OneToMany_Optional_Inverse4Id21`, `t4`.`OneToMany_Optional_Self_Inverse4Id1` AS `OneToMany_Optional_Self_Inverse4Id11`, `t4`.`OneToMany_Optional_Self_Inverse4Id2` AS `OneToMany_Optional_Self_Inverse4Id21`, `t4`.`OneToMany_Required_Inverse4Id1` AS `OneToMany_Required_Inverse4Id11`, `t4`.`OneToMany_Required_Inverse4Id2` AS `OneToMany_Required_Inverse4Id21`, `t4`.`OneToMany_Required_Self_Inverse4Id1` AS `OneToMany_Required_Self_Inverse4Id11`, `t4`.`OneToMany_Required_Self_Inverse4Id2` AS `OneToMany_Required_Self_Inverse4Id21`, `t4`.`OneToOne_Optional_PK_Inverse4Id1` AS `OneToOne_Optional_PK_Inverse4Id11`, `t4`.`OneToOne_Optional_PK_Inverse4Id2` AS `OneToOne_Optional_PK_Inverse4Id21`, `t4`.`OneToOne_Optional_Self4Id1` AS `OneToOne_Optional_Self4Id11`, `t4`.`OneToOne_Optional_Self4Id2` AS `OneToOne_Optional_Self4Id21`, `t4`.`Id11` AS `Id110`, `t4`.`Id21` AS `Id210`, `t4`.`Level3_Optional_Id10` AS `Level3_Optional_Id100`, `t4`.`Level3_Optional_Id20` AS `Level3_Optional_Id200`, `t4`.`Level3_Required_Id10` AS `Level3_Required_Id100`, `t4`.`Level3_Required_Id20` AS `Level3_Required_Id200`, `t4`.`Name1` AS `Name10`, `t4`.`OneToMany_Optional_Inverse4Id10` AS `OneToMany_Optional_Inverse4Id100`, `t4`.`OneToMany_Optional_Inverse4Id20` AS `OneToMany_Optional_Inverse4Id200`, `t4`.`OneToMany_Optional_Self_Inverse4Id10` AS `OneToMany_Optional_Self_Inverse4Id100`, `t4`.`OneToMany_Optional_Self_Inverse4Id20` AS `OneToMany_Optional_Self_Inverse4Id200`, `t4`.`OneToMany_Required_Inverse4Id10` AS `OneToMany_Required_Inverse4Id100`, `t4`.`OneToMany_Required_Inverse4Id20` AS `OneToMany_Required_Inverse4Id200`, `t4`.`OneToMany_Required_Self_Inverse4Id10` AS `OneToMany_Required_Self_Inverse4Id100`, `t4`.`OneToMany_Required_Self_Inverse4Id20` AS `OneToMany_Required_Self_Inverse4Id200`, `t4`.`OneToOne_Optional_PK_Inverse4Id10` AS `OneToOne_Optional_PK_Inverse4Id100`, `t4`.`OneToOne_Optional_PK_Inverse4Id20` AS `OneToOne_Optional_PK_Inverse4Id200`, `t4`.`OneToOne_Optional_Self4Id10` AS `OneToOne_Optional_Self4Id100`, `t4`.`OneToOne_Optional_Self4Id20` AS `OneToOne_Optional_Self4Id200`, IIF(LEN(`c7`.`Name`) IS NULL, NULL, CLNG(LEN(`c7`.`Name`))) AS `c`, `t4`.`c` AS `c0`, `c7`.`OneToMany_Required_Inverse2Id1`, `c7`.`OneToMany_Required_Inverse2Id2` + SELECT `c7`.`Name`, `c7`.`Id1`, `c7`.`Id2`, `s2`.`Name` AS `Name0`, `s2`.`Id1` AS `Id10`, `s2`.`Id2` AS `Id20`, `s2`.`Id10` AS `Id100`, `s2`.`Id20` AS `Id200`, `s2`.`Level3_Optional_Id1`, `s2`.`Level3_Optional_Id2`, `s2`.`Level3_Required_Id1`, `s2`.`Level3_Required_Id2`, `s2`.`Name0` AS `Name00`, `s2`.`OneToMany_Optional_Inverse4Id1`, `s2`.`OneToMany_Optional_Inverse4Id2`, `s2`.`OneToMany_Optional_Self_Inverse4Id1`, `s2`.`OneToMany_Optional_Self_Inverse4Id2`, `s2`.`OneToMany_Required_Inverse4Id1`, `s2`.`OneToMany_Required_Inverse4Id2`, `s2`.`OneToMany_Required_Self_Inverse4Id1`, `s2`.`OneToMany_Required_Self_Inverse4Id2`, `s2`.`OneToOne_Optional_PK_Inverse4Id1`, `s2`.`OneToOne_Optional_PK_Inverse4Id2`, `s2`.`OneToOne_Optional_Self4Id1`, `s2`.`OneToOne_Optional_Self4Id2`, `s2`.`Id11`, `s2`.`Id21`, `s2`.`Level3_Optional_Id10`, `s2`.`Level3_Optional_Id20`, `s2`.`Level3_Required_Id10`, `s2`.`Level3_Required_Id20`, `s2`.`Name1`, `s2`.`OneToMany_Optional_Inverse4Id10`, `s2`.`OneToMany_Optional_Inverse4Id20`, `s2`.`OneToMany_Optional_Self_Inverse4Id10`, `s2`.`OneToMany_Optional_Self_Inverse4Id20`, `s2`.`OneToMany_Required_Inverse4Id10`, `s2`.`OneToMany_Required_Inverse4Id20`, `s2`.`OneToMany_Required_Self_Inverse4Id10`, `s2`.`OneToMany_Required_Self_Inverse4Id20`, `s2`.`OneToOne_Optional_PK_Inverse4Id10`, `s2`.`OneToOne_Optional_PK_Inverse4Id20`, `s2`.`OneToOne_Optional_Self4Id10`, `s2`.`OneToOne_Optional_Self4Id20`, `s3`.`Name` AS `Name2`, `s3`.`Id1` AS `Id12`, `s3`.`Id2` AS `Id22`, `s3`.`Id10` AS `Id101`, `s3`.`Id20` AS `Id201`, `s3`.`Level3_Optional_Id1` AS `Level3_Optional_Id11`, `s3`.`Level3_Optional_Id2` AS `Level3_Optional_Id21`, `s3`.`Level3_Required_Id1` AS `Level3_Required_Id11`, `s3`.`Level3_Required_Id2` AS `Level3_Required_Id21`, `s3`.`Name0` AS `Name01`, `s3`.`OneToMany_Optional_Inverse4Id1` AS `OneToMany_Optional_Inverse4Id11`, `s3`.`OneToMany_Optional_Inverse4Id2` AS `OneToMany_Optional_Inverse4Id21`, `s3`.`OneToMany_Optional_Self_Inverse4Id1` AS `OneToMany_Optional_Self_Inverse4Id11`, `s3`.`OneToMany_Optional_Self_Inverse4Id2` AS `OneToMany_Optional_Self_Inverse4Id21`, `s3`.`OneToMany_Required_Inverse4Id1` AS `OneToMany_Required_Inverse4Id11`, `s3`.`OneToMany_Required_Inverse4Id2` AS `OneToMany_Required_Inverse4Id21`, `s3`.`OneToMany_Required_Self_Inverse4Id1` AS `OneToMany_Required_Self_Inverse4Id11`, `s3`.`OneToMany_Required_Self_Inverse4Id2` AS `OneToMany_Required_Self_Inverse4Id21`, `s3`.`OneToOne_Optional_PK_Inverse4Id1` AS `OneToOne_Optional_PK_Inverse4Id11`, `s3`.`OneToOne_Optional_PK_Inverse4Id2` AS `OneToOne_Optional_PK_Inverse4Id21`, `s3`.`OneToOne_Optional_Self4Id1` AS `OneToOne_Optional_Self4Id11`, `s3`.`OneToOne_Optional_Self4Id2` AS `OneToOne_Optional_Self4Id21`, `s3`.`Id11` AS `Id110`, `s3`.`Id21` AS `Id210`, `s3`.`Level3_Optional_Id10` AS `Level3_Optional_Id100`, `s3`.`Level3_Optional_Id20` AS `Level3_Optional_Id200`, `s3`.`Level3_Required_Id10` AS `Level3_Required_Id100`, `s3`.`Level3_Required_Id20` AS `Level3_Required_Id200`, `s3`.`Name1` AS `Name10`, `s3`.`OneToMany_Optional_Inverse4Id10` AS `OneToMany_Optional_Inverse4Id100`, `s3`.`OneToMany_Optional_Inverse4Id20` AS `OneToMany_Optional_Inverse4Id200`, `s3`.`OneToMany_Optional_Self_Inverse4Id10` AS `OneToMany_Optional_Self_Inverse4Id100`, `s3`.`OneToMany_Optional_Self_Inverse4Id20` AS `OneToMany_Optional_Self_Inverse4Id200`, `s3`.`OneToMany_Required_Inverse4Id10` AS `OneToMany_Required_Inverse4Id100`, `s3`.`OneToMany_Required_Inverse4Id20` AS `OneToMany_Required_Inverse4Id200`, `s3`.`OneToMany_Required_Self_Inverse4Id10` AS `OneToMany_Required_Self_Inverse4Id100`, `s3`.`OneToMany_Required_Self_Inverse4Id20` AS `OneToMany_Required_Self_Inverse4Id200`, `s3`.`OneToOne_Optional_PK_Inverse4Id10` AS `OneToOne_Optional_PK_Inverse4Id100`, `s3`.`OneToOne_Optional_PK_Inverse4Id20` AS `OneToOne_Optional_PK_Inverse4Id200`, `s3`.`OneToOne_Optional_Self4Id10` AS `OneToOne_Optional_Self4Id100`, `s3`.`OneToOne_Optional_Self4Id20` AS `OneToOne_Optional_Self4Id200`, IIF(LEN(`c7`.`Name`) IS NULL, NULL, CLNG(LEN(`c7`.`Name`))) AS `c`, `s3`.`c` AS `c0`, `c7`.`OneToMany_Required_Inverse2Id1`, `c7`.`OneToMany_Required_Inverse2Id2` FROM (`CompositeTwos` AS `c7` LEFT JOIN ( SELECT `c8`.`Name`, `c8`.`Id1`, `c8`.`Id2`, `c9`.`Id1` AS `Id10`, `c9`.`Id2` AS `Id20`, `c9`.`Level3_Optional_Id1`, `c9`.`Level3_Optional_Id2`, `c9`.`Level3_Required_Id1`, `c9`.`Level3_Required_Id2`, `c9`.`Name` AS `Name0`, `c9`.`OneToMany_Optional_Inverse4Id1`, `c9`.`OneToMany_Optional_Inverse4Id2`, `c9`.`OneToMany_Optional_Self_Inverse4Id1`, `c9`.`OneToMany_Optional_Self_Inverse4Id2`, `c9`.`OneToMany_Required_Inverse4Id1`, `c9`.`OneToMany_Required_Inverse4Id2`, `c9`.`OneToMany_Required_Self_Inverse4Id1`, `c9`.`OneToMany_Required_Self_Inverse4Id2`, `c9`.`OneToOne_Optional_PK_Inverse4Id1`, `c9`.`OneToOne_Optional_PK_Inverse4Id2`, `c9`.`OneToOne_Optional_Self4Id1`, `c9`.`OneToOne_Optional_Self4Id2`, `c10`.`Id1` AS `Id11`, `c10`.`Id2` AS `Id21`, `c10`.`Level3_Optional_Id1` AS `Level3_Optional_Id10`, `c10`.`Level3_Optional_Id2` AS `Level3_Optional_Id20`, `c10`.`Level3_Required_Id1` AS `Level3_Required_Id10`, `c10`.`Level3_Required_Id2` AS `Level3_Required_Id20`, `c10`.`Name` AS `Name1`, `c10`.`OneToMany_Optional_Inverse4Id1` AS `OneToMany_Optional_Inverse4Id10`, `c10`.`OneToMany_Optional_Inverse4Id2` AS `OneToMany_Optional_Inverse4Id20`, `c10`.`OneToMany_Optional_Self_Inverse4Id1` AS `OneToMany_Optional_Self_Inverse4Id10`, `c10`.`OneToMany_Optional_Self_Inverse4Id2` AS `OneToMany_Optional_Self_Inverse4Id20`, `c10`.`OneToMany_Required_Inverse4Id1` AS `OneToMany_Required_Inverse4Id10`, `c10`.`OneToMany_Required_Inverse4Id2` AS `OneToMany_Required_Inverse4Id20`, `c10`.`OneToMany_Required_Self_Inverse4Id1` AS `OneToMany_Required_Self_Inverse4Id10`, `c10`.`OneToMany_Required_Self_Inverse4Id2` AS `OneToMany_Required_Self_Inverse4Id20`, `c10`.`OneToOne_Optional_PK_Inverse4Id1` AS `OneToOne_Optional_PK_Inverse4Id10`, `c10`.`OneToOne_Optional_PK_Inverse4Id2` AS `OneToOne_Optional_PK_Inverse4Id20`, `c10`.`OneToOne_Optional_Self4Id1` AS `OneToOne_Optional_Self4Id10`, `c10`.`OneToOne_Optional_Self4Id2` AS `OneToOne_Optional_Self4Id20`, `c8`.`OneToMany_Optional_Inverse3Id1`, `c8`.`OneToMany_Optional_Inverse3Id2` FROM (`CompositeThrees` AS `c8` LEFT JOIN `CompositeFours` AS `c9` ON `c8`.`Id1` = `c9`.`OneToMany_Required_Inverse4Id1` AND `c8`.`Id2` = `c9`.`OneToMany_Required_Inverse4Id2`) LEFT JOIN `CompositeFours` AS `c10` ON `c8`.`Id1` = `c10`.`OneToMany_Optional_Inverse4Id1` AND `c8`.`Id2` = `c10`.`OneToMany_Optional_Inverse4Id2` - ) AS `t3` ON `c7`.`Id1` = `t3`.`OneToMany_Optional_Inverse3Id1` AND `c7`.`Id2` = `t3`.`OneToMany_Optional_Inverse3Id2`) + ) AS `s2` ON `c7`.`Id1` = `s2`.`OneToMany_Optional_Inverse3Id1` AND `c7`.`Id2` = `s2`.`OneToMany_Optional_Inverse3Id2`) LEFT JOIN ( SELECT `c11`.`Name`, `c11`.`Id1`, `c11`.`Id2`, `c12`.`Id1` AS `Id10`, `c12`.`Id2` AS `Id20`, `c12`.`Level3_Optional_Id1`, `c12`.`Level3_Optional_Id2`, `c12`.`Level3_Required_Id1`, `c12`.`Level3_Required_Id2`, `c12`.`Name` AS `Name0`, `c12`.`OneToMany_Optional_Inverse4Id1`, `c12`.`OneToMany_Optional_Inverse4Id2`, `c12`.`OneToMany_Optional_Self_Inverse4Id1`, `c12`.`OneToMany_Optional_Self_Inverse4Id2`, `c12`.`OneToMany_Required_Inverse4Id1`, `c12`.`OneToMany_Required_Inverse4Id2`, `c12`.`OneToMany_Required_Self_Inverse4Id1`, `c12`.`OneToMany_Required_Self_Inverse4Id2`, `c12`.`OneToOne_Optional_PK_Inverse4Id1`, `c12`.`OneToOne_Optional_PK_Inverse4Id2`, `c12`.`OneToOne_Optional_Self4Id1`, `c12`.`OneToOne_Optional_Self4Id2`, `c13`.`Id1` AS `Id11`, `c13`.`Id2` AS `Id21`, `c13`.`Level3_Optional_Id1` AS `Level3_Optional_Id10`, `c13`.`Level3_Optional_Id2` AS `Level3_Optional_Id20`, `c13`.`Level3_Required_Id1` AS `Level3_Required_Id10`, `c13`.`Level3_Required_Id2` AS `Level3_Required_Id20`, `c13`.`Name` AS `Name1`, `c13`.`OneToMany_Optional_Inverse4Id1` AS `OneToMany_Optional_Inverse4Id10`, `c13`.`OneToMany_Optional_Inverse4Id2` AS `OneToMany_Optional_Inverse4Id20`, `c13`.`OneToMany_Optional_Self_Inverse4Id1` AS `OneToMany_Optional_Self_Inverse4Id10`, `c13`.`OneToMany_Optional_Self_Inverse4Id2` AS `OneToMany_Optional_Self_Inverse4Id20`, `c13`.`OneToMany_Required_Inverse4Id1` AS `OneToMany_Required_Inverse4Id10`, `c13`.`OneToMany_Required_Inverse4Id2` AS `OneToMany_Required_Inverse4Id20`, `c13`.`OneToMany_Required_Self_Inverse4Id1` AS `OneToMany_Required_Self_Inverse4Id10`, `c13`.`OneToMany_Required_Self_Inverse4Id2` AS `OneToMany_Required_Self_Inverse4Id20`, `c13`.`OneToOne_Optional_PK_Inverse4Id1` AS `OneToOne_Optional_PK_Inverse4Id10`, `c13`.`OneToOne_Optional_PK_Inverse4Id2` AS `OneToOne_Optional_PK_Inverse4Id20`, `c13`.`OneToOne_Optional_Self4Id1` AS `OneToOne_Optional_Self4Id10`, `c13`.`OneToOne_Optional_Self4Id2` AS `OneToOne_Optional_Self4Id20`, `c13`.`Id1` & (`c13`.`Id2` & '') AS `c`, `c11`.`OneToMany_Optional_Inverse3Id1`, `c11`.`OneToMany_Optional_Inverse3Id2` FROM (`CompositeThrees` AS `c11` LEFT JOIN `CompositeFours` AS `c12` ON `c11`.`Id1` = `c12`.`OneToMany_Optional_Inverse4Id1` AND `c11`.`Id2` = `c12`.`OneToMany_Optional_Inverse4Id2`) LEFT JOIN `CompositeFours` AS `c13` ON `c11`.`Id1` = `c13`.`OneToMany_Required_Inverse4Id1` AND `c11`.`Id2` = `c13`.`OneToMany_Required_Inverse4Id2` - ) AS `t4` ON `c7`.`Id1` = `t4`.`OneToMany_Optional_Inverse3Id1` AND `c7`.`Id2` = `t4`.`OneToMany_Optional_Inverse3Id2` -) AS `t2` ON `c`.`Id1` = `t2`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `t2`.`OneToMany_Required_Inverse2Id2` -ORDER BY `c`.`Name`, `c`.`Id1`, `c`.`Id2`, `t1`.`Id1`, `t1`.`Id2`, `t1`.`Id20` DESC, `t1`.`Id10` DESC, `t1`.`Id100`, `t1`.`Id200`, `t1`.`Id11`, `t1`.`Id21`, `t1`.`Id12`, `t1`.`Id22`, `t1`.`Id101`, `t1`.`Id201`, `t1`.`Id110`, `t1`.`Id210`, `t2`.`c`, `t2`.`Id1`, `t2`.`Id2`, `t2`.`Id10`, `t2`.`Id20`, `t2`.`Id100`, `t2`.`Id200`, `t2`.`Id11`, `t2`.`Id21`, `t2`.`Id12`, `t2`.`Id22`, `t2`.`Id101`, `t2`.`Id201`, `t2`.`c0` DESC, `t2`.`Id110` + ) AS `s3` ON `c7`.`Id1` = `s3`.`OneToMany_Optional_Inverse3Id1` AND `c7`.`Id2` = `s3`.`OneToMany_Optional_Inverse3Id2` +) AS `s4` ON `c`.`Id1` = `s4`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `s4`.`OneToMany_Required_Inverse2Id2` +ORDER BY `c`.`Name`, `c`.`Id1`, `c`.`Id2`, `s1`.`Id1`, `s1`.`Id2`, `s1`.`Id20` DESC, `s1`.`Id10` DESC, `s1`.`Id100`, `s1`.`Id200`, `s1`.`Id11`, `s1`.`Id21`, `s1`.`Id12`, `s1`.`Id22`, `s1`.`Id101`, `s1`.`Id201`, `s1`.`Id110`, `s1`.`Id210`, `s4`.`c`, `s4`.`Id1`, `s4`.`Id2`, `s4`.`Id10`, `s4`.`Id20`, `s4`.`Id100`, `s4`.`Id200`, `s4`.`Id11`, `s4`.`Id21`, `s4`.`Id12`, `s4`.`Id22`, `s4`.`Id101`, `s4`.`Id201`, `s4`.`c0` DESC, `s4`.`Id110` """); } diff --git a/test/EFCore.Jet.FunctionalTests/Query/CompositeKeysSplitQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/CompositeKeysSplitQueryJetTest.cs index a2167b35..a1f16bab 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/CompositeKeysSplitQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/CompositeKeysSplitQueryJetTest.cs @@ -18,9 +18,6 @@ public CompositeKeysSplitQueryJetTest( Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); } - protected override bool CanExecuteQueryString - => false; - public override async Task Projecting_collections_multi_level(bool async) { await base.Projecting_collections_multi_level(async); @@ -33,19 +30,19 @@ public override async Task Projecting_collections_multi_level(bool async) """, // """ -SELECT `c0`.`Name`, `c`.`Id1`, `c`.`Id2`, `c0`.`Id1`, `c0`.`Id2` +SELECT `c8`.`Name`, `c`.`Id1`, `c`.`Id2`, `c8`.`Id1`, `c8`.`Id2` FROM `CompositeOnes` AS `c` -INNER JOIN `CompositeTwos` AS `c0` ON `c`.`Id1` = `c0`.`OneToMany_Optional_Inverse2Id1` AND `c`.`Id2` = `c0`.`OneToMany_Optional_Inverse2Id2` -ORDER BY `c`.`Id2`, `c`.`Id1`, `c0`.`Id2`, `c0`.`Id1` +INNER JOIN `CompositeTwos` AS `c8` ON `c`.`Id1` = `c8`.`OneToMany_Optional_Inverse2Id1` AND `c`.`Id2` = `c8`.`OneToMany_Optional_Inverse2Id2` +ORDER BY `c`.`Id2`, `c`.`Id1`, `c8`.`Id2`, `c8`.`Id1` """, // """ -SELECT `c1`.`Id1`, `c1`.`Id2`, `c1`.`Level2_Optional_Id1`, `c1`.`Level2_Optional_Id2`, `c1`.`Level2_Required_Id1`, `c1`.`Level2_Required_Id2`, `c1`.`Name`, `c1`.`OneToMany_Optional_Inverse3Id1`, `c1`.`OneToMany_Optional_Inverse3Id2`, `c1`.`OneToMany_Optional_Self_Inverse3Id1`, `c1`.`OneToMany_Optional_Self_Inverse3Id2`, `c1`.`OneToMany_Required_Inverse3Id1`, `c1`.`OneToMany_Required_Inverse3Id2`, `c1`.`OneToMany_Required_Self_Inverse3Id1`, `c1`.`OneToMany_Required_Self_Inverse3Id2`, `c1`.`OneToOne_Optional_PK_Inverse3Id1`, `c1`.`OneToOne_Optional_PK_Inverse3Id2`, `c1`.`OneToOne_Optional_Self3Id1`, `c1`.`OneToOne_Optional_Self3Id2`, `c`.`Id1`, `c`.`Id2`, `c0`.`Id1`, `c0`.`Id2` +SELECT `c11`.`Id1`, `c11`.`Id2`, `c11`.`Level2_Optional_Id1`, `c11`.`Level2_Optional_Id2`, `c11`.`Level2_Required_Id1`, `c11`.`Level2_Required_Id2`, `c11`.`Name`, `c11`.`OneToMany_Optional_Inverse3Id1`, `c11`.`OneToMany_Optional_Inverse3Id2`, `c11`.`OneToMany_Optional_Self_Inverse3Id1`, `c11`.`OneToMany_Optional_Self_Inverse3Id2`, `c11`.`OneToMany_Required_Inverse3Id1`, `c11`.`OneToMany_Required_Inverse3Id2`, `c11`.`OneToMany_Required_Self_Inverse3Id1`, `c11`.`OneToMany_Required_Self_Inverse3Id2`, `c11`.`OneToOne_Optional_PK_Inverse3Id1`, `c11`.`OneToOne_Optional_PK_Inverse3Id2`, `c11`.`OneToOne_Optional_Self3Id1`, `c11`.`OneToOne_Optional_Self3Id2`, `c`.`Id1`, `c`.`Id2`, `c8`.`Id1`, `c8`.`Id2` FROM (`CompositeOnes` AS `c` -INNER JOIN `CompositeTwos` AS `c0` ON `c`.`Id1` = `c0`.`OneToMany_Optional_Inverse2Id1` AND `c`.`Id2` = `c0`.`OneToMany_Optional_Inverse2Id2`) -LEFT JOIN `CompositeThrees` AS `c1` ON `c0`.`Id1` = `c1`.`OneToMany_Required_Inverse3Id1` AND `c0`.`Id2` = `c1`.`OneToMany_Required_Inverse3Id2` -WHERE `c0`.`Id1` IS NOT NULL AND `c1`.`OneToMany_Required_Inverse3Id1` IS NOT NULL AND `c0`.`Id2` IS NOT NULL AND `c1`.`OneToMany_Required_Inverse3Id2` IS NOT NULL -ORDER BY `c`.`Id2`, `c`.`Id1`, `c0`.`Id2`, `c0`.`Id1`, `c1`.`Id2` DESC +INNER JOIN `CompositeTwos` AS `c8` ON `c`.`Id1` = `c8`.`OneToMany_Optional_Inverse2Id1` AND `c`.`Id2` = `c8`.`OneToMany_Optional_Inverse2Id2`) +LEFT JOIN `CompositeThrees` AS `c11` ON `c8`.`Id1` = `c11`.`OneToMany_Required_Inverse3Id1` AND `c8`.`Id2` = `c11`.`OneToMany_Required_Inverse3Id2` +WHERE `c8`.`Id1` IS NOT NULL AND `c11`.`OneToMany_Required_Inverse3Id1` IS NOT NULL AND `c8`.`Id2` IS NOT NULL AND `c11`.`OneToMany_Required_Inverse3Id2` IS NOT NULL +ORDER BY `c`.`Id2`, `c`.`Id1`, `c8`.`Id2`, `c8`.`Id1`, `c11`.`Id2` DESC """); } @@ -54,120 +51,120 @@ public override async Task Projecting_multiple_collections_on_multiple_levels_no await base.Projecting_multiple_collections_on_multiple_levels_no_explicit_ordering(async); AssertSql( -""" + """ SELECT `c`.`Name`, `c`.`Id1`, `c`.`Id2` FROM `CompositeOnes` AS `c` ORDER BY `c`.`Id1`, `c`.`Id2` """, - // - """ -SELECT `c0`.`Name`, `c`.`Id1`, `c`.`Id2`, `c0`.`Id1`, `c0`.`Id2` + // + """ +SELECT `c62`.`Name`, `c`.`Id1`, `c`.`Id2`, `c62`.`Id1`, `c62`.`Id2` FROM `CompositeOnes` AS `c` -INNER JOIN `CompositeTwos` AS `c0` ON `c`.`Id1` = `c0`.`OneToMany_Optional_Inverse2Id1` AND `c`.`Id2` = `c0`.`OneToMany_Optional_Inverse2Id2` -ORDER BY `c`.`Id1`, `c`.`Id2`, `c0`.`Id1`, `c0`.`Id2` +INNER JOIN `CompositeTwos` AS `c62` ON `c`.`Id1` = `c62`.`OneToMany_Optional_Inverse2Id1` AND `c`.`Id2` = `c62`.`OneToMany_Optional_Inverse2Id2` +ORDER BY `c`.`Id1`, `c`.`Id2`, `c62`.`Id1`, `c62`.`Id2` """, - // - """ -SELECT `c1`.`Name`, `c`.`Id1`, `c`.`Id2`, `c0`.`Id1`, `c0`.`Id2`, `c1`.`Id1`, `c1`.`Id2` + // + """ +SELECT `c75`.`Name`, `c`.`Id1`, `c`.`Id2`, `c62`.`Id1`, `c62`.`Id2`, `c75`.`Id1`, `c75`.`Id2` FROM (`CompositeOnes` AS `c` -INNER JOIN `CompositeTwos` AS `c0` ON `c`.`Id1` = `c0`.`OneToMany_Optional_Inverse2Id1` AND `c`.`Id2` = `c0`.`OneToMany_Optional_Inverse2Id2`) -LEFT JOIN `CompositeThrees` AS `c1` ON `c0`.`Id1` = `c1`.`OneToMany_Required_Inverse3Id1` AND `c0`.`Id2` = `c1`.`OneToMany_Required_Inverse3Id2` -WHERE `c0`.`Id1` IS NOT NULL AND `c1`.`OneToMany_Required_Inverse3Id1` IS NOT NULL AND `c0`.`Id2` IS NOT NULL AND `c1`.`OneToMany_Required_Inverse3Id2` IS NOT NULL -ORDER BY `c`.`Id1`, `c`.`Id2`, `c0`.`Id1`, `c0`.`Id2`, `c1`.`Id1`, `c1`.`Id2` -""", - // - """ -SELECT `c1`.`Name`, `c`.`Id1`, `c`.`Id2`, `c0`.`Id1`, `c0`.`Id2`, `c1`.`Id1`, `c1`.`Id2` +INNER JOIN `CompositeTwos` AS `c62` ON `c`.`Id1` = `c62`.`OneToMany_Optional_Inverse2Id1` AND `c`.`Id2` = `c62`.`OneToMany_Optional_Inverse2Id2`) +LEFT JOIN `CompositeThrees` AS `c75` ON `c62`.`Id1` = `c75`.`OneToMany_Required_Inverse3Id1` AND `c62`.`Id2` = `c75`.`OneToMany_Required_Inverse3Id2` +WHERE `c62`.`Id1` IS NOT NULL AND `c75`.`OneToMany_Required_Inverse3Id1` IS NOT NULL AND `c62`.`Id2` IS NOT NULL AND `c75`.`OneToMany_Required_Inverse3Id2` IS NOT NULL +ORDER BY `c`.`Id1`, `c`.`Id2`, `c62`.`Id1`, `c62`.`Id2`, `c75`.`Id1`, `c75`.`Id2` +""", + // + """ +SELECT `c87`.`Name`, `c`.`Id1`, `c`.`Id2`, `c62`.`Id1`, `c62`.`Id2`, `c87`.`Id1`, `c87`.`Id2` FROM (`CompositeOnes` AS `c` -INNER JOIN `CompositeTwos` AS `c0` ON `c`.`Id1` = `c0`.`OneToMany_Optional_Inverse2Id1` AND `c`.`Id2` = `c0`.`OneToMany_Optional_Inverse2Id2`) -LEFT JOIN `CompositeThrees` AS `c1` ON `c0`.`Id1` = `c1`.`OneToMany_Optional_Inverse3Id1` AND `c0`.`Id2` = `c1`.`OneToMany_Optional_Inverse3Id2` -WHERE `c0`.`Id1` IS NOT NULL AND `c1`.`OneToMany_Optional_Inverse3Id1` IS NOT NULL AND `c0`.`Id2` IS NOT NULL AND `c1`.`OneToMany_Optional_Inverse3Id2` IS NOT NULL -ORDER BY `c`.`Id1`, `c`.`Id2`, `c0`.`Id1`, `c0`.`Id2`, `c1`.`Id1`, `c1`.`Id2` -""", - // - """ -SELECT `c2`.`Id1`, `c2`.`Id2`, `c2`.`Level3_Optional_Id1`, `c2`.`Level3_Optional_Id2`, `c2`.`Level3_Required_Id1`, `c2`.`Level3_Required_Id2`, `c2`.`Name`, `c2`.`OneToMany_Optional_Inverse4Id1`, `c2`.`OneToMany_Optional_Inverse4Id2`, `c2`.`OneToMany_Optional_Self_Inverse4Id1`, `c2`.`OneToMany_Optional_Self_Inverse4Id2`, `c2`.`OneToMany_Required_Inverse4Id1`, `c2`.`OneToMany_Required_Inverse4Id2`, `c2`.`OneToMany_Required_Self_Inverse4Id1`, `c2`.`OneToMany_Required_Self_Inverse4Id2`, `c2`.`OneToOne_Optional_PK_Inverse4Id1`, `c2`.`OneToOne_Optional_PK_Inverse4Id2`, `c2`.`OneToOne_Optional_Self4Id1`, `c2`.`OneToOne_Optional_Self4Id2`, `c`.`Id1`, `c`.`Id2`, `c0`.`Id1`, `c0`.`Id2`, `c1`.`Id1`, `c1`.`Id2` +INNER JOIN `CompositeTwos` AS `c62` ON `c`.`Id1` = `c62`.`OneToMany_Optional_Inverse2Id1` AND `c`.`Id2` = `c62`.`OneToMany_Optional_Inverse2Id2`) +LEFT JOIN `CompositeThrees` AS `c87` ON `c62`.`Id1` = `c87`.`OneToMany_Optional_Inverse3Id1` AND `c62`.`Id2` = `c87`.`OneToMany_Optional_Inverse3Id2` +WHERE `c62`.`Id1` IS NOT NULL AND `c87`.`OneToMany_Optional_Inverse3Id1` IS NOT NULL AND `c62`.`Id2` IS NOT NULL AND `c87`.`OneToMany_Optional_Inverse3Id2` IS NOT NULL +ORDER BY `c`.`Id1`, `c`.`Id2`, `c62`.`Id1`, `c62`.`Id2`, `c87`.`Id1`, `c87`.`Id2` +""", + // + """ +SELECT `c90`.`Id1`, `c90`.`Id2`, `c90`.`Level3_Optional_Id1`, `c90`.`Level3_Optional_Id2`, `c90`.`Level3_Required_Id1`, `c90`.`Level3_Required_Id2`, `c90`.`Name`, `c90`.`OneToMany_Optional_Inverse4Id1`, `c90`.`OneToMany_Optional_Inverse4Id2`, `c90`.`OneToMany_Optional_Self_Inverse4Id1`, `c90`.`OneToMany_Optional_Self_Inverse4Id2`, `c90`.`OneToMany_Required_Inverse4Id1`, `c90`.`OneToMany_Required_Inverse4Id2`, `c90`.`OneToMany_Required_Self_Inverse4Id1`, `c90`.`OneToMany_Required_Self_Inverse4Id2`, `c90`.`OneToOne_Optional_PK_Inverse4Id1`, `c90`.`OneToOne_Optional_PK_Inverse4Id2`, `c90`.`OneToOne_Optional_Self4Id1`, `c90`.`OneToOne_Optional_Self4Id2`, `c`.`Id1`, `c`.`Id2`, `c62`.`Id1`, `c62`.`Id2`, `c87`.`Id1`, `c87`.`Id2` FROM ((`CompositeOnes` AS `c` -INNER JOIN `CompositeTwos` AS `c0` ON `c`.`Id1` = `c0`.`OneToMany_Optional_Inverse2Id1` AND `c`.`Id2` = `c0`.`OneToMany_Optional_Inverse2Id2`) -LEFT JOIN `CompositeThrees` AS `c1` ON `c0`.`Id1` = `c1`.`OneToMany_Optional_Inverse3Id1` AND `c0`.`Id2` = `c1`.`OneToMany_Optional_Inverse3Id2`) -LEFT JOIN `CompositeFours` AS `c2` ON `c1`.`Id1` = `c2`.`OneToMany_Required_Inverse4Id1` AND `c1`.`Id2` = `c2`.`OneToMany_Required_Inverse4Id2` -WHERE `c0`.`Id1` IS NOT NULL AND `c1`.`OneToMany_Optional_Inverse3Id1` IS NOT NULL AND `c0`.`Id2` IS NOT NULL AND `c1`.`OneToMany_Optional_Inverse3Id2` IS NOT NULL AND `c1`.`Id1` IS NOT NULL AND `c2`.`OneToMany_Required_Inverse4Id1` IS NOT NULL AND `c1`.`Id2` IS NOT NULL AND `c2`.`OneToMany_Required_Inverse4Id2` IS NOT NULL -ORDER BY `c`.`Id1`, `c`.`Id2`, `c0`.`Id1`, `c0`.`Id2`, `c1`.`Id1`, `c1`.`Id2` -""", - // - """ -SELECT `c2`.`Id1`, `c2`.`Id2`, `c2`.`Level3_Optional_Id1`, `c2`.`Level3_Optional_Id2`, `c2`.`Level3_Required_Id1`, `c2`.`Level3_Required_Id2`, `c2`.`Name`, `c2`.`OneToMany_Optional_Inverse4Id1`, `c2`.`OneToMany_Optional_Inverse4Id2`, `c2`.`OneToMany_Optional_Self_Inverse4Id1`, `c2`.`OneToMany_Optional_Self_Inverse4Id2`, `c2`.`OneToMany_Required_Inverse4Id1`, `c2`.`OneToMany_Required_Inverse4Id2`, `c2`.`OneToMany_Required_Self_Inverse4Id1`, `c2`.`OneToMany_Required_Self_Inverse4Id2`, `c2`.`OneToOne_Optional_PK_Inverse4Id1`, `c2`.`OneToOne_Optional_PK_Inverse4Id2`, `c2`.`OneToOne_Optional_Self4Id1`, `c2`.`OneToOne_Optional_Self4Id2`, `c`.`Id1`, `c`.`Id2`, `c0`.`Id1`, `c0`.`Id2`, `c1`.`Id1`, `c1`.`Id2` +INNER JOIN `CompositeTwos` AS `c62` ON `c`.`Id1` = `c62`.`OneToMany_Optional_Inverse2Id1` AND `c`.`Id2` = `c62`.`OneToMany_Optional_Inverse2Id2`) +LEFT JOIN `CompositeThrees` AS `c87` ON `c62`.`Id1` = `c87`.`OneToMany_Optional_Inverse3Id1` AND `c62`.`Id2` = `c87`.`OneToMany_Optional_Inverse3Id2`) +LEFT JOIN `CompositeFours` AS `c90` ON `c87`.`Id1` = `c90`.`OneToMany_Required_Inverse4Id1` AND `c87`.`Id2` = `c90`.`OneToMany_Required_Inverse4Id2` +WHERE `c62`.`Id1` IS NOT NULL AND `c87`.`OneToMany_Optional_Inverse3Id1` IS NOT NULL AND `c62`.`Id2` IS NOT NULL AND `c87`.`OneToMany_Optional_Inverse3Id2` IS NOT NULL AND `c87`.`Id1` IS NOT NULL AND `c90`.`OneToMany_Required_Inverse4Id1` IS NOT NULL AND `c87`.`Id2` IS NOT NULL AND `c90`.`OneToMany_Required_Inverse4Id2` IS NOT NULL +ORDER BY `c`.`Id1`, `c`.`Id2`, `c62`.`Id1`, `c62`.`Id2`, `c87`.`Id1`, `c87`.`Id2` +""", + // + """ +SELECT `c92`.`Id1`, `c92`.`Id2`, `c92`.`Level3_Optional_Id1`, `c92`.`Level3_Optional_Id2`, `c92`.`Level3_Required_Id1`, `c92`.`Level3_Required_Id2`, `c92`.`Name`, `c92`.`OneToMany_Optional_Inverse4Id1`, `c92`.`OneToMany_Optional_Inverse4Id2`, `c92`.`OneToMany_Optional_Self_Inverse4Id1`, `c92`.`OneToMany_Optional_Self_Inverse4Id2`, `c92`.`OneToMany_Required_Inverse4Id1`, `c92`.`OneToMany_Required_Inverse4Id2`, `c92`.`OneToMany_Required_Self_Inverse4Id1`, `c92`.`OneToMany_Required_Self_Inverse4Id2`, `c92`.`OneToOne_Optional_PK_Inverse4Id1`, `c92`.`OneToOne_Optional_PK_Inverse4Id2`, `c92`.`OneToOne_Optional_Self4Id1`, `c92`.`OneToOne_Optional_Self4Id2`, `c`.`Id1`, `c`.`Id2`, `c62`.`Id1`, `c62`.`Id2`, `c87`.`Id1`, `c87`.`Id2` FROM ((`CompositeOnes` AS `c` -INNER JOIN `CompositeTwos` AS `c0` ON `c`.`Id1` = `c0`.`OneToMany_Optional_Inverse2Id1` AND `c`.`Id2` = `c0`.`OneToMany_Optional_Inverse2Id2`) -LEFT JOIN `CompositeThrees` AS `c1` ON `c0`.`Id1` = `c1`.`OneToMany_Optional_Inverse3Id1` AND `c0`.`Id2` = `c1`.`OneToMany_Optional_Inverse3Id2`) -LEFT JOIN `CompositeFours` AS `c2` ON `c1`.`Id1` = `c2`.`OneToMany_Optional_Inverse4Id1` AND `c1`.`Id2` = `c2`.`OneToMany_Optional_Inverse4Id2` -WHERE `c0`.`Id1` IS NOT NULL AND `c1`.`OneToMany_Optional_Inverse3Id1` IS NOT NULL AND `c0`.`Id2` IS NOT NULL AND `c1`.`OneToMany_Optional_Inverse3Id2` IS NOT NULL AND `c1`.`Id1` IS NOT NULL AND `c2`.`OneToMany_Optional_Inverse4Id1` IS NOT NULL AND `c1`.`Id2` IS NOT NULL AND `c2`.`OneToMany_Optional_Inverse4Id2` IS NOT NULL -ORDER BY `c`.`Id1`, `c`.`Id2`, `c0`.`Id1`, `c0`.`Id2`, `c1`.`Id1`, `c1`.`Id2` -""", - // - """ -SELECT `c0`.`Name`, `c`.`Id1`, `c`.`Id2`, `c0`.`Id1`, `c0`.`Id2` +INNER JOIN `CompositeTwos` AS `c62` ON `c`.`Id1` = `c62`.`OneToMany_Optional_Inverse2Id1` AND `c`.`Id2` = `c62`.`OneToMany_Optional_Inverse2Id2`) +LEFT JOIN `CompositeThrees` AS `c87` ON `c62`.`Id1` = `c87`.`OneToMany_Optional_Inverse3Id1` AND `c62`.`Id2` = `c87`.`OneToMany_Optional_Inverse3Id2`) +LEFT JOIN `CompositeFours` AS `c92` ON `c87`.`Id1` = `c92`.`OneToMany_Optional_Inverse4Id1` AND `c87`.`Id2` = `c92`.`OneToMany_Optional_Inverse4Id2` +WHERE `c62`.`Id1` IS NOT NULL AND `c87`.`OneToMany_Optional_Inverse3Id1` IS NOT NULL AND `c62`.`Id2` IS NOT NULL AND `c87`.`OneToMany_Optional_Inverse3Id2` IS NOT NULL AND `c87`.`Id1` IS NOT NULL AND `c92`.`OneToMany_Optional_Inverse4Id1` IS NOT NULL AND `c87`.`Id2` IS NOT NULL AND `c92`.`OneToMany_Optional_Inverse4Id2` IS NOT NULL +ORDER BY `c`.`Id1`, `c`.`Id2`, `c62`.`Id1`, `c62`.`Id2`, `c87`.`Id1`, `c87`.`Id2` +""", + // + """ +SELECT `c124`.`Name`, `c`.`Id1`, `c`.`Id2`, `c124`.`Id1`, `c124`.`Id2` FROM `CompositeOnes` AS `c` -INNER JOIN `CompositeTwos` AS `c0` ON `c`.`Id1` = `c0`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `c0`.`OneToMany_Required_Inverse2Id2` -ORDER BY `c`.`Id1`, `c`.`Id2`, `c0`.`Id1`, `c0`.`Id2` +INNER JOIN `CompositeTwos` AS `c124` ON `c`.`Id1` = `c124`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `c124`.`OneToMany_Required_Inverse2Id2` +ORDER BY `c`.`Id1`, `c`.`Id2`, `c124`.`Id1`, `c124`.`Id2` """, - // - """ -SELECT `c1`.`Name`, `c`.`Id1`, `c`.`Id2`, `c0`.`Id1`, `c0`.`Id2`, `c1`.`Id1`, `c1`.`Id2` + // + """ +SELECT `c137`.`Name`, `c`.`Id1`, `c`.`Id2`, `c124`.`Id1`, `c124`.`Id2`, `c137`.`Id1`, `c137`.`Id2` FROM (`CompositeOnes` AS `c` -INNER JOIN `CompositeTwos` AS `c0` ON `c`.`Id1` = `c0`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `c0`.`OneToMany_Required_Inverse2Id2`) -LEFT JOIN `CompositeThrees` AS `c1` ON `c0`.`Id1` = `c1`.`OneToMany_Optional_Inverse3Id1` AND `c0`.`Id2` = `c1`.`OneToMany_Optional_Inverse3Id2` -WHERE `c0`.`Id1` IS NOT NULL AND `c1`.`OneToMany_Optional_Inverse3Id1` IS NOT NULL AND `c0`.`Id2` IS NOT NULL AND `c1`.`OneToMany_Optional_Inverse3Id2` IS NOT NULL -ORDER BY `c`.`Id1`, `c`.`Id2`, `c0`.`Id1`, `c0`.`Id2`, `c1`.`Id1`, `c1`.`Id2` -""", - // - """ -SELECT `c2`.`Id1`, `c2`.`Id2`, `c2`.`Level3_Optional_Id1`, `c2`.`Level3_Optional_Id2`, `c2`.`Level3_Required_Id1`, `c2`.`Level3_Required_Id2`, `c2`.`Name`, `c2`.`OneToMany_Optional_Inverse4Id1`, `c2`.`OneToMany_Optional_Inverse4Id2`, `c2`.`OneToMany_Optional_Self_Inverse4Id1`, `c2`.`OneToMany_Optional_Self_Inverse4Id2`, `c2`.`OneToMany_Required_Inverse4Id1`, `c2`.`OneToMany_Required_Inverse4Id2`, `c2`.`OneToMany_Required_Self_Inverse4Id1`, `c2`.`OneToMany_Required_Self_Inverse4Id2`, `c2`.`OneToOne_Optional_PK_Inverse4Id1`, `c2`.`OneToOne_Optional_PK_Inverse4Id2`, `c2`.`OneToOne_Optional_Self4Id1`, `c2`.`OneToOne_Optional_Self4Id2`, `c`.`Id1`, `c`.`Id2`, `c0`.`Id1`, `c0`.`Id2`, `c1`.`Id1`, `c1`.`Id2` +INNER JOIN `CompositeTwos` AS `c124` ON `c`.`Id1` = `c124`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `c124`.`OneToMany_Required_Inverse2Id2`) +LEFT JOIN `CompositeThrees` AS `c137` ON `c124`.`Id1` = `c137`.`OneToMany_Optional_Inverse3Id1` AND `c124`.`Id2` = `c137`.`OneToMany_Optional_Inverse3Id2` +WHERE `c124`.`Id1` IS NOT NULL AND `c137`.`OneToMany_Optional_Inverse3Id1` IS NOT NULL AND `c124`.`Id2` IS NOT NULL AND `c137`.`OneToMany_Optional_Inverse3Id2` IS NOT NULL +ORDER BY `c`.`Id1`, `c`.`Id2`, `c124`.`Id1`, `c124`.`Id2`, `c137`.`Id1`, `c137`.`Id2` +""", + // + """ +SELECT `c140`.`Id1`, `c140`.`Id2`, `c140`.`Level3_Optional_Id1`, `c140`.`Level3_Optional_Id2`, `c140`.`Level3_Required_Id1`, `c140`.`Level3_Required_Id2`, `c140`.`Name`, `c140`.`OneToMany_Optional_Inverse4Id1`, `c140`.`OneToMany_Optional_Inverse4Id2`, `c140`.`OneToMany_Optional_Self_Inverse4Id1`, `c140`.`OneToMany_Optional_Self_Inverse4Id2`, `c140`.`OneToMany_Required_Inverse4Id1`, `c140`.`OneToMany_Required_Inverse4Id2`, `c140`.`OneToMany_Required_Self_Inverse4Id1`, `c140`.`OneToMany_Required_Self_Inverse4Id2`, `c140`.`OneToOne_Optional_PK_Inverse4Id1`, `c140`.`OneToOne_Optional_PK_Inverse4Id2`, `c140`.`OneToOne_Optional_Self4Id1`, `c140`.`OneToOne_Optional_Self4Id2`, `c`.`Id1`, `c`.`Id2`, `c124`.`Id1`, `c124`.`Id2`, `c137`.`Id1`, `c137`.`Id2` FROM ((`CompositeOnes` AS `c` -INNER JOIN `CompositeTwos` AS `c0` ON `c`.`Id1` = `c0`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `c0`.`OneToMany_Required_Inverse2Id2`) -LEFT JOIN `CompositeThrees` AS `c1` ON `c0`.`Id1` = `c1`.`OneToMany_Optional_Inverse3Id1` AND `c0`.`Id2` = `c1`.`OneToMany_Optional_Inverse3Id2`) -LEFT JOIN `CompositeFours` AS `c2` ON `c1`.`Id1` = `c2`.`OneToMany_Required_Inverse4Id1` AND `c1`.`Id2` = `c2`.`OneToMany_Required_Inverse4Id2` -WHERE `c0`.`Id1` IS NOT NULL AND `c1`.`OneToMany_Optional_Inverse3Id1` IS NOT NULL AND `c0`.`Id2` IS NOT NULL AND `c1`.`OneToMany_Optional_Inverse3Id2` IS NOT NULL AND `c1`.`Id1` IS NOT NULL AND `c2`.`OneToMany_Required_Inverse4Id1` IS NOT NULL AND `c1`.`Id2` IS NOT NULL AND `c2`.`OneToMany_Required_Inverse4Id2` IS NOT NULL -ORDER BY `c`.`Id1`, `c`.`Id2`, `c0`.`Id1`, `c0`.`Id2`, `c1`.`Id1`, `c1`.`Id2` -""", - // - """ -SELECT `c2`.`Id1`, `c2`.`Id2`, `c2`.`Level3_Optional_Id1`, `c2`.`Level3_Optional_Id2`, `c2`.`Level3_Required_Id1`, `c2`.`Level3_Required_Id2`, `c2`.`Name`, `c2`.`OneToMany_Optional_Inverse4Id1`, `c2`.`OneToMany_Optional_Inverse4Id2`, `c2`.`OneToMany_Optional_Self_Inverse4Id1`, `c2`.`OneToMany_Optional_Self_Inverse4Id2`, `c2`.`OneToMany_Required_Inverse4Id1`, `c2`.`OneToMany_Required_Inverse4Id2`, `c2`.`OneToMany_Required_Self_Inverse4Id1`, `c2`.`OneToMany_Required_Self_Inverse4Id2`, `c2`.`OneToOne_Optional_PK_Inverse4Id1`, `c2`.`OneToOne_Optional_PK_Inverse4Id2`, `c2`.`OneToOne_Optional_Self4Id1`, `c2`.`OneToOne_Optional_Self4Id2`, `c`.`Id1`, `c`.`Id2`, `c0`.`Id1`, `c0`.`Id2`, `c1`.`Id1`, `c1`.`Id2` +INNER JOIN `CompositeTwos` AS `c124` ON `c`.`Id1` = `c124`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `c124`.`OneToMany_Required_Inverse2Id2`) +LEFT JOIN `CompositeThrees` AS `c137` ON `c124`.`Id1` = `c137`.`OneToMany_Optional_Inverse3Id1` AND `c124`.`Id2` = `c137`.`OneToMany_Optional_Inverse3Id2`) +LEFT JOIN `CompositeFours` AS `c140` ON `c137`.`Id1` = `c140`.`OneToMany_Required_Inverse4Id1` AND `c137`.`Id2` = `c140`.`OneToMany_Required_Inverse4Id2` +WHERE `c124`.`Id1` IS NOT NULL AND `c137`.`OneToMany_Optional_Inverse3Id1` IS NOT NULL AND `c124`.`Id2` IS NOT NULL AND `c137`.`OneToMany_Optional_Inverse3Id2` IS NOT NULL AND `c137`.`Id1` IS NOT NULL AND `c140`.`OneToMany_Required_Inverse4Id1` IS NOT NULL AND `c137`.`Id2` IS NOT NULL AND `c140`.`OneToMany_Required_Inverse4Id2` IS NOT NULL +ORDER BY `c`.`Id1`, `c`.`Id2`, `c124`.`Id1`, `c124`.`Id2`, `c137`.`Id1`, `c137`.`Id2` +""", + // + """ +SELECT `c142`.`Id1`, `c142`.`Id2`, `c142`.`Level3_Optional_Id1`, `c142`.`Level3_Optional_Id2`, `c142`.`Level3_Required_Id1`, `c142`.`Level3_Required_Id2`, `c142`.`Name`, `c142`.`OneToMany_Optional_Inverse4Id1`, `c142`.`OneToMany_Optional_Inverse4Id2`, `c142`.`OneToMany_Optional_Self_Inverse4Id1`, `c142`.`OneToMany_Optional_Self_Inverse4Id2`, `c142`.`OneToMany_Required_Inverse4Id1`, `c142`.`OneToMany_Required_Inverse4Id2`, `c142`.`OneToMany_Required_Self_Inverse4Id1`, `c142`.`OneToMany_Required_Self_Inverse4Id2`, `c142`.`OneToOne_Optional_PK_Inverse4Id1`, `c142`.`OneToOne_Optional_PK_Inverse4Id2`, `c142`.`OneToOne_Optional_Self4Id1`, `c142`.`OneToOne_Optional_Self4Id2`, `c`.`Id1`, `c`.`Id2`, `c124`.`Id1`, `c124`.`Id2`, `c137`.`Id1`, `c137`.`Id2` FROM ((`CompositeOnes` AS `c` -INNER JOIN `CompositeTwos` AS `c0` ON `c`.`Id1` = `c0`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `c0`.`OneToMany_Required_Inverse2Id2`) -LEFT JOIN `CompositeThrees` AS `c1` ON `c0`.`Id1` = `c1`.`OneToMany_Optional_Inverse3Id1` AND `c0`.`Id2` = `c1`.`OneToMany_Optional_Inverse3Id2`) -LEFT JOIN `CompositeFours` AS `c2` ON `c1`.`Id1` = `c2`.`OneToMany_Optional_Inverse4Id1` AND `c1`.`Id2` = `c2`.`OneToMany_Optional_Inverse4Id2` -WHERE `c0`.`Id1` IS NOT NULL AND `c1`.`OneToMany_Optional_Inverse3Id1` IS NOT NULL AND `c0`.`Id2` IS NOT NULL AND `c1`.`OneToMany_Optional_Inverse3Id2` IS NOT NULL AND `c1`.`Id1` IS NOT NULL AND `c2`.`OneToMany_Optional_Inverse4Id1` IS NOT NULL AND `c1`.`Id2` IS NOT NULL AND `c2`.`OneToMany_Optional_Inverse4Id2` IS NOT NULL -ORDER BY `c`.`Id1`, `c`.`Id2`, `c0`.`Id1`, `c0`.`Id2`, `c1`.`Id1`, `c1`.`Id2` -""", - // - """ -SELECT `c1`.`Name`, `c`.`Id1`, `c`.`Id2`, `c0`.`Id1`, `c0`.`Id2`, `c1`.`Id1`, `c1`.`Id2` +INNER JOIN `CompositeTwos` AS `c124` ON `c`.`Id1` = `c124`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `c124`.`OneToMany_Required_Inverse2Id2`) +LEFT JOIN `CompositeThrees` AS `c137` ON `c124`.`Id1` = `c137`.`OneToMany_Optional_Inverse3Id1` AND `c124`.`Id2` = `c137`.`OneToMany_Optional_Inverse3Id2`) +LEFT JOIN `CompositeFours` AS `c142` ON `c137`.`Id1` = `c142`.`OneToMany_Optional_Inverse4Id1` AND `c137`.`Id2` = `c142`.`OneToMany_Optional_Inverse4Id2` +WHERE `c124`.`Id1` IS NOT NULL AND `c137`.`OneToMany_Optional_Inverse3Id1` IS NOT NULL AND `c124`.`Id2` IS NOT NULL AND `c137`.`OneToMany_Optional_Inverse3Id2` IS NOT NULL AND `c137`.`Id1` IS NOT NULL AND `c142`.`OneToMany_Optional_Inverse4Id1` IS NOT NULL AND `c137`.`Id2` IS NOT NULL AND `c142`.`OneToMany_Optional_Inverse4Id2` IS NOT NULL +ORDER BY `c`.`Id1`, `c`.`Id2`, `c124`.`Id1`, `c124`.`Id2`, `c137`.`Id1`, `c137`.`Id2` +""", + // + """ +SELECT `c149`.`Name`, `c`.`Id1`, `c`.`Id2`, `c124`.`Id1`, `c124`.`Id2`, `c149`.`Id1`, `c149`.`Id2` FROM (`CompositeOnes` AS `c` -INNER JOIN `CompositeTwos` AS `c0` ON `c`.`Id1` = `c0`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `c0`.`OneToMany_Required_Inverse2Id2`) -LEFT JOIN `CompositeThrees` AS `c1` ON `c0`.`Id1` = `c1`.`OneToMany_Optional_Inverse3Id1` AND `c0`.`Id2` = `c1`.`OneToMany_Optional_Inverse3Id2` -WHERE `c0`.`Id1` IS NOT NULL AND `c1`.`OneToMany_Optional_Inverse3Id1` IS NOT NULL AND `c0`.`Id2` IS NOT NULL AND `c1`.`OneToMany_Optional_Inverse3Id2` IS NOT NULL -ORDER BY `c`.`Id1`, `c`.`Id2`, `c0`.`Id1`, `c0`.`Id2`, `c1`.`Id1`, `c1`.`Id2` -""", - // - """ -SELECT `c2`.`Id1`, `c2`.`Id2`, `c2`.`Level3_Optional_Id1`, `c2`.`Level3_Optional_Id2`, `c2`.`Level3_Required_Id1`, `c2`.`Level3_Required_Id2`, `c2`.`Name`, `c2`.`OneToMany_Optional_Inverse4Id1`, `c2`.`OneToMany_Optional_Inverse4Id2`, `c2`.`OneToMany_Optional_Self_Inverse4Id1`, `c2`.`OneToMany_Optional_Self_Inverse4Id2`, `c2`.`OneToMany_Required_Inverse4Id1`, `c2`.`OneToMany_Required_Inverse4Id2`, `c2`.`OneToMany_Required_Self_Inverse4Id1`, `c2`.`OneToMany_Required_Self_Inverse4Id2`, `c2`.`OneToOne_Optional_PK_Inverse4Id1`, `c2`.`OneToOne_Optional_PK_Inverse4Id2`, `c2`.`OneToOne_Optional_Self4Id1`, `c2`.`OneToOne_Optional_Self4Id2`, `c`.`Id1`, `c`.`Id2`, `c0`.`Id1`, `c0`.`Id2`, `c1`.`Id1`, `c1`.`Id2` +INNER JOIN `CompositeTwos` AS `c124` ON `c`.`Id1` = `c124`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `c124`.`OneToMany_Required_Inverse2Id2`) +LEFT JOIN `CompositeThrees` AS `c149` ON `c124`.`Id1` = `c149`.`OneToMany_Optional_Inverse3Id1` AND `c124`.`Id2` = `c149`.`OneToMany_Optional_Inverse3Id2` +WHERE `c124`.`Id1` IS NOT NULL AND `c149`.`OneToMany_Optional_Inverse3Id1` IS NOT NULL AND `c124`.`Id2` IS NOT NULL AND `c149`.`OneToMany_Optional_Inverse3Id2` IS NOT NULL +ORDER BY `c`.`Id1`, `c`.`Id2`, `c124`.`Id1`, `c124`.`Id2`, `c149`.`Id1`, `c149`.`Id2` +""", + // + """ +SELECT `c152`.`Id1`, `c152`.`Id2`, `c152`.`Level3_Optional_Id1`, `c152`.`Level3_Optional_Id2`, `c152`.`Level3_Required_Id1`, `c152`.`Level3_Required_Id2`, `c152`.`Name`, `c152`.`OneToMany_Optional_Inverse4Id1`, `c152`.`OneToMany_Optional_Inverse4Id2`, `c152`.`OneToMany_Optional_Self_Inverse4Id1`, `c152`.`OneToMany_Optional_Self_Inverse4Id2`, `c152`.`OneToMany_Required_Inverse4Id1`, `c152`.`OneToMany_Required_Inverse4Id2`, `c152`.`OneToMany_Required_Self_Inverse4Id1`, `c152`.`OneToMany_Required_Self_Inverse4Id2`, `c152`.`OneToOne_Optional_PK_Inverse4Id1`, `c152`.`OneToOne_Optional_PK_Inverse4Id2`, `c152`.`OneToOne_Optional_Self4Id1`, `c152`.`OneToOne_Optional_Self4Id2`, `c`.`Id1`, `c`.`Id2`, `c124`.`Id1`, `c124`.`Id2`, `c149`.`Id1`, `c149`.`Id2` FROM ((`CompositeOnes` AS `c` -INNER JOIN `CompositeTwos` AS `c0` ON `c`.`Id1` = `c0`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `c0`.`OneToMany_Required_Inverse2Id2`) -LEFT JOIN `CompositeThrees` AS `c1` ON `c0`.`Id1` = `c1`.`OneToMany_Optional_Inverse3Id1` AND `c0`.`Id2` = `c1`.`OneToMany_Optional_Inverse3Id2`) -LEFT JOIN `CompositeFours` AS `c2` ON `c1`.`Id1` = `c2`.`OneToMany_Optional_Inverse4Id1` AND `c1`.`Id2` = `c2`.`OneToMany_Optional_Inverse4Id2` -WHERE `c0`.`Id1` IS NOT NULL AND `c1`.`OneToMany_Optional_Inverse3Id1` IS NOT NULL AND `c0`.`Id2` IS NOT NULL AND `c1`.`OneToMany_Optional_Inverse3Id2` IS NOT NULL AND `c1`.`Id1` IS NOT NULL AND `c2`.`OneToMany_Optional_Inverse4Id1` IS NOT NULL AND `c1`.`Id2` IS NOT NULL AND `c2`.`OneToMany_Optional_Inverse4Id2` IS NOT NULL -ORDER BY `c`.`Id1`, `c`.`Id2`, `c0`.`Id1`, `c0`.`Id2`, `c1`.`Id1`, `c1`.`Id2` -""", - // - """ -SELECT `c2`.`Id1`, `c2`.`Id2`, `c2`.`Level3_Optional_Id1`, `c2`.`Level3_Optional_Id2`, `c2`.`Level3_Required_Id1`, `c2`.`Level3_Required_Id2`, `c2`.`Name`, `c2`.`OneToMany_Optional_Inverse4Id1`, `c2`.`OneToMany_Optional_Inverse4Id2`, `c2`.`OneToMany_Optional_Self_Inverse4Id1`, `c2`.`OneToMany_Optional_Self_Inverse4Id2`, `c2`.`OneToMany_Required_Inverse4Id1`, `c2`.`OneToMany_Required_Inverse4Id2`, `c2`.`OneToMany_Required_Self_Inverse4Id1`, `c2`.`OneToMany_Required_Self_Inverse4Id2`, `c2`.`OneToOne_Optional_PK_Inverse4Id1`, `c2`.`OneToOne_Optional_PK_Inverse4Id2`, `c2`.`OneToOne_Optional_Self4Id1`, `c2`.`OneToOne_Optional_Self4Id2`, `c`.`Id1`, `c`.`Id2`, `c0`.`Id1`, `c0`.`Id2`, `c1`.`Id1`, `c1`.`Id2` +INNER JOIN `CompositeTwos` AS `c124` ON `c`.`Id1` = `c124`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `c124`.`OneToMany_Required_Inverse2Id2`) +LEFT JOIN `CompositeThrees` AS `c149` ON `c124`.`Id1` = `c149`.`OneToMany_Optional_Inverse3Id1` AND `c124`.`Id2` = `c149`.`OneToMany_Optional_Inverse3Id2`) +LEFT JOIN `CompositeFours` AS `c152` ON `c149`.`Id1` = `c152`.`OneToMany_Optional_Inverse4Id1` AND `c149`.`Id2` = `c152`.`OneToMany_Optional_Inverse4Id2` +WHERE `c124`.`Id1` IS NOT NULL AND `c149`.`OneToMany_Optional_Inverse3Id1` IS NOT NULL AND `c124`.`Id2` IS NOT NULL AND `c149`.`OneToMany_Optional_Inverse3Id2` IS NOT NULL AND `c149`.`Id1` IS NOT NULL AND `c152`.`OneToMany_Optional_Inverse4Id1` IS NOT NULL AND `c149`.`Id2` IS NOT NULL AND `c152`.`OneToMany_Optional_Inverse4Id2` IS NOT NULL +ORDER BY `c`.`Id1`, `c`.`Id2`, `c124`.`Id1`, `c124`.`Id2`, `c149`.`Id1`, `c149`.`Id2` +""", + // + """ +SELECT `c154`.`Id1`, `c154`.`Id2`, `c154`.`Level3_Optional_Id1`, `c154`.`Level3_Optional_Id2`, `c154`.`Level3_Required_Id1`, `c154`.`Level3_Required_Id2`, `c154`.`Name`, `c154`.`OneToMany_Optional_Inverse4Id1`, `c154`.`OneToMany_Optional_Inverse4Id2`, `c154`.`OneToMany_Optional_Self_Inverse4Id1`, `c154`.`OneToMany_Optional_Self_Inverse4Id2`, `c154`.`OneToMany_Required_Inverse4Id1`, `c154`.`OneToMany_Required_Inverse4Id2`, `c154`.`OneToMany_Required_Self_Inverse4Id1`, `c154`.`OneToMany_Required_Self_Inverse4Id2`, `c154`.`OneToOne_Optional_PK_Inverse4Id1`, `c154`.`OneToOne_Optional_PK_Inverse4Id2`, `c154`.`OneToOne_Optional_Self4Id1`, `c154`.`OneToOne_Optional_Self4Id2`, `c`.`Id1`, `c`.`Id2`, `c124`.`Id1`, `c124`.`Id2`, `c149`.`Id1`, `c149`.`Id2` FROM ((`CompositeOnes` AS `c` -INNER JOIN `CompositeTwos` AS `c0` ON `c`.`Id1` = `c0`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `c0`.`OneToMany_Required_Inverse2Id2`) -LEFT JOIN `CompositeThrees` AS `c1` ON `c0`.`Id1` = `c1`.`OneToMany_Optional_Inverse3Id1` AND `c0`.`Id2` = `c1`.`OneToMany_Optional_Inverse3Id2`) -LEFT JOIN `CompositeFours` AS `c2` ON `c1`.`Id1` = `c2`.`OneToMany_Required_Inverse4Id1` AND `c1`.`Id2` = `c2`.`OneToMany_Required_Inverse4Id2` -WHERE `c0`.`Id1` IS NOT NULL AND `c1`.`OneToMany_Optional_Inverse3Id1` IS NOT NULL AND `c0`.`Id2` IS NOT NULL AND `c1`.`OneToMany_Optional_Inverse3Id2` IS NOT NULL AND `c1`.`Id1` IS NOT NULL AND `c2`.`OneToMany_Required_Inverse4Id1` IS NOT NULL AND `c1`.`Id2` IS NOT NULL AND `c2`.`OneToMany_Required_Inverse4Id2` IS NOT NULL -ORDER BY `c`.`Id1`, `c`.`Id2`, `c0`.`Id1`, `c0`.`Id2`, `c1`.`Id1`, `c1`.`Id2` +INNER JOIN `CompositeTwos` AS `c124` ON `c`.`Id1` = `c124`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `c124`.`OneToMany_Required_Inverse2Id2`) +LEFT JOIN `CompositeThrees` AS `c149` ON `c124`.`Id1` = `c149`.`OneToMany_Optional_Inverse3Id1` AND `c124`.`Id2` = `c149`.`OneToMany_Optional_Inverse3Id2`) +LEFT JOIN `CompositeFours` AS `c154` ON `c149`.`Id1` = `c154`.`OneToMany_Required_Inverse4Id1` AND `c149`.`Id2` = `c154`.`OneToMany_Required_Inverse4Id2` +WHERE `c124`.`Id1` IS NOT NULL AND `c149`.`OneToMany_Optional_Inverse3Id1` IS NOT NULL AND `c124`.`Id2` IS NOT NULL AND `c149`.`OneToMany_Optional_Inverse3Id2` IS NOT NULL AND `c149`.`Id1` IS NOT NULL AND `c154`.`OneToMany_Required_Inverse4Id1` IS NOT NULL AND `c149`.`Id2` IS NOT NULL AND `c154`.`OneToMany_Required_Inverse4Id2` IS NOT NULL +ORDER BY `c`.`Id1`, `c`.`Id2`, `c124`.`Id1`, `c124`.`Id2`, `c149`.`Id1`, `c149`.`Id2` """); } @@ -176,120 +173,120 @@ public override async Task Projecting_multiple_collections_on_multiple_levels_so await base.Projecting_multiple_collections_on_multiple_levels_some_explicit_ordering(async); AssertSql( -""" + """ SELECT `c`.`Id1`, `c`.`Id2` FROM `CompositeOnes` AS `c` ORDER BY `c`.`Name`, `c`.`Id1`, `c`.`Id2` """, - // - """ -SELECT `c0`.`Name`, `c`.`Id1`, `c`.`Id2`, `c0`.`Id1`, `c0`.`Id2` + // + """ +SELECT `c62`.`Name`, `c`.`Id1`, `c`.`Id2`, `c62`.`Id1`, `c62`.`Id2` FROM `CompositeOnes` AS `c` -INNER JOIN `CompositeTwos` AS `c0` ON `c`.`Id1` = `c0`.`OneToMany_Optional_Inverse2Id1` AND `c`.`Id2` = `c0`.`OneToMany_Optional_Inverse2Id2` -ORDER BY `c`.`Name`, `c`.`Id1`, `c`.`Id2`, `c0`.`Id1`, `c0`.`Id2` +INNER JOIN `CompositeTwos` AS `c62` ON `c`.`Id1` = `c62`.`OneToMany_Optional_Inverse2Id1` AND `c`.`Id2` = `c62`.`OneToMany_Optional_Inverse2Id2` +ORDER BY `c`.`Name`, `c`.`Id1`, `c`.`Id2`, `c62`.`Id1`, `c62`.`Id2` """, - // - """ -SELECT `c`.`Id1`, `c`.`Id2`, `c0`.`Id1`, `c0`.`Id2`, `c1`.`Id1`, `c1`.`Id2` + // + """ +SELECT `c`.`Id1`, `c`.`Id2`, `c62`.`Id1`, `c62`.`Id2`, `c75`.`Id1`, `c75`.`Id2` FROM (`CompositeOnes` AS `c` -INNER JOIN `CompositeTwos` AS `c0` ON `c`.`Id1` = `c0`.`OneToMany_Optional_Inverse2Id1` AND `c`.`Id2` = `c0`.`OneToMany_Optional_Inverse2Id2`) -LEFT JOIN `CompositeThrees` AS `c1` ON `c0`.`Id1` = `c1`.`OneToMany_Required_Inverse3Id1` AND `c0`.`Id2` = `c1`.`OneToMany_Required_Inverse3Id2` -WHERE `c0`.`Id1` IS NOT NULL AND `c1`.`OneToMany_Required_Inverse3Id1` IS NOT NULL AND `c0`.`Id2` IS NOT NULL AND `c1`.`OneToMany_Required_Inverse3Id2` IS NOT NULL -ORDER BY `c`.`Name`, `c`.`Id1`, `c`.`Id2`, `c0`.`Id1`, `c0`.`Id2`, `c1`.`Id2` DESC, `c1`.`Id1` DESC -""", - // - """ -SELECT `c1`.`Name`, `c`.`Id1`, `c`.`Id2`, `c0`.`Id1`, `c0`.`Id2`, `c1`.`Id1`, `c1`.`Id2` +INNER JOIN `CompositeTwos` AS `c62` ON `c`.`Id1` = `c62`.`OneToMany_Optional_Inverse2Id1` AND `c`.`Id2` = `c62`.`OneToMany_Optional_Inverse2Id2`) +LEFT JOIN `CompositeThrees` AS `c75` ON `c62`.`Id1` = `c75`.`OneToMany_Required_Inverse3Id1` AND `c62`.`Id2` = `c75`.`OneToMany_Required_Inverse3Id2` +WHERE `c62`.`Id1` IS NOT NULL AND `c75`.`OneToMany_Required_Inverse3Id1` IS NOT NULL AND `c62`.`Id2` IS NOT NULL AND `c75`.`OneToMany_Required_Inverse3Id2` IS NOT NULL +ORDER BY `c`.`Name`, `c`.`Id1`, `c`.`Id2`, `c62`.`Id1`, `c62`.`Id2`, `c75`.`Id2` DESC, `c75`.`Id1` DESC +""", + // + """ +SELECT `c87`.`Name`, `c`.`Id1`, `c`.`Id2`, `c62`.`Id1`, `c62`.`Id2`, `c87`.`Id1`, `c87`.`Id2` FROM (`CompositeOnes` AS `c` -INNER JOIN `CompositeTwos` AS `c0` ON `c`.`Id1` = `c0`.`OneToMany_Optional_Inverse2Id1` AND `c`.`Id2` = `c0`.`OneToMany_Optional_Inverse2Id2`) -LEFT JOIN `CompositeThrees` AS `c1` ON `c0`.`Id1` = `c1`.`OneToMany_Optional_Inverse3Id1` AND `c0`.`Id2` = `c1`.`OneToMany_Optional_Inverse3Id2` -WHERE `c0`.`Id1` IS NOT NULL AND `c1`.`OneToMany_Optional_Inverse3Id1` IS NOT NULL AND `c0`.`Id2` IS NOT NULL AND `c1`.`OneToMany_Optional_Inverse3Id2` IS NOT NULL -ORDER BY `c`.`Name`, `c`.`Id1`, `c`.`Id2`, `c0`.`Id1`, `c0`.`Id2`, `c1`.`Id1`, `c1`.`Id2` -""", - // - """ -SELECT `c2`.`Id1`, `c2`.`Id2`, `c2`.`Level3_Optional_Id1`, `c2`.`Level3_Optional_Id2`, `c2`.`Level3_Required_Id1`, `c2`.`Level3_Required_Id2`, `c2`.`Name`, `c2`.`OneToMany_Optional_Inverse4Id1`, `c2`.`OneToMany_Optional_Inverse4Id2`, `c2`.`OneToMany_Optional_Self_Inverse4Id1`, `c2`.`OneToMany_Optional_Self_Inverse4Id2`, `c2`.`OneToMany_Required_Inverse4Id1`, `c2`.`OneToMany_Required_Inverse4Id2`, `c2`.`OneToMany_Required_Self_Inverse4Id1`, `c2`.`OneToMany_Required_Self_Inverse4Id2`, `c2`.`OneToOne_Optional_PK_Inverse4Id1`, `c2`.`OneToOne_Optional_PK_Inverse4Id2`, `c2`.`OneToOne_Optional_Self4Id1`, `c2`.`OneToOne_Optional_Self4Id2`, `c`.`Id1`, `c`.`Id2`, `c0`.`Id1`, `c0`.`Id2`, `c1`.`Id1`, `c1`.`Id2` +INNER JOIN `CompositeTwos` AS `c62` ON `c`.`Id1` = `c62`.`OneToMany_Optional_Inverse2Id1` AND `c`.`Id2` = `c62`.`OneToMany_Optional_Inverse2Id2`) +LEFT JOIN `CompositeThrees` AS `c87` ON `c62`.`Id1` = `c87`.`OneToMany_Optional_Inverse3Id1` AND `c62`.`Id2` = `c87`.`OneToMany_Optional_Inverse3Id2` +WHERE `c62`.`Id1` IS NOT NULL AND `c87`.`OneToMany_Optional_Inverse3Id1` IS NOT NULL AND `c62`.`Id2` IS NOT NULL AND `c87`.`OneToMany_Optional_Inverse3Id2` IS NOT NULL +ORDER BY `c`.`Name`, `c`.`Id1`, `c`.`Id2`, `c62`.`Id1`, `c62`.`Id2`, `c87`.`Id1`, `c87`.`Id2` +""", + // + """ +SELECT `c90`.`Id1`, `c90`.`Id2`, `c90`.`Level3_Optional_Id1`, `c90`.`Level3_Optional_Id2`, `c90`.`Level3_Required_Id1`, `c90`.`Level3_Required_Id2`, `c90`.`Name`, `c90`.`OneToMany_Optional_Inverse4Id1`, `c90`.`OneToMany_Optional_Inverse4Id2`, `c90`.`OneToMany_Optional_Self_Inverse4Id1`, `c90`.`OneToMany_Optional_Self_Inverse4Id2`, `c90`.`OneToMany_Required_Inverse4Id1`, `c90`.`OneToMany_Required_Inverse4Id2`, `c90`.`OneToMany_Required_Self_Inverse4Id1`, `c90`.`OneToMany_Required_Self_Inverse4Id2`, `c90`.`OneToOne_Optional_PK_Inverse4Id1`, `c90`.`OneToOne_Optional_PK_Inverse4Id2`, `c90`.`OneToOne_Optional_Self4Id1`, `c90`.`OneToOne_Optional_Self4Id2`, `c`.`Id1`, `c`.`Id2`, `c62`.`Id1`, `c62`.`Id2`, `c87`.`Id1`, `c87`.`Id2` FROM ((`CompositeOnes` AS `c` -INNER JOIN `CompositeTwos` AS `c0` ON `c`.`Id1` = `c0`.`OneToMany_Optional_Inverse2Id1` AND `c`.`Id2` = `c0`.`OneToMany_Optional_Inverse2Id2`) -LEFT JOIN `CompositeThrees` AS `c1` ON `c0`.`Id1` = `c1`.`OneToMany_Optional_Inverse3Id1` AND `c0`.`Id2` = `c1`.`OneToMany_Optional_Inverse3Id2`) -LEFT JOIN `CompositeFours` AS `c2` ON `c1`.`Id1` = `c2`.`OneToMany_Required_Inverse4Id1` AND `c1`.`Id2` = `c2`.`OneToMany_Required_Inverse4Id2` -WHERE `c0`.`Id1` IS NOT NULL AND `c1`.`OneToMany_Optional_Inverse3Id1` IS NOT NULL AND `c0`.`Id2` IS NOT NULL AND `c1`.`OneToMany_Optional_Inverse3Id2` IS NOT NULL AND `c1`.`Id1` IS NOT NULL AND `c2`.`OneToMany_Required_Inverse4Id1` IS NOT NULL AND `c1`.`Id2` IS NOT NULL AND `c2`.`OneToMany_Required_Inverse4Id2` IS NOT NULL -ORDER BY `c`.`Name`, `c`.`Id1`, `c`.`Id2`, `c0`.`Id1`, `c0`.`Id2`, `c1`.`Id1`, `c1`.`Id2` -""", - // - """ -SELECT `c2`.`Id1`, `c2`.`Id2`, `c2`.`Level3_Optional_Id1`, `c2`.`Level3_Optional_Id2`, `c2`.`Level3_Required_Id1`, `c2`.`Level3_Required_Id2`, `c2`.`Name`, `c2`.`OneToMany_Optional_Inverse4Id1`, `c2`.`OneToMany_Optional_Inverse4Id2`, `c2`.`OneToMany_Optional_Self_Inverse4Id1`, `c2`.`OneToMany_Optional_Self_Inverse4Id2`, `c2`.`OneToMany_Required_Inverse4Id1`, `c2`.`OneToMany_Required_Inverse4Id2`, `c2`.`OneToMany_Required_Self_Inverse4Id1`, `c2`.`OneToMany_Required_Self_Inverse4Id2`, `c2`.`OneToOne_Optional_PK_Inverse4Id1`, `c2`.`OneToOne_Optional_PK_Inverse4Id2`, `c2`.`OneToOne_Optional_Self4Id1`, `c2`.`OneToOne_Optional_Self4Id2`, `c`.`Id1`, `c`.`Id2`, `c0`.`Id1`, `c0`.`Id2`, `c1`.`Id1`, `c1`.`Id2` +INNER JOIN `CompositeTwos` AS `c62` ON `c`.`Id1` = `c62`.`OneToMany_Optional_Inverse2Id1` AND `c`.`Id2` = `c62`.`OneToMany_Optional_Inverse2Id2`) +LEFT JOIN `CompositeThrees` AS `c87` ON `c62`.`Id1` = `c87`.`OneToMany_Optional_Inverse3Id1` AND `c62`.`Id2` = `c87`.`OneToMany_Optional_Inverse3Id2`) +LEFT JOIN `CompositeFours` AS `c90` ON `c87`.`Id1` = `c90`.`OneToMany_Required_Inverse4Id1` AND `c87`.`Id2` = `c90`.`OneToMany_Required_Inverse4Id2` +WHERE `c62`.`Id1` IS NOT NULL AND `c87`.`OneToMany_Optional_Inverse3Id1` IS NOT NULL AND `c62`.`Id2` IS NOT NULL AND `c87`.`OneToMany_Optional_Inverse3Id2` IS NOT NULL AND `c87`.`Id1` IS NOT NULL AND `c90`.`OneToMany_Required_Inverse4Id1` IS NOT NULL AND `c87`.`Id2` IS NOT NULL AND `c90`.`OneToMany_Required_Inverse4Id2` IS NOT NULL +ORDER BY `c`.`Name`, `c`.`Id1`, `c`.`Id2`, `c62`.`Id1`, `c62`.`Id2`, `c87`.`Id1`, `c87`.`Id2` +""", + // + """ +SELECT `c92`.`Id1`, `c92`.`Id2`, `c92`.`Level3_Optional_Id1`, `c92`.`Level3_Optional_Id2`, `c92`.`Level3_Required_Id1`, `c92`.`Level3_Required_Id2`, `c92`.`Name`, `c92`.`OneToMany_Optional_Inverse4Id1`, `c92`.`OneToMany_Optional_Inverse4Id2`, `c92`.`OneToMany_Optional_Self_Inverse4Id1`, `c92`.`OneToMany_Optional_Self_Inverse4Id2`, `c92`.`OneToMany_Required_Inverse4Id1`, `c92`.`OneToMany_Required_Inverse4Id2`, `c92`.`OneToMany_Required_Self_Inverse4Id1`, `c92`.`OneToMany_Required_Self_Inverse4Id2`, `c92`.`OneToOne_Optional_PK_Inverse4Id1`, `c92`.`OneToOne_Optional_PK_Inverse4Id2`, `c92`.`OneToOne_Optional_Self4Id1`, `c92`.`OneToOne_Optional_Self4Id2`, `c`.`Id1`, `c`.`Id2`, `c62`.`Id1`, `c62`.`Id2`, `c87`.`Id1`, `c87`.`Id2` FROM ((`CompositeOnes` AS `c` -INNER JOIN `CompositeTwos` AS `c0` ON `c`.`Id1` = `c0`.`OneToMany_Optional_Inverse2Id1` AND `c`.`Id2` = `c0`.`OneToMany_Optional_Inverse2Id2`) -LEFT JOIN `CompositeThrees` AS `c1` ON `c0`.`Id1` = `c1`.`OneToMany_Optional_Inverse3Id1` AND `c0`.`Id2` = `c1`.`OneToMany_Optional_Inverse3Id2`) -LEFT JOIN `CompositeFours` AS `c2` ON `c1`.`Id1` = `c2`.`OneToMany_Optional_Inverse4Id1` AND `c1`.`Id2` = `c2`.`OneToMany_Optional_Inverse4Id2` -WHERE `c0`.`Id1` IS NOT NULL AND `c1`.`OneToMany_Optional_Inverse3Id1` IS NOT NULL AND `c0`.`Id2` IS NOT NULL AND `c1`.`OneToMany_Optional_Inverse3Id2` IS NOT NULL AND `c1`.`Id1` IS NOT NULL AND `c2`.`OneToMany_Optional_Inverse4Id1` IS NOT NULL AND `c1`.`Id2` IS NOT NULL AND `c2`.`OneToMany_Optional_Inverse4Id2` IS NOT NULL -ORDER BY `c`.`Name`, `c`.`Id1`, `c`.`Id2`, `c0`.`Id1`, `c0`.`Id2`, `c1`.`Id1`, `c1`.`Id2` -""", - // - """ -SELECT `c0`.`Name`, `c`.`Id1`, `c`.`Id2`, `c0`.`Id1`, `c0`.`Id2` +INNER JOIN `CompositeTwos` AS `c62` ON `c`.`Id1` = `c62`.`OneToMany_Optional_Inverse2Id1` AND `c`.`Id2` = `c62`.`OneToMany_Optional_Inverse2Id2`) +LEFT JOIN `CompositeThrees` AS `c87` ON `c62`.`Id1` = `c87`.`OneToMany_Optional_Inverse3Id1` AND `c62`.`Id2` = `c87`.`OneToMany_Optional_Inverse3Id2`) +LEFT JOIN `CompositeFours` AS `c92` ON `c87`.`Id1` = `c92`.`OneToMany_Optional_Inverse4Id1` AND `c87`.`Id2` = `c92`.`OneToMany_Optional_Inverse4Id2` +WHERE `c62`.`Id1` IS NOT NULL AND `c87`.`OneToMany_Optional_Inverse3Id1` IS NOT NULL AND `c62`.`Id2` IS NOT NULL AND `c87`.`OneToMany_Optional_Inverse3Id2` IS NOT NULL AND `c87`.`Id1` IS NOT NULL AND `c92`.`OneToMany_Optional_Inverse4Id1` IS NOT NULL AND `c87`.`Id2` IS NOT NULL AND `c92`.`OneToMany_Optional_Inverse4Id2` IS NOT NULL +ORDER BY `c`.`Name`, `c`.`Id1`, `c`.`Id2`, `c62`.`Id1`, `c62`.`Id2`, `c87`.`Id1`, `c87`.`Id2` +""", + // + """ +SELECT `c124`.`Name`, `c`.`Id1`, `c`.`Id2`, `c124`.`Id1`, `c124`.`Id2` FROM `CompositeOnes` AS `c` -INNER JOIN `CompositeTwos` AS `c0` ON `c`.`Id1` = `c0`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `c0`.`OneToMany_Required_Inverse2Id2` -ORDER BY `c`.`Name`, `c`.`Id1`, `c`.`Id2`, IIF(LEN(`c0`.`Name`) IS NULL, NULL, CLNG(LEN(`c0`.`Name`))), `c0`.`Id1`, `c0`.`Id2` +INNER JOIN `CompositeTwos` AS `c124` ON `c`.`Id1` = `c124`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `c124`.`OneToMany_Required_Inverse2Id2` +ORDER BY `c`.`Name`, `c`.`Id1`, `c`.`Id2`, IIF(LEN(`c124`.`Name`) IS NULL, NULL, CLNG(LEN(`c124`.`Name`))), `c124`.`Id1`, `c124`.`Id2` """, - // - """ -SELECT `c1`.`Name`, `c`.`Id1`, `c`.`Id2`, `c0`.`Id1`, `c0`.`Id2`, `c1`.`Id1`, `c1`.`Id2` + // + """ +SELECT `c137`.`Name`, `c`.`Id1`, `c`.`Id2`, `c124`.`Id1`, `c124`.`Id2`, `c137`.`Id1`, `c137`.`Id2` FROM (`CompositeOnes` AS `c` -INNER JOIN `CompositeTwos` AS `c0` ON `c`.`Id1` = `c0`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `c0`.`OneToMany_Required_Inverse2Id2`) -LEFT JOIN `CompositeThrees` AS `c1` ON `c0`.`Id1` = `c1`.`OneToMany_Optional_Inverse3Id1` AND `c0`.`Id2` = `c1`.`OneToMany_Optional_Inverse3Id2` -WHERE `c0`.`Id1` IS NOT NULL AND `c1`.`OneToMany_Optional_Inverse3Id1` IS NOT NULL AND `c0`.`Id2` IS NOT NULL AND `c1`.`OneToMany_Optional_Inverse3Id2` IS NOT NULL -ORDER BY `c`.`Name`, `c`.`Id1`, `c`.`Id2`, IIF(LEN(`c0`.`Name`) IS NULL, NULL, CLNG(LEN(`c0`.`Name`))), `c0`.`Id1`, `c0`.`Id2`, `c1`.`Id1`, `c1`.`Id2` -""", - // - """ -SELECT `c2`.`Id1`, `c2`.`Id2`, `c2`.`Level3_Optional_Id1`, `c2`.`Level3_Optional_Id2`, `c2`.`Level3_Required_Id1`, `c2`.`Level3_Required_Id2`, `c2`.`Name`, `c2`.`OneToMany_Optional_Inverse4Id1`, `c2`.`OneToMany_Optional_Inverse4Id2`, `c2`.`OneToMany_Optional_Self_Inverse4Id1`, `c2`.`OneToMany_Optional_Self_Inverse4Id2`, `c2`.`OneToMany_Required_Inverse4Id1`, `c2`.`OneToMany_Required_Inverse4Id2`, `c2`.`OneToMany_Required_Self_Inverse4Id1`, `c2`.`OneToMany_Required_Self_Inverse4Id2`, `c2`.`OneToOne_Optional_PK_Inverse4Id1`, `c2`.`OneToOne_Optional_PK_Inverse4Id2`, `c2`.`OneToOne_Optional_Self4Id1`, `c2`.`OneToOne_Optional_Self4Id2`, `c`.`Id1`, `c`.`Id2`, `c0`.`Id1`, `c0`.`Id2`, `c1`.`Id1`, `c1`.`Id2` +INNER JOIN `CompositeTwos` AS `c124` ON `c`.`Id1` = `c124`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `c124`.`OneToMany_Required_Inverse2Id2`) +LEFT JOIN `CompositeThrees` AS `c137` ON `c124`.`Id1` = `c137`.`OneToMany_Optional_Inverse3Id1` AND `c124`.`Id2` = `c137`.`OneToMany_Optional_Inverse3Id2` +WHERE `c124`.`Id1` IS NOT NULL AND `c137`.`OneToMany_Optional_Inverse3Id1` IS NOT NULL AND `c124`.`Id2` IS NOT NULL AND `c137`.`OneToMany_Optional_Inverse3Id2` IS NOT NULL +ORDER BY `c`.`Name`, `c`.`Id1`, `c`.`Id2`, IIF(LEN(`c124`.`Name`) IS NULL, NULL, CLNG(LEN(`c124`.`Name`))), `c124`.`Id1`, `c124`.`Id2`, `c137`.`Id1`, `c137`.`Id2` +""", + // + """ +SELECT `c140`.`Id1`, `c140`.`Id2`, `c140`.`Level3_Optional_Id1`, `c140`.`Level3_Optional_Id2`, `c140`.`Level3_Required_Id1`, `c140`.`Level3_Required_Id2`, `c140`.`Name`, `c140`.`OneToMany_Optional_Inverse4Id1`, `c140`.`OneToMany_Optional_Inverse4Id2`, `c140`.`OneToMany_Optional_Self_Inverse4Id1`, `c140`.`OneToMany_Optional_Self_Inverse4Id2`, `c140`.`OneToMany_Required_Inverse4Id1`, `c140`.`OneToMany_Required_Inverse4Id2`, `c140`.`OneToMany_Required_Self_Inverse4Id1`, `c140`.`OneToMany_Required_Self_Inverse4Id2`, `c140`.`OneToOne_Optional_PK_Inverse4Id1`, `c140`.`OneToOne_Optional_PK_Inverse4Id2`, `c140`.`OneToOne_Optional_Self4Id1`, `c140`.`OneToOne_Optional_Self4Id2`, `c`.`Id1`, `c`.`Id2`, `c124`.`Id1`, `c124`.`Id2`, `c137`.`Id1`, `c137`.`Id2` FROM ((`CompositeOnes` AS `c` -INNER JOIN `CompositeTwos` AS `c0` ON `c`.`Id1` = `c0`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `c0`.`OneToMany_Required_Inverse2Id2`) -LEFT JOIN `CompositeThrees` AS `c1` ON `c0`.`Id1` = `c1`.`OneToMany_Optional_Inverse3Id1` AND `c0`.`Id2` = `c1`.`OneToMany_Optional_Inverse3Id2`) -LEFT JOIN `CompositeFours` AS `c2` ON `c1`.`Id1` = `c2`.`OneToMany_Required_Inverse4Id1` AND `c1`.`Id2` = `c2`.`OneToMany_Required_Inverse4Id2` -WHERE `c0`.`Id1` IS NOT NULL AND `c1`.`OneToMany_Optional_Inverse3Id1` IS NOT NULL AND `c0`.`Id2` IS NOT NULL AND `c1`.`OneToMany_Optional_Inverse3Id2` IS NOT NULL AND `c1`.`Id1` IS NOT NULL AND `c2`.`OneToMany_Required_Inverse4Id1` IS NOT NULL AND `c1`.`Id2` IS NOT NULL AND `c2`.`OneToMany_Required_Inverse4Id2` IS NOT NULL -ORDER BY `c`.`Name`, `c`.`Id1`, `c`.`Id2`, IIF(LEN(`c0`.`Name`) IS NULL, NULL, CLNG(LEN(`c0`.`Name`))), `c0`.`Id1`, `c0`.`Id2`, `c1`.`Id1`, `c1`.`Id2` -""", - // - """ -SELECT `c2`.`Id1`, `c2`.`Id2`, `c2`.`Level3_Optional_Id1`, `c2`.`Level3_Optional_Id2`, `c2`.`Level3_Required_Id1`, `c2`.`Level3_Required_Id2`, `c2`.`Name`, `c2`.`OneToMany_Optional_Inverse4Id1`, `c2`.`OneToMany_Optional_Inverse4Id2`, `c2`.`OneToMany_Optional_Self_Inverse4Id1`, `c2`.`OneToMany_Optional_Self_Inverse4Id2`, `c2`.`OneToMany_Required_Inverse4Id1`, `c2`.`OneToMany_Required_Inverse4Id2`, `c2`.`OneToMany_Required_Self_Inverse4Id1`, `c2`.`OneToMany_Required_Self_Inverse4Id2`, `c2`.`OneToOne_Optional_PK_Inverse4Id1`, `c2`.`OneToOne_Optional_PK_Inverse4Id2`, `c2`.`OneToOne_Optional_Self4Id1`, `c2`.`OneToOne_Optional_Self4Id2`, `c`.`Id1`, `c`.`Id2`, `c0`.`Id1`, `c0`.`Id2`, `c1`.`Id1`, `c1`.`Id2` +INNER JOIN `CompositeTwos` AS `c124` ON `c`.`Id1` = `c124`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `c124`.`OneToMany_Required_Inverse2Id2`) +LEFT JOIN `CompositeThrees` AS `c137` ON `c124`.`Id1` = `c137`.`OneToMany_Optional_Inverse3Id1` AND `c124`.`Id2` = `c137`.`OneToMany_Optional_Inverse3Id2`) +LEFT JOIN `CompositeFours` AS `c140` ON `c137`.`Id1` = `c140`.`OneToMany_Required_Inverse4Id1` AND `c137`.`Id2` = `c140`.`OneToMany_Required_Inverse4Id2` +WHERE `c124`.`Id1` IS NOT NULL AND `c137`.`OneToMany_Optional_Inverse3Id1` IS NOT NULL AND `c124`.`Id2` IS NOT NULL AND `c137`.`OneToMany_Optional_Inverse3Id2` IS NOT NULL AND `c137`.`Id1` IS NOT NULL AND `c140`.`OneToMany_Required_Inverse4Id1` IS NOT NULL AND `c137`.`Id2` IS NOT NULL AND `c140`.`OneToMany_Required_Inverse4Id2` IS NOT NULL +ORDER BY `c`.`Name`, `c`.`Id1`, `c`.`Id2`, IIF(LEN(`c124`.`Name`) IS NULL, NULL, CLNG(LEN(`c124`.`Name`))), `c124`.`Id1`, `c124`.`Id2`, `c137`.`Id1`, `c137`.`Id2` +""", + // + """ +SELECT `c142`.`Id1`, `c142`.`Id2`, `c142`.`Level3_Optional_Id1`, `c142`.`Level3_Optional_Id2`, `c142`.`Level3_Required_Id1`, `c142`.`Level3_Required_Id2`, `c142`.`Name`, `c142`.`OneToMany_Optional_Inverse4Id1`, `c142`.`OneToMany_Optional_Inverse4Id2`, `c142`.`OneToMany_Optional_Self_Inverse4Id1`, `c142`.`OneToMany_Optional_Self_Inverse4Id2`, `c142`.`OneToMany_Required_Inverse4Id1`, `c142`.`OneToMany_Required_Inverse4Id2`, `c142`.`OneToMany_Required_Self_Inverse4Id1`, `c142`.`OneToMany_Required_Self_Inverse4Id2`, `c142`.`OneToOne_Optional_PK_Inverse4Id1`, `c142`.`OneToOne_Optional_PK_Inverse4Id2`, `c142`.`OneToOne_Optional_Self4Id1`, `c142`.`OneToOne_Optional_Self4Id2`, `c`.`Id1`, `c`.`Id2`, `c124`.`Id1`, `c124`.`Id2`, `c137`.`Id1`, `c137`.`Id2` FROM ((`CompositeOnes` AS `c` -INNER JOIN `CompositeTwos` AS `c0` ON `c`.`Id1` = `c0`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `c0`.`OneToMany_Required_Inverse2Id2`) -LEFT JOIN `CompositeThrees` AS `c1` ON `c0`.`Id1` = `c1`.`OneToMany_Optional_Inverse3Id1` AND `c0`.`Id2` = `c1`.`OneToMany_Optional_Inverse3Id2`) -LEFT JOIN `CompositeFours` AS `c2` ON `c1`.`Id1` = `c2`.`OneToMany_Optional_Inverse4Id1` AND `c1`.`Id2` = `c2`.`OneToMany_Optional_Inverse4Id2` -WHERE `c0`.`Id1` IS NOT NULL AND `c1`.`OneToMany_Optional_Inverse3Id1` IS NOT NULL AND `c0`.`Id2` IS NOT NULL AND `c1`.`OneToMany_Optional_Inverse3Id2` IS NOT NULL AND `c1`.`Id1` IS NOT NULL AND `c2`.`OneToMany_Optional_Inverse4Id1` IS NOT NULL AND `c1`.`Id2` IS NOT NULL AND `c2`.`OneToMany_Optional_Inverse4Id2` IS NOT NULL -ORDER BY `c`.`Name`, `c`.`Id1`, `c`.`Id2`, IIF(LEN(`c0`.`Name`) IS NULL, NULL, CLNG(LEN(`c0`.`Name`))), `c0`.`Id1`, `c0`.`Id2`, `c1`.`Id1`, `c1`.`Id2` -""", - // - """ -SELECT `c1`.`Name`, `c`.`Id1`, `c`.`Id2`, `c0`.`Id1`, `c0`.`Id2`, `c1`.`Id1`, `c1`.`Id2` +INNER JOIN `CompositeTwos` AS `c124` ON `c`.`Id1` = `c124`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `c124`.`OneToMany_Required_Inverse2Id2`) +LEFT JOIN `CompositeThrees` AS `c137` ON `c124`.`Id1` = `c137`.`OneToMany_Optional_Inverse3Id1` AND `c124`.`Id2` = `c137`.`OneToMany_Optional_Inverse3Id2`) +LEFT JOIN `CompositeFours` AS `c142` ON `c137`.`Id1` = `c142`.`OneToMany_Optional_Inverse4Id1` AND `c137`.`Id2` = `c142`.`OneToMany_Optional_Inverse4Id2` +WHERE `c124`.`Id1` IS NOT NULL AND `c137`.`OneToMany_Optional_Inverse3Id1` IS NOT NULL AND `c124`.`Id2` IS NOT NULL AND `c137`.`OneToMany_Optional_Inverse3Id2` IS NOT NULL AND `c137`.`Id1` IS NOT NULL AND `c142`.`OneToMany_Optional_Inverse4Id1` IS NOT NULL AND `c137`.`Id2` IS NOT NULL AND `c142`.`OneToMany_Optional_Inverse4Id2` IS NOT NULL +ORDER BY `c`.`Name`, `c`.`Id1`, `c`.`Id2`, IIF(LEN(`c124`.`Name`) IS NULL, NULL, CLNG(LEN(`c124`.`Name`))), `c124`.`Id1`, `c124`.`Id2`, `c137`.`Id1`, `c137`.`Id2` +""", + // + """ +SELECT `c149`.`Name`, `c`.`Id1`, `c`.`Id2`, `c124`.`Id1`, `c124`.`Id2`, `c149`.`Id1`, `c149`.`Id2` FROM (`CompositeOnes` AS `c` -INNER JOIN `CompositeTwos` AS `c0` ON `c`.`Id1` = `c0`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `c0`.`OneToMany_Required_Inverse2Id2`) -LEFT JOIN `CompositeThrees` AS `c1` ON `c0`.`Id1` = `c1`.`OneToMany_Optional_Inverse3Id1` AND `c0`.`Id2` = `c1`.`OneToMany_Optional_Inverse3Id2` -WHERE `c0`.`Id1` IS NOT NULL AND `c1`.`OneToMany_Optional_Inverse3Id1` IS NOT NULL AND `c0`.`Id2` IS NOT NULL AND `c1`.`OneToMany_Optional_Inverse3Id2` IS NOT NULL -ORDER BY `c`.`Name`, `c`.`Id1`, `c`.`Id2`, IIF(LEN(`c0`.`Name`) IS NULL, NULL, CLNG(LEN(`c0`.`Name`))), `c0`.`Id1`, `c0`.`Id2`, `c1`.`Id1`, `c1`.`Id2` -""", - // - """ -SELECT `c2`.`Id1`, `c2`.`Id2`, `c2`.`Level3_Optional_Id1`, `c2`.`Level3_Optional_Id2`, `c2`.`Level3_Required_Id1`, `c2`.`Level3_Required_Id2`, `c2`.`Name`, `c2`.`OneToMany_Optional_Inverse4Id1`, `c2`.`OneToMany_Optional_Inverse4Id2`, `c2`.`OneToMany_Optional_Self_Inverse4Id1`, `c2`.`OneToMany_Optional_Self_Inverse4Id2`, `c2`.`OneToMany_Required_Inverse4Id1`, `c2`.`OneToMany_Required_Inverse4Id2`, `c2`.`OneToMany_Required_Self_Inverse4Id1`, `c2`.`OneToMany_Required_Self_Inverse4Id2`, `c2`.`OneToOne_Optional_PK_Inverse4Id1`, `c2`.`OneToOne_Optional_PK_Inverse4Id2`, `c2`.`OneToOne_Optional_Self4Id1`, `c2`.`OneToOne_Optional_Self4Id2`, `c`.`Id1`, `c`.`Id2`, `c0`.`Id1`, `c0`.`Id2`, `c1`.`Id1`, `c1`.`Id2` +INNER JOIN `CompositeTwos` AS `c124` ON `c`.`Id1` = `c124`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `c124`.`OneToMany_Required_Inverse2Id2`) +LEFT JOIN `CompositeThrees` AS `c149` ON `c124`.`Id1` = `c149`.`OneToMany_Optional_Inverse3Id1` AND `c124`.`Id2` = `c149`.`OneToMany_Optional_Inverse3Id2` +WHERE `c124`.`Id1` IS NOT NULL AND `c149`.`OneToMany_Optional_Inverse3Id1` IS NOT NULL AND `c124`.`Id2` IS NOT NULL AND `c149`.`OneToMany_Optional_Inverse3Id2` IS NOT NULL +ORDER BY `c`.`Name`, `c`.`Id1`, `c`.`Id2`, IIF(LEN(`c124`.`Name`) IS NULL, NULL, CLNG(LEN(`c124`.`Name`))), `c124`.`Id1`, `c124`.`Id2`, `c149`.`Id1`, `c149`.`Id2` +""", + // + """ +SELECT `c152`.`Id1`, `c152`.`Id2`, `c152`.`Level3_Optional_Id1`, `c152`.`Level3_Optional_Id2`, `c152`.`Level3_Required_Id1`, `c152`.`Level3_Required_Id2`, `c152`.`Name`, `c152`.`OneToMany_Optional_Inverse4Id1`, `c152`.`OneToMany_Optional_Inverse4Id2`, `c152`.`OneToMany_Optional_Self_Inverse4Id1`, `c152`.`OneToMany_Optional_Self_Inverse4Id2`, `c152`.`OneToMany_Required_Inverse4Id1`, `c152`.`OneToMany_Required_Inverse4Id2`, `c152`.`OneToMany_Required_Self_Inverse4Id1`, `c152`.`OneToMany_Required_Self_Inverse4Id2`, `c152`.`OneToOne_Optional_PK_Inverse4Id1`, `c152`.`OneToOne_Optional_PK_Inverse4Id2`, `c152`.`OneToOne_Optional_Self4Id1`, `c152`.`OneToOne_Optional_Self4Id2`, `c`.`Id1`, `c`.`Id2`, `c124`.`Id1`, `c124`.`Id2`, `c149`.`Id1`, `c149`.`Id2` FROM ((`CompositeOnes` AS `c` -INNER JOIN `CompositeTwos` AS `c0` ON `c`.`Id1` = `c0`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `c0`.`OneToMany_Required_Inverse2Id2`) -LEFT JOIN `CompositeThrees` AS `c1` ON `c0`.`Id1` = `c1`.`OneToMany_Optional_Inverse3Id1` AND `c0`.`Id2` = `c1`.`OneToMany_Optional_Inverse3Id2`) -LEFT JOIN `CompositeFours` AS `c2` ON `c1`.`Id1` = `c2`.`OneToMany_Optional_Inverse4Id1` AND `c1`.`Id2` = `c2`.`OneToMany_Optional_Inverse4Id2` -WHERE `c0`.`Id1` IS NOT NULL AND `c1`.`OneToMany_Optional_Inverse3Id1` IS NOT NULL AND `c0`.`Id2` IS NOT NULL AND `c1`.`OneToMany_Optional_Inverse3Id2` IS NOT NULL AND `c1`.`Id1` IS NOT NULL AND `c2`.`OneToMany_Optional_Inverse4Id1` IS NOT NULL AND `c1`.`Id2` IS NOT NULL AND `c2`.`OneToMany_Optional_Inverse4Id2` IS NOT NULL -ORDER BY `c`.`Name`, `c`.`Id1`, `c`.`Id2`, IIF(LEN(`c0`.`Name`) IS NULL, NULL, CLNG(LEN(`c0`.`Name`))), `c0`.`Id1`, `c0`.`Id2`, `c1`.`Id1`, `c1`.`Id2` -""", - // - """ -SELECT `c2`.`Id1`, `c2`.`Id2`, `c2`.`Level3_Optional_Id1`, `c2`.`Level3_Optional_Id2`, `c2`.`Level3_Required_Id1`, `c2`.`Level3_Required_Id2`, `c2`.`Name`, `c2`.`OneToMany_Optional_Inverse4Id1`, `c2`.`OneToMany_Optional_Inverse4Id2`, `c2`.`OneToMany_Optional_Self_Inverse4Id1`, `c2`.`OneToMany_Optional_Self_Inverse4Id2`, `c2`.`OneToMany_Required_Inverse4Id1`, `c2`.`OneToMany_Required_Inverse4Id2`, `c2`.`OneToMany_Required_Self_Inverse4Id1`, `c2`.`OneToMany_Required_Self_Inverse4Id2`, `c2`.`OneToOne_Optional_PK_Inverse4Id1`, `c2`.`OneToOne_Optional_PK_Inverse4Id2`, `c2`.`OneToOne_Optional_Self4Id1`, `c2`.`OneToOne_Optional_Self4Id2`, `c`.`Id1`, `c`.`Id2`, `c0`.`Id1`, `c0`.`Id2`, `c1`.`Id1`, `c1`.`Id2` +INNER JOIN `CompositeTwos` AS `c124` ON `c`.`Id1` = `c124`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `c124`.`OneToMany_Required_Inverse2Id2`) +LEFT JOIN `CompositeThrees` AS `c149` ON `c124`.`Id1` = `c149`.`OneToMany_Optional_Inverse3Id1` AND `c124`.`Id2` = `c149`.`OneToMany_Optional_Inverse3Id2`) +LEFT JOIN `CompositeFours` AS `c152` ON `c149`.`Id1` = `c152`.`OneToMany_Optional_Inverse4Id1` AND `c149`.`Id2` = `c152`.`OneToMany_Optional_Inverse4Id2` +WHERE `c124`.`Id1` IS NOT NULL AND `c149`.`OneToMany_Optional_Inverse3Id1` IS NOT NULL AND `c124`.`Id2` IS NOT NULL AND `c149`.`OneToMany_Optional_Inverse3Id2` IS NOT NULL AND `c149`.`Id1` IS NOT NULL AND `c152`.`OneToMany_Optional_Inverse4Id1` IS NOT NULL AND `c149`.`Id2` IS NOT NULL AND `c152`.`OneToMany_Optional_Inverse4Id2` IS NOT NULL +ORDER BY `c`.`Name`, `c`.`Id1`, `c`.`Id2`, IIF(LEN(`c124`.`Name`) IS NULL, NULL, CLNG(LEN(`c124`.`Name`))), `c124`.`Id1`, `c124`.`Id2`, `c149`.`Id1`, `c149`.`Id2` +""", + // + """ +SELECT `c154`.`Id1`, `c154`.`Id2`, `c154`.`Level3_Optional_Id1`, `c154`.`Level3_Optional_Id2`, `c154`.`Level3_Required_Id1`, `c154`.`Level3_Required_Id2`, `c154`.`Name`, `c154`.`OneToMany_Optional_Inverse4Id1`, `c154`.`OneToMany_Optional_Inverse4Id2`, `c154`.`OneToMany_Optional_Self_Inverse4Id1`, `c154`.`OneToMany_Optional_Self_Inverse4Id2`, `c154`.`OneToMany_Required_Inverse4Id1`, `c154`.`OneToMany_Required_Inverse4Id2`, `c154`.`OneToMany_Required_Self_Inverse4Id1`, `c154`.`OneToMany_Required_Self_Inverse4Id2`, `c154`.`OneToOne_Optional_PK_Inverse4Id1`, `c154`.`OneToOne_Optional_PK_Inverse4Id2`, `c154`.`OneToOne_Optional_Self4Id1`, `c154`.`OneToOne_Optional_Self4Id2`, `c`.`Id1`, `c`.`Id2`, `c124`.`Id1`, `c124`.`Id2`, `c149`.`Id1`, `c149`.`Id2` FROM ((`CompositeOnes` AS `c` -INNER JOIN `CompositeTwos` AS `c0` ON `c`.`Id1` = `c0`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `c0`.`OneToMany_Required_Inverse2Id2`) -LEFT JOIN `CompositeThrees` AS `c1` ON `c0`.`Id1` = `c1`.`OneToMany_Optional_Inverse3Id1` AND `c0`.`Id2` = `c1`.`OneToMany_Optional_Inverse3Id2`) -LEFT JOIN `CompositeFours` AS `c2` ON `c1`.`Id1` = `c2`.`OneToMany_Required_Inverse4Id1` AND `c1`.`Id2` = `c2`.`OneToMany_Required_Inverse4Id2` -WHERE `c0`.`Id1` IS NOT NULL AND `c1`.`OneToMany_Optional_Inverse3Id1` IS NOT NULL AND `c0`.`Id2` IS NOT NULL AND `c1`.`OneToMany_Optional_Inverse3Id2` IS NOT NULL AND `c1`.`Id1` IS NOT NULL AND `c2`.`OneToMany_Required_Inverse4Id1` IS NOT NULL AND `c1`.`Id2` IS NOT NULL AND `c2`.`OneToMany_Required_Inverse4Id2` IS NOT NULL -ORDER BY `c`.`Name`, `c`.`Id1`, `c`.`Id2`, IIF(LEN(`c0`.`Name`) IS NULL, NULL, CLNG(LEN(`c0`.`Name`))), `c0`.`Id1`, `c0`.`Id2`, `c1`.`Id1`, `c1`.`Id2`, `c2`.`Id1` & (`c2`.`Id2` & '') DESC +INNER JOIN `CompositeTwos` AS `c124` ON `c`.`Id1` = `c124`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `c124`.`OneToMany_Required_Inverse2Id2`) +LEFT JOIN `CompositeThrees` AS `c149` ON `c124`.`Id1` = `c149`.`OneToMany_Optional_Inverse3Id1` AND `c124`.`Id2` = `c149`.`OneToMany_Optional_Inverse3Id2`) +LEFT JOIN `CompositeFours` AS `c154` ON `c149`.`Id1` = `c154`.`OneToMany_Required_Inverse4Id1` AND `c149`.`Id2` = `c154`.`OneToMany_Required_Inverse4Id2` +WHERE `c124`.`Id1` IS NOT NULL AND `c149`.`OneToMany_Optional_Inverse3Id1` IS NOT NULL AND `c124`.`Id2` IS NOT NULL AND `c149`.`OneToMany_Optional_Inverse3Id2` IS NOT NULL AND `c149`.`Id1` IS NOT NULL AND `c154`.`OneToMany_Required_Inverse4Id1` IS NOT NULL AND `c149`.`Id2` IS NOT NULL AND `c154`.`OneToMany_Required_Inverse4Id2` IS NOT NULL +ORDER BY `c`.`Name`, `c`.`Id1`, `c`.`Id2`, IIF(LEN(`c124`.`Name`) IS NULL, NULL, CLNG(LEN(`c124`.`Name`))), `c124`.`Id1`, `c124`.`Id2`, `c149`.`Id1`, `c149`.`Id2`, `c154`.`Id1` & (`c154`.`Id2` & '') DESC """); } @@ -298,23 +295,23 @@ public override async Task Projecting_multiple_collections_same_level_top_level_ await base.Projecting_multiple_collections_same_level_top_level_ordering(async); AssertSql( -""" + """ SELECT `c`.`Name`, `c`.`Id1`, `c`.`Id2` FROM `CompositeOnes` AS `c` ORDER BY `c`.`Id2`, `c`.`Id1` """, // -""" -SELECT `c0`.`Id1`, `c0`.`Id2`, `c0`.`Date`, `c0`.`Level1_Optional_Id1`, `c0`.`Level1_Optional_Id2`, `c0`.`Level1_Required_Id1`, `c0`.`Level1_Required_Id2`, `c0`.`Name`, `c0`.`OneToMany_Optional_Inverse2Id1`, `c0`.`OneToMany_Optional_Inverse2Id2`, `c0`.`OneToMany_Optional_Self_Inverse2Id1`, `c0`.`OneToMany_Optional_Self_Inverse2Id2`, `c0`.`OneToMany_Required_Inverse2Id1`, `c0`.`OneToMany_Required_Inverse2Id2`, `c0`.`OneToMany_Required_Self_Inverse2Id1`, `c0`.`OneToMany_Required_Self_Inverse2Id2`, `c0`.`OneToOne_Optional_PK_Inverse2Id1`, `c0`.`OneToOne_Optional_PK_Inverse2Id2`, `c0`.`OneToOne_Optional_Self2Id1`, `c0`.`OneToOne_Optional_Self2Id2`, `c`.`Id1`, `c`.`Id2` + """ +SELECT `c2`.`Id1`, `c2`.`Id2`, `c2`.`Date`, `c2`.`Level1_Optional_Id1`, `c2`.`Level1_Optional_Id2`, `c2`.`Level1_Required_Id1`, `c2`.`Level1_Required_Id2`, `c2`.`Name`, `c2`.`OneToMany_Optional_Inverse2Id1`, `c2`.`OneToMany_Optional_Inverse2Id2`, `c2`.`OneToMany_Optional_Self_Inverse2Id1`, `c2`.`OneToMany_Optional_Self_Inverse2Id2`, `c2`.`OneToMany_Required_Inverse2Id1`, `c2`.`OneToMany_Required_Inverse2Id2`, `c2`.`OneToMany_Required_Self_Inverse2Id1`, `c2`.`OneToMany_Required_Self_Inverse2Id2`, `c2`.`OneToOne_Optional_PK_Inverse2Id1`, `c2`.`OneToOne_Optional_PK_Inverse2Id2`, `c2`.`OneToOne_Optional_Self2Id1`, `c2`.`OneToOne_Optional_Self2Id2`, `c`.`Id1`, `c`.`Id2` FROM `CompositeOnes` AS `c` -INNER JOIN `CompositeTwos` AS `c0` ON `c`.`Id1` = `c0`.`OneToMany_Optional_Inverse2Id1` AND `c`.`Id2` = `c0`.`OneToMany_Optional_Inverse2Id2` +INNER JOIN `CompositeTwos` AS `c2` ON `c`.`Id1` = `c2`.`OneToMany_Optional_Inverse2Id1` AND `c`.`Id2` = `c2`.`OneToMany_Optional_Inverse2Id2` ORDER BY `c`.`Id2`, `c`.`Id1` """, // -""" -SELECT `c0`.`Id1`, `c0`.`Id2`, `c0`.`Date`, `c0`.`Level1_Optional_Id1`, `c0`.`Level1_Optional_Id2`, `c0`.`Level1_Required_Id1`, `c0`.`Level1_Required_Id2`, `c0`.`Name`, `c0`.`OneToMany_Optional_Inverse2Id1`, `c0`.`OneToMany_Optional_Inverse2Id2`, `c0`.`OneToMany_Optional_Self_Inverse2Id1`, `c0`.`OneToMany_Optional_Self_Inverse2Id2`, `c0`.`OneToMany_Required_Inverse2Id1`, `c0`.`OneToMany_Required_Inverse2Id2`, `c0`.`OneToMany_Required_Self_Inverse2Id1`, `c0`.`OneToMany_Required_Self_Inverse2Id2`, `c0`.`OneToOne_Optional_PK_Inverse2Id1`, `c0`.`OneToOne_Optional_PK_Inverse2Id2`, `c0`.`OneToOne_Optional_Self2Id1`, `c0`.`OneToOne_Optional_Self2Id2`, `c`.`Id1`, `c`.`Id2` + """ +SELECT `c4`.`Id1`, `c4`.`Id2`, `c4`.`Date`, `c4`.`Level1_Optional_Id1`, `c4`.`Level1_Optional_Id2`, `c4`.`Level1_Required_Id1`, `c4`.`Level1_Required_Id2`, `c4`.`Name`, `c4`.`OneToMany_Optional_Inverse2Id1`, `c4`.`OneToMany_Optional_Inverse2Id2`, `c4`.`OneToMany_Optional_Self_Inverse2Id1`, `c4`.`OneToMany_Optional_Self_Inverse2Id2`, `c4`.`OneToMany_Required_Inverse2Id1`, `c4`.`OneToMany_Required_Inverse2Id2`, `c4`.`OneToMany_Required_Self_Inverse2Id1`, `c4`.`OneToMany_Required_Self_Inverse2Id2`, `c4`.`OneToOne_Optional_PK_Inverse2Id1`, `c4`.`OneToOne_Optional_PK_Inverse2Id2`, `c4`.`OneToOne_Optional_Self2Id1`, `c4`.`OneToOne_Optional_Self2Id2`, `c`.`Id1`, `c`.`Id2` FROM `CompositeOnes` AS `c` -INNER JOIN `CompositeTwos` AS `c0` ON `c`.`Id1` = `c0`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `c0`.`OneToMany_Required_Inverse2Id2` +INNER JOIN `CompositeTwos` AS `c4` ON `c`.`Id1` = `c4`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `c4`.`OneToMany_Required_Inverse2Id2` ORDER BY `c`.`Id2`, `c`.`Id1` """); } @@ -324,23 +321,23 @@ public override async Task Projecting_multiple_collections_same_level_top_level_ await base.Projecting_multiple_collections_same_level_top_level_ordering_using_entire_composite_key(async); AssertSql( -""" + """ SELECT `c`.`Name`, `c`.`Id1`, `c`.`Id2` FROM `CompositeOnes` AS `c` ORDER BY `c`.`Id2`, `c`.`Id1` DESC """, // -""" -SELECT `c0`.`Id1`, `c0`.`Id2`, `c0`.`Date`, `c0`.`Level1_Optional_Id1`, `c0`.`Level1_Optional_Id2`, `c0`.`Level1_Required_Id1`, `c0`.`Level1_Required_Id2`, `c0`.`Name`, `c0`.`OneToMany_Optional_Inverse2Id1`, `c0`.`OneToMany_Optional_Inverse2Id2`, `c0`.`OneToMany_Optional_Self_Inverse2Id1`, `c0`.`OneToMany_Optional_Self_Inverse2Id2`, `c0`.`OneToMany_Required_Inverse2Id1`, `c0`.`OneToMany_Required_Inverse2Id2`, `c0`.`OneToMany_Required_Self_Inverse2Id1`, `c0`.`OneToMany_Required_Self_Inverse2Id2`, `c0`.`OneToOne_Optional_PK_Inverse2Id1`, `c0`.`OneToOne_Optional_PK_Inverse2Id2`, `c0`.`OneToOne_Optional_Self2Id1`, `c0`.`OneToOne_Optional_Self2Id2`, `c`.`Id1`, `c`.`Id2` + """ +SELECT `c2`.`Id1`, `c2`.`Id2`, `c2`.`Date`, `c2`.`Level1_Optional_Id1`, `c2`.`Level1_Optional_Id2`, `c2`.`Level1_Required_Id1`, `c2`.`Level1_Required_Id2`, `c2`.`Name`, `c2`.`OneToMany_Optional_Inverse2Id1`, `c2`.`OneToMany_Optional_Inverse2Id2`, `c2`.`OneToMany_Optional_Self_Inverse2Id1`, `c2`.`OneToMany_Optional_Self_Inverse2Id2`, `c2`.`OneToMany_Required_Inverse2Id1`, `c2`.`OneToMany_Required_Inverse2Id2`, `c2`.`OneToMany_Required_Self_Inverse2Id1`, `c2`.`OneToMany_Required_Self_Inverse2Id2`, `c2`.`OneToOne_Optional_PK_Inverse2Id1`, `c2`.`OneToOne_Optional_PK_Inverse2Id2`, `c2`.`OneToOne_Optional_Self2Id1`, `c2`.`OneToOne_Optional_Self2Id2`, `c`.`Id1`, `c`.`Id2` FROM `CompositeOnes` AS `c` -INNER JOIN `CompositeTwos` AS `c0` ON `c`.`Id1` = `c0`.`OneToMany_Optional_Inverse2Id1` AND `c`.`Id2` = `c0`.`OneToMany_Optional_Inverse2Id2` +INNER JOIN `CompositeTwos` AS `c2` ON `c`.`Id1` = `c2`.`OneToMany_Optional_Inverse2Id1` AND `c`.`Id2` = `c2`.`OneToMany_Optional_Inverse2Id2` ORDER BY `c`.`Id2`, `c`.`Id1` DESC """, // -""" -SELECT `c0`.`Id1`, `c0`.`Id2`, `c0`.`Date`, `c0`.`Level1_Optional_Id1`, `c0`.`Level1_Optional_Id2`, `c0`.`Level1_Required_Id1`, `c0`.`Level1_Required_Id2`, `c0`.`Name`, `c0`.`OneToMany_Optional_Inverse2Id1`, `c0`.`OneToMany_Optional_Inverse2Id2`, `c0`.`OneToMany_Optional_Self_Inverse2Id1`, `c0`.`OneToMany_Optional_Self_Inverse2Id2`, `c0`.`OneToMany_Required_Inverse2Id1`, `c0`.`OneToMany_Required_Inverse2Id2`, `c0`.`OneToMany_Required_Self_Inverse2Id1`, `c0`.`OneToMany_Required_Self_Inverse2Id2`, `c0`.`OneToOne_Optional_PK_Inverse2Id1`, `c0`.`OneToOne_Optional_PK_Inverse2Id2`, `c0`.`OneToOne_Optional_Self2Id1`, `c0`.`OneToOne_Optional_Self2Id2`, `c`.`Id1`, `c`.`Id2` + """ +SELECT `c4`.`Id1`, `c4`.`Id2`, `c4`.`Date`, `c4`.`Level1_Optional_Id1`, `c4`.`Level1_Optional_Id2`, `c4`.`Level1_Required_Id1`, `c4`.`Level1_Required_Id2`, `c4`.`Name`, `c4`.`OneToMany_Optional_Inverse2Id1`, `c4`.`OneToMany_Optional_Inverse2Id2`, `c4`.`OneToMany_Optional_Self_Inverse2Id1`, `c4`.`OneToMany_Optional_Self_Inverse2Id2`, `c4`.`OneToMany_Required_Inverse2Id1`, `c4`.`OneToMany_Required_Inverse2Id2`, `c4`.`OneToMany_Required_Self_Inverse2Id1`, `c4`.`OneToMany_Required_Self_Inverse2Id2`, `c4`.`OneToOne_Optional_PK_Inverse2Id1`, `c4`.`OneToOne_Optional_PK_Inverse2Id2`, `c4`.`OneToOne_Optional_Self2Id1`, `c4`.`OneToOne_Optional_Self2Id2`, `c`.`Id1`, `c`.`Id2` FROM `CompositeOnes` AS `c` -INNER JOIN `CompositeTwos` AS `c0` ON `c`.`Id1` = `c0`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `c0`.`OneToMany_Required_Inverse2Id2` +INNER JOIN `CompositeTwos` AS `c4` ON `c`.`Id1` = `c4`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `c4`.`OneToMany_Required_Inverse2Id2` ORDER BY `c`.`Id2`, `c`.`Id1` DESC """); } @@ -350,24 +347,24 @@ public override async Task Projecting_multiple_collections_with_ordering_same_le await base.Projecting_multiple_collections_with_ordering_same_level(async); AssertSql( -""" + """ SELECT `c`.`Name`, `c`.`Id1`, `c`.`Id2` FROM `CompositeOnes` AS `c` ORDER BY `c`.`Id1`, `c`.`Id2` """, // -""" -SELECT `c0`.`Id1`, `c0`.`Id2`, `c0`.`Date`, `c0`.`Level1_Optional_Id1`, `c0`.`Level1_Optional_Id2`, `c0`.`Level1_Required_Id1`, `c0`.`Level1_Required_Id2`, `c0`.`Name`, `c0`.`OneToMany_Optional_Inverse2Id1`, `c0`.`OneToMany_Optional_Inverse2Id2`, `c0`.`OneToMany_Optional_Self_Inverse2Id1`, `c0`.`OneToMany_Optional_Self_Inverse2Id2`, `c0`.`OneToMany_Required_Inverse2Id1`, `c0`.`OneToMany_Required_Inverse2Id2`, `c0`.`OneToMany_Required_Self_Inverse2Id1`, `c0`.`OneToMany_Required_Self_Inverse2Id2`, `c0`.`OneToOne_Optional_PK_Inverse2Id1`, `c0`.`OneToOne_Optional_PK_Inverse2Id2`, `c0`.`OneToOne_Optional_Self2Id1`, `c0`.`OneToOne_Optional_Self2Id2`, `c`.`Id1`, `c`.`Id2` + """ +SELECT `c2`.`Id1`, `c2`.`Id2`, `c2`.`Date`, `c2`.`Level1_Optional_Id1`, `c2`.`Level1_Optional_Id2`, `c2`.`Level1_Required_Id1`, `c2`.`Level1_Required_Id2`, `c2`.`Name`, `c2`.`OneToMany_Optional_Inverse2Id1`, `c2`.`OneToMany_Optional_Inverse2Id2`, `c2`.`OneToMany_Optional_Self_Inverse2Id1`, `c2`.`OneToMany_Optional_Self_Inverse2Id2`, `c2`.`OneToMany_Required_Inverse2Id1`, `c2`.`OneToMany_Required_Inverse2Id2`, `c2`.`OneToMany_Required_Self_Inverse2Id1`, `c2`.`OneToMany_Required_Self_Inverse2Id2`, `c2`.`OneToOne_Optional_PK_Inverse2Id1`, `c2`.`OneToOne_Optional_PK_Inverse2Id2`, `c2`.`OneToOne_Optional_Self2Id1`, `c2`.`OneToOne_Optional_Self2Id2`, `c`.`Id1`, `c`.`Id2` FROM `CompositeOnes` AS `c` -INNER JOIN `CompositeTwos` AS `c0` ON `c`.`Id1` = `c0`.`OneToMany_Optional_Inverse2Id1` AND `c`.`Id2` = `c0`.`OneToMany_Optional_Inverse2Id2` -ORDER BY `c`.`Id1`, `c`.`Id2`, `c0`.`Id2` +INNER JOIN `CompositeTwos` AS `c2` ON `c`.`Id1` = `c2`.`OneToMany_Optional_Inverse2Id1` AND `c`.`Id2` = `c2`.`OneToMany_Optional_Inverse2Id2` +ORDER BY `c`.`Id1`, `c`.`Id2`, `c2`.`Id2` """, // -""" -SELECT `c0`.`Id1`, `c0`.`Id2`, `c0`.`Date`, `c0`.`Level1_Optional_Id1`, `c0`.`Level1_Optional_Id2`, `c0`.`Level1_Required_Id1`, `c0`.`Level1_Required_Id2`, `c0`.`Name`, `c0`.`OneToMany_Optional_Inverse2Id1`, `c0`.`OneToMany_Optional_Inverse2Id2`, `c0`.`OneToMany_Optional_Self_Inverse2Id1`, `c0`.`OneToMany_Optional_Self_Inverse2Id2`, `c0`.`OneToMany_Required_Inverse2Id1`, `c0`.`OneToMany_Required_Inverse2Id2`, `c0`.`OneToMany_Required_Self_Inverse2Id1`, `c0`.`OneToMany_Required_Self_Inverse2Id2`, `c0`.`OneToOne_Optional_PK_Inverse2Id1`, `c0`.`OneToOne_Optional_PK_Inverse2Id2`, `c0`.`OneToOne_Optional_Self2Id1`, `c0`.`OneToOne_Optional_Self2Id2`, `c`.`Id1`, `c`.`Id2` + """ +SELECT `c4`.`Id1`, `c4`.`Id2`, `c4`.`Date`, `c4`.`Level1_Optional_Id1`, `c4`.`Level1_Optional_Id2`, `c4`.`Level1_Required_Id1`, `c4`.`Level1_Required_Id2`, `c4`.`Name`, `c4`.`OneToMany_Optional_Inverse2Id1`, `c4`.`OneToMany_Optional_Inverse2Id2`, `c4`.`OneToMany_Optional_Self_Inverse2Id1`, `c4`.`OneToMany_Optional_Self_Inverse2Id2`, `c4`.`OneToMany_Required_Inverse2Id1`, `c4`.`OneToMany_Required_Inverse2Id2`, `c4`.`OneToMany_Required_Self_Inverse2Id1`, `c4`.`OneToMany_Required_Self_Inverse2Id2`, `c4`.`OneToOne_Optional_PK_Inverse2Id1`, `c4`.`OneToOne_Optional_PK_Inverse2Id2`, `c4`.`OneToOne_Optional_Self2Id1`, `c4`.`OneToOne_Optional_Self2Id2`, `c`.`Id1`, `c`.`Id2` FROM `CompositeOnes` AS `c` -INNER JOIN `CompositeTwos` AS `c0` ON `c`.`Id1` = `c0`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `c0`.`OneToMany_Required_Inverse2Id2` -ORDER BY `c`.`Id1`, `c`.`Id2`, `c0`.`Name` DESC +INNER JOIN `CompositeTwos` AS `c4` ON `c`.`Id1` = `c4`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `c4`.`OneToMany_Required_Inverse2Id2` +ORDER BY `c`.`Id1`, `c`.`Id2`, `c4`.`Name` DESC """); } @@ -376,24 +373,24 @@ public override async Task Projecting_multiple_collections_with_ordering_same_le await base.Projecting_multiple_collections_with_ordering_same_level_top_level_ordering(async); AssertSql( -""" + """ SELECT `c`.`Name`, `c`.`Id1`, `c`.`Id2` FROM `CompositeOnes` AS `c` ORDER BY `c`.`Id2`, `c`.`Id1` """, // -""" -SELECT `c0`.`Id1`, `c0`.`Id2`, `c0`.`Date`, `c0`.`Level1_Optional_Id1`, `c0`.`Level1_Optional_Id2`, `c0`.`Level1_Required_Id1`, `c0`.`Level1_Required_Id2`, `c0`.`Name`, `c0`.`OneToMany_Optional_Inverse2Id1`, `c0`.`OneToMany_Optional_Inverse2Id2`, `c0`.`OneToMany_Optional_Self_Inverse2Id1`, `c0`.`OneToMany_Optional_Self_Inverse2Id2`, `c0`.`OneToMany_Required_Inverse2Id1`, `c0`.`OneToMany_Required_Inverse2Id2`, `c0`.`OneToMany_Required_Self_Inverse2Id1`, `c0`.`OneToMany_Required_Self_Inverse2Id2`, `c0`.`OneToOne_Optional_PK_Inverse2Id1`, `c0`.`OneToOne_Optional_PK_Inverse2Id2`, `c0`.`OneToOne_Optional_Self2Id1`, `c0`.`OneToOne_Optional_Self2Id2`, `c`.`Id1`, `c`.`Id2` + """ +SELECT `c2`.`Id1`, `c2`.`Id2`, `c2`.`Date`, `c2`.`Level1_Optional_Id1`, `c2`.`Level1_Optional_Id2`, `c2`.`Level1_Required_Id1`, `c2`.`Level1_Required_Id2`, `c2`.`Name`, `c2`.`OneToMany_Optional_Inverse2Id1`, `c2`.`OneToMany_Optional_Inverse2Id2`, `c2`.`OneToMany_Optional_Self_Inverse2Id1`, `c2`.`OneToMany_Optional_Self_Inverse2Id2`, `c2`.`OneToMany_Required_Inverse2Id1`, `c2`.`OneToMany_Required_Inverse2Id2`, `c2`.`OneToMany_Required_Self_Inverse2Id1`, `c2`.`OneToMany_Required_Self_Inverse2Id2`, `c2`.`OneToOne_Optional_PK_Inverse2Id1`, `c2`.`OneToOne_Optional_PK_Inverse2Id2`, `c2`.`OneToOne_Optional_Self2Id1`, `c2`.`OneToOne_Optional_Self2Id2`, `c`.`Id1`, `c`.`Id2` FROM `CompositeOnes` AS `c` -INNER JOIN `CompositeTwos` AS `c0` ON `c`.`Id1` = `c0`.`OneToMany_Optional_Inverse2Id1` AND `c`.`Id2` = `c0`.`OneToMany_Optional_Inverse2Id2` -ORDER BY `c`.`Id2`, `c`.`Id1`, `c0`.`Id2` +INNER JOIN `CompositeTwos` AS `c2` ON `c`.`Id1` = `c2`.`OneToMany_Optional_Inverse2Id1` AND `c`.`Id2` = `c2`.`OneToMany_Optional_Inverse2Id2` +ORDER BY `c`.`Id2`, `c`.`Id1`, `c2`.`Id2` """, // -""" -SELECT `c0`.`Id1`, `c0`.`Id2`, `c0`.`Date`, `c0`.`Level1_Optional_Id1`, `c0`.`Level1_Optional_Id2`, `c0`.`Level1_Required_Id1`, `c0`.`Level1_Required_Id2`, `c0`.`Name`, `c0`.`OneToMany_Optional_Inverse2Id1`, `c0`.`OneToMany_Optional_Inverse2Id2`, `c0`.`OneToMany_Optional_Self_Inverse2Id1`, `c0`.`OneToMany_Optional_Self_Inverse2Id2`, `c0`.`OneToMany_Required_Inverse2Id1`, `c0`.`OneToMany_Required_Inverse2Id2`, `c0`.`OneToMany_Required_Self_Inverse2Id1`, `c0`.`OneToMany_Required_Self_Inverse2Id2`, `c0`.`OneToOne_Optional_PK_Inverse2Id1`, `c0`.`OneToOne_Optional_PK_Inverse2Id2`, `c0`.`OneToOne_Optional_Self2Id1`, `c0`.`OneToOne_Optional_Self2Id2`, `c`.`Id1`, `c`.`Id2` + """ +SELECT `c4`.`Id1`, `c4`.`Id2`, `c4`.`Date`, `c4`.`Level1_Optional_Id1`, `c4`.`Level1_Optional_Id2`, `c4`.`Level1_Required_Id1`, `c4`.`Level1_Required_Id2`, `c4`.`Name`, `c4`.`OneToMany_Optional_Inverse2Id1`, `c4`.`OneToMany_Optional_Inverse2Id2`, `c4`.`OneToMany_Optional_Self_Inverse2Id1`, `c4`.`OneToMany_Optional_Self_Inverse2Id2`, `c4`.`OneToMany_Required_Inverse2Id1`, `c4`.`OneToMany_Required_Inverse2Id2`, `c4`.`OneToMany_Required_Self_Inverse2Id1`, `c4`.`OneToMany_Required_Self_Inverse2Id2`, `c4`.`OneToOne_Optional_PK_Inverse2Id1`, `c4`.`OneToOne_Optional_PK_Inverse2Id2`, `c4`.`OneToOne_Optional_Self2Id1`, `c4`.`OneToOne_Optional_Self2Id2`, `c`.`Id1`, `c`.`Id2` FROM `CompositeOnes` AS `c` -INNER JOIN `CompositeTwos` AS `c0` ON `c`.`Id1` = `c0`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `c0`.`OneToMany_Required_Inverse2Id2` -ORDER BY `c`.`Id2`, `c`.`Id1`, `c0`.`Name` DESC +INNER JOIN `CompositeTwos` AS `c4` ON `c`.`Id1` = `c4`.`OneToMany_Required_Inverse2Id1` AND `c`.`Id2` = `c4`.`OneToMany_Required_Inverse2Id2` +ORDER BY `c`.`Id2`, `c`.`Id1`, `c4`.`Name` DESC """); } diff --git a/test/EFCore.Jet.FunctionalTests/Query/DbFunctionsJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/DbFunctionsJetTest.cs index d84f815a..f2de5d5f 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/DbFunctionsJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/DbFunctionsJetTest.cs @@ -7,11 +7,13 @@ using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestModels.Northwind; using Microsoft.EntityFrameworkCore.TestUtilities; using Xunit; using Xunit.Abstractions; using EF = Microsoft.EntityFrameworkCore.EF; +#nullable disable // ReSharper disable InconsistentNaming namespace EntityFrameworkCore.Jet.FunctionalTests.Query { @@ -124,157 +126,354 @@ FROM [Customers] AS [c] """); } - [ConditionalFact] - public virtual void DateDiff_Year() + public override async Task Least(bool async) + { + await base.Least(async); + + AssertSql( + """ +SELECT [o].[OrderID], [o].[ProductID], [o].[Discount], [o].[Quantity], [o].[UnitPrice] +FROM [Order Details] AS [o] +WHERE LEAST([o].[OrderID], 10251) = 10251 +"""); + } + + public override async Task Greatest(bool async) + { + await base.Greatest(async); + + AssertSql( + """ +SELECT [o].[OrderID], [o].[ProductID], [o].[Discount], [o].[Quantity], [o].[UnitPrice] +FROM [Order Details] AS [o] +WHERE GREATEST([o].[OrderID], 10251) = 10251 +"""); + } + + public override async Task Least_with_nullable_value_type(bool async) + { + await base.Least_with_nullable_value_type(async); + + AssertSql( + """ +SELECT [o].[OrderID], [o].[ProductID], [o].[Discount], [o].[Quantity], [o].[UnitPrice] +FROM [Order Details] AS [o] +WHERE LEAST([o].[OrderID], 10251) = 10251 +"""); + } + + public override async Task Greatest_with_nullable_value_type(bool async) + { + await base.Greatest_with_nullable_value_type(async); + + AssertSql( + """ +SELECT [o].[OrderID], [o].[ProductID], [o].[Discount], [o].[Quantity], [o].[UnitPrice] +FROM [Order Details] AS [o] +WHERE GREATEST([o].[OrderID], 10251) = 10251 +"""); + } + + public override async Task Least_with_parameter_array_is_not_supported(bool async) { - using (var context = CreateContext()) - { - var count = context.Orders - .Count(c => EF.Functions.DateDiffYear(c.OrderDate, DateTime.Now) == 0); + await base.Least_with_parameter_array_is_not_supported(async); + + AssertSql(); + } - Assert.Equal(0, count); + public override async Task Greatest_with_parameter_array_is_not_supported(bool async) + { + await base.Greatest_with_parameter_array_is_not_supported(async); - AssertSql( - $@"SELECT COUNT(*) + AssertSql(); + } + + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual async Task DateDiff_Year(bool async) + { + await AssertCount( + async, + ss => ss.Set(), + ss => ss.Set(), + c => EF.Functions.DateDiffYear(c.OrderDate, DateTime.Now) == 0, + c => c.OrderDate.Value.Year - DateTime.Now.Year == 0); + + AssertSql( + """ +SELECT COUNT(*) FROM `Orders` AS `o` -WHERE DATEDIFF('yyyy', `o`.`OrderDate`, NOW()) = 0"); - } +WHERE DATEDIFF('yyyy', `o`.`OrderDate`, NOW()) = 0 +"""); } - [ConditionalFact] - public virtual void DateDiff_Month() + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual async Task DateDiff_Month(bool async) { - using (var context = CreateContext()) - { - var count = context.Orders - .Count(c => EF.Functions.DateDiffMonth(c.OrderDate, DateTime.Now) == 0); + var now = DateTime.Now; + await AssertCount( + async, + ss => ss.Set(), + ss => ss.Set(), + c => EF.Functions.DateDiffMonth(c.OrderDate, DateTime.Now) == 0, + c => c.OrderDate.Value.Year * 12 + c.OrderDate.Value.Month - (now.Year * 12 + now.Month) == 0); - Assert.Equal(0, count); - AssertSql( - $@"SELECT COUNT(*) + AssertSql( + """ +SELECT COUNT(*) FROM `Orders` AS `o` -WHERE DATEDIFF('m', `o`.`OrderDate`, NOW()) = 0"); - } +WHERE DATEDIFF('m', `o`.`OrderDate`, NOW()) = 0 +"""); } - [ConditionalFact] - public virtual void DateDiff_Day() + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual async Task DateDiff_Day(bool async) { - using (var context = CreateContext()) - { - var count = context.Orders - .Count(c => EF.Functions.DateDiffDay(c.OrderDate, DateTime.Now) == 0); + await AssertCount( + async, + ss => ss.Set(), + ss => ss.Set(), + c => EF.Functions.DateDiffDay(c.OrderDate, DateTime.Now) == 0, + c => false); - Assert.Equal(0, count); - AssertSql( - $@"SELECT COUNT(*) + AssertSql( + """ +SELECT COUNT(*) FROM `Orders` AS `o` -WHERE DATEDIFF('d', `o`.`OrderDate`, NOW()) = 0"); - } +WHERE DATEDIFF('d', `o`.`OrderDate`, NOW()) = 0 +"""); } - [ConditionalFact] - public virtual void DateDiff_Hour() + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual async Task DateDiff_Hour(bool async) { - using (var context = CreateContext()) - { - var count = context.Orders - .Count(c => EF.Functions.DateDiffHour(c.OrderDate, DateTime.Now) == 0); + await AssertCount( + async, + ss => ss.Set(), + ss => ss.Set(), + c => EF.Functions.DateDiffHour(c.OrderDate, DateTime.Now) == 0, + c => false); - Assert.Equal(0, count); - AssertSql( - $@"SELECT COUNT(*) + AssertSql( + """ +SELECT COUNT(*) FROM `Orders` AS `o` -WHERE DATEDIFF('h', `o`.`OrderDate`, NOW()) = 0"); - } +WHERE DATEDIFF('h', `o`.`OrderDate`, NOW()) = 0 +"""); } - [ConditionalFact] - public virtual void DateDiff_Minute() + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual async Task DateDiff_Minute(bool async) { - using (var context = CreateContext()) - { - var count = context.Orders - .Count(c => EF.Functions.DateDiffMinute(c.OrderDate, DateTime.Now) == 0); + await AssertCount( + async, + ss => ss.Set(), + ss => ss.Set(), + c => EF.Functions.DateDiffMinute(c.OrderDate, DateTime.Now) == 0, + c => false); - Assert.Equal(0, count); - AssertSql( - $@"SELECT COUNT(*) + AssertSql( + """ +SELECT COUNT(*) FROM `Orders` AS `o` -WHERE DATEDIFF('n', `o`.`OrderDate`, NOW()) = 0"); - } +WHERE DATEDIFF('n', `o`.`OrderDate`, NOW()) = 0 +"""); } - [ConditionalFact] - public virtual void DateDiff_Second() + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual async Task DateDiff_Second(bool async) { - using (var context = CreateContext()) - { - var count = context.Orders - .Count(c => EF.Functions.DateDiffSecond(c.OrderDate, DateTime.Now) == 0); + await AssertCount( + async, + ss => ss.Set(), + ss => ss.Set(), + c => EF.Functions.DateDiffSecond(c.OrderDate, DateTime.Now) == 0, + c => false); - Assert.Equal(0, count); - AssertSql( - $@"SELECT COUNT(*) + AssertSql( + """ +SELECT COUNT(*) FROM `Orders` AS `o` -WHERE DATEDIFF('s', `o`.`OrderDate`, NOW()) = 0"); - } +WHERE DATEDIFF('s', `o`.`OrderDate`, NOW()) = 0 +"""); + } + + /*[ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual async Task DateDiff_Millisecond(bool async) + { + await AssertCount( + async, + ss => ss.Set(), + ss => ss.Set(), + c => EF.Functions.DateDiffMillisecond(DateTime.Now, DateTime.Now.AddDays(1)) == 0, + c => false); + + AssertSql( + """ +SELECT COUNT(*) +FROM [Orders] AS [o] +WHERE DATEDIFF(millisecond, GETDATE(), DATEADD(day, CAST(1.0E0 AS int), GETDATE())) = 0 +"""); + } + + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual async Task DateDiff_Microsecond(bool async) + { + await AssertCount( + async, + ss => ss.Set(), + ss => ss.Set(), + c => EF.Functions.DateDiffMicrosecond(DateTime.Now, DateTime.Now.AddSeconds(1)) == 0, + c => false); + + AssertSql( + """ +SELECT COUNT(*) +FROM [Orders] AS [o] +WHERE DATEDIFF(microsecond, GETDATE(), DATEADD(second, CAST(1.0E0 AS int), GETDATE())) = 0 +"""); + } + + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual async Task DateDiff_Nanosecond(bool async) + { + await AssertCount( + async, + ss => ss.Set(), + ss => ss.Set(), + c => EF.Functions.DateDiffNanosecond(DateTime.Now, DateTime.Now.AddSeconds(1)) == 0, + c => false); + + AssertSql( + """ +SELECT COUNT(*) +FROM [Orders] AS [o] +WHERE DATEDIFF(nanosecond, GETDATE(), DATEADD(second, CAST(1.0E0 AS int), GETDATE())) = 0 +"""); } [ConditionalFact] - public virtual void IsDate_not_valid() + public virtual void DateDiff_Week_datetime() { - using (var context = CreateContext()) - { - var actual = context - .Orders - .Where(c => !EF.Functions.IsDate(c.CustomerID)) - .Select(c => EF.Functions.IsDate(c.CustomerID)) - .FirstOrDefault(); + using var context = CreateContext(); + var count = context.Orders + .Count( + c => EF.Functions.DateDiffWeek( + c.OrderDate, + new DateTime(1998, 5, 6, 0, 0, 0)) + == 5); - Assert.False(actual); + Assert.Equal(16, count); - AssertSql( - $@"SELECT TOP 1 CBOOL(ISDATE(`o`.`CustomerID`)) -FROM `Orders` AS `o` -WHERE CBOOL(ISDATE(`o`.`CustomerID`)) <> TRUE"); - } + AssertSql( + """ +SELECT COUNT(*) +FROM [Orders] AS [o] +WHERE DATEDIFF(week, [o].[OrderDate], '1998-05-06T00:00:00.000') = 5 +"""); } [ConditionalFact] - public virtual void IsDate_valid() + public virtual void DateDiff_Week_datetimeoffset() { - using (var context = CreateContext()) - { - var actual = context - .Orders - .Where(c => EF.Functions.IsDate(c.OrderDate.Value.ToString())) - .Select(c => EF.Functions.IsDate(c.OrderDate.Value.ToString())) - .FirstOrDefault(); + using var context = CreateContext(); + var count = context.Orders + .Count( + c => EF.Functions.DateDiffWeek( + c.OrderDate, + new DateTimeOffset(1998, 5, 6, 0, 0, 0, TimeSpan.Zero)) + == 5); - Assert.True(actual); + Assert.Equal(16, count); - AssertSql( - $@"SELECT TOP 1 CBOOL(ISDATE((`o`.`OrderDate` & ''))) -FROM `Orders` AS `o` -WHERE CBOOL(ISDATE((`o`.`OrderDate` & ''))) = TRUE"); - } + AssertSql( + """ +SELECT COUNT(*) +FROM [Orders] AS [o] +WHERE DATEDIFF(week, CAST([o].[OrderDate] AS datetimeoffset), '1998-05-06T00:00:00.0000000+00:00') = 5 +"""); } [ConditionalFact] - public virtual void IsDate_join_fields() + public virtual void DateDiff_Week_parameters_null() { - using (var context = CreateContext()) - { - var count = context.Orders.Count(c => EF.Functions.IsDate(c.CustomerID + c.OrderID)); + using var context = CreateContext(); + var count = context.Orders + .Count( + c => EF.Functions.DateDiffWeek( + null, + c.OrderDate) + == 5); + + Assert.Equal(0, count); + + AssertSql( + """ +SELECT COUNT(*) +FROM [Orders] AS [o] +WHERE DATEDIFF(week, NULL, [o].[OrderDate]) = 5 +"""); + }*/ - Assert.Equal(0, count); + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual async Task IsDate_not_valid(bool async) + { + await AssertQueryScalar( + async, + ss => ss.Set().Where(o => !EF.Functions.IsDate(o.CustomerID)).Select(o => EF.Functions.IsDate(o.CustomerID)), + ss => ss.Set().Select(c => false)); - AssertSql( - $@"SELECT COUNT(*) + AssertSql( + """ +SELECT CBOOL(ISDATE(`o`.`CustomerID`)) +FROM `Orders` AS `o` +WHERE CBOOL(ISDATE(`o`.`CustomerID`)) <> TRUE +"""); + } + + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual async Task IsDate_valid(bool async) + { + await AssertQueryScalar( + async, + ss => ss.Set() + .Where(o => EF.Functions.IsDate(o.OrderDate.Value.ToString())) + .Select(o => EF.Functions.IsDate(o.OrderDate.Value.ToString())), + ss => ss.Set().Select(o => true)); + + AssertSql( + """ +SELECT CBOOL(ISDATE(IIF((`o`.`OrderDate` & '') IS NULL, '', (`o`.`OrderDate` & '')))) +FROM `Orders` AS `o` +WHERE CBOOL(ISDATE(IIF((`o`.`OrderDate` & '') IS NULL, '', (`o`.`OrderDate` & '')))) = TRUE +"""); + } + + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual async Task IsDate_join_fields(bool async) + { + await AssertCount( + async, + ss => ss.Set(), + ss => ss.Set(), + c => EF.Functions.IsDate(c.CustomerID + c.OrderID), + c => false); + + AssertSql( + $@"SELECT COUNT(*) FROM `Orders` AS `o` WHERE CBOOL(ISDATE(IIF(`o`.`CustomerID` IS NULL, '', `o`.`CustomerID`) & (`o`.`OrderID` & ''))) = TRUE"); - } } [ConditionalFact] @@ -314,7 +513,10 @@ WHERE Rnd() >= 0.0 private void AssertSql(params string[] expected) => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); - protected override string CaseInsensitiveCollation { get; } - protected override string CaseSensitiveCollation { get; } + protected override string CaseInsensitiveCollation + => ""; + + protected override string CaseSensitiveCollation + => ""; } } diff --git a/test/EFCore.Jet.FunctionalTests/Query/Ef6GroupByJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/Ef6GroupByJetTest.cs index 75e88445..999b4da2 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/Ef6GroupByJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/Ef6GroupByJetTest.cs @@ -166,10 +166,8 @@ public override async Task GroupBy_is_optimized_when_projecting_conditional_expr await base.GroupBy_is_optimized_when_projecting_conditional_expression_containing_group_key(async); AssertSql( -$""" -@__p_0='False' - -SELECT IIF(`a`.`FirstName` IS NULL, 'is null', 'not null') AS `keyIsNull`, CBOOL({AssertSqlHelper.Parameter("@__p_0")}) AS `logicExpression` + """ +SELECT IIF(`a`.`FirstName` IS NULL, 'is null', 'not null') AS `keyIsNull`, FALSE AS `logicExpression` FROM `ArubaOwner` AS `a` GROUP BY `a`.`FirstName` """); @@ -185,10 +183,10 @@ GROUP BY `a`.`FirstName` // ) AS [Distinct1]"; } - public override async Task GroupBy_is_optimized_when_filerting_and_projecting_anonymous_type_with_group_key_and_function_aggregate( + public override async Task GroupBy_is_optimized_when_filtering_and_projecting_anonymous_type_with_group_key_and_function_aggregate( bool async) { - await base.GroupBy_is_optimized_when_filerting_and_projecting_anonymous_type_with_group_key_and_function_aggregate(async); + await base.GroupBy_is_optimized_when_filtering_and_projecting_anonymous_type_with_group_key_and_function_aggregate(async); AssertSql( """ @@ -485,16 +483,15 @@ public override async Task Group_Join_from_LINQ_101(bool async) await base.Group_Join_from_LINQ_101(async); AssertSql( -""" -SELECT [c].[Id], [c].[CompanyName], [c].[Region], [t].[Id], [t].[CustomerId], [t].[OrderDate], [t].[Total], [t].[Id0] -FROM [CustomerForLinq] AS [c] -OUTER APPLY ( - SELECT [o].[Id], [o].[CustomerId], [o].[OrderDate], [o].[Total], [c0].[Id] AS [Id0] - FROM [OrderForLinq] AS [o] - LEFT JOIN [CustomerForLinq] AS [c0] ON [o].[CustomerId] = [c0].[Id] - WHERE [c].[Id] = [c0].[Id] -) AS [t] -ORDER BY [c].[Id], [t].[Id] + """ +SELECT `c`.`Id`, `c`.`CompanyName`, `c`.`Region`, `s`.`Id`, `s`.`CustomerId`, `s`.`OrderDate`, `s`.`Total`, `s`.`Id0` +FROM `CustomerForLinq` AS `c` +LEFT JOIN ( + SELECT `o`.`Id`, `o`.`CustomerId`, `o`.`OrderDate`, `o`.`Total`, `c0`.`Id` AS `Id0` + FROM `OrderForLinq` AS `o` + LEFT JOIN `CustomerForLinq` AS `c0` ON `o`.`CustomerId` = `c0`.`Id` +) AS `s` ON `c`.`Id` = `s`.`Id0` +ORDER BY `c`.`Id`, `s`.`Id` """); } @@ -524,16 +521,16 @@ public override async Task Whats_new_2021_sample_5(bool async) AssertSql( """ -SELECT `t`.`c` +SELECT `p2`.`c` FROM ( SELECT ( - SELECT TOP 1 `p1`.`LastName` - FROM `Person` AS `p1` - WHERE `p`.`FirstName` = `p1`.`FirstName` OR (`p`.`FirstName` IS NULL AND `p1`.`FirstName` IS NULL)) AS `c`, `p`.`FirstName` + SELECT TOP 1 `p0`.`LastName` + FROM `Person` AS `p0` + WHERE `p`.`FirstName` = `p0`.`FirstName` OR (`p`.`FirstName` IS NULL AND `p0`.`FirstName` IS NULL)) AS `c`, `p`.`FirstName` FROM `Person` AS `p` GROUP BY `p`.`FirstName` -) AS `t` -ORDER BY `t`.`c` +) AS `p2` +ORDER BY `p2`.`c` """); } @@ -543,17 +540,17 @@ public override async Task Whats_new_2021_sample_6(bool async) AssertSql( """ -SELECT `t`.`c` +SELECT `p2`.`c` FROM ( SELECT ( - SELECT TOP 1 `p1`.`MiddleInitial` - FROM `Person` AS `p1` - WHERE `p1`.`Age` = 20 AND `p`.`Id` = `p1`.`Id`) AS `c`, `p`.`Id` + SELECT TOP 1 `p0`.`MiddleInitial` + FROM `Person` AS `p0` + WHERE `p0`.`Age` = 20 AND `p`.`Id` = `p0`.`Id`) AS `c`, `p`.`Id` FROM `Person` AS `p` WHERE `p`.`Age` = 20 GROUP BY `p`.`Id` -) AS `t` -ORDER BY `t`.`c` +) AS `p2` +ORDER BY `p2`.`c` """); } @@ -625,14 +622,14 @@ public override async Task Whats_new_2021_sample_8(bool async) await base.Whats_new_2021_sample_8(async); AssertSql( -""" + """ SELECT COUNT(*) FROM ( - SELECT `f`.`Id`, `f`.`Size` + SELECT 1 FROM `Person` AS `p` LEFT JOIN `Feet` AS `f` ON `p`.`Id` = `f`.`Id` GROUP BY `f`.`Id`, `f`.`Size` -) AS `t` +) AS `s` """); } @@ -641,19 +638,19 @@ public override async Task Whats_new_2021_sample_12(bool async) await base.Whats_new_2021_sample_12(async); AssertSql( -""" -SELECT `t`.`FirstName`, `t0`.`Id`, `t0`.`Age`, `t0`.`FirstName`, `t0`.`LastName`, `t0`.`MiddleInitial`, `t0`.`Id0`, `t0`.`Age0`, `t0`.`PersonId`, `t0`.`Style` + """ +SELECT `p1`.`FirstName`, `s0`.`Id`, `s0`.`Age`, `s0`.`FirstName`, `s0`.`LastName`, `s0`.`MiddleInitial`, `s0`.`Id0`, `s0`.`Age0`, `s0`.`PersonId`, `s0`.`Style` FROM ( SELECT `p`.`FirstName` FROM `Person` AS `p` GROUP BY `p`.`FirstName` -) AS `t` +) AS `p1` LEFT JOIN ( SELECT `p0`.`Id`, `p0`.`Age`, `p0`.`FirstName`, `p0`.`LastName`, `p0`.`MiddleInitial`, `s`.`Id` AS `Id0`, `s`.`Age` AS `Age0`, `s`.`PersonId`, `s`.`Style` FROM `Person` AS `p0` LEFT JOIN `Shoes` AS `s` ON `p0`.`Id` = `s`.`PersonId` -) AS `t0` ON `t`.`FirstName` = `t0`.`FirstName` -ORDER BY `t`.`FirstName`, `t0`.`Id` +) AS `s0` ON `p1`.`FirstName` = `s0`.`FirstName` +ORDER BY `p1`.`FirstName`, `s0`.`Id` """); } @@ -662,20 +659,20 @@ public override async Task Whats_new_2021_sample_10(bool async) await base.Whats_new_2021_sample_10(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`Age`, `t`.`Style`, `t0`.`Id`, `t0`.`Style`, `t0`.`Age`, `t0`.`Id0` + """ +SELECT `s1`.`Id`, `s1`.`Age`, `s1`.`Style`, `s2`.`Id`, `s2`.`Style`, `s2`.`Age`, `s2`.`Id0` FROM ( SELECT `p`.`Id`, `s`.`Age`, `s`.`Style` FROM `Person` AS `p` INNER JOIN `Shoes` AS `s` ON `p`.`Age` = `s`.`Age` GROUP BY `p`.`Id`, `s`.`Style`, `s`.`Age` -) AS `t` +) AS `s1` LEFT JOIN ( SELECT `s0`.`Id`, `s0`.`Style`, `s0`.`Age`, `p0`.`Id` AS `Id0` FROM `Person` AS `p0` INNER JOIN `Shoes` AS `s0` ON `p0`.`Age` = `s0`.`Age` -) AS `t0` ON `t`.`Id` = `t0`.`Id0` AND (`t`.`Style` = `t0`.`Style` OR (`t`.`Style` IS NULL AND `t0`.`Style` IS NULL)) AND `t`.`Age` = `t0`.`Age` -ORDER BY `t`.`Id`, `t`.`Style`, `t`.`Age`, `t0`.`Id0` +) AS `s2` ON `s1`.`Id` = `s2`.`Id0` AND (`s1`.`Style` = `s2`.`Style` OR (`s1`.`Style` IS NULL AND `s2`.`Style` IS NULL)) AND `s1`.`Age` = `s2`.`Age` +ORDER BY `s1`.`Id`, `s1`.`Style`, `s1`.`Age`, `s2`.`Id0` """); } @@ -684,15 +681,15 @@ public override async Task Whats_new_2021_sample_13(bool async) await base.Whats_new_2021_sample_13(async); AssertSql( -""" -SELECT `t`.`FirstName`, `t`.`MiddleInitial`, `p0`.`Id`, `p0`.`Age`, `p0`.`FirstName`, `p0`.`LastName`, `p0`.`MiddleInitial` + """ +SELECT `p1`.`FirstName`, `p1`.`MiddleInitial`, `p0`.`Id`, `p0`.`Age`, `p0`.`FirstName`, `p0`.`LastName`, `p0`.`MiddleInitial` FROM ( SELECT `p`.`FirstName`, `p`.`MiddleInitial` FROM `Person` AS `p` GROUP BY `p`.`FirstName`, `p`.`MiddleInitial` -) AS `t` -LEFT JOIN `Person` AS `p0` ON (`t`.`FirstName` = `p0`.`FirstName` OR (`t`.`FirstName` IS NULL AND `p0`.`FirstName` IS NULL)) AND (`t`.`MiddleInitial` = `p0`.`MiddleInitial` OR (`t`.`MiddleInitial` IS NULL AND `p0`.`MiddleInitial` IS NULL)) -ORDER BY `t`.`FirstName`, `t`.`MiddleInitial`, `p0`.`Id` +) AS `p1` +LEFT JOIN `Person` AS `p0` ON (`p1`.`FirstName` = `p0`.`FirstName` OR (`p1`.`FirstName` IS NULL AND `p0`.`FirstName` IS NULL)) AND (`p1`.`MiddleInitial` = `p0`.`MiddleInitial` OR (`p1`.`MiddleInitial` IS NULL AND `p0`.`MiddleInitial` IS NULL)) +ORDER BY `p1`.`FirstName`, `p1`.`MiddleInitial`, `p0`.`Id` """); } @@ -701,14 +698,14 @@ public override async Task Cross_Join_with_Group_Join_from_LINQ_101(bool async) await base.Cross_Join_with_Group_Join_from_LINQ_101(async); AssertSql( -""" -SELECT `c`.`Id`, `c`.`CompanyName`, `c`.`Region`, `t`.`Id` + """ +SELECT `c`.`Id`, `c`.`CompanyName`, `c`.`Region`, `s`.`Id` FROM `CustomerForLinq` AS `c` INNER JOIN ( SELECT `o`.`Id`, `c0`.`Id` AS `Id0` FROM `OrderForLinq` AS `o` LEFT JOIN `CustomerForLinq` AS `c0` ON `o`.`CustomerId` = `c0`.`Id` -) AS `t` ON `c`.`Id` = `t`.`Id0` +) AS `s` ON `c`.`Id` = `s`.`Id0` """); } @@ -860,16 +857,16 @@ public override async Task Left_Outer_Join_with_Group_Join_from_LINQ_101(bool as await base.Left_Outer_Join_with_Group_Join_from_LINQ_101(async); AssertSql( -""" -SELECT `c`.`Id`, `c`.`CompanyName`, `c`.`Region`, `t`.`Id`, `t`.`Id0`, `o0`.`Id`, `o0`.`CustomerId`, `o0`.`OrderDate`, `o0`.`Total`, IIF(`t`.`Id` IS NULL, -1, `t`.`Id`) + """ +SELECT `c`.`Id`, `c`.`CompanyName`, `c`.`Region`, `s`.`Id`, `s`.`Id0`, `o0`.`Id`, `o0`.`CustomerId`, `o0`.`OrderDate`, `o0`.`Total`, IIF(`s`.`Id` IS NULL, -1, `s`.`Id`) FROM (`CustomerForLinq` AS `c` LEFT JOIN ( SELECT `o`.`Id`, `c0`.`Id` AS `Id0` FROM `OrderForLinq` AS `o` LEFT JOIN `CustomerForLinq` AS `c0` ON `o`.`CustomerId` = `c0`.`Id` -) AS `t` ON `c`.`Id` = `t`.`Id0`) +) AS `s` ON `c`.`Id` = `s`.`Id0`) LEFT JOIN `OrderForLinq` AS `o0` ON `c`.`Id` = `o0`.`CustomerId` -ORDER BY `c`.`Id`, `t`.`Id`, `t`.`Id0` +ORDER BY `c`.`Id`, `s`.`Id`, `s`.`Id0` """); } @@ -920,7 +917,7 @@ FROM [Person] AS [p1] private void AssertSql(params string[] expected) => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); - public class Ef6GroupByJetFixture : Ef6GroupByFixtureBase + public class Ef6GroupByJetFixture : Ef6GroupByFixtureBase, ITestSqlLoggerFactory { public TestSqlLoggerFactory TestSqlLoggerFactory => (TestSqlLoggerFactory)ListLoggerFactory; diff --git a/test/EFCore.Jet.FunctionalTests/Query/EntitySplittingQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/EntitySplittingQueryJetTest.cs index b8b9df4c..52c22cb1 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/EntitySplittingQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/EntitySplittingQueryJetTest.cs @@ -62,10 +62,10 @@ public override async Task Can_query_entity_which_is_split_selecting_only_part_2 await base.Can_query_entity_which_is_split_selecting_only_part_2_properties(async); AssertSql( -""" -SELECT `e`.`Id`, `s0`.`IntValue3`, `s0`.`StringValue3` + """ +SELECT `e`.`Id`, `s`.`IntValue3`, `s`.`StringValue3` FROM `EntityOne` AS `e` -INNER JOIN `SplitEntityOnePart2` AS `s0` ON `e`.`Id` = `s0`.`Id` +INNER JOIN `SplitEntityOnePart2` AS `s` ON `e`.`Id` = `s`.`Id` """); } @@ -86,15 +86,15 @@ public override async Task Include_reference_to_split_entity(bool async) await base.Include_reference_to_split_entity(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`EntityOneId`, `e`.`Name`, `t`.`Id`, `t`.`EntityThreeId`, `t`.`IntValue1`, `t`.`IntValue2`, `t`.`IntValue3`, `t`.`IntValue4`, `t`.`StringValue1`, `t`.`StringValue2`, `t`.`StringValue3`, `t`.`StringValue4` + """ +SELECT `e`.`Id`, `e`.`EntityOneId`, `e`.`Name`, `s1`.`Id`, `s1`.`EntityThreeId`, `s1`.`IntValue1`, `s1`.`IntValue2`, `s1`.`IntValue3`, `s1`.`IntValue4`, `s1`.`StringValue1`, `s1`.`StringValue2`, `s1`.`StringValue3`, `s1`.`StringValue4` FROM `EntityTwo` AS `e` LEFT JOIN ( SELECT `e0`.`Id`, `e0`.`EntityThreeId`, `e0`.`IntValue1`, `e0`.`IntValue2`, `s0`.`IntValue3`, `s`.`IntValue4`, `e0`.`StringValue1`, `e0`.`StringValue2`, `s0`.`StringValue3`, `s`.`StringValue4` FROM (`EntityOne` AS `e0` INNER JOIN `SplitEntityOnePart3` AS `s` ON `e0`.`Id` = `s`.`Id`) INNER JOIN `SplitEntityOnePart2` AS `s0` ON `e0`.`Id` = `s0`.`Id` -) AS `t` ON `e`.`EntityOneId` = `t`.`Id` +) AS `s1` ON `e`.`EntityOneId` = `s1`.`Id` """); } @@ -103,15 +103,15 @@ public override async Task Include_collection_to_split_entity(bool async) await base.Include_collection_to_split_entity(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`Name`, `t`.`Id`, `t`.`EntityThreeId`, `t`.`IntValue1`, `t`.`IntValue2`, `t`.`IntValue3`, `t`.`IntValue4`, `t`.`StringValue1`, `t`.`StringValue2`, `t`.`StringValue3`, `t`.`StringValue4` + """ +SELECT `e`.`Id`, `e`.`Name`, `s1`.`Id`, `s1`.`EntityThreeId`, `s1`.`IntValue1`, `s1`.`IntValue2`, `s1`.`IntValue3`, `s1`.`IntValue4`, `s1`.`StringValue1`, `s1`.`StringValue2`, `s1`.`StringValue3`, `s1`.`StringValue4` FROM `EntityThree` AS `e` LEFT JOIN ( SELECT `e0`.`Id`, `e0`.`EntityThreeId`, `e0`.`IntValue1`, `e0`.`IntValue2`, `s0`.`IntValue3`, `s`.`IntValue4`, `e0`.`StringValue1`, `e0`.`StringValue2`, `s0`.`StringValue3`, `s`.`StringValue4` FROM (`EntityOne` AS `e0` INNER JOIN `SplitEntityOnePart3` AS `s` ON `e0`.`Id` = `s`.`Id`) INNER JOIN `SplitEntityOnePart2` AS `s0` ON `e0`.`Id` = `s0`.`Id` -) AS `t` ON `e`.`Id` = `t`.`EntityThreeId` +) AS `s1` ON `e`.`Id` = `s1`.`EntityThreeId` ORDER BY `e`.`Id` """); } @@ -121,16 +121,16 @@ public override async Task Include_reference_to_split_entity_including_reference await base.Include_reference_to_split_entity_including_reference(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`EntityOneId`, `e`.`Name`, `t`.`Id`, `t`.`EntityThreeId`, `t`.`IntValue1`, `t`.`IntValue2`, `t`.`IntValue3`, `t`.`IntValue4`, `t`.`StringValue1`, `t`.`StringValue2`, `t`.`StringValue3`, `t`.`StringValue4`, `e1`.`Id`, `e1`.`Name` + """ +SELECT `e`.`Id`, `e`.`EntityOneId`, `e`.`Name`, `s1`.`Id`, `s1`.`EntityThreeId`, `s1`.`IntValue1`, `s1`.`IntValue2`, `s1`.`IntValue3`, `s1`.`IntValue4`, `s1`.`StringValue1`, `s1`.`StringValue2`, `s1`.`StringValue3`, `s1`.`StringValue4`, `e1`.`Id`, `e1`.`Name` FROM (`EntityTwo` AS `e` LEFT JOIN ( SELECT `e0`.`Id`, `e0`.`EntityThreeId`, `e0`.`IntValue1`, `e0`.`IntValue2`, `s0`.`IntValue3`, `s`.`IntValue4`, `e0`.`StringValue1`, `e0`.`StringValue2`, `s0`.`StringValue3`, `s`.`StringValue4` FROM (`EntityOne` AS `e0` INNER JOIN `SplitEntityOnePart3` AS `s` ON `e0`.`Id` = `s`.`Id`) INNER JOIN `SplitEntityOnePart2` AS `s0` ON `e0`.`Id` = `s0`.`Id` -) AS `t` ON `e`.`EntityOneId` = `t`.`Id`) -LEFT JOIN `EntityThree` AS `e1` ON `t`.`EntityThreeId` = `e1`.`Id` +) AS `s1` ON `e`.`EntityOneId` = `s1`.`Id`) +LEFT JOIN `EntityThree` AS `e1` ON `s1`.`EntityThreeId` = `e1`.`Id` """); } @@ -139,8 +139,8 @@ public override async Task Include_collection_to_split_entity_including_collecti await base.Include_collection_to_split_entity_including_collection(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`Name`, `t`.`Id`, `t`.`EntityThreeId`, `t`.`IntValue1`, `t`.`IntValue2`, `t`.`IntValue3`, `t`.`IntValue4`, `t`.`StringValue1`, `t`.`StringValue2`, `t`.`StringValue3`, `t`.`StringValue4`, `t`.`Id0`, `t`.`EntityOneId`, `t`.`Name` + """ +SELECT `e`.`Id`, `e`.`Name`, `s1`.`Id`, `s1`.`EntityThreeId`, `s1`.`IntValue1`, `s1`.`IntValue2`, `s1`.`IntValue3`, `s1`.`IntValue4`, `s1`.`StringValue1`, `s1`.`StringValue2`, `s1`.`StringValue3`, `s1`.`StringValue4`, `s1`.`Id0`, `s1`.`EntityOneId`, `s1`.`Name` FROM `EntityThree` AS `e` LEFT JOIN ( SELECT `e0`.`Id`, `e0`.`EntityThreeId`, `e0`.`IntValue1`, `e0`.`IntValue2`, `s0`.`IntValue3`, `s`.`IntValue4`, `e0`.`StringValue1`, `e0`.`StringValue2`, `s0`.`StringValue3`, `s`.`StringValue4`, `e1`.`Id` AS `Id0`, `e1`.`EntityOneId`, `e1`.`Name` @@ -148,8 +148,8 @@ LEFT JOIN ( INNER JOIN `SplitEntityOnePart3` AS `s` ON `e0`.`Id` = `s`.`Id`) INNER JOIN `SplitEntityOnePart2` AS `s0` ON `e0`.`Id` = `s0`.`Id`) LEFT JOIN `EntityTwo` AS `e1` ON `e0`.`Id` = `e1`.`EntityOneId` -) AS `t` ON `e`.`Id` = `t`.`EntityThreeId` -ORDER BY `e`.`Id`, `t`.`Id` +) AS `s1` ON `e`.`Id` = `s1`.`EntityThreeId` +ORDER BY `e`.`Id`, `s1`.`Id` """); } @@ -187,10 +187,10 @@ public override async Task Custom_projection_trim_when_multiple_tables(bool asyn await base.Custom_projection_trim_when_multiple_tables(async); AssertSql( -""" -SELECT `e`.`IntValue1`, `s0`.`IntValue3`, `e0`.`Id`, `e0`.`Name` + """ +SELECT `e`.`IntValue1`, `s`.`IntValue3`, `e0`.`Id`, `e0`.`Name` FROM (`EntityOne` AS `e` -INNER JOIN `SplitEntityOnePart2` AS `s0` ON `e`.`Id` = `s0`.`Id`) +INNER JOIN `SplitEntityOnePart2` AS `s` ON `e`.`Id` = `s`.`Id`) LEFT JOIN `EntityThree` AS `e0` ON `e`.`EntityThreeId` = `e0`.`Id` """); } @@ -438,8 +438,8 @@ public override async Task Tpc_entity_owning_a_split_reference_on_leaf_with_tabl await base.Tpc_entity_owning_a_split_reference_on_leaf_with_table_sharing(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`BaseValue`, `t`.`MiddleValue`, `t`.`SiblingValue`, `t`.`LeafValue`, `t`.`Discriminator`, `l`.`Id`, `l`.`OwnedReference_Id`, `l`.`OwnedReference_OwnedIntValue1`, `l`.`OwnedReference_OwnedIntValue2`, `o0`.`OwnedIntValue3`, `o`.`OwnedIntValue4`, `l`.`OwnedReference_OwnedStringValue1`, `l`.`OwnedReference_OwnedStringValue2`, `o0`.`OwnedStringValue3`, `o`.`OwnedStringValue4` + """ +SELECT `u`.`Id`, `u`.`BaseValue`, `u`.`MiddleValue`, `u`.`SiblingValue`, `u`.`LeafValue`, `u`.`Discriminator`, `l0`.`Id`, `l0`.`OwnedReference_Id`, `l0`.`OwnedReference_OwnedIntValue1`, `l0`.`OwnedReference_OwnedIntValue2`, `o0`.`OwnedIntValue3`, `o`.`OwnedIntValue4`, `l0`.`OwnedReference_OwnedStringValue1`, `l0`.`OwnedReference_OwnedStringValue2`, `o0`.`OwnedStringValue3`, `o`.`OwnedStringValue4` FROM ((( SELECT `b`.`Id`, `b`.`BaseValue`, CVar(NULL) AS `MiddleValue`, CVar(NULL) AS `SiblingValue`, CVar(NULL) AS `LeafValue`, 'BaseEntity' AS `Discriminator` FROM `BaseEntity` AS `b` @@ -450,12 +450,12 @@ UNION ALL SELECT `s`.`Id`, `s`.`BaseValue`, CVar(NULL) AS `MiddleValue`, `s`.`SiblingValue`, CVar(NULL) AS `LeafValue`, 'SiblingEntity' AS `Discriminator` FROM `SiblingEntity` AS `s` UNION ALL - SELECT `l0`.`Id`, `l0`.`BaseValue`, `l0`.`MiddleValue`, CVar(NULL) AS `SiblingValue`, `l0`.`LeafValue`, 'LeafEntity' AS `Discriminator` - FROM `LeafEntity` AS `l0` -) AS `t` -LEFT JOIN `LeafEntity` AS `l` ON `t`.`Id` = `l`.`Id`) -LEFT JOIN `OwnedReferencePart4` AS `o` ON `l`.`Id` = `o`.`LeafEntityId`) -LEFT JOIN `OwnedReferencePart3` AS `o0` ON `l`.`Id` = `o0`.`LeafEntityId` + SELECT `l`.`Id`, `l`.`BaseValue`, `l`.`MiddleValue`, CVar(NULL) AS `SiblingValue`, `l`.`LeafValue`, 'LeafEntity' AS `Discriminator` + FROM `LeafEntity` AS `l` +) AS `u` +LEFT JOIN `LeafEntity` AS `l0` ON `u`.`Id` = `l0`.`Id`) +LEFT JOIN `OwnedReferencePart4` AS `o` ON `l0`.`Id` = `o`.`LeafEntityId`) +LEFT JOIN `OwnedReferencePart3` AS `o0` ON `l0`.`Id` = `o0`.`LeafEntityId` """); } @@ -567,8 +567,8 @@ public override async Task Tpc_entity_owning_a_split_reference_on_base_without_t await base.Tpc_entity_owning_a_split_reference_on_base_without_table_sharing(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`BaseValue`, `t`.`MiddleValue`, `t`.`SiblingValue`, `t`.`LeafValue`, `t`.`Discriminator`, `o`.`BaseEntityId`, `o`.`Id`, `o`.`OwnedIntValue1`, `o`.`OwnedIntValue2`, `o1`.`OwnedIntValue3`, `o0`.`OwnedIntValue4`, `o`.`OwnedStringValue1`, `o`.`OwnedStringValue2`, `o1`.`OwnedStringValue3`, `o0`.`OwnedStringValue4` + """ +SELECT `u`.`Id`, `u`.`BaseValue`, `u`.`MiddleValue`, `u`.`SiblingValue`, `u`.`LeafValue`, `u`.`Discriminator`, `o`.`BaseEntityId`, `o`.`Id`, `o`.`OwnedIntValue1`, `o`.`OwnedIntValue2`, `o1`.`OwnedIntValue3`, `o0`.`OwnedIntValue4`, `o`.`OwnedStringValue1`, `o`.`OwnedStringValue2`, `o1`.`OwnedStringValue3`, `o0`.`OwnedStringValue4` FROM ((( SELECT `b`.`Id`, `b`.`BaseValue`, CVar(NULL) AS `MiddleValue`, CVar(NULL) AS `SiblingValue`, CVar(NULL) AS `LeafValue`, 'BaseEntity' AS `Discriminator` FROM `BaseEntity` AS `b` @@ -581,8 +581,8 @@ UNION ALL UNION ALL SELECT `l`.`Id`, `l`.`BaseValue`, `l`.`MiddleValue`, CVar(NULL) AS `SiblingValue`, `l`.`LeafValue`, 'LeafEntity' AS `Discriminator` FROM `LeafEntity` AS `l` -) AS `t` -LEFT JOIN `OwnedReferencePart1` AS `o` ON `t`.`Id` = `o`.`BaseEntityId`) +) AS `u` +LEFT JOIN `OwnedReferencePart1` AS `o` ON `u`.`Id` = `o`.`BaseEntityId`) LEFT JOIN `OwnedReferencePart4` AS `o0` ON `o`.`BaseEntityId` = `o0`.`BaseEntityId`) LEFT JOIN `OwnedReferencePart3` AS `o1` ON `o`.`BaseEntityId` = `o1`.`BaseEntityId` """); @@ -609,8 +609,8 @@ public override async Task Tpc_entity_owning_a_split_reference_on_middle_without await base.Tpc_entity_owning_a_split_reference_on_middle_without_table_sharing(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`BaseValue`, `t`.`MiddleValue`, `t`.`SiblingValue`, `t`.`LeafValue`, `t`.`Discriminator`, `o`.`MiddleEntityId`, `o`.`Id`, `o`.`OwnedIntValue1`, `o`.`OwnedIntValue2`, `o1`.`OwnedIntValue3`, `o0`.`OwnedIntValue4`, `o`.`OwnedStringValue1`, `o`.`OwnedStringValue2`, `o1`.`OwnedStringValue3`, `o0`.`OwnedStringValue4` + """ +SELECT `u`.`Id`, `u`.`BaseValue`, `u`.`MiddleValue`, `u`.`SiblingValue`, `u`.`LeafValue`, `u`.`Discriminator`, `o`.`MiddleEntityId`, `o`.`Id`, `o`.`OwnedIntValue1`, `o`.`OwnedIntValue2`, `o1`.`OwnedIntValue3`, `o0`.`OwnedIntValue4`, `o`.`OwnedStringValue1`, `o`.`OwnedStringValue2`, `o1`.`OwnedStringValue3`, `o0`.`OwnedStringValue4` FROM ((( SELECT `b`.`Id`, `b`.`BaseValue`, CVar(NULL) AS `MiddleValue`, CVar(NULL) AS `SiblingValue`, CVar(NULL) AS `LeafValue`, 'BaseEntity' AS `Discriminator` FROM `BaseEntity` AS `b` @@ -623,8 +623,8 @@ UNION ALL UNION ALL SELECT `l`.`Id`, `l`.`BaseValue`, `l`.`MiddleValue`, CVar(NULL) AS `SiblingValue`, `l`.`LeafValue`, 'LeafEntity' AS `Discriminator` FROM `LeafEntity` AS `l` -) AS `t` -LEFT JOIN `OwnedReferencePart1` AS `o` ON `t`.`Id` = `o`.`MiddleEntityId`) +) AS `u` +LEFT JOIN `OwnedReferencePart1` AS `o` ON `u`.`Id` = `o`.`MiddleEntityId`) LEFT JOIN `OwnedReferencePart4` AS `o0` ON `o`.`MiddleEntityId` = `o0`.`MiddleEntityId`) LEFT JOIN `OwnedReferencePart3` AS `o1` ON `o`.`MiddleEntityId` = `o1`.`MiddleEntityId` """); @@ -675,8 +675,8 @@ public override async Task Tpc_entity_owning_a_split_collection_on_base(bool asy await base.Tpc_entity_owning_a_split_collection_on_base(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`BaseValue`, `t`.`MiddleValue`, `t`.`SiblingValue`, `t`.`LeafValue`, `t`.`Discriminator`, `t0`.`BaseEntityId`, `t0`.`Id`, `t0`.`OwnedIntValue1`, `t0`.`OwnedIntValue2`, `t0`.`OwnedIntValue3`, `t0`.`OwnedIntValue4`, `t0`.`OwnedStringValue1`, `t0`.`OwnedStringValue2`, `t0`.`OwnedStringValue3`, `t0`.`OwnedStringValue4` + """ +SELECT `u`.`Id`, `u`.`BaseValue`, `u`.`MiddleValue`, `u`.`SiblingValue`, `u`.`LeafValue`, `u`.`Discriminator`, `s0`.`BaseEntityId`, `s0`.`Id`, `s0`.`OwnedIntValue1`, `s0`.`OwnedIntValue2`, `s0`.`OwnedIntValue3`, `s0`.`OwnedIntValue4`, `s0`.`OwnedStringValue1`, `s0`.`OwnedStringValue2`, `s0`.`OwnedStringValue3`, `s0`.`OwnedStringValue4` FROM ( SELECT `b`.`Id`, `b`.`BaseValue`, CVar(NULL) AS `MiddleValue`, CVar(NULL) AS `SiblingValue`, CVar(NULL) AS `LeafValue`, 'BaseEntity' AS `Discriminator` FROM `BaseEntity` AS `b` @@ -689,14 +689,14 @@ UNION ALL UNION ALL SELECT `l`.`Id`, `l`.`BaseValue`, `l`.`MiddleValue`, CVar(NULL) AS `SiblingValue`, `l`.`LeafValue`, 'LeafEntity' AS `Discriminator` FROM `LeafEntity` AS `l` -) AS `t` +) AS `u` LEFT JOIN ( SELECT `o`.`BaseEntityId`, `o`.`Id`, `o`.`OwnedIntValue1`, `o`.`OwnedIntValue2`, `o1`.`OwnedIntValue3`, `o0`.`OwnedIntValue4`, `o`.`OwnedStringValue1`, `o`.`OwnedStringValue2`, `o1`.`OwnedStringValue3`, `o0`.`OwnedStringValue4` FROM (`OwnedReferencePart1` AS `o` INNER JOIN `OwnedReferencePart4` AS `o0` ON `o`.`BaseEntityId` = `o0`.`BaseEntityId` AND `o`.`Id` = `o0`.`Id`) INNER JOIN `OwnedReferencePart3` AS `o1` ON `o`.`BaseEntityId` = `o1`.`BaseEntityId` AND `o`.`Id` = `o1`.`Id` -) AS `t0` ON `t`.`Id` = `t0`.`BaseEntityId` -ORDER BY `t`.`Id`, `t0`.`BaseEntityId` +) AS `s0` ON `u`.`Id` = `s0`.`BaseEntityId` +ORDER BY `u`.`Id`, `s0`.`BaseEntityId` """); } @@ -721,8 +721,8 @@ public override async Task Tpc_entity_owning_a_split_collection_on_middle(bool a await base.Tpc_entity_owning_a_split_collection_on_middle(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`BaseValue`, `t`.`MiddleValue`, `t`.`SiblingValue`, `t`.`LeafValue`, `t`.`Discriminator`, `t0`.`MiddleEntityId`, `t0`.`Id`, `t0`.`OwnedIntValue1`, `t0`.`OwnedIntValue2`, `t0`.`OwnedIntValue3`, `t0`.`OwnedIntValue4`, `t0`.`OwnedStringValue1`, `t0`.`OwnedStringValue2`, `t0`.`OwnedStringValue3`, `t0`.`OwnedStringValue4` + """ +SELECT `u`.`Id`, `u`.`BaseValue`, `u`.`MiddleValue`, `u`.`SiblingValue`, `u`.`LeafValue`, `u`.`Discriminator`, `s0`.`MiddleEntityId`, `s0`.`Id`, `s0`.`OwnedIntValue1`, `s0`.`OwnedIntValue2`, `s0`.`OwnedIntValue3`, `s0`.`OwnedIntValue4`, `s0`.`OwnedStringValue1`, `s0`.`OwnedStringValue2`, `s0`.`OwnedStringValue3`, `s0`.`OwnedStringValue4` FROM ( SELECT `b`.`Id`, `b`.`BaseValue`, CVar(NULL) AS `MiddleValue`, CVar(NULL) AS `SiblingValue`, CVar(NULL) AS `LeafValue`, 'BaseEntity' AS `Discriminator` FROM `BaseEntity` AS `b` @@ -735,14 +735,14 @@ UNION ALL UNION ALL SELECT `l`.`Id`, `l`.`BaseValue`, `l`.`MiddleValue`, CVar(NULL) AS `SiblingValue`, `l`.`LeafValue`, 'LeafEntity' AS `Discriminator` FROM `LeafEntity` AS `l` -) AS `t` +) AS `u` LEFT JOIN ( SELECT `o`.`MiddleEntityId`, `o`.`Id`, `o`.`OwnedIntValue1`, `o`.`OwnedIntValue2`, `o1`.`OwnedIntValue3`, `o0`.`OwnedIntValue4`, `o`.`OwnedStringValue1`, `o`.`OwnedStringValue2`, `o1`.`OwnedStringValue3`, `o0`.`OwnedStringValue4` FROM (`OwnedReferencePart1` AS `o` INNER JOIN `OwnedReferencePart4` AS `o0` ON `o`.`MiddleEntityId` = `o0`.`MiddleEntityId` AND `o`.`Id` = `o0`.`Id`) INNER JOIN `OwnedReferencePart3` AS `o1` ON `o`.`MiddleEntityId` = `o1`.`MiddleEntityId` AND `o`.`Id` = `o1`.`Id` -) AS `t0` ON `t`.`Id` = `t0`.`MiddleEntityId` -ORDER BY `t`.`Id`, `t0`.`MiddleEntityId` +) AS `s0` ON `u`.`Id` = `s0`.`MiddleEntityId` +ORDER BY `u`.`Id`, `s0`.`MiddleEntityId` """); } diff --git a/test/EFCore.Jet.FunctionalTests/Query/FromSqlQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/FromSqlQueryJetTest.cs index e1c9e3a4..d6da856d 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/FromSqlQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/FromSqlQueryJetTest.cs @@ -20,7 +20,7 @@ using System.Linq; namespace EntityFrameworkCore.Jet.FunctionalTests.Query; - +#nullable disable public class FromSqlQueryJetTest : FromSqlQueryTestBase { public FromSqlQueryJetTest(FromSqlQueryJetTestFixture fixture, ITestOutputHelper testOutputHelper) diff --git a/test/EFCore.Jet.FunctionalTests/Query/FunkyDataQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/FunkyDataQueryJetTest.cs index 4dbb8af5..778ed670 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/FunkyDataQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/FunkyDataQueryJetTest.cs @@ -157,7 +157,7 @@ public override async Task String_contains_on_argument_with_wildcard_column_nega SELECT `f`.`FirstName` AS `fn`, `f0`.`LastName` AS `ln` FROM `FunkyCustomers` AS `f`, `FunkyCustomers` AS `f0` -WHERE NOT (`f`.`FirstName` IS NOT NULL AND `f0`.`LastName` IS NOT NULL AND (INSTR(1, `f`.`FirstName`, `f0`.`LastName`, 1) > 0 OR (`f0`.`LastName` LIKE ''))) +WHERE `f`.`FirstName` IS NULL OR `f0`.`LastName` IS NULL OR (INSTR(1, `f`.`FirstName`, `f0`.`LastName`, 1) <= 0 AND `f0`.`LastName` NOT LIKE '') """); } @@ -561,7 +561,7 @@ protected override void ClearLog() private void AssertSql(params string[] expected) => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); - public class FunkyDataQueryJetFixture : FunkyDataQueryFixtureBase + public class FunkyDataQueryJetFixture : FunkyDataQueryFixtureBase, ITestSqlLoggerFactory { public TestSqlLoggerFactory TestSqlLoggerFactory => (TestSqlLoggerFactory)ListLoggerFactory; diff --git a/test/EFCore.Jet.FunctionalTests/Query/GearsOfWarQueryJetFixture.cs b/test/EFCore.Jet.FunctionalTests/Query/GearsOfWarQueryJetFixture.cs index d90788ec..75fc4975 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/GearsOfWarQueryJetFixture.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/GearsOfWarQueryJetFixture.cs @@ -1,5 +1,7 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +using System; +using System.Threading.Tasks; using EntityFrameworkCore.Jet.FunctionalTests.TestUtilities; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Query; @@ -19,7 +21,7 @@ protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext con modelBuilder.Entity().Property(g => g.Location).HasColumnType("varchar(100)"); } - protected override void Seed(GearsOfWarContext context) + protected override async Task SeedAsync(GearsOfWarContext context) { // 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`"); @@ -41,6 +43,18 @@ protected override void Seed(GearsOfWarContext context) { mission.Timeline = mission.Timeline.AddYears(100); } + if (mission.Date.Year < 100) + { + mission.Date = mission.Date.AddYears(100); + } + } + + foreach (var tag in tags) + { + if (tag.IssueDate.Year < 100) + { + tag.IssueDate = tag.IssueDate.AddYears(100); + } } GearsOfWarData.WireUp( @@ -56,11 +70,11 @@ protected override void Seed(GearsOfWarContext context) context.LocustLeaders.AddRange(locustLeaders); context.Factions.AddRange(factions); context.LocustHighCommands.AddRange(locustHighCommands); - context.SaveChanges(); + await context.SaveChangesAsync(); GearsOfWarData.WireUp2(locustLeaders, factions); - context.SaveChanges(); + await context.SaveChangesAsync(); } public override ISetSource GetExpectedData() @@ -73,7 +87,20 @@ public override ISetSource GetExpectedData() { mission.Timeline = mission.Timeline.AddYears(100); } + if (mission.Date.Year < 100) + { + mission.Date = mission.Date.AddYears(100); + } mission.Timeline = JetTestHelpers.GetExpectedValue(mission.Timeline); + mission.Duration = new TimeSpan(mission.Duration.Days, mission.Duration.Hours, mission.Duration.Minutes, mission.Duration.Seconds); + } + + foreach (var tag in data.Tags) + { + if (tag.IssueDate.Year < 100) + { + tag.IssueDate = tag.IssueDate.AddYears(100); + } } return data; diff --git a/test/EFCore.Jet.FunctionalTests/Query/GearsOfWarQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/GearsOfWarQueryJetTest.cs index 5d7f2ed6..fc4bd6d1 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/GearsOfWarQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/GearsOfWarQueryJetTest.cs @@ -283,15 +283,15 @@ public override async Task Include_with_join_and_inheritance1(bool isAsync) AssertSql( """ -SELECT `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`Discriminator`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `c`.`Name`, `c`.`Location`, `c`.`Nation` +SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, `c`.`Name`, `c`.`Location`, `c`.`Nation` FROM (`Tags` AS `t` INNER JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` FROM `Gears` AS `g` WHERE `g`.`Discriminator` = 'Officer' -) AS `t0` ON `t`.`GearSquadId` = `t0`.`SquadId` AND `t`.`GearNickName` = `t0`.`Nickname`) -LEFT JOIN `Cities` AS `c` ON `t0`.`CityOfBirthName` = `c`.`Name` -WHERE `t0`.`CityOfBirthName` IS NOT NULL AND `c`.`Name` IS NOT NULL +) AS `g0` ON `t`.`GearSquadId` = `g0`.`SquadId` AND `t`.`GearNickName` = `g0`.`Nickname`) +LEFT JOIN `Cities` AS `c` ON `g0`.`CityOfBirthName` = `c`.`Name` +WHERE `g0`.`CityOfBirthName` IS NOT NULL AND `c`.`Name` IS NOT NULL """); } @@ -301,15 +301,15 @@ public override async Task Include_with_join_and_inheritance_with_orderby_before AssertSql( """ -SELECT `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`Discriminator`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t`.`Id`, `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank` +SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, `t`.`Id`, `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`AssignedCityName`, `g1`.`CityOfBirthName`, `g1`.`Discriminator`, `g1`.`FullName`, `g1`.`HasSoulPatch`, `g1`.`LeaderNickname`, `g1`.`LeaderSquadId`, `g1`.`Rank` FROM (`Tags` AS `t` INNER JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` FROM `Gears` AS `g` WHERE `g`.`Discriminator` = 'Officer' -) AS `t0` ON `t`.`GearSquadId` = `t0`.`SquadId` AND `t`.`GearNickName` = `t0`.`Nickname`) -LEFT JOIN `Gears` AS `g0` ON `t0`.`Nickname` = `g0`.`LeaderNickname` AND `t0`.`SquadId` = `g0`.`LeaderSquadId` -ORDER BY NOT (`t0`.`HasSoulPatch`), `t0`.`Nickname` DESC, `t`.`Id`, `t0`.`SquadId`, `g0`.`Nickname` +) AS `g0` ON `t`.`GearSquadId` = `g0`.`SquadId` AND `t`.`GearNickName` = `g0`.`Nickname`) +LEFT JOIN `Gears` AS `g1` ON `g0`.`Nickname` = `g1`.`LeaderNickname` AND `g0`.`SquadId` = `g1`.`LeaderSquadId` +ORDER BY NOT (`g0`.`HasSoulPatch`), `g0`.`Nickname` DESC, `t`.`Id`, `g0`.`SquadId`, `g1`.`Nickname` """); } @@ -334,15 +334,15 @@ public override async Task Include_with_join_and_inheritance3(bool isAsync) AssertSql( """ -SELECT `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`Discriminator`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t`.`Id`, `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank` +SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, `t`.`Id`, `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`AssignedCityName`, `g1`.`CityOfBirthName`, `g1`.`Discriminator`, `g1`.`FullName`, `g1`.`HasSoulPatch`, `g1`.`LeaderNickname`, `g1`.`LeaderSquadId`, `g1`.`Rank` FROM (`Tags` AS `t` INNER JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` FROM `Gears` AS `g` WHERE `g`.`Discriminator` = 'Officer' -) AS `t0` ON `t`.`GearSquadId` = `t0`.`SquadId` AND `t`.`GearNickName` = `t0`.`Nickname`) -LEFT JOIN `Gears` AS `g0` ON `t0`.`Nickname` = `g0`.`LeaderNickname` AND `t0`.`SquadId` = `g0`.`LeaderSquadId` -ORDER BY `t`.`Id`, `t0`.`Nickname`, `t0`.`SquadId`, `g0`.`Nickname` +) AS `g0` ON `t`.`GearSquadId` = `g0`.`SquadId` AND `t`.`GearNickName` = `g0`.`Nickname`) +LEFT JOIN `Gears` AS `g1` ON `g0`.`Nickname` = `g1`.`LeaderNickname` AND `g0`.`SquadId` = `g1`.`LeaderSquadId` +ORDER BY `t`.`Id`, `g0`.`Nickname`, `g0`.`SquadId`, `g1`.`Nickname` """); } @@ -756,6 +756,17 @@ public override async Task Select_inverted_boolean(bool isAsync) """); } + public override async Task Select_inverted_nullable_boolean(bool async) + { + await base.Select_inverted_nullable_boolean(async); + + AssertSql( + """ +SELECT [f].[Id], [f].[Eradicated] ^ CAST(1 AS bit) AS [Alive] +FROM [Factions] AS [f] +"""); + } + public override async Task Select_comparison_with_null(bool isAsync) { await base.Select_comparison_with_null(isAsync); @@ -782,27 +793,27 @@ public override async Task Select_null_parameter(bool isAsync) await base.Select_null_parameter(isAsync); AssertSql( -""" + """ @__ammunitionType_0='1' (Nullable = true) SELECT `w`.`Id`, @__ammunitionType_0 AS `AmmoType` FROM `Weapons` AS `w` """, -// -""" -SELECT `w`.`Id`, NULL AS `AmmoType` + // + """ +SELECT `w`.`Id`, CVar(NULL) AS `AmmoType` FROM `Weapons` AS `w` """, -// -""" + // + """ @__ammunitionType_0='2' (Nullable = true) SELECT `w`.`Id`, @__ammunitionType_0 AS `AmmoType` FROM `Weapons` AS `w` """, -// -""" -SELECT `w`.`Id`, NULL AS `AmmoType` + // + """ +SELECT `w`.`Id`, CVar(NULL) AS `AmmoType` FROM `Weapons` AS `w` """); } @@ -887,10 +898,10 @@ public override async Task Null_propagation_optimization1(bool isAsync) await base.Null_propagation_optimization1(isAsync); AssertSql( -""" + """ SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` FROM `Gears` AS `g` -WHERE `g`.`LeaderNickname` = 'Marcus' AND `g`.`LeaderNickname` IS NOT NULL +WHERE `g`.`LeaderNickname` = 'Marcus' """); } @@ -1060,9 +1071,9 @@ public override async Task Select_null_propagation_negative6(bool isAsync) AssertSql( """ - SELECT IIF(`g`.`LeaderNickname` IS NOT NULL, IIF(IIF(LEN(`g`.`LeaderNickname`) IS NULL, NULL, CLNG(LEN(`g`.`LeaderNickname`))) <> IIF(LEN(`g`.`LeaderNickname`) IS NULL, NULL, CLNG(LEN(`g`.`LeaderNickname`))), TRUE, FALSE), NULL) - FROM `Gears` AS `g` - """); +SELECT IIF(`g`.`LeaderNickname` IS NOT NULL, FALSE, NULL) +FROM `Gears` AS `g` +"""); } public override async Task Select_null_propagation_negative7(bool isAsync) @@ -1095,8 +1106,8 @@ public override async Task Select_null_propagation_negative9(bool async) await base.Select_null_propagation_negative9(async); AssertSql( -""" -SELECT IIF(`g`.`LeaderNickname` IS NOT NULL, IIF(IIF(IIF(LEN(`g`.`Nickname`) IS NULL, NULL, CLNG(LEN(`g`.`Nickname`))) = 5, TRUE, FALSE) IS NULL, FALSE, IIF(IIF(LEN(`g`.`Nickname`) IS NULL, NULL, CLNG(LEN(`g`.`Nickname`))) = 5, TRUE, FALSE)), NULL) + """ +SELECT IIF(`g`.`LeaderNickname` IS NOT NULL, IIF(IIF(LEN(`g`.`Nickname`) IS NULL, NULL, CLNG(LEN(`g`.`Nickname`))) = 5, TRUE, FALSE), NULL) FROM `Gears` AS `g` """); } @@ -1238,15 +1249,15 @@ public override async Task Select_Where_Navigation_Scalar_Equals_Navigation_Scal await base.Select_Where_Navigation_Scalar_Equals_Navigation_Scalar(isAsync); AssertSql( -""" -SELECT `t1`.`Id`, `t1`.`GearNickName`, `t1`.`GearSquadId`, `t1`.`IssueDate`, `t1`.`Note`, `t1`.`Id0`, `t1`.`GearNickName0`, `t1`.`GearSquadId0`, `t1`.`IssueDate0`, `t1`.`Note0` + """ +SELECT `s`.`Id`, `s`.`GearNickName`, `s`.`GearSquadId`, `s`.`IssueDate`, `s`.`Note`, `s`.`Id0`, `s`.`GearNickName0`, `s`.`GearSquadId0`, `s`.`IssueDate0`, `s`.`Note0` FROM (( SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note`, `t0`.`Id` AS `Id0`, `t0`.`GearNickName` AS `GearNickName0`, `t0`.`GearSquadId` AS `GearSquadId0`, `t0`.`IssueDate` AS `IssueDate0`, `t0`.`Note` AS `Note0` FROM `Tags` AS `t`, `Tags` AS `t0` -) AS `t1` -LEFT JOIN `Gears` AS `g` ON `t1`.`GearNickName` = `g`.`Nickname` AND `t1`.`GearSquadId` = `g`.`SquadId`) -LEFT JOIN `Gears` AS `g0` ON `t1`.`GearNickName0` = `g0`.`Nickname` AND `t1`.`GearSquadId0` = `g0`.`SquadId` +) AS `s` +LEFT JOIN `Gears` AS `g` ON `s`.`GearNickName` = `g`.`Nickname` AND `s`.`GearSquadId` = `g`.`SquadId`) +LEFT JOIN `Gears` AS `g0` ON `s`.`GearNickName0` = `g0`.`Nickname` AND `s`.`GearSquadId0` = `g0`.`SquadId` WHERE `g`.`Nickname` = `g0`.`Nickname` OR (`g`.`Nickname` IS NULL AND `g0`.`Nickname` IS NULL) """); } @@ -1282,15 +1293,15 @@ public override async Task Select_Where_Navigation_Equals_Navigation(bool isAsyn await base.Select_Where_Navigation_Equals_Navigation(isAsync); AssertSql( -""" -SELECT `t1`.`Id`, `t1`.`GearNickName`, `t1`.`GearSquadId`, `t1`.`IssueDate`, `t1`.`Note`, `t1`.`Id0`, `t1`.`GearNickName0`, `t1`.`GearSquadId0`, `t1`.`IssueDate0`, `t1`.`Note0` + """ +SELECT `s`.`Id`, `s`.`GearNickName`, `s`.`GearSquadId`, `s`.`IssueDate`, `s`.`Note`, `s`.`Id0`, `s`.`GearNickName0`, `s`.`GearSquadId0`, `s`.`IssueDate0`, `s`.`Note0` FROM (( SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note`, `t0`.`Id` AS `Id0`, `t0`.`GearNickName` AS `GearNickName0`, `t0`.`GearSquadId` AS `GearSquadId0`, `t0`.`IssueDate` AS `IssueDate0`, `t0`.`Note` AS `Note0` FROM `Tags` AS `t`, `Tags` AS `t0` -) AS `t1` -LEFT JOIN `Gears` AS `g` ON `t1`.`GearNickName` = `g`.`Nickname` AND `t1`.`GearSquadId` = `g`.`SquadId`) -LEFT JOIN `Gears` AS `g0` ON `t1`.`GearNickName0` = `g0`.`Nickname` AND `t1`.`GearSquadId0` = `g0`.`SquadId` +) AS `s` +LEFT JOIN `Gears` AS `g` ON `s`.`GearNickName` = `g`.`Nickname` AND `s`.`GearSquadId` = `g`.`SquadId`) +LEFT JOIN `Gears` AS `g0` ON `s`.`GearNickName0` = `g0`.`Nickname` AND `s`.`GearSquadId0` = `g0`.`SquadId` WHERE (`g`.`Nickname` = `g0`.`Nickname` OR (`g`.`Nickname` IS NULL AND `g0`.`Nickname` IS NULL)) AND (`g`.`SquadId` = `g0`.`SquadId` OR (`g`.`SquadId` IS NULL AND `g0`.`SquadId` IS NULL)) """); } @@ -1326,15 +1337,15 @@ public override async Task Select_Where_Navigation_Scalar_Equals_Navigation_Scal await base.Select_Where_Navigation_Scalar_Equals_Navigation_Scalar_Projected(isAsync); AssertSql( -""" -SELECT `t1`.`Id` AS `Id1`, `t1`.`Id0` AS `Id2` + """ +SELECT `s`.`Id` AS `Id1`, `s`.`Id0` AS `Id2` FROM (( SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t0`.`Id` AS `Id0`, `t0`.`GearNickName` AS `GearNickName0`, `t0`.`GearSquadId` AS `GearSquadId0` FROM `Tags` AS `t`, `Tags` AS `t0` -) AS `t1` -LEFT JOIN `Gears` AS `g` ON `t1`.`GearNickName` = `g`.`Nickname` AND `t1`.`GearSquadId` = `g`.`SquadId`) -LEFT JOIN `Gears` AS `g0` ON `t1`.`GearNickName0` = `g0`.`Nickname` AND `t1`.`GearSquadId0` = `g0`.`SquadId` +) AS `s` +LEFT JOIN `Gears` AS `g` ON `s`.`GearNickName` = `g`.`Nickname` AND `s`.`GearSquadId` = `g`.`SquadId`) +LEFT JOIN `Gears` AS `g0` ON `s`.`GearNickName0` = `g0`.`Nickname` AND `s`.`GearSquadId0` = `g0`.`SquadId` WHERE `g`.`Nickname` = `g0`.`Nickname` OR (`g`.`Nickname` IS NULL AND `g0`.`Nickname` IS NULL) """); } @@ -1670,15 +1681,15 @@ public override async Task Concat_with_count(bool isAsync) AssertSql( """ - SELECT COUNT(*) - FROM ( - SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` - FROM `Gears` AS `g` - UNION ALL - SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank` - FROM `Gears` AS `g0` - ) AS `t` - """); +SELECT COUNT(*) +FROM ( + SELECT 1 + FROM `Gears` AS `g` + UNION ALL + SELECT 1 + FROM `Gears` AS `g0` +) AS `u` +"""); } public override async Task Concat_scalars_with_count(bool isAsync) @@ -1687,15 +1698,15 @@ public override async Task Concat_scalars_with_count(bool isAsync) AssertSql( """ - SELECT COUNT(*) - FROM ( - SELECT `g`.`Nickname` - FROM `Gears` AS `g` - UNION ALL - SELECT `g0`.`FullName` AS `Nickname` - FROM `Gears` AS `g0` - ) AS `t` - """); +SELECT COUNT(*) +FROM ( + SELECT 1 + FROM `Gears` AS `g` + UNION ALL + SELECT 1 + FROM `Gears` AS `g0` +) AS `u` +"""); } public override async Task Concat_anonymous_with_count(bool isAsync) @@ -1704,15 +1715,15 @@ public override async Task Concat_anonymous_with_count(bool isAsync) AssertSql( """ - SELECT COUNT(*) - FROM ( - SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `g`.`Nickname` AS `Name` - FROM `Gears` AS `g` - UNION ALL - SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, `g0`.`FullName` AS `Name` - FROM `Gears` AS `g0` - ) AS `t` - """); +SELECT COUNT(*) +FROM ( + SELECT 1 + FROM `Gears` AS `g` + UNION ALL + SELECT 1 + FROM `Gears` AS `g0` +) AS `u` +"""); } public override async Task Concat_with_scalar_projection(bool async) @@ -1843,14 +1854,14 @@ public override async Task Join_navigation_translated_to_subquery_composite_key( AssertSql( """ - SELECT `g`.`FullName`, `t0`.`Note` - FROM `Gears` AS `g` - INNER JOIN ( - SELECT `t`.`Note`, `g0`.`FullName` - FROM `Tags` AS `t` - LEFT JOIN `Gears` AS `g0` ON `t`.`GearNickName` = `g0`.`Nickname` AND `t`.`GearSquadId` = `g0`.`SquadId` - ) AS `t0` ON `g`.`FullName` = `t0`.`FullName` - """); +SELECT `g`.`FullName`, `s`.`Note` +FROM `Gears` AS `g` +INNER JOIN ( + SELECT `t`.`Note`, `g0`.`FullName` + FROM `Tags` AS `t` + LEFT JOIN `Gears` AS `g0` ON `t`.`GearNickName` = `g0`.`Nickname` AND `t`.`GearSquadId` = `g0`.`SquadId` +) AS `s` ON `g`.`FullName` = `s`.`FullName` +"""); } public override async Task Join_with_order_by_on_inner_sequence_navigation_translated_to_subquery_composite_key(bool isAsync) @@ -1859,14 +1870,14 @@ public override async Task Join_with_order_by_on_inner_sequence_navigation_trans AssertSql( """ - SELECT `g`.`FullName`, `t0`.`Note` - FROM `Gears` AS `g` - INNER JOIN ( - SELECT `t`.`Note`, `g0`.`FullName` - FROM `Tags` AS `t` - LEFT JOIN `Gears` AS `g0` ON `t`.`GearNickName` = `g0`.`Nickname` AND `t`.`GearSquadId` = `g0`.`SquadId` - ) AS `t0` ON `g`.`FullName` = `t0`.`FullName` - """); +SELECT `g`.`FullName`, `s`.`Note` +FROM `Gears` AS `g` +INNER JOIN ( + SELECT `t`.`Note`, `g0`.`FullName` + FROM `Tags` AS `t` + LEFT JOIN `Gears` AS `g0` ON `t`.`GearNickName` = `g0`.`Nickname` AND `t`.`GearSquadId` = `g0`.`SquadId` +) AS `s` ON `g`.`FullName` = `s`.`FullName` +"""); } public override async Task Join_with_order_by_without_skip_or_take(bool isAsync) @@ -1901,15 +1912,15 @@ public override async Task Collection_with_inheritance_and_join_include_joined(b AssertSql( """ - SELECT `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`Discriminator`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t1`.`Id`, `t1`.`GearNickName`, `t1`.`GearSquadId`, `t1`.`IssueDate`, `t1`.`Note` - FROM (`Tags` AS `t` - INNER JOIN ( - SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` - FROM `Gears` AS `g` - WHERE `g`.`Discriminator` = 'Officer' - ) AS `t0` ON `t`.`GearSquadId` = `t0`.`SquadId` AND `t`.`GearNickName` = `t0`.`Nickname`) - LEFT JOIN `Tags` AS `t1` ON `t0`.`Nickname` = `t1`.`GearNickName` AND `t0`.`SquadId` = `t1`.`GearSquadId` - """); +SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, `t0`.`Id`, `t0`.`GearNickName`, `t0`.`GearSquadId`, `t0`.`IssueDate`, `t0`.`Note` +FROM (`Tags` AS `t` +INNER JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` + FROM `Gears` AS `g` + WHERE `g`.`Discriminator` = 'Officer' +) AS `g0` ON `t`.`GearSquadId` = `g0`.`SquadId` AND `t`.`GearNickName` = `g0`.`Nickname`) +LEFT JOIN `Tags` AS `t0` ON `g0`.`Nickname` = `t0`.`GearNickName` AND `g0`.`SquadId` = `t0`.`GearSquadId` +"""); } public override async Task Collection_with_inheritance_and_join_include_source(bool isAsync) @@ -2088,16 +2099,16 @@ public override async Task Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_i AssertSql( """ -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`Discriminator`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `g`.`Nickname`, `g`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` +SELECT `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`AssignedCityName`, `g1`.`CityOfBirthName`, `g1`.`Discriminator`, `g1`.`FullName`, `g1`.`HasSoulPatch`, `g1`.`LeaderNickname`, `g1`.`LeaderSquadId`, `g1`.`Rank`, `g`.`Nickname`, `g`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` FROM ((`Gears` AS `g` LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank` FROM `Gears` AS `g0` WHERE `g0`.`Discriminator` = 'Officer' -) AS `t` ON `g`.`LeaderNickname` = `t`.`Nickname`) -LEFT JOIN `Weapons` AS `w` ON `t`.`FullName` = `w`.`OwnerFullName`) +) AS `g1` ON `g`.`LeaderNickname` = `g1`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `g1`.`FullName` = `w`.`OwnerFullName`) LEFT JOIN `Weapons` AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` -ORDER BY `g`.`Nickname`, `g`.`SquadId`, `t`.`Nickname`, `t`.`SquadId`, `w`.`Id` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `g1`.`Nickname`, `g1`.`SquadId`, `w`.`Id` """); } @@ -2140,9 +2151,12 @@ public override async Task Coalesce_operator_in_predicate(bool isAsync) await base.Coalesce_operator_in_predicate(isAsync); AssertSql( - $@"SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` -FROM `Weapons` AS `w` -WHERE IIF(`w`.`IsAutomatic` IS NULL, FALSE, `w`.`IsAutomatic`) = TRUE"); + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` +LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId` +WHERE IIF(`g`.`HasSoulPatch` IS NULL, FALSE, `g`.`HasSoulPatch`) = TRUE +"""); } public override async Task Coalesce_operator_in_predicate_with_other_conditions(bool isAsync) @@ -2151,10 +2165,11 @@ public override async Task Coalesce_operator_in_predicate_with_other_conditions( AssertSql( """ - SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` - FROM `Weapons` AS `w` - WHERE `w`.`AmmunitionType` = 1 AND IIF(`w`.`IsAutomatic` IS NULL, FALSE, `w`.`IsAutomatic`) = TRUE - """); +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` +LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId` +WHERE (`t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL) AND IIF(`g`.`HasSoulPatch` IS NULL, FALSE, `g`.`HasSoulPatch`) = TRUE +"""); } public override async Task Coalesce_operator_in_projection_with_other_conditions(bool isAsync) @@ -2162,9 +2177,10 @@ public override async Task Coalesce_operator_in_projection_with_other_conditions await base.Coalesce_operator_in_projection_with_other_conditions(isAsync); AssertSql( -""" -SELECT IIF(`w`.`AmmunitionType` = 1 AND `w`.`AmmunitionType` IS NOT NULL AND IIF(`w`.`IsAutomatic` IS NULL, FALSE, `w`.`IsAutomatic`) = TRUE, TRUE, FALSE) -FROM `Weapons` AS `w` + """ +SELECT IIF((`t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL) AND IIF(`g`.`HasSoulPatch` IS NULL, FALSE, `g`.`HasSoulPatch`) = TRUE, TRUE, FALSE) +FROM `Tags` AS `t` +LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId` """); } @@ -2410,15 +2426,15 @@ public override async Task Select_correlated_filtered_collection(bool isAsync) await base.Select_correlated_filtered_collection(isAsync); AssertSql( -""" -SELECT `g`.`Nickname`, `g`.`SquadId`, `c`.`Name`, `t`.`Id`, `t`.`AmmunitionType`, `t`.`IsAutomatic`, `t`.`Name`, `t`.`OwnerFullName`, `t`.`SynergyWithId` + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `c`.`Name`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` FROM (`Gears` AS `g` INNER JOIN `Cities` AS `c` ON `g`.`CityOfBirthName` = `c`.`Name`) LEFT JOIN ( SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM `Weapons` AS `w` WHERE `w`.`Name` <> 'Lancer' OR `w`.`Name` IS NULL -) AS `t` ON `g`.`FullName` = `t`.`OwnerFullName` +) AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` WHERE `c`.`Name` IN ('Ephyra', 'Hanover') ORDER BY `g`.`Nickname`, `g`.`SquadId`, `c`.`Name` """); @@ -2430,15 +2446,15 @@ public override async Task Select_correlated_filtered_collection_with_composite_ AssertSql( """ -SELECT `g`.`Nickname`, `g`.`SquadId`, `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`Discriminator`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank` +SELECT `g`.`Nickname`, `g`.`SquadId`, `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`AssignedCityName`, `g1`.`CityOfBirthName`, `g1`.`Discriminator`, `g1`.`FullName`, `g1`.`HasSoulPatch`, `g1`.`LeaderNickname`, `g1`.`LeaderSquadId`, `g1`.`Rank` FROM `Gears` AS `g` LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank` FROM `Gears` AS `g0` WHERE `g0`.`Nickname` <> 'Dom' -) AS `t` ON `g`.`Nickname` = `t`.`LeaderNickname` AND `g`.`SquadId` = `t`.`LeaderSquadId` +) AS `g1` ON `g`.`Nickname` = `g1`.`LeaderNickname` AND `g`.`SquadId` = `g1`.`LeaderSquadId` WHERE `g`.`Discriminator` = 'Officer' -ORDER BY `g`.`Nickname`, `g`.`SquadId`, `t`.`Nickname` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `g1`.`Nickname` """); } @@ -2527,7 +2543,7 @@ public override async Task Where_datetimeoffset_now(bool isAsync) AssertSql( """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE `m`.`Timeline` <> NOW() """); @@ -2540,7 +2556,7 @@ public override async Task Where_datetimeoffset_utcnow(bool isAsync) AssertSql( $""" -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE `m`.`Timeline` <> DATEADD('n', {dtoffset}.0, NOW()) """); @@ -2548,13 +2564,24 @@ public override async Task Where_datetimeoffset_utcnow(bool isAsync) public override async Task Where_datetimeoffset_date_component(bool isAsync) { - await base.Where_datetimeoffset_date_component(isAsync); + //We have to specifically use 1 JAn 100 as that is the minimum in Jet. + //The default 0 in DateTimeOffset is normally mapped to the OLE Automation date 30 Dec 1899 + //Investigate if we can pick the scenario up automatically and have a new DateTimeOffset().Date go to the required value if we have a comparison + //await base.Where_datetimeoffset_date_component(isAsync); + await AssertQuery( + isAsync, + ss => from m in ss.Set() + where m.Timeline.Date > new DateTimeOffset(100,1,1,0,0,0,new TimeSpan()).Date + select m); - // issue #16057 - // AssertSql( - // $@"SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Rating`, `m`.`Timeline` - //FROM `Missions` AS `m` - //WHERE CONVERT(date, `m`.`Timeline`) > '0001-01-01T00:00:00.0000000-08:00'"); + AssertSql( + """ +@__Date_0='0100-01-01T00:00:00.0000000' (DbType = DateTime) + +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +FROM `Missions` AS `m` +WHERE DATEVALUE(`m`.`Timeline`) > CDATE(@__Date_0) +"""); } public override async Task Where_datetimeoffset_year_component(bool isAsync) @@ -2567,7 +2594,7 @@ await AssertQuery( AssertSql( """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE DATEPART('yyyy', `m`.`Timeline`) = 102 """); @@ -2579,7 +2606,7 @@ public override async Task Where_datetimeoffset_month_component(bool isAsync) AssertSql( """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE DATEPART('m', `m`.`Timeline`) = 1 """); @@ -2591,7 +2618,7 @@ public override async Task Where_datetimeoffset_dayofyear_component(bool isAsync AssertSql( """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE DATEPART('y', `m`.`Timeline`) = 2 """); @@ -2603,7 +2630,7 @@ public override async Task Where_datetimeoffset_day_component(bool isAsync) AssertSql( """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE DATEPART('d', `m`.`Timeline`) = 2 """); @@ -2619,7 +2646,7 @@ await AssertQuery( AssertSql( """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE DATEPART('h', `m`.`Timeline`) = 8 """); @@ -2631,7 +2658,7 @@ public override async Task Where_datetimeoffset_minute_component(bool isAsync) AssertSql( """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE DATEPART('n', `m`.`Timeline`) = 0 """); @@ -2643,7 +2670,7 @@ public override async Task Where_datetimeoffset_second_component(bool isAsync) AssertSql( """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE DATEPART('s', `m`.`Timeline`) = 0 """); @@ -2827,12 +2854,12 @@ public override async Task All_with_optional_navigation_is_translated_to_sql(boo await base.All_with_optional_navigation_is_translated_to_sql(isAsync); AssertSql( -""" + """ SELECT IIF(NOT EXISTS ( SELECT 1 FROM `Gears` AS `g` LEFT JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName` AND `g`.`SquadId` = `t`.`GearSquadId` - WHERE `t`.`Note` = 'Foo' AND `t`.`Note` IS NOT NULL), TRUE, FALSE) + WHERE `t`.`Note` = 'Foo'), TRUE, FALSE) FROM (SELECT COUNT(*) FROM `#Dual`) """); } @@ -3003,15 +3030,15 @@ public override async Task Subquery_with_result_operator_is_not_lifted(bool isAs await base.Subquery_with_result_operator_is_not_lifted(isAsync); AssertSql( -""" -SELECT `t`.`FullName` + """ +SELECT `g0`.`FullName` FROM ( SELECT TOP 2 `g`.`FullName`, `g`.`Rank` FROM `Gears` AS `g` WHERE `g`.`HasSoulPatch` <> TRUE ORDER BY `g`.`FullName` -) AS `t` -ORDER BY `t`.`Rank` +) AS `g0` +ORDER BY `g0`.`Rank` """); } @@ -3071,14 +3098,14 @@ public override async Task Take_without_orderby_followed_by_orderBy_is_pushed_do AssertSql( """ - SELECT `t`.`FullName` - FROM ( - SELECT TOP 999 `g`.`FullName`, `g`.`Rank` - FROM `Gears` AS `g` - WHERE `g`.`HasSoulPatch` <> TRUE - ) AS `t` - ORDER BY `t`.`FullName`, `t`.`Rank` - """); +SELECT `g0`.`FullName` +FROM ( + SELECT TOP 999 `g`.`FullName`, `g`.`Rank` + FROM `Gears` AS `g` + WHERE `g`.`HasSoulPatch` <> TRUE +) AS `g0` +ORDER BY `g0`.`FullName`, `g0`.`Rank` +"""); } public override async Task Select_length_of_string_property(bool isAsync) @@ -3153,15 +3180,15 @@ public override async Task Navigation_access_on_derived_entity_using_cast(bool i AssertSql( """ - SELECT `f`.`Name`, `t`.`ThreatLevel` AS `Threat` - FROM `Factions` AS `f` - LEFT JOIN ( - SELECT `l`.`Name`, `l`.`ThreatLevel` - FROM `LocustLeaders` AS `l` - WHERE `l`.`Discriminator` = 'LocustCommander' - ) AS `t` ON `f`.`CommanderName` = `t`.`Name` - ORDER BY `f`.`Name` - """); +SELECT `f`.`Name`, `l0`.`ThreatLevel` AS `Threat` +FROM `Factions` AS `f` +LEFT JOIN ( + SELECT `l`.`Name`, `l`.`ThreatLevel` + FROM `LocustLeaders` AS `l` + WHERE `l`.`Discriminator` = 'LocustCommander' +) AS `l0` ON `f`.`CommanderName` = `l0`.`Name` +ORDER BY `f`.`Name` +"""); } public override async Task Navigation_access_on_derived_materialized_entity_using_cast(bool isAsync) @@ -3170,15 +3197,15 @@ public override async Task Navigation_access_on_derived_materialized_entity_usin AssertSql( """ - SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Discriminator`, `f`.`Name`, `f`.`ServerAddress`, `f`.`CommanderName`, `f`.`Eradicated`, `t`.`ThreatLevel` AS `Threat` - FROM `Factions` AS `f` - LEFT JOIN ( - SELECT `l`.`Name`, `l`.`ThreatLevel` - FROM `LocustLeaders` AS `l` - WHERE `l`.`Discriminator` = 'LocustCommander' - ) AS `t` ON `f`.`CommanderName` = `t`.`Name` - ORDER BY `f`.`Name` - """); +SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Discriminator`, `f`.`Name`, `f`.`ServerAddress`, `f`.`CommanderName`, `f`.`Eradicated`, `l0`.`ThreatLevel` AS `Threat` +FROM `Factions` AS `f` +LEFT JOIN ( + SELECT `l`.`Name`, `l`.`ThreatLevel` + FROM `LocustLeaders` AS `l` + WHERE `l`.`Discriminator` = 'LocustCommander' +) AS `l0` ON `f`.`CommanderName` = `l0`.`Name` +ORDER BY `f`.`Name` +"""); } public override async Task Navigation_access_via_EFProperty_on_derived_entity_using_cast(bool isAsync) @@ -3187,15 +3214,15 @@ public override async Task Navigation_access_via_EFProperty_on_derived_entity_us AssertSql( """ - SELECT `f`.`Name`, `t`.`ThreatLevel` AS `Threat` - FROM `Factions` AS `f` - LEFT JOIN ( - SELECT `l`.`Name`, `l`.`ThreatLevel` - FROM `LocustLeaders` AS `l` - WHERE `l`.`Discriminator` = 'LocustCommander' - ) AS `t` ON `f`.`CommanderName` = `t`.`Name` - ORDER BY `f`.`Name` - """); +SELECT `f`.`Name`, `l0`.`ThreatLevel` AS `Threat` +FROM `Factions` AS `f` +LEFT JOIN ( + SELECT `l`.`Name`, `l`.`ThreatLevel` + FROM `LocustLeaders` AS `l` + WHERE `l`.`Discriminator` = 'LocustCommander' +) AS `l0` ON `f`.`CommanderName` = `l0`.`Name` +ORDER BY `f`.`Name` +"""); } public override async Task Navigation_access_fk_on_derived_entity_using_cast(bool isAsync) @@ -3204,15 +3231,15 @@ public override async Task Navigation_access_fk_on_derived_entity_using_cast(boo AssertSql( """ - SELECT `f`.`Name`, `t`.`Name` AS `CommanderName` - FROM `Factions` AS `f` - LEFT JOIN ( - SELECT `l`.`Name` - FROM `LocustLeaders` AS `l` - WHERE `l`.`Discriminator` = 'LocustCommander' - ) AS `t` ON `f`.`CommanderName` = `t`.`Name` - ORDER BY `f`.`Name` - """); +SELECT `f`.`Name`, `l0`.`Name` AS `CommanderName` +FROM `Factions` AS `f` +LEFT JOIN ( + SELECT `l`.`Name` + FROM `LocustLeaders` AS `l` + WHERE `l`.`Discriminator` = 'LocustCommander' +) AS `l0` ON `f`.`CommanderName` = `l0`.`Name` +ORDER BY `f`.`Name` +"""); } public override async Task Collection_navigation_access_on_derived_entity_using_cast(bool isAsync) @@ -3249,16 +3276,16 @@ public override async Task Include_on_derived_entity_using_OfType(bool isAsync) AssertSql( """ - SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Discriminator`, `f`.`Name`, `f`.`ServerAddress`, `f`.`CommanderName`, `f`.`Eradicated`, `t`.`Name`, `t`.`Discriminator`, `t`.`LocustHordeId`, `t`.`ThreatLevel`, `t`.`ThreatLevelByte`, `t`.`ThreatLevelNullableByte`, `t`.`DefeatedByNickname`, `t`.`DefeatedBySquadId`, `t`.`HighCommandId`, `l0`.`Name`, `l0`.`Discriminator`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId` - FROM (`Factions` AS `f` - LEFT JOIN ( - SELECT `l`.`Name`, `l`.`Discriminator`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l`.`DefeatedByNickname`, `l`.`DefeatedBySquadId`, `l`.`HighCommandId` - FROM `LocustLeaders` AS `l` - WHERE `l`.`Discriminator` = 'LocustCommander' - ) AS `t` ON `f`.`CommanderName` = `t`.`Name`) - LEFT JOIN `LocustLeaders` AS `l0` ON `f`.`Id` = `l0`.`LocustHordeId` - ORDER BY `f`.`Name`, `f`.`Id`, `t`.`Name` - """); +SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Discriminator`, `f`.`Name`, `f`.`ServerAddress`, `f`.`CommanderName`, `f`.`Eradicated`, `l0`.`Name`, `l0`.`Discriminator`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, `l1`.`Name`, `l1`.`Discriminator`, `l1`.`LocustHordeId`, `l1`.`ThreatLevel`, `l1`.`ThreatLevelByte`, `l1`.`ThreatLevelNullableByte`, `l1`.`DefeatedByNickname`, `l1`.`DefeatedBySquadId`, `l1`.`HighCommandId` +FROM (`Factions` AS `f` +LEFT JOIN ( + SELECT `l`.`Name`, `l`.`Discriminator`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l`.`DefeatedByNickname`, `l`.`DefeatedBySquadId`, `l`.`HighCommandId` + FROM `LocustLeaders` AS `l` + WHERE `l`.`Discriminator` = 'LocustCommander' +) AS `l0` ON `f`.`CommanderName` = `l0`.`Name`) +LEFT JOIN `LocustLeaders` AS `l1` ON `f`.`Id` = `l1`.`LocustHordeId` +ORDER BY `f`.`Name`, `f`.`Id`, `l0`.`Name` +"""); } // public override async Task Include_on_derived_entity_using_subquery_with_cast(bool isAsync) @@ -3364,12 +3391,12 @@ public override async Task Distinct_on_subquery_doesnt_get_lifted(bool isAsync) AssertSql( """ - SELECT `t`.`HasSoulPatch` - FROM ( - SELECT DISTINCT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` - FROM `Gears` AS `g` - ) AS `t` - """); +SELECT `g0`.`HasSoulPatch` +FROM ( + SELECT DISTINCT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` + FROM `Gears` AS `g` +) AS `g0` +"""); } public override async Task Cast_result_operator_on_subquery_is_properly_lifted_to_a_convert(bool isAsync) @@ -3401,24 +3428,24 @@ public override async Task Comparing_two_collection_navigations_inheritance(bool AssertSql( """ -SELECT `t0`.`Name`, `t0`.`Nickname` +SELECT `s`.`Name`, `s`.`Nickname` FROM (( - SELECT `f`.`Name`, `f`.`CommanderName`, `t`.`Nickname`, `t`.`SquadId` + SELECT `f`.`Name`, `f`.`CommanderName`, `g0`.`Nickname`, `g0`.`SquadId` FROM `Factions` AS `f`, ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` FROM `Gears` AS `g` WHERE `g`.`Discriminator` = 'Officer' - ) AS `t` - WHERE `t`.`HasSoulPatch` = TRUE -) AS `t0` + ) AS `g0` + WHERE `g0`.`HasSoulPatch` = TRUE +) AS `s` LEFT JOIN ( SELECT `l`.`Name`, `l`.`DefeatedByNickname`, `l`.`DefeatedBySquadId` FROM `LocustLeaders` AS `l` WHERE `l`.`Discriminator` = 'LocustCommander' -) AS `t1` ON `t0`.`CommanderName` = `t1`.`Name`) -LEFT JOIN `Gears` AS `g0` ON `t1`.`DefeatedByNickname` = `g0`.`Nickname` AND `t1`.`DefeatedBySquadId` = `g0`.`SquadId` -WHERE `g0`.`Nickname` = `t0`.`Nickname` AND `g0`.`SquadId` = `t0`.`SquadId` +) AS `l0` ON `s`.`CommanderName` = `l0`.`Name`) +LEFT JOIN `Gears` AS `g1` ON `l0`.`DefeatedByNickname` = `g1`.`Nickname` AND `l0`.`DefeatedBySquadId` = `g1`.`SquadId` +WHERE `g1`.`Nickname` = `s`.`Nickname` AND `g1`.`SquadId` = `s`.`SquadId` """); } @@ -3428,16 +3455,16 @@ public override async Task Comparing_entities_using_Equals_inheritance(bool isAs AssertSql( """ - SELECT `g`.`Nickname` AS `Nickname1`, `t`.`Nickname` AS `Nickname2` - FROM `Gears` AS `g`, - ( - SELECT `g0`.`Nickname`, `g0`.`SquadId` - FROM `Gears` AS `g0` - WHERE `g0`.`Discriminator` = 'Officer' - ) AS `t` - WHERE `g`.`Nickname` = `t`.`Nickname` AND `g`.`SquadId` = `t`.`SquadId` - ORDER BY `g`.`Nickname`, `t`.`Nickname` - """); +SELECT `g`.`Nickname` AS `Nickname1`, `g1`.`Nickname` AS `Nickname2` +FROM `Gears` AS `g`, +( + SELECT `g0`.`Nickname`, `g0`.`SquadId` + FROM `Gears` AS `g0` + WHERE `g0`.`Discriminator` = 'Officer' +) AS `g1` +WHERE `g`.`Nickname` = `g1`.`Nickname` AND `g`.`SquadId` = `g1`.`SquadId` +ORDER BY `g`.`Nickname`, `g1`.`Nickname` +"""); } public override async Task Contains_on_nullable_array_produces_correct_sql(bool isAsync) @@ -3495,17 +3522,17 @@ public override async Task Project_collection_navigation_with_inheritance1(bool await base.Project_collection_navigation_with_inheritance1(isAsync); AssertSql( -""" -SELECT `f`.`Id`, `t`.`Name`, `f0`.`Id`, `l0`.`Name`, `l0`.`Discriminator`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId` + """ +SELECT `f`.`Id`, `l0`.`Name`, `f0`.`Id`, `l1`.`Name`, `l1`.`Discriminator`, `l1`.`LocustHordeId`, `l1`.`ThreatLevel`, `l1`.`ThreatLevelByte`, `l1`.`ThreatLevelNullableByte`, `l1`.`DefeatedByNickname`, `l1`.`DefeatedBySquadId`, `l1`.`HighCommandId` FROM ((`Factions` AS `f` LEFT JOIN ( SELECT `l`.`Name` FROM `LocustLeaders` AS `l` WHERE `l`.`Discriminator` = 'LocustCommander' -) AS `t` ON `f`.`CommanderName` = `t`.`Name`) -LEFT JOIN `Factions` AS `f0` ON `t`.`Name` = `f0`.`CommanderName`) -LEFT JOIN `LocustLeaders` AS `l0` ON `f0`.`Id` = `l0`.`LocustHordeId` -ORDER BY `f`.`Id`, `t`.`Name`, `f0`.`Id` +) AS `l0` ON `f`.`CommanderName` = `l0`.`Name`) +LEFT JOIN `Factions` AS `f0` ON `l0`.`Name` = `f0`.`CommanderName`) +LEFT JOIN `LocustLeaders` AS `l1` ON `f0`.`Id` = `l1`.`LocustHordeId` +ORDER BY `f`.`Id`, `l0`.`Name`, `f0`.`Id` """); } @@ -3514,17 +3541,17 @@ public override async Task Project_collection_navigation_with_inheritance2(bool await base.Project_collection_navigation_with_inheritance2(isAsync); AssertSql( -""" -SELECT `f`.`Id`, `t`.`Name`, `g`.`Nickname`, `g`.`SquadId`, `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank` + """ +SELECT `f`.`Id`, `l0`.`Name`, `g`.`Nickname`, `g`.`SquadId`, `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank` FROM ((`Factions` AS `f` LEFT JOIN ( SELECT `l`.`Name`, `l`.`DefeatedByNickname`, `l`.`DefeatedBySquadId` FROM `LocustLeaders` AS `l` WHERE `l`.`Discriminator` = 'LocustCommander' -) AS `t` ON `f`.`CommanderName` = `t`.`Name`) -LEFT JOIN `Gears` AS `g` ON `t`.`DefeatedByNickname` = `g`.`Nickname` AND `t`.`DefeatedBySquadId` = `g`.`SquadId`) +) AS `l0` ON `f`.`CommanderName` = `l0`.`Name`) +LEFT JOIN `Gears` AS `g` ON `l0`.`DefeatedByNickname` = `g`.`Nickname` AND `l0`.`DefeatedBySquadId` = `g`.`SquadId`) LEFT JOIN `Gears` AS `g0` ON (`g`.`Nickname` = `g0`.`LeaderNickname` OR (`g`.`Nickname` IS NULL AND `g0`.`LeaderNickname` IS NULL)) AND `g`.`SquadId` = `g0`.`LeaderSquadId` -ORDER BY `f`.`Id`, `t`.`Name`, `g`.`Nickname`, `g`.`SquadId`, `g0`.`Nickname` +ORDER BY `f`.`Id`, `l0`.`Name`, `g`.`Nickname`, `g`.`SquadId`, `g0`.`Nickname` """); } @@ -3533,17 +3560,17 @@ public override async Task Project_collection_navigation_with_inheritance3(bool await base.Project_collection_navigation_with_inheritance3(isAsync); AssertSql( -""" -SELECT `f`.`Id`, `t`.`Name`, `g`.`Nickname`, `g`.`SquadId`, `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank` + """ +SELECT `f`.`Id`, `l0`.`Name`, `g`.`Nickname`, `g`.`SquadId`, `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank` FROM ((`Factions` AS `f` LEFT JOIN ( SELECT `l`.`Name`, `l`.`DefeatedByNickname`, `l`.`DefeatedBySquadId` FROM `LocustLeaders` AS `l` WHERE `l`.`Discriminator` = 'LocustCommander' -) AS `t` ON `f`.`CommanderName` = `t`.`Name`) -LEFT JOIN `Gears` AS `g` ON `t`.`DefeatedByNickname` = `g`.`Nickname` AND `t`.`DefeatedBySquadId` = `g`.`SquadId`) +) AS `l0` ON `f`.`CommanderName` = `l0`.`Name`) +LEFT JOIN `Gears` AS `g` ON `l0`.`DefeatedByNickname` = `g`.`Nickname` AND `l0`.`DefeatedBySquadId` = `g`.`SquadId`) LEFT JOIN `Gears` AS `g0` ON (`g`.`Nickname` = `g0`.`LeaderNickname` OR (`g`.`Nickname` IS NULL AND `g0`.`LeaderNickname` IS NULL)) AND `g`.`SquadId` = `g0`.`LeaderSquadId` -ORDER BY `f`.`Id`, `t`.`Name`, `g`.`Nickname`, `g`.`SquadId`, `g0`.`Nickname` +ORDER BY `f`.`Id`, `l0`.`Name`, `g`.`Nickname`, `g`.`SquadId`, `g0`.`Nickname` """); } @@ -3577,16 +3604,16 @@ public override async Task Include_reference_on_derived_type_using_string_nested await base.Include_reference_on_derived_type_using_string_nested2(isAsync); AssertSql( -""" -SELECT `l`.`Name`, `l`.`Discriminator`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l`.`DefeatedByNickname`, `l`.`DefeatedBySquadId`, `l`.`HighCommandId`, `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`Discriminator`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Name`, `t`.`Location`, `t`.`Nation` + """ +SELECT `l`.`Name`, `l`.`Discriminator`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l`.`DefeatedByNickname`, `l`.`DefeatedBySquadId`, `l`.`HighCommandId`, `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`Discriminator`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Name`, `s`.`Location`, `s`.`Nation` FROM (`LocustLeaders` AS `l` LEFT JOIN `Gears` AS `g` ON `l`.`DefeatedByNickname` = `g`.`Nickname` AND `l`.`DefeatedBySquadId` = `g`.`SquadId`) LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, `c`.`Name`, `c`.`Location`, `c`.`Nation` FROM `Gears` AS `g0` INNER JOIN `Cities` AS `c` ON `g0`.`CityOfBirthName` = `c`.`Name` -) AS `t` ON (`g`.`Nickname` = `t`.`LeaderNickname` OR (`g`.`Nickname` IS NULL AND `t`.`LeaderNickname` IS NULL)) AND `g`.`SquadId` = `t`.`LeaderSquadId` -ORDER BY `l`.`Name`, `g`.`Nickname`, `g`.`SquadId`, `t`.`Nickname`, `t`.`SquadId` +) AS `s` ON (`g`.`Nickname` = `s`.`LeaderNickname` OR (`g`.`Nickname` IS NULL AND `s`.`LeaderNickname` IS NULL)) AND `g`.`SquadId` = `s`.`LeaderSquadId` +ORDER BY `l`.`Name`, `g`.`Nickname`, `g`.`SquadId`, `s`.`Nickname`, `s`.`SquadId` """); } @@ -3698,17 +3725,17 @@ public override async Task ThenInclude_collection_on_derived_after_derived_refer await base.ThenInclude_collection_on_derived_after_derived_reference(isAsync); AssertSql( -""" -SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Discriminator`, `f`.`Name`, `f`.`ServerAddress`, `f`.`CommanderName`, `f`.`Eradicated`, `t`.`Name`, `t`.`Discriminator`, `t`.`LocustHordeId`, `t`.`ThreatLevel`, `t`.`ThreatLevelByte`, `t`.`ThreatLevelNullableByte`, `t`.`DefeatedByNickname`, `t`.`DefeatedBySquadId`, `t`.`HighCommandId`, `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank` + """ +SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Discriminator`, `f`.`Name`, `f`.`ServerAddress`, `f`.`CommanderName`, `f`.`Eradicated`, `l0`.`Name`, `l0`.`Discriminator`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank` FROM ((`Factions` AS `f` LEFT JOIN ( SELECT `l`.`Name`, `l`.`Discriminator`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l`.`DefeatedByNickname`, `l`.`DefeatedBySquadId`, `l`.`HighCommandId` FROM `LocustLeaders` AS `l` WHERE `l`.`Discriminator` = 'LocustCommander' -) AS `t` ON `f`.`CommanderName` = `t`.`Name`) -LEFT JOIN `Gears` AS `g` ON `t`.`DefeatedByNickname` = `g`.`Nickname` AND `t`.`DefeatedBySquadId` = `g`.`SquadId`) +) AS `l0` ON `f`.`CommanderName` = `l0`.`Name`) +LEFT JOIN `Gears` AS `g` ON `l0`.`DefeatedByNickname` = `g`.`Nickname` AND `l0`.`DefeatedBySquadId` = `g`.`SquadId`) LEFT JOIN `Gears` AS `g0` ON (`g`.`Nickname` = `g0`.`LeaderNickname` OR (`g`.`Nickname` IS NULL AND `g0`.`LeaderNickname` IS NULL)) AND `g`.`SquadId` = `g0`.`LeaderSquadId` -ORDER BY `f`.`Id`, `t`.`Name`, `g`.`Nickname`, `g`.`SquadId`, `g0`.`Nickname` +ORDER BY `f`.`Id`, `l0`.`Name`, `g`.`Nickname`, `g`.`SquadId`, `g0`.`Nickname` """); } @@ -3718,14 +3745,14 @@ public override async Task ThenInclude_collection_on_derived_after_derived_colle AssertSql( """ -SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`Discriminator`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Nickname0`, `t`.`SquadId0`, `t`.`AssignedCityName0`, `t`.`CityOfBirthName0`, `t`.`Discriminator0`, `t`.`FullName0`, `t`.`HasSoulPatch0`, `t`.`LeaderNickname0`, `t`.`LeaderSquadId0`, `t`.`Rank0` +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`Discriminator`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Nickname0`, `s`.`SquadId0`, `s`.`AssignedCityName0`, `s`.`CityOfBirthName0`, `s`.`Discriminator0`, `s`.`FullName0`, `s`.`HasSoulPatch0`, `s`.`LeaderNickname0`, `s`.`LeaderSquadId0`, `s`.`Rank0` FROM `Gears` AS `g` LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, `g1`.`Nickname` AS `Nickname0`, `g1`.`SquadId` AS `SquadId0`, `g1`.`AssignedCityName` AS `AssignedCityName0`, `g1`.`CityOfBirthName` AS `CityOfBirthName0`, `g1`.`Discriminator` AS `Discriminator0`, `g1`.`FullName` AS `FullName0`, `g1`.`HasSoulPatch` AS `HasSoulPatch0`, `g1`.`LeaderNickname` AS `LeaderNickname0`, `g1`.`LeaderSquadId` AS `LeaderSquadId0`, `g1`.`Rank` AS `Rank0` FROM `Gears` AS `g0` LEFT JOIN `Gears` AS `g1` ON `g0`.`Nickname` = `g1`.`LeaderNickname` AND `g0`.`SquadId` = `g1`.`LeaderSquadId` -) AS `t` ON `g`.`Nickname` = `t`.`LeaderNickname` AND `g`.`SquadId` = `t`.`LeaderSquadId` -ORDER BY `g`.`Nickname`, `g`.`SquadId`, `t`.`Nickname`, `t`.`SquadId`, `t`.`Nickname0` +) AS `s` ON `g`.`Nickname` = `s`.`LeaderNickname` AND `g`.`SquadId` = `s`.`LeaderSquadId` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s`.`Nickname`, `s`.`SquadId`, `s`.`Nickname0` """); } @@ -3735,15 +3762,15 @@ public override async Task ThenInclude_reference_on_derived_after_derived_collec AssertSql( """ - SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Discriminator`, `f`.`Name`, `f`.`ServerAddress`, `f`.`CommanderName`, `f`.`Eradicated`, `t`.`Name`, `t`.`Discriminator`, `t`.`LocustHordeId`, `t`.`ThreatLevel`, `t`.`ThreatLevelByte`, `t`.`ThreatLevelNullableByte`, `t`.`DefeatedByNickname`, `t`.`DefeatedBySquadId`, `t`.`HighCommandId`, `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`Discriminator0`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank` - FROM `Factions` AS `f` - LEFT JOIN ( - SELECT `l`.`Name`, `l`.`Discriminator`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l`.`DefeatedByNickname`, `l`.`DefeatedBySquadId`, `l`.`HighCommandId`, `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator` AS `Discriminator0`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` - FROM `LocustLeaders` AS `l` - LEFT JOIN `Gears` AS `g` ON `l`.`DefeatedByNickname` = `g`.`Nickname` AND `l`.`DefeatedBySquadId` = `g`.`SquadId` - ) AS `t` ON `f`.`Id` = `t`.`LocustHordeId` - ORDER BY `f`.`Id`, `t`.`Name`, `t`.`Nickname` - """); +SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Discriminator`, `f`.`Name`, `f`.`ServerAddress`, `f`.`CommanderName`, `f`.`Eradicated`, `s`.`Name`, `s`.`Discriminator`, `s`.`LocustHordeId`, `s`.`ThreatLevel`, `s`.`ThreatLevelByte`, `s`.`ThreatLevelNullableByte`, `s`.`DefeatedByNickname`, `s`.`DefeatedBySquadId`, `s`.`HighCommandId`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`Discriminator0`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank` +FROM `Factions` AS `f` +LEFT JOIN ( + SELECT `l`.`Name`, `l`.`Discriminator`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l`.`DefeatedByNickname`, `l`.`DefeatedBySquadId`, `l`.`HighCommandId`, `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator` AS `Discriminator0`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` + FROM `LocustLeaders` AS `l` + LEFT JOIN `Gears` AS `g` ON `l`.`DefeatedByNickname` = `g`.`Nickname` AND `l`.`DefeatedBySquadId` = `g`.`SquadId` +) AS `s` ON `f`.`Id` = `s`.`LocustHordeId` +ORDER BY `f`.`Id`, `s`.`Name`, `s`.`Nickname` +"""); } public override async Task Multiple_derived_included_on_one_method(bool isAsync) @@ -3751,17 +3778,17 @@ public override async Task Multiple_derived_included_on_one_method(bool isAsync) await base.Multiple_derived_included_on_one_method(isAsync); AssertSql( -""" -SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Discriminator`, `f`.`Name`, `f`.`ServerAddress`, `f`.`CommanderName`, `f`.`Eradicated`, `t`.`Name`, `t`.`Discriminator`, `t`.`LocustHordeId`, `t`.`ThreatLevel`, `t`.`ThreatLevelByte`, `t`.`ThreatLevelNullableByte`, `t`.`DefeatedByNickname`, `t`.`DefeatedBySquadId`, `t`.`HighCommandId`, `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank` + """ +SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Discriminator`, `f`.`Name`, `f`.`ServerAddress`, `f`.`CommanderName`, `f`.`Eradicated`, `l0`.`Name`, `l0`.`Discriminator`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank` FROM ((`Factions` AS `f` LEFT JOIN ( SELECT `l`.`Name`, `l`.`Discriminator`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l`.`DefeatedByNickname`, `l`.`DefeatedBySquadId`, `l`.`HighCommandId` FROM `LocustLeaders` AS `l` WHERE `l`.`Discriminator` = 'LocustCommander' -) AS `t` ON `f`.`CommanderName` = `t`.`Name`) -LEFT JOIN `Gears` AS `g` ON `t`.`DefeatedByNickname` = `g`.`Nickname` AND `t`.`DefeatedBySquadId` = `g`.`SquadId`) +) AS `l0` ON `f`.`CommanderName` = `l0`.`Name`) +LEFT JOIN `Gears` AS `g` ON `l0`.`DefeatedByNickname` = `g`.`Nickname` AND `l0`.`DefeatedBySquadId` = `g`.`SquadId`) LEFT JOIN `Gears` AS `g0` ON (`g`.`Nickname` = `g0`.`LeaderNickname` OR (`g`.`Nickname` IS NULL AND `g0`.`LeaderNickname` IS NULL)) AND `g`.`SquadId` = `g0`.`LeaderSquadId` -ORDER BY `f`.`Id`, `t`.`Name`, `g`.`Nickname`, `g`.`SquadId`, `g0`.`Nickname` +ORDER BY `f`.`Id`, `l0`.`Name`, `g`.`Nickname`, `g`.`SquadId`, `g0`.`Nickname` """); } @@ -3771,15 +3798,15 @@ public override async Task Include_on_derived_multi_level(bool isAsync) AssertSql( """ -SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`Discriminator`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Id`, `t`.`Banner`, `t`.`Banner5`, `t`.`InternalNumber`, `t`.`Name`, `t`.`SquadId0`, `t`.`MissionId` +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `s1`.`Nickname`, `s1`.`SquadId`, `s1`.`AssignedCityName`, `s1`.`CityOfBirthName`, `s1`.`Discriminator`, `s1`.`FullName`, `s1`.`HasSoulPatch`, `s1`.`LeaderNickname`, `s1`.`LeaderSquadId`, `s1`.`Rank`, `s1`.`Id`, `s1`.`Banner`, `s1`.`Banner5`, `s1`.`InternalNumber`, `s1`.`Name`, `s1`.`SquadId0`, `s1`.`MissionId` FROM `Gears` AS `g` LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name`, `s0`.`SquadId` AS `SquadId0`, `s0`.`MissionId` FROM (`Gears` AS `g0` INNER JOIN `Squads` AS `s` ON `g0`.`SquadId` = `s`.`Id`) LEFT JOIN `SquadMissions` AS `s0` ON `s`.`Id` = `s0`.`SquadId` -) AS `t` ON `g`.`Nickname` = `t`.`LeaderNickname` AND `g`.`SquadId` = `t`.`LeaderSquadId` -ORDER BY `g`.`Nickname`, `g`.`SquadId`, `t`.`Nickname`, `t`.`SquadId`, `t`.`Id`, `t`.`SquadId0` +) AS `s1` ON `g`.`Nickname` = `s1`.`LeaderNickname` AND `g`.`SquadId` = `s1`.`LeaderSquadId` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s1`.`Nickname`, `s1`.`SquadId`, `s1`.`Id`, `s1`.`SquadId0` """); } @@ -3795,18 +3822,6 @@ SELECT IIF(`g`.`Nickname` IS NOT NULL AND `g`.`SquadId` IS NOT NULL, `g`.`HasSou """); } - public override async Task Enum_ToString_is_client_eval(bool isAsync) - { - await base.Enum_ToString_is_client_eval(isAsync); - - AssertSql( - """ - SELECT `g`.`Rank` - FROM `Gears` AS `g` - ORDER BY `g`.`SquadId`, `g`.`Nickname` - """); - } - public override async Task ToString_string_property_projection(bool async) { await base.ToString_string_property_projection(async); @@ -3835,11 +3850,75 @@ public override async Task ToString_boolean_property_nullable(bool async) AssertSql( """ -SELECT IIF(`f`.`Eradicated` = FALSE, 'False', IIF(`f`.`Eradicated` = TRUE, 'True', NULL)) +SELECT IIF(`f`.`Eradicated` = FALSE, 'False', IIF(`f`.`Eradicated` = TRUE, 'True', '')) FROM `Factions` AS `f` """); } + public override async Task ToString_boolean_computed_nullable(bool async) + { + await base.ToString_boolean_computed_nullable(async); + + AssertSql( + """ +SELECT CASE CASE + WHEN NOT ([f].[Eradicated] = CAST(1 AS bit) OR ([f].[CommanderName] = N'Unknown' AND [f].[CommanderName] IS NOT NULL)) THEN CAST(0 AS bit) + WHEN [f].[Eradicated] = CAST(1 AS bit) OR ([f].[CommanderName] = N'Unknown' AND [f].[CommanderName] IS NOT NULL) THEN CAST(1 AS bit) +END + WHEN CAST(0 AS bit) THEN N'False' + WHEN CAST(1 AS bit) THEN N'True' + ELSE N'' +END +FROM [Factions] AS [f] +"""); + } + + public override async Task ToString_enum_property_projection(bool async) + { + await base.ToString_enum_property_projection(async); + + AssertSql( + """ +SELECT IIF(`g`.`Rank` = 0, 'None', IIF(`g`.`Rank` = 1, 'Private', IIF(`g`.`Rank` = 2, 'Corporal', IIF(`g`.`Rank` = 4, 'Sergeant', IIF(`g`.`Rank` = 8, 'Lieutenant', IIF(`g`.`Rank` = 16, 'Captain', IIF(`g`.`Rank` = 32, 'Major', IIF(`g`.`Rank` = 64, 'Colonel', IIF(`g`.`Rank` = 128, 'General', (`g`.`Rank` & '')))))))))) +FROM `Gears` AS `g` +"""); + } + + public override async Task ToString_nullable_enum_property_projection(bool async) + { + await base.ToString_nullable_enum_property_projection(async); + + AssertSql( + """ +SELECT IIF(`w`.`AmmunitionType` = 1, 'Cartridge', IIF(`w`.`AmmunitionType` = 2, 'Shell', IIF((`w`.`AmmunitionType` & '') IS NULL, '', (`w`.`AmmunitionType` & '')))) +FROM `Weapons` AS `w` +"""); + } + + public override async Task ToString_enum_contains(bool async) + { + await base.ToString_enum_contains(async); + + AssertSql( + """ +SELECT `m`.`CodeName` +FROM `Missions` AS `m` +WHERE (`m`.`Difficulty` & '') LIKE '%Med%' +"""); + } + + public override async Task ToString_nullable_enum_contains(bool async) + { + await base.ToString_nullable_enum_contains(async); + + AssertSql( + """ +SELECT `w`.`Name` +FROM `Weapons` AS `w` +WHERE IIF(`w`.`AmmunitionType` = 1, 'Cartridge', IIF(`w`.`AmmunitionType` = 2, 'Shell', IIF((`w`.`AmmunitionType` & '') IS NULL, '', (`w`.`AmmunitionType` & '')))) LIKE '%Cart%' +"""); + } + public override async Task Correlated_collections_naked_navigation_with_ToList(bool isAsync) { await base.Correlated_collections_naked_navigation_with_ToList(isAsync); @@ -3889,14 +3968,14 @@ public override async Task Correlated_collections_basic_projection(bool isAsync) await base.Correlated_collections_basic_projection(isAsync); AssertSql( -""" -SELECT `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `t`.`AmmunitionType`, `t`.`IsAutomatic`, `t`.`Name`, `t`.`OwnerFullName`, `t`.`SynergyWithId` + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` FROM `Gears` AS `g` LEFT JOIN ( SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM `Weapons` AS `w` WHERE `w`.`IsAutomatic` = TRUE OR `w`.`Name` <> 'foo' OR `w`.`Name` IS NULL -) AS `t` ON `g`.`FullName` = `t`.`OwnerFullName` +) AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` WHERE `g`.`Nickname` <> 'Marcus' ORDER BY `g`.`Nickname`, `g`.`SquadId` """); @@ -3907,14 +3986,14 @@ public override async Task Correlated_collections_basic_projection_explicit_to_l await base.Correlated_collections_basic_projection_explicit_to_list(isAsync); AssertSql( -""" -SELECT `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `t`.`AmmunitionType`, `t`.`IsAutomatic`, `t`.`Name`, `t`.`OwnerFullName`, `t`.`SynergyWithId` + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` FROM `Gears` AS `g` LEFT JOIN ( SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM `Weapons` AS `w` WHERE `w`.`IsAutomatic` = TRUE OR `w`.`Name` <> 'foo' OR `w`.`Name` IS NULL -) AS `t` ON `g`.`FullName` = `t`.`OwnerFullName` +) AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` WHERE `g`.`Nickname` <> 'Marcus' ORDER BY `g`.`Nickname`, `g`.`SquadId` """); @@ -3925,14 +4004,14 @@ public override async Task Correlated_collections_basic_projection_explicit_to_a await base.Correlated_collections_basic_projection_explicit_to_array(isAsync); AssertSql( -""" -SELECT `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `t`.`AmmunitionType`, `t`.`IsAutomatic`, `t`.`Name`, `t`.`OwnerFullName`, `t`.`SynergyWithId` + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` FROM `Gears` AS `g` LEFT JOIN ( SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM `Weapons` AS `w` WHERE `w`.`IsAutomatic` = TRUE OR `w`.`Name` <> 'foo' OR `w`.`Name` IS NULL -) AS `t` ON `g`.`FullName` = `t`.`OwnerFullName` +) AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` WHERE `g`.`Nickname` <> 'Marcus' ORDER BY `g`.`Nickname`, `g`.`SquadId` """); @@ -3943,16 +4022,16 @@ public override async Task Correlated_collections_basic_projection_ordered(bool await base.Correlated_collections_basic_projection_ordered(isAsync); AssertSql( -""" -SELECT `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `t`.`AmmunitionType`, `t`.`IsAutomatic`, `t`.`Name`, `t`.`OwnerFullName`, `t`.`SynergyWithId` + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` FROM `Gears` AS `g` LEFT JOIN ( SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM `Weapons` AS `w` WHERE `w`.`IsAutomatic` = TRUE OR `w`.`Name` <> 'foo' OR `w`.`Name` IS NULL -) AS `t` ON `g`.`FullName` = `t`.`OwnerFullName` +) AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` WHERE `g`.`Nickname` <> 'Marcus' -ORDER BY `g`.`Nickname`, `g`.`SquadId`, `t`.`Name` DESC +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `w0`.`Name` DESC """); } @@ -3962,16 +4041,16 @@ public override async Task Correlated_collections_basic_projection_composite_key AssertSql( """ - SELECT `g`.`Nickname`, `g`.`SquadId`, `t`.`Nickname`, `t`.`FullName`, `t`.`SquadId` - FROM `Gears` AS `g` - LEFT JOIN ( - SELECT `g0`.`Nickname`, `g0`.`FullName`, `g0`.`SquadId`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId` - FROM `Gears` AS `g0` - WHERE `g0`.`HasSoulPatch` <> TRUE - ) AS `t` ON `g`.`Nickname` = `t`.`LeaderNickname` AND `g`.`SquadId` = `t`.`LeaderSquadId` - WHERE `g`.`Discriminator` = 'Officer' AND `g`.`Nickname` <> 'Foo' - ORDER BY `g`.`Nickname`, `g`.`SquadId`, `t`.`Nickname` - """); +SELECT `g`.`Nickname`, `g`.`SquadId`, `g1`.`Nickname`, `g1`.`FullName`, `g1`.`SquadId` +FROM `Gears` AS `g` +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`FullName`, `g0`.`SquadId`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId` + FROM `Gears` AS `g0` + WHERE `g0`.`HasSoulPatch` <> TRUE +) AS `g1` ON `g`.`Nickname` = `g1`.`LeaderNickname` AND `g`.`SquadId` = `g1`.`LeaderSquadId` +WHERE `g`.`Discriminator` = 'Officer' AND `g`.`Nickname` <> 'Foo' +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `g1`.`Nickname` +"""); } public override async Task Correlated_collections_basic_projecting_single_property(bool isAsync) @@ -3979,14 +4058,14 @@ public override async Task Correlated_collections_basic_projecting_single_proper await base.Correlated_collections_basic_projecting_single_property(isAsync); AssertSql( -""" -SELECT `g`.`Nickname`, `g`.`SquadId`, `t`.`Name`, `t`.`Id` + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `w0`.`Name`, `w0`.`Id` FROM `Gears` AS `g` LEFT JOIN ( SELECT `w`.`Name`, `w`.`Id`, `w`.`OwnerFullName` FROM `Weapons` AS `w` WHERE `w`.`IsAutomatic` = TRUE OR `w`.`Name` <> 'foo' OR `w`.`Name` IS NULL -) AS `t` ON `g`.`FullName` = `t`.`OwnerFullName` +) AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` WHERE `g`.`Nickname` <> 'Marcus' ORDER BY `g`.`Nickname`, `g`.`SquadId` """); @@ -3997,14 +4076,14 @@ public override async Task Correlated_collections_basic_projecting_constant(bool await base.Correlated_collections_basic_projecting_constant(isAsync); AssertSql( -""" -SELECT `g`.`Nickname`, `g`.`SquadId`, `t`.`c`, `t`.`Id` + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `w0`.`c`, `w0`.`Id` FROM `Gears` AS `g` LEFT JOIN ( SELECT 'BFG' AS `c`, `w`.`Id`, `w`.`OwnerFullName` FROM `Weapons` AS `w` WHERE `w`.`IsAutomatic` = TRUE OR `w`.`Name` <> 'foo' OR `w`.`Name` IS NULL -) AS `t` ON `g`.`FullName` = `t`.`OwnerFullName` +) AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` WHERE `g`.`Nickname` <> 'Marcus' ORDER BY `g`.`Nickname`, `g`.`SquadId` """); @@ -4015,14 +4094,14 @@ public override async Task Correlated_collections_basic_projecting_constant_bool await base.Correlated_collections_basic_projecting_constant_bool(isAsync); AssertSql( -""" -SELECT `g`.`Nickname`, `g`.`SquadId`, `t`.`c`, `t`.`Id` + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `w0`.`c`, `w0`.`Id` FROM `Gears` AS `g` LEFT JOIN ( SELECT TRUE AS `c`, `w`.`Id`, `w`.`OwnerFullName` FROM `Weapons` AS `w` WHERE `w`.`IsAutomatic` = TRUE OR `w`.`Name` <> 'foo' OR `w`.`Name` IS NULL -) AS `t` ON `g`.`FullName` = `t`.`OwnerFullName` +) AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` WHERE `g`.`Nickname` <> 'Marcus' ORDER BY `g`.`Nickname`, `g`.`SquadId` """); @@ -4034,17 +4113,17 @@ public override async Task Correlated_collections_projection_of_collection_thru_ AssertSql( """ - SELECT `g`.`Nickname`, `g`.`SquadId`, `s`.`Id`, `t`.`SquadId`, `t`.`MissionId` - FROM (`Gears` AS `g` - INNER JOIN `Squads` AS `s` ON `g`.`SquadId` = `s`.`Id`) - LEFT JOIN ( - SELECT `s0`.`SquadId`, `s0`.`MissionId` - FROM `SquadMissions` AS `s0` - WHERE `s0`.`MissionId` <> 17 - ) AS `t` ON `s`.`Id` = `t`.`SquadId` - WHERE `g`.`Nickname` <> 'Marcus' - ORDER BY `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `s`.`Id`, `t`.`SquadId` - """); +SELECT `g`.`Nickname`, `g`.`SquadId`, `s`.`Id`, `s1`.`SquadId`, `s1`.`MissionId` +FROM (`Gears` AS `g` +INNER JOIN `Squads` AS `s` ON `g`.`SquadId` = `s`.`Id`) +LEFT JOIN ( + SELECT `s0`.`SquadId`, `s0`.`MissionId` + FROM `SquadMissions` AS `s0` + WHERE `s0`.`MissionId` <> 17 +) AS `s1` ON `s`.`Id` = `s1`.`SquadId` +WHERE `g`.`Nickname` <> 'Marcus' +ORDER BY `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `s`.`Id`, `s1`.`SquadId` +"""); } public override async Task Correlated_collections_project_anonymous_collection_result(bool isAsync) @@ -4067,20 +4146,20 @@ public override async Task Correlated_collections_nested(bool isAsync) AssertSql( """ -SELECT `s`.`Id`, `t0`.`SquadId`, `t0`.`MissionId`, `t0`.`Id`, `t0`.`SquadId0`, `t0`.`MissionId0` +SELECT `s`.`Id`, `s3`.`SquadId`, `s3`.`MissionId`, `s3`.`Id`, `s3`.`SquadId0`, `s3`.`MissionId0` FROM `Squads` AS `s` LEFT JOIN ( - SELECT `s0`.`SquadId`, `s0`.`MissionId`, `m`.`Id`, `t`.`SquadId` AS `SquadId0`, `t`.`MissionId` AS `MissionId0` + SELECT `s0`.`SquadId`, `s0`.`MissionId`, `m`.`Id`, `s2`.`SquadId` AS `SquadId0`, `s2`.`MissionId` AS `MissionId0` FROM (`SquadMissions` AS `s0` INNER JOIN `Missions` AS `m` ON `s0`.`MissionId` = `m`.`Id`) LEFT JOIN ( SELECT `s1`.`SquadId`, `s1`.`MissionId` FROM `SquadMissions` AS `s1` WHERE `s1`.`SquadId` < 7 - ) AS `t` ON `m`.`Id` = `t`.`MissionId` + ) AS `s2` ON `m`.`Id` = `s2`.`MissionId` WHERE `s0`.`MissionId` < 42 -) AS `t0` ON `s`.`Id` = `t0`.`SquadId` -ORDER BY `s`.`Id`, `t0`.`SquadId`, `t0`.`MissionId`, `t0`.`Id`, `t0`.`SquadId0` +) AS `s3` ON `s`.`Id` = `s3`.`SquadId` +ORDER BY `s`.`Id`, `s3`.`SquadId`, `s3`.`MissionId`, `s3`.`Id`, `s3`.`SquadId0` """); } @@ -4090,20 +4169,20 @@ public override async Task Correlated_collections_nested_mixed_streaming_with_bu AssertSql( """ -SELECT `s`.`Id`, `t0`.`SquadId`, `t0`.`MissionId`, `t0`.`Id`, `t0`.`SquadId0`, `t0`.`MissionId0` +SELECT `s`.`Id`, `s3`.`SquadId`, `s3`.`MissionId`, `s3`.`Id`, `s3`.`SquadId0`, `s3`.`MissionId0` FROM `Squads` AS `s` LEFT JOIN ( - SELECT `s0`.`SquadId`, `s0`.`MissionId`, `m`.`Id`, `t`.`SquadId` AS `SquadId0`, `t`.`MissionId` AS `MissionId0` + SELECT `s0`.`SquadId`, `s0`.`MissionId`, `m`.`Id`, `s2`.`SquadId` AS `SquadId0`, `s2`.`MissionId` AS `MissionId0` FROM (`SquadMissions` AS `s0` INNER JOIN `Missions` AS `m` ON `s0`.`MissionId` = `m`.`Id`) LEFT JOIN ( SELECT `s1`.`SquadId`, `s1`.`MissionId` FROM `SquadMissions` AS `s1` WHERE `s1`.`SquadId` < 2 - ) AS `t` ON `m`.`Id` = `t`.`MissionId` + ) AS `s2` ON `m`.`Id` = `s2`.`MissionId` WHERE `s0`.`MissionId` < 3 -) AS `t0` ON `s`.`Id` = `t0`.`SquadId` -ORDER BY `s`.`Id`, `t0`.`SquadId`, `t0`.`MissionId`, `t0`.`Id`, `t0`.`SquadId0` +) AS `s3` ON `s`.`Id` = `s3`.`SquadId` +ORDER BY `s`.`Id`, `s3`.`SquadId`, `s3`.`MissionId`, `s3`.`Id`, `s3`.`SquadId0` """); } @@ -4113,20 +4192,20 @@ public override async Task Correlated_collections_nested_mixed_streaming_with_bu AssertSql( """ -SELECT `s`.`Id`, `t0`.`SquadId`, `t0`.`MissionId`, `t0`.`Id`, `t0`.`SquadId0`, `t0`.`MissionId0` +SELECT `s`.`Id`, `s3`.`SquadId`, `s3`.`MissionId`, `s3`.`Id`, `s3`.`SquadId0`, `s3`.`MissionId0` FROM `Squads` AS `s` LEFT JOIN ( - SELECT `s0`.`SquadId`, `s0`.`MissionId`, `m`.`Id`, `t`.`SquadId` AS `SquadId0`, `t`.`MissionId` AS `MissionId0` + SELECT `s0`.`SquadId`, `s0`.`MissionId`, `m`.`Id`, `s2`.`SquadId` AS `SquadId0`, `s2`.`MissionId` AS `MissionId0` FROM (`SquadMissions` AS `s0` INNER JOIN `Missions` AS `m` ON `s0`.`MissionId` = `m`.`Id`) LEFT JOIN ( SELECT `s1`.`SquadId`, `s1`.`MissionId` FROM `SquadMissions` AS `s1` WHERE `s1`.`SquadId` < 7 - ) AS `t` ON `m`.`Id` = `t`.`MissionId` + ) AS `s2` ON `m`.`Id` = `s2`.`MissionId` WHERE `s0`.`MissionId` < 42 -) AS `t0` ON `s`.`Id` = `t0`.`SquadId` -ORDER BY `s`.`Id`, `t0`.`SquadId`, `t0`.`MissionId`, `t0`.`Id`, `t0`.`SquadId0` +) AS `s3` ON `s`.`Id` = `s3`.`SquadId` +ORDER BY `s`.`Id`, `s3`.`SquadId`, `s3`.`MissionId`, `s3`.`Id`, `s3`.`SquadId0` """); } @@ -4135,21 +4214,21 @@ public override async Task Correlated_collections_nested_with_custom_ordering(bo await base.Correlated_collections_nested_with_custom_ordering(isAsync); AssertSql( -""" -SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `t0`.`FullName`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`Id`, `t0`.`AmmunitionType`, `t0`.`IsAutomatic`, `t0`.`Name`, `t0`.`OwnerFullName`, `t0`.`SynergyWithId` + """ +SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `s`.`FullName`, `s`.`Nickname`, `s`.`SquadId`, `s`.`Id`, `s`.`AmmunitionType`, `s`.`IsAutomatic`, `s`.`Name`, `s`.`OwnerFullName`, `s`.`SynergyWithId` FROM `Gears` AS `g` LEFT JOIN ( - SELECT `g0`.`FullName`, `g0`.`Nickname`, `g0`.`SquadId`, `t`.`Id`, `t`.`AmmunitionType`, `t`.`IsAutomatic`, `t`.`Name`, `t`.`OwnerFullName`, `t`.`SynergyWithId`, `g0`.`Rank`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId` + SELECT `g0`.`FullName`, `g0`.`Nickname`, `g0`.`SquadId`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId`, `g0`.`Rank`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId` FROM `Gears` AS `g0` LEFT JOIN ( SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM `Weapons` AS `w` WHERE `w`.`Name` <> 'Bar' OR `w`.`Name` IS NULL - ) AS `t` ON `g0`.`FullName` = `t`.`OwnerFullName` + ) AS `w0` ON `g0`.`FullName` = `w0`.`OwnerFullName` WHERE `g0`.`FullName` <> 'Foo' -) AS `t0` ON `g`.`Nickname` = `t0`.`LeaderNickname` AND `g`.`SquadId` = `t0`.`LeaderSquadId` +) AS `s` ON `g`.`Nickname` = `s`.`LeaderNickname` AND `g`.`SquadId` = `s`.`LeaderSquadId` WHERE `g`.`Discriminator` = 'Officer' -ORDER BY NOT (`g`.`HasSoulPatch`) DESC, `g`.`Nickname`, `g`.`SquadId`, `t0`.`Rank`, `t0`.`Nickname`, `t0`.`SquadId`, NOT (`t0`.`IsAutomatic`) +ORDER BY NOT (`g`.`HasSoulPatch`) DESC, `g`.`Nickname`, `g`.`SquadId`, `s`.`Rank`, `s`.`Nickname`, `s`.`SquadId`, NOT (`s`.`IsAutomatic`) """); } @@ -4159,19 +4238,19 @@ public override async Task Correlated_collections_same_collection_projected_mult AssertSql( """ -SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `t`.`AmmunitionType`, `t`.`IsAutomatic`, `t`.`Name`, `t`.`OwnerFullName`, `t`.`SynergyWithId`, `t0`.`Id`, `t0`.`AmmunitionType`, `t0`.`IsAutomatic`, `t0`.`Name`, `t0`.`OwnerFullName`, `t0`.`SynergyWithId` +SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `w1`.`Id`, `w1`.`AmmunitionType`, `w1`.`IsAutomatic`, `w1`.`Name`, `w1`.`OwnerFullName`, `w1`.`SynergyWithId`, `w2`.`Id`, `w2`.`AmmunitionType`, `w2`.`IsAutomatic`, `w2`.`Name`, `w2`.`OwnerFullName`, `w2`.`SynergyWithId` FROM (`Gears` AS `g` LEFT JOIN ( SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM `Weapons` AS `w` WHERE `w`.`IsAutomatic` = TRUE -) AS `t` ON `g`.`FullName` = `t`.`OwnerFullName`) +) AS `w1` ON `g`.`FullName` = `w1`.`OwnerFullName`) LEFT JOIN ( SELECT `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` FROM `Weapons` AS `w0` WHERE `w0`.`IsAutomatic` = TRUE -) AS `t0` ON `g`.`FullName` = `t0`.`OwnerFullName` -ORDER BY `g`.`Nickname`, `g`.`SquadId`, `t`.`Id` +) AS `w2` ON `g`.`FullName` = `w2`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `w1`.`Id` """); } @@ -4181,19 +4260,19 @@ public override async Task Correlated_collections_similar_collection_projected_m AssertSql( """ -SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `t`.`AmmunitionType`, `t`.`IsAutomatic`, `t`.`Name`, `t`.`OwnerFullName`, `t`.`SynergyWithId`, `t0`.`Id`, `t0`.`AmmunitionType`, `t0`.`IsAutomatic`, `t0`.`Name`, `t0`.`OwnerFullName`, `t0`.`SynergyWithId` +SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `w1`.`Id`, `w1`.`AmmunitionType`, `w1`.`IsAutomatic`, `w1`.`Name`, `w1`.`OwnerFullName`, `w1`.`SynergyWithId`, `w2`.`Id`, `w2`.`AmmunitionType`, `w2`.`IsAutomatic`, `w2`.`Name`, `w2`.`OwnerFullName`, `w2`.`SynergyWithId` FROM (`Gears` AS `g` LEFT JOIN ( SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM `Weapons` AS `w` WHERE `w`.`IsAutomatic` = TRUE -) AS `t` ON `g`.`FullName` = `t`.`OwnerFullName`) +) AS `w1` ON `g`.`FullName` = `w1`.`OwnerFullName`) LEFT JOIN ( SELECT `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` FROM `Weapons` AS `w0` WHERE `w0`.`IsAutomatic` <> TRUE -) AS `t0` ON `g`.`FullName` = `t0`.`OwnerFullName` -ORDER BY `g`.`Rank`, `g`.`Nickname`, `g`.`SquadId`, `t`.`OwnerFullName`, `t`.`Id`, NOT (`t0`.`IsAutomatic`) +) AS `w2` ON `g`.`FullName` = `w2`.`OwnerFullName` +ORDER BY `g`.`Rank`, `g`.`Nickname`, `g`.`SquadId`, `w1`.`OwnerFullName`, `w1`.`Id`, NOT (`w2`.`IsAutomatic`) """); } @@ -4203,16 +4282,16 @@ public override async Task Correlated_collections_different_collections_projecte AssertSql( """ -SELECT `g`.`Nickname`, `g`.`SquadId`, `t`.`Name`, `t`.`IsAutomatic`, `t`.`Id`, `g0`.`Nickname`, `g0`.`Rank`, `g0`.`SquadId` +SELECT `g`.`Nickname`, `g`.`SquadId`, `w0`.`Name`, `w0`.`IsAutomatic`, `w0`.`Id`, `g0`.`Nickname`, `g0`.`Rank`, `g0`.`SquadId` FROM (`Gears` AS `g` LEFT JOIN ( SELECT `w`.`Name`, `w`.`IsAutomatic`, `w`.`Id`, `w`.`OwnerFullName` FROM `Weapons` AS `w` WHERE `w`.`IsAutomatic` = TRUE -) AS `t` ON `g`.`FullName` = `t`.`OwnerFullName`) +) AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName`) LEFT JOIN `Gears` AS `g0` ON `g`.`Nickname` = `g0`.`LeaderNickname` AND `g`.`SquadId` = `g0`.`LeaderSquadId` WHERE `g`.`Discriminator` = 'Officer' -ORDER BY `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `g0`.`FullName`, `g0`.`Nickname` +ORDER BY `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `w0`.`Id`, `g0`.`FullName`, `g0`.`Nickname` """); } @@ -4239,7 +4318,7 @@ public override async Task Multiple_orderby_with_navigation_expansion_on_one_of_ AssertSql( """ -SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `g1`.`Nickname`, `g1`.`SquadId`, `t0`.`Id`, `t0`.`AmmunitionType`, `t0`.`IsAutomatic`, `t0`.`Name`, `t0`.`OwnerFullName`, `t0`.`SynergyWithId`, `t0`.`Nickname`, `t0`.`SquadId` +SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `g1`.`Nickname`, `g1`.`SquadId`, `s`.`Id`, `s`.`AmmunitionType`, `s`.`IsAutomatic`, `s`.`Name`, `s`.`OwnerFullName`, `s`.`SynergyWithId`, `s`.`Nickname`, `s`.`SquadId` FROM ((`Gears` AS `g` LEFT JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName` AND `g`.`SquadId` = `t`.`GearSquadId`) LEFT JOIN `Gears` AS `g1` ON `t`.`GearNickName` = `g1`.`Nickname` AND `t`.`GearSquadId` = `g1`.`SquadId`) @@ -4247,12 +4326,12 @@ LEFT JOIN ( SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `g2`.`Nickname`, `g2`.`SquadId` FROM `Weapons` AS `w` LEFT JOIN `Gears` AS `g2` ON `w`.`OwnerFullName` = `g2`.`FullName` -) AS `t0` ON `g1`.`FullName` = `t0`.`OwnerFullName` +) AS `s` ON `g1`.`FullName` = `s`.`OwnerFullName` WHERE `g`.`Discriminator` = 'Officer' AND EXISTS ( SELECT 1 FROM `Gears` AS `g0` WHERE `g`.`Nickname` = `g0`.`LeaderNickname` AND `g`.`SquadId` = `g0`.`LeaderSquadId`) -ORDER BY NOT (`g`.`HasSoulPatch`) DESC, `t`.`Note`, `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `g1`.`Nickname`, `g1`.`SquadId`, NOT (`t0`.`IsAutomatic`), `t0`.`Nickname` DESC, `t0`.`Id` +ORDER BY NOT (`g`.`HasSoulPatch`) DESC, `t`.`Note`, `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `g1`.`Nickname`, `g1`.`SquadId`, NOT (`s`.`IsAutomatic`), `s`.`Nickname` DESC, `s`.`Id` """); } @@ -4263,7 +4342,7 @@ public override async Task Multiple_orderby_with_navigation_expansion_on_one_of_ AssertSql( """ -SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `g1`.`Nickname`, `g1`.`SquadId`, `t0`.`Id`, `t0`.`AmmunitionType`, `t0`.`IsAutomatic`, `t0`.`Name`, `t0`.`OwnerFullName`, `t0`.`SynergyWithId`, `t0`.`Nickname`, `t0`.`SquadId` +SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `g1`.`Nickname`, `g1`.`SquadId`, `s`.`Id`, `s`.`AmmunitionType`, `s`.`IsAutomatic`, `s`.`Name`, `s`.`OwnerFullName`, `s`.`SynergyWithId`, `s`.`Nickname`, `s`.`SquadId` FROM ((`Gears` AS `g` LEFT JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName` AND `g`.`SquadId` = `t`.`GearSquadId`) LEFT JOIN `Gears` AS `g1` ON `t`.`GearNickName` = `g1`.`Nickname` AND `t`.`GearSquadId` = `g1`.`SquadId`) @@ -4271,12 +4350,12 @@ LEFT JOIN ( SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `g2`.`Nickname`, `g2`.`SquadId` FROM `Weapons` AS `w` LEFT JOIN `Gears` AS `g2` ON `w`.`OwnerFullName` = `g2`.`FullName` -) AS `t0` ON `g1`.`FullName` = `t0`.`OwnerFullName` +) AS `s` ON `g1`.`FullName` = `s`.`OwnerFullName` WHERE `g`.`Discriminator` = 'Officer' AND EXISTS ( SELECT 1 FROM `Gears` AS `g0` WHERE `g`.`Nickname` = `g0`.`LeaderNickname` AND `g`.`SquadId` = `g0`.`LeaderSquadId`) -ORDER BY NOT (`g`.`HasSoulPatch`) DESC, `t`.`Note`, `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `g1`.`Nickname`, `g1`.`SquadId`, NOT (`t0`.`IsAutomatic`), `t0`.`Nickname` DESC, `t0`.`Id` +ORDER BY NOT (`g`.`HasSoulPatch`) DESC, `t`.`Note`, `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `g1`.`Nickname`, `g1`.`SquadId`, NOT (`s`.`IsAutomatic`), `s`.`Nickname` DESC, `s`.`Id` """); } @@ -4286,8 +4365,8 @@ public override async Task Multiple_orderby_with_navigation_expansion_on_one_of_ await base.Multiple_orderby_with_navigation_expansion_on_one_of_the_order_bys_inside_subquery_complex_orderings(isAsync); AssertSql( -""" -SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `g1`.`Nickname`, `g1`.`SquadId`, `t0`.`Id`, `t0`.`AmmunitionType`, `t0`.`IsAutomatic`, `t0`.`Name`, `t0`.`OwnerFullName`, `t0`.`SynergyWithId`, `t0`.`Nickname`, `t0`.`SquadId` + """ +SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `g1`.`Nickname`, `g1`.`SquadId`, `s`.`Id`, `s`.`AmmunitionType`, `s`.`IsAutomatic`, `s`.`Name`, `s`.`OwnerFullName`, `s`.`SynergyWithId`, `s`.`Nickname`, `s`.`SquadId` FROM ((`Gears` AS `g` LEFT JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName` AND `g`.`SquadId` = `t`.`GearSquadId`) LEFT JOIN `Gears` AS `g1` ON `t`.`GearNickName` = `g1`.`Nickname` AND `t`.`GearSquadId` = `g1`.`SquadId`) @@ -4298,12 +4377,12 @@ SELECT COUNT(*) WHERE `g2`.`FullName` IS NOT NULL AND `g2`.`FullName` = `w0`.`OwnerFullName`) AS `c` FROM `Weapons` AS `w` LEFT JOIN `Gears` AS `g2` ON `w`.`OwnerFullName` = `g2`.`FullName` -) AS `t0` ON `g1`.`FullName` = `t0`.`OwnerFullName` +) AS `s` ON `g1`.`FullName` = `s`.`OwnerFullName` WHERE `g`.`Discriminator` = 'Officer' AND EXISTS ( SELECT 1 FROM `Gears` AS `g0` WHERE `g`.`Nickname` = `g0`.`LeaderNickname` AND `g`.`SquadId` = `g0`.`LeaderSquadId`) -ORDER BY NOT (`g`.`HasSoulPatch`) DESC, `t`.`Note`, `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `g1`.`Nickname`, `g1`.`SquadId`, `t0`.`Id` DESC, `t0`.`c`, `t0`.`Nickname` +ORDER BY NOT (`g`.`HasSoulPatch`) DESC, `t`.`Note`, `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `g1`.`Nickname`, `g1`.`SquadId`, `s`.`Id` DESC, `s`.`c`, `s`.`Nickname` """); } @@ -4312,13 +4391,13 @@ public override async Task Correlated_collections_multiple_nested_complex_collec await base.Correlated_collections_multiple_nested_complex_collections(isAsync); AssertSql( -""" -SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `g1`.`Nickname`, `g1`.`SquadId`, `t0`.`FullName`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`Id`, `t0`.`Nickname0`, `t0`.`SquadId0`, `t0`.`Id0`, `t0`.`Name`, `t0`.`IsAutomatic`, `t0`.`Id1`, `t0`.`Nickname00`, `t0`.`HasSoulPatch`, `t0`.`SquadId00`, `t2`.`Id`, `t2`.`AmmunitionType`, `t2`.`IsAutomatic`, `t2`.`Name`, `t2`.`OwnerFullName`, `t2`.`SynergyWithId`, `t2`.`Nickname`, `t2`.`SquadId` + """ +SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `g1`.`Nickname`, `g1`.`SquadId`, `s1`.`FullName`, `s1`.`Nickname`, `s1`.`SquadId`, `s1`.`Id`, `s1`.`Nickname0`, `s1`.`SquadId0`, `s1`.`Id0`, `s1`.`Name`, `s1`.`IsAutomatic`, `s1`.`Id1`, `s1`.`Nickname00`, `s1`.`HasSoulPatch`, `s1`.`SquadId00`, `s2`.`Id`, `s2`.`AmmunitionType`, `s2`.`IsAutomatic`, `s2`.`Name`, `s2`.`OwnerFullName`, `s2`.`SynergyWithId`, `s2`.`Nickname`, `s2`.`SquadId` FROM (((`Gears` AS `g` LEFT JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName` AND `g`.`SquadId` = `t`.`GearSquadId`) LEFT JOIN `Gears` AS `g1` ON `t`.`GearNickName` = `g1`.`Nickname` AND `t`.`GearSquadId` = `g1`.`SquadId`) LEFT JOIN ( - SELECT `g2`.`FullName`, `g2`.`Nickname`, `g2`.`SquadId`, `t1`.`Id`, `t1`.`Nickname` AS `Nickname0`, `t1`.`SquadId` AS `SquadId0`, `t1`.`Id0`, `t1`.`Name`, `t1`.`IsAutomatic`, `t1`.`Id1`, `t1`.`Nickname0` AS `Nickname00`, `t1`.`HasSoulPatch`, `t1`.`SquadId0` AS `SquadId00`, `g2`.`Rank`, `t1`.`IsAutomatic0`, `g2`.`LeaderNickname`, `g2`.`LeaderSquadId` + SELECT `g2`.`FullName`, `g2`.`Nickname`, `g2`.`SquadId`, `s0`.`Id`, `s0`.`Nickname` AS `Nickname0`, `s0`.`SquadId` AS `SquadId0`, `s0`.`Id0`, `s0`.`Name`, `s0`.`IsAutomatic`, `s0`.`Id1`, `s0`.`Nickname0` AS `Nickname00`, `s0`.`HasSoulPatch`, `s0`.`SquadId0` AS `SquadId00`, `g2`.`Rank`, `s0`.`IsAutomatic0`, `g2`.`LeaderNickname`, `g2`.`LeaderSquadId` FROM `Gears` AS `g2` LEFT JOIN ( SELECT `w`.`Id`, `g3`.`Nickname`, `g3`.`SquadId`, `s`.`Id` AS `Id0`, `w0`.`Name`, `w0`.`IsAutomatic`, `w0`.`Id` AS `Id1`, `g4`.`Nickname` AS `Nickname0`, `g4`.`HasSoulPatch`, `g4`.`SquadId` AS `SquadId0`, `w`.`IsAutomatic` AS `IsAutomatic0`, `w`.`OwnerFullName` @@ -4328,19 +4407,19 @@ LEFT JOIN ( LEFT JOIN `Weapons` AS `w0` ON `g3`.`FullName` = `w0`.`OwnerFullName`) LEFT JOIN `Gears` AS `g4` ON `s`.`Id` = `g4`.`SquadId` WHERE `w`.`Name` <> 'Bar' OR `w`.`Name` IS NULL - ) AS `t1` ON `g2`.`FullName` = `t1`.`OwnerFullName` + ) AS `s0` ON `g2`.`FullName` = `s0`.`OwnerFullName` WHERE `g2`.`FullName` <> 'Foo' -) AS `t0` ON `g`.`Nickname` = `t0`.`LeaderNickname` AND `g`.`SquadId` = `t0`.`LeaderSquadId`) +) AS `s1` ON `g`.`Nickname` = `s1`.`LeaderNickname` AND `g`.`SquadId` = `s1`.`LeaderSquadId`) LEFT JOIN ( SELECT `w1`.`Id`, `w1`.`AmmunitionType`, `w1`.`IsAutomatic`, `w1`.`Name`, `w1`.`OwnerFullName`, `w1`.`SynergyWithId`, `g5`.`Nickname`, `g5`.`SquadId` FROM `Weapons` AS `w1` LEFT JOIN `Gears` AS `g5` ON `w1`.`OwnerFullName` = `g5`.`FullName` -) AS `t2` ON `g1`.`FullName` = `t2`.`OwnerFullName` +) AS `s2` ON `g1`.`FullName` = `s2`.`OwnerFullName` WHERE `g`.`Discriminator` = 'Officer' AND EXISTS ( SELECT 1 FROM `Gears` AS `g0` WHERE `g`.`Nickname` = `g0`.`LeaderNickname` AND `g`.`SquadId` = `g0`.`LeaderSquadId`) -ORDER BY NOT (`g`.`HasSoulPatch`) DESC, `t`.`Note`, `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `g1`.`Nickname`, `g1`.`SquadId`, `t0`.`Rank`, `t0`.`Nickname`, `t0`.`SquadId`, NOT (`t0`.`IsAutomatic0`), `t0`.`Id`, `t0`.`Nickname0`, `t0`.`SquadId0`, `t0`.`Id0`, `t0`.`Id1`, `t0`.`Nickname00`, `t0`.`SquadId00`, NOT (`t2`.`IsAutomatic`), `t2`.`Nickname` DESC, `t2`.`Id` +ORDER BY NOT (`g`.`HasSoulPatch`) DESC, `t`.`Note`, `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `g1`.`Nickname`, `g1`.`SquadId`, `s1`.`Rank`, `s1`.`Nickname`, `s1`.`SquadId`, NOT (`s1`.`IsAutomatic0`), `s1`.`Id`, `s1`.`Nickname0`, `s1`.`SquadId0`, `s1`.`Id0`, `s1`.`Id1`, `s1`.`Nickname00`, `s1`.`SquadId00`, NOT (`s2`.`IsAutomatic`), `s2`.`Nickname` DESC, `s2`.`Id` """); } @@ -4555,16 +4634,16 @@ public override async Task Correlated_collections_left_join_with_self_reference( await base.Correlated_collections_left_join_with_self_reference(isAsync); AssertSql( -""" -SELECT `t`.`Note`, `t`.`Id`, `t0`.`Nickname`, `t0`.`SquadId`, `g0`.`FullName`, `g0`.`Nickname`, `g0`.`SquadId` + """ +SELECT `t`.`Note`, `t`.`Id`, `g0`.`Nickname`, `g0`.`SquadId`, `g1`.`FullName`, `g1`.`Nickname`, `g1`.`SquadId` FROM (`Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId` FROM `Gears` AS `g` WHERE `g`.`Discriminator` = 'Officer' -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname`) -LEFT JOIN `Gears` AS `g0` ON (`t0`.`Nickname` = `g0`.`LeaderNickname` OR (`t0`.`Nickname` IS NULL AND `g0`.`LeaderNickname` IS NULL)) AND `t0`.`SquadId` = `g0`.`LeaderSquadId` -ORDER BY `t`.`Id`, `t0`.`Nickname`, `t0`.`SquadId`, `g0`.`Nickname` +) AS `g0` ON `t`.`GearNickName` = `g0`.`Nickname`) +LEFT JOIN `Gears` AS `g1` ON (`g0`.`Nickname` = `g1`.`LeaderNickname` OR (`g0`.`Nickname` IS NULL AND `g1`.`LeaderNickname` IS NULL)) AND `g0`.`SquadId` = `g1`.`LeaderSquadId` +ORDER BY `t`.`Id`, `g0`.`Nickname`, `g0`.`SquadId`, `g1`.`Nickname` """); } @@ -4574,21 +4653,21 @@ public override async Task Correlated_collections_deeply_nested_left_join(bool i AssertSql( """ -SELECT `t`.`Id`, `g`.`Nickname`, `g`.`SquadId`, `s`.`Id`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`Id`, `t0`.`AmmunitionType`, `t0`.`IsAutomatic`, `t0`.`Name`, `t0`.`OwnerFullName`, `t0`.`SynergyWithId` +SELECT `t`.`Id`, `g`.`Nickname`, `g`.`SquadId`, `s`.`Id`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`Id`, `s0`.`AmmunitionType`, `s0`.`IsAutomatic`, `s0`.`Name`, `s0`.`OwnerFullName`, `s0`.`SynergyWithId` FROM ((`Tags` AS `t` LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname`) LEFT JOIN `Squads` AS `s` ON `g`.`SquadId` = `s`.`Id`) LEFT JOIN ( - SELECT `g0`.`Nickname`, `g0`.`SquadId`, `t1`.`Id`, `t1`.`AmmunitionType`, `t1`.`IsAutomatic`, `t1`.`Name`, `t1`.`OwnerFullName`, `t1`.`SynergyWithId` + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` FROM `Gears` AS `g0` LEFT JOIN ( SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM `Weapons` AS `w` WHERE `w`.`IsAutomatic` = TRUE - ) AS `t1` ON `g0`.`FullName` = `t1`.`OwnerFullName` + ) AS `w0` ON `g0`.`FullName` = `w0`.`OwnerFullName` WHERE `g0`.`HasSoulPatch` = TRUE -) AS `t0` ON `s`.`Id` = `t0`.`SquadId` -ORDER BY `t`.`Note`, `g`.`Nickname` DESC, `t`.`Id`, `g`.`SquadId`, `s`.`Id`, `t0`.`Nickname`, `t0`.`SquadId` +) AS `s0` ON `s`.`Id` = `s0`.`SquadId` +ORDER BY `t`.`Note`, `g`.`Nickname` DESC, `t`.`Id`, `g`.`SquadId`, `s`.`Id`, `s0`.`Nickname`, `s0`.`SquadId` """); } @@ -4598,20 +4677,20 @@ public override async Task Correlated_collections_from_left_join_with_additional AssertSql( """ -SELECT `w`.`Id`, `g`.`Nickname`, `g`.`SquadId`, `s`.`Id`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`Id`, `t0`.`AmmunitionType`, `t0`.`IsAutomatic`, `t0`.`Name`, `t0`.`OwnerFullName`, `t0`.`SynergyWithId`, `t0`.`Rank` +SELECT `w`.`Id`, `g`.`Nickname`, `g`.`SquadId`, `s`.`Id`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`Id`, `s0`.`AmmunitionType`, `s0`.`IsAutomatic`, `s0`.`Name`, `s0`.`OwnerFullName`, `s0`.`SynergyWithId`, `s0`.`Rank` FROM ((`Weapons` AS `w` LEFT JOIN `Gears` AS `g` ON `w`.`OwnerFullName` = `g`.`FullName`) LEFT JOIN `Squads` AS `s` ON `g`.`SquadId` = `s`.`Id`) LEFT JOIN ( - SELECT `g0`.`Nickname`, `g0`.`SquadId`, `t`.`Id`, `t`.`AmmunitionType`, `t`.`IsAutomatic`, `t`.`Name`, `t`.`OwnerFullName`, `t`.`SynergyWithId`, `g0`.`Rank`, `g0`.`FullName` + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `w1`.`Id`, `w1`.`AmmunitionType`, `w1`.`IsAutomatic`, `w1`.`Name`, `w1`.`OwnerFullName`, `w1`.`SynergyWithId`, `g0`.`Rank`, `g0`.`FullName` FROM `Gears` AS `g0` LEFT JOIN ( SELECT `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` FROM `Weapons` AS `w0` WHERE `w0`.`IsAutomatic` <> TRUE - ) AS `t` ON `g0`.`FullName` = `t`.`OwnerFullName` -) AS `t0` ON `s`.`Id` = `t0`.`SquadId` -ORDER BY `w`.`Name`, `w`.`Id`, `g`.`Nickname`, `g`.`SquadId`, `s`.`Id`, `t0`.`FullName` DESC, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`Id` + ) AS `w1` ON `g0`.`FullName` = `w1`.`OwnerFullName` +) AS `s0` ON `s`.`Id` = `s0`.`SquadId` +ORDER BY `w`.`Name`, `w`.`Id`, `g`.`Nickname`, `g`.`SquadId`, `s`.`Id`, `s0`.`FullName` DESC, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`Id` """); } @@ -4621,7 +4700,7 @@ public override async Task Correlated_collections_complex_scenario1(bool isAsync AssertSql( """ -SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `t`.`Nickname`, `t`.`SquadId`, `t`.`Id0`, `t`.`Nickname0`, `t`.`HasSoulPatch`, `t`.`SquadId0` +SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `s0`.`Id`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`Id0`, `s0`.`Nickname0`, `s0`.`HasSoulPatch`, `s0`.`SquadId0` FROM `Gears` AS `g` LEFT JOIN ( SELECT `w`.`Id`, `g0`.`Nickname`, `g0`.`SquadId`, `s`.`Id` AS `Id0`, `g1`.`Nickname` AS `Nickname0`, `g1`.`HasSoulPatch`, `g1`.`SquadId` AS `SquadId0`, `w`.`OwnerFullName` @@ -4629,8 +4708,8 @@ LEFT JOIN ( LEFT JOIN `Gears` AS `g0` ON `w`.`OwnerFullName` = `g0`.`FullName`) LEFT JOIN `Squads` AS `s` ON `g0`.`SquadId` = `s`.`Id`) LEFT JOIN `Gears` AS `g1` ON `s`.`Id` = `g1`.`SquadId` -) AS `t` ON `g`.`FullName` = `t`.`OwnerFullName` -ORDER BY `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `t`.`Nickname`, `t`.`SquadId`, `t`.`Id0`, `t`.`Nickname0` +) AS `s0` ON `g`.`FullName` = `s0`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s0`.`Id`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`Id0`, `s0`.`Nickname0` """); } @@ -4640,10 +4719,10 @@ public override async Task Correlated_collections_complex_scenario2(bool isAsync AssertSql( """ -SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `t0`.`FullName`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`Id`, `t0`.`Nickname0`, `t0`.`SquadId0`, `t0`.`Id0`, `t0`.`Nickname00`, `t0`.`HasSoulPatch`, `t0`.`SquadId00` +SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `s1`.`FullName`, `s1`.`Nickname`, `s1`.`SquadId`, `s1`.`Id`, `s1`.`Nickname0`, `s1`.`SquadId0`, `s1`.`Id0`, `s1`.`Nickname00`, `s1`.`HasSoulPatch`, `s1`.`SquadId00` FROM `Gears` AS `g` LEFT JOIN ( - SELECT `g0`.`FullName`, `g0`.`Nickname`, `g0`.`SquadId`, `t`.`Id`, `t`.`Nickname` AS `Nickname0`, `t`.`SquadId` AS `SquadId0`, `t`.`Id0`, `t`.`Nickname0` AS `Nickname00`, `t`.`HasSoulPatch`, `t`.`SquadId0` AS `SquadId00`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId` + SELECT `g0`.`FullName`, `g0`.`Nickname`, `g0`.`SquadId`, `s0`.`Id`, `s0`.`Nickname` AS `Nickname0`, `s0`.`SquadId` AS `SquadId0`, `s0`.`Id0`, `s0`.`Nickname0` AS `Nickname00`, `s0`.`HasSoulPatch`, `s0`.`SquadId0` AS `SquadId00`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId` FROM `Gears` AS `g0` LEFT JOIN ( SELECT `w`.`Id`, `g1`.`Nickname`, `g1`.`SquadId`, `s`.`Id` AS `Id0`, `g2`.`Nickname` AS `Nickname0`, `g2`.`HasSoulPatch`, `g2`.`SquadId` AS `SquadId0`, `w`.`OwnerFullName` @@ -4651,10 +4730,10 @@ LEFT JOIN ( LEFT JOIN `Gears` AS `g1` ON `w`.`OwnerFullName` = `g1`.`FullName`) LEFT JOIN `Squads` AS `s` ON `g1`.`SquadId` = `s`.`Id`) LEFT JOIN `Gears` AS `g2` ON `s`.`Id` = `g2`.`SquadId` - ) AS `t` ON `g0`.`FullName` = `t`.`OwnerFullName` -) AS `t0` ON `g`.`Nickname` = `t0`.`LeaderNickname` AND `g`.`SquadId` = `t0`.`LeaderSquadId` + ) AS `s0` ON `g0`.`FullName` = `s0`.`OwnerFullName` +) AS `s1` ON `g`.`Nickname` = `s1`.`LeaderNickname` AND `g`.`SquadId` = `s1`.`LeaderSquadId` WHERE `g`.`Discriminator` = 'Officer' -ORDER BY `g`.`Nickname`, `g`.`SquadId`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`Id`, `t0`.`Nickname0`, `t0`.`SquadId0`, `t0`.`Id0`, `t0`.`Nickname00` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s1`.`Nickname`, `s1`.`SquadId`, `s1`.`Id`, `s1`.`Nickname0`, `s1`.`SquadId0`, `s1`.`Id0`, `s1`.`Nickname00` """); } @@ -4664,7 +4743,7 @@ public override async Task Correlated_collections_with_funky_orderby_complex_sce AssertSql( """ -SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `t`.`Nickname`, `t`.`SquadId`, `t`.`Id0`, `t`.`Nickname0`, `t`.`HasSoulPatch`, `t`.`SquadId0` +SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `s0`.`Id`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`Id0`, `s0`.`Nickname0`, `s0`.`HasSoulPatch`, `s0`.`SquadId0` FROM `Gears` AS `g` LEFT JOIN ( SELECT `w`.`Id`, `g0`.`Nickname`, `g0`.`SquadId`, `s`.`Id` AS `Id0`, `g1`.`Nickname` AS `Nickname0`, `g1`.`HasSoulPatch`, `g1`.`SquadId` AS `SquadId0`, `w`.`OwnerFullName` @@ -4672,8 +4751,8 @@ LEFT JOIN ( LEFT JOIN `Gears` AS `g0` ON `w`.`OwnerFullName` = `g0`.`FullName`) LEFT JOIN `Squads` AS `s` ON `g0`.`SquadId` = `s`.`Id`) LEFT JOIN `Gears` AS `g1` ON `s`.`Id` = `g1`.`SquadId` -) AS `t` ON `g`.`FullName` = `t`.`OwnerFullName` -ORDER BY `g`.`FullName`, `g`.`Nickname` DESC, `g`.`SquadId`, `t`.`Id`, `t`.`Nickname`, `t`.`SquadId`, `t`.`Id0`, `t`.`Nickname0` +) AS `s0` ON `g`.`FullName` = `s0`.`OwnerFullName` +ORDER BY `g`.`FullName`, `g`.`Nickname` DESC, `g`.`SquadId`, `s0`.`Id`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`Id0`, `s0`.`Nickname0` """); } @@ -4683,10 +4762,10 @@ public override async Task Correlated_collections_with_funky_orderby_complex_sce AssertSql( """ -SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `t0`.`FullName`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`Id`, `t0`.`Nickname0`, `t0`.`SquadId0`, `t0`.`Id0`, `t0`.`Nickname00`, `t0`.`HasSoulPatch`, `t0`.`SquadId00` +SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `s1`.`FullName`, `s1`.`Nickname`, `s1`.`SquadId`, `s1`.`Id`, `s1`.`Nickname0`, `s1`.`SquadId0`, `s1`.`Id0`, `s1`.`Nickname00`, `s1`.`HasSoulPatch`, `s1`.`SquadId00` FROM `Gears` AS `g` LEFT JOIN ( - SELECT `g0`.`FullName`, `g0`.`Nickname`, `g0`.`SquadId`, `t`.`Id`, `t`.`Nickname` AS `Nickname0`, `t`.`SquadId` AS `SquadId0`, `t`.`Id0`, `t`.`Nickname0` AS `Nickname00`, `t`.`HasSoulPatch`, `t`.`SquadId0` AS `SquadId00`, `g0`.`HasSoulPatch` AS `HasSoulPatch0`, `t`.`IsAutomatic`, `t`.`Name`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId` + SELECT `g0`.`FullName`, `g0`.`Nickname`, `g0`.`SquadId`, `s0`.`Id`, `s0`.`Nickname` AS `Nickname0`, `s0`.`SquadId` AS `SquadId0`, `s0`.`Id0`, `s0`.`Nickname0` AS `Nickname00`, `s0`.`HasSoulPatch`, `s0`.`SquadId0` AS `SquadId00`, `g0`.`HasSoulPatch` AS `HasSoulPatch0`, `s0`.`IsAutomatic`, `s0`.`Name`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId` FROM `Gears` AS `g0` LEFT JOIN ( SELECT `w`.`Id`, `g1`.`Nickname`, `g1`.`SquadId`, `s`.`Id` AS `Id0`, `g2`.`Nickname` AS `Nickname0`, `g2`.`HasSoulPatch`, `g2`.`SquadId` AS `SquadId0`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName` @@ -4694,10 +4773,10 @@ LEFT JOIN ( LEFT JOIN `Gears` AS `g1` ON `w`.`OwnerFullName` = `g1`.`FullName`) LEFT JOIN `Squads` AS `s` ON `g1`.`SquadId` = `s`.`Id`) LEFT JOIN `Gears` AS `g2` ON `s`.`Id` = `g2`.`SquadId` - ) AS `t` ON `g0`.`FullName` = `t`.`OwnerFullName` -) AS `t0` ON `g`.`Nickname` = `t0`.`LeaderNickname` AND `g`.`SquadId` = `t0`.`LeaderSquadId` + ) AS `s0` ON `g0`.`FullName` = `s0`.`OwnerFullName` +) AS `s1` ON `g`.`Nickname` = `s1`.`LeaderNickname` AND `g`.`SquadId` = `s1`.`LeaderSquadId` WHERE `g`.`Discriminator` = 'Officer' -ORDER BY NOT (`g`.`HasSoulPatch`), `g`.`LeaderNickname`, `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `t0`.`FullName`, NOT (`t0`.`HasSoulPatch0`) DESC, `t0`.`Nickname`, `t0`.`SquadId`, NOT (`t0`.`IsAutomatic`), `t0`.`Name` DESC, `t0`.`Id`, `t0`.`Nickname0`, `t0`.`SquadId0`, `t0`.`Id0`, `t0`.`Nickname00` +ORDER BY NOT (`g`.`HasSoulPatch`), `g`.`LeaderNickname`, `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `s1`.`FullName`, NOT (`s1`.`HasSoulPatch0`) DESC, `s1`.`Nickname`, `s1`.`SquadId`, NOT (`s1`.`IsAutomatic`), `s1`.`Name` DESC, `s1`.`Id`, `s1`.`Nickname0`, `s1`.`SquadId0`, `s1`.`Id0`, `s1`.`Nickname00` """); } @@ -4707,15 +4786,15 @@ public override async Task Correlated_collection_with_top_level_FirstOrDefault(b AssertSql( """ - SELECT `t`.`Nickname`, `t`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` - FROM ( - SELECT TOP 1 `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` - FROM `Gears` AS `g` - ORDER BY `g`.`Nickname` - ) AS `t` - LEFT JOIN `Weapons` AS `w` ON `t`.`FullName` = `w`.`OwnerFullName` - ORDER BY `t`.`Nickname`, `t`.`SquadId` - """); +SELECT `g0`.`Nickname`, `g0`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM ( + SELECT TOP 1 `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` + FROM `Gears` AS `g` + ORDER BY `g`.`Nickname` +) AS `g0` +LEFT JOIN `Weapons` AS `w` ON `g0`.`FullName` = `w`.`OwnerFullName` +ORDER BY `g0`.`Nickname`, `g0`.`SquadId` +"""); } public override async Task Correlated_collection_with_top_level_Count(bool isAsync) @@ -4734,15 +4813,15 @@ public override async Task Correlated_collection_with_top_level_Last_with_orderb await base.Correlated_collection_with_top_level_Last_with_orderby_on_outer(isAsync); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + """ +SELECT `g0`.`Nickname`, `g0`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM ( SELECT TOP 1 `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` FROM `Gears` AS `g` ORDER BY `g`.`FullName` -) AS `t` -LEFT JOIN `Weapons` AS `w` ON `t`.`FullName` = `w`.`OwnerFullName` -ORDER BY `t`.`FullName`, `t`.`Nickname`, `t`.`SquadId` +) AS `g0` +LEFT JOIN `Weapons` AS `w` ON `g0`.`FullName` = `w`.`OwnerFullName` +ORDER BY `g0`.`FullName`, `g0`.`Nickname`, `g0`.`SquadId` """); } @@ -4752,30 +4831,30 @@ public override async Task Correlated_collection_with_top_level_Last_with_order_ AssertSql( """ - SELECT `t`.`Nickname`, `t`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` - FROM ( - SELECT TOP 1 `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` - FROM `Gears` AS `g` - ORDER BY `g`.`FullName` DESC - ) AS `t` - LEFT JOIN `Weapons` AS `w` ON `t`.`FullName` = `w`.`OwnerFullName` - ORDER BY `t`.`FullName` DESC, `t`.`Nickname`, `t`.`SquadId`, `w`.`Name` - """); +SELECT `g0`.`Nickname`, `g0`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM ( + SELECT TOP 1 `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` + FROM `Gears` AS `g` + ORDER BY `g`.`FullName` DESC +) AS `g0` +LEFT JOIN `Weapons` AS `w` ON `g0`.`FullName` = `w`.`OwnerFullName` +ORDER BY `g0`.`FullName` DESC, `g0`.`Nickname`, `g0`.`SquadId`, `w`.`Name` +"""); } public override async Task Null_semantics_on_nullable_bool_from_inner_join_subquery_is_fully_applied(bool isAsync) { await base.Null_semantics_on_nullable_bool_from_inner_join_subquery_is_fully_applied(isAsync); AssertSql( -""" -SELECT `t`.`Id`, `t`.`CapitalName`, `t`.`Discriminator`, `t`.`Name`, `t`.`ServerAddress`, `t`.`CommanderName`, `t`.`Eradicated` + """ +SELECT `f0`.`Id`, `f0`.`CapitalName`, `f0`.`Discriminator`, `f0`.`Name`, `f0`.`ServerAddress`, `f0`.`CommanderName`, `f0`.`Eradicated` FROM `LocustLeaders` AS `l` INNER JOIN ( SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Discriminator`, `f`.`Name`, `f`.`ServerAddress`, `f`.`CommanderName`, `f`.`Eradicated` FROM `Factions` AS `f` WHERE `f`.`Name` = 'Swarm' -) AS `t` ON `l`.`Name` = `t`.`CommanderName` -WHERE `t`.`Eradicated` <> TRUE OR `t`.`Eradicated` IS NULL +) AS `f0` ON `l`.`Name` = `f0`.`CommanderName` +WHERE `f0`.`Eradicated` = FALSE OR `f0`.`Eradicated` IS NULL """); } @@ -4784,15 +4863,15 @@ public override async Task Null_semantics_on_nullable_bool_from_left_join_subque await base.Null_semantics_on_nullable_bool_from_left_join_subquery_is_fully_applied(isAsync); AssertSql( -""" -SELECT `t`.`Id`, `t`.`CapitalName`, `t`.`Discriminator`, `t`.`Name`, `t`.`ServerAddress`, `t`.`CommanderName`, `t`.`Eradicated` + """ +SELECT `f0`.`Id`, `f0`.`CapitalName`, `f0`.`Discriminator`, `f0`.`Name`, `f0`.`ServerAddress`, `f0`.`CommanderName`, `f0`.`Eradicated` FROM `LocustLeaders` AS `l` LEFT JOIN ( SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Discriminator`, `f`.`Name`, `f`.`ServerAddress`, `f`.`CommanderName`, `f`.`Eradicated` FROM `Factions` AS `f` WHERE `f`.`Name` = 'Swarm' -) AS `t` ON `l`.`Name` = `t`.`CommanderName` -WHERE `t`.`Eradicated` <> TRUE OR `t`.`Eradicated` IS NULL +) AS `f0` ON `l`.`Name` = `f0`.`CommanderName` +WHERE `f0`.`Eradicated` = FALSE OR `f0`.`Eradicated` IS NULL """); } @@ -4801,17 +4880,17 @@ public override async Task Include_on_derived_type_with_order_by_and_paging(bool await base.Include_on_derived_type_with_order_by_and_paging(isAsync); AssertSql( -""" -SELECT `t0`.`Name`, `t0`.`Discriminator`, `t0`.`LocustHordeId`, `t0`.`ThreatLevel`, `t0`.`ThreatLevelByte`, `t0`.`ThreatLevelNullableByte`, `t0`.`DefeatedByNickname`, `t0`.`DefeatedBySquadId`, `t0`.`HighCommandId`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`Discriminator0`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Id`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + """ +SELECT `s`.`Name`, `s`.`Discriminator`, `s`.`LocustHordeId`, `s`.`ThreatLevel`, `s`.`ThreatLevelByte`, `s`.`ThreatLevelNullableByte`, `s`.`DefeatedByNickname`, `s`.`DefeatedBySquadId`, `s`.`HighCommandId`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`Discriminator0`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Id`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM ( SELECT TOP 10 `l`.`Name`, `l`.`Discriminator`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l`.`DefeatedByNickname`, `l`.`DefeatedBySquadId`, `l`.`HighCommandId`, `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator` AS `Discriminator0`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `t`.`Id`, `t`.`Note` FROM (`LocustLeaders` AS `l` LEFT JOIN `Gears` AS `g` ON `l`.`DefeatedByNickname` = `g`.`Nickname` AND `l`.`DefeatedBySquadId` = `g`.`SquadId`) LEFT JOIN `Tags` AS `t` ON (`g`.`Nickname` = `t`.`GearNickName` OR (`g`.`Nickname` IS NULL AND `t`.`GearNickName` IS NULL)) AND (`g`.`SquadId` = `t`.`GearSquadId` OR (`g`.`SquadId` IS NULL AND `t`.`GearSquadId` IS NULL)) ORDER BY `t`.`Note` -) AS `t0` -LEFT JOIN `Weapons` AS `w` ON `t0`.`FullName` = `w`.`OwnerFullName` -ORDER BY `t0`.`Note`, `t0`.`Name`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`Id` +) AS `s` +LEFT JOIN `Weapons` AS `w` ON `s`.`FullName` = `w`.`OwnerFullName` +ORDER BY `s`.`Note`, `s`.`Name`, `s`.`Nickname`, `s`.`SquadId`, `s`.`Id` """); } @@ -5003,14 +5082,14 @@ public override async Task Join_on_entity_qsre_keys_inheritance(bool isAsync) AssertSql( """ - SELECT `g`.`FullName` AS `GearName`, `t`.`FullName` AS `OfficerName` - FROM `Gears` AS `g` - INNER JOIN ( - SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`FullName` - FROM `Gears` AS `g0` - WHERE `g0`.`Discriminator` = 'Officer' - ) AS `t` ON `g`.`Nickname` = `t`.`Nickname` AND `g`.`SquadId` = `t`.`SquadId` - """); +SELECT `g`.`FullName` AS `GearName`, `g1`.`FullName` AS `OfficerName` +FROM `Gears` AS `g` +INNER JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`FullName` + FROM `Gears` AS `g0` + WHERE `g0`.`Discriminator` = 'Officer' +) AS `g1` ON `g`.`Nickname` = `g1`.`Nickname` AND `g`.`SquadId` = `g1`.`SquadId` +"""); } public override async Task Join_on_entity_qsre_keys_outer_key_is_navigation(bool isAsync) @@ -5033,14 +5112,14 @@ public override async Task Join_on_entity_qsre_keys_inner_key_is_navigation(bool AssertSql( """ - SELECT `c`.`Name` AS `CityName`, `t`.`Nickname` AS `GearNickname` - FROM `Cities` AS `c` - INNER JOIN ( - SELECT `g`.`Nickname`, `c0`.`Name` - FROM `Gears` AS `g` - LEFT JOIN `Cities` AS `c0` ON `g`.`AssignedCityName` = `c0`.`Name` - ) AS `t` ON `c`.`Name` = `t`.`Name` - """); +SELECT `c`.`Name` AS `CityName`, `s`.`Nickname` AS `GearNickname` +FROM `Cities` AS `c` +INNER JOIN ( + SELECT `g`.`Nickname`, `c0`.`Name` + FROM `Gears` AS `g` + LEFT JOIN `Cities` AS `c0` ON `g`.`AssignedCityName` = `c0`.`Name` +) AS `s` ON `c`.`Name` = `s`.`Name` +"""); } public override async Task Join_on_entity_qsre_keys_inner_key_is_navigation_composite_key(bool isAsync) @@ -5049,15 +5128,15 @@ public override async Task Join_on_entity_qsre_keys_inner_key_is_navigation_comp AssertSql( """ - SELECT `g`.`Nickname`, `t0`.`Note` - FROM `Gears` AS `g` - INNER JOIN ( - SELECT `t`.`Note`, `g0`.`Nickname`, `g0`.`SquadId` - FROM `Tags` AS `t` - LEFT JOIN `Gears` AS `g0` ON `t`.`GearNickName` = `g0`.`Nickname` AND `t`.`GearSquadId` = `g0`.`SquadId` - WHERE `t`.`Note` IN ('Cole''s Tag', 'Dom''s Tag') - ) AS `t0` ON `g`.`Nickname` = `t0`.`Nickname` AND `g`.`SquadId` = `t0`.`SquadId` - """); +SELECT `g`.`Nickname`, `s`.`Note` +FROM `Gears` AS `g` +INNER JOIN ( + SELECT `t`.`Note`, `g0`.`Nickname`, `g0`.`SquadId` + FROM `Tags` AS `t` + LEFT JOIN `Gears` AS `g0` ON `t`.`GearNickName` = `g0`.`Nickname` AND `t`.`GearSquadId` = `g0`.`SquadId` + WHERE `t`.`Note` IN ('Cole''s Tag', 'Dom''s Tag') +) AS `s` ON `g`.`Nickname` = `s`.`Nickname` AND `g`.`SquadId` = `s`.`SquadId` +"""); } public override async Task Join_on_entity_qsre_keys_inner_key_is_nested_navigation(bool isAsync) @@ -5065,8 +5144,8 @@ public override async Task Join_on_entity_qsre_keys_inner_key_is_nested_navigati await base.Join_on_entity_qsre_keys_inner_key_is_nested_navigation(isAsync); AssertSql( -""" -SELECT `s`.`Name` AS `SquadName`, `t`.`Name` AS `WeaponName` + """ +SELECT `s`.`Name` AS `SquadName`, `s1`.`Name` AS `WeaponName` FROM `Squads` AS `s` INNER JOIN ( SELECT `w`.`Name`, `s0`.`Id` AS `Id0` @@ -5074,7 +5153,7 @@ INNER JOIN ( LEFT JOIN `Gears` AS `g` ON `w`.`OwnerFullName` = `g`.`FullName`) LEFT JOIN `Squads` AS `s0` ON `g`.`SquadId` = `s0`.`Id` WHERE `w`.`IsAutomatic` = TRUE -) AS `t` ON `s`.`Id` = `t`.`Id0` +) AS `s1` ON `s`.`Id` = `s1`.`Id0` """); } @@ -5083,15 +5162,15 @@ public override async Task GroupJoin_on_entity_qsre_keys_inner_key_is_nested_nav await base.GroupJoin_on_entity_qsre_keys_inner_key_is_nested_navigation(isAsync); AssertSql( -""" -SELECT `s`.`Name` AS `SquadName`, `t`.`Name` AS `WeaponName` + """ +SELECT `s`.`Name` AS `SquadName`, `s1`.`Name` AS `WeaponName` FROM `Squads` AS `s` LEFT JOIN ( SELECT `w`.`Name`, `s0`.`Id` AS `Id0` FROM (`Weapons` AS `w` LEFT JOIN `Gears` AS `g` ON `w`.`OwnerFullName` = `g`.`FullName`) LEFT JOIN `Squads` AS `s0` ON `g`.`SquadId` = `s0`.`Id` -) AS `t` ON `s`.`Id` = `t`.`Id0` +) AS `s1` ON `s`.`Id` = `s1`.`Id0` """); } @@ -5100,18 +5179,18 @@ public override async Task Streaming_correlated_collection_issue_11403(bool isAs await base.Streaming_correlated_collection_issue_11403(isAsync); AssertSql( """ -SELECT `t`.`Nickname`, `t`.`SquadId`, `t0`.`Id`, `t0`.`AmmunitionType`, `t0`.`IsAutomatic`, `t0`.`Name`, `t0`.`OwnerFullName`, `t0`.`SynergyWithId` +SELECT `g0`.`Nickname`, `g0`.`SquadId`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` FROM ( SELECT TOP 1 `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` FROM `Gears` AS `g` ORDER BY `g`.`Nickname` -) AS `t` +) AS `g0` LEFT JOIN ( SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM `Weapons` AS `w` WHERE `w`.`IsAutomatic` <> TRUE -) AS `t0` ON `t`.`FullName` = `t0`.`OwnerFullName` -ORDER BY `t`.`Nickname`, `t`.`SquadId`, `t0`.`Id` +) AS `w0` ON `g0`.`FullName` = `w0`.`OwnerFullName` +ORDER BY `g0`.`Nickname`, `g0`.`SquadId`, `w0`.`Id` """); } @@ -5333,17 +5412,17 @@ public override async Task Include_collection_OrderBy_aggregate(bool isAsync) AssertSql( """ -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`Discriminator`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Nickname0`, `t`.`SquadId0`, `t`.`AssignedCityName0`, `t`.`CityOfBirthName0`, `t`.`Discriminator0`, `t`.`FullName0`, `t`.`HasSoulPatch0`, `t`.`LeaderNickname0`, `t`.`LeaderSquadId0`, `t`.`Rank0`, `t`.`c` +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`Discriminator`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Nickname0`, `s`.`SquadId0`, `s`.`AssignedCityName0`, `s`.`CityOfBirthName0`, `s`.`Discriminator0`, `s`.`FullName0`, `s`.`HasSoulPatch0`, `s`.`LeaderNickname0`, `s`.`LeaderSquadId0`, `s`.`Rank0`, `s`.`c` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `g0`.`Nickname` AS `Nickname0`, `g0`.`SquadId` AS `SquadId0`, `g0`.`AssignedCityName` AS `AssignedCityName0`, `g0`.`CityOfBirthName` AS `CityOfBirthName0`, `g0`.`Discriminator` AS `Discriminator0`, `g0`.`FullName` AS `FullName0`, `g0`.`HasSoulPatch` AS `HasSoulPatch0`, `g0`.`LeaderNickname` AS `LeaderNickname0`, `g0`.`LeaderSquadId` AS `LeaderSquadId0`, `g0`.`Rank` AS `Rank0`, ( SELECT COUNT(*) - FROM `Weapons` AS `w0` - WHERE `g`.`FullName` = `w0`.`OwnerFullName`) AS `c` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName`) AS `c` FROM `Gears` AS `g` LEFT JOIN `Gears` AS `g0` ON `g`.`Nickname` = `g0`.`LeaderNickname` AND `g`.`SquadId` = `g0`.`LeaderSquadId` WHERE `g`.`Discriminator` = 'Officer' -) AS `t` -ORDER BY `t`.`c`, `t`.`Nickname`, `t`.`SquadId`, `t`.`Nickname0` +) AS `s` +ORDER BY `s`.`c`, `s`.`Nickname`, `s`.`SquadId`, `s`.`Nickname0` """); } @@ -5353,18 +5432,18 @@ public override async Task Include_collection_with_complex_OrderBy2(bool isAsync AssertSql( """ -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`Discriminator`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Nickname0`, `t`.`SquadId0`, `t`.`AssignedCityName0`, `t`.`CityOfBirthName0`, `t`.`Discriminator0`, `t`.`FullName0`, `t`.`HasSoulPatch0`, `t`.`LeaderNickname0`, `t`.`LeaderSquadId0`, `t`.`Rank0`, `t`.`c` +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`Discriminator`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Nickname0`, `s`.`SquadId0`, `s`.`AssignedCityName0`, `s`.`CityOfBirthName0`, `s`.`Discriminator0`, `s`.`FullName0`, `s`.`HasSoulPatch0`, `s`.`LeaderNickname0`, `s`.`LeaderSquadId0`, `s`.`Rank0`, `s`.`c` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `g0`.`Nickname` AS `Nickname0`, `g0`.`SquadId` AS `SquadId0`, `g0`.`AssignedCityName` AS `AssignedCityName0`, `g0`.`CityOfBirthName` AS `CityOfBirthName0`, `g0`.`Discriminator` AS `Discriminator0`, `g0`.`FullName` AS `FullName0`, `g0`.`HasSoulPatch` AS `HasSoulPatch0`, `g0`.`LeaderNickname` AS `LeaderNickname0`, `g0`.`LeaderSquadId` AS `LeaderSquadId0`, `g0`.`Rank` AS `Rank0`, ( - SELECT TOP 1 `w0`.`IsAutomatic` - FROM `Weapons` AS `w0` - WHERE `g`.`FullName` = `w0`.`OwnerFullName` - ORDER BY `w0`.`Id`) AS `c` + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`) AS `c` FROM `Gears` AS `g` LEFT JOIN `Gears` AS `g0` ON `g`.`Nickname` = `g0`.`LeaderNickname` AND `g`.`SquadId` = `g0`.`LeaderSquadId` WHERE `g`.`Discriminator` = 'Officer' -) AS `t` -ORDER BY NOT (`t`.`c`), `t`.`Nickname`, `t`.`SquadId`, `t`.`Nickname0` +) AS `s` +ORDER BY NOT (`s`.`c`), `s`.`Nickname`, `s`.`SquadId`, `s`.`Nickname0` """); } @@ -5374,22 +5453,22 @@ public override async Task Include_collection_with_complex_OrderBy3(bool isAsync AssertSql( """ -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`Discriminator`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Nickname0`, `t`.`SquadId0`, `t`.`AssignedCityName0`, `t`.`CityOfBirthName0`, `t`.`Discriminator0`, `t`.`FullName0`, `t`.`HasSoulPatch0`, `t`.`LeaderNickname0`, `t`.`LeaderSquadId0`, `t`.`Rank0`, `t`.`c` +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`Discriminator`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Nickname0`, `s`.`SquadId0`, `s`.`AssignedCityName0`, `s`.`CityOfBirthName0`, `s`.`Discriminator0`, `s`.`FullName0`, `s`.`HasSoulPatch0`, `s`.`LeaderNickname0`, `s`.`LeaderSquadId0`, `s`.`Rank0`, `s`.`c` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `g0`.`Nickname` AS `Nickname0`, `g0`.`SquadId` AS `SquadId0`, `g0`.`AssignedCityName` AS `AssignedCityName0`, `g0`.`CityOfBirthName` AS `CityOfBirthName0`, `g0`.`Discriminator` AS `Discriminator0`, `g0`.`FullName` AS `FullName0`, `g0`.`HasSoulPatch` AS `HasSoulPatch0`, `g0`.`LeaderNickname` AS `LeaderNickname0`, `g0`.`LeaderSquadId` AS `LeaderSquadId0`, `g0`.`Rank` AS `Rank0`, IIF(( - SELECT TOP 1 `w0`.`IsAutomatic` - FROM `Weapons` AS `w0` - WHERE `g`.`FullName` = `w0`.`OwnerFullName` - ORDER BY `w0`.`Id`) IS NULL, FALSE, ( - SELECT TOP 1 `w0`.`IsAutomatic` - FROM `Weapons` AS `w0` - WHERE `g`.`FullName` = `w0`.`OwnerFullName` - ORDER BY `w0`.`Id`)) AS `c` + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`) IS NULL, FALSE, ( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`)) AS `c` FROM `Gears` AS `g` LEFT JOIN `Gears` AS `g0` ON `g`.`Nickname` = `g0`.`LeaderNickname` AND `g`.`SquadId` = `g0`.`LeaderSquadId` WHERE `g`.`Discriminator` = 'Officer' -) AS `t` -ORDER BY NOT (`t`.`c`), `t`.`Nickname`, `t`.`SquadId`, `t`.`Nickname0` +) AS `s` +ORDER BY NOT (`s`.`c`), `s`.`Nickname`, `s`.`SquadId`, `s`.`Nickname0` """); } @@ -5399,21 +5478,21 @@ public override async Task Correlated_collection_with_complex_OrderBy(bool isAsy AssertSql( """ -SELECT `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`Nickname0`, `t0`.`SquadId0`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`Discriminator`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`c` +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`Nickname0`, `s`.`SquadId0`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`Discriminator`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`c` FROM ( - SELECT `g`.`Nickname`, `g`.`SquadId`, `t`.`Nickname` AS `Nickname0`, `t`.`SquadId` AS `SquadId0`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`Discriminator`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g1`.`Nickname` AS `Nickname0`, `g1`.`SquadId` AS `SquadId0`, `g1`.`AssignedCityName`, `g1`.`CityOfBirthName`, `g1`.`Discriminator`, `g1`.`FullName`, `g1`.`HasSoulPatch`, `g1`.`LeaderNickname`, `g1`.`LeaderSquadId`, `g1`.`Rank`, ( SELECT COUNT(*) - FROM `Weapons` AS `w0` - WHERE `g`.`FullName` = `w0`.`OwnerFullName`) AS `c` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName`) AS `c` FROM `Gears` AS `g` LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank` FROM `Gears` AS `g0` WHERE `g0`.`HasSoulPatch` <> TRUE - ) AS `t` ON `g`.`Nickname` = `t`.`LeaderNickname` AND `g`.`SquadId` = `t`.`LeaderSquadId` + ) AS `g1` ON `g`.`Nickname` = `g1`.`LeaderNickname` AND `g`.`SquadId` = `g1`.`LeaderSquadId` WHERE `g`.`Discriminator` = 'Officer' -) AS `t0` -ORDER BY `t0`.`c`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`Nickname0` +) AS `s` +ORDER BY `s`.`c`, `s`.`Nickname`, `s`.`SquadId`, `s`.`Nickname0` """); } @@ -5423,27 +5502,27 @@ public override async Task Correlated_collection_with_very_complex_order_by(bool AssertSql( """ -SELECT `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`Nickname0`, `t0`.`SquadId0`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`Discriminator`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`c` +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`Nickname0`, `s`.`SquadId0`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`Discriminator`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`c` FROM ( - SELECT `g`.`Nickname`, `g`.`SquadId`, `t`.`Nickname` AS `Nickname0`, `t`.`SquadId` AS `SquadId0`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`Discriminator`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g2`.`Nickname` AS `Nickname0`, `g2`.`SquadId` AS `SquadId0`, `g2`.`AssignedCityName`, `g2`.`CityOfBirthName`, `g2`.`Discriminator`, `g2`.`FullName`, `g2`.`HasSoulPatch`, `g2`.`LeaderNickname`, `g2`.`LeaderSquadId`, `g2`.`Rank`, ( SELECT COUNT(*) - FROM `Weapons` AS `w0` - WHERE `g`.`FullName` = `w0`.`OwnerFullName` AND `w0`.`IsAutomatic` = IIF(( - SELECT TOP 1 `g2`.`HasSoulPatch` - FROM `Gears` AS `g2` - WHERE `g2`.`Nickname` = 'Marcus') IS NULL, FALSE, ( - SELECT TOP 1 `g2`.`HasSoulPatch` - FROM `Gears` AS `g2` - WHERE `g2`.`Nickname` = 'Marcus'))) AS `c` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` AND `w`.`IsAutomatic` = IIF(( + SELECT TOP 1 `g0`.`HasSoulPatch` + FROM `Gears` AS `g0` + WHERE `g0`.`Nickname` = 'Marcus') IS NULL, FALSE, ( + SELECT TOP 1 `g0`.`HasSoulPatch` + FROM `Gears` AS `g0` + WHERE `g0`.`Nickname` = 'Marcus'))) AS `c` FROM `Gears` AS `g` LEFT JOIN ( SELECT `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`AssignedCityName`, `g1`.`CityOfBirthName`, `g1`.`Discriminator`, `g1`.`FullName`, `g1`.`HasSoulPatch`, `g1`.`LeaderNickname`, `g1`.`LeaderSquadId`, `g1`.`Rank` FROM `Gears` AS `g1` WHERE `g1`.`HasSoulPatch` <> TRUE - ) AS `t` ON `g`.`Nickname` = `t`.`LeaderNickname` AND `g`.`SquadId` = `t`.`LeaderSquadId` + ) AS `g2` ON `g`.`Nickname` = `g2`.`LeaderNickname` AND `g`.`SquadId` = `g2`.`LeaderSquadId` WHERE `g`.`Discriminator` = 'Officer' -) AS `t0` -ORDER BY `t0`.`c`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`Nickname0` +) AS `s` +ORDER BY `s`.`c`, `s`.`Nickname`, `s`.`SquadId`, `s`.`Nickname0` """); } @@ -5515,12 +5594,12 @@ public override async Task Select_subquery_int_with_outside_cast_and_coalesce(bo await base.Select_subquery_int_with_outside_cast_and_coalesce(isAsync); AssertSql( -""" + """ SELECT IIF(( SELECT TOP 1 `w`.`Id` FROM `Weapons` AS `w` WHERE `g`.`FullName` = `w`.`OwnerFullName` - ORDER BY `w`.`Id`) IS NULL, IIF(0 IS NULL, 42, 0), ( + ORDER BY `w`.`Id`) IS NULL, 0, ( SELECT TOP 1 `w`.`Id` FROM `Weapons` AS `w` WHERE `g`.`FullName` = `w`.`OwnerFullName` @@ -5804,12 +5883,12 @@ public override async Task Double_order_by_binary_expression(bool isAsync) AssertSql( """ -SELECT `t`.`Binary` +SELECT `w0`.`Binary` FROM ( SELECT `w`.`Id` + 2 AS `Binary` FROM `Weapons` AS `w` -) AS `t` -ORDER BY `t`.`Binary` +) AS `w0` +ORDER BY `w0`.`Binary` """); } @@ -5883,11 +5962,9 @@ public override async Task Time_of_day_datetimeoffset(bool isAsync) await base.Time_of_day_datetimeoffset(isAsync); AssertSql( -""" -SELECT ('HasSoulPatch ' & (`g`.`HasSoulPatch` & '')) & ' HasSoulPatch', ('Rank ' & (`g`.`Rank` & '')) & ' Rank', ('SquadId ' & (`g`.`SquadId` & '')) & ' SquadId', ('Rating ' & IIF((`m`.`Rating` & '') IS NULL, '', (`m`.`Rating` & ''))) & ' Rating', `m`.`Id`, `m`.`CodeName`, `m`.`Rating` -FROM `Gears` AS `g`, -`Missions` AS `m` -ORDER BY `g`.`Nickname`, `m`.`Id` + """ +SELECT TIMEVALUE(`m`.`Timeline`) +FROM `Missions` AS `m` """); } @@ -6045,15 +6122,15 @@ public override async Task Multiple_includes_with_client_method_around_entity_an AssertSql( """ -SELECT `s`.`Name`, `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`Discriminator`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Id`, `t`.`AmmunitionType`, `t`.`IsAutomatic`, `t`.`Name`, `t`.`OwnerFullName`, `t`.`SynergyWithId` +SELECT `s`.`Name`, `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`AssignedCityName`, `s0`.`CityOfBirthName`, `s0`.`Discriminator`, `s0`.`FullName`, `s0`.`HasSoulPatch`, `s0`.`LeaderNickname`, `s0`.`LeaderSquadId`, `s0`.`Rank`, `s0`.`Id`, `s0`.`AmmunitionType`, `s0`.`IsAutomatic`, `s0`.`Name`, `s0`.`OwnerFullName`, `s0`.`SynergyWithId` FROM `Squads` AS `s` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM `Gears` AS `g` LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName` -) AS `t` ON `s`.`Id` = `t`.`SquadId` +) AS `s0` ON `s`.`Id` = `s0`.`SquadId` WHERE `s`.`Name` = 'Delta' -ORDER BY `s`.`Id`, `t`.`Nickname`, `t`.`SquadId` +ORDER BY `s`.`Id`, `s0`.`Nickname`, `s0`.`SquadId` """); } @@ -6094,9 +6171,11 @@ public override async Task GetValueOrDefault_in_filter_non_nullable_column(bool await base.GetValueOrDefault_in_filter_non_nullable_column(isAsync); AssertSql( - $@"SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + """ +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM `Weapons` AS `w` -WHERE IIF(`w`.`Id` IS NULL, 0, `w`.`Id`) = 0"); +WHERE `w`.`Id` = 0 +"""); } public override async Task GetValueOrDefault_in_order_by(bool isAsync) @@ -6287,15 +6366,15 @@ public override async Task Nav_rewrite_with_convert1(bool isAsync) await base.Nav_rewrite_with_convert1(isAsync); AssertSql( -""" -SELECT `t`.`Name`, `t`.`Discriminator`, `t`.`LocustHordeId`, `t`.`ThreatLevel`, `t`.`ThreatLevelByte`, `t`.`ThreatLevelNullableByte`, `t`.`DefeatedByNickname`, `t`.`DefeatedBySquadId`, `t`.`HighCommandId` + """ +SELECT `l0`.`Name`, `l0`.`Discriminator`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId` FROM (`Factions` AS `f` LEFT JOIN `Cities` AS `c` ON `f`.`CapitalName` = `c`.`Name`) LEFT JOIN ( SELECT `l`.`Name`, `l`.`Discriminator`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l`.`DefeatedByNickname`, `l`.`DefeatedBySquadId`, `l`.`HighCommandId` FROM `LocustLeaders` AS `l` WHERE `l`.`Discriminator` = 'LocustCommander' -) AS `t` ON `f`.`CommanderName` = `t`.`Name` +) AS `l0` ON `f`.`CommanderName` = `l0`.`Name` WHERE `c`.`Name` <> 'Foo' OR `c`.`Name` IS NULL """); } @@ -6305,7 +6384,7 @@ public override async Task Nav_rewrite_with_convert2(bool isAsync) await base.Nav_rewrite_with_convert2(isAsync); AssertSql( -""" + """ SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Discriminator`, `f`.`Name`, `f`.`ServerAddress`, `f`.`CommanderName`, `f`.`Eradicated` FROM (`Factions` AS `f` LEFT JOIN `Cities` AS `c` ON `f`.`CapitalName` = `c`.`Name`) @@ -6313,8 +6392,8 @@ LEFT JOIN ( SELECT `l`.`Name` FROM `LocustLeaders` AS `l` WHERE `l`.`Discriminator` = 'LocustCommander' -) AS `t` ON `f`.`CommanderName` = `t`.`Name` -WHERE (`c`.`Name` <> 'Foo' OR `c`.`Name` IS NULL) AND (`t`.`Name` <> 'Bar' OR `t`.`Name` IS NULL) +) AS `l0` ON `f`.`CommanderName` = `l0`.`Name` +WHERE (`c`.`Name` <> 'Foo' OR `c`.`Name` IS NULL) AND (`l0`.`Name` <> 'Bar' OR `l0`.`Name` IS NULL) """); } @@ -6323,7 +6402,7 @@ public override async Task Nav_rewrite_with_convert3(bool isAsync) await base.Nav_rewrite_with_convert3(isAsync); AssertSql( -""" + """ SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Discriminator`, `f`.`Name`, `f`.`ServerAddress`, `f`.`CommanderName`, `f`.`Eradicated` FROM (`Factions` AS `f` LEFT JOIN `Cities` AS `c` ON `f`.`CapitalName` = `c`.`Name`) @@ -6331,8 +6410,8 @@ LEFT JOIN ( SELECT `l`.`Name` FROM `LocustLeaders` AS `l` WHERE `l`.`Discriminator` = 'LocustCommander' -) AS `t` ON `f`.`CommanderName` = `t`.`Name` -WHERE (`c`.`Name` <> 'Foo' OR `c`.`Name` IS NULL) AND (`t`.`Name` <> 'Bar' OR `t`.`Name` IS NULL) +) AS `l0` ON `f`.`CommanderName` = `l0`.`Name` +WHERE (`c`.`Name` <> 'Foo' OR `c`.`Name` IS NULL) AND (`l0`.`Name` <> 'Bar' OR `l0`.`Name` IS NULL) """); } @@ -6359,16 +6438,16 @@ public override async Task Include_with_complex_order_by(bool isAsync) AssertSql( """ -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`Discriminator`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Id`, `t`.`AmmunitionType`, `t`.`IsAutomatic`, `t`.`Name`, `t`.`OwnerFullName`, `t`.`SynergyWithId`, `t`.`c` +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`Discriminator`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Id`, `s`.`AmmunitionType`, `s`.`IsAutomatic`, `s`.`Name`, `s`.`OwnerFullName`, `s`.`SynergyWithId`, `s`.`c` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId`, ( - SELECT TOP 1 `w1`.`Name` - FROM `Weapons` AS `w1` - WHERE `g`.`FullName` = `w1`.`OwnerFullName` AND (`w1`.`Name` LIKE '%Gnasher%')) AS `c` + SELECT TOP 1 `w`.`Name` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` AND (`w`.`Name` LIKE '%Gnasher%')) AS `c` FROM `Gears` AS `g` LEFT JOIN `Weapons` AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` -) AS `t` -ORDER BY `t`.`c`, `t`.`Nickname`, `t`.`SquadId` +) AS `s` +ORDER BY `s`.`c`, `s`.`Nickname`, `s`.`SquadId` """); } @@ -6408,13 +6487,13 @@ await AssertQuery( m => start <= m.Timeline.Date && m.Timeline < end && dates.Contains(m.Timeline))); AssertSql( - $""" + """ @__start_0='1902-01-01T08:30:00.0000000Z' (DbType = DateTime) @__end_1='1902-01-03T08:30:00.0000000Z' (DbType = DateTime) -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` -WHERE {AssertSqlHelper.Parameter("@__start_0")} <= DATEVALUE(`m`.`Timeline`) AND `m`.`Timeline` < {AssertSqlHelper.Parameter("@__end_1")} AND `m`.`Timeline` = CDATE('1902-01-02 08:30:00') +WHERE @__start_0 <= DATEVALUE(`m`.`Timeline`) AND `m`.`Timeline` < @__end_1 AND `m`.`Timeline` = CDATE('1902-01-02 08:30:00') """); } @@ -6513,16 +6592,16 @@ public override async Task SelectMany_Where_DefaultIfEmpty_with_navigation_in_th await base.SelectMany_Where_DefaultIfEmpty_with_navigation_in_the_collection_selector(isAsync); AssertSql( -""" + """ @__isAutomatic_0='True' -SELECT `g`.`Nickname`, `g`.`FullName`, IIF(`t`.`Id` IS NOT NULL, TRUE, FALSE) AS `Collection` +SELECT `g`.`Nickname`, `g`.`FullName`, IIF(`w0`.`Id` IS NOT NULL, TRUE, FALSE) AS `Collection` FROM `Gears` AS `g` LEFT JOIN ( SELECT `w`.`Id`, `w`.`OwnerFullName` FROM `Weapons` AS `w` WHERE `w`.`IsAutomatic` = @__isAutomatic_0 -) AS `t` ON `g`.`FullName` = `t`.`OwnerFullName` +) AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` """); } @@ -6531,17 +6610,17 @@ public override async Task SelectMany_Where_DefaultIfEmpty_with_navigation_in_th await base.SelectMany_Where_DefaultIfEmpty_with_navigation_in_the_collection_selector_not_equal(async); AssertSql( - $""" - {AssertSqlHelper.Parameter("@__isAutomatic_0='True'")} - - SELECT `g`.`Nickname`, `g`.`FullName`, IIF(`t`.`Id` IS NOT NULL, TRUE, FALSE) AS `Collection` - FROM `Gears` AS `g` - LEFT JOIN ( - SELECT `w`.`Id`, `w`.`OwnerFullName` - FROM `Weapons` AS `w` - WHERE `w`.`IsAutomatic` <> {AssertSqlHelper.Declaration("@__isAutomatic_0")} - ) AS `t` ON `g`.`FullName` = `t`.`OwnerFullName` - """); + """ +@__isAutomatic_0='True' + +SELECT `g`.`Nickname`, `g`.`FullName`, IIF(`w0`.`Id` IS NOT NULL, TRUE, FALSE) AS `Collection` +FROM `Gears` AS `g` +LEFT JOIN ( + SELECT `w`.`Id`, `w`.`OwnerFullName` + FROM `Weapons` AS `w` + WHERE `w`.`IsAutomatic` <> @__isAutomatic_0 +) AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` +"""); } public override async Task SelectMany_Where_DefaultIfEmpty_with_navigation_in_the_collection_selector_order_comparison(bool async) @@ -6549,16 +6628,16 @@ public override async Task SelectMany_Where_DefaultIfEmpty_with_navigation_in_th await base.SelectMany_Where_DefaultIfEmpty_with_navigation_in_the_collection_selector_order_comparison(async); AssertSql( - $""" -{AssertSqlHelper.Parameter("@__prm_0='1'")} + """ +@__prm_0='1' -SELECT `g`.`Nickname`, `g`.`FullName`, IIF(`t`.`Id` IS NOT NULL, TRUE, FALSE) AS `Collection` +SELECT `g`.`Nickname`, `g`.`FullName`, IIF(`w0`.`Id` IS NOT NULL, TRUE, FALSE) AS `Collection` FROM `Gears` AS `g` LEFT JOIN ( SELECT `w`.`Id`, `w`.`OwnerFullName` FROM `Weapons` AS `w` - WHERE `w`.`Id` > {AssertSqlHelper.Declaration("@__prm_0")} -) AS `t` ON `g`.`FullName` = `t`.`OwnerFullName` + WHERE `w`.`Id` > @__prm_0 +) AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` """); } @@ -6591,15 +6670,15 @@ public override async Task Navigation_based_on_complex_expression1(bool isAsync) await base.Navigation_based_on_complex_expression1(isAsync); AssertSql( -""" + """ SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Discriminator`, `f`.`Name`, `f`.`ServerAddress`, `f`.`CommanderName`, `f`.`Eradicated` FROM `Factions` AS `f` LEFT JOIN ( SELECT `l`.`Name` FROM `LocustLeaders` AS `l` WHERE `l`.`Discriminator` = 'LocustCommander' -) AS `t` ON `f`.`CommanderName` = `t`.`Name` -WHERE `t`.`Name` IS NOT NULL +) AS `l0` ON `f`.`CommanderName` = `l0`.`Name` +WHERE `l0`.`Name` IS NOT NULL """); } @@ -6609,15 +6688,15 @@ public override async Task Navigation_based_on_complex_expression2(bool isAsync) AssertSql( """ - SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Discriminator`, `f`.`Name`, `f`.`ServerAddress`, `f`.`CommanderName`, `f`.`Eradicated` - FROM `Factions` AS `f` - LEFT JOIN ( - SELECT `l`.`Name` - FROM `LocustLeaders` AS `l` - WHERE `l`.`Discriminator` = 'LocustCommander' - ) AS `t` ON `f`.`CommanderName` = `t`.`Name` - WHERE `t`.`Name` IS NOT NULL - """); +SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Discriminator`, `f`.`Name`, `f`.`ServerAddress`, `f`.`CommanderName`, `f`.`Eradicated` +FROM `Factions` AS `f` +LEFT JOIN ( + SELECT `l`.`Name` + FROM `LocustLeaders` AS `l` + WHERE `l`.`Discriminator` = 'LocustCommander' +) AS `l0` ON `f`.`CommanderName` = `l0`.`Name` +WHERE `l0`.`Name` IS NOT NULL +"""); } public override async Task Navigation_based_on_complex_expression3(bool isAsync) @@ -6626,14 +6705,14 @@ public override async Task Navigation_based_on_complex_expression3(bool isAsync) AssertSql( """ - SELECT `t`.`Name`, `t`.`Discriminator`, `t`.`LocustHordeId`, `t`.`ThreatLevel`, `t`.`ThreatLevelByte`, `t`.`ThreatLevelNullableByte`, `t`.`DefeatedByNickname`, `t`.`DefeatedBySquadId`, `t`.`HighCommandId` - FROM `Factions` AS `f` - LEFT JOIN ( - SELECT `l`.`Name`, `l`.`Discriminator`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l`.`DefeatedByNickname`, `l`.`DefeatedBySquadId`, `l`.`HighCommandId` - FROM `LocustLeaders` AS `l` - WHERE `l`.`Discriminator` = 'LocustCommander' - ) AS `t` ON `f`.`CommanderName` = `t`.`Name` - """); +SELECT `l0`.`Name`, `l0`.`Discriminator`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId` +FROM `Factions` AS `f` +LEFT JOIN ( + SELECT `l`.`Name`, `l`.`Discriminator`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l`.`DefeatedByNickname`, `l`.`DefeatedBySquadId`, `l`.`HighCommandId` + FROM `LocustLeaders` AS `l` + WHERE `l`.`Discriminator` = 'LocustCommander' +) AS `l0` ON `f`.`CommanderName` = `l0`.`Name` +"""); } public override async Task Navigation_based_on_complex_expression4(bool isAsync) @@ -6642,22 +6721,22 @@ public override async Task Navigation_based_on_complex_expression4(bool isAsync) AssertSql( """ - SELECT TRUE, `t1`.`Name`, `t1`.`Discriminator`, `t1`.`LocustHordeId`, `t1`.`ThreatLevel`, `t1`.`ThreatLevelByte`, `t1`.`ThreatLevelNullableByte`, `t1`.`DefeatedByNickname`, `t1`.`DefeatedBySquadId`, `t1`.`HighCommandId`, `t0`.`Name0`, `t0`.`Discriminator0`, `t0`.`LocustHordeId`, `t0`.`ThreatLevel`, `t0`.`ThreatLevelByte`, `t0`.`ThreatLevelNullableByte`, `t0`.`DefeatedByNickname`, `t0`.`DefeatedBySquadId`, `t0`.`HighCommandId` - FROM ( - SELECT `f`.`CommanderName`, `t`.`Name` AS `Name0`, `t`.`Discriminator` AS `Discriminator0`, `t`.`LocustHordeId`, `t`.`ThreatLevel`, `t`.`ThreatLevelByte`, `t`.`ThreatLevelNullableByte`, `t`.`DefeatedByNickname`, `t`.`DefeatedBySquadId`, `t`.`HighCommandId` - FROM `Factions` AS `f`, - ( - SELECT `l`.`Name`, `l`.`Discriminator`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l`.`DefeatedByNickname`, `l`.`DefeatedBySquadId`, `l`.`HighCommandId` - FROM `LocustLeaders` AS `l` - WHERE `l`.`Discriminator` = 'LocustCommander' - ) AS `t` - ) AS `t0` - LEFT JOIN ( - SELECT `l0`.`Name`, `l0`.`Discriminator`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId` - FROM `LocustLeaders` AS `l0` - WHERE `l0`.`Discriminator` = 'LocustCommander' - ) AS `t1` ON `t0`.`CommanderName` = `t1`.`Name` - """); +SELECT TRUE, `l2`.`Name`, `l2`.`Discriminator`, `l2`.`LocustHordeId`, `l2`.`ThreatLevel`, `l2`.`ThreatLevelByte`, `l2`.`ThreatLevelNullableByte`, `l2`.`DefeatedByNickname`, `l2`.`DefeatedBySquadId`, `l2`.`HighCommandId`, `s`.`Name0`, `s`.`Discriminator0`, `s`.`LocustHordeId`, `s`.`ThreatLevel`, `s`.`ThreatLevelByte`, `s`.`ThreatLevelNullableByte`, `s`.`DefeatedByNickname`, `s`.`DefeatedBySquadId`, `s`.`HighCommandId` +FROM ( + SELECT `f`.`CommanderName`, `l0`.`Name` AS `Name0`, `l0`.`Discriminator` AS `Discriminator0`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId` + FROM `Factions` AS `f`, + ( + SELECT `l`.`Name`, `l`.`Discriminator`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l`.`DefeatedByNickname`, `l`.`DefeatedBySquadId`, `l`.`HighCommandId` + FROM `LocustLeaders` AS `l` + WHERE `l`.`Discriminator` = 'LocustCommander' + ) AS `l0` +) AS `s` +LEFT JOIN ( + SELECT `l1`.`Name`, `l1`.`Discriminator`, `l1`.`LocustHordeId`, `l1`.`ThreatLevel`, `l1`.`ThreatLevelByte`, `l1`.`ThreatLevelNullableByte`, `l1`.`DefeatedByNickname`, `l1`.`DefeatedBySquadId`, `l1`.`HighCommandId` + FROM `LocustLeaders` AS `l1` + WHERE `l1`.`Discriminator` = 'LocustCommander' +) AS `l2` ON `s`.`CommanderName` = `l2`.`Name` +"""); } public override async Task Navigation_based_on_complex_expression5(bool isAsync) @@ -6704,14 +6783,14 @@ public override async Task OfType_in_subquery_works(bool isAsync) AssertSql( """ -SELECT `t`.`Name`, `t`.`Location`, `t`.`Nation` +SELECT `s`.`Name`, `s`.`Location`, `s`.`Nation` FROM `Gears` AS `g` INNER JOIN ( SELECT `c`.`Name`, `c`.`Location`, `c`.`Nation`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId` FROM `Gears` AS `g0` LEFT JOIN `Cities` AS `c` ON `g0`.`AssignedCityName` = `c`.`Name` WHERE `g0`.`Discriminator` = 'Officer' -) AS `t` ON `g`.`Nickname` = `t`.`LeaderNickname` AND `g`.`SquadId` = `t`.`LeaderSquadId` +) AS `s` ON `g`.`Nickname` = `s`.`LeaderNickname` AND `g`.`SquadId` = `s`.`LeaderSquadId` WHERE `g`.`Discriminator` = 'Officer' """); } @@ -6732,15 +6811,15 @@ public override async Task Accessing_reference_navigation_collection_composition AssertSql( """ - SELECT `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `t`.`IsAutomatic`, `t`.`Name`, `t`.`Id0` - FROM `Gears` AS `g` - LEFT JOIN ( - SELECT `w`.`Id`, `w`.`IsAutomatic`, `w0`.`Name`, `w0`.`Id` AS `Id0`, `w`.`OwnerFullName` - FROM `Weapons` AS `w` - LEFT JOIN `Weapons` AS `w0` ON `w`.`SynergyWithId` = `w0`.`Id` - ) AS `t` ON `g`.`FullName` = `t`.`OwnerFullName` - ORDER BY `g`.`Nickname`, `g`.`SquadId`, `t`.`Id` - """); +SELECT `g`.`Nickname`, `g`.`SquadId`, `s`.`Id`, `s`.`IsAutomatic`, `s`.`Name`, `s`.`Id0` +FROM `Gears` AS `g` +LEFT JOIN ( + SELECT `w`.`Id`, `w`.`IsAutomatic`, `w0`.`Name`, `w0`.`Id` AS `Id0`, `w`.`OwnerFullName` + FROM `Weapons` AS `w` + LEFT JOIN `Weapons` AS `w0` ON `w`.`SynergyWithId` = `w0`.`Id` +) AS `s` ON `g`.`FullName` = `s`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s`.`Id` +"""); } public override async Task Reference_include_chain_loads_correctly_when_middle_is_null(bool isAsync) @@ -6762,16 +6841,16 @@ public override async Task Accessing_property_of_optional_navigation_in_child_pr await base.Accessing_property_of_optional_navigation_in_child_projection_works(isAsync); AssertSql( -""" -SELECT IIF(`g`.`Nickname` IS NOT NULL AND `g`.`SquadId` IS NOT NULL, TRUE, FALSE), `t`.`Id`, `g`.`Nickname`, `g`.`SquadId`, `t0`.`Nickname`, `t0`.`Id`, `t0`.`SquadId` + """ +SELECT IIF(`g`.`Nickname` IS NOT NULL AND `g`.`SquadId` IS NOT NULL, TRUE, FALSE), `t`.`Id`, `g`.`Nickname`, `g`.`SquadId`, `s`.`Nickname`, `s`.`Id`, `s`.`SquadId` FROM (`Tags` AS `t` LEFT JOIN `Gears` AS `g` ON `t`.`GearNickName` = `g`.`Nickname` AND `t`.`GearSquadId` = `g`.`SquadId`) LEFT JOIN ( SELECT `g0`.`Nickname`, `w`.`Id`, `g0`.`SquadId`, `w`.`OwnerFullName` FROM `Weapons` AS `w` LEFT JOIN `Gears` AS `g0` ON `w`.`OwnerFullName` = `g0`.`FullName` -) AS `t0` ON `g`.`FullName` = `t0`.`OwnerFullName` -ORDER BY `t`.`Note`, `t`.`Id`, `g`.`Nickname`, `g`.`SquadId`, `t0`.`Id`, `t0`.`Nickname` +) AS `s` ON `g`.`FullName` = `s`.`OwnerFullName` +ORDER BY `t`.`Note`, `t`.`Id`, `g`.`Nickname`, `g`.`SquadId`, `s`.`Id`, `s`.`Nickname` """); } @@ -6795,17 +6874,16 @@ public override async Task Query_reusing_parameter_doesnt_declare_duplicate_para await base.Query_reusing_parameter_doesnt_declare_duplicate_parameter(isAsync); AssertSql( -""" -@__prm_Inner_Nickname_0='Marcus' (Size = 255) + """ @__prm_Inner_Nickname_0='Marcus' (Size = 255) -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`Discriminator`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank` +SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank` FROM ( SELECT DISTINCT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` FROM `Gears` AS `g` - WHERE `g`.`Nickname` <> @__prm_Inner_Nickname_0 AND `g`.`Nickname` <> @__prm_Inner_Nickname_0 -) AS `t` -ORDER BY `t`.`FullName` + WHERE `g`.`Nickname` <> @__prm_Inner_Nickname_0 +) AS `g0` +ORDER BY `g0`.`FullName` """); } @@ -6814,11 +6892,11 @@ public override async Task Query_reusing_parameter_with_inner_query_doesnt_decla await base.Query_reusing_parameter_with_inner_query_doesnt_declare_duplicate_parameter(async); AssertSql( -$""" -{AssertSqlHelper.Parameter("@__squadId_0='1'")} -{AssertSqlHelper.Parameter("@__squadId_0='1'")} + """ +@__squadId_0='1' +@__squadId_0='1' -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`Discriminator`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank` +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`Discriminator`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` FROM `Gears` AS `g` @@ -6826,7 +6904,7 @@ public override async Task Query_reusing_parameter_with_inner_query_doesnt_decla WHERE `s`.`Id` IN ( SELECT `s0`.`Id` FROM `Squads` AS `s0` - WHERE `s0`.`Id` = {AssertSqlHelper.Declaration("@__squadId_0")} + WHERE `s0`.`Id` = @__squadId_0 ) UNION ALL SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank` @@ -6835,10 +6913,10 @@ UNION ALL WHERE `s1`.`Id` IN ( SELECT `s2`.`Id` FROM `Squads` AS `s2` - WHERE `s2`.`Id` = {AssertSqlHelper.Declaration("@__squadId_0")} + WHERE `s2`.`Id` = @__squadId_0 ) -) AS `t` -ORDER BY `t`.`FullName` +) AS `u` +ORDER BY `u`.`FullName` """); } @@ -6865,20 +6943,20 @@ public override async Task Query_reusing_parameter_doesnt_declare_duplicate_para await base.Query_reusing_parameter_doesnt_declare_duplicate_parameter_complex(isAsync); AssertSql( -""" + """ @__entity_equality_prm_Inner_Squad_0_Id='1' (Nullable = true) @__entity_equality_prm_Inner_Squad_0_Id='1' (Nullable = true) -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`Discriminator`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank` +SELECT `s1`.`Nickname`, `s1`.`SquadId`, `s1`.`AssignedCityName`, `s1`.`CityOfBirthName`, `s1`.`Discriminator`, `s1`.`FullName`, `s1`.`HasSoulPatch`, `s1`.`LeaderNickname`, `s1`.`LeaderSquadId`, `s1`.`Rank` FROM ( SELECT DISTINCT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` FROM `Gears` AS `g` INNER JOIN `Squads` AS `s` ON `g`.`SquadId` = `s`.`Id` WHERE `s`.`Id` = @__entity_equality_prm_Inner_Squad_0_Id -) AS `t` -INNER JOIN `Squads` AS `s0` ON `t`.`SquadId` = `s0`.`Id` +) AS `s1` +INNER JOIN `Squads` AS `s0` ON `s1`.`SquadId` = `s0`.`Id` WHERE `s0`.`Id` = @__entity_equality_prm_Inner_Squad_0_Id -ORDER BY `t`.`FullName` +ORDER BY `s1`.`FullName` """); } @@ -6888,24 +6966,24 @@ public override async Task Complex_GroupBy_after_set_operator(bool isAsync) AssertSql( """ - SELECT `t`.`Name`, `t`.`Count`, IIF(SUM(`t`.`Count`) IS NULL, 0, SUM(`t`.`Count`)) AS `Sum` - FROM ( - SELECT `c`.`Name`, ( - SELECT COUNT(*) - FROM `Weapons` AS `w` - WHERE `g`.`FullName` = `w`.`OwnerFullName`) AS `Count` - FROM `Gears` AS `g` - LEFT JOIN `Cities` AS `c` ON `g`.`AssignedCityName` = `c`.`Name` - UNION ALL - SELECT `c0`.`Name`, ( - SELECT COUNT(*) - FROM `Weapons` AS `w0` - WHERE `g0`.`FullName` = `w0`.`OwnerFullName`) AS `Count` - FROM `Gears` AS `g0` - INNER JOIN `Cities` AS `c0` ON `g0`.`CityOfBirthName` = `c0`.`Name` - ) AS `t` - GROUP BY `t`.`Name`, `t`.`Count` - """); +SELECT `u`.`Name`, `u`.`Count`, IIF(SUM(`u`.`Count`) IS NULL, 0, SUM(`u`.`Count`)) AS `Sum` +FROM ( + SELECT `c`.`Name`, ( + SELECT COUNT(*) + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName`) AS `Count` + FROM `Gears` AS `g` + LEFT JOIN `Cities` AS `c` ON `g`.`AssignedCityName` = `c`.`Name` + UNION ALL + SELECT `c0`.`Name`, ( + SELECT COUNT(*) + FROM `Weapons` AS `w0` + WHERE `g0`.`FullName` = `w0`.`OwnerFullName`) AS `Count` + FROM `Gears` AS `g0` + INNER JOIN `Cities` AS `c0` ON `g0`.`CityOfBirthName` = `c0`.`Name` +) AS `u` +GROUP BY `u`.`Name`, `u`.`Count` +"""); } public override async Task Complex_GroupBy_after_set_operator_using_result_selector(bool isAsync) @@ -6914,24 +6992,24 @@ public override async Task Complex_GroupBy_after_set_operator_using_result_selec AssertSql( """ - SELECT `t`.`Name`, `t`.`Count`, IIF(SUM(`t`.`Count`) IS NULL, 0, SUM(`t`.`Count`)) AS `Sum` - FROM ( - SELECT `c`.`Name`, ( - SELECT COUNT(*) - FROM `Weapons` AS `w` - WHERE `g`.`FullName` = `w`.`OwnerFullName`) AS `Count` - FROM `Gears` AS `g` - LEFT JOIN `Cities` AS `c` ON `g`.`AssignedCityName` = `c`.`Name` - UNION ALL - SELECT `c0`.`Name`, ( - SELECT COUNT(*) - FROM `Weapons` AS `w0` - WHERE `g0`.`FullName` = `w0`.`OwnerFullName`) AS `Count` - FROM `Gears` AS `g0` - INNER JOIN `Cities` AS `c0` ON `g0`.`CityOfBirthName` = `c0`.`Name` - ) AS `t` - GROUP BY `t`.`Name`, `t`.`Count` - """); +SELECT `u`.`Name`, `u`.`Count`, IIF(SUM(`u`.`Count`) IS NULL, 0, SUM(`u`.`Count`)) AS `Sum` +FROM ( + SELECT `c`.`Name`, ( + SELECT COUNT(*) + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName`) AS `Count` + FROM `Gears` AS `g` + LEFT JOIN `Cities` AS `c` ON `g`.`AssignedCityName` = `c`.`Name` + UNION ALL + SELECT `c0`.`Name`, ( + SELECT COUNT(*) + FROM `Weapons` AS `w0` + WHERE `g0`.`FullName` = `w0`.`OwnerFullName`) AS `Count` + FROM `Gears` AS `g0` + INNER JOIN `Cities` AS `c0` ON `g0`.`CityOfBirthName` = `c0`.`Name` +) AS `u` +GROUP BY `u`.`Name`, `u`.`Count` +"""); } public override async Task Left_join_with_GroupBy_with_composite_group_key(bool isAsync) @@ -6954,13 +7032,13 @@ public override async Task GroupBy_with_boolean_grouping_key(bool isAsync) AssertSql( """ - SELECT `t`.`CityOfBirthName`, `t`.`HasSoulPatch`, `t`.`IsMarcus`, COUNT(*) AS `Count` - FROM ( - SELECT `g`.`CityOfBirthName`, `g`.`HasSoulPatch`, IIF(`g`.`Nickname` = 'Marcus', TRUE, FALSE) AS `IsMarcus` - FROM `Gears` AS `g` - ) AS `t` - GROUP BY `t`.`CityOfBirthName`, `t`.`HasSoulPatch`, `t`.`IsMarcus` - """); +SELECT `g0`.`CityOfBirthName`, `g0`.`HasSoulPatch`, `g0`.`IsMarcus`, COUNT(*) AS `Count` +FROM ( + SELECT `g`.`CityOfBirthName`, `g`.`HasSoulPatch`, IIF(`g`.`Nickname` = 'Marcus', TRUE, FALSE) AS `IsMarcus` + FROM `Gears` AS `g` +) AS `g0` +GROUP BY `g0`.`CityOfBirthName`, `g0`.`HasSoulPatch`, `g0`.`IsMarcus` +"""); } public override async Task GroupBy_with_boolean_groupin_key_thru_navigation_access(bool isAsync) @@ -6996,13 +7074,13 @@ public override async Task Group_by_on_StartsWith_with_null_parameter_as_argumen AssertSql( """ - SELECT `t`.`Key` - FROM ( - SELECT FALSE AS `Key` - FROM `Gears` AS `g` - ) AS `t` - GROUP BY `t`.`Key` - """); +SELECT `g0`.`Key` +FROM ( + SELECT FALSE AS `Key` + FROM `Gears` AS `g` +) AS `g0` +GROUP BY `g0`.`Key` +"""); } public override async Task Group_by_with_having_StartsWith_with_null_parameter_as_argument(bool isAsync) @@ -7249,11 +7327,11 @@ public override async Task Join_inner_source_custom_projection_followed_by_filte await base.Join_inner_source_custom_projection_followed_by_filter(async); AssertSql( -""" + """ SELECT IIF(`f`.`Name` = 'Locust', TRUE, NULL) AS `IsEradicated`, `f`.`CommanderName`, `f`.`Name` FROM `LocustLeaders` AS `l` INNER JOIN `Factions` AS `f` ON `l`.`Name` = `f`.`CommanderName` -WHERE IIF(`f`.`Name` = 'Locust', TRUE, NULL) <> TRUE OR IIF(`f`.`Name` = 'Locust', TRUE, NULL) IS NULL +WHERE IIF(`f`.`Name` = 'Locust', TRUE, NULL) = FALSE OR IIF(`f`.`Name` = 'Locust', TRUE, NULL) IS NULL """); } @@ -7341,13 +7419,10 @@ public virtual void Byte_array_filter_by_length_parameter_compiled2() @__byteArrayParam='0x2A80' (Size = 510) @__byteArrayParam='0x2A80' (Size = 510) @__byteArrayParam='0x2A80' (Size = 510) -@__byteArrayParam='0x2A80' (Size = 510) -@__byteArrayParam='0x2A80' (Size = 510) -@__byteArrayParam='0x2A80' (Size = 510) SELECT COUNT(*) FROM `Squads` AS `s` -WHERE IIF(ASCB(RIGHTB(`s`.`Banner`, 1)) = 0, LENB(`s`.`Banner`) - 1, LENB(`s`.`Banner`)) = IIF(IIF(ASCB(RIGHTB(@__byteArrayParam, 1)) = 0, LENB(@__byteArrayParam) - 1, LENB(@__byteArrayParam)) IS NULL, NULL, CLNG(IIF(ASCB(RIGHTB(@__byteArrayParam, 1)) = 0, LENB(@__byteArrayParam) - 1, LENB(@__byteArrayParam)))) OR (IIF(ASCB(RIGHTB(`s`.`Banner`, 1)) = 0, LENB(`s`.`Banner`) - 1, LENB(`s`.`Banner`)) IS NULL AND IIF(ASCB(RIGHTB(@__byteArrayParam, 1)) = 0, LENB(@__byteArrayParam) - 1, LENB(@__byteArrayParam)) IS NULL) +WHERE IIF(ASCB(RIGHTB(`s`.`Banner`, 1)) = 0, LENB(`s`.`Banner`) - 1, LENB(`s`.`Banner`)) = IIF(IIF(ASCB(RIGHTB(@__byteArrayParam, 1)) = 0, LENB(@__byteArrayParam) - 1, LENB(@__byteArrayParam)) IS NULL, NULL, CLNG(IIF(ASCB(RIGHTB(@__byteArrayParam, 1)) = 0, LENB(@__byteArrayParam) - 1, LENB(@__byteArrayParam)))) """); } @@ -7444,12 +7519,12 @@ await AssertQuery( ss => ss.Set().Where(m => m.Timeline.Date >= dateTimeOffset.Date)); AssertSql( - $""" + """ @__dateTimeOffset_Date_0='0102-03-01T00:00:00.0000000' (DbType = DateTime) -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` -WHERE DATEVALUE(`m`.`Timeline`) >= {AssertSqlHelper.Parameter("@__dateTimeOffset_Date_0")} +WHERE DATEVALUE(`m`.`Timeline`) >= CDATE(@__dateTimeOffset_Date_0) """); } @@ -7506,13 +7581,13 @@ public override async Task Group_by_nullable_property_HasValue_and_project_the_g AssertSql( """ - SELECT `t`.`Key` - FROM ( - SELECT IIF(`w`.`SynergyWithId` IS NOT NULL, TRUE, FALSE) AS `Key` - FROM `Weapons` AS `w` - ) AS `t` - GROUP BY `t`.`Key` - """); +SELECT `w0`.`Key` +FROM ( + SELECT IIF(`w`.`SynergyWithId` IS NOT NULL, TRUE, FALSE) AS `Key` + FROM `Weapons` AS `w` +) AS `w0` +GROUP BY `w0`.`Key` +"""); } public override async Task Group_by_nullable_property_and_project_the_grouping_key_HasValue(bool async) @@ -7601,7 +7676,7 @@ public override async Task Where_TimeSpan_Hours(bool async) AssertSql( """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE DATEPART('h', `m`.`Duration`) = 1 """); @@ -7613,7 +7688,7 @@ public override async Task Where_TimeSpan_Minutes(bool async) AssertSql( """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE DATEPART('n', `m`.`Duration`) = 2 """); @@ -7625,7 +7700,7 @@ public override async Task Where_TimeSpan_Seconds(bool async) AssertSql( """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE DATEPART('s', `m`.`Duration`) = 3 """); @@ -7947,15 +8022,15 @@ public override async Task SelectMany_predicate_after_navigation_with_non_equali await base.SelectMany_predicate_after_navigation_with_non_equality_comparison_DefaultIfEmpty_converted_to_left_join(async); AssertSql( -""" -SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `t`.`Id`, `t`.`AmmunitionType`, `t`.`IsAutomatic`, `t`.`Name`, `t`.`OwnerFullName`, `t`.`SynergyWithId` + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `s`.`Id`, `s`.`AmmunitionType`, `s`.`IsAutomatic`, `s`.`Name`, `s`.`OwnerFullName`, `s`.`SynergyWithId` FROM `Gears` AS `g` LEFT JOIN ( SELECT `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` FROM `Weapons` AS `w` LEFT JOIN `Weapons` AS `w0` ON `w`.`SynergyWithId` = `w0`.`Id` -) AS `t` ON `g`.`FullName` <> `t`.`OwnerFullName` OR `t`.`OwnerFullName` IS NULL -ORDER BY `g`.`Nickname`, `t`.`Id` +) AS `s` ON `g`.`FullName` <> `s`.`OwnerFullName` OR `s`.`OwnerFullName` IS NULL +ORDER BY `g`.`Nickname`, `s`.`Id` """); } @@ -8120,7 +8195,23 @@ LEFT JOIN ( public override async Task FirstOrDefault_on_empty_collection_of_DateTime_in_subquery(bool async) { - await base.FirstOrDefault_on_empty_collection_of_DateTime_in_subquery(async); + //await base.FirstOrDefault_on_empty_collection_of_DateTime_in_subquery(async); + await AssertQuery( + async, + ss => from g in ss.Set() + let invalidTagIssueDate = (from t in ss.Set() + where t.GearNickName == g.FullName + orderby t.Id + select t.IssueDate).FirstOrDefault() + where g.Tag.IssueDate > invalidTagIssueDate + select new { g.Nickname, invalidTagIssueDate }, + ss => from g in ss.Set() + let invalidTagIssueDate = (from t in ss.Set() + where t.GearNickName == g.FullName + orderby t.Id + select t.IssueDate).FirstOrDefault(new DateTime(100,1,1)) + where g.Tag.IssueDate > invalidTagIssueDate + select new { g.Nickname, invalidTagIssueDate }); AssertSql( """ @@ -8128,7 +8219,7 @@ public override async Task FirstOrDefault_on_empty_collection_of_DateTime_in_sub SELECT TOP 1 `t1`.`IssueDate` FROM `Tags` AS `t1` WHERE `t1`.`GearNickName` = `g`.`FullName` - ORDER BY `t1`.`Id`) IS NULL, #1899-12-30#, ( + ORDER BY `t1`.`Id`) IS NULL, #0100-01-01#, ( SELECT TOP 1 `t1`.`IssueDate` FROM `Tags` AS `t1` WHERE `t1`.`GearNickName` = `g`.`FullName` @@ -8139,7 +8230,7 @@ SELECT TOP 1 `t1`.`IssueDate` SELECT TOP 1 `t0`.`IssueDate` FROM `Tags` AS `t0` WHERE `t0`.`GearNickName` = `g`.`FullName` - ORDER BY `t0`.`Id`) IS NULL, #1899-12-30#, ( + ORDER BY `t0`.`Id`) IS NULL, #0100-01-01#, ( SELECT TOP 1 `t0`.`IssueDate` FROM `Tags` AS `t0` WHERE `t0`.`GearNickName` = `g`.`FullName` @@ -8454,13 +8545,13 @@ public override async Task Correlated_collection_with_distinct_projecting_identi await base.Correlated_collection_with_distinct_projecting_identifier_column_and_correlation_key(async); AssertSql( - """ -SELECT `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `t`.`Name`, `t`.`OwnerFullName` + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `w0`.`Id`, `w0`.`Name`, `w0`.`OwnerFullName` FROM `Gears` AS `g` LEFT JOIN ( SELECT DISTINCT `w`.`Id`, `w`.`Name`, `w`.`OwnerFullName` FROM `Weapons` AS `w` -) AS `t` ON `g`.`FullName` = `t`.`OwnerFullName` +) AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` ORDER BY `g`.`Nickname`, `g`.`SquadId` """); } @@ -8470,14 +8561,14 @@ public override async Task Correlated_collection_with_distinct_projecting_identi await base.Correlated_collection_with_distinct_projecting_identifier_column_composite_key(async); AssertSql( - """ -SELECT `s`.`Id`, `t`.`Nickname`, `t`.`SquadId`, `t`.`HasSoulPatch` + """ +SELECT `s`.`Id`, `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`HasSoulPatch` FROM `Squads` AS `s` LEFT JOIN ( SELECT DISTINCT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` FROM `Gears` AS `g` -) AS `t` ON `s`.`Id` = `t`.`SquadId` -ORDER BY `s`.`Id`, `t`.`Nickname` +) AS `g0` ON `s`.`Id` = `g0`.`SquadId` +ORDER BY `s`.`Id`, `g0`.`Nickname` """); } @@ -8644,7 +8735,7 @@ public override async Task Where_DateOnly_Year(bool async) AssertSql( """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE DATEPART('yyyy', `m`.`Date`) = 1990 """); @@ -8656,7 +8747,7 @@ public override async Task Where_DateOnly_Month(bool async) AssertSql( """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE DATEPART('m', `m`.`Date`) = 11 """); @@ -8668,7 +8759,7 @@ public override async Task Where_DateOnly_Day(bool async) AssertSql( """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE DATEPART('d', `m`.`Date`) = 10 """); @@ -8680,7 +8771,7 @@ public override async Task Where_DateOnly_DayOfYear(bool async) AssertSql( """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE DATEPART('y', `m`.`Date`) = 314 """); @@ -8699,7 +8790,7 @@ public override async Task Where_DateOnly_AddYears(bool async) AssertSql( """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE DATEADD('yyyy', CLNG(3), `m`.`Date`) = #1993-11-10# """); @@ -8711,7 +8802,7 @@ public override async Task Where_DateOnly_AddMonths(bool async) AssertSql( """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE DATEADD('m', CLNG(3), `m`.`Date`) = #1991-02-10# """); @@ -8723,7 +8814,7 @@ public override async Task Where_DateOnly_AddDays(bool async) AssertSql( """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE DATEADD('d', CLNG(3), `m`.`Date`) = #1990-11-13# """); @@ -8735,7 +8826,7 @@ public override async Task Where_TimeOnly_Hour(bool async) AssertSql( """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE DATEPART('h', `m`.`Time`) = 10 """); @@ -8747,7 +8838,7 @@ public override async Task Where_TimeOnly_Minute(bool async) AssertSql( """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE DATEPART('n', `m`.`Time`) = 15 """); @@ -8759,7 +8850,7 @@ public override async Task Where_TimeOnly_Second(bool async) AssertSql( """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE DATEPART('s', `m`.`Time`) = 50 """); @@ -8783,7 +8874,7 @@ public override async Task Where_TimeOnly_AddHours(bool async) AssertSql( """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE TIMEVALUE(DATEADD('h', CLNG(3.0), `m`.`Time`)) = TIMEVALUE('13:15:50') """); @@ -8795,7 +8886,7 @@ public override async Task Where_TimeOnly_AddMinutes(bool async) AssertSql( """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE TIMEVALUE(DATEADD('n', CLNG(3.0), `m`.`Time`)) = TIMEVALUE('10:18:50') """); @@ -8814,7 +8905,7 @@ public override async Task Where_TimeOnly_IsBetween(bool async) AssertSql( """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE (IIF(`m`.`Time` >= TIMEVALUE('10:00:00'), TRUE, FALSE) BAND IIF(`m`.`Time` < TIMEVALUE('11:00:00'), TRUE, FALSE)) = TRUE """); @@ -8827,6 +8918,111 @@ public override async Task Where_TimeOnly_subtract_TimeOnly(bool async) AssertSql(); } + public override async Task Where_TimeOnly_FromDateTime_compared_to_property(bool async) + { + await base.Where_TimeOnly_FromDateTime_compared_to_property(async); + + AssertSql( + """ +SELECT [t].[Id] AS [TagId], [m].[Id] AS [MissionId] +FROM [Tags] AS [t] +CROSS JOIN [Missions] AS [m] +WHERE CAST([t].[IssueDate] AS time) = [m].[Time] +"""); + } + + public override async Task Where_TimeOnly_FromDateTime_compared_to_parameter(bool async) + { + await base.Where_TimeOnly_FromDateTime_compared_to_parameter(async); + + AssertSql( + """ +@__time_0='02:00' (DbType = Time) + +SELECT [t].[Id], [t].[GearNickName], [t].[GearSquadId], [t].[IssueDate], [t].[Note] +FROM [Tags] AS [t] +LEFT JOIN [Gears] AS [g] ON [t].[GearNickName] = [g].[Nickname] AND [t].[GearSquadId] = [g].[SquadId] +WHERE [g].[Nickname] IS NOT NULL AND [g].[SquadId] IS NOT NULL AND CAST(DATEADD(hour, CAST(CAST([g].[SquadId] AS float) AS int), [t].[IssueDate]) AS time) = @__time_0 +"""); + } + + public override async Task Where_TimeOnly_FromDateTime_compared_to_constant(bool async) + { + await base.Where_TimeOnly_FromDateTime_compared_to_constant(async); + + AssertSql( + """ +SELECT [t].[Id], [t].[GearNickName], [t].[GearSquadId], [t].[IssueDate], [t].[Note] +FROM [Tags] AS [t] +WHERE CAST(DATEADD(hour, CAST(CAST(CAST(LEN([t].[Note]) AS int) AS float) AS int), [t].[IssueDate]) AS time) > '09:00:00' +"""); + } + + public override async Task Where_TimeOnly_FromTimeSpan_compared_to_property(bool async) + { + await base.Where_TimeOnly_FromTimeSpan_compared_to_property(async); + + AssertSql( + """ +SELECT [m].[Id], [m].[BriefingDocument], [m].[BriefingDocumentFileExtension], [m].[CodeName], [m].[Date], [m].[Difficulty], [m].[Duration], [m].[Rating], [m].[Time], [m].[Timeline] +FROM [Missions] AS [m] +WHERE CAST([m].[Duration] AS time) < [m].[Time] +"""); + } + + public override async Task Where_TimeOnly_FromTimeSpan_compared_to_parameter(bool async) + { + await base.Where_TimeOnly_FromTimeSpan_compared_to_parameter(async); + + AssertSql( + """ +@__time_0='01:02' (DbType = Time) + +SELECT [m].[Id], [m].[BriefingDocument], [m].[BriefingDocumentFileExtension], [m].[CodeName], [m].[Date], [m].[Difficulty], [m].[Duration], [m].[Rating], [m].[Time], [m].[Timeline] +FROM [Missions] AS [m] +WHERE CAST([m].[Duration] AS time) = @__time_0 +"""); + } + + public override async Task Order_by_TimeOnly_FromTimeSpan(bool async) + { + await base.Order_by_TimeOnly_FromTimeSpan(async); + + AssertSql( + """ +SELECT [m].[Id], [m].[BriefingDocument], [m].[BriefingDocumentFileExtension], [m].[CodeName], [m].[Date], [m].[Difficulty], [m].[Duration], [m].[Rating], [m].[Time], [m].[Timeline] +FROM [Missions] AS [m] +ORDER BY CAST([m].[Duration] AS time) +"""); + } + + public override async Task Where_DateOnly_FromDateTime_compared_to_property(bool async) + { + await base.Where_DateOnly_FromDateTime_compared_to_property(async); + + AssertSql( + """ +SELECT `t`.`Id` AS `TagId`, `m`.`Id` AS `MissionId` +FROM `Tags` AS `t`, +`Missions` AS `m` +WHERE `t`.`IssueDate` > `m`.`Date` +"""); + } + + public override async Task Where_DateOnly_FromDateTime_compared_to_constant_and_parameter(bool async) + { + await base.Where_DateOnly_FromDateTime_compared_to_constant_and_parameter(async); + + AssertSql( + """ +@__prm_0='10/11/0002' (DbType = Date) + +SELECT [t].[Id], [t].[GearNickName], [t].[GearSquadId], [t].[IssueDate], [t].[Note] +FROM [Tags] AS [t] +WHERE CAST([t].[IssueDate] AS date) IN (@__prm_0, '0015-03-07') +"""); + } + public override async Task Include_on_entity_that_is_not_present_in_final_projection_but_uses_TypeIs_instead(bool async) { await base.Include_on_entity_that_is_not_present_in_final_projection_but_uses_TypeIs_instead(async); @@ -8913,26 +9109,26 @@ public override async Task Join_entity_with_itself_grouped_by_key_followed_by_in await base.Join_entity_with_itself_grouped_by_key_followed_by_include_skip_take(async); AssertSql( -""" -SELECT `t1`.`Nickname`, `t1`.`SquadId`, `t1`.`AssignedCityName`, `t1`.`CityOfBirthName`, `t1`.`Discriminator`, `t1`.`FullName`, `t1`.`HasSoulPatch`, `t1`.`LeaderNickname`, `t1`.`LeaderSquadId`, `t1`.`Rank`, `t1`.`HasSoulPatch0`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + """ +SELECT `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`AssignedCityName`, `s0`.`CityOfBirthName`, `s0`.`Discriminator`, `s0`.`FullName`, `s0`.`HasSoulPatch`, `s0`.`LeaderNickname`, `s0`.`LeaderSquadId`, `s0`.`Rank`, `s0`.`HasSoulPatch0`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM ( - SELECT TOP 10 `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`Discriminator`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`HasSoulPatch0` + SELECT TOP 10 `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`Discriminator`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`HasSoulPatch0` FROM ( - SELECT TOP 10 `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `t`.`HasSoulPatch` AS `HasSoulPatch0` + SELECT TOP 10 `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `g1`.`HasSoulPatch` AS `HasSoulPatch0` FROM `Gears` AS `g` LEFT JOIN ( SELECT MIN(IIF(LEN(`g0`.`Nickname`) IS NULL, NULL, CLNG(LEN(`g0`.`Nickname`)))) AS `c`, `g0`.`HasSoulPatch` FROM `Gears` AS `g0` WHERE `g0`.`Nickname` <> 'Dom' GROUP BY `g0`.`HasSoulPatch` - ) AS `t` ON IIF(LEN(`g`.`Nickname`) IS NULL, NULL, CLNG(LEN(`g`.`Nickname`))) = `t`.`c` - WHERE `t`.`c` IS NOT NULL + ) AS `g1` ON IIF(LEN(`g`.`Nickname`) IS NULL, NULL, CLNG(LEN(`g`.`Nickname`))) = `g1`.`c` + WHERE `g1`.`c` IS NOT NULL ORDER BY `g`.`Nickname` - ) AS `t0` - ORDER BY `t0`.`Nickname` DESC -) AS `t1` -LEFT JOIN `Weapons` AS `w` ON `t1`.`FullName` = `w`.`OwnerFullName` -ORDER BY `t1`.`Nickname`, `t1`.`SquadId`, NOT (`t1`.`HasSoulPatch0`) + ) AS `s` + ORDER BY `s`.`Nickname` DESC +) AS `s0` +LEFT JOIN `Weapons` AS `w` ON `s0`.`FullName` = `w`.`OwnerFullName` +ORDER BY `s0`.`Nickname`, `s0`.`SquadId`, NOT (`s0`.`HasSoulPatch0`) """); } @@ -9085,7 +9281,7 @@ public override async Task Where_equals_method_on_nullable_with_object_overload( AssertSql( """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE `m`.`Rating` IS NULL """); @@ -9551,18 +9747,18 @@ public override async Task ElementAt_basic_with_OrderBy(bool async) await base.ElementAt_basic_with_OrderBy(async); AssertSql( -""" -SELECT `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`Discriminator`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank` + """ +SELECT `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`AssignedCityName`, `g1`.`CityOfBirthName`, `g1`.`Discriminator`, `g1`.`FullName`, `g1`.`HasSoulPatch`, `g1`.`LeaderNickname`, `g1`.`LeaderSquadId`, `g1`.`Rank` FROM ( - SELECT TOP 1 `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`Discriminator`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank` + SELECT TOP 1 `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank` FROM ( SELECT TOP 1 `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` FROM `Gears` AS `g` ORDER BY `g`.`FullName` - ) AS `t` - ORDER BY `t`.`FullName` DESC -) AS `t0` -ORDER BY `t0`.`FullName` + ) AS `g0` + ORDER BY `g0`.`FullName` DESC +) AS `g1` +ORDER BY `g1`.`FullName` """); } @@ -9571,18 +9767,18 @@ public override async Task ElementAtOrDefault_basic_with_OrderBy(bool async) await base.ElementAtOrDefault_basic_with_OrderBy(async); AssertSql( -""" -SELECT `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`Discriminator`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank` + """ +SELECT `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`AssignedCityName`, `g1`.`CityOfBirthName`, `g1`.`Discriminator`, `g1`.`FullName`, `g1`.`HasSoulPatch`, `g1`.`LeaderNickname`, `g1`.`LeaderSquadId`, `g1`.`Rank` FROM ( - SELECT TOP 1 `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`Discriminator`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank` + SELECT TOP 1 `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank` FROM ( SELECT TOP 2 `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` FROM `Gears` AS `g` ORDER BY `g`.`FullName` - ) AS `t` - ORDER BY `t`.`FullName` DESC -) AS `t0` -ORDER BY `t0`.`FullName` + ) AS `g0` + ORDER BY `g0`.`FullName` DESC +) AS `g1` +ORDER BY `g1`.`FullName` """); } @@ -9591,18 +9787,18 @@ public override async Task ElementAtOrDefault_basic_with_OrderBy_parameter(bool await base.ElementAtOrDefault_basic_with_OrderBy_parameter(async); AssertSql( -""" -SELECT `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`Discriminator`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank` + """ +SELECT `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`AssignedCityName`, `g1`.`CityOfBirthName`, `g1`.`Discriminator`, `g1`.`FullName`, `g1`.`HasSoulPatch`, `g1`.`LeaderNickname`, `g1`.`LeaderSquadId`, `g1`.`Rank` FROM ( - SELECT TOP 1 `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`Discriminator`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank` + SELECT TOP 1 `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank` FROM ( SELECT TOP 3 `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` FROM `Gears` AS `g` ORDER BY `g`.`FullName` - ) AS `t` - ORDER BY `t`.`FullName` DESC -) AS `t0` -ORDER BY `t0`.`FullName` + ) AS `g0` + ORDER BY `g0`.`FullName` DESC +) AS `g1` +ORDER BY `g1`.`FullName` """); } @@ -9705,26 +9901,26 @@ SELECT IIF(SUM(IIF(LEN(`c`.`Location`) IS NULL, NULL, CLNG(LEN(`c`.`Location`))) INNER JOIN `Squads` AS `s0` ON `g2`.`SquadId` = `s0`.`Id`) INNER JOIN `Cities` AS `c` ON `g2`.`CityOfBirthName` = `c`.`Name` WHERE 'Marcus' IN ( - SELECT `t0`.`Nickname` + SELECT `u0`.`Nickname` FROM ( - SELECT `g3`.`Nickname`, `g3`.`SquadId`, `g3`.`AssignedCityName`, `g3`.`CityOfBirthName`, `g3`.`Discriminator`, `g3`.`FullName`, `g3`.`HasSoulPatch`, `g3`.`LeaderNickname`, `g3`.`LeaderSquadId`, `g3`.`Rank` + SELECT `g3`.`Nickname` FROM `Gears` AS `g3` UNION ALL - SELECT `g4`.`Nickname`, `g4`.`SquadId`, `g4`.`AssignedCityName`, `g4`.`CityOfBirthName`, `g4`.`Discriminator`, `g4`.`FullName`, `g4`.`HasSoulPatch`, `g4`.`LeaderNickname`, `g4`.`LeaderSquadId`, `g4`.`Rank` + SELECT `g4`.`Nickname` FROM `Gears` AS `g4` - ) AS `t0` + ) AS `u0` ) AND (`s`.`Name` = `s0`.`Name` OR (`s`.`Name` IS NULL AND `s0`.`Name` IS NULL))) AS `SumOfLengths` FROM `Gears` AS `g` INNER JOIN `Squads` AS `s` ON `g`.`SquadId` = `s`.`Id` WHERE 'Marcus' IN ( - SELECT `t`.`Nickname` + SELECT `u`.`Nickname` FROM ( - SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank` + SELECT `g0`.`Nickname` FROM `Gears` AS `g0` UNION ALL - SELECT `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`AssignedCityName`, `g1`.`CityOfBirthName`, `g1`.`Discriminator`, `g1`.`FullName`, `g1`.`HasSoulPatch`, `g1`.`LeaderNickname`, `g1`.`LeaderSquadId`, `g1`.`Rank` + SELECT `g1`.`Nickname` FROM `Gears` AS `g1` - ) AS `t` + ) AS `u` ) GROUP BY `s`.`Name` """); @@ -9815,6 +10011,151 @@ public override async Task Nav_expansion_inside_ElementAt_correlated_to_source(b AssertSql(); } + public override async Task Include_one_to_many_on_composite_key_then_orderby_key_properties(bool async) + { + await base.Include_one_to_many_on_composite_key_then_orderby_key_properties(async); + + AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Gears` AS `g` +LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName` +ORDER BY `g`.`SquadId`, `g`.`Nickname` +"""); + } + + public override async Task Find_underlying_property_after_GroupJoin_DefaultIfEmpty(bool async) + { + await base.Find_underlying_property_after_GroupJoin_DefaultIfEmpty(async); + + AssertSql( + """ +SELECT `g`.`FullName`, IIF(`l0`.`ThreatLevel` IS NULL, NULL, CLNG(`l0`.`ThreatLevel`)) AS `ThreatLevel` +FROM `Gears` AS `g` +LEFT JOIN ( + SELECT `l`.`ThreatLevel`, `l`.`DefeatedByNickname` + FROM `LocustLeaders` AS `l` + WHERE `l`.`Discriminator` = 'LocustCommander' +) AS `l0` ON `g`.`Nickname` = `l0`.`DefeatedByNickname` +"""); + } + + public override async Task Join_include_coalesce_simple(bool async) + { + await base.Join_include_coalesce_simple(async); + + AssertSql( + """ +SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, IIF(`g`.`Nickname` = 'Marcus', TRUE, FALSE) +FROM (`Gears` AS `g` +LEFT JOIN `Gears` AS `g0` ON `g`.`LeaderNickname` = `g0`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `g0`.`Nickname`, `g0`.`SquadId` +""", + // + """ +SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, `g`.`Nickname`, `g`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM (`Gears` AS `g` +LEFT JOIN `Gears` AS `g0` ON `g`.`LeaderNickname` = `g0`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `g0`.`FullName` = `w`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `g0`.`Nickname`, `g0`.`SquadId` +""", + // + """ +SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, `g`.`Nickname`, `g`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` +FROM ((`Gears` AS `g` +LEFT JOIN `Gears` AS `g0` ON `g`.`LeaderNickname` = `g0`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `g0`.`FullName` = `w`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `g0`.`Nickname`, `g0`.`SquadId`, `w`.`Id` +"""); + } + + public override async Task Join_include_coalesce_nested(bool async) + { + await base.Join_include_coalesce_nested(async); + + AssertSql( + """ +SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, IIF(`g`.`Nickname` = 'Marcus', TRUE, FALSE) +FROM (`Gears` AS `g` +LEFT JOIN `Gears` AS `g0` ON `g`.`LeaderNickname` = `g0`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `g0`.`Nickname`, `g0`.`SquadId` +""", + // + """ +SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, `g`.`Nickname`, `g`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `w1`.`Id`, `w1`.`AmmunitionType`, `w1`.`IsAutomatic`, `w1`.`Name`, `w1`.`OwnerFullName`, `w1`.`SynergyWithId` +FROM (((`Gears` AS `g` +LEFT JOIN `Gears` AS `g0` ON `g`.`LeaderNickname` = `g0`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `g0`.`FullName` = `w`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w0` ON `g0`.`FullName` = `w0`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w1` ON `g0`.`FullName` = `w1`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `g0`.`Nickname`, `g0`.`SquadId`, `w`.`Id`, `w0`.`Id` +"""); + } + + public override async Task Join_include_conditional(bool async) + { + await base.Join_include_conditional(async); + + AssertSql( + """ +SELECT IIF(`g0`.`Nickname` IS NOT NULL AND `g0`.`SquadId` IS NOT NULL, TRUE, FALSE), `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`Discriminator`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, IIF(`g`.`Nickname` = 'Marcus', TRUE, FALSE) +FROM (`Gears` AS `g` +LEFT JOIN `Gears` AS `g0` ON `g`.`LeaderNickname` = `g0`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `g0`.`Nickname`, `g0`.`SquadId` +"""); + } + + public override async Task Derived_reference_is_skipped_when_base_type(bool async) + { + await base.Derived_reference_is_skipped_when_base_type(async); + + AssertSql( + """ +SELECT `l`.`Name`, `l`.`Discriminator`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l`.`DefeatedByNickname`, `l`.`DefeatedBySquadId`, `l`.`HighCommandId`, `l0`.`Id`, `l0`.`IsOperational`, `l0`.`Name` +FROM `LocustLeaders` AS `l` +LEFT JOIN `LocustHighCommands` AS `l0` ON `l`.`HighCommandId` = `l0`.`Id` +"""); + } + + public override async Task Nested_contains_with_enum(bool async) + { + await base.Nested_contains_with_enum(async); + + AssertSql( + """ +@__key_1='5f221fb9-66f4-442a-92c9-d97ed5989cc7' +@__key_1='5f221fb9-66f4-442a-92c9-d97ed5989cc7' + +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`Discriminator`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` +FROM `Gears` AS `g` +WHERE IIF(`g`.`Rank` = 1, @__key_1, @__key_1) IN ('{0a47bcb7-a1cb-4345-8944-c58f82d6aac7}', '{5f221fb9-66f4-442a-92c9-d97ed5989cc7}') +""", + // + """ +@__key_1='5f221fb9-66f4-442a-92c9-d97ed5989cc7' +@__key_1='5f221fb9-66f4-442a-92c9-d97ed5989cc7' + +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Weapons` AS `w` +WHERE IIF(`w`.`AmmunitionType` = 1, @__key_1, @__key_1) IN ('{0a47bcb7-a1cb-4345-8944-c58f82d6aac7}', '{5f221fb9-66f4-442a-92c9-d97ed5989cc7}') +"""); + } + + public override async Task Non_string_concat_uses_appropriate_type_mapping(bool async) + { + await base.Non_string_concat_uses_appropriate_type_mapping(async); + + AssertSql( + """ +SELECT `m`.`Duration` +FROM `Missions` AS `m` +"""); + } + private void AssertSql(params string[] expected) => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); } diff --git a/test/EFCore.Jet.FunctionalTests/Query/InheritanceRelationshipsQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/InheritanceRelationshipsQueryJetTest.cs index edd3bcbd..cce03794 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/InheritanceRelationshipsQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/InheritanceRelationshipsQueryJetTest.cs @@ -59,18 +59,18 @@ public override async Task Include_self_reference_with_inheritance(bool async) AssertSql( """ -SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `t`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b2`.`DerivedInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name`, `t`.`Discriminator`, `t`.`Name`, `t`.`BaseId`, `b3`.`BaseInheritanceRelationshipEntityId`, `b3`.`Id`, `b3`.`Name`, `t`.`OwnedReferenceOnBase_Id`, `t`.`OwnedReferenceOnBase_Name`, `b4`.`DerivedInheritanceRelationshipEntityId`, `b4`.`Id`, `b4`.`Name`, `t`.`OwnedReferenceOnDerived_Id`, `t`.`OwnedReferenceOnDerived_Name` +SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `b1`.`Id`, `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b3`.`DerivedInheritanceRelationshipEntityId`, `b3`.`Id`, `b3`.`Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name`, `b1`.`Discriminator`, `b1`.`Name`, `b1`.`BaseId`, `b4`.`BaseInheritanceRelationshipEntityId`, `b4`.`Id`, `b4`.`Name`, `b1`.`OwnedReferenceOnBase_Id`, `b1`.`OwnedReferenceOnBase_Name`, `b5`.`DerivedInheritanceRelationshipEntityId`, `b5`.`Id`, `b5`.`Name`, `b1`.`OwnedReferenceOnDerived_Id`, `b1`.`OwnedReferenceOnDerived_Name` FROM ((((`BaseEntities` AS `b` LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`Discriminator`, `b0`.`Name`, `b0`.`BaseId`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `b0`.`OwnedReferenceOnDerived_Id`, `b0`.`OwnedReferenceOnDerived_Name` FROM `BaseEntities` AS `b0` WHERE `b0`.`Discriminator` = 'DerivedInheritanceRelationshipEntity' -) AS `t` ON `b`.`Id` = `t`.`BaseId`) -LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b2` ON `b`.`Id` = `b2`.`DerivedInheritanceRelationshipEntityId`) -LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b3` ON `t`.`Id` = `b3`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b4` ON `t`.`Id` = `b4`.`DerivedInheritanceRelationshipEntityId` -ORDER BY `b`.`Id`, `t`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b2`.`DerivedInheritanceRelationshipEntityId`, `b2`.`Id`, `b3`.`BaseInheritanceRelationshipEntityId`, `b3`.`Id`, `b4`.`DerivedInheritanceRelationshipEntityId` +) AS `b1` ON `b`.`Id` = `b1`.`BaseId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b2` ON `b`.`Id` = `b2`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b3` ON `b`.`Id` = `b3`.`DerivedInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b4` ON `b1`.`Id` = `b4`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b5` ON `b1`.`Id` = `b5`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id`, `b1`.`Id`, `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b3`.`DerivedInheritanceRelationshipEntityId`, `b3`.`Id`, `b4`.`BaseInheritanceRelationshipEntityId`, `b4`.`Id`, `b5`.`DerivedInheritanceRelationshipEntityId` """); } @@ -348,17 +348,17 @@ public override async Task Include_reference_with_inheritance_on_derived4(bool a AssertSql( """ -SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `t`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b2`.`DerivedInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name`, `t`.`BaseParentId`, `t`.`Discriminator`, `t`.`Name`, `t`.`DerivedInheritanceRelationshipEntityId` +SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `b1`.`Id`, `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b3`.`DerivedInheritanceRelationshipEntityId`, `b3`.`Id`, `b3`.`Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name`, `b1`.`BaseParentId`, `b1`.`Discriminator`, `b1`.`Name`, `b1`.`DerivedInheritanceRelationshipEntityId` FROM ((`BaseEntities` AS `b` LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Discriminator`, `b0`.`Name`, `b0`.`DerivedInheritanceRelationshipEntityId` FROM `BaseReferencesOnDerived` AS `b0` WHERE `b0`.`Discriminator` = 'DerivedReferenceOnDerived' -) AS `t` ON `b`.`Id` = `t`.`DerivedInheritanceRelationshipEntityId`) -LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b2` ON `b`.`Id` = `b2`.`DerivedInheritanceRelationshipEntityId` +) AS `b1` ON `b`.`Id` = `b1`.`DerivedInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b2` ON `b`.`Id` = `b2`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b3` ON `b`.`Id` = `b3`.`DerivedInheritanceRelationshipEntityId` WHERE `b`.`Discriminator` = 'DerivedInheritanceRelationshipEntity' -ORDER BY `b`.`Id`, `t`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b2`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id`, `b1`.`Id`, `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b3`.`DerivedInheritanceRelationshipEntityId` """); } @@ -368,16 +368,16 @@ public override async Task Include_reference_with_inheritance_on_derived_reverse AssertSql( """ -SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Discriminator`, `b`.`Name`, `b`.`DerivedInheritanceRelationshipEntityId`, `t`.`Id`, `t`.`Discriminator`, `t`.`Name`, `t`.`BaseId`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `t`.`OwnedReferenceOnBase_Id`, `t`.`OwnedReferenceOnBase_Name`, `b2`.`DerivedInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `t`.`OwnedReferenceOnDerived_Id`, `t`.`OwnedReferenceOnDerived_Name` +SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Discriminator`, `b`.`Name`, `b`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Discriminator`, `b1`.`Name`, `b1`.`BaseId`, `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b1`.`OwnedReferenceOnBase_Id`, `b1`.`OwnedReferenceOnBase_Name`, `b3`.`DerivedInheritanceRelationshipEntityId`, `b3`.`Id`, `b3`.`Name`, `b1`.`OwnedReferenceOnDerived_Id`, `b1`.`OwnedReferenceOnDerived_Name` FROM ((`BaseReferencesOnDerived` AS `b` LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`Discriminator`, `b0`.`Name`, `b0`.`BaseId`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `b0`.`OwnedReferenceOnDerived_Id`, `b0`.`OwnedReferenceOnDerived_Name` FROM `BaseEntities` AS `b0` WHERE `b0`.`Discriminator` = 'DerivedInheritanceRelationshipEntity' -) AS `t` ON `b`.`BaseParentId` = `t`.`Id`) -LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `t`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b2` ON `t`.`Id` = `b2`.`DerivedInheritanceRelationshipEntityId` -ORDER BY `b`.`Id`, `t`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b2`.`DerivedInheritanceRelationshipEntityId` +) AS `b1` ON `b`.`BaseParentId` = `b1`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b2` ON `b1`.`Id` = `b2`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b3` ON `b1`.`Id` = `b3`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id`, `b1`.`Id`, `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b3`.`DerivedInheritanceRelationshipEntityId` """); } @@ -418,18 +418,18 @@ public override async Task Include_reference_with_inheritance_on_derived_with_fi await base.Include_reference_with_inheritance_on_derived_with_filter4(async); AssertSql( -""" -SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `t`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b2`.`DerivedInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name`, `t`.`BaseParentId`, `t`.`Discriminator`, `t`.`Name`, `t`.`DerivedInheritanceRelationshipEntityId` + """ +SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `b1`.`Id`, `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b3`.`DerivedInheritanceRelationshipEntityId`, `b3`.`Id`, `b3`.`Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name`, `b1`.`BaseParentId`, `b1`.`Discriminator`, `b1`.`Name`, `b1`.`DerivedInheritanceRelationshipEntityId` FROM ((`BaseEntities` AS `b` LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Discriminator`, `b0`.`Name`, `b0`.`DerivedInheritanceRelationshipEntityId` FROM `BaseReferencesOnDerived` AS `b0` WHERE `b0`.`Discriminator` = 'DerivedReferenceOnDerived' -) AS `t` ON `b`.`Id` = `t`.`DerivedInheritanceRelationshipEntityId`) -LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b2` ON `b`.`Id` = `b2`.`DerivedInheritanceRelationshipEntityId` +) AS `b1` ON `b`.`Id` = `b1`.`DerivedInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b2` ON `b`.`Id` = `b2`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b3` ON `b`.`Id` = `b3`.`DerivedInheritanceRelationshipEntityId` WHERE `b`.`Discriminator` = 'DerivedInheritanceRelationshipEntity' AND (`b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL) -ORDER BY `b`.`Id`, `t`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b2`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id`, `b1`.`Id`, `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b3`.`DerivedInheritanceRelationshipEntityId` """); } @@ -438,18 +438,18 @@ public override async Task Include_reference_with_inheritance_on_derived_with_fi await base.Include_reference_with_inheritance_on_derived_with_filter_reverse(async); AssertSql( -""" -SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Discriminator`, `b`.`Name`, `b`.`DerivedInheritanceRelationshipEntityId`, `t`.`Id`, `t`.`Discriminator`, `t`.`Name`, `t`.`BaseId`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `t`.`OwnedReferenceOnBase_Id`, `t`.`OwnedReferenceOnBase_Name`, `b2`.`DerivedInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `t`.`OwnedReferenceOnDerived_Id`, `t`.`OwnedReferenceOnDerived_Name` + """ +SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Discriminator`, `b`.`Name`, `b`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Discriminator`, `b1`.`Name`, `b1`.`BaseId`, `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b1`.`OwnedReferenceOnBase_Id`, `b1`.`OwnedReferenceOnBase_Name`, `b3`.`DerivedInheritanceRelationshipEntityId`, `b3`.`Id`, `b3`.`Name`, `b1`.`OwnedReferenceOnDerived_Id`, `b1`.`OwnedReferenceOnDerived_Name` FROM ((`BaseReferencesOnDerived` AS `b` LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`Discriminator`, `b0`.`Name`, `b0`.`BaseId`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `b0`.`OwnedReferenceOnDerived_Id`, `b0`.`OwnedReferenceOnDerived_Name` FROM `BaseEntities` AS `b0` WHERE `b0`.`Discriminator` = 'DerivedInheritanceRelationshipEntity' -) AS `t` ON `b`.`BaseParentId` = `t`.`Id`) -LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `t`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b2` ON `t`.`Id` = `b2`.`DerivedInheritanceRelationshipEntityId` +) AS `b1` ON `b`.`BaseParentId` = `b1`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b2` ON `b1`.`Id` = `b2`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b3` ON `b1`.`Id` = `b3`.`DerivedInheritanceRelationshipEntityId` WHERE `b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL -ORDER BY `b`.`Id`, `t`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b2`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id`, `b1`.`Id`, `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b3`.`DerivedInheritanceRelationshipEntityId` """); } @@ -491,16 +491,16 @@ public override async Task Include_reference_without_inheritance_on_derived_reve AssertSql( """ -SELECT `r`.`Id`, `r`.`Name`, `r`.`ParentId`, `t`.`Id`, `t`.`Discriminator`, `t`.`Name`, `t`.`BaseId`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `t`.`OwnedReferenceOnBase_Id`, `t`.`OwnedReferenceOnBase_Name`, `b1`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `t`.`OwnedReferenceOnDerived_Id`, `t`.`OwnedReferenceOnDerived_Name` +SELECT `r`.`Id`, `r`.`Name`, `r`.`ParentId`, `b0`.`Id`, `b0`.`Discriminator`, `b0`.`Name`, `b0`.`BaseId`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `b2`.`DerivedInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b0`.`OwnedReferenceOnDerived_Id`, `b0`.`OwnedReferenceOnDerived_Name` FROM ((`ReferencesOnDerived` AS `r` LEFT JOIN ( SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name` FROM `BaseEntities` AS `b` WHERE `b`.`Discriminator` = 'DerivedInheritanceRelationshipEntity' -) AS `t` ON `r`.`ParentId` = `t`.`Id`) -LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `t`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b1` ON `t`.`Id` = `b1`.`DerivedInheritanceRelationshipEntityId` -ORDER BY `r`.`Id`, `t`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b1`.`DerivedInheritanceRelationshipEntityId` +) AS `b0` ON `r`.`ParentId` = `b0`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b0`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b2` ON `b0`.`Id` = `b2`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `r`.`Id`, `b0`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b2`.`DerivedInheritanceRelationshipEntityId` """); } @@ -542,7 +542,7 @@ public override async Task Include_collection_with_inheritance_on_derived3(bool AssertSql( """ -SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b1`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name`, `t`.`Id`, `t`.`Discriminator`, `t`.`Name`, `t`.`ParentId`, `t`.`DerivedInheritanceRelationshipEntityId` +SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b1`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name`, `b3`.`Id`, `b3`.`Discriminator`, `b3`.`Name`, `b3`.`ParentId`, `b3`.`DerivedInheritanceRelationshipEntityId` FROM ((`BaseEntities` AS `b` LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b1` ON `b`.`Id` = `b1`.`DerivedInheritanceRelationshipEntityId`) @@ -550,7 +550,7 @@ LEFT JOIN ( SELECT `b2`.`Id`, `b2`.`Discriminator`, `b2`.`Name`, `b2`.`ParentId`, `b2`.`DerivedInheritanceRelationshipEntityId` FROM `BaseCollectionsOnDerived` AS `b2` WHERE `b2`.`Discriminator` = 'DerivedCollectionOnDerived' -) AS `t` ON `b`.`Id` = `t`.`DerivedInheritanceRelationshipEntityId` +) AS `b3` ON `b`.`Id` = `b3`.`DerivedInheritanceRelationshipEntityId` WHERE `b`.`Discriminator` = 'DerivedInheritanceRelationshipEntity' ORDER BY `b`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b1`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id` """); @@ -562,16 +562,16 @@ public override async Task Include_collection_with_inheritance_on_derived_revers AssertSql( """ -SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`ParentId`, `b`.`DerivedInheritanceRelationshipEntityId`, `t`.`Id`, `t`.`Discriminator`, `t`.`Name`, `t`.`BaseId`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `t`.`OwnedReferenceOnBase_Id`, `t`.`OwnedReferenceOnBase_Name`, `b2`.`DerivedInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `t`.`OwnedReferenceOnDerived_Id`, `t`.`OwnedReferenceOnDerived_Name` +SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`ParentId`, `b`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Discriminator`, `b1`.`Name`, `b1`.`BaseId`, `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b1`.`OwnedReferenceOnBase_Id`, `b1`.`OwnedReferenceOnBase_Name`, `b3`.`DerivedInheritanceRelationshipEntityId`, `b3`.`Id`, `b3`.`Name`, `b1`.`OwnedReferenceOnDerived_Id`, `b1`.`OwnedReferenceOnDerived_Name` FROM ((`BaseCollectionsOnDerived` AS `b` LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`Discriminator`, `b0`.`Name`, `b0`.`BaseId`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `b0`.`OwnedReferenceOnDerived_Id`, `b0`.`OwnedReferenceOnDerived_Name` FROM `BaseEntities` AS `b0` WHERE `b0`.`Discriminator` = 'DerivedInheritanceRelationshipEntity' -) AS `t` ON `b`.`ParentId` = `t`.`Id`) -LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `t`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b2` ON `t`.`Id` = `b2`.`DerivedInheritanceRelationshipEntityId` -ORDER BY `b`.`Id`, `t`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b2`.`DerivedInheritanceRelationshipEntityId` +) AS `b1` ON `b`.`ParentId` = `b1`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b2` ON `b1`.`Id` = `b2`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b3` ON `b1`.`Id` = `b3`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id`, `b1`.`Id`, `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b3`.`DerivedInheritanceRelationshipEntityId` """); } @@ -679,7 +679,7 @@ public override async Task Nested_include_with_inheritance_collection_reference( AssertSql( """ -SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b1`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name`, `t`.`Id`, `t`.`BaseParentId`, `t`.`Discriminator`, `t`.`Name`, `t`.`DerivedProperty`, `t`.`Id0`, `t`.`Discriminator0`, `t`.`Name0`, `t`.`ParentCollectionId`, `t`.`ParentReferenceId` +SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b1`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name`, `s`.`Id`, `s`.`BaseParentId`, `s`.`Discriminator`, `s`.`Name`, `s`.`DerivedProperty`, `s`.`Id0`, `s`.`Discriminator0`, `s`.`Name0`, `s`.`ParentCollectionId`, `s`.`ParentReferenceId` FROM ((`BaseEntities` AS `b` LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b1` ON `b`.`Id` = `b1`.`DerivedInheritanceRelationshipEntityId`) @@ -687,8 +687,8 @@ LEFT JOIN ( SELECT `b2`.`Id`, `b2`.`BaseParentId`, `b2`.`Discriminator`, `b2`.`Name`, `b2`.`DerivedProperty`, `n`.`Id` AS `Id0`, `n`.`Discriminator` AS `Discriminator0`, `n`.`Name` AS `Name0`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId` FROM `BaseCollectionsOnBase` AS `b2` LEFT JOIN `NestedReferences` AS `n` ON `b2`.`Id` = `n`.`ParentCollectionId` -) AS `t` ON `b`.`Id` = `t`.`BaseParentId` -ORDER BY `b`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b1`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id`, `t`.`Id` +) AS `s` ON `b`.`Id` = `s`.`BaseParentId` +ORDER BY `b`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b1`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id`, `s`.`Id` """); } @@ -714,7 +714,7 @@ public override async Task Nested_include_with_inheritance_collection_collection AssertSql( """ -SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b1`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name`, `t`.`Id`, `t`.`BaseParentId`, `t`.`Discriminator`, `t`.`Name`, `t`.`DerivedProperty`, `t`.`Id0`, `t`.`Discriminator0`, `t`.`Name0`, `t`.`ParentCollectionId`, `t`.`ParentReferenceId` +SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b1`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name`, `s`.`Id`, `s`.`BaseParentId`, `s`.`Discriminator`, `s`.`Name`, `s`.`DerivedProperty`, `s`.`Id0`, `s`.`Discriminator0`, `s`.`Name0`, `s`.`ParentCollectionId`, `s`.`ParentReferenceId` FROM ((`BaseEntities` AS `b` LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b1` ON `b`.`Id` = `b1`.`DerivedInheritanceRelationshipEntityId`) @@ -722,8 +722,8 @@ LEFT JOIN ( SELECT `b2`.`Id`, `b2`.`BaseParentId`, `b2`.`Discriminator`, `b2`.`Name`, `b2`.`DerivedProperty`, `n`.`Id` AS `Id0`, `n`.`Discriminator` AS `Discriminator0`, `n`.`Name` AS `Name0`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId` FROM `BaseCollectionsOnBase` AS `b2` LEFT JOIN `NestedCollections` AS `n` ON `b2`.`Id` = `n`.`ParentCollectionId` -) AS `t` ON `b`.`Id` = `t`.`BaseParentId` -ORDER BY `b`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b1`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id`, `t`.`Id` +) AS `s` ON `b`.`Id` = `s`.`BaseParentId` +ORDER BY `b`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b1`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id`, `s`.`Id` """); } @@ -748,14 +748,16 @@ public override async Task Nested_include_collection_reference_on_non_entity_bas await base.Nested_include_collection_reference_on_non_entity_base(async); AssertSql( - $@"SELECT `r`.`Id`, `r`.`Name`, `t`.`Id`, `t`.`Name`, `t`.`ReferenceId`, `t`.`ReferencedEntityId`, `t`.`Id0`, `t`.`Name0` + """ +SELECT `r`.`Id`, `r`.`Name`, `s`.`Id`, `s`.`Name`, `s`.`ReferenceId`, `s`.`ReferencedEntityId`, `s`.`Id0`, `s`.`Name0` FROM `ReferencedEntities` AS `r` LEFT JOIN ( SELECT `p`.`Id`, `p`.`Name`, `p`.`ReferenceId`, `p`.`ReferencedEntityId`, `r0`.`Id` AS `Id0`, `r0`.`Name` AS `Name0` FROM `PrincipalEntities` AS `p` LEFT JOIN `ReferencedEntities` AS `r0` ON `p`.`ReferenceId` = `r0`.`Id` -) AS `t` ON `r`.`Id` = `t`.`ReferencedEntityId` -ORDER BY `r`.`Id`, `t`.`Id`"); +) AS `s` ON `r`.`Id` = `s`.`ReferencedEntityId` +ORDER BY `r`.`Id`, `s`.`Id` +"""); } public override async Task Collection_projection_on_base_type(bool async) @@ -777,7 +779,7 @@ public override async Task Include_on_derived_type_with_queryable_Cast(bool asyn AssertSql( """ -SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b1`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name`, `t`.`Id`, `t`.`Discriminator`, `t`.`Name`, `t`.`ParentId`, `t`.`DerivedInheritanceRelationshipEntityId` +SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b1`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name`, `b3`.`Id`, `b3`.`Discriminator`, `b3`.`Name`, `b3`.`ParentId`, `b3`.`DerivedInheritanceRelationshipEntityId` FROM ((`BaseEntities` AS `b` LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b1` ON `b`.`Id` = `b1`.`DerivedInheritanceRelationshipEntityId`) @@ -785,7 +787,7 @@ LEFT JOIN ( SELECT `b2`.`Id`, `b2`.`Discriminator`, `b2`.`Name`, `b2`.`ParentId`, `b2`.`DerivedInheritanceRelationshipEntityId` FROM `BaseCollectionsOnDerived` AS `b2` WHERE `b2`.`Discriminator` = 'DerivedCollectionOnDerived' -) AS `t` ON `b`.`Id` = `t`.`DerivedInheritanceRelationshipEntityId` +) AS `b3` ON `b`.`Id` = `b3`.`DerivedInheritanceRelationshipEntityId` WHERE `b`.`Id` >= 4 ORDER BY `b`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b1`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id` """); @@ -803,23 +805,23 @@ ORDER BY `b`.`Id` """, // """ -SELECT `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`Id` +SELECT `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b`.`Id` FROM `BaseEntities` AS `b` -INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId` +INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b2` ON `b`.`Id` = `b2`.`BaseInheritanceRelationshipEntityId` ORDER BY `b`.`Id` """, // """ -SELECT `b0`.`DerivedInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`Id` +SELECT `b3`.`DerivedInheritanceRelationshipEntityId`, `b3`.`Id`, `b3`.`Name`, `b`.`Id` FROM `BaseEntities` AS `b` -INNER JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b0` ON `b`.`Id` = `b0`.`DerivedInheritanceRelationshipEntityId` +INNER JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b3` ON `b`.`Id` = `b3`.`DerivedInheritanceRelationshipEntityId` ORDER BY `b`.`Id` """, // """ -SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Discriminator`, `b0`.`Name`, `b0`.`DerivedProperty`, `b`.`Id` +SELECT `b4`.`Id`, `b4`.`BaseParentId`, `b4`.`Discriminator`, `b4`.`Name`, `b4`.`DerivedProperty`, `b`.`Id` FROM `BaseEntities` AS `b` -INNER JOIN `BaseCollectionsOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseParentId` +INNER JOIN `BaseCollectionsOnBase` AS `b4` ON `b`.`Id` = `b4`.`BaseParentId` ORDER BY `b`.`Id` """); } @@ -837,20 +839,20 @@ public override async Task Include_collection_with_inheritance_reverse_split(boo """, // """ -SELECT `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`Id`, `b0`.`Id` +SELECT `b3`.`BaseInheritanceRelationshipEntityId`, `b3`.`Id`, `b3`.`Name`, `b`.`Id`, `b0`.`Id` FROM (`BaseCollectionsOnBase` AS `b` LEFT JOIN `BaseEntities` AS `b0` ON `b`.`BaseParentId` = `b0`.`Id`) -LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b0`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId` -WHERE `b0`.`Id` IS NOT NULL AND `b1`.`BaseInheritanceRelationshipEntityId` IS NOT NULL +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b3` ON `b0`.`Id` = `b3`.`BaseInheritanceRelationshipEntityId` +WHERE `b0`.`Id` IS NOT NULL AND `b3`.`BaseInheritanceRelationshipEntityId` IS NOT NULL ORDER BY `b`.`Id`, `b0`.`Id` """, // """ -SELECT `b1`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`Id`, `b0`.`Id` +SELECT `b4`.`DerivedInheritanceRelationshipEntityId`, `b4`.`Id`, `b4`.`Name`, `b`.`Id`, `b0`.`Id` FROM (`BaseCollectionsOnBase` AS `b` LEFT JOIN `BaseEntities` AS `b0` ON `b`.`BaseParentId` = `b0`.`Id`) -LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b1` ON `b0`.`Id` = `b1`.`DerivedInheritanceRelationshipEntityId` -WHERE `b0`.`Id` IS NOT NULL AND `b1`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b4` ON `b0`.`Id` = `b4`.`DerivedInheritanceRelationshipEntityId` +WHERE `b0`.`Id` IS NOT NULL AND `b4`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL ORDER BY `b`.`Id`, `b0`.`Id` """); } @@ -868,25 +870,25 @@ ORDER BY `b`.`Id` """, // """ -SELECT `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`Id` +SELECT `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b`.`Id` FROM `BaseEntities` AS `b` -INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId` +INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b2` ON `b`.`Id` = `b2`.`BaseInheritanceRelationshipEntityId` WHERE `b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL ORDER BY `b`.`Id` """, // """ -SELECT `b0`.`DerivedInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`Id` +SELECT `b3`.`DerivedInheritanceRelationshipEntityId`, `b3`.`Id`, `b3`.`Name`, `b`.`Id` FROM `BaseEntities` AS `b` -INNER JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b0` ON `b`.`Id` = `b0`.`DerivedInheritanceRelationshipEntityId` +INNER JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b3` ON `b`.`Id` = `b3`.`DerivedInheritanceRelationshipEntityId` WHERE `b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL ORDER BY `b`.`Id` """, // """ -SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Discriminator`, `b0`.`Name`, `b0`.`DerivedProperty`, `b`.`Id` +SELECT `b4`.`Id`, `b4`.`BaseParentId`, `b4`.`Discriminator`, `b4`.`Name`, `b4`.`DerivedProperty`, `b`.`Id` FROM `BaseEntities` AS `b` -INNER JOIN `BaseCollectionsOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseParentId` +INNER JOIN `BaseCollectionsOnBase` AS `b4` ON `b`.`Id` = `b4`.`BaseParentId` WHERE `b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL ORDER BY `b`.`Id` """); @@ -906,20 +908,20 @@ public override async Task Include_collection_with_inheritance_with_filter_rever """, // """ -SELECT `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`Id`, `b0`.`Id` +SELECT `b3`.`BaseInheritanceRelationshipEntityId`, `b3`.`Id`, `b3`.`Name`, `b`.`Id`, `b0`.`Id` FROM (`BaseCollectionsOnBase` AS `b` LEFT JOIN `BaseEntities` AS `b0` ON `b`.`BaseParentId` = `b0`.`Id`) -LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b0`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId` -WHERE (`b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL) AND (`b0`.`Id` IS NOT NULL AND `b1`.`BaseInheritanceRelationshipEntityId` IS NOT NULL) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b3` ON `b0`.`Id` = `b3`.`BaseInheritanceRelationshipEntityId` +WHERE (`b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL) AND (`b0`.`Id` IS NOT NULL AND `b3`.`BaseInheritanceRelationshipEntityId` IS NOT NULL) ORDER BY `b`.`Id`, `b0`.`Id` """, // """ -SELECT `b1`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`Id`, `b0`.`Id` +SELECT `b4`.`DerivedInheritanceRelationshipEntityId`, `b4`.`Id`, `b4`.`Name`, `b`.`Id`, `b0`.`Id` FROM (`BaseCollectionsOnBase` AS `b` LEFT JOIN `BaseEntities` AS `b0` ON `b`.`BaseParentId` = `b0`.`Id`) -LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b1` ON `b0`.`Id` = `b1`.`DerivedInheritanceRelationshipEntityId` -WHERE (`b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL) AND (`b0`.`Id` IS NOT NULL AND `b1`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b4` ON `b0`.`Id` = `b4`.`DerivedInheritanceRelationshipEntityId` +WHERE (`b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL) AND (`b0`.`Id` IS NOT NULL AND `b4`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL) ORDER BY `b`.`Id`, `b0`.`Id` """); } @@ -936,16 +938,16 @@ ORDER BY `b`.`Id` """, // """ -SELECT `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`Id` +SELECT `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b`.`Id` FROM `BaseEntities` AS `b` -INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId` +INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b2` ON `b`.`Id` = `b2`.`BaseInheritanceRelationshipEntityId` ORDER BY `b`.`Id` """, // """ -SELECT `b0`.`DerivedInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`Id` +SELECT `b3`.`DerivedInheritanceRelationshipEntityId`, `b3`.`Id`, `b3`.`Name`, `b`.`Id` FROM `BaseEntities` AS `b` -INNER JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b0` ON `b`.`Id` = `b0`.`DerivedInheritanceRelationshipEntityId` +INNER JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b3` ON `b`.`Id` = `b3`.`DerivedInheritanceRelationshipEntityId` ORDER BY `b`.`Id` """, // @@ -970,20 +972,20 @@ public override async Task Include_collection_without_inheritance_reverse_split( """, // """ -SELECT `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `c`.`Id`, `b`.`Id` +SELECT `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `c`.`Id`, `b`.`Id` FROM (`CollectionsOnBase` AS `c` LEFT JOIN `BaseEntities` AS `b` ON `c`.`ParentId` = `b`.`Id`) -LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId` -WHERE `b`.`Id` IS NOT NULL AND `b0`.`BaseInheritanceRelationshipEntityId` IS NOT NULL +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b2` ON `b`.`Id` = `b2`.`BaseInheritanceRelationshipEntityId` +WHERE `b`.`Id` IS NOT NULL AND `b2`.`BaseInheritanceRelationshipEntityId` IS NOT NULL ORDER BY `c`.`Id`, `b`.`Id` """, // """ -SELECT `b0`.`DerivedInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `c`.`Id`, `b`.`Id` +SELECT `b3`.`DerivedInheritanceRelationshipEntityId`, `b3`.`Id`, `b3`.`Name`, `c`.`Id`, `b`.`Id` FROM (`CollectionsOnBase` AS `c` LEFT JOIN `BaseEntities` AS `b` ON `c`.`ParentId` = `b`.`Id`) -LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b0` ON `b`.`Id` = `b0`.`DerivedInheritanceRelationshipEntityId` -WHERE `b`.`Id` IS NOT NULL AND `b0`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b3` ON `b`.`Id` = `b3`.`DerivedInheritanceRelationshipEntityId` +WHERE `b`.`Id` IS NOT NULL AND `b3`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL ORDER BY `c`.`Id`, `b`.`Id` """); } @@ -1001,17 +1003,17 @@ ORDER BY `b`.`Id` """, // """ -SELECT `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`Id` +SELECT `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b`.`Id` FROM `BaseEntities` AS `b` -INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId` +INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b2` ON `b`.`Id` = `b2`.`BaseInheritanceRelationshipEntityId` WHERE `b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL ORDER BY `b`.`Id` """, // """ -SELECT `b0`.`DerivedInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`Id` +SELECT `b3`.`DerivedInheritanceRelationshipEntityId`, `b3`.`Id`, `b3`.`Name`, `b`.`Id` FROM `BaseEntities` AS `b` -INNER JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b0` ON `b`.`Id` = `b0`.`DerivedInheritanceRelationshipEntityId` +INNER JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b3` ON `b`.`Id` = `b3`.`DerivedInheritanceRelationshipEntityId` WHERE `b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL ORDER BY `b`.`Id` """, @@ -1039,20 +1041,20 @@ public override async Task Include_collection_without_inheritance_with_filter_re """, // """ -SELECT `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `c`.`Id`, `b`.`Id` +SELECT `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `c`.`Id`, `b`.`Id` FROM (`CollectionsOnBase` AS `c` LEFT JOIN `BaseEntities` AS `b` ON `c`.`ParentId` = `b`.`Id`) -LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId` -WHERE (`c`.`Name` <> 'Bar' OR `c`.`Name` IS NULL) AND (`b`.`Id` IS NOT NULL AND `b0`.`BaseInheritanceRelationshipEntityId` IS NOT NULL) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b2` ON `b`.`Id` = `b2`.`BaseInheritanceRelationshipEntityId` +WHERE (`c`.`Name` <> 'Bar' OR `c`.`Name` IS NULL) AND (`b`.`Id` IS NOT NULL AND `b2`.`BaseInheritanceRelationshipEntityId` IS NOT NULL) ORDER BY `c`.`Id`, `b`.`Id` """, // """ -SELECT `b0`.`DerivedInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `c`.`Id`, `b`.`Id` +SELECT `b3`.`DerivedInheritanceRelationshipEntityId`, `b3`.`Id`, `b3`.`Name`, `c`.`Id`, `b`.`Id` FROM (`CollectionsOnBase` AS `c` LEFT JOIN `BaseEntities` AS `b` ON `c`.`ParentId` = `b`.`Id`) -LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b0` ON `b`.`Id` = `b0`.`DerivedInheritanceRelationshipEntityId` -WHERE (`c`.`Name` <> 'Bar' OR `c`.`Name` IS NULL) AND (`b`.`Id` IS NOT NULL AND `b0`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b3` ON `b`.`Id` = `b3`.`DerivedInheritanceRelationshipEntityId` +WHERE (`c`.`Name` <> 'Bar' OR `c`.`Name` IS NULL) AND (`b`.`Id` IS NOT NULL AND `b3`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL) ORDER BY `c`.`Id`, `b`.`Id` """); } @@ -1070,25 +1072,25 @@ ORDER BY `b`.`Id` """, // """ -SELECT `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`Id` +SELECT `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b`.`Id` FROM `BaseEntities` AS `b` -INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId` +INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b2` ON `b`.`Id` = `b2`.`BaseInheritanceRelationshipEntityId` WHERE `b`.`Discriminator` = 'DerivedInheritanceRelationshipEntity' ORDER BY `b`.`Id` """, // """ -SELECT `b0`.`DerivedInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`Id` +SELECT `b3`.`DerivedInheritanceRelationshipEntityId`, `b3`.`Id`, `b3`.`Name`, `b`.`Id` FROM `BaseEntities` AS `b` -INNER JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b0` ON `b`.`Id` = `b0`.`DerivedInheritanceRelationshipEntityId` +INNER JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b3` ON `b`.`Id` = `b3`.`DerivedInheritanceRelationshipEntityId` WHERE `b`.`Discriminator` = 'DerivedInheritanceRelationshipEntity' ORDER BY `b`.`Id` """, // """ -SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Discriminator`, `b0`.`Name`, `b0`.`DerivedProperty`, `b`.`Id` +SELECT `b4`.`Id`, `b4`.`BaseParentId`, `b4`.`Discriminator`, `b4`.`Name`, `b4`.`DerivedProperty`, `b`.`Id` FROM `BaseEntities` AS `b` -INNER JOIN `BaseCollectionsOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseParentId` +INNER JOIN `BaseCollectionsOnBase` AS `b4` ON `b`.`Id` = `b4`.`BaseParentId` WHERE `b`.`Discriminator` = 'DerivedInheritanceRelationshipEntity' ORDER BY `b`.`Id` """); @@ -1107,25 +1109,25 @@ ORDER BY `b`.`Id` """, // """ -SELECT `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`Id` +SELECT `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b`.`Id` FROM `BaseEntities` AS `b` -INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId` +INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b2` ON `b`.`Id` = `b2`.`BaseInheritanceRelationshipEntityId` WHERE `b`.`Discriminator` = 'DerivedInheritanceRelationshipEntity' ORDER BY `b`.`Id` """, // """ -SELECT `b0`.`DerivedInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`Id` +SELECT `b3`.`DerivedInheritanceRelationshipEntityId`, `b3`.`Id`, `b3`.`Name`, `b`.`Id` FROM `BaseEntities` AS `b` -INNER JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b0` ON `b`.`Id` = `b0`.`DerivedInheritanceRelationshipEntityId` +INNER JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b3` ON `b`.`Id` = `b3`.`DerivedInheritanceRelationshipEntityId` WHERE `b`.`Discriminator` = 'DerivedInheritanceRelationshipEntity' ORDER BY `b`.`Id` """, // """ -SELECT `b0`.`Id`, `b0`.`Discriminator`, `b0`.`Name`, `b0`.`ParentId`, `b0`.`DerivedInheritanceRelationshipEntityId`, `b`.`Id` +SELECT `b4`.`Id`, `b4`.`Discriminator`, `b4`.`Name`, `b4`.`ParentId`, `b4`.`DerivedInheritanceRelationshipEntityId`, `b`.`Id` FROM `BaseEntities` AS `b` -INNER JOIN `BaseCollectionsOnDerived` AS `b0` ON `b`.`Id` = `b0`.`ParentId` +INNER JOIN `BaseCollectionsOnDerived` AS `b4` ON `b`.`Id` = `b4`.`ParentId` WHERE `b`.`Discriminator` = 'DerivedInheritanceRelationshipEntity' ORDER BY `b`.`Id` """); @@ -1144,29 +1146,29 @@ ORDER BY `b`.`Id` """, // """ -SELECT `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`Id` +SELECT `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b`.`Id` FROM `BaseEntities` AS `b` -INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId` +INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b2` ON `b`.`Id` = `b2`.`BaseInheritanceRelationshipEntityId` WHERE `b`.`Discriminator` = 'DerivedInheritanceRelationshipEntity' ORDER BY `b`.`Id` """, // """ -SELECT `b0`.`DerivedInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`Id` +SELECT `b3`.`DerivedInheritanceRelationshipEntityId`, `b3`.`Id`, `b3`.`Name`, `b`.`Id` FROM `BaseEntities` AS `b` -INNER JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b0` ON `b`.`Id` = `b0`.`DerivedInheritanceRelationshipEntityId` +INNER JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b3` ON `b`.`Id` = `b3`.`DerivedInheritanceRelationshipEntityId` WHERE `b`.`Discriminator` = 'DerivedInheritanceRelationshipEntity' ORDER BY `b`.`Id` """, // """ -SELECT `t`.`Id`, `t`.`Discriminator`, `t`.`Name`, `t`.`ParentId`, `t`.`DerivedInheritanceRelationshipEntityId`, `b`.`Id` +SELECT `b5`.`Id`, `b5`.`Discriminator`, `b5`.`Name`, `b5`.`ParentId`, `b5`.`DerivedInheritanceRelationshipEntityId`, `b`.`Id` FROM `BaseEntities` AS `b` INNER JOIN ( - SELECT `b0`.`Id`, `b0`.`Discriminator`, `b0`.`Name`, `b0`.`ParentId`, `b0`.`DerivedInheritanceRelationshipEntityId` - FROM `BaseCollectionsOnDerived` AS `b0` - WHERE `b0`.`Discriminator` = 'DerivedCollectionOnDerived' -) AS `t` ON `b`.`Id` = `t`.`DerivedInheritanceRelationshipEntityId` + SELECT `b4`.`Id`, `b4`.`Discriminator`, `b4`.`Name`, `b4`.`ParentId`, `b4`.`DerivedInheritanceRelationshipEntityId` + FROM `BaseCollectionsOnDerived` AS `b4` + WHERE `b4`.`Discriminator` = 'DerivedCollectionOnDerived' +) AS `b5` ON `b`.`Id` = `b5`.`DerivedInheritanceRelationshipEntityId` WHERE `b`.`Discriminator` = 'DerivedInheritanceRelationshipEntity' ORDER BY `b`.`Id` """); @@ -1178,40 +1180,40 @@ public override async Task Include_collection_with_inheritance_on_derived_revers AssertSql( """ -SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`ParentId`, `b`.`DerivedInheritanceRelationshipEntityId`, `t`.`Id`, `t`.`Discriminator`, `t`.`Name`, `t`.`BaseId`, `t`.`OwnedReferenceOnBase_Id`, `t`.`OwnedReferenceOnBase_Name`, `t`.`OwnedReferenceOnDerived_Id`, `t`.`OwnedReferenceOnDerived_Name` +SELECT `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`ParentId`, `b`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Discriminator`, `b1`.`Name`, `b1`.`BaseId`, `b1`.`OwnedReferenceOnBase_Id`, `b1`.`OwnedReferenceOnBase_Name`, `b1`.`OwnedReferenceOnDerived_Id`, `b1`.`OwnedReferenceOnDerived_Name` FROM `BaseCollectionsOnDerived` AS `b` LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`Discriminator`, `b0`.`Name`, `b0`.`BaseId`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `b0`.`OwnedReferenceOnDerived_Id`, `b0`.`OwnedReferenceOnDerived_Name` FROM `BaseEntities` AS `b0` WHERE `b0`.`Discriminator` = 'DerivedInheritanceRelationshipEntity' -) AS `t` ON `b`.`ParentId` = `t`.`Id` -ORDER BY `b`.`Id`, `t`.`Id` +) AS `b1` ON `b`.`ParentId` = `b1`.`Id` +ORDER BY `b`.`Id`, `b1`.`Id` """, // """ -SELECT `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`Id`, `t`.`Id` +SELECT `b4`.`BaseInheritanceRelationshipEntityId`, `b4`.`Id`, `b4`.`Name`, `b`.`Id`, `b1`.`Id` FROM (`BaseCollectionsOnDerived` AS `b` LEFT JOIN ( SELECT `b0`.`Id` FROM `BaseEntities` AS `b0` WHERE `b0`.`Discriminator` = 'DerivedInheritanceRelationshipEntity' -) AS `t` ON `b`.`ParentId` = `t`.`Id`) -LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `t`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId` -WHERE `t`.`Id` IS NOT NULL AND `b1`.`BaseInheritanceRelationshipEntityId` IS NOT NULL -ORDER BY `b`.`Id`, `t`.`Id` +) AS `b1` ON `b`.`ParentId` = `b1`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b4` ON `b1`.`Id` = `b4`.`BaseInheritanceRelationshipEntityId` +WHERE `b1`.`Id` IS NOT NULL AND `b4`.`BaseInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `b`.`Id`, `b1`.`Id` """, // """ -SELECT `b1`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`Id`, `t`.`Id` +SELECT `b5`.`DerivedInheritanceRelationshipEntityId`, `b5`.`Id`, `b5`.`Name`, `b`.`Id`, `b1`.`Id` FROM (`BaseCollectionsOnDerived` AS `b` LEFT JOIN ( SELECT `b0`.`Id` FROM `BaseEntities` AS `b0` WHERE `b0`.`Discriminator` = 'DerivedInheritanceRelationshipEntity' -) AS `t` ON `b`.`ParentId` = `t`.`Id`) -LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b1` ON `t`.`Id` = `b1`.`DerivedInheritanceRelationshipEntityId` -WHERE `t`.`Id` IS NOT NULL AND `b1`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL -ORDER BY `b`.`Id`, `t`.`Id` +) AS `b1` ON `b`.`ParentId` = `b1`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b5` ON `b1`.`Id` = `b5`.`DerivedInheritanceRelationshipEntityId` +WHERE `b1`.`Id` IS NOT NULL AND `b5`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `b`.`Id`, `b1`.`Id` """); } @@ -1228,18 +1230,18 @@ public override async Task Nested_include_with_inheritance_reference_collection_ """, // """ -SELECT `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`Id`, `b0`.`Id` +SELECT `b3`.`BaseInheritanceRelationshipEntityId`, `b3`.`Id`, `b3`.`Name`, `b`.`Id`, `b0`.`Id` FROM (`BaseEntities` AS `b` LEFT JOIN `BaseReferencesOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseParentId`) -INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId` +INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b3` ON `b`.`Id` = `b3`.`BaseInheritanceRelationshipEntityId` ORDER BY `b`.`Id`, `b0`.`Id` """, // """ -SELECT `b1`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`Id`, `b0`.`Id` +SELECT `b4`.`DerivedInheritanceRelationshipEntityId`, `b4`.`Id`, `b4`.`Name`, `b`.`Id`, `b0`.`Id` FROM (`BaseEntities` AS `b` LEFT JOIN `BaseReferencesOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseParentId`) -INNER JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b1` ON `b`.`Id` = `b1`.`DerivedInheritanceRelationshipEntityId` +INNER JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b4` ON `b`.`Id` = `b4`.`DerivedInheritanceRelationshipEntityId` ORDER BY `b`.`Id`, `b0`.`Id` """, // @@ -1267,19 +1269,19 @@ public override async Task Nested_include_with_inheritance_reference_collection_ """, // """ -SELECT `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`Id`, `b0`.`Id` +SELECT `b3`.`BaseInheritanceRelationshipEntityId`, `b3`.`Id`, `b3`.`Name`, `b`.`Id`, `b0`.`Id` FROM (`BaseEntities` AS `b` LEFT JOIN `BaseReferencesOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseParentId`) -INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId` +INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b3` ON `b`.`Id` = `b3`.`BaseInheritanceRelationshipEntityId` WHERE `b`.`Discriminator` = 'DerivedInheritanceRelationshipEntity' ORDER BY `b`.`Id`, `b0`.`Id` """, // """ -SELECT `b1`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`Id`, `b0`.`Id` +SELECT `b4`.`DerivedInheritanceRelationshipEntityId`, `b4`.`Id`, `b4`.`Name`, `b`.`Id`, `b0`.`Id` FROM (`BaseEntities` AS `b` LEFT JOIN `BaseReferencesOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseParentId`) -INNER JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b1` ON `b`.`Id` = `b1`.`DerivedInheritanceRelationshipEntityId` +INNER JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b4` ON `b`.`Id` = `b4`.`DerivedInheritanceRelationshipEntityId` WHERE `b`.`Discriminator` = 'DerivedInheritanceRelationshipEntity' ORDER BY `b`.`Id`, `b0`.`Id` """, @@ -1308,22 +1310,22 @@ public override async Task Nested_include_with_inheritance_reference_collection_ """, // """ -SELECT `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `n`.`Id`, `b`.`Id`, `b0`.`Id` +SELECT `b3`.`BaseInheritanceRelationshipEntityId`, `b3`.`Id`, `b3`.`Name`, `n`.`Id`, `b`.`Id`, `b0`.`Id` FROM ((`NestedCollections` AS `n` LEFT JOIN `BaseReferencesOnBase` AS `b` ON `n`.`ParentReferenceId` = `b`.`Id`) LEFT JOIN `BaseEntities` AS `b0` ON `b`.`BaseParentId` = `b0`.`Id`) -LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b0`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId` -WHERE `b0`.`Id` IS NOT NULL AND `b1`.`BaseInheritanceRelationshipEntityId` IS NOT NULL +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b3` ON `b0`.`Id` = `b3`.`BaseInheritanceRelationshipEntityId` +WHERE `b0`.`Id` IS NOT NULL AND `b3`.`BaseInheritanceRelationshipEntityId` IS NOT NULL ORDER BY `n`.`Id`, `b`.`Id`, `b0`.`Id` """, // """ -SELECT `b1`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `n`.`Id`, `b`.`Id`, `b0`.`Id` +SELECT `b4`.`DerivedInheritanceRelationshipEntityId`, `b4`.`Id`, `b4`.`Name`, `n`.`Id`, `b`.`Id`, `b0`.`Id` FROM ((`NestedCollections` AS `n` LEFT JOIN `BaseReferencesOnBase` AS `b` ON `n`.`ParentReferenceId` = `b`.`Id`) LEFT JOIN `BaseEntities` AS `b0` ON `b`.`BaseParentId` = `b0`.`Id`) -LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b1` ON `b0`.`Id` = `b1`.`DerivedInheritanceRelationshipEntityId` -WHERE `b0`.`Id` IS NOT NULL AND `b1`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b4` ON `b0`.`Id` = `b4`.`DerivedInheritanceRelationshipEntityId` +WHERE `b0`.`Id` IS NOT NULL AND `b4`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL ORDER BY `n`.`Id`, `b`.`Id`, `b0`.`Id` """); } @@ -1340,27 +1342,27 @@ ORDER BY `b`.`Id` """, // """ -SELECT `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`Id` +SELECT `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b`.`Id` FROM `BaseEntities` AS `b` -INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId` +INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b2` ON `b`.`Id` = `b2`.`BaseInheritanceRelationshipEntityId` ORDER BY `b`.`Id` """, // """ -SELECT `b0`.`DerivedInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`Id` +SELECT `b3`.`DerivedInheritanceRelationshipEntityId`, `b3`.`Id`, `b3`.`Name`, `b`.`Id` FROM `BaseEntities` AS `b` -INNER JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b0` ON `b`.`Id` = `b0`.`DerivedInheritanceRelationshipEntityId` +INNER JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b3` ON `b`.`Id` = `b3`.`DerivedInheritanceRelationshipEntityId` ORDER BY `b`.`Id` """, // """ -SELECT `t`.`Id`, `t`.`BaseParentId`, `t`.`Discriminator`, `t`.`Name`, `t`.`DerivedProperty`, `t`.`Id0`, `t`.`Discriminator0`, `t`.`Name0`, `t`.`ParentCollectionId`, `t`.`ParentReferenceId`, `b`.`Id` +SELECT `s`.`Id`, `s`.`BaseParentId`, `s`.`Discriminator`, `s`.`Name`, `s`.`DerivedProperty`, `s`.`Id0`, `s`.`Discriminator0`, `s`.`Name0`, `s`.`ParentCollectionId`, `s`.`ParentReferenceId`, `b`.`Id` FROM `BaseEntities` AS `b` INNER JOIN ( - SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Discriminator`, `b0`.`Name`, `b0`.`DerivedProperty`, `n`.`Id` AS `Id0`, `n`.`Discriminator` AS `Discriminator0`, `n`.`Name` AS `Name0`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId` - FROM `BaseCollectionsOnBase` AS `b0` - LEFT JOIN `NestedReferences` AS `n` ON `b0`.`Id` = `n`.`ParentCollectionId` -) AS `t` ON `b`.`Id` = `t`.`BaseParentId` + SELECT `b4`.`Id`, `b4`.`BaseParentId`, `b4`.`Discriminator`, `b4`.`Name`, `b4`.`DerivedProperty`, `n`.`Id` AS `Id0`, `n`.`Discriminator` AS `Discriminator0`, `n`.`Name` AS `Name0`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId` + FROM `BaseCollectionsOnBase` AS `b4` + LEFT JOIN `NestedReferences` AS `n` ON `b4`.`Id` = `n`.`ParentCollectionId` +) AS `s` ON `b`.`Id` = `s`.`BaseParentId` ORDER BY `b`.`Id` """); } @@ -1379,22 +1381,22 @@ public override async Task Nested_include_with_inheritance_collection_reference_ """, // """ -SELECT `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `n`.`Id`, `b`.`Id`, `b0`.`Id` +SELECT `b3`.`BaseInheritanceRelationshipEntityId`, `b3`.`Id`, `b3`.`Name`, `n`.`Id`, `b`.`Id`, `b0`.`Id` FROM ((`NestedReferences` AS `n` LEFT JOIN `BaseCollectionsOnBase` AS `b` ON `n`.`ParentCollectionId` = `b`.`Id`) LEFT JOIN `BaseEntities` AS `b0` ON `b`.`BaseParentId` = `b0`.`Id`) -LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b0`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId` -WHERE `b0`.`Id` IS NOT NULL AND `b1`.`BaseInheritanceRelationshipEntityId` IS NOT NULL +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b3` ON `b0`.`Id` = `b3`.`BaseInheritanceRelationshipEntityId` +WHERE `b0`.`Id` IS NOT NULL AND `b3`.`BaseInheritanceRelationshipEntityId` IS NOT NULL ORDER BY `n`.`Id`, `b`.`Id`, `b0`.`Id` """, // """ -SELECT `b1`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `n`.`Id`, `b`.`Id`, `b0`.`Id` +SELECT `b4`.`DerivedInheritanceRelationshipEntityId`, `b4`.`Id`, `b4`.`Name`, `n`.`Id`, `b`.`Id`, `b0`.`Id` FROM ((`NestedReferences` AS `n` LEFT JOIN `BaseCollectionsOnBase` AS `b` ON `n`.`ParentCollectionId` = `b`.`Id`) LEFT JOIN `BaseEntities` AS `b0` ON `b`.`BaseParentId` = `b0`.`Id`) -LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b1` ON `b0`.`Id` = `b1`.`DerivedInheritanceRelationshipEntityId` -WHERE `b0`.`Id` IS NOT NULL AND `b1`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b4` ON `b0`.`Id` = `b4`.`DerivedInheritanceRelationshipEntityId` +WHERE `b0`.`Id` IS NOT NULL AND `b4`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL ORDER BY `n`.`Id`, `b`.`Id`, `b0`.`Id` """); } @@ -1411,33 +1413,33 @@ ORDER BY `b`.`Id` """, // """ -SELECT `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`Id` +SELECT `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b`.`Id` FROM `BaseEntities` AS `b` -INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId` +INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b2` ON `b`.`Id` = `b2`.`BaseInheritanceRelationshipEntityId` ORDER BY `b`.`Id` """, // """ -SELECT `b0`.`DerivedInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`Id` +SELECT `b3`.`DerivedInheritanceRelationshipEntityId`, `b3`.`Id`, `b3`.`Name`, `b`.`Id` FROM `BaseEntities` AS `b` -INNER JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b0` ON `b`.`Id` = `b0`.`DerivedInheritanceRelationshipEntityId` +INNER JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b3` ON `b`.`Id` = `b3`.`DerivedInheritanceRelationshipEntityId` ORDER BY `b`.`Id` """, // """ -SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Discriminator`, `b0`.`Name`, `b0`.`DerivedProperty`, `b`.`Id` +SELECT `b4`.`Id`, `b4`.`BaseParentId`, `b4`.`Discriminator`, `b4`.`Name`, `b4`.`DerivedProperty`, `b`.`Id` FROM `BaseEntities` AS `b` -INNER JOIN `BaseCollectionsOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseParentId` -ORDER BY `b`.`Id`, `b0`.`Id` +INNER JOIN `BaseCollectionsOnBase` AS `b4` ON `b`.`Id` = `b4`.`BaseParentId` +ORDER BY `b`.`Id`, `b4`.`Id` """, // """ -SELECT `n`.`Id`, `n`.`Discriminator`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, `b`.`Id`, `b0`.`Id` +SELECT `n`.`Id`, `n`.`Discriminator`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, `b`.`Id`, `b4`.`Id` FROM (`BaseEntities` AS `b` -INNER JOIN `BaseCollectionsOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseParentId`) -LEFT JOIN `NestedCollections` AS `n` ON `b0`.`Id` = `n`.`ParentCollectionId` -WHERE `b0`.`Id` IS NOT NULL AND `n`.`ParentCollectionId` IS NOT NULL -ORDER BY `b`.`Id`, `b0`.`Id` +INNER JOIN `BaseCollectionsOnBase` AS `b4` ON `b`.`Id` = `b4`.`BaseParentId`) +LEFT JOIN `NestedCollections` AS `n` ON `b4`.`Id` = `n`.`ParentCollectionId` +WHERE `b4`.`Id` IS NOT NULL AND `n`.`ParentCollectionId` IS NOT NULL +ORDER BY `b`.`Id`, `b4`.`Id` """); } @@ -1455,22 +1457,22 @@ public override async Task Nested_include_with_inheritance_collection_collection """, // """ -SELECT `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `n`.`Id`, `b`.`Id`, `b0`.`Id` +SELECT `b3`.`BaseInheritanceRelationshipEntityId`, `b3`.`Id`, `b3`.`Name`, `n`.`Id`, `b`.`Id`, `b0`.`Id` FROM ((`NestedCollections` AS `n` LEFT JOIN `BaseCollectionsOnBase` AS `b` ON `n`.`ParentCollectionId` = `b`.`Id`) LEFT JOIN `BaseEntities` AS `b0` ON `b`.`BaseParentId` = `b0`.`Id`) -LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b0`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId` -WHERE `b0`.`Id` IS NOT NULL AND `b1`.`BaseInheritanceRelationshipEntityId` IS NOT NULL +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b3` ON `b0`.`Id` = `b3`.`BaseInheritanceRelationshipEntityId` +WHERE `b0`.`Id` IS NOT NULL AND `b3`.`BaseInheritanceRelationshipEntityId` IS NOT NULL ORDER BY `n`.`Id`, `b`.`Id`, `b0`.`Id` """, // """ -SELECT `b1`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `n`.`Id`, `b`.`Id`, `b0`.`Id` +SELECT `b4`.`DerivedInheritanceRelationshipEntityId`, `b4`.`Id`, `b4`.`Name`, `n`.`Id`, `b`.`Id`, `b0`.`Id` FROM ((`NestedCollections` AS `n` LEFT JOIN `BaseCollectionsOnBase` AS `b` ON `n`.`ParentCollectionId` = `b`.`Id`) LEFT JOIN `BaseEntities` AS `b0` ON `b`.`BaseParentId` = `b0`.`Id`) -LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b1` ON `b0`.`Id` = `b1`.`DerivedInheritanceRelationshipEntityId` -WHERE `b0`.`Id` IS NOT NULL AND `b1`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b4` ON `b0`.`Id` = `b4`.`DerivedInheritanceRelationshipEntityId` +WHERE `b0`.`Id` IS NOT NULL AND `b4`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL ORDER BY `n`.`Id`, `b`.`Id`, `b0`.`Id` """); } @@ -1487,13 +1489,13 @@ ORDER BY `r`.`Id` """, // """ -SELECT `t`.`Id`, `t`.`Name`, `t`.`ReferenceId`, `t`.`ReferencedEntityId`, `t`.`Id0`, `t`.`Name0`, `r`.`Id` +SELECT `s`.`Id`, `s`.`Name`, `s`.`ReferenceId`, `s`.`ReferencedEntityId`, `s`.`Id0`, `s`.`Name0`, `r`.`Id` FROM `ReferencedEntities` AS `r` INNER JOIN ( SELECT `p`.`Id`, `p`.`Name`, `p`.`ReferenceId`, `p`.`ReferencedEntityId`, `r0`.`Id` AS `Id0`, `r0`.`Name` AS `Name0` FROM `PrincipalEntities` AS `p` LEFT JOIN `ReferencedEntities` AS `r0` ON `p`.`ReferenceId` = `r0`.`Id` -) AS `t` ON `r`.`Id` = `t`.`ReferencedEntityId` +) AS `s` ON `r`.`Id` = `s`.`ReferencedEntityId` ORDER BY `r`.`Id` """); } @@ -1530,29 +1532,29 @@ ORDER BY `b`.`Id` """, // """ -SELECT `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`Id` +SELECT `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b`.`Id` FROM `BaseEntities` AS `b` -INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId` +INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b2` ON `b`.`Id` = `b2`.`BaseInheritanceRelationshipEntityId` WHERE `b`.`Id` >= 4 ORDER BY `b`.`Id` """, // """ -SELECT `b0`.`DerivedInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`Id` +SELECT `b3`.`DerivedInheritanceRelationshipEntityId`, `b3`.`Id`, `b3`.`Name`, `b`.`Id` FROM `BaseEntities` AS `b` -INNER JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b0` ON `b`.`Id` = `b0`.`DerivedInheritanceRelationshipEntityId` +INNER JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b3` ON `b`.`Id` = `b3`.`DerivedInheritanceRelationshipEntityId` WHERE `b`.`Id` >= 4 ORDER BY `b`.`Id` """, // """ -SELECT `t`.`Id`, `t`.`Discriminator`, `t`.`Name`, `t`.`ParentId`, `t`.`DerivedInheritanceRelationshipEntityId`, `b`.`Id` +SELECT `b5`.`Id`, `b5`.`Discriminator`, `b5`.`Name`, `b5`.`ParentId`, `b5`.`DerivedInheritanceRelationshipEntityId`, `b`.`Id` FROM `BaseEntities` AS `b` INNER JOIN ( - SELECT `b0`.`Id`, `b0`.`Discriminator`, `b0`.`Name`, `b0`.`ParentId`, `b0`.`DerivedInheritanceRelationshipEntityId` - FROM `BaseCollectionsOnDerived` AS `b0` - WHERE `b0`.`Discriminator` = 'DerivedCollectionOnDerived' -) AS `t` ON `b`.`Id` = `t`.`DerivedInheritanceRelationshipEntityId` + SELECT `b4`.`Id`, `b4`.`Discriminator`, `b4`.`Name`, `b4`.`ParentId`, `b4`.`DerivedInheritanceRelationshipEntityId` + FROM `BaseCollectionsOnDerived` AS `b4` + WHERE `b4`.`Discriminator` = 'DerivedCollectionOnDerived' +) AS `b5` ON `b`.`Id` = `b5`.`DerivedInheritanceRelationshipEntityId` WHERE `b`.`Id` >= 4 ORDER BY `b`.`Id` """); @@ -1564,16 +1566,16 @@ public override void Changes_in_derived_related_entities_are_detected() AssertSql( """ -SELECT `t`.`Id`, `t`.`Discriminator`, `t`.`Name`, `t`.`BaseId`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `t`.`OwnedReferenceOnBase_Id`, `t`.`OwnedReferenceOnBase_Name`, `b1`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `t`.`OwnedReferenceOnDerived_Id`, `t`.`OwnedReferenceOnDerived_Name`, `b2`.`Id`, `b2`.`BaseParentId`, `b2`.`Discriminator`, `b2`.`Name`, `b2`.`DerivedProperty` +SELECT `b3`.`Id`, `b3`.`Discriminator`, `b3`.`Name`, `b3`.`BaseId`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b3`.`OwnedReferenceOnBase_Id`, `b3`.`OwnedReferenceOnBase_Name`, `b1`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b3`.`OwnedReferenceOnDerived_Id`, `b3`.`OwnedReferenceOnDerived_Name`, `b2`.`Id`, `b2`.`BaseParentId`, `b2`.`Discriminator`, `b2`.`Name`, `b2`.`DerivedProperty` FROM ((( SELECT TOP 2 `b`.`Id`, `b`.`Discriminator`, `b`.`Name`, `b`.`BaseId`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `b`.`OwnedReferenceOnDerived_Id`, `b`.`OwnedReferenceOnDerived_Name` FROM `BaseEntities` AS `b` WHERE `b`.`Name` = 'Derived1(4)' -) AS `t` -LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `t`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b1` ON `t`.`Id` = `b1`.`DerivedInheritanceRelationshipEntityId`) -LEFT JOIN `BaseCollectionsOnBase` AS `b2` ON `t`.`Id` = `b2`.`BaseParentId` -ORDER BY `t`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b1`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id` +) AS `b3` +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b3`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `BaseEntities_OwnedCollectionOnDerived` AS `b1` ON `b3`.`Id` = `b1`.`DerivedInheritanceRelationshipEntityId`) +LEFT JOIN `BaseCollectionsOnBase` AS `b2` ON `b3`.`Id` = `b2`.`BaseParentId` +ORDER BY `b3`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b1`.`DerivedInheritanceRelationshipEntityId`, `b1`.`Id` """); } diff --git a/test/EFCore.Jet.FunctionalTests/Query/ManyToManyNoTrackingQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/ManyToManyNoTrackingQueryJetTest.cs index 8902249b..45bac3ba 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/ManyToManyNoTrackingQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/ManyToManyNoTrackingQueryJetTest.cs @@ -17,9 +17,6 @@ public ManyToManyNoTrackingQueryJetTest(ManyToManyQueryJetFixture fixture, ITest Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); } - protected override bool CanExecuteQueryString - => false; - public override async Task Skip_navigation_all(bool async) { await base.Skip_navigation_all(async); @@ -106,20 +103,20 @@ public override async Task Skip_navigation_count_with_predicate(bool async) AssertSql( """ -SELECT `t1`.`Id`, `t1`.`Name`, `t1`.`c` +SELECT `e2`.`Id`, `e2`.`Name`, `e2`.`c` FROM ( SELECT `e`.`Id`, `e`.`Name`, ( SELECT COUNT(*) - FROM `JoinOneToBranch` AS `j0` + FROM `JoinOneToBranch` AS `j` INNER JOIN ( - SELECT `e1`.`Id`, `e1`.`Discriminator`, `e1`.`Name`, `e1`.`Number`, `e1`.`IsGreen` - FROM `EntityRoots` AS `e1` - WHERE `e1`.`Discriminator` IN ('EntityBranch', 'EntityLeaf') - ) AS `t0` ON `j0`.`EntityBranchId` = `t0`.`Id` - WHERE `e`.`Id` = `j0`.`EntityOneId` AND (`t0`.`Name` LIKE 'L%')) AS `c` + SELECT `e0`.`Id`, `e0`.`Name` + FROM `EntityRoots` AS `e0` + WHERE `e0`.`Discriminator` IN ('EntityBranch', 'EntityLeaf') + ) AS `e1` ON `j`.`EntityBranchId` = `e1`.`Id` + WHERE `e`.`Id` = `j`.`EntityOneId` AND (`e1`.`Name` LIKE 'L%')) AS `c` FROM `EntityOnes` AS `e` -) AS `t1` -ORDER BY `t1`.`c`, `t1`.`Id` +) AS `e2` +ORDER BY `e2`.`c`, `e2`.`Id` """); } @@ -145,16 +142,16 @@ public override async Task Skip_navigation_long_count_with_predicate(bool async) AssertSql( """ -SELECT `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name`, `t`.`ReferenceInverseId`, `t`.`c` +SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e2`.`c` FROM ( SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, ( SELECT COUNT(*) - FROM `EntityTwoEntityTwo` AS `e2` - INNER JOIN `EntityTwos` AS `e3` ON `e2`.`SelfSkipSharedLeftId` = `e3`.`Id` - WHERE `e`.`Id` = `e2`.`SelfSkipSharedRightId` AND (`e3`.`Name` LIKE 'L%')) AS `c` + FROM `EntityTwoEntityTwo` AS `e0` + INNER JOIN `EntityTwos` AS `e1` ON `e0`.`SelfSkipSharedLeftId` = `e1`.`Id` + WHERE `e`.`Id` = `e0`.`SelfSkipSharedRightId` AND (`e1`.`Name` LIKE 'L%')) AS `c` FROM `EntityTwos` AS `e` -) AS `t` -ORDER BY `t`.`c` DESC, `t`.`Id` +) AS `e2` +ORDER BY `e2`.`c` DESC, `e2`.`Id` """); } @@ -164,13 +161,13 @@ public override async Task Skip_navigation_select_many_average(bool async) AssertSql( """ -SELECT AVG(CDBL(`t`.`Key1`)) +SELECT AVG(CDBL(`s`.`Key1`)) FROM `EntityTwos` AS `e` INNER JOIN ( SELECT `e1`.`Key1`, `e0`.`TwoSkipSharedId` FROM `EntityCompositeKeyEntityTwo` AS `e0` INNER JOIN `EntityCompositeKeys` AS `e1` ON `e0`.`CompositeKeySkipSharedKey1` = `e1`.`Key1` AND `e0`.`CompositeKeySkipSharedKey2` = `e1`.`Key2` AND `e0`.`CompositeKeySkipSharedKey3` = `e1`.`Key3` -) AS `t` ON `e`.`Id` = `t`.`TwoSkipSharedId` +) AS `s` ON `e`.`Id` = `s`.`TwoSkipSharedId` """); } @@ -180,13 +177,13 @@ public override async Task Skip_navigation_select_many_max(bool async) AssertSql( """ -SELECT MAX(`t`.`Key1`) +SELECT MAX(`s`.`Key1`) FROM `EntityThrees` AS `e` INNER JOIN ( SELECT `e0`.`Key1`, `j`.`ThreeId` FROM `JoinThreeToCompositeKeyFull` AS `j` INNER JOIN `EntityCompositeKeys` AS `e0` ON `j`.`CompositeId1` = `e0`.`Key1` AND `j`.`CompositeId2` = `e0`.`Key2` AND `j`.`CompositeId3` = `e0`.`Key3` -) AS `t` ON `e`.`Id` = `t`.`ThreeId` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` """); } @@ -195,14 +192,14 @@ public override async Task Skip_navigation_select_many_min(bool async) await base.Skip_navigation_select_many_min(async); AssertSql( -""" -SELECT MIN(`t`.`Id`) + """ +SELECT MIN(`s`.`Id`) FROM `EntityThrees` AS `e` INNER JOIN ( SELECT `e1`.`Id`, `e0`.`ThreeSkipSharedId` FROM `EntityRootEntityThree` AS `e0` INNER JOIN `EntityRoots` AS `e1` ON `e0`.`RootSkipSharedId` = `e1`.`Id` -) AS `t` ON `e`.`Id` = `t`.`ThreeSkipSharedId` +) AS `s` ON `e`.`Id` = `s`.`ThreeSkipSharedId` """); } @@ -212,13 +209,13 @@ public override async Task Skip_navigation_select_many_sum(bool async) AssertSql( """ -SELECT IIF(SUM(`t`.`Key1`) IS NULL, 0, SUM(`t`.`Key1`)) +SELECT IIF(SUM(`s`.`Key1`) IS NULL, 0, SUM(`s`.`Key1`)) FROM `EntityRoots` AS `e` INNER JOIN ( SELECT `e1`.`Key1`, `e0`.`RootSkipSharedId` FROM `EntityCompositeKeyEntityRoot` AS `e0` INNER JOIN `EntityCompositeKeys` AS `e1` ON `e0`.`CompositeKeySkipSharedKey1` = `e1`.`Key1` AND `e0`.`CompositeKeySkipSharedKey2` = `e1`.`Key2` AND `e0`.`CompositeKeySkipSharedKey3` = `e1`.`Key3` -) AS `t` ON `e`.`Id` = `t`.`RootSkipSharedId` +) AS `s` ON `e`.`Id` = `s`.`RootSkipSharedId` """); } @@ -371,19 +368,19 @@ public override async Task Skip_navigation_cast(bool async) await base.Skip_navigation_cast(async); AssertSql( -""" -SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `t0`.`Id`, `t0`.`Discriminator`, `t0`.`Name`, `t0`.`Number`, `t0`.`IsGreen`, `t0`.`LeafId`, `t0`.`CompositeId1`, `t0`.`CompositeId2`, `t0`.`CompositeId3` + """ +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`Id`, `s`.`Discriminator`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3` FROM `EntityCompositeKeys` AS `e` LEFT JOIN ( - SELECT `t`.`Id`, `t`.`Discriminator`, `t`.`Name`, `t`.`Number`, `t`.`IsGreen`, `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3` + SELECT `e1`.`Id`, `e1`.`Discriminator`, `e1`.`Name`, `e1`.`Number`, `e1`.`IsGreen`, `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3` FROM `JoinCompositeKeyToLeaf` AS `j` INNER JOIN ( SELECT `e0`.`Id`, `e0`.`Discriminator`, `e0`.`Name`, `e0`.`Number`, `e0`.`IsGreen` FROM `EntityRoots` AS `e0` WHERE `e0`.`Discriminator` = 'EntityLeaf' - ) AS `t` ON `j`.`LeafId` = `t`.`Id` -) AS `t0` ON `e`.`Key1` = `t0`.`CompositeId1` AND `e`.`Key2` = `t0`.`CompositeId2` AND `e`.`Key3` = `t0`.`CompositeId3` -ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `t0`.`LeafId`, `t0`.`CompositeId1`, `t0`.`CompositeId2`, `t0`.`CompositeId3` + ) AS `e1` ON `j`.`LeafId` = `e1`.`Id` +) AS `s` ON `e`.`Key1` = `s`.`CompositeId1` AND `e`.`Key2` = `s`.`CompositeId2` AND `e`.`Key3` = `s`.`CompositeId3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3` """); } @@ -392,16 +389,16 @@ public override async Task Skip_navigation_of_type(bool async) await base.Skip_navigation_of_type(async); AssertSql( -""" -SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `t`.`Id`, `t`.`Discriminator`, `t`.`Name`, `t`.`Number`, `t`.`IsGreen`, `t`.`RootSkipSharedId`, `t`.`CompositeKeySkipSharedKey1`, `t`.`CompositeKeySkipSharedKey2`, `t`.`CompositeKeySkipSharedKey3` + """ +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`Id`, `s`.`Discriminator`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s`.`RootSkipSharedId`, `s`.`CompositeKeySkipSharedKey1`, `s`.`CompositeKeySkipSharedKey2`, `s`.`CompositeKeySkipSharedKey3` FROM `EntityCompositeKeys` AS `e` LEFT JOIN ( SELECT `e1`.`Id`, `e1`.`Discriminator`, `e1`.`Name`, `e1`.`Number`, `e1`.`IsGreen`, `e0`.`RootSkipSharedId`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3` FROM `EntityCompositeKeyEntityRoot` AS `e0` INNER JOIN `EntityRoots` AS `e1` ON `e0`.`RootSkipSharedId` = `e1`.`Id` WHERE `e1`.`Discriminator` = 'EntityLeaf' -) AS `t` ON `e`.`Key1` = `t`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `t`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `t`.`CompositeKeySkipSharedKey3` -ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `t`.`RootSkipSharedId`, `t`.`CompositeKeySkipSharedKey1`, `t`.`CompositeKeySkipSharedKey2`, `t`.`CompositeKeySkipSharedKey3` +) AS `s` ON `e`.`Key1` = `s`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `s`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `s`.`CompositeKeySkipSharedKey3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`RootSkipSharedId`, `s`.`CompositeKeySkipSharedKey1`, `s`.`CompositeKeySkipSharedKey2`, `s`.`CompositeKeySkipSharedKey3` """); } @@ -450,14 +447,14 @@ public override async Task Select_many_over_skip_navigation(bool async) await base.Select_many_over_skip_navigation(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`CollectionInverseId`, `t`.`Name`, `t`.`ReferenceInverseId` + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId` FROM `EntityRoots` AS `e` INNER JOIN ( SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`Name`, `e1`.`ReferenceInverseId`, `e0`.`RootSkipSharedId` FROM `EntityRootEntityThree` AS `e0` INNER JOIN `EntityThrees` AS `e1` ON `e0`.`ThreeSkipSharedId` = `e1`.`Id` -) AS `t` ON `e`.`Id` = `t`.`RootSkipSharedId` +) AS `s` ON `e`.`Id` = `s`.`RootSkipSharedId` """); } @@ -466,14 +463,14 @@ public override async Task Select_many_over_skip_navigation_where(bool async) await base.Select_many_over_skip_navigation_where(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name`, `t`.`ReferenceInverseId` + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId` FROM `EntityOnes` AS `e` LEFT JOIN ( SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `j`.`OneId` FROM `JoinOneToTwo` AS `j` INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` -) AS `t` ON `e`.`Id` = `t`.`OneId` +) AS `s` ON `e`.`Id` = `s`.`OneId` """); } @@ -542,15 +539,15 @@ public override async Task Select_many_over_skip_navigation_of_type(bool async) await base.Select_many_over_skip_navigation_of_type(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`Discriminator`, `t`.`Name`, `t`.`Number`, `t`.`IsGreen` + """ +SELECT `s`.`Id`, `s`.`Discriminator`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen` FROM `EntityThrees` AS `e` INNER JOIN ( SELECT `e1`.`Id`, `e1`.`Discriminator`, `e1`.`Name`, `e1`.`Number`, `e1`.`IsGreen`, `e0`.`ThreeSkipSharedId` FROM `EntityRootEntityThree` AS `e0` INNER JOIN `EntityRoots` AS `e1` ON `e0`.`RootSkipSharedId` = `e1`.`Id` WHERE `e1`.`Discriminator` IN ('EntityBranch', 'EntityLeaf') -) AS `t` ON `e`.`Id` = `t`.`ThreeSkipSharedId` +) AS `s` ON `e`.`Id` = `s`.`ThreeSkipSharedId` """); } @@ -559,18 +556,18 @@ public override async Task Select_many_over_skip_navigation_cast(bool async) await base.Select_many_over_skip_navigation_cast(async); AssertSql( -""" -SELECT `t0`.`Id`, `t0`.`Discriminator`, `t0`.`Name`, `t0`.`Number`, `t0`.`IsGreen` + """ +SELECT `s`.`Id`, `s`.`Discriminator`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen` FROM `EntityOnes` AS `e` INNER JOIN ( - SELECT `t`.`Id`, `t`.`Discriminator`, `t`.`Name`, `t`.`Number`, `t`.`IsGreen`, `j`.`EntityOneId` + SELECT `e1`.`Id`, `e1`.`Discriminator`, `e1`.`Name`, `e1`.`Number`, `e1`.`IsGreen`, `j`.`EntityOneId` FROM `JoinOneToBranch` AS `j` INNER JOIN ( SELECT `e0`.`Id`, `e0`.`Discriminator`, `e0`.`Name`, `e0`.`Number`, `e0`.`IsGreen` FROM `EntityRoots` AS `e0` WHERE `e0`.`Discriminator` IN ('EntityBranch', 'EntityLeaf') - ) AS `t` ON `j`.`EntityBranchId` = `t`.`Id` -) AS `t0` ON `e`.`Id` = `t0`.`EntityOneId` + ) AS `e1` ON `j`.`EntityBranchId` = `e1`.`Id` +) AS `s` ON `e`.`Id` = `s`.`EntityOneId` """); } @@ -579,15 +576,15 @@ public override async Task Select_skip_navigation(bool async) await base.Select_skip_navigation(async); AssertSql( -""" -SELECT `e`.`Id`, `t`.`Id`, `t`.`Name`, `t`.`LeftId`, `t`.`RightId` + """ +SELECT `e`.`Id`, `s`.`Id`, `s`.`Name`, `s`.`LeftId`, `s`.`RightId` FROM `EntityOnes` AS `e` LEFT JOIN ( SELECT `e0`.`Id`, `e0`.`Name`, `j`.`LeftId`, `j`.`RightId` FROM `JoinOneSelfPayload` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`LeftId` = `e0`.`Id` -) AS `t` ON `e`.`Id` = `t`.`RightId` -ORDER BY `e`.`Id`, `t`.`LeftId`, `t`.`RightId` +) AS `s` ON `e`.`Id` = `s`.`RightId` +ORDER BY `e`.`Id`, `s`.`LeftId`, `s`.`RightId` """); } @@ -597,24 +594,24 @@ public override async Task Select_skip_navigation_multiple(bool async) AssertSql( """ -SELECT `e`.`Id`, `t`.`Id`, `t`.`CollectionInverseId`, `t`.`Name`, `t`.`ReferenceInverseId`, `t`.`ThreeId`, `t`.`TwoId`, `t0`.`Id`, `t0`.`CollectionInverseId`, `t0`.`ExtraId`, `t0`.`Name`, `t0`.`ReferenceInverseId`, `t0`.`SelfSkipSharedLeftId`, `t0`.`SelfSkipSharedRightId`, `t1`.`Key1`, `t1`.`Key2`, `t1`.`Key3`, `t1`.`Name`, `t1`.`TwoSkipSharedId`, `t1`.`CompositeKeySkipSharedKey1`, `t1`.`CompositeKeySkipSharedKey2`, `t1`.`CompositeKeySkipSharedKey3` +SELECT `e`.`Id`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId`, `s`.`ThreeId`, `s`.`TwoId`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name`, `s0`.`ReferenceInverseId`, `s0`.`SelfSkipSharedLeftId`, `s0`.`SelfSkipSharedRightId`, `s1`.`Key1`, `s1`.`Key2`, `s1`.`Key3`, `s1`.`Name`, `s1`.`TwoSkipSharedId`, `s1`.`CompositeKeySkipSharedKey1`, `s1`.`CompositeKeySkipSharedKey2`, `s1`.`CompositeKeySkipSharedKey3` FROM ((`EntityTwos` AS `e` LEFT JOIN ( SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `j`.`ThreeId`, `j`.`TwoId` FROM `JoinTwoToThree` AS `j` INNER JOIN `EntityThrees` AS `e0` ON `j`.`ThreeId` = `e0`.`Id` -) AS `t` ON `e`.`Id` = `t`.`TwoId`) +) AS `s` ON `e`.`Id` = `s`.`TwoId`) LEFT JOIN ( SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e1`.`SelfSkipSharedLeftId`, `e1`.`SelfSkipSharedRightId` FROM `EntityTwoEntityTwo` AS `e1` INNER JOIN `EntityTwos` AS `e2` ON `e1`.`SelfSkipSharedLeftId` = `e2`.`Id` -) AS `t0` ON `e`.`Id` = `t0`.`SelfSkipSharedRightId`) +) AS `s0` ON `e`.`Id` = `s0`.`SelfSkipSharedRightId`) LEFT JOIN ( SELECT `e4`.`Key1`, `e4`.`Key2`, `e4`.`Key3`, `e4`.`Name`, `e3`.`TwoSkipSharedId`, `e3`.`CompositeKeySkipSharedKey1`, `e3`.`CompositeKeySkipSharedKey2`, `e3`.`CompositeKeySkipSharedKey3` FROM `EntityCompositeKeyEntityTwo` AS `e3` INNER JOIN `EntityCompositeKeys` AS `e4` ON `e3`.`CompositeKeySkipSharedKey1` = `e4`.`Key1` AND `e3`.`CompositeKeySkipSharedKey2` = `e4`.`Key2` AND `e3`.`CompositeKeySkipSharedKey3` = `e4`.`Key3` -) AS `t1` ON `e`.`Id` = `t1`.`TwoSkipSharedId` -ORDER BY `e`.`Id`, `t`.`ThreeId`, `t`.`TwoId`, `t`.`Id`, `t0`.`SelfSkipSharedLeftId`, `t0`.`SelfSkipSharedRightId`, `t0`.`Id`, `t1`.`TwoSkipSharedId`, `t1`.`CompositeKeySkipSharedKey1`, `t1`.`CompositeKeySkipSharedKey2`, `t1`.`CompositeKeySkipSharedKey3`, `t1`.`Key1`, `t1`.`Key2` +) AS `s1` ON `e`.`Id` = `s1`.`TwoSkipSharedId` +ORDER BY `e`.`Id`, `s`.`ThreeId`, `s`.`TwoId`, `s`.`Id`, `s0`.`SelfSkipSharedLeftId`, `s0`.`SelfSkipSharedRightId`, `s0`.`Id`, `s1`.`TwoSkipSharedId`, `s1`.`CompositeKeySkipSharedKey1`, `s1`.`CompositeKeySkipSharedKey2`, `s1`.`CompositeKeySkipSharedKey3`, `s1`.`Key1`, `s1`.`Key2` """); } @@ -644,15 +641,15 @@ public override async Task Include_skip_navigation(bool async) await base.Include_skip_navigation(async); AssertSql( -""" -SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name`, `t`.`Id`, `t`.`Discriminator`, `t`.`Name`, `t`.`Number`, `t`.`Slumber`, `t`.`IsGreen`, `t`.`IsBrown`, `t`.`RootSkipSharedId`, `t`.`CompositeKeySkipSharedKey1`, `t`.`CompositeKeySkipSharedKey2`, `t`.`CompositeKeySkipSharedKey3` + """ +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name`, `s`.`Id`, `s`.`Discriminator`, `s`.`Name`, `s`.`Number`, `s`.`Slumber`, `s`.`IsGreen`, `s`.`IsBrown`, `s`.`RootSkipSharedId`, `s`.`CompositeKeySkipSharedKey1`, `s`.`CompositeKeySkipSharedKey2`, `s`.`CompositeKeySkipSharedKey3` FROM `EntityCompositeKeys` AS `e` LEFT JOIN ( SELECT `e1`.`Id`, `e1`.`Discriminator`, `e1`.`Name`, `e1`.`Number`, `e1`.`Slumber`, `e1`.`IsGreen`, `e1`.`IsBrown`, `e0`.`RootSkipSharedId`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3` FROM `EntityCompositeKeyEntityRoot` AS `e0` INNER JOIN `EntityRoots` AS `e1` ON `e0`.`RootSkipSharedId` = `e1`.`Id` -) AS `t` ON `e`.`Key1` = `t`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `t`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `t`.`CompositeKeySkipSharedKey3` -ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `t`.`RootSkipSharedId`, `t`.`CompositeKeySkipSharedKey1`, `t`.`CompositeKeySkipSharedKey2`, `t`.`CompositeKeySkipSharedKey3` +) AS `s` ON `e`.`Key1` = `s`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `s`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `s`.`CompositeKeySkipSharedKey3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`RootSkipSharedId`, `s`.`CompositeKeySkipSharedKey1`, `s`.`CompositeKeySkipSharedKey2`, `s`.`CompositeKeySkipSharedKey3` """); } @@ -661,16 +658,16 @@ public override async Task Include_skip_navigation_then_reference(bool async) await base.Include_skip_navigation_then_reference(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `t`.`Id`, `t`.`Name`, `t`.`Id0`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name0`, `t`.`ReferenceInverseId`, `t`.`OneId`, `t`.`TwoId` + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `s`.`OneId`, `s`.`TwoId` FROM `EntityTwos` AS `e` LEFT JOIN ( SELECT `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `j`.`OneId`, `j`.`TwoId` FROM (`JoinOneToTwo` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` -) AS `t` ON `e`.`Id` = `t`.`TwoId` -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`TwoId`, `t`.`Id` +) AS `s` ON `e`.`Id` = `s`.`TwoId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id` """); } @@ -679,24 +676,24 @@ public override async Task Include_skip_navigation_then_include_skip_navigation( await base.Include_skip_navigation_then_include_skip_navigation(async); AssertSql( -""" -SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name`, `t1`.`Id`, `t1`.`Discriminator`, `t1`.`Name`, `t1`.`Number`, `t1`.`IsGreen`, `t1`.`LeafId`, `t1`.`CompositeId1`, `t1`.`CompositeId2`, `t1`.`CompositeId3`, `t1`.`Id0`, `t1`.`Name0`, `t1`.`EntityBranchId`, `t1`.`EntityOneId` + """ +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name`, `s0`.`Id`, `s0`.`Discriminator`, `s0`.`Name`, `s0`.`Number`, `s0`.`IsGreen`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Id0`, `s0`.`Name0`, `s0`.`EntityBranchId`, `s0`.`EntityOneId` FROM `EntityCompositeKeys` AS `e` LEFT JOIN ( - SELECT `t`.`Id`, `t`.`Discriminator`, `t`.`Name`, `t`.`Number`, `t`.`IsGreen`, `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `t0`.`Id` AS `Id0`, `t0`.`Name` AS `Name0`, `t0`.`EntityBranchId`, `t0`.`EntityOneId` + SELECT `e1`.`Id`, `e1`.`Discriminator`, `e1`.`Name`, `e1`.`Number`, `e1`.`IsGreen`, `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `s`.`Id` AS `Id0`, `s`.`Name` AS `Name0`, `s`.`EntityBranchId`, `s`.`EntityOneId` FROM (`JoinCompositeKeyToLeaf` AS `j` INNER JOIN ( SELECT `e0`.`Id`, `e0`.`Discriminator`, `e0`.`Name`, `e0`.`Number`, `e0`.`IsGreen` FROM `EntityRoots` AS `e0` WHERE `e0`.`Discriminator` = 'EntityLeaf' - ) AS `t` ON `j`.`LeafId` = `t`.`Id`) + ) AS `e1` ON `j`.`LeafId` = `e1`.`Id`) LEFT JOIN ( - SELECT `e1`.`Id`, `e1`.`Name`, `j0`.`EntityBranchId`, `j0`.`EntityOneId` + SELECT `e2`.`Id`, `e2`.`Name`, `j0`.`EntityBranchId`, `j0`.`EntityOneId` FROM `JoinOneToBranch` AS `j0` - INNER JOIN `EntityOnes` AS `e1` ON `j0`.`EntityOneId` = `e1`.`Id` - ) AS `t0` ON `t`.`Id` = `t0`.`EntityBranchId` -) AS `t1` ON `e`.`Key1` = `t1`.`CompositeId1` AND `e`.`Key2` = `t1`.`CompositeId2` AND `e`.`Key3` = `t1`.`CompositeId3` -ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `t1`.`LeafId`, `t1`.`CompositeId1`, `t1`.`CompositeId2`, `t1`.`CompositeId3`, `t1`.`Id`, `t1`.`EntityBranchId`, `t1`.`EntityOneId` + INNER JOIN `EntityOnes` AS `e2` ON `j0`.`EntityOneId` = `e2`.`Id` + ) AS `s` ON `e1`.`Id` = `s`.`EntityBranchId` +) AS `s0` ON `e`.`Key1` = `s0`.`CompositeId1` AND `e`.`Key2` = `s0`.`CompositeId2` AND `e`.`Key3` = `s0`.`CompositeId3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Id`, `s0`.`EntityBranchId`, `s0`.`EntityOneId` """); } @@ -705,11 +702,11 @@ public override async Task Include_skip_navigation_then_include_reference_and_sk await base.Include_skip_navigation_then_include_reference_and_skip_navigation(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `t0`.`Id`, `t0`.`Name`, `t0`.`Id0`, `t0`.`CollectionInverseId`, `t0`.`ExtraId`, `t0`.`Name0`, `t0`.`ReferenceInverseId`, `t0`.`OneId`, `t0`.`ThreeId`, `t0`.`Id1`, `t0`.`Name1`, `t0`.`LeftId`, `t0`.`RightId` + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s0`.`Id`, `s0`.`Name`, `s0`.`Id0`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name0`, `s0`.`ReferenceInverseId`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Id1`, `s0`.`Name1`, `s0`.`LeftId`, `s0`.`RightId` FROM `EntityThrees` AS `e` LEFT JOIN ( - SELECT `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `j`.`OneId`, `j`.`ThreeId`, `t`.`Id` AS `Id1`, `t`.`Name` AS `Name1`, `t`.`LeftId`, `t`.`RightId` + SELECT `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `j`.`OneId`, `j`.`ThreeId`, `s`.`Id` AS `Id1`, `s`.`Name` AS `Name1`, `s`.`LeftId`, `s`.`RightId` FROM ((`JoinOneToThreePayloadFull` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId`) @@ -717,9 +714,9 @@ LEFT JOIN ( SELECT `e2`.`Id`, `e2`.`Name`, `j0`.`LeftId`, `j0`.`RightId` FROM `JoinOneSelfPayload` AS `j0` INNER JOIN `EntityOnes` AS `e2` ON `j0`.`RightId` = `e2`.`Id` - ) AS `t` ON `e0`.`Id` = `t`.`LeftId` -) AS `t0` ON `e`.`Id` = `t0`.`ThreeId` -ORDER BY `e`.`Id`, `t0`.`OneId`, `t0`.`ThreeId`, `t0`.`Id`, `t0`.`Id0`, `t0`.`LeftId`, `t0`.`RightId` + ) AS `s` ON `e0`.`Id` = `s`.`LeftId` +) AS `s0` ON `e`.`Id` = `s0`.`ThreeId` +ORDER BY `e`.`Id`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Id`, `s0`.`Id0`, `s0`.`LeftId`, `s0`.`RightId` """); } @@ -729,15 +726,15 @@ public override async Task Include_skip_navigation_and_reference(bool async) AssertSql( """ -SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `e0`.`Id`, `t`.`Id`, `t`.`Name`, `t`.`OneSkipSharedId`, `t`.`TwoSkipSharedId`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId` +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `e0`.`Id`, `s`.`Id`, `s`.`Name`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId` FROM (`EntityTwos` AS `e` LEFT JOIN `EntityThrees` AS `e0` ON `e`.`Id` = `e0`.`ReferenceInverseId`) LEFT JOIN ( SELECT `e2`.`Id`, `e2`.`Name`, `e1`.`OneSkipSharedId`, `e1`.`TwoSkipSharedId` FROM `EntityOneEntityTwo` AS `e1` INNER JOIN `EntityOnes` AS `e2` ON `e1`.`OneSkipSharedId` = `e2`.`Id` -) AS `t` ON `e`.`Id` = `t`.`TwoSkipSharedId` -ORDER BY `e`.`Id`, `e0`.`Id`, `t`.`OneSkipSharedId`, `t`.`TwoSkipSharedId` +) AS `s` ON `e`.`Id` = `s`.`TwoSkipSharedId` +ORDER BY `e`.`Id`, `e0`.`Id`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId` """); } @@ -746,16 +743,16 @@ public override async Task Filtered_include_skip_navigation_where(bool async) await base.Filtered_include_skip_navigation_where(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `t`.`Id`, `t`.`Name`, `t`.`OneId`, `t`.`ThreeId` + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`Id`, `s`.`Name`, `s`.`OneId`, `s`.`ThreeId` FROM `EntityThrees` AS `e` LEFT JOIN ( SELECT `e0`.`Id`, `e0`.`Name`, `j`.`OneId`, `j`.`ThreeId` FROM `JoinOneToThreePayloadFullShared` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` WHERE `e0`.`Id` < 10 -) AS `t` ON `e`.`Id` = `t`.`ThreeId` -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`ThreeId` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId` """); } @@ -764,15 +761,15 @@ public override async Task Filtered_include_skip_navigation_order_by(bool async) await base.Filtered_include_skip_navigation_order_by(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name`, `t`.`ReferenceInverseId`, `t`.`ThreeId`, `t`.`TwoId` + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId`, `s`.`ThreeId`, `s`.`TwoId` FROM `EntityThrees` AS `e` LEFT JOIN ( SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `j`.`ThreeId`, `j`.`TwoId` FROM `JoinTwoToThree` AS `j` INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` -) AS `t` ON `e`.`Id` = `t`.`ThreeId` -ORDER BY `e`.`Id`, `t`.`Id`, `t`.`ThreeId` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`Id`, `s`.`ThreeId` """); } @@ -844,11 +841,11 @@ public override async Task Filtered_then_include_skip_navigation_where(bool asyn await base.Filtered_then_include_skip_navigation_where(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`Discriminator`, `e`.`Name`, `e`.`Number`, `e`.`Slumber`, `e`.`IsGreen`, `e`.`IsBrown`, `t0`.`Id`, `t0`.`CollectionInverseId`, `t0`.`Name`, `t0`.`ReferenceInverseId`, `t0`.`RootSkipSharedId`, `t0`.`ThreeSkipSharedId`, `t0`.`Id0`, `t0`.`Name0`, `t0`.`OneId`, `t0`.`ThreeId` + """ +SELECT `e`.`Id`, `e`.`Discriminator`, `e`.`Name`, `e`.`Number`, `e`.`Slumber`, `e`.`IsGreen`, `e`.`IsBrown`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`Name`, `s0`.`ReferenceInverseId`, `s0`.`RootSkipSharedId`, `s0`.`ThreeSkipSharedId`, `s0`.`Id0`, `s0`.`Name0`, `s0`.`OneId`, `s0`.`ThreeId` FROM `EntityRoots` AS `e` LEFT JOIN ( - SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`Name`, `e1`.`ReferenceInverseId`, `e0`.`RootSkipSharedId`, `e0`.`ThreeSkipSharedId`, `t`.`Id` AS `Id0`, `t`.`Name` AS `Name0`, `t`.`OneId`, `t`.`ThreeId` + SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`Name`, `e1`.`ReferenceInverseId`, `e0`.`RootSkipSharedId`, `e0`.`ThreeSkipSharedId`, `s`.`Id` AS `Id0`, `s`.`Name` AS `Name0`, `s`.`OneId`, `s`.`ThreeId` FROM (`EntityRootEntityThree` AS `e0` INNER JOIN `EntityThrees` AS `e1` ON `e0`.`ThreeSkipSharedId` = `e1`.`Id`) LEFT JOIN ( @@ -856,9 +853,9 @@ LEFT JOIN ( FROM `JoinOneToThreePayloadFullShared` AS `j` INNER JOIN `EntityOnes` AS `e2` ON `j`.`OneId` = `e2`.`Id` WHERE `e2`.`Id` < 10 - ) AS `t` ON `e1`.`Id` = `t`.`ThreeId` -) AS `t0` ON `e`.`Id` = `t0`.`RootSkipSharedId` -ORDER BY `e`.`Id`, `t0`.`RootSkipSharedId`, `t0`.`ThreeSkipSharedId`, `t0`.`Id`, `t0`.`OneId`, `t0`.`ThreeId` + ) AS `s` ON `e1`.`Id` = `s`.`ThreeId` +) AS `s0` ON `e`.`Id` = `s0`.`RootSkipSharedId` +ORDER BY `e`.`Id`, `s0`.`RootSkipSharedId`, `s0`.`ThreeSkipSharedId`, `s0`.`Id`, `s0`.`OneId`, `s0`.`ThreeId` """); } @@ -894,21 +891,21 @@ public override async Task Filtered_include_skip_navigation_where_then_include_s AssertSql( """ -SELECT `e`.`Id`, `e`.`Discriminator`, `e`.`Name`, `e`.`Number`, `e`.`IsGreen`, `t0`.`Key1`, `t0`.`Key2`, `t0`.`Key3`, `t0`.`Name`, `t0`.`LeafId`, `t0`.`CompositeId1`, `t0`.`CompositeId2`, `t0`.`CompositeId3`, `t0`.`Id`, `t0`.`CollectionInverseId`, `t0`.`ExtraId`, `t0`.`Name0`, `t0`.`ReferenceInverseId`, `t0`.`TwoSkipSharedId`, `t0`.`CompositeKeySkipSharedKey1`, `t0`.`CompositeKeySkipSharedKey2`, `t0`.`CompositeKeySkipSharedKey3` +SELECT `e`.`Id`, `e`.`Discriminator`, `e`.`Name`, `e`.`Number`, `e`.`IsGreen`, `s0`.`Key1`, `s0`.`Key2`, `s0`.`Key3`, `s0`.`Name`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name0`, `s0`.`ReferenceInverseId`, `s0`.`TwoSkipSharedId`, `s0`.`CompositeKeySkipSharedKey1`, `s0`.`CompositeKeySkipSharedKey2`, `s0`.`CompositeKeySkipSharedKey3` FROM `EntityRoots` AS `e` LEFT JOIN ( - SELECT `e0`.`Key1`, `e0`.`Key2`, `e0`.`Key3`, `e0`.`Name`, `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name` AS `Name0`, `t`.`ReferenceInverseId`, `t`.`TwoSkipSharedId`, `t`.`CompositeKeySkipSharedKey1`, `t`.`CompositeKeySkipSharedKey2`, `t`.`CompositeKeySkipSharedKey3` + SELECT `e0`.`Key1`, `e0`.`Key2`, `e0`.`Key3`, `e0`.`Name`, `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name` AS `Name0`, `s`.`ReferenceInverseId`, `s`.`TwoSkipSharedId`, `s`.`CompositeKeySkipSharedKey1`, `s`.`CompositeKeySkipSharedKey2`, `s`.`CompositeKeySkipSharedKey3` FROM (`JoinCompositeKeyToLeaf` AS `j` INNER JOIN `EntityCompositeKeys` AS `e0` ON `j`.`CompositeId1` = `e0`.`Key1` AND `j`.`CompositeId2` = `e0`.`Key2` AND `j`.`CompositeId3` = `e0`.`Key3`) LEFT JOIN ( SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e1`.`TwoSkipSharedId`, `e1`.`CompositeKeySkipSharedKey1`, `e1`.`CompositeKeySkipSharedKey2`, `e1`.`CompositeKeySkipSharedKey3` FROM `EntityCompositeKeyEntityTwo` AS `e1` INNER JOIN `EntityTwos` AS `e2` ON `e1`.`TwoSkipSharedId` = `e2`.`Id` - ) AS `t` ON `e0`.`Key1` = `t`.`CompositeKeySkipSharedKey1` AND `e0`.`Key2` = `t`.`CompositeKeySkipSharedKey2` AND `e0`.`Key3` = `t`.`CompositeKeySkipSharedKey3` + ) AS `s` ON `e0`.`Key1` = `s`.`CompositeKeySkipSharedKey1` AND `e0`.`Key2` = `s`.`CompositeKeySkipSharedKey2` AND `e0`.`Key3` = `s`.`CompositeKeySkipSharedKey3` WHERE `e0`.`Key1` < 5 -) AS `t0` ON `e`.`Id` = `t0`.`LeafId` +) AS `s0` ON `e`.`Id` = `s0`.`LeafId` WHERE `e`.`Discriminator` = 'EntityLeaf' -ORDER BY `e`.`Id`, `t0`.`LeafId`, `t0`.`CompositeId1`, `t0`.`CompositeId2`, `t0`.`CompositeId3`, `t0`.`Key1`, `t0`.`Key2`, `t0`.`Key3`, `t0`.`TwoSkipSharedId`, `t0`.`CompositeKeySkipSharedKey1`, `t0`.`CompositeKeySkipSharedKey2`, `t0`.`CompositeKeySkipSharedKey3` +ORDER BY `e`.`Id`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Key1`, `s0`.`Key2`, `s0`.`Key3`, `s0`.`TwoSkipSharedId`, `s0`.`CompositeKeySkipSharedKey1`, `s0`.`CompositeKeySkipSharedKey2`, `s0`.`CompositeKeySkipSharedKey3` """); } @@ -973,8 +970,8 @@ public override async Task Filter_include_on_skip_navigation_combined(bool async await base.Filter_include_on_skip_navigation_combined(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `t`.`Id`, `t`.`Name`, `t`.`Id0`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name0`, `t`.`ReferenceInverseId`, `t`.`OneId`, `t`.`TwoId`, `t`.`Id1`, `t`.`CollectionInverseId0`, `t`.`ExtraId0`, `t`.`Name1`, `t`.`ReferenceInverseId0` + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id1`, `s`.`CollectionInverseId0`, `s`.`ExtraId0`, `s`.`Name1`, `s`.`ReferenceInverseId0` FROM `EntityTwos` AS `e` LEFT JOIN ( SELECT `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `j`.`OneId`, `j`.`TwoId`, `e2`.`Id` AS `Id1`, `e2`.`CollectionInverseId` AS `CollectionInverseId0`, `e2`.`ExtraId` AS `ExtraId0`, `e2`.`Name` AS `Name1`, `e2`.`ReferenceInverseId` AS `ReferenceInverseId0` @@ -983,8 +980,8 @@ LEFT JOIN ( LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId`) LEFT JOIN `EntityTwos` AS `e2` ON `e0`.`Id` = `e2`.`CollectionInverseId` WHERE `e0`.`Id` < 10 -) AS `t` ON `e`.`Id` = `t`.`TwoId` -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`TwoId`, `t`.`Id`, `t`.`Id0` +) AS `s` ON `e`.`Id` = `s`.`TwoId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s`.`Id0` """); } @@ -1030,21 +1027,21 @@ public override async Task Filtered_include_on_skip_navigation_then_filtered_inc await base.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `t0`.`Id`, `t0`.`Name`, `t0`.`OneId`, `t0`.`ThreeId`, `t0`.`Id0`, `t0`.`CollectionInverseId`, `t0`.`ExtraId`, `t0`.`Name0`, `t0`.`ReferenceInverseId` + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`Id`, `s`.`Name`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId` FROM `EntityThrees` AS `e` LEFT JOIN ( - SELECT `e0`.`Id`, `e0`.`Name`, `j`.`OneId`, `j`.`ThreeId`, `t`.`Id` AS `Id0`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name` AS `Name0`, `t`.`ReferenceInverseId` + SELECT `e0`.`Id`, `e0`.`Name`, `j`.`OneId`, `j`.`ThreeId`, `e2`.`Id` AS `Id0`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name` AS `Name0`, `e2`.`ReferenceInverseId` FROM (`JoinOneToThreePayloadFull` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) LEFT JOIN ( SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name`, `e1`.`ReferenceInverseId` FROM `EntityTwos` AS `e1` WHERE `e1`.`Id` < 5 - ) AS `t` ON `e0`.`Id` = `t`.`CollectionInverseId` + ) AS `e2` ON `e0`.`Id` = `e2`.`CollectionInverseId` WHERE `e0`.`Id` > 15 -) AS `t0` ON `e`.`Id` = `t0`.`ThreeId` -ORDER BY `e`.`Id`, `t0`.`OneId`, `t0`.`ThreeId`, `t0`.`Id` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id` """); } @@ -1053,21 +1050,21 @@ public override async Task Filtered_include_on_navigation_then_filtered_include_ await base.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`Name`, `t0`.`Id`, `t0`.`CollectionInverseId`, `t0`.`ExtraId`, `t0`.`Name`, `t0`.`ReferenceInverseId`, `t0`.`Id0`, `t0`.`CollectionInverseId0`, `t0`.`Name0`, `t0`.`ReferenceInverseId0`, `t0`.`ThreeId`, `t0`.`TwoId` + """ +SELECT `e`.`Id`, `e`.`Name`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name`, `s0`.`ReferenceInverseId`, `s0`.`Id0`, `s0`.`CollectionInverseId0`, `s0`.`Name0`, `s0`.`ReferenceInverseId0`, `s0`.`ThreeId`, `s0`.`TwoId` FROM `EntityOnes` AS `e` LEFT JOIN ( - SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `t`.`Id` AS `Id0`, `t`.`CollectionInverseId` AS `CollectionInverseId0`, `t`.`Name` AS `Name0`, `t`.`ReferenceInverseId` AS `ReferenceInverseId0`, `t`.`ThreeId`, `t`.`TwoId` + SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `s`.`Id` AS `Id0`, `s`.`CollectionInverseId` AS `CollectionInverseId0`, `s`.`Name` AS `Name0`, `s`.`ReferenceInverseId` AS `ReferenceInverseId0`, `s`.`ThreeId`, `s`.`TwoId` FROM `EntityTwos` AS `e0` LEFT JOIN ( SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`Name`, `e1`.`ReferenceInverseId`, `j`.`ThreeId`, `j`.`TwoId` FROM `JoinTwoToThree` AS `j` INNER JOIN `EntityThrees` AS `e1` ON `j`.`ThreeId` = `e1`.`Id` WHERE `e1`.`Id` < 5 - ) AS `t` ON `e0`.`Id` = `t`.`TwoId` + ) AS `s` ON `e0`.`Id` = `s`.`TwoId` WHERE `e0`.`Id` > 15 -) AS `t0` ON `e`.`Id` = `t0`.`CollectionInverseId` -ORDER BY `e`.`Id`, `t0`.`Id`, `t0`.`ThreeId`, `t0`.`TwoId` +) AS `s0` ON `e`.`Id` = `s0`.`CollectionInverseId` +ORDER BY `e`.`Id`, `s0`.`Id`, `s0`.`ThreeId`, `s0`.`TwoId` """); } @@ -1090,20 +1087,20 @@ public override async Task Include_skip_navigation_split(bool async) await base.Include_skip_navigation_split(async); AssertSql( -""" + """ SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name` FROM `EntityCompositeKeys` AS `e` ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3` """, -// -""" -SELECT `t`.`Id`, `t`.`Discriminator`, `t`.`Name`, `t`.`Number`, `t`.`Slumber`, `t`.`IsGreen`, `t`.`IsBrown`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3` + // + """ +SELECT `s`.`Id`, `s`.`Discriminator`, `s`.`Name`, `s`.`Number`, `s`.`Slumber`, `s`.`IsGreen`, `s`.`IsBrown`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3` FROM `EntityCompositeKeys` AS `e` INNER JOIN ( SELECT `e1`.`Id`, `e1`.`Discriminator`, `e1`.`Name`, `e1`.`Number`, `e1`.`Slumber`, `e1`.`IsGreen`, `e1`.`IsBrown`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3` FROM `EntityCompositeKeyEntityRoot` AS `e0` INNER JOIN `EntityRoots` AS `e1` ON `e0`.`RootSkipSharedId` = `e1`.`Id` -) AS `t` ON `e`.`Key1` = `t`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `t`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `t`.`CompositeKeySkipSharedKey3` +) AS `s` ON `e`.`Key1` = `s`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `s`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `s`.`CompositeKeySkipSharedKey3` ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3` """); } @@ -1113,21 +1110,21 @@ public override async Task Include_skip_navigation_then_reference_split(bool asy await base.Include_skip_navigation_then_reference_split(async); AssertSql( -""" + """ SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId` FROM `EntityTwos` AS `e` ORDER BY `e`.`Id` """, -// -""" -SELECT `t`.`Id`, `t`.`Name`, `t`.`Id0`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name0`, `t`.`ReferenceInverseId`, `e`.`Id` + // + """ +SELECT `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `e`.`Id` FROM `EntityTwos` AS `e` INNER JOIN ( SELECT `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `j`.`TwoId` FROM (`JoinOneToTwo` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` -) AS `t` ON `e`.`Id` = `t`.`TwoId` +) AS `s` ON `e`.`Id` = `s`.`TwoId` ORDER BY `e`.`Id` """); } @@ -1137,46 +1134,46 @@ public override async Task Include_skip_navigation_then_include_skip_navigation_ await base.Include_skip_navigation_then_include_skip_navigation_split(async); AssertSql( -""" + """ SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name` FROM `EntityCompositeKeys` AS `e` ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3` """, - // - """ -SELECT `t0`.`Id`, `t0`.`Discriminator`, `t0`.`Name`, `t0`.`Number`, `t0`.`IsGreen`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `t0`.`LeafId`, `t0`.`CompositeId1`, `t0`.`CompositeId2`, `t0`.`CompositeId3` + // + """ +SELECT `s`.`Id`, `s`.`Discriminator`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3` FROM `EntityCompositeKeys` AS `e` INNER JOIN ( - SELECT `t`.`Id`, `t`.`Discriminator`, `t`.`Name`, `t`.`Number`, `t`.`IsGreen`, `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3` + SELECT `e1`.`Id`, `e1`.`Discriminator`, `e1`.`Name`, `e1`.`Number`, `e1`.`IsGreen`, `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3` FROM `JoinCompositeKeyToLeaf` AS `j` INNER JOIN ( SELECT `e0`.`Id`, `e0`.`Discriminator`, `e0`.`Name`, `e0`.`Number`, `e0`.`IsGreen` FROM `EntityRoots` AS `e0` WHERE `e0`.`Discriminator` = 'EntityLeaf' - ) AS `t` ON `j`.`LeafId` = `t`.`Id` -) AS `t0` ON `e`.`Key1` = `t0`.`CompositeId1` AND `e`.`Key2` = `t0`.`CompositeId2` AND `e`.`Key3` = `t0`.`CompositeId3` -ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `t0`.`LeafId`, `t0`.`CompositeId1`, `t0`.`CompositeId2`, `t0`.`CompositeId3`, `t0`.`Id` + ) AS `e1` ON `j`.`LeafId` = `e1`.`Id` +) AS `s` ON `e`.`Key1` = `s`.`CompositeId1` AND `e`.`Key2` = `s`.`CompositeId2` AND `e`.`Key3` = `s`.`CompositeId3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Id` """, - // - """ -SELECT `t1`.`Id`, `t1`.`Name`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `t0`.`LeafId`, `t0`.`CompositeId1`, `t0`.`CompositeId2`, `t0`.`CompositeId3`, `t0`.`Id` + // + """ +SELECT `s0`.`Id`, `s0`.`Name`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Id` FROM (`EntityCompositeKeys` AS `e` INNER JOIN ( - SELECT `t`.`Id`, `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3` + SELECT `e1`.`Id`, `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3` FROM `JoinCompositeKeyToLeaf` AS `j` INNER JOIN ( SELECT `e0`.`Id` FROM `EntityRoots` AS `e0` WHERE `e0`.`Discriminator` = 'EntityLeaf' - ) AS `t` ON `j`.`LeafId` = `t`.`Id` -) AS `t0` ON `e`.`Key1` = `t0`.`CompositeId1` AND `e`.`Key2` = `t0`.`CompositeId2` AND `e`.`Key3` = `t0`.`CompositeId3`) + ) AS `e1` ON `j`.`LeafId` = `e1`.`Id` +) AS `s` ON `e`.`Key1` = `s`.`CompositeId1` AND `e`.`Key2` = `s`.`CompositeId2` AND `e`.`Key3` = `s`.`CompositeId3`) LEFT JOIN ( - SELECT `e1`.`Id`, `e1`.`Name`, `j0`.`EntityBranchId` + SELECT `e2`.`Id`, `e2`.`Name`, `j0`.`EntityBranchId` FROM `JoinOneToBranch` AS `j0` - INNER JOIN `EntityOnes` AS `e1` ON `j0`.`EntityOneId` = `e1`.`Id` -) AS `t1` ON `t0`.`Id` = `t1`.`EntityBranchId` -WHERE `t0`.`Id` IS NOT NULL AND `t1`.`EntityBranchId` IS NOT NULL -ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `t0`.`LeafId`, `t0`.`CompositeId1`, `t0`.`CompositeId2`, `t0`.`CompositeId3`, `t0`.`Id` + INNER JOIN `EntityOnes` AS `e2` ON `j0`.`EntityOneId` = `e2`.`Id` +) AS `s0` ON `s`.`Id` = `s0`.`EntityBranchId` +WHERE `s`.`Id` IS NOT NULL AND `s0`.`EntityBranchId` IS NOT NULL +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Id` """); } @@ -1192,33 +1189,33 @@ ORDER BY `e`.`Id` """, // """ -SELECT `t`.`Id`, `t`.`Name`, `t`.`Id0`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name0`, `t`.`ReferenceInverseId`, `e`.`Id`, `t`.`OneId`, `t`.`ThreeId` +SELECT `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneId`, `s`.`ThreeId` FROM `EntityThrees` AS `e` INNER JOIN ( SELECT `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `j`.`OneId`, `j`.`ThreeId` FROM (`JoinOneToThreePayloadFull` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` -) AS `t` ON `e`.`Id` = `t`.`ThreeId` -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`ThreeId`, `t`.`Id`, `t`.`Id0` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id`, `s`.`Id0` """, // """ -SELECT `t0`.`Id`, `t0`.`Name`, `e`.`Id`, `t`.`OneId`, `t`.`ThreeId`, `t`.`Id`, `t`.`Id0` +SELECT `s0`.`Id`, `s0`.`Name`, `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id`, `s`.`Id0` FROM (`EntityThrees` AS `e` INNER JOIN ( SELECT `e0`.`Id`, `e1`.`Id` AS `Id0`, `j`.`OneId`, `j`.`ThreeId` FROM (`JoinOneToThreePayloadFull` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` -) AS `t` ON `e`.`Id` = `t`.`ThreeId`) +) AS `s` ON `e`.`Id` = `s`.`ThreeId`) LEFT JOIN ( SELECT `e2`.`Id`, `e2`.`Name`, `j0`.`LeftId` FROM `JoinOneSelfPayload` AS `j0` INNER JOIN `EntityOnes` AS `e2` ON `j0`.`RightId` = `e2`.`Id` -) AS `t0` ON `t`.`Id` = `t0`.`LeftId` -WHERE `t`.`Id` IS NOT NULL AND `t0`.`LeftId` IS NOT NULL -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`ThreeId`, `t`.`Id`, `t`.`Id0` +) AS `s0` ON `s`.`Id` = `s0`.`LeftId` +WHERE `s`.`Id` IS NOT NULL AND `s0`.`LeftId` IS NOT NULL +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id`, `s`.`Id0` """); } @@ -1227,22 +1224,22 @@ public override async Task Include_skip_navigation_and_reference_split(bool asyn await base.Include_skip_navigation_and_reference_split(async); AssertSql( -""" + """ SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId` FROM `EntityTwos` AS `e` LEFT JOIN `EntityThrees` AS `e0` ON `e`.`Id` = `e0`.`ReferenceInverseId` ORDER BY `e`.`Id`, `e0`.`Id` """, -// -""" -SELECT `t`.`Id`, `t`.`Name`, `e`.`Id`, `e0`.`Id` + // + """ +SELECT `s`.`Id`, `s`.`Name`, `e`.`Id`, `e0`.`Id` FROM (`EntityTwos` AS `e` LEFT JOIN `EntityThrees` AS `e0` ON `e`.`Id` = `e0`.`ReferenceInverseId`) INNER JOIN ( SELECT `e2`.`Id`, `e2`.`Name`, `e1`.`TwoSkipSharedId` FROM `EntityOneEntityTwo` AS `e1` INNER JOIN `EntityOnes` AS `e2` ON `e1`.`OneSkipSharedId` = `e2`.`Id` -) AS `t` ON `e`.`Id` = `t`.`TwoSkipSharedId` +) AS `s` ON `e`.`Id` = `s`.`TwoSkipSharedId` ORDER BY `e`.`Id`, `e0`.`Id` """); } @@ -1252,21 +1249,21 @@ public override async Task Filtered_include_skip_navigation_where_split(bool asy await base.Filtered_include_skip_navigation_where_split(async); AssertSql( -""" + """ SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId` FROM `EntityThrees` AS `e` ORDER BY `e`.`Id` """, -// -""" -SELECT `t`.`Id`, `t`.`Name`, `e`.`Id` + // + """ +SELECT `s`.`Id`, `s`.`Name`, `e`.`Id` FROM `EntityThrees` AS `e` INNER JOIN ( SELECT `e0`.`Id`, `e0`.`Name`, `j`.`ThreeId` FROM `JoinOneToThreePayloadFullShared` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` WHERE `e0`.`Id` < 10 -) AS `t` ON `e`.`Id` = `t`.`ThreeId` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` ORDER BY `e`.`Id` """); } @@ -1276,21 +1273,21 @@ public override async Task Filtered_include_skip_navigation_order_by_split(bool await base.Filtered_include_skip_navigation_order_by_split(async); AssertSql( -""" + """ SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId` FROM `EntityThrees` AS `e` ORDER BY `e`.`Id` """, -// -""" -SELECT `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name`, `t`.`ReferenceInverseId`, `e`.`Id` + // + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId`, `e`.`Id` FROM `EntityThrees` AS `e` INNER JOIN ( SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `j`.`ThreeId` FROM `JoinTwoToThree` AS `j` INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` -) AS `t` ON `e`.`Id` = `t`.`ThreeId` -ORDER BY `e`.`Id`, `t`.`Id` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`Id` """); } @@ -1387,32 +1384,32 @@ ORDER BY `e`.`Id` """, // """ -SELECT `t`.`Id`, `t`.`CollectionInverseId`, `t`.`Name`, `t`.`ReferenceInverseId`, `e`.`Id`, `t`.`RootSkipSharedId`, `t`.`ThreeSkipSharedId` +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId`, `e`.`Id`, `s`.`RootSkipSharedId`, `s`.`ThreeSkipSharedId` FROM `EntityRoots` AS `e` INNER JOIN ( SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`Name`, `e1`.`ReferenceInverseId`, `e0`.`RootSkipSharedId`, `e0`.`ThreeSkipSharedId` FROM `EntityRootEntityThree` AS `e0` INNER JOIN `EntityThrees` AS `e1` ON `e0`.`ThreeSkipSharedId` = `e1`.`Id` -) AS `t` ON `e`.`Id` = `t`.`RootSkipSharedId` -ORDER BY `e`.`Id`, `t`.`RootSkipSharedId`, `t`.`ThreeSkipSharedId`, `t`.`Id` +) AS `s` ON `e`.`Id` = `s`.`RootSkipSharedId` +ORDER BY `e`.`Id`, `s`.`RootSkipSharedId`, `s`.`ThreeSkipSharedId`, `s`.`Id` """, // """ -SELECT `t0`.`Id`, `t0`.`Name`, `e`.`Id`, `t`.`RootSkipSharedId`, `t`.`ThreeSkipSharedId`, `t`.`Id` +SELECT `s0`.`Id`, `s0`.`Name`, `e`.`Id`, `s`.`RootSkipSharedId`, `s`.`ThreeSkipSharedId`, `s`.`Id` FROM (`EntityRoots` AS `e` INNER JOIN ( SELECT `e1`.`Id`, `e0`.`RootSkipSharedId`, `e0`.`ThreeSkipSharedId` FROM `EntityRootEntityThree` AS `e0` INNER JOIN `EntityThrees` AS `e1` ON `e0`.`ThreeSkipSharedId` = `e1`.`Id` -) AS `t` ON `e`.`Id` = `t`.`RootSkipSharedId`) +) AS `s` ON `e`.`Id` = `s`.`RootSkipSharedId`) LEFT JOIN ( SELECT `e2`.`Id`, `e2`.`Name`, `j`.`ThreeId` FROM `JoinOneToThreePayloadFullShared` AS `j` INNER JOIN `EntityOnes` AS `e2` ON `j`.`OneId` = `e2`.`Id` WHERE `e2`.`Id` < 10 -) AS `t0` ON `t`.`Id` = `t0`.`ThreeId` -WHERE `t`.`Id` IS NOT NULL AND `t0`.`ThreeId` IS NOT NULL -ORDER BY `e`.`Id`, `t`.`RootSkipSharedId`, `t`.`ThreeSkipSharedId`, `t`.`Id` +) AS `s0` ON `s`.`Id` = `s0`.`ThreeId` +WHERE `s`.`Id` IS NOT NULL AND `s0`.`ThreeId` IS NOT NULL +ORDER BY `e`.`Id`, `s`.`RootSkipSharedId`, `s`.`ThreeSkipSharedId`, `s`.`Id` """); } @@ -1464,42 +1461,42 @@ public override async Task Filtered_include_skip_navigation_where_then_include_s await base.Filtered_include_skip_navigation_where_then_include_skip_navigation_split(async); AssertSql( -""" + """ SELECT `e`.`Id`, `e`.`Discriminator`, `e`.`Name`, `e`.`Number`, `e`.`IsGreen` FROM `EntityRoots` AS `e` WHERE `e`.`Discriminator` = 'EntityLeaf' ORDER BY `e`.`Id` """, - // - """ -SELECT `t`.`Key1`, `t`.`Key2`, `t`.`Key3`, `t`.`Name`, `e`.`Id`, `t`.`LeafId`, `t`.`CompositeId1`, `t`.`CompositeId2`, `t`.`CompositeId3` + // + """ +SELECT `s`.`Key1`, `s`.`Key2`, `s`.`Key3`, `s`.`Name`, `e`.`Id`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3` FROM `EntityRoots` AS `e` INNER JOIN ( SELECT `e0`.`Key1`, `e0`.`Key2`, `e0`.`Key3`, `e0`.`Name`, `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3` FROM `JoinCompositeKeyToLeaf` AS `j` INNER JOIN `EntityCompositeKeys` AS `e0` ON `j`.`CompositeId1` = `e0`.`Key1` AND `j`.`CompositeId2` = `e0`.`Key2` AND `j`.`CompositeId3` = `e0`.`Key3` WHERE `e0`.`Key1` < 5 -) AS `t` ON `e`.`Id` = `t`.`LeafId` +) AS `s` ON `e`.`Id` = `s`.`LeafId` WHERE `e`.`Discriminator` = 'EntityLeaf' -ORDER BY `e`.`Id`, `t`.`LeafId`, `t`.`CompositeId1`, `t`.`CompositeId2`, `t`.`CompositeId3`, `t`.`Key1`, `t`.`Key2`, `t`.`Key3` +ORDER BY `e`.`Id`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Key1`, `s`.`Key2`, `s`.`Key3` """, - // - """ -SELECT `t0`.`Id`, `t0`.`CollectionInverseId`, `t0`.`ExtraId`, `t0`.`Name`, `t0`.`ReferenceInverseId`, `e`.`Id`, `t`.`LeafId`, `t`.`CompositeId1`, `t`.`CompositeId2`, `t`.`CompositeId3`, `t`.`Key1`, `t`.`Key2`, `t`.`Key3` + // + """ +SELECT `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name`, `s0`.`ReferenceInverseId`, `e`.`Id`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Key1`, `s`.`Key2`, `s`.`Key3` FROM (`EntityRoots` AS `e` INNER JOIN ( SELECT `e0`.`Key1`, `e0`.`Key2`, `e0`.`Key3`, `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3` FROM `JoinCompositeKeyToLeaf` AS `j` INNER JOIN `EntityCompositeKeys` AS `e0` ON `j`.`CompositeId1` = `e0`.`Key1` AND `j`.`CompositeId2` = `e0`.`Key2` AND `j`.`CompositeId3` = `e0`.`Key3` WHERE `e0`.`Key1` < 5 -) AS `t` ON `e`.`Id` = `t`.`LeafId`) +) AS `s` ON `e`.`Id` = `s`.`LeafId`) LEFT JOIN ( SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e1`.`CompositeKeySkipSharedKey1`, `e1`.`CompositeKeySkipSharedKey2`, `e1`.`CompositeKeySkipSharedKey3` FROM `EntityCompositeKeyEntityTwo` AS `e1` INNER JOIN `EntityTwos` AS `e2` ON `e1`.`TwoSkipSharedId` = `e2`.`Id` -) AS `t0` ON `t`.`Key1` = `t0`.`CompositeKeySkipSharedKey1` AND `t`.`Key2` = `t0`.`CompositeKeySkipSharedKey2` AND `t`.`Key3` = `t0`.`CompositeKeySkipSharedKey3` -WHERE (`e`.`Discriminator` = 'EntityLeaf') AND (`t`.`Key1` IS NOT NULL AND `t0`.`CompositeKeySkipSharedKey1` IS NOT NULL AND `t`.`Key2` IS NOT NULL AND `t0`.`CompositeKeySkipSharedKey2` IS NOT NULL AND `t`.`Key3` IS NOT NULL AND `t0`.`CompositeKeySkipSharedKey3` IS NOT NULL) -ORDER BY `e`.`Id`, `t`.`LeafId`, `t`.`CompositeId1`, `t`.`CompositeId2`, `t`.`CompositeId3`, `t`.`Key1`, `t`.`Key2`, `t`.`Key3` +) AS `s0` ON `s`.`Key1` = `s0`.`CompositeKeySkipSharedKey1` AND `s`.`Key2` = `s0`.`CompositeKeySkipSharedKey2` AND `s`.`Key3` = `s0`.`CompositeKeySkipSharedKey3` +WHERE (`e`.`Discriminator` = 'EntityLeaf') AND (`s`.`Key1` IS NOT NULL AND `s0`.`CompositeKeySkipSharedKey1` IS NOT NULL AND `s`.`Key2` IS NOT NULL AND `s0`.`CompositeKeySkipSharedKey2` IS NOT NULL AND `s`.`Key3` IS NOT NULL AND `s0`.`CompositeKeySkipSharedKey3` IS NOT NULL) +ORDER BY `e`.`Id`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Key1`, `s`.`Key2`, `s`.`Key3` """); } @@ -1608,7 +1605,7 @@ ORDER BY `e`.`Id` """, // """ -SELECT `t`.`Id`, `t`.`Name`, `t`.`Id0`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name0`, `t`.`ReferenceInverseId`, `e`.`Id`, `t`.`OneId`, `t`.`TwoId` +SELECT `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneId`, `s`.`TwoId` FROM `EntityTwos` AS `e` INNER JOIN ( SELECT `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `j`.`OneId`, `j`.`TwoId` @@ -1616,12 +1613,12 @@ INNER JOIN ( INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` WHERE `e0`.`Id` < 10 -) AS `t` ON `e`.`Id` = `t`.`TwoId` -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`TwoId`, `t`.`Id`, `t`.`Id0` +) AS `s` ON `e`.`Id` = `s`.`TwoId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s`.`Id0` """, // """ -SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e`.`Id`, `t`.`OneId`, `t`.`TwoId`, `t`.`Id`, `t`.`Id0` +SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s`.`Id0` FROM (`EntityTwos` AS `e` INNER JOIN ( SELECT `e0`.`Id`, `e1`.`Id` AS `Id0`, `j`.`OneId`, `j`.`TwoId` @@ -1629,10 +1626,10 @@ INNER JOIN ( INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` WHERE `e0`.`Id` < 10 -) AS `t` ON `e`.`Id` = `t`.`TwoId`) -LEFT JOIN `EntityTwos` AS `e2` ON `t`.`Id` = `e2`.`CollectionInverseId` -WHERE `t`.`Id` IS NOT NULL AND `e2`.`CollectionInverseId` IS NOT NULL -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`TwoId`, `t`.`Id`, `t`.`Id0` +) AS `s` ON `e`.`Id` = `s`.`TwoId`) +LEFT JOIN `EntityTwos` AS `e2` ON `s`.`Id` = `e2`.`CollectionInverseId` +WHERE `s`.`Id` IS NOT NULL AND `e2`.`CollectionInverseId` IS NOT NULL +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s`.`Id0` """); } @@ -1715,33 +1712,33 @@ ORDER BY `e`.`Id` """, // """ -SELECT `t`.`Id`, `t`.`Name`, `e`.`Id`, `t`.`OneId`, `t`.`ThreeId` +SELECT `s`.`Id`, `s`.`Name`, `e`.`Id`, `s`.`OneId`, `s`.`ThreeId` FROM `EntityThrees` AS `e` INNER JOIN ( SELECT `e0`.`Id`, `e0`.`Name`, `j`.`OneId`, `j`.`ThreeId` FROM `JoinOneToThreePayloadFull` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` WHERE `e0`.`Id` > 15 -) AS `t` ON `e`.`Id` = `t`.`ThreeId` -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`ThreeId`, `t`.`Id` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id` """, // """ -SELECT `t0`.`Id`, `t0`.`CollectionInverseId`, `t0`.`ExtraId`, `t0`.`Name`, `t0`.`ReferenceInverseId`, `e`.`Id`, `t`.`OneId`, `t`.`ThreeId`, `t`.`Id` +SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id` FROM (`EntityThrees` AS `e` INNER JOIN ( SELECT `e0`.`Id`, `j`.`OneId`, `j`.`ThreeId` FROM `JoinOneToThreePayloadFull` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` WHERE `e0`.`Id` > 15 -) AS `t` ON `e`.`Id` = `t`.`ThreeId`) +) AS `s` ON `e`.`Id` = `s`.`ThreeId`) LEFT JOIN ( SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name`, `e1`.`ReferenceInverseId` FROM `EntityTwos` AS `e1` WHERE `e1`.`Id` < 5 -) AS `t0` ON `t`.`Id` = `t0`.`CollectionInverseId` -WHERE `t`.`Id` IS NOT NULL AND `t0`.`CollectionInverseId` IS NOT NULL -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`ThreeId`, `t`.`Id` +) AS `e2` ON `s`.`Id` = `e2`.`CollectionInverseId` +WHERE `s`.`Id` IS NOT NULL AND `e2`.`CollectionInverseId` IS NOT NULL +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id` """); } @@ -1757,32 +1754,32 @@ ORDER BY `e`.`Id` """, // """ -SELECT `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name`, `t`.`ReferenceInverseId`, `e`.`Id` +SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e`.`Id` FROM `EntityOnes` AS `e` INNER JOIN ( SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId` FROM `EntityTwos` AS `e0` WHERE `e0`.`Id` > 15 -) AS `t` ON `e`.`Id` = `t`.`CollectionInverseId` -ORDER BY `e`.`Id`, `t`.`Id` +) AS `e2` ON `e`.`Id` = `e2`.`CollectionInverseId` +ORDER BY `e`.`Id`, `e2`.`Id` """, // """ -SELECT `t0`.`Id`, `t0`.`CollectionInverseId`, `t0`.`Name`, `t0`.`ReferenceInverseId`, `e`.`Id`, `t`.`Id` +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId`, `e`.`Id`, `e2`.`Id` FROM (`EntityOnes` AS `e` INNER JOIN ( SELECT `e0`.`Id`, `e0`.`CollectionInverseId` FROM `EntityTwos` AS `e0` WHERE `e0`.`Id` > 15 -) AS `t` ON `e`.`Id` = `t`.`CollectionInverseId`) +) AS `e2` ON `e`.`Id` = `e2`.`CollectionInverseId`) LEFT JOIN ( SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`Name`, `e1`.`ReferenceInverseId`, `j`.`TwoId` FROM `JoinTwoToThree` AS `j` INNER JOIN `EntityThrees` AS `e1` ON `j`.`ThreeId` = `e1`.`Id` WHERE `e1`.`Id` < 5 -) AS `t0` ON `t`.`Id` = `t0`.`TwoId` -WHERE `t`.`Id` IS NOT NULL AND `t0`.`TwoId` IS NOT NULL -ORDER BY `e`.`Id`, `t`.`Id` +) AS `s` ON `e2`.`Id` = `s`.`TwoId` +WHERE `e2`.`Id` IS NOT NULL AND `s`.`TwoId` IS NOT NULL +ORDER BY `e`.`Id`, `e2`.`Id` """); } diff --git a/test/EFCore.Jet.FunctionalTests/Query/ManyToManyQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/ManyToManyQueryJetTest.cs index 489e990c..03819cb7 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/ManyToManyQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/ManyToManyQueryJetTest.cs @@ -17,9 +17,6 @@ public ManyToManyQueryJetTest(ManyToManyQueryJetFixture fixture, ITestOutputHelp Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); } - protected override bool CanExecuteQueryString - => false; - public override async Task Skip_navigation_all(bool async) { await base.Skip_navigation_all(async); @@ -106,20 +103,20 @@ public override async Task Skip_navigation_count_with_predicate(bool async) AssertSql( """ -SELECT `t1`.`Id`, `t1`.`Name`, `t1`.`c` +SELECT `e2`.`Id`, `e2`.`Name`, `e2`.`c` FROM ( SELECT `e`.`Id`, `e`.`Name`, ( SELECT COUNT(*) - FROM `JoinOneToBranch` AS `j0` + FROM `JoinOneToBranch` AS `j` INNER JOIN ( - SELECT `e1`.`Id`, `e1`.`Discriminator`, `e1`.`Name`, `e1`.`Number`, `e1`.`IsGreen` - FROM `EntityRoots` AS `e1` - WHERE `e1`.`Discriminator` IN ('EntityBranch', 'EntityLeaf') - ) AS `t0` ON `j0`.`EntityBranchId` = `t0`.`Id` - WHERE `e`.`Id` = `j0`.`EntityOneId` AND (`t0`.`Name` LIKE 'L%')) AS `c` + SELECT `e0`.`Id`, `e0`.`Name` + FROM `EntityRoots` AS `e0` + WHERE `e0`.`Discriminator` IN ('EntityBranch', 'EntityLeaf') + ) AS `e1` ON `j`.`EntityBranchId` = `e1`.`Id` + WHERE `e`.`Id` = `j`.`EntityOneId` AND (`e1`.`Name` LIKE 'L%')) AS `c` FROM `EntityOnes` AS `e` -) AS `t1` -ORDER BY `t1`.`c`, `t1`.`Id` +) AS `e2` +ORDER BY `e2`.`c`, `e2`.`Id` """); } @@ -145,16 +142,16 @@ public override async Task Skip_navigation_long_count_with_predicate(bool async) AssertSql( """ -SELECT `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name`, `t`.`ReferenceInverseId`, `t`.`c` +SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e2`.`c` FROM ( SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, ( SELECT COUNT(*) - FROM `EntityTwoEntityTwo` AS `e2` - INNER JOIN `EntityTwos` AS `e3` ON `e2`.`SelfSkipSharedLeftId` = `e3`.`Id` - WHERE `e`.`Id` = `e2`.`SelfSkipSharedRightId` AND (`e3`.`Name` LIKE 'L%')) AS `c` + FROM `EntityTwoEntityTwo` AS `e0` + INNER JOIN `EntityTwos` AS `e1` ON `e0`.`SelfSkipSharedLeftId` = `e1`.`Id` + WHERE `e`.`Id` = `e0`.`SelfSkipSharedRightId` AND (`e1`.`Name` LIKE 'L%')) AS `c` FROM `EntityTwos` AS `e` -) AS `t` -ORDER BY `t`.`c` DESC, `t`.`Id` +) AS `e2` +ORDER BY `e2`.`c` DESC, `e2`.`Id` """); } @@ -164,13 +161,13 @@ public override async Task Skip_navigation_select_many_average(bool async) AssertSql( """ -SELECT AVG(CDBL(`t`.`Key1`)) +SELECT AVG(CDBL(`s`.`Key1`)) FROM `EntityTwos` AS `e` INNER JOIN ( SELECT `e1`.`Key1`, `e0`.`TwoSkipSharedId` FROM `EntityCompositeKeyEntityTwo` AS `e0` INNER JOIN `EntityCompositeKeys` AS `e1` ON `e0`.`CompositeKeySkipSharedKey1` = `e1`.`Key1` AND `e0`.`CompositeKeySkipSharedKey2` = `e1`.`Key2` AND `e0`.`CompositeKeySkipSharedKey3` = `e1`.`Key3` -) AS `t` ON `e`.`Id` = `t`.`TwoSkipSharedId` +) AS `s` ON `e`.`Id` = `s`.`TwoSkipSharedId` """); } @@ -179,14 +176,14 @@ public override async Task Skip_navigation_select_many_max(bool async) await base.Skip_navigation_select_many_max(async); AssertSql( -""" -SELECT MAX(`t`.`Key1`) + """ +SELECT MAX(`s`.`Key1`) FROM `EntityThrees` AS `e` INNER JOIN ( SELECT `e0`.`Key1`, `j`.`ThreeId` FROM `JoinThreeToCompositeKeyFull` AS `j` INNER JOIN `EntityCompositeKeys` AS `e0` ON `j`.`CompositeId1` = `e0`.`Key1` AND `j`.`CompositeId2` = `e0`.`Key2` AND `j`.`CompositeId3` = `e0`.`Key3` -) AS `t` ON `e`.`Id` = `t`.`ThreeId` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` """); } @@ -195,14 +192,14 @@ public override async Task Skip_navigation_select_many_min(bool async) await base.Skip_navigation_select_many_min(async); AssertSql( -""" -SELECT MIN(`t`.`Id`) + """ +SELECT MIN(`s`.`Id`) FROM `EntityThrees` AS `e` INNER JOIN ( SELECT `e1`.`Id`, `e0`.`ThreeSkipSharedId` FROM `EntityRootEntityThree` AS `e0` INNER JOIN `EntityRoots` AS `e1` ON `e0`.`RootSkipSharedId` = `e1`.`Id` -) AS `t` ON `e`.`Id` = `t`.`ThreeSkipSharedId` +) AS `s` ON `e`.`Id` = `s`.`ThreeSkipSharedId` """); } @@ -212,13 +209,13 @@ public override async Task Skip_navigation_select_many_sum(bool async) AssertSql( """ -SELECT IIF(SUM(`t`.`Key1`) IS NULL, 0, SUM(`t`.`Key1`)) +SELECT IIF(SUM(`s`.`Key1`) IS NULL, 0, SUM(`s`.`Key1`)) FROM `EntityRoots` AS `e` INNER JOIN ( SELECT `e1`.`Key1`, `e0`.`RootSkipSharedId` FROM `EntityCompositeKeyEntityRoot` AS `e0` INNER JOIN `EntityCompositeKeys` AS `e1` ON `e0`.`CompositeKeySkipSharedKey1` = `e1`.`Key1` AND `e0`.`CompositeKeySkipSharedKey2` = `e1`.`Key2` AND `e0`.`CompositeKeySkipSharedKey3` = `e1`.`Key3` -) AS `t` ON `e`.`Id` = `t`.`RootSkipSharedId` +) AS `s` ON `e`.`Id` = `s`.`RootSkipSharedId` """); } @@ -371,19 +368,19 @@ public override async Task Skip_navigation_cast(bool async) await base.Skip_navigation_cast(async); AssertSql( -""" -SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `t0`.`Id`, `t0`.`Discriminator`, `t0`.`Name`, `t0`.`Number`, `t0`.`IsGreen`, `t0`.`LeafId`, `t0`.`CompositeId1`, `t0`.`CompositeId2`, `t0`.`CompositeId3` + """ +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`Id`, `s`.`Discriminator`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3` FROM `EntityCompositeKeys` AS `e` LEFT JOIN ( - SELECT `t`.`Id`, `t`.`Discriminator`, `t`.`Name`, `t`.`Number`, `t`.`IsGreen`, `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3` + SELECT `e1`.`Id`, `e1`.`Discriminator`, `e1`.`Name`, `e1`.`Number`, `e1`.`IsGreen`, `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3` FROM `JoinCompositeKeyToLeaf` AS `j` INNER JOIN ( SELECT `e0`.`Id`, `e0`.`Discriminator`, `e0`.`Name`, `e0`.`Number`, `e0`.`IsGreen` FROM `EntityRoots` AS `e0` WHERE `e0`.`Discriminator` = 'EntityLeaf' - ) AS `t` ON `j`.`LeafId` = `t`.`Id` -) AS `t0` ON `e`.`Key1` = `t0`.`CompositeId1` AND `e`.`Key2` = `t0`.`CompositeId2` AND `e`.`Key3` = `t0`.`CompositeId3` -ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `t0`.`LeafId`, `t0`.`CompositeId1`, `t0`.`CompositeId2`, `t0`.`CompositeId3` + ) AS `e1` ON `j`.`LeafId` = `e1`.`Id` +) AS `s` ON `e`.`Key1` = `s`.`CompositeId1` AND `e`.`Key2` = `s`.`CompositeId2` AND `e`.`Key3` = `s`.`CompositeId3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3` """); } @@ -392,16 +389,16 @@ public override async Task Skip_navigation_of_type(bool async) await base.Skip_navigation_of_type(async); AssertSql( -""" -SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `t`.`Id`, `t`.`Discriminator`, `t`.`Name`, `t`.`Number`, `t`.`IsGreen`, `t`.`RootSkipSharedId`, `t`.`CompositeKeySkipSharedKey1`, `t`.`CompositeKeySkipSharedKey2`, `t`.`CompositeKeySkipSharedKey3` + """ +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`Id`, `s`.`Discriminator`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s`.`RootSkipSharedId`, `s`.`CompositeKeySkipSharedKey1`, `s`.`CompositeKeySkipSharedKey2`, `s`.`CompositeKeySkipSharedKey3` FROM `EntityCompositeKeys` AS `e` LEFT JOIN ( SELECT `e1`.`Id`, `e1`.`Discriminator`, `e1`.`Name`, `e1`.`Number`, `e1`.`IsGreen`, `e0`.`RootSkipSharedId`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3` FROM `EntityCompositeKeyEntityRoot` AS `e0` INNER JOIN `EntityRoots` AS `e1` ON `e0`.`RootSkipSharedId` = `e1`.`Id` WHERE `e1`.`Discriminator` = 'EntityLeaf' -) AS `t` ON `e`.`Key1` = `t`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `t`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `t`.`CompositeKeySkipSharedKey3` -ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `t`.`RootSkipSharedId`, `t`.`CompositeKeySkipSharedKey1`, `t`.`CompositeKeySkipSharedKey2`, `t`.`CompositeKeySkipSharedKey3` +) AS `s` ON `e`.`Key1` = `s`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `s`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `s`.`CompositeKeySkipSharedKey3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`RootSkipSharedId`, `s`.`CompositeKeySkipSharedKey1`, `s`.`CompositeKeySkipSharedKey2`, `s`.`CompositeKeySkipSharedKey3` """); } @@ -450,14 +447,14 @@ public override async Task Select_many_over_skip_navigation(bool async) await base.Select_many_over_skip_navigation(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`CollectionInverseId`, `t`.`Name`, `t`.`ReferenceInverseId` + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId` FROM `EntityRoots` AS `e` INNER JOIN ( SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`Name`, `e1`.`ReferenceInverseId`, `e0`.`RootSkipSharedId` FROM `EntityRootEntityThree` AS `e0` INNER JOIN `EntityThrees` AS `e1` ON `e0`.`ThreeSkipSharedId` = `e1`.`Id` -) AS `t` ON `e`.`Id` = `t`.`RootSkipSharedId` +) AS `s` ON `e`.`Id` = `s`.`RootSkipSharedId` """); } @@ -466,14 +463,14 @@ public override async Task Select_many_over_skip_navigation_where(bool async) await base.Select_many_over_skip_navigation_where(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name`, `t`.`ReferenceInverseId` + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId` FROM `EntityOnes` AS `e` LEFT JOIN ( SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `j`.`OneId` FROM `JoinOneToTwo` AS `j` INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` -) AS `t` ON `e`.`Id` = `t`.`OneId` +) AS `s` ON `e`.`Id` = `s`.`OneId` """); } @@ -542,15 +539,15 @@ public override async Task Select_many_over_skip_navigation_of_type(bool async) await base.Select_many_over_skip_navigation_of_type(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`Discriminator`, `t`.`Name`, `t`.`Number`, `t`.`IsGreen` + """ +SELECT `s`.`Id`, `s`.`Discriminator`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen` FROM `EntityThrees` AS `e` INNER JOIN ( SELECT `e1`.`Id`, `e1`.`Discriminator`, `e1`.`Name`, `e1`.`Number`, `e1`.`IsGreen`, `e0`.`ThreeSkipSharedId` FROM `EntityRootEntityThree` AS `e0` INNER JOIN `EntityRoots` AS `e1` ON `e0`.`RootSkipSharedId` = `e1`.`Id` WHERE `e1`.`Discriminator` IN ('EntityBranch', 'EntityLeaf') -) AS `t` ON `e`.`Id` = `t`.`ThreeSkipSharedId` +) AS `s` ON `e`.`Id` = `s`.`ThreeSkipSharedId` """); } @@ -559,18 +556,18 @@ public override async Task Select_many_over_skip_navigation_cast(bool async) await base.Select_many_over_skip_navigation_cast(async); AssertSql( -""" -SELECT `t0`.`Id`, `t0`.`Discriminator`, `t0`.`Name`, `t0`.`Number`, `t0`.`IsGreen` + """ +SELECT `s`.`Id`, `s`.`Discriminator`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen` FROM `EntityOnes` AS `e` INNER JOIN ( - SELECT `t`.`Id`, `t`.`Discriminator`, `t`.`Name`, `t`.`Number`, `t`.`IsGreen`, `j`.`EntityOneId` + SELECT `e1`.`Id`, `e1`.`Discriminator`, `e1`.`Name`, `e1`.`Number`, `e1`.`IsGreen`, `j`.`EntityOneId` FROM `JoinOneToBranch` AS `j` INNER JOIN ( SELECT `e0`.`Id`, `e0`.`Discriminator`, `e0`.`Name`, `e0`.`Number`, `e0`.`IsGreen` FROM `EntityRoots` AS `e0` WHERE `e0`.`Discriminator` IN ('EntityBranch', 'EntityLeaf') - ) AS `t` ON `j`.`EntityBranchId` = `t`.`Id` -) AS `t0` ON `e`.`Id` = `t0`.`EntityOneId` + ) AS `e1` ON `j`.`EntityBranchId` = `e1`.`Id` +) AS `s` ON `e`.`Id` = `s`.`EntityOneId` """); } @@ -579,15 +576,15 @@ public override async Task Select_skip_navigation(bool async) await base.Select_skip_navigation(async); AssertSql( -""" -SELECT `e`.`Id`, `t`.`Id`, `t`.`Name`, `t`.`LeftId`, `t`.`RightId` + """ +SELECT `e`.`Id`, `s`.`Id`, `s`.`Name`, `s`.`LeftId`, `s`.`RightId` FROM `EntityOnes` AS `e` LEFT JOIN ( SELECT `e0`.`Id`, `e0`.`Name`, `j`.`LeftId`, `j`.`RightId` FROM `JoinOneSelfPayload` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`LeftId` = `e0`.`Id` -) AS `t` ON `e`.`Id` = `t`.`RightId` -ORDER BY `e`.`Id`, `t`.`LeftId`, `t`.`RightId` +) AS `s` ON `e`.`Id` = `s`.`RightId` +ORDER BY `e`.`Id`, `s`.`LeftId`, `s`.`RightId` """); } @@ -597,24 +594,24 @@ public override async Task Select_skip_navigation_multiple(bool async) AssertSql( """ -SELECT `e`.`Id`, `t`.`Id`, `t`.`CollectionInverseId`, `t`.`Name`, `t`.`ReferenceInverseId`, `t`.`ThreeId`, `t`.`TwoId`, `t0`.`Id`, `t0`.`CollectionInverseId`, `t0`.`ExtraId`, `t0`.`Name`, `t0`.`ReferenceInverseId`, `t0`.`SelfSkipSharedLeftId`, `t0`.`SelfSkipSharedRightId`, `t1`.`Key1`, `t1`.`Key2`, `t1`.`Key3`, `t1`.`Name`, `t1`.`TwoSkipSharedId`, `t1`.`CompositeKeySkipSharedKey1`, `t1`.`CompositeKeySkipSharedKey2`, `t1`.`CompositeKeySkipSharedKey3` +SELECT `e`.`Id`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId`, `s`.`ThreeId`, `s`.`TwoId`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name`, `s0`.`ReferenceInverseId`, `s0`.`SelfSkipSharedLeftId`, `s0`.`SelfSkipSharedRightId`, `s1`.`Key1`, `s1`.`Key2`, `s1`.`Key3`, `s1`.`Name`, `s1`.`TwoSkipSharedId`, `s1`.`CompositeKeySkipSharedKey1`, `s1`.`CompositeKeySkipSharedKey2`, `s1`.`CompositeKeySkipSharedKey3` FROM ((`EntityTwos` AS `e` LEFT JOIN ( SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `j`.`ThreeId`, `j`.`TwoId` FROM `JoinTwoToThree` AS `j` INNER JOIN `EntityThrees` AS `e0` ON `j`.`ThreeId` = `e0`.`Id` -) AS `t` ON `e`.`Id` = `t`.`TwoId`) +) AS `s` ON `e`.`Id` = `s`.`TwoId`) LEFT JOIN ( SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e1`.`SelfSkipSharedLeftId`, `e1`.`SelfSkipSharedRightId` FROM `EntityTwoEntityTwo` AS `e1` INNER JOIN `EntityTwos` AS `e2` ON `e1`.`SelfSkipSharedLeftId` = `e2`.`Id` -) AS `t0` ON `e`.`Id` = `t0`.`SelfSkipSharedRightId`) +) AS `s0` ON `e`.`Id` = `s0`.`SelfSkipSharedRightId`) LEFT JOIN ( SELECT `e4`.`Key1`, `e4`.`Key2`, `e4`.`Key3`, `e4`.`Name`, `e3`.`TwoSkipSharedId`, `e3`.`CompositeKeySkipSharedKey1`, `e3`.`CompositeKeySkipSharedKey2`, `e3`.`CompositeKeySkipSharedKey3` FROM `EntityCompositeKeyEntityTwo` AS `e3` INNER JOIN `EntityCompositeKeys` AS `e4` ON `e3`.`CompositeKeySkipSharedKey1` = `e4`.`Key1` AND `e3`.`CompositeKeySkipSharedKey2` = `e4`.`Key2` AND `e3`.`CompositeKeySkipSharedKey3` = `e4`.`Key3` -) AS `t1` ON `e`.`Id` = `t1`.`TwoSkipSharedId` -ORDER BY `e`.`Id`, `t`.`ThreeId`, `t`.`TwoId`, `t`.`Id`, `t0`.`SelfSkipSharedLeftId`, `t0`.`SelfSkipSharedRightId`, `t0`.`Id`, `t1`.`TwoSkipSharedId`, `t1`.`CompositeKeySkipSharedKey1`, `t1`.`CompositeKeySkipSharedKey2`, `t1`.`CompositeKeySkipSharedKey3`, `t1`.`Key1`, `t1`.`Key2` +) AS `s1` ON `e`.`Id` = `s1`.`TwoSkipSharedId` +ORDER BY `e`.`Id`, `s`.`ThreeId`, `s`.`TwoId`, `s`.`Id`, `s0`.`SelfSkipSharedLeftId`, `s0`.`SelfSkipSharedRightId`, `s0`.`Id`, `s1`.`TwoSkipSharedId`, `s1`.`CompositeKeySkipSharedKey1`, `s1`.`CompositeKeySkipSharedKey2`, `s1`.`CompositeKeySkipSharedKey3`, `s1`.`Key1`, `s1`.`Key2` """); } @@ -644,15 +641,15 @@ public override async Task Include_skip_navigation(bool async) await base.Include_skip_navigation(async); AssertSql( -""" -SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name`, `t`.`RootSkipSharedId`, `t`.`CompositeKeySkipSharedKey1`, `t`.`CompositeKeySkipSharedKey2`, `t`.`CompositeKeySkipSharedKey3`, `t`.`Id`, `t`.`Discriminator`, `t`.`Name`, `t`.`Number`, `t`.`Slumber`, `t`.`IsGreen`, `t`.`IsBrown` + """ +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name`, `s`.`RootSkipSharedId`, `s`.`CompositeKeySkipSharedKey1`, `s`.`CompositeKeySkipSharedKey2`, `s`.`CompositeKeySkipSharedKey3`, `s`.`Id`, `s`.`Discriminator`, `s`.`Name`, `s`.`Number`, `s`.`Slumber`, `s`.`IsGreen`, `s`.`IsBrown` FROM `EntityCompositeKeys` AS `e` LEFT JOIN ( SELECT `e0`.`RootSkipSharedId`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3`, `e1`.`Id`, `e1`.`Discriminator`, `e1`.`Name`, `e1`.`Number`, `e1`.`Slumber`, `e1`.`IsGreen`, `e1`.`IsBrown` FROM `EntityCompositeKeyEntityRoot` AS `e0` INNER JOIN `EntityRoots` AS `e1` ON `e0`.`RootSkipSharedId` = `e1`.`Id` -) AS `t` ON `e`.`Key1` = `t`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `t`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `t`.`CompositeKeySkipSharedKey3` -ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `t`.`RootSkipSharedId`, `t`.`CompositeKeySkipSharedKey1`, `t`.`CompositeKeySkipSharedKey2`, `t`.`CompositeKeySkipSharedKey3` +) AS `s` ON `e`.`Key1` = `s`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `s`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `s`.`CompositeKeySkipSharedKey3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`RootSkipSharedId`, `s`.`CompositeKeySkipSharedKey1`, `s`.`CompositeKeySkipSharedKey2`, `s`.`CompositeKeySkipSharedKey3` """); } @@ -661,16 +658,16 @@ public override async Task Include_skip_navigation_then_reference(bool async) await base.Include_skip_navigation_then_reference(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `t`.`OneId`, `t`.`TwoId`, `t`.`JoinOneToTwoExtraId`, `t`.`Id`, `t`.`Name`, `t`.`Id0`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name0`, `t`.`ReferenceInverseId` + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`OneId`, `s`.`TwoId`, `s`.`JoinOneToTwoExtraId`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId` FROM `EntityTwos` AS `e` LEFT JOIN ( SELECT `j`.`OneId`, `j`.`TwoId`, `j`.`JoinOneToTwoExtraId`, `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId` FROM (`JoinOneToTwo` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` -) AS `t` ON `e`.`Id` = `t`.`TwoId` -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`TwoId`, `t`.`Id` +) AS `s` ON `e`.`Id` = `s`.`TwoId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id` """); } @@ -679,24 +676,24 @@ public override async Task Include_skip_navigation_then_include_skip_navigation( await base.Include_skip_navigation_then_include_skip_navigation(async); AssertSql( -""" -SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name`, `t1`.`LeafId`, `t1`.`CompositeId1`, `t1`.`CompositeId2`, `t1`.`CompositeId3`, `t1`.`Id`, `t1`.`Discriminator`, `t1`.`Name`, `t1`.`Number`, `t1`.`IsGreen`, `t1`.`EntityBranchId`, `t1`.`EntityOneId`, `t1`.`Id0`, `t1`.`Name0` + """ +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Id`, `s0`.`Discriminator`, `s0`.`Name`, `s0`.`Number`, `s0`.`IsGreen`, `s0`.`EntityBranchId`, `s0`.`EntityOneId`, `s0`.`Id0`, `s0`.`Name0` FROM `EntityCompositeKeys` AS `e` LEFT JOIN ( - SELECT `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `t`.`Id`, `t`.`Discriminator`, `t`.`Name`, `t`.`Number`, `t`.`IsGreen`, `t0`.`EntityBranchId`, `t0`.`EntityOneId`, `t0`.`Id` AS `Id0`, `t0`.`Name` AS `Name0` + SELECT `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `e1`.`Id`, `e1`.`Discriminator`, `e1`.`Name`, `e1`.`Number`, `e1`.`IsGreen`, `s`.`EntityBranchId`, `s`.`EntityOneId`, `s`.`Id` AS `Id0`, `s`.`Name` AS `Name0` FROM (`JoinCompositeKeyToLeaf` AS `j` INNER JOIN ( SELECT `e0`.`Id`, `e0`.`Discriminator`, `e0`.`Name`, `e0`.`Number`, `e0`.`IsGreen` FROM `EntityRoots` AS `e0` WHERE `e0`.`Discriminator` = 'EntityLeaf' - ) AS `t` ON `j`.`LeafId` = `t`.`Id`) + ) AS `e1` ON `j`.`LeafId` = `e1`.`Id`) LEFT JOIN ( - SELECT `j0`.`EntityBranchId`, `j0`.`EntityOneId`, `e1`.`Id`, `e1`.`Name` + SELECT `j0`.`EntityBranchId`, `j0`.`EntityOneId`, `e2`.`Id`, `e2`.`Name` FROM `JoinOneToBranch` AS `j0` - INNER JOIN `EntityOnes` AS `e1` ON `j0`.`EntityOneId` = `e1`.`Id` - ) AS `t0` ON `t`.`Id` = `t0`.`EntityBranchId` -) AS `t1` ON `e`.`Key1` = `t1`.`CompositeId1` AND `e`.`Key2` = `t1`.`CompositeId2` AND `e`.`Key3` = `t1`.`CompositeId3` -ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `t1`.`LeafId`, `t1`.`CompositeId1`, `t1`.`CompositeId2`, `t1`.`CompositeId3`, `t1`.`Id`, `t1`.`EntityBranchId`, `t1`.`EntityOneId` + INNER JOIN `EntityOnes` AS `e2` ON `j0`.`EntityOneId` = `e2`.`Id` + ) AS `s` ON `e1`.`Id` = `s`.`EntityBranchId` +) AS `s0` ON `e`.`Key1` = `s0`.`CompositeId1` AND `e`.`Key2` = `s0`.`CompositeId2` AND `e`.`Key3` = `s0`.`CompositeId3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Id`, `s0`.`EntityBranchId`, `s0`.`EntityOneId` """); } @@ -705,11 +702,11 @@ public override async Task Include_skip_navigation_then_include_reference_and_sk await base.Include_skip_navigation_then_include_reference_and_skip_navigation(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `t0`.`OneId`, `t0`.`ThreeId`, `t0`.`Payload`, `t0`.`Id`, `t0`.`Name`, `t0`.`Id0`, `t0`.`CollectionInverseId`, `t0`.`ExtraId`, `t0`.`Name0`, `t0`.`ReferenceInverseId`, `t0`.`LeftId`, `t0`.`RightId`, `t0`.`Payload0`, `t0`.`Id1`, `t0`.`Name1` + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Payload`, `s0`.`Id`, `s0`.`Name`, `s0`.`Id0`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name0`, `s0`.`ReferenceInverseId`, `s0`.`LeftId`, `s0`.`RightId`, `s0`.`Payload0`, `s0`.`Id1`, `s0`.`Name1` FROM `EntityThrees` AS `e` LEFT JOIN ( - SELECT `j`.`OneId`, `j`.`ThreeId`, `j`.`Payload`, `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `t`.`LeftId`, `t`.`RightId`, `t`.`Payload` AS `Payload0`, `t`.`Id` AS `Id1`, `t`.`Name` AS `Name1` + SELECT `j`.`OneId`, `j`.`ThreeId`, `j`.`Payload`, `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `s`.`LeftId`, `s`.`RightId`, `s`.`Payload` AS `Payload0`, `s`.`Id` AS `Id1`, `s`.`Name` AS `Name1` FROM ((`JoinOneToThreePayloadFull` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId`) @@ -717,9 +714,9 @@ LEFT JOIN ( SELECT `j0`.`LeftId`, `j0`.`RightId`, `j0`.`Payload`, `e2`.`Id`, `e2`.`Name` FROM `JoinOneSelfPayload` AS `j0` INNER JOIN `EntityOnes` AS `e2` ON `j0`.`RightId` = `e2`.`Id` - ) AS `t` ON `e0`.`Id` = `t`.`LeftId` -) AS `t0` ON `e`.`Id` = `t0`.`ThreeId` -ORDER BY `e`.`Id`, `t0`.`OneId`, `t0`.`ThreeId`, `t0`.`Id`, `t0`.`Id0`, `t0`.`LeftId`, `t0`.`RightId` + ) AS `s` ON `e0`.`Id` = `s`.`LeftId` +) AS `s0` ON `e`.`Id` = `s0`.`ThreeId` +ORDER BY `e`.`Id`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Id`, `s0`.`Id0`, `s0`.`LeftId`, `s0`.`RightId` """); } @@ -728,16 +725,16 @@ public override async Task Include_skip_navigation_and_reference(bool async) await base.Include_skip_navigation_and_reference(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `e0`.`Id`, `t`.`OneSkipSharedId`, `t`.`TwoSkipSharedId`, `t`.`Id`, `t`.`Name`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId` + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `e0`.`Id`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId`, `s`.`Id`, `s`.`Name`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId` FROM (`EntityTwos` AS `e` LEFT JOIN `EntityThrees` AS `e0` ON `e`.`Id` = `e0`.`ReferenceInverseId`) LEFT JOIN ( SELECT `e1`.`OneSkipSharedId`, `e1`.`TwoSkipSharedId`, `e2`.`Id`, `e2`.`Name` FROM `EntityOneEntityTwo` AS `e1` INNER JOIN `EntityOnes` AS `e2` ON `e1`.`OneSkipSharedId` = `e2`.`Id` -) AS `t` ON `e`.`Id` = `t`.`TwoSkipSharedId` -ORDER BY `e`.`Id`, `e0`.`Id`, `t`.`OneSkipSharedId`, `t`.`TwoSkipSharedId` +) AS `s` ON `e`.`Id` = `s`.`TwoSkipSharedId` +ORDER BY `e`.`Id`, `e0`.`Id`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId` """); } @@ -746,16 +743,16 @@ public override async Task Filtered_include_skip_navigation_where(bool async) await base.Filtered_include_skip_navigation_where(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `t`.`OneId`, `t`.`ThreeId`, `t`.`Payload`, `t`.`Id`, `t`.`Name` + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Payload`, `s`.`Id`, `s`.`Name` FROM `EntityThrees` AS `e` LEFT JOIN ( SELECT `j`.`OneId`, `j`.`ThreeId`, `j`.`Payload`, `e0`.`Id`, `e0`.`Name` FROM `JoinOneToThreePayloadFullShared` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` WHERE `e0`.`Id` < 10 -) AS `t` ON `e`.`Id` = `t`.`ThreeId` -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`ThreeId` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId` """); } @@ -764,15 +761,15 @@ public override async Task Filtered_include_skip_navigation_order_by(bool async) await base.Filtered_include_skip_navigation_order_by(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `t`.`ThreeId`, `t`.`TwoId`, `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name`, `t`.`ReferenceInverseId` + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`ThreeId`, `s`.`TwoId`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId` FROM `EntityThrees` AS `e` LEFT JOIN ( SELECT `j`.`ThreeId`, `j`.`TwoId`, `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId` FROM `JoinTwoToThree` AS `j` INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` -) AS `t` ON `e`.`Id` = `t`.`ThreeId` -ORDER BY `e`.`Id`, `t`.`Id`, `t`.`ThreeId` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`Id`, `s`.`ThreeId` """); } @@ -844,11 +841,11 @@ public override async Task Filtered_then_include_skip_navigation_where(bool asyn await base.Filtered_then_include_skip_navigation_where(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`Discriminator`, `e`.`Name`, `e`.`Number`, `e`.`Slumber`, `e`.`IsGreen`, `e`.`IsBrown`, `t0`.`RootSkipSharedId`, `t0`.`ThreeSkipSharedId`, `t0`.`Id`, `t0`.`CollectionInverseId`, `t0`.`Name`, `t0`.`ReferenceInverseId`, `t0`.`OneId`, `t0`.`ThreeId`, `t0`.`Payload`, `t0`.`Id0`, `t0`.`Name0` + """ +SELECT `e`.`Id`, `e`.`Discriminator`, `e`.`Name`, `e`.`Number`, `e`.`Slumber`, `e`.`IsGreen`, `e`.`IsBrown`, `s0`.`RootSkipSharedId`, `s0`.`ThreeSkipSharedId`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`Name`, `s0`.`ReferenceInverseId`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Payload`, `s0`.`Id0`, `s0`.`Name0` FROM `EntityRoots` AS `e` LEFT JOIN ( - SELECT `e0`.`RootSkipSharedId`, `e0`.`ThreeSkipSharedId`, `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`Name`, `e1`.`ReferenceInverseId`, `t`.`OneId`, `t`.`ThreeId`, `t`.`Payload`, `t`.`Id` AS `Id0`, `t`.`Name` AS `Name0` + SELECT `e0`.`RootSkipSharedId`, `e0`.`ThreeSkipSharedId`, `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`Name`, `e1`.`ReferenceInverseId`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Payload`, `s`.`Id` AS `Id0`, `s`.`Name` AS `Name0` FROM (`EntityRootEntityThree` AS `e0` INNER JOIN `EntityThrees` AS `e1` ON `e0`.`ThreeSkipSharedId` = `e1`.`Id`) LEFT JOIN ( @@ -856,9 +853,9 @@ LEFT JOIN ( FROM `JoinOneToThreePayloadFullShared` AS `j` INNER JOIN `EntityOnes` AS `e2` ON `j`.`OneId` = `e2`.`Id` WHERE `e2`.`Id` < 10 - ) AS `t` ON `e1`.`Id` = `t`.`ThreeId` -) AS `t0` ON `e`.`Id` = `t0`.`RootSkipSharedId` -ORDER BY `e`.`Id`, `t0`.`RootSkipSharedId`, `t0`.`ThreeSkipSharedId`, `t0`.`Id`, `t0`.`OneId`, `t0`.`ThreeId` + ) AS `s` ON `e1`.`Id` = `s`.`ThreeId` +) AS `s0` ON `e`.`Id` = `s0`.`RootSkipSharedId` +ORDER BY `e`.`Id`, `s0`.`RootSkipSharedId`, `s0`.`ThreeSkipSharedId`, `s0`.`Id`, `s0`.`OneId`, `s0`.`ThreeId` """); } @@ -894,21 +891,21 @@ public override async Task Filtered_include_skip_navigation_where_then_include_s AssertSql( """ -SELECT `e`.`Id`, `e`.`Discriminator`, `e`.`Name`, `e`.`Number`, `e`.`IsGreen`, `t0`.`LeafId`, `t0`.`CompositeId1`, `t0`.`CompositeId2`, `t0`.`CompositeId3`, `t0`.`Key1`, `t0`.`Key2`, `t0`.`Key3`, `t0`.`Name`, `t0`.`TwoSkipSharedId`, `t0`.`CompositeKeySkipSharedKey1`, `t0`.`CompositeKeySkipSharedKey2`, `t0`.`CompositeKeySkipSharedKey3`, `t0`.`Id`, `t0`.`CollectionInverseId`, `t0`.`ExtraId`, `t0`.`Name0`, `t0`.`ReferenceInverseId` +SELECT `e`.`Id`, `e`.`Discriminator`, `e`.`Name`, `e`.`Number`, `e`.`IsGreen`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Key1`, `s0`.`Key2`, `s0`.`Key3`, `s0`.`Name`, `s0`.`TwoSkipSharedId`, `s0`.`CompositeKeySkipSharedKey1`, `s0`.`CompositeKeySkipSharedKey2`, `s0`.`CompositeKeySkipSharedKey3`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name0`, `s0`.`ReferenceInverseId` FROM `EntityRoots` AS `e` LEFT JOIN ( - SELECT `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `e0`.`Key1`, `e0`.`Key2`, `e0`.`Key3`, `e0`.`Name`, `t`.`TwoSkipSharedId`, `t`.`CompositeKeySkipSharedKey1`, `t`.`CompositeKeySkipSharedKey2`, `t`.`CompositeKeySkipSharedKey3`, `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name` AS `Name0`, `t`.`ReferenceInverseId` + SELECT `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `e0`.`Key1`, `e0`.`Key2`, `e0`.`Key3`, `e0`.`Name`, `s`.`TwoSkipSharedId`, `s`.`CompositeKeySkipSharedKey1`, `s`.`CompositeKeySkipSharedKey2`, `s`.`CompositeKeySkipSharedKey3`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name` AS `Name0`, `s`.`ReferenceInverseId` FROM (`JoinCompositeKeyToLeaf` AS `j` INNER JOIN `EntityCompositeKeys` AS `e0` ON `j`.`CompositeId1` = `e0`.`Key1` AND `j`.`CompositeId2` = `e0`.`Key2` AND `j`.`CompositeId3` = `e0`.`Key3`) LEFT JOIN ( SELECT `e1`.`TwoSkipSharedId`, `e1`.`CompositeKeySkipSharedKey1`, `e1`.`CompositeKeySkipSharedKey2`, `e1`.`CompositeKeySkipSharedKey3`, `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId` FROM `EntityCompositeKeyEntityTwo` AS `e1` INNER JOIN `EntityTwos` AS `e2` ON `e1`.`TwoSkipSharedId` = `e2`.`Id` - ) AS `t` ON `e0`.`Key1` = `t`.`CompositeKeySkipSharedKey1` AND `e0`.`Key2` = `t`.`CompositeKeySkipSharedKey2` AND `e0`.`Key3` = `t`.`CompositeKeySkipSharedKey3` + ) AS `s` ON `e0`.`Key1` = `s`.`CompositeKeySkipSharedKey1` AND `e0`.`Key2` = `s`.`CompositeKeySkipSharedKey2` AND `e0`.`Key3` = `s`.`CompositeKeySkipSharedKey3` WHERE `e0`.`Key1` < 5 -) AS `t0` ON `e`.`Id` = `t0`.`LeafId` +) AS `s0` ON `e`.`Id` = `s0`.`LeafId` WHERE `e`.`Discriminator` = 'EntityLeaf' -ORDER BY `e`.`Id`, `t0`.`LeafId`, `t0`.`CompositeId1`, `t0`.`CompositeId2`, `t0`.`CompositeId3`, `t0`.`Key1`, `t0`.`Key2`, `t0`.`Key3`, `t0`.`TwoSkipSharedId`, `t0`.`CompositeKeySkipSharedKey1`, `t0`.`CompositeKeySkipSharedKey2`, `t0`.`CompositeKeySkipSharedKey3` +ORDER BY `e`.`Id`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Key1`, `s0`.`Key2`, `s0`.`Key3`, `s0`.`TwoSkipSharedId`, `s0`.`CompositeKeySkipSharedKey1`, `s0`.`CompositeKeySkipSharedKey2`, `s0`.`CompositeKeySkipSharedKey3` """); } @@ -973,8 +970,8 @@ public override async Task Filter_include_on_skip_navigation_combined(bool async await base.Filter_include_on_skip_navigation_combined(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `t`.`OneId`, `t`.`TwoId`, `t`.`JoinOneToTwoExtraId`, `t`.`Id`, `t`.`Name`, `t`.`Id0`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name0`, `t`.`ReferenceInverseId`, `t`.`Id1`, `t`.`CollectionInverseId0`, `t`.`ExtraId0`, `t`.`Name1`, `t`.`ReferenceInverseId0` + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`OneId`, `s`.`TwoId`, `s`.`JoinOneToTwoExtraId`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `s`.`Id1`, `s`.`CollectionInverseId0`, `s`.`ExtraId0`, `s`.`Name1`, `s`.`ReferenceInverseId0` FROM `EntityTwos` AS `e` LEFT JOIN ( SELECT `j`.`OneId`, `j`.`TwoId`, `j`.`JoinOneToTwoExtraId`, `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `e2`.`Id` AS `Id1`, `e2`.`CollectionInverseId` AS `CollectionInverseId0`, `e2`.`ExtraId` AS `ExtraId0`, `e2`.`Name` AS `Name1`, `e2`.`ReferenceInverseId` AS `ReferenceInverseId0` @@ -983,8 +980,8 @@ LEFT JOIN ( LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId`) LEFT JOIN `EntityTwos` AS `e2` ON `e0`.`Id` = `e2`.`CollectionInverseId` WHERE `e0`.`Id` < 10 -) AS `t` ON `e`.`Id` = `t`.`TwoId` -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`TwoId`, `t`.`Id`, `t`.`Id0` +) AS `s` ON `e`.`Id` = `s`.`TwoId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s`.`Id0` """); } @@ -1030,21 +1027,21 @@ public override async Task Filtered_include_on_skip_navigation_then_filtered_inc await base.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `t0`.`OneId`, `t0`.`ThreeId`, `t0`.`Payload`, `t0`.`Id`, `t0`.`Name`, `t0`.`Id0`, `t0`.`CollectionInverseId`, `t0`.`ExtraId`, `t0`.`Name0`, `t0`.`ReferenceInverseId` + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Payload`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId` FROM `EntityThrees` AS `e` LEFT JOIN ( - SELECT `j`.`OneId`, `j`.`ThreeId`, `j`.`Payload`, `e0`.`Id`, `e0`.`Name`, `t`.`Id` AS `Id0`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name` AS `Name0`, `t`.`ReferenceInverseId` + SELECT `j`.`OneId`, `j`.`ThreeId`, `j`.`Payload`, `e0`.`Id`, `e0`.`Name`, `e2`.`Id` AS `Id0`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name` AS `Name0`, `e2`.`ReferenceInverseId` FROM (`JoinOneToThreePayloadFull` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) LEFT JOIN ( SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name`, `e1`.`ReferenceInverseId` FROM `EntityTwos` AS `e1` WHERE `e1`.`Id` < 5 - ) AS `t` ON `e0`.`Id` = `t`.`CollectionInverseId` + ) AS `e2` ON `e0`.`Id` = `e2`.`CollectionInverseId` WHERE `e0`.`Id` > 15 -) AS `t0` ON `e`.`Id` = `t0`.`ThreeId` -ORDER BY `e`.`Id`, `t0`.`OneId`, `t0`.`ThreeId`, `t0`.`Id` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id` """); } @@ -1053,21 +1050,21 @@ public override async Task Filtered_include_on_navigation_then_filtered_include_ await base.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`Name`, `t0`.`Id`, `t0`.`CollectionInverseId`, `t0`.`ExtraId`, `t0`.`Name`, `t0`.`ReferenceInverseId`, `t0`.`ThreeId`, `t0`.`TwoId`, `t0`.`Id0`, `t0`.`CollectionInverseId0`, `t0`.`Name0`, `t0`.`ReferenceInverseId0` + """ +SELECT `e`.`Id`, `e`.`Name`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name`, `s0`.`ReferenceInverseId`, `s0`.`ThreeId`, `s0`.`TwoId`, `s0`.`Id0`, `s0`.`CollectionInverseId0`, `s0`.`Name0`, `s0`.`ReferenceInverseId0` FROM `EntityOnes` AS `e` LEFT JOIN ( - SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `t`.`ThreeId`, `t`.`TwoId`, `t`.`Id` AS `Id0`, `t`.`CollectionInverseId` AS `CollectionInverseId0`, `t`.`Name` AS `Name0`, `t`.`ReferenceInverseId` AS `ReferenceInverseId0` + SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `s`.`ThreeId`, `s`.`TwoId`, `s`.`Id` AS `Id0`, `s`.`CollectionInverseId` AS `CollectionInverseId0`, `s`.`Name` AS `Name0`, `s`.`ReferenceInverseId` AS `ReferenceInverseId0` FROM `EntityTwos` AS `e0` LEFT JOIN ( SELECT `j`.`ThreeId`, `j`.`TwoId`, `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`Name`, `e1`.`ReferenceInverseId` FROM `JoinTwoToThree` AS `j` INNER JOIN `EntityThrees` AS `e1` ON `j`.`ThreeId` = `e1`.`Id` WHERE `e1`.`Id` < 5 - ) AS `t` ON `e0`.`Id` = `t`.`TwoId` + ) AS `s` ON `e0`.`Id` = `s`.`TwoId` WHERE `e0`.`Id` > 15 -) AS `t0` ON `e`.`Id` = `t0`.`CollectionInverseId` -ORDER BY `e`.`Id`, `t0`.`Id`, `t0`.`ThreeId`, `t0`.`TwoId` +) AS `s0` ON `e`.`Id` = `s0`.`CollectionInverseId` +ORDER BY `e`.`Id`, `s0`.`Id`, `s0`.`ThreeId`, `s0`.`TwoId` """); } @@ -1090,20 +1087,20 @@ public override async Task Include_skip_navigation_split(bool async) await base.Include_skip_navigation_split(async); AssertSql( -""" + """ SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name` FROM `EntityCompositeKeys` AS `e` ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3` """, -// -""" -SELECT `t`.`RootSkipSharedId`, `t`.`CompositeKeySkipSharedKey1`, `t`.`CompositeKeySkipSharedKey2`, `t`.`CompositeKeySkipSharedKey3`, `t`.`Id`, `t`.`Discriminator`, `t`.`Name`, `t`.`Number`, `t`.`Slumber`, `t`.`IsGreen`, `t`.`IsBrown`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3` + // + """ +SELECT `s`.`RootSkipSharedId`, `s`.`CompositeKeySkipSharedKey1`, `s`.`CompositeKeySkipSharedKey2`, `s`.`CompositeKeySkipSharedKey3`, `s`.`Id`, `s`.`Discriminator`, `s`.`Name`, `s`.`Number`, `s`.`Slumber`, `s`.`IsGreen`, `s`.`IsBrown`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3` FROM `EntityCompositeKeys` AS `e` INNER JOIN ( SELECT `e0`.`RootSkipSharedId`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3`, `e1`.`Id`, `e1`.`Discriminator`, `e1`.`Name`, `e1`.`Number`, `e1`.`Slumber`, `e1`.`IsGreen`, `e1`.`IsBrown` FROM `EntityCompositeKeyEntityRoot` AS `e0` INNER JOIN `EntityRoots` AS `e1` ON `e0`.`RootSkipSharedId` = `e1`.`Id` -) AS `t` ON `e`.`Key1` = `t`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `t`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `t`.`CompositeKeySkipSharedKey3` +) AS `s` ON `e`.`Key1` = `s`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `s`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `s`.`CompositeKeySkipSharedKey3` ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3` """); } @@ -1113,21 +1110,21 @@ public override async Task Include_skip_navigation_then_reference_split(bool asy await base.Include_skip_navigation_then_reference_split(async); AssertSql( -""" + """ SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId` FROM `EntityTwos` AS `e` ORDER BY `e`.`Id` """, -// -""" -SELECT `t`.`OneId`, `t`.`TwoId`, `t`.`JoinOneToTwoExtraId`, `t`.`Id`, `t`.`Name`, `t`.`Id0`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name0`, `t`.`ReferenceInverseId`, `e`.`Id` + // + """ +SELECT `s`.`OneId`, `s`.`TwoId`, `s`.`JoinOneToTwoExtraId`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `e`.`Id` FROM `EntityTwos` AS `e` INNER JOIN ( SELECT `j`.`OneId`, `j`.`TwoId`, `j`.`JoinOneToTwoExtraId`, `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId` FROM (`JoinOneToTwo` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` -) AS `t` ON `e`.`Id` = `t`.`TwoId` +) AS `s` ON `e`.`Id` = `s`.`TwoId` ORDER BY `e`.`Id` """); } @@ -1137,46 +1134,46 @@ public override async Task Include_skip_navigation_then_include_skip_navigation_ await base.Include_skip_navigation_then_include_skip_navigation_split(async); AssertSql( -""" + """ SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name` FROM `EntityCompositeKeys` AS `e` ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3` """, - // - """ -SELECT `t0`.`LeafId`, `t0`.`CompositeId1`, `t0`.`CompositeId2`, `t0`.`CompositeId3`, `t0`.`Id`, `t0`.`Discriminator`, `t0`.`Name`, `t0`.`Number`, `t0`.`IsGreen`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3` + // + """ +SELECT `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Id`, `s`.`Discriminator`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3` FROM `EntityCompositeKeys` AS `e` INNER JOIN ( - SELECT `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `t`.`Id`, `t`.`Discriminator`, `t`.`Name`, `t`.`Number`, `t`.`IsGreen` + SELECT `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `e1`.`Id`, `e1`.`Discriminator`, `e1`.`Name`, `e1`.`Number`, `e1`.`IsGreen` FROM `JoinCompositeKeyToLeaf` AS `j` INNER JOIN ( SELECT `e0`.`Id`, `e0`.`Discriminator`, `e0`.`Name`, `e0`.`Number`, `e0`.`IsGreen` FROM `EntityRoots` AS `e0` WHERE `e0`.`Discriminator` = 'EntityLeaf' - ) AS `t` ON `j`.`LeafId` = `t`.`Id` -) AS `t0` ON `e`.`Key1` = `t0`.`CompositeId1` AND `e`.`Key2` = `t0`.`CompositeId2` AND `e`.`Key3` = `t0`.`CompositeId3` -ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `t0`.`LeafId`, `t0`.`CompositeId1`, `t0`.`CompositeId2`, `t0`.`CompositeId3`, `t0`.`Id` + ) AS `e1` ON `j`.`LeafId` = `e1`.`Id` +) AS `s` ON `e`.`Key1` = `s`.`CompositeId1` AND `e`.`Key2` = `s`.`CompositeId2` AND `e`.`Key3` = `s`.`CompositeId3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Id` """, - // - """ -SELECT `t1`.`EntityBranchId`, `t1`.`EntityOneId`, `t1`.`Id`, `t1`.`Name`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `t0`.`LeafId`, `t0`.`CompositeId1`, `t0`.`CompositeId2`, `t0`.`CompositeId3`, `t0`.`Id` + // + """ +SELECT `s0`.`EntityBranchId`, `s0`.`EntityOneId`, `s0`.`Id`, `s0`.`Name`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Id` FROM (`EntityCompositeKeys` AS `e` INNER JOIN ( - SELECT `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `t`.`Id` + SELECT `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `e1`.`Id` FROM `JoinCompositeKeyToLeaf` AS `j` INNER JOIN ( SELECT `e0`.`Id` FROM `EntityRoots` AS `e0` WHERE `e0`.`Discriminator` = 'EntityLeaf' - ) AS `t` ON `j`.`LeafId` = `t`.`Id` -) AS `t0` ON `e`.`Key1` = `t0`.`CompositeId1` AND `e`.`Key2` = `t0`.`CompositeId2` AND `e`.`Key3` = `t0`.`CompositeId3`) + ) AS `e1` ON `j`.`LeafId` = `e1`.`Id` +) AS `s` ON `e`.`Key1` = `s`.`CompositeId1` AND `e`.`Key2` = `s`.`CompositeId2` AND `e`.`Key3` = `s`.`CompositeId3`) LEFT JOIN ( - SELECT `j0`.`EntityBranchId`, `j0`.`EntityOneId`, `e1`.`Id`, `e1`.`Name` + SELECT `j0`.`EntityBranchId`, `j0`.`EntityOneId`, `e2`.`Id`, `e2`.`Name` FROM `JoinOneToBranch` AS `j0` - INNER JOIN `EntityOnes` AS `e1` ON `j0`.`EntityOneId` = `e1`.`Id` -) AS `t1` ON `t0`.`Id` = `t1`.`EntityBranchId` -WHERE `t0`.`Id` IS NOT NULL AND `t1`.`EntityBranchId` IS NOT NULL -ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `t0`.`LeafId`, `t0`.`CompositeId1`, `t0`.`CompositeId2`, `t0`.`CompositeId3`, `t0`.`Id` + INNER JOIN `EntityOnes` AS `e2` ON `j0`.`EntityOneId` = `e2`.`Id` +) AS `s0` ON `s`.`Id` = `s0`.`EntityBranchId` +WHERE `s`.`Id` IS NOT NULL AND `s0`.`EntityBranchId` IS NOT NULL +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Id` """); } @@ -1192,33 +1189,33 @@ ORDER BY `e`.`Id` """, // """ -SELECT `t`.`OneId`, `t`.`ThreeId`, `t`.`Payload`, `t`.`Id`, `t`.`Name`, `t`.`Id0`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name0`, `t`.`ReferenceInverseId`, `e`.`Id` +SELECT `s`.`OneId`, `s`.`ThreeId`, `s`.`Payload`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `e`.`Id` FROM `EntityThrees` AS `e` INNER JOIN ( SELECT `j`.`OneId`, `j`.`ThreeId`, `j`.`Payload`, `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId` FROM (`JoinOneToThreePayloadFull` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` -) AS `t` ON `e`.`Id` = `t`.`ThreeId` -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`ThreeId`, `t`.`Id`, `t`.`Id0` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id`, `s`.`Id0` """, // """ -SELECT `t0`.`LeftId`, `t0`.`RightId`, `t0`.`Payload`, `t0`.`Id`, `t0`.`Name`, `e`.`Id`, `t`.`OneId`, `t`.`ThreeId`, `t`.`Id`, `t`.`Id0` +SELECT `s0`.`LeftId`, `s0`.`RightId`, `s0`.`Payload`, `s0`.`Id`, `s0`.`Name`, `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id`, `s`.`Id0` FROM (`EntityThrees` AS `e` INNER JOIN ( SELECT `j`.`OneId`, `j`.`ThreeId`, `e0`.`Id`, `e1`.`Id` AS `Id0` FROM (`JoinOneToThreePayloadFull` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` -) AS `t` ON `e`.`Id` = `t`.`ThreeId`) +) AS `s` ON `e`.`Id` = `s`.`ThreeId`) LEFT JOIN ( SELECT `j0`.`LeftId`, `j0`.`RightId`, `j0`.`Payload`, `e2`.`Id`, `e2`.`Name` FROM `JoinOneSelfPayload` AS `j0` INNER JOIN `EntityOnes` AS `e2` ON `j0`.`RightId` = `e2`.`Id` -) AS `t0` ON `t`.`Id` = `t0`.`LeftId` -WHERE `t`.`Id` IS NOT NULL AND `t0`.`LeftId` IS NOT NULL -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`ThreeId`, `t`.`Id`, `t`.`Id0` +) AS `s0` ON `s`.`Id` = `s0`.`LeftId` +WHERE `s`.`Id` IS NOT NULL AND `s0`.`LeftId` IS NOT NULL +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id`, `s`.`Id0` """); } @@ -1227,22 +1224,22 @@ public override async Task Include_skip_navigation_and_reference_split(bool asyn await base.Include_skip_navigation_and_reference_split(async); AssertSql( -""" + """ SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId` FROM `EntityTwos` AS `e` LEFT JOIN `EntityThrees` AS `e0` ON `e`.`Id` = `e0`.`ReferenceInverseId` ORDER BY `e`.`Id`, `e0`.`Id` """, -// -""" -SELECT `t`.`OneSkipSharedId`, `t`.`TwoSkipSharedId`, `t`.`Id`, `t`.`Name`, `e`.`Id`, `e0`.`Id` + // + """ +SELECT `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId`, `s`.`Id`, `s`.`Name`, `e`.`Id`, `e0`.`Id` FROM (`EntityTwos` AS `e` LEFT JOIN `EntityThrees` AS `e0` ON `e`.`Id` = `e0`.`ReferenceInverseId`) INNER JOIN ( SELECT `e1`.`OneSkipSharedId`, `e1`.`TwoSkipSharedId`, `e2`.`Id`, `e2`.`Name` FROM `EntityOneEntityTwo` AS `e1` INNER JOIN `EntityOnes` AS `e2` ON `e1`.`OneSkipSharedId` = `e2`.`Id` -) AS `t` ON `e`.`Id` = `t`.`TwoSkipSharedId` +) AS `s` ON `e`.`Id` = `s`.`TwoSkipSharedId` ORDER BY `e`.`Id`, `e0`.`Id` """); } @@ -1252,21 +1249,21 @@ public override async Task Filtered_include_skip_navigation_where_split(bool asy await base.Filtered_include_skip_navigation_where_split(async); AssertSql( -""" + """ SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId` FROM `EntityThrees` AS `e` ORDER BY `e`.`Id` """, -// -""" -SELECT `t`.`OneId`, `t`.`ThreeId`, `t`.`Payload`, `t`.`Id`, `t`.`Name`, `e`.`Id` + // + """ +SELECT `s`.`OneId`, `s`.`ThreeId`, `s`.`Payload`, `s`.`Id`, `s`.`Name`, `e`.`Id` FROM `EntityThrees` AS `e` INNER JOIN ( SELECT `j`.`OneId`, `j`.`ThreeId`, `j`.`Payload`, `e0`.`Id`, `e0`.`Name` FROM `JoinOneToThreePayloadFullShared` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` WHERE `e0`.`Id` < 10 -) AS `t` ON `e`.`Id` = `t`.`ThreeId` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` ORDER BY `e`.`Id` """); } @@ -1276,21 +1273,21 @@ public override async Task Filtered_include_skip_navigation_order_by_split(bool await base.Filtered_include_skip_navigation_order_by_split(async); AssertSql( -""" + """ SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId` FROM `EntityThrees` AS `e` ORDER BY `e`.`Id` """, -// -""" -SELECT `t`.`ThreeId`, `t`.`TwoId`, `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name`, `t`.`ReferenceInverseId`, `e`.`Id` + // + """ +SELECT `s`.`ThreeId`, `s`.`TwoId`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId`, `e`.`Id` FROM `EntityThrees` AS `e` INNER JOIN ( SELECT `j`.`ThreeId`, `j`.`TwoId`, `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId` FROM `JoinTwoToThree` AS `j` INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` -) AS `t` ON `e`.`Id` = `t`.`ThreeId` -ORDER BY `e`.`Id`, `t`.`Id` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`Id` """); } @@ -1387,32 +1384,32 @@ ORDER BY `e`.`Id` """, // """ -SELECT `t`.`RootSkipSharedId`, `t`.`ThreeSkipSharedId`, `t`.`Id`, `t`.`CollectionInverseId`, `t`.`Name`, `t`.`ReferenceInverseId`, `e`.`Id` +SELECT `s`.`RootSkipSharedId`, `s`.`ThreeSkipSharedId`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId`, `e`.`Id` FROM `EntityRoots` AS `e` INNER JOIN ( SELECT `e0`.`RootSkipSharedId`, `e0`.`ThreeSkipSharedId`, `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`Name`, `e1`.`ReferenceInverseId` FROM `EntityRootEntityThree` AS `e0` INNER JOIN `EntityThrees` AS `e1` ON `e0`.`ThreeSkipSharedId` = `e1`.`Id` -) AS `t` ON `e`.`Id` = `t`.`RootSkipSharedId` -ORDER BY `e`.`Id`, `t`.`RootSkipSharedId`, `t`.`ThreeSkipSharedId`, `t`.`Id` +) AS `s` ON `e`.`Id` = `s`.`RootSkipSharedId` +ORDER BY `e`.`Id`, `s`.`RootSkipSharedId`, `s`.`ThreeSkipSharedId`, `s`.`Id` """, // """ -SELECT `t0`.`OneId`, `t0`.`ThreeId`, `t0`.`Payload`, `t0`.`Id`, `t0`.`Name`, `e`.`Id`, `t`.`RootSkipSharedId`, `t`.`ThreeSkipSharedId`, `t`.`Id` +SELECT `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Payload`, `s0`.`Id`, `s0`.`Name`, `e`.`Id`, `s`.`RootSkipSharedId`, `s`.`ThreeSkipSharedId`, `s`.`Id` FROM (`EntityRoots` AS `e` INNER JOIN ( SELECT `e0`.`RootSkipSharedId`, `e0`.`ThreeSkipSharedId`, `e1`.`Id` FROM `EntityRootEntityThree` AS `e0` INNER JOIN `EntityThrees` AS `e1` ON `e0`.`ThreeSkipSharedId` = `e1`.`Id` -) AS `t` ON `e`.`Id` = `t`.`RootSkipSharedId`) +) AS `s` ON `e`.`Id` = `s`.`RootSkipSharedId`) LEFT JOIN ( SELECT `j`.`OneId`, `j`.`ThreeId`, `j`.`Payload`, `e2`.`Id`, `e2`.`Name` FROM `JoinOneToThreePayloadFullShared` AS `j` INNER JOIN `EntityOnes` AS `e2` ON `j`.`OneId` = `e2`.`Id` WHERE `e2`.`Id` < 10 -) AS `t0` ON `t`.`Id` = `t0`.`ThreeId` -WHERE `t`.`Id` IS NOT NULL AND `t0`.`ThreeId` IS NOT NULL -ORDER BY `e`.`Id`, `t`.`RootSkipSharedId`, `t`.`ThreeSkipSharedId`, `t`.`Id` +) AS `s0` ON `s`.`Id` = `s0`.`ThreeId` +WHERE `s`.`Id` IS NOT NULL AND `s0`.`ThreeId` IS NOT NULL +ORDER BY `e`.`Id`, `s`.`RootSkipSharedId`, `s`.`ThreeSkipSharedId`, `s`.`Id` """); } @@ -1464,42 +1461,42 @@ public override async Task Filtered_include_skip_navigation_where_then_include_s await base.Filtered_include_skip_navigation_where_then_include_skip_navigation_split(async); AssertSql( -""" + """ SELECT `e`.`Id`, `e`.`Discriminator`, `e`.`Name`, `e`.`Number`, `e`.`IsGreen` FROM `EntityRoots` AS `e` WHERE `e`.`Discriminator` = 'EntityLeaf' ORDER BY `e`.`Id` """, - // - """ -SELECT `t`.`LeafId`, `t`.`CompositeId1`, `t`.`CompositeId2`, `t`.`CompositeId3`, `t`.`Key1`, `t`.`Key2`, `t`.`Key3`, `t`.`Name`, `e`.`Id` + // + """ +SELECT `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Key1`, `s`.`Key2`, `s`.`Key3`, `s`.`Name`, `e`.`Id` FROM `EntityRoots` AS `e` INNER JOIN ( SELECT `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `e0`.`Key1`, `e0`.`Key2`, `e0`.`Key3`, `e0`.`Name` FROM `JoinCompositeKeyToLeaf` AS `j` INNER JOIN `EntityCompositeKeys` AS `e0` ON `j`.`CompositeId1` = `e0`.`Key1` AND `j`.`CompositeId2` = `e0`.`Key2` AND `j`.`CompositeId3` = `e0`.`Key3` WHERE `e0`.`Key1` < 5 -) AS `t` ON `e`.`Id` = `t`.`LeafId` +) AS `s` ON `e`.`Id` = `s`.`LeafId` WHERE `e`.`Discriminator` = 'EntityLeaf' -ORDER BY `e`.`Id`, `t`.`LeafId`, `t`.`CompositeId1`, `t`.`CompositeId2`, `t`.`CompositeId3`, `t`.`Key1`, `t`.`Key2`, `t`.`Key3` +ORDER BY `e`.`Id`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Key1`, `s`.`Key2`, `s`.`Key3` """, - // - """ -SELECT `t0`.`TwoSkipSharedId`, `t0`.`CompositeKeySkipSharedKey1`, `t0`.`CompositeKeySkipSharedKey2`, `t0`.`CompositeKeySkipSharedKey3`, `t0`.`Id`, `t0`.`CollectionInverseId`, `t0`.`ExtraId`, `t0`.`Name`, `t0`.`ReferenceInverseId`, `e`.`Id`, `t`.`LeafId`, `t`.`CompositeId1`, `t`.`CompositeId2`, `t`.`CompositeId3`, `t`.`Key1`, `t`.`Key2`, `t`.`Key3` + // + """ +SELECT `s0`.`TwoSkipSharedId`, `s0`.`CompositeKeySkipSharedKey1`, `s0`.`CompositeKeySkipSharedKey2`, `s0`.`CompositeKeySkipSharedKey3`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name`, `s0`.`ReferenceInverseId`, `e`.`Id`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Key1`, `s`.`Key2`, `s`.`Key3` FROM (`EntityRoots` AS `e` INNER JOIN ( SELECT `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `e0`.`Key1`, `e0`.`Key2`, `e0`.`Key3` FROM `JoinCompositeKeyToLeaf` AS `j` INNER JOIN `EntityCompositeKeys` AS `e0` ON `j`.`CompositeId1` = `e0`.`Key1` AND `j`.`CompositeId2` = `e0`.`Key2` AND `j`.`CompositeId3` = `e0`.`Key3` WHERE `e0`.`Key1` < 5 -) AS `t` ON `e`.`Id` = `t`.`LeafId`) +) AS `s` ON `e`.`Id` = `s`.`LeafId`) LEFT JOIN ( SELECT `e1`.`TwoSkipSharedId`, `e1`.`CompositeKeySkipSharedKey1`, `e1`.`CompositeKeySkipSharedKey2`, `e1`.`CompositeKeySkipSharedKey3`, `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId` FROM `EntityCompositeKeyEntityTwo` AS `e1` INNER JOIN `EntityTwos` AS `e2` ON `e1`.`TwoSkipSharedId` = `e2`.`Id` -) AS `t0` ON `t`.`Key1` = `t0`.`CompositeKeySkipSharedKey1` AND `t`.`Key2` = `t0`.`CompositeKeySkipSharedKey2` AND `t`.`Key3` = `t0`.`CompositeKeySkipSharedKey3` -WHERE (`e`.`Discriminator` = 'EntityLeaf') AND (`t`.`Key1` IS NOT NULL AND `t0`.`CompositeKeySkipSharedKey1` IS NOT NULL AND `t`.`Key2` IS NOT NULL AND `t0`.`CompositeKeySkipSharedKey2` IS NOT NULL AND `t`.`Key3` IS NOT NULL AND `t0`.`CompositeKeySkipSharedKey3` IS NOT NULL) -ORDER BY `e`.`Id`, `t`.`LeafId`, `t`.`CompositeId1`, `t`.`CompositeId2`, `t`.`CompositeId3`, `t`.`Key1`, `t`.`Key2`, `t`.`Key3` +) AS `s0` ON `s`.`Key1` = `s0`.`CompositeKeySkipSharedKey1` AND `s`.`Key2` = `s0`.`CompositeKeySkipSharedKey2` AND `s`.`Key3` = `s0`.`CompositeKeySkipSharedKey3` +WHERE (`e`.`Discriminator` = 'EntityLeaf') AND (`s`.`Key1` IS NOT NULL AND `s0`.`CompositeKeySkipSharedKey1` IS NOT NULL AND `s`.`Key2` IS NOT NULL AND `s0`.`CompositeKeySkipSharedKey2` IS NOT NULL AND `s`.`Key3` IS NOT NULL AND `s0`.`CompositeKeySkipSharedKey3` IS NOT NULL) +ORDER BY `e`.`Id`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Key1`, `s`.`Key2`, `s`.`Key3` """); } @@ -1608,7 +1605,7 @@ ORDER BY `e`.`Id` """, // """ -SELECT `t`.`OneId`, `t`.`TwoId`, `t`.`JoinOneToTwoExtraId`, `t`.`Id`, `t`.`Name`, `t`.`Id0`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name0`, `t`.`ReferenceInverseId`, `e`.`Id` +SELECT `s`.`OneId`, `s`.`TwoId`, `s`.`JoinOneToTwoExtraId`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `e`.`Id` FROM `EntityTwos` AS `e` INNER JOIN ( SELECT `j`.`OneId`, `j`.`TwoId`, `j`.`JoinOneToTwoExtraId`, `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId` @@ -1616,12 +1613,12 @@ INNER JOIN ( INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` WHERE `e0`.`Id` < 10 -) AS `t` ON `e`.`Id` = `t`.`TwoId` -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`TwoId`, `t`.`Id`, `t`.`Id0` +) AS `s` ON `e`.`Id` = `s`.`TwoId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s`.`Id0` """, // """ -SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e`.`Id`, `t`.`OneId`, `t`.`TwoId`, `t`.`Id`, `t`.`Id0` +SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s`.`Id0` FROM (`EntityTwos` AS `e` INNER JOIN ( SELECT `j`.`OneId`, `j`.`TwoId`, `e0`.`Id`, `e1`.`Id` AS `Id0` @@ -1629,10 +1626,10 @@ INNER JOIN ( INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` WHERE `e0`.`Id` < 10 -) AS `t` ON `e`.`Id` = `t`.`TwoId`) -LEFT JOIN `EntityTwos` AS `e2` ON `t`.`Id` = `e2`.`CollectionInverseId` -WHERE `t`.`Id` IS NOT NULL AND `e2`.`CollectionInverseId` IS NOT NULL -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`TwoId`, `t`.`Id`, `t`.`Id0` +) AS `s` ON `e`.`Id` = `s`.`TwoId`) +LEFT JOIN `EntityTwos` AS `e2` ON `s`.`Id` = `e2`.`CollectionInverseId` +WHERE `s`.`Id` IS NOT NULL AND `e2`.`CollectionInverseId` IS NOT NULL +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s`.`Id0` """); } @@ -1715,33 +1712,33 @@ ORDER BY `e`.`Id` """, // """ -SELECT `t`.`OneId`, `t`.`ThreeId`, `t`.`Payload`, `t`.`Id`, `t`.`Name`, `e`.`Id` +SELECT `s`.`OneId`, `s`.`ThreeId`, `s`.`Payload`, `s`.`Id`, `s`.`Name`, `e`.`Id` FROM `EntityThrees` AS `e` INNER JOIN ( SELECT `j`.`OneId`, `j`.`ThreeId`, `j`.`Payload`, `e0`.`Id`, `e0`.`Name` FROM `JoinOneToThreePayloadFull` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` WHERE `e0`.`Id` > 15 -) AS `t` ON `e`.`Id` = `t`.`ThreeId` -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`ThreeId`, `t`.`Id` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id` """, // """ -SELECT `t0`.`Id`, `t0`.`CollectionInverseId`, `t0`.`ExtraId`, `t0`.`Name`, `t0`.`ReferenceInverseId`, `e`.`Id`, `t`.`OneId`, `t`.`ThreeId`, `t`.`Id` +SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id` FROM (`EntityThrees` AS `e` INNER JOIN ( SELECT `j`.`OneId`, `j`.`ThreeId`, `e0`.`Id` FROM `JoinOneToThreePayloadFull` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` WHERE `e0`.`Id` > 15 -) AS `t` ON `e`.`Id` = `t`.`ThreeId`) +) AS `s` ON `e`.`Id` = `s`.`ThreeId`) LEFT JOIN ( SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name`, `e1`.`ReferenceInverseId` FROM `EntityTwos` AS `e1` WHERE `e1`.`Id` < 5 -) AS `t0` ON `t`.`Id` = `t0`.`CollectionInverseId` -WHERE `t`.`Id` IS NOT NULL AND `t0`.`CollectionInverseId` IS NOT NULL -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`ThreeId`, `t`.`Id` +) AS `e2` ON `s`.`Id` = `e2`.`CollectionInverseId` +WHERE `s`.`Id` IS NOT NULL AND `e2`.`CollectionInverseId` IS NOT NULL +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id` """); } @@ -1757,32 +1754,32 @@ ORDER BY `e`.`Id` """, // """ -SELECT `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name`, `t`.`ReferenceInverseId`, `e`.`Id` +SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e`.`Id` FROM `EntityOnes` AS `e` INNER JOIN ( SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId` FROM `EntityTwos` AS `e0` WHERE `e0`.`Id` > 15 -) AS `t` ON `e`.`Id` = `t`.`CollectionInverseId` -ORDER BY `e`.`Id`, `t`.`Id` +) AS `e2` ON `e`.`Id` = `e2`.`CollectionInverseId` +ORDER BY `e`.`Id`, `e2`.`Id` """, // """ -SELECT `t0`.`ThreeId`, `t0`.`TwoId`, `t0`.`Id`, `t0`.`CollectionInverseId`, `t0`.`Name`, `t0`.`ReferenceInverseId`, `e`.`Id`, `t`.`Id` +SELECT `s`.`ThreeId`, `s`.`TwoId`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId`, `e`.`Id`, `e2`.`Id` FROM (`EntityOnes` AS `e` INNER JOIN ( SELECT `e0`.`Id`, `e0`.`CollectionInverseId` FROM `EntityTwos` AS `e0` WHERE `e0`.`Id` > 15 -) AS `t` ON `e`.`Id` = `t`.`CollectionInverseId`) +) AS `e2` ON `e`.`Id` = `e2`.`CollectionInverseId`) LEFT JOIN ( SELECT `j`.`ThreeId`, `j`.`TwoId`, `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`Name`, `e1`.`ReferenceInverseId` FROM `JoinTwoToThree` AS `j` INNER JOIN `EntityThrees` AS `e1` ON `j`.`ThreeId` = `e1`.`Id` WHERE `e1`.`Id` < 5 -) AS `t0` ON `t`.`Id` = `t0`.`TwoId` -WHERE `t`.`Id` IS NOT NULL AND `t0`.`TwoId` IS NOT NULL -ORDER BY `e`.`Id`, `t`.`Id` +) AS `s` ON `e2`.`Id` = `s`.`TwoId` +WHERE `e2`.`Id` IS NOT NULL AND `s`.`TwoId` IS NOT NULL +ORDER BY `e`.`Id`, `e2`.`Id` """); } @@ -1791,14 +1788,14 @@ public override async Task Select_many_over_skip_navigation_where_non_equality(b await base.Select_many_over_skip_navigation_where_non_equality(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name`, `t`.`ReferenceInverseId` + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId` FROM `EntityOnes` AS `e` LEFT JOIN ( SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `j`.`OneId` FROM `JoinOneToTwo` AS `j` INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` -) AS `t` ON `e`.`Id` = `t`.`OneId` AND `e`.`Id` <> `t`.`Id` +) AS `s` ON `e`.`Id` = `s`.`OneId` AND `e`.`Id` <> `s`.`Id` """); } diff --git a/test/EFCore.Jet.FunctionalTests/Query/MappingQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/MappingQueryJetTest.cs index 9168508c..2d1f0edd 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/MappingQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/MappingQueryJetTest.cs @@ -58,7 +58,7 @@ public class MappingQueryJetFixture : MappingQueryFixtureBase { protected override ITestStoreFactory TestStoreFactory => JetNorthwindTestStoreFactory.Instance; - protected override string DatabaseSchema { get; } = null; + protected override string DatabaseSchema { get; } = "dbo"; protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext context) { diff --git a/test/EFCore.Jet.FunctionalTests/Query/NavigationTest.cs b/test/EFCore.Jet.FunctionalTests/Query/NavigationTest.cs index 6bd9cd8f..edd7a1a1 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/NavigationTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/NavigationTest.cs @@ -10,7 +10,7 @@ using Microsoft.EntityFrameworkCore.TestUtilities; using Microsoft.Extensions.DependencyInjection; using Xunit; - +#nullable disable // ReSharper disable InconsistentNaming namespace EntityFrameworkCore.Jet.FunctionalTests.Query { diff --git a/test/EFCore.Jet.FunctionalTests/Query/NorthwindAggregateOperatorsQueryJetTest.ResultOperators.cs b/test/EFCore.Jet.FunctionalTests/Query/NorthwindAggregateOperatorsQueryJetTest.ResultOperators.cs index 7e7aca90..678b453e 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/NorthwindAggregateOperatorsQueryJetTest.ResultOperators.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/NorthwindAggregateOperatorsQueryJetTest.ResultOperators.cs @@ -23,9 +23,6 @@ public NorthwindAggregateOperatorsQueryJetTest( Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); } - protected override bool CanExecuteQueryString - => false; - [ConditionalFact] public virtual void Check_all_tests_overridden() => TestHelpers.AssertAllMethodsOverridden(GetType()); @@ -975,19 +972,19 @@ public override async Task Min_over_nested_subquery_is_client_eval(bool isAsync) await base.Min_over_nested_subquery_is_client_eval(isAsync); AssertSql( -""" + """ SELECT MIN(( SELECT MIN(5 + ( SELECT MIN(`o0`.`ProductID`) FROM `Order Details` AS `o0` WHERE `o`.`OrderID` = `o0`.`OrderID`)) FROM `Orders` AS `o` - WHERE `t`.`CustomerID` = `o`.`CustomerID`)) + WHERE `c0`.`CustomerID` = `o`.`CustomerID`)) FROM ( SELECT TOP 3 `c`.`CustomerID` FROM `Customers` AS `c` ORDER BY `c`.`CustomerID` -) AS `t` +) AS `c0` """); } @@ -996,19 +993,19 @@ public override async Task Min_over_max_subquery_is_client_eval(bool isAsync) await base.Min_over_max_subquery_is_client_eval(isAsync); AssertSql( -""" + """ SELECT MIN(( SELECT MIN(5 + ( SELECT MAX(`o0`.`ProductID`) FROM `Order Details` AS `o0` WHERE `o`.`OrderID` = `o0`.`OrderID`)) FROM `Orders` AS `o` - WHERE `t`.`CustomerID` = `o`.`CustomerID`)) + WHERE `c0`.`CustomerID` = `o`.`CustomerID`)) FROM ( SELECT TOP 3 `c`.`CustomerID` FROM `Customers` AS `c` ORDER BY `c`.`CustomerID` -) AS `t` +) AS `c0` """); } @@ -1059,19 +1056,19 @@ public override async Task Max_over_nested_subquery_is_client_eval(bool isAsync) await base.Max_over_nested_subquery_is_client_eval(isAsync); AssertSql( -""" + """ SELECT MAX(( SELECT MAX(5 + ( SELECT MAX(`o0`.`ProductID`) FROM `Order Details` AS `o0` WHERE `o`.`OrderID` = `o0`.`OrderID`)) FROM `Orders` AS `o` - WHERE `t`.`CustomerID` = `o`.`CustomerID`)) + WHERE `c0`.`CustomerID` = `o`.`CustomerID`)) FROM ( SELECT TOP 3 `c`.`CustomerID` FROM `Customers` AS `c` ORDER BY `c`.`CustomerID` -) AS `t` +) AS `c0` """); } @@ -1080,19 +1077,19 @@ public override async Task Max_over_sum_subquery_is_client_eval(bool isAsync) await base.Max_over_sum_subquery_is_client_eval(isAsync); AssertSql( -""" + """ SELECT MAX(( SELECT MAX(5 + ( SELECT IIF(SUM(`o0`.`ProductID`) IS NULL, 0, SUM(`o0`.`ProductID`)) FROM `Order Details` AS `o0` WHERE `o`.`OrderID` = `o0`.`OrderID`)) FROM `Orders` AS `o` - WHERE `t`.`CustomerID` = `o`.`CustomerID`)) + WHERE `c0`.`CustomerID` = `o`.`CustomerID`)) FROM ( SELECT TOP 3 `c`.`CustomerID` FROM `Customers` AS `c` ORDER BY `c`.`CustomerID` -) AS `t` +) AS `c0` """); } @@ -1181,12 +1178,14 @@ public override async Task Distinct_OrderBy(bool isAsync) await base.Distinct_OrderBy(isAsync); AssertSql( - $@"SELECT `t`.`Country` + """ +SELECT `c0`.`Country` FROM ( SELECT DISTINCT `c`.`Country` FROM `Customers` AS `c` -) AS `t` -ORDER BY `t`.`Country`"); +) AS `c0` +ORDER BY `c0`.`Country` +"""); } public override async Task Distinct_OrderBy2(bool isAsync) @@ -1194,12 +1193,14 @@ public override async Task Distinct_OrderBy2(bool isAsync) await base.Distinct_OrderBy2(isAsync); AssertSql( - $@"SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region` + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` FROM ( SELECT DISTINCT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` -) AS `t` -ORDER BY `t`.`CustomerID`"); +) AS `c0` +ORDER BY `c0`.`CustomerID` +"""); } public override async Task Distinct_OrderBy3(bool isAsync) @@ -1207,12 +1208,14 @@ public override async Task Distinct_OrderBy3(bool isAsync) await base.Distinct_OrderBy3(isAsync); AssertSql( - $@"SELECT `t`.`CustomerID` + """ +SELECT `c0`.`CustomerID` FROM ( SELECT DISTINCT `c`.`CustomerID` FROM `Customers` AS `c` -) AS `t` -ORDER BY `t`.`CustomerID`"); +) AS `c0` +ORDER BY `c0`.`CustomerID` +"""); } public override async Task Distinct_Count(bool isAsync) @@ -1220,11 +1223,13 @@ public override async Task Distinct_Count(bool isAsync) await base.Distinct_Count(isAsync); AssertSql( - $@"SELECT COUNT(*) + """ +SELECT COUNT(*) FROM ( SELECT DISTINCT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` -) AS `t`"); +) AS `c0` +"""); } public override async Task Select_Select_Distinct_Count(bool isAsync) @@ -1232,11 +1237,13 @@ public override async Task Select_Select_Distinct_Count(bool isAsync) await base.Select_Select_Distinct_Count(isAsync); AssertSql( - $@"SELECT COUNT(*) + """ +SELECT COUNT(*) FROM ( SELECT DISTINCT `c`.`City` FROM `Customers` AS `c` -) AS `t`"); +) AS `c0` +"""); } public override async Task Single_Predicate(bool isAsync) @@ -1938,13 +1945,15 @@ public override async Task OrderBy_Take_Last_gives_correct_result(bool isAsync) await base.OrderBy_Take_Last_gives_correct_result(isAsync); AssertSql( - $@"SELECT TOP 1 `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region` + """ +SELECT TOP 1 `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` FROM ( SELECT TOP 20 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`CustomerID` -) AS `t` -ORDER BY `t`.`CustomerID` DESC"); +) AS `c0` +ORDER BY `c0`.`CustomerID` DESC +"""); } public override async Task OrderBy_Skip_Last_gives_correct_result(bool isAsync) @@ -2437,9 +2446,9 @@ public override async Task Count_after_client_projection(bool async) """ SELECT COUNT(*) FROM ( - SELECT TOP 1 `o`.`OrderID` + SELECT TOP 1 1 FROM `Orders` AS `o` -) AS `t` +) AS `o0` """); } @@ -2449,7 +2458,8 @@ public override async Task All_true(bool async) AssertSql( """ -SELECT CAST(1 AS bit) +SELECT TRUE +FROM (SELECT COUNT(*) FROM `#Dual`) """); } @@ -2459,8 +2469,8 @@ public override async Task Not_Any_false(bool async) AssertSql( """ -SELECT [c].[CustomerID] -FROM [Customers] AS [c] +SELECT `c`.`CustomerID` +FROM `Customers` AS `c` """); } @@ -2544,6 +2554,61 @@ SELECT MIN(IIF(`c`.`City` IN ('London', 'Berlin'), 1, 0)) """); } + public override async Task Return_type_of_singular_operator_is_preserved(bool async) + { + await base.Return_type_of_singular_operator_is_preserved(async); + + AssertSql( + """ +SELECT TOP 1 `c`.`CustomerID`, `c`.`City` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = 'ALFKI' +""", + // + """ +SELECT TOP 1 `c`.`CustomerID`, `c`.`City` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = 'ALFKI' +""", + // + """ +SELECT TOP 2 `c`.`CustomerID`, `c`.`City` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = 'ALFKI' +""", + // + """ +SELECT TOP 2 `c`.`CustomerID`, `c`.`City` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = 'ALFKI' +""", + // + """ +SELECT TOP 1 `c`.`CustomerID`, `c`.`City` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` LIKE 'A%' +ORDER BY `c`.`CustomerID` DESC +""", + // + """ +SELECT TOP 1 `c`.`CustomerID`, `c`.`City` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` LIKE 'A%' +ORDER BY `c`.`CustomerID` DESC +"""); + } + + public override async Task Type_casting_inside_sum(bool async) + { + await base.Type_casting_inside_sum(async); + + AssertSql( + """ +SELECT COALESCE(SUM(CAST([o].[Discount] AS decimal(18,2))), 0.0) +FROM [Order Details] AS [o] +"""); + } + private void AssertSql(params string[] expected) => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); diff --git a/test/EFCore.Jet.FunctionalTests/Query/NorthwindChangeTrackingQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/NorthwindChangeTrackingQueryJetTest.cs index cdab9309..ada0f08e 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/NorthwindChangeTrackingQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/NorthwindChangeTrackingQueryJetTest.cs @@ -75,27 +75,27 @@ public override void Can_disable_and_reenable_query_result_tracking() base.Can_disable_and_reenable_query_result_tracking(); AssertSql( -""" + """ SELECT TOP 1 `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` FROM `Employees` AS `e` ORDER BY `e`.`EmployeeID` """, // -""" -SELECT `t0`.`EmployeeID`, `t0`.`City`, `t0`.`Country`, `t0`.`FirstName`, `t0`.`ReportsTo`, `t0`.`Title` + """ +SELECT `e1`.`EmployeeID`, `e1`.`City`, `e1`.`Country`, `e1`.`FirstName`, `e1`.`ReportsTo`, `e1`.`Title` FROM ( - SELECT TOP 1 `t`.`EmployeeID`, `t`.`City`, `t`.`Country`, `t`.`FirstName`, `t`.`ReportsTo`, `t`.`Title` + SELECT TOP 1 `e0`.`EmployeeID`, `e0`.`City`, `e0`.`Country`, `e0`.`FirstName`, `e0`.`ReportsTo`, `e0`.`Title` FROM ( SELECT TOP 2 `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` FROM `Employees` AS `e` ORDER BY `e`.`EmployeeID` - ) AS `t` - ORDER BY `t`.`EmployeeID` DESC -) AS `t0` -ORDER BY `t0`.`EmployeeID` + ) AS `e0` + ORDER BY `e0`.`EmployeeID` DESC +) AS `e1` +ORDER BY `e1`.`EmployeeID` """, // -""" + """ SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` FROM `Employees` AS `e` ORDER BY `e`.`EmployeeID` @@ -107,35 +107,35 @@ public override void Entity_range_does_not_revert_when_attached_dbSet() base.Entity_range_does_not_revert_when_attached_dbSet(); AssertSql( -""" -SELECT TOP 1 `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region` + """ +SELECT TOP 1 `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` FROM ( SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`CustomerID` -) AS `t` -ORDER BY `t`.`CustomerID` +) AS `c0` +ORDER BY `c0`.`CustomerID` """, // -""" -SELECT `t1`.`CustomerID`, `t1`.`Address`, `t1`.`City`, `t1`.`CompanyName`, `t1`.`ContactName`, `t1`.`ContactTitle`, `t1`.`Country`, `t1`.`Fax`, `t1`.`Phone`, `t1`.`PostalCode`, `t1`.`Region` + """ +SELECT `c2`.`CustomerID`, `c2`.`Address`, `c2`.`City`, `c2`.`CompanyName`, `c2`.`ContactName`, `c2`.`ContactTitle`, `c2`.`Country`, `c2`.`Fax`, `c2`.`Phone`, `c2`.`PostalCode`, `c2`.`Region` FROM ( - SELECT TOP 1 `t0`.`CustomerID`, `t0`.`Address`, `t0`.`City`, `t0`.`CompanyName`, `t0`.`ContactName`, `t0`.`ContactTitle`, `t0`.`Country`, `t0`.`Fax`, `t0`.`Phone`, `t0`.`PostalCode`, `t0`.`Region` + SELECT TOP 1 `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region` FROM ( - SELECT TOP 2 `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region` + SELECT TOP 2 `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` FROM ( SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`CustomerID` - ) AS `t` - ORDER BY `t`.`CustomerID` - ) AS `t0` - ORDER BY `t0`.`CustomerID` DESC -) AS `t1` -ORDER BY `t1`.`CustomerID` + ) AS `c0` + ORDER BY `c0`.`CustomerID` + ) AS `c1` + ORDER BY `c1`.`CustomerID` DESC +) AS `c2` +ORDER BY `c2`.`CustomerID` """, // -""" + """ SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`CustomerID` @@ -187,35 +187,35 @@ public override void Entity_range_does_not_revert_when_attached_dbContext() base.Entity_range_does_not_revert_when_attached_dbContext(); AssertSql( -""" -SELECT TOP 1 `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region` + """ +SELECT TOP 1 `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` FROM ( SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`CustomerID` -) AS `t` -ORDER BY `t`.`CustomerID` +) AS `c0` +ORDER BY `c0`.`CustomerID` """, // -""" -SELECT `t1`.`CustomerID`, `t1`.`Address`, `t1`.`City`, `t1`.`CompanyName`, `t1`.`ContactName`, `t1`.`ContactTitle`, `t1`.`Country`, `t1`.`Fax`, `t1`.`Phone`, `t1`.`PostalCode`, `t1`.`Region` + """ +SELECT `c2`.`CustomerID`, `c2`.`Address`, `c2`.`City`, `c2`.`CompanyName`, `c2`.`ContactName`, `c2`.`ContactTitle`, `c2`.`Country`, `c2`.`Fax`, `c2`.`Phone`, `c2`.`PostalCode`, `c2`.`Region` FROM ( - SELECT TOP 1 `t0`.`CustomerID`, `t0`.`Address`, `t0`.`City`, `t0`.`CompanyName`, `t0`.`ContactName`, `t0`.`ContactTitle`, `t0`.`Country`, `t0`.`Fax`, `t0`.`Phone`, `t0`.`PostalCode`, `t0`.`Region` + SELECT TOP 1 `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region` FROM ( - SELECT TOP 2 `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region` + SELECT TOP 2 `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` FROM ( SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`CustomerID` - ) AS `t` - ORDER BY `t`.`CustomerID` - ) AS `t0` - ORDER BY `t0`.`CustomerID` DESC -) AS `t1` -ORDER BY `t1`.`CustomerID` + ) AS `c0` + ORDER BY `c0`.`CustomerID` + ) AS `c1` + ORDER BY `c1`.`CustomerID` DESC +) AS `c2` +ORDER BY `c2`.`CustomerID` """, // -""" + """ SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`CustomerID` @@ -251,24 +251,24 @@ public override void Can_disable_and_reenable_query_result_tracking_starting_wit base.Can_disable_and_reenable_query_result_tracking_starting_with_NoTracking(); AssertSql( -""" + """ SELECT TOP 1 `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` FROM `Employees` AS `e` ORDER BY `e`.`EmployeeID` """, // -""" -SELECT `t0`.`EmployeeID`, `t0`.`City`, `t0`.`Country`, `t0`.`FirstName`, `t0`.`ReportsTo`, `t0`.`Title` + """ +SELECT `e1`.`EmployeeID`, `e1`.`City`, `e1`.`Country`, `e1`.`FirstName`, `e1`.`ReportsTo`, `e1`.`Title` FROM ( - SELECT TOP 1 `t`.`EmployeeID`, `t`.`City`, `t`.`Country`, `t`.`FirstName`, `t`.`ReportsTo`, `t`.`Title` + SELECT TOP 1 `e0`.`EmployeeID`, `e0`.`City`, `e0`.`Country`, `e0`.`FirstName`, `e0`.`ReportsTo`, `e0`.`Title` FROM ( SELECT TOP 2 `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` FROM `Employees` AS `e` ORDER BY `e`.`EmployeeID` - ) AS `t` - ORDER BY `t`.`EmployeeID` DESC -) AS `t0` -ORDER BY `t0`.`EmployeeID` + ) AS `e0` + ORDER BY `e0`.`EmployeeID` DESC +) AS `e1` +ORDER BY `e1`.`EmployeeID` """); } diff --git a/test/EFCore.Jet.FunctionalTests/Query/NorthwindEFPropertyIncludeQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/NorthwindEFPropertyIncludeQueryJetTest.cs index 84a48196..40a30bcc 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/NorthwindEFPropertyIncludeQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/NorthwindEFPropertyIncludeQueryJetTest.cs @@ -54,15 +54,15 @@ public override async Task Include_collection_order_by_non_key_with_first_or_def await base.Include_collection_order_by_non_key_with_first_or_default(async); AssertSql( -""" -SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM ( SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`CompanyName` DESC -) AS `t` -LEFT JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CompanyName` DESC, `t`.`CustomerID` +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CompanyName` DESC, `c0`.`CustomerID` """); } @@ -114,10 +114,10 @@ public override async Task Include_collection_order_by_collection_column(bool as await base.Include_collection_order_by_collection_column(async); AssertSql( -""" -SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` FROM ( - SELECT TOP 1 `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `t`.`c` + SELECT TOP 1 `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region`, `c1`.`c` FROM ( SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, ( SELECT TOP 1 `o`.`OrderDate` @@ -126,11 +126,11 @@ SELECT TOP 1 `o`.`OrderDate` ORDER BY `o`.`OrderDate` DESC) AS `c` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'W%' - ) AS `t` - ORDER BY `t`.`c` DESC -) AS `t` -LEFT JOIN `Orders` AS `o0` ON `t`.`CustomerID` = `o0`.`CustomerID` -ORDER BY `t`.`c` DESC, `t`.`CustomerID` + ) AS `c1` + ORDER BY `c1`.`c` DESC +) AS `c0` +LEFT JOIN `Orders` AS `o0` ON `c0`.`CustomerID` = `o0`.`CustomerID` +ORDER BY `c0`.`c` DESC, `c0`.`CustomerID` """); } @@ -219,16 +219,16 @@ public override async Task Include_multi_level_reference_and_collection_predicat await base.Include_multi_level_reference_and_collection_predicate(async); AssertSql( -""" -SELECT `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate`, `t`.`CustomerID0`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` + """ +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`CustomerID0`, `s`.`Address`, `s`.`City`, `s`.`CompanyName`, `s`.`ContactName`, `s`.`ContactTitle`, `s`.`Country`, `s`.`Fax`, `s`.`Phone`, `s`.`PostalCode`, `s`.`Region`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` FROM ( SELECT TOP 2 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID` AS `CustomerID0`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Orders` AS `o` LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` WHERE `o`.`OrderID` = 10248 -) AS `t` -LEFT JOIN `Orders` AS `o0` ON `t`.`CustomerID0` = `o0`.`CustomerID` -ORDER BY `t`.`OrderID`, `t`.`CustomerID0` +) AS `s` +LEFT JOIN `Orders` AS `o0` ON `s`.`CustomerID0` = `o0`.`CustomerID` +ORDER BY `s`.`OrderID`, `s`.`CustomerID0` """); } @@ -270,31 +270,31 @@ public override async Task Include_duplicate_reference3(bool async) await base.Include_duplicate_reference3(async); AssertSql( -""" -SELECT `t1`.`OrderID`, `t1`.`CustomerID`, `t1`.`EmployeeID`, `t1`.`OrderDate`, `t1`.`OrderID0`, `t1`.`CustomerID0`, `t1`.`EmployeeID0`, `t1`.`OrderDate0`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + """ +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`CustomerID0`, `s`.`EmployeeID0`, `s`.`OrderDate0`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM ( - SELECT `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate`, `t0`.`OrderID` AS `OrderID0`, `t0`.`CustomerID` AS `CustomerID0`, `t0`.`EmployeeID` AS `EmployeeID0`, `t0`.`OrderDate` AS `OrderDate0` + SELECT `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `o2`.`OrderID` AS `OrderID0`, `o2`.`CustomerID` AS `CustomerID0`, `o2`.`EmployeeID` AS `EmployeeID0`, `o2`.`OrderDate` AS `OrderDate0` FROM ( SELECT TOP 2 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` ORDER BY `o`.`OrderID` - ) AS `t`, + ) AS `o1`, ( - SELECT `t1`.`OrderID`, `t1`.`CustomerID`, `t1`.`EmployeeID`, `t1`.`OrderDate` + SELECT `o4`.`OrderID`, `o4`.`CustomerID`, `o4`.`EmployeeID`, `o4`.`OrderDate` FROM ( - SELECT TOP 2 `t0`.`OrderID`, `t0`.`CustomerID`, `t0`.`EmployeeID`, `t0`.`OrderDate` + SELECT TOP 2 `o3`.`OrderID`, `o3`.`CustomerID`, `o3`.`EmployeeID`, `o3`.`OrderDate` FROM ( SELECT TOP 4 `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` FROM `Orders` AS `o0` ORDER BY `o0`.`OrderID` - ) AS `t0` - ORDER BY `t0`.`OrderID` DESC - ) AS `t1` - ORDER BY `t1`.`OrderID` - ) AS `t0` -) AS `t1` -LEFT JOIN `Customers` AS `c` ON `t1`.`CustomerID0` = `c`.`CustomerID` -ORDER BY `t1`.`OrderID` + ) AS `o3` + ORDER BY `o3`.`OrderID` DESC + ) AS `o4` + ORDER BY `o4`.`OrderID` + ) AS `o2` +) AS `s` +LEFT JOIN `Customers` AS `c` ON `s`.`CustomerID0` = `c`.`CustomerID` +ORDER BY `s`.`OrderID` """); } @@ -303,15 +303,15 @@ public override async Task Include_collection_order_by_non_key_with_take(bool as await base.Include_collection_order_by_non_key_with_take(async); AssertSql( -""" -SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM ( SELECT TOP 10 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`ContactTitle` -) AS `t` -LEFT JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`ContactTitle`, `t`.`CustomerID` +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`ContactTitle`, `c0`.`CustomerID` """); } @@ -320,19 +320,19 @@ public override async Task Include_collection_then_include_collection_predicate( await base.Include_collection_then_include_collection_predicate(async); AssertSql( -""" -SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `t0`.`OrderID`, `t0`.`CustomerID`, `t0`.`EmployeeID`, `t0`.`OrderDate`, `t0`.`OrderID0`, `t0`.`ProductID`, `t0`.`Discount`, `t0`.`Quantity`, `t0`.`UnitPrice` + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice` FROM ( SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` WHERE `c`.`CustomerID` = 'ALFKI' -) AS `t` +) AS `c0` LEFT JOIN ( SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID` AS `OrderID0`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` FROM `Orders` AS `o` LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` -) AS `t0` ON `t`.`CustomerID` = `t0`.`CustomerID` -ORDER BY `t`.`CustomerID`, `t0`.`OrderID`, `t0`.`OrderID0` +) AS `s` ON `c0`.`CustomerID` = `s`.`CustomerID` +ORDER BY `c0`.`CustomerID`, `s`.`OrderID`, `s`.`OrderID0` """); } @@ -341,14 +341,14 @@ public override async Task Include_collection_take_no_order_by(bool async) await base.Include_collection_take_no_order_by(async); AssertSql( -""" -SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM ( SELECT TOP 10 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` -) AS `t` -LEFT JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CustomerID` +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` """); } @@ -357,21 +357,21 @@ public override async Task Include_collection_principal_already_tracked(bool asy await base.Include_collection_principal_already_tracked(async); AssertSql( -""" + """ SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` WHERE `c`.`CustomerID` = 'ALFKI' """, // -""" -SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM ( SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` WHERE `c`.`CustomerID` = 'ALFKI' -) AS `t` -LEFT JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CustomerID` +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` """); } @@ -456,15 +456,15 @@ public override async Task Include_collection_single_or_default_no_result(bool a await base.Include_collection_single_or_default_no_result(async); AssertSql( -""" -SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM ( SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` WHERE `c`.`CustomerID` = 'ALFKI ?' -) AS `t` -LEFT JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CustomerID` +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` """); } @@ -548,20 +548,20 @@ public override async Task Include_collection_then_include_collection_then_inclu await base.Include_collection_then_include_collection_then_include_reference(async); AssertSql( -""" -SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `t0`.`OrderID`, `t0`.`CustomerID`, `t0`.`EmployeeID`, `t0`.`OrderDate`, `t0`.`OrderID0`, `t0`.`ProductID`, `t0`.`Discount`, `t0`.`Quantity`, `t0`.`UnitPrice`, `t0`.`ProductID0`, `t0`.`Discontinued`, `t0`.`ProductName`, `t0`.`SupplierID`, `t0`.`UnitPrice0`, `t0`.`UnitsInStock` + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `s0`.`OrderID`, `s0`.`CustomerID`, `s0`.`EmployeeID`, `s0`.`OrderDate`, `s0`.`OrderID0`, `s0`.`ProductID`, `s0`.`Discount`, `s0`.`Quantity`, `s0`.`UnitPrice`, `s0`.`ProductID0`, `s0`.`Discontinued`, `s0`.`ProductName`, `s0`.`SupplierID`, `s0`.`UnitPrice0`, `s0`.`UnitsInStock` FROM `Customers` AS `c` LEFT JOIN ( - SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `t`.`OrderID` AS `OrderID0`, `t`.`ProductID`, `t`.`Discount`, `t`.`Quantity`, `t`.`UnitPrice`, `t`.`ProductID0`, `t`.`Discontinued`, `t`.`ProductName`, `t`.`SupplierID`, `t`.`UnitPrice0`, `t`.`UnitsInStock` + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `s`.`OrderID` AS `OrderID0`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice`, `s`.`ProductID0`, `s`.`Discontinued`, `s`.`ProductName`, `s`.`SupplierID`, `s`.`UnitPrice0`, `s`.`UnitsInStock` FROM `Orders` AS `o` LEFT JOIN ( SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `p`.`ProductID` AS `ProductID0`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice` AS `UnitPrice0`, `p`.`UnitsInStock` FROM `Order Details` AS `o0` INNER JOIN `Products` AS `p` ON `o0`.`ProductID` = `p`.`ProductID` - ) AS `t` ON `o`.`OrderID` = `t`.`OrderID` -) AS `t0` ON `c`.`CustomerID` = `t0`.`CustomerID` + ) AS `s` ON `o`.`OrderID` = `s`.`OrderID` +) AS `s0` ON `c`.`CustomerID` = `s0`.`CustomerID` WHERE `c`.`CustomerID` LIKE 'F%' -ORDER BY `c`.`CustomerID`, `t0`.`OrderID`, `t0`.`OrderID0`, `t0`.`ProductID` +ORDER BY `c`.`CustomerID`, `s0`.`OrderID`, `s0`.`OrderID0`, `s0`.`ProductID` """); } @@ -692,32 +692,32 @@ public override async Task Include_duplicate_reference(bool async) await base.Include_duplicate_reference(async); AssertSql( -""" -SELECT `t1`.`OrderID`, `t1`.`CustomerID`, `t1`.`EmployeeID`, `t1`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `t1`.`OrderID0`, `t1`.`CustomerID0`, `t1`.`EmployeeID0`, `t1`.`OrderDate0`, `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + """ +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `s`.`OrderID0`, `s`.`CustomerID0`, `s`.`EmployeeID0`, `s`.`OrderDate0`, `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` FROM (( - SELECT `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate`, `t0`.`OrderID` AS `OrderID0`, `t0`.`CustomerID` AS `CustomerID0`, `t0`.`EmployeeID` AS `EmployeeID0`, `t0`.`OrderDate` AS `OrderDate0` + SELECT `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `o2`.`OrderID` AS `OrderID0`, `o2`.`CustomerID` AS `CustomerID0`, `o2`.`EmployeeID` AS `EmployeeID0`, `o2`.`OrderDate` AS `OrderDate0` FROM ( SELECT TOP 2 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` ORDER BY `o`.`CustomerID`, `o`.`OrderID` - ) AS `t`, + ) AS `o1`, ( - SELECT `t1`.`OrderID`, `t1`.`CustomerID`, `t1`.`EmployeeID`, `t1`.`OrderDate` + SELECT `o4`.`OrderID`, `o4`.`CustomerID`, `o4`.`EmployeeID`, `o4`.`OrderDate` FROM ( - SELECT TOP 2 `t0`.`OrderID`, `t0`.`CustomerID`, `t0`.`EmployeeID`, `t0`.`OrderDate` + SELECT TOP 2 `o3`.`OrderID`, `o3`.`CustomerID`, `o3`.`EmployeeID`, `o3`.`OrderDate` FROM ( SELECT TOP 4 `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` FROM `Orders` AS `o0` ORDER BY `o0`.`CustomerID`, `o0`.`OrderID` - ) AS `t0` - ORDER BY `t0`.`CustomerID` DESC, `t0`.`OrderID` DESC - ) AS `t1` - ORDER BY `t1`.`CustomerID`, `t1`.`OrderID` - ) AS `t0` -) AS `t1` -LEFT JOIN `Customers` AS `c` ON `t1`.`CustomerID` = `c`.`CustomerID`) -LEFT JOIN `Customers` AS `c0` ON `t1`.`CustomerID0` = `c0`.`CustomerID` -ORDER BY `t1`.`CustomerID`, `t1`.`OrderID` + ) AS `o3` + ORDER BY `o3`.`CustomerID` DESC, `o3`.`OrderID` DESC + ) AS `o4` + ORDER BY `o4`.`CustomerID`, `o4`.`OrderID` + ) AS `o2` +) AS `s` +LEFT JOIN `Customers` AS `c` ON `s`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Customers` AS `c0` ON `s`.`CustomerID0` = `c0`.`CustomerID` +ORDER BY `s`.`CustomerID`, `s`.`OrderID` """); } @@ -774,24 +774,24 @@ public override async Task Multi_level_includes_are_applied_with_take(bool async await base.Multi_level_includes_are_applied_with_take(async); AssertSql( -""" -SELECT `t0`.`CustomerID`, `t1`.`OrderID`, `t1`.`CustomerID`, `t1`.`EmployeeID`, `t1`.`OrderDate`, `t1`.`OrderID0`, `t1`.`ProductID`, `t1`.`Discount`, `t1`.`Quantity`, `t1`.`UnitPrice` + """ +SELECT `c1`.`CustomerID`, `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice` FROM ( - SELECT TOP 1 `t`.`CustomerID` + SELECT TOP 1 `c0`.`CustomerID` FROM ( SELECT TOP 1 `c`.`CustomerID` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'A%' ORDER BY `c`.`CustomerID` - ) AS `t` - ORDER BY `t`.`CustomerID` -) AS `t0` + ) AS `c0` + ORDER BY `c0`.`CustomerID` +) AS `c1` LEFT JOIN ( SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID` AS `OrderID0`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` FROM `Orders` AS `o` LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` -) AS `t1` ON `t0`.`CustomerID` = `t1`.`CustomerID` -ORDER BY `t0`.`CustomerID`, `t1`.`OrderID`, `t1`.`OrderID0` +) AS `s` ON `c1`.`CustomerID` = `s`.`CustomerID` +ORDER BY `c1`.`CustomerID`, `s`.`OrderID`, `s`.`OrderID0` """); } @@ -817,16 +817,16 @@ public override async Task Include_collection_then_reference(bool async) await base.Include_collection_then_reference(async); AssertSql( -""" -SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock`, `t`.`OrderID`, `t`.`ProductID`, `t`.`Discount`, `t`.`Quantity`, `t`.`UnitPrice`, `t`.`OrderID0`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate` + """ +SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock`, `s`.`OrderID`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice`, `s`.`OrderID0`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate` FROM `Products` AS `p` LEFT JOIN ( SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID` AS `OrderID0`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` FROM `Order Details` AS `o` INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` -) AS `t` ON `p`.`ProductID` = `t`.`ProductID` +) AS `s` ON `p`.`ProductID` = `s`.`ProductID` WHERE (`p`.`ProductID` MOD 17) = 5 -ORDER BY `p`.`ProductID`, `t`.`OrderID`, `t`.`ProductID` +ORDER BY `p`.`ProductID`, `s`.`OrderID`, `s`.`ProductID` """); } @@ -869,15 +869,15 @@ public override async Task Include_collection_on_additional_from_clause2(bool as await base.Include_collection_on_additional_from_clause2(async); AssertSql( -""" -SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region` + """ +SELECT `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region` FROM ( SELECT TOP 5 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`CustomerID` -) AS `t`, +) AS `c1`, `Customers` AS `c0` -ORDER BY `t`.`CustomerID` +ORDER BY `c1`.`CustomerID` """); } @@ -886,21 +886,21 @@ public override async Task Include_collection_dependent_already_tracked(bool asy await base.Include_collection_dependent_already_tracked(async); AssertSql( -""" + """ SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` WHERE `o`.`CustomerID` = 'ALFKI' """, // -""" -SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM ( SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` WHERE `c`.`CustomerID` = 'ALFKI' -) AS `t` -LEFT JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CustomerID` +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` """); } @@ -928,19 +928,19 @@ public override async Task Include_multi_level_collection_and_then_include_refer await base.Include_multi_level_collection_and_then_include_reference_predicate(async); AssertSql( -""" -SELECT `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate`, `t0`.`OrderID`, `t0`.`ProductID`, `t0`.`Discount`, `t0`.`Quantity`, `t0`.`UnitPrice`, `t0`.`ProductID0`, `t0`.`Discontinued`, `t0`.`ProductName`, `t0`.`SupplierID`, `t0`.`UnitPrice0`, `t0`.`UnitsInStock` + """ +SELECT `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `s`.`OrderID`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice`, `s`.`ProductID0`, `s`.`Discontinued`, `s`.`ProductName`, `s`.`SupplierID`, `s`.`UnitPrice0`, `s`.`UnitsInStock` FROM ( SELECT TOP 2 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` WHERE `o`.`OrderID` = 10248 -) AS `t` +) AS `o1` LEFT JOIN ( SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `p`.`ProductID` AS `ProductID0`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice` AS `UnitPrice0`, `p`.`UnitsInStock` FROM `Order Details` AS `o0` INNER JOIN `Products` AS `p` ON `o0`.`ProductID` = `p`.`ProductID` -) AS `t0` ON `t`.`OrderID` = `t0`.`OrderID` -ORDER BY `t`.`OrderID`, `t0`.`OrderID`, `t0`.`ProductID` +) AS `s` ON `o1`.`OrderID` = `s`.`OrderID` +ORDER BY `o1`.`OrderID`, `s`.`OrderID`, `s`.`ProductID` """); } @@ -949,28 +949,28 @@ public override async Task Multi_level_includes_are_applied_with_skip_take(bool await base.Multi_level_includes_are_applied_with_skip_take(async); AssertSql( -""" -SELECT `t1`.`CustomerID`, `t2`.`OrderID`, `t2`.`CustomerID`, `t2`.`EmployeeID`, `t2`.`OrderDate`, `t2`.`OrderID0`, `t2`.`ProductID`, `t2`.`Discount`, `t2`.`Quantity`, `t2`.`UnitPrice` + """ +SELECT `c2`.`CustomerID`, `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice` FROM ( - SELECT TOP 1 `t`.`CustomerID` + SELECT TOP 1 `c0`.`CustomerID` FROM ( - SELECT TOP 1 `t0`.`CustomerID` + SELECT TOP 1 `c1`.`CustomerID` FROM ( SELECT TOP 2 `c`.`CustomerID` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'A%' ORDER BY `c`.`CustomerID` - ) AS `t0` - ORDER BY `t0`.`CustomerID` DESC - ) AS `t` - ORDER BY `t`.`CustomerID` -) AS `t1` + ) AS `c1` + ORDER BY `c1`.`CustomerID` DESC + ) AS `c0` + ORDER BY `c0`.`CustomerID` +) AS `c2` LEFT JOIN ( SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID` AS `OrderID0`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` FROM `Orders` AS `o` LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` -) AS `t2` ON `t1`.`CustomerID` = `t2`.`CustomerID` -ORDER BY `t1`.`CustomerID`, `t2`.`OrderID`, `t2`.`OrderID0` +) AS `s` ON `c2`.`CustomerID` = `s`.`CustomerID` +ORDER BY `c2`.`CustomerID`, `s`.`OrderID`, `s`.`OrderID0` """); } @@ -1099,16 +1099,16 @@ public override async Task Include_collection_then_include_collection(bool async await base.Include_collection_then_include_collection(async); AssertSql( -""" -SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate`, `t`.`OrderID0`, `t`.`ProductID`, `t`.`Discount`, `t`.`Quantity`, `t`.`UnitPrice` + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice` FROM `Customers` AS `c` LEFT JOIN ( SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID` AS `OrderID0`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` FROM `Orders` AS `o` LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` -) AS `t` ON `c`.`CustomerID` = `t`.`CustomerID` +) AS `s` ON `c`.`CustomerID` = `s`.`CustomerID` WHERE `c`.`CustomerID` LIKE 'F%' -ORDER BY `c`.`CustomerID`, `t`.`OrderID`, `t`.`OrderID0` +ORDER BY `c`.`CustomerID`, `s`.`OrderID`, `s`.`OrderID0` """); } @@ -1409,24 +1409,24 @@ public override async Task Multi_level_includes_are_applied_with_skip(bool async await base.Multi_level_includes_are_applied_with_skip(async); AssertSql( -""" -SELECT `t0`.`CustomerID`, `t1`.`OrderID`, `t1`.`CustomerID`, `t1`.`EmployeeID`, `t1`.`OrderDate`, `t1`.`OrderID0`, `t1`.`ProductID`, `t1`.`Discount`, `t1`.`Quantity`, `t1`.`UnitPrice` + """ +SELECT `c1`.`CustomerID`, `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice` FROM ( - SELECT TOP 1 `t`.`CustomerID` + SELECT TOP 1 `c0`.`CustomerID` FROM ( SELECT TOP 2 `c`.`CustomerID` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'A%' ORDER BY `c`.`CustomerID` - ) AS `t` - ORDER BY `t`.`CustomerID` DESC -) AS `t0` + ) AS `c0` + ORDER BY `c0`.`CustomerID` DESC +) AS `c1` LEFT JOIN ( SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID` AS `OrderID0`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` FROM `Orders` AS `o` LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` -) AS `t1` ON `t0`.`CustomerID` = `t1`.`CustomerID` -ORDER BY `t0`.`CustomerID`, `t1`.`OrderID`, `t1`.`OrderID0` +) AS `s` ON `c1`.`CustomerID` = `s`.`CustomerID` +ORDER BY `c1`.`CustomerID`, `s`.`OrderID`, `s`.`OrderID0` """); } @@ -1459,14 +1459,14 @@ public override async Task Include_reference_distinct_is_server_evaluated(bool a await base.Include_reference_distinct_is_server_evaluated(async); AssertSql( -""" -SELECT `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + """ +SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM ( SELECT DISTINCT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` WHERE `o`.`OrderID` < 10250 -) AS `t` -LEFT JOIN `Customers` AS `c` ON `t`.`CustomerID` = `c`.`CustomerID` +) AS `o0` +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` """); } @@ -1475,15 +1475,15 @@ public override async Task Include_collection_distinct_is_server_evaluated(bool await base.Include_collection_distinct_is_server_evaluated(async); AssertSql( -""" -SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM ( SELECT DISTINCT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'A%' -) AS `t` -LEFT JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CustomerID` +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` """); } @@ -1564,17 +1564,17 @@ public override async Task Include_closes_reader(bool async) await base.Include_closes_reader(async); AssertSql( -""" -SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM ( SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` -) AS `t` -LEFT JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CustomerID` +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` """, // -""" + """ SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` FROM `Products` AS `p` """); @@ -1661,15 +1661,15 @@ public override async Task Include_collection_orderby_take(bool async) await base.Include_collection_orderby_take(async); AssertSql( -""" -SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM ( SELECT TOP 5 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`CustomerID` -) AS `t` -LEFT JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CustomerID` +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` """); } @@ -1734,31 +1734,31 @@ public override async Task Include_duplicate_reference2(bool async) await base.Include_duplicate_reference2(async); AssertSql( -""" -SELECT `t1`.`OrderID`, `t1`.`CustomerID`, `t1`.`EmployeeID`, `t1`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `t1`.`OrderID0`, `t1`.`CustomerID0`, `t1`.`EmployeeID0`, `t1`.`OrderDate0` + """ +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `s`.`OrderID0`, `s`.`CustomerID0`, `s`.`EmployeeID0`, `s`.`OrderDate0` FROM ( - SELECT `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate`, `t0`.`OrderID` AS `OrderID0`, `t0`.`CustomerID` AS `CustomerID0`, `t0`.`EmployeeID` AS `EmployeeID0`, `t0`.`OrderDate` AS `OrderDate0` + SELECT `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `o2`.`OrderID` AS `OrderID0`, `o2`.`CustomerID` AS `CustomerID0`, `o2`.`EmployeeID` AS `EmployeeID0`, `o2`.`OrderDate` AS `OrderDate0` FROM ( SELECT TOP 2 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` ORDER BY `o`.`OrderID` - ) AS `t`, + ) AS `o1`, ( - SELECT `t1`.`OrderID`, `t1`.`CustomerID`, `t1`.`EmployeeID`, `t1`.`OrderDate` + SELECT `o4`.`OrderID`, `o4`.`CustomerID`, `o4`.`EmployeeID`, `o4`.`OrderDate` FROM ( - SELECT TOP 2 `t0`.`OrderID`, `t0`.`CustomerID`, `t0`.`EmployeeID`, `t0`.`OrderDate` + SELECT TOP 2 `o3`.`OrderID`, `o3`.`CustomerID`, `o3`.`EmployeeID`, `o3`.`OrderDate` FROM ( SELECT TOP 4 `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` FROM `Orders` AS `o0` ORDER BY `o0`.`OrderID` - ) AS `t0` - ORDER BY `t0`.`OrderID` DESC - ) AS `t1` - ORDER BY `t1`.`OrderID` - ) AS `t0` -) AS `t1` -LEFT JOIN `Customers` AS `c` ON `t1`.`CustomerID` = `c`.`CustomerID` -ORDER BY `t1`.`OrderID` + ) AS `o3` + ORDER BY `o3`.`OrderID` DESC + ) AS `o4` + ORDER BY `o4`.`OrderID` + ) AS `o2` +) AS `s` +LEFT JOIN `Customers` AS `c` ON `s`.`CustomerID` = `c`.`CustomerID` +ORDER BY `s`.`OrderID` """); } @@ -1842,15 +1842,15 @@ public override async Task Include_collection_with_last(bool async) await base.Include_collection_with_last(async); AssertSql( -""" -SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM ( SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`CompanyName` DESC -) AS `t` -LEFT JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CompanyName` DESC, `t`.`CustomerID` +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CompanyName` DESC, `c0`.`CustomerID` """); } @@ -1991,10 +1991,10 @@ public override async Task Then_include_collection_order_by_collection_column(bo await base.Then_include_collection_order_by_collection_column(async); AssertSql( -""" -SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `t0`.`OrderID`, `t0`.`CustomerID`, `t0`.`EmployeeID`, `t0`.`OrderDate`, `t0`.`OrderID0`, `t0`.`ProductID`, `t0`.`Discount`, `t0`.`Quantity`, `t0`.`UnitPrice` + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice` FROM ( - SELECT TOP 1 `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `t`.`c` + SELECT TOP 1 `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region`, `c1`.`c` FROM ( SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, ( SELECT TOP 1 `o`.`OrderDate` @@ -2003,15 +2003,15 @@ SELECT TOP 1 `o`.`OrderDate` ORDER BY `o`.`OrderDate` DESC) AS `c` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'W%' - ) AS `t` - ORDER BY `t`.`c` DESC -) AS `t` + ) AS `c1` + ORDER BY `c1`.`c` DESC +) AS `c0` LEFT JOIN ( SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `o1`.`OrderID` AS `OrderID0`, `o1`.`ProductID`, `o1`.`Discount`, `o1`.`Quantity`, `o1`.`UnitPrice` FROM `Orders` AS `o0` LEFT JOIN `Order Details` AS `o1` ON `o0`.`OrderID` = `o1`.`OrderID` -) AS `t0` ON `t`.`CustomerID` = `t0`.`CustomerID` -ORDER BY `t`.`c` DESC, `t`.`CustomerID`, `t0`.`OrderID`, `t0`.`OrderID0` +) AS `s` ON `c0`.`CustomerID` = `s`.`CustomerID` +ORDER BY `c0`.`c` DESC, `c0`.`CustomerID`, `s`.`OrderID`, `s`.`OrderID0` """); } @@ -2055,16 +2055,16 @@ public override async Task Include_multi_level_reference_then_include_collection await base.Include_multi_level_reference_then_include_collection_predicate(async); AssertSql( -""" -SELECT `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate`, `t`.`CustomerID0`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` + """ +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`CustomerID0`, `s`.`Address`, `s`.`City`, `s`.`CompanyName`, `s`.`ContactName`, `s`.`ContactTitle`, `s`.`Country`, `s`.`Fax`, `s`.`Phone`, `s`.`PostalCode`, `s`.`Region`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` FROM ( SELECT TOP 2 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID` AS `CustomerID0`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Orders` AS `o` LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` WHERE `o`.`OrderID` = 10248 -) AS `t` -LEFT JOIN `Orders` AS `o0` ON `t`.`CustomerID0` = `o0`.`CustomerID` -ORDER BY `t`.`OrderID`, `t`.`CustomerID0` +) AS `s` +LEFT JOIN `Orders` AS `o0` ON `s`.`CustomerID0` = `o0`.`CustomerID` +ORDER BY `s`.`OrderID`, `s`.`CustomerID0` """); } @@ -2090,20 +2090,20 @@ public override async Task Include_where_skip_take_projection(bool async) await base.Include_where_skip_take_projection(async); AssertSql( -""" + """ SELECT `o0`.`CustomerID` FROM ( - SELECT TOP 2 `t0`.`OrderID`, `t0`.`ProductID` + SELECT TOP 2 `o2`.`OrderID`, `o2`.`ProductID` FROM ( SELECT TOP 3 `o`.`OrderID`, `o`.`ProductID` FROM `Order Details` AS `o` WHERE `o`.`Quantity` = 10 ORDER BY `o`.`OrderID`, `o`.`ProductID` - ) AS `t0` - ORDER BY `t0`.`OrderID` DESC, `t0`.`ProductID` DESC -) AS `t` -INNER JOIN `Orders` AS `o0` ON `t`.`OrderID` = `o0`.`OrderID` -ORDER BY `t`.`OrderID`, `t`.`ProductID` + ) AS `o2` + ORDER BY `o2`.`OrderID` DESC, `o2`.`ProductID` DESC +) AS `o1` +INNER JOIN `Orders` AS `o0` ON `o1`.`OrderID` = `o0`.`OrderID` +ORDER BY `o1`.`OrderID`, `o1`.`ProductID` """); } @@ -2112,15 +2112,15 @@ public override async Task Include_with_take(bool async) await base.Include_with_take(async); AssertSql( -""" -SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM ( SELECT TOP 10 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`ContactName` DESC -) AS `t` -LEFT JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`ContactName` DESC, `t`.`CustomerID` +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`ContactName` DESC, `c0`.`CustomerID` """); } @@ -2143,16 +2143,16 @@ public override async Task Include_list(bool async) await base.Include_list(async); AssertSql( -""" -SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock`, `t`.`OrderID`, `t`.`ProductID`, `t`.`Discount`, `t`.`Quantity`, `t`.`UnitPrice`, `t`.`OrderID0`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate` + """ +SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock`, `s`.`OrderID`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice`, `s`.`OrderID0`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate` FROM `Products` AS `p` LEFT JOIN ( SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID` AS `OrderID0`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` FROM `Order Details` AS `o` INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` -) AS `t` ON `p`.`ProductID` = `t`.`ProductID` +) AS `s` ON `p`.`ProductID` = `s`.`ProductID` WHERE (`p`.`ProductID` MOD 17) = 5 AND `p`.`UnitPrice` < 20.0 -ORDER BY `p`.`ProductID`, `t`.`OrderID`, `t`.`ProductID` +ORDER BY `p`.`ProductID`, `s`.`OrderID`, `s`.`ProductID` """); } diff --git a/test/EFCore.Jet.FunctionalTests/Query/NorthwindFunctionsQueryJetTest.Functions.cs b/test/EFCore.Jet.FunctionalTests/Query/NorthwindFunctionsQueryJetTest.Functions.cs index 60d5711f..8ed9aa20 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/NorthwindFunctionsQueryJetTest.Functions.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/NorthwindFunctionsQueryJetTest.Functions.cs @@ -12,7 +12,7 @@ using Microsoft.EntityFrameworkCore.TestUtilities; using Xunit; using Xunit.Abstractions; - +#nullable disable namespace EntityFrameworkCore.Jet.FunctionalTests.Query { public class NorthwindFunctionsQueryJetTest : NorthwindFunctionsQueryRelationalTestBase> @@ -148,6 +148,27 @@ public override async Task String_StartsWith_MethodCall(bool isAsync) """); } + public override async Task String_StartsWith_with_StringComparison_Ordinal(bool async) + { + await base.String_StartsWith_with_StringComparison_Ordinal(async); + + AssertSql(); + } + + public override async Task String_StartsWith_with_StringComparison_OrdinalIgnoreCase(bool async) + { + await base.String_StartsWith_with_StringComparison_OrdinalIgnoreCase(async); + + AssertSql(); + } + + public override async Task String_StartsWith_with_StringComparison_unsupported(bool async) + { + await base.String_StartsWith_with_StringComparison_unsupported(async); + + AssertSql(); + } + public override async Task String_EndsWith_Literal(bool isAsync) { await base.String_EndsWith_Literal(isAsync); @@ -210,6 +231,27 @@ public override async Task String_EndsWith_MethodCall(bool isAsync) """); } + public override async Task String_EndsWith_with_StringComparison_Ordinal(bool async) + { + await base.String_EndsWith_with_StringComparison_Ordinal(async); + + AssertSql(); + } + + public override async Task String_EndsWith_with_StringComparison_OrdinalIgnoreCase(bool async) + { + await base.String_EndsWith_with_StringComparison_OrdinalIgnoreCase(async); + + AssertSql(); + } + + public override async Task String_EndsWith_with_StringComparison_unsupported(bool async) + { + await base.String_EndsWith_with_StringComparison_unsupported(async); + + AssertSql(); + } + public override async Task String_Contains_Literal(bool isAsync) { await AssertQuery( @@ -245,7 +287,7 @@ public override async Task String_Contains_Column(bool isAsync) """ SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` -WHERE `c`.`ContactName` IS NOT NULL AND (INSTR(1, `c`.`ContactName`, `c`.`ContactName`, 1) > 0 OR (`c`.`ContactName` LIKE '')) +WHERE `c`.`ContactName` IS NOT NULL AND (INSTR(1, `c`.`CompanyName`, `c`.`ContactName`, 1) > 0 OR (`c`.`ContactName` LIKE '')) """); } @@ -317,15 +359,15 @@ public override async Task String_Join_over_non_nullable_column(bool async) await base.String_Join_over_non_nullable_column(async); AssertSql( -""" -SELECT `t`.`City`, `c0`.`CustomerID` + """ +SELECT `c1`.`City`, `c0`.`CustomerID` FROM ( SELECT `c`.`City` FROM `Customers` AS `c` GROUP BY `c`.`City` -) AS `t` -LEFT JOIN `Customers` AS `c0` ON `t`.`City` = `c0`.`City` -ORDER BY `t`.`City` +) AS `c1` +LEFT JOIN `Customers` AS `c0` ON `c1`.`City` = `c0`.`City` +ORDER BY `c1`.`City` """); } @@ -334,15 +376,15 @@ public override async Task String_Join_over_nullable_column(bool async) await base.String_Join_over_nullable_column(async); AssertSql( -""" -SELECT `t`.`City`, `c0`.`Region`, `c0`.`CustomerID` + """ +SELECT `c1`.`City`, `c0`.`Region`, `c0`.`CustomerID` FROM ( SELECT `c`.`City` FROM `Customers` AS `c` GROUP BY `c`.`City` -) AS `t` -LEFT JOIN `Customers` AS `c0` ON `t`.`City` = `c0`.`City` -ORDER BY `t`.`City` +) AS `c1` +LEFT JOIN `Customers` AS `c0` ON `c1`.`City` = `c0`.`City` +ORDER BY `c1`.`City` """); } @@ -352,18 +394,18 @@ public override async Task String_Join_with_predicate(bool async) AssertSql( """ -SELECT `t`.`City`, `t0`.`CustomerID` +SELECT `c1`.`City`, `c2`.`CustomerID` FROM ( SELECT `c`.`City` FROM `Customers` AS `c` GROUP BY `c`.`City` -) AS `t` +) AS `c1` LEFT JOIN ( SELECT `c0`.`CustomerID`, `c0`.`City` FROM `Customers` AS `c0` WHERE IIF(LEN(`c0`.`ContactName`) IS NULL, NULL, CLNG(LEN(`c0`.`ContactName`))) > 10 -) AS `t0` ON `t`.`City` = `t0`.`City` -ORDER BY `t`.`City` +) AS `c2` ON `c1`.`City` = `c2`.`City` +ORDER BY `c1`.`City` """); } @@ -372,15 +414,29 @@ public override async Task String_Join_with_ordering(bool async) await base.String_Join_with_ordering(async); AssertSql( -""" -SELECT `t`.`City`, `c0`.`CustomerID` + """ +SELECT `c1`.`City`, `c0`.`CustomerID` FROM ( SELECT `c`.`City` FROM `Customers` AS `c` GROUP BY `c`.`City` -) AS `t` -LEFT JOIN `Customers` AS `c0` ON `t`.`City` = `c0`.`City` -ORDER BY `t`.`City`, `c0`.`CustomerID` DESC +) AS `c1` +LEFT JOIN `Customers` AS `c0` ON `c1`.`City` = `c0`.`City` +ORDER BY `c1`.`City`, `c0`.`CustomerID` DESC +"""); + } + + public override async Task String_Join_non_aggregate(bool async) + { + await base.String_Join_non_aggregate(async); + + AssertSql( + """ +@__foo_0='foo' (Size = 4000) + +SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] +FROM [Customers] AS [c] +WHERE CONCAT_WS(N'|', [c].[CompanyName], COALESCE(@__foo_0, N''), N'', N'bar') = N'Around the Horn|foo||bar' """); } @@ -389,15 +445,15 @@ public override async Task String_Concat(bool async) await base.String_Concat(async); AssertSql( -""" -SELECT `t`.`City`, `c0`.`CustomerID` + """ +SELECT `c1`.`City`, `c0`.`CustomerID` FROM ( SELECT `c`.`City` FROM `Customers` AS `c` GROUP BY `c`.`City` -) AS `t` -LEFT JOIN `Customers` AS `c0` ON `t`.`City` = `c0`.`City` -ORDER BY `t`.`City` +) AS `c1` +LEFT JOIN `Customers` AS `c0` ON `c1`.`City` = `c0`.`City` +ORDER BY `c1`.`City` """); } @@ -1062,9 +1118,11 @@ public override async Task Where_math_log_new_base(bool isAsync) await base.Where_math_log_new_base(isAsync); AssertSql( - $@"SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice` + """ +SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice` FROM `Order Details` AS `o` -WHERE `o`.`OrderID` = 11077 AND `o`.`Discount` > 0 AND (LOG(CDBL(`o`.`Discount`)) / LOG(7.0)) < 0.0"); +WHERE `o`.`OrderID` = 11077 AND `o`.`Discount` > 0 AND (LOG(CDBL(`o`.`Discount`)) / LOG(7.0)) < -1.0 +"""); } public override async Task Where_math_sqrt(bool isAsync) @@ -1167,6 +1225,30 @@ public override async Task Where_math_min(bool async) AssertSql(); } + public override async Task Where_math_min_nested(bool async) + { + await base.Where_math_min_nested(async); + + AssertSql( + """ +SELECT [o].[OrderID], [o].[ProductID], [o].[Discount], [o].[Quantity], [o].[UnitPrice] +FROM [Order Details] AS [o] +WHERE [o].[OrderID] = 11077 AND LEAST([o].[OrderID], [o].[ProductID], 99999) = [o].[ProductID] +"""); + } + + public override async Task Where_math_min_nested_twice(bool async) + { + await base.Where_math_min_nested_twice(async); + + AssertSql( + """ +SELECT [o].[OrderID], [o].[ProductID], [o].[Discount], [o].[Quantity], [o].[UnitPrice] +FROM [Order Details] AS [o] +WHERE [o].[OrderID] = 11077 AND LEAST(99999, [o].[OrderID], 99998, [o].[ProductID]) = [o].[ProductID] +"""); + } + public override async Task Where_math_max(bool async) { // Translate Math.Max. @@ -1175,6 +1257,30 @@ public override async Task Where_math_max(bool async) AssertSql(); } + public override async Task Where_math_max_nested(bool async) + { + await base.Where_math_max_nested(async); + + AssertSql( + """ +SELECT [o].[OrderID], [o].[ProductID], [o].[Discount], [o].[Quantity], [o].[UnitPrice] +FROM [Order Details] AS [o] +WHERE [o].[OrderID] = 11077 AND GREATEST([o].[OrderID], [o].[ProductID], 1) = [o].[OrderID] +"""); + } + + public override async Task Where_math_max_nested_twice(bool async) + { + await base.Where_math_max_nested_twice(async); + + AssertSql( + """ +SELECT [o].[OrderID], [o].[ProductID], [o].[Discount], [o].[Quantity], [o].[UnitPrice] +FROM [Order Details] AS [o] +WHERE [o].[OrderID] = 11077 AND GREATEST(1, [o].[OrderID], 2, [o].[ProductID]) = [o].[OrderID] +"""); + } + public override async Task Where_math_degrees(bool async) { await base.Where_math_degrees(async); @@ -1360,10 +1466,10 @@ public override async Task Where_mathf_log_new_base(bool async) await base.Where_mathf_log_new_base(async); AssertSql( - """ + """ SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice` FROM `Order Details` AS `o` -WHERE `o`.`OrderID` = 11077 AND `o`.`Discount` > 0 AND (LOG(`o`.`Discount`) / LOG(7)) < 0 +WHERE `o`.`OrderID` = 11077 AND `o`.`Discount` > 0 AND (LOG(`o`.`Discount`) / LOG(7)) < -1 """); } @@ -1963,9 +2069,10 @@ public override async Task Indexof_with_emptystring(bool async) await base.Indexof_with_emptystring(async); AssertSql( - """ + """ SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` +WHERE IIF(`c`.`Region` IS NOT NULL, 0, NULL) = 0 """); } @@ -1984,7 +2091,6 @@ public override async Task Indexof_with_one_constant_arg(bool async) public override async Task Indexof_with_one_parameter_arg(bool async) { await base.Indexof_with_one_parameter_arg(async); - AssertSql( $""" @__pattern_0='a' (Size = 30) @@ -1992,7 +2098,7 @@ public override async Task Indexof_with_one_parameter_arg(bool async) SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` -WHERE IIF({AssertSqlHelper.Parameter("@__pattern_0")} = '', 0, INSTR(1, `c`.`ContactName`, {AssertSqlHelper.Parameter("@__pattern_0")}, 1) - 1) = 1 +WHERE (INSTR(1, `c`.`ContactName`, {AssertSqlHelper.Parameter("@__pattern_0")}, 1) - IIF({AssertSqlHelper.Parameter("@__pattern_0")} = '', 0, 1)) = 1 """); } @@ -2050,7 +2156,7 @@ public override async Task Substring_with_one_arg_with_zero_startindex(bool asyn """ SELECT `c`.`ContactName` FROM `Customers` AS `c` -WHERE MID(`c`.`CustomerID`, 0 + 1, IIF(LEN(`c`.`CustomerID`) IS NULL, 0, LEN(`c`.`CustomerID`))) = 'ALFKI' +WHERE MID(`c`.`CustomerID`, 0 + 1, LEN(`c`.`CustomerID`)) = 'ALFKI' """); } @@ -2062,7 +2168,7 @@ public override async Task Substring_with_one_arg_with_constant(bool async) """ SELECT `c`.`ContactName` FROM `Customers` AS `c` -WHERE MID(`c`.`CustomerID`, 1 + 1, IIF(LEN(`c`.`CustomerID`) IS NULL, 0, LEN(`c`.`CustomerID`))) = 'LFKI' +WHERE MID(`c`.`CustomerID`, 1 + 1, LEN(`c`.`CustomerID`)) = 'LFKI' """); } @@ -2076,7 +2182,7 @@ public override async Task Substring_with_one_arg_with_closure(bool async) SELECT `c`.`ContactName` FROM `Customers` AS `c` -WHERE MID(`c`.`CustomerID`, {AssertSqlHelper.Parameter("@__start_0")} + 1, IIF(LEN(`c`.`CustomerID`) IS NULL, 0, LEN(`c`.`CustomerID`))) = 'FKI' +WHERE MID(`c`.`CustomerID`, {AssertSqlHelper.Parameter("@__start_0")} + 1, LEN(`c`.`CustomerID`)) = 'FKI' """); } @@ -2370,6 +2476,84 @@ public override Task Regex_IsMatch_MethodCall_constant_input(bool async) public override Task Datetime_subtraction_TotalDays(bool async) => AssertTranslationFailed(() => base.Datetime_subtraction_TotalDays(async)); + public override async Task Select_ToString_IndexOf(bool async) + { + await base.Select_ToString_IndexOf(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE (INSTR(1, (`o`.`OrderID` & ''), '123', 1) - 1) = -1 +"""); + } + + public override async Task Select_IndexOf_ToString(bool async) + { + await base.Select_IndexOf_ToString(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE (INSTR(1, '123', (`o`.`OrderID` & ''), 1) - IIF((`o`.`OrderID` & '') = '', 0, 1)) = -1 +"""); + } + + public override async Task String_Contains_in_projection(bool async) + { + await base.String_Contains_in_projection(async); + + AssertSql( + """ +SELECT `c`.`CustomerID` AS `Id`, IIF(`c`.`ContactName` IS NOT NULL AND (INSTR(1, `c`.`CompanyName`, `c`.`ContactName`, 1) > 0 OR (`c`.`ContactName` LIKE '')), TRUE, FALSE) AS `Value` +FROM `Customers` AS `c` +"""); + } + + public override async Task String_Contains_negated_in_predicate(bool async) + { + await base.String_Contains_negated_in_predicate(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`ContactName` IS NULL OR (INSTR(1, `c`.`CompanyName`, `c`.`ContactName`, 1) <= 0 AND `c`.`ContactName` NOT LIKE '') +"""); + } + + public override async Task String_Contains_negated_in_projection(bool async) + { + await base.String_Contains_negated_in_projection(async); + + AssertSql( + """ +SELECT `c`.`CustomerID` AS `Id`, IIF(`c`.`ContactName` IS NULL OR (INSTR(1, `c`.`CompanyName`, `c`.`ContactName`, 1) <= 0 AND `c`.`ContactName` NOT LIKE ''), TRUE, FALSE) AS `Value` +FROM `Customers` AS `c` +"""); + } + + public override async Task String_Contains_with_StringComparison_Ordinal(bool async) + { + await base.String_Contains_with_StringComparison_Ordinal(async); + + AssertSql(); + } + + public override async Task String_Contains_with_StringComparison_OrdinalIgnoreCase(bool async) + { + await base.String_Contains_with_StringComparison_OrdinalIgnoreCase(async); + + AssertSql(); + } + + public override async Task String_Contains_with_StringComparison_unsupported(bool async) + { + await base.String_Contains_with_StringComparison_unsupported(async); + + AssertSql(); + } /*[ConditionalTheory` [MemberData(nameof(IsAsyncData))` public virtual async Task StandardDeviation(bool async) diff --git a/test/EFCore.Jet.FunctionalTests/Query/NorthwindGroupByQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/NorthwindGroupByQueryJetTest.cs index 03ed5c03..7f753fda 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/NorthwindGroupByQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/NorthwindGroupByQueryJetTest.cs @@ -22,9 +22,6 @@ public NorthwindGroupByQueryJetTest(NorthwindQueryJetFixture false; - [ConditionalFact] public virtual void Check_all_tests_overridden() => TestHelpers.AssertAllMethodsOverridden(GetType()); @@ -230,12 +227,14 @@ public override async Task GroupBy_Property_Select_Key_with_constant(bool isAsyn await base.GroupBy_Property_Select_Key_with_constant(isAsync); AssertSql( - $@"SELECT `t`.`Name`, `t`.`CustomerID` AS `Value`, COUNT(*) AS `Count` + """ +SELECT `o0`.`Name`, `o0`.`CustomerID` AS `Value`, COUNT(*) AS `Count` FROM ( SELECT `o`.`CustomerID`, 'CustomerID' AS `Name` FROM `Orders` AS `o` -) AS `t` -GROUP BY `t`.`Name`, `t`.`CustomerID`"); +) AS `o0` +GROUP BY `o0`.`Name`, `o0`.`CustomerID` +"""); } public override async Task GroupBy_aggregate_projecting_conditional_expression(bool isAsync) @@ -545,12 +544,14 @@ public override async Task GroupBy_Constant_Select_Sum_Min_Key_Max_Avg(bool isAs await base.GroupBy_Constant_Select_Sum_Min_Key_Max_Avg(isAsync); AssertSql( - $@"SELECT IIF(SUM(`t`.`OrderID`) IS NULL, 0, SUM(`t`.`OrderID`)) AS `Sum`, MIN(`t`.`OrderID`) AS `Min`, `t`.`Key`, MAX(`t`.`OrderID`) AS `Max`, AVG(CDBL(`t`.`OrderID`)) AS `Avg` + """ +SELECT IIF(SUM(`o0`.`OrderID`) IS NULL, 0, SUM(`o0`.`OrderID`)) AS `Sum`, MIN(`o0`.`OrderID`) AS `Min`, `o0`.`Key`, MAX(`o0`.`OrderID`) AS `Max`, AVG(CDBL(`o0`.`OrderID`)) AS `Avg` FROM ( SELECT `o`.`OrderID`, 2 AS `Key` FROM `Orders` AS `o` -) AS `t` -GROUP BY `t`.`Key`"); +) AS `o0` +GROUP BY `o0`.`Key` +"""); } public override async Task GroupBy_Constant_with_element_selector_Select_Sum(bool isAsync) @@ -558,12 +559,14 @@ public override async Task GroupBy_Constant_with_element_selector_Select_Sum(boo await base.GroupBy_Constant_with_element_selector_Select_Sum(isAsync); AssertSql( - $@"SELECT IIF(SUM(`t`.`OrderID`) IS NULL, 0, SUM(`t`.`OrderID`)) AS `Sum` + """ +SELECT IIF(SUM(`o0`.`OrderID`) IS NULL, 0, SUM(`o0`.`OrderID`)) AS `Sum` FROM ( SELECT `o`.`OrderID`, 2 AS `Key` FROM `Orders` AS `o` -) AS `t` -GROUP BY `t`.`Key`"); +) AS `o0` +GROUP BY `o0`.`Key` +"""); } public override async Task GroupBy_Constant_with_element_selector_Select_Sum2(bool isAsync) @@ -571,12 +574,14 @@ public override async Task GroupBy_Constant_with_element_selector_Select_Sum2(bo await base.GroupBy_Constant_with_element_selector_Select_Sum2(isAsync); AssertSql( - $@"SELECT IIF(SUM(`t`.`OrderID`) IS NULL, 0, SUM(`t`.`OrderID`)) AS `Sum` + """ +SELECT IIF(SUM(`o0`.`OrderID`) IS NULL, 0, SUM(`o0`.`OrderID`)) AS `Sum` FROM ( SELECT `o`.`OrderID`, 2 AS `Key` FROM `Orders` AS `o` -) AS `t` -GROUP BY `t`.`Key`"); +) AS `o0` +GROUP BY `o0`.`Key` +"""); } public override async Task GroupBy_Constant_with_element_selector_Select_Sum3(bool isAsync) @@ -584,12 +589,14 @@ public override async Task GroupBy_Constant_with_element_selector_Select_Sum3(bo await base.GroupBy_Constant_with_element_selector_Select_Sum3(isAsync); AssertSql( - $@"SELECT IIF(SUM(`t`.`OrderID`) IS NULL, 0, SUM(`t`.`OrderID`)) AS `Sum` + """ +SELECT IIF(SUM(`o0`.`OrderID`) IS NULL, 0, SUM(`o0`.`OrderID`)) AS `Sum` FROM ( SELECT `o`.`OrderID`, 2 AS `Key` FROM `Orders` AS `o` -) AS `t` -GROUP BY `t`.`Key`"); +) AS `o0` +GROUP BY `o0`.`Key` +"""); } public override async Task GroupBy_after_predicate_Constant_Select_Sum_Min_Key_Max_Avg(bool isAsync) @@ -597,13 +604,15 @@ public override async Task GroupBy_after_predicate_Constant_Select_Sum_Min_Key_M await base.GroupBy_after_predicate_Constant_Select_Sum_Min_Key_Max_Avg(isAsync); AssertSql( - $@"SELECT IIF(SUM(`t`.`OrderID`) IS NULL, 0, SUM(`t`.`OrderID`)) AS `Sum`, MIN(`t`.`OrderID`) AS `Min`, `t`.`Key` AS `Random`, MAX(`t`.`OrderID`) AS `Max`, AVG(CDBL(`t`.`OrderID`)) AS `Avg` + """ +SELECT IIF(SUM(`o0`.`OrderID`) IS NULL, 0, SUM(`o0`.`OrderID`)) AS `Sum`, MIN(`o0`.`OrderID`) AS `Min`, `o0`.`Key` AS `Random`, MAX(`o0`.`OrderID`) AS `Max`, AVG(CDBL(`o0`.`OrderID`)) AS `Avg` FROM ( SELECT `o`.`OrderID`, 2 AS `Key` FROM `Orders` AS `o` WHERE `o`.`OrderID` > 10500 -) AS `t` -GROUP BY `t`.`Key`"); +) AS `o0` +GROUP BY `o0`.`Key` +"""); } public override async Task GroupBy_Constant_with_element_selector_Select_Sum_Min_Key_Max_Avg(bool isAsync) @@ -611,12 +620,14 @@ public override async Task GroupBy_Constant_with_element_selector_Select_Sum_Min await base.GroupBy_Constant_with_element_selector_Select_Sum_Min_Key_Max_Avg(isAsync); AssertSql( - $@"SELECT IIF(SUM(`t`.`OrderID`) IS NULL, 0, SUM(`t`.`OrderID`)) AS `Sum`, `t`.`Key` + """ +SELECT IIF(SUM(`o0`.`OrderID`) IS NULL, 0, SUM(`o0`.`OrderID`)) AS `Sum`, `o0`.`Key` FROM ( SELECT `o`.`OrderID`, 2 AS `Key` FROM `Orders` AS `o` -) AS `t` -GROUP BY `t`.`Key`"); +) AS `o0` +GROUP BY `o0`.`Key` +"""); } public override async Task GroupBy_constant_with_where_on_grouping_with_aggregate_operators(bool async) @@ -625,13 +636,13 @@ public override async Task GroupBy_constant_with_where_on_grouping_with_aggregat AssertSql( """ -SELECT MIN(IIF(1 = `t`.`Key`, `t`.`OrderDate`, NULL)) AS `Min`, MAX(IIF(1 = `t`.`Key`, `t`.`OrderDate`, NULL)) AS `Max`, IIF(SUM(IIF(1 = `t`.`Key`, `t`.`OrderID`, NULL)) IS NULL, 0, SUM(IIF(1 = `t`.`Key`, `t`.`OrderID`, NULL))) AS `Sum`, AVG(IIF(1 = `t`.`Key`, CDBL(`t`.`OrderID`), NULL)) AS `Average` +SELECT MIN(IIF(1 = `o0`.`Key`, `o0`.`OrderDate`, NULL)) AS `Min`, MAX(IIF(1 = `o0`.`Key`, `o0`.`OrderDate`, NULL)) AS `Max`, IIF(SUM(IIF(1 = `o0`.`Key`, `o0`.`OrderID`, NULL)) IS NULL, 0, SUM(IIF(1 = `o0`.`Key`, `o0`.`OrderID`, NULL))) AS `Sum`, AVG(IIF(1 = `o0`.`Key`, CDBL(`o0`.`OrderID`), NULL)) AS `Average` FROM ( SELECT `o`.`OrderID`, `o`.`OrderDate`, 1 AS `Key` FROM `Orders` AS `o` -) AS `t` -GROUP BY `t`.`Key` -ORDER BY `t`.`Key` +) AS `o0` +GROUP BY `o0`.`Key` +ORDER BY `o0`.`Key` """); } @@ -643,12 +654,12 @@ public override async Task GroupBy_param_Select_Sum_Min_Key_Max_Avg(bool isAsync $""" @__a_0='2' -SELECT IIF(SUM(`t`.`OrderID`) IS NULL, 0, SUM(`t`.`OrderID`)) AS `Sum`, MIN(`t`.`OrderID`) AS `Min`, `t`.`Key`, MAX(`t`.`OrderID`) AS `Max`, AVG(CDBL(`t`.`OrderID`)) AS `Avg` +SELECT IIF(SUM(`o0`.`OrderID`) IS NULL, 0, SUM(`o0`.`OrderID`)) AS `Sum`, MIN(`o0`.`OrderID`) AS `Min`, `o0`.`Key`, MAX(`o0`.`OrderID`) AS `Max`, AVG(CDBL(`o0`.`OrderID`)) AS `Avg` FROM ( SELECT `o`.`OrderID`, CLNG({AssertSqlHelper.Parameter("@__a_0")}) AS `Key` FROM `Orders` AS `o` -) AS `t` -GROUP BY `t`.`Key` +) AS `o0` +GROUP BY `o0`.`Key` """); } @@ -660,12 +671,12 @@ public override async Task GroupBy_param_with_element_selector_Select_Sum(bool i $""" @__a_0='2' -SELECT IIF(SUM(`t`.`OrderID`) IS NULL, 0, SUM(`t`.`OrderID`)) AS `Sum` +SELECT IIF(SUM(`o0`.`OrderID`) IS NULL, 0, SUM(`o0`.`OrderID`)) AS `Sum` FROM ( SELECT `o`.`OrderID`, CLNG({AssertSqlHelper.Parameter("@__a_0")}) AS `Key` FROM `Orders` AS `o` -) AS `t` -GROUP BY `t`.`Key` +) AS `o0` +GROUP BY `o0`.`Key` """); } @@ -677,12 +688,12 @@ public override async Task GroupBy_param_with_element_selector_Select_Sum2(bool $""" @__a_0='2' -SELECT IIF(SUM(`t`.`OrderID`) IS NULL, 0, SUM(`t`.`OrderID`)) AS `Sum` +SELECT IIF(SUM(`o0`.`OrderID`) IS NULL, 0, SUM(`o0`.`OrderID`)) AS `Sum` FROM ( SELECT `o`.`OrderID`, CLNG({AssertSqlHelper.Parameter("@__a_0")}) AS `Key` FROM `Orders` AS `o` -) AS `t` -GROUP BY `t`.`Key` +) AS `o0` +GROUP BY `o0`.`Key` """); } @@ -694,12 +705,12 @@ public override async Task GroupBy_param_with_element_selector_Select_Sum3(bool $""" @__a_0='2' -SELECT IIF(SUM(`t`.`OrderID`) IS NULL, 0, SUM(`t`.`OrderID`)) AS `Sum` +SELECT IIF(SUM(`o0`.`OrderID`) IS NULL, 0, SUM(`o0`.`OrderID`)) AS `Sum` FROM ( SELECT `o`.`OrderID`, CLNG({AssertSqlHelper.Parameter("@__a_0")}) AS `Key` FROM `Orders` AS `o` -) AS `t` -GROUP BY `t`.`Key` +) AS `o0` +GROUP BY `o0`.`Key` """); } @@ -711,12 +722,12 @@ public override async Task GroupBy_param_with_element_selector_Select_Sum_Min_Ke $""" @__a_0='2' -SELECT IIF(SUM(`t`.`OrderID`) IS NULL, 0, SUM(`t`.`OrderID`)) AS `Sum`, `t`.`Key` +SELECT IIF(SUM(`o0`.`OrderID`) IS NULL, 0, SUM(`o0`.`OrderID`)) AS `Sum`, `o0`.`Key` FROM ( SELECT `o`.`OrderID`, CLNG({AssertSqlHelper.Parameter("@__a_0")}) AS `Key` FROM `Orders` AS `o` -) AS `t` -GROUP BY `t`.`Key` +) AS `o0` +GROUP BY `o0`.`Key` """); } @@ -725,13 +736,15 @@ public override async Task GroupBy_anonymous_key_type_mismatch_with_aggregate(bo await base.GroupBy_anonymous_key_type_mismatch_with_aggregate(isAsync); AssertSql( - $@"SELECT COUNT(*) AS `I0`, `t`.`I0` AS `I1` + """ +SELECT COUNT(*) AS `I0`, `o0`.`I0` AS `I1` FROM ( SELECT DATEPART('yyyy', `o`.`OrderDate`) AS `I0` FROM `Orders` AS `o` -) AS `t` -GROUP BY `t`.`I0` -ORDER BY `t`.`I0`"); +) AS `o0` +GROUP BY `o0`.`I0` +ORDER BY `o0`.`I0` +"""); } public override async Task GroupBy_Property_scalar_element_selector_Average(bool isAsync) @@ -932,12 +945,12 @@ public override async Task GroupBy_conditional_properties(bool async) AssertSql( """ -SELECT `t`.`OrderMonth`, `t`.`CustomerID` AS `Customer`, COUNT(*) AS `Count` +SELECT `o0`.`OrderMonth`, `o0`.`CustomerID` AS `Customer`, COUNT(*) AS `Count` FROM ( SELECT `o`.`CustomerID`, CVar(NULL) AS `OrderMonth` FROM `Orders` AS `o` -) AS `t` -GROUP BY `t`.`OrderMonth`, `t`.`CustomerID` +) AS `o0` +GROUP BY `o0`.`OrderMonth`, `o0`.`CustomerID` """); } @@ -946,12 +959,14 @@ public override async Task GroupBy_empty_key_Aggregate(bool isAsync) await base.GroupBy_empty_key_Aggregate(isAsync); AssertSql( - $@"SELECT IIF(SUM(`t`.`OrderID`) IS NULL, 0, SUM(`t`.`OrderID`)) + """ +SELECT IIF(SUM(`o0`.`OrderID`) IS NULL, 0, SUM(`o0`.`OrderID`)) FROM ( SELECT `o`.`OrderID`, 1 AS `Key` FROM `Orders` AS `o` -) AS `t` -GROUP BY `t`.`Key`"); +) AS `o0` +GROUP BY `o0`.`Key` +"""); } public override async Task GroupBy_empty_key_Aggregate_Key(bool isAsync) @@ -959,12 +974,14 @@ public override async Task GroupBy_empty_key_Aggregate_Key(bool isAsync) await base.GroupBy_empty_key_Aggregate_Key(isAsync); AssertSql( - $@"SELECT IIF(SUM(`t`.`OrderID`) IS NULL, 0, SUM(`t`.`OrderID`)) AS `Sum` + """ +SELECT IIF(SUM(`o0`.`OrderID`) IS NULL, 0, SUM(`o0`.`OrderID`)) AS `Sum` FROM ( SELECT `o`.`OrderID`, 1 AS `Key` FROM `Orders` AS `o` -) AS `t` -GROUP BY `t`.`Key`"); +) AS `o0` +GROUP BY `o0`.`Key` +"""); } public override async Task OrderBy_GroupBy_Aggregate(bool isAsync) @@ -997,13 +1014,15 @@ public override async Task OrderBy_Take_GroupBy_Aggregate(bool isAsync) await base.OrderBy_Take_GroupBy_Aggregate(isAsync); AssertSql( - $@"SELECT MIN(`t`.`OrderID`) + """ +SELECT MIN(`o0`.`OrderID`) FROM ( SELECT TOP 500 `o`.`OrderID`, `o`.`CustomerID` FROM `Orders` AS `o` ORDER BY `o`.`OrderID` -) AS `t` -GROUP BY `t`.`CustomerID`"); +) AS `o0` +GROUP BY `o0`.`CustomerID` +"""); } public override async Task OrderBy_Skip_Take_GroupBy_Aggregate(bool isAsync) @@ -1011,22 +1030,22 @@ public override async Task OrderBy_Skip_Take_GroupBy_Aggregate(bool isAsync) await base.OrderBy_Skip_Take_GroupBy_Aggregate(isAsync); AssertSql( -""" -SELECT MAX(`t`.`OrderID`) + """ +SELECT MAX(`o0`.`OrderID`) FROM ( - SELECT `t1`.`OrderID`, `t1`.`CustomerID` + SELECT `o2`.`OrderID`, `o2`.`CustomerID` FROM ( - SELECT TOP 500 `t0`.`OrderID`, `t0`.`CustomerID` + SELECT TOP 500 `o1`.`OrderID`, `o1`.`CustomerID` FROM ( SELECT TOP 580 `o`.`OrderID`, `o`.`CustomerID` FROM `Orders` AS `o` ORDER BY `o`.`OrderID` - ) AS `t0` - ORDER BY `t0`.`OrderID` DESC - ) AS `t1` - ORDER BY `t1`.`OrderID` -) AS `t` -GROUP BY `t`.`CustomerID` + ) AS `o1` + ORDER BY `o1`.`OrderID` DESC + ) AS `o2` + ORDER BY `o2`.`OrderID` +) AS `o0` +GROUP BY `o0`.`CustomerID` """); } @@ -1035,12 +1054,14 @@ public override async Task Distinct_GroupBy_Aggregate(bool isAsync) await base.Distinct_GroupBy_Aggregate(isAsync); AssertSql( - $@"SELECT `t`.`CustomerID` AS `Key`, COUNT(*) AS `c` + """ +SELECT `o0`.`CustomerID` AS `Key`, COUNT(*) AS `c` FROM ( SELECT DISTINCT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` -) AS `t` -GROUP BY `t`.`CustomerID`"); +) AS `o0` +GROUP BY `o0`.`CustomerID` +"""); } public override async Task Anonymous_projection_Distinct_GroupBy_Aggregate(bool isAsync) @@ -1048,12 +1069,14 @@ public override async Task Anonymous_projection_Distinct_GroupBy_Aggregate(bool await base.Anonymous_projection_Distinct_GroupBy_Aggregate(isAsync); AssertSql( - $@"SELECT `t`.`EmployeeID` AS `Key`, COUNT(*) AS `c` + """ +SELECT `o0`.`EmployeeID` AS `Key`, COUNT(*) AS `c` FROM ( SELECT DISTINCT `o`.`OrderID`, `o`.`EmployeeID` FROM `Orders` AS `o` -) AS `t` -GROUP BY `t`.`EmployeeID`"); +) AS `o0` +GROUP BY `o0`.`EmployeeID` +"""); } public override async Task SelectMany_GroupBy_Aggregate(bool isAsync) @@ -1094,29 +1117,29 @@ public override async Task Join_complex_GroupBy_Aggregate(bool isAsync) await base.Join_complex_GroupBy_Aggregate(isAsync); AssertSql( -""" -SELECT `t0`.`CustomerID` AS `Key`, AVG(CDBL(`t`.`OrderID`)) AS `Count` + """ +SELECT `c0`.`CustomerID` AS `Key`, AVG(CDBL(`o0`.`OrderID`)) AS `Count` FROM ( SELECT TOP 100 `o`.`OrderID`, `o`.`CustomerID` FROM `Orders` AS `o` WHERE `o`.`OrderID` < 10400 ORDER BY `o`.`OrderDate` -) AS `t` +) AS `o0` INNER JOIN ( - SELECT `t1`.`CustomerID`, `t1`.`Address`, `t1`.`City`, `t1`.`CompanyName`, `t1`.`ContactName`, `t1`.`ContactTitle`, `t1`.`Country`, `t1`.`Fax`, `t1`.`Phone`, `t1`.`PostalCode`, `t1`.`Region` + SELECT `c2`.`CustomerID` FROM ( - SELECT TOP 50 `t0`.`CustomerID`, `t0`.`Address`, `t0`.`City`, `t0`.`CompanyName`, `t0`.`ContactName`, `t0`.`ContactTitle`, `t0`.`Country`, `t0`.`Fax`, `t0`.`Phone`, `t0`.`PostalCode`, `t0`.`Region` + SELECT TOP 50 `c1`.`CustomerID`, `c1`.`City` FROM ( - SELECT TOP 60 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + SELECT TOP 60 `c`.`CustomerID`, `c`.`City` FROM `Customers` AS `c` WHERE `c`.`CustomerID` NOT IN ('DRACD', 'FOLKO') ORDER BY `c`.`City` - ) AS `t0` - ORDER BY `t0`.`City` DESC - ) AS `t1` - ORDER BY `t1`.`City` -) AS `t0` ON `t`.`CustomerID` = `t0`.`CustomerID` -GROUP BY `t0`.`CustomerID` + ) AS `c1` + ORDER BY `c1`.`City` DESC + ) AS `c2` + ORDER BY `c2`.`City` +) AS `c0` ON `o0`.`CustomerID` = `c0`.`CustomerID` +GROUP BY `c0`.`CustomerID` """); } @@ -1194,30 +1217,30 @@ public override async Task GroupJoin_complex_GroupBy_Aggregate(bool isAsync) await base.GroupJoin_complex_GroupBy_Aggregate(isAsync); AssertSql( -""" -SELECT `t0`.`CustomerID` AS `Key`, AVG(CDBL(`t0`.`OrderID`)) AS `Count` + """ +SELECT `o0`.`CustomerID` AS `Key`, AVG(CDBL(`o0`.`OrderID`)) AS `Count` FROM ( - SELECT `t2`.`CustomerID` + SELECT `c2`.`CustomerID` FROM ( - SELECT TOP 50 `t1`.`CustomerID`, `t1`.`City` + SELECT TOP 50 `c1`.`CustomerID`, `c1`.`City` FROM ( SELECT TOP 60 `c`.`CustomerID`, `c`.`City` FROM `Customers` AS `c` WHERE `c`.`CustomerID` NOT IN ('DRACD', 'FOLKO') ORDER BY `c`.`City` - ) AS `t1` - ORDER BY `t1`.`City` DESC - ) AS `t2` - ORDER BY `t2`.`City` -) AS `t` + ) AS `c1` + ORDER BY `c1`.`City` DESC + ) AS `c2` + ORDER BY `c2`.`City` +) AS `c0` INNER JOIN ( SELECT TOP 100 `o`.`OrderID`, `o`.`CustomerID` FROM `Orders` AS `o` WHERE `o`.`OrderID` < 10400 ORDER BY `o`.`OrderDate` -) AS `t0` ON `t`.`CustomerID` = `t0`.`CustomerID` -WHERE `t0`.`OrderID` > 10300 -GROUP BY `t0`.`CustomerID` +) AS `o0` ON `c0`.`CustomerID` = `o0`.`CustomerID` +WHERE `o0`.`OrderID` > 10300 +GROUP BY `o0`.`CustomerID` """); } @@ -1250,7 +1273,8 @@ public override async Task Union_simple_groupby(bool isAsync) await base.Union_simple_groupby(isAsync); AssertSql( - $@"SELECT `t`.`City` AS `Key`, COUNT(*) AS `Total` + """ +SELECT `u`.`City` AS `Key`, COUNT(*) AS `Total` FROM ( SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` @@ -1259,8 +1283,9 @@ public override async Task Union_simple_groupby(bool isAsync) SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` FROM `Customers` AS `c0` WHERE `c0`.`City` = 'México D.F.' -) AS `t` -GROUP BY `t`.`City`"); +) AS `u` +GROUP BY `u`.`City` +"""); } public override async Task Select_anonymous_GroupBy_Aggregate(bool isAsync) @@ -1291,12 +1316,12 @@ public override async Task GroupBy_after_anonymous_projection_and_distinct_follo AssertSql( """ -SELECT `t`.`CustomerID` AS `Key`, COUNT(*) AS `Count` +SELECT `o0`.`CustomerID` AS `Key`, COUNT(*) AS `Count` FROM ( SELECT DISTINCT `o`.`CustomerID`, `o`.`OrderID` FROM `Orders` AS `o` -) AS `t` -GROUP BY `t`.`CustomerID` +) AS `o0` +GROUP BY `o0`.`CustomerID` """); } @@ -1306,13 +1331,13 @@ public override async Task GroupBy_complex_key_aggregate(bool async) AssertSql( """ -SELECT `t`.`Key`, COUNT(*) AS `Count` +SELECT `s`.`Key`, COUNT(*) AS `Count` FROM ( SELECT MID(`c`.`CustomerID`, 0 + 1, 1) AS `Key` FROM `Orders` AS `o` LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` -) AS `t` -GROUP BY `t`.`Key` +) AS `s` +GROUP BY `s`.`Key` """); } @@ -1508,12 +1533,12 @@ public override async Task GroupBy_count_filter(bool async) AssertSql( """ -SELECT `t`.`Key` AS `Name`, COUNT(*) AS `Count` +SELECT `o0`.`Key` AS `Name`, COUNT(*) AS `Count` FROM ( SELECT 'Order' AS `Key` FROM `Orders` AS `o` -) AS `t` -GROUP BY `t`.`Key` +) AS `o0` +GROUP BY `o0`.`Key` HAVING COUNT(*) > 0 """); } @@ -1536,15 +1561,15 @@ public override async Task GroupBy_Aggregate_Join(bool isAsync) AssertSql( """ -SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate` FROM (( SELECT `o`.`CustomerID`, MAX(`o`.`OrderID`) AS `LastOrderID` FROM `Orders` AS `o` GROUP BY `o`.`CustomerID` HAVING COUNT(*) > 5 -) AS `t` -INNER JOIN `Customers` AS `c` ON `t`.`CustomerID` = `c`.`CustomerID`) -INNER JOIN `Orders` AS `o0` ON `t`.`LastOrderID` = `o0`.`OrderID` +) AS `o0` +INNER JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID`) +INNER JOIN `Orders` AS `o1` ON `o0`.`LastOrderID` = `o1`.`OrderID` """); } @@ -1557,11 +1582,11 @@ public override async Task GroupBy_Aggregate_Join_converted_from_SelectMany(bool SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` INNER JOIN ( - SELECT `o`.`CustomerID`, MAX(`o`.`OrderID`) AS `LastOrderID` + SELECT `o`.`CustomerID` FROM `Orders` AS `o` GROUP BY `o`.`CustomerID` HAVING COUNT(*) > 5 -) AS `t` ON `c`.`CustomerID` = `t`.`CustomerID` +) AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` """); } @@ -1574,11 +1599,11 @@ public override async Task GroupBy_Aggregate_LeftJoin_converted_from_SelectMany( SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` LEFT JOIN ( - SELECT `o`.`CustomerID`, MAX(`o`.`OrderID`) AS `LastOrderID` + SELECT `o`.`CustomerID` FROM `Orders` AS `o` GROUP BY `o`.`CustomerID` HAVING COUNT(*) > 5 -) AS `t` ON `c`.`CustomerID` = `t`.`CustomerID` +) AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` """); } @@ -1588,16 +1613,16 @@ public override async Task Join_GroupBy_Aggregate_multijoins(bool isAsync) AssertSql( """ -SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate` FROM (`Customers` AS `c` INNER JOIN ( SELECT `o`.`CustomerID`, MAX(`o`.`OrderID`) AS `LastOrderID` FROM `Orders` AS `o` GROUP BY `o`.`CustomerID` HAVING COUNT(*) > 5 -) AS `t` ON `c`.`CustomerID` = `t`.`CustomerID`) -LEFT JOIN `Orders` AS `o0` ON `t`.`LastOrderID` = `o0`.`OrderID` -WHERE `t`.`LastOrderID` IS NOT NULL AND `o0`.`OrderID` IS NOT NULL +) AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID`) +LEFT JOIN `Orders` AS `o1` ON `o0`.`LastOrderID` = `o1`.`OrderID` +WHERE `o0`.`LastOrderID` IS NOT NULL AND `o1`.`OrderID` IS NOT NULL """); } @@ -1606,14 +1631,16 @@ public override async Task Join_GroupBy_Aggregate_single_join(bool isAsync) await base.Join_GroupBy_Aggregate_single_join(isAsync); AssertSql( - $@"SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `t`.`LastOrderID` + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o0`.`LastOrderID` FROM `Customers` AS `c` INNER JOIN ( SELECT `o`.`CustomerID`, MAX(`o`.`OrderID`) AS `LastOrderID` FROM `Orders` AS `o` GROUP BY `o`.`CustomerID` HAVING COUNT(*) > 5 -) AS `t` ON `c`.`CustomerID` = `t`.`CustomerID`"); +) AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +"""); } public override async Task Join_GroupBy_Aggregate_with_another_join(bool isAsync) @@ -1621,15 +1648,17 @@ public override async Task Join_GroupBy_Aggregate_with_another_join(bool isAsync await base.Join_GroupBy_Aggregate_with_another_join(isAsync); AssertSql( - $@"SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `t`.`LastOrderID`, `o0`.`OrderID` + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o0`.`LastOrderID`, `o1`.`OrderID` FROM (`Customers` AS `c` INNER JOIN ( SELECT `o`.`CustomerID`, MAX(`o`.`OrderID`) AS `LastOrderID` FROM `Orders` AS `o` GROUP BY `o`.`CustomerID` HAVING COUNT(*) > 5 -) AS `t` ON `c`.`CustomerID` = `t`.`CustomerID`) -INNER JOIN `Orders` AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID`"); +) AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID`) +INNER JOIN `Orders` AS `o1` ON `c`.`CustomerID` = `o1`.`CustomerID` +"""); } public override async Task Join_GroupBy_Aggregate_distinct_single_join(bool async) @@ -1638,17 +1667,17 @@ public override async Task Join_GroupBy_Aggregate_distinct_single_join(bool asyn AssertSql( """ -SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `t0`.`LastOrderID` +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o1`.`LastOrderID` FROM `Customers` AS `c` INNER JOIN ( - SELECT DISTINCT `t`.`CustomerID`, MAX(`t`.`OrderID`) AS `LastOrderID` + SELECT DISTINCT `o0`.`CustomerID`, MAX(`o0`.`OrderID`) AS `LastOrderID` FROM ( SELECT `o`.`OrderID`, `o`.`CustomerID`, DATEPART('yyyy', `o`.`OrderDate`) AS `Year` FROM `Orders` AS `o` - ) AS `t` - GROUP BY `t`.`CustomerID`, `t`.`Year` + ) AS `o0` + GROUP BY `o0`.`CustomerID`, `o0`.`Year` HAVING COUNT(*) > 5 -) AS `t0` ON `c`.`CustomerID` = `t0`.`CustomerID` +) AS `o1` ON `c`.`CustomerID` = `o1`.`CustomerID` """); } @@ -1658,14 +1687,14 @@ public override async Task Join_GroupBy_Aggregate_with_left_join(bool async) AssertSql( """ -SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `t`.`LastOrderID` +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o0`.`LastOrderID` FROM `Customers` AS `c` LEFT JOIN ( SELECT `o`.`CustomerID`, MAX(`o`.`OrderID`) AS `LastOrderID` FROM `Orders` AS `o` GROUP BY `o`.`CustomerID` HAVING COUNT(*) > 5 -) AS `t` ON `c`.`CustomerID` = `t`.`CustomerID` +) AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` WHERE `c`.`CustomerID` LIKE 'A%' """); } @@ -1675,19 +1704,21 @@ public override async Task Join_GroupBy_Aggregate_in_subquery(bool isAsync) await base.Join_GroupBy_Aggregate_in_subquery(isAsync); AssertSql( - $@"SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `t0`.`CustomerID`, `t0`.`Address`, `t0`.`City`, `t0`.`CompanyName`, `t0`.`ContactName`, `t0`.`ContactTitle`, `t0`.`Country`, `t0`.`Fax`, `t0`.`Phone`, `t0`.`PostalCode`, `t0`.`Region` + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `s`.`CustomerID`, `s`.`Address`, `s`.`City`, `s`.`CompanyName`, `s`.`ContactName`, `s`.`ContactTitle`, `s`.`Country`, `s`.`Fax`, `s`.`Phone`, `s`.`PostalCode`, `s`.`Region` FROM `Orders` AS `o` INNER JOIN ( SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` INNER JOIN ( - SELECT `o0`.`CustomerID`, MAX(`o0`.`OrderID`) AS `LastOrderID` + SELECT `o0`.`CustomerID` FROM `Orders` AS `o0` GROUP BY `o0`.`CustomerID` HAVING COUNT(*) > 5 - ) AS `t` ON `c`.`CustomerID` = `t`.`CustomerID` -) AS `t0` ON `o`.`CustomerID` = `t0`.`CustomerID` -WHERE `o`.`OrderID` < 10400"); + ) AS `o1` ON `c`.`CustomerID` = `o1`.`CustomerID` +) AS `s` ON `o`.`CustomerID` = `s`.`CustomerID` +WHERE `o`.`OrderID` < 10400 +"""); } public override async Task Join_GroupBy_Aggregate_on_key(bool isAsync) @@ -1695,14 +1726,16 @@ public override async Task Join_GroupBy_Aggregate_on_key(bool isAsync) await base.Join_GroupBy_Aggregate_on_key(isAsync); AssertSql( - $@"SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `t`.`LastOrderID` + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o0`.`LastOrderID` FROM `Customers` AS `c` INNER JOIN ( SELECT `o`.`CustomerID` AS `Key`, MAX(`o`.`OrderID`) AS `LastOrderID` FROM `Orders` AS `o` GROUP BY `o`.`CustomerID` HAVING COUNT(*) > 5 -) AS `t` ON `c`.`CustomerID` = `t`.`Key`"); +) AS `o0` ON `c`.`CustomerID` = `o0`.`Key` +"""); } public override async Task GroupBy_with_result_selector(bool isAsync) @@ -1740,13 +1773,15 @@ public override async Task Distinct_GroupBy_OrderBy_key(bool isAsync) await base.Distinct_GroupBy_OrderBy_key(isAsync); AssertSql( - $@"SELECT `t`.`CustomerID` AS `Key`, COUNT(*) AS `c` + """ +SELECT `o0`.`CustomerID` AS `Key`, COUNT(*) AS `c` FROM ( SELECT DISTINCT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` -) AS `t` -GROUP BY `t`.`CustomerID` -ORDER BY `t`.`CustomerID`"); +) AS `o0` +GROUP BY `o0`.`CustomerID` +ORDER BY `o0`.`CustomerID` +"""); } public override async Task Select_nested_collection_with_groupby(bool isAsync) @@ -2117,14 +2152,14 @@ public override async Task GroupBy_select_grouping_list(bool async) AssertSql( """ -SELECT `t`.`City`, `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` +SELECT `c1`.`City`, `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` FROM ( SELECT `c`.`City` FROM `Customers` AS `c` GROUP BY `c`.`City` -) AS `t` -LEFT JOIN `Customers` AS `c0` ON `t`.`City` = `c0`.`City` -ORDER BY `t`.`City` +) AS `c1` +LEFT JOIN `Customers` AS `c0` ON `c1`.`City` = `c0`.`City` +ORDER BY `c1`.`City` """); } @@ -2134,14 +2169,14 @@ public override async Task GroupBy_select_grouping_array(bool async) AssertSql( """ -SELECT `t`.`City`, `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` +SELECT `c1`.`City`, `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` FROM ( SELECT `c`.`City` FROM `Customers` AS `c` GROUP BY `c`.`City` -) AS `t` -LEFT JOIN `Customers` AS `c0` ON `t`.`City` = `c0`.`City` -ORDER BY `t`.`City` +) AS `c1` +LEFT JOIN `Customers` AS `c0` ON `c1`.`City` = `c0`.`City` +ORDER BY `c1`.`City` """); } @@ -2151,18 +2186,18 @@ public override async Task GroupBy_select_grouping_composed_list(bool async) AssertSql( """ -SELECT `t`.`City`, `t0`.`CustomerID`, `t0`.`Address`, `t0`.`City`, `t0`.`CompanyName`, `t0`.`ContactName`, `t0`.`ContactTitle`, `t0`.`Country`, `t0`.`Fax`, `t0`.`Phone`, `t0`.`PostalCode`, `t0`.`Region` +SELECT `c1`.`City`, `c2`.`CustomerID`, `c2`.`Address`, `c2`.`City`, `c2`.`CompanyName`, `c2`.`ContactName`, `c2`.`ContactTitle`, `c2`.`Country`, `c2`.`Fax`, `c2`.`Phone`, `c2`.`PostalCode`, `c2`.`Region` FROM ( SELECT `c`.`City` FROM `Customers` AS `c` GROUP BY `c`.`City` -) AS `t` +) AS `c1` LEFT JOIN ( SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` FROM `Customers` AS `c0` WHERE `c0`.`CustomerID` LIKE 'A%' -) AS `t0` ON `t`.`City` = `t0`.`City` -ORDER BY `t`.`City` +) AS `c2` ON `c1`.`City` = `c2`.`City` +ORDER BY `c1`.`City` """); } @@ -2172,14 +2207,14 @@ public override async Task GroupBy_select_grouping_composed_list_2(bool async) AssertSql( """ -SELECT `t`.`City`, `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` +SELECT `c1`.`City`, `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` FROM ( SELECT `c`.`City` FROM `Customers` AS `c` GROUP BY `c`.`City` -) AS `t` -LEFT JOIN `Customers` AS `c0` ON `t`.`City` = `c0`.`City` -ORDER BY `t`.`City`, `c0`.`CustomerID` +) AS `c1` +LEFT JOIN `Customers` AS `c0` ON `c1`.`City` = `c0`.`City` +ORDER BY `c1`.`City`, `c0`.`CustomerID` """); } @@ -2195,12 +2230,14 @@ public override async Task Count_after_GroupBy_aggregate(bool isAsync) await base.Count_after_GroupBy_aggregate(isAsync); AssertSql( - $@"SELECT COUNT(*) + """ +SELECT COUNT(*) FROM ( - SELECT `o`.`CustomerID` + SELECT 1 FROM `Orders` AS `o` GROUP BY `o`.`CustomerID` -) AS `t`"); +) AS `o0` +"""); } public override async Task LongCount_after_GroupBy_aggregate(bool async) @@ -2211,10 +2248,10 @@ public override async Task LongCount_after_GroupBy_aggregate(bool async) """ SELECT COUNT(*) FROM ( - SELECT `o`.`CustomerID` + SELECT 1 FROM `Orders` AS `o` GROUP BY `o`.`CustomerID` -) AS `t` +) AS `o0` """); } @@ -2261,19 +2298,23 @@ public override async Task MinMax_after_GroupBy_aggregate(bool isAsync) await base.MinMax_after_GroupBy_aggregate(isAsync); AssertSql( - $@"SELECT MIN(`t`.`c`) + """ +SELECT MIN(`o0`.`c`) FROM ( SELECT IIF(SUM(`o`.`OrderID`) IS NULL, 0, SUM(`o`.`OrderID`)) AS `c` FROM `Orders` AS `o` GROUP BY `o`.`CustomerID` -) AS `t`", +) AS `o0` +""", // - $@"SELECT MAX(`t`.`c`) + """ +SELECT MAX(`o0`.`c`) FROM ( SELECT IIF(SUM(`o`.`OrderID`) IS NULL, 0, SUM(`o`.`OrderID`)) AS `c` FROM `Orders` AS `o` GROUP BY `o`.`CustomerID` -) AS `t`"); +) AS `o0` +"""); } public override async Task All_after_GroupBy_aggregate(bool isAsync) @@ -2318,12 +2359,15 @@ public override async Task Count_after_GroupBy_without_aggregate(bool isAsync) { await base.Count_after_GroupBy_without_aggregate(isAsync); - AssertSql($@"SELECT COUNT(*) + AssertSql( + """ +SELECT COUNT(*) FROM ( - SELECT `o`.`CustomerID` + SELECT 1 FROM `Orders` AS `o` GROUP BY `o`.`CustomerID` -) AS `t`"); +) AS `o0` +"""); } public override async Task Count_with_predicate_after_GroupBy_without_aggregate(bool async) @@ -2334,11 +2378,11 @@ public override async Task Count_with_predicate_after_GroupBy_without_aggregate( """ SELECT COUNT(*) FROM ( - SELECT `o`.`CustomerID` + SELECT 1 FROM `Orders` AS `o` GROUP BY `o`.`CustomerID` HAVING COUNT(*) > 1 -) AS `t` +) AS `o0` """); } @@ -2346,12 +2390,15 @@ public override async Task LongCount_after_GroupBy_without_aggregate(bool isAsyn { await base.LongCount_after_GroupBy_without_aggregate(isAsync); - AssertSql($@"SELECT COUNT(*) + AssertSql( + """ +SELECT COUNT(*) FROM ( - SELECT `o`.`CustomerID` + SELECT 1 FROM `Orders` AS `o` GROUP BY `o`.`CustomerID` -) AS `t`"); +) AS `o0` +"""); } public override async Task LongCount_with_predicate_after_GroupBy_without_aggregate(bool async) @@ -2362,11 +2409,11 @@ public override async Task LongCount_with_predicate_after_GroupBy_without_aggreg """ SELECT COUNT(*) FROM ( - SELECT `o`.`CustomerID` + SELECT 1 FROM `Orders` AS `o` GROUP BY `o`.`CustomerID` HAVING COUNT(*) > 1 -) AS `t` +) AS `o0` """); } @@ -2420,16 +2467,16 @@ public override async Task GroupBy_aggregate_followed_by_another_GroupBy_aggrega AssertSql( """ -SELECT `t0`.`Key0` AS `Key`, IIF(SUM(`t0`.`Count`) IS NULL, 0, SUM(`t0`.`Count`)) AS `Count` +SELECT `o1`.`Key0` AS `Key`, IIF(SUM(`o1`.`Count`) IS NULL, 0, SUM(`o1`.`Count`)) AS `Count` FROM ( - SELECT `t`.`Count`, 1 AS `Key0` + SELECT `o0`.`Count`, 1 AS `Key0` FROM ( SELECT COUNT(*) AS `Count` FROM `Orders` AS `o` GROUP BY `o`.`CustomerID` - ) AS `t` -) AS `t0` -GROUP BY `t0`.`Key0` + ) AS `o0` +) AS `o1` +GROUP BY `o1`.`Key0` """); } @@ -2470,10 +2517,10 @@ public override async Task GroupBy_nominal_type_count(bool async) """ SELECT COUNT(*) FROM ( - SELECT `o`.`CustomerID` + SELECT 1 FROM `Orders` AS `o` GROUP BY `o`.`CustomerID` -) AS `t` +) AS `o0` """); } @@ -2492,12 +2539,14 @@ public override async Task GroupBy_based_on_renamed_property_complex(bool isAsyn await base.GroupBy_based_on_renamed_property_complex(isAsync); AssertSql( - $@"SELECT `t`.`Renamed` AS `Key`, COUNT(*) AS `Count` + """ +SELECT `c0`.`Renamed` AS `Key`, COUNT(*) AS `Count` FROM ( SELECT DISTINCT `c`.`City` AS `Renamed`, `c`.`CustomerID` FROM `Customers` AS `c` -) AS `t` -GROUP BY `t`.`Renamed`"); +) AS `c0` +GROUP BY `c0`.`Renamed` +"""); } public override async Task Join_groupby_anonymous_orderby_anonymous_projection(bool async) @@ -2704,13 +2753,13 @@ public override async Task GroupBy_aggregate_join_with_grouping_key(bool async) AssertSql( """ -SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `t`.`Count` +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o0`.`Count` FROM ( SELECT `o`.`CustomerID` AS `Key`, COUNT(*) AS `Count` FROM `Orders` AS `o` GROUP BY `o`.`CustomerID` -) AS `t` -INNER JOIN `Customers` AS `c` ON `t`.`Key` = `c`.`CustomerID` +) AS `o0` +INNER JOIN `Customers` AS `c` ON `o0`.`Key` = `c`.`CustomerID` """); } @@ -2725,8 +2774,8 @@ public override async Task GroupBy_aggregate_join_with_group_result(bool async) SELECT `o`.`CustomerID` AS `Key`, MAX(`o`.`OrderDate`) AS `LastOrderDate` FROM `Orders` AS `o` GROUP BY `o`.`CustomerID` -) AS `t` -INNER JOIN `Orders` AS `o0` ON (`t`.`Key` = `o0`.`CustomerID` OR (`t`.`Key` IS NULL AND `o0`.`CustomerID` IS NULL)) AND (`t`.`LastOrderDate` = `o0`.`OrderDate` OR (`t`.`LastOrderDate` IS NULL AND `o0`.`OrderDate` IS NULL)) +) AS `o1` +INNER JOIN `Orders` AS `o0` ON (`o1`.`Key` = `o0`.`CustomerID` OR (`o1`.`Key` IS NULL AND `o0`.`CustomerID` IS NULL)) AND (`o1`.`LastOrderDate` = `o0`.`OrderDate` OR (`o1`.`LastOrderDate` IS NULL AND `o0`.`OrderDate` IS NULL)) """); } @@ -2736,22 +2785,22 @@ public override async Task GroupBy_aggregate_from_right_side_of_join(bool async) AssertSql( """ -SELECT `t1`.`CustomerID`, `t1`.`Address`, `t1`.`City`, `t1`.`CompanyName`, `t1`.`ContactName`, `t1`.`ContactTitle`, `t1`.`Country`, `t1`.`Fax`, `t1`.`Phone`, `t1`.`PostalCode`, `t1`.`Region`, `t1`.`Max` +SELECT `s0`.`CustomerID`, `s0`.`Address`, `s0`.`City`, `s0`.`CompanyName`, `s0`.`ContactName`, `s0`.`ContactTitle`, `s0`.`Country`, `s0`.`Fax`, `s0`.`Phone`, `s0`.`PostalCode`, `s0`.`Region`, `s0`.`Max` FROM ( - SELECT TOP 10 `t0`.`CustomerID`, `t0`.`Address`, `t0`.`City`, `t0`.`CompanyName`, `t0`.`ContactName`, `t0`.`ContactTitle`, `t0`.`Country`, `t0`.`Fax`, `t0`.`Phone`, `t0`.`PostalCode`, `t0`.`Region`, `t0`.`Max` + SELECT TOP 10 `s`.`CustomerID`, `s`.`Address`, `s`.`City`, `s`.`CompanyName`, `s`.`ContactName`, `s`.`ContactTitle`, `s`.`Country`, `s`.`Fax`, `s`.`Phone`, `s`.`PostalCode`, `s`.`Region`, `s`.`Max` FROM ( - SELECT TOP 20 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `t`.`Max` + SELECT TOP 20 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o0`.`Max` FROM `Customers` AS `c` INNER JOIN ( SELECT `o`.`CustomerID` AS `Key`, MAX(`o`.`OrderDate`) AS `Max` FROM `Orders` AS `o` GROUP BY `o`.`CustomerID` - ) AS `t` ON `c`.`CustomerID` = `t`.`Key` - ORDER BY `t`.`Max`, `c`.`CustomerID` - ) AS `t0` - ORDER BY `t0`.`Max` DESC, `t0`.`CustomerID` DESC -) AS `t1` -ORDER BY `t1`.`Max`, `t1`.`CustomerID` + ) AS `o0` ON `c`.`CustomerID` = `o0`.`Key` + ORDER BY `o0`.`Max`, `c`.`CustomerID` + ) AS `s` + ORDER BY `s`.`Max` DESC, `s`.`CustomerID` DESC +) AS `s0` +ORDER BY `s0`.`Max`, `s0`.`CustomerID` """); } @@ -2761,18 +2810,18 @@ public override async Task GroupBy_aggregate_join_another_GroupBy_aggregate(bool AssertSql( """ -SELECT `t`.`Key`, `t`.`Total`, `t0`.`ThatYear` +SELECT `o1`.`Key`, `o1`.`Total`, `o2`.`ThatYear` FROM ( SELECT `o`.`CustomerID` AS `Key`, COUNT(*) AS `Total` FROM `Orders` AS `o` GROUP BY `o`.`CustomerID` -) AS `t` +) AS `o1` INNER JOIN ( SELECT `o0`.`CustomerID` AS `Key`, COUNT(*) AS `ThatYear` FROM `Orders` AS `o0` WHERE DATEPART('yyyy', `o0`.`OrderDate`) = 1997 GROUP BY `o0`.`CustomerID` -) AS `t0` ON `t`.`Key` = `t0`.`Key` +) AS `o2` ON `o1`.`Key` = `o2`.`Key` """); } @@ -2781,21 +2830,21 @@ public override async Task GroupBy_aggregate_after_skip_0_take_0(bool async) await base.GroupBy_aggregate_after_skip_0_take_0(async); AssertSql( -""" -SELECT `t`.`CustomerID` AS `Key`, COUNT(*) AS `Total` + """ +SELECT `o0`.`CustomerID` AS `Key`, COUNT(*) AS `Total` FROM ( - SELECT `t1`.`CustomerID` + SELECT `o2`.`CustomerID` FROM ( - SELECT `t0`.`CustomerID` + SELECT `o1`.`CustomerID` FROM ( SELECT `o`.`CustomerID` FROM `Orders` AS `o` WHERE 0 = 1 - ) AS `t0` + ) AS `o1` WHERE 0 = 1 - ) AS `t1` -) AS `t` -GROUP BY `t`.`CustomerID` + ) AS `o2` +) AS `o0` +GROUP BY `o0`.`CustomerID` """); } @@ -2804,19 +2853,19 @@ public override async Task GroupBy_skip_0_take_0_aggregate(bool async) await base.GroupBy_skip_0_take_0_aggregate(async); AssertSql( -""" -SELECT `t0`.`Key`, `t0`.`Total` + """ +SELECT `o1`.`Key`, `o1`.`Total` FROM ( - SELECT `t`.`Key`, `t`.`Total` + SELECT `o0`.`Key`, `o0`.`Total` FROM ( SELECT `o`.`CustomerID` AS `Key`, COUNT(*) AS `Total` FROM `Orders` AS `o` WHERE `o`.`OrderID` > 10500 GROUP BY `o`.`CustomerID` HAVING 0 = 1 - ) AS `t` + ) AS `o0` WHERE 0 = 1 -) AS `t0` +) AS `o1` """); } @@ -2826,16 +2875,16 @@ public override async Task GroupBy_aggregate_followed_another_GroupBy_aggregate( AssertSql( """ -SELECT `t0`.`CustomerID` AS `Key`, COUNT(*) AS `Count` +SELECT `o1`.`CustomerID` AS `Key`, COUNT(*) AS `Count` FROM ( - SELECT `t`.`CustomerID` + SELECT `o0`.`CustomerID` FROM ( SELECT `o`.`CustomerID`, DATEPART('yyyy', `o`.`OrderDate`) AS `Year` FROM `Orders` AS `o` - ) AS `t` - GROUP BY `t`.`CustomerID`, `t`.`Year` -) AS `t0` -GROUP BY `t0`.`CustomerID` + ) AS `o0` + GROUP BY `o0`.`CustomerID`, `o0`.`Year` +) AS `o1` +GROUP BY `o1`.`CustomerID` """); } @@ -2850,9 +2899,9 @@ public override async Task GroupBy_aggregate_without_selectMany_selecting_first( SELECT MIN(`o`.`OrderID`) AS `c` FROM `Orders` AS `o` GROUP BY `o`.`CustomerID` -) AS `t`, +) AS `o1`, `Orders` AS `o0` -WHERE `o0`.`OrderID` = `t`.`c` +WHERE `o0`.`OrderID` = `o1`.`c` """); } @@ -2879,14 +2928,14 @@ public override async Task GroupBy_selecting_grouping_key_list(bool async) AssertSql( """ -SELECT `t`.`CustomerID`, `o0`.`CustomerID`, `o0`.`OrderID` +SELECT `o1`.`CustomerID`, `o0`.`CustomerID`, `o0`.`OrderID` FROM ( SELECT `o`.`CustomerID` FROM `Orders` AS `o` GROUP BY `o`.`CustomerID` -) AS `t` -LEFT JOIN `Orders` AS `o0` ON `t`.`CustomerID` = `o0`.`CustomerID` -ORDER BY `t`.`CustomerID` +) AS `o1` +LEFT JOIN `Orders` AS `o0` ON `o1`.`CustomerID` = `o0`.`CustomerID` +ORDER BY `o1`.`CustomerID` """); } @@ -2895,13 +2944,13 @@ public override async Task GroupBy_with_grouping_key_using_Like(bool isAsync) await base.GroupBy_with_grouping_key_using_Like(isAsync); AssertSql( -""" -SELECT `t`.`Key`, COUNT(*) AS `Count` + """ +SELECT `o0`.`Key`, COUNT(*) AS `Count` FROM ( SELECT IIF((`o`.`CustomerID` LIKE 'A%') AND `o`.`CustomerID` IS NOT NULL, TRUE, FALSE) AS `Key` FROM `Orders` AS `o` -) AS `t` -GROUP BY `t`.`Key` +) AS `o0` +GROUP BY `o0`.`Key` """); } @@ -2910,12 +2959,14 @@ public override async Task GroupBy_with_grouping_key_DateTime_Day(bool isAsync) await base.GroupBy_with_grouping_key_DateTime_Day(isAsync); AssertSql( - $@"SELECT `t`.`Key`, COUNT(*) AS `Count` + """ +SELECT `o0`.`Key`, COUNT(*) AS `Count` FROM ( SELECT DATEPART('d', `o`.`OrderDate`) AS `Key` FROM `Orders` AS `o` -) AS `t` -GROUP BY `t`.`Key`"); +) AS `o0` +GROUP BY `o0`.`Key` +"""); } public override async Task GroupBy_with_cast_inside_grouping_aggregate(bool isAsync) @@ -3050,15 +3101,15 @@ public override async Task GroupBy_scalar_subquery(bool async) AssertSql( """ -SELECT `t`.`Key`, COUNT(*) AS `Count` +SELECT `o0`.`Key`, COUNT(*) AS `Count` FROM ( SELECT ( SELECT TOP 1 `c`.`ContactName` FROM `Customers` AS `c` WHERE `c`.`CustomerID` = `o`.`CustomerID`) AS `Key` FROM `Orders` AS `o` -) AS `t` -GROUP BY `t`.`Key` +) AS `o0` +GROUP BY `o0`.`Key` """); } @@ -3207,15 +3258,15 @@ public override async Task Select_correlated_collection_after_GroupBy_aggregate_ AssertSql( """ -SELECT `t`.`CustomerID`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +SELECT `c0`.`CustomerID`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM ( SELECT `c`.`CustomerID` FROM `Customers` AS `c` GROUP BY `c`.`CustomerID` HAVING `c`.`CustomerID` LIKE 'F%' -) AS `t` -LEFT JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CustomerID` +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` """); } @@ -3225,15 +3276,15 @@ public override async Task Select_correlated_collection_after_GroupBy_aggregate_ AssertSql( """ -SELECT `t`.`CustomerID`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +SELECT `o1`.`CustomerID`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` FROM ( SELECT `o`.`CustomerID` FROM `Orders` AS `o` GROUP BY `o`.`CustomerID` HAVING `o`.`CustomerID` LIKE 'F%' -) AS `t` -LEFT JOIN `Orders` AS `o0` ON `t`.`CustomerID` = `o0`.`CustomerID` -ORDER BY `t`.`CustomerID` +) AS `o1` +LEFT JOIN `Orders` AS `o0` ON `o1`.`CustomerID` = `o0`.`CustomerID` +ORDER BY `o1`.`CustomerID` """); } @@ -3372,12 +3423,12 @@ public override async Task Final_GroupBy_complex_key_entity(bool async) AssertSql( """ -SELECT `t`.`City`, `t`.`Region`, `t`.`Constant`, `t`.`CustomerID`, `t`.`Address`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode` +SELECT `c0`.`City`, `c0`.`Region`, `c0`.`Constant`, `c0`.`CustomerID`, `c0`.`Address`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode` FROM ( SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, 1 AS `Constant` FROM `Customers` AS `c` -) AS `t` -ORDER BY `t`.`City`, `t`.`Region`, `t`.`Constant` +) AS `c0` +ORDER BY `c0`.`City`, `c0`.`Region`, `c0`.`Constant` """); } @@ -3387,12 +3438,12 @@ public override async Task Final_GroupBy_nominal_type_entity(bool async) AssertSql( """ -SELECT `t`.`City`, `t`.`Constant`, `t`.`CustomerID`, `t`.`Address`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region` +SELECT `c0`.`City`, `c0`.`Constant`, `c0`.`CustomerID`, `c0`.`Address`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` FROM ( SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, 1 AS `Constant` FROM `Customers` AS `c` -) AS `t` -ORDER BY `t`.`City`, `t`.`Constant` +) AS `c0` +ORDER BY `c0`.`City`, `c0`.`Constant` """); } @@ -3442,13 +3493,13 @@ public override async Task Final_GroupBy_property_entity_projecting_collection_c AssertSql( """ -SELECT `c`.`City`, `c`.`CustomerID`, `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate` +SELECT `c`.`City`, `c`.`CustomerID`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` FROM `Customers` AS `c` LEFT JOIN ( SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` WHERE `o`.`OrderID` < 11000 -) AS `t` ON `c`.`CustomerID` = `t`.`CustomerID` +) AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` WHERE `c`.`Country` = 'USA' ORDER BY `c`.`City`, `c`.`CustomerID` """); diff --git a/test/EFCore.Jet.FunctionalTests/Query/NorthwindIncludeNoTrackingQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/NorthwindIncludeNoTrackingQueryJetTest.cs index c91c91da..24c902ac 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/NorthwindIncludeNoTrackingQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/NorthwindIncludeNoTrackingQueryJetTest.cs @@ -38,31 +38,31 @@ public override async Task Include_duplicate_reference3(bool async) await base.Include_duplicate_reference3(async); AssertSql( -""" -SELECT `t1`.`OrderID`, `t1`.`CustomerID`, `t1`.`EmployeeID`, `t1`.`OrderDate`, `t1`.`OrderID0`, `t1`.`CustomerID0`, `t1`.`EmployeeID0`, `t1`.`OrderDate0`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + """ +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`CustomerID0`, `s`.`EmployeeID0`, `s`.`OrderDate0`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM ( - SELECT `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate`, `t0`.`OrderID` AS `OrderID0`, `t0`.`CustomerID` AS `CustomerID0`, `t0`.`EmployeeID` AS `EmployeeID0`, `t0`.`OrderDate` AS `OrderDate0` + SELECT `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `o2`.`OrderID` AS `OrderID0`, `o2`.`CustomerID` AS `CustomerID0`, `o2`.`EmployeeID` AS `EmployeeID0`, `o2`.`OrderDate` AS `OrderDate0` FROM ( SELECT TOP 2 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` ORDER BY `o`.`OrderID` - ) AS `t`, + ) AS `o1`, ( - SELECT `t1`.`OrderID`, `t1`.`CustomerID`, `t1`.`EmployeeID`, `t1`.`OrderDate` + SELECT `o4`.`OrderID`, `o4`.`CustomerID`, `o4`.`EmployeeID`, `o4`.`OrderDate` FROM ( - SELECT TOP 2 `t0`.`OrderID`, `t0`.`CustomerID`, `t0`.`EmployeeID`, `t0`.`OrderDate` + SELECT TOP 2 `o3`.`OrderID`, `o3`.`CustomerID`, `o3`.`EmployeeID`, `o3`.`OrderDate` FROM ( SELECT TOP 4 `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` FROM `Orders` AS `o0` ORDER BY `o0`.`OrderID` - ) AS `t0` - ORDER BY `t0`.`OrderID` DESC - ) AS `t1` - ORDER BY `t1`.`OrderID` - ) AS `t0` -) AS `t1` -LEFT JOIN `Customers` AS `c` ON `t1`.`CustomerID0` = `c`.`CustomerID` -ORDER BY `t1`.`OrderID` + ) AS `o3` + ORDER BY `o3`.`OrderID` DESC + ) AS `o4` + ORDER BY `o4`.`OrderID` + ) AS `o2` +) AS `s` +LEFT JOIN `Customers` AS `c` ON `s`.`CustomerID0` = `c`.`CustomerID` +ORDER BY `s`.`OrderID` """); } @@ -128,20 +128,20 @@ public override async Task Include_collection_then_include_collection_then_inclu await base.Include_collection_then_include_collection_then_include_reference(async); AssertSql( -""" -SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `t0`.`OrderID`, `t0`.`CustomerID`, `t0`.`EmployeeID`, `t0`.`OrderDate`, `t0`.`OrderID0`, `t0`.`ProductID`, `t0`.`Discount`, `t0`.`Quantity`, `t0`.`UnitPrice`, `t0`.`ProductID0`, `t0`.`Discontinued`, `t0`.`ProductName`, `t0`.`SupplierID`, `t0`.`UnitPrice0`, `t0`.`UnitsInStock` + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `s0`.`OrderID`, `s0`.`CustomerID`, `s0`.`EmployeeID`, `s0`.`OrderDate`, `s0`.`OrderID0`, `s0`.`ProductID`, `s0`.`Discount`, `s0`.`Quantity`, `s0`.`UnitPrice`, `s0`.`ProductID0`, `s0`.`Discontinued`, `s0`.`ProductName`, `s0`.`SupplierID`, `s0`.`UnitPrice0`, `s0`.`UnitsInStock` FROM `Customers` AS `c` LEFT JOIN ( - SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `t`.`OrderID` AS `OrderID0`, `t`.`ProductID`, `t`.`Discount`, `t`.`Quantity`, `t`.`UnitPrice`, `t`.`ProductID0`, `t`.`Discontinued`, `t`.`ProductName`, `t`.`SupplierID`, `t`.`UnitPrice0`, `t`.`UnitsInStock` + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `s`.`OrderID` AS `OrderID0`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice`, `s`.`ProductID0`, `s`.`Discontinued`, `s`.`ProductName`, `s`.`SupplierID`, `s`.`UnitPrice0`, `s`.`UnitsInStock` FROM `Orders` AS `o` LEFT JOIN ( SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `p`.`ProductID` AS `ProductID0`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice` AS `UnitPrice0`, `p`.`UnitsInStock` FROM `Order Details` AS `o0` INNER JOIN `Products` AS `p` ON `o0`.`ProductID` = `p`.`ProductID` - ) AS `t` ON `o`.`OrderID` = `t`.`OrderID` -) AS `t0` ON `c`.`CustomerID` = `t0`.`CustomerID` + ) AS `s` ON `o`.`OrderID` = `s`.`OrderID` +) AS `s0` ON `c`.`CustomerID` = `s0`.`CustomerID` WHERE `c`.`CustomerID` LIKE 'F%' -ORDER BY `c`.`CustomerID`, `t0`.`OrderID`, `t0`.`OrderID0`, `t0`.`ProductID` +ORDER BY `c`.`CustomerID`, `s0`.`OrderID`, `s0`.`OrderID0`, `s0`.`ProductID` """); } @@ -225,19 +225,19 @@ public override async Task Include_multi_level_collection_and_then_include_refer await base.Include_multi_level_collection_and_then_include_reference_predicate(async); AssertSql( -""" -SELECT `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate`, `t0`.`OrderID`, `t0`.`ProductID`, `t0`.`Discount`, `t0`.`Quantity`, `t0`.`UnitPrice`, `t0`.`ProductID0`, `t0`.`Discontinued`, `t0`.`ProductName`, `t0`.`SupplierID`, `t0`.`UnitPrice0`, `t0`.`UnitsInStock` + """ +SELECT `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `s`.`OrderID`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice`, `s`.`ProductID0`, `s`.`Discontinued`, `s`.`ProductName`, `s`.`SupplierID`, `s`.`UnitPrice0`, `s`.`UnitsInStock` FROM ( SELECT TOP 2 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` WHERE `o`.`OrderID` = 10248 -) AS `t` +) AS `o1` LEFT JOIN ( SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `p`.`ProductID` AS `ProductID0`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice` AS `UnitPrice0`, `p`.`UnitsInStock` FROM `Order Details` AS `o0` INNER JOIN `Products` AS `p` ON `o0`.`ProductID` = `p`.`ProductID` -) AS `t0` ON `t`.`OrderID` = `t0`.`OrderID` -ORDER BY `t`.`OrderID`, `t0`.`OrderID`, `t0`.`ProductID` +) AS `s` ON `o1`.`OrderID` = `s`.`OrderID` +ORDER BY `o1`.`OrderID`, `s`.`OrderID`, `s`.`ProductID` """); } @@ -260,19 +260,19 @@ public override async Task Include_collection_then_include_collection_predicate( await base.Include_collection_then_include_collection_predicate(async); AssertSql( -""" -SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `t0`.`OrderID`, `t0`.`CustomerID`, `t0`.`EmployeeID`, `t0`.`OrderDate`, `t0`.`OrderID0`, `t0`.`ProductID`, `t0`.`Discount`, `t0`.`Quantity`, `t0`.`UnitPrice` + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice` FROM ( SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` WHERE `c`.`CustomerID` = 'ALFKI' -) AS `t` +) AS `c0` LEFT JOIN ( SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID` AS `OrderID0`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` FROM `Orders` AS `o` LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` -) AS `t0` ON `t`.`CustomerID` = `t0`.`CustomerID` -ORDER BY `t`.`CustomerID`, `t0`.`OrderID`, `t0`.`OrderID0` +) AS `s` ON `c0`.`CustomerID` = `s`.`CustomerID` +ORDER BY `c0`.`CustomerID`, `s`.`OrderID`, `s`.`OrderID0` """); } @@ -296,16 +296,16 @@ public override async Task Include_collection_then_include_collection(bool async await base.Include_collection_then_include_collection(async); AssertSql( -""" -SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate`, `t`.`OrderID0`, `t`.`ProductID`, `t`.`Discount`, `t`.`Quantity`, `t`.`UnitPrice` + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice` FROM `Customers` AS `c` LEFT JOIN ( SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID` AS `OrderID0`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` FROM `Orders` AS `o` LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` -) AS `t` ON `c`.`CustomerID` = `t`.`CustomerID` +) AS `s` ON `c`.`CustomerID` = `s`.`CustomerID` WHERE `c`.`CustomerID` LIKE 'F%' -ORDER BY `c`.`CustomerID`, `t`.`OrderID`, `t`.`OrderID0` +ORDER BY `c`.`CustomerID`, `s`.`OrderID`, `s`.`OrderID0` """); } @@ -399,31 +399,31 @@ public override async Task Include_duplicate_reference2(bool async) await base.Include_duplicate_reference2(async); AssertSql( -""" -SELECT `t1`.`OrderID`, `t1`.`CustomerID`, `t1`.`EmployeeID`, `t1`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `t1`.`OrderID0`, `t1`.`CustomerID0`, `t1`.`EmployeeID0`, `t1`.`OrderDate0` + """ +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `s`.`OrderID0`, `s`.`CustomerID0`, `s`.`EmployeeID0`, `s`.`OrderDate0` FROM ( - SELECT `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate`, `t0`.`OrderID` AS `OrderID0`, `t0`.`CustomerID` AS `CustomerID0`, `t0`.`EmployeeID` AS `EmployeeID0`, `t0`.`OrderDate` AS `OrderDate0` + SELECT `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `o2`.`OrderID` AS `OrderID0`, `o2`.`CustomerID` AS `CustomerID0`, `o2`.`EmployeeID` AS `EmployeeID0`, `o2`.`OrderDate` AS `OrderDate0` FROM ( SELECT TOP 2 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` ORDER BY `o`.`OrderID` - ) AS `t`, + ) AS `o1`, ( - SELECT `t1`.`OrderID`, `t1`.`CustomerID`, `t1`.`EmployeeID`, `t1`.`OrderDate` + SELECT `o4`.`OrderID`, `o4`.`CustomerID`, `o4`.`EmployeeID`, `o4`.`OrderDate` FROM ( - SELECT TOP 2 `t0`.`OrderID`, `t0`.`CustomerID`, `t0`.`EmployeeID`, `t0`.`OrderDate` + SELECT TOP 2 `o3`.`OrderID`, `o3`.`CustomerID`, `o3`.`EmployeeID`, `o3`.`OrderDate` FROM ( SELECT TOP 4 `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` FROM `Orders` AS `o0` ORDER BY `o0`.`OrderID` - ) AS `t0` - ORDER BY `t0`.`OrderID` DESC - ) AS `t1` - ORDER BY `t1`.`OrderID` - ) AS `t0` -) AS `t1` -LEFT JOIN `Customers` AS `c` ON `t1`.`CustomerID` = `c`.`CustomerID` -ORDER BY `t1`.`OrderID` + ) AS `o3` + ORDER BY `o3`.`OrderID` DESC + ) AS `o4` + ORDER BY `o4`.`OrderID` + ) AS `o2` +) AS `s` +LEFT JOIN `Customers` AS `c` ON `s`.`CustomerID` = `c`.`CustomerID` +ORDER BY `s`.`OrderID` """); } @@ -432,15 +432,15 @@ public override async Task Include_collection_order_by_non_key_with_take(bool as await base.Include_collection_order_by_non_key_with_take(async); AssertSql( -""" -SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM ( SELECT TOP 10 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`ContactTitle` -) AS `t` -LEFT JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`ContactTitle`, `t`.`CustomerID` +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`ContactTitle`, `c0`.`CustomerID` """); } @@ -505,16 +505,16 @@ public override async Task Include_list(bool async) await base.Include_list(async); AssertSql( -""" -SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock`, `t`.`OrderID`, `t`.`ProductID`, `t`.`Discount`, `t`.`Quantity`, `t`.`UnitPrice`, `t`.`OrderID0`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate` + """ +SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock`, `s`.`OrderID`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice`, `s`.`OrderID0`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate` FROM `Products` AS `p` LEFT JOIN ( SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID` AS `OrderID0`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` FROM `Order Details` AS `o` INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` -) AS `t` ON `p`.`ProductID` = `t`.`ProductID` +) AS `s` ON `p`.`ProductID` = `s`.`ProductID` WHERE (`p`.`ProductID` MOD 17) = 5 AND `p`.`UnitPrice` < 20.0 -ORDER BY `p`.`ProductID`, `t`.`OrderID`, `t`.`ProductID` +ORDER BY `p`.`ProductID`, `s`.`OrderID`, `s`.`ProductID` """); } @@ -538,24 +538,24 @@ public override async Task Multi_level_includes_are_applied_with_skip(bool async await base.Multi_level_includes_are_applied_with_skip(async); AssertSql( -""" -SELECT `t0`.`CustomerID`, `t1`.`OrderID`, `t1`.`CustomerID`, `t1`.`EmployeeID`, `t1`.`OrderDate`, `t1`.`OrderID0`, `t1`.`ProductID`, `t1`.`Discount`, `t1`.`Quantity`, `t1`.`UnitPrice` + """ +SELECT `c1`.`CustomerID`, `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice` FROM ( - SELECT TOP 1 `t`.`CustomerID` + SELECT TOP 1 `c0`.`CustomerID` FROM ( SELECT TOP 2 `c`.`CustomerID` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'A%' ORDER BY `c`.`CustomerID` - ) AS `t` - ORDER BY `t`.`CustomerID` DESC -) AS `t0` + ) AS `c0` + ORDER BY `c0`.`CustomerID` DESC +) AS `c1` LEFT JOIN ( SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID` AS `OrderID0`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` FROM `Orders` AS `o` LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` -) AS `t1` ON `t0`.`CustomerID` = `t1`.`CustomerID` -ORDER BY `t0`.`CustomerID`, `t1`.`OrderID`, `t1`.`OrderID0` +) AS `s` ON `c1`.`CustomerID` = `s`.`CustomerID` +ORDER BY `c1`.`CustomerID`, `s`.`OrderID`, `s`.`OrderID0` """); } @@ -623,20 +623,20 @@ public override async Task Include_where_skip_take_projection(bool async) await base.Include_where_skip_take_projection(async); AssertSql( -""" + """ SELECT `o0`.`CustomerID` FROM ( - SELECT TOP 2 `t0`.`OrderID`, `t0`.`ProductID` + SELECT TOP 2 `o2`.`OrderID`, `o2`.`ProductID` FROM ( SELECT TOP 3 `o`.`OrderID`, `o`.`ProductID` FROM `Order Details` AS `o` WHERE `o`.`Quantity` = 10 ORDER BY `o`.`OrderID`, `o`.`ProductID` - ) AS `t0` - ORDER BY `t0`.`OrderID` DESC, `t0`.`ProductID` DESC -) AS `t` -INNER JOIN `Orders` AS `o0` ON `t`.`OrderID` = `o0`.`OrderID` -ORDER BY `t`.`OrderID`, `t`.`ProductID` + ) AS `o2` + ORDER BY `o2`.`OrderID` DESC, `o2`.`ProductID` DESC +) AS `o1` +INNER JOIN `Orders` AS `o0` ON `o1`.`OrderID` = `o0`.`OrderID` +ORDER BY `o1`.`OrderID`, `o1`.`ProductID` """); } @@ -690,15 +690,15 @@ public override async Task Include_collection_on_additional_from_clause2(bool as await base.Include_collection_on_additional_from_clause2(async); AssertSql( -""" -SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region` + """ +SELECT `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region` FROM ( SELECT TOP 5 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`CustomerID` -) AS `t`, +) AS `c1`, `Customers` AS `c0` -ORDER BY `t`.`CustomerID` +ORDER BY `c1`.`CustomerID` """); } @@ -752,14 +752,14 @@ public override async Task Include_collection_take_no_order_by(bool async) await base.Include_collection_take_no_order_by(async); AssertSql( -""" -SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM ( SELECT TOP 10 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` -) AS `t` -LEFT JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CustomerID` +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` """); } @@ -788,24 +788,24 @@ public override async Task Multi_level_includes_are_applied_with_take(bool async await base.Multi_level_includes_are_applied_with_take(async); AssertSql( -""" -SELECT `t0`.`CustomerID`, `t1`.`OrderID`, `t1`.`CustomerID`, `t1`.`EmployeeID`, `t1`.`OrderDate`, `t1`.`OrderID0`, `t1`.`ProductID`, `t1`.`Discount`, `t1`.`Quantity`, `t1`.`UnitPrice` + """ +SELECT `c1`.`CustomerID`, `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice` FROM ( - SELECT TOP 1 `t`.`CustomerID` + SELECT TOP 1 `c0`.`CustomerID` FROM ( SELECT TOP 1 `c`.`CustomerID` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'A%' ORDER BY `c`.`CustomerID` - ) AS `t` - ORDER BY `t`.`CustomerID` -) AS `t0` + ) AS `c0` + ORDER BY `c0`.`CustomerID` +) AS `c1` LEFT JOIN ( SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID` AS `OrderID0`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` FROM `Orders` AS `o` LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` -) AS `t1` ON `t0`.`CustomerID` = `t1`.`CustomerID` -ORDER BY `t0`.`CustomerID`, `t1`.`OrderID`, `t1`.`OrderID0` +) AS `s` ON `c1`.`CustomerID` = `s`.`CustomerID` +ORDER BY `c1`.`CustomerID`, `s`.`OrderID`, `s`.`OrderID0` """); } @@ -815,9 +815,9 @@ public override async Task Then_include_collection_order_by_collection_column(bo AssertSql( """ -SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `t0`.`OrderID`, `t0`.`CustomerID`, `t0`.`EmployeeID`, `t0`.`OrderDate`, `t0`.`OrderID0`, `t0`.`ProductID`, `t0`.`Discount`, `t0`.`Quantity`, `t0`.`UnitPrice` +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice` FROM ( - SELECT TOP 1 `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `t`.`c` + SELECT TOP 1 `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region`, `c1`.`c` FROM ( SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, ( SELECT TOP 1 `o`.`OrderDate` @@ -826,15 +826,15 @@ SELECT TOP 1 `o`.`OrderDate` ORDER BY `o`.`OrderDate` DESC) AS `c` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'W%' - ) AS `t` - ORDER BY `t`.`c` DESC -) AS `t` + ) AS `c1` + ORDER BY `c1`.`c` DESC +) AS `c0` LEFT JOIN ( SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `o1`.`OrderID` AS `OrderID0`, `o1`.`ProductID`, `o1`.`Discount`, `o1`.`Quantity`, `o1`.`UnitPrice` FROM `Orders` AS `o0` LEFT JOIN `Order Details` AS `o1` ON `o0`.`OrderID` = `o1`.`OrderID` -) AS `t0` ON `t`.`CustomerID` = `t0`.`CustomerID` -ORDER BY `t`.`c` DESC, `t`.`CustomerID`, `t0`.`OrderID`, `t0`.`OrderID0` +) AS `s` ON `c0`.`CustomerID` = `s`.`CustomerID` +ORDER BY `c0`.`c` DESC, `c0`.`CustomerID`, `s`.`OrderID`, `s`.`OrderID0` """); } @@ -940,15 +940,15 @@ public override async Task Include_with_take(bool async) await base.Include_with_take(async); AssertSql( -""" -SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM ( SELECT TOP 10 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`ContactName` DESC -) AS `t` -LEFT JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`ContactName` DESC, `t`.`CustomerID` +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`ContactName` DESC, `c0`.`CustomerID` """); } @@ -957,21 +957,21 @@ public override async Task Include_collection_principal_already_tracked(bool asy await base.Include_collection_principal_already_tracked(async); AssertSql( -""" + """ SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` WHERE `c`.`CustomerID` = 'ALFKI' """, -// -""" -SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + // + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM ( SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` WHERE `c`.`CustomerID` = 'ALFKI' -) AS `t` -LEFT JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CustomerID` +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` """); } @@ -1052,32 +1052,32 @@ public override async Task Include_duplicate_reference(bool async) await base.Include_duplicate_reference(async); AssertSql( -""" -SELECT `t1`.`OrderID`, `t1`.`CustomerID`, `t1`.`EmployeeID`, `t1`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `t1`.`OrderID0`, `t1`.`CustomerID0`, `t1`.`EmployeeID0`, `t1`.`OrderDate0`, `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + """ +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `s`.`OrderID0`, `s`.`CustomerID0`, `s`.`EmployeeID0`, `s`.`OrderDate0`, `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` FROM (( - SELECT `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate`, `t0`.`OrderID` AS `OrderID0`, `t0`.`CustomerID` AS `CustomerID0`, `t0`.`EmployeeID` AS `EmployeeID0`, `t0`.`OrderDate` AS `OrderDate0` + SELECT `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `o2`.`OrderID` AS `OrderID0`, `o2`.`CustomerID` AS `CustomerID0`, `o2`.`EmployeeID` AS `EmployeeID0`, `o2`.`OrderDate` AS `OrderDate0` FROM ( SELECT TOP 2 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` ORDER BY `o`.`CustomerID`, `o`.`OrderID` - ) AS `t`, + ) AS `o1`, ( - SELECT `t1`.`OrderID`, `t1`.`CustomerID`, `t1`.`EmployeeID`, `t1`.`OrderDate` + SELECT `o4`.`OrderID`, `o4`.`CustomerID`, `o4`.`EmployeeID`, `o4`.`OrderDate` FROM ( - SELECT TOP 2 `t0`.`OrderID`, `t0`.`CustomerID`, `t0`.`EmployeeID`, `t0`.`OrderDate` + SELECT TOP 2 `o3`.`OrderID`, `o3`.`CustomerID`, `o3`.`EmployeeID`, `o3`.`OrderDate` FROM ( SELECT TOP 4 `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` FROM `Orders` AS `o0` ORDER BY `o0`.`CustomerID`, `o0`.`OrderID` - ) AS `t0` - ORDER BY `t0`.`CustomerID` DESC, `t0`.`OrderID` DESC - ) AS `t1` - ORDER BY `t1`.`CustomerID`, `t1`.`OrderID` - ) AS `t0` -) AS `t1` -LEFT JOIN `Customers` AS `c` ON `t1`.`CustomerID` = `c`.`CustomerID`) -LEFT JOIN `Customers` AS `c0` ON `t1`.`CustomerID0` = `c0`.`CustomerID` -ORDER BY `t1`.`CustomerID`, `t1`.`OrderID` + ) AS `o3` + ORDER BY `o3`.`CustomerID` DESC, `o3`.`OrderID` DESC + ) AS `o4` + ORDER BY `o4`.`CustomerID`, `o4`.`OrderID` + ) AS `o2` +) AS `s` +LEFT JOIN `Customers` AS `c` ON `s`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Customers` AS `c0` ON `s`.`CustomerID0` = `c0`.`CustomerID` +ORDER BY `s`.`CustomerID`, `s`.`OrderID` """); } @@ -1337,16 +1337,16 @@ public override async Task Include_collection_then_reference(bool async) await base.Include_collection_then_reference(async); AssertSql( -""" -SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock`, `t`.`OrderID`, `t`.`ProductID`, `t`.`Discount`, `t`.`Quantity`, `t`.`UnitPrice`, `t`.`OrderID0`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate` + """ +SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock`, `s`.`OrderID`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice`, `s`.`OrderID0`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate` FROM `Products` AS `p` LEFT JOIN ( SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID` AS `OrderID0`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` FROM `Order Details` AS `o` INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` -) AS `t` ON `p`.`ProductID` = `t`.`ProductID` +) AS `s` ON `p`.`ProductID` = `s`.`ProductID` WHERE (`p`.`ProductID` MOD 17) = 5 -ORDER BY `p`.`ProductID`, `t`.`OrderID`, `t`.`ProductID` +ORDER BY `p`.`ProductID`, `s`.`OrderID`, `s`.`ProductID` """); } @@ -1369,28 +1369,28 @@ public override async Task Multi_level_includes_are_applied_with_skip_take(bool await base.Multi_level_includes_are_applied_with_skip_take(async); AssertSql( -""" -SELECT `t1`.`CustomerID`, `t2`.`OrderID`, `t2`.`CustomerID`, `t2`.`EmployeeID`, `t2`.`OrderDate`, `t2`.`OrderID0`, `t2`.`ProductID`, `t2`.`Discount`, `t2`.`Quantity`, `t2`.`UnitPrice` + """ +SELECT `c2`.`CustomerID`, `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice` FROM ( - SELECT TOP 1 `t`.`CustomerID` + SELECT TOP 1 `c0`.`CustomerID` FROM ( - SELECT TOP 1 `t0`.`CustomerID` + SELECT TOP 1 `c1`.`CustomerID` FROM ( SELECT TOP 2 `c`.`CustomerID` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'A%' ORDER BY `c`.`CustomerID` - ) AS `t0` - ORDER BY `t0`.`CustomerID` DESC - ) AS `t` - ORDER BY `t`.`CustomerID` -) AS `t1` + ) AS `c1` + ORDER BY `c1`.`CustomerID` DESC + ) AS `c0` + ORDER BY `c0`.`CustomerID` +) AS `c2` LEFT JOIN ( SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID` AS `OrderID0`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` FROM `Orders` AS `o` LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` -) AS `t2` ON `t1`.`CustomerID` = `t2`.`CustomerID` -ORDER BY `t1`.`CustomerID`, `t2`.`OrderID`, `t2`.`OrderID0` +) AS `s` ON `c2`.`CustomerID` = `s`.`CustomerID` +ORDER BY `c2`.`CustomerID`, `s`.`OrderID`, `s`.`OrderID0` """); } @@ -1400,9 +1400,9 @@ public override async Task Include_collection_order_by_collection_column(bool as AssertSql( """ -SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` FROM ( - SELECT TOP 1 `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `t`.`c` + SELECT TOP 1 `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region`, `c1`.`c` FROM ( SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, ( SELECT TOP 1 `o`.`OrderDate` @@ -1411,11 +1411,11 @@ SELECT TOP 1 `o`.`OrderDate` ORDER BY `o`.`OrderDate` DESC) AS `c` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'W%' - ) AS `t` - ORDER BY `t`.`c` DESC -) AS `t` -LEFT JOIN `Orders` AS `o0` ON `t`.`CustomerID` = `o0`.`CustomerID` -ORDER BY `t`.`c` DESC, `t`.`CustomerID` + ) AS `c1` + ORDER BY `c1`.`c` DESC +) AS `c0` +LEFT JOIN `Orders` AS `o0` ON `c0`.`CustomerID` = `o0`.`CustomerID` +ORDER BY `c0`.`c` DESC, `c0`.`CustomerID` """); } @@ -1424,21 +1424,21 @@ public override async Task Include_collection_dependent_already_tracked(bool asy await base.Include_collection_dependent_already_tracked(async); AssertSql( -""" + """ SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` WHERE `o`.`CustomerID` = 'ALFKI' """, -// -""" -SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + // + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM ( SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` WHERE `c`.`CustomerID` = 'ALFKI' -) AS `t` -LEFT JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CustomerID` +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` """); } @@ -1465,15 +1465,15 @@ public override async Task Include_collection_orderby_take(bool async) await base.Include_collection_orderby_take(async); AssertSql( -""" -SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM ( SELECT TOP 5 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`CustomerID` -) AS `t` -LEFT JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CustomerID` +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` """); } @@ -1546,15 +1546,15 @@ public override async Task Include_collection_order_by_non_key_with_first_or_def await base.Include_collection_order_by_non_key_with_first_or_default(async); AssertSql( -""" -SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM ( SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`CompanyName` DESC -) AS `t` -LEFT JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CompanyName` DESC, `t`.`CustomerID` +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CompanyName` DESC, `c0`.`CustomerID` """); } @@ -1576,14 +1576,14 @@ public override async Task Include_reference_distinct_is_server_evaluated(bool a await base.Include_reference_distinct_is_server_evaluated(async); AssertSql( -""" -SELECT `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + """ +SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM ( SELECT DISTINCT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` WHERE `o`.`OrderID` < 10250 -) AS `t` -LEFT JOIN `Customers` AS `c` ON `t`.`CustomerID` = `c`.`CustomerID` +) AS `o0` +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` """); } @@ -1592,17 +1592,17 @@ public override async Task Include_closes_reader(bool async) await base.Include_closes_reader(async); AssertSql( -""" -SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM ( SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` -) AS `t` -LEFT JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CustomerID` +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` """, -// -""" + // + """ SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` FROM `Products` AS `p` """); @@ -1662,15 +1662,15 @@ public override async Task Include_collection_single_or_default_no_result(bool a await base.Include_collection_single_or_default_no_result(async); AssertSql( -""" -SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM ( SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` WHERE `c`.`CustomerID` = 'ALFKI ?' -) AS `t` -LEFT JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CustomerID` +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` """); } @@ -1725,15 +1725,15 @@ public override async Task Include_collection_distinct_is_server_evaluated(bool await base.Include_collection_distinct_is_server_evaluated(async); AssertSql( -""" -SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM ( SELECT DISTINCT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'A%' -) AS `t` -LEFT JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CustomerID` +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` """); } @@ -1768,15 +1768,15 @@ public override async Task Include_collection_with_last(bool async) await base.Include_collection_with_last(async); AssertSql( -""" -SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM ( SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`CompanyName` DESC -) AS `t` -LEFT JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CompanyName` DESC, `t`.`CustomerID` +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CompanyName` DESC, `c0`.`CustomerID` """); } diff --git a/test/EFCore.Jet.FunctionalTests/Query/NorthwindIncludeQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/NorthwindIncludeQueryJetTest.cs index 600a0123..fb462475 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/NorthwindIncludeQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/NorthwindIncludeQueryJetTest.cs @@ -30,15 +30,17 @@ public override async Task Include_list(bool async) await base.Include_list(async); AssertSql( - $@"SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock`, `t`.`OrderID`, `t`.`ProductID`, `t`.`Discount`, `t`.`Quantity`, `t`.`UnitPrice`, `t`.`OrderID0`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate` + """ +SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock`, `s`.`OrderID`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice`, `s`.`OrderID0`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate` FROM `Products` AS `p` LEFT JOIN ( SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID` AS `OrderID0`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` FROM `Order Details` AS `o` INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` -) AS `t` ON `p`.`ProductID` = `t`.`ProductID` +) AS `s` ON `p`.`ProductID` = `s`.`ProductID` WHERE (`p`.`ProductID` MOD 17) = 5 AND `p`.`UnitPrice` < 20.0 -ORDER BY `p`.`ProductID`, `t`.`OrderID`, `t`.`ProductID`"); +ORDER BY `p`.`ProductID`, `s`.`OrderID`, `s`.`ProductID` +"""); } public override async Task Include_reference(bool async) @@ -82,14 +84,16 @@ public override async Task Include_collection_with_last(bool async) await base.Include_collection_with_last(async); AssertSql( - $@"SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM ( SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`CompanyName` DESC -) AS `t` -LEFT JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CompanyName` DESC, `t`.`CustomerID`"); +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CompanyName` DESC, `c0`.`CustomerID` +"""); } public override async Task Include_collection_skip_no_order_by(bool async) @@ -120,13 +124,15 @@ public override async Task Include_collection_take_no_order_by(bool async) if (SupportsOffset) { AssertSql( - $@"SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM ( SELECT TOP 10 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` -) AS `t` -LEFT JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CustomerID`"); +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` +"""); } } @@ -225,15 +231,17 @@ public override async Task Include_multi_level_reference_and_collection_predicat await base.Include_multi_level_reference_and_collection_predicate(async); AssertSql( - $@"SELECT `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate`, `t`.`CustomerID0`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` + """ +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`CustomerID0`, `s`.`Address`, `s`.`City`, `s`.`CompanyName`, `s`.`ContactName`, `s`.`ContactTitle`, `s`.`Country`, `s`.`Fax`, `s`.`Phone`, `s`.`PostalCode`, `s`.`Region`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` FROM ( SELECT TOP 2 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID` AS `CustomerID0`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Orders` AS `o` LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` WHERE `o`.`OrderID` = 10248 -) AS `t` -LEFT JOIN `Orders` AS `o0` ON `t`.`CustomerID0` = `o0`.`CustomerID` -ORDER BY `t`.`OrderID`, `t`.`CustomerID0`"); +) AS `s` +LEFT JOIN `Orders` AS `o0` ON `s`.`CustomerID0` = `o0`.`CustomerID` +ORDER BY `s`.`OrderID`, `s`.`CustomerID0` +"""); } public override async Task Include_multi_level_collection_and_then_include_reference_predicate(bool async) @@ -241,18 +249,20 @@ public override async Task Include_multi_level_collection_and_then_include_refer await base.Include_multi_level_collection_and_then_include_reference_predicate(async); AssertSql( - $@"SELECT `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate`, `t0`.`OrderID`, `t0`.`ProductID`, `t0`.`Discount`, `t0`.`Quantity`, `t0`.`UnitPrice`, `t0`.`ProductID0`, `t0`.`Discontinued`, `t0`.`ProductName`, `t0`.`SupplierID`, `t0`.`UnitPrice0`, `t0`.`UnitsInStock` + """ +SELECT `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `s`.`OrderID`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice`, `s`.`ProductID0`, `s`.`Discontinued`, `s`.`ProductName`, `s`.`SupplierID`, `s`.`UnitPrice0`, `s`.`UnitsInStock` FROM ( SELECT TOP 2 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` WHERE `o`.`OrderID` = 10248 -) AS `t` +) AS `o1` LEFT JOIN ( SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `p`.`ProductID` AS `ProductID0`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice` AS `UnitPrice0`, `p`.`UnitsInStock` FROM `Order Details` AS `o0` INNER JOIN `Products` AS `p` ON `o0`.`ProductID` = `p`.`ProductID` -) AS `t0` ON `t`.`OrderID` = `t0`.`OrderID` -ORDER BY `t`.`OrderID`, `t0`.`OrderID`, `t0`.`ProductID`"); +) AS `s` ON `o1`.`OrderID` = `s`.`OrderID` +ORDER BY `o1`.`OrderID`, `s`.`OrderID`, `s`.`ProductID` +"""); } public override async Task Include_collection_alias_generation(bool async) @@ -275,9 +285,9 @@ public override async Task Include_collection_order_by_collection_column(bool as AssertSql( """ -SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` FROM ( - SELECT TOP 1 `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `t`.`c` + SELECT TOP 1 `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region`, `c1`.`c` FROM ( SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, ( SELECT TOP 1 `o`.`OrderDate` @@ -286,11 +296,11 @@ SELECT TOP 1 `o`.`OrderDate` ORDER BY `o`.`OrderDate` DESC) AS `c` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'W%' - ) AS `t` - ORDER BY `t`.`c` DESC -) AS `t` -LEFT JOIN `Orders` AS `o0` ON `t`.`CustomerID` = `o0`.`CustomerID` -ORDER BY `t`.`c` DESC, `t`.`CustomerID` + ) AS `c1` + ORDER BY `c1`.`c` DESC +) AS `c0` +LEFT JOIN `Orders` AS `o0` ON `c0`.`CustomerID` = `o0`.`CustomerID` +ORDER BY `c0`.`c` DESC, `c0`.`CustomerID` """); } @@ -323,14 +333,16 @@ public override async Task Include_collection_order_by_non_key_with_take(bool as await base.Include_collection_order_by_non_key_with_take(async); AssertSql( - $@"SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM ( SELECT TOP 10 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`ContactTitle` -) AS `t` -LEFT JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`ContactTitle`, `t`.`CustomerID`"); +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`ContactTitle`, `c0`.`CustomerID` +"""); } public override async Task Include_collection_order_by_non_key_with_skip(bool async) @@ -359,14 +371,16 @@ public override async Task Include_collection_order_by_non_key_with_first_or_def await base.Include_collection_order_by_non_key_with_first_or_default(async); AssertSql( - $@"SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM ( SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`CompanyName` DESC -) AS `t` -LEFT JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CompanyName` DESC, `t`.`CustomerID`"); +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CompanyName` DESC, `c0`.`CustomerID` +"""); } public override async Task Include_collection_order_by_subquery(bool async) @@ -398,18 +412,22 @@ public override async Task Include_collection_principal_already_tracked(bool asy await base.Include_collection_principal_already_tracked(async); AssertSql( - $@"SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + """ +SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` -WHERE `c`.`CustomerID` = 'ALFKI'", +WHERE `c`.`CustomerID` = 'ALFKI' +""", // - $@"SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM ( SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` WHERE `c`.`CustomerID` = 'ALFKI' -) AS `t` -LEFT JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CustomerID`"); +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` +"""); } public override async Task Include_collection_with_filter(bool async) @@ -442,15 +460,15 @@ public override async Task Include_collection_then_include_collection(bool async AssertSql( """ -SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate`, `t`.`OrderID0`, `t`.`ProductID`, `t`.`Discount`, `t`.`Quantity`, `t`.`UnitPrice` +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice` FROM `Customers` AS `c` LEFT JOIN ( SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID` AS `OrderID0`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` FROM `Orders` AS `o` LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` -) AS `t` ON `c`.`CustomerID` = `t`.`CustomerID` +) AS `s` ON `c`.`CustomerID` = `s`.`CustomerID` WHERE `c`.`CustomerID` LIKE 'F%' -ORDER BY `c`.`CustomerID`, `t`.`OrderID`, `t`.`OrderID0` +ORDER BY `c`.`CustomerID`, `s`.`OrderID`, `s`.`OrderID0` """); } @@ -460,19 +478,19 @@ public override async Task Include_collection_then_include_collection_then_inclu AssertSql( """ -SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `t0`.`OrderID`, `t0`.`CustomerID`, `t0`.`EmployeeID`, `t0`.`OrderDate`, `t0`.`OrderID0`, `t0`.`ProductID`, `t0`.`Discount`, `t0`.`Quantity`, `t0`.`UnitPrice`, `t0`.`ProductID0`, `t0`.`Discontinued`, `t0`.`ProductName`, `t0`.`SupplierID`, `t0`.`UnitPrice0`, `t0`.`UnitsInStock` +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `s0`.`OrderID`, `s0`.`CustomerID`, `s0`.`EmployeeID`, `s0`.`OrderDate`, `s0`.`OrderID0`, `s0`.`ProductID`, `s0`.`Discount`, `s0`.`Quantity`, `s0`.`UnitPrice`, `s0`.`ProductID0`, `s0`.`Discontinued`, `s0`.`ProductName`, `s0`.`SupplierID`, `s0`.`UnitPrice0`, `s0`.`UnitsInStock` FROM `Customers` AS `c` LEFT JOIN ( - SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `t`.`OrderID` AS `OrderID0`, `t`.`ProductID`, `t`.`Discount`, `t`.`Quantity`, `t`.`UnitPrice`, `t`.`ProductID0`, `t`.`Discontinued`, `t`.`ProductName`, `t`.`SupplierID`, `t`.`UnitPrice0`, `t`.`UnitsInStock` + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `s`.`OrderID` AS `OrderID0`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice`, `s`.`ProductID0`, `s`.`Discontinued`, `s`.`ProductName`, `s`.`SupplierID`, `s`.`UnitPrice0`, `s`.`UnitsInStock` FROM `Orders` AS `o` LEFT JOIN ( SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `p`.`ProductID` AS `ProductID0`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice` AS `UnitPrice0`, `p`.`UnitsInStock` FROM `Order Details` AS `o0` INNER JOIN `Products` AS `p` ON `o0`.`ProductID` = `p`.`ProductID` - ) AS `t` ON `o`.`OrderID` = `t`.`OrderID` -) AS `t0` ON `c`.`CustomerID` = `t0`.`CustomerID` + ) AS `s` ON `o`.`OrderID` = `s`.`OrderID` +) AS `s0` ON `c`.`CustomerID` = `s0`.`CustomerID` WHERE `c`.`CustomerID` LIKE 'F%' -ORDER BY `c`.`CustomerID`, `t0`.`OrderID`, `t0`.`OrderID0`, `t0`.`ProductID` +ORDER BY `c`.`CustomerID`, `s0`.`OrderID`, `s0`.`OrderID0`, `s0`.`ProductID` """); } @@ -706,14 +724,16 @@ public override async Task Include_collection_on_additional_from_clause2(bool as await base.Include_collection_on_additional_from_clause2(async); AssertSql( - $@"SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region` + """ +SELECT `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region` FROM ( SELECT TOP 5 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`CustomerID` -) AS `t`, +) AS `c1`, `Customers` AS `c0` -ORDER BY `t`.`CustomerID`"); +ORDER BY `c1`.`CustomerID` +"""); } public override async Task Include_where_skip_take_projection(bool async) @@ -723,20 +743,20 @@ public override async Task Include_where_skip_take_projection(bool async) if (SupportsOffset) { AssertSql( -""" + """ SELECT `o0`.`CustomerID` FROM ( - SELECT TOP 2 `t0`.`OrderID`, `t0`.`ProductID` + SELECT TOP 2 `o2`.`OrderID`, `o2`.`ProductID` FROM ( SELECT TOP 3 `o`.`OrderID`, `o`.`ProductID` FROM `Order Details` AS `o` WHERE `o`.`Quantity` = 10 ORDER BY `o`.`OrderID`, `o`.`ProductID` - ) AS `t0` - ORDER BY `t0`.`OrderID` DESC, `t0`.`ProductID` DESC -) AS `t` -INNER JOIN `Orders` AS `o0` ON `t`.`OrderID` = `o0`.`OrderID` -ORDER BY `t`.`OrderID`, `t`.`ProductID` + ) AS `o2` + ORDER BY `o2`.`OrderID` DESC, `o2`.`ProductID` DESC +) AS `o1` +INNER JOIN `Orders` AS `o0` ON `o1`.`OrderID` = `o0`.`OrderID` +ORDER BY `o1`.`OrderID`, `o1`.`ProductID` """); } } @@ -803,32 +823,32 @@ public override async Task Include_duplicate_reference(bool async) if (SupportsOffset) { AssertSql( -""" -SELECT `t1`.`OrderID`, `t1`.`CustomerID`, `t1`.`EmployeeID`, `t1`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `t1`.`OrderID0`, `t1`.`CustomerID0`, `t1`.`EmployeeID0`, `t1`.`OrderDate0`, `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + """ +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `s`.`OrderID0`, `s`.`CustomerID0`, `s`.`EmployeeID0`, `s`.`OrderDate0`, `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` FROM (( - SELECT `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate`, `t0`.`OrderID` AS `OrderID0`, `t0`.`CustomerID` AS `CustomerID0`, `t0`.`EmployeeID` AS `EmployeeID0`, `t0`.`OrderDate` AS `OrderDate0` + SELECT `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `o2`.`OrderID` AS `OrderID0`, `o2`.`CustomerID` AS `CustomerID0`, `o2`.`EmployeeID` AS `EmployeeID0`, `o2`.`OrderDate` AS `OrderDate0` FROM ( SELECT TOP 2 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` ORDER BY `o`.`CustomerID`, `o`.`OrderID` - ) AS `t`, + ) AS `o1`, ( - SELECT `t1`.`OrderID`, `t1`.`CustomerID`, `t1`.`EmployeeID`, `t1`.`OrderDate` + SELECT `o4`.`OrderID`, `o4`.`CustomerID`, `o4`.`EmployeeID`, `o4`.`OrderDate` FROM ( - SELECT TOP 2 `t0`.`OrderID`, `t0`.`CustomerID`, `t0`.`EmployeeID`, `t0`.`OrderDate` + SELECT TOP 2 `o3`.`OrderID`, `o3`.`CustomerID`, `o3`.`EmployeeID`, `o3`.`OrderDate` FROM ( SELECT TOP 4 `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` FROM `Orders` AS `o0` ORDER BY `o0`.`CustomerID`, `o0`.`OrderID` - ) AS `t0` - ORDER BY `t0`.`CustomerID` DESC, `t0`.`OrderID` DESC - ) AS `t1` - ORDER BY `t1`.`CustomerID`, `t1`.`OrderID` - ) AS `t0` -) AS `t1` -LEFT JOIN `Customers` AS `c` ON `t1`.`CustomerID` = `c`.`CustomerID`) -LEFT JOIN `Customers` AS `c0` ON `t1`.`CustomerID0` = `c0`.`CustomerID` -ORDER BY `t1`.`CustomerID`, `t1`.`OrderID` + ) AS `o3` + ORDER BY `o3`.`CustomerID` DESC, `o3`.`OrderID` DESC + ) AS `o4` + ORDER BY `o4`.`CustomerID`, `o4`.`OrderID` + ) AS `o2` +) AS `s` +LEFT JOIN `Customers` AS `c` ON `s`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Customers` AS `c0` ON `s`.`CustomerID0` = `c0`.`CustomerID` +ORDER BY `s`.`CustomerID`, `s`.`OrderID` """); } } @@ -840,31 +860,31 @@ public override async Task Include_duplicate_reference2(bool async) if (SupportsOffset) { AssertSql( -""" -SELECT `t1`.`OrderID`, `t1`.`CustomerID`, `t1`.`EmployeeID`, `t1`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `t1`.`OrderID0`, `t1`.`CustomerID0`, `t1`.`EmployeeID0`, `t1`.`OrderDate0` + """ +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `s`.`OrderID0`, `s`.`CustomerID0`, `s`.`EmployeeID0`, `s`.`OrderDate0` FROM ( - SELECT `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate`, `t0`.`OrderID` AS `OrderID0`, `t0`.`CustomerID` AS `CustomerID0`, `t0`.`EmployeeID` AS `EmployeeID0`, `t0`.`OrderDate` AS `OrderDate0` + SELECT `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `o2`.`OrderID` AS `OrderID0`, `o2`.`CustomerID` AS `CustomerID0`, `o2`.`EmployeeID` AS `EmployeeID0`, `o2`.`OrderDate` AS `OrderDate0` FROM ( SELECT TOP 2 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` ORDER BY `o`.`OrderID` - ) AS `t`, + ) AS `o1`, ( - SELECT `t1`.`OrderID`, `t1`.`CustomerID`, `t1`.`EmployeeID`, `t1`.`OrderDate` + SELECT `o4`.`OrderID`, `o4`.`CustomerID`, `o4`.`EmployeeID`, `o4`.`OrderDate` FROM ( - SELECT TOP 2 `t0`.`OrderID`, `t0`.`CustomerID`, `t0`.`EmployeeID`, `t0`.`OrderDate` + SELECT TOP 2 `o3`.`OrderID`, `o3`.`CustomerID`, `o3`.`EmployeeID`, `o3`.`OrderDate` FROM ( SELECT TOP 4 `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` FROM `Orders` AS `o0` ORDER BY `o0`.`OrderID` - ) AS `t0` - ORDER BY `t0`.`OrderID` DESC - ) AS `t1` - ORDER BY `t1`.`OrderID` - ) AS `t0` -) AS `t1` -LEFT JOIN `Customers` AS `c` ON `t1`.`CustomerID` = `c`.`CustomerID` -ORDER BY `t1`.`OrderID` + ) AS `o3` + ORDER BY `o3`.`OrderID` DESC + ) AS `o4` + ORDER BY `o4`.`OrderID` + ) AS `o2` +) AS `s` +LEFT JOIN `Customers` AS `c` ON `s`.`CustomerID` = `c`.`CustomerID` +ORDER BY `s`.`OrderID` """); } } @@ -876,31 +896,31 @@ public override async Task Include_duplicate_reference3(bool async) if (SupportsOffset) { AssertSql( -""" -SELECT `t1`.`OrderID`, `t1`.`CustomerID`, `t1`.`EmployeeID`, `t1`.`OrderDate`, `t1`.`OrderID0`, `t1`.`CustomerID0`, `t1`.`EmployeeID0`, `t1`.`OrderDate0`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + """ +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`CustomerID0`, `s`.`EmployeeID0`, `s`.`OrderDate0`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM ( - SELECT `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate`, `t0`.`OrderID` AS `OrderID0`, `t0`.`CustomerID` AS `CustomerID0`, `t0`.`EmployeeID` AS `EmployeeID0`, `t0`.`OrderDate` AS `OrderDate0` + SELECT `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `o2`.`OrderID` AS `OrderID0`, `o2`.`CustomerID` AS `CustomerID0`, `o2`.`EmployeeID` AS `EmployeeID0`, `o2`.`OrderDate` AS `OrderDate0` FROM ( SELECT TOP 2 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` ORDER BY `o`.`OrderID` - ) AS `t`, + ) AS `o1`, ( - SELECT `t1`.`OrderID`, `t1`.`CustomerID`, `t1`.`EmployeeID`, `t1`.`OrderDate` + SELECT `o4`.`OrderID`, `o4`.`CustomerID`, `o4`.`EmployeeID`, `o4`.`OrderDate` FROM ( - SELECT TOP 2 `t0`.`OrderID`, `t0`.`CustomerID`, `t0`.`EmployeeID`, `t0`.`OrderDate` + SELECT TOP 2 `o3`.`OrderID`, `o3`.`CustomerID`, `o3`.`EmployeeID`, `o3`.`OrderDate` FROM ( SELECT TOP 4 `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` FROM `Orders` AS `o0` ORDER BY `o0`.`OrderID` - ) AS `t0` - ORDER BY `t0`.`OrderID` DESC - ) AS `t1` - ORDER BY `t1`.`OrderID` - ) AS `t0` -) AS `t1` -LEFT JOIN `Customers` AS `c` ON `t1`.`CustomerID0` = `c`.`CustomerID` -ORDER BY `t1`.`OrderID` + ) AS `o3` + ORDER BY `o3`.`OrderID` DESC + ) AS `o4` + ORDER BY `o4`.`OrderID` + ) AS `o2` +) AS `s` +LEFT JOIN `Customers` AS `c` ON `s`.`CustomerID0` = `c`.`CustomerID` +ORDER BY `s`.`OrderID` """); } } @@ -941,18 +961,22 @@ public override async Task Include_collection_dependent_already_tracked(bool asy await base.Include_collection_dependent_already_tracked(async); AssertSql( - $@"SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` -WHERE `o`.`CustomerID` = 'ALFKI'", +WHERE `o`.`CustomerID` = 'ALFKI' +""", // - $@"SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM ( SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` WHERE `c`.`CustomerID` = 'ALFKI' -) AS `t` -LEFT JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CustomerID`"); +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` +"""); } public override async Task Include_reference_dependent_already_tracked(bool async) @@ -1006,14 +1030,16 @@ public override async Task Include_with_take(bool async) await base.Include_with_take(async); AssertSql( - $@"SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM ( SELECT TOP 10 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`ContactName` DESC -) AS `t` -LEFT JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`ContactName` DESC, `t`.`CustomerID`"); +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`ContactName` DESC, `c0`.`CustomerID` +"""); } public override async Task Include_with_skip(bool async) @@ -1067,9 +1093,9 @@ public override async Task Then_include_collection_order_by_collection_column(bo AssertSql( """ -SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `t0`.`OrderID`, `t0`.`CustomerID`, `t0`.`EmployeeID`, `t0`.`OrderDate`, `t0`.`OrderID0`, `t0`.`ProductID`, `t0`.`Discount`, `t0`.`Quantity`, `t0`.`UnitPrice` +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice` FROM ( - SELECT TOP 1 `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `t`.`c` + SELECT TOP 1 `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region`, `c1`.`c` FROM ( SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, ( SELECT TOP 1 `o`.`OrderDate` @@ -1078,15 +1104,15 @@ SELECT TOP 1 `o`.`OrderDate` ORDER BY `o`.`OrderDate` DESC) AS `c` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'W%' - ) AS `t` - ORDER BY `t`.`c` DESC -) AS `t` + ) AS `c1` + ORDER BY `c1`.`c` DESC +) AS `c0` LEFT JOIN ( SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `o1`.`OrderID` AS `OrderID0`, `o1`.`ProductID`, `o1`.`Discount`, `o1`.`Quantity`, `o1`.`UnitPrice` FROM `Orders` AS `o0` LEFT JOIN `Order Details` AS `o1` ON `o0`.`OrderID` = `o1`.`OrderID` -) AS `t0` ON `t`.`CustomerID` = `t0`.`CustomerID` -ORDER BY `t`.`c` DESC, `t`.`CustomerID`, `t0`.`OrderID`, `t0`.`OrderID0` +) AS `s` ON `c0`.`CustomerID` = `s`.`CustomerID` +ORDER BY `c0`.`c` DESC, `c0`.`CustomerID`, `s`.`OrderID`, `s`.`OrderID0` """); } @@ -1386,13 +1412,15 @@ public override async Task Include_reference_distinct_is_server_evaluated(bool a await base.Include_reference_distinct_is_server_evaluated(async); AssertSql( - $@"SELECT `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + """ +SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM ( SELECT DISTINCT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` WHERE `o`.`OrderID` < 10250 -) AS `t` -LEFT JOIN `Customers` AS `c` ON `t`.`CustomerID` = `c`.`CustomerID`"); +) AS `o0` +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` +"""); } public override async Task Include_collection_distinct_is_server_evaluated(bool async) @@ -1400,14 +1428,16 @@ public override async Task Include_collection_distinct_is_server_evaluated(bool await base.Include_collection_distinct_is_server_evaluated(async); AssertSql( - $@"SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM ( SELECT DISTINCT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'A%' -) AS `t` -LEFT JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CustomerID`"); +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` +"""); } public override async Task Include_collection_OrderBy_object(bool async) @@ -1532,24 +1562,24 @@ public override async Task Multi_level_includes_are_applied_with_skip(bool async await base.Multi_level_includes_are_applied_with_skip(async); AssertSql( -""" -SELECT `t0`.`CustomerID`, `t1`.`OrderID`, `t1`.`CustomerID`, `t1`.`EmployeeID`, `t1`.`OrderDate`, `t1`.`OrderID0`, `t1`.`ProductID`, `t1`.`Discount`, `t1`.`Quantity`, `t1`.`UnitPrice` + """ +SELECT `c1`.`CustomerID`, `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice` FROM ( - SELECT TOP 1 `t`.`CustomerID` + SELECT TOP 1 `c0`.`CustomerID` FROM ( SELECT TOP 2 `c`.`CustomerID` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'A%' ORDER BY `c`.`CustomerID` - ) AS `t` - ORDER BY `t`.`CustomerID` DESC -) AS `t0` + ) AS `c0` + ORDER BY `c0`.`CustomerID` DESC +) AS `c1` LEFT JOIN ( SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID` AS `OrderID0`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` FROM `Orders` AS `o` LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` -) AS `t1` ON `t0`.`CustomerID` = `t1`.`CustomerID` -ORDER BY `t0`.`CustomerID`, `t1`.`OrderID`, `t1`.`OrderID0` +) AS `s` ON `c1`.`CustomerID` = `s`.`CustomerID` +ORDER BY `c1`.`CustomerID`, `s`.`OrderID`, `s`.`OrderID0` """); } @@ -1558,24 +1588,24 @@ public override async Task Multi_level_includes_are_applied_with_take(bool async await base.Multi_level_includes_are_applied_with_take(async); AssertSql( -""" -SELECT `t0`.`CustomerID`, `t1`.`OrderID`, `t1`.`CustomerID`, `t1`.`EmployeeID`, `t1`.`OrderDate`, `t1`.`OrderID0`, `t1`.`ProductID`, `t1`.`Discount`, `t1`.`Quantity`, `t1`.`UnitPrice` + """ +SELECT `c1`.`CustomerID`, `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice` FROM ( - SELECT TOP 1 `t`.`CustomerID` + SELECT TOP 1 `c0`.`CustomerID` FROM ( SELECT TOP 1 `c`.`CustomerID` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'A%' ORDER BY `c`.`CustomerID` - ) AS `t` - ORDER BY `t`.`CustomerID` -) AS `t0` + ) AS `c0` + ORDER BY `c0`.`CustomerID` +) AS `c1` LEFT JOIN ( SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID` AS `OrderID0`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` FROM `Orders` AS `o` LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` -) AS `t1` ON `t0`.`CustomerID` = `t1`.`CustomerID` -ORDER BY `t0`.`CustomerID`, `t1`.`OrderID`, `t1`.`OrderID0` +) AS `s` ON `c1`.`CustomerID` = `s`.`CustomerID` +ORDER BY `c1`.`CustomerID`, `s`.`OrderID`, `s`.`OrderID0` """); } @@ -1584,28 +1614,28 @@ public override async Task Multi_level_includes_are_applied_with_skip_take(bool await base.Multi_level_includes_are_applied_with_skip_take(async); AssertSql( -""" -SELECT `t1`.`CustomerID`, `t2`.`OrderID`, `t2`.`CustomerID`, `t2`.`EmployeeID`, `t2`.`OrderDate`, `t2`.`OrderID0`, `t2`.`ProductID`, `t2`.`Discount`, `t2`.`Quantity`, `t2`.`UnitPrice` + """ +SELECT `c2`.`CustomerID`, `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice` FROM ( - SELECT TOP 1 `t`.`CustomerID` + SELECT TOP 1 `c0`.`CustomerID` FROM ( - SELECT TOP 1 `t0`.`CustomerID` + SELECT TOP 1 `c1`.`CustomerID` FROM ( SELECT TOP 2 `c`.`CustomerID` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'A%' ORDER BY `c`.`CustomerID` - ) AS `t0` - ORDER BY `t0`.`CustomerID` DESC - ) AS `t` - ORDER BY `t`.`CustomerID` -) AS `t1` + ) AS `c1` + ORDER BY `c1`.`CustomerID` DESC + ) AS `c0` + ORDER BY `c0`.`CustomerID` +) AS `c2` LEFT JOIN ( SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID` AS `OrderID0`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` FROM `Orders` AS `o` LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` -) AS `t2` ON `t1`.`CustomerID` = `t2`.`CustomerID` -ORDER BY `t1`.`CustomerID`, `t2`.`OrderID`, `t2`.`OrderID0` +) AS `s` ON `c2`.`CustomerID` = `s`.`CustomerID` +ORDER BY `c2`.`CustomerID`, `s`.`OrderID`, `s`.`OrderID0` """); } @@ -1703,13 +1733,13 @@ public override async Task Include_closes_reader(bool async) AssertSql( """ -SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM ( SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` -) AS `t` -LEFT JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CustomerID` +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` """, // """ @@ -1766,15 +1796,15 @@ public override async Task Include_collection_orderby_take(bool async) await base.Include_collection_orderby_take(async); AssertSql( -""" -SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM ( SELECT TOP 5 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`CustomerID` -) AS `t` -LEFT JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CustomerID` +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` """); } @@ -1783,16 +1813,16 @@ public override async Task Include_collection_then_reference(bool async) await base.Include_collection_then_reference(async); AssertSql( -""" -SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock`, `t`.`OrderID`, `t`.`ProductID`, `t`.`Discount`, `t`.`Quantity`, `t`.`UnitPrice`, `t`.`OrderID0`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate` + """ +SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock`, `s`.`OrderID`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice`, `s`.`OrderID0`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate` FROM `Products` AS `p` LEFT JOIN ( SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID` AS `OrderID0`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` FROM `Order Details` AS `o` INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` -) AS `t` ON `p`.`ProductID` = `t`.`ProductID` +) AS `s` ON `p`.`ProductID` = `s`.`ProductID` WHERE (`p`.`ProductID` MOD 17) = 5 -ORDER BY `p`.`ProductID`, `t`.`OrderID`, `t`.`ProductID` +ORDER BY `p`.`ProductID`, `s`.`OrderID`, `s`.`ProductID` """); } @@ -1907,15 +1937,15 @@ public override async Task Include_collection_single_or_default_no_result(bool a await base.Include_collection_single_or_default_no_result(async); AssertSql( -""" -SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM ( SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` WHERE `c`.`CustomerID` = 'ALFKI ?' -) AS `t` -LEFT JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CustomerID` +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` """); } @@ -1924,19 +1954,19 @@ public override async Task Include_collection_then_include_collection_predicate( await base.Include_collection_then_include_collection_predicate(async); AssertSql( -""" -SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `t0`.`OrderID`, `t0`.`CustomerID`, `t0`.`EmployeeID`, `t0`.`OrderDate`, `t0`.`OrderID0`, `t0`.`ProductID`, `t0`.`Discount`, `t0`.`Quantity`, `t0`.`UnitPrice` + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice` FROM ( SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` WHERE `c`.`CustomerID` = 'ALFKI' -) AS `t` +) AS `c0` LEFT JOIN ( SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID` AS `OrderID0`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` FROM `Orders` AS `o` LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` -) AS `t0` ON `t`.`CustomerID` = `t0`.`CustomerID` -ORDER BY `t`.`CustomerID`, `t0`.`OrderID`, `t0`.`OrderID0` +) AS `s` ON `c0`.`CustomerID` = `s`.`CustomerID` +ORDER BY `c0`.`CustomerID`, `s`.`OrderID`, `s`.`OrderID0` """); } @@ -2039,16 +2069,16 @@ public override async Task Include_multi_level_reference_then_include_collection await base.Include_multi_level_reference_then_include_collection_predicate(async); AssertSql( -""" -SELECT `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate`, `t`.`CustomerID0`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` + """ +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`CustomerID0`, `s`.`Address`, `s`.`City`, `s`.`CompanyName`, `s`.`ContactName`, `s`.`ContactTitle`, `s`.`Country`, `s`.`Fax`, `s`.`Phone`, `s`.`PostalCode`, `s`.`Region`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` FROM ( SELECT TOP 2 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID` AS `CustomerID0`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Orders` AS `o` LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` WHERE `o`.`OrderID` = 10248 -) AS `t` -LEFT JOIN `Orders` AS `o0` ON `t`.`CustomerID0` = `o0`.`CustomerID` -ORDER BY `t`.`OrderID`, `t`.`CustomerID0` +) AS `s` +LEFT JOIN `Orders` AS `o0` ON `s`.`CustomerID0` = `o0`.`CustomerID` +ORDER BY `s`.`OrderID`, `s`.`CustomerID0` """); } diff --git a/test/EFCore.Jet.FunctionalTests/Query/NorthwindJoinQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/NorthwindJoinQueryJetTest.cs index 9d3c787f..425fd00f 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/NorthwindJoinQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/NorthwindJoinQueryJetTest.cs @@ -20,9 +20,6 @@ public NorthwindJoinQueryJetTest( Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); } - protected override bool CanExecuteQueryString - => false; - [ConditionalFact] public virtual void Check_all_tests_overridden() => TestHelpers.AssertAllMethodsOverridden(GetType()); @@ -95,14 +92,16 @@ public override async Task Join_customers_orders_with_subquery_with_take(bool is await base.Join_customers_orders_with_subquery_with_take(isAsync); AssertSql( - @"SELECT `c`.`ContactName`, `t`.`OrderID` + """ +SELECT `c`.`ContactName`, `o0`.`OrderID` FROM `Customers` AS `c` INNER JOIN ( SELECT TOP 5 `o`.`OrderID`, `o`.`CustomerID` FROM `Orders` AS `o` ORDER BY `o`.`OrderID` -) AS `t` ON `c`.`CustomerID` = `t`.`CustomerID` -WHERE `t`.`CustomerID` = 'HANAR'"); +) AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE `o0`.`CustomerID` = 'HANAR' +"""); } public override async Task Join_customers_orders_with_subquery_anonymous_property_method(bool isAsync) @@ -124,15 +123,15 @@ public override async Task Join_customers_orders_with_subquery_anonymous_propert AssertSql( """ - SELECT `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate` - FROM `Customers` AS `c` - INNER JOIN ( - SELECT TOP 5 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` - FROM `Orders` AS `o` - ORDER BY `o`.`OrderID` - ) AS `t` ON `c`.`CustomerID` = `t`.`CustomerID` - WHERE `t`.`CustomerID` = 'HANAR' - """); +SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM `Customers` AS `c` +INNER JOIN ( + SELECT TOP 5 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + ORDER BY `o`.`OrderID` +) AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE `o0`.`CustomerID` = 'HANAR' +"""); } public override async Task Join_customers_orders_with_subquery_predicate(bool isAsync) @@ -140,14 +139,16 @@ public override async Task Join_customers_orders_with_subquery_predicate(bool is await base.Join_customers_orders_with_subquery_predicate(isAsync); AssertSql( - @"SELECT `c`.`ContactName`, `t`.`OrderID` + """ +SELECT `c`.`ContactName`, `o0`.`OrderID` FROM `Customers` AS `c` INNER JOIN ( SELECT `o`.`OrderID`, `o`.`CustomerID` FROM `Orders` AS `o` WHERE `o`.`OrderID` > 0 -) AS `t` ON `c`.`CustomerID` = `t`.`CustomerID` -WHERE `t`.`CustomerID` = 'ALFKI'"); +) AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE `o0`.`CustomerID` = 'ALFKI' +"""); } public override async Task Join_customers_orders_with_subquery_predicate_with_take(bool isAsync) @@ -156,16 +157,16 @@ public override async Task Join_customers_orders_with_subquery_predicate_with_ta AssertSql( """ - SELECT `c`.`ContactName`, `t`.`OrderID` - FROM `Customers` AS `c` - INNER JOIN ( - SELECT TOP 5 `o`.`OrderID`, `o`.`CustomerID` - FROM `Orders` AS `o` - WHERE `o`.`OrderID` > 0 - ORDER BY `o`.`OrderID` - ) AS `t` ON `c`.`CustomerID` = `t`.`CustomerID` - WHERE `t`.`CustomerID` = 'HANAR' - """); +SELECT `c`.`ContactName`, `o0`.`OrderID` +FROM `Customers` AS `c` +INNER JOIN ( + SELECT TOP 5 `o`.`OrderID`, `o`.`CustomerID` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` > 0 + ORDER BY `o`.`OrderID` +) AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE `o0`.`CustomerID` = 'HANAR' +"""); } public override async Task Join_composite_key(bool isAsync) @@ -173,10 +174,12 @@ public override async Task Join_composite_key(bool isAsync) await base.Join_composite_key(isAsync); AssertSql( - $@"SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Customers` AS `c` -INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` AND `c`.`CustomerID` = `o`.`CustomerID` -WHERE `c`.`CustomerID` LIKE 'F%'"); +INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +"""); } public override async Task Join_complex_condition(bool isAsync) @@ -184,14 +187,16 @@ public override async Task Join_complex_condition(bool isAsync) await base.Join_complex_condition(isAsync); AssertSql( - @"SELECT `c`.`CustomerID` + """ +SELECT `c`.`CustomerID` FROM `Customers` AS `c`, ( - SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + SELECT 1 FROM `Orders` AS `o` WHERE `o`.`OrderID` < 10250 -) AS `t` -WHERE `c`.`CustomerID` = 'ALFKI'"); +) AS `o0` +WHERE `c`.`CustomerID` = 'ALFKI' +"""); } public override async Task Join_same_collection_multiple(bool isAsync) @@ -267,14 +272,14 @@ public override async Task GroupJoin_simple_subquery(bool isAsync) AssertSql( """ - SELECT `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate` - FROM `Customers` AS `c` - INNER JOIN ( - SELECT TOP 4 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` - FROM `Orders` AS `o` - ORDER BY `o`.`OrderID` - ) AS `t` ON `c`.`CustomerID` = `t`.`CustomerID` - """); +SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +FROM `Customers` AS `c` +INNER JOIN ( + SELECT TOP 4 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + ORDER BY `o`.`OrderID` +) AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +"""); } public override async Task GroupJoin_as_final_operator(bool async) @@ -283,15 +288,11 @@ public override async Task GroupJoin_as_final_operator(bool async) AssertSql( """ -SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], [t].[OrderID], [t].[CustomerID], [t].[EmployeeID], [t].[OrderDate] -FROM [Customers] AS [c] -OUTER APPLY ( - SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] - FROM [Orders] AS [o] - WHERE [c].[CustomerID] = [o].[CustomerID] -) AS [t] -WHERE [c].[CustomerID] LIKE N'F%' -ORDER BY [c].[CustomerID] +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID` """); } @@ -301,15 +302,11 @@ public override async Task Unflattened_GroupJoin_composed(bool async) AssertSql( """ -SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], [t].[OrderID], [t].[CustomerID], [t].[EmployeeID], [t].[OrderDate] -FROM [Customers] AS [c] -OUTER APPLY ( - SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] - FROM [Orders] AS [o] - WHERE [c].[CustomerID] = [o].[CustomerID] -) AS [t] -WHERE [c].[CustomerID] LIKE N'F%' AND [c].[City] = N'Lisboa' -ORDER BY [c].[CustomerID] +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Customers` AS `c` +LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE (`c`.`CustomerID` LIKE 'F%') AND `c`.`City` = 'Lisboa' +ORDER BY `c`.`CustomerID` """); } @@ -319,20 +316,16 @@ public override async Task Unflattened_GroupJoin_composed_2(bool async) AssertSql( """ -SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], [t].[CustomerID], [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t].[Address], [t].[City], [t].[CompanyName], [t].[ContactName], [t].[ContactTitle], [t].[Country], [t].[Fax], [t].[Phone], [t].[PostalCode], [t].[Region] -FROM [Customers] AS [c] +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `c1`.`CustomerID`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region` +FROM (`Customers` AS `c` INNER JOIN ( - SELECT [c0].[CustomerID], [c0].[Address], [c0].[City], [c0].[CompanyName], [c0].[ContactName], [c0].[ContactTitle], [c0].[Country], [c0].[Fax], [c0].[Phone], [c0].[PostalCode], [c0].[Region] - FROM [Customers] AS [c0] - WHERE [c0].[City] = N'Lisboa' -) AS [t] ON [c].[CustomerID] = [t].[CustomerID] -OUTER APPLY ( - SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] - FROM [Orders] AS [o] - WHERE [c].[CustomerID] = [o].[CustomerID] -) AS [t0] -WHERE [c].[CustomerID] LIKE N'F%' -ORDER BY [c].[CustomerID], [t].[CustomerID] + SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM `Customers` AS `c0` + WHERE `c0`.`City` = 'Lisboa' +) AS `c1` ON `c`.`CustomerID` = `c1`.`CustomerID`) +LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID`, `c1`.`CustomerID` """); } @@ -364,14 +357,14 @@ public override async Task GroupJoin_DefaultIfEmpty2(bool isAsync) await base.GroupJoin_DefaultIfEmpty2(isAsync); AssertSql( -""" -SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title`, `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate` + """ +SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` FROM `Employees` AS `e` LEFT JOIN ( SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` WHERE `o`.`CustomerID` LIKE 'F%' -) AS `t` ON `e`.`EmployeeID` = `t`.`EmployeeID` +) AS `o0` ON `e`.`EmployeeID` = `o0`.`EmployeeID` """); } @@ -381,15 +374,15 @@ public override async Task GroupJoin_DefaultIfEmpty3(bool isAsync) AssertSql( """ - SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` - FROM ( - SELECT TOP 1 `c`.`CustomerID` - FROM `Customers` AS `c` - ORDER BY `c`.`CustomerID` - ) AS `t` - LEFT JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` - ORDER BY `t`.`CustomerID` - """); +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM ( + SELECT TOP 1 `c`.`CustomerID` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` +"""); } public override async Task GroupJoin_Where(bool isAsync) @@ -457,13 +450,15 @@ public override async Task GroupJoin_SelectMany_subquery_with_filter(bool isAsyn await base.GroupJoin_SelectMany_subquery_with_filter(isAsync); AssertSql( - @"SELECT `c`.`ContactName`, `t`.`OrderID` + """ +SELECT `c`.`ContactName`, `o0`.`OrderID` FROM `Customers` AS `c` INNER JOIN ( SELECT `o`.`OrderID`, `o`.`CustomerID` FROM `Orders` AS `o` WHERE `o`.`OrderID` > 5 -) AS `t` ON `c`.`CustomerID` = `t`.`CustomerID`"); +) AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +"""); } public override async Task GroupJoin_SelectMany_subquery_with_filter_orderby(bool isAsync) @@ -471,10 +466,15 @@ public override async Task GroupJoin_SelectMany_subquery_with_filter_orderby(boo await base.GroupJoin_SelectMany_subquery_with_filter_orderby(isAsync); AssertSql( - $@"SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + """ +SELECT `c`.`ContactName`, `o0`.`OrderID` FROM `Customers` AS `c` -LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` -ORDER BY `c`.`CustomerID`"); +INNER JOIN ( + SELECT `o`.`OrderID`, `o`.`CustomerID` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` > 5 +) AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +"""); } public override async Task GroupJoin_SelectMany_subquery_with_filter_and_DefaultIfEmpty(bool isAsync) @@ -482,14 +482,16 @@ public override async Task GroupJoin_SelectMany_subquery_with_filter_and_Default await base.GroupJoin_SelectMany_subquery_with_filter_and_DefaultIfEmpty(isAsync); AssertSql( - @"SELECT `c`.`ContactName`, `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate` + """ +SELECT `c`.`ContactName`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` FROM `Customers` AS `c` LEFT JOIN ( SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` WHERE `o`.`OrderID` > 5 -) AS `t` ON `c`.`CustomerID` = `t`.`CustomerID` -WHERE `c`.`CustomerID` LIKE 'F%'"); +) AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +"""); } public override async Task GroupJoin_SelectMany_subquery_with_filter_orderby_and_DefaultIfEmpty(bool isAsync) @@ -497,10 +499,16 @@ public override async Task GroupJoin_SelectMany_subquery_with_filter_orderby_and await base.GroupJoin_SelectMany_subquery_with_filter_orderby_and_DefaultIfEmpty(isAsync); AssertSql( - $@"SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + """ +SELECT `c`.`ContactName`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` FROM `Customers` AS `c` -LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` -ORDER BY `c`.`CustomerID`"); +LEFT JOIN ( + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `o`.`OrderID` > 5 +) AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` +WHERE `c`.`CustomerID` LIKE 'F%' +"""); } public override async Task GroupJoin_Subquery_with_Take_Then_SelectMany_Where(bool isAsync) @@ -508,18 +516,18 @@ public override async Task GroupJoin_Subquery_with_Take_Then_SelectMany_Where(bo await base.GroupJoin_Subquery_with_Take_Then_SelectMany_Where(isAsync); AssertSql( -""" -SELECT `c`.`CustomerID`, `t0`.`OrderID` + """ +SELECT `c`.`CustomerID`, `o1`.`OrderID` FROM `Customers` AS `c` INNER JOIN ( - SELECT `t`.`OrderID`, `t`.`CustomerID` + SELECT `o0`.`OrderID`, `o0`.`CustomerID` FROM ( SELECT TOP 100 `o`.`OrderID`, `o`.`CustomerID` FROM `Orders` AS `o` ORDER BY `o`.`OrderID` - ) AS `t` - WHERE `t`.`CustomerID` LIKE 'A%' -) AS `t0` ON `c`.`CustomerID` = `t0`.`CustomerID` + ) AS `o0` + WHERE `o0`.`CustomerID` LIKE 'A%' +) AS `o1` ON `c`.`CustomerID` = `o1`.`CustomerID` """); } @@ -529,18 +537,18 @@ public override async Task Inner_join_with_tautology_predicate_converts_to_cross AssertSql( """ -SELECT `t`.`CustomerID`, `t0`.`OrderID` +SELECT `c0`.`CustomerID`, `o0`.`OrderID` FROM ( SELECT TOP 10 `c`.`CustomerID` FROM `Customers` AS `c` ORDER BY `c`.`CustomerID` -) AS `t`, +) AS `c0`, ( SELECT TOP 10 `o`.`OrderID` FROM `Orders` AS `o` ORDER BY `o`.`OrderID` -) AS `t0` -ORDER BY `t`.`CustomerID` +) AS `o0` +ORDER BY `c0`.`CustomerID` """); } @@ -626,19 +634,19 @@ public override async Task SelectMany_with_client_eval_with_constructor(bool asy AssertSql( """ -SELECT `c`.`CustomerID`, `c`.`City`, `t0`.`OrderID`, `t0`.`ProductID`, `t0`.`OrderID0` +SELECT `c`.`CustomerID`, `c`.`City`, `s`.`OrderID`, `s`.`ProductID`, `s`.`OrderID0` FROM `Customers` AS `c` LEFT JOIN ( - SELECT `t`.`OrderID`, `t`.`ProductID`, `o`.`OrderID` AS `OrderID0`, `o`.`CustomerID` + SELECT `o1`.`OrderID`, `o1`.`ProductID`, `o`.`OrderID` AS `OrderID0`, `o`.`CustomerID` FROM `Orders` AS `o` INNER JOIN ( SELECT `o0`.`OrderID`, `o0`.`ProductID` FROM `Order Details` AS `o0` WHERE `o0`.`OrderID` < 11000 - ) AS `t` ON `o`.`OrderID` = `t`.`OrderID` -) AS `t0` ON `c`.`CustomerID` = `t0`.`CustomerID` + ) AS `o1` ON `o`.`OrderID` = `o1`.`OrderID` +) AS `s` ON `c`.`CustomerID` = `s`.`CustomerID` WHERE `c`.`CustomerID` LIKE 'A%' -ORDER BY `c`.`CustomerID`, `t0`.`OrderID0`, `t0`.`OrderID` +ORDER BY `c`.`CustomerID`, `s`.`OrderID0`, `s`.`OrderID` """); } @@ -901,13 +909,13 @@ public override async Task GroupJoin_customers_employees_subquery_shadow_take(bo AssertSql( """ -SELECT `t`.`Title`, `t`.`EmployeeID` AS `Id` +SELECT `e0`.`Title`, `e0`.`EmployeeID` AS `Id` FROM `Customers` AS `c` INNER JOIN ( SELECT TOP 5 `e`.`EmployeeID`, `e`.`City`, `e`.`Title` FROM `Employees` AS `e` ORDER BY `e`.`City` -) AS `t` ON `c`.`City` = `t`.`City` +) AS `e0` ON `c`.`City` = `e0`.`City` """); } diff --git a/test/EFCore.Jet.FunctionalTests/Query/NorthwindKeylessEntitiesQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/NorthwindKeylessEntitiesQueryJetTest.cs index a0fa0166..c07cf0ee 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/NorthwindKeylessEntitiesQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/NorthwindKeylessEntitiesQueryJetTest.cs @@ -23,9 +23,6 @@ public NorthwindKeylessEntitiesQueryJetTest( Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); } - protected override bool CanExecuteQueryString - => false; - [ConditionalFact] public virtual void Check_all_tests_overridden() => TestHelpers.AssertAllMethodsOverridden(GetType()); @@ -257,7 +254,7 @@ public override async Task Count_over_keyless_entity_with_pushdown(bool async) await base.Count_over_keyless_entity_with_pushdown(async); AssertSql( -""" + """ SELECT COUNT(*) FROM ( SELECT TOP 10 1 @@ -265,7 +262,7 @@ SELECT TOP 10 1 SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] FROM [Customers] AS [c] ) AS `m` ORDER BY `m`.`ContactTitle` -) AS `t` +) AS `m0` """); } @@ -274,14 +271,14 @@ public override async Task Count_over_keyless_entity_with_pushdown_empty_project await base.Count_over_keyless_entity_with_pushdown_empty_projection(async); AssertSql( -""" + """ SELECT COUNT(*) FROM ( SELECT TOP 10 1 FROM ( SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] FROM [Customers] AS [c] ) AS `m` -) AS `t` +) AS `m0` """); } diff --git a/test/EFCore.Jet.FunctionalTests/Query/NorthwindMiscellaneousQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/NorthwindMiscellaneousQueryJetTest.cs index 9a7566c1..4875b0b7 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/NorthwindMiscellaneousQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/NorthwindMiscellaneousQueryJetTest.cs @@ -67,18 +67,20 @@ public override async Task Lifting_when_subquery_nested_order_by_anonymous(bool await base.Lifting_when_subquery_nested_order_by_anonymous(isAsync); AssertSql( - $@"SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` INNER JOIN ( - SELECT DISTINCT `t`.`CustomerID` + SELECT DISTINCT `c1`.`CustomerID` FROM ( SELECT TOP 2 `c`.`CustomerID` FROM `Customers` AS `c` ORDER BY `c`.`CustomerID` - ) AS `t`, + ) AS `c1`, `Customers` AS `c0` -) AS `t0` ON `o`.`CustomerID` = `t0`.`CustomerID` -ORDER BY `t0`.`CustomerID`"); +) AS `s` ON `o`.`CustomerID` = `s`.`CustomerID` +ORDER BY `s`.`CustomerID` +"""); } public override async Task Lifting_when_subquery_nested_order_by_simple(bool isAsync) @@ -86,18 +88,20 @@ public override async Task Lifting_when_subquery_nested_order_by_simple(bool isA await base.Lifting_when_subquery_nested_order_by_simple(isAsync); AssertSql( - $@"SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` INNER JOIN ( - SELECT DISTINCT `t`.`CustomerID` + SELECT DISTINCT `c1`.`CustomerID` FROM ( SELECT TOP 2 `c`.`CustomerID` FROM `Customers` AS `c` ORDER BY `c`.`CustomerID` - ) AS `t`, + ) AS `c1`, `Customers` AS `c0` -) AS `t0` ON `o`.`CustomerID` = `t0`.`CustomerID` -ORDER BY `t0`.`CustomerID`"); +) AS `s` ON `o`.`CustomerID` = `s`.`CustomerID` +ORDER BY `s`.`CustomerID` +"""); } [ConditionalFact(Skip = "Issue #16006")] @@ -204,17 +208,19 @@ public override async Task Join_with_entity_equality_local_on_both_sources(bool await base.Join_with_entity_equality_local_on_both_sources(isAsync); AssertSql( - $@"{AssertSqlHelper.Declaration("@__entity_equality_local_0_CustomerID='ANATR' (Size = 5)")} -{AssertSqlHelper.Declaration("@__entity_equality_local_0_CustomerID='ANATR' (Size = 5)")} + $""" +@__entity_equality_local_0_CustomerID='ANATR' (Size = 5) +@__entity_equality_local_0_CustomerID='ANATR' (Size = 5) SELECT `c`.`CustomerID` FROM `Customers` AS `c` INNER JOIN ( - SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + SELECT `c0`.`CustomerID` FROM `Customers` AS `c0` WHERE `c0`.`CustomerID` = {AssertSqlHelper.Parameter("@__entity_equality_local_0_CustomerID")} -) AS `t` ON `c`.`CustomerID` = `t`.`CustomerID` -WHERE `c`.`CustomerID` = {AssertSqlHelper.Parameter("@__entity_equality_local_0_CustomerID")}"); +) AS `c1` ON `c`.`CustomerID` = `c1`.`CustomerID` +WHERE `c`.`CustomerID` = {AssertSqlHelper.Parameter("@__entity_equality_local_0_CustomerID")} +"""); } public override async Task Entity_equality_local_inline(bool isAsync) @@ -367,18 +373,18 @@ public override async Task Entity_equality_orderby_descending_subquery_composite AssertSql( """ -SELECT `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate`, `t`.`c`, `t`.`c0` +SELECT `o2`.`OrderID`, `o2`.`CustomerID`, `o2`.`EmployeeID`, `o2`.`OrderDate`, `o2`.`c`, `o2`.`c0` FROM ( SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, ( - SELECT TOP 1 `o2`.`OrderID` - FROM `Order Details` AS `o2` - WHERE `o`.`OrderID` = `o2`.`OrderID`) AS `c`, ( - SELECT TOP 1 `o3`.`ProductID` - FROM `Order Details` AS `o3` - WHERE `o`.`OrderID` = `o3`.`OrderID`) AS `c0` + SELECT TOP 1 `o0`.`OrderID` + FROM `Order Details` AS `o0` + WHERE `o`.`OrderID` = `o0`.`OrderID`) AS `c`, ( + SELECT TOP 1 `o1`.`ProductID` + FROM `Order Details` AS `o1` + WHERE `o`.`OrderID` = `o1`.`OrderID`) AS `c0` FROM `Orders` AS `o` -) AS `t` -ORDER BY `t`.`c` DESC, `t`.`c0` DESC +) AS `o2` +ORDER BY `o2`.`c` DESC, `o2`.`c0` DESC """); } @@ -493,18 +499,18 @@ public override async Task Where_query_composition_is_null(bool isAsync) await base.Where_query_composition_is_null(isAsync); AssertSql( -""" -SELECT `t`.`EmployeeID`, `t`.`City`, `t`.`Country`, `t`.`FirstName`, `t`.`ReportsTo`, `t`.`Title` + """ +SELECT `e1`.`EmployeeID`, `e1`.`City`, `e1`.`Country`, `e1`.`FirstName`, `e1`.`ReportsTo`, `e1`.`Title` FROM ( SELECT TOP 3 `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` FROM `Employees` AS `e` ORDER BY `e`.`EmployeeID` -) AS `t` +) AS `e1` WHERE NOT EXISTS ( SELECT 1 FROM `Employees` AS `e0` - WHERE `e0`.`EmployeeID` = `t`.`ReportsTo`) -ORDER BY `t`.`EmployeeID` + WHERE `e0`.`EmployeeID` = `e1`.`ReportsTo`) +ORDER BY `e1`.`EmployeeID` """); } @@ -513,22 +519,22 @@ public override async Task Where_query_composition_is_not_null(bool isAsync) await base.Where_query_composition_is_not_null(isAsync); AssertSql( -""" -SELECT `t`.`EmployeeID`, `t`.`City`, `t`.`Country`, `t`.`FirstName`, `t`.`ReportsTo`, `t`.`Title` + """ +SELECT `e1`.`EmployeeID`, `e1`.`City`, `e1`.`Country`, `e1`.`FirstName`, `e1`.`ReportsTo`, `e1`.`Title` FROM ( - SELECT TOP 3 `t0`.`EmployeeID`, `t0`.`City`, `t0`.`Country`, `t0`.`FirstName`, `t0`.`ReportsTo`, `t0`.`Title` + SELECT TOP 3 `e2`.`EmployeeID`, `e2`.`City`, `e2`.`Country`, `e2`.`FirstName`, `e2`.`ReportsTo`, `e2`.`Title` FROM ( SELECT TOP 7 `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` FROM `Employees` AS `e` ORDER BY `e`.`EmployeeID` - ) AS `t0` - ORDER BY `t0`.`EmployeeID` DESC -) AS `t` + ) AS `e2` + ORDER BY `e2`.`EmployeeID` DESC +) AS `e1` WHERE EXISTS ( SELECT 1 FROM `Employees` AS `e0` - WHERE `e0`.`EmployeeID` = `t`.`ReportsTo`) -ORDER BY `t`.`EmployeeID` + WHERE `e0`.`EmployeeID` = `e1`.`ReportsTo`) +ORDER BY `e1`.`EmployeeID` """); } @@ -702,13 +708,13 @@ public override async Task Where_query_composition2(bool isAsync) await base.Where_query_composition2(isAsync); AssertSql( -""" -SELECT `t`.`EmployeeID`, `t`.`City`, `t`.`Country`, `t`.`FirstName`, `t`.`ReportsTo`, `t`.`Title` + """ +SELECT `e1`.`EmployeeID`, `e1`.`City`, `e1`.`Country`, `e1`.`FirstName`, `e1`.`ReportsTo`, `e1`.`Title` FROM ( SELECT TOP 3 `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` FROM `Employees` AS `e` -) AS `t` -WHERE `t`.`FirstName` = ( +) AS `e1` +WHERE `e1`.`FirstName` = ( SELECT TOP 1 `e0`.`FirstName` FROM `Employees` AS `e0` ORDER BY `e0`.`EmployeeID`) @@ -818,40 +824,40 @@ public override async Task Select_Where_Subquery_Equality(bool isAsync) await base.Select_Where_Subquery_Equality(isAsync); AssertSql( -""" -SELECT `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate` + """ +SELECT `o3`.`OrderID`, `o3`.`CustomerID`, `o3`.`EmployeeID`, `o3`.`OrderDate` FROM ( SELECT TOP 1 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` ORDER BY `o`.`OrderID` -) AS `t` +) AS `o3` WHERE ( SELECT COUNT(*) FROM ( - SELECT TOP 2 `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` + SELECT TOP 2 `o0`.`OrderID` FROM `Order Details` AS `o0` ORDER BY `o0`.`OrderID` - ) AS `t0` + ) AS `o2` WHERE ( SELECT TOP 1 `c`.`Country` FROM `Customers` AS `c` - WHERE `c`.`CustomerID` = `t`.`CustomerID` + WHERE `c`.`CustomerID` = `o3`.`CustomerID` ORDER BY `c`.`CustomerID`) = ( SELECT TOP 1 `c0`.`Country` FROM `Orders` AS `o1` INNER JOIN `Customers` AS `c0` ON `o1`.`CustomerID` = `c0`.`CustomerID` - WHERE `o1`.`OrderID` = `t0`.`OrderID` + WHERE `o1`.`OrderID` = `o2`.`OrderID` ORDER BY `o1`.`OrderID`, `c0`.`CustomerID`) OR (( SELECT TOP 1 `c`.`Country` FROM `Customers` AS `c` - WHERE `c`.`CustomerID` = `t`.`CustomerID` + WHERE `c`.`CustomerID` = `o3`.`CustomerID` ORDER BY `c`.`CustomerID`) IS NULL AND ( SELECT TOP 1 `c0`.`Country` FROM `Orders` AS `o1` INNER JOIN `Customers` AS `c0` ON `o1`.`CustomerID` = `c0`.`CustomerID` - WHERE `o1`.`OrderID` = `t0`.`OrderID` + WHERE `o1`.`OrderID` = `o2`.`OrderID` ORDER BY `o1`.`OrderID`, `c0`.`CustomerID`) IS NULL)) > 0 -ORDER BY `t`.`OrderID` +ORDER BY `o3`.`OrderID` """); } @@ -860,19 +866,21 @@ public override async Task Where_subquery_anon(bool isAsync) await base.Where_subquery_anon(isAsync); AssertSql( - $@"SELECT `t`.`EmployeeID`, `t`.`City`, `t`.`Country`, `t`.`FirstName`, `t`.`ReportsTo`, `t`.`Title`, `t0`.`OrderID`, `t0`.`CustomerID`, `t0`.`EmployeeID`, `t0`.`OrderDate` + """ +SELECT `e0`.`EmployeeID`, `e0`.`City`, `e0`.`Country`, `e0`.`FirstName`, `e0`.`ReportsTo`, `e0`.`Title`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` FROM ( SELECT TOP 3 `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` FROM `Employees` AS `e` ORDER BY `e`.`EmployeeID` -) AS `t`, +) AS `e0`, ( SELECT TOP 5 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` ORDER BY `o`.`OrderID` -) AS `t0` -WHERE `t`.`EmployeeID` = `t0`.`EmployeeID` -ORDER BY `t`.`EmployeeID`"); +) AS `o0` +WHERE `e0`.`EmployeeID` = `o0`.`EmployeeID` +ORDER BY `e0`.`EmployeeID` +"""); } public override async Task Where_subquery_anon_nested(bool isAsync) @@ -880,24 +888,26 @@ public override async Task Where_subquery_anon_nested(bool isAsync) await base.Where_subquery_anon_nested(isAsync); AssertSql( - $@"SELECT `t`.`EmployeeID`, `t`.`City`, `t`.`Country`, `t`.`FirstName`, `t`.`ReportsTo`, `t`.`Title`, `t0`.`OrderID`, `t0`.`CustomerID`, `t0`.`EmployeeID`, `t0`.`OrderDate`, `t1`.`CustomerID`, `t1`.`Address`, `t1`.`City`, `t1`.`CompanyName`, `t1`.`ContactName`, `t1`.`ContactTitle`, `t1`.`Country`, `t1`.`Fax`, `t1`.`Phone`, `t1`.`PostalCode`, `t1`.`Region` + """ +SELECT `e0`.`EmployeeID`, `e0`.`City`, `e0`.`Country`, `e0`.`FirstName`, `e0`.`ReportsTo`, `e0`.`Title`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` FROM ( SELECT TOP 3 `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` FROM `Employees` AS `e` ORDER BY `e`.`EmployeeID` -) AS `t`, +) AS `e0`, ( SELECT TOP 5 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` ORDER BY `o`.`OrderID` -) AS `t0`, +) AS `o0`, ( SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`CustomerID` -) AS `t1` -WHERE `t`.`City` = 'Seattle' -ORDER BY `t`.`EmployeeID`"); +) AS `c0` +WHERE `e0`.`City` = 'Seattle' +ORDER BY `e0`.`EmployeeID` +"""); } public override async Task OrderBy_SelectMany(bool isAsync) @@ -905,15 +915,17 @@ public override async Task OrderBy_SelectMany(bool isAsync) await base.OrderBy_SelectMany(isAsync); AssertSql( - $@"SELECT `c`.`ContactName`, `t`.`OrderID` + """ +SELECT `c`.`ContactName`, `o0`.`OrderID` FROM `Customers` AS `c`, ( SELECT TOP 3 `o`.`OrderID`, `o`.`CustomerID` FROM `Orders` AS `o` ORDER BY `o`.`OrderID` -) AS `t` -WHERE `c`.`CustomerID` = `t`.`CustomerID` -ORDER BY `c`.`CustomerID`"); +) AS `o0` +WHERE `c`.`CustomerID` = `o0`.`CustomerID` +ORDER BY `c`.`CustomerID` +"""); } public override async Task Let_any_subquery_anonymous(bool isAsync) @@ -970,15 +982,15 @@ public override async Task OrderBy_any(bool isAsync) AssertSql( """ -SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `t`.`c` +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `c0`.`c` FROM ( SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, IIF(EXISTS ( SELECT 1 - FROM `Orders` AS `o0` - WHERE `c`.`CustomerID` = `o0`.`CustomerID` AND `o0`.`OrderID` > 11000), TRUE, FALSE) AS `c` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` AND `o`.`OrderID` > 11000), TRUE, FALSE) AS `c` FROM `Customers` AS `c` -) AS `t` -ORDER BY NOT (`t`.`c`), `t`.`CustomerID` +) AS `c0` +ORDER BY NOT (`c0`.`c`), `c0`.`CustomerID` """); } @@ -1027,18 +1039,18 @@ public override async Task Skip_Take(bool isAsync) AssertSql( """ - SELECT `t0`.`CustomerID`, `t0`.`Address`, `t0`.`City`, `t0`.`CompanyName`, `t0`.`ContactName`, `t0`.`ContactTitle`, `t0`.`Country`, `t0`.`Fax`, `t0`.`Phone`, `t0`.`PostalCode`, `t0`.`Region` +SELECT `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region` +FROM ( + SELECT TOP 10 `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` FROM ( - SELECT TOP 10 `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region` - FROM ( - SELECT TOP 15 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` - FROM `Customers` AS `c` - ORDER BY `c`.`ContactName` - ) AS `t` - ORDER BY `t`.`ContactName` DESC - ) AS `t0` - ORDER BY `t0`.`ContactName` - """); + SELECT TOP 15 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`ContactName` + ) AS `c0` + ORDER BY `c0`.`ContactName` DESC +) AS `c1` +ORDER BY `c1`.`ContactName` +"""); } public override async Task Join_Customers_Orders_Skip_Take(bool isAsync) @@ -1047,19 +1059,19 @@ public override async Task Join_Customers_Orders_Skip_Take(bool isAsync) AssertSql( """ - SELECT `t0`.`ContactName`, `t0`.`OrderID` +SELECT `s0`.`ContactName`, `s0`.`OrderID` +FROM ( + SELECT TOP 5 `s`.`ContactName`, `s`.`OrderID` FROM ( - SELECT TOP 5 `t`.`ContactName`, `t`.`OrderID` - FROM ( - SELECT TOP 15 `c`.`ContactName`, `o`.`OrderID` - FROM `Customers` AS `c` - INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` - ORDER BY `o`.`OrderID` - ) AS `t` - ORDER BY `t`.`OrderID` DESC - ) AS `t0` - ORDER BY `t0`.`OrderID` - """); + SELECT TOP 15 `c`.`ContactName`, `o`.`OrderID` + FROM `Customers` AS `c` + INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`OrderID` + ) AS `s` + ORDER BY `s`.`OrderID` DESC +) AS `s0` +ORDER BY `s0`.`OrderID` +"""); } public override async Task Join_Customers_Orders_Skip_Take_followed_by_constant_projection(bool isAsync) @@ -1067,19 +1079,19 @@ public override async Task Join_Customers_Orders_Skip_Take_followed_by_constant_ await base.Join_Customers_Orders_Skip_Take_followed_by_constant_projection(isAsync); AssertSql( -""" -SELECT `t0`.`c` + """ +SELECT `s0`.`c` FROM ( - SELECT TOP 5 `t`.`c`, `t`.`OrderID` + SELECT TOP 5 `s`.`c`, `s`.`OrderID` FROM ( SELECT TOP 15 'Foo' AS `c`, `o`.`OrderID` FROM `Customers` AS `c` INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` ORDER BY `o`.`OrderID` - ) AS `t` - ORDER BY `t`.`OrderID` DESC -) AS `t0` -ORDER BY `t0`.`OrderID` + ) AS `s` + ORDER BY `s`.`OrderID` DESC +) AS `s0` +ORDER BY `s0`.`OrderID` """); } @@ -1088,19 +1100,19 @@ public override async Task Join_Customers_Orders_Projection_With_String_Concat_S await base.Join_Customers_Orders_Projection_With_String_Concat_Skip_Take(isAsync); AssertSql( -""" -SELECT `t0`.`Contact`, `t0`.`OrderID` + """ +SELECT `s0`.`Contact`, `s0`.`OrderID` FROM ( - SELECT TOP 5 `t`.`Contact`, `t`.`OrderID` + SELECT TOP 5 `s`.`Contact`, `s`.`OrderID` FROM ( SELECT TOP 15 (IIF(`c`.`ContactName` IS NULL, '', `c`.`ContactName`) & ' ') & IIF(`c`.`ContactTitle` IS NULL, '', `c`.`ContactTitle`) AS `Contact`, `o`.`OrderID` FROM `Customers` AS `c` INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` ORDER BY `o`.`OrderID` - ) AS `t` - ORDER BY `t`.`OrderID` DESC -) AS `t0` -ORDER BY `t0`.`OrderID` + ) AS `s` + ORDER BY `s`.`OrderID` DESC +) AS `s0` +ORDER BY `s0`.`OrderID` """); } @@ -1109,20 +1121,20 @@ public override async Task Join_Customers_Orders_Orders_Skip_Take_Same_Propertie await base.Join_Customers_Orders_Orders_Skip_Take_Same_Properties(isAsync); AssertSql( -""" -SELECT `t0`.`OrderID`, `t0`.`CustomerIDA`, `t0`.`CustomerIDB`, `t0`.`ContactNameA`, `t0`.`ContactNameB` + """ +SELECT `s0`.`OrderID`, `s0`.`CustomerIDA`, `s0`.`CustomerIDB`, `s0`.`ContactNameA`, `s0`.`ContactNameB` FROM ( - SELECT TOP 5 `t`.`OrderID`, `t`.`CustomerIDA`, `t`.`CustomerIDB`, `t`.`ContactNameA`, `t`.`ContactNameB` + SELECT TOP 5 `s`.`OrderID`, `s`.`CustomerIDA`, `s`.`CustomerIDB`, `s`.`ContactNameA`, `s`.`ContactNameB` FROM ( SELECT TOP 15 `o`.`OrderID`, `c`.`CustomerID` AS `CustomerIDA`, `c0`.`CustomerID` AS `CustomerIDB`, `c`.`ContactName` AS `ContactNameA`, `c0`.`ContactName` AS `ContactNameB` FROM (`Orders` AS `o` INNER JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID`) INNER JOIN `Customers` AS `c0` ON `o`.`CustomerID` = `c0`.`CustomerID` ORDER BY `o`.`OrderID` - ) AS `t` - ORDER BY `t`.`OrderID` DESC -) AS `t0` -ORDER BY `t0`.`OrderID` + ) AS `s` + ORDER BY `s`.`OrderID` DESC +) AS `s0` +ORDER BY `s0`.`OrderID` """); } @@ -1131,12 +1143,8 @@ public override async Task Ternary_should_not_evaluate_both_sides(bool async) await base.Ternary_should_not_evaluate_both_sides(async); AssertSql( - $""" -@__p_0='none' (Size = 255) -@__p_1='none' (Size = 255) -@__p_2='none' (Size = 255) - -SELECT `c`.`CustomerID`, {AssertSqlHelper.Parameter("@__p_0")} AS `Data1`, {AssertSqlHelper.Parameter("@__p_1")} AS `Data2`, {AssertSqlHelper.Parameter("@__p_2")} AS `Data3` + """ +SELECT `c`.`CustomerID`, 'none' AS `Data1` FROM `Customers` AS `c` """); } @@ -1236,14 +1244,16 @@ public override async Task Take_Distinct_Count(bool isAsync) await base.Take_Distinct_Count(isAsync); AssertSql( - $@"SELECT COUNT(*) + """ +SELECT COUNT(*) FROM ( - SELECT DISTINCT `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate` + SELECT DISTINCT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` FROM ( SELECT TOP 5 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` - ) AS `t` -) AS `t0`"); + ) AS `o0` +) AS `o1` +"""); } public override async Task Take_Where_Distinct_Count(bool isAsync) @@ -1251,15 +1261,17 @@ public override async Task Take_Where_Distinct_Count(bool isAsync) await base.Take_Where_Distinct_Count(isAsync); AssertSql( - $@"SELECT COUNT(*) + """ +SELECT COUNT(*) FROM ( - SELECT DISTINCT `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate` + SELECT DISTINCT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` FROM ( SELECT TOP 5 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` WHERE `o`.`CustomerID` = 'FRANK' - ) AS `t` -) AS `t0`"); + ) AS `o0` +) AS `o1` +"""); } public override async Task Queryable_simple(bool isAsync) @@ -1352,12 +1364,14 @@ public override async Task OrderBy_Take_Count(bool isAsync) await base.OrderBy_Take_Count(isAsync); AssertSql( - $@"SELECT COUNT(*) + """ +SELECT COUNT(*) FROM ( - SELECT TOP 5 `o`.`OrderID` + SELECT TOP 5 1 FROM `Orders` AS `o` ORDER BY `o`.`OrderID` -) AS `t`"); +) AS `o0` +"""); } public override async Task Take_OrderBy_Count(bool isAsync) @@ -1365,11 +1379,13 @@ public override async Task Take_OrderBy_Count(bool isAsync) await base.Take_OrderBy_Count(isAsync); AssertSql( - $@"SELECT COUNT(*) + """ +SELECT COUNT(*) FROM ( - SELECT TOP 5 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + SELECT TOP 5 1 FROM `Orders` AS `o` -) AS `t`"); +) AS `o0` +"""); } public override async Task Any_simple(bool isAsync) @@ -1633,12 +1649,14 @@ public override async Task SelectMany_simple_subquery(bool isAsync) await base.SelectMany_simple_subquery(isAsync); AssertSql( - $@"SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `t`.`EmployeeID`, `t`.`City`, `t`.`Country`, `t`.`FirstName`, `t`.`ReportsTo`, `t`.`Title` + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `e0`.`EmployeeID`, `e0`.`City`, `e0`.`Country`, `e0`.`FirstName`, `e0`.`ReportsTo`, `e0`.`Title` FROM ( SELECT TOP 9 `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` FROM `Employees` AS `e` -) AS `t`, -`Customers` AS `c`"); +) AS `e0`, +`Customers` AS `c` +"""); } public override async Task SelectMany_simple1(bool isAsync) @@ -1908,7 +1926,7 @@ public override async Task SelectMany_Joined_DefaultIfEmpty3(bool async) AssertSql( """ -SELECT `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate` +SELECT `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate` FROM `Customers` AS `c` LEFT JOIN ( SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` @@ -1917,7 +1935,7 @@ WHERE EXISTS ( SELECT 1 FROM `Order Details` AS `o0` WHERE `o`.`OrderID` = `o0`.`OrderID`) -) AS `t` ON `c`.`CustomerID` = `t`.`CustomerID` +) AS `o1` ON `c`.`CustomerID` = `o1`.`CustomerID` """); } @@ -1943,13 +1961,15 @@ public override async Task Take_with_single(bool isAsync) await base.Take_with_single(isAsync); AssertSql( - $@"SELECT TOP 2 `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region` + """ +SELECT TOP 2 `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` FROM ( SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`CustomerID` -) AS `t` -ORDER BY `t`.`CustomerID`"); +) AS `c0` +ORDER BY `c0`.`CustomerID` +"""); } public override async Task Take_with_single_select_many(bool isAsync) @@ -1957,14 +1977,16 @@ public override async Task Take_with_single_select_many(bool isAsync) await base.Take_with_single_select_many(isAsync); AssertSql( - $@"SELECT TOP 2 `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `t`.`OrderID`, `t`.`CustomerID0`, `t`.`EmployeeID`, `t`.`OrderDate` + """ +SELECT TOP 2 `s`.`CustomerID`, `s`.`Address`, `s`.`City`, `s`.`CompanyName`, `s`.`ContactName`, `s`.`ContactTitle`, `s`.`Country`, `s`.`Fax`, `s`.`Phone`, `s`.`PostalCode`, `s`.`Region`, `s`.`OrderID`, `s`.`CustomerID0`, `s`.`EmployeeID`, `s`.`OrderDate` FROM ( SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderID`, `o`.`CustomerID` AS `CustomerID0`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Customers` AS `c`, `Orders` AS `o` ORDER BY `c`.`CustomerID`, `o`.`OrderID` -) AS `t` -ORDER BY `t`.`CustomerID`, `t`.`OrderID`"); +) AS `s` +ORDER BY `s`.`CustomerID`, `s`.`OrderID` +"""); } public override async Task Distinct_Skip(bool isAsync) @@ -1989,21 +2011,21 @@ public override async Task Distinct_Skip_Take(bool isAsync) AssertSql( """ - SELECT `t1`.`CustomerID`, `t1`.`Address`, `t1`.`City`, `t1`.`CompanyName`, `t1`.`ContactName`, `t1`.`ContactTitle`, `t1`.`Country`, `t1`.`Fax`, `t1`.`Phone`, `t1`.`PostalCode`, `t1`.`Region` +SELECT `c2`.`CustomerID`, `c2`.`Address`, `c2`.`City`, `c2`.`CompanyName`, `c2`.`ContactName`, `c2`.`ContactTitle`, `c2`.`Country`, `c2`.`Fax`, `c2`.`Phone`, `c2`.`PostalCode`, `c2`.`Region` +FROM ( + SELECT TOP 10 `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region` FROM ( - SELECT TOP 10 `t0`.`CustomerID`, `t0`.`Address`, `t0`.`City`, `t0`.`CompanyName`, `t0`.`ContactName`, `t0`.`ContactTitle`, `t0`.`Country`, `t0`.`Fax`, `t0`.`Phone`, `t0`.`PostalCode`, `t0`.`Region` + SELECT TOP 15 `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` FROM ( - SELECT TOP 15 `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region` - FROM ( - SELECT DISTINCT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` - FROM `Customers` AS `c` - ) AS `t` - ORDER BY `t`.`ContactName` - ) AS `t0` - ORDER BY `t0`.`ContactName` DESC - ) AS `t1` - ORDER BY `t1`.`ContactName` - """); + SELECT DISTINCT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ) AS `c0` + ORDER BY `c0`.`ContactName` + ) AS `c1` + ORDER BY `c1`.`ContactName` DESC +) AS `c2` +ORDER BY `c2`.`ContactName` +"""); } public override async Task Skip_Distinct(bool isAsync) @@ -2027,21 +2049,21 @@ public override async Task Skip_Take_Distinct(bool isAsync) await base.Skip_Take_Distinct(isAsync); AssertSql( -""" -SELECT DISTINCT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region` + """ +SELECT DISTINCT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` FROM ( - SELECT `t1`.`CustomerID`, `t1`.`Address`, `t1`.`City`, `t1`.`CompanyName`, `t1`.`ContactName`, `t1`.`ContactTitle`, `t1`.`Country`, `t1`.`Fax`, `t1`.`Phone`, `t1`.`PostalCode`, `t1`.`Region` + SELECT `c2`.`CustomerID`, `c2`.`Address`, `c2`.`City`, `c2`.`CompanyName`, `c2`.`ContactName`, `c2`.`ContactTitle`, `c2`.`Country`, `c2`.`Fax`, `c2`.`Phone`, `c2`.`PostalCode`, `c2`.`Region` FROM ( - SELECT TOP 10 `t0`.`CustomerID`, `t0`.`Address`, `t0`.`City`, `t0`.`CompanyName`, `t0`.`ContactName`, `t0`.`ContactTitle`, `t0`.`Country`, `t0`.`Fax`, `t0`.`Phone`, `t0`.`PostalCode`, `t0`.`Region` + SELECT TOP 10 `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region` FROM ( SELECT TOP 15 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`ContactName` - ) AS `t0` - ORDER BY `t0`.`ContactName` DESC - ) AS `t1` - ORDER BY `t1`.`ContactName` -) AS `t` + ) AS `c1` + ORDER BY `c1`.`ContactName` DESC + ) AS `c2` + ORDER BY `c2`.`ContactName` +) AS `c0` """); } @@ -2050,19 +2072,19 @@ public override async Task Skip_Take_Any(bool isAsync) await base.Skip_Take_Any(isAsync); AssertSql( -""" + """ SELECT IIF(EXISTS ( SELECT 1 FROM ( - SELECT TOP 10 `t`.`CustomerID`, `t`.`ContactName` + SELECT TOP 10 `c0`.`ContactName` FROM ( - SELECT TOP 15 `c`.`CustomerID`, `c`.`ContactName` + SELECT TOP 15 `c`.`ContactName` FROM `Customers` AS `c` ORDER BY `c`.`ContactName` - ) AS `t` - ORDER BY `t`.`ContactName` DESC - ) AS `t0` - ORDER BY `t0`.`ContactName`), TRUE, FALSE) + ) AS `c0` + ORDER BY `c0`.`ContactName` DESC + ) AS `c1` + ORDER BY `c1`.`ContactName`), TRUE, FALSE) FROM (SELECT COUNT(*) FROM `#Dual`) """); } @@ -2072,23 +2094,23 @@ public override async Task Skip_Take_All(bool isAsync) await base.Skip_Take_All(isAsync); AssertSql( -""" + """ SELECT IIF(NOT EXISTS ( SELECT 1 FROM ( - SELECT `t1`.`CustomerID`, `t1`.`Address`, `t1`.`City`, `t1`.`CompanyName`, `t1`.`ContactName`, `t1`.`ContactTitle`, `t1`.`Country`, `t1`.`Fax`, `t1`.`Phone`, `t1`.`PostalCode`, `t1`.`Region` + SELECT `c2`.`CustomerID` FROM ( - SELECT TOP 7 `t0`.`CustomerID`, `t0`.`Address`, `t0`.`City`, `t0`.`CompanyName`, `t0`.`ContactName`, `t0`.`ContactTitle`, `t0`.`Country`, `t0`.`Fax`, `t0`.`Phone`, `t0`.`PostalCode`, `t0`.`Region` + SELECT TOP 7 `c1`.`CustomerID` FROM ( - SELECT TOP 11 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + SELECT TOP 11 `c`.`CustomerID` FROM `Customers` AS `c` ORDER BY `c`.`CustomerID` - ) AS `t0` - ORDER BY `t0`.`CustomerID` DESC - ) AS `t1` - ORDER BY `t1`.`CustomerID` - ) AS `t` - WHERE `t`.`CustomerID` NOT LIKE 'B%'), TRUE, FALSE) + ) AS `c1` + ORDER BY `c1`.`CustomerID` DESC + ) AS `c2` + ORDER BY `c2`.`CustomerID` + ) AS `c0` + WHERE `c0`.`CustomerID` NOT LIKE 'B%'), TRUE, FALSE) FROM (SELECT COUNT(*) FROM `#Dual`) """); } @@ -2098,15 +2120,15 @@ public override async Task Take_All(bool isAsync) await base.Take_All(isAsync); AssertSql( -""" + """ SELECT IIF(NOT EXISTS ( SELECT 1 FROM ( - SELECT TOP 4 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + SELECT TOP 4 `c`.`CustomerID` FROM `Customers` AS `c` ORDER BY `c`.`CustomerID` - ) AS `t` - WHERE `t`.`CustomerID` NOT LIKE 'A%'), TRUE, FALSE) + ) AS `c0` + WHERE `c0`.`CustomerID` NOT LIKE 'A%'), TRUE, FALSE) FROM (SELECT COUNT(*) FROM `#Dual`) """); } @@ -2116,23 +2138,23 @@ public override async Task Skip_Take_Any_with_predicate(bool isAsync) await base.Skip_Take_Any_with_predicate(isAsync); AssertSql( -""" + """ SELECT IIF(EXISTS ( SELECT 1 FROM ( - SELECT `t1`.`CustomerID`, `t1`.`Address`, `t1`.`City`, `t1`.`CompanyName`, `t1`.`ContactName`, `t1`.`ContactTitle`, `t1`.`Country`, `t1`.`Fax`, `t1`.`Phone`, `t1`.`PostalCode`, `t1`.`Region` + SELECT `c2`.`CustomerID` FROM ( - SELECT TOP 7 `t0`.`CustomerID`, `t0`.`Address`, `t0`.`City`, `t0`.`CompanyName`, `t0`.`ContactName`, `t0`.`ContactTitle`, `t0`.`Country`, `t0`.`Fax`, `t0`.`Phone`, `t0`.`PostalCode`, `t0`.`Region` + SELECT TOP 7 `c1`.`CustomerID` FROM ( - SELECT TOP 12 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + SELECT TOP 12 `c`.`CustomerID` FROM `Customers` AS `c` ORDER BY `c`.`CustomerID` - ) AS `t0` - ORDER BY `t0`.`CustomerID` DESC - ) AS `t1` - ORDER BY `t1`.`CustomerID` - ) AS `t` - WHERE `t`.`CustomerID` LIKE 'C%'), TRUE, FALSE) + ) AS `c1` + ORDER BY `c1`.`CustomerID` DESC + ) AS `c2` + ORDER BY `c2`.`CustomerID` + ) AS `c0` + WHERE `c0`.`CustomerID` LIKE 'C%'), TRUE, FALSE) FROM (SELECT COUNT(*) FROM `#Dual`) """); } @@ -2142,15 +2164,17 @@ public override async Task Take_Any_with_predicate(bool isAsync) await base.Take_Any_with_predicate(isAsync); AssertSql( - $@"SELECT IIF(EXISTS ( + """ +SELECT IIF(EXISTS ( SELECT 1 FROM ( - SELECT TOP 5 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + SELECT TOP 5 `c`.`CustomerID` FROM `Customers` AS `c` ORDER BY `c`.`CustomerID` - ) AS `t` - WHERE `t`.`CustomerID` LIKE 'B%'), TRUE, FALSE) -FROM (SELECT COUNT(*) FROM `#Dual`)"); + ) AS `c0` + WHERE `c0`.`CustomerID` LIKE 'B%'), TRUE, FALSE) +FROM (SELECT COUNT(*) FROM `#Dual`) +"""); } public override async Task OrderBy(bool isAsync) @@ -2215,12 +2239,14 @@ public override async Task Distinct_Take(bool isAsync) await base.Distinct_Take(isAsync); AssertSql( - $@"SELECT TOP 5 `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate` + """ +SELECT TOP 5 `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` FROM ( SELECT DISTINCT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` -) AS `t` -ORDER BY `t`.`OrderID`"); +) AS `o0` +ORDER BY `o0`.`OrderID` +"""); } public override async Task Distinct_Take_Count(bool isAsync) @@ -2228,12 +2254,12 @@ public override async Task Distinct_Take_Count(bool isAsync) await base.Distinct_Take_Count(isAsync); AssertSql( -""" + """ SELECT COUNT(*) FROM ( SELECT DISTINCT TOP 5 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` -) AS `t` +) AS `o0` """); } @@ -2275,16 +2301,16 @@ public override async Task OrderBy_correlated_subquery1(bool isAsync) AssertSql( """ -SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `t`.`c` +SELECT `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region`, `c1`.`c` FROM ( SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, IIF(EXISTS ( SELECT 1 - FROM `Customers` AS `c1` - WHERE `c1`.`CustomerID` = `c`.`CustomerID`), TRUE, FALSE) AS `c` + FROM `Customers` AS `c0` + WHERE `c0`.`CustomerID` = `c`.`CustomerID`), TRUE, FALSE) AS `c` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'A%' -) AS `t` -ORDER BY NOT (`t`.`c`), `t`.`CustomerID` +) AS `c1` +ORDER BY NOT (`c1`.`c`), `c1`.`CustomerID` """); } @@ -2371,14 +2397,14 @@ public override async Task Select_DTO_constructor_distinct_with_collection_proje AssertSql( """ -SELECT `t`.`CustomerID`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +SELECT `o0`.`CustomerID`, `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate` FROM ( SELECT DISTINCT `o`.`CustomerID` FROM `Orders` AS `o` WHERE `o`.`OrderID` < 10300 -) AS `t` -LEFT JOIN `Orders` AS `o0` ON `t`.`CustomerID` = `o0`.`CustomerID` -ORDER BY `t`.`CustomerID` +) AS `o0` +LEFT JOIN `Orders` AS `o1` ON `o0`.`CustomerID` = `o1`.`CustomerID` +ORDER BY `o0`.`CustomerID` """); } @@ -2392,14 +2418,14 @@ await Assert.ThrowsAsync( AssertSql( """ -SELECT `t`.`CustomerID`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +SELECT `o0`.`CustomerID`, `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate` FROM ( SELECT DISTINCT `o`.`CustomerID` FROM `Orders` AS `o` WHERE `o`.`OrderID` < 10300 -) AS `t` -LEFT JOIN `Orders` AS `o0` ON `t`.`CustomerID` = `o0`.`CustomerID` -ORDER BY `t`.`CustomerID` +) AS `o0` +LEFT JOIN `Orders` AS `o1` ON `o0`.`CustomerID` = `o1`.`CustomerID` +ORDER BY `o0`.`CustomerID` """); } @@ -2431,13 +2457,15 @@ public override async Task Select_DTO_with_member_init_distinct_in_subquery_tran await base.Select_DTO_with_member_init_distinct_in_subquery_translated_to_server(isAsync); AssertSql( - $@"SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM ( SELECT DISTINCT `o`.`CustomerID` AS `Id`, `o`.`OrderID` AS `Count` FROM `Orders` AS `o` WHERE `o`.`OrderID` < 10300 -) AS `t` -INNER JOIN `Customers` AS `c` ON `t`.`Id` = `c`.`CustomerID`"); +) AS `o0` +INNER JOIN `Customers` AS `c` ON `o0`.`Id` = `c`.`CustomerID` +"""); } public override async Task Select_DTO_with_member_init_distinct_in_subquery_translated_to_server_2(bool isAsync) @@ -2445,13 +2473,15 @@ public override async Task Select_DTO_with_member_init_distinct_in_subquery_tran await base.Select_DTO_with_member_init_distinct_in_subquery_translated_to_server_2(isAsync); AssertSql( - $@"SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM ( SELECT DISTINCT `o`.`CustomerID` AS `Id`, `o`.`OrderID` AS `Count` FROM `Orders` AS `o` WHERE `o`.`OrderID` < 10300 -) AS `t` -INNER JOIN `Customers` AS `c` ON `t`.`Id` = `c`.`CustomerID`"); +) AS `o0` +INNER JOIN `Customers` AS `c` ON `o0`.`Id` = `c`.`CustomerID` +"""); } public override async Task Select_DTO_with_member_init_distinct_in_subquery_used_in_projection_translated_to_server(bool isAsync) @@ -2584,14 +2614,12 @@ public override async Task Null_Coalesce_Short_Circuit(bool isAsync) await base.Null_Coalesce_Short_Circuit(isAsync); AssertSql( - $""" -@__p_0='False' - -SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, CBOOL({AssertSqlHelper.Parameter("@__p_0")}) AS `Test` + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, FALSE AS `Test` FROM ( SELECT DISTINCT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` -) AS `t` +) AS `c0` """); } @@ -2640,9 +2668,11 @@ public override async Task Filter_coalesce_operator(bool isAsync) await base.Filter_coalesce_operator(isAsync); AssertSql( - $@"SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` -WHERE IIF(`c`.`CompanyName` IS NULL, `c`.`ContactName`, `c`.`CompanyName`) = 'The Big Cheese'"); +WHERE IIF(`c`.`ContactName` IS NULL, `c`.`CompanyName`, `c`.`ContactName`) = 'Liz Nixon' +"""); } public override async Task Take_skip_null_coalesce_operator(bool isAsync) @@ -2887,9 +2917,11 @@ public override async Task Select_bitwise_or(bool async) await base.Select_bitwise_or(async); AssertSql( - $@"SELECT `c`.`CustomerID`, IIF(`c`.`CustomerID` = 'ALFKI', TRUE, FALSE) BOR IIF(`c`.`CustomerID` = 'ANATR', TRUE, FALSE) AS `Value` + """ +SELECT `c`.`CustomerID`, IIF(`c`.`CustomerID` IN ('ALFKI', 'ANATR'), TRUE, FALSE) AS `Value` FROM `Customers` AS `c` -ORDER BY `c`.`CustomerID`"); +ORDER BY `c`.`CustomerID` +"""); } public override async Task Select_bitwise_or_multiple(bool async) @@ -2897,9 +2929,11 @@ public override async Task Select_bitwise_or_multiple(bool async) await base.Select_bitwise_or_multiple(async); AssertSql( - $@"SELECT `c`.`CustomerID`, (IIF(`c`.`CustomerID` = 'ALFKI', TRUE, FALSE) BOR IIF(`c`.`CustomerID` = 'ANATR', TRUE, FALSE)) BOR IIF(`c`.`CustomerID` = 'ANTON', TRUE, FALSE) AS `Value` + """ +SELECT `c`.`CustomerID`, IIF(`c`.`CustomerID` IN ('ALFKI', 'ANATR', 'ANTON'), TRUE, FALSE) AS `Value` FROM `Customers` AS `c` -ORDER BY `c`.`CustomerID`"); +ORDER BY `c`.`CustomerID` +"""); } public override async Task Select_bitwise_and(bool async) @@ -2907,9 +2941,11 @@ public override async Task Select_bitwise_and(bool async) await base.Select_bitwise_and(async); AssertSql( - $@"SELECT `c`.`CustomerID`, IIF(`c`.`CustomerID` = 'ALFKI', TRUE, FALSE) BAND IIF(`c`.`CustomerID` = 'ANATR', TRUE, FALSE) AS `Value` + """ +SELECT `c`.`CustomerID`, FALSE AS `Value` FROM `Customers` AS `c` -ORDER BY `c`.`CustomerID`"); +ORDER BY `c`.`CustomerID` +"""); } public override async Task Select_bitwise_and_or(bool async) @@ -2917,9 +2953,11 @@ public override async Task Select_bitwise_and_or(bool async) await base.Select_bitwise_and_or(async); AssertSql( - $@"SELECT `c`.`CustomerID`, (IIF(`c`.`CustomerID` = 'ALFKI', TRUE, FALSE) BAND IIF(`c`.`CustomerID` = 'ANATR', TRUE, FALSE)) BOR IIF(`c`.`CustomerID` = 'ANTON', TRUE, FALSE) AS `Value` + """ +SELECT `c`.`CustomerID`, IIF(`c`.`CustomerID` = 'ANTON', TRUE, FALSE) AS `Value` FROM `Customers` AS `c` -ORDER BY `c`.`CustomerID`"); +ORDER BY `c`.`CustomerID` +"""); } public override async Task Where_bitwise_or_with_logical_or(bool isAsync) @@ -2927,9 +2965,11 @@ public override async Task Where_bitwise_or_with_logical_or(bool isAsync) await base.Where_bitwise_or_with_logical_or(isAsync); AssertSql( - $@"SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` -WHERE (IIF(`c`.`CustomerID` = 'ALFKI', TRUE, FALSE) BOR IIF(`c`.`CustomerID` = 'ANATR', TRUE, FALSE)) = TRUE OR `c`.`CustomerID` = 'ANTON'"); +WHERE `c`.`CustomerID` IN ('ALFKI', 'ANATR', 'ANTON') +"""); } public override async Task Where_bitwise_and_with_logical_and(bool isAsync) @@ -2937,9 +2977,11 @@ public override async Task Where_bitwise_and_with_logical_and(bool isAsync) await base.Where_bitwise_and_with_logical_and(isAsync); AssertSql( - $@"SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` -WHERE (IIF(`c`.`CustomerID` = 'ALFKI', TRUE, FALSE) BAND IIF(`c`.`CustomerID` = 'ANATR', TRUE, FALSE)) = TRUE AND `c`.`CustomerID` = 'ANTON'"); +WHERE 0 = 1 +"""); } public override async Task Where_bitwise_or_with_logical_and(bool isAsync) @@ -2947,9 +2989,11 @@ public override async Task Where_bitwise_or_with_logical_and(bool isAsync) await base.Where_bitwise_or_with_logical_and(isAsync); AssertSql( - $@"SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` -WHERE (IIF(`c`.`CustomerID` = 'ALFKI', TRUE, FALSE) BOR IIF(`c`.`CustomerID` = 'ANATR', TRUE, FALSE)) = TRUE AND `c`.`Country` = 'Germany'"); +WHERE `c`.`CustomerID` IN ('ALFKI', 'ANATR') AND `c`.`Country` = 'Germany' +"""); } public override async Task Where_bitwise_and_with_logical_or(bool isAsync) @@ -2957,9 +3001,11 @@ public override async Task Where_bitwise_and_with_logical_or(bool isAsync) await base.Where_bitwise_and_with_logical_or(isAsync); AssertSql( - $@"SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` -WHERE (IIF(`c`.`CustomerID` = 'ALFKI', TRUE, FALSE) BAND IIF(`c`.`CustomerID` = 'ANATR', TRUE, FALSE)) = TRUE OR `c`.`CustomerID` = 'ANTON'"); +WHERE `c`.`CustomerID` = 'ANTON' +"""); } public override async Task Where_bitwise_binary_not(bool isAsync) @@ -3000,14 +3046,28 @@ public override async Task Where_bitwise_binary_or(bool isAync) """); } + public override async Task Where_bitwise_binary_xor(bool async) + { + await base.Where_bitwise_binary_xor(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE (`o`.`OrderID` BXOR 1) = 10249 +"""); + } + public override async Task Select_bitwise_or_with_logical_or(bool async) { await base.Select_bitwise_or_with_logical_or(async); AssertSql( - $@"SELECT `c`.`CustomerID`, IIF((IIF(`c`.`CustomerID` = 'ALFKI', TRUE, FALSE) BOR IIF(`c`.`CustomerID` = 'ANATR', TRUE, FALSE)) = TRUE OR `c`.`CustomerID` = 'ANTON', TRUE, FALSE) AS `Value` + """ +SELECT `c`.`CustomerID`, IIF(`c`.`CustomerID` IN ('ALFKI', 'ANATR', 'ANTON'), TRUE, FALSE) AS `Value` FROM `Customers` AS `c` -ORDER BY `c`.`CustomerID`"); +ORDER BY `c`.`CustomerID` +"""); } public override async Task Select_bitwise_and_with_logical_and(bool async) @@ -3015,9 +3075,11 @@ public override async Task Select_bitwise_and_with_logical_and(bool async) await base.Select_bitwise_and_with_logical_and(async); AssertSql( - $@"SELECT `c`.`CustomerID`, IIF((IIF(`c`.`CustomerID` = 'ALFKI', TRUE, FALSE) BAND IIF(`c`.`CustomerID` = 'ANATR', TRUE, FALSE)) = TRUE AND `c`.`CustomerID` = 'ANTON', TRUE, FALSE) AS `Value` + """ +SELECT `c`.`CustomerID`, FALSE AS `Value` FROM `Customers` AS `c` -ORDER BY `c`.`CustomerID`"); +ORDER BY `c`.`CustomerID` +"""); } public override async Task Handle_materialization_properly_when_more_than_two_query_sources_are_involved(bool isAsync) @@ -3100,22 +3162,22 @@ public override async Task Subquery_member_pushdown_does_not_change_original_sub AssertSql( """ -SELECT `t0`.`OrderId`, `t0`.`City`, `t0`.`c` +SELECT `o1`.`OrderId`, `o1`.`City`, `o1`.`c` FROM ( - SELECT `t`.`OrderID` AS `OrderId`, ( + SELECT `o0`.`OrderID` AS `OrderId`, ( SELECT TOP 1 `c0`.`City` FROM `Customers` AS `c0` - WHERE `c0`.`CustomerID` = `t`.`CustomerID`) AS `City`, ( - SELECT TOP 1 `c1`.`City` - FROM `Customers` AS `c1` - WHERE `c1`.`CustomerID` = `t`.`CustomerID`) AS `c` + WHERE `c0`.`CustomerID` = `o0`.`CustomerID`) AS `City`, ( + SELECT TOP 1 `c`.`City` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = `o0`.`CustomerID`) AS `c` FROM ( SELECT TOP 3 `o`.`OrderID`, `o`.`CustomerID` FROM `Orders` AS `o` ORDER BY `o`.`OrderID` - ) AS `t` -) AS `t0` -ORDER BY `t0`.`c` + ) AS `o0` +) AS `o1` +ORDER BY `o1`.`c` """); } @@ -3125,22 +3187,22 @@ public override async Task Subquery_member_pushdown_does_not_change_original_sub AssertSql( """ -SELECT `t0`.`OrderId`, `t0`.`City`, `t0`.`c` +SELECT `o1`.`OrderId`, `o1`.`City`, `o1`.`c` FROM ( - SELECT `t`.`OrderID` AS `OrderId`, ( + SELECT `o0`.`OrderID` AS `OrderId`, ( SELECT TOP 1 `c0`.`City` FROM `Customers` AS `c0` - WHERE `c0`.`CustomerID` = `t`.`CustomerID`) AS `City`, ( - SELECT TOP 1 `c1`.`City` - FROM `Customers` AS `c1` - WHERE `c1`.`CustomerID` = `t`.`CustomerID`) AS `c` + WHERE `c0`.`CustomerID` = `o0`.`CustomerID`) AS `City`, ( + SELECT TOP 1 `c`.`City` + FROM `Customers` AS `c` + WHERE `c`.`CustomerID` = `o0`.`CustomerID`) AS `c` FROM ( SELECT TOP 3 `o`.`OrderID`, `o`.`CustomerID` FROM `Orders` AS `o` ORDER BY `o`.`OrderID` - ) AS `t` -) AS `t0` -ORDER BY `t0`.`c` + ) AS `o0` +) AS `o1` +ORDER BY `o1`.`c` """); } @@ -3149,10 +3211,10 @@ public override async Task Query_expression_with_to_string_and_contains(bool isA await base.Query_expression_with_to_string_and_contains(isAsync); AssertSql( -""" + """ SELECT `o`.`CustomerID` FROM `Orders` AS `o` -WHERE `o`.`OrderDate` IS NOT NULL AND ((`o`.`EmployeeID` & '') LIKE '%7%') +WHERE `o`.`OrderDate` IS NOT NULL AND (IIF((`o`.`EmployeeID` & '') IS NULL, '', (`o`.`EmployeeID` & '')) LIKE '%7%') """); } @@ -3199,9 +3261,11 @@ public override async Task Select_expression_other_to_string(bool isAsync) await base.Select_expression_other_to_string(isAsync); AssertSql( - $@"SELECT (`o`.`OrderDate` & '') AS `ShipName` + """ +SELECT IIF((`o`.`OrderDate` & '') IS NULL, '', (`o`.`OrderDate` & '')) AS `ShipName` FROM `Orders` AS `o` -WHERE `o`.`OrderDate` IS NOT NULL"); +WHERE `o`.`OrderDate` IS NOT NULL +"""); } public override async Task Select_expression_date_add_year(bool isAsync) @@ -3419,18 +3483,18 @@ public override async Task OrderBy_skip_take(bool isAsync) AssertSql( """ - SELECT `t0`.`CustomerID`, `t0`.`Address`, `t0`.`City`, `t0`.`CompanyName`, `t0`.`ContactName`, `t0`.`ContactTitle`, `t0`.`Country`, `t0`.`Fax`, `t0`.`Phone`, `t0`.`PostalCode`, `t0`.`Region` +SELECT `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region` +FROM ( + SELECT TOP 8 `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` FROM ( - SELECT TOP 8 `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region` - FROM ( - SELECT TOP 13 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` - FROM `Customers` AS `c` - ORDER BY `c`.`ContactTitle`, `c`.`ContactName` - ) AS `t` - ORDER BY `t`.`ContactTitle` DESC, `t`.`ContactName` DESC - ) AS `t0` - ORDER BY `t0`.`ContactTitle`, `t0`.`ContactName` - """); + SELECT TOP 13 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`ContactTitle`, `c`.`ContactName` + ) AS `c0` + ORDER BY `c0`.`ContactTitle` DESC, `c0`.`ContactName` DESC +) AS `c1` +ORDER BY `c1`.`ContactTitle`, `c1`.`ContactName` +"""); } public override async Task OrderBy_skip_skip_take(bool isAsync) @@ -3460,18 +3524,18 @@ public override async Task OrderBy_skip_take_take(bool isAsync) await base.OrderBy_skip_take_take(isAsync); AssertSql( -""" -SELECT TOP 3 `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region` + """ +SELECT TOP 3 `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` FROM ( - SELECT TOP 8 `t0`.`CustomerID`, `t0`.`Address`, `t0`.`City`, `t0`.`CompanyName`, `t0`.`ContactName`, `t0`.`ContactTitle`, `t0`.`Country`, `t0`.`Fax`, `t0`.`Phone`, `t0`.`PostalCode`, `t0`.`Region` + SELECT TOP 8 `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region` FROM ( SELECT TOP 13 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`ContactTitle`, `c`.`ContactName` - ) AS `t0` - ORDER BY `t0`.`ContactTitle` DESC, `t0`.`ContactName` DESC -) AS `t` -ORDER BY `t`.`ContactTitle`, `t`.`ContactName` + ) AS `c1` + ORDER BY `c1`.`ContactTitle` DESC, `c1`.`ContactName` DESC +) AS `c0` +ORDER BY `c0`.`ContactTitle`, `c0`.`ContactName` """); } @@ -3480,26 +3544,26 @@ public override async Task OrderBy_skip_take_take_take_take(bool isAsync) await base.OrderBy_skip_take_take_take_take(isAsync); AssertSql( -""" -SELECT TOP 5 `t1`.`CustomerID`, `t1`.`Address`, `t1`.`City`, `t1`.`CompanyName`, `t1`.`ContactName`, `t1`.`ContactTitle`, `t1`.`Country`, `t1`.`Fax`, `t1`.`Phone`, `t1`.`PostalCode`, `t1`.`Region` + """ +SELECT TOP 5 `c2`.`CustomerID`, `c2`.`Address`, `c2`.`City`, `c2`.`CompanyName`, `c2`.`ContactName`, `c2`.`ContactTitle`, `c2`.`Country`, `c2`.`Fax`, `c2`.`Phone`, `c2`.`PostalCode`, `c2`.`Region` FROM ( - SELECT TOP 8 `t0`.`CustomerID`, `t0`.`Address`, `t0`.`City`, `t0`.`CompanyName`, `t0`.`ContactName`, `t0`.`ContactTitle`, `t0`.`Country`, `t0`.`Fax`, `t0`.`Phone`, `t0`.`PostalCode`, `t0`.`Region` + SELECT TOP 8 `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region` FROM ( - SELECT TOP 10 `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region` + SELECT TOP 10 `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` FROM ( - SELECT TOP 15 `t2`.`CustomerID`, `t2`.`Address`, `t2`.`City`, `t2`.`CompanyName`, `t2`.`ContactName`, `t2`.`ContactTitle`, `t2`.`Country`, `t2`.`Fax`, `t2`.`Phone`, `t2`.`PostalCode`, `t2`.`Region` + SELECT TOP 15 `c3`.`CustomerID`, `c3`.`Address`, `c3`.`City`, `c3`.`CompanyName`, `c3`.`ContactName`, `c3`.`ContactTitle`, `c3`.`Country`, `c3`.`Fax`, `c3`.`Phone`, `c3`.`PostalCode`, `c3`.`Region` FROM ( SELECT TOP 20 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`ContactTitle`, `c`.`ContactName` - ) AS `t2` - ORDER BY `t2`.`ContactTitle` DESC, `t2`.`ContactName` DESC - ) AS `t` - ORDER BY `t`.`ContactTitle`, `t`.`ContactName` - ) AS `t0` - ORDER BY `t0`.`ContactTitle`, `t0`.`ContactName` -) AS `t1` -ORDER BY `t1`.`ContactTitle`, `t1`.`ContactName` + ) AS `c3` + ORDER BY `c3`.`ContactTitle` DESC, `c3`.`ContactName` DESC + ) AS `c0` + ORDER BY `c0`.`ContactTitle`, `c0`.`ContactName` + ) AS `c1` + ORDER BY `c1`.`ContactTitle`, `c1`.`ContactName` +) AS `c2` +ORDER BY `c2`.`ContactTitle`, `c2`.`ContactName` """); } @@ -3537,21 +3601,21 @@ public override async Task OrderBy_skip_take_distinct(bool isAsync) await base.OrderBy_skip_take_distinct(isAsync); AssertSql( -""" -SELECT DISTINCT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region` + """ +SELECT DISTINCT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` FROM ( - SELECT `t1`.`CustomerID`, `t1`.`Address`, `t1`.`City`, `t1`.`CompanyName`, `t1`.`ContactName`, `t1`.`ContactTitle`, `t1`.`Country`, `t1`.`Fax`, `t1`.`Phone`, `t1`.`PostalCode`, `t1`.`Region` + SELECT `c2`.`CustomerID`, `c2`.`Address`, `c2`.`City`, `c2`.`CompanyName`, `c2`.`ContactName`, `c2`.`ContactTitle`, `c2`.`Country`, `c2`.`Fax`, `c2`.`Phone`, `c2`.`PostalCode`, `c2`.`Region` FROM ( - SELECT TOP 15 `t0`.`CustomerID`, `t0`.`Address`, `t0`.`City`, `t0`.`CompanyName`, `t0`.`ContactName`, `t0`.`ContactTitle`, `t0`.`Country`, `t0`.`Fax`, `t0`.`Phone`, `t0`.`PostalCode`, `t0`.`Region` + SELECT TOP 15 `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region` FROM ( SELECT TOP 20 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`ContactTitle`, `c`.`ContactName` - ) AS `t0` - ORDER BY `t0`.`ContactTitle` DESC, `t0`.`ContactName` DESC - ) AS `t1` - ORDER BY `t1`.`ContactTitle`, `t1`.`ContactName` -) AS `t` + ) AS `c1` + ORDER BY `c1`.`ContactTitle` DESC, `c1`.`ContactName` DESC + ) AS `c2` + ORDER BY `c2`.`ContactTitle`, `c2`.`ContactName` +) AS `c0` """); } @@ -3560,12 +3624,14 @@ public override async Task OrderBy_coalesce_take_distinct(bool isAsync) await base.OrderBy_coalesce_take_distinct(isAsync); AssertSql( - $@"SELECT DISTINCT `t`.`ProductID`, `t`.`Discontinued`, `t`.`ProductName`, `t`.`SupplierID`, `t`.`UnitPrice`, `t`.`UnitsInStock` + """ +SELECT DISTINCT `p0`.`ProductID`, `p0`.`Discontinued`, `p0`.`ProductName`, `p0`.`SupplierID`, `p0`.`UnitPrice`, `p0`.`UnitsInStock` FROM ( SELECT TOP 15 `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` FROM `Products` AS `p` ORDER BY IIF(`p`.`UnitPrice` IS NULL, 0.0, `p`.`UnitPrice`) -) AS `t`"); +) AS `p0` +"""); } public override async Task OrderBy_coalesce_skip_take_distinct(bool isAsync) @@ -3574,23 +3640,23 @@ public override async Task OrderBy_coalesce_skip_take_distinct(bool isAsync) AssertSql( """ -SELECT DISTINCT `t`.`ProductID`, `t`.`Discontinued`, `t`.`ProductName`, `t`.`SupplierID`, `t`.`UnitPrice`, `t`.`UnitsInStock` +SELECT DISTINCT `p0`.`ProductID`, `p0`.`Discontinued`, `p0`.`ProductName`, `p0`.`SupplierID`, `p0`.`UnitPrice`, `p0`.`UnitsInStock` FROM ( - SELECT `t1`.`ProductID`, `t1`.`Discontinued`, `t1`.`ProductName`, `t1`.`SupplierID`, `t1`.`UnitPrice`, `t1`.`UnitsInStock` + SELECT `p2`.`ProductID`, `p2`.`Discontinued`, `p2`.`ProductName`, `p2`.`SupplierID`, `p2`.`UnitPrice`, `p2`.`UnitsInStock` FROM ( - SELECT TOP 15 `t0`.`ProductID`, `t0`.`Discontinued`, `t0`.`ProductName`, `t0`.`SupplierID`, `t0`.`UnitPrice`, `t0`.`UnitsInStock`, `t0`.`c` + SELECT TOP 15 `p1`.`ProductID`, `p1`.`Discontinued`, `p1`.`ProductName`, `p1`.`SupplierID`, `p1`.`UnitPrice`, `p1`.`UnitsInStock`, `p1`.`c` FROM ( - SELECT TOP 20 `t`.`ProductID`, `t`.`Discontinued`, `t`.`ProductName`, `t`.`SupplierID`, `t`.`UnitPrice`, `t`.`UnitsInStock`, `t`.`c` + SELECT TOP 20 `p3`.`ProductID`, `p3`.`Discontinued`, `p3`.`ProductName`, `p3`.`SupplierID`, `p3`.`UnitPrice`, `p3`.`UnitsInStock`, `p3`.`c` FROM ( SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock`, IIF(`p`.`UnitPrice` IS NULL, 0.0, `p`.`UnitPrice`) AS `c` FROM `Products` AS `p` - ) AS `t` - ORDER BY `t`.`c` - ) AS `t0` - ORDER BY `t0`.`c` DESC - ) AS `t1` - ORDER BY `t1`.`c` -) AS `t` + ) AS `p3` + ORDER BY `p3`.`c` + ) AS `p1` + ORDER BY `p1`.`c` DESC + ) AS `p2` + ORDER BY `p2`.`c` +) AS `p0` """); } @@ -3600,23 +3666,23 @@ public override async Task OrderBy_coalesce_skip_take_distinct_take(bool isAsync AssertSql( """ -SELECT DISTINCT TOP 5 `t`.`ProductID`, `t`.`Discontinued`, `t`.`ProductName`, `t`.`SupplierID`, `t`.`UnitPrice`, `t`.`UnitsInStock` +SELECT DISTINCT TOP 5 `p0`.`ProductID`, `p0`.`Discontinued`, `p0`.`ProductName`, `p0`.`SupplierID`, `p0`.`UnitPrice`, `p0`.`UnitsInStock` FROM ( - SELECT `t1`.`ProductID`, `t1`.`Discontinued`, `t1`.`ProductName`, `t1`.`SupplierID`, `t1`.`UnitPrice`, `t1`.`UnitsInStock` + SELECT `p2`.`ProductID`, `p2`.`Discontinued`, `p2`.`ProductName`, `p2`.`SupplierID`, `p2`.`UnitPrice`, `p2`.`UnitsInStock` FROM ( - SELECT TOP 15 `t0`.`ProductID`, `t0`.`Discontinued`, `t0`.`ProductName`, `t0`.`SupplierID`, `t0`.`UnitPrice`, `t0`.`UnitsInStock`, `t0`.`c` + SELECT TOP 15 `p1`.`ProductID`, `p1`.`Discontinued`, `p1`.`ProductName`, `p1`.`SupplierID`, `p1`.`UnitPrice`, `p1`.`UnitsInStock`, `p1`.`c` FROM ( - SELECT TOP 20 `t`.`ProductID`, `t`.`Discontinued`, `t`.`ProductName`, `t`.`SupplierID`, `t`.`UnitPrice`, `t`.`UnitsInStock`, `t`.`c` + SELECT TOP 20 `p3`.`ProductID`, `p3`.`Discontinued`, `p3`.`ProductName`, `p3`.`SupplierID`, `p3`.`UnitPrice`, `p3`.`UnitsInStock`, `p3`.`c` FROM ( SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock`, IIF(`p`.`UnitPrice` IS NULL, 0.0, `p`.`UnitPrice`) AS `c` FROM `Products` AS `p` - ) AS `t` - ORDER BY `t`.`c` - ) AS `t0` - ORDER BY `t0`.`c` DESC - ) AS `t1` - ORDER BY `t1`.`c` -) AS `t` + ) AS `p3` + ORDER BY `p3`.`c` + ) AS `p1` + ORDER BY `p1`.`c` DESC + ) AS `p2` + ORDER BY `p2`.`c` +) AS `p0` """); } @@ -3625,25 +3691,25 @@ public override async Task OrderBy_skip_take_distinct_orderby_take(bool isAsync) await base.OrderBy_skip_take_distinct_orderby_take(isAsync); AssertSql( -""" -SELECT TOP 8 `t0`.`CustomerID`, `t0`.`Address`, `t0`.`City`, `t0`.`CompanyName`, `t0`.`ContactName`, `t0`.`ContactTitle`, `t0`.`Country`, `t0`.`Fax`, `t0`.`Phone`, `t0`.`PostalCode`, `t0`.`Region` + """ +SELECT TOP 8 `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region` FROM ( - SELECT DISTINCT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region` + SELECT DISTINCT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` FROM ( - SELECT `t2`.`CustomerID`, `t2`.`Address`, `t2`.`City`, `t2`.`CompanyName`, `t2`.`ContactName`, `t2`.`ContactTitle`, `t2`.`Country`, `t2`.`Fax`, `t2`.`Phone`, `t2`.`PostalCode`, `t2`.`Region` + SELECT `c3`.`CustomerID`, `c3`.`Address`, `c3`.`City`, `c3`.`CompanyName`, `c3`.`ContactName`, `c3`.`ContactTitle`, `c3`.`Country`, `c3`.`Fax`, `c3`.`Phone`, `c3`.`PostalCode`, `c3`.`Region` FROM ( - SELECT TOP 15 `t1`.`CustomerID`, `t1`.`Address`, `t1`.`City`, `t1`.`CompanyName`, `t1`.`ContactName`, `t1`.`ContactTitle`, `t1`.`Country`, `t1`.`Fax`, `t1`.`Phone`, `t1`.`PostalCode`, `t1`.`Region` + SELECT TOP 15 `c2`.`CustomerID`, `c2`.`Address`, `c2`.`City`, `c2`.`CompanyName`, `c2`.`ContactName`, `c2`.`ContactTitle`, `c2`.`Country`, `c2`.`Fax`, `c2`.`Phone`, `c2`.`PostalCode`, `c2`.`Region` FROM ( SELECT TOP 20 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`ContactTitle`, `c`.`ContactName` - ) AS `t1` - ORDER BY `t1`.`ContactTitle` DESC, `t1`.`ContactName` DESC - ) AS `t2` - ORDER BY `t2`.`ContactTitle`, `t2`.`ContactName` - ) AS `t` -) AS `t0` -ORDER BY `t0`.`ContactTitle` + ) AS `c2` + ORDER BY `c2`.`ContactTitle` DESC, `c2`.`ContactName` DESC + ) AS `c3` + ORDER BY `c3`.`ContactTitle`, `c3`.`ContactName` + ) AS `c0` +) AS `c1` +ORDER BY `c1`.`ContactTitle` """); } @@ -3742,7 +3808,8 @@ public override async Task Complex_query_with_repeated_nested_query_model_compil await base.Complex_query_with_repeated_nested_query_model_compiles_correctly(isAsync); AssertSql( - $@"SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` WHERE `c`.`CustomerID` = 'ALFKI' AND EXISTS ( SELECT 1 @@ -3753,10 +3820,11 @@ SELECT 1 WHERE EXISTS ( SELECT DISTINCT 1 FROM ( - SELECT TOP 10 `c2`.`CustomerID`, `c2`.`Address`, `c2`.`City`, `c2`.`CompanyName`, `c2`.`ContactName`, `c2`.`ContactTitle`, `c2`.`Country`, `c2`.`Fax`, `c2`.`Phone`, `c2`.`PostalCode`, `c2`.`Region` + SELECT TOP 10 1 FROM `Customers` AS `c2` ORDER BY `c2`.`CustomerID` - ) AS `t`)))"); + ) AS `c3`))) +"""); } public override async Task Anonymous_member_distinct_where(bool isAsync) @@ -3774,12 +3842,14 @@ public override async Task Anonymous_member_distinct_orderby(bool isAsync) await base.Anonymous_member_distinct_orderby(isAsync); AssertSql( - $@"SELECT `t`.`CustomerID` + """ +SELECT `c0`.`CustomerID` FROM ( SELECT DISTINCT `c`.`CustomerID` FROM `Customers` AS `c` -) AS `t` -ORDER BY `t`.`CustomerID`"); +) AS `c0` +ORDER BY `c0`.`CustomerID` +"""); } public override async Task Anonymous_member_distinct_result(bool isAsync) @@ -3793,7 +3863,7 @@ SELECT COUNT(*) SELECT DISTINCT `c`.`CustomerID` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'A%' -) AS `t` +) AS `c0` """); } @@ -3815,12 +3885,12 @@ public override async Task Anonymous_complex_distinct_orderby(bool isAsync) AssertSql( """ -SELECT `t`.`A` +SELECT `c0`.`A` FROM ( SELECT DISTINCT `c`.`CustomerID` & IIF(`c`.`City` IS NULL, '', `c`.`City`) AS `A` FROM `Customers` AS `c` -) AS `t` -ORDER BY `t`.`A` +) AS `c0` +ORDER BY `c0`.`A` """); } @@ -3835,7 +3905,7 @@ SELECT COUNT(*) SELECT DISTINCT `c`.`CustomerID` & IIF(`c`.`City` IS NULL, '', `c`.`City`) AS `A` FROM `Customers` AS `c` WHERE `c`.`CustomerID` & IIF(`c`.`City` IS NULL, '', `c`.`City`) LIKE 'A%' -) AS `t` +) AS `c0` """); } @@ -3845,12 +3915,12 @@ public override async Task Anonymous_complex_orderby(bool isAsync) AssertSql( """ -SELECT `t`.`A` +SELECT `c0`.`A` FROM ( SELECT `c`.`CustomerID` & IIF(`c`.`City` IS NULL, '', `c`.`City`) AS `A` FROM `Customers` AS `c` -) AS `t` -ORDER BY `t`.`A` +) AS `c0` +ORDER BY `c0`.`A` """); } @@ -3860,25 +3930,25 @@ public override async Task Anonymous_subquery_orderby(bool isAsync) AssertSql( """ - SELECT `t`.`A`, `t`.`c` - FROM ( - SELECT ( - SELECT TOP 1 `o1`.`OrderDate` - FROM `Orders` AS `o1` - WHERE `c`.`CustomerID` = `o1`.`CustomerID` - ORDER BY `o1`.`OrderID` DESC) AS `A`, ( - SELECT TOP 1 `o2`.`OrderDate` - FROM `Orders` AS `o2` - WHERE `c`.`CustomerID` = `o2`.`CustomerID` - ORDER BY `o2`.`OrderID` DESC) AS `c` - FROM `Customers` AS `c` - WHERE ( - SELECT COUNT(*) - FROM `Orders` AS `o` - WHERE `c`.`CustomerID` = `o`.`CustomerID`) > 1 - ) AS `t` - ORDER BY `t`.`c` - """); +SELECT `c0`.`A`, `c0`.`c` +FROM ( + SELECT ( + SELECT TOP 1 `o1`.`OrderDate` + FROM `Orders` AS `o1` + WHERE `c`.`CustomerID` = `o1`.`CustomerID` + ORDER BY `o1`.`OrderID` DESC) AS `A`, ( + SELECT TOP 1 `o0`.`OrderDate` + FROM `Orders` AS `o0` + WHERE `c`.`CustomerID` = `o0`.`CustomerID` + ORDER BY `o0`.`OrderID` DESC) AS `c` + FROM `Customers` AS `c` + WHERE ( + SELECT COUNT(*) + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) > 1 +) AS `c0` +ORDER BY `c0`.`c` +"""); } public override async Task DTO_member_distinct_where(bool isAsync) @@ -3897,12 +3967,12 @@ public override async Task DTO_member_distinct_orderby(bool isAsync) AssertSql( """ -SELECT `t`.`Property` +SELECT `c0`.`Property` FROM ( SELECT DISTINCT `c`.`CustomerID` AS `Property` FROM `Customers` AS `c` -) AS `t` -ORDER BY `t`.`Property` +) AS `c0` +ORDER BY `c0`.`Property` """); } @@ -3917,7 +3987,7 @@ SELECT COUNT(*) SELECT DISTINCT `c`.`CustomerID` AS `Property` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'A%' -) AS `t` +) AS `c0` """); } @@ -3939,12 +4009,12 @@ public override async Task DTO_complex_distinct_orderby(bool isAsync) AssertSql( """ -SELECT `t`.`Property` +SELECT `c0`.`Property` FROM ( SELECT DISTINCT `c`.`CustomerID` & IIF(`c`.`City` IS NULL, '', `c`.`City`) AS `Property` FROM `Customers` AS `c` -) AS `t` -ORDER BY `t`.`Property` +) AS `c0` +ORDER BY `c0`.`Property` """); } @@ -3959,7 +4029,7 @@ SELECT COUNT(*) SELECT DISTINCT `c`.`CustomerID` & IIF(`c`.`City` IS NULL, '', `c`.`City`) AS `Property` FROM `Customers` AS `c` WHERE `c`.`CustomerID` & IIF(`c`.`City` IS NULL, '', `c`.`City`) LIKE 'A%' -) AS `t` +) AS `c0` """); } @@ -3980,24 +4050,24 @@ public override async Task DTO_subquery_orderby(bool isAsync) AssertSql( """ -SELECT `t`.`Property`, `t`.`c` +SELECT `c0`.`Property`, `c0`.`c` FROM ( SELECT ( SELECT TOP 1 `o1`.`OrderDate` FROM `Orders` AS `o1` WHERE `c`.`CustomerID` = `o1`.`CustomerID` ORDER BY `o1`.`OrderID` DESC) AS `Property`, ( - SELECT TOP 1 `o2`.`OrderDate` - FROM `Orders` AS `o2` - WHERE `c`.`CustomerID` = `o2`.`CustomerID` - ORDER BY `o2`.`OrderID` DESC) AS `c` + SELECT TOP 1 `o0`.`OrderDate` + FROM `Orders` AS `o0` + WHERE `c`.`CustomerID` = `o0`.`CustomerID` + ORDER BY `o0`.`OrderID` DESC) AS `c` FROM `Customers` AS `c` WHERE ( SELECT COUNT(*) FROM `Orders` AS `o` WHERE `c`.`CustomerID` = `o`.`CustomerID`) > 1 -) AS `t` -ORDER BY `t`.`c` +) AS `c0` +ORDER BY `c0`.`c` """); } @@ -4006,20 +4076,20 @@ public override async Task Include_with_orderby_skip_preserves_ordering(bool isA await base.Include_with_orderby_skip_preserves_ordering(isAsync); AssertSql( -""" -SELECT `t0`.`CustomerID`, `t0`.`Address`, `t0`.`City`, `t0`.`CompanyName`, `t0`.`ContactName`, `t0`.`ContactTitle`, `t0`.`Country`, `t0`.`Fax`, `t0`.`Phone`, `t0`.`PostalCode`, `t0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + """ +SELECT `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM ( - SELECT TOP 5 `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region` + SELECT TOP 5 `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` FROM ( SELECT TOP 45 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` WHERE `c`.`CustomerID` NOT IN ('VAFFE', 'DRACD') ORDER BY `c`.`City`, `c`.`CustomerID` - ) AS `t` - ORDER BY `t`.`City` DESC, `t`.`CustomerID` DESC -) AS `t0` -LEFT JOIN `Orders` AS `o` ON `t0`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t0`.`City`, `t0`.`CustomerID` + ) AS `c0` + ORDER BY `c0`.`City` DESC, `c0`.`CustomerID` DESC +) AS `c1` +LEFT JOIN `Orders` AS `o` ON `c1`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c1`.`City`, `c1`.`CustomerID` """); } @@ -4066,12 +4136,14 @@ public override async Task Select_take_average(bool isAsync) await base.Select_take_average(isAsync); AssertSql( - $@"SELECT AVG(CDBL(`t`.`OrderID`)) + """ +SELECT AVG(CDBL(`o0`.`OrderID`)) FROM ( SELECT TOP 10 `o`.`OrderID` FROM `Orders` AS `o` ORDER BY `o`.`OrderID` -) AS `t`"); +) AS `o0` +"""); } public override async Task Select_take_count(bool isAsync) @@ -4079,11 +4151,13 @@ public override async Task Select_take_count(bool isAsync) await base.Select_take_count(isAsync); AssertSql( - $@"SELECT COUNT(*) + """ +SELECT COUNT(*) FROM ( - SELECT TOP 7 `c`.`CustomerID` + SELECT TOP 7 1 FROM `Customers` AS `c` -) AS `t`"); +) AS `c0` +"""); } public override async Task Select_orderBy_take_count(bool isAsync) @@ -4091,13 +4165,13 @@ public override async Task Select_orderBy_take_count(bool isAsync) await base.Select_orderBy_take_count(isAsync); AssertSql( -""" + """ SELECT COUNT(*) FROM ( - SELECT TOP 7 `c`.`CustomerID` + SELECT TOP 7 1 FROM `Customers` AS `c` ORDER BY `c`.`Country` -) AS `t` +) AS `c0` """); } @@ -4106,11 +4180,13 @@ public override async Task Select_take_long_count(bool isAsync) await base.Select_take_long_count(isAsync); AssertSql( - $@"SELECT COUNT(*) + """ +SELECT COUNT(*) FROM ( - SELECT TOP 7 `c`.`CustomerID` + SELECT TOP 7 1 FROM `Customers` AS `c` -) AS `t`"); +) AS `c0` +"""); } public override async Task Select_orderBy_take_long_count(bool isAsync) @@ -4118,13 +4194,13 @@ public override async Task Select_orderBy_take_long_count(bool isAsync) await base.Select_orderBy_take_long_count(isAsync); AssertSql( -""" + """ SELECT COUNT(*) FROM ( - SELECT TOP 7 `c`.`CustomerID` + SELECT TOP 7 1 FROM `Customers` AS `c` ORDER BY `c`.`Country` -) AS `t` +) AS `c0` """); } @@ -4133,12 +4209,14 @@ public override async Task Select_take_max(bool isAsync) await base.Select_take_max(isAsync); AssertSql( - $@"SELECT MAX(`t`.`OrderID`) + """ +SELECT MAX(`o0`.`OrderID`) FROM ( SELECT TOP 10 `o`.`OrderID` FROM `Orders` AS `o` ORDER BY `o`.`OrderID` -) AS `t`"); +) AS `o0` +"""); } public override async Task Select_take_min(bool isAsync) @@ -4146,12 +4224,14 @@ public override async Task Select_take_min(bool isAsync) await base.Select_take_min(isAsync); AssertSql( - $@"SELECT MIN(`t`.`OrderID`) + """ +SELECT MIN(`o0`.`OrderID`) FROM ( SELECT TOP 10 `o`.`OrderID` FROM `Orders` AS `o` ORDER BY `o`.`OrderID` -) AS `t`"); +) AS `o0` +"""); } public override async Task Select_take_sum(bool isAsync) @@ -4159,12 +4239,14 @@ public override async Task Select_take_sum(bool isAsync) await base.Select_take_sum(isAsync); AssertSql( - $@"SELECT IIF(SUM(`t`.`OrderID`) IS NULL, 0, SUM(`t`.`OrderID`)) + """ +SELECT IIF(SUM(`o0`.`OrderID`) IS NULL, 0, SUM(`o0`.`OrderID`)) FROM ( SELECT TOP 10 `o`.`OrderID` FROM `Orders` AS `o` ORDER BY `o`.`OrderID` -) AS `t`"); +) AS `o0` +"""); } public override async Task Select_skip_average(bool isAsync) @@ -4300,11 +4382,13 @@ public override async Task Select_distinct_average(bool isAsync) await base.Select_distinct_average(isAsync); AssertSql( - $@"SELECT AVG(CDBL(`t`.`OrderID`)) + """ +SELECT AVG(CDBL(`o0`.`OrderID`)) FROM ( SELECT DISTINCT `o`.`OrderID` FROM `Orders` AS `o` -) AS `t`"); +) AS `o0` +"""); } public override async Task Select_distinct_count(bool isAsync) @@ -4312,11 +4396,13 @@ public override async Task Select_distinct_count(bool isAsync) await base.Select_distinct_count(isAsync); AssertSql( - $@"SELECT COUNT(*) + """ +SELECT COUNT(*) FROM ( SELECT DISTINCT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` -) AS `t`"); +) AS `c0` +"""); } public override async Task Select_distinct_long_count(bool isAsync) @@ -4324,11 +4410,13 @@ public override async Task Select_distinct_long_count(bool isAsync) await base.Select_distinct_long_count(isAsync); AssertSql( - $@"SELECT COUNT(*) + """ +SELECT COUNT(*) FROM ( SELECT DISTINCT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` -) AS `t`"); +) AS `c0` +"""); } public override async Task Select_distinct_max(bool isAsync) @@ -4336,11 +4424,13 @@ public override async Task Select_distinct_max(bool isAsync) await base.Select_distinct_max(isAsync); AssertSql( - $@"SELECT MAX(`t`.`OrderID`) + """ +SELECT MAX(`o0`.`OrderID`) FROM ( SELECT DISTINCT `o`.`OrderID` FROM `Orders` AS `o` -) AS `t`"); +) AS `o0` +"""); } public override async Task Select_distinct_min(bool isAsync) @@ -4348,11 +4438,13 @@ public override async Task Select_distinct_min(bool isAsync) await base.Select_distinct_min(isAsync); AssertSql( - $@"SELECT MIN(`t`.`OrderID`) + """ +SELECT MIN(`o0`.`OrderID`) FROM ( SELECT DISTINCT `o`.`OrderID` FROM `Orders` AS `o` -) AS `t`"); +) AS `o0` +"""); } public override async Task Select_distinct_sum(bool isAsync) @@ -4360,11 +4452,13 @@ public override async Task Select_distinct_sum(bool isAsync) await base.Select_distinct_sum(isAsync); AssertSql( - $@"SELECT IIF(SUM(`t`.`OrderID`) IS NULL, 0, SUM(`t`.`OrderID`)) + """ +SELECT IIF(SUM(`o0`.`OrderID`) IS NULL, 0, SUM(`o0`.`OrderID`)) FROM ( SELECT DISTINCT `o`.`OrderID` FROM `Orders` AS `o` -) AS `t`"); +) AS `o0` +"""); } public override async Task Comparing_to_fixed_string_parameter(bool isAsync) @@ -4435,18 +4529,18 @@ public override async Task Comparing_navigations_using_static_Equals(bool isAsyn await base.Comparing_navigations_using_static_Equals(isAsync); AssertSql( -""" -SELECT `t`.`OrderID` AS `Id1`, `t`.`OrderID0` AS `Id2` + """ +SELECT `s`.`OrderID` AS `Id1`, `s`.`OrderID0` AS `Id2` FROM (( SELECT `o`.`OrderID`, `o`.`CustomerID`, `o0`.`OrderID` AS `OrderID0`, `o0`.`CustomerID` AS `CustomerID0` FROM `Orders` AS `o`, `Orders` AS `o0` WHERE `o`.`CustomerID` LIKE 'A%' -) AS `t` -LEFT JOIN `Customers` AS `c` ON `t`.`CustomerID` = `c`.`CustomerID`) -LEFT JOIN `Customers` AS `c0` ON `t`.`CustomerID0` = `c0`.`CustomerID` +) AS `s` +LEFT JOIN `Customers` AS `c` ON `s`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Customers` AS `c0` ON `s`.`CustomerID0` = `c0`.`CustomerID` WHERE `c`.`CustomerID` = `c0`.`CustomerID` OR (`c`.`CustomerID` IS NULL AND `c0`.`CustomerID` IS NULL) -ORDER BY `t`.`OrderID`, `t`.`OrderID0` +ORDER BY `s`.`OrderID`, `s`.`OrderID0` """); } @@ -4606,18 +4700,18 @@ public override async Task OrderBy_Dto_projection_skip_take(bool isAsync) await base.OrderBy_Dto_projection_skip_take(isAsync); AssertSql( -""" -SELECT `t0`.`Id` + """ +SELECT `c1`.`Id` FROM ( - SELECT TOP 10 `t`.`Id` + SELECT TOP 10 `c0`.`Id` FROM ( SELECT TOP 15 `c`.`CustomerID` AS `Id` FROM `Customers` AS `c` ORDER BY `c`.`CustomerID` - ) AS `t` - ORDER BY `t`.`Id` DESC -) AS `t0` -ORDER BY `t0`.`Id` + ) AS `c0` + ORDER BY `c0`.`Id` DESC +) AS `c1` +ORDER BY `c1`.`Id` """); } @@ -4626,17 +4720,19 @@ public override async Task Join_take_count_works(bool isAsync) await base.Join_take_count_works(isAsync); AssertSql( - $@"SELECT COUNT(*) + """ +SELECT COUNT(*) FROM ( - SELECT TOP 5 `o`.`OrderID`, `t`.`CustomerID` + SELECT TOP 5 1 FROM `Orders` AS `o` INNER JOIN ( SELECT `c`.`CustomerID` FROM `Customers` AS `c` WHERE `c`.`CustomerID` = 'ALFKI' - ) AS `t` ON `o`.`CustomerID` = `t`.`CustomerID` + ) AS `c0` ON `o`.`CustomerID` = `c0`.`CustomerID` WHERE `o`.`OrderID` > 690 AND `o`.`OrderID` < 710 -) AS `t0`"); +) AS `s` +"""); } public override async Task OrderBy_empty_list_contains(bool isAsync) @@ -4785,12 +4881,14 @@ public override async Task Inner_parameter_in_nested_lambdas_gets_preserved(bool await base.Inner_parameter_in_nested_lambdas_gets_preserved(isAsync); AssertSql( - $@"SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` WHERE ( SELECT COUNT(*) FROM `Orders` AS `o` - WHERE `c`.`CustomerID` = `o`.`CustomerID` AND `c`.`CustomerID` = `o`.`CustomerID`) > 0"); + WHERE `c`.`CustomerID` = `o`.`CustomerID`) > 0 +"""); } public override async Task Convert_to_nullable_on_nullable_value_is_ignored(bool isAsync) @@ -4818,19 +4916,19 @@ public override async Task OrderBy_object_type_server_evals(bool isAsync) AssertSql( """ - SELECT `t0`.`OrderID`, `t0`.`CustomerID`, `t0`.`EmployeeID`, `t0`.`OrderDate` +SELECT `s0`.`OrderID`, `s0`.`CustomerID`, `s0`.`EmployeeID`, `s0`.`OrderDate` +FROM ( + SELECT TOP 20 `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`CustomerID0`, `s`.`City` FROM ( - SELECT TOP 20 `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate`, `t`.`CustomerID0`, `t`.`City` - FROM ( - SELECT TOP 20 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID` AS `CustomerID0`, `c`.`City` - FROM `Orders` AS `o` - LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` - ORDER BY `o`.`OrderID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`City` - ) AS `t` - ORDER BY `t`.`OrderID` DESC, `t`.`OrderDate` DESC, `t`.`CustomerID0` DESC, `t`.`City` DESC - ) AS `t0` - ORDER BY `t0`.`OrderID`, `t0`.`OrderDate`, `t0`.`CustomerID0`, `t0`.`City` - """); + SELECT TOP 20 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID` AS `CustomerID0`, `c`.`City` + FROM `Orders` AS `o` + LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` + ORDER BY `o`.`OrderID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`City` + ) AS `s` + ORDER BY `s`.`OrderID` DESC, `s`.`OrderDate` DESC, `s`.`CustomerID0` DESC, `s`.`City` DESC +) AS `s0` +ORDER BY `s0`.`OrderID`, `s0`.`OrderDate`, `s0`.`CustomerID0`, `s0`.`City` +"""); } public override async Task AsQueryable_in_query_server_evals(bool isAsync) @@ -4967,9 +5065,9 @@ public override async Task Projection_take_projection(bool async) FROM `Orders` AS `o` WHERE `o`.`OrderID` < 10300 ORDER BY `o`.`OrderID` -) AS `t` -LEFT JOIN `Customers` AS `c` ON `t`.`CustomerID` = `c`.`CustomerID` -ORDER BY `t`.`OrderID` +) AS `o0` +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` +ORDER BY `o0`.`OrderID` """); } @@ -4978,20 +5076,20 @@ public override async Task Projection_skip_take_projection(bool async) await base.Projection_skip_take_projection(async); AssertSql( -""" + """ SELECT `c`.`City` FROM ( - SELECT TOP 10 `t0`.`OrderID`, `t0`.`CustomerID` + SELECT TOP 10 `o1`.`OrderID`, `o1`.`CustomerID` FROM ( SELECT TOP 15 `o`.`OrderID`, `o`.`CustomerID` FROM `Orders` AS `o` WHERE `o`.`OrderID` < 10300 ORDER BY `o`.`OrderID` - ) AS `t0` - ORDER BY `t0`.`OrderID` DESC -) AS `t` -LEFT JOIN `Customers` AS `c` ON `t`.`CustomerID` = `c`.`CustomerID` -ORDER BY `t`.`OrderID` + ) AS `o1` + ORDER BY `o1`.`OrderID` DESC +) AS `o0` +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` +ORDER BY `o0`.`OrderID` """); } @@ -5022,15 +5120,15 @@ public override async Task Collection_projection_take(bool async) AssertSql( """ -SELECT `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate`, `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` +SELECT `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` FROM ( SELECT TOP 10 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` WHERE `o`.`OrderID` < 10300 ORDER BY `o`.`OrderID` -) AS `t` -LEFT JOIN `Order Details` AS `o0` ON `t`.`OrderID` = `o0`.`OrderID` -ORDER BY `t`.`OrderID`, `o0`.`OrderID` +) AS `o1` +LEFT JOIN `Order Details` AS `o0` ON `o1`.`OrderID` = `o0`.`OrderID` +ORDER BY `o1`.`OrderID`, `o0`.`OrderID` """); } @@ -5039,20 +5137,20 @@ public override async Task Collection_projection_skip_take(bool async) await base.Collection_projection_skip_take(async); AssertSql( -""" -SELECT `t0`.`OrderID`, `t0`.`CustomerID`, `t0`.`EmployeeID`, `t0`.`OrderDate`, `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` + """ +SELECT `o2`.`OrderID`, `o2`.`CustomerID`, `o2`.`EmployeeID`, `o2`.`OrderDate`, `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` FROM ( - SELECT TOP 10 `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate` + SELECT TOP 10 `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate` FROM ( SELECT TOP 15 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` WHERE `o`.`OrderID` < 10300 ORDER BY `o`.`OrderID` - ) AS `t` - ORDER BY `t`.`OrderID` DESC -) AS `t0` -LEFT JOIN `Order Details` AS `o0` ON `t0`.`OrderID` = `o0`.`OrderID` -ORDER BY `t0`.`OrderID`, `o0`.`OrderID` + ) AS `o1` + ORDER BY `o1`.`OrderID` DESC +) AS `o2` +LEFT JOIN `Order Details` AS `o0` ON `o2`.`OrderID` = `o0`.`OrderID` +ORDER BY `o2`.`OrderID`, `o0`.`OrderID` """); } @@ -5166,11 +5264,11 @@ public override async Task Entity_equality_with_null_coalesce_client_side(bool a AssertSql( $""" -@__entity_equality_p_0_CustomerID='ALFKI' (Size = 5) +@__entity_equality_a_0_CustomerID='ALFKI' (Size = 5) SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` -WHERE `c`.`CustomerID` = {AssertSqlHelper.Parameter("@__entity_equality_p_0_CustomerID")} +WHERE `c`.`CustomerID` = {AssertSqlHelper.Parameter("@__entity_equality_a_0_CustomerID")} """); } @@ -5274,12 +5372,12 @@ public override async Task Select_distinct_Select_with_client_bindings(bool asyn AssertSql( """ -SELECT `t`.`c` +SELECT `o0`.`c` FROM ( SELECT DISTINCT DATEPART('yyyy', `o`.`OrderDate`) AS `c` FROM `Orders` AS `o` WHERE `o`.`OrderID` < 20000 -) AS `t` +) AS `o0` """); } @@ -5360,13 +5458,13 @@ public override async Task Distinct_followed_by_ordering_on_condition(bool async @__searchTerm_0='c' (Size = 15) @__searchTerm_0='c' (Size = 15) -SELECT TOP 5 `t`.`City` +SELECT TOP 5 `c0`.`City` FROM ( SELECT DISTINCT `c`.`City` FROM `Customers` AS `c` WHERE `c`.`CustomerID` NOT IN ('VAFFE', 'DRACD') -) AS `t` -ORDER BY IIF({AssertSqlHelper.Parameter("@__searchTerm_0")} = '', 0, INSTR(1, `t`.`City`, {AssertSqlHelper.Parameter("@__searchTerm_0")}, 1) - 1), `t`.`City` +) AS `c0` +ORDER BY INSTR(1, `c0`.`City`, {AssertSqlHelper.Parameter("@__searchTerm_0")}, 1) - IIF({AssertSqlHelper.Parameter("@__searchTerm_0")} = '', 0, 1), `c0`.`City` """); } @@ -5499,31 +5597,31 @@ public override async Task Skip_0_Take_0_works_when_parameter(bool async) AssertSql( """ -SELECT `t0`.`CustomerID`, `t0`.`Address`, `t0`.`City`, `t0`.`CompanyName`, `t0`.`ContactName`, `t0`.`ContactTitle`, `t0`.`Country`, `t0`.`Fax`, `t0`.`Phone`, `t0`.`PostalCode`, `t0`.`Region` +SELECT `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region` FROM ( - SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region` + SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` FROM ( SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` WHERE 0 = 1 - ) AS `t` + ) AS `c0` WHERE 0 = 1 -) AS `t0` -ORDER BY `t0`.`CustomerID` +) AS `c1` +ORDER BY `c1`.`CustomerID` """, // """ -SELECT `t0`.`CustomerID`, `t0`.`Address`, `t0`.`City`, `t0`.`CompanyName`, `t0`.`ContactName`, `t0`.`ContactTitle`, `t0`.`Country`, `t0`.`Fax`, `t0`.`Phone`, `t0`.`PostalCode`, `t0`.`Region` +SELECT `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region` FROM ( - SELECT TOP 1 `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region` + SELECT TOP 1 `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` FROM ( SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`CustomerID` - ) AS `t` - ORDER BY `t`.`CustomerID` DESC -) AS `t0` -ORDER BY `t0`.`CustomerID` + ) AS `c0` + ORDER BY `c0`.`CustomerID` DESC +) AS `c1` +ORDER BY `c1`.`CustomerID` """); } @@ -5532,14 +5630,43 @@ public override async Task Skip_0_Take_0_works_when_constant(bool async) await base.Skip_0_Take_0_works_when_constant(async); AssertSql( -""" + """ SELECT IIF(EXISTS ( SELECT 1 FROM ( SELECT `o`.`OrderID` FROM `Orders` AS `o` WHERE 0 = 1 - ) AS `t` + ) AS `o0` + WHERE 0 = 1), TRUE, FALSE) +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` LIKE 'F%' +ORDER BY `c`.`CustomerID` +"""); + } + + public override async Task Skip_1_Take_0_works_when_constant(bool async) + { + await base.Skip_1_Take_0_works_when_constant(async); + + AssertSql( + """ +SELECT CAST(0 AS bit) +FROM [Customers] AS [c] +WHERE [c].[CustomerID] LIKE N'F%' +ORDER BY [c].[CustomerID] +"""); + } + + public override async Task Take_0_works_when_constant(bool async) + { + await base.Take_0_works_when_constant(async); + + AssertSql( + """ +SELECT IIF(EXISTS ( + SELECT 1 + FROM `Orders` AS `o` WHERE 0 = 1), TRUE, FALSE) FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'F%' @@ -5552,7 +5679,7 @@ public async Task Single_Predicate_Cancellation() => await Assert.ThrowsAnyAsync( async () => await Single_Predicate_Cancellation_test(Fixture.TestSqlLoggerFactory.CancelQuery())); - +#nullable disable [ConditionalFact] public Task Query_compiler_concurrency() { @@ -5585,6 +5712,7 @@ orderby o2.OrderID return Task.WhenAll(tasks); } +#nullable enable [ConditionalFact] public Task Race_when_context_disposed_before_query_termination() @@ -5672,12 +5800,12 @@ public override async Task Select_nested_collection_with_distinct(bool async) SELECT IIF(EXISTS ( SELECT 1 FROM `Orders` AS `o` - WHERE `c`.`CustomerID` = `o`.`CustomerID`), TRUE, FALSE), `c`.`CustomerID`, `t`.`CustomerID` + WHERE `c`.`CustomerID` = `o`.`CustomerID`), TRUE, FALSE), `c`.`CustomerID`, `o1`.`CustomerID` FROM `Customers` AS `c` LEFT JOIN ( SELECT DISTINCT `o0`.`CustomerID` FROM `Orders` AS `o0` -) AS `t` ON `c`.`CustomerID` = `t`.`CustomerID` +) AS `o1` ON `c`.`CustomerID` = `o1`.`CustomerID` WHERE `c`.`CustomerID` LIKE 'A%' ORDER BY `c`.`CustomerID` """); @@ -5688,7 +5816,7 @@ public override async Task SelectMany_primitive_select_subquery(bool async) await base.SelectMany_primitive_select_subquery(async); AssertSql( - """ + $""" SELECT IIF(EXISTS ( SELECT 1 FROM `Employees` AS `e`), TRUE, FALSE) @@ -5701,13 +5829,6 @@ SELECT 1 SELECT CBOOL({AssertSqlHelper.Parameter("@__Any_0")}) FROM `Employees` AS `e`, `Employees` AS `e0` -""", - // - """ -SELECT IIF(EXISTS ( - SELECT 1 - FROM `Employees` AS `e`), TRUE, FALSE) -FROM (SELECT COUNT(*) FROM `#Dual`) """); } @@ -5755,12 +5876,12 @@ public override async Task Take_Distinct(bool async) AssertSql( """ -SELECT DISTINCT `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate` +SELECT DISTINCT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` FROM ( SELECT TOP 5 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` ORDER BY `o`.`OrderID` -) AS `t` +) AS `o0` """); } @@ -5806,15 +5927,15 @@ public override async Task Select_nested_collection_in_anonymous_type(bool async AssertSql( """ -SELECT `c`.`CustomerID`, `t`.`OrderID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +SELECT `c`.`CustomerID`, `o0`.`OrderID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` LEFT JOIN ( SELECT `o`.`OrderID`, `o`.`CustomerID` FROM `Orders` AS `o` WHERE DATEPART('yyyy', `o`.`OrderDate`) = 1997 -) AS `t` ON `c`.`CustomerID` = `t`.`CustomerID` +) AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` WHERE `c`.`CustomerID` = 'ALFKI' -ORDER BY `c`.`CustomerID`, `t`.`OrderID` +ORDER BY `c`.`CustomerID`, `o0`.`OrderID` """); } @@ -6043,14 +6164,14 @@ public override async Task Perform_identity_resolution_reuses_same_instances_acr AssertSql( """ -SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate`, `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` FROM (`Customers` AS `c` INNER JOIN ( SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` WHERE `o`.`OrderID` < 10500 -) AS `t` ON `c`.`CustomerID` = `t`.`CustomerID`) -LEFT JOIN `Customers` AS `c0` ON `t`.`CustomerID` = `c0`.`CustomerID` +) AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID`) +LEFT JOIN `Customers` AS `c0` ON `o0`.`CustomerID` = `c0`.`CustomerID` WHERE `c`.`CustomerID` LIKE 'A%' """); } @@ -6153,16 +6274,6 @@ SELECT 1 SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` WHERE {AssertSqlHelper.Parameter("@__Any_0")} = TRUE -""", - // - $""" -@__firstOrder_OrderID_0='10248' - -SELECT IIF(EXISTS ( - SELECT 1 - FROM `Orders` AS `o` - WHERE `o`.`OrderID` = {AssertSqlHelper.Parameter("@__firstOrder_OrderID_0")}), TRUE, FALSE) -FROM (SELECT COUNT(*) FROM `#Dual`) """); } @@ -6559,6 +6670,20 @@ public override void Can_cast_CreateQuery_result_to_IQueryable_T_bug_1730() AssertSql(); } + public override async Task IQueryable_captured_variable() + { + await base.IQueryable_captured_variable(); + + AssertSql( + """ +SELECT COUNT(*) +FROM `Customers` AS `c` +WHERE ( + SELECT COUNT(*) + FROM `Orders` AS `o`) = 2 +"""); + } + public override async Task Multiple_context_instances(bool async) { await base.Multiple_context_instances(async); @@ -6727,6 +6852,44 @@ ORDER BY [o].[OrderID] """); } + public override async Task Subquery_with_navigation_inside_inline_collection(bool async) + { + await base.Subquery_with_navigation_inside_inline_collection(async); + + AssertSql( + """ +SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] +FROM [Customers] AS [c] +WHERE ( + SELECT COALESCE(SUM([v].[Value]), 0) + FROM (VALUES (CAST(100 AS int)), (( + SELECT COUNT(*) + FROM [Orders] AS [o] + WHERE [c].[CustomerID] = [o].[CustomerID]))) AS [v]([Value])) > 101 +"""); + } + + public override async Task Parameter_collection_Contains_with_projection_and_ordering(bool async) + { + await base.Parameter_collection_Contains_with_projection_and_ordering(async); + + AssertSql( + """ +SELECT `o3`.`Key`, `o3`.`MaxTimestamp` +FROM ( + SELECT `o`.`Quantity` AS `Key`, ( + SELECT MAX(`o1`.`OrderDate`) + FROM `Order Details` AS `o0` + INNER JOIN `Orders` AS `o1` ON `o0`.`OrderID` = `o1`.`OrderID` + WHERE `o0`.`OrderID` IN (10248, 10249) AND `o`.`Quantity` = `o0`.`Quantity`) AS `MaxTimestamp` + FROM `Order Details` AS `o` + WHERE `o`.`OrderID` IN (10248, 10249) + GROUP BY `o`.`Quantity` +) AS `o3` +ORDER BY `o3`.`MaxTimestamp` +"""); + } + public override async Task Contains_over_concatenated_columns_with_different_sizes(bool async) { await base.Contains_over_concatenated_columns_with_different_sizes(async); @@ -6770,11 +6933,11 @@ public override async Task Contains_over_concatenated_column_and_parameter(bool AssertSql( """ -@__someVariable_1='SomeVariable' (Size = 255) +@__someVariable_0='SomeVariable' (Size = 255) SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` -WHERE `c`.`CustomerID` & @__someVariable_1 IN ('ALFKISomeVariable', 'ANATRSomeVariable', 'ALFKIX') +WHERE `c`.`CustomerID` & @__someVariable_0 IN ('ALFKISomeVariable', 'ANATRSomeVariable', 'ALFKIX') """); } @@ -6792,41 +6955,25 @@ public override async Task Contains_over_concatenated_parameter_and_constant(boo """); } - public override async Task Subquery_with_navigation_inside_inline_collection(bool async) + public override async Task Compiler_generated_local_closure_produces_valid_parameter_name(bool async) { - await base.Subquery_with_navigation_inside_inline_collection(async); + await base.Compiler_generated_local_closure_produces_valid_parameter_name(async); - AssertSql( - """ -SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] -FROM [Customers] AS [c] -WHERE ( - SELECT COALESCE(SUM([v].[Value]), 0) - FROM (VALUES (CAST(100 AS int)), (( - SELECT COUNT(*) - FROM [Orders] AS [o] - WHERE [c].[CustomerID] = [o].[CustomerID]))) AS [v]([Value])) > 101 -"""); + // No AssertSQL since compiler generated variable names are different between local and CI + //AssertSql(""); } - public override async Task Parameter_collection_Contains_with_projection_and_ordering(bool async) + public override async Task Static_member_access_gets_parameterized_within_larger_evaluatable(bool async) { - await base.Parameter_collection_Contains_with_projection_and_ordering(async); + await base.Static_member_access_gets_parameterized_within_larger_evaluatable(async); AssertSql( """ -SELECT `t`.`Key`, `t`.`MaxTimestamp` -FROM ( - SELECT `o`.`Quantity` AS `Key`, ( - SELECT MAX(`o3`.`OrderDate`) - FROM `Order Details` AS `o2` - INNER JOIN `Orders` AS `o3` ON `o2`.`OrderID` = `o3`.`OrderID` - WHERE `o2`.`OrderID` IN (10248, 10249) AND `o`.`Quantity` = `o2`.`Quantity`) AS `MaxTimestamp` - FROM `Order Details` AS `o` - WHERE `o`.`OrderID` IN (10248, 10249) - GROUP BY `o`.`Quantity` -) AS `t` -ORDER BY `t`.`MaxTimestamp` +@__p_0='ALFKI' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = @__p_0 """); } diff --git a/test/EFCore.Jet.FunctionalTests/Query/NorthwindNavigationsQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/NorthwindNavigationsQueryJetTest.cs index 97a065b1..a7111697 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/NorthwindNavigationsQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/NorthwindNavigationsQueryJetTest.cs @@ -19,9 +19,6 @@ public NorthwindNavigationsQueryJetTest( Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); } - protected override bool CanExecuteQueryString - => false; - [ConditionalFact] public virtual void Check_all_tests_overridden() => TestHelpers.AssertAllMethodsOverridden(GetType()); @@ -331,20 +328,20 @@ public override async Task Select_Where_Navigation_Scalar_Equals_Navigation_Scal await base.Select_Where_Navigation_Scalar_Equals_Navigation_Scalar_Projected(isAsync); AssertSql( -""" -SELECT `t0`.`CustomerID`, `t0`.`CustomerID0` AS `C2` + """ +SELECT `s`.`CustomerID`, `s`.`CustomerID0` AS `C2` FROM (( - SELECT `o`.`CustomerID`, `t`.`CustomerID` AS `CustomerID0` + SELECT `o`.`CustomerID`, `o1`.`CustomerID` AS `CustomerID0` FROM `Orders` AS `o`, ( SELECT `o0`.`CustomerID` FROM `Orders` AS `o0` WHERE `o0`.`OrderID` < 10400 - ) AS `t` + ) AS `o1` WHERE `o`.`OrderID` < 10300 -) AS `t0` -LEFT JOIN `Customers` AS `c` ON `t0`.`CustomerID` = `c`.`CustomerID`) -LEFT JOIN `Customers` AS `c0` ON `t0`.`CustomerID0` = `c0`.`CustomerID` +) AS `s` +LEFT JOIN `Customers` AS `c` ON `s`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Customers` AS `c0` ON `s`.`CustomerID0` = `c0`.`CustomerID` WHERE `c`.`City` = `c0`.`City` OR (`c`.`City` IS NULL AND `c0`.`City` IS NULL) """); } @@ -354,16 +351,16 @@ public override async Task Select_Where_Navigation_Equals_Navigation(bool isAsyn await base.Select_Where_Navigation_Equals_Navigation(isAsync); AssertSql( -""" -SELECT `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate`, `t`.`OrderID0`, `t`.`CustomerID0`, `t`.`EmployeeID0`, `t`.`OrderDate0` + """ +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`CustomerID0`, `s`.`EmployeeID0`, `s`.`OrderDate0` FROM (( SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID` AS `OrderID0`, `o0`.`CustomerID` AS `CustomerID0`, `o0`.`EmployeeID` AS `EmployeeID0`, `o0`.`OrderDate` AS `OrderDate0` FROM `Orders` AS `o`, `Orders` AS `o0` WHERE (`o`.`CustomerID` LIKE 'A%') AND (`o0`.`CustomerID` LIKE 'A%') -) AS `t` -LEFT JOIN `Customers` AS `c` ON `t`.`CustomerID` = `c`.`CustomerID`) -LEFT JOIN `Customers` AS `c0` ON `t`.`CustomerID0` = `c0`.`CustomerID` +) AS `s` +LEFT JOIN `Customers` AS `c` ON `s`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Customers` AS `c0` ON `s`.`CustomerID0` = `c0`.`CustomerID` WHERE `c`.`CustomerID` = `c0`.`CustomerID` OR (`c`.`CustomerID` IS NULL AND `c0`.`CustomerID` IS NULL) """); } @@ -492,11 +489,13 @@ public override async Task Collection_select_nav_prop_predicate(bool isAsync) await base.Collection_select_nav_prop_predicate(isAsync); AssertSql( - $@"SELECT IIF(( - SELECT COUNT(*) + """ +SELECT IIF(EXISTS ( + SELECT 1 FROM `Orders` AS `o` - WHERE `c`.`CustomerID` = `o`.`CustomerID`) > 0, TRUE, FALSE) -FROM `Customers` AS `c`"); + WHERE `c`.`CustomerID` = `o`.`CustomerID`), TRUE, FALSE) +FROM `Customers` AS `c` +"""); } public override async Task Collection_where_nav_prop_any(bool isAsync) @@ -598,15 +597,15 @@ public override async Task Collection_orderby_nav_prop_count(bool isAsync) AssertSql( """ -SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `t`.`c` +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `c0`.`c` FROM ( SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, ( SELECT COUNT(*) - FROM `Orders` AS `o0` - WHERE `c`.`CustomerID` = `o0`.`CustomerID`) AS `c` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID`) AS `c` FROM `Customers` AS `c` -) AS `t` -ORDER BY `t`.`c`, `t`.`CustomerID` +) AS `c0` +ORDER BY `c0`.`c`, `c0`.`CustomerID` """); } @@ -901,22 +900,22 @@ public override async Task Project_single_scalar_value_subquery_in_query_with_op AssertSql( """ -SELECT `t`.`OrderID`, IIF(( - SELECT TOP 1 `o0`.`OrderID` - FROM `Order Details` AS `o0` - WHERE `t`.`OrderID` = `o0`.`OrderID` - ORDER BY `o0`.`OrderID`, `o0`.`ProductID`) IS NULL, 0, ( - SELECT TOP 1 `o0`.`OrderID` - FROM `Order Details` AS `o0` - WHERE `t`.`OrderID` = `o0`.`OrderID` - ORDER BY `o0`.`OrderID`, `o0`.`ProductID`)) AS `OrderDetail`, `c`.`City` +SELECT `o0`.`OrderID`, IIF(( + SELECT TOP 1 `o1`.`OrderID` + FROM `Order Details` AS `o1` + WHERE `o0`.`OrderID` = `o1`.`OrderID` + ORDER BY `o1`.`OrderID`, `o1`.`ProductID`) IS NULL, 0, ( + SELECT TOP 1 `o1`.`OrderID` + FROM `Order Details` AS `o1` + WHERE `o0`.`OrderID` = `o1`.`OrderID` + ORDER BY `o1`.`OrderID`, `o1`.`ProductID`)) AS `OrderDetail`, `c`.`City` FROM ( SELECT TOP 3 `o`.`OrderID`, `o`.`CustomerID` FROM `Orders` AS `o` ORDER BY `o`.`OrderID` -) AS `t` -LEFT JOIN `Customers` AS `c` ON `t`.`CustomerID` = `c`.`CustomerID` -ORDER BY `t`.`OrderID` +) AS `o0` +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` +ORDER BY `o0`.`OrderID` """); } @@ -1006,19 +1005,19 @@ public override async Task Select_Where_Navigation_Scalar_Equals_Navigation_Scal AssertSql( """ -SELECT `t0`.`OrderID`, `t0`.`CustomerID`, `t0`.`EmployeeID`, `t0`.`OrderDate`, `t0`.`OrderID0`, `t0`.`CustomerID0`, `t0`.`EmployeeID0`, `t0`.`OrderDate0` +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`CustomerID0`, `s`.`EmployeeID0`, `s`.`OrderDate0` FROM (( - SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `t`.`OrderID` AS `OrderID0`, `t`.`CustomerID` AS `CustomerID0`, `t`.`EmployeeID` AS `EmployeeID0`, `t`.`OrderDate` AS `OrderDate0` + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o1`.`OrderID` AS `OrderID0`, `o1`.`CustomerID` AS `CustomerID0`, `o1`.`EmployeeID` AS `EmployeeID0`, `o1`.`OrderDate` AS `OrderDate0` FROM `Orders` AS `o`, ( SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` FROM `Orders` AS `o0` WHERE `o0`.`OrderID` < 10400 - ) AS `t` + ) AS `o1` WHERE `o`.`OrderID` < 10300 -) AS `t0` -LEFT JOIN `Customers` AS `c` ON `t0`.`CustomerID` = `c`.`CustomerID`) -LEFT JOIN `Customers` AS `c0` ON `t0`.`CustomerID0` = `c0`.`CustomerID` +) AS `s` +LEFT JOIN `Customers` AS `c` ON `s`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Customers` AS `c0` ON `s`.`CustomerID0` = `c0`.`CustomerID` WHERE `c`.`City` = `c0`.`City` OR (`c`.`City` IS NULL AND `c0`.`City` IS NULL) """); } diff --git a/test/EFCore.Jet.FunctionalTests/Query/NorthwindQueryFiltersQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/NorthwindQueryFiltersQueryJetTest.cs index 4cac9dc9..3dd71790 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/NorthwindQueryFiltersQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/NorthwindQueryFiltersQueryJetTest.cs @@ -141,20 +141,20 @@ public override async Task Include_query(bool async) @__ef_filter__TenantPrefix_0_startswith='B%' (Size = 40) @__ef_filter__TenantPrefix_0_startswith='B%' (Size = 40) -SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `t0`.`OrderID`, `t0`.`CustomerID`, `t0`.`EmployeeID`, `t0`.`OrderDate`, `t0`.`CustomerID0` +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`CustomerID0` FROM `Customers` AS `c` LEFT JOIN ( - SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `t`.`CustomerID` AS `CustomerID0` + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c1`.`CustomerID` AS `CustomerID0` FROM `Orders` AS `o` LEFT JOIN ( SELECT `c0`.`CustomerID`, `c0`.`CompanyName` FROM `Customers` AS `c0` WHERE `c0`.`CompanyName` LIKE {AssertSqlHelper.Parameter("@__ef_filter__TenantPrefix_0_startswith")} - ) AS `t` ON `o`.`CustomerID` = `t`.`CustomerID` - WHERE `t`.`CustomerID` IS NOT NULL AND `t`.`CompanyName` IS NOT NULL -) AS `t0` ON `c`.`CustomerID` = `t0`.`CustomerID` + ) AS `c1` ON `o`.`CustomerID` = `c1`.`CustomerID` + WHERE `c1`.`CustomerID` IS NOT NULL AND `c1`.`CompanyName` IS NOT NULL +) AS `s` ON `c`.`CustomerID` = `s`.`CustomerID` WHERE `c`.`CompanyName` LIKE {AssertSqlHelper.Parameter("@__ef_filter__TenantPrefix_0_startswith")} -ORDER BY `c`.`CustomerID`, `t0`.`OrderID` +ORDER BY `c`.`CustomerID`, `s`.`OrderID` """); } @@ -177,14 +177,14 @@ public override async Task Included_many_to_one_query(bool async) $""" @__ef_filter__TenantPrefix_0_startswith='B%' (Size = 40) -SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region` +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` FROM `Orders` AS `o` LEFT JOIN ( SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` WHERE `c`.`CompanyName` LIKE {AssertSqlHelper.Parameter("@__ef_filter__TenantPrefix_0_startswith")} -) AS `t` ON `o`.`CustomerID` = `t`.`CustomerID` -WHERE `t`.`CustomerID` IS NOT NULL AND `t`.`CompanyName` IS NOT NULL +) AS `c0` ON `o`.`CustomerID` = `c0`.`CustomerID` +WHERE `c0`.`CustomerID` IS NOT NULL AND `c0`.`CompanyName` IS NOT NULL """); } @@ -197,7 +197,7 @@ public override async Task Project_reference_that_itself_has_query_filter_with_a @__ef_filter__TenantPrefix_1_startswith='B%' (Size = 40) @__ef_filter___quantity_0='50' -SELECT `t0`.`OrderID`, `t0`.`CustomerID`, `t0`.`EmployeeID`, `t0`.`OrderDate` +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate` FROM `Order Details` AS `o` INNER JOIN ( SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` @@ -206,9 +206,9 @@ LEFT JOIN ( SELECT `c`.`CustomerID`, `c`.`CompanyName` FROM `Customers` AS `c` WHERE `c`.`CompanyName` LIKE {AssertSqlHelper.Parameter("@__ef_filter__TenantPrefix_1_startswith")} - ) AS `t` ON `o0`.`CustomerID` = `t`.`CustomerID` - WHERE `t`.`CustomerID` IS NOT NULL AND `t`.`CompanyName` IS NOT NULL -) AS `t0` ON `o`.`OrderID` = `t0`.`OrderID` + ) AS `c0` ON `o0`.`CustomerID` = `c0`.`CustomerID` + WHERE `c0`.`CustomerID` IS NOT NULL AND `c0`.`CompanyName` IS NOT NULL +) AS `s` ON `o`.`OrderID` = `s`.`OrderID` WHERE `o`.`Quantity` > {AssertSqlHelper.Parameter("@__ef_filter___quantity_0")} """); } @@ -288,8 +288,8 @@ LEFT JOIN ( SELECT `c`.`CustomerID`, `c`.`CompanyName` FROM `Customers` AS `c` WHERE `c`.`CompanyName` LIKE {AssertSqlHelper.Parameter("@__ef_filter__TenantPrefix_0_startswith")} -) AS `t` ON `m`.`CustomerID` = `t`.`CustomerID` -WHERE `t`.`CustomerID` IS NOT NULL AND `t`.`CompanyName` IS NOT NULL +) AS `c0` ON `m`.`CustomerID` = `c0`.`CustomerID` +WHERE `c0`.`CustomerID` IS NOT NULL AND `c0`.`CompanyName` IS NOT NULL """); } @@ -331,8 +331,8 @@ LEFT JOIN ( SELECT `c`.`CustomerID`, `c`.`CompanyName` FROM `Customers` AS `c` WHERE `c`.`CompanyName` LIKE {AssertSqlHelper.Parameter("@__ef_filter__TenantPrefix_0_startswith")} -) AS `t` ON `o`.`CustomerID` = `t`.`CustomerID` -WHERE `t`.`CustomerID` IS NOT NULL AND `t`.`CompanyName` IS NOT NULL +) AS `c0` ON `o`.`CustomerID` = `c0`.`CustomerID` +WHERE `c0`.`CustomerID` IS NOT NULL AND `c0`.`CompanyName` IS NOT NULL """); } @@ -351,14 +351,14 @@ public override async Task Included_many_to_one_query2(bool async) $""" @__ef_filter__TenantPrefix_0_startswith='B%' (Size = 40) -SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region` +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` FROM `Orders` AS `o` LEFT JOIN ( SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` WHERE `c`.`CompanyName` LIKE {AssertSqlHelper.Parameter("@__ef_filter__TenantPrefix_0_startswith")} -) AS `t` ON `o`.`CustomerID` = `t`.`CustomerID` -WHERE `t`.`CustomerID` IS NOT NULL AND `t`.`CompanyName` IS NOT NULL +) AS `c0` ON `o`.`CustomerID` = `c0`.`CustomerID` +WHERE `c0`.`CustomerID` IS NOT NULL AND `c0`.`CompanyName` IS NOT NULL """); } diff --git a/test/EFCore.Jet.FunctionalTests/Query/NorthwindQueryJetFixture.cs b/test/EFCore.Jet.FunctionalTests/Query/NorthwindQueryJetFixture.cs index 132a3d2e..1fe4c896 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/NorthwindQueryJetFixture.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/NorthwindQueryJetFixture.cs @@ -12,7 +12,7 @@ namespace EntityFrameworkCore.Jet.FunctionalTests.Query { public class NorthwindQueryJetFixture : NorthwindQueryRelationalFixture - where TModelCustomizer : IModelCustomizer, new() + where TModelCustomizer : ITestModelCustomizer, new() { protected override ITestStoreFactory TestStoreFactory => JetNorthwindTestStoreFactory.Instance; diff --git a/test/EFCore.Jet.FunctionalTests/Query/NorthwindQueryTaggingQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/NorthwindQueryTaggingQueryJetTest.cs index bc02bdfd..ef8b6140 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/NorthwindQueryTaggingQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/NorthwindQueryTaggingQueryJetTest.cs @@ -54,10 +54,10 @@ public override void Tags_on_subquery() SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c`, ( - SELECT TOP 5 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + SELECT TOP 5 1 FROM `Orders` AS `o` ORDER BY `o`.`OrderID` -) AS `t` +) AS `o0` WHERE `c`.`CustomerID` = 'ALFKI' """); } @@ -80,14 +80,14 @@ public override void Tag_on_include_query() AssertSql( """ -SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM ( SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`CustomerID` -) AS `t` -LEFT JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CustomerID` +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` """); } diff --git a/test/EFCore.Jet.FunctionalTests/Query/NorthwindSelectQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/NorthwindSelectQueryJetTest.cs index 70566f27..23d414d8 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/NorthwindSelectQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/NorthwindSelectQueryJetTest.cs @@ -21,9 +21,6 @@ public NorthwindSelectQueryJetTest( Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); } - protected override bool CanExecuteQueryString - => false; - [ConditionalFact] public virtual void Check_all_tests_overridden() => TestHelpers.AssertAllMethodsOverridden(GetType()); @@ -52,19 +49,19 @@ public override async Task Projection_when_arithmetic_mixed(bool isAsync) AssertSql( """ - SELECT CLNG(`t0`.`EmployeeID`) + CLNG(`t`.`OrderID`) AS `Add`, `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate`, 42 AS `Literal`, `t0`.`EmployeeID`, `t0`.`City`, `t0`.`Country`, `t0`.`FirstName`, `t0`.`ReportsTo`, `t0`.`Title` - FROM ( - SELECT TOP 10 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` - FROM `Orders` AS `o` - ORDER BY `o`.`OrderID` - ) AS `t`, - ( - SELECT TOP 5 `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` - FROM `Employees` AS `e` - ORDER BY `e`.`EmployeeID` - ) AS `t0` - ORDER BY `t`.`OrderID` - """); +SELECT CLNG(`e0`.`EmployeeID`) + CLNG(`o0`.`OrderID`) AS `Add`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, 42 AS `Literal`, `e0`.`EmployeeID`, `e0`.`City`, `e0`.`Country`, `e0`.`FirstName`, `e0`.`ReportsTo`, `e0`.`Title` +FROM ( + SELECT TOP 10 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + FROM `Orders` AS `o` + ORDER BY `o`.`OrderID` +) AS `o0`, +( + SELECT TOP 5 `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` + FROM `Employees` AS `e` + ORDER BY `e`.`EmployeeID` +) AS `e0` +ORDER BY `o0`.`OrderID` +"""); } public override async Task Projection_when_null_value(bool isAsync) @@ -285,15 +282,17 @@ public override async Task Select_nested_collection(bool isAsync) await base.Select_nested_collection(isAsync); AssertSql( - $@"SELECT `c`.`CustomerID`, `t`.`OrderID` + """ +SELECT `c`.`CustomerID`, `o0`.`OrderID` FROM `Customers` AS `c` LEFT JOIN ( SELECT `o`.`OrderID`, `o`.`CustomerID` FROM `Orders` AS `o` WHERE DATEPART('yyyy', `o`.`OrderDate`) = 1997 -) AS `t` ON `c`.`CustomerID` = `t`.`CustomerID` +) AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` WHERE `c`.`City` = 'London' -ORDER BY `c`.`CustomerID`, `t`.`OrderID`"); +ORDER BY `c`.`CustomerID`, `o0`.`OrderID` +"""); } public override async Task Select_nested_collection_multi_level(bool isAsync) @@ -647,6 +646,50 @@ SELECT IIF(`c`.`CustomerID` = '1', '01', IIF(`c`.`CustomerID` = '2', '02', IIF(` """); } + public override async Task Select_conditional_drops_false(bool isAsync) + { + await base.Select_conditional_drops_false(isAsync); + + AssertSql( + """ +SELECT IIF((`o`.`OrderID` MOD 2) = 0, `o`.`OrderID`, -`o`.`OrderID`) +FROM `Orders` AS `o` +"""); + } + + public override async Task Select_conditional_terminates_at_true(bool isAsync) + { + await base.Select_conditional_terminates_at_true(isAsync); + + AssertSql( + """ +SELECT IIF((`o`.`OrderID` MOD 2) = 0, `o`.`OrderID`, 0) +FROM `Orders` AS `o` +"""); + } + + public override async Task Select_conditional_flatten_nested_results(bool isAsync) + { + await base.Select_conditional_flatten_nested_results(isAsync); + + AssertSql( + """ +SELECT IIF((`o`.`OrderID` MOD 2) = 0 AND (`o`.`OrderID` MOD 5) = 0, -`o`.`OrderID`, `o`.`OrderID`) +FROM `Orders` AS `o` +"""); + } + + public override async Task Select_conditional_flatten_nested_tests(bool isAsync) + { + await base.Select_conditional_flatten_nested_tests(isAsync); + + AssertSql( + """ +SELECT IIF((`o`.`OrderID` MOD 2) <> 0, `o`.`OrderID`, -`o`.`OrderID`) +FROM `Orders` AS `o` +"""); + } + public override async Task Projection_in_a_subquery_should_be_liftable(bool isAsync) { await base.Projection_in_a_subquery_should_be_liftable(isAsync); @@ -1216,15 +1259,17 @@ public override async Task Filtered_collection_projection_is_tracked(bool isAsyn await base.Filtered_collection_projection_is_tracked(isAsync); AssertSql( - $@"SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate` + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` FROM `Customers` AS `c` LEFT JOIN ( SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` WHERE `o`.`OrderID` > 11000 -) AS `t` ON `c`.`CustomerID` = `t`.`CustomerID` +) AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` WHERE `c`.`CustomerID` LIKE 'A%' -ORDER BY `c`.`CustomerID`"); +ORDER BY `c`.`CustomerID` +"""); } public override async Task Filtered_collection_projection_with_to_list_is_tracked(bool isAsync) @@ -1232,15 +1277,17 @@ public override async Task Filtered_collection_projection_with_to_list_is_tracke await base.Filtered_collection_projection_with_to_list_is_tracked(isAsync); AssertSql( - $@"SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate` + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` FROM `Customers` AS `c` LEFT JOIN ( SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` WHERE `o`.`OrderID` > 11000 -) AS `t` ON `c`.`CustomerID` = `t`.`CustomerID` +) AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` WHERE `c`.`CustomerID` LIKE 'A%' -ORDER BY `c`.`CustomerID`"); +ORDER BY `c`.`CustomerID` +"""); } public override async Task SelectMany_with_collection_being_correlated_subquery_which_references_inner_and_outer_entity( @@ -1275,9 +1322,11 @@ public override async Task Select_with_complex_expression_that_can_be_funcletize await base.Select_with_complex_expression_that_can_be_funcletized(isAsync); AssertSql( - @"SELECT 0 + """ +SELECT IIF(`c`.`Region` IS NOT NULL, 0, NULL) FROM `Customers` AS `c` -WHERE `c`.`CustomerID` = 'ALFKI'"); +WHERE `c`.`CustomerID` = 'ALFKI' +"""); } public override async Task Select_chained_entity_navigation_doesnt_materialize_intermittent_entities(bool isAsync) @@ -1509,16 +1558,16 @@ public override async Task Reverse_in_subquery_via_pushdown(bool async) await base.Reverse_in_subquery_via_pushdown(async); AssertSql( -""" -SELECT `t0`.`EmployeeID`, `t0`.`City` + """ +SELECT `e1`.`EmployeeID`, `e1`.`City` FROM ( - SELECT DISTINCT `t`.`EmployeeID`, `t`.`City`, `t`.`Country`, `t`.`FirstName`, `t`.`ReportsTo`, `t`.`Title` + SELECT DISTINCT `e0`.`EmployeeID`, `e0`.`City`, `e0`.`Country`, `e0`.`FirstName`, `e0`.`ReportsTo`, `e0`.`Title` FROM ( SELECT TOP 5 `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` FROM `Employees` AS `e` ORDER BY `e`.`EmployeeID` DESC - ) AS `t` -) AS `t0` + ) AS `e0` +) AS `e1` """); } @@ -1527,14 +1576,14 @@ public override async Task Reverse_after_orderBy_and_take(bool async) await base.Reverse_after_orderBy_and_take(async); AssertSql( -""" -SELECT `t`.`EmployeeID`, `t`.`City` + """ +SELECT `e0`.`EmployeeID`, `e0`.`City` FROM ( SELECT TOP 5 `e`.`EmployeeID`, `e`.`City` FROM `Employees` AS `e` ORDER BY `e`.`EmployeeID` -) AS `t` -ORDER BY `t`.`EmployeeID` DESC +) AS `e0` +ORDER BY `e0`.`EmployeeID` DESC """); } @@ -1556,15 +1605,15 @@ public override async Task Reverse_in_join_outer_with_take(bool async) await base.Reverse_in_join_outer_with_take(async); AssertSql( -""" -SELECT `t`.`CustomerID`, `o`.`OrderID` + """ +SELECT `c0`.`CustomerID`, `o`.`OrderID` FROM ( SELECT TOP 20 `c`.`CustomerID` FROM `Customers` AS `c` ORDER BY `c`.`CustomerID` -) AS `t` -INNER JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CustomerID` +) AS `c0` +INNER JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` """); } @@ -1691,18 +1740,20 @@ public override async Task Projection_AsEnumerable_projection(bool async) await base.Projection_AsEnumerable_projection(async); AssertSql( - @"SELECT `c`.`CustomerID`, `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate` + """ +SELECT `c`.`CustomerID`, `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate` FROM `Customers` AS `c` LEFT JOIN ( SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` FROM `Orders` AS `o0` WHERE `o0`.`OrderID` < 10750 -) AS `t` ON `c`.`CustomerID` = `t`.`CustomerID` +) AS `o1` ON `c`.`CustomerID` = `o1`.`CustomerID` WHERE (`c`.`CustomerID` LIKE 'A%') AND ( SELECT COUNT(*) FROM `Orders` AS `o` WHERE `o`.`CustomerID` = `c`.`CustomerID` AND `o`.`OrderID` < 11000) > 0 -ORDER BY `c`.`CustomerID`"); +ORDER BY `c`.`CustomerID` +"""); } public override async Task Projection_custom_type_in_both_sides_of_ternary(bool async) @@ -1824,11 +1875,13 @@ public override async Task Projection_Distinct_projection_preserves_columns_used await base.Projection_Distinct_projection_preserves_columns_used_for_distinct_in_subquery(async); AssertSql( - @"SELECT (IIF(`t`.`FirstLetter` IS NULL, '', `t`.`FirstLetter`) & ' ') & `t`.`Foo` AS `Aggregate` + """ +SELECT (IIF(`c0`.`FirstLetter` IS NULL, '', `c0`.`FirstLetter`) & ' ') & `c0`.`Foo` AS `Aggregate` FROM ( SELECT DISTINCT `c`.`CustomerID`, MID(`c`.`CustomerID`, 0 + 1, 1) AS `FirstLetter`, 'Foo' AS `Foo` FROM `Customers` AS `c` -) AS `t`"); +) AS `c0` +"""); } public override async Task Projection_take_predicate_projection(bool async) @@ -1837,15 +1890,15 @@ public override async Task Projection_take_predicate_projection(bool async) AssertSql( """ - SELECT (`t`.`CustomerID` & ' ') & IIF(`t`.`City` IS NULL, '', `t`.`City`) AS `Aggregate` - FROM ( - SELECT TOP 10 `c`.`CustomerID`, `c`.`City` - FROM `Customers` AS `c` - ORDER BY `c`.`CustomerID` - ) AS `t` - WHERE `t`.`CustomerID` LIKE 'A%' - ORDER BY `t`.`CustomerID` - """); +SELECT (`c0`.`CustomerID` & ' ') & IIF(`c0`.`City` IS NULL, '', `c0`.`City`) AS `Aggregate` +FROM ( + SELECT TOP 10 `c`.`CustomerID`, `c`.`City` + FROM `Customers` AS `c` + ORDER BY `c`.`CustomerID` +) AS `c0` +WHERE `c0`.`CustomerID` LIKE 'A%' +ORDER BY `c0`.`CustomerID` +"""); } public override async Task Do_not_erase_projection_mapping_when_adding_single_projection(bool async) @@ -2140,17 +2193,19 @@ public override async Task Client_projection_via_ctor_arguments(bool async) await base.Client_projection_via_ctor_arguments(async); AssertSql( - @"SELECT `t`.`CustomerID`, `t`.`City`, `o0`.`OrderID`, `o0`.`OrderDate`, `t`.`c` + """ +SELECT `c0`.`CustomerID`, `c0`.`City`, `o`.`OrderID`, `o`.`OrderDate`, `c0`.`c` FROM ( SELECT TOP 2 `c`.`CustomerID`, `c`.`City`, ( SELECT COUNT(*) - FROM `Orders` AS `o` - WHERE `c`.`CustomerID` = `o`.`CustomerID`) AS `c` + FROM `Orders` AS `o0` + WHERE `c`.`CustomerID` = `o0`.`CustomerID`) AS `c` FROM `Customers` AS `c` WHERE `c`.`CustomerID` = 'ALFKI' -) AS `t` -LEFT JOIN `Orders` AS `o0` ON `t`.`CustomerID` = `o0`.`CustomerID` -ORDER BY `t`.`CustomerID`"); +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` +"""); } public override async Task Client_projection_with_string_initialization_with_scalar_subquery(bool async) @@ -2217,19 +2272,19 @@ public override async Task Projection_when_arithmetic_mixed_subqueries(bool asyn await base.Projection_when_arithmetic_mixed_subqueries(async); AssertSql( -""" -SELECT CLNG(`t0`.`EmployeeID`) + CLNG(`t`.`OrderID`), `t0`.`EmployeeID`, `t0`.`City`, `t0`.`Country`, `t0`.`FirstName`, `t0`.`ReportsTo`, `t0`.`Title`, `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate`, `t`.`OrderID` MOD 2 + """ +SELECT CLNG(`e0`.`EmployeeID`) + CLNG(`o0`.`OrderID`) AS `Add`, `e0`.`Square`, `e0`.`EmployeeID`, `e0`.`City`, `e0`.`Country`, `e0`.`FirstName`, `e0`.`ReportsTo`, `e0`.`Title`, 42 AS `Literal`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `o0`.`OrderID` MOD 2 AS `Mod` FROM ( SELECT TOP 3 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` ORDER BY `o`.`OrderID` -) AS `t`, +) AS `o0`, ( - SELECT TOP 2 `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` + SELECT TOP 2 `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title`, `e`.`EmployeeID` BXOR 2 AS `Square` FROM `Employees` AS `e` ORDER BY `e`.`EmployeeID` -) AS `t0` -ORDER BY `t`.`OrderID` +) AS `e0` +ORDER BY `o0`.`OrderID` """); } @@ -2249,9 +2304,9 @@ public override async Task Select_datetime_TimeOfDay_component(bool async) await base.Select_datetime_TimeOfDay_component(async); AssertSql( - """ -SELECT CONVERT(time, [o].[OrderDate]) -FROM [Orders] AS [o] + """ +SELECT IIF(`o`.`OrderDate` IS NULL, NULL, TIMEVALUE(`o`.`OrderDate`)) +FROM `Orders` AS `o` """); } @@ -2421,15 +2476,17 @@ public override async Task List_of_list_of_anonymous_type(bool async) await base.List_of_list_of_anonymous_type(async); AssertSql( - @"SELECT `c`.`CustomerID`, `t`.`OrderID`, `t`.`OrderID0`, `t`.`ProductID` + """ +SELECT `c`.`CustomerID`, `s`.`OrderID`, `s`.`OrderID0`, `s`.`ProductID` FROM `Customers` AS `c` LEFT JOIN ( SELECT `o`.`OrderID`, `o0`.`OrderID` AS `OrderID0`, `o0`.`ProductID`, `o`.`CustomerID` FROM `Orders` AS `o` LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` -) AS `t` ON `c`.`CustomerID` = `t`.`CustomerID` +) AS `s` ON `c`.`CustomerID` = `s`.`CustomerID` WHERE `c`.`CustomerID` LIKE 'F%' -ORDER BY `c`.`CustomerID`, `t`.`OrderID`, `t`.`OrderID0`"); +ORDER BY `c`.`CustomerID`, `s`.`OrderID`, `s`.`OrderID0` +"""); } public override async Task List_from_result_of_single_result(bool async) @@ -2437,14 +2494,16 @@ public override async Task List_from_result_of_single_result(bool async) await base.List_from_result_of_single_result(async); AssertSql( - @"SELECT `t`.`CustomerID`, `o`.`OrderID` + """ +SELECT `c0`.`CustomerID`, `o`.`OrderID` FROM ( SELECT TOP 1 `c`.`CustomerID` FROM `Customers` AS `c` ORDER BY `c`.`CustomerID` -) AS `t` -LEFT JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CustomerID`"); +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` +"""); } public override async Task List_from_result_of_single_result_2(bool async) @@ -2452,14 +2511,16 @@ public override async Task List_from_result_of_single_result_2(bool async) await base.List_from_result_of_single_result_2(async); AssertSql( - @"SELECT `t`.`CustomerID`, `o`.`OrderID`, `o`.`OrderDate` + """ +SELECT `c0`.`CustomerID`, `o`.`OrderID`, `o`.`OrderDate` FROM ( SELECT TOP 1 `c`.`CustomerID` FROM `Customers` AS `c` ORDER BY `c`.`CustomerID` -) AS `t` -LEFT JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CustomerID`"); +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` +"""); } public override async Task List_from_result_of_single_result_3(bool async) @@ -2497,6 +2558,44 @@ public override async Task Using_enumerable_parameter_in_projection(bool async) """); } + public override async Task Entity_passed_to_DTO_constructor_works(bool async) + { + await base.Entity_passed_to_DTO_constructor_works(async); + + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +"""); + } + + public override async Task Set_operation_in_pending_collection(bool async) + { + await base.Set_operation_in_pending_collection(async); + + AssertSql( + """ +@__p_0='5' + +SELECT [c0].[CustomerID], [u].[OrderID] +FROM ( + SELECT TOP(@__p_0) [c].[CustomerID] + FROM [Customers] AS [c] + ORDER BY [c].[CustomerID] +) AS [c0] +OUTER APPLY ( + SELECT [o].[OrderID] + FROM [Orders] AS [o] + WHERE [o].[CustomerID] = [c0].[CustomerID] + UNION + SELECT [o0].[OrderID] + FROM [Orders] AS [o0] + WHERE [o0].[CustomerID] = [c0].[CustomerID] +) AS [u] +ORDER BY [c0].[CustomerID] +"""); + } + private void AssertSql(params string[] expected) => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); diff --git a/test/EFCore.Jet.FunctionalTests/Query/NorthwindSetOperationsQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/NorthwindSetOperationsQueryJetTest.cs index 225cd3d5..0865704c 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/NorthwindSetOperationsQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/NorthwindSetOperationsQueryJetTest.cs @@ -25,9 +25,6 @@ public NorthwindSetOperationsQueryJetTest( Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); } - protected override bool CanExecuteQueryString - => false; - [ConditionalFact] public virtual void Check_all_tests_overridden() => TestHelpers.AssertAllMethodsOverridden(GetType()); @@ -94,26 +91,26 @@ public override async Task Union_OrderBy_Skip_Take(bool isAsync) AssertSql( """ - SELECT `t1`.`CustomerID`, `t1`.`Address`, `t1`.`City`, `t1`.`CompanyName`, `t1`.`ContactName`, `t1`.`ContactTitle`, `t1`.`Country`, `t1`.`Fax`, `t1`.`Phone`, `t1`.`PostalCode`, `t1`.`Region` +SELECT `u1`.`CustomerID`, `u1`.`Address`, `u1`.`City`, `u1`.`CompanyName`, `u1`.`ContactName`, `u1`.`ContactTitle`, `u1`.`Country`, `u1`.`Fax`, `u1`.`Phone`, `u1`.`PostalCode`, `u1`.`Region` +FROM ( + SELECT TOP 1 `u0`.`CustomerID`, `u0`.`Address`, `u0`.`City`, `u0`.`CompanyName`, `u0`.`ContactName`, `u0`.`ContactTitle`, `u0`.`Country`, `u0`.`Fax`, `u0`.`Phone`, `u0`.`PostalCode`, `u0`.`Region` FROM ( - SELECT TOP 1 `t0`.`CustomerID`, `t0`.`Address`, `t0`.`City`, `t0`.`CompanyName`, `t0`.`ContactName`, `t0`.`ContactTitle`, `t0`.`Country`, `t0`.`Fax`, `t0`.`Phone`, `t0`.`PostalCode`, `t0`.`Region` + SELECT TOP 2 `u`.`CustomerID`, `u`.`Address`, `u`.`City`, `u`.`CompanyName`, `u`.`ContactName`, `u`.`ContactTitle`, `u`.`Country`, `u`.`Fax`, `u`.`Phone`, `u`.`PostalCode`, `u`.`Region` FROM ( - SELECT TOP 2 `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region` - FROM ( - SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` - FROM `Customers` AS `c` - WHERE `c`.`City` = 'Berlin' - UNION - SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` - FROM `Customers` AS `c0` - WHERE `c0`.`City` = 'London' - ) AS `t` - ORDER BY `t`.`ContactName` - ) AS `t0` - ORDER BY `t0`.`ContactName` DESC - ) AS `t1` - ORDER BY `t1`.`ContactName` - """); + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`City` = 'Berlin' + UNION + SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM `Customers` AS `c0` + WHERE `c0`.`City` = 'London' + ) AS `u` + ORDER BY `u`.`ContactName` + ) AS `u0` + ORDER BY `u0`.`ContactName` DESC +) AS `u1` +ORDER BY `u1`.`ContactName` +"""); } public override async Task Union_Where(bool isAsync) @@ -121,7 +118,8 @@ public override async Task Union_Where(bool isAsync) await base.Union_Where(isAsync); AssertSql( - $@"SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region` + """ +SELECT `u`.`CustomerID`, `u`.`Address`, `u`.`City`, `u`.`CompanyName`, `u`.`ContactName`, `u`.`ContactTitle`, `u`.`Country`, `u`.`Fax`, `u`.`Phone`, `u`.`PostalCode`, `u`.`Region` FROM ( SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` @@ -130,8 +128,9 @@ public override async Task Union_Where(bool isAsync) SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` FROM `Customers` AS `c0` WHERE `c0`.`City` = 'London' -) AS `t` -WHERE `t`.`ContactName` LIKE '%Thomas%'"); +) AS `u` +WHERE `u`.`ContactName` LIKE '%Thomas%' +"""); } public override async Task Union_Skip_Take_OrderBy_ThenBy_Where(bool isAsync) @@ -205,32 +204,32 @@ public override async Task Union_Take_Union_Take(bool isAsync) AssertSql( """ - SELECT `t2`.`CustomerID`, `t2`.`Address`, `t2`.`City`, `t2`.`CompanyName`, `t2`.`ContactName`, `t2`.`ContactTitle`, `t2`.`Country`, `t2`.`Fax`, `t2`.`Phone`, `t2`.`PostalCode`, `t2`.`Region` +SELECT `u2`.`CustomerID`, `u2`.`Address`, `u2`.`City`, `u2`.`CompanyName`, `u2`.`ContactName`, `u2`.`ContactTitle`, `u2`.`Country`, `u2`.`Fax`, `u2`.`Phone`, `u2`.`PostalCode`, `u2`.`Region` +FROM ( + SELECT TOP 1 `u1`.`CustomerID`, `u1`.`Address`, `u1`.`City`, `u1`.`CompanyName`, `u1`.`ContactName`, `u1`.`ContactTitle`, `u1`.`Country`, `u1`.`Fax`, `u1`.`Phone`, `u1`.`PostalCode`, `u1`.`Region` FROM ( - SELECT TOP 1 `t1`.`CustomerID`, `t1`.`Address`, `t1`.`City`, `t1`.`CompanyName`, `t1`.`ContactName`, `t1`.`ContactTitle`, `t1`.`Country`, `t1`.`Fax`, `t1`.`Phone`, `t1`.`PostalCode`, `t1`.`Region` + SELECT `u0`.`CustomerID`, `u0`.`Address`, `u0`.`City`, `u0`.`CompanyName`, `u0`.`ContactName`, `u0`.`ContactTitle`, `u0`.`Country`, `u0`.`Fax`, `u0`.`Phone`, `u0`.`PostalCode`, `u0`.`Region` FROM ( - SELECT `t0`.`CustomerID`, `t0`.`Address`, `t0`.`City`, `t0`.`CompanyName`, `t0`.`ContactName`, `t0`.`ContactTitle`, `t0`.`Country`, `t0`.`Fax`, `t0`.`Phone`, `t0`.`PostalCode`, `t0`.`Region` + SELECT TOP 1 `u`.`CustomerID`, `u`.`Address`, `u`.`City`, `u`.`CompanyName`, `u`.`ContactName`, `u`.`ContactTitle`, `u`.`Country`, `u`.`Fax`, `u`.`Phone`, `u`.`PostalCode`, `u`.`Region` FROM ( - SELECT TOP 1 `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region` - FROM ( - SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` - FROM `Customers` AS `c` - WHERE `c`.`City` = 'Berlin' - UNION - SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` - FROM `Customers` AS `c0` - WHERE `c0`.`City` = 'London' - ) AS `t` - ORDER BY `t`.`CustomerID` - ) AS `t0` - UNION - SELECT `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region` - FROM `Customers` AS `c1` - WHERE `c1`.`City` = 'Mannheim' - ) AS `t1` - ) AS `t2` - ORDER BY `t2`.`CustomerID` - """); + SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + WHERE `c`.`City` = 'Berlin' + UNION + SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM `Customers` AS `c0` + WHERE `c0`.`City` = 'London' + ) AS `u` + ORDER BY `u`.`CustomerID` + ) AS `u0` + UNION + SELECT `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region` + FROM `Customers` AS `c1` + WHERE `c1`.`City` = 'Mannheim' + ) AS `u1` +) AS `u2` +ORDER BY `u2`.`CustomerID` +"""); } public override async Task Select_Union(bool isAsync) @@ -252,7 +251,8 @@ public override async Task Union_Select(bool isAsync) await base.Union_Select(isAsync); AssertSql( - $@"SELECT `t`.`Address` + """ +SELECT `u`.`Address` FROM ( SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` @@ -261,8 +261,9 @@ public override async Task Union_Select(bool isAsync) SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` FROM `Customers` AS `c0` WHERE `c0`.`City` = 'London' -) AS `t` -WHERE `t`.`Address` LIKE '%Hanover%'"); +) AS `u` +WHERE `u`.`Address` LIKE '%Hanover%' +"""); } public override async Task Union_Select_scalar(bool isAsync) @@ -278,7 +279,7 @@ SELECT 1 UNION SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` FROM `Customers` AS `c0` -) AS `t` +) AS `u` """); } @@ -287,8 +288,8 @@ public override async Task Union_with_anonymous_type_projection(bool isAsync) await base.Union_with_anonymous_type_projection(isAsync); AssertSql( -""" -SELECT `t`.`CustomerID` AS `Id` + """ +SELECT `u`.`CustomerID` AS `Id` FROM ( SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` @@ -297,7 +298,7 @@ public override async Task Union_with_anonymous_type_projection(bool isAsync) SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` FROM `Customers` AS `c0` WHERE `c0`.`CompanyName` LIKE 'B%' -) AS `t` +) AS `u` """); } @@ -306,17 +307,17 @@ public override async Task Select_Union_unrelated(bool isAsync) await base.Select_Union_unrelated(isAsync); AssertSql( -""" -SELECT `t`.`CompanyName` + """ +SELECT `u`.`CompanyName` FROM ( SELECT `c`.`CompanyName` FROM `Customers` AS `c` UNION SELECT `p`.`ProductName` AS `CompanyName` FROM `Products` AS `p` -) AS `t` -WHERE `t`.`CompanyName` LIKE 'C%' -ORDER BY `t`.`CompanyName` +) AS `u` +WHERE `u`.`CompanyName` LIKE 'C%' +ORDER BY `u`.`CompanyName` """); } @@ -325,12 +326,12 @@ public override async Task Select_Union_different_fields_in_anonymous_with_subqu await base.Select_Union_different_fields_in_anonymous_with_subquery(isAsync); AssertSql( -""" -SELECT `t0`.`Foo`, `t0`.`CustomerID`, `t0`.`Address`, `t0`.`City`, `t0`.`CompanyName`, `t0`.`ContactName`, `t0`.`ContactTitle`, `t0`.`Country`, `t0`.`Fax`, `t0`.`Phone`, `t0`.`PostalCode`, `t0`.`Region` + """ +SELECT `u0`.`Foo`, `u0`.`CustomerID`, `u0`.`Address`, `u0`.`City`, `u0`.`CompanyName`, `u0`.`ContactName`, `u0`.`ContactTitle`, `u0`.`Country`, `u0`.`Fax`, `u0`.`Phone`, `u0`.`PostalCode`, `u0`.`Region` FROM ( - SELECT TOP 10 `t1`.`Foo`, `t1`.`CustomerID`, `t1`.`Address`, `t1`.`City`, `t1`.`CompanyName`, `t1`.`ContactName`, `t1`.`ContactTitle`, `t1`.`Country`, `t1`.`Fax`, `t1`.`Phone`, `t1`.`PostalCode`, `t1`.`Region` + SELECT TOP 10 `u1`.`Foo`, `u1`.`CustomerID`, `u1`.`Address`, `u1`.`City`, `u1`.`CompanyName`, `u1`.`ContactName`, `u1`.`ContactTitle`, `u1`.`Country`, `u1`.`Fax`, `u1`.`Phone`, `u1`.`PostalCode`, `u1`.`Region` FROM ( - SELECT TOP 11 `t`.`Foo`, `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region` + SELECT TOP 11 `u`.`Foo`, `u`.`CustomerID`, `u`.`Address`, `u`.`City`, `u`.`CompanyName`, `u`.`ContactName`, `u`.`ContactTitle`, `u`.`Country`, `u`.`Fax`, `u`.`Phone`, `u`.`PostalCode`, `u`.`Region` FROM ( SELECT `c`.`City` AS `Foo`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` @@ -339,13 +340,13 @@ public override async Task Select_Union_different_fields_in_anonymous_with_subqu SELECT `c0`.`Region` AS `Foo`, `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` FROM `Customers` AS `c0` WHERE `c0`.`City` = 'London' - ) AS `t` - ORDER BY `t`.`Foo` - ) AS `t1` - ORDER BY `t1`.`Foo` DESC -) AS `t0` -WHERE `t0`.`Foo` = 'Berlin' -ORDER BY `t0`.`Foo` + ) AS `u` + ORDER BY `u`.`Foo` + ) AS `u1` + ORDER BY `u1`.`Foo` DESC +) AS `u0` +WHERE `u0`.`Foo` = 'Berlin' +ORDER BY `u0`.`Foo` """); } @@ -354,7 +355,8 @@ public override async Task Union_Include(bool isAsync) await base.Union_Include(isAsync); AssertSql( - $@"SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + """ +SELECT `u`.`CustomerID`, `u`.`Address`, `u`.`City`, `u`.`CompanyName`, `u`.`ContactName`, `u`.`ContactTitle`, `u`.`Country`, `u`.`Fax`, `u`.`Phone`, `u`.`PostalCode`, `u`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM ( SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` @@ -363,9 +365,10 @@ public override async Task Union_Include(bool isAsync) SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` FROM `Customers` AS `c0` WHERE `c0`.`City` = 'London' -) AS `t` -LEFT JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CustomerID`"); +) AS `u` +LEFT JOIN `Orders` AS `o` ON `u`.`CustomerID` = `o`.`CustomerID` +ORDER BY `u`.`CustomerID` +"""); } public override async Task Include_Union(bool isAsync) @@ -373,7 +376,8 @@ public override async Task Include_Union(bool isAsync) await base.Include_Union(isAsync); AssertSql( - $@"SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + """ +SELECT `u`.`CustomerID`, `u`.`Address`, `u`.`City`, `u`.`CompanyName`, `u`.`ContactName`, `u`.`ContactTitle`, `u`.`Country`, `u`.`Fax`, `u`.`Phone`, `u`.`PostalCode`, `u`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM ( SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` @@ -382,9 +386,10 @@ public override async Task Include_Union(bool isAsync) SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` FROM `Customers` AS `c0` WHERE `c0`.`City` = 'London' -) AS `t` -LEFT JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CustomerID`"); +) AS `u` +LEFT JOIN `Orders` AS `o` ON `u`.`CustomerID` = `o`.`CustomerID` +ORDER BY `u`.`CustomerID` +"""); } public override async Task Select_Except_reference_projection(bool isAsync) @@ -1005,13 +1010,13 @@ public override async Task Union_over_OrderBy_Take1(bool async) await base.Union_over_OrderBy_Take1(async); AssertSql( -""" -SELECT `t`.`OrderID` + """ +SELECT `o1`.`OrderID` FROM ( SELECT TOP 5 `o`.`OrderID` FROM `Orders` AS `o` ORDER BY `o`.`OrderDate` -) AS `t` +) AS `o1` UNION SELECT `o0`.`OrderID` FROM `Orders` AS `o0` @@ -1037,16 +1042,16 @@ public override async Task Union_over_OrderBy_Take2(bool async) await base.Union_over_OrderBy_Take2(async); AssertSql( -""" + """ SELECT `o`.`OrderID` FROM `Orders` AS `o` UNION -SELECT `t0`.`OrderID` +SELECT `o1`.`OrderID` FROM ( SELECT TOP 5 `o0`.`OrderID` FROM `Orders` AS `o0` ORDER BY `o0`.`OrderDate` -) AS `t0` +) AS `o1` """); } @@ -1070,20 +1075,20 @@ public override async Task OrderBy_Take_Union(bool isAsync) AssertSql( """ - SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region` - FROM ( - SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` - FROM `Customers` AS `c` - ORDER BY `c`.`ContactName` - ) AS `t` - UNION - SELECT `t1`.`CustomerID`, `t1`.`Address`, `t1`.`City`, `t1`.`CompanyName`, `t1`.`ContactName`, `t1`.`ContactTitle`, `t1`.`Country`, `t1`.`Fax`, `t1`.`Phone`, `t1`.`PostalCode`, `t1`.`Region` - FROM ( - SELECT TOP 1 `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` - FROM `Customers` AS `c0` - ORDER BY `c0`.`ContactName` - ) AS `t1` - """); +SELECT `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region` +FROM ( + SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + FROM `Customers` AS `c` + ORDER BY `c`.`ContactName` +) AS `c1` +UNION +SELECT `c2`.`CustomerID`, `c2`.`Address`, `c2`.`City`, `c2`.`CompanyName`, `c2`.`ContactName`, `c2`.`ContactTitle`, `c2`.`Country`, `c2`.`Fax`, `c2`.`Phone`, `c2`.`PostalCode`, `c2`.`Region` +FROM ( + SELECT TOP 1 `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + FROM `Customers` AS `c0` + ORDER BY `c0`.`ContactName` +) AS `c2` +"""); } public override async Task Collection_projection_after_set_operation(bool async) @@ -1091,8 +1096,8 @@ public override async Task Collection_projection_after_set_operation(bool async) await base.Collection_projection_after_set_operation(async); AssertSql( -""" -SELECT `t`.`CustomerID`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + """ +SELECT `u`.`CustomerID`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM ( SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` @@ -1101,9 +1106,9 @@ public override async Task Collection_projection_after_set_operation(bool async) SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` FROM `Customers` AS `c0` WHERE `c0`.`CustomerID` LIKE 'F%' -) AS `t` -LEFT JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CustomerID` +) AS `u` +LEFT JOIN `Orders` AS `o` ON `u`.`CustomerID` = `o`.`CustomerID` +ORDER BY `u`.`CustomerID` """); } @@ -1129,8 +1134,8 @@ public override async Task Union_on_entity_with_correlated_collection(bool async await base.Union_on_entity_with_correlated_collection(async); AssertSql( -""" -SELECT `t`.`CustomerID`, `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate` + """ +SELECT `u`.`CustomerID`, `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate` FROM ( SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Orders` AS `o` @@ -1141,9 +1146,9 @@ public override async Task Union_on_entity_with_correlated_collection(bool async FROM `Orders` AS `o0` LEFT JOIN `Customers` AS `c0` ON `o0`.`CustomerID` = `c0`.`CustomerID` WHERE `o0`.`OrderID` < 10250 -) AS `t` -LEFT JOIN `Orders` AS `o1` ON `t`.`CustomerID` = `o1`.`CustomerID` -ORDER BY `t`.`CustomerID` +) AS `u` +LEFT JOIN `Orders` AS `o1` ON `u`.`CustomerID` = `o1`.`CustomerID` +ORDER BY `u`.`CustomerID` """); } @@ -1152,8 +1157,8 @@ public override async Task Union_on_entity_plus_other_column_with_correlated_col await base.Union_on_entity_plus_other_column_with_correlated_collection(async); AssertSql( -""" -SELECT `t`.`OrderDate`, `t`.`CustomerID`, `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate` + """ +SELECT `u`.`OrderDate`, `u`.`CustomerID`, `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate` FROM ( SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `o`.`OrderDate` FROM `Orders` AS `o` @@ -1164,9 +1169,9 @@ public override async Task Union_on_entity_plus_other_column_with_correlated_col FROM `Orders` AS `o0` LEFT JOIN `Customers` AS `c0` ON `o0`.`CustomerID` = `c0`.`CustomerID` WHERE `o0`.`OrderID` < 10250 -) AS `t` -LEFT JOIN `Orders` AS `o1` ON `t`.`CustomerID` = `o1`.`CustomerID` -ORDER BY `t`.`CustomerID`, `t`.`OrderDate` +) AS `u` +LEFT JOIN `Orders` AS `o1` ON `u`.`CustomerID` = `o1`.`CustomerID` +ORDER BY `u`.`CustomerID`, `u`.`OrderDate` """); } @@ -1380,8 +1385,8 @@ public override async Task Concat_with_distinct_on_one_source_and_pruning(bool a await base.Concat_with_distinct_on_one_source_and_pruning(async); AssertSql( -""" -SELECT `t`.`City` + """ +SELECT `u`.`City` FROM ( SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` @@ -1390,7 +1395,7 @@ UNION ALL SELECT DISTINCT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` FROM `Customers` AS `c0` WHERE `c0`.`CustomerID` LIKE 'B%' -) AS `t` +) AS `u` """); } @@ -1399,8 +1404,8 @@ public override async Task Concat_with_distinct_on_both_source_and_pruning(bool await base.Concat_with_distinct_on_both_source_and_pruning(async); AssertSql( -""" -SELECT `t`.`City` + """ +SELECT `u`.`City` FROM ( SELECT DISTINCT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` @@ -1409,7 +1414,7 @@ UNION ALL SELECT DISTINCT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` FROM `Customers` AS `c0` WHERE `c0`.`CustomerID` LIKE 'B%' -) AS `t` +) AS `u` """); } @@ -1438,8 +1443,8 @@ public override async Task Nested_concat_with_distinct_in_the_middle_and_pruning await base.Nested_concat_with_distinct_in_the_middle_and_pruning(async); AssertSql( -""" -SELECT `t`.`City` + """ +SELECT `u`.`City` FROM ( SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` @@ -1448,7 +1453,7 @@ UNION ALL SELECT DISTINCT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` FROM `Customers` AS `c0` WHERE `c0`.`CustomerID` LIKE 'B%' -) AS `t` +) AS `u` UNION ALL SELECT `c1`.`City` FROM `Customers` AS `c1` diff --git a/test/EFCore.Jet.FunctionalTests/Query/NorthwindSplitIncludeNoTrackingQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/NorthwindSplitIncludeNoTrackingQueryJetTest.cs index 60604c02..51a14f69 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/NorthwindSplitIncludeNoTrackingQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/NorthwindSplitIncludeNoTrackingQueryJetTest.cs @@ -69,26 +69,26 @@ public override async Task Include_multi_level_collection_and_then_include_refer await base.Include_multi_level_collection_and_then_include_reference_predicate(async); AssertSql( -""" + """ SELECT TOP 2 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` WHERE `o`.`OrderID` = 10248 ORDER BY `o`.`OrderID` """, -// -""" -SELECT `t0`.`OrderID`, `t0`.`ProductID`, `t0`.`Discount`, `t0`.`Quantity`, `t0`.`UnitPrice`, `t0`.`ProductID0`, `t0`.`Discontinued`, `t0`.`ProductName`, `t0`.`SupplierID`, `t0`.`UnitPrice0`, `t0`.`UnitsInStock`, `t`.`OrderID` + // + """ +SELECT `s`.`OrderID`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice`, `s`.`ProductID0`, `s`.`Discontinued`, `s`.`ProductName`, `s`.`SupplierID`, `s`.`UnitPrice0`, `s`.`UnitsInStock`, `o1`.`OrderID` FROM ( SELECT TOP 1 `o`.`OrderID` FROM `Orders` AS `o` WHERE `o`.`OrderID` = 10248 -) AS `t` +) AS `o1` INNER JOIN ( SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `p`.`ProductID` AS `ProductID0`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice` AS `UnitPrice0`, `p`.`UnitsInStock` FROM `Order Details` AS `o0` INNER JOIN `Products` AS `p` ON `o0`.`ProductID` = `p`.`ProductID` -) AS `t0` ON `t`.`OrderID` = `t0`.`OrderID` -ORDER BY `t`.`OrderID` +) AS `s` ON `o1`.`OrderID` = `s`.`OrderID` +ORDER BY `o1`.`OrderID` """); } @@ -151,23 +151,23 @@ public override async Task Include_collection_order_by_collection_column(bool as AssertSql( """ -SELECT TOP 1 `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `t`.`c` +SELECT TOP 1 `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region`, `c1`.`c` FROM ( SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, ( - SELECT TOP 1 `o0`.`OrderDate` - FROM `Orders` AS `o0` - WHERE `c`.`CustomerID` = `o0`.`CustomerID` - ORDER BY `o0`.`OrderDate` DESC) AS `c` + SELECT TOP 1 `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`OrderDate` DESC) AS `c` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'W%' -) AS `t` -ORDER BY `t`.`c` DESC, `t`.`CustomerID` +) AS `c1` +ORDER BY `c1`.`c` DESC, `c1`.`CustomerID` """, // """ -SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `t`.`CustomerID` +SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c0`.`CustomerID` FROM ( - SELECT TOP 1 `t`.`CustomerID`, `t`.`c` + SELECT TOP 1 `c2`.`CustomerID`, `c2`.`c` FROM ( SELECT `c`.`CustomerID`, ( SELECT TOP 1 `o`.`OrderDate` @@ -176,11 +176,11 @@ SELECT TOP 1 `o`.`OrderDate` ORDER BY `o`.`OrderDate` DESC) AS `c` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'W%' - ) AS `t` - ORDER BY `t`.`c` DESC -) AS `t` -INNER JOIN `Orders` AS `o0` ON `t`.`CustomerID` = `o0`.`CustomerID` -ORDER BY `t`.`c` DESC, `t`.`CustomerID` + ) AS `c2` + ORDER BY `c2`.`c` DESC +) AS `c0` +INNER JOIN `Orders` AS `o0` ON `c0`.`CustomerID` = `o0`.`CustomerID` +ORDER BY `c0`.`c` DESC, `c0`.`CustomerID` """); } @@ -210,15 +210,15 @@ public override async Task Include_collection_on_additional_from_clause2(bool as await base.Include_collection_on_additional_from_clause2(async); AssertSql( -""" -SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region` + """ +SELECT `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region` FROM ( SELECT TOP 5 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`CustomerID` -) AS `t`, +) AS `c1`, `Customers` AS `c0` -ORDER BY `t`.`CustomerID` +ORDER BY `c1`.`CustomerID` """); } @@ -227,53 +227,53 @@ public override async Task Multi_level_includes_are_applied_with_skip(bool async await base.Multi_level_includes_are_applied_with_skip(async); AssertSql( -""" -SELECT `t0`.`CustomerID` + """ +SELECT `c1`.`CustomerID` FROM ( - SELECT TOP 1 `t`.`CustomerID` + SELECT TOP 1 `c0`.`CustomerID` FROM ( SELECT TOP 2 `c`.`CustomerID` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'A%' ORDER BY `c`.`CustomerID` - ) AS `t` - ORDER BY `t`.`CustomerID` DESC -) AS `t0` -ORDER BY `t0`.`CustomerID` + ) AS `c0` + ORDER BY `c0`.`CustomerID` DESC +) AS `c1` +ORDER BY `c1`.`CustomerID` """, // -""" -SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `t0`.`CustomerID` + """ +SELECT `o3`.`OrderID`, `o3`.`CustomerID`, `o3`.`EmployeeID`, `o3`.`OrderDate`, `c1`.`CustomerID` FROM ( - SELECT TOP 1 `t`.`CustomerID` + SELECT TOP 1 `c0`.`CustomerID` FROM ( SELECT TOP 2 `c`.`CustomerID` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'A%' ORDER BY `c`.`CustomerID` - ) AS `t` - ORDER BY `t`.`CustomerID` DESC -) AS `t0` -INNER JOIN `Orders` AS `o` ON `t0`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t0`.`CustomerID`, `o`.`OrderID` + ) AS `c0` + ORDER BY `c0`.`CustomerID` DESC +) AS `c1` +INNER JOIN `Orders` AS `o3` ON `c1`.`CustomerID` = `o3`.`CustomerID` +ORDER BY `c1`.`CustomerID`, `o3`.`OrderID` """, // -""" -SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `t0`.`CustomerID`, `o`.`OrderID` + """ +SELECT `o4`.`OrderID`, `o4`.`ProductID`, `o4`.`Discount`, `o4`.`Quantity`, `o4`.`UnitPrice`, `c1`.`CustomerID`, `o3`.`OrderID` FROM (( - SELECT TOP 1 `t`.`CustomerID` + SELECT TOP 1 `c0`.`CustomerID` FROM ( SELECT TOP 2 `c`.`CustomerID` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'A%' ORDER BY `c`.`CustomerID` - ) AS `t` - ORDER BY `t`.`CustomerID` DESC -) AS `t0` -INNER JOIN `Orders` AS `o` ON `t0`.`CustomerID` = `o`.`CustomerID`) -LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` -WHERE `o`.`OrderID` IS NOT NULL AND `o0`.`OrderID` IS NOT NULL -ORDER BY `t0`.`CustomerID`, `o`.`OrderID` + ) AS `c0` + ORDER BY `c0`.`CustomerID` DESC +) AS `c1` +INNER JOIN `Orders` AS `o3` ON `c1`.`CustomerID` = `o3`.`CustomerID`) +LEFT JOIN `Order Details` AS `o4` ON `o3`.`OrderID` = `o4`.`OrderID` +WHERE `o3`.`OrderID` IS NOT NULL AND `o4`.`OrderID` IS NOT NULL +ORDER BY `c1`.`CustomerID`, `o3`.`OrderID` """); } @@ -311,71 +311,71 @@ public override async Task Include_duplicate_collection_result_operator(bool asy await base.Include_duplicate_collection_result_operator(async); AssertSql( -""" -SELECT TOP 1 `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `t0`.`CustomerID`, `t0`.`Address`, `t0`.`City`, `t0`.`CompanyName`, `t0`.`ContactName`, `t0`.`ContactTitle`, `t0`.`Country`, `t0`.`Fax`, `t0`.`Phone`, `t0`.`PostalCode`, `t0`.`Region` + """ +SELECT TOP 1 `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region`, `c2`.`CustomerID`, `c2`.`Address`, `c2`.`City`, `c2`.`CompanyName`, `c2`.`ContactName`, `c2`.`ContactTitle`, `c2`.`Country`, `c2`.`Fax`, `c2`.`Phone`, `c2`.`PostalCode`, `c2`.`Region` FROM ( SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`CustomerID` -) AS `t`, +) AS `c1`, ( - SELECT TOP 2 `t0`.`CustomerID`, `t0`.`Address`, `t0`.`City`, `t0`.`CompanyName`, `t0`.`ContactName`, `t0`.`ContactTitle`, `t0`.`Country`, `t0`.`Fax`, `t0`.`Phone`, `t0`.`PostalCode`, `t0`.`Region` + SELECT TOP 2 `c3`.`CustomerID`, `c3`.`Address`, `c3`.`City`, `c3`.`CompanyName`, `c3`.`ContactName`, `c3`.`ContactTitle`, `c3`.`Country`, `c3`.`Fax`, `c3`.`Phone`, `c3`.`PostalCode`, `c3`.`Region` FROM ( SELECT TOP 4 `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` FROM `Customers` AS `c0` ORDER BY `c0`.`CustomerID` - ) AS `t0` - ORDER BY `t0`.`CustomerID` DESC -) AS `t0` -ORDER BY `t`.`CustomerID`, `t0`.`CustomerID` + ) AS `c3` + ORDER BY `c3`.`CustomerID` DESC +) AS `c2` +ORDER BY `c1`.`CustomerID`, `c2`.`CustomerID` """, // -""" -SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `t1`.`CustomerID`, `t1`.`CustomerID0` + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `s`.`CustomerID`, `s`.`CustomerID0` FROM ( - SELECT TOP 1 `t`.`CustomerID`, `t0`.`CustomerID` AS `CustomerID0` + SELECT TOP 1 `c1`.`CustomerID`, `c2`.`CustomerID` AS `CustomerID0` FROM ( SELECT TOP 2 `c`.`CustomerID` FROM `Customers` AS `c` ORDER BY `c`.`CustomerID` - ) AS `t`, + ) AS `c1`, ( - SELECT TOP 2 `t0`.`CustomerID`, `t0`.`Address`, `t0`.`City`, `t0`.`CompanyName`, `t0`.`ContactName`, `t0`.`ContactTitle`, `t0`.`Country`, `t0`.`Fax`, `t0`.`Phone`, `t0`.`PostalCode`, `t0`.`Region` + SELECT TOP 2 `c3`.`CustomerID` FROM ( - SELECT TOP 4 `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + SELECT TOP 4 `c0`.`CustomerID` FROM `Customers` AS `c0` ORDER BY `c0`.`CustomerID` - ) AS `t0` - ORDER BY `t0`.`CustomerID` DESC - ) AS `t0` - ORDER BY `t`.`CustomerID` -) AS `t1` -INNER JOIN `Orders` AS `o` ON `t1`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t1`.`CustomerID`, `t1`.`CustomerID0` + ) AS `c3` + ORDER BY `c3`.`CustomerID` DESC + ) AS `c2` + ORDER BY `c1`.`CustomerID` +) AS `s` +INNER JOIN `Orders` AS `o` ON `s`.`CustomerID` = `o`.`CustomerID` +ORDER BY `s`.`CustomerID`, `s`.`CustomerID0` """, // -""" -SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `t1`.`CustomerID`, `t1`.`CustomerID0` + """ +SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `s0`.`CustomerID`, `s0`.`CustomerID0` FROM ( - SELECT TOP 1 `t`.`CustomerID`, `t0`.`CustomerID` AS `CustomerID0` + SELECT TOP 1 `c1`.`CustomerID`, `c2`.`CustomerID` AS `CustomerID0` FROM ( SELECT TOP 2 `c`.`CustomerID` FROM `Customers` AS `c` ORDER BY `c`.`CustomerID` - ) AS `t`, + ) AS `c1`, ( - SELECT TOP 2 `t0`.`CustomerID`, `t0`.`Address`, `t0`.`City`, `t0`.`CompanyName`, `t0`.`ContactName`, `t0`.`ContactTitle`, `t0`.`Country`, `t0`.`Fax`, `t0`.`Phone`, `t0`.`PostalCode`, `t0`.`Region` + SELECT TOP 2 `c3`.`CustomerID` FROM ( - SELECT TOP 4 `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + SELECT TOP 4 `c0`.`CustomerID` FROM `Customers` AS `c0` ORDER BY `c0`.`CustomerID` - ) AS `t0` - ORDER BY `t0`.`CustomerID` DESC - ) AS `t0` - ORDER BY `t`.`CustomerID` -) AS `t1` -INNER JOIN `Orders` AS `o` ON `t1`.`CustomerID0` = `o`.`CustomerID` -ORDER BY `t1`.`CustomerID`, `t1`.`CustomerID0` + ) AS `c3` + ORDER BY `c3`.`CustomerID` DESC + ) AS `c2` + ORDER BY `c1`.`CustomerID` +) AS `s0` +INNER JOIN `Orders` AS `o0` ON `s0`.`CustomerID0` = `o0`.`CustomerID` +ORDER BY `s0`.`CustomerID`, `s0`.`CustomerID0` """); } @@ -405,32 +405,32 @@ public override async Task Include_duplicate_reference(bool async) await base.Include_duplicate_reference(async); AssertSql( -""" -SELECT `t1`.`OrderID`, `t1`.`CustomerID`, `t1`.`EmployeeID`, `t1`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `t1`.`OrderID0`, `t1`.`CustomerID0`, `t1`.`EmployeeID0`, `t1`.`OrderDate0`, `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + """ +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `s`.`OrderID0`, `s`.`CustomerID0`, `s`.`EmployeeID0`, `s`.`OrderDate0`, `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` FROM (( - SELECT `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate`, `t0`.`OrderID` AS `OrderID0`, `t0`.`CustomerID` AS `CustomerID0`, `t0`.`EmployeeID` AS `EmployeeID0`, `t0`.`OrderDate` AS `OrderDate0` + SELECT `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `o2`.`OrderID` AS `OrderID0`, `o2`.`CustomerID` AS `CustomerID0`, `o2`.`EmployeeID` AS `EmployeeID0`, `o2`.`OrderDate` AS `OrderDate0` FROM ( SELECT TOP 2 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` ORDER BY `o`.`CustomerID`, `o`.`OrderID` - ) AS `t`, + ) AS `o1`, ( - SELECT `t1`.`OrderID`, `t1`.`CustomerID`, `t1`.`EmployeeID`, `t1`.`OrderDate` + SELECT `o4`.`OrderID`, `o4`.`CustomerID`, `o4`.`EmployeeID`, `o4`.`OrderDate` FROM ( - SELECT TOP 2 `t0`.`OrderID`, `t0`.`CustomerID`, `t0`.`EmployeeID`, `t0`.`OrderDate` + SELECT TOP 2 `o3`.`OrderID`, `o3`.`CustomerID`, `o3`.`EmployeeID`, `o3`.`OrderDate` FROM ( SELECT TOP 4 `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` FROM `Orders` AS `o0` ORDER BY `o0`.`CustomerID`, `o0`.`OrderID` - ) AS `t0` - ORDER BY `t0`.`CustomerID` DESC, `t0`.`OrderID` DESC - ) AS `t1` - ORDER BY `t1`.`CustomerID`, `t1`.`OrderID` - ) AS `t0` -) AS `t1` -LEFT JOIN `Customers` AS `c` ON `t1`.`CustomerID` = `c`.`CustomerID`) -LEFT JOIN `Customers` AS `c0` ON `t1`.`CustomerID0` = `c0`.`CustomerID` -ORDER BY `t1`.`CustomerID`, `t1`.`OrderID` + ) AS `o3` + ORDER BY `o3`.`CustomerID` DESC, `o3`.`OrderID` DESC + ) AS `o4` + ORDER BY `o4`.`CustomerID`, `o4`.`OrderID` + ) AS `o2` +) AS `s` +LEFT JOIN `Customers` AS `c` ON `s`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Customers` AS `c0` ON `s`.`CustomerID0` = `c0`.`CustomerID` +ORDER BY `s`.`CustomerID`, `s`.`OrderID` """); } @@ -510,18 +510,18 @@ ORDER BY NOT (IIF(`o`.`OrderID` > 0, TRUE, FALSE)), IIF(`c`.`CustomerID` IS NOT """, // """ -SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `t`.`OrderID`, `t`.`CustomerID` +SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `s`.`OrderID`, `s`.`CustomerID` FROM ( - SELECT TOP 5 `t`.`OrderID`, `t`.`CustomerID`, `t`.`c`, `t`.`c0` + SELECT TOP 5 `s0`.`OrderID`, `s0`.`CustomerID`, `s0`.`c`, `s0`.`c0` FROM ( SELECT `o`.`OrderID`, `c`.`CustomerID`, IIF(`o`.`OrderID` > 0, TRUE, FALSE) AS `c`, IIF(`c`.`CustomerID` IS NOT NULL, `c`.`City`, '') AS `c0` FROM `Orders` AS `o` LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` - ) AS `t` - ORDER BY NOT (`t`.`c`), `t`.`c0` -) AS `t` -INNER JOIN `Order Details` AS `o0` ON `t`.`OrderID` = `o0`.`OrderID` -ORDER BY NOT (`t`.`c`), `t`.`c0`, `t`.`OrderID`, `t`.`CustomerID` + ) AS `s0` + ORDER BY NOT (`s0`.`c`), `s0`.`c0` +) AS `s` +INNER JOIN `Order Details` AS `o0` ON `s`.`OrderID` = `o0`.`OrderID` +ORDER BY NOT (`s`.`c`), `s`.`c0`, `s`.`OrderID`, `s`.`CustomerID` """); } @@ -530,20 +530,20 @@ public override async Task Include_where_skip_take_projection(bool async) await base.Include_where_skip_take_projection(async); AssertSql( -""" + """ SELECT `o0`.`CustomerID` FROM ( - SELECT TOP 2 `t0`.`OrderID`, `t0`.`ProductID` + SELECT TOP 2 `o2`.`OrderID`, `o2`.`ProductID` FROM ( SELECT TOP 3 `o`.`OrderID`, `o`.`ProductID` FROM `Order Details` AS `o` WHERE `o`.`Quantity` = 10 ORDER BY `o`.`OrderID`, `o`.`ProductID` - ) AS `t0` - ORDER BY `t0`.`OrderID` DESC, `t0`.`ProductID` DESC -) AS `t` -INNER JOIN `Orders` AS `o0` ON `t`.`OrderID` = `o0`.`OrderID` -ORDER BY `t`.`OrderID`, `t`.`ProductID` + ) AS `o2` + ORDER BY `o2`.`OrderID` DESC, `o2`.`ProductID` DESC +) AS `o1` +INNER JOIN `Orders` AS `o0` ON `o1`.`OrderID` = `o0`.`OrderID` +ORDER BY `o1`.`OrderID`, `o1`.`ProductID` """); } @@ -709,21 +709,21 @@ public override async Task Include_collection_order_by_non_key_with_first_or_def await base.Include_collection_order_by_non_key_with_first_or_default(async); AssertSql( -""" + """ SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`CompanyName` DESC, `c`.`CustomerID` """, -// -""" -SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `t`.`CustomerID` + // + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c0`.`CustomerID` FROM ( SELECT TOP 1 `c`.`CustomerID`, `c`.`CompanyName` FROM `Customers` AS `c` ORDER BY `c`.`CompanyName` DESC -) AS `t` -INNER JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CompanyName` DESC, `t`.`CustomerID` +) AS `c0` +INNER JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CompanyName` DESC, `c0`.`CustomerID` """); } @@ -926,21 +926,21 @@ public override async Task Include_collection_with_last(bool async) await base.Include_collection_with_last(async); AssertSql( -""" + """ SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`CompanyName` DESC, `c`.`CustomerID` """, -// -""" -SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `t`.`CustomerID` + // + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c0`.`CustomerID` FROM ( SELECT TOP 1 `c`.`CustomerID`, `c`.`CompanyName` FROM `Customers` AS `c` ORDER BY `c`.`CompanyName` DESC -) AS `t` -INNER JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CompanyName` DESC, `t`.`CustomerID` +) AS `c0` +INNER JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CompanyName` DESC, `c0`.`CustomerID` """); } @@ -1063,28 +1063,28 @@ public override async Task Include_collection_dependent_already_tracked(bool asy await base.Include_collection_dependent_already_tracked(async); AssertSql( -""" + """ SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` WHERE `o`.`CustomerID` = 'ALFKI' """, -// -""" + // + """ SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` WHERE `c`.`CustomerID` = 'ALFKI' ORDER BY `c`.`CustomerID` """, -// -""" -SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `t`.`CustomerID` + // + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c0`.`CustomerID` FROM ( SELECT TOP 1 `c`.`CustomerID` FROM `Customers` AS `c` WHERE `c`.`CustomerID` = 'ALFKI' -) AS `t` -INNER JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CustomerID` +) AS `c0` +INNER JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` """); } @@ -1133,28 +1133,28 @@ public override async Task Include_collection_principal_already_tracked(bool asy await base.Include_collection_principal_already_tracked(async); AssertSql( -""" + """ SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` WHERE `c`.`CustomerID` = 'ALFKI' """, -// -""" + // + """ SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` WHERE `c`.`CustomerID` = 'ALFKI' ORDER BY `c`.`CustomerID` """, -// -""" -SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `t`.`CustomerID` + // + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c0`.`CustomerID` FROM ( SELECT TOP 1 `c`.`CustomerID` FROM `Customers` AS `c` WHERE `c`.`CustomerID` = 'ALFKI' -) AS `t` -INNER JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CustomerID` +) AS `c0` +INNER JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` """); } @@ -1185,48 +1185,48 @@ public override async Task Multi_level_includes_are_applied_with_take(bool async AssertSql( """ -SELECT TOP 1 `t`.`CustomerID` +SELECT TOP 1 `c0`.`CustomerID` FROM ( SELECT TOP 1 `c`.`CustomerID` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'A%' ORDER BY `c`.`CustomerID` -) AS `t` -ORDER BY `t`.`CustomerID` +) AS `c0` +ORDER BY `c0`.`CustomerID` """, // """ -SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `t0`.`CustomerID` +SELECT `o3`.`OrderID`, `o3`.`CustomerID`, `o3`.`EmployeeID`, `o3`.`OrderDate`, `c1`.`CustomerID` FROM ( - SELECT TOP 1 `t`.`CustomerID` + SELECT TOP 1 `c0`.`CustomerID` FROM ( SELECT TOP 1 `c`.`CustomerID` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'A%' ORDER BY `c`.`CustomerID` - ) AS `t` - ORDER BY `t`.`CustomerID` -) AS `t0` -INNER JOIN `Orders` AS `o` ON `t0`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t0`.`CustomerID`, `o`.`OrderID` + ) AS `c0` + ORDER BY `c0`.`CustomerID` +) AS `c1` +INNER JOIN `Orders` AS `o3` ON `c1`.`CustomerID` = `o3`.`CustomerID` +ORDER BY `c1`.`CustomerID`, `o3`.`OrderID` """, // """ -SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `t0`.`CustomerID`, `o`.`OrderID` +SELECT `o4`.`OrderID`, `o4`.`ProductID`, `o4`.`Discount`, `o4`.`Quantity`, `o4`.`UnitPrice`, `c1`.`CustomerID`, `o3`.`OrderID` FROM (( - SELECT TOP 1 `t`.`CustomerID` + SELECT TOP 1 `c0`.`CustomerID` FROM ( SELECT TOP 1 `c`.`CustomerID` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'A%' ORDER BY `c`.`CustomerID` - ) AS `t` - ORDER BY `t`.`CustomerID` -) AS `t0` -INNER JOIN `Orders` AS `o` ON `t0`.`CustomerID` = `o`.`CustomerID`) -LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` -WHERE `o`.`OrderID` IS NOT NULL AND `o0`.`OrderID` IS NOT NULL -ORDER BY `t0`.`CustomerID`, `o`.`OrderID` + ) AS `c0` + ORDER BY `c0`.`CustomerID` +) AS `c1` +INNER JOIN `Orders` AS `o3` ON `c1`.`CustomerID` = `o3`.`CustomerID`) +LEFT JOIN `Order Details` AS `o4` ON `o3`.`OrderID` = `o4`.`OrderID` +WHERE `o3`.`OrderID` IS NOT NULL AND `o4`.`OrderID` IS NOT NULL +ORDER BY `c1`.`CustomerID`, `o3`.`OrderID` """); } @@ -1235,31 +1235,31 @@ public override async Task Include_duplicate_reference2(bool async) await base.Include_duplicate_reference2(async); AssertSql( -""" -SELECT `t1`.`OrderID`, `t1`.`CustomerID`, `t1`.`EmployeeID`, `t1`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `t1`.`OrderID0`, `t1`.`CustomerID0`, `t1`.`EmployeeID0`, `t1`.`OrderDate0` + """ +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `s`.`OrderID0`, `s`.`CustomerID0`, `s`.`EmployeeID0`, `s`.`OrderDate0` FROM ( - SELECT `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate`, `t0`.`OrderID` AS `OrderID0`, `t0`.`CustomerID` AS `CustomerID0`, `t0`.`EmployeeID` AS `EmployeeID0`, `t0`.`OrderDate` AS `OrderDate0` + SELECT `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `o2`.`OrderID` AS `OrderID0`, `o2`.`CustomerID` AS `CustomerID0`, `o2`.`EmployeeID` AS `EmployeeID0`, `o2`.`OrderDate` AS `OrderDate0` FROM ( SELECT TOP 2 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` ORDER BY `o`.`OrderID` - ) AS `t`, + ) AS `o1`, ( - SELECT `t1`.`OrderID`, `t1`.`CustomerID`, `t1`.`EmployeeID`, `t1`.`OrderDate` + SELECT `o4`.`OrderID`, `o4`.`CustomerID`, `o4`.`EmployeeID`, `o4`.`OrderDate` FROM ( - SELECT TOP 2 `t0`.`OrderID`, `t0`.`CustomerID`, `t0`.`EmployeeID`, `t0`.`OrderDate` + SELECT TOP 2 `o3`.`OrderID`, `o3`.`CustomerID`, `o3`.`EmployeeID`, `o3`.`OrderDate` FROM ( SELECT TOP 4 `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` FROM `Orders` AS `o0` ORDER BY `o0`.`OrderID` - ) AS `t0` - ORDER BY `t0`.`OrderID` DESC - ) AS `t1` - ORDER BY `t1`.`OrderID` - ) AS `t0` -) AS `t1` -LEFT JOIN `Customers` AS `c` ON `t1`.`CustomerID` = `c`.`CustomerID` -ORDER BY `t1`.`OrderID` + ) AS `o3` + ORDER BY `o3`.`OrderID` DESC + ) AS `o4` + ORDER BY `o4`.`OrderID` + ) AS `o2` +) AS `s` +LEFT JOIN `Customers` AS `c` ON `s`.`CustomerID` = `c`.`CustomerID` +ORDER BY `s`.`OrderID` """); } @@ -1268,21 +1268,21 @@ public override async Task Include_collection_then_reference(bool async) await base.Include_collection_then_reference(async); AssertSql( -""" + """ SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` FROM `Products` AS `p` WHERE (`p`.`ProductID` MOD 17) = 5 ORDER BY `p`.`ProductID` """, -// -""" -SELECT `t`.`OrderID`, `t`.`ProductID`, `t`.`Discount`, `t`.`Quantity`, `t`.`UnitPrice`, `t`.`OrderID0`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate`, `p`.`ProductID` + // + """ +SELECT `s`.`OrderID`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice`, `s`.`OrderID0`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `p`.`ProductID` FROM `Products` AS `p` INNER JOIN ( SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID` AS `OrderID0`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` FROM `Order Details` AS `o` INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` -) AS `t` ON `p`.`ProductID` = `t`.`ProductID` +) AS `s` ON `p`.`ProductID` = `s`.`ProductID` WHERE (`p`.`ProductID` MOD 17) = 5 ORDER BY `p`.`ProductID` """); @@ -1293,31 +1293,31 @@ public override async Task Include_duplicate_reference3(bool async) await base.Include_duplicate_reference3(async); AssertSql( -""" -SELECT `t1`.`OrderID`, `t1`.`CustomerID`, `t1`.`EmployeeID`, `t1`.`OrderDate`, `t1`.`OrderID0`, `t1`.`CustomerID0`, `t1`.`EmployeeID0`, `t1`.`OrderDate0`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + """ +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`CustomerID0`, `s`.`EmployeeID0`, `s`.`OrderDate0`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM ( - SELECT `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate`, `t0`.`OrderID` AS `OrderID0`, `t0`.`CustomerID` AS `CustomerID0`, `t0`.`EmployeeID` AS `EmployeeID0`, `t0`.`OrderDate` AS `OrderDate0` + SELECT `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `o2`.`OrderID` AS `OrderID0`, `o2`.`CustomerID` AS `CustomerID0`, `o2`.`EmployeeID` AS `EmployeeID0`, `o2`.`OrderDate` AS `OrderDate0` FROM ( SELECT TOP 2 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` ORDER BY `o`.`OrderID` - ) AS `t`, + ) AS `o1`, ( - SELECT `t1`.`OrderID`, `t1`.`CustomerID`, `t1`.`EmployeeID`, `t1`.`OrderDate` + SELECT `o4`.`OrderID`, `o4`.`CustomerID`, `o4`.`EmployeeID`, `o4`.`OrderDate` FROM ( - SELECT TOP 2 `t0`.`OrderID`, `t0`.`CustomerID`, `t0`.`EmployeeID`, `t0`.`OrderDate` + SELECT TOP 2 `o3`.`OrderID`, `o3`.`CustomerID`, `o3`.`EmployeeID`, `o3`.`OrderDate` FROM ( SELECT TOP 4 `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` FROM `Orders` AS `o0` ORDER BY `o0`.`OrderID` - ) AS `t0` - ORDER BY `t0`.`OrderID` DESC - ) AS `t1` - ORDER BY `t1`.`OrderID` - ) AS `t0` -) AS `t1` -LEFT JOIN `Customers` AS `c` ON `t1`.`CustomerID0` = `c`.`CustomerID` -ORDER BY `t1`.`OrderID` + ) AS `o3` + ORDER BY `o3`.`OrderID` DESC + ) AS `o4` + ORDER BY `o4`.`OrderID` + ) AS `o2` +) AS `s` +LEFT JOIN `Customers` AS `c` ON `s`.`CustomerID0` = `c`.`CustomerID` +ORDER BY `s`.`OrderID` """); } @@ -1349,24 +1349,24 @@ public override async Task Then_include_collection_order_by_collection_column(bo await base.Then_include_collection_order_by_collection_column(async); AssertSql( -""" -SELECT TOP 1 `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `t`.`c` + """ +SELECT TOP 1 `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region`, `c1`.`c` FROM ( SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, ( - SELECT TOP 1 `o0`.`OrderDate` - FROM `Orders` AS `o0` - WHERE `c`.`CustomerID` = `o0`.`CustomerID` - ORDER BY `o0`.`OrderDate` DESC) AS `c` + SELECT TOP 1 `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`OrderDate` DESC) AS `c` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'W%' -) AS `t` -ORDER BY `t`.`c` DESC, `t`.`CustomerID` +) AS `c1` +ORDER BY `c1`.`c` DESC, `c1`.`CustomerID` """, - // - """ -SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `t`.`CustomerID` + // + """ +SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c0`.`CustomerID` FROM ( - SELECT TOP 1 `t`.`CustomerID`, `t`.`c` + SELECT TOP 1 `c2`.`CustomerID`, `c2`.`c` FROM ( SELECT `c`.`CustomerID`, ( SELECT TOP 1 `o`.`OrderDate` @@ -1375,36 +1375,32 @@ SELECT TOP 1 `o`.`OrderDate` ORDER BY `o`.`OrderDate` DESC) AS `c` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'W%' - ) AS `t` - ORDER BY `t`.`c` DESC -) AS `t` -INNER JOIN `Orders` AS `o0` ON `t`.`CustomerID` = `o0`.`CustomerID` -ORDER BY `t`.`c` DESC, `t`.`CustomerID`, `o0`.`OrderID` + ) AS `c2` + ORDER BY `c2`.`c` DESC +) AS `c0` +INNER JOIN `Orders` AS `o0` ON `c0`.`CustomerID` = `o0`.`CustomerID` +ORDER BY `c0`.`c` DESC, `c0`.`CustomerID`, `o0`.`OrderID` """, - // - """ -SELECT `o1`.`OrderID`, `o1`.`ProductID`, `o1`.`Discount`, `o1`.`Quantity`, `o1`.`UnitPrice`, `t`.`CustomerID`, `o0`.`OrderID` + // + """ +SELECT `o1`.`OrderID`, `o1`.`ProductID`, `o1`.`Discount`, `o1`.`Quantity`, `o1`.`UnitPrice`, `c0`.`CustomerID`, `o0`.`OrderID` FROM (( - SELECT TOP 1 `t`.`CustomerID`, `t`.`c`, `t`.`c0` + SELECT TOP 1 `c3`.`CustomerID`, `c3`.`c` FROM ( SELECT `c`.`CustomerID`, ( SELECT TOP 1 `o`.`OrderDate` FROM `Orders` AS `o` WHERE `c`.`CustomerID` = `o`.`CustomerID` - ORDER BY `o`.`OrderDate` DESC) AS `c`, ( - SELECT TOP 1 `o1`.`OrderDate` - FROM `Orders` AS `o1` - WHERE `c`.`CustomerID` = `o1`.`CustomerID` - ORDER BY `o1`.`OrderDate` DESC) AS `c0` + ORDER BY `o`.`OrderDate` DESC) AS `c` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'W%' - ) AS `t` - ORDER BY `t`.`c0` DESC -) AS `t` -INNER JOIN `Orders` AS `o0` ON `t`.`CustomerID` = `o0`.`CustomerID`) + ) AS `c3` + ORDER BY `c3`.`c` DESC +) AS `c0` +INNER JOIN `Orders` AS `o0` ON `c0`.`CustomerID` = `o0`.`CustomerID`) LEFT JOIN `Order Details` AS `o1` ON `o0`.`OrderID` = `o1`.`OrderID` WHERE `o0`.`OrderID` IS NOT NULL AND `o1`.`OrderID` IS NOT NULL -ORDER BY `t`.`c` DESC, `t`.`CustomerID`, `o0`.`OrderID` +ORDER BY `c0`.`c` DESC, `c0`.`CustomerID`, `o0`.`OrderID` """); } @@ -1590,21 +1586,21 @@ public override async Task Include_list(bool async) await base.Include_list(async); AssertSql( -""" + """ SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` FROM `Products` AS `p` WHERE (`p`.`ProductID` MOD 17) = 5 AND `p`.`UnitPrice` < 20.0 ORDER BY `p`.`ProductID` """, -// -""" -SELECT `t`.`OrderID`, `t`.`ProductID`, `t`.`Discount`, `t`.`Quantity`, `t`.`UnitPrice`, `t`.`OrderID0`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate`, `p`.`ProductID` + // + """ +SELECT `s`.`OrderID`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice`, `s`.`OrderID0`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `p`.`ProductID` FROM `Products` AS `p` INNER JOIN ( SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID` AS `OrderID0`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` FROM `Order Details` AS `o` INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` -) AS `t` ON `p`.`ProductID` = `t`.`ProductID` +) AS `s` ON `p`.`ProductID` = `s`.`ProductID` WHERE (`p`.`ProductID` MOD 17) = 5 AND `p`.`UnitPrice` < 20.0 ORDER BY `p`.`ProductID` """); @@ -1615,23 +1611,23 @@ public override async Task Include_closes_reader(bool async) await base.Include_closes_reader(async); AssertSql( -""" + """ SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`CustomerID` """, -// -""" -SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `t`.`CustomerID` + // + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c0`.`CustomerID` FROM ( SELECT TOP 1 `c`.`CustomerID` FROM `Customers` AS `c` -) AS `t` -INNER JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CustomerID` +) AS `c0` +INNER JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` """, -// -""" + // + """ SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` FROM `Products` AS `p` """); @@ -1770,61 +1766,61 @@ public override async Task Multi_level_includes_are_applied_with_skip_take(bool await base.Multi_level_includes_are_applied_with_skip_take(async); AssertSql( -""" -SELECT TOP 1 `t`.`CustomerID` + """ +SELECT TOP 1 `c0`.`CustomerID` FROM ( - SELECT TOP 1 `t0`.`CustomerID` + SELECT TOP 1 `c1`.`CustomerID` FROM ( SELECT TOP 2 `c`.`CustomerID` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'A%' ORDER BY `c`.`CustomerID` - ) AS `t0` - ORDER BY `t0`.`CustomerID` DESC -) AS `t` -ORDER BY `t`.`CustomerID` + ) AS `c1` + ORDER BY `c1`.`CustomerID` DESC +) AS `c0` +ORDER BY `c0`.`CustomerID` """, // -""" -SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `t1`.`CustomerID` + """ +SELECT `o3`.`OrderID`, `o3`.`CustomerID`, `o3`.`EmployeeID`, `o3`.`OrderDate`, `c2`.`CustomerID` FROM ( - SELECT TOP 1 `t`.`CustomerID` + SELECT TOP 1 `c0`.`CustomerID` FROM ( - SELECT TOP 1 `t0`.`CustomerID` + SELECT TOP 1 `c1`.`CustomerID` FROM ( SELECT TOP 2 `c`.`CustomerID` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'A%' ORDER BY `c`.`CustomerID` - ) AS `t0` - ORDER BY `t0`.`CustomerID` DESC - ) AS `t` - ORDER BY `t`.`CustomerID` -) AS `t1` -INNER JOIN `Orders` AS `o` ON `t1`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t1`.`CustomerID`, `o`.`OrderID` + ) AS `c1` + ORDER BY `c1`.`CustomerID` DESC + ) AS `c0` + ORDER BY `c0`.`CustomerID` +) AS `c2` +INNER JOIN `Orders` AS `o3` ON `c2`.`CustomerID` = `o3`.`CustomerID` +ORDER BY `c2`.`CustomerID`, `o3`.`OrderID` """, // -""" -SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `t1`.`CustomerID`, `o`.`OrderID` + """ +SELECT `o4`.`OrderID`, `o4`.`ProductID`, `o4`.`Discount`, `o4`.`Quantity`, `o4`.`UnitPrice`, `c2`.`CustomerID`, `o3`.`OrderID` FROM (( - SELECT TOP 1 `t`.`CustomerID` + SELECT TOP 1 `c0`.`CustomerID` FROM ( - SELECT TOP 1 `t0`.`CustomerID` + SELECT TOP 1 `c1`.`CustomerID` FROM ( SELECT TOP 2 `c`.`CustomerID` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'A%' ORDER BY `c`.`CustomerID` - ) AS `t0` - ORDER BY `t0`.`CustomerID` DESC - ) AS `t` - ORDER BY `t`.`CustomerID` -) AS `t1` -INNER JOIN `Orders` AS `o` ON `t1`.`CustomerID` = `o`.`CustomerID`) -LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` -WHERE `o`.`OrderID` IS NOT NULL AND `o0`.`OrderID` IS NOT NULL -ORDER BY `t1`.`CustomerID`, `o`.`OrderID` + ) AS `c1` + ORDER BY `c1`.`CustomerID` DESC + ) AS `c0` + ORDER BY `c0`.`CustomerID` +) AS `c2` +INNER JOIN `Orders` AS `o3` ON `c2`.`CustomerID` = `o3`.`CustomerID`) +LEFT JOIN `Order Details` AS `o4` ON `o3`.`OrderID` = `o4`.`OrderID` +WHERE `o3`.`OrderID` IS NOT NULL AND `o4`.`OrderID` IS NOT NULL +ORDER BY `c2`.`CustomerID`, `o3`.`OrderID` """); } @@ -1841,18 +1837,18 @@ ORDER BY NOT (IIF(`c`.`CustomerID` IS NOT NULL, TRUE, FALSE)), IIF(`c`.`Customer """, // """ -SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `t`.`OrderID`, `t`.`CustomerID` +SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `s`.`OrderID`, `s`.`CustomerID` FROM ( - SELECT TOP 2 `t`.`OrderID`, `t`.`CustomerID`, `t`.`c`, `t`.`c0` + SELECT TOP 2 `s0`.`OrderID`, `s0`.`CustomerID`, `s0`.`c`, `s0`.`c0` FROM ( SELECT `o`.`OrderID`, `c`.`CustomerID`, IIF(`c`.`CustomerID` IS NOT NULL, TRUE, FALSE) AS `c`, IIF(`c`.`CustomerID` IS NOT NULL, `c`.`CustomerID`, '') AS `c0` FROM `Orders` AS `o` LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` - ) AS `t` - ORDER BY NOT (`t`.`c`), `t`.`c0` -) AS `t` -INNER JOIN `Order Details` AS `o0` ON `t`.`OrderID` = `o0`.`OrderID` -ORDER BY NOT (`t`.`c`), `t`.`c0`, `t`.`OrderID`, `t`.`CustomerID` + ) AS `s0` + ORDER BY NOT (`s0`.`c`), `s0`.`c0` +) AS `s` +INNER JOIN `Order Details` AS `o0` ON `s`.`OrderID` = `o0`.`OrderID` +ORDER BY NOT (`s`.`c`), `s`.`c0`, `s`.`OrderID`, `s`.`CustomerID` """); } @@ -2057,20 +2053,20 @@ public override async Task Include_collection_take_no_order_by(bool async) await base.Include_collection_take_no_order_by(async); AssertSql( -""" + """ SELECT TOP 10 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`CustomerID` """, -// -""" -SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `t`.`CustomerID` + // + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c0`.`CustomerID` FROM ( SELECT TOP 10 `c`.`CustomerID` FROM `Customers` AS `c` -) AS `t` -INNER JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CustomerID` +) AS `c0` +INNER JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` """); } @@ -2117,14 +2113,14 @@ public override async Task Include_reference_distinct_is_server_evaluated(bool a await base.Include_reference_distinct_is_server_evaluated(async); AssertSql( -""" -SELECT `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + """ +SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM ( SELECT DISTINCT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` WHERE `o`.`OrderID` < 10250 -) AS `t` -LEFT JOIN `Customers` AS `c` ON `t`.`CustomerID` = `c`.`CustomerID` +) AS `o0` +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` """); } @@ -2197,47 +2193,47 @@ public override async Task Include_duplicate_collection_result_operator2(bool as await base.Include_duplicate_collection_result_operator2(async); AssertSql( -""" -SELECT TOP 1 `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `t0`.`CustomerID`, `t0`.`Address`, `t0`.`City`, `t0`.`CompanyName`, `t0`.`ContactName`, `t0`.`ContactTitle`, `t0`.`Country`, `t0`.`Fax`, `t0`.`Phone`, `t0`.`PostalCode`, `t0`.`Region` + """ +SELECT TOP 1 `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region`, `c2`.`CustomerID`, `c2`.`Address`, `c2`.`City`, `c2`.`CompanyName`, `c2`.`ContactName`, `c2`.`ContactTitle`, `c2`.`Country`, `c2`.`Fax`, `c2`.`Phone`, `c2`.`PostalCode`, `c2`.`Region` FROM ( SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`CustomerID` -) AS `t`, +) AS `c1`, ( - SELECT TOP 2 `t0`.`CustomerID`, `t0`.`Address`, `t0`.`City`, `t0`.`CompanyName`, `t0`.`ContactName`, `t0`.`ContactTitle`, `t0`.`Country`, `t0`.`Fax`, `t0`.`Phone`, `t0`.`PostalCode`, `t0`.`Region` + SELECT TOP 2 `c3`.`CustomerID`, `c3`.`Address`, `c3`.`City`, `c3`.`CompanyName`, `c3`.`ContactName`, `c3`.`ContactTitle`, `c3`.`Country`, `c3`.`Fax`, `c3`.`Phone`, `c3`.`PostalCode`, `c3`.`Region` FROM ( SELECT TOP 4 `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` FROM `Customers` AS `c0` ORDER BY `c0`.`CustomerID` - ) AS `t0` - ORDER BY `t0`.`CustomerID` DESC -) AS `t0` -ORDER BY `t`.`CustomerID`, `t0`.`CustomerID` + ) AS `c3` + ORDER BY `c3`.`CustomerID` DESC +) AS `c2` +ORDER BY `c1`.`CustomerID`, `c2`.`CustomerID` """, // -""" -SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `t1`.`CustomerID`, `t1`.`CustomerID0` + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `s`.`CustomerID`, `s`.`CustomerID0` FROM ( - SELECT TOP 1 `t`.`CustomerID`, `t0`.`CustomerID` AS `CustomerID0` + SELECT TOP 1 `c1`.`CustomerID`, `c2`.`CustomerID` AS `CustomerID0` FROM ( SELECT TOP 2 `c`.`CustomerID` FROM `Customers` AS `c` ORDER BY `c`.`CustomerID` - ) AS `t`, + ) AS `c1`, ( - SELECT TOP 2 `t0`.`CustomerID`, `t0`.`Address`, `t0`.`City`, `t0`.`CompanyName`, `t0`.`ContactName`, `t0`.`ContactTitle`, `t0`.`Country`, `t0`.`Fax`, `t0`.`Phone`, `t0`.`PostalCode`, `t0`.`Region` + SELECT TOP 2 `c3`.`CustomerID` FROM ( - SELECT TOP 4 `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + SELECT TOP 4 `c0`.`CustomerID` FROM `Customers` AS `c0` ORDER BY `c0`.`CustomerID` - ) AS `t0` - ORDER BY `t0`.`CustomerID` DESC - ) AS `t0` - ORDER BY `t`.`CustomerID` -) AS `t1` -INNER JOIN `Orders` AS `o` ON `t1`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t1`.`CustomerID`, `t1`.`CustomerID0` + ) AS `c3` + ORDER BY `c3`.`CustomerID` DESC + ) AS `c2` + ORDER BY `c1`.`CustomerID` +) AS `s` +INNER JOIN `Orders` AS `o` ON `s`.`CustomerID` = `o`.`CustomerID` +ORDER BY `s`.`CustomerID`, `s`.`CustomerID0` """); } @@ -2262,15 +2258,15 @@ ORDER BY `c`.`CustomerID` """, // """ -SELECT `t`.`OrderID`, `t`.`ProductID`, `t`.`Discount`, `t`.`Quantity`, `t`.`UnitPrice`, `t`.`ProductID0`, `t`.`Discontinued`, `t`.`ProductName`, `t`.`SupplierID`, `t`.`UnitPrice0`, `t`.`UnitsInStock`, `c`.`CustomerID`, `o`.`OrderID` +SELECT `s`.`OrderID`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice`, `s`.`ProductID0`, `s`.`Discontinued`, `s`.`ProductName`, `s`.`SupplierID`, `s`.`UnitPrice0`, `s`.`UnitsInStock`, `c`.`CustomerID`, `o`.`OrderID` FROM (`Customers` AS `c` INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`) LEFT JOIN ( SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `p`.`ProductID` AS `ProductID0`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice` AS `UnitPrice0`, `p`.`UnitsInStock` FROM `Order Details` AS `o0` INNER JOIN `Products` AS `p` ON `o0`.`ProductID` = `p`.`ProductID` -) AS `t` ON `o`.`OrderID` = `t`.`OrderID` -WHERE (`c`.`CustomerID` LIKE 'F%') AND (`o`.`OrderID` IS NOT NULL AND `t`.`OrderID` IS NOT NULL) +) AS `s` ON `o`.`OrderID` = `s`.`OrderID` +WHERE (`c`.`CustomerID` LIKE 'F%') AND (`o`.`OrderID` IS NOT NULL AND `s`.`OrderID` IS NOT NULL) ORDER BY `c`.`CustomerID`, `o`.`OrderID` """); } @@ -2336,21 +2332,21 @@ public override async Task Include_collection_order_by_non_key_with_take(bool as await base.Include_collection_order_by_non_key_with_take(async); AssertSql( -""" + """ SELECT TOP 10 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`ContactTitle`, `c`.`CustomerID` """, -// -""" -SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `t`.`CustomerID` + // + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c0`.`CustomerID` FROM ( SELECT TOP 10 `c`.`CustomerID`, `c`.`ContactTitle` FROM `Customers` AS `c` ORDER BY `c`.`ContactTitle` -) AS `t` -INNER JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`ContactTitle`, `t`.`CustomerID` +) AS `c0` +INNER JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`ContactTitle`, `c0`.`CustomerID` """); } @@ -2359,21 +2355,21 @@ public override async Task Include_with_take(bool async) await base.Include_with_take(async); AssertSql( -""" + """ SELECT TOP 10 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`ContactName` DESC, `c`.`CustomerID` """, -// -""" -SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `t`.`CustomerID` + // + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c0`.`CustomerID` FROM ( SELECT TOP 10 `c`.`CustomerID`, `c`.`ContactName` FROM `Customers` AS `c` ORDER BY `c`.`ContactName` DESC -) AS `t` -INNER JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`ContactName` DESC, `t`.`CustomerID` +) AS `c0` +INNER JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`ContactName` DESC, `c0`.`CustomerID` """); } @@ -2415,25 +2411,25 @@ public override async Task Include_collection_distinct_is_server_evaluated(bool await base.Include_collection_distinct_is_server_evaluated(async); AssertSql( -""" -SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region` + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` FROM ( SELECT DISTINCT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'A%' -) AS `t` -ORDER BY `t`.`CustomerID` +) AS `c0` +ORDER BY `c0`.`CustomerID` """, -// -""" -SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `t`.`CustomerID` + // + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c0`.`CustomerID` FROM ( SELECT DISTINCT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'A%' -) AS `t` -INNER JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CustomerID` +) AS `c0` +INNER JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` """); } @@ -2471,27 +2467,27 @@ ORDER BY `c`.`CustomerID` """, // """ -SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `t`.`CustomerID` +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c0`.`CustomerID` FROM ( SELECT TOP 1 `c`.`CustomerID` FROM `Customers` AS `c` WHERE `c`.`CustomerID` = 'ALFKI' -) AS `t` -INNER JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CustomerID`, `o`.`OrderID` +) AS `c0` +INNER JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID`, `o`.`OrderID` """, // """ -SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `t`.`CustomerID`, `o`.`OrderID` +SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `c0`.`CustomerID`, `o`.`OrderID` FROM (( SELECT TOP 1 `c`.`CustomerID` FROM `Customers` AS `c` WHERE `c`.`CustomerID` = 'ALFKI' -) AS `t` -INNER JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID`) +) AS `c0` +INNER JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID`) LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` WHERE `o`.`OrderID` IS NOT NULL AND `o0`.`OrderID` IS NOT NULL -ORDER BY `t`.`CustomerID`, `o`.`OrderID` +ORDER BY `c0`.`CustomerID`, `o`.`OrderID` """); } @@ -2552,21 +2548,21 @@ public override async Task Include_collection_orderby_take(bool async) await base.Include_collection_orderby_take(async); AssertSql( -""" + """ SELECT TOP 5 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`CustomerID` """, -// -""" -SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `t`.`CustomerID` + // + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c0`.`CustomerID` FROM ( SELECT TOP 5 `c`.`CustomerID` FROM `Customers` AS `c` ORDER BY `c`.`CustomerID` -) AS `t` -INNER JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CustomerID` +) AS `c0` +INNER JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` """); } diff --git a/test/EFCore.Jet.FunctionalTests/Query/NorthwindSplitIncludeQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/NorthwindSplitIncludeQueryJetTest.cs index 0c326c6b..a9dcd839 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/NorthwindSplitIncludeQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/NorthwindSplitIncludeQueryJetTest.cs @@ -36,21 +36,21 @@ public override async Task Include_list(bool async) await base.Include_list(async); AssertSql( -""" + """ SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` FROM `Products` AS `p` WHERE (`p`.`ProductID` MOD 17) = 5 AND `p`.`UnitPrice` < 20.0 ORDER BY `p`.`ProductID` """, -// -""" -SELECT `t`.`OrderID`, `t`.`ProductID`, `t`.`Discount`, `t`.`Quantity`, `t`.`UnitPrice`, `t`.`OrderID0`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate`, `p`.`ProductID` + // + """ +SELECT `s`.`OrderID`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice`, `s`.`OrderID0`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `p`.`ProductID` FROM `Products` AS `p` INNER JOIN ( SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID` AS `OrderID0`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` FROM `Order Details` AS `o` INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` -) AS `t` ON `p`.`ProductID` = `t`.`ProductID` +) AS `s` ON `p`.`ProductID` = `s`.`ProductID` WHERE (`p`.`ProductID` MOD 17) = 5 AND `p`.`UnitPrice` < 20.0 ORDER BY `p`.`ProductID` """); @@ -108,21 +108,21 @@ public override async Task Include_collection_with_last(bool async) await base.Include_collection_with_last(async); AssertSql( -""" + """ SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`CompanyName` DESC, `c`.`CustomerID` """, -// -""" -SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `t`.`CustomerID` + // + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c0`.`CustomerID` FROM ( SELECT TOP 1 `c`.`CustomerID`, `c`.`CompanyName` FROM `Customers` AS `c` ORDER BY `c`.`CompanyName` DESC -) AS `t` -INNER JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CompanyName` DESC, `t`.`CustomerID` +) AS `c0` +INNER JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CompanyName` DESC, `c0`.`CustomerID` """); } @@ -136,20 +136,20 @@ public override async Task Include_collection_take_no_order_by(bool async) await base.Include_collection_take_no_order_by(async); AssertSql( -""" + """ SELECT TOP 10 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`CustomerID` """, -// -""" -SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `t`.`CustomerID` + // + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c0`.`CustomerID` FROM ( SELECT TOP 10 `c`.`CustomerID` FROM `Customers` AS `c` -) AS `t` -INNER JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CustomerID` +) AS `c0` +INNER JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` """); } @@ -275,24 +275,24 @@ public override async Task Include_multi_level_reference_and_collection_predicat await base.Include_multi_level_reference_and_collection_predicate(async); AssertSql( -""" + """ SELECT TOP 2 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Orders` AS `o` LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` WHERE `o`.`OrderID` = 10248 ORDER BY `o`.`OrderID`, `c`.`CustomerID` """, -// -""" -SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `t`.`OrderID`, `t`.`CustomerID` + // + """ +SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `s`.`OrderID`, `s`.`CustomerID` FROM ( SELECT TOP 1 `o`.`OrderID`, `c`.`CustomerID` FROM `Orders` AS `o` LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` WHERE `o`.`OrderID` = 10248 -) AS `t` -INNER JOIN `Orders` AS `o0` ON `t`.`CustomerID` = `o0`.`CustomerID` -ORDER BY `t`.`OrderID`, `t`.`CustomerID` +) AS `s` +INNER JOIN `Orders` AS `o0` ON `s`.`CustomerID` = `o0`.`CustomerID` +ORDER BY `s`.`OrderID`, `s`.`CustomerID` """); } @@ -301,26 +301,26 @@ public override async Task Include_multi_level_collection_and_then_include_refer await base.Include_multi_level_collection_and_then_include_reference_predicate(async); AssertSql( -""" + """ SELECT TOP 2 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` WHERE `o`.`OrderID` = 10248 ORDER BY `o`.`OrderID` """, -// -""" -SELECT `t0`.`OrderID`, `t0`.`ProductID`, `t0`.`Discount`, `t0`.`Quantity`, `t0`.`UnitPrice`, `t0`.`ProductID0`, `t0`.`Discontinued`, `t0`.`ProductName`, `t0`.`SupplierID`, `t0`.`UnitPrice0`, `t0`.`UnitsInStock`, `t`.`OrderID` + // + """ +SELECT `s`.`OrderID`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice`, `s`.`ProductID0`, `s`.`Discontinued`, `s`.`ProductName`, `s`.`SupplierID`, `s`.`UnitPrice0`, `s`.`UnitsInStock`, `o1`.`OrderID` FROM ( SELECT TOP 1 `o`.`OrderID` FROM `Orders` AS `o` WHERE `o`.`OrderID` = 10248 -) AS `t` +) AS `o1` INNER JOIN ( SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `p`.`ProductID` AS `ProductID0`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice` AS `UnitPrice0`, `p`.`UnitsInStock` FROM `Order Details` AS `o0` INNER JOIN `Products` AS `p` ON `o0`.`ProductID` = `p`.`ProductID` -) AS `t0` ON `t`.`OrderID` = `t0`.`OrderID` -ORDER BY `t`.`OrderID` +) AS `s` ON `o1`.`OrderID` = `s`.`OrderID` +ORDER BY `o1`.`OrderID` """); } @@ -351,23 +351,23 @@ public override async Task Include_collection_order_by_collection_column(bool as AssertSql( """ -SELECT TOP 1 `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `t`.`c` +SELECT TOP 1 `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region`, `c1`.`c` FROM ( SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, ( - SELECT TOP 1 `o0`.`OrderDate` - FROM `Orders` AS `o0` - WHERE `c`.`CustomerID` = `o0`.`CustomerID` - ORDER BY `o0`.`OrderDate` DESC) AS `c` + SELECT TOP 1 `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`OrderDate` DESC) AS `c` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'W%' -) AS `t` -ORDER BY `t`.`c` DESC, `t`.`CustomerID` +) AS `c1` +ORDER BY `c1`.`c` DESC, `c1`.`CustomerID` """, // """ -SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `t`.`CustomerID` +SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c0`.`CustomerID` FROM ( - SELECT TOP 1 `t`.`CustomerID`, `t`.`c` + SELECT TOP 1 `c2`.`CustomerID`, `c2`.`c` FROM ( SELECT `c`.`CustomerID`, ( SELECT TOP 1 `o`.`OrderDate` @@ -376,11 +376,11 @@ SELECT TOP 1 `o`.`OrderDate` ORDER BY `o`.`OrderDate` DESC) AS `c` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'W%' - ) AS `t` - ORDER BY `t`.`c` DESC -) AS `t` -INNER JOIN `Orders` AS `o0` ON `t`.`CustomerID` = `o0`.`CustomerID` -ORDER BY `t`.`c` DESC, `t`.`CustomerID` + ) AS `c2` + ORDER BY `c2`.`c` DESC +) AS `c0` +INNER JOIN `Orders` AS `o0` ON `c0`.`CustomerID` = `o0`.`CustomerID` +ORDER BY `c0`.`c` DESC, `c0`.`CustomerID` """); } @@ -431,21 +431,21 @@ public override async Task Include_collection_order_by_non_key_with_take(bool as await base.Include_collection_order_by_non_key_with_take(async); AssertSql( -""" + """ SELECT TOP 10 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`ContactTitle`, `c`.`CustomerID` """, -// -""" -SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `t`.`CustomerID` + // + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c0`.`CustomerID` FROM ( SELECT TOP 10 `c`.`CustomerID`, `c`.`ContactTitle` FROM `Customers` AS `c` ORDER BY `c`.`ContactTitle` -) AS `t` -INNER JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`ContactTitle`, `t`.`CustomerID` +) AS `c0` +INNER JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`ContactTitle`, `c0`.`CustomerID` """); } @@ -485,21 +485,21 @@ public override async Task Include_collection_order_by_non_key_with_first_or_def await base.Include_collection_order_by_non_key_with_first_or_default(async); AssertSql( -""" + """ SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`CompanyName` DESC, `c`.`CustomerID` """, -// -""" -SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `t`.`CustomerID` + // + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c0`.`CustomerID` FROM ( SELECT TOP 1 `c`.`CustomerID`, `c`.`CompanyName` FROM `Customers` AS `c` ORDER BY `c`.`CompanyName` DESC -) AS `t` -INNER JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CompanyName` DESC, `t`.`CustomerID` +) AS `c0` +INNER JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CompanyName` DESC, `c0`.`CustomerID` """); } @@ -545,28 +545,28 @@ public override async Task Include_collection_principal_already_tracked(bool asy await base.Include_collection_principal_already_tracked(async); AssertSql( -""" + """ SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` WHERE `c`.`CustomerID` = 'ALFKI' """, -// -""" + // + """ SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` WHERE `c`.`CustomerID` = 'ALFKI' ORDER BY `c`.`CustomerID` """, -// -""" -SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `t`.`CustomerID` + // + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c0`.`CustomerID` FROM ( SELECT TOP 1 `c`.`CustomerID` FROM `Customers` AS `c` WHERE `c`.`CustomerID` = 'ALFKI' -) AS `t` -INNER JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CustomerID` +) AS `c0` +INNER JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` """); } @@ -663,15 +663,15 @@ ORDER BY `c`.`CustomerID` """, // """ -SELECT `t`.`OrderID`, `t`.`ProductID`, `t`.`Discount`, `t`.`Quantity`, `t`.`UnitPrice`, `t`.`ProductID0`, `t`.`Discontinued`, `t`.`ProductName`, `t`.`SupplierID`, `t`.`UnitPrice0`, `t`.`UnitsInStock`, `c`.`CustomerID`, `o`.`OrderID` +SELECT `s`.`OrderID`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice`, `s`.`ProductID0`, `s`.`Discontinued`, `s`.`ProductName`, `s`.`SupplierID`, `s`.`UnitPrice0`, `s`.`UnitsInStock`, `c`.`CustomerID`, `o`.`OrderID` FROM (`Customers` AS `c` INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`) LEFT JOIN ( SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `p`.`ProductID` AS `ProductID0`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice` AS `UnitPrice0`, `p`.`UnitsInStock` FROM `Order Details` AS `o0` INNER JOIN `Products` AS `p` ON `o0`.`ProductID` = `p`.`ProductID` -) AS `t` ON `o`.`OrderID` = `t`.`OrderID` -WHERE (`c`.`CustomerID` LIKE 'F%') AND (`o`.`OrderID` IS NOT NULL AND `t`.`OrderID` IS NOT NULL) +) AS `s` ON `o`.`OrderID` = `s`.`OrderID` +WHERE (`c`.`CustomerID` LIKE 'F%') AND (`o`.`OrderID` IS NOT NULL AND `s`.`OrderID` IS NOT NULL) ORDER BY `c`.`CustomerID`, `o`.`OrderID` """); } @@ -967,71 +967,71 @@ public override async Task Include_duplicate_collection_result_operator(bool asy await base.Include_duplicate_collection_result_operator(async); AssertSql( -""" -SELECT TOP 1 `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `t0`.`CustomerID`, `t0`.`Address`, `t0`.`City`, `t0`.`CompanyName`, `t0`.`ContactName`, `t0`.`ContactTitle`, `t0`.`Country`, `t0`.`Fax`, `t0`.`Phone`, `t0`.`PostalCode`, `t0`.`Region` + """ +SELECT TOP 1 `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region`, `c2`.`CustomerID`, `c2`.`Address`, `c2`.`City`, `c2`.`CompanyName`, `c2`.`ContactName`, `c2`.`ContactTitle`, `c2`.`Country`, `c2`.`Fax`, `c2`.`Phone`, `c2`.`PostalCode`, `c2`.`Region` FROM ( SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`CustomerID` -) AS `t`, +) AS `c1`, ( - SELECT TOP 2 `t0`.`CustomerID`, `t0`.`Address`, `t0`.`City`, `t0`.`CompanyName`, `t0`.`ContactName`, `t0`.`ContactTitle`, `t0`.`Country`, `t0`.`Fax`, `t0`.`Phone`, `t0`.`PostalCode`, `t0`.`Region` + SELECT TOP 2 `c3`.`CustomerID`, `c3`.`Address`, `c3`.`City`, `c3`.`CompanyName`, `c3`.`ContactName`, `c3`.`ContactTitle`, `c3`.`Country`, `c3`.`Fax`, `c3`.`Phone`, `c3`.`PostalCode`, `c3`.`Region` FROM ( SELECT TOP 4 `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` FROM `Customers` AS `c0` ORDER BY `c0`.`CustomerID` - ) AS `t0` - ORDER BY `t0`.`CustomerID` DESC -) AS `t0` -ORDER BY `t`.`CustomerID`, `t0`.`CustomerID` + ) AS `c3` + ORDER BY `c3`.`CustomerID` DESC +) AS `c2` +ORDER BY `c1`.`CustomerID`, `c2`.`CustomerID` """, // -""" -SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `t1`.`CustomerID`, `t1`.`CustomerID0` + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `s`.`CustomerID`, `s`.`CustomerID0` FROM ( - SELECT TOP 1 `t`.`CustomerID`, `t0`.`CustomerID` AS `CustomerID0` + SELECT TOP 1 `c1`.`CustomerID`, `c2`.`CustomerID` AS `CustomerID0` FROM ( SELECT TOP 2 `c`.`CustomerID` FROM `Customers` AS `c` ORDER BY `c`.`CustomerID` - ) AS `t`, + ) AS `c1`, ( - SELECT TOP 2 `t0`.`CustomerID`, `t0`.`Address`, `t0`.`City`, `t0`.`CompanyName`, `t0`.`ContactName`, `t0`.`ContactTitle`, `t0`.`Country`, `t0`.`Fax`, `t0`.`Phone`, `t0`.`PostalCode`, `t0`.`Region` + SELECT TOP 2 `c3`.`CustomerID` FROM ( - SELECT TOP 4 `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + SELECT TOP 4 `c0`.`CustomerID` FROM `Customers` AS `c0` ORDER BY `c0`.`CustomerID` - ) AS `t0` - ORDER BY `t0`.`CustomerID` DESC - ) AS `t0` - ORDER BY `t`.`CustomerID` -) AS `t1` -INNER JOIN `Orders` AS `o` ON `t1`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t1`.`CustomerID`, `t1`.`CustomerID0` + ) AS `c3` + ORDER BY `c3`.`CustomerID` DESC + ) AS `c2` + ORDER BY `c1`.`CustomerID` +) AS `s` +INNER JOIN `Orders` AS `o` ON `s`.`CustomerID` = `o`.`CustomerID` +ORDER BY `s`.`CustomerID`, `s`.`CustomerID0` """, // -""" -SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `t1`.`CustomerID`, `t1`.`CustomerID0` + """ +SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `s0`.`CustomerID`, `s0`.`CustomerID0` FROM ( - SELECT TOP 1 `t`.`CustomerID`, `t0`.`CustomerID` AS `CustomerID0` + SELECT TOP 1 `c1`.`CustomerID`, `c2`.`CustomerID` AS `CustomerID0` FROM ( SELECT TOP 2 `c`.`CustomerID` FROM `Customers` AS `c` ORDER BY `c`.`CustomerID` - ) AS `t`, + ) AS `c1`, ( - SELECT TOP 2 `t0`.`CustomerID`, `t0`.`Address`, `t0`.`City`, `t0`.`CompanyName`, `t0`.`ContactName`, `t0`.`ContactTitle`, `t0`.`Country`, `t0`.`Fax`, `t0`.`Phone`, `t0`.`PostalCode`, `t0`.`Region` + SELECT TOP 2 `c3`.`CustomerID` FROM ( - SELECT TOP 4 `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + SELECT TOP 4 `c0`.`CustomerID` FROM `Customers` AS `c0` ORDER BY `c0`.`CustomerID` - ) AS `t0` - ORDER BY `t0`.`CustomerID` DESC - ) AS `t0` - ORDER BY `t`.`CustomerID` -) AS `t1` -INNER JOIN `Orders` AS `o` ON `t1`.`CustomerID0` = `o`.`CustomerID` -ORDER BY `t1`.`CustomerID`, `t1`.`CustomerID0` + ) AS `c3` + ORDER BY `c3`.`CustomerID` DESC + ) AS `c2` + ORDER BY `c1`.`CustomerID` +) AS `s0` +INNER JOIN `Orders` AS `o0` ON `s0`.`CustomerID0` = `o0`.`CustomerID` +ORDER BY `s0`.`CustomerID`, `s0`.`CustomerID0` """); } @@ -1096,15 +1096,15 @@ public override async Task Include_collection_on_additional_from_clause2(bool as await base.Include_collection_on_additional_from_clause2(async); AssertSql( -""" -SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region` + """ +SELECT `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region` FROM ( SELECT TOP 5 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`CustomerID` -) AS `t`, +) AS `c1`, `Customers` AS `c0` -ORDER BY `t`.`CustomerID` +ORDER BY `c1`.`CustomerID` """); } @@ -1113,20 +1113,20 @@ public override async Task Include_where_skip_take_projection(bool async) await base.Include_where_skip_take_projection(async); AssertSql( -""" + """ SELECT `o0`.`CustomerID` FROM ( - SELECT TOP 2 `t0`.`OrderID`, `t0`.`ProductID` + SELECT TOP 2 `o2`.`OrderID`, `o2`.`ProductID` FROM ( SELECT TOP 3 `o`.`OrderID`, `o`.`ProductID` FROM `Order Details` AS `o` WHERE `o`.`Quantity` = 10 ORDER BY `o`.`OrderID`, `o`.`ProductID` - ) AS `t0` - ORDER BY `t0`.`OrderID` DESC, `t0`.`ProductID` DESC -) AS `t` -INNER JOIN `Orders` AS `o0` ON `t`.`OrderID` = `o0`.`OrderID` -ORDER BY `t`.`OrderID`, `t`.`ProductID` + ) AS `o2` + ORDER BY `o2`.`OrderID` DESC, `o2`.`ProductID` DESC +) AS `o1` +INNER JOIN `Orders` AS `o0` ON `o1`.`OrderID` = `o0`.`OrderID` +ORDER BY `o1`.`OrderID`, `o1`.`ProductID` """); } @@ -1135,47 +1135,47 @@ public override async Task Include_duplicate_collection_result_operator2(bool as await base.Include_duplicate_collection_result_operator2(async); AssertSql( -""" -SELECT TOP 1 `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `t0`.`CustomerID`, `t0`.`Address`, `t0`.`City`, `t0`.`CompanyName`, `t0`.`ContactName`, `t0`.`ContactTitle`, `t0`.`Country`, `t0`.`Fax`, `t0`.`Phone`, `t0`.`PostalCode`, `t0`.`Region` + """ +SELECT TOP 1 `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region`, `c2`.`CustomerID`, `c2`.`Address`, `c2`.`City`, `c2`.`CompanyName`, `c2`.`ContactName`, `c2`.`ContactTitle`, `c2`.`Country`, `c2`.`Fax`, `c2`.`Phone`, `c2`.`PostalCode`, `c2`.`Region` FROM ( SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`CustomerID` -) AS `t`, +) AS `c1`, ( - SELECT TOP 2 `t0`.`CustomerID`, `t0`.`Address`, `t0`.`City`, `t0`.`CompanyName`, `t0`.`ContactName`, `t0`.`ContactTitle`, `t0`.`Country`, `t0`.`Fax`, `t0`.`Phone`, `t0`.`PostalCode`, `t0`.`Region` + SELECT TOP 2 `c3`.`CustomerID`, `c3`.`Address`, `c3`.`City`, `c3`.`CompanyName`, `c3`.`ContactName`, `c3`.`ContactTitle`, `c3`.`Country`, `c3`.`Fax`, `c3`.`Phone`, `c3`.`PostalCode`, `c3`.`Region` FROM ( SELECT TOP 4 `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` FROM `Customers` AS `c0` ORDER BY `c0`.`CustomerID` - ) AS `t0` - ORDER BY `t0`.`CustomerID` DESC -) AS `t0` -ORDER BY `t`.`CustomerID`, `t0`.`CustomerID` + ) AS `c3` + ORDER BY `c3`.`CustomerID` DESC +) AS `c2` +ORDER BY `c1`.`CustomerID`, `c2`.`CustomerID` """, // -""" -SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `t1`.`CustomerID`, `t1`.`CustomerID0` + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `s`.`CustomerID`, `s`.`CustomerID0` FROM ( - SELECT TOP 1 `t`.`CustomerID`, `t0`.`CustomerID` AS `CustomerID0` + SELECT TOP 1 `c1`.`CustomerID`, `c2`.`CustomerID` AS `CustomerID0` FROM ( SELECT TOP 2 `c`.`CustomerID` FROM `Customers` AS `c` ORDER BY `c`.`CustomerID` - ) AS `t`, + ) AS `c1`, ( - SELECT TOP 2 `t0`.`CustomerID`, `t0`.`Address`, `t0`.`City`, `t0`.`CompanyName`, `t0`.`ContactName`, `t0`.`ContactTitle`, `t0`.`Country`, `t0`.`Fax`, `t0`.`Phone`, `t0`.`PostalCode`, `t0`.`Region` + SELECT TOP 2 `c3`.`CustomerID` FROM ( - SELECT TOP 4 `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + SELECT TOP 4 `c0`.`CustomerID` FROM `Customers` AS `c0` ORDER BY `c0`.`CustomerID` - ) AS `t0` - ORDER BY `t0`.`CustomerID` DESC - ) AS `t0` - ORDER BY `t`.`CustomerID` -) AS `t1` -INNER JOIN `Orders` AS `o` ON `t1`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t1`.`CustomerID`, `t1`.`CustomerID0` + ) AS `c3` + ORDER BY `c3`.`CustomerID` DESC + ) AS `c2` + ORDER BY `c1`.`CustomerID` +) AS `s` +INNER JOIN `Orders` AS `o` ON `s`.`CustomerID` = `o`.`CustomerID` +ORDER BY `s`.`CustomerID`, `s`.`CustomerID0` """); } @@ -1211,32 +1211,32 @@ public override async Task Include_duplicate_reference(bool async) await base.Include_duplicate_reference(async); AssertSql( -""" -SELECT `t1`.`OrderID`, `t1`.`CustomerID`, `t1`.`EmployeeID`, `t1`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `t1`.`OrderID0`, `t1`.`CustomerID0`, `t1`.`EmployeeID0`, `t1`.`OrderDate0`, `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + """ +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `s`.`OrderID0`, `s`.`CustomerID0`, `s`.`EmployeeID0`, `s`.`OrderDate0`, `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` FROM (( - SELECT `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate`, `t0`.`OrderID` AS `OrderID0`, `t0`.`CustomerID` AS `CustomerID0`, `t0`.`EmployeeID` AS `EmployeeID0`, `t0`.`OrderDate` AS `OrderDate0` + SELECT `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `o2`.`OrderID` AS `OrderID0`, `o2`.`CustomerID` AS `CustomerID0`, `o2`.`EmployeeID` AS `EmployeeID0`, `o2`.`OrderDate` AS `OrderDate0` FROM ( SELECT TOP 2 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` ORDER BY `o`.`CustomerID`, `o`.`OrderID` - ) AS `t`, + ) AS `o1`, ( - SELECT `t1`.`OrderID`, `t1`.`CustomerID`, `t1`.`EmployeeID`, `t1`.`OrderDate` + SELECT `o4`.`OrderID`, `o4`.`CustomerID`, `o4`.`EmployeeID`, `o4`.`OrderDate` FROM ( - SELECT TOP 2 `t0`.`OrderID`, `t0`.`CustomerID`, `t0`.`EmployeeID`, `t0`.`OrderDate` + SELECT TOP 2 `o3`.`OrderID`, `o3`.`CustomerID`, `o3`.`EmployeeID`, `o3`.`OrderDate` FROM ( SELECT TOP 4 `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` FROM `Orders` AS `o0` ORDER BY `o0`.`CustomerID`, `o0`.`OrderID` - ) AS `t0` - ORDER BY `t0`.`CustomerID` DESC, `t0`.`OrderID` DESC - ) AS `t1` - ORDER BY `t1`.`CustomerID`, `t1`.`OrderID` - ) AS `t0` -) AS `t1` -LEFT JOIN `Customers` AS `c` ON `t1`.`CustomerID` = `c`.`CustomerID`) -LEFT JOIN `Customers` AS `c0` ON `t1`.`CustomerID0` = `c0`.`CustomerID` -ORDER BY `t1`.`CustomerID`, `t1`.`OrderID` + ) AS `o3` + ORDER BY `o3`.`CustomerID` DESC, `o3`.`OrderID` DESC + ) AS `o4` + ORDER BY `o4`.`CustomerID`, `o4`.`OrderID` + ) AS `o2` +) AS `s` +LEFT JOIN `Customers` AS `c` ON `s`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Customers` AS `c0` ON `s`.`CustomerID0` = `c0`.`CustomerID` +ORDER BY `s`.`CustomerID`, `s`.`OrderID` """); } @@ -1245,31 +1245,31 @@ public override async Task Include_duplicate_reference2(bool async) await base.Include_duplicate_reference2(async); AssertSql( -""" -SELECT `t1`.`OrderID`, `t1`.`CustomerID`, `t1`.`EmployeeID`, `t1`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `t1`.`OrderID0`, `t1`.`CustomerID0`, `t1`.`EmployeeID0`, `t1`.`OrderDate0` + """ +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `s`.`OrderID0`, `s`.`CustomerID0`, `s`.`EmployeeID0`, `s`.`OrderDate0` FROM ( - SELECT `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate`, `t0`.`OrderID` AS `OrderID0`, `t0`.`CustomerID` AS `CustomerID0`, `t0`.`EmployeeID` AS `EmployeeID0`, `t0`.`OrderDate` AS `OrderDate0` + SELECT `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `o2`.`OrderID` AS `OrderID0`, `o2`.`CustomerID` AS `CustomerID0`, `o2`.`EmployeeID` AS `EmployeeID0`, `o2`.`OrderDate` AS `OrderDate0` FROM ( SELECT TOP 2 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` ORDER BY `o`.`OrderID` - ) AS `t`, + ) AS `o1`, ( - SELECT `t1`.`OrderID`, `t1`.`CustomerID`, `t1`.`EmployeeID`, `t1`.`OrderDate` + SELECT `o4`.`OrderID`, `o4`.`CustomerID`, `o4`.`EmployeeID`, `o4`.`OrderDate` FROM ( - SELECT TOP 2 `t0`.`OrderID`, `t0`.`CustomerID`, `t0`.`EmployeeID`, `t0`.`OrderDate` + SELECT TOP 2 `o3`.`OrderID`, `o3`.`CustomerID`, `o3`.`EmployeeID`, `o3`.`OrderDate` FROM ( SELECT TOP 4 `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` FROM `Orders` AS `o0` ORDER BY `o0`.`OrderID` - ) AS `t0` - ORDER BY `t0`.`OrderID` DESC - ) AS `t1` - ORDER BY `t1`.`OrderID` - ) AS `t0` -) AS `t1` -LEFT JOIN `Customers` AS `c` ON `t1`.`CustomerID` = `c`.`CustomerID` -ORDER BY `t1`.`OrderID` + ) AS `o3` + ORDER BY `o3`.`OrderID` DESC + ) AS `o4` + ORDER BY `o4`.`OrderID` + ) AS `o2` +) AS `s` +LEFT JOIN `Customers` AS `c` ON `s`.`CustomerID` = `c`.`CustomerID` +ORDER BY `s`.`OrderID` """); } @@ -1278,31 +1278,31 @@ public override async Task Include_duplicate_reference3(bool async) await base.Include_duplicate_reference3(async); AssertSql( -""" -SELECT `t1`.`OrderID`, `t1`.`CustomerID`, `t1`.`EmployeeID`, `t1`.`OrderDate`, `t1`.`OrderID0`, `t1`.`CustomerID0`, `t1`.`EmployeeID0`, `t1`.`OrderDate0`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + """ +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`CustomerID0`, `s`.`EmployeeID0`, `s`.`OrderDate0`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM ( - SELECT `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate`, `t0`.`OrderID` AS `OrderID0`, `t0`.`CustomerID` AS `CustomerID0`, `t0`.`EmployeeID` AS `EmployeeID0`, `t0`.`OrderDate` AS `OrderDate0` + SELECT `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `o2`.`OrderID` AS `OrderID0`, `o2`.`CustomerID` AS `CustomerID0`, `o2`.`EmployeeID` AS `EmployeeID0`, `o2`.`OrderDate` AS `OrderDate0` FROM ( SELECT TOP 2 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` ORDER BY `o`.`OrderID` - ) AS `t`, + ) AS `o1`, ( - SELECT `t1`.`OrderID`, `t1`.`CustomerID`, `t1`.`EmployeeID`, `t1`.`OrderDate` + SELECT `o4`.`OrderID`, `o4`.`CustomerID`, `o4`.`EmployeeID`, `o4`.`OrderDate` FROM ( - SELECT TOP 2 `t0`.`OrderID`, `t0`.`CustomerID`, `t0`.`EmployeeID`, `t0`.`OrderDate` + SELECT TOP 2 `o3`.`OrderID`, `o3`.`CustomerID`, `o3`.`EmployeeID`, `o3`.`OrderDate` FROM ( SELECT TOP 4 `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` FROM `Orders` AS `o0` ORDER BY `o0`.`OrderID` - ) AS `t0` - ORDER BY `t0`.`OrderID` DESC - ) AS `t1` - ORDER BY `t1`.`OrderID` - ) AS `t0` -) AS `t1` -LEFT JOIN `Customers` AS `c` ON `t1`.`CustomerID0` = `c`.`CustomerID` -ORDER BY `t1`.`OrderID` + ) AS `o3` + ORDER BY `o3`.`OrderID` DESC + ) AS `o4` + ORDER BY `o4`.`OrderID` + ) AS `o2` +) AS `s` +LEFT JOIN `Customers` AS `c` ON `s`.`CustomerID0` = `c`.`CustomerID` +ORDER BY `s`.`OrderID` """); } @@ -1348,28 +1348,28 @@ public override async Task Include_collection_dependent_already_tracked(bool asy await base.Include_collection_dependent_already_tracked(async); AssertSql( -""" + """ SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` WHERE `o`.`CustomerID` = 'ALFKI' """, -// -""" + // + """ SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` WHERE `c`.`CustomerID` = 'ALFKI' ORDER BY `c`.`CustomerID` """, -// -""" -SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `t`.`CustomerID` + // + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c0`.`CustomerID` FROM ( SELECT TOP 1 `c`.`CustomerID` FROM `Customers` AS `c` WHERE `c`.`CustomerID` = 'ALFKI' -) AS `t` -INNER JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CustomerID` +) AS `c0` +INNER JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` """); } @@ -1428,21 +1428,21 @@ public override async Task Include_with_take(bool async) await base.Include_with_take(async); AssertSql( -""" + """ SELECT TOP 10 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`ContactName` DESC, `c`.`CustomerID` """, -// -""" -SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `t`.`CustomerID` + // + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c0`.`CustomerID` FROM ( SELECT TOP 10 `c`.`CustomerID`, `c`.`ContactName` FROM `Customers` AS `c` ORDER BY `c`.`ContactName` DESC -) AS `t` -INNER JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`ContactName` DESC, `t`.`CustomerID` +) AS `c0` +INNER JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`ContactName` DESC, `c0`.`CustomerID` """); } @@ -1488,18 +1488,18 @@ ORDER BY NOT (IIF(`o`.`OrderID` > 0, TRUE, FALSE)), IIF(`c`.`CustomerID` IS NOT """, // """ -SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `t`.`OrderID`, `t`.`CustomerID` +SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `s`.`OrderID`, `s`.`CustomerID` FROM ( - SELECT TOP 5 `t`.`OrderID`, `t`.`CustomerID`, `t`.`c`, `t`.`c0` + SELECT TOP 5 `s0`.`OrderID`, `s0`.`CustomerID`, `s0`.`c`, `s0`.`c0` FROM ( SELECT `o`.`OrderID`, `c`.`CustomerID`, IIF(`o`.`OrderID` > 0, TRUE, FALSE) AS `c`, IIF(`c`.`CustomerID` IS NOT NULL, `c`.`City`, '') AS `c0` FROM `Orders` AS `o` LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` - ) AS `t` - ORDER BY NOT (`t`.`c`), `t`.`c0` -) AS `t` -INNER JOIN `Order Details` AS `o0` ON `t`.`OrderID` = `o0`.`OrderID` -ORDER BY NOT (`t`.`c`), `t`.`c0`, `t`.`OrderID`, `t`.`CustomerID` + ) AS `s0` + ORDER BY NOT (`s0`.`c`), `s0`.`c0` +) AS `s` +INNER JOIN `Order Details` AS `o0` ON `s`.`OrderID` = `o0`.`OrderID` +ORDER BY NOT (`s`.`c`), `s`.`c0`, `s`.`OrderID`, `s`.`CustomerID` """); } @@ -1508,24 +1508,24 @@ public override async Task Then_include_collection_order_by_collection_column(bo await base.Then_include_collection_order_by_collection_column(async); AssertSql( -""" -SELECT TOP 1 `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `t`.`c` + """ +SELECT TOP 1 `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region`, `c1`.`c` FROM ( SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, ( - SELECT TOP 1 `o0`.`OrderDate` - FROM `Orders` AS `o0` - WHERE `c`.`CustomerID` = `o0`.`CustomerID` - ORDER BY `o0`.`OrderDate` DESC) AS `c` + SELECT TOP 1 `o`.`OrderDate` + FROM `Orders` AS `o` + WHERE `c`.`CustomerID` = `o`.`CustomerID` + ORDER BY `o`.`OrderDate` DESC) AS `c` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'W%' -) AS `t` -ORDER BY `t`.`c` DESC, `t`.`CustomerID` +) AS `c1` +ORDER BY `c1`.`c` DESC, `c1`.`CustomerID` """, - // - """ -SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `t`.`CustomerID` + // + """ +SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c0`.`CustomerID` FROM ( - SELECT TOP 1 `t`.`CustomerID`, `t`.`c` + SELECT TOP 1 `c2`.`CustomerID`, `c2`.`c` FROM ( SELECT `c`.`CustomerID`, ( SELECT TOP 1 `o`.`OrderDate` @@ -1534,36 +1534,32 @@ SELECT TOP 1 `o`.`OrderDate` ORDER BY `o`.`OrderDate` DESC) AS `c` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'W%' - ) AS `t` - ORDER BY `t`.`c` DESC -) AS `t` -INNER JOIN `Orders` AS `o0` ON `t`.`CustomerID` = `o0`.`CustomerID` -ORDER BY `t`.`c` DESC, `t`.`CustomerID`, `o0`.`OrderID` + ) AS `c2` + ORDER BY `c2`.`c` DESC +) AS `c0` +INNER JOIN `Orders` AS `o0` ON `c0`.`CustomerID` = `o0`.`CustomerID` +ORDER BY `c0`.`c` DESC, `c0`.`CustomerID`, `o0`.`OrderID` """, - // - """ -SELECT `o1`.`OrderID`, `o1`.`ProductID`, `o1`.`Discount`, `o1`.`Quantity`, `o1`.`UnitPrice`, `t`.`CustomerID`, `o0`.`OrderID` + // + """ +SELECT `o1`.`OrderID`, `o1`.`ProductID`, `o1`.`Discount`, `o1`.`Quantity`, `o1`.`UnitPrice`, `c0`.`CustomerID`, `o0`.`OrderID` FROM (( - SELECT TOP 1 `t`.`CustomerID`, `t`.`c`, `t`.`c0` + SELECT TOP 1 `c3`.`CustomerID`, `c3`.`c` FROM ( SELECT `c`.`CustomerID`, ( SELECT TOP 1 `o`.`OrderDate` FROM `Orders` AS `o` WHERE `c`.`CustomerID` = `o`.`CustomerID` - ORDER BY `o`.`OrderDate` DESC) AS `c`, ( - SELECT TOP 1 `o1`.`OrderDate` - FROM `Orders` AS `o1` - WHERE `c`.`CustomerID` = `o1`.`CustomerID` - ORDER BY `o1`.`OrderDate` DESC) AS `c0` + ORDER BY `o`.`OrderDate` DESC) AS `c` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'W%' - ) AS `t` - ORDER BY `t`.`c0` DESC -) AS `t` -INNER JOIN `Orders` AS `o0` ON `t`.`CustomerID` = `o0`.`CustomerID`) + ) AS `c3` + ORDER BY `c3`.`c` DESC +) AS `c0` +INNER JOIN `Orders` AS `o0` ON `c0`.`CustomerID` = `o0`.`CustomerID`) LEFT JOIN `Order Details` AS `o1` ON `o0`.`OrderID` = `o1`.`OrderID` WHERE `o0`.`OrderID` IS NOT NULL AND `o1`.`OrderID` IS NOT NULL -ORDER BY `t`.`c` DESC, `t`.`CustomerID`, `o0`.`OrderID` +ORDER BY `c0`.`c` DESC, `c0`.`CustomerID`, `o0`.`OrderID` """); } @@ -1968,14 +1964,14 @@ public override async Task Include_reference_distinct_is_server_evaluated(bool a await base.Include_reference_distinct_is_server_evaluated(async); AssertSql( -""" -SELECT `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + """ +SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM ( SELECT DISTINCT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` WHERE `o`.`OrderID` < 10250 -) AS `t` -LEFT JOIN `Customers` AS `c` ON `t`.`CustomerID` = `c`.`CustomerID` +) AS `o0` +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` """); } @@ -1984,25 +1980,25 @@ public override async Task Include_collection_distinct_is_server_evaluated(bool await base.Include_collection_distinct_is_server_evaluated(async); AssertSql( -""" -SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region` + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` FROM ( SELECT DISTINCT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'A%' -) AS `t` -ORDER BY `t`.`CustomerID` +) AS `c0` +ORDER BY `c0`.`CustomerID` """, -// -""" -SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `t`.`CustomerID` + // + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c0`.`CustomerID` FROM ( SELECT DISTINCT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'A%' -) AS `t` -INNER JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CustomerID` +) AS `c0` +INNER JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` """); } @@ -2188,53 +2184,53 @@ public override async Task Multi_level_includes_are_applied_with_skip(bool async await base.Multi_level_includes_are_applied_with_skip(async); AssertSql( -""" -SELECT `t0`.`CustomerID` + """ +SELECT `c1`.`CustomerID` FROM ( - SELECT TOP 1 `t`.`CustomerID` + SELECT TOP 1 `c0`.`CustomerID` FROM ( SELECT TOP 2 `c`.`CustomerID` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'A%' ORDER BY `c`.`CustomerID` - ) AS `t` - ORDER BY `t`.`CustomerID` DESC -) AS `t0` -ORDER BY `t0`.`CustomerID` + ) AS `c0` + ORDER BY `c0`.`CustomerID` DESC +) AS `c1` +ORDER BY `c1`.`CustomerID` """, // -""" -SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `t0`.`CustomerID` + """ +SELECT `o3`.`OrderID`, `o3`.`CustomerID`, `o3`.`EmployeeID`, `o3`.`OrderDate`, `c1`.`CustomerID` FROM ( - SELECT TOP 1 `t`.`CustomerID` + SELECT TOP 1 `c0`.`CustomerID` FROM ( SELECT TOP 2 `c`.`CustomerID` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'A%' ORDER BY `c`.`CustomerID` - ) AS `t` - ORDER BY `t`.`CustomerID` DESC -) AS `t0` -INNER JOIN `Orders` AS `o` ON `t0`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t0`.`CustomerID`, `o`.`OrderID` + ) AS `c0` + ORDER BY `c0`.`CustomerID` DESC +) AS `c1` +INNER JOIN `Orders` AS `o3` ON `c1`.`CustomerID` = `o3`.`CustomerID` +ORDER BY `c1`.`CustomerID`, `o3`.`OrderID` """, // -""" -SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `t0`.`CustomerID`, `o`.`OrderID` + """ +SELECT `o4`.`OrderID`, `o4`.`ProductID`, `o4`.`Discount`, `o4`.`Quantity`, `o4`.`UnitPrice`, `c1`.`CustomerID`, `o3`.`OrderID` FROM (( - SELECT TOP 1 `t`.`CustomerID` + SELECT TOP 1 `c0`.`CustomerID` FROM ( SELECT TOP 2 `c`.`CustomerID` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'A%' ORDER BY `c`.`CustomerID` - ) AS `t` - ORDER BY `t`.`CustomerID` DESC -) AS `t0` -INNER JOIN `Orders` AS `o` ON `t0`.`CustomerID` = `o`.`CustomerID`) -LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` -WHERE `o`.`OrderID` IS NOT NULL AND `o0`.`OrderID` IS NOT NULL -ORDER BY `t0`.`CustomerID`, `o`.`OrderID` + ) AS `c0` + ORDER BY `c0`.`CustomerID` DESC +) AS `c1` +INNER JOIN `Orders` AS `o3` ON `c1`.`CustomerID` = `o3`.`CustomerID`) +LEFT JOIN `Order Details` AS `o4` ON `o3`.`OrderID` = `o4`.`OrderID` +WHERE `o3`.`OrderID` IS NOT NULL AND `o4`.`OrderID` IS NOT NULL +ORDER BY `c1`.`CustomerID`, `o3`.`OrderID` """); } @@ -2244,48 +2240,48 @@ public override async Task Multi_level_includes_are_applied_with_take(bool async AssertSql( """ -SELECT TOP 1 `t`.`CustomerID` +SELECT TOP 1 `c0`.`CustomerID` FROM ( SELECT TOP 1 `c`.`CustomerID` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'A%' ORDER BY `c`.`CustomerID` -) AS `t` -ORDER BY `t`.`CustomerID` +) AS `c0` +ORDER BY `c0`.`CustomerID` """, // """ -SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `t0`.`CustomerID` +SELECT `o3`.`OrderID`, `o3`.`CustomerID`, `o3`.`EmployeeID`, `o3`.`OrderDate`, `c1`.`CustomerID` FROM ( - SELECT TOP 1 `t`.`CustomerID` + SELECT TOP 1 `c0`.`CustomerID` FROM ( SELECT TOP 1 `c`.`CustomerID` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'A%' ORDER BY `c`.`CustomerID` - ) AS `t` - ORDER BY `t`.`CustomerID` -) AS `t0` -INNER JOIN `Orders` AS `o` ON `t0`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t0`.`CustomerID`, `o`.`OrderID` + ) AS `c0` + ORDER BY `c0`.`CustomerID` +) AS `c1` +INNER JOIN `Orders` AS `o3` ON `c1`.`CustomerID` = `o3`.`CustomerID` +ORDER BY `c1`.`CustomerID`, `o3`.`OrderID` """, // """ -SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `t0`.`CustomerID`, `o`.`OrderID` +SELECT `o4`.`OrderID`, `o4`.`ProductID`, `o4`.`Discount`, `o4`.`Quantity`, `o4`.`UnitPrice`, `c1`.`CustomerID`, `o3`.`OrderID` FROM (( - SELECT TOP 1 `t`.`CustomerID` + SELECT TOP 1 `c0`.`CustomerID` FROM ( SELECT TOP 1 `c`.`CustomerID` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'A%' ORDER BY `c`.`CustomerID` - ) AS `t` - ORDER BY `t`.`CustomerID` -) AS `t0` -INNER JOIN `Orders` AS `o` ON `t0`.`CustomerID` = `o`.`CustomerID`) -LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` -WHERE `o`.`OrderID` IS NOT NULL AND `o0`.`OrderID` IS NOT NULL -ORDER BY `t0`.`CustomerID`, `o`.`OrderID` + ) AS `c0` + ORDER BY `c0`.`CustomerID` +) AS `c1` +INNER JOIN `Orders` AS `o3` ON `c1`.`CustomerID` = `o3`.`CustomerID`) +LEFT JOIN `Order Details` AS `o4` ON `o3`.`OrderID` = `o4`.`OrderID` +WHERE `o3`.`OrderID` IS NOT NULL AND `o4`.`OrderID` IS NOT NULL +ORDER BY `c1`.`CustomerID`, `o3`.`OrderID` """); } @@ -2294,61 +2290,61 @@ public override async Task Multi_level_includes_are_applied_with_skip_take(bool await base.Multi_level_includes_are_applied_with_skip_take(async); AssertSql( -""" -SELECT TOP 1 `t`.`CustomerID` + """ +SELECT TOP 1 `c0`.`CustomerID` FROM ( - SELECT TOP 1 `t0`.`CustomerID` + SELECT TOP 1 `c1`.`CustomerID` FROM ( SELECT TOP 2 `c`.`CustomerID` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'A%' ORDER BY `c`.`CustomerID` - ) AS `t0` - ORDER BY `t0`.`CustomerID` DESC -) AS `t` -ORDER BY `t`.`CustomerID` + ) AS `c1` + ORDER BY `c1`.`CustomerID` DESC +) AS `c0` +ORDER BY `c0`.`CustomerID` """, // -""" -SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `t1`.`CustomerID` + """ +SELECT `o3`.`OrderID`, `o3`.`CustomerID`, `o3`.`EmployeeID`, `o3`.`OrderDate`, `c2`.`CustomerID` FROM ( - SELECT TOP 1 `t`.`CustomerID` + SELECT TOP 1 `c0`.`CustomerID` FROM ( - SELECT TOP 1 `t0`.`CustomerID` + SELECT TOP 1 `c1`.`CustomerID` FROM ( SELECT TOP 2 `c`.`CustomerID` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'A%' ORDER BY `c`.`CustomerID` - ) AS `t0` - ORDER BY `t0`.`CustomerID` DESC - ) AS `t` - ORDER BY `t`.`CustomerID` -) AS `t1` -INNER JOIN `Orders` AS `o` ON `t1`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t1`.`CustomerID`, `o`.`OrderID` + ) AS `c1` + ORDER BY `c1`.`CustomerID` DESC + ) AS `c0` + ORDER BY `c0`.`CustomerID` +) AS `c2` +INNER JOIN `Orders` AS `o3` ON `c2`.`CustomerID` = `o3`.`CustomerID` +ORDER BY `c2`.`CustomerID`, `o3`.`OrderID` """, // -""" -SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `t1`.`CustomerID`, `o`.`OrderID` + """ +SELECT `o4`.`OrderID`, `o4`.`ProductID`, `o4`.`Discount`, `o4`.`Quantity`, `o4`.`UnitPrice`, `c2`.`CustomerID`, `o3`.`OrderID` FROM (( - SELECT TOP 1 `t`.`CustomerID` + SELECT TOP 1 `c0`.`CustomerID` FROM ( - SELECT TOP 1 `t0`.`CustomerID` + SELECT TOP 1 `c1`.`CustomerID` FROM ( SELECT TOP 2 `c`.`CustomerID` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'A%' ORDER BY `c`.`CustomerID` - ) AS `t0` - ORDER BY `t0`.`CustomerID` DESC - ) AS `t` - ORDER BY `t`.`CustomerID` -) AS `t1` -INNER JOIN `Orders` AS `o` ON `t1`.`CustomerID` = `o`.`CustomerID`) -LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` -WHERE `o`.`OrderID` IS NOT NULL AND `o0`.`OrderID` IS NOT NULL -ORDER BY `t1`.`CustomerID`, `o`.`OrderID` + ) AS `c1` + ORDER BY `c1`.`CustomerID` DESC + ) AS `c0` + ORDER BY `c0`.`CustomerID` +) AS `c2` +INNER JOIN `Orders` AS `o3` ON `c2`.`CustomerID` = `o3`.`CustomerID`) +LEFT JOIN `Order Details` AS `o4` ON `o3`.`OrderID` = `o4`.`OrderID` +WHERE `o3`.`OrderID` IS NOT NULL AND `o4`.`OrderID` IS NOT NULL +ORDER BY `c2`.`CustomerID`, `o3`.`OrderID` """); } @@ -2528,23 +2524,23 @@ public override async Task Include_closes_reader(bool async) await base.Include_closes_reader(async); AssertSql( -""" + """ SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`CustomerID` """, -// -""" -SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `t`.`CustomerID` + // + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c0`.`CustomerID` FROM ( SELECT TOP 1 `c`.`CustomerID` FROM `Customers` AS `c` -) AS `t` -INNER JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CustomerID` +) AS `c0` +INNER JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` """, -// -""" + // + """ SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` FROM `Products` AS `p` """); @@ -2555,21 +2551,21 @@ public override async Task Include_collection_then_reference(bool async) await base.Include_collection_then_reference(async); AssertSql( -""" + """ SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` FROM `Products` AS `p` WHERE (`p`.`ProductID` MOD 17) = 5 ORDER BY `p`.`ProductID` """, -// -""" -SELECT `t`.`OrderID`, `t`.`ProductID`, `t`.`Discount`, `t`.`Quantity`, `t`.`UnitPrice`, `t`.`OrderID0`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate`, `p`.`ProductID` + // + """ +SELECT `s`.`OrderID`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice`, `s`.`OrderID0`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `p`.`ProductID` FROM `Products` AS `p` INNER JOIN ( SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID` AS `OrderID0`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` FROM `Order Details` AS `o` INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` -) AS `t` ON `p`.`ProductID` = `t`.`ProductID` +) AS `s` ON `p`.`ProductID` = `s`.`ProductID` WHERE (`p`.`ProductID` MOD 17) = 5 ORDER BY `p`.`ProductID` """); @@ -2607,21 +2603,21 @@ public override async Task Include_collection_orderby_take(bool async) await base.Include_collection_orderby_take(async); AssertSql( -""" + """ SELECT TOP 5 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`CustomerID` """, -// -""" -SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `t`.`CustomerID` + // + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c0`.`CustomerID` FROM ( SELECT TOP 5 `c`.`CustomerID` FROM `Customers` AS `c` ORDER BY `c`.`CustomerID` -) AS `t` -INNER JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CustomerID` +) AS `c0` +INNER JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` """); } @@ -2814,27 +2810,27 @@ ORDER BY `c`.`CustomerID` """, // """ -SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `t`.`CustomerID` +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c0`.`CustomerID` FROM ( SELECT TOP 1 `c`.`CustomerID` FROM `Customers` AS `c` WHERE `c`.`CustomerID` = 'ALFKI' -) AS `t` -INNER JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CustomerID`, `o`.`OrderID` +) AS `c0` +INNER JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID`, `o`.`OrderID` """, // """ -SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `t`.`CustomerID`, `o`.`OrderID` +SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `c0`.`CustomerID`, `o`.`OrderID` FROM (( SELECT TOP 1 `c`.`CustomerID` FROM `Customers` AS `c` WHERE `c`.`CustomerID` = 'ALFKI' -) AS `t` -INNER JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID`) +) AS `c0` +INNER JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID`) LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` WHERE `o`.`OrderID` IS NOT NULL AND `o0`.`OrderID` IS NOT NULL -ORDER BY `t`.`CustomerID`, `o`.`OrderID` +ORDER BY `c0`.`CustomerID`, `o`.`OrderID` """); } @@ -2966,18 +2962,18 @@ ORDER BY NOT (IIF(`c`.`CustomerID` IS NOT NULL, TRUE, FALSE)), IIF(`c`.`Customer """, // """ -SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `t`.`OrderID`, `t`.`CustomerID` +SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `s`.`OrderID`, `s`.`CustomerID` FROM ( - SELECT TOP 2 `t`.`OrderID`, `t`.`CustomerID`, `t`.`c`, `t`.`c0` + SELECT TOP 2 `s0`.`OrderID`, `s0`.`CustomerID`, `s0`.`c`, `s0`.`c0` FROM ( SELECT `o`.`OrderID`, `c`.`CustomerID`, IIF(`c`.`CustomerID` IS NOT NULL, TRUE, FALSE) AS `c`, IIF(`c`.`CustomerID` IS NOT NULL, `c`.`CustomerID`, '') AS `c0` FROM `Orders` AS `o` LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` - ) AS `t` - ORDER BY NOT (`t`.`c`), `t`.`c0` -) AS `t` -INNER JOIN `Order Details` AS `o0` ON `t`.`OrderID` = `o0`.`OrderID` -ORDER BY NOT (`t`.`c`), `t`.`c0`, `t`.`OrderID`, `t`.`CustomerID` + ) AS `s0` + ORDER BY NOT (`s0`.`c`), `s0`.`c0` +) AS `s` +INNER JOIN `Order Details` AS `o0` ON `s`.`OrderID` = `o0`.`OrderID` +ORDER BY NOT (`s`.`c`), `s`.`c0`, `s`.`OrderID`, `s`.`CustomerID` """); } @@ -2999,24 +2995,24 @@ public override async Task Include_multi_level_reference_then_include_collection await base.Include_multi_level_reference_then_include_collection_predicate(async); AssertSql( -""" + """ SELECT TOP 2 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Orders` AS `o` LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` WHERE `o`.`OrderID` = 10248 ORDER BY `o`.`OrderID`, `c`.`CustomerID` """, -// -""" -SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `t`.`OrderID`, `t`.`CustomerID` + // + """ +SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `s`.`OrderID`, `s`.`CustomerID` FROM ( SELECT TOP 1 `o`.`OrderID`, `c`.`CustomerID` FROM `Orders` AS `o` LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` WHERE `o`.`OrderID` = 10248 -) AS `t` -INNER JOIN `Orders` AS `o0` ON `t`.`CustomerID` = `o0`.`CustomerID` -ORDER BY `t`.`OrderID`, `t`.`CustomerID` +) AS `s` +INNER JOIN `Orders` AS `o0` ON `s`.`CustomerID` = `o0`.`CustomerID` +ORDER BY `s`.`OrderID`, `s`.`CustomerID` """); } diff --git a/test/EFCore.Jet.FunctionalTests/Query/NorthwindSqlQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/NorthwindSqlQueryJetTest.cs index 84568101..83a81be7 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/NorthwindSqlQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/NorthwindSqlQueryJetTest.cs @@ -40,14 +40,14 @@ public override async Task SqlQuery_composed_Contains(bool async) await base.SqlQuery_composed_Contains(async); AssertSql( -""" + """ SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` WHERE `o`.`OrderID` IN ( - SELECT `t`.`Value` + SELECT `s`.`Value` FROM ( SELECT `ProductID` AS `Value` FROM `Products` - ) AS `t` + ) AS `s` ) """); } @@ -57,12 +57,12 @@ public override async Task SqlQuery_composed_Join(bool async) await base.SqlQuery_composed_Join(async); AssertSql( -""" -SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, IIF(`t`.`Value` IS NULL, NULL, CLNG(`t`.`Value`)) AS `p` + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, IIF(`s`.`Value` IS NULL, NULL, CLNG(`s`.`Value`)) AS `p` FROM `Orders` AS `o` INNER JOIN ( SELECT `ProductID` AS `Value` FROM `Products` -) AS `t` ON `o`.`OrderID` = IIF(`t`.`Value` IS NULL, NULL, CLNG(`t`.`Value`)) +) AS `s` ON `o`.`OrderID` = IIF(`s`.`Value` IS NULL, NULL, CLNG(`s`.`Value`)) """); } diff --git a/test/EFCore.Jet.FunctionalTests/Query/NorthwindStringIncludeQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/NorthwindStringIncludeQueryJetTest.cs index 5b3f1724..5af397f3 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/NorthwindStringIncludeQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/NorthwindStringIncludeQueryJetTest.cs @@ -56,15 +56,15 @@ public override async Task Include_collection_order_by_non_key_with_first_or_def await base.Include_collection_order_by_non_key_with_first_or_default(async); AssertSql( -""" -SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM ( SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`CompanyName` DESC -) AS `t` -LEFT JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CompanyName` DESC, `t`.`CustomerID` +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CompanyName` DESC, `c0`.`CustomerID` """); } @@ -117,9 +117,9 @@ public override async Task Include_collection_order_by_collection_column(bool as AssertSql( """ -SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` FROM ( - SELECT TOP 1 `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `t`.`c` + SELECT TOP 1 `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region`, `c1`.`c` FROM ( SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, ( SELECT TOP 1 `o`.`OrderDate` @@ -128,11 +128,11 @@ SELECT TOP 1 `o`.`OrderDate` ORDER BY `o`.`OrderDate` DESC) AS `c` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'W%' - ) AS `t` - ORDER BY `t`.`c` DESC -) AS `t` -LEFT JOIN `Orders` AS `o0` ON `t`.`CustomerID` = `o0`.`CustomerID` -ORDER BY `t`.`c` DESC, `t`.`CustomerID` + ) AS `c1` + ORDER BY `c1`.`c` DESC +) AS `c0` +LEFT JOIN `Orders` AS `o0` ON `c0`.`CustomerID` = `o0`.`CustomerID` +ORDER BY `c0`.`c` DESC, `c0`.`CustomerID` """); } @@ -221,16 +221,16 @@ public override async Task Include_multi_level_reference_and_collection_predicat await base.Include_multi_level_reference_and_collection_predicate(async); AssertSql( -""" -SELECT `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate`, `t`.`CustomerID0`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` + """ +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`CustomerID0`, `s`.`Address`, `s`.`City`, `s`.`CompanyName`, `s`.`ContactName`, `s`.`ContactTitle`, `s`.`Country`, `s`.`Fax`, `s`.`Phone`, `s`.`PostalCode`, `s`.`Region`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` FROM ( SELECT TOP 2 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID` AS `CustomerID0`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Orders` AS `o` LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` WHERE `o`.`OrderID` = 10248 -) AS `t` -LEFT JOIN `Orders` AS `o0` ON `t`.`CustomerID0` = `o0`.`CustomerID` -ORDER BY `t`.`OrderID`, `t`.`CustomerID0` +) AS `s` +LEFT JOIN `Orders` AS `o0` ON `s`.`CustomerID0` = `o0`.`CustomerID` +ORDER BY `s`.`OrderID`, `s`.`CustomerID0` """); } @@ -272,31 +272,31 @@ public override async Task Include_duplicate_reference3(bool async) await base.Include_duplicate_reference3(async); AssertSql( -""" -SELECT `t1`.`OrderID`, `t1`.`CustomerID`, `t1`.`EmployeeID`, `t1`.`OrderDate`, `t1`.`OrderID0`, `t1`.`CustomerID0`, `t1`.`EmployeeID0`, `t1`.`OrderDate0`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + """ +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`CustomerID0`, `s`.`EmployeeID0`, `s`.`OrderDate0`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM ( - SELECT `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate`, `t0`.`OrderID` AS `OrderID0`, `t0`.`CustomerID` AS `CustomerID0`, `t0`.`EmployeeID` AS `EmployeeID0`, `t0`.`OrderDate` AS `OrderDate0` + SELECT `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `o2`.`OrderID` AS `OrderID0`, `o2`.`CustomerID` AS `CustomerID0`, `o2`.`EmployeeID` AS `EmployeeID0`, `o2`.`OrderDate` AS `OrderDate0` FROM ( SELECT TOP 2 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` ORDER BY `o`.`OrderID` - ) AS `t`, + ) AS `o1`, ( - SELECT `t1`.`OrderID`, `t1`.`CustomerID`, `t1`.`EmployeeID`, `t1`.`OrderDate` + SELECT `o4`.`OrderID`, `o4`.`CustomerID`, `o4`.`EmployeeID`, `o4`.`OrderDate` FROM ( - SELECT TOP 2 `t0`.`OrderID`, `t0`.`CustomerID`, `t0`.`EmployeeID`, `t0`.`OrderDate` + SELECT TOP 2 `o3`.`OrderID`, `o3`.`CustomerID`, `o3`.`EmployeeID`, `o3`.`OrderDate` FROM ( SELECT TOP 4 `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` FROM `Orders` AS `o0` ORDER BY `o0`.`OrderID` - ) AS `t0` - ORDER BY `t0`.`OrderID` DESC - ) AS `t1` - ORDER BY `t1`.`OrderID` - ) AS `t0` -) AS `t1` -LEFT JOIN `Customers` AS `c` ON `t1`.`CustomerID0` = `c`.`CustomerID` -ORDER BY `t1`.`OrderID` + ) AS `o3` + ORDER BY `o3`.`OrderID` DESC + ) AS `o4` + ORDER BY `o4`.`OrderID` + ) AS `o2` +) AS `s` +LEFT JOIN `Customers` AS `c` ON `s`.`CustomerID0` = `c`.`CustomerID` +ORDER BY `s`.`OrderID` """); } @@ -305,15 +305,15 @@ public override async Task Include_collection_order_by_non_key_with_take(bool as await base.Include_collection_order_by_non_key_with_take(async); AssertSql( -""" -SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM ( SELECT TOP 10 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`ContactTitle` -) AS `t` -LEFT JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`ContactTitle`, `t`.`CustomerID` +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`ContactTitle`, `c0`.`CustomerID` """); } @@ -322,19 +322,19 @@ public override async Task Include_collection_then_include_collection_predicate( await base.Include_collection_then_include_collection_predicate(async); AssertSql( -""" -SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `t0`.`OrderID`, `t0`.`CustomerID`, `t0`.`EmployeeID`, `t0`.`OrderDate`, `t0`.`OrderID0`, `t0`.`ProductID`, `t0`.`Discount`, `t0`.`Quantity`, `t0`.`UnitPrice` + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice` FROM ( SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` WHERE `c`.`CustomerID` = 'ALFKI' -) AS `t` +) AS `c0` LEFT JOIN ( SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID` AS `OrderID0`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` FROM `Orders` AS `o` LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` -) AS `t0` ON `t`.`CustomerID` = `t0`.`CustomerID` -ORDER BY `t`.`CustomerID`, `t0`.`OrderID`, `t0`.`OrderID0` +) AS `s` ON `c0`.`CustomerID` = `s`.`CustomerID` +ORDER BY `c0`.`CustomerID`, `s`.`OrderID`, `s`.`OrderID0` """); } @@ -343,14 +343,14 @@ public override async Task Include_collection_take_no_order_by(bool async) await base.Include_collection_take_no_order_by(async); AssertSql( -""" -SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM ( SELECT TOP 10 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` -) AS `t` -LEFT JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CustomerID` +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` """); } @@ -359,21 +359,21 @@ public override async Task Include_collection_principal_already_tracked(bool asy await base.Include_collection_principal_already_tracked(async); AssertSql( -""" + """ SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` WHERE `c`.`CustomerID` = 'ALFKI' """, -// -""" -SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + // + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM ( SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` WHERE `c`.`CustomerID` = 'ALFKI' -) AS `t` -LEFT JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CustomerID` +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` """); } @@ -458,15 +458,15 @@ public override async Task Include_collection_single_or_default_no_result(bool a await base.Include_collection_single_or_default_no_result(async); AssertSql( -""" -SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM ( SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` WHERE `c`.`CustomerID` = 'ALFKI ?' -) AS `t` -LEFT JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CustomerID` +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` """); } @@ -550,20 +550,20 @@ public override async Task Include_collection_then_include_collection_then_inclu await base.Include_collection_then_include_collection_then_include_reference(async); AssertSql( -""" -SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `t0`.`OrderID`, `t0`.`CustomerID`, `t0`.`EmployeeID`, `t0`.`OrderDate`, `t0`.`OrderID0`, `t0`.`ProductID`, `t0`.`Discount`, `t0`.`Quantity`, `t0`.`UnitPrice`, `t0`.`ProductID0`, `t0`.`Discontinued`, `t0`.`ProductName`, `t0`.`SupplierID`, `t0`.`UnitPrice0`, `t0`.`UnitsInStock` + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `s0`.`OrderID`, `s0`.`CustomerID`, `s0`.`EmployeeID`, `s0`.`OrderDate`, `s0`.`OrderID0`, `s0`.`ProductID`, `s0`.`Discount`, `s0`.`Quantity`, `s0`.`UnitPrice`, `s0`.`ProductID0`, `s0`.`Discontinued`, `s0`.`ProductName`, `s0`.`SupplierID`, `s0`.`UnitPrice0`, `s0`.`UnitsInStock` FROM `Customers` AS `c` LEFT JOIN ( - SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `t`.`OrderID` AS `OrderID0`, `t`.`ProductID`, `t`.`Discount`, `t`.`Quantity`, `t`.`UnitPrice`, `t`.`ProductID0`, `t`.`Discontinued`, `t`.`ProductName`, `t`.`SupplierID`, `t`.`UnitPrice0`, `t`.`UnitsInStock` + SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `s`.`OrderID` AS `OrderID0`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice`, `s`.`ProductID0`, `s`.`Discontinued`, `s`.`ProductName`, `s`.`SupplierID`, `s`.`UnitPrice0`, `s`.`UnitsInStock` FROM `Orders` AS `o` LEFT JOIN ( SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `p`.`ProductID` AS `ProductID0`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice` AS `UnitPrice0`, `p`.`UnitsInStock` FROM `Order Details` AS `o0` INNER JOIN `Products` AS `p` ON `o0`.`ProductID` = `p`.`ProductID` - ) AS `t` ON `o`.`OrderID` = `t`.`OrderID` -) AS `t0` ON `c`.`CustomerID` = `t0`.`CustomerID` + ) AS `s` ON `o`.`OrderID` = `s`.`OrderID` +) AS `s0` ON `c`.`CustomerID` = `s0`.`CustomerID` WHERE `c`.`CustomerID` LIKE 'F%' -ORDER BY `c`.`CustomerID`, `t0`.`OrderID`, `t0`.`OrderID0`, `t0`.`ProductID` +ORDER BY `c`.`CustomerID`, `s0`.`OrderID`, `s0`.`OrderID0`, `s0`.`ProductID` """); } @@ -687,32 +687,32 @@ public override async Task Include_duplicate_reference(bool async) await base.Include_duplicate_reference(async); AssertSql( -""" -SELECT `t1`.`OrderID`, `t1`.`CustomerID`, `t1`.`EmployeeID`, `t1`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `t1`.`OrderID0`, `t1`.`CustomerID0`, `t1`.`EmployeeID0`, `t1`.`OrderDate0`, `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` + """ +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `s`.`OrderID0`, `s`.`CustomerID0`, `s`.`EmployeeID0`, `s`.`OrderDate0`, `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` FROM (( - SELECT `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate`, `t0`.`OrderID` AS `OrderID0`, `t0`.`CustomerID` AS `CustomerID0`, `t0`.`EmployeeID` AS `EmployeeID0`, `t0`.`OrderDate` AS `OrderDate0` + SELECT `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `o2`.`OrderID` AS `OrderID0`, `o2`.`CustomerID` AS `CustomerID0`, `o2`.`EmployeeID` AS `EmployeeID0`, `o2`.`OrderDate` AS `OrderDate0` FROM ( SELECT TOP 2 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` ORDER BY `o`.`CustomerID`, `o`.`OrderID` - ) AS `t`, + ) AS `o1`, ( - SELECT `t1`.`OrderID`, `t1`.`CustomerID`, `t1`.`EmployeeID`, `t1`.`OrderDate` + SELECT `o4`.`OrderID`, `o4`.`CustomerID`, `o4`.`EmployeeID`, `o4`.`OrderDate` FROM ( - SELECT TOP 2 `t0`.`OrderID`, `t0`.`CustomerID`, `t0`.`EmployeeID`, `t0`.`OrderDate` + SELECT TOP 2 `o3`.`OrderID`, `o3`.`CustomerID`, `o3`.`EmployeeID`, `o3`.`OrderDate` FROM ( SELECT TOP 4 `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` FROM `Orders` AS `o0` ORDER BY `o0`.`CustomerID`, `o0`.`OrderID` - ) AS `t0` - ORDER BY `t0`.`CustomerID` DESC, `t0`.`OrderID` DESC - ) AS `t1` - ORDER BY `t1`.`CustomerID`, `t1`.`OrderID` - ) AS `t0` -) AS `t1` -LEFT JOIN `Customers` AS `c` ON `t1`.`CustomerID` = `c`.`CustomerID`) -LEFT JOIN `Customers` AS `c0` ON `t1`.`CustomerID0` = `c0`.`CustomerID` -ORDER BY `t1`.`CustomerID`, `t1`.`OrderID` + ) AS `o3` + ORDER BY `o3`.`CustomerID` DESC, `o3`.`OrderID` DESC + ) AS `o4` + ORDER BY `o4`.`CustomerID`, `o4`.`OrderID` + ) AS `o2` +) AS `s` +LEFT JOIN `Customers` AS `c` ON `s`.`CustomerID` = `c`.`CustomerID`) +LEFT JOIN `Customers` AS `c0` ON `s`.`CustomerID0` = `c0`.`CustomerID` +ORDER BY `s`.`CustomerID`, `s`.`OrderID` """); } @@ -769,24 +769,24 @@ public override async Task Multi_level_includes_are_applied_with_take(bool async await base.Multi_level_includes_are_applied_with_take(async); AssertSql( -""" -SELECT `t0`.`CustomerID`, `t1`.`OrderID`, `t1`.`CustomerID`, `t1`.`EmployeeID`, `t1`.`OrderDate`, `t1`.`OrderID0`, `t1`.`ProductID`, `t1`.`Discount`, `t1`.`Quantity`, `t1`.`UnitPrice` + """ +SELECT `c1`.`CustomerID`, `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice` FROM ( - SELECT TOP 1 `t`.`CustomerID` + SELECT TOP 1 `c0`.`CustomerID` FROM ( SELECT TOP 1 `c`.`CustomerID` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'A%' ORDER BY `c`.`CustomerID` - ) AS `t` - ORDER BY `t`.`CustomerID` -) AS `t0` + ) AS `c0` + ORDER BY `c0`.`CustomerID` +) AS `c1` LEFT JOIN ( SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID` AS `OrderID0`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` FROM `Orders` AS `o` LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` -) AS `t1` ON `t0`.`CustomerID` = `t1`.`CustomerID` -ORDER BY `t0`.`CustomerID`, `t1`.`OrderID`, `t1`.`OrderID0` +) AS `s` ON `c1`.`CustomerID` = `s`.`CustomerID` +ORDER BY `c1`.`CustomerID`, `s`.`OrderID`, `s`.`OrderID0` """); } @@ -812,16 +812,16 @@ public override async Task Include_collection_then_reference(bool async) await base.Include_collection_then_reference(async); AssertSql( -""" -SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock`, `t`.`OrderID`, `t`.`ProductID`, `t`.`Discount`, `t`.`Quantity`, `t`.`UnitPrice`, `t`.`OrderID0`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate` + """ +SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock`, `s`.`OrderID`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice`, `s`.`OrderID0`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate` FROM `Products` AS `p` LEFT JOIN ( SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID` AS `OrderID0`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` FROM `Order Details` AS `o` INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` -) AS `t` ON `p`.`ProductID` = `t`.`ProductID` +) AS `s` ON `p`.`ProductID` = `s`.`ProductID` WHERE (`p`.`ProductID` MOD 17) = 5 -ORDER BY `p`.`ProductID`, `t`.`OrderID`, `t`.`ProductID` +ORDER BY `p`.`ProductID`, `s`.`OrderID`, `s`.`ProductID` """); } @@ -864,15 +864,15 @@ public override async Task Include_collection_on_additional_from_clause2(bool as await base.Include_collection_on_additional_from_clause2(async); AssertSql( -""" -SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region` + """ +SELECT `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region` FROM ( SELECT TOP 5 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`CustomerID` -) AS `t`, +) AS `c1`, `Customers` AS `c0` -ORDER BY `t`.`CustomerID` +ORDER BY `c1`.`CustomerID` """); } @@ -881,21 +881,21 @@ public override async Task Include_collection_dependent_already_tracked(bool asy await base.Include_collection_dependent_already_tracked(async); AssertSql( -""" + """ SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` WHERE `o`.`CustomerID` = 'ALFKI' """, -// -""" -SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + // + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM ( SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` WHERE `c`.`CustomerID` = 'ALFKI' -) AS `t` -LEFT JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CustomerID` +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` """); } @@ -923,19 +923,19 @@ public override async Task Include_multi_level_collection_and_then_include_refer await base.Include_multi_level_collection_and_then_include_reference_predicate(async); AssertSql( -""" -SELECT `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate`, `t0`.`OrderID`, `t0`.`ProductID`, `t0`.`Discount`, `t0`.`Quantity`, `t0`.`UnitPrice`, `t0`.`ProductID0`, `t0`.`Discontinued`, `t0`.`ProductName`, `t0`.`SupplierID`, `t0`.`UnitPrice0`, `t0`.`UnitsInStock` + """ +SELECT `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `s`.`OrderID`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice`, `s`.`ProductID0`, `s`.`Discontinued`, `s`.`ProductName`, `s`.`SupplierID`, `s`.`UnitPrice0`, `s`.`UnitsInStock` FROM ( SELECT TOP 2 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` WHERE `o`.`OrderID` = 10248 -) AS `t` +) AS `o1` LEFT JOIN ( SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, `p`.`ProductID` AS `ProductID0`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice` AS `UnitPrice0`, `p`.`UnitsInStock` FROM `Order Details` AS `o0` INNER JOIN `Products` AS `p` ON `o0`.`ProductID` = `p`.`ProductID` -) AS `t0` ON `t`.`OrderID` = `t0`.`OrderID` -ORDER BY `t`.`OrderID`, `t0`.`OrderID`, `t0`.`ProductID` +) AS `s` ON `o1`.`OrderID` = `s`.`OrderID` +ORDER BY `o1`.`OrderID`, `s`.`OrderID`, `s`.`ProductID` """); } @@ -944,28 +944,28 @@ public override async Task Multi_level_includes_are_applied_with_skip_take(bool await base.Multi_level_includes_are_applied_with_skip_take(async); AssertSql( -""" -SELECT `t1`.`CustomerID`, `t2`.`OrderID`, `t2`.`CustomerID`, `t2`.`EmployeeID`, `t2`.`OrderDate`, `t2`.`OrderID0`, `t2`.`ProductID`, `t2`.`Discount`, `t2`.`Quantity`, `t2`.`UnitPrice` + """ +SELECT `c2`.`CustomerID`, `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice` FROM ( - SELECT TOP 1 `t`.`CustomerID` + SELECT TOP 1 `c0`.`CustomerID` FROM ( - SELECT TOP 1 `t0`.`CustomerID` + SELECT TOP 1 `c1`.`CustomerID` FROM ( SELECT TOP 2 `c`.`CustomerID` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'A%' ORDER BY `c`.`CustomerID` - ) AS `t0` - ORDER BY `t0`.`CustomerID` DESC - ) AS `t` - ORDER BY `t`.`CustomerID` -) AS `t1` + ) AS `c1` + ORDER BY `c1`.`CustomerID` DESC + ) AS `c0` + ORDER BY `c0`.`CustomerID` +) AS `c2` LEFT JOIN ( SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID` AS `OrderID0`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` FROM `Orders` AS `o` LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` -) AS `t2` ON `t1`.`CustomerID` = `t2`.`CustomerID` -ORDER BY `t1`.`CustomerID`, `t2`.`OrderID`, `t2`.`OrderID0` +) AS `s` ON `c2`.`CustomerID` = `s`.`CustomerID` +ORDER BY `c2`.`CustomerID`, `s`.`OrderID`, `s`.`OrderID0` """); } @@ -1081,16 +1081,16 @@ public override async Task Include_collection_then_include_collection(bool async await base.Include_collection_then_include_collection(async); AssertSql( -""" -SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate`, `t`.`OrderID0`, `t`.`ProductID`, `t`.`Discount`, `t`.`Quantity`, `t`.`UnitPrice` + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice` FROM `Customers` AS `c` LEFT JOIN ( SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID` AS `OrderID0`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` FROM `Orders` AS `o` LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` -) AS `t` ON `c`.`CustomerID` = `t`.`CustomerID` +) AS `s` ON `c`.`CustomerID` = `s`.`CustomerID` WHERE `c`.`CustomerID` LIKE 'F%' -ORDER BY `c`.`CustomerID`, `t`.`OrderID`, `t`.`OrderID0` +ORDER BY `c`.`CustomerID`, `s`.`OrderID`, `s`.`OrderID0` """); } @@ -1384,24 +1384,24 @@ public override async Task Multi_level_includes_are_applied_with_skip(bool async await base.Multi_level_includes_are_applied_with_skip(async); AssertSql( -""" -SELECT `t0`.`CustomerID`, `t1`.`OrderID`, `t1`.`CustomerID`, `t1`.`EmployeeID`, `t1`.`OrderDate`, `t1`.`OrderID0`, `t1`.`ProductID`, `t1`.`Discount`, `t1`.`Quantity`, `t1`.`UnitPrice` + """ +SELECT `c1`.`CustomerID`, `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice` FROM ( - SELECT TOP 1 `t`.`CustomerID` + SELECT TOP 1 `c0`.`CustomerID` FROM ( SELECT TOP 2 `c`.`CustomerID` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'A%' ORDER BY `c`.`CustomerID` - ) AS `t` - ORDER BY `t`.`CustomerID` DESC -) AS `t0` + ) AS `c0` + ORDER BY `c0`.`CustomerID` DESC +) AS `c1` LEFT JOIN ( SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID` AS `OrderID0`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice` FROM `Orders` AS `o` LEFT JOIN `Order Details` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` -) AS `t1` ON `t0`.`CustomerID` = `t1`.`CustomerID` -ORDER BY `t0`.`CustomerID`, `t1`.`OrderID`, `t1`.`OrderID0` +) AS `s` ON `c1`.`CustomerID` = `s`.`CustomerID` +ORDER BY `c1`.`CustomerID`, `s`.`OrderID`, `s`.`OrderID0` """); } @@ -1434,14 +1434,14 @@ public override async Task Include_reference_distinct_is_server_evaluated(bool a await base.Include_reference_distinct_is_server_evaluated(async); AssertSql( -""" -SELECT `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + """ +SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM ( SELECT DISTINCT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` WHERE `o`.`OrderID` < 10250 -) AS `t` -LEFT JOIN `Customers` AS `c` ON `t`.`CustomerID` = `c`.`CustomerID` +) AS `o0` +LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` """); } @@ -1450,15 +1450,15 @@ public override async Task Include_collection_distinct_is_server_evaluated(bool await base.Include_collection_distinct_is_server_evaluated(async); AssertSql( -""" -SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM ( SELECT DISTINCT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'A%' -) AS `t` -LEFT JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CustomerID` +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` """); } @@ -1539,17 +1539,17 @@ public override async Task Include_closes_reader(bool async) await base.Include_closes_reader(async); AssertSql( -""" -SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM ( SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` -) AS `t` -LEFT JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CustomerID` +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` """, -// -""" + // + """ SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` FROM `Products` AS `p` """); @@ -1636,15 +1636,15 @@ public override async Task Include_collection_orderby_take(bool async) await base.Include_collection_orderby_take(async); AssertSql( -""" -SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM ( SELECT TOP 5 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`CustomerID` -) AS `t` -LEFT JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CustomerID` +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` """); } @@ -1709,31 +1709,31 @@ public override async Task Include_duplicate_reference2(bool async) await base.Include_duplicate_reference2(async); AssertSql( -""" -SELECT `t1`.`OrderID`, `t1`.`CustomerID`, `t1`.`EmployeeID`, `t1`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `t1`.`OrderID0`, `t1`.`CustomerID0`, `t1`.`EmployeeID0`, `t1`.`OrderDate0` + """ +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `s`.`OrderID0`, `s`.`CustomerID0`, `s`.`EmployeeID0`, `s`.`OrderDate0` FROM ( - SELECT `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate`, `t0`.`OrderID` AS `OrderID0`, `t0`.`CustomerID` AS `CustomerID0`, `t0`.`EmployeeID` AS `EmployeeID0`, `t0`.`OrderDate` AS `OrderDate0` + SELECT `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate`, `o2`.`OrderID` AS `OrderID0`, `o2`.`CustomerID` AS `CustomerID0`, `o2`.`EmployeeID` AS `EmployeeID0`, `o2`.`OrderDate` AS `OrderDate0` FROM ( SELECT TOP 2 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` ORDER BY `o`.`OrderID` - ) AS `t`, + ) AS `o1`, ( - SELECT `t1`.`OrderID`, `t1`.`CustomerID`, `t1`.`EmployeeID`, `t1`.`OrderDate` + SELECT `o4`.`OrderID`, `o4`.`CustomerID`, `o4`.`EmployeeID`, `o4`.`OrderDate` FROM ( - SELECT TOP 2 `t0`.`OrderID`, `t0`.`CustomerID`, `t0`.`EmployeeID`, `t0`.`OrderDate` + SELECT TOP 2 `o3`.`OrderID`, `o3`.`CustomerID`, `o3`.`EmployeeID`, `o3`.`OrderDate` FROM ( SELECT TOP 4 `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` FROM `Orders` AS `o0` ORDER BY `o0`.`OrderID` - ) AS `t0` - ORDER BY `t0`.`OrderID` DESC - ) AS `t1` - ORDER BY `t1`.`OrderID` - ) AS `t0` -) AS `t1` -LEFT JOIN `Customers` AS `c` ON `t1`.`CustomerID` = `c`.`CustomerID` -ORDER BY `t1`.`OrderID` + ) AS `o3` + ORDER BY `o3`.`OrderID` DESC + ) AS `o4` + ORDER BY `o4`.`OrderID` + ) AS `o2` +) AS `s` +LEFT JOIN `Customers` AS `c` ON `s`.`CustomerID` = `c`.`CustomerID` +ORDER BY `s`.`OrderID` """); } @@ -1817,15 +1817,15 @@ public override async Task Include_collection_with_last(bool async) await base.Include_collection_with_last(async); AssertSql( -""" -SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM ( SELECT TOP 1 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`CompanyName` DESC -) AS `t` -LEFT JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CompanyName` DESC, `t`.`CustomerID` +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CompanyName` DESC, `c0`.`CustomerID` """); } @@ -1954,9 +1954,9 @@ public override async Task Then_include_collection_order_by_collection_column(bo AssertSql( """ -SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `t0`.`OrderID`, `t0`.`CustomerID`, `t0`.`EmployeeID`, `t0`.`OrderDate`, `t0`.`OrderID0`, `t0`.`ProductID`, `t0`.`Discount`, `t0`.`Quantity`, `t0`.`UnitPrice` +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`OrderID0`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice` FROM ( - SELECT TOP 1 `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `t`.`c` + SELECT TOP 1 `c1`.`CustomerID`, `c1`.`Address`, `c1`.`City`, `c1`.`CompanyName`, `c1`.`ContactName`, `c1`.`ContactTitle`, `c1`.`Country`, `c1`.`Fax`, `c1`.`Phone`, `c1`.`PostalCode`, `c1`.`Region`, `c1`.`c` FROM ( SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, ( SELECT TOP 1 `o`.`OrderDate` @@ -1965,15 +1965,15 @@ SELECT TOP 1 `o`.`OrderDate` ORDER BY `o`.`OrderDate` DESC) AS `c` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'W%' - ) AS `t` - ORDER BY `t`.`c` DESC -) AS `t` + ) AS `c1` + ORDER BY `c1`.`c` DESC +) AS `c0` LEFT JOIN ( SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `o1`.`OrderID` AS `OrderID0`, `o1`.`ProductID`, `o1`.`Discount`, `o1`.`Quantity`, `o1`.`UnitPrice` FROM `Orders` AS `o0` LEFT JOIN `Order Details` AS `o1` ON `o0`.`OrderID` = `o1`.`OrderID` -) AS `t0` ON `t`.`CustomerID` = `t0`.`CustomerID` -ORDER BY `t`.`c` DESC, `t`.`CustomerID`, `t0`.`OrderID`, `t0`.`OrderID0` +) AS `s` ON `c0`.`CustomerID` = `s`.`CustomerID` +ORDER BY `c0`.`c` DESC, `c0`.`CustomerID`, `s`.`OrderID`, `s`.`OrderID0` """); } @@ -2017,16 +2017,16 @@ public override async Task Include_multi_level_reference_then_include_collection await base.Include_multi_level_reference_then_include_collection_predicate(async); AssertSql( -""" -SELECT `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate`, `t`.`CustomerID0`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` + """ +SELECT `s`.`OrderID`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate`, `s`.`CustomerID0`, `s`.`Address`, `s`.`City`, `s`.`CompanyName`, `s`.`ContactName`, `s`.`ContactTitle`, `s`.`Country`, `s`.`Fax`, `s`.`Phone`, `s`.`PostalCode`, `s`.`Region`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` FROM ( SELECT TOP 2 `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c`.`CustomerID` AS `CustomerID0`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Orders` AS `o` LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` WHERE `o`.`OrderID` = 10248 -) AS `t` -LEFT JOIN `Orders` AS `o0` ON `t`.`CustomerID0` = `o0`.`CustomerID` -ORDER BY `t`.`OrderID`, `t`.`CustomerID0` +) AS `s` +LEFT JOIN `Orders` AS `o0` ON `s`.`CustomerID0` = `o0`.`CustomerID` +ORDER BY `s`.`OrderID`, `s`.`CustomerID0` """); } @@ -2052,20 +2052,20 @@ public override async Task Include_where_skip_take_projection(bool async) await base.Include_where_skip_take_projection(async); AssertSql( -""" + """ SELECT `o0`.`CustomerID` FROM ( - SELECT TOP 2 `t0`.`OrderID`, `t0`.`ProductID` + SELECT TOP 2 `o2`.`OrderID`, `o2`.`ProductID` FROM ( SELECT TOP 3 `o`.`OrderID`, `o`.`ProductID` FROM `Order Details` AS `o` WHERE `o`.`Quantity` = 10 ORDER BY `o`.`OrderID`, `o`.`ProductID` - ) AS `t0` - ORDER BY `t0`.`OrderID` DESC, `t0`.`ProductID` DESC -) AS `t` -INNER JOIN `Orders` AS `o0` ON `t`.`OrderID` = `o0`.`OrderID` -ORDER BY `t`.`OrderID`, `t`.`ProductID` + ) AS `o2` + ORDER BY `o2`.`OrderID` DESC, `o2`.`ProductID` DESC +) AS `o1` +INNER JOIN `Orders` AS `o0` ON `o1`.`OrderID` = `o0`.`OrderID` +ORDER BY `o1`.`OrderID`, `o1`.`ProductID` """); } @@ -2074,15 +2074,15 @@ public override async Task Include_with_take(bool async) await base.Include_with_take(async); AssertSql( -""" -SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM ( SELECT TOP 10 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`ContactName` DESC -) AS `t` -LEFT JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`ContactName` DESC, `t`.`CustomerID` +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`ContactName` DESC, `c0`.`CustomerID` """); } @@ -2105,16 +2105,16 @@ public override async Task Include_list(bool async) await base.Include_list(async); AssertSql( -""" -SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock`, `t`.`OrderID`, `t`.`ProductID`, `t`.`Discount`, `t`.`Quantity`, `t`.`UnitPrice`, `t`.`OrderID0`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate` + """ +SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock`, `s`.`OrderID`, `s`.`ProductID`, `s`.`Discount`, `s`.`Quantity`, `s`.`UnitPrice`, `s`.`OrderID0`, `s`.`CustomerID`, `s`.`EmployeeID`, `s`.`OrderDate` FROM `Products` AS `p` LEFT JOIN ( SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID` AS `OrderID0`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` FROM `Order Details` AS `o` INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` -) AS `t` ON `p`.`ProductID` = `t`.`ProductID` +) AS `s` ON `p`.`ProductID` = `s`.`ProductID` WHERE (`p`.`ProductID` MOD 17) = 5 AND `p`.`UnitPrice` < 20.0 -ORDER BY `p`.`ProductID`, `t`.`OrderID`, `t`.`ProductID` +ORDER BY `p`.`ProductID`, `s`.`OrderID`, `s`.`ProductID` """); } diff --git a/test/EFCore.Jet.FunctionalTests/Query/NorthwindWhereQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/NorthwindWhereQueryJetTest.cs index a3370a70..3548e7a5 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/NorthwindWhereQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/NorthwindWhereQueryJetTest.cs @@ -22,9 +22,6 @@ public NorthwindWhereQueryJetTest( Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); } - protected override bool CanExecuteQueryString - => false; - [ConditionalFact] public virtual void Check_all_tests_overridden() => TestHelpers.AssertAllMethodsOverridden(GetType()); @@ -487,9 +484,11 @@ public override async Task Where_bitwise_or(bool isAsync) await base.Where_bitwise_or(isAsync); AssertSql( - $@"SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` -WHERE (IIF(`c`.`CustomerID` = 'ALFKI', TRUE, FALSE) BOR IIF(`c`.`CustomerID` = 'ANATR', TRUE, FALSE)) = TRUE"); +WHERE `c`.`CustomerID` IN ('ALFKI', 'ANATR') +"""); } public override async Task Where_bitwise_and(bool isAsync) @@ -497,18 +496,23 @@ public override async Task Where_bitwise_and(bool isAsync) await base.Where_bitwise_and(isAsync); AssertSql( - $@"SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` -WHERE (IIF(`c`.`CustomerID` = 'ALFKI', TRUE, FALSE) BAND IIF(`c`.`CustomerID` = 'ANATR', TRUE, FALSE)) = TRUE"); +WHERE 0 = 1 +"""); } public override async Task Where_bitwise_xor(bool isAsync) { - //This is same as SQL Server and Sqlite from efcore - // Cannot eval 'where (([c].CustomerID == \"ALFKI\") ^ True)'. Issue #16645. - await AssertTranslationFailed(() => base.Where_bitwise_xor(isAsync)); + await base.Where_bitwise_xor(isAsync); - AssertSql(); + AssertSql( + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE (IIF(`c`.`CustomerID` = 'ALFKI', TRUE, FALSE) BXOR TRUE) = TRUE +"""); } public override async Task Where_simple_shadow(bool isAsync) @@ -1117,13 +1121,13 @@ public override async Task Where_primitive(bool isAsync) AssertSql( """ - SELECT `t`.`EmployeeID` - FROM ( - SELECT TOP 9 `e`.`EmployeeID` - FROM `Employees` AS `e` - ) AS `t` - WHERE `t`.`EmployeeID` = 5 - """); +SELECT `e0`.`EmployeeID` +FROM ( + SELECT TOP 9 `e`.`EmployeeID` + FROM `Employees` AS `e` +) AS `e0` +WHERE `e0`.`EmployeeID` = 5 +"""); } public override async Task Where_bool_member(bool isAsync) @@ -1561,6 +1565,18 @@ public override async Task Where_ternary_boolean_condition_with_false_as_result_ WHERE 0 = 1"); } + public override async Task Where_ternary_boolean_condition_negated(bool async) + { + await base.Where_ternary_boolean_condition_negated(async); + + AssertSql( + """ +SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` +FROM `Products` AS `p` +WHERE IIF(`p`.`UnitsInStock` >= 20, TRUE, FALSE) = TRUE +"""); + } + public override async Task Where_compare_constructed_equal(bool async) { // Anonymous type to constant comparison. Issue #14672. @@ -1693,18 +1709,18 @@ public override async Task Where_navigation_contains(bool isAsync) await base.Where_navigation_contains(isAsync); AssertSql( -""" -SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` + """ +SELECT `c0`.`CustomerID`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM ( SELECT TOP 2 `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` WHERE `c`.`CustomerID` = 'ALFKI' -) AS `t` -LEFT JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID` -ORDER BY `t`.`CustomerID` +) AS `c0` +LEFT JOIN `Orders` AS `o` ON `c0`.`CustomerID` = `o`.`CustomerID` +ORDER BY `c0`.`CustomerID` """, -// -""" + // + """ SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice` FROM `Order Details` AS `o` INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` @@ -1816,8 +1832,10 @@ public override async Task Time_of_day_datetime(bool isAsync) await base.Time_of_day_datetime(isAsync); AssertSql( - $@"SELECT CAST(`o`.`OrderDate` AS time) -FROM `Orders` AS `o`"); + """ +SELECT IIF(`o`.`OrderDate` IS NULL, NULL, TIMEVALUE(`o`.`OrderDate`)) +FROM `Orders` AS `o` +"""); } public override async Task TypeBinary_short_circuit(bool isAsync) @@ -2795,14 +2813,14 @@ public override async Task Where_simple_shadow_subquery(bool async) AssertSql( """ -SELECT `t`.`EmployeeID`, `t`.`City`, `t`.`Country`, `t`.`FirstName`, `t`.`ReportsTo`, `t`.`Title` +SELECT `e0`.`EmployeeID`, `e0`.`City`, `e0`.`Country`, `e0`.`FirstName`, `e0`.`ReportsTo`, `e0`.`Title` FROM ( SELECT TOP 5 `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` FROM `Employees` AS `e` ORDER BY `e`.`EmployeeID` -) AS `t` -WHERE `t`.`Title` = 'Sales Representative' -ORDER BY `t`.`EmployeeID` +) AS `e0` +WHERE `e0`.`Title` = 'Sales Representative' +ORDER BY `e0`.`EmployeeID` """); } @@ -2812,12 +2830,12 @@ public override async Task Where_primitive_tracked2(bool async) AssertSql( """ -SELECT `t`.`EmployeeID`, `t`.`City`, `t`.`Country`, `t`.`FirstName`, `t`.`ReportsTo`, `t`.`Title` +SELECT `e0`.`EmployeeID`, `e0`.`City`, `e0`.`Country`, `e0`.`FirstName`, `e0`.`ReportsTo`, `e0`.`Title` FROM ( SELECT TOP 9 `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` FROM `Employees` AS `e` -) AS `t` -WHERE `t`.`EmployeeID` = 5 +) AS `e0` +WHERE `e0`.`EmployeeID` = 5 """); } @@ -2848,6 +2866,17 @@ public override async Task Where_bool_closure(bool async) SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` WHERE `c`.`CustomerID` = 'ALFKI' +""", + // + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = 'ALFKI' +""", + // + """ +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` """); } @@ -2857,12 +2886,12 @@ public override async Task Where_primitive_tracked(bool async) AssertSql( """ -SELECT `t`.`EmployeeID`, `t`.`City`, `t`.`Country`, `t`.`FirstName`, `t`.`ReportsTo`, `t`.`Title` +SELECT `e0`.`EmployeeID`, `e0`.`City`, `e0`.`Country`, `e0`.`FirstName`, `e0`.`ReportsTo`, `e0`.`Title` FROM ( SELECT TOP 9 `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` FROM `Employees` AS `e` -) AS `t` -WHERE `t`.`EmployeeID` = 5 +) AS `e0` +WHERE `e0`.`EmployeeID` = 5 """); } @@ -3003,6 +3032,185 @@ public override async Task EF_Constant_with_non_evaluatable_argument_throws(bool AssertSql(); } + public override async Task EF_Parameter(bool async) + { + await base.EF_Parameter(async); + + AssertSql( + """ +@__p_0='ALFKI' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = @__p_0 +"""); + } + + public override async Task EF_Parameter_with_subtree(bool async) + { + await base.EF_Parameter_with_subtree(async); + + AssertSql( + """ +@__p_0='ALFKI' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = @__p_0 +"""); + } + + public override async Task EF_Parameter_does_not_parameterized_as_part_of_bigger_subtree(bool async) + { + await base.EF_Parameter_does_not_parameterized_as_part_of_bigger_subtree(async); + + AssertSql( + """ +@__id_0='ALF' (Size = 5) + +SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` +FROM `Customers` AS `c` +WHERE `c`.`CustomerID` = (@__id_0 & 'KI') +"""); + } + + public override async Task EF_Parameter_with_non_evaluatable_argument_throws(bool async) + { + await base.EF_Parameter_with_non_evaluatable_argument_throws(async); + + AssertSql(); + } + + public override async Task Implicit_cast_in_predicate(bool async) + { + await base.Implicit_cast_in_predicate(async); + + AssertSql( + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE `o`.`CustomerID` = '1337' +""", + // + """ +@__prm_Value_0='1337' (Size = 5) + +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE `o`.`CustomerID` = @__prm_Value_0 +""", + // + """ +@__ToString_0='1337' (Size = 5) + +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE `o`.`CustomerID` = @__ToString_0 +""", + // + """ +@__p_0='1337' (Size = 5) + +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE `o`.`CustomerID` = @__p_0 +""", + // + """ +SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` +FROM `Orders` AS `o` +WHERE `o`.`CustomerID` = '1337' +"""); + } + + public override async Task Interface_casting_though_generic_method(bool async) + { + await base.Interface_casting_though_generic_method(async); + + AssertSql( + """ +@__id_0='10252' + +SELECT `o`.`OrderID` AS `Id` +FROM `Orders` AS `o` +WHERE `o`.`OrderID` = @__id_0 +""", + // + """ +SELECT `o`.`OrderID` AS `Id` +FROM `Orders` AS `o` +WHERE `o`.`OrderID` = 10252 +""", + // + """ +SELECT `o`.`OrderID` AS `Id` +FROM `Orders` AS `o` +WHERE `o`.`OrderID` = 10252 +""", + // + """ +SELECT `o`.`OrderID` AS `Id` +FROM `Orders` AS `o` +WHERE `o`.`OrderID` = 10252 +"""); + } + + #region Evaluation order of predicates + + public override async Task Take_and_Where_evaluation_order(bool async) + { + await base.Take_and_Where_evaluation_order(async); + + AssertSql( + """ +SELECT `e0`.`EmployeeID`, `e0`.`City`, `e0`.`Country`, `e0`.`FirstName`, `e0`.`ReportsTo`, `e0`.`Title` +FROM ( + SELECT TOP 3 `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` + FROM `Employees` AS `e` + ORDER BY `e`.`EmployeeID` +) AS `e0` +WHERE (`e0`.`EmployeeID` MOD 2) = 0 +ORDER BY `e0`.`EmployeeID` +"""); + } + + public override async Task Skip_and_Where_evaluation_order(bool async) + { + await base.Skip_and_Where_evaluation_order(async); + + AssertSql( + """ +@__p_0='3' + +SELECT [e0].[EmployeeID], [e0].[City], [e0].[Country], [e0].[FirstName], [e0].[ReportsTo], [e0].[Title] +FROM ( + SELECT [e].[EmployeeID], [e].[City], [e].[Country], [e].[FirstName], [e].[ReportsTo], [e].[Title] + FROM [Employees] AS [e] + ORDER BY [e].[EmployeeID] + OFFSET @__p_0 ROWS +) AS [e0] +WHERE [e0].[EmployeeID] % 2 = 0 +ORDER BY [e0].[EmployeeID] +"""); + } + + public override async Task Take_and_Distinct_evaluation_order(bool async) + { + await base.Take_and_Distinct_evaluation_order(async); + + AssertSql( + """ +SELECT DISTINCT `c0`.`ContactTitle` +FROM ( + SELECT TOP 3 `c`.`ContactTitle` + FROM `Customers` AS `c` + ORDER BY `c`.`ContactTitle` +) AS `c0` +"""); + } + + #endregion Evaluation order of predicates + private void AssertSql(params string[] expected) => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); diff --git a/test/EFCore.Jet.FunctionalTests/Query/NullSemanticsQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/NullSemanticsQueryJetTest.cs index 2818d38c..858c197f 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/NullSemanticsQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/NullSemanticsQueryJetTest.cs @@ -56,28 +56,28 @@ public override async Task Compare_negated_bool_with_bool_equal(bool async) await base.Compare_negated_bool_with_bool_equal(async); AssertSql( -""" + """ SELECT `e`.`Id` FROM `Entities1` AS `e` WHERE `e`.`BoolA` <> `e`.`BoolB` """, -// -""" + // + """ SELECT `e`.`Id` FROM `Entities1` AS `e` -WHERE `e`.`BoolA` <> `e`.`NullableBoolB` AND `e`.`NullableBoolB` IS NOT NULL +WHERE `e`.`BoolA` <> `e`.`NullableBoolB` """, -// -""" + // + """ SELECT `e`.`Id` FROM `Entities1` AS `e` -WHERE `e`.`NullableBoolA` <> `e`.`BoolB` AND `e`.`NullableBoolA` IS NOT NULL +WHERE `e`.`NullableBoolA` <> `e`.`BoolB` """, -// -""" + // + """ SELECT `e`.`Id` FROM `Entities1` AS `e` -WHERE (`e`.`NullableBoolA` <> `e`.`NullableBoolB` AND `e`.`NullableBoolA` IS NOT NULL AND `e`.`NullableBoolB` IS NOT NULL) OR (`e`.`NullableBoolA` IS NULL AND `e`.`NullableBoolB` IS NULL) +WHERE `e`.`NullableBoolA` <> `e`.`NullableBoolB` OR (`e`.`NullableBoolA` IS NULL AND `e`.`NullableBoolB` IS NULL) """); } @@ -86,28 +86,28 @@ public override async Task Compare_bool_with_negated_bool_equal(bool async) await base.Compare_bool_with_negated_bool_equal(async); AssertSql( -""" + """ SELECT `e`.`Id` FROM `Entities1` AS `e` WHERE `e`.`BoolA` <> `e`.`BoolB` """, -// -""" + // + """ SELECT `e`.`Id` FROM `Entities1` AS `e` -WHERE `e`.`BoolA` <> `e`.`NullableBoolB` AND `e`.`NullableBoolB` IS NOT NULL +WHERE `e`.`BoolA` <> `e`.`NullableBoolB` """, -// -""" + // + """ SELECT `e`.`Id` FROM `Entities1` AS `e` -WHERE `e`.`NullableBoolA` <> `e`.`BoolB` AND `e`.`NullableBoolA` IS NOT NULL +WHERE `e`.`NullableBoolA` <> `e`.`BoolB` """, -// -""" + // + """ SELECT `e`.`Id` FROM `Entities1` AS `e` -WHERE (`e`.`NullableBoolA` <> `e`.`NullableBoolB` AND `e`.`NullableBoolA` IS NOT NULL AND `e`.`NullableBoolB` IS NOT NULL) OR (`e`.`NullableBoolA` IS NULL AND `e`.`NullableBoolB` IS NULL) +WHERE `e`.`NullableBoolA` <> `e`.`NullableBoolB` OR (`e`.`NullableBoolA` IS NULL AND `e`.`NullableBoolB` IS NULL) """); } @@ -116,28 +116,28 @@ public override async Task Compare_negated_bool_with_negated_bool_equal(bool asy await base.Compare_negated_bool_with_negated_bool_equal(async); AssertSql( -""" + """ SELECT `e`.`Id` FROM `Entities1` AS `e` WHERE `e`.`BoolA` = `e`.`BoolB` """, -// -""" + // + """ SELECT `e`.`Id` FROM `Entities1` AS `e` -WHERE `e`.`BoolA` = `e`.`NullableBoolB` AND `e`.`NullableBoolB` IS NOT NULL +WHERE `e`.`BoolA` = `e`.`NullableBoolB` """, -// -""" + // + """ SELECT `e`.`Id` FROM `Entities1` AS `e` -WHERE `e`.`NullableBoolA` = `e`.`BoolB` AND `e`.`NullableBoolA` IS NOT NULL +WHERE `e`.`NullableBoolA` = `e`.`BoolB` """, -// -""" + // + """ SELECT `e`.`Id` FROM `Entities1` AS `e` -WHERE (`e`.`NullableBoolA` = `e`.`NullableBoolB` AND `e`.`NullableBoolA` IS NOT NULL AND `e`.`NullableBoolB` IS NOT NULL) OR (`e`.`NullableBoolA` IS NULL AND `e`.`NullableBoolB` IS NULL) +WHERE `e`.`NullableBoolA` = `e`.`NullableBoolB` OR (`e`.`NullableBoolA` IS NULL AND `e`.`NullableBoolB` IS NULL) """); } @@ -386,28 +386,28 @@ public override async Task Compare_bool_with_bool_not_equal_negated(bool async) await base.Compare_bool_with_bool_not_equal_negated(async); AssertSql( -""" + """ SELECT `e`.`Id` FROM `Entities1` AS `e` WHERE `e`.`BoolA` = `e`.`BoolB` """, -// -""" + // + """ SELECT `e`.`Id` FROM `Entities1` AS `e` -WHERE `e`.`BoolA` = `e`.`NullableBoolB` AND `e`.`NullableBoolB` IS NOT NULL +WHERE `e`.`BoolA` = `e`.`NullableBoolB` """, -// -""" + // + """ SELECT `e`.`Id` FROM `Entities1` AS `e` -WHERE `e`.`NullableBoolA` = `e`.`BoolB` AND `e`.`NullableBoolA` IS NOT NULL +WHERE `e`.`NullableBoolA` = `e`.`BoolB` """, -// -""" + // + """ SELECT `e`.`Id` FROM `Entities1` AS `e` -WHERE (`e`.`NullableBoolA` = `e`.`NullableBoolB` AND `e`.`NullableBoolA` IS NOT NULL AND `e`.`NullableBoolB` IS NOT NULL) OR (`e`.`NullableBoolA` IS NULL AND `e`.`NullableBoolB` IS NULL) +WHERE `e`.`NullableBoolA` = `e`.`NullableBoolB` OR (`e`.`NullableBoolA` IS NULL AND `e`.`NullableBoolB` IS NULL) """); } @@ -416,28 +416,28 @@ public override async Task Compare_negated_bool_with_bool_not_equal_negated(bool await base.Compare_negated_bool_with_bool_not_equal_negated(async); AssertSql( -""" + """ SELECT `e`.`Id` FROM `Entities1` AS `e` WHERE `e`.`BoolA` <> `e`.`BoolB` """, -// -""" + // + """ SELECT `e`.`Id` FROM `Entities1` AS `e` -WHERE `e`.`BoolA` <> `e`.`NullableBoolB` AND `e`.`NullableBoolB` IS NOT NULL +WHERE `e`.`BoolA` <> `e`.`NullableBoolB` """, -// -""" + // + """ SELECT `e`.`Id` FROM `Entities1` AS `e` -WHERE `e`.`NullableBoolA` <> `e`.`BoolB` AND `e`.`NullableBoolA` IS NOT NULL +WHERE `e`.`NullableBoolA` <> `e`.`BoolB` """, -// -""" + // + """ SELECT `e`.`Id` FROM `Entities1` AS `e` -WHERE (`e`.`NullableBoolA` <> `e`.`NullableBoolB` AND `e`.`NullableBoolA` IS NOT NULL AND `e`.`NullableBoolB` IS NOT NULL) OR (`e`.`NullableBoolA` IS NULL AND `e`.`NullableBoolB` IS NULL) +WHERE `e`.`NullableBoolA` <> `e`.`NullableBoolB` OR (`e`.`NullableBoolA` IS NULL AND `e`.`NullableBoolB` IS NULL) """); } @@ -446,28 +446,28 @@ public override async Task Compare_bool_with_negated_bool_not_equal_negated(bool await base.Compare_bool_with_negated_bool_not_equal_negated(async); AssertSql( -""" + """ SELECT `e`.`Id` FROM `Entities1` AS `e` WHERE `e`.`BoolA` <> `e`.`BoolB` """, -// -""" + // + """ SELECT `e`.`Id` FROM `Entities1` AS `e` -WHERE `e`.`BoolA` <> `e`.`NullableBoolB` AND `e`.`NullableBoolB` IS NOT NULL +WHERE `e`.`BoolA` <> `e`.`NullableBoolB` """, -// -""" + // + """ SELECT `e`.`Id` FROM `Entities1` AS `e` -WHERE `e`.`NullableBoolA` <> `e`.`BoolB` AND `e`.`NullableBoolA` IS NOT NULL +WHERE `e`.`NullableBoolA` <> `e`.`BoolB` """, -// -""" + // + """ SELECT `e`.`Id` FROM `Entities1` AS `e` -WHERE (`e`.`NullableBoolA` <> `e`.`NullableBoolB` AND `e`.`NullableBoolA` IS NOT NULL AND `e`.`NullableBoolB` IS NOT NULL) OR (`e`.`NullableBoolA` IS NULL AND `e`.`NullableBoolB` IS NULL) +WHERE `e`.`NullableBoolA` <> `e`.`NullableBoolB` OR (`e`.`NullableBoolA` IS NULL AND `e`.`NullableBoolB` IS NULL) """); } @@ -476,28 +476,28 @@ public override async Task Compare_negated_bool_with_negated_bool_not_equal_nega await base.Compare_negated_bool_with_negated_bool_not_equal_negated(async); AssertSql( -""" + """ SELECT `e`.`Id` FROM `Entities1` AS `e` WHERE `e`.`BoolA` = `e`.`BoolB` """, -// -""" + // + """ SELECT `e`.`Id` FROM `Entities1` AS `e` -WHERE `e`.`BoolA` = `e`.`NullableBoolB` AND `e`.`NullableBoolB` IS NOT NULL +WHERE `e`.`BoolA` = `e`.`NullableBoolB` """, -// -""" + // + """ SELECT `e`.`Id` FROM `Entities1` AS `e` -WHERE `e`.`NullableBoolA` = `e`.`BoolB` AND `e`.`NullableBoolA` IS NOT NULL +WHERE `e`.`NullableBoolA` = `e`.`BoolB` """, -// -""" + // + """ SELECT `e`.`Id` FROM `Entities1` AS `e` -WHERE (`e`.`NullableBoolA` = `e`.`NullableBoolB` AND `e`.`NullableBoolA` IS NOT NULL AND `e`.`NullableBoolB` IS NOT NULL) OR (`e`.`NullableBoolA` IS NULL AND `e`.`NullableBoolB` IS NULL) +WHERE `e`.`NullableBoolA` = `e`.`NullableBoolB` OR (`e`.`NullableBoolA` IS NULL AND `e`.`NullableBoolB` IS NULL) """); } @@ -970,9 +970,11 @@ public override async Task Where_equal_with_coalesce_both_sides(bool async) await base.Where_equal_with_coalesce_both_sides(async); AssertSql( - $@"SELECT `e`.`Id` + """ +SELECT `e`.`Id` FROM `Entities1` AS `e` -WHERE IIF(`e`.`NullableStringA` IS NULL, `e`.`NullableStringB`, `e`.`NullableStringA`) = IIF(`e`.`StringA` IS NULL, `e`.`StringB`, `e`.`StringA`)"); +WHERE IIF(`e`.`NullableStringA` IS NULL, `e`.`NullableStringB`, `e`.`NullableStringA`) = IIF(`e`.`NullableStringC` IS NULL, `e`.`StringA`, `e`.`NullableStringC`) +"""); } public override async Task Where_not_equal_with_coalesce_both_sides(bool async) @@ -1358,7 +1360,11 @@ public override async Task Where_IndexOf_empty(bool async) await base.Where_IndexOf_empty(async); AssertSql( - @""); + """ +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE IIF(`e`.`NullableStringA` IS NOT NULL, 0, NULL) = `e`.`NullableIntA` OR (IIF(`e`.`NullableStringA` IS NOT NULL, 0, NULL) IS NULL AND `e`.`NullableIntA` IS NULL) +"""); } public override async Task Select_IndexOf(bool async) @@ -1446,22 +1452,27 @@ public override async Task Null_semantics_conditional(bool async) await base.Null_semantics_conditional(async); AssertSql( -""" + """ SELECT `e`.`Id` FROM `Entities1` AS `e` WHERE `e`.`BoolA` = IIF(`e`.`BoolB` = TRUE, `e`.`NullableBoolB`, `e`.`NullableBoolC`) """, -// -""" + // + """ SELECT `e`.`Id` FROM `Entities1` AS `e` WHERE IIF((`e`.`NullableBoolA` <> `e`.`NullableBoolB` OR `e`.`NullableBoolA` IS NULL OR `e`.`NullableBoolB` IS NULL) AND (`e`.`NullableBoolA` IS NOT NULL OR `e`.`NullableBoolB` IS NOT NULL), `e`.`BoolB`, `e`.`BoolC`) = `e`.`BoolA` """, -// -""" + // + """ SELECT `e`.`Id` FROM `Entities1` AS `e` WHERE IIF(IIF(`e`.`BoolA` = TRUE, IIF((`e`.`NullableBoolA` <> `e`.`NullableBoolB` OR `e`.`NullableBoolA` IS NULL OR `e`.`NullableBoolB` IS NULL) AND (`e`.`NullableBoolA` IS NOT NULL OR `e`.`NullableBoolB` IS NOT NULL), TRUE, FALSE), `e`.`BoolC`) <> `e`.`BoolB`, `e`.`BoolA`, IIF((`e`.`NullableBoolB` = `e`.`NullableBoolC` AND `e`.`NullableBoolB` IS NOT NULL AND `e`.`NullableBoolC` IS NOT NULL) OR (`e`.`NullableBoolB` IS NULL AND `e`.`NullableBoolC` IS NULL), TRUE, FALSE)) = TRUE +""", + // + """ +SELECT IIF(IIF(`e`.`BoolA` = TRUE, `e`.`NullableIntA`, `e`.`IntB`) > `e`.`IntC`, TRUE, FALSE) +FROM `Entities1` AS `e` """); } @@ -1688,7 +1699,37 @@ public override async Task Negated_order_comparison_on_nullable_arguments_doesnt await base.Negated_order_comparison_on_nullable_arguments_doesnt_get_optimized(async); AssertSql( - @""); + """ +@__i_0='1' (Nullable = true) + +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE IIF(`e`.`NullableIntA` > @__i_0, FALSE, TRUE) = TRUE +""", + // + """ +@__i_0='1' (Nullable = true) + +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE IIF(`e`.`NullableIntA` >= @__i_0, FALSE, TRUE) = TRUE +""", + // + """ +@__i_0='1' (Nullable = true) + +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE IIF(`e`.`NullableIntA` < @__i_0, FALSE, TRUE) = TRUE +""", + // + """ +@__i_0='1' (Nullable = true) + +SELECT `e`.`Id` +FROM `Entities1` AS `e` +WHERE IIF(`e`.`NullableIntA` <= @__i_0, FALSE, TRUE) = TRUE +"""); } public override async Task Nullable_column_info_propagates_inside_binary_AndAlso(bool async) @@ -2119,21 +2160,21 @@ public override async Task Bool_logical_operation_with_nullable_bool_HasValue(bo await base.Bool_logical_operation_with_nullable_bool_HasValue(async); AssertSql( -""" + """ SELECT `e`.`Id`, `e`.`BoolA`, `e`.`BoolB`, `e`.`BoolC`, `e`.`IntA`, `e`.`IntB`, `e`.`IntC`, `e`.`NullableBoolA`, `e`.`NullableBoolB`, `e`.`NullableBoolC`, `e`.`NullableIntA`, `e`.`NullableIntB`, `e`.`NullableIntC`, `e`.`NullableStringA`, `e`.`NullableStringB`, `e`.`NullableStringC`, `e`.`StringA`, `e`.`StringB`, `e`.`StringC` FROM `Entities1` AS `e` """, -// -""" + // + """ SELECT `e`.`Id`, `e`.`BoolA`, `e`.`BoolB`, `e`.`BoolC`, `e`.`IntA`, `e`.`IntB`, `e`.`IntC`, `e`.`NullableBoolA`, `e`.`NullableBoolB`, `e`.`NullableBoolC`, `e`.`NullableIntA`, `e`.`NullableIntB`, `e`.`NullableIntC`, `e`.`NullableStringA`, `e`.`NullableStringB`, `e`.`NullableStringC`, `e`.`StringA`, `e`.`StringB`, `e`.`StringC` FROM `Entities1` AS `e` WHERE 0 = 1 """, -// -""" + // + """ SELECT `e`.`Id`, `e`.`BoolA`, `e`.`BoolB`, `e`.`BoolC`, `e`.`IntA`, `e`.`IntB`, `e`.`IntC`, `e`.`NullableBoolA`, `e`.`NullableBoolB`, `e`.`NullableBoolC`, `e`.`NullableIntA`, `e`.`NullableIntB`, `e`.`NullableIntC`, `e`.`NullableStringA`, `e`.`NullableStringB`, `e`.`NullableStringC`, `e`.`StringA`, `e`.`StringB`, `e`.`StringC` FROM `Entities1` AS `e` -WHERE (`e`.`BoolB` BOR IIF(`e`.`NullableBoolA` IS NOT NULL, TRUE, FALSE)) = TRUE +WHERE `e`.`BoolB` = TRUE OR `e`.`NullableBoolA` IS NOT NULL """); } @@ -2172,10 +2213,10 @@ public override async Task Is_null_on_column_followed_by_OrElse_optimizes_nullab await base.Is_null_on_column_followed_by_OrElse_optimizes_nullability_negative(async); AssertSql( -""" + """ SELECT `e`.`Id`, `e`.`BoolA`, `e`.`BoolB`, `e`.`BoolC`, `e`.`IntA`, `e`.`IntB`, `e`.`IntC`, `e`.`NullableBoolA`, `e`.`NullableBoolB`, `e`.`NullableBoolC`, `e`.`NullableIntA`, `e`.`NullableIntB`, `e`.`NullableIntC`, `e`.`NullableStringA`, `e`.`NullableStringB`, `e`.`NullableStringC`, `e`.`StringA`, `e`.`StringB`, `e`.`StringC` FROM `Entities1` AS `e` -WHERE `e`.`NullableStringA` IS NOT NULL OR (`e`.`NullableStringA` = 'Foo' AND `e`.`NullableStringA` IS NOT NULL) +WHERE `e`.`NullableStringA` IS NOT NULL OR `e`.`NullableStringA` = 'Foo' """); } diff --git a/test/EFCore.Jet.FunctionalTests/Query/OperatorsQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/OperatorsQueryJetTest.cs index e8242742..3b35654f 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/OperatorsQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/OperatorsQueryJetTest.cs @@ -26,21 +26,46 @@ public override async Task Bitwise_and_on_expression_with_like_and_null_check_be { await base.Bitwise_and_on_expression_with_like_and_null_check_being_compared_to_false(); - AssertSql(""); + AssertSql( + """ +SELECT `o`.`Value` AS `Value1`, `o0`.`Value` AS `Value2`, `o1`.`Value` AS `Value3` +FROM `OperatorEntityString` AS `o`, +`OperatorEntityString` AS `o0`, +`OperatorEntityBool` AS `o1` +WHERE (((`o0`.`Value` LIKE 'B') AND `o0`.`Value` IS NOT NULL) OR `o1`.`Value` = TRUE) AND `o`.`Value` IS NOT NULL +ORDER BY `o`.`Id`, `o0`.`Id`, `o1`.`Id` +"""); } public override async Task Complex_predicate_with_bitwise_and_modulo_and_negation() { await base.Complex_predicate_with_bitwise_and_modulo_and_negation(); - AssertSql(""); + AssertSql( + """ +SELECT `o`.`Value` AS `Value0`, `o0`.`Value` AS `Value1`, `o1`.`Value` AS `Value2`, `o2`.`Value` AS `Value3` +FROM `OperatorEntityLong` AS `o`, +`OperatorEntityLong` AS `o0`, +`OperatorEntityLong` AS `o1`, +`OperatorEntityLong` AS `o2` +WHERE (((`o0`.`Value` MOD 2) / `o`.`Value`) BAND (((`o2`.`Value` BOR `o1`.`Value`) - `o`.`Value`) - (`o1`.`Value` * `o1`.`Value`))) >= (((`o0`.`Value` / (BNOT`o2`.`Value`)) MOD 2) MOD ( (BNOT`o`.`Value`) + 1)) +ORDER BY `o`.`Id`, `o0`.`Id`, `o1`.`Id`, `o2`.`Id` +"""); } public override async Task Complex_predicate_with_bitwise_and_arithmetic_operations() { await base.Complex_predicate_with_bitwise_and_arithmetic_operations(); - AssertSql(""); + AssertSql( + """ +SELECT `o`.`Value` AS `Value0`, `o0`.`Value` AS `Value1`, `o1`.`Value` AS `Value2` +FROM `OperatorEntityInt` AS `o`, +`OperatorEntityInt` AS `o0`, +`OperatorEntityBool` AS `o1` +WHERE (((`o0`.`Value` BAND (`o`.`Value` + `o`.`Value`)) BAND `o`.`Value`) \ 1) > (`o0`.`Value` BAND 10) AND `o1`.`Value` = TRUE +ORDER BY `o`.`Id`, `o0`.`Id`, `o1`.`Id` +"""); } public override async Task Projection_with_not_and_negation_on_integer() diff --git a/test/EFCore.Jet.FunctionalTests/Query/OptionalDependentQueryJetFixture.cs b/test/EFCore.Jet.FunctionalTests/Query/OptionalDependentQueryJetFixture.cs new file mode 100644 index 00000000..b1a934eb --- /dev/null +++ b/test/EFCore.Jet.FunctionalTests/Query/OptionalDependentQueryJetFixture.cs @@ -0,0 +1,16 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using EntityFrameworkCore.Jet.FunctionalTests.TestUtilities; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.TestUtilities; + +namespace EntityFrameworkCore.Jet.FunctionalTests.Query; + +#nullable disable + +public class OptionalDependentQueryJetFixture : OptionalDependentQueryFixtureBase +{ + protected override ITestStoreFactory TestStoreFactory + => JetTestStoreFactory.Instance; +} diff --git a/test/EFCore.Jet.FunctionalTests/Query/OptionalDependentQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/OptionalDependentQueryJetTest.cs new file mode 100644 index 00000000..54467798 --- /dev/null +++ b/test/EFCore.Jet.FunctionalTests/Query/OptionalDependentQueryJetTest.cs @@ -0,0 +1,140 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore.Query; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.Jet.FunctionalTests.Query; + +#nullable disable + +public class OptionalDependentQueryJetTest : OptionalDependentQueryTestBase +{ + public OptionalDependentQueryJetTest(OptionalDependentQueryJetFixture fixture, ITestOutputHelper testOutputHelper) + : base(fixture) + { + Fixture.TestSqlLoggerFactory.Clear(); + Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); + } + public override async Task Basic_projection_entity_with_all_optional(bool async) + { + await base.Basic_projection_entity_with_all_optional(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Name`, `e`.`Json` +FROM `EntitiesAllOptional` AS `e` +"""); + } + + public override async Task Basic_projection_entity_with_some_required(bool async) + { + await base.Basic_projection_entity_with_some_required(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Name`, `e`.`Json` +FROM `EntitiesSomeRequired` AS `e` +"""); + } + + public override async Task Filter_optional_dependent_with_all_optional_compared_to_null(bool async) + { + await base.Filter_optional_dependent_with_all_optional_compared_to_null(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Name`, `e`.`Json` +FROM `EntitiesAllOptional` AS `e` +WHERE (`e`.`Json`) IS NULL +"""); + } + + public override async Task Filter_optional_dependent_with_all_optional_compared_to_not_null(bool async) + { + await base.Filter_optional_dependent_with_all_optional_compared_to_not_null(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Name`, `e`.`Json` +FROM `EntitiesAllOptional` AS `e` +WHERE (`e`.`Json`) IS NOT NULL +"""); + } + + public override async Task Filter_optional_dependent_with_some_required_compared_to_null(bool async) + { + await base.Filter_optional_dependent_with_some_required_compared_to_null(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Name`, `e`.`Json` +FROM `EntitiesSomeRequired` AS `e` +WHERE (`e`.`Json`) IS NULL +"""); + } + + public override async Task Filter_optional_dependent_with_some_required_compared_to_not_null(bool async) + { + await base.Filter_optional_dependent_with_some_required_compared_to_not_null(async); + + AssertSql( + """ +SELECT `e`.`Id`, `e`.`Name`, `e`.`Json` +FROM `EntitiesSomeRequired` AS `e` +WHERE (`e`.`Json`) IS NOT NULL +"""); + } + + public override async Task Filter_nested_optional_dependent_with_all_optional_compared_to_null(bool async) + { + await base.Filter_nested_optional_dependent_with_all_optional_compared_to_null(async); + + AssertSql( + """ +SELECT [e].[Id], [e].[Name], [e].[Json] +FROM [EntitiesAllOptional] AS [e] +WHERE JSON_QUERY([e].[Json], '$.OpNav1') IS NULL +"""); + } + + public override async Task Filter_nested_optional_dependent_with_all_optional_compared_to_not_null(bool async) + { + await base.Filter_nested_optional_dependent_with_all_optional_compared_to_not_null(async); + + AssertSql( + """ +SELECT [e].[Id], [e].[Name], [e].[Json] +FROM [EntitiesAllOptional] AS [e] +WHERE JSON_QUERY([e].[Json], '$.OpNav2') IS NOT NULL +"""); + } + + public override async Task Filter_nested_optional_dependent_with_some_required_compared_to_null(bool async) + { + await base.Filter_nested_optional_dependent_with_some_required_compared_to_null(async); + + AssertSql( + """ +SELECT [e].[Id], [e].[Name], [e].[Json] +FROM [EntitiesSomeRequired] AS [e] +WHERE JSON_QUERY([e].[Json], '$.ReqNav1') IS NULL +"""); + } + + public override async Task Filter_nested_optional_dependent_with_some_required_compared_to_not_null(bool async) + { + await base.Filter_nested_optional_dependent_with_some_required_compared_to_not_null(async); + + AssertSql( + """ +SELECT [e].[Id], [e].[Name], [e].[Json] +FROM [EntitiesSomeRequired] AS [e] +WHERE JSON_QUERY([e].[Json], '$.ReqNav2') IS NOT NULL +"""); + } + + private void AssertSql(params string[] expected) + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); +} diff --git a/test/EFCore.Jet.FunctionalTests/Query/OwnedEntityQuerySqlServerTest.cs b/test/EFCore.Jet.FunctionalTests/Query/OwnedEntityQueryJetTest.cs similarity index 89% rename from test/EFCore.Jet.FunctionalTests/Query/OwnedEntityQuerySqlServerTest.cs rename to test/EFCore.Jet.FunctionalTests/Query/OwnedEntityQueryJetTest.cs index 9d0120d0..0e8d6093 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/OwnedEntityQuerySqlServerTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/OwnedEntityQueryJetTest.cs @@ -49,26 +49,26 @@ public override async Task Multiple_owned_reference_mapped_to_own_table_containi await base.Multiple_owned_reference_mapped_to_own_table_containing_owned_collection_in_split_query(async); AssertSql( -""" + """ SELECT TOP 2 `r`.`Id`, `m`.`Id`, `m`.`Enabled`, `m`.`RootId`, `m0`.`Id`, `m0`.`RootId` -FROM (`Root24777` AS `r` -LEFT JOIN `MiddleB24777` AS `m` ON `r`.`Id` = `m`.`RootId`) -LEFT JOIN `ModdleA24777` AS `m0` ON `r`.`Id` = `m0`.`RootId` +FROM (`Root` AS `r` +LEFT JOIN `MiddleB` AS `m` ON `r`.`Id` = `m`.`RootId`) +LEFT JOIN `ModdleA` AS `m0` ON `r`.`Id` = `m0`.`RootId` WHERE `r`.`Id` = 3 ORDER BY `r`.`Id`, `m`.`Id`, `m0`.`Id` """, -// -""" -SELECT `l`.`ModdleAId`, `l`.`UnitThreshold`, `t`.`Id`, `t`.`Id0`, `t`.`Id1` + // + """ +SELECT `l0`.`ModdleAId`, `l0`.`UnitThreshold`, `s`.`Id`, `s`.`Id0`, `s`.`Id1` FROM ( SELECT TOP 1 `r`.`Id`, `m`.`Id` AS `Id0`, `m0`.`Id` AS `Id1` - FROM (`Root24777` AS `r` - LEFT JOIN `MiddleB24777` AS `m` ON `r`.`Id` = `m`.`RootId`) - LEFT JOIN `ModdleA24777` AS `m0` ON `r`.`Id` = `m0`.`RootId` + FROM (`Root` AS `r` + LEFT JOIN `MiddleB` AS `m` ON `r`.`Id` = `m`.`RootId`) + LEFT JOIN `ModdleA` AS `m0` ON `r`.`Id` = `m0`.`RootId` WHERE `r`.`Id` = 3 -) AS `t` -INNER JOIN `Leaf24777` AS `l` ON `t`.`Id1` = `l`.`ModdleAId` -ORDER BY `t`.`Id`, `t`.`Id0`, `t`.`Id1` +) AS `s` +INNER JOIN `Leaf` AS `l0` ON `s`.`Id1` = `l0`.`ModdleAId` +ORDER BY `s`.`Id`, `s`.`Id0`, `s`.`Id1` """); } @@ -77,13 +77,13 @@ public override async Task Projecting_owned_collection_and_aggregate(bool async) await base.Projecting_owned_collection_and_aggregate(async); AssertSql( -""" + """ SELECT `b`.`Id`, ( SELECT IIF(SUM(`p`.`CommentsCount`) IS NULL, 0, SUM(`p`.`CommentsCount`)) - FROM `Post24133` AS `p` + FROM `Post` AS `p` WHERE `b`.`Id` = `p`.`BlogId`), `p0`.`Title`, `p0`.`CommentsCount`, `p0`.`BlogId`, `p0`.`Id` -FROM `Blog24133` AS `b` -LEFT JOIN `Post24133` AS `p0` ON `b`.`Id` = `p0`.`BlogId` +FROM `Blog` AS `b` +LEFT JOIN `Post` AS `p0` ON `b`.`Id` = `p0`.`BlogId` ORDER BY `b`.`Id`, `p0`.`BlogId` """); } @@ -211,15 +211,15 @@ public override async Task Join_selects_with_duplicating_aliases_and_owned_expan await base.Join_selects_with_duplicating_aliases_and_owned_expansion_uniquifies_correctly(async); AssertSql( -""" -SELECT `m`.`Id`, `m`.`Name`, `m`.`RulerOf`, `t`.`Id`, `t`.`Affiliation`, `t`.`Name`, `t`.`Magus30358Id`, `t`.`Name0` + """ +SELECT `m`.`Id`, `m`.`Name`, `m`.`RulerOf`, `m1`.`Id`, `m1`.`Affiliation`, `m1`.`Name`, `m1`.`MagusId`, `m1`.`Name0` FROM `Monarchs` AS `m` INNER JOIN ( - SELECT `m0`.`Id`, `m0`.`Affiliation`, `m0`.`Name`, `m1`.`Magus30358Id`, `m1`.`Name` AS `Name0` + SELECT `m0`.`Id`, `m0`.`Affiliation`, `m0`.`Name`, `m2`.`MagusId`, `m2`.`Name` AS `Name0` FROM `Magi` AS `m0` - LEFT JOIN `MagicTools` AS `m1` ON `m0`.`Id` = `m1`.`Magus30358Id` + LEFT JOIN `MagicTools` AS `m2` ON `m0`.`Id` = `m2`.`MagusId` WHERE `m0`.`Name` LIKE '%Bayaz%' -) AS `t` ON `m`.`RulerOf` = `t`.`Affiliation` +) AS `m1` ON `m`.`RulerOf` = `m1`.`Affiliation` """); } } diff --git a/test/EFCore.Jet.FunctionalTests/Query/OwnedQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/OwnedQueryJetTest.cs index c4630174..a245dde9 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/OwnedQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/OwnedQueryJetTest.cs @@ -44,14 +44,14 @@ public override async Task Query_for_base_type_loads_all_owned_navs(bool isAsync AssertSql( """ -SELECT `o`.`Id`, `o`.`Discriminator`, `o`.`Name`, `t`.`ClientId`, `t`.`Id`, `t`.`OrderDate`, `t`.`OrderClientId`, `t`.`OrderId`, `t`.`Id0`, `t`.`Detail`, `o`.`PersonAddress_AddressLine`, `o`.`PersonAddress_PlaceType`, `o`.`PersonAddress_ZipCode`, `o`.`PersonAddress_Country_Name`, `o`.`PersonAddress_Country_PlanetId`, `o`.`BranchAddress_BranchName`, `o`.`BranchAddress_PlaceType`, `o`.`BranchAddress_Country_Name`, `o`.`BranchAddress_Country_PlanetId`, `o`.`LeafBAddress_LeafBType`, `o`.`LeafBAddress_PlaceType`, `o`.`LeafBAddress_Country_Name`, `o`.`LeafBAddress_Country_PlanetId`, `o`.`LeafAAddress_LeafType`, `o`.`LeafAAddress_PlaceType`, `o`.`LeafAAddress_Country_Name`, `o`.`LeafAAddress_Country_PlanetId` +SELECT `o`.`Id`, `o`.`Discriminator`, `o`.`Name`, `s`.`ClientId`, `s`.`Id`, `s`.`OrderDate`, `s`.`OrderClientId`, `s`.`OrderId`, `s`.`Id0`, `s`.`Detail`, `o`.`PersonAddress_AddressLine`, `o`.`PersonAddress_PlaceType`, `o`.`PersonAddress_ZipCode`, `o`.`PersonAddress_Country_Name`, `o`.`PersonAddress_Country_PlanetId`, `o`.`BranchAddress_BranchName`, `o`.`BranchAddress_PlaceType`, `o`.`BranchAddress_Country_Name`, `o`.`BranchAddress_Country_PlanetId`, `o`.`LeafBAddress_LeafBType`, `o`.`LeafBAddress_PlaceType`, `o`.`LeafBAddress_Country_Name`, `o`.`LeafBAddress_Country_PlanetId`, `o`.`LeafAAddress_LeafType`, `o`.`LeafAAddress_PlaceType`, `o`.`LeafAAddress_Country_Name`, `o`.`LeafAAddress_Country_PlanetId` FROM `OwnedPerson` AS `o` LEFT JOIN ( SELECT `o0`.`ClientId`, `o0`.`Id`, `o0`.`OrderDate`, `o1`.`OrderClientId`, `o1`.`OrderId`, `o1`.`Id` AS `Id0`, `o1`.`Detail` FROM `Order` AS `o0` LEFT JOIN `OrderDetail` AS `o1` ON `o0`.`ClientId` = `o1`.`OrderClientId` AND `o0`.`Id` = `o1`.`OrderId` -) AS `t` ON `o`.`Id` = `t`.`ClientId` -ORDER BY `o`.`Id`, `t`.`ClientId`, `t`.`Id`, `t`.`OrderClientId`, `t`.`OrderId` +) AS `s` ON `o`.`Id` = `s`.`ClientId` +ORDER BY `o`.`Id`, `s`.`ClientId`, `s`.`Id`, `s`.`OrderClientId`, `s`.`OrderId` """); } @@ -70,15 +70,15 @@ public override async Task Query_for_branch_type_loads_all_owned_navs(bool isAsy AssertSql( """ -SELECT `o`.`Id`, `o`.`Discriminator`, `o`.`Name`, `t`.`ClientId`, `t`.`Id`, `t`.`OrderDate`, `t`.`OrderClientId`, `t`.`OrderId`, `t`.`Id0`, `t`.`Detail`, `o`.`PersonAddress_AddressLine`, `o`.`PersonAddress_PlaceType`, `o`.`PersonAddress_ZipCode`, `o`.`PersonAddress_Country_Name`, `o`.`PersonAddress_Country_PlanetId`, `o`.`BranchAddress_BranchName`, `o`.`BranchAddress_PlaceType`, `o`.`BranchAddress_Country_Name`, `o`.`BranchAddress_Country_PlanetId`, `o`.`LeafAAddress_LeafType`, `o`.`LeafAAddress_PlaceType`, `o`.`LeafAAddress_Country_Name`, `o`.`LeafAAddress_Country_PlanetId` +SELECT `o`.`Id`, `o`.`Discriminator`, `o`.`Name`, `s`.`ClientId`, `s`.`Id`, `s`.`OrderDate`, `s`.`OrderClientId`, `s`.`OrderId`, `s`.`Id0`, `s`.`Detail`, `o`.`PersonAddress_AddressLine`, `o`.`PersonAddress_PlaceType`, `o`.`PersonAddress_ZipCode`, `o`.`PersonAddress_Country_Name`, `o`.`PersonAddress_Country_PlanetId`, `o`.`BranchAddress_BranchName`, `o`.`BranchAddress_PlaceType`, `o`.`BranchAddress_Country_Name`, `o`.`BranchAddress_Country_PlanetId`, `o`.`LeafAAddress_LeafType`, `o`.`LeafAAddress_PlaceType`, `o`.`LeafAAddress_Country_Name`, `o`.`LeafAAddress_Country_PlanetId` FROM `OwnedPerson` AS `o` LEFT JOIN ( SELECT `o0`.`ClientId`, `o0`.`Id`, `o0`.`OrderDate`, `o1`.`OrderClientId`, `o1`.`OrderId`, `o1`.`Id` AS `Id0`, `o1`.`Detail` FROM `Order` AS `o0` LEFT JOIN `OrderDetail` AS `o1` ON `o0`.`ClientId` = `o1`.`OrderClientId` AND `o0`.`Id` = `o1`.`OrderId` -) AS `t` ON `o`.`Id` = `t`.`ClientId` +) AS `s` ON `o`.`Id` = `s`.`ClientId` WHERE `o`.`Discriminator` IN ('Branch', 'LeafA') -ORDER BY `o`.`Id`, `t`.`ClientId`, `t`.`Id`, `t`.`OrderClientId`, `t`.`OrderId` +ORDER BY `o`.`Id`, `s`.`ClientId`, `s`.`Id`, `s`.`OrderClientId`, `s`.`OrderId` """); } @@ -88,15 +88,15 @@ public override async Task Query_for_branch_type_loads_all_owned_navs_tracking(b AssertSql( """ -SELECT `o`.`Id`, `o`.`Discriminator`, `o`.`Name`, `t`.`ClientId`, `t`.`Id`, `t`.`OrderDate`, `t`.`OrderClientId`, `t`.`OrderId`, `t`.`Id0`, `t`.`Detail`, `o`.`PersonAddress_AddressLine`, `o`.`PersonAddress_PlaceType`, `o`.`PersonAddress_ZipCode`, `o`.`PersonAddress_Country_Name`, `o`.`PersonAddress_Country_PlanetId`, `o`.`BranchAddress_BranchName`, `o`.`BranchAddress_PlaceType`, `o`.`BranchAddress_Country_Name`, `o`.`BranchAddress_Country_PlanetId`, `o`.`LeafAAddress_LeafType`, `o`.`LeafAAddress_PlaceType`, `o`.`LeafAAddress_Country_Name`, `o`.`LeafAAddress_Country_PlanetId` +SELECT `o`.`Id`, `o`.`Discriminator`, `o`.`Name`, `s`.`ClientId`, `s`.`Id`, `s`.`OrderDate`, `s`.`OrderClientId`, `s`.`OrderId`, `s`.`Id0`, `s`.`Detail`, `o`.`PersonAddress_AddressLine`, `o`.`PersonAddress_PlaceType`, `o`.`PersonAddress_ZipCode`, `o`.`PersonAddress_Country_Name`, `o`.`PersonAddress_Country_PlanetId`, `o`.`BranchAddress_BranchName`, `o`.`BranchAddress_PlaceType`, `o`.`BranchAddress_Country_Name`, `o`.`BranchAddress_Country_PlanetId`, `o`.`LeafAAddress_LeafType`, `o`.`LeafAAddress_PlaceType`, `o`.`LeafAAddress_Country_Name`, `o`.`LeafAAddress_Country_PlanetId` FROM `OwnedPerson` AS `o` LEFT JOIN ( SELECT `o0`.`ClientId`, `o0`.`Id`, `o0`.`OrderDate`, `o1`.`OrderClientId`, `o1`.`OrderId`, `o1`.`Id` AS `Id0`, `o1`.`Detail` FROM `Order` AS `o0` LEFT JOIN `OrderDetail` AS `o1` ON `o0`.`ClientId` = `o1`.`OrderClientId` AND `o0`.`Id` = `o1`.`OrderId` -) AS `t` ON `o`.`Id` = `t`.`ClientId` +) AS `s` ON `o`.`Id` = `s`.`ClientId` WHERE `o`.`Discriminator` IN ('Branch', 'LeafA') -ORDER BY `o`.`Id`, `t`.`ClientId`, `t`.`Id`, `t`.`OrderClientId`, `t`.`OrderId` +ORDER BY `o`.`Id`, `s`.`ClientId`, `s`.`Id`, `s`.`OrderClientId`, `s`.`OrderId` """); } @@ -106,15 +106,15 @@ public override async Task Query_for_leaf_type_loads_all_owned_navs(bool isAsync AssertSql( """ -SELECT `o`.`Id`, `o`.`Discriminator`, `o`.`Name`, `t`.`ClientId`, `t`.`Id`, `t`.`OrderDate`, `t`.`OrderClientId`, `t`.`OrderId`, `t`.`Id0`, `t`.`Detail`, `o`.`PersonAddress_AddressLine`, `o`.`PersonAddress_PlaceType`, `o`.`PersonAddress_ZipCode`, `o`.`PersonAddress_Country_Name`, `o`.`PersonAddress_Country_PlanetId`, `o`.`BranchAddress_BranchName`, `o`.`BranchAddress_PlaceType`, `o`.`BranchAddress_Country_Name`, `o`.`BranchAddress_Country_PlanetId`, `o`.`LeafAAddress_LeafType`, `o`.`LeafAAddress_PlaceType`, `o`.`LeafAAddress_Country_Name`, `o`.`LeafAAddress_Country_PlanetId` +SELECT `o`.`Id`, `o`.`Discriminator`, `o`.`Name`, `s`.`ClientId`, `s`.`Id`, `s`.`OrderDate`, `s`.`OrderClientId`, `s`.`OrderId`, `s`.`Id0`, `s`.`Detail`, `o`.`PersonAddress_AddressLine`, `o`.`PersonAddress_PlaceType`, `o`.`PersonAddress_ZipCode`, `o`.`PersonAddress_Country_Name`, `o`.`PersonAddress_Country_PlanetId`, `o`.`BranchAddress_BranchName`, `o`.`BranchAddress_PlaceType`, `o`.`BranchAddress_Country_Name`, `o`.`BranchAddress_Country_PlanetId`, `o`.`LeafAAddress_LeafType`, `o`.`LeafAAddress_PlaceType`, `o`.`LeafAAddress_Country_Name`, `o`.`LeafAAddress_Country_PlanetId` FROM `OwnedPerson` AS `o` LEFT JOIN ( SELECT `o0`.`ClientId`, `o0`.`Id`, `o0`.`OrderDate`, `o1`.`OrderClientId`, `o1`.`OrderId`, `o1`.`Id` AS `Id0`, `o1`.`Detail` FROM `Order` AS `o0` LEFT JOIN `OrderDetail` AS `o1` ON `o0`.`ClientId` = `o1`.`OrderClientId` AND `o0`.`Id` = `o1`.`OrderId` -) AS `t` ON `o`.`Id` = `t`.`ClientId` +) AS `s` ON `o`.`Id` = `s`.`ClientId` WHERE `o`.`Discriminator` = 'LeafA' -ORDER BY `o`.`Id`, `t`.`ClientId`, `t`.`Id`, `t`.`OrderClientId`, `t`.`OrderId` +ORDER BY `o`.`Id`, `s`.`ClientId`, `s`.`Id`, `s`.`OrderClientId`, `s`.`OrderId` """); } @@ -123,22 +123,22 @@ public override async Task Query_when_subquery(bool isAsync) await base.Query_when_subquery(isAsync); AssertSql( -""" -SELECT `t0`.`Id`, `t0`.`Discriminator`, `t0`.`Name`, `t1`.`ClientId`, `t1`.`Id`, `t1`.`OrderDate`, `t1`.`OrderClientId`, `t1`.`OrderId`, `t1`.`Id0`, `t1`.`Detail`, `t0`.`PersonAddress_AddressLine`, `t0`.`PersonAddress_PlaceType`, `t0`.`PersonAddress_ZipCode`, `t0`.`PersonAddress_Country_Name`, `t0`.`PersonAddress_Country_PlanetId`, `t0`.`BranchAddress_BranchName`, `t0`.`BranchAddress_PlaceType`, `t0`.`BranchAddress_Country_Name`, `t0`.`BranchAddress_Country_PlanetId`, `t0`.`LeafBAddress_LeafBType`, `t0`.`LeafBAddress_PlaceType`, `t0`.`LeafBAddress_Country_Name`, `t0`.`LeafBAddress_Country_PlanetId`, `t0`.`LeafAAddress_LeafType`, `t0`.`LeafAAddress_PlaceType`, `t0`.`LeafAAddress_Country_Name`, `t0`.`LeafAAddress_Country_PlanetId` + """ +SELECT `o3`.`Id`, `o3`.`Discriminator`, `o3`.`Name`, `s`.`ClientId`, `s`.`Id`, `s`.`OrderDate`, `s`.`OrderClientId`, `s`.`OrderId`, `s`.`Id0`, `s`.`Detail`, `o3`.`PersonAddress_AddressLine`, `o3`.`PersonAddress_PlaceType`, `o3`.`PersonAddress_ZipCode`, `o3`.`PersonAddress_Country_Name`, `o3`.`PersonAddress_Country_PlanetId`, `o3`.`BranchAddress_BranchName`, `o3`.`BranchAddress_PlaceType`, `o3`.`BranchAddress_Country_Name`, `o3`.`BranchAddress_Country_PlanetId`, `o3`.`LeafBAddress_LeafBType`, `o3`.`LeafBAddress_PlaceType`, `o3`.`LeafBAddress_Country_Name`, `o3`.`LeafBAddress_Country_PlanetId`, `o3`.`LeafAAddress_LeafType`, `o3`.`LeafAAddress_PlaceType`, `o3`.`LeafAAddress_Country_Name`, `o3`.`LeafAAddress_Country_PlanetId` FROM ( - SELECT TOP 5 `t`.`Id`, `t`.`Discriminator`, `t`.`Name`, `t`.`PersonAddress_AddressLine`, `t`.`PersonAddress_PlaceType`, `t`.`PersonAddress_ZipCode`, `t`.`PersonAddress_Country_Name`, `t`.`PersonAddress_Country_PlanetId`, `t`.`BranchAddress_BranchName`, `t`.`BranchAddress_PlaceType`, `t`.`BranchAddress_Country_Name`, `t`.`BranchAddress_Country_PlanetId`, `t`.`LeafBAddress_LeafBType`, `t`.`LeafBAddress_PlaceType`, `t`.`LeafBAddress_Country_Name`, `t`.`LeafBAddress_Country_PlanetId`, `t`.`LeafAAddress_LeafType`, `t`.`LeafAAddress_PlaceType`, `t`.`LeafAAddress_Country_Name`, `t`.`LeafAAddress_Country_PlanetId` + SELECT TOP 5 `o0`.`Id`, `o0`.`Discriminator`, `o0`.`Name`, `o0`.`PersonAddress_AddressLine`, `o0`.`PersonAddress_PlaceType`, `o0`.`PersonAddress_ZipCode`, `o0`.`PersonAddress_Country_Name`, `o0`.`PersonAddress_Country_PlanetId`, `o0`.`BranchAddress_BranchName`, `o0`.`BranchAddress_PlaceType`, `o0`.`BranchAddress_Country_Name`, `o0`.`BranchAddress_Country_PlanetId`, `o0`.`LeafBAddress_LeafBType`, `o0`.`LeafBAddress_PlaceType`, `o0`.`LeafBAddress_Country_Name`, `o0`.`LeafBAddress_Country_PlanetId`, `o0`.`LeafAAddress_LeafType`, `o0`.`LeafAAddress_PlaceType`, `o0`.`LeafAAddress_Country_Name`, `o0`.`LeafAAddress_Country_PlanetId` FROM ( SELECT DISTINCT `o`.`Id`, `o`.`Discriminator`, `o`.`Name`, `o`.`PersonAddress_AddressLine`, `o`.`PersonAddress_PlaceType`, `o`.`PersonAddress_ZipCode`, `o`.`PersonAddress_Country_Name`, `o`.`PersonAddress_Country_PlanetId`, `o`.`BranchAddress_BranchName`, `o`.`BranchAddress_PlaceType`, `o`.`BranchAddress_Country_Name`, `o`.`BranchAddress_Country_PlanetId`, `o`.`LeafBAddress_LeafBType`, `o`.`LeafBAddress_PlaceType`, `o`.`LeafBAddress_Country_Name`, `o`.`LeafBAddress_Country_PlanetId`, `o`.`LeafAAddress_LeafType`, `o`.`LeafAAddress_PlaceType`, `o`.`LeafAAddress_Country_Name`, `o`.`LeafAAddress_Country_PlanetId` FROM `OwnedPerson` AS `o` - ) AS `t` - ORDER BY `t`.`Id` -) AS `t0` + ) AS `o0` + ORDER BY `o0`.`Id` +) AS `o3` LEFT JOIN ( - SELECT `o0`.`ClientId`, `o0`.`Id`, `o0`.`OrderDate`, `o1`.`OrderClientId`, `o1`.`OrderId`, `o1`.`Id` AS `Id0`, `o1`.`Detail` - FROM `Order` AS `o0` - LEFT JOIN `OrderDetail` AS `o1` ON `o0`.`ClientId` = `o1`.`OrderClientId` AND `o0`.`Id` = `o1`.`OrderId` -) AS `t1` ON `t0`.`Id` = `t1`.`ClientId` -ORDER BY `t0`.`Id`, `t1`.`ClientId`, `t1`.`Id`, `t1`.`OrderClientId`, `t1`.`OrderId` + SELECT `o1`.`ClientId`, `o1`.`Id`, `o1`.`OrderDate`, `o2`.`OrderClientId`, `o2`.`OrderId`, `o2`.`Id` AS `Id0`, `o2`.`Detail` + FROM `Order` AS `o1` + LEFT JOIN `OrderDetail` AS `o2` ON `o1`.`ClientId` = `o2`.`OrderClientId` AND `o1`.`Id` = `o2`.`OrderId` +) AS `s` ON `o3`.`Id` = `s`.`ClientId` +ORDER BY `o3`.`Id`, `s`.`ClientId`, `s`.`Id`, `s`.`OrderClientId`, `s`.`OrderId` """); } @@ -158,15 +158,15 @@ public override async Task Navigation_rewrite_on_owned_reference_projecting_enti AssertSql( """ -SELECT `o`.`Id`, `o`.`Discriminator`, `o`.`Name`, `t`.`ClientId`, `t`.`Id`, `t`.`OrderDate`, `t`.`OrderClientId`, `t`.`OrderId`, `t`.`Id0`, `t`.`Detail`, `o`.`PersonAddress_AddressLine`, `o`.`PersonAddress_PlaceType`, `o`.`PersonAddress_ZipCode`, `o`.`PersonAddress_Country_Name`, `o`.`PersonAddress_Country_PlanetId`, `o`.`BranchAddress_BranchName`, `o`.`BranchAddress_PlaceType`, `o`.`BranchAddress_Country_Name`, `o`.`BranchAddress_Country_PlanetId`, `o`.`LeafBAddress_LeafBType`, `o`.`LeafBAddress_PlaceType`, `o`.`LeafBAddress_Country_Name`, `o`.`LeafBAddress_Country_PlanetId`, `o`.`LeafAAddress_LeafType`, `o`.`LeafAAddress_PlaceType`, `o`.`LeafAAddress_Country_Name`, `o`.`LeafAAddress_Country_PlanetId` +SELECT `o`.`Id`, `o`.`Discriminator`, `o`.`Name`, `s`.`ClientId`, `s`.`Id`, `s`.`OrderDate`, `s`.`OrderClientId`, `s`.`OrderId`, `s`.`Id0`, `s`.`Detail`, `o`.`PersonAddress_AddressLine`, `o`.`PersonAddress_PlaceType`, `o`.`PersonAddress_ZipCode`, `o`.`PersonAddress_Country_Name`, `o`.`PersonAddress_Country_PlanetId`, `o`.`BranchAddress_BranchName`, `o`.`BranchAddress_PlaceType`, `o`.`BranchAddress_Country_Name`, `o`.`BranchAddress_Country_PlanetId`, `o`.`LeafBAddress_LeafBType`, `o`.`LeafBAddress_PlaceType`, `o`.`LeafBAddress_Country_Name`, `o`.`LeafBAddress_Country_PlanetId`, `o`.`LeafAAddress_LeafType`, `o`.`LeafAAddress_PlaceType`, `o`.`LeafAAddress_Country_Name`, `o`.`LeafAAddress_Country_PlanetId` FROM `OwnedPerson` AS `o` LEFT JOIN ( SELECT `o0`.`ClientId`, `o0`.`Id`, `o0`.`OrderDate`, `o1`.`OrderClientId`, `o1`.`OrderId`, `o1`.`Id` AS `Id0`, `o1`.`Detail` FROM `Order` AS `o0` LEFT JOIN `OrderDetail` AS `o1` ON `o0`.`ClientId` = `o1`.`OrderClientId` AND `o0`.`Id` = `o1`.`OrderId` -) AS `t` ON `o`.`Id` = `t`.`ClientId` +) AS `s` ON `o`.`Id` = `s`.`ClientId` WHERE `o`.`PersonAddress_Country_Name` = 'USA' -ORDER BY `o`.`Id`, `t`.`ClientId`, `t`.`Id`, `t`.`OrderClientId`, `t`.`OrderId` +ORDER BY `o`.`Id`, `s`.`ClientId`, `s`.`Id`, `s`.`OrderClientId`, `s`.`OrderId` """); } @@ -176,18 +176,18 @@ public override async Task Navigation_rewrite_on_owned_collection(bool isAsync) AssertSql( """ -SELECT `o`.`Id`, `t`.`ClientId`, `t`.`Id`, `t`.`OrderDate`, `t`.`OrderClientId`, `t`.`OrderId`, `t`.`Id0`, `t`.`Detail` +SELECT `o`.`Id`, `s`.`ClientId`, `s`.`Id`, `s`.`OrderDate`, `s`.`OrderClientId`, `s`.`OrderId`, `s`.`Id0`, `s`.`Detail` FROM `OwnedPerson` AS `o` LEFT JOIN ( SELECT `o1`.`ClientId`, `o1`.`Id`, `o1`.`OrderDate`, `o2`.`OrderClientId`, `o2`.`OrderId`, `o2`.`Id` AS `Id0`, `o2`.`Detail` FROM `Order` AS `o1` LEFT JOIN `OrderDetail` AS `o2` ON `o1`.`ClientId` = `o2`.`OrderClientId` AND `o1`.`Id` = `o2`.`OrderId` -) AS `t` ON `o`.`Id` = `t`.`ClientId` +) AS `s` ON `o`.`Id` = `s`.`ClientId` WHERE ( SELECT COUNT(*) FROM `Order` AS `o0` WHERE `o`.`Id` = `o0`.`ClientId`) > 0 -ORDER BY `o`.`Id`, `t`.`ClientId`, `t`.`Id`, `t`.`OrderClientId`, `t`.`OrderId` +ORDER BY `o`.`Id`, `s`.`ClientId`, `s`.`Id`, `s`.`OrderClientId`, `s`.`OrderId` """); } @@ -252,17 +252,17 @@ public override async Task Filter_owned_entity_chained_with_regular_entity_follo await base.Filter_owned_entity_chained_with_regular_entity_followed_by_projecting_owned_collection(isAsync); AssertSql( -""" -SELECT `o`.`Id`, `p`.`Id`, `t`.`ClientId`, `t`.`Id`, `t`.`OrderDate`, `t`.`OrderClientId`, `t`.`OrderId`, `t`.`Id0`, `t`.`Detail` + """ +SELECT `o`.`Id`, `p`.`Id`, `s`.`ClientId`, `s`.`Id`, `s`.`OrderDate`, `s`.`OrderClientId`, `s`.`OrderId`, `s`.`Id0`, `s`.`Detail` FROM (`OwnedPerson` AS `o` LEFT JOIN `Planet` AS `p` ON `o`.`PersonAddress_Country_PlanetId` = `p`.`Id`) LEFT JOIN ( SELECT `o0`.`ClientId`, `o0`.`Id`, `o0`.`OrderDate`, `o1`.`OrderClientId`, `o1`.`OrderId`, `o1`.`Id` AS `Id0`, `o1`.`Detail` FROM `Order` AS `o0` LEFT JOIN `OrderDetail` AS `o1` ON `o0`.`ClientId` = `o1`.`OrderClientId` AND `o0`.`Id` = `o1`.`OrderId` -) AS `t` ON `o`.`Id` = `t`.`ClientId` +) AS `s` ON `o`.`Id` = `s`.`ClientId` WHERE `p`.`Id` <> 42 OR `p`.`Id` IS NULL -ORDER BY `o`.`Id`, `p`.`Id`, `t`.`ClientId`, `t`.`Id`, `t`.`OrderClientId`, `t`.`OrderId` +ORDER BY `o`.`Id`, `p`.`Id`, `s`.`ClientId`, `s`.`Id`, `s`.`OrderClientId`, `s`.`OrderId` """); } @@ -272,15 +272,15 @@ public override async Task Project_multiple_owned_navigations(bool isAsync) AssertSql( """ -SELECT `o`.`Id`, `p`.`Id`, `t`.`ClientId`, `t`.`Id`, `t`.`OrderDate`, `t`.`OrderClientId`, `t`.`OrderId`, `t`.`Id0`, `t`.`Detail`, `o`.`PersonAddress_AddressLine`, `o`.`PersonAddress_PlaceType`, `o`.`PersonAddress_ZipCode`, `o`.`PersonAddress_Country_Name`, `o`.`PersonAddress_Country_PlanetId`, `p`.`Name`, `p`.`StarId` +SELECT `o`.`Id`, `p`.`Id`, `s`.`ClientId`, `s`.`Id`, `s`.`OrderDate`, `s`.`OrderClientId`, `s`.`OrderId`, `s`.`Id0`, `s`.`Detail`, `o`.`PersonAddress_AddressLine`, `o`.`PersonAddress_PlaceType`, `o`.`PersonAddress_ZipCode`, `o`.`PersonAddress_Country_Name`, `o`.`PersonAddress_Country_PlanetId`, `p`.`Name`, `p`.`StarId` FROM (`OwnedPerson` AS `o` LEFT JOIN `Planet` AS `p` ON `o`.`PersonAddress_Country_PlanetId` = `p`.`Id`) LEFT JOIN ( SELECT `o0`.`ClientId`, `o0`.`Id`, `o0`.`OrderDate`, `o1`.`OrderClientId`, `o1`.`OrderId`, `o1`.`Id` AS `Id0`, `o1`.`Detail` FROM `Order` AS `o0` LEFT JOIN `OrderDetail` AS `o1` ON `o0`.`ClientId` = `o1`.`OrderClientId` AND `o0`.`Id` = `o1`.`OrderId` -) AS `t` ON `o`.`Id` = `t`.`ClientId` -ORDER BY `o`.`Id`, `p`.`Id`, `t`.`ClientId`, `t`.`Id`, `t`.`OrderClientId`, `t`.`OrderId` +) AS `s` ON `o`.`Id` = `s`.`ClientId` +ORDER BY `o`.`Id`, `p`.`Id`, `s`.`ClientId`, `s`.`Id`, `s`.`OrderClientId`, `s`.`OrderId` """); } @@ -308,17 +308,17 @@ public override async Task Navigation_rewrite_on_owned_reference_followed_by_reg await base.Navigation_rewrite_on_owned_reference_followed_by_regular_entity_filter(isAsync); AssertSql( -""" -SELECT `o`.`Id`, `o`.`Discriminator`, `o`.`Name`, `p`.`Id`, `t`.`ClientId`, `t`.`Id`, `t`.`OrderDate`, `t`.`OrderClientId`, `t`.`OrderId`, `t`.`Id0`, `t`.`Detail`, `o`.`PersonAddress_AddressLine`, `o`.`PersonAddress_PlaceType`, `o`.`PersonAddress_ZipCode`, `o`.`PersonAddress_Country_Name`, `o`.`PersonAddress_Country_PlanetId`, `o`.`BranchAddress_BranchName`, `o`.`BranchAddress_PlaceType`, `o`.`BranchAddress_Country_Name`, `o`.`BranchAddress_Country_PlanetId`, `o`.`LeafBAddress_LeafBType`, `o`.`LeafBAddress_PlaceType`, `o`.`LeafBAddress_Country_Name`, `o`.`LeafBAddress_Country_PlanetId`, `o`.`LeafAAddress_LeafType`, `o`.`LeafAAddress_PlaceType`, `o`.`LeafAAddress_Country_Name`, `o`.`LeafAAddress_Country_PlanetId` + """ +SELECT `o`.`Id`, `o`.`Discriminator`, `o`.`Name`, `p`.`Id`, `s`.`ClientId`, `s`.`Id`, `s`.`OrderDate`, `s`.`OrderClientId`, `s`.`OrderId`, `s`.`Id0`, `s`.`Detail`, `o`.`PersonAddress_AddressLine`, `o`.`PersonAddress_PlaceType`, `o`.`PersonAddress_ZipCode`, `o`.`PersonAddress_Country_Name`, `o`.`PersonAddress_Country_PlanetId`, `o`.`BranchAddress_BranchName`, `o`.`BranchAddress_PlaceType`, `o`.`BranchAddress_Country_Name`, `o`.`BranchAddress_Country_PlanetId`, `o`.`LeafBAddress_LeafBType`, `o`.`LeafBAddress_PlaceType`, `o`.`LeafBAddress_Country_Name`, `o`.`LeafBAddress_Country_PlanetId`, `o`.`LeafAAddress_LeafType`, `o`.`LeafAAddress_PlaceType`, `o`.`LeafAAddress_Country_Name`, `o`.`LeafAAddress_Country_PlanetId` FROM (`OwnedPerson` AS `o` LEFT JOIN `Planet` AS `p` ON `o`.`PersonAddress_Country_PlanetId` = `p`.`Id`) LEFT JOIN ( SELECT `o0`.`ClientId`, `o0`.`Id`, `o0`.`OrderDate`, `o1`.`OrderClientId`, `o1`.`OrderId`, `o1`.`Id` AS `Id0`, `o1`.`Detail` FROM `Order` AS `o0` LEFT JOIN `OrderDetail` AS `o1` ON `o0`.`ClientId` = `o1`.`OrderClientId` AND `o0`.`Id` = `o1`.`OrderId` -) AS `t` ON `o`.`Id` = `t`.`ClientId` +) AS `s` ON `o`.`Id` = `s`.`ClientId` WHERE `p`.`Id` <> 7 OR `p`.`Id` IS NULL -ORDER BY `o`.`Id`, `p`.`Id`, `t`.`ClientId`, `t`.`Id`, `t`.`OrderClientId`, `t`.`OrderId` +ORDER BY `o`.`Id`, `p`.`Id`, `s`.`ClientId`, `s`.`Id`, `s`.`OrderClientId`, `s`.`OrderId` """); } @@ -420,15 +420,15 @@ public override async Task Query_with_OfType_eagerly_loads_correct_owned_navigat AssertSql( """ -SELECT `o`.`Id`, `o`.`Discriminator`, `o`.`Name`, `t`.`ClientId`, `t`.`Id`, `t`.`OrderDate`, `t`.`OrderClientId`, `t`.`OrderId`, `t`.`Id0`, `t`.`Detail`, `o`.`PersonAddress_AddressLine`, `o`.`PersonAddress_PlaceType`, `o`.`PersonAddress_ZipCode`, `o`.`PersonAddress_Country_Name`, `o`.`PersonAddress_Country_PlanetId`, `o`.`BranchAddress_BranchName`, `o`.`BranchAddress_PlaceType`, `o`.`BranchAddress_Country_Name`, `o`.`BranchAddress_Country_PlanetId`, `o`.`LeafAAddress_LeafType`, `o`.`LeafAAddress_PlaceType`, `o`.`LeafAAddress_Country_Name`, `o`.`LeafAAddress_Country_PlanetId` +SELECT `o`.`Id`, `o`.`Discriminator`, `o`.`Name`, `s`.`ClientId`, `s`.`Id`, `s`.`OrderDate`, `s`.`OrderClientId`, `s`.`OrderId`, `s`.`Id0`, `s`.`Detail`, `o`.`PersonAddress_AddressLine`, `o`.`PersonAddress_PlaceType`, `o`.`PersonAddress_ZipCode`, `o`.`PersonAddress_Country_Name`, `o`.`PersonAddress_Country_PlanetId`, `o`.`BranchAddress_BranchName`, `o`.`BranchAddress_PlaceType`, `o`.`BranchAddress_Country_Name`, `o`.`BranchAddress_Country_PlanetId`, `o`.`LeafAAddress_LeafType`, `o`.`LeafAAddress_PlaceType`, `o`.`LeafAAddress_Country_Name`, `o`.`LeafAAddress_Country_PlanetId` FROM `OwnedPerson` AS `o` LEFT JOIN ( SELECT `o0`.`ClientId`, `o0`.`Id`, `o0`.`OrderDate`, `o1`.`OrderClientId`, `o1`.`OrderId`, `o1`.`Id` AS `Id0`, `o1`.`Detail` FROM `Order` AS `o0` LEFT JOIN `OrderDetail` AS `o1` ON `o0`.`ClientId` = `o1`.`OrderClientId` AND `o0`.`Id` = `o1`.`OrderId` -) AS `t` ON `o`.`Id` = `t`.`ClientId` +) AS `s` ON `o`.`Id` = `s`.`ClientId` WHERE `o`.`Discriminator` = 'LeafA' -ORDER BY `o`.`Id`, `t`.`ClientId`, `t`.`Id`, `t`.`OrderClientId`, `t`.`OrderId` +ORDER BY `o`.`Id`, `s`.`ClientId`, `s`.`Id`, `s`.`OrderClientId`, `s`.`OrderId` """); } @@ -437,28 +437,25 @@ public override async Task Preserve_includes_when_applying_skip_take_after_anony await base.Preserve_includes_when_applying_skip_take_after_anonymous_type_select(isAsync); AssertSql( -""" -SELECT COUNT(*) -FROM `OwnedPerson` AS `o` -""", - // """ -SELECT `t0`.`Id`, `t0`.`Discriminator`, `t0`.`Name`, `t1`.`ClientId`, `t1`.`Id`, `t1`.`OrderDate`, `t1`.`OrderClientId`, `t1`.`OrderId`, `t1`.`Id0`, `t1`.`Detail`, `t0`.`PersonAddress_AddressLine`, `t0`.`PersonAddress_PlaceType`, `t0`.`PersonAddress_ZipCode`, `t0`.`PersonAddress_Country_Name`, `t0`.`PersonAddress_Country_PlanetId`, `t0`.`BranchAddress_BranchName`, `t0`.`BranchAddress_PlaceType`, `t0`.`BranchAddress_Country_Name`, `t0`.`BranchAddress_Country_PlanetId`, `t0`.`LeafBAddress_LeafBType`, `t0`.`LeafBAddress_PlaceType`, `t0`.`LeafBAddress_Country_Name`, `t0`.`LeafBAddress_Country_PlanetId`, `t0`.`LeafAAddress_LeafType`, `t0`.`LeafAAddress_PlaceType`, `t0`.`LeafAAddress_Country_Name`, `t0`.`LeafAAddress_Country_PlanetId` +SELECT `o4`.`Id`, `o4`.`Discriminator`, `o4`.`Name`, `s`.`ClientId`, `s`.`Id`, `s`.`OrderDate`, `s`.`OrderClientId`, `s`.`OrderId`, `s`.`Id0`, `s`.`Detail`, `o4`.`PersonAddress_AddressLine`, `o4`.`PersonAddress_PlaceType`, `o4`.`PersonAddress_ZipCode`, `o4`.`PersonAddress_Country_Name`, `o4`.`PersonAddress_Country_PlanetId`, `o4`.`BranchAddress_BranchName`, `o4`.`BranchAddress_PlaceType`, `o4`.`BranchAddress_Country_Name`, `o4`.`BranchAddress_Country_PlanetId`, `o4`.`LeafBAddress_LeafBType`, `o4`.`LeafBAddress_PlaceType`, `o4`.`LeafBAddress_Country_Name`, `o4`.`LeafBAddress_Country_PlanetId`, `o4`.`LeafAAddress_LeafType`, `o4`.`LeafAAddress_PlaceType`, `o4`.`LeafAAddress_Country_Name`, `o4`.`LeafAAddress_Country_PlanetId`, `o4`.`c` FROM ( - SELECT TOP 100 `t`.`Id`, `t`.`Discriminator`, `t`.`Name`, `t`.`PersonAddress_AddressLine`, `t`.`PersonAddress_PlaceType`, `t`.`PersonAddress_ZipCode`, `t`.`PersonAddress_Country_Name`, `t`.`PersonAddress_Country_PlanetId`, `t`.`BranchAddress_BranchName`, `t`.`BranchAddress_PlaceType`, `t`.`BranchAddress_Country_Name`, `t`.`BranchAddress_Country_PlanetId`, `t`.`LeafBAddress_LeafBType`, `t`.`LeafBAddress_PlaceType`, `t`.`LeafBAddress_Country_Name`, `t`.`LeafBAddress_Country_PlanetId`, `t`.`LeafAAddress_LeafType`, `t`.`LeafAAddress_PlaceType`, `t`.`LeafAAddress_Country_Name`, `t`.`LeafAAddress_Country_PlanetId` + SELECT TOP 100 `o3`.`Id`, `o3`.`Discriminator`, `o3`.`Name`, `o3`.`PersonAddress_AddressLine`, `o3`.`PersonAddress_PlaceType`, `o3`.`PersonAddress_ZipCode`, `o3`.`PersonAddress_Country_Name`, `o3`.`PersonAddress_Country_PlanetId`, `o3`.`BranchAddress_BranchName`, `o3`.`BranchAddress_PlaceType`, `o3`.`BranchAddress_Country_Name`, `o3`.`BranchAddress_Country_PlanetId`, `o3`.`LeafBAddress_LeafBType`, `o3`.`LeafBAddress_PlaceType`, `o3`.`LeafBAddress_Country_Name`, `o3`.`LeafBAddress_Country_PlanetId`, `o3`.`LeafAAddress_LeafType`, `o3`.`LeafAAddress_PlaceType`, `o3`.`LeafAAddress_Country_Name`, `o3`.`LeafAAddress_Country_PlanetId`, `o3`.`c` FROM ( - SELECT TOP 100 `o`.`Id`, `o`.`Discriminator`, `o`.`Name`, `o`.`PersonAddress_AddressLine`, `o`.`PersonAddress_PlaceType`, `o`.`PersonAddress_ZipCode`, `o`.`PersonAddress_Country_Name`, `o`.`PersonAddress_Country_PlanetId`, `o`.`BranchAddress_BranchName`, `o`.`BranchAddress_PlaceType`, `o`.`BranchAddress_Country_Name`, `o`.`BranchAddress_Country_PlanetId`, `o`.`LeafBAddress_LeafBType`, `o`.`LeafBAddress_PlaceType`, `o`.`LeafBAddress_Country_Name`, `o`.`LeafBAddress_Country_PlanetId`, `o`.`LeafAAddress_LeafType`, `o`.`LeafAAddress_PlaceType`, `o`.`LeafAAddress_Country_Name`, `o`.`LeafAAddress_Country_PlanetId` + SELECT TOP 100 `o`.`Id`, `o`.`Discriminator`, `o`.`Name`, `o`.`PersonAddress_AddressLine`, `o`.`PersonAddress_PlaceType`, `o`.`PersonAddress_ZipCode`, `o`.`PersonAddress_Country_Name`, `o`.`PersonAddress_Country_PlanetId`, `o`.`BranchAddress_BranchName`, `o`.`BranchAddress_PlaceType`, `o`.`BranchAddress_Country_Name`, `o`.`BranchAddress_Country_PlanetId`, `o`.`LeafBAddress_LeafBType`, `o`.`LeafBAddress_PlaceType`, `o`.`LeafBAddress_Country_Name`, `o`.`LeafBAddress_Country_PlanetId`, `o`.`LeafAAddress_LeafType`, `o`.`LeafAAddress_PlaceType`, `o`.`LeafAAddress_Country_Name`, `o`.`LeafAAddress_Country_PlanetId`, ( + SELECT COUNT(*) + FROM `OwnedPerson` AS `o2`) AS `c` FROM `OwnedPerson` AS `o` ORDER BY `o`.`Id` - ) AS `t` - ORDER BY `t`.`Id` DESC -) AS `t0` + ) AS `o3` + ORDER BY `o3`.`Id` DESC +) AS `o4` LEFT JOIN ( SELECT `o0`.`ClientId`, `o0`.`Id`, `o0`.`OrderDate`, `o1`.`OrderClientId`, `o1`.`OrderId`, `o1`.`Id` AS `Id0`, `o1`.`Detail` FROM `Order` AS `o0` LEFT JOIN `OrderDetail` AS `o1` ON `o0`.`ClientId` = `o1`.`OrderClientId` AND `o0`.`Id` = `o1`.`OrderId` -) AS `t1` ON `t0`.`Id` = `t1`.`ClientId` -ORDER BY `t0`.`Id`, `t1`.`ClientId`, `t1`.`Id`, `t1`.`OrderClientId`, `t1`.`OrderId` +) AS `s` ON `o4`.`Id` = `s`.`ClientId` +ORDER BY `o4`.`Id`, `s`.`ClientId`, `s`.`Id`, `s`.`OrderClientId`, `s`.`OrderId` """); } @@ -468,15 +465,15 @@ public override async Task Unmapped_property_projection_loads_owned_navigations( AssertSql( """ -SELECT `o`.`Id`, `o`.`Discriminator`, `o`.`Name`, `t`.`ClientId`, `t`.`Id`, `t`.`OrderDate`, `t`.`OrderClientId`, `t`.`OrderId`, `t`.`Id0`, `t`.`Detail`, `o`.`PersonAddress_AddressLine`, `o`.`PersonAddress_PlaceType`, `o`.`PersonAddress_ZipCode`, `o`.`PersonAddress_Country_Name`, `o`.`PersonAddress_Country_PlanetId`, `o`.`BranchAddress_BranchName`, `o`.`BranchAddress_PlaceType`, `o`.`BranchAddress_Country_Name`, `o`.`BranchAddress_Country_PlanetId`, `o`.`LeafBAddress_LeafBType`, `o`.`LeafBAddress_PlaceType`, `o`.`LeafBAddress_Country_Name`, `o`.`LeafBAddress_Country_PlanetId`, `o`.`LeafAAddress_LeafType`, `o`.`LeafAAddress_PlaceType`, `o`.`LeafAAddress_Country_Name`, `o`.`LeafAAddress_Country_PlanetId` +SELECT `o`.`Id`, `o`.`Discriminator`, `o`.`Name`, `s`.`ClientId`, `s`.`Id`, `s`.`OrderDate`, `s`.`OrderClientId`, `s`.`OrderId`, `s`.`Id0`, `s`.`Detail`, `o`.`PersonAddress_AddressLine`, `o`.`PersonAddress_PlaceType`, `o`.`PersonAddress_ZipCode`, `o`.`PersonAddress_Country_Name`, `o`.`PersonAddress_Country_PlanetId`, `o`.`BranchAddress_BranchName`, `o`.`BranchAddress_PlaceType`, `o`.`BranchAddress_Country_Name`, `o`.`BranchAddress_Country_PlanetId`, `o`.`LeafBAddress_LeafBType`, `o`.`LeafBAddress_PlaceType`, `o`.`LeafBAddress_Country_Name`, `o`.`LeafBAddress_Country_PlanetId`, `o`.`LeafAAddress_LeafType`, `o`.`LeafAAddress_PlaceType`, `o`.`LeafAAddress_Country_Name`, `o`.`LeafAAddress_Country_PlanetId` FROM `OwnedPerson` AS `o` LEFT JOIN ( SELECT `o0`.`ClientId`, `o0`.`Id`, `o0`.`OrderDate`, `o1`.`OrderClientId`, `o1`.`OrderId`, `o1`.`Id` AS `Id0`, `o1`.`Detail` FROM `Order` AS `o0` LEFT JOIN `OrderDetail` AS `o1` ON `o0`.`ClientId` = `o1`.`OrderClientId` AND `o0`.`Id` = `o1`.`OrderId` -) AS `t` ON `o`.`Id` = `t`.`ClientId` +) AS `s` ON `o`.`Id` = `s`.`ClientId` WHERE `o`.`Id` = 1 -ORDER BY `o`.`Id`, `t`.`ClientId`, `t`.`Id`, `t`.`OrderClientId`, `t`.`OrderId` +ORDER BY `o`.`Id`, `s`.`ClientId`, `s`.`Id`, `s`.`OrderClientId`, `s`.`OrderId` """); } diff --git a/test/EFCore.Jet.FunctionalTests/Query/PrecompiledQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/PrecompiledQueryJetTest.cs new file mode 100644 index 00000000..1a779ab2 --- /dev/null +++ b/test/EFCore.Jet.FunctionalTests/Query/PrecompiledQueryJetTest.cs @@ -0,0 +1,1957 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +// ReSharper disable InconsistentNaming + +using System.Threading.Tasks; +using EntityFrameworkCore.Jet.FunctionalTests.TestUtilities; +using EntityFrameworkCore.Jet.Infrastructure; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.Storage; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.Jet.FunctionalTests.Query; + +public class PrecompiledQueryJetTest( + PrecompiledQueryJetTest.PrecompiledQueryJetFixture fixture, + ITestOutputHelper testOutputHelper) + : PrecompiledQueryRelationalTestBase(fixture, testOutputHelper), + IClassFixture +{ + protected override bool AlwaysPrintGeneratedSources + => true; + + #region Expression types + + public override async Task BinaryExpression() + { + await base.BinaryExpression(); + + AssertSql( + """ +@__id_0='3' + +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Id` > @__id_0 +"""); + } + + public override async Task Conditional_no_evaluatable() + { + await base.Conditional_no_evaluatable(); + + AssertSql( + """ +SELECT IIF(`b`.`Id` = 2, 'yes', 'no') +FROM `Blogs` AS `b` +"""); + } + + public override async Task Conditional_contains_captured_variable() + { + await base.Conditional_contains_captured_variable(); + + AssertSql( + """ +@__yes_0='yes' (Size = 255) + +SELECT IIF(`b`.`Id` = 2, @__yes_0, 'no') +FROM `Blogs` AS `b` +"""); + } + + public override async Task Invoke_no_evaluatability_is_not_supported() + { + await base.Invoke_no_evaluatability_is_not_supported(); + + AssertSql(); + } + + public override async Task ListInit_no_evaluatability() + { + await base.ListInit_no_evaluatability(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Id` + 1 +FROM `Blogs` AS `b` +"""); + } + + public override async Task ListInit_with_evaluatable_with_captured_variable() + { + await base.ListInit_with_evaluatable_with_captured_variable(); + + AssertSql( + """ +SELECT `b`.`Id` +FROM `Blogs` AS `b` +"""); + } + + public override async Task ListInit_with_evaluatable_without_captured_variable() + { + await base.ListInit_with_evaluatable_without_captured_variable(); + + AssertSql( + """ +SELECT `b`.`Id` +FROM `Blogs` AS `b` +"""); + } + + public override async Task ListInit_fully_evaluatable() + { + await base.ListInit_fully_evaluatable(); + + AssertSql( + """ +SELECT TOP 2 `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Id` IN (7, 8) +"""); + } + + public override async Task MethodCallExpression_no_evaluatability() + { + await base.MethodCallExpression_no_evaluatability(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Name` IS NOT NULL AND LEFT(`b`.`Name`, IIF(LEN(`b`.`Name`) IS NULL, 0, LEN(`b`.`Name`))) = `b`.`Name` +"""); + } + + public override async Task MethodCallExpression_with_evaluatable_with_captured_variable() + { + await base.MethodCallExpression_with_evaluatable_with_captured_variable(); + + AssertSql( + """ +@__pattern_0_startswith='foo%' (Size = 255) + +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Name` LIKE @__pattern_0_startswith +"""); + } + + public override async Task MethodCallExpression_with_evaluatable_without_captured_variable() + { + await base.MethodCallExpression_with_evaluatable_without_captured_variable(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Name` LIKE 'foo%' +"""); + } + + public override async Task MethodCallExpression_fully_evaluatable() + { + await base.MethodCallExpression_fully_evaluatable(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +"""); + } + + public override async Task New_with_no_arguments() + { + await base.New_with_no_arguments(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 0 +"""); + } + + public override async Task Where_New_with_captured_variable() + { + await base.Where_New_with_captured_variable(); + + AssertSql(); + } + + public override async Task Select_New_with_captured_variable() + { + await base.Select_New_with_captured_variable(); + + AssertSql( + """ +SELECT `b`.`Name` +FROM `Blogs` AS `b` +"""); + } + + public override async Task MemberInit_no_evaluatable() + { + await base.MemberInit_no_evaluatable(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +"""); + } + + public override async Task MemberInit_contains_captured_variable() + { + await base.MemberInit_contains_captured_variable(); + + AssertSql( + """ +@__id_0='8' + +SELECT CLNG(@__id_0) AS `Id`, `b`.`Name` +FROM `Blogs` AS `b` +"""); + } + + public override async Task MemberInit_evaluatable_as_constant() + { + await base.MemberInit_evaluatable_as_constant(); + + AssertSql( + """ +SELECT 1 AS `Id`, 'foo' AS `Name` +FROM `Blogs` AS `b` +"""); + } + + public override async Task MemberInit_evaluatable_as_parameter() + { + await base.MemberInit_evaluatable_as_parameter(); + + AssertSql( + """ +SELECT 1 +FROM `Blogs` AS `b` +"""); + } + + public override async Task NewArray() + { + await base.NewArray(); + + AssertSql( + """ +@__i_0='8' + +SELECT `b`.`Id`, `b`.`Id` + @__i_0 +FROM `Blogs` AS `b` +"""); + } + + public override async Task Unary() + { + await base.Unary(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE CINT(`b`.`Id`) = 8 +"""); + } + + public virtual async Task Collate() + { + await Test("""_ = context.Blogs.Where(b => EF.Functions.Collate(b.Name, "German_PhoneBook_CI_AS") == "foo").ToList();"""); + + AssertSql(); + } + + #endregion Expression types + + #region Terminating operators + + public override async Task Terminating_AsEnumerable() + { + await base.Terminating_AsEnumerable(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +"""); + } + + public override async Task Terminating_AsAsyncEnumerable_on_DbSet() + { + await base.Terminating_AsAsyncEnumerable_on_DbSet(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +"""); + } + + public override async Task Terminating_AsAsyncEnumerable_on_IQueryable() + { + await base.Terminating_AsAsyncEnumerable_on_IQueryable(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Id` > 8 +"""); + } + + public override async Task Foreach_sync_over_operator() + { + await base.Foreach_sync_over_operator(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Id` > 8 +"""); + } + + public override async Task Terminating_ToArray() + { + await base.Terminating_ToArray(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +"""); + } + + public override async Task Terminating_ToArrayAsync() + { + await base.Terminating_ToArrayAsync(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +"""); + } + + public override async Task Terminating_ToDictionary() + { + await base.Terminating_ToDictionary(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +"""); + } + + public override async Task Terminating_ToDictionaryAsync() + { + await base.Terminating_ToDictionaryAsync(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +"""); + } + + public override async Task ToDictionary_over_anonymous_type() + { + await base.ToDictionary_over_anonymous_type(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +"""); + } + + public override async Task ToDictionaryAsync_over_anonymous_type() + { + await base.ToDictionaryAsync_over_anonymous_type(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +"""); + } + + public override async Task Terminating_ToHashSet() + { + await base.Terminating_ToHashSet(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +"""); + } + + public override async Task Terminating_ToHashSetAsync() + { + await base.Terminating_ToHashSetAsync(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +"""); + } + + public override async Task Terminating_ToLookup() + { + await base.Terminating_ToLookup(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +"""); + } + + public override async Task Terminating_ToList() + { + await base.Terminating_ToList(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +"""); + } + + public override async Task Terminating_ToListAsync() + { + await base.Terminating_ToListAsync(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +"""); + } + + public override async Task Foreach_sync_over_DbSet_property_is_not_supported() + { + await base.Foreach_sync_over_DbSet_property_is_not_supported(); + + AssertSql(); + } + + public override async Task Foreach_async_is_not_supported() + { + await base.Foreach_async_is_not_supported(); + + AssertSql(); + } + + #endregion Terminating operators + + #region Reducing terminating operators + + public override async Task Terminating_All() + { + await base.Terminating_All(); + + AssertSql( + """ +SELECT IIF(NOT EXISTS ( + SELECT 1 + FROM `Blogs` AS `b` + WHERE `b`.`Id` <= 7), TRUE, FALSE) +FROM (SELECT COUNT(*) FROM `#Dual`) +""", + // + """ +SELECT IIF(NOT EXISTS ( + SELECT 1 + FROM `Blogs` AS `b` + WHERE `b`.`Id` <= 8), TRUE, FALSE) +FROM (SELECT COUNT(*) FROM `#Dual`) +"""); + } + + public override async Task Terminating_AllAsync() + { + await base.Terminating_AllAsync(); + + AssertSql( + """ +SELECT IIF(NOT EXISTS ( + SELECT 1 + FROM `Blogs` AS `b` + WHERE `b`.`Id` <= 7), TRUE, FALSE) +FROM (SELECT COUNT(*) FROM `#Dual`) +""", + // + """ +SELECT IIF(NOT EXISTS ( + SELECT 1 + FROM `Blogs` AS `b` + WHERE `b`.`Id` <= 8), TRUE, FALSE) +FROM (SELECT COUNT(*) FROM `#Dual`) +"""); + } + + public override async Task Terminating_Any() + { + await base.Terminating_Any(); + + AssertSql( + """ +SELECT IIF(EXISTS ( + SELECT 1 + FROM `Blogs` AS `b` + WHERE `b`.`Id` > 7), TRUE, FALSE) +FROM (SELECT COUNT(*) FROM `#Dual`) +""", + // + """ +SELECT IIF(EXISTS ( + SELECT 1 + FROM `Blogs` AS `b` + WHERE `b`.`Id` < 7), TRUE, FALSE) +FROM (SELECT COUNT(*) FROM `#Dual`) +""", + // + """ +SELECT IIF(EXISTS ( + SELECT 1 + FROM `Blogs` AS `b` + WHERE `b`.`Id` > 7), TRUE, FALSE) +FROM (SELECT COUNT(*) FROM `#Dual`) +""", + // + """ +SELECT IIF(EXISTS ( + SELECT 1 + FROM `Blogs` AS `b` + WHERE `b`.`Id` < 7), TRUE, FALSE) +FROM (SELECT COUNT(*) FROM `#Dual`) +"""); + } + + public override async Task Terminating_AnyAsync() + { + await base.Terminating_AnyAsync(); + + AssertSql( + """ +SELECT IIF(EXISTS ( + SELECT 1 + FROM `Blogs` AS `b` + WHERE `b`.`Id` > 7), TRUE, FALSE) +FROM (SELECT COUNT(*) FROM `#Dual`) +""", + // + """ +SELECT IIF(EXISTS ( + SELECT 1 + FROM `Blogs` AS `b` + WHERE `b`.`Id` < 7), TRUE, FALSE) +FROM (SELECT COUNT(*) FROM `#Dual`) +""", + // + """ +SELECT IIF(EXISTS ( + SELECT 1 + FROM `Blogs` AS `b` + WHERE `b`.`Id` > 7), TRUE, FALSE) +FROM (SELECT COUNT(*) FROM `#Dual`) +""", + // + """ +SELECT IIF(EXISTS ( + SELECT 1 + FROM `Blogs` AS `b` + WHERE `b`.`Id` < 7), TRUE, FALSE) +FROM (SELECT COUNT(*) FROM `#Dual`) +"""); + } + + public override async Task Terminating_Average() + { + await base.Terminating_Average(); + + AssertSql( + """ +SELECT AVG(CDBL(`b`.`Id`)) +FROM `Blogs` AS `b` +""", + // + """ +SELECT AVG(CDBL(`b`.`Id`)) +FROM `Blogs` AS `b` +"""); + } + + public override async Task Terminating_AverageAsync() + { + await base.Terminating_AverageAsync(); + + AssertSql( + """ +SELECT AVG(CDBL(`b`.`Id`)) +FROM `Blogs` AS `b` +""", + // + """ +SELECT AVG(CDBL(`b`.`Id`)) +FROM `Blogs` AS `b` +"""); + } + + public override async Task Terminating_Contains() + { + await base.Terminating_Contains(); + + AssertSql( + """ +@__p_0='8' + +SELECT IIF(@__p_0 IN ( + SELECT `b`.`Id` + FROM `Blogs` AS `b` + ), TRUE, FALSE) +FROM (SELECT COUNT(*) FROM `#Dual`) +""", + // + """ +@__p_0='7' + +SELECT IIF(@__p_0 IN ( + SELECT `b`.`Id` + FROM `Blogs` AS `b` + ), TRUE, FALSE) +FROM (SELECT COUNT(*) FROM `#Dual`) +"""); + } + + public override async Task Terminating_ContainsAsync() + { + await base.Terminating_ContainsAsync(); + + AssertSql( + """ +@__p_0='8' + +SELECT IIF(@__p_0 IN ( + SELECT `b`.`Id` + FROM `Blogs` AS `b` + ), TRUE, FALSE) +FROM (SELECT COUNT(*) FROM `#Dual`) +""", + // + """ +@__p_0='7' + +SELECT IIF(@__p_0 IN ( + SELECT `b`.`Id` + FROM `Blogs` AS `b` + ), TRUE, FALSE) +FROM (SELECT COUNT(*) FROM `#Dual`) +"""); + } + + public override async Task Terminating_Count() + { + await base.Terminating_Count(); + + AssertSql( + """ +SELECT COUNT(*) +FROM `Blogs` AS `b` +""", + // + """ +SELECT COUNT(*) +FROM `Blogs` AS `b` +WHERE `b`.`Id` > 8 +"""); + } + + public override async Task Terminating_CountAsync() + { + await base.Terminating_CountAsync(); + + AssertSql( + """ +SELECT COUNT(*) +FROM `Blogs` AS `b` +""", + // + """ +SELECT COUNT(*) +FROM `Blogs` AS `b` +WHERE `b`.`Id` > 8 +"""); + } + + public override async Task Terminating_ElementAt() + { + await base.Terminating_ElementAt(); + + AssertSql( + """ +@__p_0='1' + +SELECT [b].[Id], [b].[Name] +FROM [Blogs] AS [b] +ORDER BY [b].[Id] +OFFSET @__p_0 ROWS FETCH NEXT 1 ROWS ONLY +""", + // + """ +@__p_0='3' + +SELECT [b].[Id], [b].[Name] +FROM [Blogs] AS [b] +ORDER BY [b].[Id] +OFFSET @__p_0 ROWS FETCH NEXT 1 ROWS ONLY +"""); + } + + public override async Task Terminating_ElementAtAsync() + { + await base.Terminating_ElementAtAsync(); + + AssertSql( + """ +@__p_0='1' + +SELECT [b].[Id], [b].[Name] +FROM [Blogs] AS [b] +ORDER BY [b].[Id] +OFFSET @__p_0 ROWS FETCH NEXT 1 ROWS ONLY +""", + // + """ +@__p_0='3' + +SELECT [b].[Id], [b].[Name] +FROM [Blogs] AS [b] +ORDER BY [b].[Id] +OFFSET @__p_0 ROWS FETCH NEXT 1 ROWS ONLY +"""); + } + + public override async Task Terminating_ElementAtOrDefault() + { + await base.Terminating_ElementAtOrDefault(); + + AssertSql( + """ +@__p_0='1' + +SELECT [b].[Id], [b].[Name] +FROM [Blogs] AS [b] +ORDER BY [b].[Id] +OFFSET @__p_0 ROWS FETCH NEXT 1 ROWS ONLY +""", + // + """ +@__p_0='3' + +SELECT [b].[Id], [b].[Name] +FROM [Blogs] AS [b] +ORDER BY [b].[Id] +OFFSET @__p_0 ROWS FETCH NEXT 1 ROWS ONLY +"""); + } + + public override async Task Terminating_ElementAtOrDefaultAsync() + { + await base.Terminating_ElementAtOrDefaultAsync(); + + AssertSql( + """ +@__p_0='1' + +SELECT [b].[Id], [b].[Name] +FROM [Blogs] AS [b] +ORDER BY [b].[Id] +OFFSET @__p_0 ROWS FETCH NEXT 1 ROWS ONLY +""", + // + """ +@__p_0='3' + +SELECT [b].[Id], [b].[Name] +FROM [Blogs] AS [b] +ORDER BY [b].[Id] +OFFSET @__p_0 ROWS FETCH NEXT 1 ROWS ONLY +"""); + } + + public override async Task Terminating_First() + { + await base.Terminating_First(); + + AssertSql( + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 8 +""", + // + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 7 +""", + // + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 8 +""", + // + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 7 +"""); + } + + public override async Task Terminating_FirstAsync() + { + await base.Terminating_FirstAsync(); + + AssertSql( + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 8 +""", + // + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 7 +""", + // + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 8 +""", + // + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 7 +"""); + } + + public override async Task Terminating_FirstOrDefault() + { + await base.Terminating_FirstOrDefault(); + + AssertSql( + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 8 +""", + // + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 7 +""", + // + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 8 +""", + // + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 7 +"""); + } + + public override async Task Terminating_FirstOrDefaultAsync() + { + await base.Terminating_FirstOrDefaultAsync(); + + AssertSql( + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 8 +""", + // + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 7 +""", + // + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 8 +""", + // + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 7 +"""); + } + + public override async Task Terminating_GetEnumerator() + { + await base.Terminating_GetEnumerator(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 8 +"""); + } + + public override async Task Terminating_Last() + { + await base.Terminating_Last(); + + AssertSql( + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +ORDER BY `b`.`Id` DESC +""", + // + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 7 +ORDER BY `b`.`Id` DESC +""", + // + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 8 +ORDER BY `b`.`Id` DESC +""", + // + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 7 +ORDER BY `b`.`Id` DESC +"""); + } + + public override async Task Terminating_LastAsync() + { + await base.Terminating_LastAsync(); + + AssertSql( + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +ORDER BY `b`.`Id` DESC +""", + // + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 7 +ORDER BY `b`.`Id` DESC +""", + // + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 8 +ORDER BY `b`.`Id` DESC +""", + // + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 7 +ORDER BY `b`.`Id` DESC +"""); + } + + public override async Task Terminating_LastOrDefault() + { + await base.Terminating_LastOrDefault(); + + AssertSql( + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +ORDER BY `b`.`Id` DESC +""", + // + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 7 +ORDER BY `b`.`Id` DESC +""", + // + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 8 +ORDER BY `b`.`Id` DESC +""", + // + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 7 +ORDER BY `b`.`Id` DESC +"""); + } + + public override async Task Terminating_LastOrDefaultAsync() + { + await base.Terminating_LastOrDefaultAsync(); + + AssertSql( + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +ORDER BY `b`.`Id` DESC +""", + // + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 7 +ORDER BY `b`.`Id` DESC +""", + // + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 8 +ORDER BY `b`.`Id` DESC +""", + // + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 7 +ORDER BY `b`.`Id` DESC +"""); + } + + public override async Task Terminating_LongCount() + { + await base.Terminating_LongCount(); + + AssertSql( + """ +SELECT COUNT(*) +FROM `Blogs` AS `b` +""", + // + """ +SELECT COUNT(*) +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 8 +"""); + } + + public override async Task Terminating_LongCountAsync() + { + await base.Terminating_LongCountAsync(); + + AssertSql( + """ +SELECT COUNT(*) +FROM `Blogs` AS `b` +""", + // + """ +SELECT COUNT(*) +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 8 +"""); + } + + public override async Task Terminating_Max() + { + await base.Terminating_Max(); + + AssertSql( + """ +SELECT MAX(`b`.`Id`) +FROM `Blogs` AS `b` +""", + // + """ +SELECT MAX(`b`.`Id`) +FROM `Blogs` AS `b` +"""); + } + + public override async Task Terminating_MaxAsync() + { + await base.Terminating_MaxAsync(); + + AssertSql( + """ +SELECT MAX(`b`.`Id`) +FROM `Blogs` AS `b` +""", + // + """ +SELECT MAX(`b`.`Id`) +FROM `Blogs` AS `b` +"""); + } + + public override async Task Terminating_Min() + { + await base.Terminating_Min(); + + AssertSql( + """ +SELECT MIN(`b`.`Id`) +FROM `Blogs` AS `b` +""", + // + """ +SELECT MIN(`b`.`Id`) +FROM `Blogs` AS `b` +"""); + } + + public override async Task Terminating_MinAsync() + { + await base.Terminating_MinAsync(); + + AssertSql( + """ +SELECT MIN(`b`.`Id`) +FROM `Blogs` AS `b` +""", + // + """ +SELECT MIN(`b`.`Id`) +FROM `Blogs` AS `b` +"""); + } + + public override async Task Terminating_Single() + { + await base.Terminating_Single(); + + AssertSql( + """ +SELECT TOP 2 `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 8 +""", + // + """ +SELECT TOP 2 `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 7 +""", + // + """ +SELECT TOP 2 `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 8 +""", + // + """ +SELECT TOP 2 `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 7 +"""); + } + + public override async Task Terminating_SingleAsync() + { + await base.Terminating_SingleAsync(); + + AssertSql( + """ +SELECT TOP 2 `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 8 +""", + // + """ +SELECT TOP 2 `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 7 +""", + // + """ +SELECT TOP 2 `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 8 +""", + // + """ +SELECT TOP 2 `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 7 +"""); + } + + public override async Task Terminating_SingleOrDefault() + { + await base.Terminating_SingleOrDefault(); + + AssertSql( + """ +SELECT TOP 2 `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 8 +""", + // + """ +SELECT TOP 2 `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 7 +""", + // + """ +SELECT TOP 2 `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 8 +""", + // + """ +SELECT TOP 2 `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 7 +"""); + } + + public override async Task Terminating_SingleOrDefaultAsync() + { + await base.Terminating_SingleOrDefaultAsync(); + + AssertSql( + """ +SELECT TOP 2 `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 8 +""", + // + """ +SELECT TOP 2 `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 7 +""", + // + """ +SELECT TOP 2 `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 8 +""", + // + """ +SELECT TOP 2 `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 7 +"""); + } + + public override async Task Terminating_Sum() + { + await base.Terminating_Sum(); + + AssertSql( + """ +SELECT IIF(SUM(`b`.`Id`) IS NULL, 0, SUM(`b`.`Id`)) +FROM `Blogs` AS `b` +""", + // + """ +SELECT IIF(SUM(`b`.`Id`) IS NULL, 0, SUM(`b`.`Id`)) +FROM `Blogs` AS `b` +"""); + } + + public override async Task Terminating_SumAsync() + { + await base.Terminating_SumAsync(); + + AssertSql( + """ +SELECT IIF(SUM(`b`.`Id`) IS NULL, 0, SUM(`b`.`Id`)) +FROM `Blogs` AS `b` +""", + // + """ +SELECT IIF(SUM(`b`.`Id`) IS NULL, 0, SUM(`b`.`Id`)) +FROM `Blogs` AS `b` +"""); + } + + public override async Task Terminating_ExecuteDelete() + { + await base.Terminating_ExecuteDelete(); + + AssertSql( + """ +DELETE FROM `Blogs` AS `b` +WHERE `b`.`Id` > 8 +""", + // + """ +SELECT COUNT(*) +FROM `Blogs` AS `b` +"""); + } + + public override async Task Terminating_ExecuteDeleteAsync() + { + await base.Terminating_ExecuteDeleteAsync(); + + AssertSql( + """ +DELETE FROM `Blogs` AS `b` +WHERE `b`.`Id` > 8 +""", + // + """ +SELECT COUNT(*) +FROM `Blogs` AS `b` +"""); + } + + public override async Task Terminating_ExecuteUpdate() + { + await base.Terminating_ExecuteUpdate(); + + AssertSql( + """ +@__suffix_0='Suffix' (Size = 255) + +UPDATE `Blogs` AS `b` +SET `b`.`Name` = IIF(`b`.`Name` IS NULL, '', `b`.`Name`) & @__suffix_0 +WHERE `b`.`Id` > 8 +""", + // + """ +SELECT COUNT(*) +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 9 AND `b`.`Name` = 'Blog2Suffix' +"""); + } + + public override async Task Terminating_ExecuteUpdateAsync() + { + await base.Terminating_ExecuteUpdateAsync(); + + AssertSql( + """ +@__suffix_0='Suffix' (Size = 255) + +UPDATE `Blogs` AS `b` +SET `b`.`Name` = IIF(`b`.`Name` IS NULL, '', `b`.`Name`) & @__suffix_0 +WHERE `b`.`Id` > 8 +""", + // + """ +SELECT COUNT(*) +FROM `Blogs` AS `b` +WHERE `b`.`Id` = 9 AND `b`.`Name` = 'Blog2Suffix' +"""); + } + + #endregion Reducing terminating operators + + #region SQL expression quotability + + public override async Task Union() + { + await base.Union(); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Name` +FROM ( + SELECT `b`.`Id`, `b`.`Name` + FROM `Blogs` AS `b` + WHERE `b`.`Id` > 7 + UNION + SELECT `b0`.`Id`, `b0`.`Name` + FROM `Blogs` AS `b0` + WHERE `b0`.`Id` < 10 +) AS `u` +ORDER BY `u`.`Id` +"""); + } + + public override async Task Concat() + { + await base.Concat(); + + AssertSql( + """ +SELECT `u`.`Id`, `u`.`Name` +FROM ( + SELECT `b`.`Id`, `b`.`Name` + FROM `Blogs` AS `b` + WHERE `b`.`Id` > 7 + UNION ALL + SELECT `b0`.`Id`, `b0`.`Name` + FROM `Blogs` AS `b0` + WHERE `b0`.`Id` < 10 +) AS `u` +ORDER BY `u`.`Id` +"""); + } + + public override async Task Intersect() + { + await base.Intersect(); + + AssertSql( + """ +SELECT [i].[Id], [i].[Name] +FROM ( + SELECT [b].[Id], [b].[Name] + FROM [Blogs] AS [b] + WHERE [b].[Id] > 7 + INTERSECT + SELECT [b0].[Id], [b0].[Name] + FROM [Blogs] AS [b0] + WHERE [b0].[Id] > 8 +) AS [i] +ORDER BY [i].[Id] +"""); + } + + public override async Task Except() + { + await base.Except(); + + AssertSql( + """ +SELECT [e].[Id], [e].[Name] +FROM ( + SELECT [b].[Id], [b].[Name] + FROM [Blogs] AS [b] + WHERE [b].[Id] > 7 + EXCEPT + SELECT [b0].[Id], [b0].[Name] + FROM [Blogs] AS [b0] + WHERE [b0].[Id] > 8 +) AS [e] +ORDER BY [e].[Id] +"""); + } + + public override async Task ValuesExpression() + { + await base.ValuesExpression(); + + AssertSql( + """ +SELECT [b].[Id], [b].[Name] +FROM [Blogs] AS [b] +WHERE ( + SELECT COUNT(*) + FROM (VALUES (CAST(7 AS int)), ([b].[Id])) AS [v]([Value]) + WHERE [v].[Value] > 8) = 2 +"""); + } + + public override async Task Contains_with_parameterized_collection() + { + await base.Contains_with_parameterized_collection(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Id` IN (1, 2, 3) +"""); + } + + public override async Task FromSqlRaw() + { + await base.FromSqlRaw(); + + AssertSql( + """ +SELECT `m`.`Id`, `m`.`Name` +FROM ( + SELECT * FROM `Blogs` WHERE `Id` > 8 +) AS `m` +ORDER BY `m`.`Id` +"""); + } + + public override async Task FromSql_with_FormattableString_parameters() + { + await base.FromSql_with_FormattableString_parameters(); + + AssertSql( + """ +p0='8' +p1='9' + +SELECT `m`.`Id`, `m`.`Name` +FROM ( + SELECT * FROM `Blogs` WHERE `Id` > @p0 AND `Id` < @p1 +) AS `m` +ORDER BY `m`.`Id` +"""); + } + + // SqlServerOpenJsonExpression is covered by PrecompiledQueryRelationalTestBase.Contains_with_parameterized_collection + +// [ConditionalFact] +// public virtual Task TableValuedFunctionExpression_toplevel() +// => Test( +// "_ = context.GetBlogsWithAtLeast(9).ToList();", +// modelSourceCode: providerOptions => $$""" +// public class BlogContext : DbContext +// { +// public DbSet Blogs { get; set; } +// +// protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) +// => optionsBuilder +// {{providerOptions}} +// .ReplaceService(); +// +// protected override void OnModelCreating(ModelBuilder modelBuilder) +// { +// modelBuilder.HasDbFunction(typeof(BlogContext).GetMethod(nameof(GetBlogsWithAtLeast))); +// } +// +// public IQueryable GetBlogsWithAtLeast(int minBlogId) => FromExpression(() => GetBlogsWithAtLeast(minBlogId)); +// } +// +// public class Blog +// { +// [DatabaseGenerated(DatabaseGeneratedOption.None)] +// public int Id { get; set; } +// public string StringProperty { get; set; } +// } +// """, +// setupSql: """ +// CREATE FUNCTION dbo.GetBlogsWithAtLeast(@minBlogId int) +// RETURNS TABLE AS RETURN +// ( +// SELECT [b].[Id], [b].[Name] FROM [Blogs] AS [b] WHERE [b].[Id] >= @minBlogId +// ) +// """, +// cleanupSql: "DROP FUNCTION dbo.GetBlogsWithAtLeast;"); +// +// [ConditionalFact] +// public virtual Task TableValuedFunctionExpression_non_toplevel() +// => Test( +// "_ = context.Blogs.Where(b => context.GetPosts(b.Id).Count() == 2).ToList();", +// modelSourceCode: providerOptions => $$""" +// public class BlogContext : DbContext +// { +// public DbSet Blogs { get; set; } +// +// protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) +// => optionsBuilder +// {{providerOptions}} +// .ReplaceService(); +// +// protected override void OnModelCreating(ModelBuilder modelBuilder) +// { +// modelBuilder.HasDbFunction(typeof(BlogContext).GetMethod(nameof(GetPosts))); +// } +// +// public IQueryable GetPosts(int blogId) => FromExpression(() => GetPosts(blogId)); +// } +// +// public class Blog +// { +// public int Id { get; set; } +// public string StringProperty { get; set; } +// public List Post { get; set; } +// } +// +// public class Post +// { +// public int Id { get; set; } +// public string Title { get; set; } +// +// public Blog Blog { get; set; } +// } +// """, +// setupSql: """ +// CREATE FUNCTION dbo.GetPosts(@blogId int) +// RETURNS TABLE AS RETURN +// ( +// SELECT [p].[Id], [p].[Title], [p].[BlogId] FROM [Posts] AS [p] WHERE [p].[BlogId] = @blogId +// ) +// """, +// cleanupSql: "DROP FUNCTION dbo.GetPosts;"); + + #endregion SQL expression quotability + + #region Different query roots + + public override async Task DbContext_as_local_variable() + { + await base.DbContext_as_local_variable(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +"""); + } + + public override async Task DbContext_as_field() + { + await base.DbContext_as_field(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +"""); + } + + public override async Task DbContext_as_property() + { + await base.DbContext_as_property(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +"""); + } + + public override async Task DbContext_as_captured_variable() + { + await base.DbContext_as_captured_variable(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +"""); + } + + public override async Task DbContext_as_method_invocation_result() + { + await base.DbContext_as_method_invocation_result(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +"""); + } + + #endregion Different query roots + + #region Negative cases + + public override async Task Dynamic_query_does_not_get_precompiled() + { + await base.Dynamic_query_does_not_get_precompiled(); + + AssertSql(); + } + + public override async Task ToList_over_objects_does_not_get_precompiled() + { + await base.ToList_over_objects_does_not_get_precompiled(); + + AssertSql(); + } + + public override async Task Query_compilation_failure() + { + await base.Query_compilation_failure(); + + AssertSql(); + } + + public override async Task EF_Constant_is_not_supported() + { + await base.EF_Constant_is_not_supported(); + + AssertSql(); + } + + public override async Task NotParameterizedAttribute_with_constant() + { + await base.NotParameterizedAttribute_with_constant(); + + AssertSql( + """ +SELECT TOP 2 `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Name` = 'Blog2' +"""); + } + + public override async Task NotParameterizedAttribute_is_not_supported_with_non_constant_argument() + { + await base.NotParameterizedAttribute_is_not_supported_with_non_constant_argument(); + + AssertSql(); + } + + public override async Task Query_syntax_is_not_supported() + { + await base.Query_syntax_is_not_supported(); + + AssertSql(); + } + + #endregion Negative cases + + public override async Task Select_changes_type() + { + await base.Select_changes_type(); + + AssertSql( + """ +SELECT `b`.`Name` +FROM `Blogs` AS `b` +"""); + } + + public override async Task OrderBy() + { + await base.OrderBy(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +ORDER BY `b`.`Name` +"""); + } + + public override async Task Skip() + { + await base.Skip(); + + AssertSql( + """ +@__p_0='1' + +SELECT [b].[Id], [b].[Name] +FROM [Blogs] AS [b] +ORDER BY [b].[Name] +OFFSET @__p_0 ROWS +"""); + } + + public override async Task Take() + { + await base.Take(); + + AssertSql( + """ +SELECT TOP 1 `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +ORDER BY `b`.`Name` +"""); + } + + public override async Task Project_anonymous_object() + { + await base.Project_anonymous_object(); + + AssertSql( + """ +SELECT IIF(`b`.`Name` IS NULL, '', `b`.`Name`) & 'Foo' AS `Foo` +FROM `Blogs` AS `b` +"""); + } + + public override async Task Two_captured_variables_in_same_lambda() + { + await base.Two_captured_variables_in_same_lambda(); + + AssertSql( + """ +@__yes_0='yes' (Size = 255) +@__no_1='no' (Size = 255) + +SELECT IIF(`b`.`Id` = 3, @__yes_0, @__no_1) +FROM `Blogs` AS `b` +"""); + } + + public override async Task Two_captured_variables_in_different_lambdas() + { + await base.Two_captured_variables_in_different_lambdas(); + + AssertSql( + """ +@__starts_0_startswith='blog%' (Size = 255) +@__ends_1_endswith='%2' (Size = 255) + +SELECT TOP 2 `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE (`b`.`Name` LIKE @__starts_0_startswith) AND (`b`.`Name` LIKE @__ends_1_endswith) +"""); + } + + public override async Task Same_captured_variable_twice_in_same_lambda() + { + await base.Same_captured_variable_twice_in_same_lambda(); + + AssertSql( + """ +@__foo_0_startswith='X%' (Size = 255) +@__foo_0_endswith='%X' (Size = 255) + +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE (`b`.`Name` LIKE @__foo_0_startswith) AND (`b`.`Name` LIKE @__foo_0_endswith) +"""); + } + + public override async Task Same_captured_variable_twice_in_different_lambdas() + { + await base.Same_captured_variable_twice_in_different_lambdas(); + + AssertSql( + """ +@__foo_0_startswith='X%' (Size = 255) +@__foo_0_endswith='%X' (Size = 255) + +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE (`b`.`Name` LIKE @__foo_0_startswith) AND (`b`.`Name` LIKE @__foo_0_endswith) +"""); + } + + public override async Task Include_single() + { + await base.Include_single(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `p`.`Id`, `p`.`BlogId`, `p`.`Title` +FROM `Blogs` AS `b` +LEFT JOIN `Posts` AS `p` ON `b`.`Id` = `p`.`BlogId` +WHERE `b`.`Id` > 8 +ORDER BY `b`.`Id` +"""); + } + + public override async Task Include_split() + { + await base.Include_split(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +ORDER BY `b`.`Id` +""", + // + """ +SELECT `p`.`Id`, `p`.`BlogId`, `p`.`Title`, `b`.`Id` +FROM `Blogs` AS `b` +INNER JOIN `Posts` AS `p` ON `b`.`Id` = `p`.`BlogId` +ORDER BY `b`.`Id` +"""); + } + + public override async Task Final_GroupBy() + { + await base.Final_GroupBy(); + + AssertSql( + """ +SELECT `b`.`Name`, `b`.`Id` +FROM `Blogs` AS `b` +ORDER BY `b`.`Name` +"""); + } + + public override async Task Multiple_queries_with_captured_variables() + { + await base.Multiple_queries_with_captured_variables(); + + AssertSql( + """ +@__id1_0='8' +@__id2_1='9' + +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = @__id1_0 OR `b`.`Id` = @__id2_1 +""", + // + """ +@__id1_0='8' + +SELECT TOP 2 `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = @__id1_0 +"""); + } + + public override async Task Unsafe_accessor_gets_generated_once_for_multiple_queries() + { + await base.Unsafe_accessor_gets_generated_once_for_multiple_queries(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +""", + // + """ +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +"""); + } + + [ConditionalFact] + public virtual void Check_all_tests_overridden() + => TestHelpers.AssertAllMethodsOverridden(GetType()); + + public class PrecompiledQueryJetFixture : PrecompiledQueryRelationalFixture + { + protected override ITestStoreFactory TestStoreFactory + => JetTestStoreFactory.Instance; + + public override DbContextOptionsBuilder AddOptions(DbContextOptionsBuilder builder) + { + builder = base.AddOptions(builder); + + // TODO: Figure out if there's a nice way to continue using the retrying strategy + var jetOptionsBuilder = new JetDbContextOptionsBuilder(builder); + jetOptionsBuilder.ExecutionStrategy(d => new NonRetryingExecutionStrategy(d)); + return builder; + } + + public override PrecompiledQueryTestHelpers PrecompiledQueryTestHelpers => JetPrecompiledQueryTestHelpers.Instance; + } +} diff --git a/test/EFCore.Jet.FunctionalTests/Query/PrecompiledSqlPregenerationQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/PrecompiledSqlPregenerationQueryJetTest.cs new file mode 100644 index 00000000..958f3425 --- /dev/null +++ b/test/EFCore.Jet.FunctionalTests/Query/PrecompiledSqlPregenerationQueryJetTest.cs @@ -0,0 +1,276 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Threading.Tasks; +using EntityFrameworkCore.Jet.FunctionalTests.TestUtilities; +using EntityFrameworkCore.Jet.Infrastructure; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.Query.Internal; +using Microsoft.EntityFrameworkCore.Storage; +using Microsoft.EntityFrameworkCore.TestUtilities; +using Xunit; +using Xunit.Abstractions; + +namespace EntityFrameworkCore.Jet.FunctionalTests.Query; + +// ReSharper disable InconsistentNaming + +public class PrecompiledSqlPregenerationQueryJetTest( + PrecompiledSqlPregenerationQueryJetTest.PrecompiledSqlPregenerationQueryJetFixture fixture, + ITestOutputHelper testOutputHelper) + : PrecompiledSqlPregenerationQueryRelationalTestBase(fixture, testOutputHelper), + IClassFixture +{ + protected override bool AlwaysPrintGeneratedSources + => false; + + public override async Task No_parameters() + { + await base.No_parameters(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Name` = 'foo' +"""); + } + + public override async Task Non_nullable_value_type() + { + await base.Non_nullable_value_type(); + + AssertSql( + """ +@__id_0='8' + +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = @__id_0 +"""); + } + + public override async Task Nullable_value_type() + { + await base.Nullable_value_type(); + + AssertSql( + """ +@__id_0='8' (Nullable = true) + +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = @__id_0 +"""); + } + + public override async Task Nullable_reference_type() + { + await base.Nullable_reference_type(); + + AssertSql( + """ +@__name_0='bar' (Size = 255) + +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Name` = @__name_0 +"""); + } + + public override async Task Non_nullable_reference_type() + { + await base.Non_nullable_reference_type(); + + AssertSql( + """ +@__name_0='bar' (Nullable = false) (Size = 255) + +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Name` = @__name_0 +"""); + } + + public override async Task Nullable_and_non_nullable_value_types() + { + await base.Nullable_and_non_nullable_value_types(); + + AssertSql( + """ +@__id1_0='8' (Nullable = true) +@__id2_1='9' + +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Id` = @__id1_0 OR `b`.`Id` = @__id2_1 +"""); + } + + public override async Task Two_nullable_reference_types() + { + await base.Two_nullable_reference_types(); + + AssertSql( + """ +@__name1_0='foo' (Size = 255) +@__name2_1='bar' (Size = 255) + +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Name` = @__name1_0 OR `b`.`Name` = @__name2_1 +"""); + } + + public override async Task Two_non_nullable_reference_types() + { + await base.Two_non_nullable_reference_types(); + + AssertSql( + """ +@__name1_0='foo' (Nullable = false) (Size = 255) +@__name2_1='bar' (Nullable = false) (Size = 255) + +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Name` = @__name1_0 OR `b`.`Name` = @__name2_1 +"""); + } + + public override async Task Nullable_and_non_nullable_reference_types() + { + await base.Nullable_and_non_nullable_reference_types(); + + AssertSql( + """ +@__name1_0='foo' (Size = 255) +@__name2_1='bar' (Nullable = false) (Size = 255) + +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Name` = @__name1_0 OR `b`.`Name` = @__name2_1 +"""); + } + + public override async Task Too_many_nullable_parameters_prevent_pregeneration() + { + await base.Too_many_nullable_parameters_prevent_pregeneration(); + + AssertSql( + """ +@__name1_0='foo' (Size = 255) +@__name2_1='bar' (Size = 255) +@__name3_2='baz' (Size = 255) +@__name4_3='baq' (Size = 255) + +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Name` = @__name1_0 OR `b`.`Name` = @__name2_1 OR `b`.`Name` = @__name3_2 OR `b`.`Name` = @__name4_3 +"""); + } + + public override async Task Many_non_nullable_parameters_do_not_prevent_pregeneration() + { + await base.Many_non_nullable_parameters_do_not_prevent_pregeneration(); + + AssertSql( + """ +@__name1_0='foo' (Nullable = false) (Size = 255) +@__name2_1='bar' (Nullable = false) (Size = 255) +@__name3_2='baz' (Nullable = false) (Size = 255) +@__name4_3='baq' (Nullable = false) (Size = 255) + +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Name` = @__name1_0 OR `b`.`Name` = @__name2_1 OR `b`.`Name` = @__name3_2 OR `b`.`Name` = @__name4_3 +"""); + } + + #region Tests for the different querying enumerables + + public override async Task Include_single_query() + { + await base.Include_single_query(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name`, `p`.`Id`, `p`.`BlogId`, `p`.`Title` +FROM `Blogs` AS `b` +LEFT JOIN `Post` AS `p` ON `b`.`Id` = `p`.`BlogId` +ORDER BY `b`.`Id` +"""); + } + + public override async Task Include_split_query() + { + await base.Include_split_query(); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +ORDER BY `b`.`Id` +""", + // + """ +SELECT `p`.`Id`, `p`.`BlogId`, `p`.`Title`, `b`.`Id` +FROM `Blogs` AS `b` +INNER JOIN `Post` AS `p` ON `b`.`Id` = `p`.`BlogId` +ORDER BY `b`.`Id` +"""); + } + + public override async Task Final_GroupBy() + { + await base.Final_GroupBy(); + + AssertSql( + """ +SELECT `b`.`Name`, `b`.`Id` +FROM `Blogs` AS `b` +ORDER BY `b`.`Name` +"""); + } + + #endregion Tests for the different querying enumerables + + [ConditionalFact] + public virtual async Task Do_not_cache_is_respected() + { + // The "do not cache" flag in the 2nd part of the query pipeline is turned on in provider-specific situations, so we test it + // here in SQL Server; note that SQL Server compatibility mode is set low to trigger this. + await Test( + """ +string[] names = ["foo", "bar"]; +var blogs = await context.Blogs.Where(b => names.Contains(b.Name)).ToListAsync(); +""", + interceptorCodeAsserter: code => Assert.Contains(nameof(RelationalCommandCache), code)); + + AssertSql( + """ +SELECT `b`.`Id`, `b`.`Name` +FROM `Blogs` AS `b` +WHERE `b`.`Name` IN ('foo', 'bar') +"""); + } + + public class PrecompiledSqlPregenerationQueryJetFixture : PrecompiledSqlPregenerationQueryRelationalFixture + { + protected override ITestStoreFactory TestStoreFactory + => JetTestStoreFactory.Instance; + + /*public override DbContextOptionsBuilder AddOptions(DbContextOptionsBuilder builder) + { + builder = base.AddOptions(builder); + + // TODO: Figure out if there's a nice way to continue using the retrying strategy + var jetOptionsBuilder = new JetDbContextOptionsBuilder(builder); + jetOptionsBuilder + .ExecutionStrategy(d => new NonRetryingExecutionStrategy(d)); + return builder; + }*/ + + public override PrecompiledQueryTestHelpers PrecompiledQueryTestHelpers => JetPrecompiledQueryTestHelpers.Instance; + } +} diff --git a/test/EFCore.Jet.FunctionalTests/Query/PrimitiveCollectionsQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/PrimitiveCollectionsQueryJetTest.cs index a70c0c3f..e6329284 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/PrimitiveCollectionsQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/PrimitiveCollectionsQueryJetTest.cs @@ -232,6 +232,20 @@ public override async Task Inline_collection_Contains_with_mixed_value_types(boo """); } + public override async Task Inline_collection_List_Contains_with_mixed_value_types(bool async) + { + await base.Inline_collection_List_Contains_with_mixed_value_types(async); + + AssertSql( + """ +@__i_0='11' + +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`String`, `p`.`Strings` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE `p`.`Int` IN (999, @__i_0, `p`.`Id`, `p`.`Id` + `p`.`Int`) +"""); + } + public override async Task Inline_collection_Contains_as_Any_with_predicate(bool async) { await base.Inline_collection_Contains_as_Any_with_predicate(async); @@ -256,6 +270,186 @@ public override async Task Inline_collection_negated_Contains_as_All(bool async) """); } + public override async Task Inline_collection_Min_with_two_values(bool async) + { + await base.Inline_collection_Min_with_two_values(async); + + AssertSql( + """ +SELECT [p].[Id], [p].[Bool], [p].[Bools], [p].[DateTime], [p].[DateTimes], [p].[Enum], [p].[Enums], [p].[Int], [p].[Ints], [p].[NullableInt], [p].[NullableInts], [p].[NullableString], [p].[NullableStrings], [p].[String], [p].[Strings] +FROM [PrimitiveCollectionsEntity] AS [p] +WHERE ( + SELECT MIN([v].[Value]) + FROM (VALUES (CAST(30 AS int)), ([p].[Int])) AS [v]([Value])) = 30 +"""); + } + + public override async Task Inline_collection_List_Min_with_two_values(bool async) + { + await base.Inline_collection_List_Min_with_two_values(async); + + AssertSql( + """ +SELECT [p].[Id], [p].[Bool], [p].[Bools], [p].[DateTime], [p].[DateTimes], [p].[Enum], [p].[Enums], [p].[Int], [p].[Ints], [p].[NullableInt], [p].[NullableInts], [p].[NullableString], [p].[NullableStrings], [p].[String], [p].[Strings] +FROM [PrimitiveCollectionsEntity] AS [p] +WHERE ( + SELECT MIN([v].[Value]) + FROM (VALUES (CAST(30 AS int)), ([p].[Int])) AS [v]([Value])) = 30 +"""); + } + + public override async Task Inline_collection_Max_with_two_values(bool async) + { + await base.Inline_collection_Max_with_two_values(async); + + AssertSql( + """ +SELECT [p].[Id], [p].[Bool], [p].[Bools], [p].[DateTime], [p].[DateTimes], [p].[Enum], [p].[Enums], [p].[Int], [p].[Ints], [p].[NullableInt], [p].[NullableInts], [p].[NullableString], [p].[NullableStrings], [p].[String], [p].[Strings] +FROM [PrimitiveCollectionsEntity] AS [p] +WHERE ( + SELECT MAX([v].[Value]) + FROM (VALUES (CAST(30 AS int)), ([p].[Int])) AS [v]([Value])) = 30 +"""); + } + + public override async Task Inline_collection_List_Max_with_two_values(bool async) + { + await base.Inline_collection_List_Max_with_two_values(async); + + AssertSql( + """ +SELECT [p].[Id], [p].[Bool], [p].[Bools], [p].[DateTime], [p].[DateTimes], [p].[Enum], [p].[Enums], [p].[Int], [p].[Ints], [p].[NullableInt], [p].[NullableInts], [p].[NullableString], [p].[NullableStrings], [p].[String], [p].[Strings] +FROM [PrimitiveCollectionsEntity] AS [p] +WHERE ( + SELECT MAX([v].[Value]) + FROM (VALUES (CAST(30 AS int)), ([p].[Int])) AS [v]([Value])) = 30 +"""); + } + + public override async Task Inline_collection_Min_with_three_values(bool async) + { + await base.Inline_collection_Min_with_three_values(async); + + AssertSql( + """ +@__i_0='25' + +SELECT [p].[Id], [p].[Bool], [p].[Bools], [p].[DateTime], [p].[DateTimes], [p].[Enum], [p].[Enums], [p].[Int], [p].[Ints], [p].[NullableInt], [p].[NullableInts], [p].[NullableString], [p].[NullableStrings], [p].[String], [p].[Strings] +FROM [PrimitiveCollectionsEntity] AS [p] +WHERE ( + SELECT MIN([v].[Value]) + FROM (VALUES (CAST(30 AS int)), ([p].[Int]), (@__i_0)) AS [v]([Value])) = 25 +"""); + } + + public override async Task Inline_collection_List_Min_with_three_values(bool async) + { + await base.Inline_collection_List_Min_with_three_values(async); + + AssertSql( + """ +@__i_0='25' + +SELECT [p].[Id], [p].[Bool], [p].[Bools], [p].[DateTime], [p].[DateTimes], [p].[Enum], [p].[Enums], [p].[Int], [p].[Ints], [p].[NullableInt], [p].[NullableInts], [p].[NullableString], [p].[NullableStrings], [p].[String], [p].[Strings] +FROM [PrimitiveCollectionsEntity] AS [p] +WHERE ( + SELECT MIN([v].[Value]) + FROM (VALUES (CAST(30 AS int)), ([p].[Int]), (@__i_0)) AS [v]([Value])) = 25 +"""); + } + + public override async Task Inline_collection_Max_with_three_values(bool async) + { + await base.Inline_collection_Max_with_three_values(async); + + AssertSql( + """ +@__i_0='35' + +SELECT [p].[Id], [p].[Bool], [p].[Bools], [p].[DateTime], [p].[DateTimes], [p].[Enum], [p].[Enums], [p].[Int], [p].[Ints], [p].[NullableInt], [p].[NullableInts], [p].[NullableString], [p].[NullableStrings], [p].[String], [p].[Strings] +FROM [PrimitiveCollectionsEntity] AS [p] +WHERE ( + SELECT MAX([v].[Value]) + FROM (VALUES (CAST(30 AS int)), ([p].[Int]), (@__i_0)) AS [v]([Value])) = 35 +"""); + } + + public override async Task Inline_collection_List_Max_with_three_values(bool async) + { + await base.Inline_collection_List_Max_with_three_values(async); + + AssertSql( + """ +@__i_0='35' + +SELECT [p].[Id], [p].[Bool], [p].[Bools], [p].[DateTime], [p].[DateTimes], [p].[Enum], [p].[Enums], [p].[Int], [p].[Ints], [p].[NullableInt], [p].[NullableInts], [p].[NullableString], [p].[NullableStrings], [p].[String], [p].[Strings] +FROM [PrimitiveCollectionsEntity] AS [p] +WHERE ( + SELECT MAX([v].[Value]) + FROM (VALUES (CAST(30 AS int)), ([p].[Int]), (@__i_0)) AS [v]([Value])) = 35 +"""); + } + + public override async Task Inline_collection_of_nullable_value_type_Min(bool async) + { + await base.Inline_collection_of_nullable_value_type_Min(async); + + AssertSql( + """ +@__i_0='25' (Nullable = true) + +SELECT [p].[Id], [p].[Bool], [p].[Bools], [p].[DateTime], [p].[DateTimes], [p].[Enum], [p].[Enums], [p].[Int], [p].[Ints], [p].[NullableInt], [p].[NullableInts], [p].[NullableString], [p].[NullableStrings], [p].[String], [p].[Strings] +FROM [PrimitiveCollectionsEntity] AS [p] +WHERE ( + SELECT MIN([v].[Value]) + FROM (VALUES (CAST(30 AS int)), ([p].[Int]), (@__i_0)) AS [v]([Value])) = 25 +"""); + } + + public override async Task Inline_collection_of_nullable_value_type_Max(bool async) + { + await base.Inline_collection_of_nullable_value_type_Max(async); + + AssertSql( + """ +@__i_0='35' (Nullable = true) + +SELECT [p].[Id], [p].[Bool], [p].[Bools], [p].[DateTime], [p].[DateTimes], [p].[Enum], [p].[Enums], [p].[Int], [p].[Ints], [p].[NullableInt], [p].[NullableInts], [p].[NullableString], [p].[NullableStrings], [p].[String], [p].[Strings] +FROM [PrimitiveCollectionsEntity] AS [p] +WHERE ( + SELECT MAX([v].[Value]) + FROM (VALUES (CAST(30 AS int)), ([p].[Int]), (@__i_0)) AS [v]([Value])) = 35 +"""); + } + + public override async Task Inline_collection_of_nullable_value_type_with_null_Min(bool async) + { + await base.Inline_collection_of_nullable_value_type_with_null_Min(async); + + AssertSql( + """ +SELECT [p].[Id], [p].[Bool], [p].[Bools], [p].[DateTime], [p].[DateTimes], [p].[Enum], [p].[Enums], [p].[Int], [p].[Ints], [p].[NullableInt], [p].[NullableInts], [p].[NullableString], [p].[NullableStrings], [p].[String], [p].[Strings] +FROM [PrimitiveCollectionsEntity] AS [p] +WHERE ( + SELECT MIN([v].[Value]) + FROM (VALUES (CAST(30 AS int)), ([p].[NullableInt]), (NULL)) AS [v]([Value])) = 30 +"""); + } + + public override async Task Inline_collection_of_nullable_value_type_with_null_Max(bool async) + { + await base.Inline_collection_of_nullable_value_type_with_null_Max(async); + + AssertSql( + """ +SELECT [p].[Id], [p].[Bool], [p].[Bools], [p].[DateTime], [p].[DateTimes], [p].[Enum], [p].[Enums], [p].[Int], [p].[Ints], [p].[NullableInt], [p].[NullableInts], [p].[NullableString], [p].[NullableStrings], [p].[String], [p].[Strings] +FROM [PrimitiveCollectionsEntity] AS [p] +WHERE ( + SELECT MAX([v].[Value]) + FROM (VALUES (CAST(30 AS int)), ([p].[NullableInt]), (NULL)) AS [v]([Value])) = 30 +"""); + } + public override Task Parameter_collection_Count(bool async) => AssertTranslationFailedWithDetails(() => base.Parameter_collection_Count(async), JetStrings.QueryingIntoJsonCollectionsNotSupported()); @@ -277,6 +471,24 @@ public override async Task Parameter_collection_of_ints_Contains_int(bool async) """); } + public override async Task Parameter_collection_HashSet_of_ints_Contains_int(bool async) + { + await base.Parameter_collection_HashSet_of_ints_Contains_int(async); + + AssertSql( + """ +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`String`, `p`.`Strings` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE `p`.`Int` IN (10, 999) +""", + // + """ +SELECT `p`.`Id`, `p`.`Bool`, `p`.`Bools`, `p`.`DateTime`, `p`.`DateTimes`, `p`.`Enum`, `p`.`Enums`, `p`.`Int`, `p`.`Ints`, `p`.`NullableInt`, `p`.`NullableInts`, `p`.`NullableString`, `p`.`NullableStrings`, `p`.`String`, `p`.`Strings` +FROM `PrimitiveCollectionsEntity` AS `p` +WHERE `p`.`Int` NOT IN (10, 999) +"""); + } + public override async Task Parameter_collection_of_ints_Contains_nullable_int(bool async) { await base.Parameter_collection_of_ints_Contains_nullable_int(async); @@ -485,6 +697,11 @@ public override Task Column_collection_Count_method(bool async) public override Task Column_collection_Length(bool async) => AssertTranslationFailedWithDetails(() => base.Column_collection_Length(async), JetStrings.QueryingIntoJsonCollectionsNotSupported()); + public override Task Column_collection_Count_with_predicate(bool async) + => AssertTranslationFailedWithDetails(() => base.Column_collection_Count_with_predicate(async), JetStrings.QueryingIntoJsonCollectionsNotSupported()); + + public override Task Column_collection_Where_Count(bool async) + => AssertTranslationFailedWithDetails(() => base.Column_collection_Where_Count(async), JetStrings.QueryingIntoJsonCollectionsNotSupported()); public override Task Column_collection_index_int(bool async) => AssertTranslationFailedWithDetails(() => base.Column_collection_index_int(async), JetStrings.QueryingIntoJsonCollectionsNotSupported()); @@ -520,6 +737,38 @@ ORDER BY [v].[_ord] """); } + public override async Task Inline_collection_value_index_Column(bool async) + { + await base.Inline_collection_value_index_Column(async); + + AssertSql( + """ +SELECT [p].[Id], [p].[Bool], [p].[Bools], [p].[DateTime], [p].[DateTimes], [p].[Enum], [p].[Enums], [p].[Int], [p].[Ints], [p].[NullableInt], [p].[NullableInts], [p].[NullableString], [p].[NullableStrings], [p].[String], [p].[Strings] +FROM [PrimitiveCollectionsEntity] AS [p] +WHERE ( + SELECT [v].[Value] + FROM (VALUES (0, CAST(1 AS int)), (1, [p].[Int]), (2, 3)) AS [v]([_ord], [Value]) + ORDER BY [v].[_ord] + OFFSET [p].[Int] ROWS FETCH NEXT 1 ROWS ONLY) = 1 +"""); + } + + public override async Task Inline_collection_List_value_index_Column(bool async) + { + await base.Inline_collection_List_value_index_Column(async); + + AssertSql( + """ +SELECT [p].[Id], [p].[Bool], [p].[Bools], [p].[DateTime], [p].[DateTimes], [p].[Enum], [p].[Enums], [p].[Int], [p].[Ints], [p].[NullableInt], [p].[NullableInts], [p].[NullableString], [p].[NullableStrings], [p].[String], [p].[Strings] +FROM [PrimitiveCollectionsEntity] AS [p] +WHERE ( + SELECT [v].[Value] + FROM (VALUES (0, CAST(1 AS int)), (1, [p].[Int]), (2, 3)) AS [v]([_ord], [Value]) + ORDER BY [v].[_ord] + OFFSET [p].[Int] ROWS FETCH NEXT 1 ROWS ONLY) = 1 +"""); + } + public override Task Parameter_collection_index_Column_equal_Column(bool async) => AssertTranslationFailedWithDetails(() => base.Parameter_collection_index_Column_equal_Column(async), JetStrings.QueryingIntoJsonCollectionsNotSupported()); @@ -529,6 +778,18 @@ public override Task Parameter_collection_index_Column_equal_constant(bool async public override Task Column_collection_ElementAt(bool async) => AssertTranslationFailedWithDetails(() => base.Column_collection_ElementAt(async), JetStrings.QueryingIntoJsonCollectionsNotSupported()); + public override Task Column_collection_First(bool async) + => AssertTranslationFailedWithDetails(() => base.Column_collection_First(async), JetStrings.QueryingIntoJsonCollectionsNotSupported()); + + public override Task Column_collection_FirstOrDefault(bool async) + => AssertTranslationFailedWithDetails(() => base.Column_collection_FirstOrDefault(async), JetStrings.QueryingIntoJsonCollectionsNotSupported()); + + public override Task Column_collection_Single(bool async) + => AssertTranslationFailedWithDetails(() => base.Column_collection_Single(async), JetStrings.QueryingIntoJsonCollectionsNotSupported()); + + public override Task Column_collection_SingleOrDefault(bool async) + => AssertTranslationFailedWithDetails(() => base.Column_collection_SingleOrDefault(async), JetStrings.QueryingIntoJsonCollectionsNotSupported()); + public override Task Column_collection_Skip(bool async) => AssertTranslationFailedWithDetails(() => base.Column_collection_Skip(async), JetStrings.QueryingIntoJsonCollectionsNotSupported()); @@ -538,15 +799,39 @@ public override Task Column_collection_Take(bool async) public override Task Column_collection_Skip_Take(bool async) => AssertTranslationFailedWithDetails(() => base.Column_collection_Skip_Take(async), JetStrings.QueryingIntoJsonCollectionsNotSupported()); + public override Task Column_collection_Where_Skip(bool async) + => AssertTranslationFailedWithDetails(() => base.Column_collection_Where_Skip(async), JetStrings.QueryingIntoJsonCollectionsNotSupported()); + + public override Task Column_collection_Where_Take(bool async) + => AssertTranslationFailedWithDetails(() => base.Column_collection_Where_Take(async), JetStrings.QueryingIntoJsonCollectionsNotSupported()); + + public override Task Column_collection_Where_Skip_Take(bool async) + => AssertTranslationFailedWithDetails(() => base.Column_collection_Where_Skip_Take(async), JetStrings.QueryingIntoJsonCollectionsNotSupported()); + + public override Task Column_collection_Contains_over_subquery(bool async) + => AssertTranslationFailedWithDetails(() => base.Column_collection_Skip_Take(async), JetStrings.QueryingIntoJsonCollectionsNotSupported()); + public override Task Column_collection_OrderByDescending_ElementAt(bool async) => AssertTranslationFailed(() => base.Column_collection_OrderByDescending_ElementAt(async)); + public override Task Column_collection_Where_ElementAt(bool async) + => AssertTranslationFailed(() => base.Column_collection_Where_ElementAt(async)); + public override Task Column_collection_Any(bool async) => AssertTranslationFailedWithDetails(() => base.Column_collection_Any(async), JetStrings.QueryingIntoJsonCollectionsNotSupported()); public override Task Column_collection_Distinct(bool async) => AssertTranslationFailed(() => base.Column_collection_Distinct(async)); + public override Task Column_collection_SelectMany(bool async) + => AssertTranslationFailed(() => base.Column_collection_SelectMany(async)); + + public override Task Column_collection_SelectMany_with_filter(bool async) + => AssertTranslationFailed(() => base.Column_collection_SelectMany_with_filter(async)); + + public override Task Column_collection_SelectMany_with_Select_to_anonymous_type(bool async) + => AssertTranslationFailed(() => base.Column_collection_SelectMany_with_Select_to_anonymous_type(async)); + public override async Task Column_collection_projection_from_top_level(bool async) { await base.Column_collection_projection_from_top_level(async); @@ -577,6 +862,9 @@ public override Task Column_collection_Intersect_inline_collection(bool async) public override Task Inline_collection_Except_column_collection(bool async) => AssertTranslationFailedWithDetails(() => base.Inline_collection_Except_column_collection(async), JetStrings.QueryingIntoJsonCollectionsNotSupported()); + public override Task Column_collection_Where_Union(bool async) + => AssertTranslationFailedWithDetails(() => base.Inline_collection_Except_column_collection(async), JetStrings.QueryingIntoJsonCollectionsNotSupported()); + public override async Task Column_collection_equality_parameter_collection(bool async) { await base.Column_collection_equality_parameter_collection(async); @@ -617,6 +905,13 @@ public override async Task Column_collection_equality_inline_collection_with_par AssertSql(); } + public override async Task Column_collection_Where_equality_inline_collection(bool async) + { + await base.Column_collection_Where_equality_inline_collection(async); + + AssertSql(); + } + public override Task Parameter_collection_in_subquery_Union_column_collection_as_compiled_query(bool async) => AssertTranslationFailedWithDetails(() => base.Parameter_collection_in_subquery_Union_column_collection_as_compiled_query(async), JetStrings.QueryingIntoJsonCollectionsNotSupported()); @@ -712,6 +1007,18 @@ public override async Task Project_collection_of_nullable_ints_with_distinct(boo AssertSql(""); } + public override async Task Project_collection_of_ints_with_ToList_and_FirstOrDefault(bool async) + { + await base.Project_collection_of_ints_with_ToList_and_FirstOrDefault(async); + + AssertSql( + """ +SELECT TOP 1 `p`.`Ints` +FROM `PrimitiveCollectionsEntity` AS `p` +ORDER BY `p`.`Id` +"""); + } + public override Task Project_multiple_collections(bool async) // we don't propagate error details from projection => AssertTranslationFailed(() => base.Project_multiple_collections(async)); @@ -733,6 +1040,43 @@ ORDER BY `p`.`Id` """); } + public override async Task Project_inline_collection(bool async) + { + await base.Project_inline_collection(async); + + AssertSql( + """ +SELECT `p`.`String` +FROM `PrimitiveCollectionsEntity` AS `p` +"""); + } + + public override async Task Project_inline_collection_with_Union(bool async) + { + await base.Project_inline_collection_with_Union(async); + + AssertSql( + """ +SELECT [p].[Id], [u].[Value] +FROM [PrimitiveCollectionsEntity] AS [p] +OUTER APPLY ( + SELECT [v].[Value] + FROM (VALUES ([p].[String])) AS [v]([Value]) + UNION + SELECT [p0].[String] AS [Value] + FROM [PrimitiveCollectionsEntity] AS [p0] +) AS [u] +ORDER BY [p].[Id] +"""); + } + + public override async Task Project_inline_collection_with_Concat(bool async) + { + await base.Project_inline_collection_with_Concat(async); + + AssertSql(); + } + public override async Task Nested_contains_with_Lists_and_no_inferred_type_mapping(bool async) { await base.Nested_contains_with_Lists_and_no_inferred_type_mapping(async); @@ -767,7 +1111,7 @@ private void AssertSql(params string[] expected) private PrimitiveCollectionsContext CreateContext() => Fixture.CreateContext(); - public class PrimitiveCollectionsQueryJetFixture : PrimitiveCollectionsQueryFixtureBase + public class PrimitiveCollectionsQueryJetFixture : PrimitiveCollectionsQueryFixtureBase, ITestSqlLoggerFactory { protected override string StoreName => "PrimitiveCollectionsTest"; diff --git a/test/EFCore.Jet.FunctionalTests/Query/QueryBugsTest.cs b/test/EFCore.Jet.FunctionalTests/Query/QueryBugsTest.cs deleted file mode 100644 index 1ce73693..00000000 --- a/test/EFCore.Jet.FunctionalTests/Query/QueryBugsTest.cs +++ /dev/null @@ -1,10429 +0,0 @@ -// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -using System; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.ComponentModel.DataAnnotations; -using System.ComponentModel.DataAnnotations.Schema; -using System.Data; -using System.Linq; -using System.Linq.Expressions; -using System.Reflection; -using System.Text; -using System.Threading.Tasks; -using EntityFrameworkCore.Jet.FunctionalTests.TestUtilities; -using System.Data.OleDb; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Diagnostics; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Query.Internal; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using Microsoft.EntityFrameworkCore.TestUtilities; -using Microsoft.Extensions.Caching.Memory; -using Xunit; -using Xunit.Abstractions; -using EntityFrameworkCore.Jet.Infrastructure; -using System.Threading; -using EntityFrameworkCore.Jet.Infrastructure.Internal; -using System.Globalization; -using Microsoft.EntityFrameworkCore.Diagnostics.Internal; - -#pragma warning disable IDE0063 // Use simple 'using' statement - -// ReSharper disable InconsistentNaming -// ReSharper disable ClassNeverInstantiated.Local -// ReSharper disable AccessToDisposedClosure -// ReSharper disable ReturnValueOfPureMethodIsNotUsed -// ReSharper disable UnusedAutoPropertyAccessor.Local -// ReSharper disable UnusedMember.Local -namespace EntityFrameworkCore.Jet.FunctionalTests.Query -{ - public class QueryBugsTest : NonSharedModelTestBase - { - public QueryBugsTest(ITestOutputHelper testOutputHelper) - { - } - - #region Issue14095 - - [ConditionalTheory] - [InlineData(false)] - [InlineData(true)] - public async Task Where_equals_DateTime_Now(bool async) - { - var contextFactory = await InitializeDateTimeContextAsync(); - - using var context = contextFactory.CreateContext(); - var query = context.Dates.Where( - d => d.DateTime == DateTime.Now); - - var results = async - ? await query.ToListAsync() - : query.ToList(); - - Assert.Empty(results); - - AssertSql( -""" -SELECT `d`.`Id`, `d`.`DateTime` -FROM `Dates` AS `d` -WHERE `d`.`DateTime` = NOW() -"""); - } - - [ConditionalTheory] - [InlineData(false)] - [InlineData(true)] - public async Task Where_not_equals_DateTime_Now(bool async) - { - var contextFactory = await InitializeDateTimeContextAsync(); - - using var context = contextFactory.CreateContext(); - var query = context.Dates.Where( - d => d.DateTime != DateTime.Now); - - var results = async - ? await query.ToListAsync() - : query.ToList(); - - Assert.Single(results); - - AssertSql( -""" -SELECT `d`.`Id`, `d`.`DateTime` -FROM `Dates` AS `d` -WHERE `d`.`DateTime` <> NOW() -"""); - } - - [ConditionalTheory] - [InlineData(false)] - [InlineData(true)] - public async Task Where_equals_new_DateTime(bool async) - { - var contextFactory = await InitializeDateTimeContextAsync(); - - using var context = contextFactory.CreateContext(); - var query = context.Dates.Where( - d => d.DateTime == new DateTime(1971, 9, 3, 12, 0, 10, 220)); - - var results = async - ? await query.ToListAsync() - : query.ToList(); - - Assert.Single(results); - - AssertSql( -""" -SELECT `d`.`Id`, `d`.`DateTime` -FROM `Dates` AS `d` -WHERE `d`.`DateTime` = #1971-09-03 12:00:10# -"""); - } - - [ConditionalTheory] - [InlineData(false)] - [InlineData(true)] - public async Task Where_contains_DateTime_literals(bool async) - { - var dateTimes = new[] - { - new DateTime(1970, 9, 3, 12, 0, 0), - new DateTime(1971, 9, 3, 12, 0, 10, 220), - new DateTime(1972, 9, 3, 12, 0, 10, 333), - new DateTime(1973, 9, 3, 12, 0, 10), - new DateTime(1974, 9, 3, 12, 0, 10, 500), - new DateTime(1975, 9, 3, 12, 0, 10, 660), - new DateTime(1976, 9, 3, 12, 0, 10, 777), - new DateTime(1977, 9, 3, 12, 0, 10, 888), - new DateTime(1978, 9, 3, 12, 0, 10, 999), - new DateTime(1979, 9, 3, 12, 0, 10, 111), - new DateTime(1980, 9, 3, 12, 0, 10, 222) - }; - - var contextFactory = await InitializeDateTimeContextAsync(); - - using var context = contextFactory.CreateContext(); - var query = context.Dates.Where( - d => dateTimes.Contains(d.DateTime)); - - var results = async - ? await query.ToListAsync() - : query.ToList(); - - Assert.Single(results); - - // TODO: The parameters values below are incorrect, since we currently don't take the element type mapping into account when - // generating the JSON representation (#30677) - AssertSql( -""" -SELECT `d`.`Id`, `d`.`DateTime` -FROM `Dates` AS `d` -WHERE `d`.`DateTime` IN (#1970-09-03 12:00:00#, #1971-09-03 12:00:10#, #1972-09-03 12:00:10#, #1973-09-03 12:00:10#, #1974-09-03 12:00:10#, #1975-09-03 12:00:10#, #1976-09-03 12:00:10#, #1977-09-03 12:00:10#, #1978-09-03 12:00:10#, #1979-09-03 12:00:10#, #1980-09-03 12:00:10#) -"""); - } - - protected class DateTimeContext : DbContext - { - public DateTimeContext(DbContextOptions options) - : base(options) - { - } - - public DbSet Dates { get; set; } - - public void Seed() - { - Add( - new DatesAndPrunes - { - DateTime = new DateTime(1971, 9, 3, 12, 0, 10, 220) - }); - SaveChanges(); - } - - public class DatesAndPrunes - { - public int Id { get; set; } - - [Column(TypeName = "datetime")] - public DateTime DateTime { get; set; } - } - } - - protected Task> InitializeDateTimeContextAsync() - => InitializeAsync(seed: c => c.Seed()); - - #endregion - - #region Issue6901 - - [ConditionalFact] - public async Task Left_outer_join_Issue_6091() - { - var contextFactory = await InitializeAsync(); - - using var context = contextFactory.CreateContext(); - var customers - = from customer in context.Customers - join postcode in context.Postcodes - on customer.PostcodeID equals postcode.PostcodeID into custPCTmp - from custPC in custPCTmp.DefaultIfEmpty() - select new - { - customer.CustomerID, - customer.CustomerName, - TownName = custPC == null ? string.Empty : custPC.TownName, - PostcodeValue = custPC == null ? string.Empty : custPC.PostcodeValue - }; - - var results = customers.ToList(); - - Assert.Equal(5, results.Count); - Assert.True(results[3].CustomerName != results[4].CustomerName); - } - - protected class Issue6091Context : DbContext - { - public Issue6091Context(DbContextOptions options) - : base(options) - { - } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - modelBuilder.Entity( - c => - { - c.Property(c => c.CustomerID).ValueGeneratedNever(); - c.Property(c => c.CustomerName).HasMaxLength(120).IsUnicode(false); - c.HasData( - new Customer - { - CustomerID = 1, - CustomerName = "Sam Tippet", - PostcodeID = 5 - }, - new Customer - { - CustomerID = 2, - CustomerName = "William Greig", - PostcodeID = 2 - }, - new Customer - { - CustomerID = 3, - CustomerName = "Steve Jones", - PostcodeID = 3 - }, - new Customer { CustomerID = 4, CustomerName = "Jim Warren" }, - new Customer - { - CustomerID = 5, - CustomerName = "Andrew Smith", - PostcodeID = 5 - }); - }); - - modelBuilder.Entity( - p => - { - p.Property(c => c.PostcodeID).ValueGeneratedNever(); - p.Property(c => c.PostcodeValue).HasMaxLength(100).IsUnicode(false); - p.Property(c => c.TownName).HasMaxLength(255).IsUnicode(false); - p.HasData( - new Postcode - { - PostcodeID = 2, - PostcodeValue = "1000", - TownName = "Town 1" - }, - new Postcode - { - PostcodeID = 3, - PostcodeValue = "2000", - TownName = "Town 2" - }, - new Postcode - { - PostcodeID = 4, - PostcodeValue = "3000", - TownName = "Town 3" - }, - new Postcode - { - PostcodeID = 5, - PostcodeValue = "4000", - TownName = "Town 4" - }); - }); - } - - public DbSet Customers { get; set; } - public DbSet Postcodes { get; set; } - - // ReSharper disable once MemberHidesStaticFromOuterClass - public class Customer - { - public int CustomerID { get; set; } - public string CustomerName { get; set; } - public int? PostcodeID { get; set; } - } - - public class Postcode - { - public int PostcodeID { get; set; } - public string PostcodeValue { get; set; } - public string TownName { get; set; } - } - } - - #endregion - - #region Issue5481 - - [ConditionalFact] - public async Task Multiple_optional_navs_should_not_deadlock_Issue_5481() - { - var contextFactory = await InitializeAsync(); - - using var context = contextFactory.CreateContext(); - - var count - = await context.Persons - .Where( - p => p.AddressOne != null && p.AddressOne.Street.Contains("Low Street") - || p.AddressTwo != null && p.AddressTwo.Street.Contains("Low Street")) - .CountAsync(); - - Assert.Equal(0, count); - } - - protected class DeadlockContext : DbContext - { - public DeadlockContext(DbContextOptions options) - : base(options) - { - } - - public DbSet Persons { get; set; } - public DbSet

Addresses { get; set; } - - public class Address - { - public int Id { get; set; } - public string Street { get; set; } - public int PersonId { get; set; } - public Person Person { get; set; } - } - - public class Person - { - public int Id { get; set; } - public string Name { get; set; } - public int? AddressOneId { get; set; } - public Address AddressOne { get; set; } - public int? AddressTwoId { get; set; } - public Address AddressTwo { get; set; } - } - - public void EnsureSeeded() - { - if (!Persons.Any()) - { - AddRange( - new Person { Name = "John Doe" }, - new Person { Name = "Joe Bloggs" }); - - SaveChanges(); - } - } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - base.OnModelCreating(modelBuilder); - - modelBuilder.Entity().HasKey(p => p.Id); - - modelBuilder.Entity().Property(p => p.Name) - .IsRequired(); - - modelBuilder.Entity().HasOne(p => p.AddressOne) - .WithMany() - .HasForeignKey(p => p.AddressOneId) - .OnDelete(DeleteBehavior.Restrict); - - modelBuilder.Entity().Property(p => p.AddressOneId); - - modelBuilder.Entity().HasOne(p => p.AddressTwo) - .WithMany() - .HasForeignKey(p => p.AddressTwoId) - .OnDelete(DeleteBehavior.Restrict); - - modelBuilder.Entity().Property(p => p.AddressTwoId); - - modelBuilder.Entity
().HasKey(a => a.Id); - - modelBuilder.Entity
().Property(a => a.Street).IsRequired(); - - modelBuilder.Entity
().HasOne(a => a.Person) - .WithMany() - .HasForeignKey(a => a.PersonId) - .OnDelete(DeleteBehavior.Restrict); - } - } - - #endregion - - #region Issue2951 - - [ConditionalFact] - public async Task Query_when_null_key_in_database_should_throw() - { - var contextFactory = await InitializeAsync(onConfiguring: o => o.EnableDetailedErrors()); - - using var context = contextFactory.CreateContext(); - await context.Database.ExecuteSqlRawAsync( - @" -CREATE TABLE ZeroKey (Id int); -INSERT ZeroKey VALUES (NULL)"); - - Assert.Equal( - RelationalStrings.ErrorMaterializingPropertyNullReference("ZeroKey", "Id", typeof(int)), - Assert.Throws(() => context.ZeroKeys.ToList()).Message); - } - - protected class NullKeyContext : DbContext - { - public NullKeyContext(DbContextOptions options) - : base(options) - { - } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - => modelBuilder.Entity().ToTable("ZeroKey", t => t.ExcludeFromMigrations()) - .Property(z => z.Id).ValueGeneratedNever(); - - public DbSet ZeroKeys { get; set; } - - public class ZeroKey - { - public int Id { get; set; } - } - } - - #endregion - - #region Issue603 - - [ConditionalFact] - public async Task First_FirstOrDefault_ix_async_Issue_603() - { - var contextFactory = await InitializeAsync(); - - using (var context = contextFactory.CreateContext()) - { - var product = await context.Products.OrderBy(p => p.Id).FirstAsync(); - - context.Products.Remove(product); - - await context.SaveChangesAsync(); - } - - using (var context = contextFactory.CreateContext()) - { - context.Products.Add( - new MyContext603.Product { Name = "Product 1" }); - context.SaveChanges(); - } - - using (var context = contextFactory.CreateContext()) - { - var product = await context.Products.OrderBy(p => p.Id).FirstOrDefaultAsync(); - - context.Products.Remove(product); - - await context.SaveChangesAsync(); - } - } - - protected class MyContext603 : DbContext - { - public MyContext603(DbContextOptions options) - : base(options) - { - } - - public DbSet Products { get; set; } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - => modelBuilder.Entity().ToTable("Product") - .HasData(new Product { Id = 1, Name = "Product 1" }); - - public class Product - { - public int Id { get; set; } - - public string Name { get; set; } - } - } - - #endregion - - #region Issues925_926 - - [ConditionalFact] - public async Task Include_on_entity_with_composite_key_One_To_Many_Issues_925_926() - { - var contextFactory = await InitializeAsync(); - - using var ctx = contextFactory.CreateContext(); - var query = ctx.Customers.Include(c => c.Orders).OrderBy(c => c.FirstName).ThenBy(c => c.LastName); - var result = query.ToList(); - - Assert.Equal(2, result.Count); - Assert.Equal(2, result[0].Orders.Count); - Assert.Equal(3, result[1].Orders.Count); - - AssertSql( -""" -SELECT `c`.`FirstName`, `c`.`LastName`, `o`.`Id`, `o`.`CustomerFirstName`, `o`.`CustomerLastName`, `o`.`Name` -FROM `Customer` AS `c` -LEFT JOIN `Order` AS `o` ON `c`.`FirstName` = `o`.`CustomerFirstName` AND `c`.`LastName` = `o`.`CustomerLastName` -ORDER BY `c`.`FirstName`, `c`.`LastName` -"""); - } - - [ConditionalFact] - public async Task Include_on_entity_with_composite_key_Many_To_One_Issues_925_926() - { - var contextFactory = await InitializeAsync(); - - using var ctx = contextFactory.CreateContext(); - var query = ctx.Orders.Include(o => o.Customer); - var result = query.ToList(); - - Assert.Equal(5, result.Count); - Assert.NotNull(result[0].Customer); - Assert.NotNull(result[1].Customer); - Assert.NotNull(result[2].Customer); - Assert.NotNull(result[3].Customer); - Assert.NotNull(result[4].Customer); - - AssertSql( -""" -SELECT `o`.`Id`, `o`.`CustomerFirstName`, `o`.`CustomerLastName`, `o`.`Name`, `c`.`FirstName`, `c`.`LastName` -FROM `Order` AS `o` -LEFT JOIN `Customer` AS `c` ON `o`.`CustomerFirstName` = `c`.`FirstName` AND `o`.`CustomerLastName` = `c`.`LastName` -"""); - } - - private class MyContext925 : DbContext - { - public MyContext925(DbContextOptions options) - : base(options) - { - } - - public DbSet Customers { get; set; } - public DbSet Orders { get; set; } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - modelBuilder.Entity( - m => - { - m.ToTable("Customer"); - m.HasKey( - c => new { c.FirstName, c.LastName }); - m.HasMany(c => c.Orders).WithOne(o => o.Customer); - m.HasData( - new Customer { FirstName = "Customer", LastName = "One" }, - new Customer { FirstName = "Customer", LastName = "Two" }); - }); - - modelBuilder.Entity().ToTable("Order") - .HasData( - new - { - Id = 1, - Name = "Order11", - CustomerFirstName = "Customer", - CustomerLastName = "One" - }, - new - { - Id = 2, - Name = "Order12", - CustomerFirstName = "Customer", - CustomerLastName = "One" - }, - new - { - Id = 3, - Name = "Order21", - CustomerFirstName = "Customer", - CustomerLastName = "Two" - }, - new - { - Id = 4, - Name = "Order22", - CustomerFirstName = "Customer", - CustomerLastName = "Two" - }, - new - { - Id = 5, - Name = "Order23", - CustomerFirstName = "Customer", - CustomerLastName = "Two" - }); - } - - public class Customer - { - public string FirstName { get; set; } - public string LastName { get; set; } - public List Orders { get; set; } - } - - public class Order - { - public int Id { get; set; } - public string Name { get; set; } - public Customer Customer { get; set; } - } - } - - #endregion - - #region Issue963 - - [ConditionalFact] - public async Task Include_on_optional_navigation() - { - var contextFactory = await InitializeAsync(); - - using (var ctx = contextFactory.CreateContext()) - { - var targaryens = ctx.Targaryens.Include(t => t.Dragons).ToList(); - - Assert.All(targaryens, t => Assert.NotNull(t.Dragons)); - } - - using (var ctx = contextFactory.CreateContext()) - { - var dragons = ctx.Dragons.Include(d => d.Mother).ToList(); - - dragons = dragons.OrderBy(d => d.Id).ToList(); - - Assert.Collection( - dragons, - t => Assert.NotNull(t.Mother), - t => Assert.NotNull(t.Mother), - t => Assert.NotNull(t.Mother), - t => Assert.Null(t.Mother)); - } - - using (var ctx = contextFactory.CreateContext()) - { - var targaryens = ctx.Targaryens.Include(t => t.Details).ToList(); - - targaryens = targaryens.OrderBy(d => d.Id).ToList(); - - Assert.Collection( - targaryens, - t => Assert.Null(t.Details), - t => Assert.NotNull(t.Details)); - } - - using (var ctx = contextFactory.CreateContext()) - { - var details = ctx.Details.Include(d => d.Targaryen).ToList(); - - Assert.All(details, t => Assert.NotNull(t.Targaryen)); - } - - using (var ctx = contextFactory.CreateContext()) - { - var dragons = (from t in ctx.Targaryens - join d in ctx.Dragons on t.Id equals d.MotherId - select d).ToList(); - - Assert.Equal(3, dragons.Count()); - } - } - - protected class MyContext963 : DbContext - { - public MyContext963(DbContextOptions options) - : base(options) - { - } - - public DbSet Targaryens { get; set; } - - public DbSet Details { get; set; } - - public DbSet Dragons { get; set; } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - modelBuilder.Entity( - m => - { - m.ToTable("Targaryen"); - m.HasKey(t => t.Id); - m.HasMany(t => t.Dragons).WithOne(d => d.Mother).HasForeignKey(d => d.MotherId); - m.HasOne(t => t.Details).WithOne(d => d.Targaryen).HasForeignKey(d => d.TargaryenId); - m.HasData( - new Targaryen { Id = 1, Name = "Aerys II" }, - new Targaryen { Id = 2, Name = "Daenerys" }); - }); - - modelBuilder.Entity().HasData( - new TargaryenDetails - { - Id = 2, - TargaryenId = 2, - FullName = @"Daenerys Stormborn of the House Targaryen, the First of Her Name, the Unburnt, Queen of Meereen, -Queen of the Andals and the Rhoynar and the First Men, Khaleesi of the Great Grass Sea, Breaker of Chains, and Mother of Dragons" - }); - - modelBuilder.Entity().ToTable("Dragon") - .HasData( - new Dragon - { - Id = 1, - Name = "Drogon", - MotherId = 2 - }, - new Dragon - { - Id = 2, - Name = "Rhaegal", - MotherId = 2 - }, - new Dragon - { - Id = 3, - Name = "Viserion", - MotherId = 2 - }, - new Dragon { Id = 4, Name = "Balerion" }); - } - - public class Targaryen - { - public int Id { get; set; } - public string Name { get; set; } - public TargaryenDetails Details { get; set; } - - public List Dragons { get; set; } - } - - public class Dragon - { - public int Id { get; set; } - public string Name { get; set; } - public int? MotherId { get; set; } - public Targaryen Mother { get; set; } - } - - public class TargaryenDetails - { - public int Id { get; set; } - public int? TargaryenId { get; set; } - public Targaryen Targaryen { get; set; } - public string FullName { get; set; } - } - } - - #endregion - - #region Issue1742 - - [ConditionalFact] - public void Compiler_generated_local_closure_produces_valid_parameter_name_1742() - => Execute1742(new CustomerDetails_1742 { FirstName = "Foo", LastName = "Bar" }); - - private void Execute1742(CustomerDetails_1742 details) - { - var contextFactory = Initialize(); - - using var ctx = contextFactory.CreateContext(); - var firstName = details.FirstName; - ctx.Customers.Where(c => c.FirstName == firstName && c.LastName == details.LastName).ToList(); - - // No AssertSQL since compiler generated variable names are different between local and CI - } - - private class CustomerDetails_1742 - { - public string FirstName { get; set; } - public string LastName { get; set; } - } - - #endregion - - #region Issue3758 - - [ConditionalFact] - public async Task Customer_collections_materialize_properly_3758() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using var ctx = contextFactory.CreateContext(); - - var query1 = ctx.Customers.Select(c => c.Orders1); - var result1 = query1.ToList(); - - Assert.Equal(2, result1.Count); - Assert.IsType>(result1[0]); - Assert.Equal(2, result1[0].Count); - Assert.Equal(2, result1[1].Count); - - var query2 = ctx.Customers.Select(c => c.Orders2); - var result2 = query2.ToList(); - - Assert.Equal(2, result2.Count); - Assert.IsType>(result2[0]); - Assert.Equal(2, result2[0].Count); - Assert.Equal(2, result2[1].Count); - - var query3 = ctx.Customers.Select(c => c.Orders3); - var result3 = query3.ToList(); - - Assert.Equal(2, result3.Count); - Assert.IsType(result3[0]); - Assert.Equal(2, result3[0].Count); - Assert.Equal(2, result3[1].Count); - - var query4 = ctx.Customers.Select(c => c.Orders4); - - Assert.Equal( - CoreStrings.NavigationCannotCreateType( - "Orders4", typeof(MyContext3758.Customer3758).Name, - typeof(MyContext3758.MyInvalidCollection3758).ShortDisplayName()), - Assert.Throws(() => query4.ToList()).Message); - } - - protected class MyContext3758 : DbContext - { - public MyContext3758(DbContextOptions options) - : base(options) - { - } - - public DbSet Customers { get; set; } - public DbSet Orders { get; set; } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - modelBuilder.Entity( - b => - { - b.ToTable("Customer3758"); - - b.HasMany(e => e.Orders1).WithOne().HasForeignKey("CustomerId1"); - b.HasMany(e => e.Orders2).WithOne().HasForeignKey("CustomerId2"); - b.HasMany(e => e.Orders3).WithOne().HasForeignKey("CustomerId3"); - b.HasMany(e => e.Orders4).WithOne().HasForeignKey("CustomerId4"); - }); - - modelBuilder.Entity().ToTable("Order3758"); - } - - public void Seed() - { - var o111 = new Order3758 { Name = "O111" }; - var o112 = new Order3758 { Name = "O112" }; - var o121 = new Order3758 { Name = "O121" }; - var o122 = new Order3758 { Name = "O122" }; - var o131 = new Order3758 { Name = "O131" }; - var o132 = new Order3758 { Name = "O132" }; - var o141 = new Order3758 { Name = "O141" }; - - var o211 = new Order3758 { Name = "O211" }; - var o212 = new Order3758 { Name = "O212" }; - var o221 = new Order3758 { Name = "O221" }; - var o222 = new Order3758 { Name = "O222" }; - var o231 = new Order3758 { Name = "O231" }; - var o232 = new Order3758 { Name = "O232" }; - var o241 = new Order3758 { Name = "O241" }; - - var c1 = new Customer3758 - { - Name = "C1", - Orders1 = new List { o111, o112 }, - Orders2 = new MyGenericCollection3758(), - Orders3 = new MyNonGenericCollection3758(), - Orders4 = new MyInvalidCollection3758(42) - }; - - c1.Orders2.AddRange(new[] { o121, o122 }); - c1.Orders3.AddRange(new[] { o131, o132 }); - c1.Orders4.Add(o141); - - var c2 = new Customer3758 - { - Name = "C2", - Orders1 = new List { o211, o212 }, - Orders2 = new MyGenericCollection3758(), - Orders3 = new MyNonGenericCollection3758(), - Orders4 = new MyInvalidCollection3758(42) - }; - - c2.Orders2.AddRange(new[] { o221, o222 }); - c2.Orders3.AddRange(new[] { o231, o232 }); - c2.Orders4.Add(o241); - - Customers.AddRange(c1, c2); - Orders.AddRange( - o111, o112, o121, o122, - o131, o132, o141, o211, - o212, o221, o222, o231, - o232, o241); - - SaveChanges(); - } - - public class Customer3758 - { - public int Id { get; set; } - public string Name { get; set; } - - public ICollection Orders1 { get; set; } - public MyGenericCollection3758 Orders2 { get; set; } - public MyNonGenericCollection3758 Orders3 { get; set; } - public MyInvalidCollection3758 Orders4 { get; set; } - } - - public class Order3758 - { - public int Id { get; set; } - public string Name { get; set; } - } - - public class MyGenericCollection3758 : List - { - } - - public class MyNonGenericCollection3758 : List - { - } - - public class MyInvalidCollection3758 : List - { - public MyInvalidCollection3758(int argument) - { - var _ = argument; - } - } - } - - #endregion - - #region Issue3409 - - [ConditionalFact] - public async Task ThenInclude_with_interface_navigations_3409() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - var results = context.Parents - .Include(p => p.ChildCollection) - .ThenInclude(c => c.SelfReferenceCollection) - .ToList(); - - Assert.Single(results); - Assert.Equal(1, results[0].ChildCollection.Count); - Assert.Equal(2, results[0].ChildCollection.Single().SelfReferenceCollection.Count); - } - - using (var context = contextFactory.CreateContext()) - { - var results = context.Children - .Select( - c => new { c.SelfReferenceBackNavigation, c.SelfReferenceBackNavigation.ParentBackNavigation }) - .ToList(); - - Assert.Equal(3, results.Count); - Assert.Equal(2, results.Count(c => c.SelfReferenceBackNavigation != null)); - Assert.Equal(2, results.Count(c => c.ParentBackNavigation != null)); - } - - using (var context = contextFactory.CreateContext()) - { - var results = context.Children - .Select( - c => new - { - SelfReferenceBackNavigation - = EF.Property(c, "SelfReferenceBackNavigation"), - ParentBackNavigationB - = EF.Property( - EF.Property(c, "SelfReferenceBackNavigation"), - "ParentBackNavigation") - }) - .ToList(); - - Assert.Equal(3, results.Count); - Assert.Equal(2, results.Count(c => c.SelfReferenceBackNavigation != null)); - Assert.Equal(2, results.Count(c => c.ParentBackNavigationB != null)); - } - - using (var context = contextFactory.CreateContext()) - { - var results = context.Children - .Include(c => c.SelfReferenceBackNavigation) - .ThenInclude(c => c.ParentBackNavigation) - .ToList(); - - Assert.Equal(3, results.Count); - Assert.Equal(2, results.Count(c => c.SelfReferenceBackNavigation != null)); - Assert.Equal(1, results.Count(c => c.ParentBackNavigation != null)); - } - } - - private class MyContext3409 : DbContext - { - public DbSet Parents { get; set; } - public DbSet Children { get; set; } - - public MyContext3409(DbContextOptions options) - : base(options) - { - } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - modelBuilder.Entity() - .HasMany(p => (ICollection)p.ChildCollection) - .WithOne(c => (Parent3409)c.ParentBackNavigation); - - modelBuilder.Entity() - .HasMany(c => (ICollection)c.SelfReferenceCollection) - .WithOne(c => (Child3409)c.SelfReferenceBackNavigation); - } - - public void Seed() - { - var parent1 = new Parent3409(); - - var child1 = new Child3409(); - var child2 = new Child3409(); - var child3 = new Child3409(); - - parent1.ChildCollection = new List { child1 }; - child1.SelfReferenceCollection = new List { child2, child3 }; - - Parents.AddRange(parent1); - Children.AddRange(child1, child2, child3); - - SaveChanges(); - } - - public interface IParent3409 - { - int Id { get; set; } - - ICollection ChildCollection { get; set; } - } - - public interface IChild3409 - { - int Id { get; set; } - - int? ParentBackNavigationId { get; set; } - IParent3409 ParentBackNavigation { get; set; } - - ICollection SelfReferenceCollection { get; set; } - int? SelfReferenceBackNavigationId { get; set; } - IChild3409 SelfReferenceBackNavigation { get; set; } - } - - public class Parent3409 : IParent3409 - { - public int Id { get; set; } - - public ICollection ChildCollection { get; set; } - } - - public class Child3409 : IChild3409 - { - public int Id { get; set; } - - public int? ParentBackNavigationId { get; set; } - public IParent3409 ParentBackNavigation { get; set; } - - public ICollection SelfReferenceCollection { get; set; } - public int? SelfReferenceBackNavigationId { get; set; } - public IChild3409 SelfReferenceBackNavigation { get; set; } - } - } - - #endregion - - #region Issue3101 - - [ConditionalFact] - public virtual async Task Repro3101_simple_coalesce() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var ctx = contextFactory.CreateContext()) - { - var query = from eVersion in ctx.Entities.Include(e => e.Children) - join eRoot in ctx.Entities - on eVersion.RootEntityId equals eRoot.Id - into RootEntities - from eRootJoined in RootEntities.DefaultIfEmpty() - select eRootJoined ?? eVersion; - - var result = query.ToList(); - - Assert.True(result.All(e => e.Children.Count > 0)); - } - - using (var ctx = contextFactory.CreateContext()) - { - var query = from eVersion in ctx.Entities - join eRoot in ctx.Entities.Include(e => e.Children) - on eVersion.RootEntityId equals eRoot.Id - into RootEntities - from eRootJoined in RootEntities.DefaultIfEmpty() - select eRootJoined ?? eVersion; - - var result = query.ToList(); - - Assert.Equal(2, result.Count(e => e.Children.Count > 0)); - } - - using (var ctx = contextFactory.CreateContext()) - { - var query = from eVersion in ctx.Entities.Include(e => e.Children) - join eRoot in ctx.Entities.Include(e => e.Children) - on eVersion.RootEntityId equals eRoot.Id - into RootEntities - from eRootJoined in RootEntities.DefaultIfEmpty() - select eRootJoined ?? eVersion; - - var result = query.ToList(); - - Assert.True(result.All(e => e.Children.Count > 0)); - } - } - - [ConditionalFact] - public virtual async Task Repro3101_complex_coalesce() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var ctx = contextFactory.CreateContext()) - { - var query = from eVersion in ctx.Entities.Include(e => e.Children) - join eRoot in ctx.Entities - on eVersion.RootEntityId equals eRoot.Id - into RootEntities - from eRootJoined in RootEntities.DefaultIfEmpty() - select new { One = 1, Coalesce = eRootJoined ?? eVersion }; - - var result = query.ToList(); - - Assert.True(result.All(e => e.Coalesce.Children.Count > 0)); - } - - using (var ctx = contextFactory.CreateContext()) - { - var query = from eVersion in ctx.Entities - join eRoot in ctx.Entities.Include(e => e.Children) - on eVersion.RootEntityId equals eRoot.Id - into RootEntities - from eRootJoined in RootEntities.DefaultIfEmpty() - select new { Root = eRootJoined, Coalesce = eRootJoined ?? eVersion }; - - var result = query.ToList(); - - Assert.Equal(2, result.Count(e => e.Coalesce.Children.Count > 0)); - } - } - - [ConditionalFact] - public virtual async Task Repro3101_nested_coalesce() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var ctx = contextFactory.CreateContext()) - { - var query = from eVersion in ctx.Entities - join eRoot in ctx.Entities.Include(e => e.Children) - on eVersion.RootEntityId equals eRoot.Id - into RootEntities - from eRootJoined in RootEntities.DefaultIfEmpty() - // ReSharper disable once ConstantNullCoalescingCondition - select new { One = 1, Coalesce = eRootJoined ?? (eVersion ?? eRootJoined) }; - - var result = query.ToList(); - Assert.Equal(2, result.Count(e => e.Coalesce.Children.Count > 0)); - } - - using (var ctx = contextFactory.CreateContext()) - { - var query = from eVersion in ctx.Entities.Include(e => e.Children) - join eRoot in ctx.Entities - on eVersion.RootEntityId equals eRoot.Id - into RootEntities - from eRootJoined in RootEntities.DefaultIfEmpty() - // ReSharper disable once ConstantNullCoalescingCondition - select new - { - One = eRootJoined, - Two = 2, - Coalesce = eRootJoined ?? (eVersion ?? eRootJoined) - }; - - var result = query.ToList(); - Assert.True(result.All(e => e.Coalesce.Children.Count > 0)); - } - } - - [ConditionalFact] - public virtual async Task Repro3101_conditional() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var ctx = contextFactory.CreateContext()) - { - var query = from eVersion in ctx.Entities.Include(e => e.Children) - join eRoot in ctx.Entities - on eVersion.RootEntityId equals eRoot.Id - into RootEntities - from eRootJoined in RootEntities.DefaultIfEmpty() - // ReSharper disable once MergeConditionalExpression -#pragma warning disable IDE0029 // Use coalesce expression - select eRootJoined != null ? eRootJoined : eVersion; -#pragma warning restore IDE0029 // Use coalesce expression - - var result = query.ToList(); - Assert.True(result.All(e => e.Children.Count > 0)); - } - } - - [ConditionalFact] - public virtual async Task Repro3101_coalesce_tracking() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var ctx = contextFactory.CreateContext()) - { - var query = from eVersion in ctx.Entities - join eRoot in ctx.Entities - on eVersion.RootEntityId equals eRoot.Id - into RootEntities - from eRootJoined in RootEntities.DefaultIfEmpty() - select new - { - eRootJoined, - eVersion, - foo = eRootJoined ?? eVersion - }; - - query.ToList(); - - Assert.True(ctx.ChangeTracker.Entries().Any()); - } - } - - private class MyContext3101 : DbContext - { - public MyContext3101(DbContextOptions options) - : base(options) - { - } - - public DbSet Entities { get; set; } - public DbSet Children { get; set; } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - => modelBuilder.Entity().Property(e => e.Id).ValueGeneratedNever(); - - public void Seed() - { - var c11 = new Child3101 { Name = "c11" }; - var c12 = new Child3101 { Name = "c12" }; - var c13 = new Child3101 { Name = "c13" }; - var c21 = new Child3101 { Name = "c21" }; - var c22 = new Child3101 { Name = "c22" }; - var c31 = new Child3101 { Name = "c31" }; - var c32 = new Child3101 { Name = "c32" }; - - Children.AddRange(c11, c12, c13, c21, c22, c31, c32); - - var e1 = new Entity3101 { Id = 1, Children = new[] { c11, c12, c13 } }; - var e2 = new Entity3101 { Id = 2, Children = new[] { c21, c22 } }; - var e3 = new Entity3101 { Id = 3, Children = new[] { c31, c32 } }; - - e2.RootEntity = e1; - - Entities.AddRange(e1, e2, e3); - SaveChanges(); - } - - public class Entity3101 - { - public Entity3101() - { - Children = new Collection(); - } - - public int Id { get; set; } - - public int? RootEntityId { get; set; } - - public Entity3101 RootEntity { get; set; } - - public ICollection Children { get; set; } - } - - public class Child3101 - { - public int Id { get; set; } - public string Name { get; set; } - } - } - - #endregion - - #region Issue6986 - - [ConditionalFact] - public virtual async Task Repro6986() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - // can_query_base_type_when_derived_types_contain_shadow_properties - var query = context.Contacts.ToList(); - - Assert.Equal(4, query.Count); - Assert.Equal(2, query.OfType().Count()); - Assert.Single(query.OfType()); - } - - using (var context = contextFactory.CreateContext()) - { - // can_include_dependent_to_principal_navigation_of_derived_type_with_shadow_fk - var query = context.Contacts.OfType().Include(e => e.ServiceOperator6986) - .ToList(); - - Assert.Single(query); - Assert.NotNull(query[0].ServiceOperator6986); - } - - using (var context = contextFactory.CreateContext()) - { - // can_project_shadow_property_using_ef_property - var query = context.Contacts.OfType().Select( - c => new { c, Prop = EF.Property(c, "ServiceOperator6986Id") }).ToList(); - - Assert.Single(query); - Assert.Equal(1, query[0].Prop); - } - } - - private class ReproContext6986 : DbContext - { - public ReproContext6986(DbContextOptions options) - : base(options) - { - } - - public DbSet Contacts { get; set; } - public DbSet EmployerContacts { get; set; } - public DbSet Employers { get; set; } - public DbSet ServiceOperatorContacts { get; set; } - public DbSet ServiceOperators { get; set; } - - public void Seed() - { - ServiceOperators.Add(new ServiceOperator6986()); - Employers.AddRange( - new Employer6986 { Name = "UWE" }, - new Employer6986 { Name = "Hewlett Packard" }); - - SaveChanges(); - - Contacts.AddRange( - new ServiceOperatorContact6986 - { - UserName = "service.operator@esoterix.co.uk", - ServiceOperator6986 = ServiceOperators.OrderBy(o => o.Id).First() - }, - new EmployerContact6986 - { - UserName = "uwe@esoterix.co.uk", - Employer6986 = Employers.OrderBy(e => e.Id).First(e => e.Name == "UWE") - }, - new EmployerContact6986 - { - UserName = "hp@esoterix.co.uk", - Employer6986 = Employers.OrderBy(e => e.Id).First(e => e.Name == "Hewlett Packard") - }, - new Contact6986 { UserName = "noroles@esoterix.co.uk" }); - SaveChanges(); - } - - public class EmployerContact6986 : Contact6986 - { - [Required] - public Employer6986 Employer6986 { get; set; } - } - - public class ServiceOperatorContact6986 : Contact6986 - { - [Required] - public ServiceOperator6986 ServiceOperator6986 { get; set; } - } - - public class Contact6986 - { - public int Id { get; set; } - public string UserName { get; set; } - public bool IsPrimary { get; set; } - } - - public class Employer6986 - { - public int Id { get; set; } - public string Name { get; set; } - public List Contacts { get; set; } - } - - public class ServiceOperator6986 - { - public int Id { get; set; } - public List Contacts { get; set; } - } - } - - #endregion - - #region Issue5456 - - [ConditionalFact] - public virtual async Task Repro5456_include_group_join_is_per_query_context() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - Parallel.For( - 0, 10, i => - { - using var ctx = contextFactory.CreateContext(); - var result = ctx.Posts.Where(x => x.Blog.Id > 1).Include(x => x.Blog).ToList(); - - Assert.Equal(198, result.Count); - }); - - Parallel.For( - 0, 10, i => - { - using var ctx = contextFactory.CreateContext(); - var result = ctx.Posts.Where(x => x.Blog.Id > 1).Include(x => x.Blog).Include(x => x.Comments).ToList(); - - Assert.Equal(198, result.Count); - }); - - Parallel.For( - 0, 10, i => - { - using var ctx = contextFactory.CreateContext(); - var result = ctx.Posts.Where(x => x.Blog.Id > 1).Include(x => x.Blog).ThenInclude(b => b.Author).ToList(); - - Assert.Equal(198, result.Count); - }); - } - - [ConditionalFact] - public virtual async Task Repro5456_include_group_join_is_per_query_context_async() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - await Task.WhenAll( - Enumerable.Range(0, 10) - .Select( - async i => - { - using var ctx = contextFactory.CreateContext(); - var result = await ctx.Posts.Where(x => x.Blog.Id > 1).Include(x => x.Blog).ToListAsync(); - - Assert.Equal(198, result.Count); - })); - - await Task.WhenAll( - Enumerable.Range(0, 10) - .Select( - async i => - { - using var ctx = contextFactory.CreateContext(); - var result = await ctx.Posts.Where(x => x.Blog.Id > 1).Include(x => x.Blog).Include(x => x.Comments) - .ToListAsync(); - - Assert.Equal(198, result.Count); - })); - - await Task.WhenAll( - Enumerable.Range(0, 10) - .Select( - async i => - { - using var ctx = contextFactory.CreateContext(); - var result = await ctx.Posts.Where(x => x.Blog.Id > 1).Include(x => x.Blog).ThenInclude(b => b.Author) - .ToListAsync(); - - Assert.Equal(198, result.Count); - })); - } - - protected class MyContext5456 : DbContext - { - public MyContext5456(DbContextOptions options) - : base(options) - { - } - - public DbSet Blogs { get; set; } - public DbSet Posts { get; set; } - public DbSet Comments { get; set; } - public DbSet Authors { get; set; } - - public void Seed() - { - for (var i = 0; i < 100; i++) - { - Add( - new Blog5456 - { - Posts = new List { new() { Comments = new List { new(), new() } }, new() }, - Author = new Author5456() - }); - } - - SaveChanges(); - } - - public class Blog5456 - { - public int Id { get; set; } - public List Posts { get; set; } - public Author5456 Author { get; set; } - } - - public class Author5456 - { - public int Id { get; set; } - public List Blogs { get; set; } - } - - public class Post5456 - { - public int Id { get; set; } - public Blog5456 Blog { get; set; } - public List Comments { get; set; } - } - - public class Comment5456 - { - public int Id { get; set; } - public Post5456 Blog { get; set; } - } - } - - #endregion - - #region Issue7359 - - [ConditionalFact] - public virtual async Task Discriminator_type_is_handled_correctly() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var ctx = contextFactory.CreateContext()) - { - var query = ctx.Products.OfType().ToList(); - - Assert.Single(query); - } - - using (var ctx = contextFactory.CreateContext()) - { - var query = ctx.Products.Where(p => p is MyContext7359.SpecialProduct).ToList(); - - Assert.Single(query); - } - } - - protected class MyContext7359 : DbContext - { - public MyContext7359(DbContextOptions options) - : base(options) - { - } - - public DbSet Products { get; set; } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - modelBuilder.Entity(); - modelBuilder.Entity() - .HasDiscriminator("Discriminator") - .HasValue(0) - .HasValue(1); - } - - public void Seed() - { - Add(new Product { Name = "Product1" }); - Add(new SpecialProduct { Name = "SpecialProduct" }); - SaveChanges(); - } - - public class Product - { - public int Id { get; set; } - - public string Name { get; set; } - } - - public class SpecialProduct : Product - { - } - } - - #endregion - - #region Issue7312 - - [ConditionalFact] - public virtual async Task Reference_include_on_derived_type_with_sibling_works_Issue_7312() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - var query = context.Proposal.OfType().Include(l => l.LeaveType).ToList(); - - Assert.Single(query); - } - } - - private class MyContext7312 : DbContext - { - public MyContext7312(DbContextOptions options) - : base(options) - { - } - - public DbSet Proposal { get; set; } - public DbSet ProposalCustoms { get; set; } - public DbSet ProposalLeaves { get; set; } - - public void Seed() - { - AddRange( - new Proposal7312(), - new ProposalCustom7312 { Name = "CustomProposal" }, - new ProposalLeave7312 { LeaveStart = DateTime.Now, LeaveType = new ProposalLeaveType7312() } - ); - SaveChanges(); - } - - public class Proposal7312 - { - public int Id { get; set; } - } - - public class ProposalCustom7312 : Proposal7312 - { - public string Name { get; set; } - } - - public class ProposalLeave7312 : Proposal7312 - { - public DateTime LeaveStart { get; set; } - public virtual ProposalLeaveType7312 LeaveType { get; set; } - } - - public class ProposalLeaveType7312 - { - public int Id { get; set; } - public ICollection ProposalLeaves { get; set; } - } - } - - #endregion - - #region Issue8282 - - [ConditionalFact] - public virtual async Task Entity_passed_to_DTO_constructor_works() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - var query = context.Entity.Select(e => new MyContext8282.EntityDto8282(e)).ToList(); - - Assert.Single(query); - } - } - - private class MyContext8282 : DbContext - { - public MyContext8282(DbContextOptions options) - : base(options) - { - } - - public DbSet Entity { get; set; } - - public void Seed() - { - AddRange(new Entity8282()); - SaveChanges(); - } - - public class Entity8282 - { - public int Id { get; set; } - } - - public class EntityDto8282 - { - public EntityDto8282(Entity8282 entity) - { - Id = entity.Id; - } - - public int Id { get; } - } - } - - #endregion - - #region Issue8538 - - [ConditionalFact] - public virtual async Task Enum_has_flag_applies_explicit_cast_for_constant() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - var query = context.Entity.Where(e => e.Permission.HasFlag(MyContext8538.Permission.READ_WRITE)).ToList(); - - Assert.Single(query); - - AssertSql( - """ -SELECT [e].[Id], [e].[Permission], [e].[PermissionByte], [e].[PermissionShort] -FROM [Entity] AS [e] -WHERE [e].[Permission] & CAST(17179869184 AS bigint) = CAST(17179869184 AS bigint) -"""); - } - - using (var context = contextFactory.CreateContext()) - { - ClearLog(); - var query = context.Entity.Where(e => e.PermissionShort.HasFlag(MyContext8538.PermissionShort.READ_WRITE)).ToList(); - - Assert.Single(query); - - AssertSql( - """ -SELECT [e].[Id], [e].[Permission], [e].[PermissionByte], [e].[PermissionShort] -FROM [Entity] AS [e] -WHERE [e].[PermissionShort] & CAST(4 AS smallint) = CAST(4 AS smallint) -"""); - } - } - - [ConditionalFact] - public virtual async Task Enum_has_flag_does_not_apply_explicit_cast_for_non_constant() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - var query = context.Entity.Where(e => e.Permission.HasFlag(e.Permission)).ToList(); - - Assert.Equal(3, query.Count); - - AssertSql( - """ -SELECT [e].[Id], [e].[Permission], [e].[PermissionByte], [e].[PermissionShort] -FROM [Entity] AS [e] -WHERE [e].[Permission] & [e].[Permission] = [e].[Permission] -"""); - } - - using (var context = contextFactory.CreateContext()) - { - ClearLog(); - var query = context.Entity.Where(e => e.PermissionByte.HasFlag(e.PermissionByte)).ToList(); - - Assert.Equal(3, query.Count); - - AssertSql( - """ -SELECT [e].[Id], [e].[Permission], [e].[PermissionByte], [e].[PermissionShort] -FROM [Entity] AS [e] -WHERE [e].[PermissionByte] & [e].[PermissionByte] = [e].[PermissionByte] -"""); - } - } - - private class MyContext8538 : DbContext - { - public MyContext8538(DbContextOptions options) - : base(options) - { - } - - public DbSet Entity { get; set; } - - public void Seed() - { - AddRange( - new Entity8538 - { - Permission = Permission.NONE, - PermissionByte = PermissionByte.NONE, - PermissionShort = PermissionShort.NONE - }, - new Entity8538 - { - Permission = Permission.READ_ONLY, - PermissionByte = PermissionByte.READ_ONLY, - PermissionShort = PermissionShort.READ_ONLY - }, - new Entity8538 - { - Permission = Permission.READ_WRITE, - PermissionByte = PermissionByte.READ_WRITE, - PermissionShort = PermissionShort.READ_WRITE - } - ); - - SaveChanges(); - } - - public class Entity8538 - { - public int Id { get; set; } - public Permission Permission { get; set; } - public PermissionByte PermissionByte { get; set; } - public PermissionShort PermissionShort { get; set; } - } - - [Flags] - public enum PermissionByte : byte - { - NONE = 1, - READ_ONLY = 2, - READ_WRITE = 4 - } - - [Flags] - public enum PermissionShort : short - { - NONE = 1, - READ_ONLY = 2, - READ_WRITE = 4 - } - - [Flags] - public enum Permission : long - { - NONE = 0x01, - READ_ONLY = 0x02, - READ_WRITE = 0x400000000 // 36 bits - } - } - - #endregion - - #region Issue8909 - - [ConditionalFact] - public virtual async Task Variable_from_closure_is_parametrized() - { - var contextFactory = await InitializeAsync(); - - using (var context = contextFactory.CreateContext()) - { - context.Cache.Compact(1); - - var id = 1; - context.Entities.Where(c => c.Id == id).ToList(); - Assert.Equal(2, context.Cache.Count); - - id = 2; - context.Entities.Where(c => c.Id == id).ToList(); - Assert.Equal(2, context.Cache.Count); - - AssertSql( -$""" -@__id_0='1' - -SELECT `e`.`Id`, `e`.`Name` -FROM `Entities` AS `e` -WHERE `e`.`Id` = {AssertSqlHelper.Parameter("@__id_0")} -""", -// -$""" -@__id_0='2' - -SELECT `e`.`Id`, `e`.`Name` -FROM `Entities` AS `e` -WHERE `e`.`Id` = {AssertSqlHelper.Parameter("@__id_0")} -"""); - } - - using (var context = contextFactory.CreateContext()) - { - ClearLog(); - context.Cache.Compact(1); - - var id = 0; - // ReSharper disable once AccessToModifiedClosure - Expression> whereExpression = c => c.Id == id; - - id = 1; - context.Entities.Where(whereExpression).ToList(); - Assert.Equal(2, context.Cache.Count); - - id = 2; - context.Entities.Where(whereExpression).ToList(); - Assert.Equal(2, context.Cache.Count); - - AssertSql( -$""" -@__id_0='1' - -SELECT `e`.`Id`, `e`.`Name` -FROM `Entities` AS `e` -WHERE `e`.`Id` = {AssertSqlHelper.Parameter("@__id_0")} -""", -// -$""" -@__id_0='2' - -SELECT `e`.`Id`, `e`.`Name` -FROM `Entities` AS `e` -WHERE `e`.`Id` = {AssertSqlHelper.Parameter("@__id_0")} -"""); - } - - using (var context = contextFactory.CreateContext()) - { - ClearLog(); - context.Cache.Compact(1); - - var id = 0; - // ReSharper disable once AccessToModifiedClosure - Expression> whereExpression = c => c.Id == id; - Expression> containsExpression = - c => context.Entities.Where(whereExpression).Select(e => e.Id).Contains(c.Id); - - id = 1; - context.Entities.Where(containsExpression).ToList(); - Assert.Equal(2, context.Cache.Count); - - id = 2; - context.Entities.Where(containsExpression).ToList(); - Assert.Equal(2, context.Cache.Count); - - AssertSql( -$""" -@__id_0='1' - -SELECT `e`.`Id`, `e`.`Name` -FROM `Entities` AS `e` -WHERE `e`.`Id` IN ( - SELECT `e0`.`Id` - FROM `Entities` AS `e0` - WHERE `e0`.`Id` = {AssertSqlHelper.Parameter("@__id_0")} -) -""", -// -$""" -@__id_0='2' - -SELECT `e`.`Id`, `e`.`Name` -FROM `Entities` AS `e` -WHERE `e`.`Id` IN ( - SELECT `e0`.`Id` - FROM `Entities` AS `e0` - WHERE `e0`.`Id` = {AssertSqlHelper.Parameter("@__id_0")} -) -"""); - } - } - - [ConditionalFact] - public virtual async Task Relational_command_cache_creates_new_entry_when_parameter_nullability_changes() - { - var contextFactory = await InitializeAsync(); - - using (var context = contextFactory.CreateContext()) - { - context.Cache.Compact(1); - - var name = "A"; - - context.Entities.Where(e => e.Name == name).ToList(); - Assert.Equal(2, context.Cache.Count); - - name = null; - context.Entities.Where(e => e.Name == name).ToList(); - Assert.Equal(3, context.Cache.Count); - - AssertSql( -$""" -@__name_0='A' (Size = 255) - -SELECT `e`.`Id`, `e`.`Name` -FROM `Entities` AS `e` -WHERE `e`.`Name` = {AssertSqlHelper.Parameter("@__name_0")} -""", -// -""" -SELECT `e`.`Id`, `e`.`Name` -FROM `Entities` AS `e` -WHERE `e`.`Name` IS NULL -"""); - } - } - - [ConditionalFact] - public virtual async Task Query_cache_entries_are_evicted_as_necessary() - { - var contextFactory = await InitializeAsync(); - - using (var context = contextFactory.CreateContext()) - { - context.Cache.Compact(1); - Assert.Equal(0, context.Cache.Count); - - var entityParam = Expression.Parameter(typeof(MyContext8909.Entity8909), "e"); - var idPropertyInfo = context.Model.FindEntityType((typeof(MyContext8909.Entity8909))) - .FindProperty(nameof(MyContext8909.Entity8909.Id)) - .PropertyInfo; - for (var i = 0; i < 1100; i++) - { - var conditionBody = Expression.Equal( - Expression.MakeMemberAccess(entityParam, idPropertyInfo), - Expression.Constant(i)); - var whereExpression = Expression.Lambda>(conditionBody, entityParam); - context.Entities.Where(whereExpression).GetEnumerator(); - } - - Assert.True(context.Cache.Count <= 1024); - } - } - - [ConditionalFact] - public virtual async Task Explicitly_compiled_query_does_not_add_cache_entry() - { - var parameter = Expression.Parameter(typeof(MyContext8909.Entity8909)); - var predicate = Expression.Lambda>( - Expression.MakeBinary( - ExpressionType.Equal, - Expression.PropertyOrField(parameter, "Id"), - Expression.Constant(1)), - parameter); - var query = EF.CompileQuery((MyContext8909 context) => context.Set().SingleOrDefault(predicate)); - - var contextFactory = await InitializeAsync(); - - using (var context = contextFactory.CreateContext()) - { - context.Cache.Compact(1); - Assert.Equal(0, context.Cache.Count); - - query(context); - - // 1 entry for RelationalCommandCache - Assert.Equal(1, context.Cache.Count); - } - } - - protected class MyContext8909 : DbContext - { - public MyContext8909(DbContextOptions options) - : base(options) - { - } - - public DbSet Entities { get; set; } - - public MemoryCache Cache - { - get - { - var compiledQueryCache = this.GetService(); - - return (MemoryCache)typeof(CompiledQueryCache) - .GetField("_memoryCache", BindingFlags.Instance | BindingFlags.NonPublic) - ?.GetValue(compiledQueryCache); - } - } - - public class Entity8909 - { - public int Id { get; set; } - public string Name { get; set; } - } - } - - #endregion - - #region Issue9202/9210 - - [ConditionalFact] - public async Task Include_collection_for_entity_with_owned_type_works() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - var query = context.Movies.Include(m => m.Cast); - var result = query.ToList(); - - Assert.Single(result); - Assert.Equal(3, result[0].Cast.Count); - Assert.NotNull(result[0].Details); - Assert.True(result[0].Cast.All(a => a.Details != null)); - - AssertSql( -""" -SELECT `m`.`Id`, `m`.`Title`, `m`.`Details_Info`, `m`.`Details_Rating`, `a`.`Id`, `a`.`Movie9202Id`, `a`.`Name`, `a`.`Details_Info`, `a`.`Details_Rating` -FROM `Movies` AS `m` -LEFT JOIN `Actors` AS `a` ON `m`.`Id` = `a`.`Movie9202Id` -ORDER BY `m`.`Id` -"""); - } - - using (var context = contextFactory.CreateContext()) - { - var query = context.Movies.Include("Cast"); - var result = query.ToList(); - - Assert.Single(result); - Assert.Equal(3, result[0].Cast.Count); - Assert.NotNull(result[0].Details); - Assert.True(result[0].Cast.All(a => a.Details != null)); - - AssertSql( -""" -SELECT `m`.`Id`, `m`.`Title`, `m`.`Details_Info`, `m`.`Details_Rating`, `a`.`Id`, `a`.`Movie9202Id`, `a`.`Name`, `a`.`Details_Info`, `a`.`Details_Rating` -FROM `Movies` AS `m` -LEFT JOIN `Actors` AS `a` ON `m`.`Id` = `a`.`Movie9202Id` -ORDER BY `m`.`Id` -""", -// -""" -SELECT `m`.`Id`, `m`.`Title`, `m`.`Details_Info`, `m`.`Details_Rating`, `a`.`Id`, `a`.`Movie9202Id`, `a`.`Name`, `a`.`Details_Info`, `a`.`Details_Rating` -FROM `Movies` AS `m` -LEFT JOIN `Actors` AS `a` ON `m`.`Id` = `a`.`Movie9202Id` -ORDER BY `m`.`Id` -"""); - } - } - - protected class MyContext9202 : DbContext - { - public MyContext9202(DbContextOptions options) - : base(options) - { - } - - public DbSet Movies { get; set; } - public DbSet Actors { get; set; } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - modelBuilder.Entity().HasMany(m => m.Cast).WithOne(); - modelBuilder.Entity().OwnsOne(m => m.Details); - modelBuilder.Entity().OwnsOne(m => m.Details); - } - - public void Seed() - { - var av = new Actor9202 { Name = "Alicia Vikander", Details = new Details9202 { Info = "Best actor ever made" } }; - var oi = new Actor9202 { Name = "Oscar Isaac", Details = new Details9202 { Info = "Best actor ever made" } }; - var dg = new Actor9202 { Name = "Domhnall Gleeson", Details = new Details9202 { Info = "Best actor ever made" } }; - var em = new Movie9202 - { - Title = "Ex Machina", - Cast = new List - { - av, - oi, - dg - }, - Details = new Details9202 { Info = "Best movie ever made" } - }; - - Actors.AddRange(av, oi, dg); - Movies.Add(em); - SaveChanges(); - } - - public class Movie9202 - { - public int Id { get; set; } - public string Title { get; set; } - - public List Cast { get; set; } - - public Details9202 Details { get; set; } - } - - public class Actor9202 - { - public int Id { get; set; } - public string Name { get; set; } - public Details9202 Details { get; set; } - } - - public class Details9202 - { - public string Info { get; set; } - public int Rating { get; set; } - } - } - - #endregion - - #region Issue9214 - - [ConditionalFact] - public async Task Default_schema_applied_when_no_function_schema() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - var result = context.Widgets.Where(w => w.Val == 1).Select(w => MyContext9214.AddOne(w.Val)).Single(); - - Assert.Equal(2, result); - - AssertSql( - """ -SELECT TOP(2) [foo].[AddOne]([w].[Val]) -FROM [foo].[Widgets] AS [w] -WHERE [w].[Val] = 1 -"""); - } - - using (var context = contextFactory.CreateContext()) - { - ClearLog(); - var result = context.Widgets.Where(w => w.Val == 1).Select(w => MyContext9214.AddTwo(w.Val)).Single(); - - Assert.Equal(3, result); - - AssertSql( - """ -SELECT TOP(2) [dbo].[AddTwo]([w].[Val]) -FROM [foo].[Widgets] AS [w] -WHERE [w].[Val] = 1 -"""); - } - } - - protected class MyContext9214 : DbContext - { - public DbSet Widgets { get; set; } - -#pragma warning disable IDE0060 // Remove unused parameter - public static int AddOne(int num) - => throw new Exception(); - - public static int AddTwo(int num) - => throw new Exception(); - - public static int AddThree(int num) - => throw new Exception(); -#pragma warning restore IDE0060 // Remove unused parameter - - public MyContext9214(DbContextOptions options) - : base(options) - { - } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - modelBuilder.HasDefaultSchema("foo"); - - modelBuilder.Entity().ToTable("Widgets", "foo"); - - modelBuilder.HasDbFunction(typeof(MyContext9214).GetMethod(nameof(AddOne))); - modelBuilder.HasDbFunction(typeof(MyContext9214).GetMethod(nameof(AddTwo))).HasSchema("dbo"); - } - - public void Seed() - { - var w1 = new Widget9214 { Val = 1 }; - var w2 = new Widget9214 { Val = 2 }; - var w3 = new Widget9214 { Val = 3 }; - Widgets.AddRange(w1, w2, w3); - SaveChanges(); - - Database.ExecuteSqlRaw( - @"CREATE FUNCTION foo.AddOne (@num int) - RETURNS int - AS - BEGIN - return @num + 1 ; - END"); - - Database.ExecuteSqlRaw( - @"CREATE FUNCTION dbo.AddTwo (@num int) - RETURNS int - AS - BEGIN - return @num + 2 ; - END"); - } - - public class Widget9214 - { - public int Id { get; set; } - public int Val { get; set; } - } - } - - #endregion - - #region Issue9277 - - [ConditionalFact] - public virtual async Task From_sql_gets_value_of_out_parameter_in_stored_procedure() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - var valueParam = new OleDbParameter - { - ParameterName = "Value", - Value = 0, - Direction = ParameterDirection.Output, - OleDbType = OleDbType.Integer - }; - - Assert.Equal(0, valueParam.Value); - - var blogs = context.Blogs.FromSqlRaw( - "[dbo].[GetPersonAndVoteCount] @id, @Value out", - new OleDbParameter { ParameterName = "id", Value = 1 }, - valueParam) - .ToList(); - - Assert.Single(blogs); - Assert.Equal(1, valueParam.Value); - } - } - - protected class MyContext9277 : DbContext - { - public MyContext9277(DbContextOptions options) - : base(options) - { - } - - public DbSet Blogs { get; set; } - - public void Seed() - { - Database.ExecuteSqlRaw( - @"CREATE PROCEDURE [dbo].[GetPersonAndVoteCount] - ( - @id int, - @Value int OUTPUT -) -AS -BEGIN - SELECT @Value = SomeValue - FROM dbo.Blogs - WHERE Id = @id; - SELECT * - FROM dbo.Blogs - WHERE Id = @id; - END"); - - AddRange( - new Blog9277 { SomeValue = 1 }, - new Blog9277 { SomeValue = 2 }, - new Blog9277 { SomeValue = 3 } - ); - - SaveChanges(); - } - - public class Blog9277 - { - public int Id { get; set; } - public int SomeValue { get; set; } - } - } - - #endregion - - #region Issue9038 - - [ConditionalFact] - public virtual async Task Include_collection_optional_reference_collection() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - var result = await context.People.OfType() - .Include(m => m.Students) - .ThenInclude(m => m.Family) - .ThenInclude(m => m.Members) - .ToListAsync(); - - Assert.Equal(2, result.Count); - Assert.True(result.All(r => r.Students.Count > 0)); - } - - using (var context = contextFactory.CreateContext()) - { - var result = await context.Set() - .Include(m => m.Family.Members) - .Include(m => m.Students) - .ToListAsync(); - - Assert.Equal(2, result.Count); - Assert.True(result.All(r => r.Students.Count > 0)); - Assert.Null(result.Single(t => t.Name == "Ms. Frizzle").Family); - Assert.NotNull(result.Single(t => t.Name == "Mr. Garrison").Family); - } - } - - protected class MyContext9038 : DbContext - { - public MyContext9038(DbContextOptions options) - : base(options) - { - } - - public DbSet People { get; set; } - - public DbSet Families { get; set; } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - modelBuilder.Entity().HasBaseType(); - modelBuilder.Entity().HasBaseType(); - modelBuilder.Entity(); - - modelBuilder.Entity( - entity => - { - entity.Property("Discriminator") - .HasMaxLength(63); - entity.HasIndex("Discriminator"); - - entity.HasOne(m => m.Teacher) - .WithMany(m => m.Students) - .HasForeignKey(m => m.TeacherId) - .HasPrincipalKey(m => m.Id) - .OnDelete(DeleteBehavior.Restrict); - }); - } - - public void Seed() - { - var famalies = new List { new() { LastName = "Garrison" }, new() { LastName = "Cartman" } }; - var teachers = new List - { - new() { Name = "Ms. Frizzle" }, new() { Name = "Mr. Garrison", Family = famalies[0] } - }; - var students = new List - { - new() - { - Name = "Arnold", - Grade = 2, - Teacher = teachers[0] - }, - new() - { - Name = "Eric", - Grade = 4, - Teacher = teachers[1], - Family = famalies[1] - } - }; - - People.AddRange(teachers); - People.AddRange(students); - SaveChanges(); - } - - public abstract class Person9038 - { - public int Id { get; set; } - - public string Name { get; set; } - - public int? TeacherId { get; set; } - - public PersonFamily9038 Family { get; set; } - } - - public class PersonKid9038 : Person9038 - { - public int Grade { get; set; } - - public PersonTeacher9038 Teacher { get; set; } - } - - public class PersonTeacher9038 : Person9038 - { - public ICollection Students { get; set; } - } - - public class PersonFamily9038 - { - public int Id { get; set; } - - public string LastName { get; set; } - - public ICollection Members { get; set; } - } - } - - #endregion - - #region Issue9468 - - [ConditionalFact] - public virtual async Task Conditional_expression_with_conditions_does_not_collapse_if_nullable_bool() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - var query = context.Carts.Select( - t => new { Processing = t.Configuration != null ? !t.Configuration.Processed : (bool?)null }).ToList(); - - Assert.Single(query.Where(t => t.Processing == null)); - Assert.Single(query.Where(t => t.Processing == true)); - Assert.Single(query.Where(t => t.Processing == false)); - - AssertSql( -""" -SELECT IIF(`c0`.`Id` IS NOT NULL, IIF(`c0`.`Processed` <> TRUE, TRUE, FALSE), NULL) AS `Processing` -FROM `Carts` AS `c` -LEFT JOIN `Configuration9468` AS `c0` ON `c`.`ConfigurationId` = `c0`.`Id` -"""); - } - } - - protected class MyContext9468 : DbContext - { - public MyContext9468(DbContextOptions options) - : base(options) - { - } - - public DbSet Carts { get; set; } - - public void Seed() - { - AddRange( - new Cart9468(), - new Cart9468 { Configuration = new Configuration9468 { Processed = true } }, - new Cart9468 { Configuration = new Configuration9468() } - ); - - SaveChanges(); - } - - public class Cart9468 - { - public int Id { get; set; } - public int? ConfigurationId { get; set; } - public Configuration9468 Configuration { get; set; } - } - - public class Configuration9468 - { - public int Id { get; set; } - public bool Processed { get; set; } - } - } - - #endregion - - #region Issue10635 - - [ConditionalFact] - public async Task Include_with_order_by_on_interface_key() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - var query = context.Parents.Include(p => p.Children).OrderBy(p => p.Id).ToList(); - - AssertSql( -""" -SELECT `p`.`Id`, `p`.`Name`, `c`.`Id`, `c`.`Name`, `c`.`Parent10635Id`, `c`.`ParentId` -FROM `Parents` AS `p` -LEFT JOIN `Children` AS `c` ON `p`.`Id` = `c`.`Parent10635Id` -ORDER BY `p`.`Id` -"""); - } - - using (var context = contextFactory.CreateContext()) - { - ClearLog(); - var query = context.Parents.OrderBy(p => p.Id).Select(p => p.Children.ToList()).ToList(); - - AssertSql( -""" -SELECT `p`.`Id`, `c`.`Id`, `c`.`Name`, `c`.`Parent10635Id`, `c`.`ParentId` -FROM `Parents` AS `p` -LEFT JOIN `Children` AS `c` ON `p`.`Id` = `c`.`Parent10635Id` -ORDER BY `p`.`Id` -"""); - } - } - - private class MyContext10635 : DbContext - { - public MyContext10635(DbContextOptions options) - : base(options) - { - } - - public DbSet Parents { get; set; } - public DbSet Children { get; set; } - - public void Seed() - { - var c11 = new Child10635 { Name = "Child111" }; - var c12 = new Child10635 { Name = "Child112" }; - var c13 = new Child10635 { Name = "Child113" }; - var c21 = new Child10635 { Name = "Child121" }; - - var p1 = new Parent10635 { Name = "Parent1", Children = new[] { c11, c12, c13 } }; - var p2 = new Parent10635 { Name = "Parent2", Children = new[] { c21 } }; - Parents.AddRange(p1, p2); - Children.AddRange(c11, c12, c13, c21); - SaveChanges(); - } - - public interface IEntity10635 - { - int Id { get; set; } - } - - public class Parent10635 : IEntity10635 - { - public int Id { get; set; } - public string Name { get; set; } - public virtual ICollection Children { get; set; } - } - - public class Child10635 : IEntity10635 - { - public int Id { get; set; } - public string Name { get; set; } - public int ParentId { get; set; } - } - } - - #endregion - - #region Issue10301 - - [ConditionalFact] - public virtual async Task MultiContext_query_filter_test() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - Assert.Empty(context.Blogs.ToList()); - - context.Tenant = 1; - Assert.Single(context.Blogs.ToList()); - - context.Tenant = 2; - Assert.Equal(2, context.Blogs.Count()); - - AssertSql( -$""" -@__ef_filter__Tenant_0='0' - -SELECT `b`.`Id`, `b`.`SomeValue` -FROM `Blogs` AS `b` -WHERE `b`.`SomeValue` = {AssertSqlHelper.Parameter("@__ef_filter__Tenant_0")} -""", -// -$""" -@__ef_filter__Tenant_0='1' - -SELECT `b`.`Id`, `b`.`SomeValue` -FROM `Blogs` AS `b` -WHERE `b`.`SomeValue` = {AssertSqlHelper.Parameter("@__ef_filter__Tenant_0")} -""", -// -$""" -@__ef_filter__Tenant_0='2' - -SELECT COUNT(*) -FROM `Blogs` AS `b` -WHERE `b`.`SomeValue` = {AssertSqlHelper.Parameter("@__ef_filter__Tenant_0")} -"""); - } - } - - protected class FilterContextBase10301 : DbContext - { - public int Tenant { get; set; } - - public FilterContextBase10301(DbContextOptions options) - : base(options) - { - } - - public DbSet Blogs { get; set; } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - => modelBuilder.Entity().HasQueryFilter(e => e.SomeValue == Tenant); - - public void Seed() - { - AddRange( - new Blog10301 { SomeValue = 1 }, - new Blog10301 { SomeValue = 2 }, - new Blog10301 { SomeValue = 2 } - ); - - SaveChanges(); - } - - public class Blog10301 - { - public int Id { get; set; } - public int SomeValue { get; set; } - } - } - - protected class FilterContext10301 : FilterContextBase10301 - { - public FilterContext10301(DbContextOptions options) - : base(options) - { - } - } - - #endregion - - #region Issue11104 - - [ConditionalFact] - public virtual async Task QueryBuffer_requirement_is_computed_when_querying_base_type_while_derived_type_has_shadow_prop() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - var query = context.Bases.ToList(); - - var derived1 = Assert.Single(query); - Assert.Equal(typeof(MyContext11104.Derived1), derived1.GetType()); - - AssertSql( -""" -SELECT `b`.`Id`, `b`.`IsTwo`, `b`.`MoreStuffId` -FROM `Bases` AS `b` -"""); - } - } - - protected class MyContext11104 : DbContext - { - public DbSet Bases { get; set; } - - public MyContext11104(DbContextOptions options) - : base(options) - { - } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - => modelBuilder.Entity() - .HasDiscriminator(x => x.IsTwo) - .HasValue(false) - .HasValue(true); - - public void Seed() - { - AddRange( - new Derived1 { IsTwo = false } - ); - - SaveChanges(); - } - - public abstract class Base - { - public int Id { get; set; } - public bool IsTwo { get; set; } - } - - public class Derived1 : Base - { - public Stuff MoreStuff { get; set; } - } - - public class Derived2 : Base - { - } - - public class Stuff - { - public int Id { get; set; } - } - } - - #endregion - - #region Issue11818_11831 - - [ConditionalFact] - public virtual async Task GroupJoin_Anonymous_projection_GroupBy_Aggregate_join_elimination() - { - var contextFactory = await InitializeAsync( - onConfiguring: - o => o.ConfigureWarnings(w => w.Log(CoreEventId.FirstWithoutOrderByAndFilterWarning))); - - using (var context = contextFactory.CreateContext()) - { - var query = (from e in context.Set() - join a in context.Set() - on e.Id equals a.Id into grouping - from a in grouping.DefaultIfEmpty() - select new { ename = e.Name, aname = a.Name }) - .GroupBy(g => g.aname) - .Select( - g => new { g.Key, cnt = g.Count() + 5 }) - .ToList(); - - Assert.Empty(query); - - AssertSql( -""" -SELECT `t0`.`AnotherEntity11818_Name` AS `Key`, COUNT(*) + 5 AS `cnt` -FROM `Table` AS `t` -LEFT JOIN ( - SELECT `t1`.`Id`, `t1`.`Exists`, `t1`.`AnotherEntity11818_Name` - FROM `Table` AS `t1` - WHERE `t1`.`Exists` IS NOT NULL -) AS `t0` ON `t`.`Id` = IIF(`t0`.`Exists` IS NOT NULL, `t0`.`Id`, NULL) -GROUP BY `t0`.`AnotherEntity11818_Name` -"""); - } - - using (var context = contextFactory.CreateContext()) - { - ClearLog(); - var query = (from e in context.Set() - join a in context.Set() - on e.Id equals a.Id into grouping - from a in grouping.DefaultIfEmpty() - join m in context.Set() - on e.Id equals m.Id into grouping2 - from m in grouping2.DefaultIfEmpty() - select new { aname = a.Name, mname = m.Name }) - .GroupBy( - g => new { g.aname, g.mname }) - .Select( - g => new { MyKey = g.Key.aname, cnt = g.Count() + 5 }) - .ToList(); - - Assert.Empty(query); - - AssertSql( -""" -SELECT `t0`.`AnotherEntity11818_Name` AS `MyKey`, COUNT(*) + 5 AS `cnt` -FROM (`Table` AS `t` -LEFT JOIN ( - SELECT `t1`.`Id`, `t1`.`Exists`, `t1`.`AnotherEntity11818_Name` - FROM `Table` AS `t1` - WHERE `t1`.`Exists` IS NOT NULL -) AS `t0` ON `t`.`Id` = IIF(`t0`.`Exists` IS NOT NULL, `t0`.`Id`, NULL)) -LEFT JOIN ( - SELECT `t3`.`Id`, `t3`.`MaumarEntity11818_Exists`, `t3`.`MaumarEntity11818_Name` - FROM `Table` AS `t3` - WHERE `t3`.`MaumarEntity11818_Exists` IS NOT NULL -) AS `t2` ON `t`.`Id` = IIF(`t2`.`MaumarEntity11818_Exists` IS NOT NULL, `t2`.`Id`, NULL) -GROUP BY `t0`.`AnotherEntity11818_Name`, `t2`.`MaumarEntity11818_Name` -"""); - } - - using (var context = contextFactory.CreateContext()) - { - ClearLog(); - var query = (from e in context.Set() - join a in context.Set() - on e.Id equals a.Id into grouping - from a in grouping.DefaultIfEmpty() - join m in context.Set() - on e.Id equals m.Id into grouping2 - from m in grouping2.DefaultIfEmpty() - select new { aname = a.Name, mname = m.Name }) - .OrderBy(g => g.aname) - .GroupBy(g => new { g.aname, g.mname }) - .Select(g => new { MyKey = g.Key.aname, cnt = g.Key.mname }).FirstOrDefault(); - - Assert.Null(query); - - AssertSql( -""" -SELECT TOP 1 `t0`.`AnotherEntity11818_Name` AS `MyKey`, `t2`.`MaumarEntity11818_Name` AS `cnt` -FROM (`Table` AS `t` -LEFT JOIN ( - SELECT `t1`.`Id`, `t1`.`Exists`, `t1`.`AnotherEntity11818_Name` - FROM `Table` AS `t1` - WHERE `t1`.`Exists` IS NOT NULL -) AS `t0` ON `t`.`Id` = IIF(`t0`.`Exists` IS NOT NULL, `t0`.`Id`, NULL)) -LEFT JOIN ( - SELECT `t3`.`Id`, `t3`.`MaumarEntity11818_Exists`, `t3`.`MaumarEntity11818_Name` - FROM `Table` AS `t3` - WHERE `t3`.`MaumarEntity11818_Exists` IS NOT NULL -) AS `t2` ON `t`.`Id` = IIF(`t2`.`MaumarEntity11818_Exists` IS NOT NULL, `t2`.`Id`, NULL) -GROUP BY `t0`.`AnotherEntity11818_Name`, `t2`.`MaumarEntity11818_Name` -"""); - } - } - - protected class MyContext11818 : DbContext - { - public MyContext11818(DbContextOptions options) - : base(options) - { - } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - modelBuilder.Entity().ToTable("Table"); - modelBuilder.Entity().ToTable("Table"); - modelBuilder.Entity().ToTable("Table"); - - modelBuilder.Entity() - .HasOne() - .WithOne() - .HasForeignKey(b => b.Id); - - modelBuilder.Entity() - .HasOne() - .WithOne() - .HasForeignKey(b => b.Id); - } - - public class Entity11818 - { - public int Id { get; set; } - public string Name { get; set; } - } - - public class AnotherEntity11818 - { - public int Id { get; set; } - public string Name { get; set; } - public bool Exists { get; set; } - } - - public class MaumarEntity11818 - { - public int Id { get; set; } - public string Name { get; set; } - public bool Exists { get; set; } - } - } - - #endregion - - #region Issue11803_11791 - - [ConditionalFact] - public virtual async Task Query_filter_with_db_set_should_not_block_other_filters() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - var query = context.Factions.ToList(); - - Assert.Empty(query); - - AssertSql( -""" -SELECT `f`.`Id`, `f`.`Name` -FROM `Factions` AS `f` -WHERE EXISTS ( - SELECT 1 - FROM `Leaders` AS `l` - WHERE (`l`.`Name` LIKE 'Bran%') AND `l`.`Name` = 'Crach an Craite') -"""); - } - } - - [ConditionalFact] - public virtual async Task Keyless_type_used_inside_defining_query() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - var query = context.LeadersQuery.ToList(); - - Assert.Single(query); - - AssertSql( -""" -SELECT `t`.`Name` -FROM ( - SELECT `l`.`Name` - FROM `Leaders` AS `l` - WHERE (`l`.`Name` LIKE 'Bran' + '%' AND (LEFT(`l`.`Name`, LEN('Bran')) = 'Bran')) AND ((`l`.`Name` <> 'Foo') OR `l`.`Name` IS NULL) -) AS `t` -WHERE (`t`.`Name` <> 'Bar') OR `t`.`Name` IS NULL -"""); - } - } - - protected class MyContext11803 : DbContext - { - public DbSet Factions { get; set; } - public DbSet Leaders { get; set; } - public DbSet LeadersQuery { get; set; } - - public MyContext11803(DbContextOptions options) - : base(options) - { - } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - modelBuilder.Entity().HasQueryFilter(l => l.Name.StartsWith("Bran")); // this one is ignored - modelBuilder.Entity().HasQueryFilter(f => Leaders.Any(l => l.Name == "Crach an Craite")); - - modelBuilder - .Entity() - .HasNoKey() - .ToSqlQuery( - """ -SELECT `t`.`Name` -FROM ( - SELECT `l`.`Name` - FROM `Leaders` AS `l` - WHERE (`l`.`Name` LIKE 'Bran' + '%' AND (LEFT(`l`.`Name`, LEN('Bran')) = 'Bran')) AND ((`l`.`Name` <> 'Foo') OR `l`.`Name` IS NULL) -) AS `t` -WHERE (`t`.`Name` <> 'Bar') OR `t`.`Name` IS NULL -"""); - } - - public void Seed() - { - var f1 = new Faction { Name = "Skeliege" }; - var f2 = new Faction { Name = "Monsters" }; - var f3 = new Faction { Name = "Nilfgaard" }; - var f4 = new Faction { Name = "Northern Realms" }; - var f5 = new Faction { Name = "Scioia'tael" }; - - var l11 = new Leader { Faction = f1, Name = "Bran Tuirseach" }; - var l12 = new Leader { Faction = f1, Name = "Crach an Craite" }; - var l13 = new Leader { Faction = f1, Name = "Eist Tuirseach" }; - var l14 = new Leader { Faction = f1, Name = "Harald the Cripple" }; - - Factions.AddRange(f1, f2, f3, f4, f5); - Leaders.AddRange(l11, l12, l13, l14); - - SaveChanges(); - } - - public class Faction - { - public int Id { get; set; } - public string Name { get; set; } - - public List Leaders { get; set; } - } - - public class Leader - { - public int Id { get; set; } - public string Name { get; set; } - public Faction Faction { get; set; } - } - - public class LeaderQuery - { - public string Name { get; set; } - } - } - - #endregion - - #region Issue11923 - - [ConditionalFact] - public virtual async Task Collection_without_setter_materialized_correctly() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - var query1 = context.Blogs - .Select( - b => new - { - Collection1 = b.Posts1, - Collection2 = b.Posts2, - Collection3 = b.Posts3 - }).ToList(); - - var query2 = context.Blogs - .Select( - b => new - { - Collection1 = b.Posts1.OrderBy(p => p.Id).First().Comments.Count, - Collection2 = b.Posts2.OrderBy(p => p.Id).First().Comments.Count, - Collection3 = b.Posts3.OrderBy(p => p.Id).First().Comments.Count - }).ToList(); - - Assert.Throws( - () => context.Blogs - .Select( - b => new - { - Collection1 = b.Posts1.OrderBy(p => p.Id), - Collection2 = b.Posts2.OrderBy(p => p.Id), - Collection3 = b.Posts3.OrderBy(p => p.Id) - }).ToList()); - } - } - - protected class MyContext11923 : DbContext - { - public DbSet Blogs { get; set; } - public DbSet Posts { get; set; } - public DbSet Comments { get; set; } - - public MyContext11923(DbContextOptions options) - : base(options) - { - } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - modelBuilder.Entity( - b => - { - b.HasMany(e => e.Posts1).WithOne().HasForeignKey("BlogId1"); - b.HasMany(e => e.Posts2).WithOne().HasForeignKey("BlogId2"); - b.HasMany(e => e.Posts3).WithOne().HasForeignKey("BlogId3"); - }); - - modelBuilder.Entity(); - } - - public void Seed() - { - var p111 = new Post11923 { Name = "P111" }; - var p112 = new Post11923 { Name = "P112" }; - var p121 = new Post11923 { Name = "P121" }; - var p122 = new Post11923 { Name = "P122" }; - var p123 = new Post11923 { Name = "P123" }; - var p131 = new Post11923 { Name = "P131" }; - - var p211 = new Post11923 { Name = "P211" }; - var p212 = new Post11923 { Name = "P212" }; - var p221 = new Post11923 { Name = "P221" }; - var p222 = new Post11923 { Name = "P222" }; - var p223 = new Post11923 { Name = "P223" }; - var p231 = new Post11923 { Name = "P231" }; - - var b1 = new Blog11923 { Name = "B1" }; - var b2 = new Blog11923 { Name = "B2" }; - - b1.Posts1.AddRange(new[] { p111, p112 }); - b1.Posts2.AddRange(new[] { p121, p122, p123 }); - b1.Posts3.Add(p131); - - b2.Posts1.AddRange(new[] { p211, p212 }); - b2.Posts2.AddRange(new[] { p221, p222, p223 }); - b2.Posts3.Add(p231); - - Blogs.AddRange(b1, b2); - Posts.AddRange(p111, p112, p121, p122, p123, p131, p211, p212, p221, p222, p223, p231); - SaveChanges(); - } - - public class Blog11923 - { - public Blog11923() - { - Posts1 = new List(); - Posts2 = new CustomCollection11923(); - Posts3 = new HashSet(); - } - - public Blog11923(List posts1, CustomCollection11923 posts2, HashSet posts3) - { - Posts1 = posts1; - Posts2 = posts2; - Posts3 = posts3; - } - - public int Id { get; set; } - public string Name { get; set; } - - public List Posts1 { get; } - public CustomCollection11923 Posts2 { get; } - public HashSet Posts3 { get; } - } - - public class Post11923 - { - public int Id { get; set; } - public string Name { get; set; } - - public List Comments { get; set; } - } - - public class Comment11923 - { - public int Id { get; set; } - } - - public class CustomCollection11923 : List - { - } - } - - #endregion - - #region Issue11885 - - [ConditionalFact] - public virtual async Task Average_with_cast() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - var prices = context.Prices.ToList(); - - ClearLog(); - - Assert.Equal(prices.Average(e => e.Price), context.Prices.Average(e => e.Price)); - Assert.Equal(prices.Average(e => e.IntColumn), context.Prices.Average(e => e.IntColumn)); - Assert.Equal(prices.Average(e => e.NullableIntColumn), context.Prices.Average(e => e.NullableIntColumn)); - Assert.Equal(prices.Average(e => e.LongColumn), context.Prices.Average(e => e.LongColumn)); - Assert.Equal(prices.Average(e => e.NullableLongColumn), context.Prices.Average(e => e.NullableLongColumn)); - Assert.Equal(prices.Average(e => e.FloatColumn), context.Prices.Average(e => e.FloatColumn)); - Assert.Equal(prices.Average(e => e.NullableFloatColumn), context.Prices.Average(e => e.NullableFloatColumn)); - Assert.Equal(prices.Average(e => e.DoubleColumn), context.Prices.Average(e => e.DoubleColumn)); - Assert.Equal(prices.Average(e => e.NullableDoubleColumn), context.Prices.Average(e => e.NullableDoubleColumn)); - Assert.Equal(prices.Average(e => e.DecimalColumn), context.Prices.Average(e => e.DecimalColumn)); - Assert.Equal(prices.Average(e => e.NullableDecimalColumn), context.Prices.Average(e => e.NullableDecimalColumn)); - - AssertSql( -""" -SELECT AVG(`p`.`Price`) -FROM `Prices` AS `p` -""", -// -""" -SELECT AVG(CDBL(`p`.`IntColumn`)) -FROM `Prices` AS `p` -""", -// -""" -SELECT AVG(IIF(`p`.`NullableIntColumn` IS NULL, NULL, CDBL(`p`.`NullableIntColumn`))) -FROM `Prices` AS `p` -""", -// -""" -SELECT AVG(CDBL(`p`.`LongColumn`)) -FROM `Prices` AS `p` -""", -// -""" -SELECT AVG(IIF(`p`.`NullableLongColumn` IS NULL, NULL, CDBL(`p`.`NullableLongColumn`))) -FROM `Prices` AS `p` -""", -// -""" -SELECT CSNG(AVG(`p`.`FloatColumn`)) -FROM `Prices` AS `p` -""", -// -""" -SELECT CSNG(AVG(`p`.`NullableFloatColumn`)) -FROM `Prices` AS `p` -""", -// -""" -SELECT AVG(`p`.`DoubleColumn`) -FROM `Prices` AS `p` -""", -// -""" -SELECT AVG(`p`.`NullableDoubleColumn`) -FROM `Prices` AS `p` -""", -// -""" -SELECT AVG(`p`.`DecimalColumn`) -FROM `Prices` AS `p` -""", -// -""" -SELECT AVG(`p`.`NullableDecimalColumn`) -FROM `Prices` AS `p` -"""); - } - } - - protected class MyContext11885 : DbContext - { - public DbSet Prices { get; set; } - - public MyContext11885(DbContextOptions options) - : base(options) - { - } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - => modelBuilder.Entity( - b => - { - b.Property(e => e.Price).HasColumnType("DECIMAL(18, 8)"); - b.Property(e => e.DecimalColumn).HasColumnType("DECIMAL(18, 2)"); - b.Property(e => e.NullableDecimalColumn).HasColumnType("DECIMAL(18, 2)"); - }); - - public void Seed() - { - AddRange( - new Price11885 - { - IntColumn = 1, - NullableIntColumn = 1, - LongColumn = 1000, - NullableLongColumn = 1000, - FloatColumn = 0.1F, - NullableFloatColumn = 0.1F, - DoubleColumn = 0.000001, - NullableDoubleColumn = 0.000001, - DecimalColumn = 1.0m, - NullableDecimalColumn = 1.0m, - Price = 0.00112000m - }, - new Price11885 - { - IntColumn = 2, - NullableIntColumn = 2, - LongColumn = 2000, - NullableLongColumn = 2000, - FloatColumn = 0.2F, - NullableFloatColumn = 0.2F, - DoubleColumn = 0.000002, - NullableDoubleColumn = 0.000002, - DecimalColumn = 2.0m, - NullableDecimalColumn = 2.0m, - Price = 0.00232111m - }, - new Price11885 - { - IntColumn = 3, - LongColumn = 3000, - FloatColumn = 0.3F, - DoubleColumn = 0.000003, - DecimalColumn = 3.0m, - Price = 0.00345223m - } - ); - - SaveChanges(); - } - - public class Price11885 - { - public int Id { get; set; } - public int IntColumn { get; set; } - public int? NullableIntColumn { get; set; } - public long LongColumn { get; set; } - public long? NullableLongColumn { get; set; } - public float FloatColumn { get; set; } - public float? NullableFloatColumn { get; set; } - public double DoubleColumn { get; set; } - public double? NullableDoubleColumn { get; set; } - public decimal DecimalColumn { get; set; } - public decimal? NullableDecimalColumn { get; set; } - public decimal Price { get; set; } - } - } - - #endregion - - #region Issue12582 - - [ConditionalFact] - public virtual async Task Include_collection_with_OfType_base() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - var query = context.Employees - .Include(i => i.Devices) - .OfType() - .ToList(); - - Assert.Single(query); - - var employee = (MyContext12582.Employee12582)query[0]; - Assert.Equal(2, employee.Devices.Count); - } - - using (var context = contextFactory.CreateContext()) - { - var query = context.Employees - .Select(e => e.Devices.Where(d => d.Device != "foo").Cast()) - .ToList(); - - Assert.Single(query); - var result = query[0]; - Assert.Equal(2, result.Count()); - } - } - - private class MyContext12582 : DbContext - { - public DbSet Employees { get; set; } - public DbSet Devices { get; set; } - - public MyContext12582(DbContextOptions options) - : base(options) - { - } - - public void Seed() - { - var d1 = new EmployeeDevice12582 { Device = "d1" }; - var d2 = new EmployeeDevice12582 { Device = "d2" }; - var e = new Employee12582 { Devices = new List { d1, d2 }, Name = "e" }; - - Devices.AddRange(d1, d2); - Employees.Add(e); - SaveChanges(); - } - - public interface IEmployee12582 - { - string Name { get; set; } - } - - public class Employee12582 : IEmployee12582 - { - public int Id { get; set; } - public string Name { get; set; } - public ICollection Devices { get; set; } - } - - public interface IEmployeeDevice12582 - { - string Device { get; set; } - } - - public class EmployeeDevice12582 : IEmployeeDevice12582 - { - public int Id { get; set; } - public int EmployeeId { get; set; } - public string Device { get; set; } - public Employee12582 Employee { get; set; } - } - } - - #endregion - - #region Issue12748 - - [ConditionalFact] - public virtual async Task Correlated_collection_correctly_associates_entities_with_byte_array_keys() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - var query = from blog in context.Blogs - select new - { - blog.Name, - Comments = blog.Comments.Select( - u => new { u.Id }).ToArray() - }; - var result = query.ToList(); - Assert.Single(result[0].Comments); - } - } - - protected class MyContext12748 : DbContext - { - public DbSet Blogs { get; set; } - public DbSet Comments { get; set; } - - public MyContext12748(DbContextOptions options) - : base(options) - { - } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - } - - public void Seed() - { - Blogs.Add(new Blog12748 { Name = Encoding.UTF8.GetBytes("Awesome Blog") }); - Comments.Add(new Comment12748 { BlogName = Encoding.UTF8.GetBytes("Awesome Blog") }); - SaveChanges(); - } - - public class Blog12748 - { - [Key] - public byte[] Name { get; set; } - - public List Comments { get; set; } - } - - public class Comment12748 - { - public int Id { get; set; } - public byte[] BlogName { get; set; } - public Blog12748 Blog { get; set; } - } - } - - #endregion - - #region Issue13025 - - [ConditionalFact] - public virtual async Task Find_underlying_property_after_GroupJoin_DefaultIfEmpty() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - var query = (from e in context.Employees - join d in context.EmployeeDevices - on e.Id equals d.EmployeeId into grouping - from j in grouping.DefaultIfEmpty() - select new MyContext13025.Holder13025 { Name = e.Name, DeviceId = j.DeviceId }).ToList(); - } - } - - protected class MyContext13025 : DbContext - { - public DbSet Employees { get; set; } - public DbSet EmployeeDevices { get; set; } - - public MyContext13025(DbContextOptions options) - : base(options) - { - } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - } - - public void Seed() - { - AddRange( - new Employee13025 - { - Name = "Test1", - Devices = new List { new() { DeviceId = 1, Device = "Battery" } } - }); - - SaveChanges(); - } - - public class Holder13025 - { - public string Name { get; set; } - public int? DeviceId { get; set; } - } - - public class Employee13025 - { - public int Id { get; set; } - public string Name { get; set; } - public ICollection Devices { get; set; } - } - - public class EmployeeDevice13025 - { - public int Id { get; set; } - public short DeviceId { get; set; } - public int EmployeeId { get; set; } - public string Device { get; set; } - public Employee13025 Employee { get; set; } - } - } - - #endregion - - #region Issue12170 - - [ConditionalFact] - public virtual async Task Weak_entities_with_query_filter_subquery_flattening() - { - var contextFactory = await InitializeAsync(); - - using (var context = contextFactory.CreateContext()) - { - var result = context.Definitions.Any(); - - Assert.False(result); - } - } - - protected class MyContext12170 : DbContext - { - public virtual DbSet Definitions { get; set; } - public virtual DbSet DefinitionHistories { get; set; } - - public MyContext12170(DbContextOptions options) - : base(options) - { - } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - modelBuilder.Entity().HasQueryFilter(md => md.ChangeInfo.RemovedPoint.Timestamp == null); - modelBuilder.Entity().HasOne(h => h.LatestHistoryEntry).WithMany(); - modelBuilder.Entity().HasMany(h => h.HistoryEntries).WithOne(h => h.Definition); - - modelBuilder.Entity().OwnsOne(h => h.EndedPoint); - } - - [Owned] - public class OptionalChangePoint12170 - { - public int Value { get; set; } - public DateTime? Timestamp { get; set; } - } - - [Owned] - public class MasterChangeInfo12170 - { - public bool Exists { get; set; } - public virtual OptionalChangePoint12170 RemovedPoint { get; set; } - } - - public class DefinitionHistory12170 - { - public int Id { get; set; } - public int MacGuffinDefinitionID { get; set; } - public virtual Definition12170 Definition { get; set; } - public OptionalChangePoint12170 EndedPoint { get; set; } - } - - public class Definition12170 - { - public int Id { get; set; } - public virtual MasterChangeInfo12170 ChangeInfo { get; set; } - - public virtual ICollection HistoryEntries { get; set; } - public virtual DefinitionHistory12170 LatestHistoryEntry { get; set; } - public int? LatestHistoryEntryID { get; set; } - } - } - - #endregion - - #region Issue11944 - - [ConditionalFact] - public virtual async Task Include_collection_works_when_defined_on_intermediate_type() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - var query = context.Schools.Include(s => ((MyContext11944.ElementarySchool11944)s).Students); - var result = query.ToList(); - - Assert.Equal(2, result.Count); - Assert.Equal(2, result.OfType().Single().Students.Count); - } - - using (var context = contextFactory.CreateContext()) - { - var query = context.Schools.Select(s => ((MyContext11944.ElementarySchool11944)s).Students.Where(ss => true).ToList()); - var result = query.ToList(); - - Assert.Equal(2, result.Count); - Assert.Contains(result, r => r.Count() == 2); - } - } - - protected class MyContext11944 : DbContext - { - public DbSet Students { get; set; } - public DbSet Schools { get; set; } - public DbSet ElementarySchools { get; set; } - - public MyContext11944(DbContextOptions options) - : base(options) - { - } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - => modelBuilder.Entity().HasMany(s => s.Students).WithOne(s => s.School); - - public void Seed() - { - var student1 = new Student11944(); - var student2 = new Student11944(); - var school = new School11944(); - var elementarySchool = new ElementarySchool11944 { Students = new List { student1, student2 } }; - - Students.AddRange(student1, student2); - Schools.AddRange(school); - ElementarySchools.Add(elementarySchool); - - SaveChanges(); - } - - public class Student11944 - { - public int Id { get; set; } - public ElementarySchool11944 School { get; set; } - } - - public class School11944 - { - public int Id { get; set; } - } - - public abstract class PrimarySchool11944 : School11944 - { - public List Students { get; set; } - } - - public class ElementarySchool11944 : PrimarySchool11944 - { - } - } - - #endregion - - #region Issue13118 - - [ConditionalFact] - public virtual async Task DateTime_Contains_with_smalldatetime_generates_correct_literal() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - var testDateList = new List { new(2018, 10, 07) }; - var findRecordsWithDateInList = context.ReproEntity - .Where(a => testDateList.Contains(a.MyTime)) - .ToList(); - - Assert.Single(findRecordsWithDateInList); - - AssertSql( -""" -SELECT `r`.`Id`, `r`.`MyTime` -FROM `ReproEntity` AS `r` -WHERE `r`.`MyTime` = #2018-10-07# -"""); - } - } - - private class MyContext13118 : DbContext - { - public virtual DbSet ReproEntity { get; set; } - - public MyContext13118(DbContextOptions options) - : base(options) - { - } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - => modelBuilder.Entity(e => e.Property("MyTime").HasColumnType("smalldatetime")); - - public void Seed() - { - AddRange( - new ReproEntity13118 { MyTime = new DateTime(2018, 10, 07) }, - new ReproEntity13118 { MyTime = new DateTime(2018, 10, 08) }); - - SaveChanges(); - } - } - - private class ReproEntity13118 - { - public Guid Id { get; set; } - public DateTime MyTime { get; set; } - } - - #endregion - - #region Issue12732 - - [ConditionalFact] - public virtual async Task Nested_contains_with_enum() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - var key = Guid.Parse("5f221fb9-66f4-442a-92c9-d97ed5989cc7"); - var keys = new List { Guid.Parse("0a47bcb7-a1cb-4345-8944-c58f82d6aac7"), key }; - var todoTypes = new List { MyContext12732.TodoType.foo0 }; - - // Note that in this query, the outer Contains really has no type mapping, neither for its source (collection parameter), nor - // for its item (the conditional expression returns key, which is also a parameter). The default type mapping must be applied. - var query = context.Todos - .Where(x => keys.Contains(todoTypes.Contains(x.Type) ? key : key)) - .ToList(); - - Assert.Single(query); - - AssertSql( - $$""" -@__key_2='5f221fb9-66f4-442a-92c9-d97ed5989cc7' -@__key_2='5f221fb9-66f4-442a-92c9-d97ed5989cc7' - -SELECT `t`.`Id`, `t`.`Type` -FROM `Todos` AS `t` -WHERE IIF(`t`.`Type` = 0, {{AssertSqlHelper.Parameter("@__key_2")}}, {{AssertSqlHelper.Parameter("@__key_2")}}) IN ('{0a47bcb7-a1cb-4345-8944-c58f82d6aac7}', '{5f221fb9-66f4-442a-92c9-d97ed5989cc7}') -"""); - } - } - - protected class MyContext12732 : DbContext - { - public DbSet Todos { get; set; } - - public MyContext12732(DbContextOptions options) - : base(options) - { - } - - public void Seed() - { - Add(new Todo { Type = TodoType.foo0 }); - SaveChanges(); - } - - public class Todo - { - public Guid Id { get; set; } - public TodoType Type { get; set; } - } - - public enum TodoType - { - foo0 = 0 - } - } - - #endregion - - #region Issue13157 - - [ConditionalFact] - public virtual async Task Correlated_subquery_with_owned_navigation_being_compared_to_null_works() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - var partners = context.Partners - .Select( - x => new - { - Addresses = x.Addresses.Select( - y => new - { - Turnovers = y.Turnovers == null - ? null - : new { y.Turnovers.AmountIn } - }).ToList() - }).ToList(); - - Assert.Single(partners); - //Note - collection order is flipped compared to SQL Server. MS Access has different ordering on ORDER BY columns if same value - Assert.Collection( - partners[0].Addresses, - t => - { - Assert.Null(t.Turnovers); - }, - t => - { - Assert.NotNull(t.Turnovers); - Assert.Equal(10, t.Turnovers.AmountIn); - }); - - AssertSql( - """ -SELECT `p`.`Id`, IIF(`a`.`Turnovers_AmountIn` IS NULL, TRUE, FALSE), `a`.`Turnovers_AmountIn`, `a`.`Id` -FROM `Partners` AS `p` -LEFT JOIN `Address13157` AS `a` ON `p`.`Id` = `a`.`Partner13157Id` -ORDER BY `p`.`Id` -"""); - } - } - - protected class MyContext13157 : DbContext - { - public virtual DbSet Partners { get; set; } - - public MyContext13157(DbContextOptions options) - : base(options) - { - } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - => modelBuilder.Entity().OwnsOne(x => x.Turnovers); - - public void Seed() - { - AddRange( - new Partner13157 - { - Addresses = new List - { - new() { Turnovers = new AddressTurnovers13157 { AmountIn = 10 } }, new() { Turnovers = null }, - } - } - ); - - SaveChanges(); - } - - public class Partner13157 - { - public int Id { get; set; } - public ICollection Addresses { get; set; } - } - - public class Address13157 - { - public int Id { get; set; } - public AddressTurnovers13157 Turnovers { get; set; } - } - - public class AddressTurnovers13157 - { - public int AmountIn { get; set; } - } - } - - #endregion - - #region Issue13079 - - [ConditionalFact] - public virtual async Task Multilevel_owned_entities_determine_correct_nullability() - { - var contextFactory = await InitializeAsync(); - - using (var context = contextFactory.CreateContext()) - { - await context.AddAsync(new MyContext13079.BaseEntity13079()); - context.SaveChanges(); - - AssertSql( -$""" -@p0='BaseEntity13079' (Nullable = false) (Size = 21) - -INSERT INTO `BaseEntities` (`Discriminator`) -VALUES ({AssertSqlHelper.Parameter("@p0")}); -SELECT `Id` -FROM `BaseEntities` -WHERE @@ROWCOUNT = 1 AND `Id` = @@identity; -"""); - } - } - - protected class MyContext13079 : DbContext - { - public virtual DbSet BaseEntities { get; set; } - - public MyContext13079(DbContextOptions options) - : base(options) - { - } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - => modelBuilder.Entity().OwnsOne(e => e.Data, b => b.OwnsOne(e => e.SubData)); - - public class BaseEntity13079 - { - public int Id { get; set; } - } - - public class DerivedEntity13079 : BaseEntity13079 - { - public int Property { get; set; } - public OwnedData13079 Data { get; set; } - } - - public class OwnedData13079 - { - public int Property { get; set; } - public OwnedSubData13079 SubData { get; set; } - } - - public class OwnedSubData13079 - { - public int Property { get; set; } - } - } - - #endregion - - #region Issue13587 - - [ConditionalFact] - public virtual async Task Type_casting_inside_sum() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - var result = context.InventoryPools.Sum(p => (decimal)p.Quantity); - - AssertSql( - """ -SELECT COALESCE(SUM(CAST([i].[Quantity] AS decimal(18,2))), 0.0) -FROM [InventoryPools] AS [i] -"""); - } - } - - protected class MyContext13587 : DbContext - { - public virtual DbSet InventoryPools { get; set; } - - public MyContext13587(DbContextOptions options) - : base(options) - { - } - - public void Seed() - { - InventoryPools.Add(new InventoryPool13587 { Quantity = 2 }); - - SaveChanges(); - } - - public class InventoryPool13587 - { - public int Id { get; set; } - public double Quantity { get; set; } - } - } - - #endregion - - #region Issue12518 - - [ConditionalFact] - public virtual async Task Projecting_entity_with_value_converter_and_include_works() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - var result = context.Parents.Include(p => p.Child).OrderBy(e => e.Id).FirstOrDefault(); - - AssertSql( - """ -SELECT TOP 1 `p`.`Id`, `p`.`ChildId`, `c`.`Id`, `c`.`ParentId`, `c`.`ULongRowVersion` -FROM `Parents` AS `p` -LEFT JOIN `Children` AS `c` ON `p`.`ChildId` = `c`.`Id` -ORDER BY `p`.`Id` -"""); - } - } - - [ConditionalFact] - public virtual async Task Projecting_column_with_value_converter_of_ulong_byte_array() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - var result = context.Parents.OrderBy(e => e.Id).Select(p => (ulong?)p.Child.ULongRowVersion).FirstOrDefault(); - - AssertSql( - """ -SELECT TOP 1 `c`.`ULongRowVersion` -FROM `Parents` AS `p` -LEFT JOIN `Children` AS `c` ON `p`.`ChildId` = `c`.`Id` -ORDER BY `p`.`Id` -"""); - } - } - - protected class MyContext12518 : DbContext - { - public virtual DbSet Parents { get; set; } - public virtual DbSet Children { get; set; } - - public MyContext12518(DbContextOptions options) - : base(options) - { - } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - var child = modelBuilder.Entity(); - child.HasOne(_ => _.Parent) - .WithOne(_ => _.Child) - .HasForeignKey(_ => _.ChildId); - child.Property(x => x.ULongRowVersion) - .HasConversion(new NumberToBytesConverter()) - .IsRowVersion() - .IsRequired() - .HasColumnType("varchar(8)"); - - modelBuilder.Entity(); - } - - public void Seed() - { - Parents.Add(new Parent12518()); - SaveChanges(); - } - - public class Parent12518 - { - public Guid Id { get; set; } = Guid.NewGuid(); - public Guid? ChildId { get; set; } - public Child12518 Child { get; set; } - } - - public class Child12518 - { - public Guid Id { get; set; } = Guid.NewGuid(); - public ulong ULongRowVersion { get; set; } - public Guid ParentId { get; set; } - public Parent12518 Parent { get; set; } - } - } - - #endregion - - #region Issue12549 - - [ConditionalFact] - public virtual async Task Union_and_insert_12549() - { - var contextFactory = await InitializeAsync(); - - using (var context = contextFactory.CreateContext()) - { - var id1 = 1; - var id2 = 2; - - var ids1 = context.Set() - .Where(x => x.Id == id1) - .Select(x => x.Id); - - var ids2 = context.Set() - .Where(x => x.Id == id2) - .Select(x => x.Id); - - var results = ids1.Union(ids2).ToList(); - - context.AddRange( - new MyContext12549.Table1_12549(), - new MyContext12549.Table2_12549(), - new MyContext12549.Table1_12549(), - new MyContext12549.Table2_12549()); - context.SaveChanges(); - } - } - - private class MyContext12549 : DbContext - { - public DbSet Table1 { get; set; } - public DbSet Table2 { get; set; } - - public MyContext12549(DbContextOptions options) - : base(options) - { - } - - public class Table1_12549 - { - public int Id { get; set; } - } - - public class Table2_12549 - { - public int Id { get; set; } - } - } - - #endregion - - #region Issue16233 - - [ConditionalFact] - public virtual async Task Derived_reference_is_skipped_when_base_type() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - var result = context.Bases.Include(p => ((MyContext16233.DerivedType16233)p).Reference).OrderBy(b => b.Id).ToList(); - - Assert.Equal(3, result.Count); - Assert.NotNull(Assert.IsType(result[1]).Reference); - Assert.Null(Assert.IsType(result[2]).Reference); - Assert.True(context.Entry(Assert.IsType(result[2])).Reference("Reference").IsLoaded); - - AssertSql( -""" -SELECT `b`.`Id`, `b`.`Discriminator`, `r`.`Id`, `r`.`DerivedTypeId` -FROM `Bases` AS `b` -LEFT JOIN `Reference16233` AS `r` ON `b`.`Id` = `r`.`DerivedTypeId` -ORDER BY `b`.`Id` -"""); - } - - using (var context = contextFactory.CreateContext()) - { - ClearLog(); - var result = context.Bases.AsNoTracking().Include(p => ((MyContext16233.DerivedType16233)p).Reference).OrderBy(b => b.Id) - .ToList(); - - Assert.Equal(3, result.Count); - Assert.NotNull(Assert.IsType(result[1]).Reference); - Assert.NotNull(Assert.IsType(result[1]).Reference.DerivedType); - Assert.Null(Assert.IsType(result[2]).Reference); - - AssertSql( -""" -SELECT `b`.`Id`, `b`.`Discriminator`, `r`.`Id`, `r`.`DerivedTypeId` -FROM `Bases` AS `b` -LEFT JOIN `Reference16233` AS `r` ON `b`.`Id` = `r`.`DerivedTypeId` -ORDER BY `b`.`Id` -"""); - } - } - - private class MyContext16233 : DbContext - { - public virtual DbSet Bases { get; set; } - public virtual DbSet Derived { get; set; } - - public MyContext16233(DbContextOptions options) - : base(options) - { - } - - public void Seed() - { - AddRange( - new BaseType16233(), - new DerivedType16233 { Reference = new Reference16233() }, - new DerivedType16233()); - - SaveChanges(); - } - - public class BaseType16233 - { - public int Id { get; set; } - } - - public class DerivedType16233 : BaseType16233 - { - public Reference16233 Reference { get; set; } - } - - public class Reference16233 - { - public int Id { get; set; } - public int DerivedTypeId { get; set; } - public DerivedType16233 DerivedType { get; set; } - } - } - - #endregion - - #region Issue15684 - - [ConditionalFact] - public virtual async Task Projection_failing_with_EnumToStringConverter() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - var query = from p in context.Products - join c in context.Categories on p.CategoryId equals c.Id into grouping - from c in grouping.DefaultIfEmpty() - select new MyContext15684.ProductDto15684 - { - Id = p.Id, - Name = p.Name, - CategoryName = c == null ? "Other" : c.Name, - CategoryStatus = c == null ? MyContext15684.CategoryStatus15684.Active : c.Status - }; - var result = query.ToList(); - Assert.Equal(2, result.Count); - - AssertSql( -""" -SELECT `p`.`Id`, `p`.`Name`, IIF(`c`.`Id` IS NULL, 'Other', `c`.`Name`) AS `CategoryName`, IIF(`c`.`Id` IS NULL, 'Active', `c`.`Status`) AS `CategoryStatus` -FROM `Products` AS `p` -LEFT JOIN `Categories` AS `c` ON `p`.`CategoryId` = `c`.`Id` -"""); - } - } - - protected class MyContext15684 : DbContext - { - public DbSet Categories { get; set; } - public DbSet Products { get; set; } - - public MyContext15684(DbContextOptions options) - : base(options) - { - } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - => modelBuilder - .Entity() - .Property(e => e.Status) - .HasConversion(new EnumToStringConverter()); - - public void Seed() - { - Products.Add( - new Product15684 { Name = "Apple", Category = new Category15684 { Name = "Fruit", Status = CategoryStatus15684.Active } }); - - Products.Add(new Product15684 { Name = "Bike" }); - - SaveChanges(); - } - - public class Product15684 - { - [Key] - public int Id { get; set; } - - [Required] - public string Name { get; set; } - - public int? CategoryId { get; set; } - - public Category15684 Category { get; set; } - } - - public class Category15684 - { - [Key] - public int Id { get; set; } - - [Required] - public string Name { get; set; } - - public CategoryStatus15684 Status { get; set; } - } - - public class ProductDto15684 - { - public string CategoryName { get; set; } - public CategoryStatus15684 CategoryStatus { get; set; } - public int Id { get; set; } - public string Name { get; set; } - } - - public enum CategoryStatus15684 - { - Active = 0, - Removed = 1 - } - } - - #endregion - - #region Issue15204 - - private MemberInfo GetMemberInfo(Type type, string name) - => type.GetProperty(name); - - [ConditionalFact] - public virtual async Task Null_check_removal_applied_recursively() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - var userParam = Expression.Parameter(typeof(MyContext15204.TBuilding15204), "s"); - var builderProperty = Expression.MakeMemberAccess( - userParam, GetMemberInfo(typeof(MyContext15204.TBuilding15204), "Builder")); - var cityProperty = Expression.MakeMemberAccess( - builderProperty, GetMemberInfo(typeof(MyContext15204.TBuilder15204), "City")); - var nameProperty = Expression.MakeMemberAccess(cityProperty, GetMemberInfo(typeof(MyContext15204.TCity15204), "Name")); - - //{s => (IIF((IIF((s.Builder == null), null, s.Builder.City) == null), null, s.Builder.City.Name) == "Leeds")} - var selection = Expression.Lambda>( - Expression.Equal( - Expression.Condition( - Expression.Equal( - Expression.Condition( - Expression.Equal( - builderProperty, - Expression.Constant(null, typeof(MyContext15204.TBuilder15204))), - Expression.Constant(null, typeof(MyContext15204.TCity15204)), - cityProperty), - Expression.Constant(null, typeof(MyContext15204.TCity15204))), - Expression.Constant(null, typeof(string)), - nameProperty), - Expression.Constant("Leeds", typeof(string))), - userParam); - - var query = context.BuildingSet - .Where(selection) - .Include(a => a.Builder).ThenInclude(a => a.City) - .Include(a => a.Mandator).ToList(); - - Assert.True(query.Count == 1); - Assert.True(query.First().Builder.City.Name == "Leeds"); - Assert.True(query.First().LongName == "Two L2"); - - AssertSql( -""" -SELECT `b`.`Id`, `b`.`BuilderId`, `b`.`Identity`, `b`.`LongName`, `b`.`MandatorId`, `b0`.`Id`, `b0`.`CityId`, `b0`.`Name`, `c`.`Id`, `c`.`Name`, `m`.`Id`, `m`.`Identity`, `m`.`Name` -FROM ((`BuildingSet` AS `b` -INNER JOIN `Builder` AS `b0` ON `b`.`BuilderId` = `b0`.`Id`) -LEFT JOIN `City` AS `c` ON `b0`.`CityId` = `c`.`Id`) -INNER JOIN `MandatorSet` AS `m` ON `b`.`MandatorId` = `m`.`Id` -WHERE (`c`.`Name` = 'Leeds') AND (`b0`.`CityId` IS NOT NULL AND `c`.`Id` IS NOT NULL) -"""); - } - } - - protected class MyContext15204 : DbContext - { - public DbSet MandatorSet { get; set; } - public DbSet BuildingSet { get; set; } - public DbSet Builder { get; set; } - public DbSet City { get; set; } - - public MyContext15204(DbContextOptions options) - : base(options) - { - ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking; - ChangeTracker.AutoDetectChangesEnabled = false; - } - - public void Seed() - { - var london = new TCity15204 { Name = "London" }; - var sam = new TBuilder15204 { Name = "Sam", City = london }; - - MandatorSet.Add( - new TMandator15204 - { - Identity = Guid.NewGuid(), - Name = "One", - Buildings = new List - { - new() - { - Identity = Guid.NewGuid(), - LongName = "One L1", - Builder = sam - }, - new() - { - Identity = Guid.NewGuid(), - LongName = "One L2", - Builder = sam - } - } - }); - MandatorSet.Add( - new TMandator15204 - { - Identity = Guid.NewGuid(), - Name = "Two", - Buildings = new List - { - new() - { - Identity = Guid.NewGuid(), - LongName = "Two L1", - Builder = new TBuilder15204 { Name = "John", City = london } - }, - new() - { - Identity = Guid.NewGuid(), - LongName = "Two L2", - Builder = new TBuilder15204 { Name = "Mark", City = new TCity15204 { Name = "Leeds" } } - } - } - }); - - SaveChanges(); - } - - public class TBuilding15204 - { - public int Id { get; set; } - public Guid Identity { get; set; } - public string LongName { get; set; } - public int BuilderId { get; set; } - public TBuilder15204 Builder { get; set; } - public TMandator15204 Mandator { get; set; } - public int MandatorId { get; set; } - } - - public class TBuilder15204 - { - public int Id { get; set; } - public string Name { get; set; } - public int CityId { get; set; } - public TCity15204 City { get; set; } - } - - public class TCity15204 - { - public int Id { get; set; } - public string Name { get; set; } - } - - public class TMandator15204 - { - public int Id { get; set; } - public Guid Identity { get; set; } - public string Name { get; set; } - public virtual ICollection Buildings { get; set; } - } - } - - #endregion - - #region Issue15518 - - [ConditionalTheory] - [InlineData(false)] - [InlineData(true)] - public virtual async Task Nested_queries_does_not_cause_concurrency_exception_sync(bool tracking) - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - var query = context.Repos.OrderBy(r => r.Id).Where(r => r.Id > 0); - query = tracking ? query.AsTracking() : query.AsNoTracking(); - - foreach (var a in query) - { - foreach (var b in query) - { - } - } - } - - using (var context = contextFactory.CreateContext()) - { - var query = context.Repos.OrderBy(r => r.Id).Where(r => r.Id > 0); - query = tracking ? query.AsTracking() : query.AsNoTracking(); - - await foreach (var a in query.AsAsyncEnumerable()) - { - await foreach (var b in query.AsAsyncEnumerable()) - { - } - } - } - } - - protected class MyContext15518 : DbContext - { - public DbSet Repos { get; set; } - - public MyContext15518(DbContextOptions options) - : base(options) - { - } - - public void Seed() - { - AddRange( - new Repo15518 { Name = "London" }, - new Repo15518 { Name = "New York" }); - - SaveChanges(); - } - - public class Repo15518 - { - public int Id { get; set; } - public string Name { get; set; } - } - } - - #endregion - - #region Issue8864 - - [ConditionalFact] - public virtual async Task Select_nested_projection() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - var customers = context.Customers - .Select(c => new { Customer = c, CustomerAgain = MyContext8864.Get(context, c.Id) }) - .ToList(); - - Assert.Equal(2, customers.Count); - - foreach (var customer in customers) - { - Assert.Same(customer.Customer, customer.CustomerAgain); - } - } - } - - protected class MyContext8864 : DbContext - { - public DbSet Customers { get; set; } - - public MyContext8864(DbContextOptions options) - : base(options) - { - } - - public void Seed() - { - AddRange( - new Customer8864 { Name = "Alan" }, - new Customer8864 { Name = "Elon" }); - - SaveChanges(); - } - - public static Customer8864 Get(MyContext8864 context, int id) - => context.Customers.Single(c => c.Id == id); - - public class Customer8864 - { - public int Id { get; set; } - public string Name { get; set; } - } - } - - #endregion - - #region Issue7983 - - [ConditionalFact] - public virtual async Task New_instances_in_projection_are_not_shared_across_results() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - var list = context.Posts.Select(p => new MyContext7983.PostDTO7983().From(p)).ToList(); - - Assert.Equal(3, list.Count); - Assert.Equal(new[] { "First", "Second", "Third" }, list.Select(dto => dto.Title)); - - AssertSql( -""" -SELECT `p`.`Id`, `p`.`BlogId`, `p`.`Title` -FROM `Posts` AS `p` -"""); - } - } - - protected class MyContext7983 : DbContext - { - public DbSet Blogs { get; set; } - public DbSet Posts { get; set; } - - public MyContext7983(DbContextOptions options) - : base(options) - { - } - - public void Seed() - { - Add( - new Blog7983 - { - Posts = new List - { - new() { Title = "First" }, - new() { Title = "Second" }, - new() { Title = "Third" } - } - }); - - SaveChanges(); - } - - public class Blog7983 - { - public int Id { get; set; } - public string Title { get; set; } - - public ICollection Posts { get; set; } - } - - public class Post7983 - { - public int Id { get; set; } - public string Title { get; set; } - - public int? BlogId { get; set; } - public Blog7983 Blog { get; set; } - } - - public class PostDTO7983 - { - public string Title { get; set; } - - public PostDTO7983 From(Post7983 post) - { - Title = post.Title; - return this; - } - } - } - - #endregion - - #region Issue17253 - - [ConditionalFact] - public virtual async Task Self_reference_in_query_filter_works() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - var query = context.EntitiesWithQueryFilterSelfReference.Where(e => e.Name != "Foo"); - var result = query.ToList(); - - AssertSql( -""" -SELECT `e`.`Id`, `e`.`Name` -FROM `EntitiesWithQueryFilterSelfReference` AS `e` -WHERE EXISTS ( - SELECT 1 - FROM `EntitiesWithQueryFilterSelfReference` AS `e0`) AND (`e`.`Name` <> 'Foo' OR `e`.`Name` IS NULL) -"""); - } - - using (var context = contextFactory.CreateContext()) - { - ClearLog(); - var query = context.EntitiesReferencingEntityWithQueryFilterSelfReference.Where(e => e.Name != "Foo"); - var result = query.ToList(); - - AssertSql( -""" -SELECT `e`.`Id`, `e`.`Name` -FROM `EntitiesReferencingEntityWithQueryFilterSelfReference` AS `e` -WHERE EXISTS ( - SELECT 1 - FROM `EntitiesWithQueryFilterSelfReference` AS `e0` - WHERE EXISTS ( - SELECT 1 - FROM `EntitiesWithQueryFilterSelfReference` AS `e1`)) AND (`e`.`Name` <> 'Foo' OR `e`.`Name` IS NULL) -"""); - } - } - - protected class MyContext17253 : DbContext - { - public DbSet EntitiesWithQueryFilterSelfReference { get; set; } - - public DbSet EntitiesReferencingEntityWithQueryFilterSelfReference - { - get; - set; - } - - public DbSet EntitiesWithQueryFilterCycle1 { get; set; } - public DbSet EntitiesWithQueryFilterCycle2 { get; set; } - public DbSet EntitiesWithQueryFilterCycle3 { get; set; } - - public MyContext17253(DbContextOptions options) - : base(options) - { - } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - modelBuilder.Entity().HasQueryFilter(e => EntitiesWithQueryFilterSelfReference.Any()); - modelBuilder.Entity() - .HasQueryFilter(e => Set().Any()); - - modelBuilder.Entity().HasQueryFilter(e => EntitiesWithQueryFilterCycle2.Any()); - modelBuilder.Entity().HasQueryFilter(e => Set().Any()); - modelBuilder.Entity().HasQueryFilter(e => EntitiesWithQueryFilterCycle1.Any()); - } - - public void Seed() - { - EntitiesWithQueryFilterSelfReference.Add( - new EntityWithQueryFilterSelfReference { Name = "EntityWithQueryFilterSelfReference" }); - EntitiesReferencingEntityWithQueryFilterSelfReference.Add( - new EntityReferencingEntityWithQueryFilterSelfReference { Name = "EntityReferencingEntityWithQueryFilterSelfReference" }); - - EntitiesWithQueryFilterCycle1.Add(new EntityWithQueryFilterCycle1 { Name = "EntityWithQueryFilterCycle1_1" }); - EntitiesWithQueryFilterCycle2.Add(new EntityWithQueryFilterCycle2 { Name = "EntityWithQueryFilterCycle2_1" }); - EntitiesWithQueryFilterCycle3.Add(new EntityWithQueryFilterCycle3 { Name = "EntityWithQueryFilterCycle3_1" }); - - SaveChanges(); - } - - public class EntityWithQueryFilterSelfReference - { - public int Id { get; set; } - public string Name { get; set; } - } - - public class EntityReferencingEntityWithQueryFilterSelfReference - { - public int Id { get; set; } - public string Name { get; set; } - } - - public class EntityWithQueryFilterCycle1 - { - public int Id { get; set; } - public string Name { get; set; } - } - - public class EntityWithQueryFilterCycle2 - { - public int Id { get; set; } - public string Name { get; set; } - } - - public class EntityWithQueryFilterCycle3 - { - public int Id { get; set; } - public string Name { get; set; } - } - } - - #endregion - - #region Issue17276_17099_16759 - - [ConditionalFact] - public virtual async Task Expression_tree_constructed_via_interface_works_17276() - { - var contextFactory = await InitializeAsync(); - - using (var context = contextFactory.CreateContext()) - { - var query = MyContext17276.List17276(context.RemovableEntities); - - AssertSql( -""" -SELECT `r`.`Id`, `r`.`IsRemoved`, `r`.`Removed`, `r`.`RemovedByUser`, `r`.`OwnedEntity_Exists`, `r`.`OwnedEntity_OwnedValue` -FROM `RemovableEntities` AS `r` -WHERE `r`.`IsRemoved` <> TRUE -"""); - } - - using (var context = contextFactory.CreateContext()) - { - ClearLog(); - var query = context.Parents - .Where(p => EF.Property(EF.Property(p, "RemovableEntity"), "IsRemoved")) - .ToList(); - - AssertSql( -""" -SELECT `p`.`Id`, `p`.`RemovableEntityId` -FROM `Parents` AS `p` -LEFT JOIN `RemovableEntities` AS `r` ON `p`.`RemovableEntityId` = `r`.`Id` -WHERE `r`.`IsRemoved` = TRUE -"""); - } - - using (var context = contextFactory.CreateContext()) - { - ClearLog(); - var query = context.RemovableEntities - .Where(p => EF.Property(EF.Property(p, "OwnedEntity"), "OwnedValue") == "Abc") - .ToList(); - - AssertSql( -""" -SELECT `r`.`Id`, `r`.`IsRemoved`, `r`.`Removed`, `r`.`RemovedByUser`, `r`.`OwnedEntity_Exists`, `r`.`OwnedEntity_OwnedValue` -FROM `RemovableEntities` AS `r` -WHERE `r`.`OwnedEntity_OwnedValue` = 'Abc' -"""); - } - - // #16759 - using (var context = contextFactory.CreateContext()) - { - ClearLog(); - var specification = new MyContext17276.Specification17276(1); - var entities = context.Set().Where(specification.Criteria).ToList(); - - AssertSql( -$""" -@__id_0='1' - -SELECT `p`.`Id`, `p`.`RemovableEntityId` -FROM `Parents` AS `p` -WHERE `p`.`Id` = {AssertSqlHelper.Parameter("@__id_0")} -"""); - } - } - - protected class MyContext17276 : DbContext - { - public DbSet RemovableEntities { get; set; } - public DbSet Parents { get; set; } - - public MyContext17276(DbContextOptions options) - : base(options) - { - } - - public static List List17276(IQueryable query) - where T : IRemovable17276 - => query.Where(x => !x.IsRemoved).ToList(); - - public interface IRemovable17276 - { - bool IsRemoved { get; set; } - - string RemovedByUser { get; set; } - - DateTime? Removed { get; set; } - } - - public class RemovableEntity17276 : IRemovable17276 - { - public int Id { get; set; } - public bool IsRemoved { get; set; } - public string RemovedByUser { get; set; } - public DateTime? Removed { get; set; } - public OwnedEntity OwnedEntity { get; set; } - } - - public class Parent17276 : IHasId17276 - { - public int Id { get; set; } - public RemovableEntity17276 RemovableEntity { get; set; } - } - - [Owned] - public class OwnedEntity : IOwned - { - public string OwnedValue { get; set; } - public int Exists { get; set; } - } - - public interface IHasId17276 - { - T Id { get; } - } - - public interface IOwned - { - string OwnedValue { get; } - int Exists { get; } - } - - public class Specification17276 - where T : IHasId17276 - { - public Expression> Criteria { get; } - - public Specification17276(int id) - { - Criteria = t => t.Id == id; - } - } - } - - #endregion - - #region Issue6864 - - [ConditionalFact] - public virtual async Task Implicit_cast_6864() - { - var contextFactory = await InitializeAsync(); - - using (var context = contextFactory.CreateContext()) - { - // Verify no client eval - var result = context.Foos.Where(f => f.String == new MyContext6864.Bar6864(1337)).ToList(); - - Assert.Empty(result); - - AssertSql( -""" -SELECT `f`.`Id`, `f`.`String` -FROM `Foos` AS `f` -WHERE `f`.`String` = '1337' -"""); - } - - //Access_property_of_closure - using (var context = contextFactory.CreateContext()) - { - ClearLog(); - // Verify no client eval - var bar = new MyContext6864.Bar6864(1337); - var result = context.Foos.Where(f => f.String == bar.Value).ToList(); - - Assert.Empty(result); - - AssertSql( -$""" -@__bar_Value_0='1337' (Size = 255) - -SELECT `f`.`Id`, `f`.`String` -FROM `Foos` AS `f` -WHERE `f`.`String` = {AssertSqlHelper.Parameter("@__bar_Value_0")} -"""); - } - - //Implicitly_cast_closure - using (var context = contextFactory.CreateContext()) - { - ClearLog(); - // Verify no client eval - var bar = new MyContext6864.Bar6864(1337); - var result = context.Foos.Where(f => f.String == bar.ToString()).ToList(); - - Assert.Empty(result); - - AssertSql( -$""" -@__ToString_0='1337' (Size = 255) - -SELECT `f`.`Id`, `f`.`String` -FROM `Foos` AS `f` -WHERE `f`.`String` = {AssertSqlHelper.Parameter("@__ToString_0")} -"""); - } - - //Implicitly_cast_closure - using (var context = contextFactory.CreateContext()) - { - ClearLog(); - // Verify no client eval - var bar = new MyContext6864.Bar6864(1337); - var result = context.Foos.Where(f => f.String == bar).ToList(); - - Assert.Empty(result); - - AssertSql( -$""" -@__p_0='1337' (Size = 255) - -SELECT `f`.`Id`, `f`.`String` -FROM `Foos` AS `f` -WHERE `f`.`String` = {AssertSqlHelper.Parameter("@__p_0")} -"""); - } - - // Implicitly_cast_return_value - using (var context = contextFactory.CreateContext()) - { - ClearLog(); - // Verify no client eval - var result = context.Foos.Where(f => f.String == new MyContext6864.Bar6864(1337).Clone()).ToList(); - - Assert.Empty(result); - - AssertSql( -""" -SELECT `f`.`Id`, `f`.`String` -FROM `Foos` AS `f` -WHERE `f`.`String` = '1337' -"""); - } - } - - private class MyContext6864 : DbContext - { - public DbSet Foos { get; set; } - - public MyContext6864(DbContextOptions options) - : base(options) - { - } - - public class FooEntity6864 - { - public int Id { get; set; } - public string String { get; set; } - } - - public class Bar6864 - { - private readonly int _value; - - public Bar6864(int value) - { - _value = value; - } - - public string Value - => _value.ToString(); - - public override string ToString() - => Value; - - public static implicit operator string(Bar6864 bar) - => bar.Value; - - public Bar6864 Clone() - => new(_value); - } - } - - #endregion - - #region Issue9582 - - [ConditionalFact] - public virtual async Task Setting_IsUnicode_generates_unicode_literal_in_SQL() - { - var contextFactory = await InitializeAsync(); - - using (var context = contextFactory.CreateContext()) - { - // Verify SQL - var query = context.Set().Where(xx => xx.Nombre.Contains("lla")).ToList(); - - AssertSql( -""" -SELECT `t`.`Id`, `t`.`Nombre` -FROM `TipoServicio9582` AS `t` -WHERE `t`.`Nombre` LIKE '%lla%' -"""); - } - } - - protected class MyContext9582 : DbContext - { - public MyContext9582(DbContextOptions options) - : base(options) - { - } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - modelBuilder.Entity( - builder => - { - builder.HasKey(ts => ts.Id); - - builder.Property(ts => ts.Id).IsRequired(); - builder.Property(ts => ts.Nombre).IsRequired().HasMaxLength(20); - }); - - foreach (var property in modelBuilder.Model.GetEntityTypes() - .SelectMany(e => e.GetProperties().Where(p => p.ClrType == typeof(string)))) - { - property.SetIsUnicode(false); - } - } - - public class TipoServicio9582 - { - public int Id { get; set; } - public string Nombre { get; set; } - } - } - - #endregion - - #region Issue7222 - - [ConditionalFact] - public virtual async Task Inlined_dbcontext_is_not_leaking() - { - var contextFactory = await InitializeAsync(); - - using (var context = contextFactory.CreateContext()) - { - var entities = context.Blogs.Select(b => context.ClientMethod(b)).ToList(); - - AssertSql( -""" -SELECT `b`.`Id` -FROM `Blogs` AS `b` -"""); - } - - using (var context = contextFactory.CreateContext()) - { - Assert.Throws(() => context.RunQuery()); - } - } - - protected class MyContext7222 : DbContext - { - public DbSet Blogs { get; set; } - - public MyContext7222(DbContextOptions options) - : base(options) - { - } - - public void RunQuery() - => Blogs.Select(b => ClientMethod(b)).ToList(); - - public int ClientMethod(Blog7222 blog) - => blog.Id; - - public class Blog7222 - { - public int Id { get; set; } - } - } - - #endregion - - #region Issue17644 - - [ConditionalFact] - public virtual async Task Return_type_of_singular_operator_is_preserved() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - var personsToFind = await context.Persons.Where(p => p.Age >= 21) - .Select(p => new MyContext17644.PersonDetailView17644 { Name = p.Name, Age = p.Age }) - .FirstAsync(); - - AssertSql( -""" -SELECT TOP 1 `p`.`Name`, `p`.`Age` -FROM `Persons` AS `p` -WHERE `p`.`Age` >= 21 -"""); - } - - using (var context = contextFactory.CreateContext()) - { - ClearLog(); - var personsToFind = await context.Persons.Where(p => p.Age >= 21) - .Select(p => new MyContext17644.PersonDetailView17644 { Name = p.Name, Age = p.Age }) - .FirstOrDefaultAsync(); - - AssertSql( -""" -SELECT TOP 1 `p`.`Name`, `p`.`Age` -FROM `Persons` AS `p` -WHERE `p`.`Age` >= 21 -"""); - } - - using (var context = contextFactory.CreateContext()) - { - ClearLog(); - var personsToFind = await context.Persons.Where(p => p.Age >= 21) - .Select(p => new MyContext17644.PersonDetailView17644 { Name = p.Name, Age = p.Age }) - .SingleAsync(); - - AssertSql( -""" -SELECT TOP 2 `p`.`Name`, `p`.`Age` -FROM `Persons` AS `p` -WHERE `p`.`Age` >= 21 -"""); - } - - using (var context = contextFactory.CreateContext()) - { - ClearLog(); - var personsToFind = await context.Persons.Where(p => p.Age >= 21) - .Select(p => new MyContext17644.PersonDetailView17644 { Name = p.Name, Age = p.Age }) - .SingleOrDefaultAsync(); - - AssertSql( -""" -SELECT TOP 2 `p`.`Name`, `p`.`Age` -FROM `Persons` AS `p` -WHERE `p`.`Age` >= 21 -"""); - } - - using (var context = contextFactory.CreateContext()) - { - ClearLog(); - var personsToFind = await context.Persons.Where(p => p.Age >= 21) - .OrderBy(p => p.Id) - .Select(p => new MyContext17644.PersonDetailView17644 { Name = p.Name, Age = p.Age }) - .LastAsync(); - - AssertSql( -""" -SELECT TOP 1 `p`.`Name`, `p`.`Age` -FROM `Persons` AS `p` -WHERE `p`.`Age` >= 21 -ORDER BY `p`.`Id` DESC -"""); - } - - using (var context = contextFactory.CreateContext()) - { - ClearLog(); - var personsToFind = await context.Persons.Where(p => p.Age >= 21) - .OrderBy(p => p.Id) - .Select(p => new MyContext17644.PersonDetailView17644 { Name = p.Name, Age = p.Age }) - .LastOrDefaultAsync(); - - AssertSql( -""" -SELECT TOP 1 `p`.`Name`, `p`.`Age` -FROM `Persons` AS `p` -WHERE `p`.`Age` >= 21 -ORDER BY `p`.`Id` DESC -"""); - } - } - - protected class MyContext17644 : DbContext - { - public DbSet Persons { get; set; } - - public MyContext17644(DbContextOptions options) - : base(options) - { - } - - public void Seed() - { - var person = new Person17644 { Name = "John Doe", Age = 21 }; - Persons.Add(person); - SaveChanges(); - } - - public class Person17644 - { - public int Id { get; set; } - public string Name { set; get; } - public int Age { set; get; } - } - - public class PersonView17644 - { - public string Name { set; get; } - } - - public class PersonDetailView17644 : PersonView17644 - { - public int Age { set; get; } - } - } - - #endregion - - #region Issue11023 - - [ConditionalFact] - public virtual async Task Async_correlated_projection_with_first() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - var query = await context.Entities - .Select(e => new { ThingIds = e.Values.First().Things.Select(t => t.Subthing.ThingId).ToList() }) - .ToListAsync(); - - var result = Assert.Single(query); - Assert.Equal(new[] { 1, 2 }, result.ThingIds); - - AssertSql( - """ -SELECT [e].[Id], [t0].[ThingId], [t0].[Id], [t0].[Id0] -FROM [Entities] AS [e] -OUTER APPLY ( - SELECT [s].[ThingId], [t].[Id], [s].[Id] AS [Id0] - FROM [Things] AS [t] - LEFT JOIN [Subthings] AS [s] ON [t].[Id] = [s].[ThingId] - WHERE ( - SELECT TOP(1) [v].[Id] - FROM [Values] AS [v] - WHERE [e].[Id] = [v].[Entity11023Id]) IS NOT NULL AND (( - SELECT TOP(1) [v0].[Id] - FROM [Values] AS [v0] - WHERE [e].[Id] = [v0].[Entity11023Id]) = [t].[Value11023Id] OR (( - SELECT TOP(1) [v0].[Id] - FROM [Values] AS [v0] - WHERE [e].[Id] = [v0].[Entity11023Id]) IS NULL AND [t].[Value11023Id] IS NULL)) -) AS [t0] -ORDER BY [e].[Id], [t0].[Id] -"""); - } - } - - protected class MyContext11023 : DbContext - { - public DbSet Entities { get; set; } - public DbSet Values { get; set; } - public DbSet Things { get; set; } - public DbSet Subthings { get; set; } - - public MyContext11023(DbContextOptions options) - : base(options) - { - } - - public void Seed() - { - Add( - new Entity11023 - { - Values = new List - { - new() - { - Things = new List - { - new() { Subthing = new Subthing11023() }, new() { Subthing = new Subthing11023() } - } - } - } - }); - - SaveChanges(); - } - - public class Entity11023 - { - public int Id { get; set; } - public ICollection Values { get; set; } - } - - public class Value11023 - { - public int Id { get; set; } - public ICollection Things { get; set; } - } - - public class Thing11023 - { - public int Id { get; set; } - public Subthing11023 Subthing { get; set; } - } - - public class Subthing11023 - { - public int Id { get; set; } - public int ThingId { get; set; } - public Thing11023 Thing { get; set; } - } - } - - #endregion - - #region Issue7973 - - [ConditionalFact] - public virtual async Task SelectMany_with_collection_selector_having_subquery() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - var users = (from user in context.Users - from organisation in context.Organisations.Where(o => o.OrganisationUsers.Any()).DefaultIfEmpty() - select new { UserId = user.Id, OrgId = organisation.Id }).ToList(); - - Assert.Equal(2, users.Count); - - AssertSql( - """ -SELECT [u].[Id] AS [UserId], [t0].[Id] AS [OrgId] -FROM [Users] AS [u] -CROSS JOIN ( - SELECT [t].[Id] - FROM ( - SELECT NULL AS [empty] - ) AS [e] - LEFT JOIN ( - SELECT [o].[Id] - FROM [Organisations] AS [o] - WHERE EXISTS ( - SELECT 1 - FROM [OrganisationUser7973] AS [o0] - WHERE [o].[Id] = [o0].[OrganisationId]) - ) AS [t] ON 1 = 1 -) AS [t0] -"""); - } - } - - protected class MyContext7973 : DbContext - { - public DbSet Users { get; set; } - public DbSet Organisations { get; set; } - - public MyContext7973(DbContextOptions options) - : base(options) - { - } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - modelBuilder.Entity().HasKey(ou => new { ou.OrganisationId, ou.UserId }); - modelBuilder.Entity().HasOne(ou => ou.Organisation).WithMany(o => o.OrganisationUsers) - .HasForeignKey(ou => ou.OrganisationId); - modelBuilder.Entity().HasOne(ou => ou.User).WithMany(u => u.OrganisationUsers) - .HasForeignKey(ou => ou.UserId); - } - - public void Seed() - { - AddRange( - new OrganisationUser7973 { Organisation = new Organisation7973(), User = new User7973() }, - new Organisation7973(), - new User7973()); - - SaveChanges(); - } - - public class User7973 - { - public int Id { get; set; } - public List OrganisationUsers { get; set; } - } - - public class Organisation7973 - { - public int Id { get; set; } - public List OrganisationUsers { get; set; } - } - - public class OrganisationUser7973 - { - public int OrganisationId { get; set; } - public Organisation7973 Organisation { get; set; } - - public int UserId { get; set; } - public User7973 User { get; set; } - } - } - - #endregion - - #region Issue10447 - - [ConditionalFact] - public virtual async Task Nested_include_queries_do_not_populate_navigation_twice() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - var query = context.Blogs.Include(b => b.Posts); - - foreach (var blog in query) - { - query.ToList(); - } - - Assert.Collection( - query, - b => Assert.Equal(3, b.Posts.Count), - b => Assert.Equal(2, b.Posts.Count), - b => Assert.Single(b.Posts)); - } - } - - protected class MyContext10447 : DbContext - { - public DbSet Blogs { get; set; } - - public MyContext10447(DbContextOptions options) - : base(options) - { - } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - } - - public void Seed() - { - AddRange( - new Blog10447 - { - Posts = new List - { - new(), - new(), - new() - } - }, - new Blog10447 { Posts = new List { new(), new() } }, - new Blog10447 { Posts = new List { new() } }); - - SaveChanges(); - } - - public class Blog10447 - { - public int Id { get; set; } - public List Posts { get; set; } - } - - public class Post10447 - { - public int Id { get; set; } - - public Blog10447 Blog { get; set; } - } - } - - #endregion - - #region Issue12456 - - [ConditionalFact] - public virtual async Task Let_multiple_references_with_reference_to_outer() - { - var contextFactory = await InitializeAsync(); - - using (var context = contextFactory.CreateContext()) - { - var users = (from a in context.Activities - let cs = context.CompetitionSeasons - .First(s => s.StartDate <= a.DateTime && a.DateTime < s.EndDate) - select new { cs.Id, Points = a.ActivityType.Points.Where(p => p.CompetitionSeason == cs) }).ToList(); - - AssertSql( - """ -SELECT ( - SELECT TOP(1) [c].[Id] - FROM [CompetitionSeasons] AS [c] - WHERE [c].[StartDate] <= [a].[DateTime] AND [a].[DateTime] < [c].[EndDate]), [a].[Id], [a0].[Id], [t].[Id], [t].[ActivityTypeId], [t].[CompetitionSeasonId], [t].[Points], [t].[Id0] -FROM [Activities] AS [a] -INNER JOIN [ActivityType12456] AS [a0] ON [a].[ActivityTypeId] = [a0].[Id] -OUTER APPLY ( - SELECT [a1].[Id], [a1].[ActivityTypeId], [a1].[CompetitionSeasonId], [a1].[Points], [c0].[Id] AS [Id0] - FROM [ActivityTypePoints12456] AS [a1] - INNER JOIN [CompetitionSeasons] AS [c0] ON [a1].[CompetitionSeasonId] = [c0].[Id] - WHERE [a0].[Id] = [a1].[ActivityTypeId] AND [c0].[Id] = ( - SELECT TOP(1) [c1].[Id] - FROM [CompetitionSeasons] AS [c1] - WHERE [c1].[StartDate] <= [a].[DateTime] AND [a].[DateTime] < [c1].[EndDate]) -) AS [t] -ORDER BY [a].[Id], [a0].[Id], [t].[Id] -"""); - } - - using (var context = contextFactory.CreateContext()) - { - ClearLog(); - var users = context.Activities - .Select( - a => new - { - Activity = a, - CompetitionSeason = context.CompetitionSeasons - .First(s => s.StartDate <= a.DateTime && a.DateTime < s.EndDate) - }) - .Select( - a => new - { - a.Activity, - CompetitionSeasonId = a.CompetitionSeason.Id, - Points = a.Activity.Points - ?? a.Activity.ActivityType.Points - .Where(p => p.CompetitionSeason == a.CompetitionSeason) - .Select(p => p.Points).SingleOrDefault() - }).ToList(); - - AssertSql( - """ -SELECT [a].[Id], [a].[ActivityTypeId], [a].[DateTime], [a].[Points], ( - SELECT TOP(1) [c].[Id] - FROM [CompetitionSeasons] AS [c] - WHERE [c].[StartDate] <= [a].[DateTime] AND [a].[DateTime] < [c].[EndDate]) AS [CompetitionSeasonId], COALESCE([a].[Points], ( - SELECT TOP(1) [a1].[Points] - FROM [ActivityTypePoints12456] AS [a1] - INNER JOIN [CompetitionSeasons] AS [c0] ON [a1].[CompetitionSeasonId] = [c0].[Id] - WHERE [a0].[Id] = [a1].[ActivityTypeId] AND [c0].[Id] = ( - SELECT TOP(1) [c1].[Id] - FROM [CompetitionSeasons] AS [c1] - WHERE [c1].[StartDate] <= [a].[DateTime] AND [a].[DateTime] < [c1].[EndDate])), 0) AS [Points] -FROM [Activities] AS [a] -INNER JOIN [ActivityType12456] AS [a0] ON [a].[ActivityTypeId] = [a0].[Id] -"""); - } - } - - private class MyContext12456 : DbContext - { - public DbSet Activities { get; set; } - public DbSet CompetitionSeasons { get; set; } - - public MyContext12456(DbContextOptions options) - : base(options) - { - } - - public class CompetitionSeason12456 - { - public int Id { get; set; } - public DateTime StartDate { get; set; } - public DateTime EndDate { get; set; } - public List ActivityTypePoints { get; set; } - } - - public class Point12456 - { - public int Id { get; set; } - public CompetitionSeason12456 CompetitionSeason { get; set; } - public int? Points { get; set; } - } - - public class ActivityType12456 - { - public int Id { get; set; } - public List Points { get; set; } - } - - public class ActivityTypePoints12456 - { - public int Id { get; set; } - public int ActivityTypeId { get; set; } - public int CompetitionSeasonId { get; set; } - public int Points { get; set; } - - public ActivityType12456 ActivityType { get; set; } - public CompetitionSeason12456 CompetitionSeason { get; set; } - } - - public class Activity12456 - { - public int Id { get; set; } - public int ActivityTypeId { get; set; } - public DateTime DateTime { get; set; } - public int? Points { get; set; } - public ActivityType12456 ActivityType { get; set; } - } - } - - #endregion - - #region Issue15137 - - [ConditionalFact] - public virtual async Task Max_in_multi_level_nested_subquery() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - var container = await context.Trades - .Select( - x => new - { - x.Id, - Assets = x.Assets.AsQueryable() - .Select( - y => new - { - y.Id, - Contract = new - { - y.Contract.Id, - Season = new - { - y.Contract.Season.Id, - IsPastTradeDeadline = - (y.Contract.Season.Games.Max(z => (int?)z.GameNumber) ?? 0) > 10 - } - } - }) - .ToList() - }) - .SingleAsync(); - - AssertSql( -""" -SELECT `t0`.`Id`, `t1`.`Id`, `t1`.`Id0`, `t1`.`Id1`, `t1`.`IsPastTradeDeadline` -FROM ( - SELECT TOP 2 `t`.`Id` - FROM `Trades` AS `t` -) AS `t0` -LEFT JOIN ( - SELECT `d`.`Id`, `d0`.`Id` AS `Id0`, `d1`.`Id` AS `Id1`, IIF(IIF(( - SELECT MAX(`d2`.`GameNumber`) - FROM `DbGame` AS `d2` - WHERE `d1`.`Id` IS NOT NULL AND `d1`.`Id` = `d2`.`SeasonId`) IS NULL, 0, ( - SELECT MAX(`d2`.`GameNumber`) - FROM `DbGame` AS `d2` - WHERE `d1`.`Id` IS NOT NULL AND `d1`.`Id` = `d2`.`SeasonId`)) > 10, TRUE, FALSE) AS `IsPastTradeDeadline`, `d`.`DbTradeId` - FROM (`DbTradeAsset` AS `d` - INNER JOIN `DbContract` AS `d0` ON `d`.`ContractId` = `d0`.`Id`) - LEFT JOIN `DbSeason` AS `d1` ON `d0`.`SeasonId` = `d1`.`Id` -) AS `t1` ON `t0`.`Id` = `t1`.`DbTradeId` -ORDER BY `t0`.`Id`, `t1`.`Id`, `t1`.`Id0` -"""); - } - } - - protected class MyContext15137 : DbContext - { - public DbSet Trades { get; set; } - - public MyContext15137(DbContextOptions options) - : base(options) - { - } - - public void Seed() - { - var dbTrade = new DbTrade - { - Assets = new List - { - new() - { - Contract = new DbContract - { - Season = new DbSeason { Games = new List { new() { GameNumber = 1 } } } - } - } - } - }; - - Trades.Add(dbTrade); - SaveChanges(); - } - - public class DbTrade - { - public int Id { get; set; } - public List Assets { get; set; } - } - - public class DbTradeAsset - { - public int Id { get; set; } - public int ContractId { get; set; } - - public DbContract Contract { get; set; } - } - - public class DbContract - { - public int Id { get; set; } - - public DbSeason Season { get; set; } - } - - public class DbSeason - { - public int Id { get; set; } - - public List Games { get; set; } - } - - public class DbGame - { - public int Id { get; set; } - public int GameNumber { get; set; } - - public DbSeason Season { get; set; } - } - } - - #endregion - - #region Issue13517 - - [ConditionalFact] - public async Task Query_filter_with_pk_fk_optimization_Issue_13517() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - context.Entities.Select( - s => - new IssueContext13517.IssueEntityDto13517 - { - Id = s.Id, - RefEntity = s.RefEntity == null - ? null - : new IssueContext13517.IssueRefEntityDto13517 { Id = s.RefEntity.Id, Public = s.RefEntity.Public }, - RefEntityId = s.RefEntityId - }).Single(p => p.Id == 1); - - AssertSql( -""" -SELECT TOP 2 `e`.`Id`, IIF(`t`.`Id` IS NULL, TRUE, FALSE), `t`.`Id`, `t`.`Public`, `e`.`RefEntityId` -FROM `Entities` AS `e` -LEFT JOIN ( - SELECT `r`.`Id`, `r`.`Public` - FROM `RefEntities` AS `r` - WHERE `r`.`Public` = TRUE -) AS `t` ON `e`.`RefEntityId` = `t`.`Id` -WHERE `e`.`Id` = 1 -"""); - } - } - - protected class IssueContext13517 : DbContext - { - public DbSet Entities { get; set; } - public DbSet RefEntities { get; set; } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - => modelBuilder.Entity().HasQueryFilter(f => f.Public); - - public IssueContext13517(DbContextOptions options) - : base(options) - { - } - - public void Seed() - { - var refEntity = new IssueRefEntity13517 { Public = false }; - RefEntities.Add(refEntity); - Entities.Add(new IssueEntity13517 { RefEntity = refEntity }); - SaveChanges(); - } - - public class IssueEntity13517 - { - public int Id { get; set; } - public int? RefEntityId { get; set; } - public IssueRefEntity13517 RefEntity { get; set; } - } - - public class IssueRefEntity13517 - { - public int Id { get; set; } - public bool Public { get; set; } - } - - public class IssueEntityDto13517 - { - public int Id { get; set; } - public int? RefEntityId { get; set; } - public IssueRefEntityDto13517 RefEntity { get; set; } - } - - public class IssueRefEntityDto13517 - { - public int Id { get; set; } - public bool Public { get; set; } - } - } - - #endregion - - #region Issue17794 - - [ConditionalFact] - public async Task Double_convert_interface_created_expression_tree() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - var expression = - IssueContext17794.HasAction17794(IssueContext17794.OfferActions17794.Accepted); - var query = context.Offers.Where(expression).Count(); - - Assert.Equal(1, query); - - AssertSql( -$""" -@__action_0='1' - -SELECT COUNT(*) -FROM `Offers` AS `o` -WHERE EXISTS ( - SELECT 1 - FROM `OfferActions` AS `o0` - WHERE `o`.`Id` = `o0`.`OfferId` AND `o0`.`Action` = {AssertSqlHelper.Parameter("@__action_0")}) -"""); - } - } - - protected class IssueContext17794 : DbContext - { - public DbSet Offers { get; set; } - public DbSet OfferActions { get; set; } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - } - - public IssueContext17794(DbContextOptions options) - : base(options) - { - } - - public void Seed() - { - Add( - new Offer17794 { Actions = new List { new() { Action = OfferActions17794.Accepted } } }); - - SaveChanges(); - } - - public static Expression> HasAction17794(OfferActions17794 action) - where T : IOffer17794 - { - Expression> predicate = oa => oa.Action == action; - - return v => v.Actions.AsQueryable().Any(predicate); - } - - public interface IOffer17794 - { - ICollection Actions { get; set; } - } - - public class Offer17794 : IOffer17794 - { - public int Id { get; set; } - - public ICollection Actions { get; set; } - } - - public enum OfferActions17794 - { - Accepted = 1, - Declined = 2 - } - - public class OfferAction17794 - { - public int Id { get; set; } - - [Required] - public Offer17794 Offer { get; set; } - - public int OfferId { get; set; } - - [Required] - public OfferActions17794 Action { get; set; } - } - } - - #endregion - - #region Issue18087 - - [ConditionalFact] - public async Task Casts_are_removed_from_expression_tree_when_redundant() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - // implemented_interface - using (var context = contextFactory.CreateContext()) - { - var queryBase = (IQueryable)context.MockEntities; - var id = 1; - var query = queryBase.Cast().FirstOrDefault(x => x.Id == id); - - Assert.Equal(1, query.Id); - - AssertSql( -$""" -@__id_0='1' - -SELECT TOP 1 `m`.`Id`, `m`.`Name`, `m`.`NavigationEntityId` -FROM `MockEntities` AS `m` -WHERE `m`.`Id` = {AssertSqlHelper.Parameter("@__id_0")} -"""); - } - - // object - using (var context = contextFactory.CreateContext()) - { - ClearLog(); - var queryBase = (IQueryable)context.MockEntities; - var query = queryBase.Cast().Count(); - - Assert.Equal(3, query); - - AssertSql( -""" -SELECT COUNT(*) -FROM `MockEntities` AS `m` -"""); - } - - // non_implemented_interface - using (var context = contextFactory.CreateContext()) - { - ClearLog(); - var queryBase = (IQueryable)context.MockEntities; - var id = 1; - - var message = Assert.Throws( - () => queryBase.Cast().FirstOrDefault(x => x.Id == id)).Message; - - Assert.Equal( - CoreStrings.TranslationFailed( - @"DbSet() .Cast() .Where(e => e.Id == __id_0)"), - message.Replace("\r", "").Replace("\n", "")); - } - } - - protected class IssueContext18087 : DbContext - { - public IssueContext18087(DbContextOptions options) - : base(options) - { - } - - public DbSet MockEntities { get; set; } - - public void Seed() - { - AddRange( - new MockEntity { Name = "Entity1", NavigationEntity = null }, - new MockEntity { Name = "Entity2", NavigationEntity = null }, - new MockEntity { Name = "NewEntity", NavigationEntity = null }); - - SaveChanges(); - } - - public interface IDomainEntity - { - int Id { get; set; } - } - - public interface IDummyEntity - { - int Id { get; set; } - } - - public class MockEntity : IDomainEntity - { - public int Id { get; set; } - public string Name { get; set; } - - public MockEntity NavigationEntity { get; set; } - } - } - - #endregion - - #region Issue18759 - - [ConditionalFact] - public async Task Query_filter_with_null_constant() - { - var contextFactory = await InitializeAsync(); - - using (var context = contextFactory.CreateContext()) - { - var people = context.People.ToList(); - - AssertSql( -""" -SELECT `p`.`Id`, `p`.`UserDeleteId` -FROM `People` AS `p` -LEFT JOIN `User18759` AS `u` ON `p`.`UserDeleteId` = `u`.`Id` -WHERE `u`.`Id` IS NOT NULL -"""); - } - } - - protected class IssueContext18759 : DbContext - { - public DbSet People { get; set; } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - => modelBuilder.Entity().HasQueryFilter(p => p.UserDelete != null); - - public IssueContext18759(DbContextOptions options) - : base(options) - { - } - - public class Person18759 - { - public int Id { get; set; } - public User18759 UserDelete { get; set; } - } - - public class User18759 - { - public int Id { get; set; } - } - } - - #endregion - - #region Issue19138 - - [ConditionalFact] - public async Task Accessing_scalar_property_in_derived_type_projection_does_not_load_owned_navigations() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - var result = context.BaseEntities - .Select( - b => context.OtherEntities.Where(o => o.OtherEntityData == ((IssueContext19138.SubEntity19138)b).Data) - .FirstOrDefault()) - .ToList(); - - Assert.Equal("A", Assert.Single(result).OtherEntityData); - - AssertSql( - """ -SELECT [t0].[Id], [t0].[OtherEntityData] -FROM [BaseEntities] AS [b] -LEFT JOIN ( - SELECT [t].[Id], [t].[OtherEntityData] - FROM ( - SELECT [o].[Id], [o].[OtherEntityData], ROW_NUMBER() OVER(PARTITION BY [o].[OtherEntityData] ORDER BY [o].[Id]) AS [row] - FROM [OtherEntities] AS [o] - ) AS [t] - WHERE [t].[row] <= 1 -) AS [t0] ON [b].[Data] = [t0].[OtherEntityData] -"""); - } - } - - protected class IssueContext19138 : DbContext - { - public DbSet BaseEntities { get; set; } - public DbSet OtherEntities { get; set; } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - modelBuilder.Entity(); - modelBuilder.Entity().OwnsOne(se => se.Owned); - modelBuilder.Entity(); - } - - public IssueContext19138(DbContextOptions options) - : base(options) - { - } - - public void Seed() - { - Add(new OtherEntity19138 { OtherEntityData = "A" }); - Add(new SubEntity19138 { Data = "A" }); - - SaveChanges(); - } - - public class BaseEntity19138 - { - public int Id { get; set; } - } - - public class SubEntity19138 : BaseEntity19138 - { - public string Data { get; set; } - public Owned19138 Owned { get; set; } - } - - public class Owned19138 - { - public string OwnedData { get; set; } - public int Value { get; set; } - } - - public class OtherEntity19138 - { - public int Id { get; set; } - public string OtherEntityData { get; set; } - } - } - - #endregion - - #region Issue19708 - - [ConditionalFact] - public async Task GroupJoin_SelectMany_gets_flattened() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - var query = context.CustomerFilters.ToList(); - - AssertSql( -""" -SELECT `c`.`CustomerId`, `c`.`CustomerMembershipId` -FROM `CustomerFilters` AS `c` -WHERE ( - SELECT COUNT(*) - FROM `Customers` AS `c0` - LEFT JOIN `CustomerMemberships` AS `c1` ON `c0`.`Id` = `c1`.`CustomerId` - WHERE `c1`.`Id` IS NOT NULL AND `c0`.`Id` = `c`.`CustomerId`) > 0 -"""); - } - - using (var context = contextFactory.CreateContext()) - { - ClearLog(); - var query = context.Set().ToList(); - - Assert.Collection( - query, - t => AssertCustomerView(t, 1, "First", 1, "FirstChild"), - t => AssertCustomerView(t, 2, "Second", 2, "SecondChild1"), - t => AssertCustomerView(t, 2, "Second", 3, "SecondChild2"), - t => AssertCustomerView(t, 3, "Third", null, "")); - - static void AssertCustomerView( - IssueContext19708.CustomerView19708 actual, - int id, - string name, - int? customerMembershipId, - string customerMembershipName) - { - Assert.Equal(id, actual.Id); - Assert.Equal(name, actual.Name); - Assert.Equal(customerMembershipId, actual.CustomerMembershipId); - Assert.Equal(customerMembershipName, actual.CustomerMembershipName); - } - - AssertSql( -""" -SELECT `c`.`Id`, `c`.`Name`, `c0`.`Id` AS `CustomerMembershipId`, IIF(`c0`.`Id` IS NOT NULL, `c0`.`Name`, '') AS `CustomerMembershipName` -FROM `Customers` AS `c` -LEFT JOIN `CustomerMemberships` AS `c0` ON `c`.`Id` = `c0`.`CustomerId` -"""); - } - } - - protected class IssueContext19708 : DbContext - { - public IssueContext19708(DbContextOptions options) - : base(options) - { - } - - public DbSet Customers { get; set; } - public DbSet CustomerMemberships { get; set; } - public DbSet CustomerFilters { get; set; } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - modelBuilder.Entity() - .HasQueryFilter( - e => (from a in (from c in Customers - join cm in CustomerMemberships on c.Id equals cm.CustomerId into g - from cm in g.DefaultIfEmpty() - select new { c.Id, CustomerMembershipId = (int?)cm.Id }) - where a.CustomerMembershipId != null && a.Id == e.CustomerId - select a).Count() - > 0) - .HasKey(e => e.CustomerId); - -#pragma warning disable CS0618 // Type or member is obsolete - modelBuilder.Entity().HasNoKey().ToQuery(Build_Customers_Sql_View_InMemory()); -#pragma warning restore CS0618 // Type or member is obsolete - } - - public void Seed() - { - var customer1 = new Customer19708 { Name = "First" }; - var customer2 = new Customer19708 { Name = "Second" }; - var customer3 = new Customer19708 { Name = "Third" }; - - var customerMembership1 = new CustomerMembership19708 { Name = "FirstChild", Customer = customer1 }; - var customerMembership2 = new CustomerMembership19708 { Name = "SecondChild1", Customer = customer2 }; - var customerMembership3 = new CustomerMembership19708 { Name = "SecondChild2", Customer = customer2 }; - - AddRange(customer1, customer2, customer3); - AddRange(customerMembership1, customerMembership2, customerMembership3); - - SaveChanges(); - } - - private Expression>> Build_Customers_Sql_View_InMemory() - { - Expression>> query = () => - from customer in Customers - join customerMembership in CustomerMemberships on customer.Id equals customerMembership.CustomerId into - nullableCustomerMemberships - from customerMembership in nullableCustomerMemberships.DefaultIfEmpty() - select new CustomerView19708 - { - Id = customer.Id, - Name = customer.Name, - CustomerMembershipId = customerMembership != null ? customerMembership.Id : default(int?), - CustomerMembershipName = customerMembership != null ? customerMembership.Name : "" - }; - return query; - } - - public class Customer19708 - { - public int Id { get; set; } - public string Name { get; set; } - } - - public class CustomerMembership19708 - { - public int Id { get; set; } - public string Name { get; set; } - - public int CustomerId { get; set; } - public Customer19708 Customer { get; set; } - } - - public class CustomerFilter19708 - { - public int CustomerId { get; set; } - public int CustomerMembershipId { get; set; } - } - - public class CustomerView19708 - { - public int Id { get; set; } - public string Name { get; set; } - public int? CustomerMembershipId { get; set; } - public string CustomerMembershipName { get; set; } - } - } - - #endregion - - #region Issue20097 - - [ConditionalFact] - public async Task Interface_casting_though_generic_method() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - var originalQuery = context.Entities.Select(a => new IssueContext20097.MyModel20097 { Id = a.Id }); - var query = IssueContext20097.AddFilter(originalQuery, 1).ToList(); - - Assert.Single(query); - - AssertSql( - """ -@__id_0='1' - -SELECT [e].[Id] -FROM [Entities] AS [e] -WHERE [e].[Id] = @__id_0 -"""); - } - - using (var context = contextFactory.CreateContext()) - { - ClearLog(); - var originalQuery = context.Entities.Select(a => new IssueContext20097.MyModel20097 { Id = a.Id }); - var query = originalQuery.Where(a => a.Id == 1).ToList(); - - Assert.Single(query); - - AssertSql( - """ -SELECT [e].[Id] -FROM [Entities] AS [e] -WHERE [e].[Id] = CAST(1 AS bigint) -"""); - } - - using (var context = contextFactory.CreateContext()) - { - ClearLog(); - var originalQuery = context.Entities.Select(a => new IssueContext20097.MyModel20097 { Id = a.Id }); - var query = originalQuery.Where(a => ((IssueContext20097.IHaveId20097)a).Id == 1).ToList(); - - Assert.Single(query); - - AssertSql( - """ -SELECT [e].[Id] -FROM [Entities] AS [e] -WHERE [e].[Id] = CAST(1 AS bigint) -"""); - } - - using (var context = contextFactory.CreateContext()) - { - ClearLog(); - var originalQuery = context.Entities.Select(a => new IssueContext20097.MyModel20097 { Id = a.Id }); - var query = originalQuery.Where(a => (a as IssueContext20097.IHaveId20097).Id == 1).ToList(); - - Assert.Single(query); - - AssertSql( - """ -SELECT [e].[Id] -FROM [Entities] AS [e] -WHERE [e].[Id] = CAST(1 AS bigint) -"""); - } - - using (var context = contextFactory.CreateContext()) - { - ClearLog(); - var originalQuery = context.Entities.Select(a => new IssueContext20097.MyModel20097 { Id = a.Id }); - var query = originalQuery.Where(a => ((IssueContext20097.IHaveId20097)a).Id == 1).ToList(); - Assert.Single(query); - - AssertSql( - """ -SELECT [e].[Id] -FROM [Entities] AS [e] -WHERE [e].[Id] = CAST(1 AS bigint) -"""); - } - } - - protected class IssueContext20097 : DbContext - { - public IssueContext20097(DbContextOptions options) - : base(options) - { - } - - public DbSet Entities { get; set; } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - } - - public static IQueryable AddFilter(IQueryable query, long id) - where T : IHaveId20097 - => query.Where(a => a.Id == id); - - public void Seed() - { - Add(new Entity20097()); - - SaveChanges(); - } - - public class Entity20097 - { - public long Id { get; set; } - } - - public interface IHaveId20097 - { - long Id { get; } - } - - public class MyModel20097 : IHaveId20097 - { - public long Id { get; set; } - } - } - - #endregion - - #region Issue20609 - - [ConditionalFact] - public virtual async Task Can_ignore_invalid_include_path_error() - { - var contextFactory = await InitializeAsync( - onConfiguring: o => o.ConfigureWarnings(x => x.Ignore(CoreEventId.InvalidIncludePathError))); - - using var context = contextFactory.CreateContext(); - var result = context.Set().Include("SubB").ToList(); - } - - protected class IssueContext20609 : DbContext - { - public IssueContext20609(DbContextOptions options) - : base(options) - { - } - - public DbSet BaseClasses { get; set; } - public DbSet SubAs { get; set; } - public DbSet SubBs { get; set; } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - modelBuilder.Entity().HasBaseType().HasOne(x => x.SubA).WithMany(); - modelBuilder.Entity().HasBaseType().HasOne(x => x.SubB).WithMany(); - } - - public class BaseClass - { - public string Id { get; set; } - } - - public class ClassA : BaseClass - { - public SubA SubA { get; set; } - } - - public class ClassB : BaseClass - { - public SubB SubB { get; set; } - } - - public class SubA - { - public int Id { get; set; } - } - - public class SubB - { - public int Id { get; set; } - } - } - - #endregion - - #region Issue21355 - - [ConditionalFact] - public virtual async Task Can_configure_SingleQuery_at_context_level() - { - var contextFactory = await InitializeAsync( - seed: c => c.Seed(), - onConfiguring: o => new JetDbContextOptionsBuilder(o).UseQuerySplittingBehavior(QuerySplittingBehavior.SingleQuery)); - - using (var context = contextFactory.CreateContext()) - { - var result = context.Parents.Include(p => p.Children1).ToList(); - - AssertSql( -""" -SELECT `p`.`Id`, `c`.`Id`, `c`.`ParentId` -FROM `Parents` AS `p` -LEFT JOIN `Child21355` AS `c` ON `p`.`Id` = `c`.`ParentId` -ORDER BY `p`.`Id` -"""); - } - - using (var context = contextFactory.CreateContext()) - { - ClearLog(); - var result = context.Parents.Include(p => p.Children1).AsSplitQuery().ToList(); - - AssertSql( -""" -SELECT `p`.`Id` -FROM `Parents` AS `p` -ORDER BY `p`.`Id` -""", -// -""" -SELECT `c`.`Id`, `c`.`ParentId`, `p`.`Id` -FROM `Parents` AS `p` -INNER JOIN `Child21355` AS `c` ON `p`.`Id` = `c`.`ParentId` -ORDER BY `p`.`Id` -"""); - } - - using (var context = contextFactory.CreateContext()) - { - ClearLog(); - context.Parents.Include(p => p.Children1).Include(p => p.Children2).ToList(); - - AssertSql( -""" -SELECT `p`.`Id`, `c`.`Id`, `c`.`ParentId`, `a`.`Id`, `a`.`ParentId` -FROM (`Parents` AS `p` -LEFT JOIN `Child21355` AS `c` ON `p`.`Id` = `c`.`ParentId`) -LEFT JOIN `AnotherChild21355` AS `a` ON `p`.`Id` = `a`.`ParentId` -ORDER BY `p`.`Id`, `c`.`Id` -"""); - } - } - - [ConditionalFact] - public virtual async Task Can_configure_SplitQuery_at_context_level() - { - var contextFactory = await InitializeAsync( - seed: c => c.Seed(), - onConfiguring: o => new JetDbContextOptionsBuilder(o).UseQuerySplittingBehavior(QuerySplittingBehavior.SplitQuery)); - - using (var context = contextFactory.CreateContext()) - { - var result = context.Parents.Include(p => p.Children1).ToList(); - - AssertSql( -""" -SELECT `p`.`Id` -FROM `Parents` AS `p` -ORDER BY `p`.`Id` -""", -// -""" -SELECT `c`.`Id`, `c`.`ParentId`, `p`.`Id` -FROM `Parents` AS `p` -INNER JOIN `Child21355` AS `c` ON `p`.`Id` = `c`.`ParentId` -ORDER BY `p`.`Id` -"""); - } - - using (var context = contextFactory.CreateContext()) - { - ClearLog(); - var result = context.Parents.Include(p => p.Children1).AsSingleQuery().ToList(); - - AssertSql( -""" -SELECT `p`.`Id`, `c`.`Id`, `c`.`ParentId` -FROM `Parents` AS `p` -LEFT JOIN `Child21355` AS `c` ON `p`.`Id` = `c`.`ParentId` -ORDER BY `p`.`Id` -"""); - } - - using (var context = contextFactory.CreateContext()) - { - ClearLog(); - context.Parents.Include(p => p.Children1).Include(p => p.Children2).ToList(); - - AssertSql( -""" -SELECT `p`.`Id` -FROM `Parents` AS `p` -ORDER BY `p`.`Id` -""", -// -""" -SELECT `c`.`Id`, `c`.`ParentId`, `p`.`Id` -FROM `Parents` AS `p` -INNER JOIN `Child21355` AS `c` ON `p`.`Id` = `c`.`ParentId` -ORDER BY `p`.`Id` -""", -// -""" -SELECT `a`.`Id`, `a`.`ParentId`, `p`.`Id` -FROM `Parents` AS `p` -INNER JOIN `AnotherChild21355` AS `a` ON `p`.`Id` = `a`.`ParentId` -ORDER BY `p`.`Id` -"""); - } - } - - [ConditionalFact] - public virtual async Task Unconfigured_query_splitting_behavior_throws_a_warning() - { - var contextFactory = await InitializeAsync( - seed: c => c.Seed(), onConfiguring: o => ClearQuerySplittingBehavior(o)); - - using (var context = contextFactory.CreateContext()) - { - context.Parents.Include(p => p.Children1).Include(p => p.Children2).AsSplitQuery().ToList(); - - AssertSql( -""" -SELECT `p`.`Id` -FROM `Parents` AS `p` -ORDER BY `p`.`Id` -""", -// -""" -SELECT `c`.`Id`, `c`.`ParentId`, `p`.`Id` -FROM `Parents` AS `p` -INNER JOIN `Child21355` AS `c` ON `p`.`Id` = `c`.`ParentId` -ORDER BY `p`.`Id` -""", -// -""" -SELECT `a`.`Id`, `a`.`ParentId`, `p`.`Id` -FROM `Parents` AS `p` -INNER JOIN `AnotherChild21355` AS `a` ON `p`.`Id` = `a`.`ParentId` -ORDER BY `p`.`Id` -"""); - } - - using (var context = contextFactory.CreateContext()) - { - Assert.Contains( - RelationalResources.LogMultipleCollectionIncludeWarning(new TestLogger()) - .GenerateMessage(), - Assert.Throws( - () => context.Parents.Include(p => p.Children1).Include(p => p.Children2).ToList()).Message); - } - } - - [ConditionalFact] - public virtual async Task Using_AsSingleQuery_without_context_configuration_does_not_throw_warning() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using var context = contextFactory.CreateContext(); - - context.Parents.Include(p => p.Children1).Include(p => p.Children2).AsSingleQuery().ToList(); - - AssertSql( -""" -SELECT `p`.`Id`, `c`.`Id`, `c`.`ParentId`, `a`.`Id`, `a`.`ParentId` -FROM (`Parents` AS `p` -LEFT JOIN `Child21355` AS `c` ON `p`.`Id` = `c`.`ParentId`) -LEFT JOIN `AnotherChild21355` AS `a` ON `p`.`Id` = `a`.`ParentId` -ORDER BY `p`.`Id`, `c`.`Id` -"""); - } - - [ConditionalFact] - public virtual async Task SplitQuery_disposes_inner_data_readers() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - ((RelationalTestStore)contextFactory.TestStore).CloseConnection(); - - using (var context = contextFactory.CreateContext()) - { - context.Parents.Include(p => p.Children1).Include(p => p.Children2).AsSplitQuery().ToList(); - - Assert.Equal(ConnectionState.Closed, context.Database.GetDbConnection().State); - } - - using (var context = contextFactory.CreateContext()) - { - await context.Parents.Include(p => p.Children1).Include(p => p.Children2).AsSplitQuery().ToListAsync(); - - Assert.Equal(ConnectionState.Closed, context.Database.GetDbConnection().State); - } - - using (var context = contextFactory.CreateContext()) - { - context.Parents.Include(p => p.Children1).Include(p => p.Children2).OrderBy(e => e.Id).AsSplitQuery().Single(); - - Assert.Equal(ConnectionState.Closed, context.Database.GetDbConnection().State); - } - - using (var context = contextFactory.CreateContext()) - { - await context.Parents.Include(p => p.Children1).Include(p => p.Children2).OrderBy(e => e.Id).AsSplitQuery().SingleAsync(); - - Assert.Equal(ConnectionState.Closed, context.Database.GetDbConnection().State); - } - } - - [ConditionalFact] - public virtual async Task Using_AsSplitQuery_without_multiple_active_result_sets_works() - { - var contextFactory = await InitializeAsync( - seed: c => c.Seed(), - createTestStore: () => JetTestStore.CreateInitialized(StoreName)); - - using var context = contextFactory.CreateContext(); - - context.Parents.Include(p => p.Children1).Include(p => p.Children2).AsSplitQuery().ToList(); - } - - protected class IssueContext21355 : DbContext - { - public IssueContext21355(DbContextOptions options) - : base(options) - { - } - - public DbSet Parents { get; set; } - - public void Seed() - { - Add(new Parent21355 { Id = "Parent1", Children1 = new List { new(), new() } }); - SaveChanges(); - } - - public class Parent21355 - { - public string Id { get; set; } - public List Children1 { get; set; } - public List Children2 { get; set; } - } - - public class Child21355 - { - public int Id { get; set; } - public string ParentId { get; set; } - public Parent21355 Parent { get; set; } - } - - public class AnotherChild21355 - { - public int Id { get; set; } - public string ParentId { get; set; } - public Parent21355 Parent { get; set; } - } - } - - #endregion - - #region Issue21540 - - [ConditionalFact] - public virtual async Task Can_auto_include_navigation_from_model() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - var query = context.Parents.AsNoTracking().ToList(); - - var result = Assert.Single(query); - Assert.NotNull(result.OwnedReference); - Assert.NotNull(result.Reference); - Assert.NotNull(result.Collection); - Assert.Equal(2, result.Collection.Count); - Assert.NotNull(result.SkipOtherSide); - Assert.Single(result.SkipOtherSide); - - AssertSql( -""" -SELECT `p`.`Id`, `r`.`Id`, `c`.`Id`, `c`.`ParentId`, `p`.`OwnedReference_Id`, `r`.`ParentId`, `t`.`Id`, `t`.`ParentId`, `t`.`OtherSideId` -FROM ((`Parents` AS `p` -LEFT JOIN `Reference21540` AS `r` ON `p`.`Id` = `r`.`ParentId`) -LEFT JOIN `Collection21540` AS `c` ON `p`.`Id` = `c`.`ParentId`) -LEFT JOIN ( - SELECT `o`.`Id`, `j`.`ParentId`, `j`.`OtherSideId` - FROM `JoinEntity21540` AS `j` - INNER JOIN `OtherSide21540` AS `o` ON `j`.`OtherSideId` = `o`.`Id` -) AS `t` ON `p`.`Id` = `t`.`ParentId` -ORDER BY `p`.`Id`, `r`.`Id`, `c`.`Id`, `t`.`ParentId`, `t`.`OtherSideId` -"""); - } - - using (var context = contextFactory.CreateContext()) - { - ClearLog(); - var query = context.Parents.AsNoTracking().IgnoreAutoIncludes().ToList(); - - var result = Assert.Single(query); - Assert.NotNull(result.OwnedReference); - Assert.Null(result.Reference); - Assert.Null(result.Collection); - Assert.Null(result.SkipOtherSide); - - AssertSql( -""" -SELECT `p`.`Id`, `p`.`OwnedReference_Id` -FROM `Parents` AS `p` -"""); - } - } - - protected class MyContext21540 : DbContext - { - public DbSet Parents { get; set; } - - public MyContext21540(DbContextOptions options) - : base(options) - { - } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - modelBuilder.Entity().HasMany(e => e.SkipOtherSide).WithMany(e => e.SkipParent) - .UsingEntity( - e => e.HasOne(i => i.OtherSide).WithMany().HasForeignKey(e => e.OtherSideId), - e => e.HasOne(i => i.Parent).WithMany().HasForeignKey(e => e.ParentId)) - .HasKey(e => new { e.ParentId, e.OtherSideId }); - modelBuilder.Entity().OwnsOne(e => e.OwnedReference); - - modelBuilder.Entity().Navigation(e => e.Reference).AutoInclude(); - modelBuilder.Entity().Navigation(e => e.Collection).AutoInclude(); - modelBuilder.Entity().Navigation(e => e.SkipOtherSide).AutoInclude(); - } - - public void Seed() - { - var joinEntity = new JoinEntity21540 - { - OtherSide = new OtherSide21540(), - Parent = new Parent21540 - { - Reference = new Reference21540(), - OwnedReference = new Owned21540(), - Collection = new List - { - new(), new(), - } - } - }; - - AddRange(joinEntity); - - SaveChanges(); - } - - public class Parent21540 - { - public int Id { get; set; } - public Reference21540 Reference { get; set; } - public Owned21540 OwnedReference { get; set; } - public List Collection { get; set; } - public List SkipOtherSide { get; set; } - } - - public class JoinEntity21540 - { - public int ParentId { get; set; } - public Parent21540 Parent { get; set; } - public int OtherSideId { get; set; } - public OtherSide21540 OtherSide { get; set; } - } - - public class OtherSide21540 - { - public int Id { get; set; } - public List SkipParent { get; set; } - } - - public class Reference21540 - { - public int Id { get; set; } - public int ParentId { get; set; } - public Parent21540 Parent { get; set; } - } - - public class Owned21540 - { - public int Id { get; set; } - } - - public class Collection21540 - { - public int Id { get; set; } - public int ParentId { get; set; } - public Parent21540 Parent { get; set; } - } - } - - #endregion - - #region Issue18346 - - [ConditionalFact] - public virtual async Task Can_query_hierarchy_with_non_nullable_property_on_derived() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - var query = context.Businesses.ToList(); - Assert.Equal(3, query.Count); - - AssertSql( -""" -SELECT `b`.`Id`, `b`.`Name`, `b`.`Type`, `b`.`IsOnline` -FROM `Businesses` AS `b` -"""); - } - } - - protected class MyContext18346 : DbContext - { - public DbSet Businesses { get; set; } - - public MyContext18346(DbContextOptions options) - : base(options) - { - } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - => modelBuilder.Entity() - .HasDiscriminator(x => x.Type) - .HasValue(BusinessType18346.Shop) - .HasValue(BusinessType18346.Brand); - - public void Seed() - { - var shop1 = new Shop18346 { IsOnline = true, Name = "Amzn" }; - var shop2 = new Shop18346 { IsOnline = false, Name = "Mom and Pop's Shoppe" }; - var brand = new Brand18346 { Name = "Tsla" }; - Businesses.AddRange(shop1, shop2, brand); - SaveChanges(); - } - - public abstract class Business18346 - { - public int Id { get; set; } - public string Name { get; set; } - public BusinessType18346 Type { get; set; } - } - - public class Shop18346 : Business18346 - { - public bool IsOnline { get; set; } - } - - public class Brand18346 : Business18346 - { - } - - public enum BusinessType18346 - { - Shop, - Brand, - } - } - - #endregion - - #region Issue21666 - - [ConditionalFact] - public virtual async Task Thread_safety_in_relational_command_cache() - { - var contextFactory = await InitializeAsync( - onConfiguring: options => ((IDbContextOptionsBuilderInfrastructure)options).AddOrUpdateExtension( - options.Options.FindExtension() - .WithConnection(null) - .WithConnectionString(JetTestStore.CreateConnectionString(StoreName)))); - - var ids = new[] { 1, 2, 3 }; - - Parallel.For( - 0, 100, - i => - { - using var context = contextFactory.CreateContext(); - var query = context.Lists.Where(l => !l.IsDeleted && ids.Contains(l.Id)).ToList(); - }); - } - - protected class MyContext21666 : DbContext - { - public DbSet Lists { get; set; } - - public MyContext21666(DbContextOptions options) - : base(options) - { - } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - } - - public class List21666 - { - public int Id { get; set; } - public bool IsDeleted { get; set; } - } - } - - #endregion - - #region Issue21768 - - [ConditionalFact] - public virtual async Task Using_explicit_interface_implementation_as_navigation_works() - { - var contextFactory = await InitializeAsync(); - - using (var context = contextFactory.CreateContext()) - { - Expression> projection = - b => new MyContext21768.BookViewModel21768 - { - FirstPage = b.FrontCover.Illustrations.FirstOrDefault( - i => i.State >= MyContext21768.IllustrationState21768.Approved) - != null - ? new MyContext21768.PageViewModel21768 - { - Uri = b.FrontCover.Illustrations - .FirstOrDefault(i => i.State >= MyContext21768.IllustrationState21768.Approved).Uri - } - : null, - }; - - var result = context.Books.Where(b => b.Id == 1).Select(projection).SingleOrDefault(); - - AssertSql( -""" -SELECT TOP 2 IIF(EXISTS ( - SELECT 1 - FROM `CoverIllustrations` AS `c` - WHERE `b0`.`Id` = `c`.`CoverId` AND `c`.`State` >= 2), TRUE, FALSE), ( - SELECT TOP 1 `c0`.`Uri` - FROM `CoverIllustrations` AS `c0` - WHERE `b0`.`Id` = `c0`.`CoverId` AND `c0`.`State` >= 2) -FROM `Books` AS `b` -INNER JOIN `BookCovers` AS `b0` ON `b`.`FrontCoverId` = `b0`.`Id` -WHERE `b`.`Id` = 1 -"""); - } - } - - protected class MyContext21768 : DbContext - { - public DbSet Books { get; set; } - public DbSet BookCovers { get; set; } - public DbSet CoverIllustrations { get; set; } - - public MyContext21768(DbContextOptions options) - : base(options) - { - } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - foreach (var fk in modelBuilder.Model.GetEntityTypes().SelectMany(e => e.GetForeignKeys())) - { - fk.DeleteBehavior = DeleteBehavior.NoAction; - } - } - - public class BookViewModel21768 - { - public PageViewModel21768 FirstPage { get; set; } - } - - public class PageViewModel21768 - { - public string Uri { get; set; } - } - - public interface IBook21768 - { - public int Id { get; set; } - - public IBookCover21768 FrontCover { get; } - public int FrontCoverId { get; set; } - - public IBookCover21768 BackCover { get; } - public int BackCoverId { get; set; } - } - - public interface IBookCover21768 - { - public int Id { get; set; } - public IEnumerable Illustrations { get; } - } - - public interface ICoverIllustration21768 - { - public int Id { get; set; } - public IBookCover21768 Cover { get; } - public int CoverId { get; set; } - public string Uri { get; set; } - public IllustrationState21768 State { get; set; } - } - - public class Book21768 : IBook21768 - { - public int Id { get; set; } - - public BookCover21768 FrontCover { get; set; } - public int FrontCoverId { get; set; } - - public BookCover21768 BackCover { get; set; } - public int BackCoverId { get; set; } - - IBookCover21768 IBook21768.FrontCover - => FrontCover; - - IBookCover21768 IBook21768.BackCover - => BackCover; - } - - public class BookCover21768 : IBookCover21768 - { - public int Id { get; set; } - public ICollection Illustrations { get; set; } - - IEnumerable IBookCover21768.Illustrations - => Illustrations; - } - - public class CoverIllustration21768 : ICoverIllustration21768 - { - public int Id { get; set; } - public BookCover21768 Cover { get; set; } - public int CoverId { get; set; } - public string Uri { get; set; } - public IllustrationState21768 State { get; set; } - - IBookCover21768 ICoverIllustration21768.Cover - => Cover; - } - - public enum IllustrationState21768 - { - New, - PendingApproval, - Approved, - Printed - } - } - - #endregion - - #region Issue19206 - - [ConditionalFact] - public virtual async Task From_sql_expression_compares_correctly() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - var query = from t1 in context.Tests.FromSqlInterpolated( - $"Select * from Tests Where Type = {MyContext19206.TestType19206.Unit}") - from t2 in context.Tests.FromSqlInterpolated( - $"Select * from Tests Where Type = {MyContext19206.TestType19206.Integration}") - select new { t1, t2 }; - - var result = query.ToList(); - - var item = Assert.Single(result); - Assert.Equal(MyContext19206.TestType19206.Unit, item.t1.Type); - Assert.Equal(MyContext19206.TestType19206.Integration, item.t2.Type); - - AssertSql( -$""" -p0='0' -p1='1' - -SELECT `e`.`Id`, `e`.`Type`, `e0`.`Id`, `e0`.`Type` -FROM ( - Select * from Tests Where Type = {AssertSqlHelper.Parameter("@p0")} -) AS `e`, -( - Select * from Tests Where Type = {AssertSqlHelper.Parameter("@p1")} -) AS `e0` -"""); - } - } - - protected class MyContext19206 : DbContext - { - public DbSet Tests { get; set; } - - public MyContext19206(DbContextOptions options) - : base(options) - { - } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - } - - public void Seed() - { - Add(new Test19206 { Type = TestType19206.Unit }); - Add(new Test19206 { Type = TestType19206.Integration }); - SaveChanges(); - } - - public class Test19206 - { - public int Id { get; set; } - public TestType19206 Type { get; set; } - } - - public enum TestType19206 - { - Unit, - Integration, - } - } - - #endregion - - #region Issue18510 - - [ConditionalFact] - public virtual async Task Invoke_inside_query_filter_gets_correctly_evaluated_during_translation() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - context.TenantId = 1; - - var query1 = context.Entities.ToList(); - Assert.True(query1.All(x => x.TenantId == 1)); - - context.TenantId = 2; - var query2 = context.Entities.ToList(); - Assert.True(query2.All(x => x.TenantId == 2)); - - AssertSql( -$""" -@__ef_filter__p_0='1' - -SELECT `e`.`Id`, `e`.`Name`, `e`.`TenantId` -FROM `Entities` AS `e` -WHERE (`e`.`Name` <> 'Foo' OR `e`.`Name` IS NULL) AND `e`.`TenantId` = {AssertSqlHelper.Parameter("@__ef_filter__p_0")} -""", -// -$""" -@__ef_filter__p_0='2' - -SELECT `e`.`Id`, `e`.`Name`, `e`.`TenantId` -FROM `Entities` AS `e` -WHERE (`e`.`Name` <> 'Foo' OR `e`.`Name` IS NULL) AND `e`.`TenantId` = {AssertSqlHelper.Parameter("@__ef_filter__p_0")} -"""); - } - } - - protected class MyContext18510 : DbContext - { - public DbSet Entities { get; set; } - - public int TenantId { get; set; } - - public MyContext18510(DbContextOptions options) - : base(options) - { - } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - modelBuilder.Entity().HasQueryFilter(x => x.Name != "Foo"); - - var entityType = modelBuilder.Model.GetEntityTypes().Single(et => et.ClrType == typeof(MyEntity18510)); - var queryFilter = entityType.GetQueryFilter(); - Expression> tenantFunc = () => TenantId; - var tenant = Expression.Invoke(tenantFunc); - - var efPropertyMethod = typeof(EF).GetTypeInfo().GetDeclaredMethod(nameof(EF.Property)).MakeGenericMethod(typeof(int)); - var prm = queryFilter.Parameters[0]; - var efPropertyMethodCall = Expression.Call(efPropertyMethod, prm, Expression.Constant("TenantId")); - - var updatedQueryFilter = Expression.Lambda( - Expression.AndAlso( - queryFilter.Body, - Expression.Equal( - efPropertyMethodCall, - tenant)), - prm); - - entityType.SetQueryFilter(updatedQueryFilter); - } - - public void Seed() - { - var e1 = new MyEntity18510 { Name = "e1", TenantId = 1 }; - var e2 = new MyEntity18510 { Name = "e2", TenantId = 2 }; - var e3 = new MyEntity18510 { Name = "e3", TenantId = 2 }; - var e4 = new MyEntity18510 { Name = "Foo", TenantId = 2 }; - - Entities.AddRange(e1, e2, e3, e4); - SaveChanges(); - } - - public class MyEntity18510 - { - public int Id { get; set; } - public string Name { get; set; } - - public int TenantId { get; set; } - } - } - - #endregion - - #region Issue21803 - - [ConditionalTheory] - [InlineData(true, true)] - [InlineData(true, false)] - [InlineData(false, true)] - [InlineData(false, false)] - public virtual async Task Select_enumerable_navigation_backed_by_collection(bool async, bool split) - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - var query = context.Set().Select(appEntity => appEntity.OtherEntities); - - if (split) - { - query = query.AsSplitQuery(); - } - - if (async) - { - await query.ToListAsync(); - } - else - { - query.ToList(); - } - - if (split) - { - AssertSql( -""" -SELECT `e`.`Id` -FROM `Entities` AS `e` -ORDER BY `e`.`Id` -""", -// -""" -SELECT `o`.`Id`, `o`.`AppEntityId`, `e`.`Id` -FROM `Entities` AS `e` -INNER JOIN `OtherEntity21803` AS `o` ON `e`.`Id` = `o`.`AppEntityId` -ORDER BY `e`.`Id` -"""); - } - else - { - AssertSql( -""" -SELECT `e`.`Id`, `o`.`Id`, `o`.`AppEntityId` -FROM `Entities` AS `e` -LEFT JOIN `OtherEntity21803` AS `o` ON `e`.`Id` = `o`.`AppEntityId` -ORDER BY `e`.`Id` -"""); - } - } - } - - protected class MyContext21803 : DbContext - { - public DbSet Entities { get; set; } - - public MyContext21803(DbContextOptions options) - : base(options) - { - } - - public void Seed() - { - var appEntity = new AppEntity21803(); - AddRange( - new OtherEntity21803 { AppEntity = appEntity }, - new OtherEntity21803 { AppEntity = appEntity }, - new OtherEntity21803 { AppEntity = appEntity }, - new OtherEntity21803 { AppEntity = appEntity }); - - SaveChanges(); - } - - public class AppEntity21803 - { - private readonly List _otherEntities = new(); - - public int Id { get; private set; } - - public IEnumerable OtherEntities - => _otherEntities; - } - - public class OtherEntity21803 - { - public int Id { get; private set; } - public AppEntity21803 AppEntity { get; set; } - } - } - - #endregion - - #region Issue21807 - - [ConditionalFact] - public virtual async Task Nested_owned_required_dependents_are_materialized() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - var query = context.Set().ToList(); - - var result = Assert.Single(query); - Assert.NotNull(result.Contact); - Assert.NotNull(result.Contact.Address); - Assert.Equal(12345, result.Contact.Address.Zip); - - AssertSql( -""" -SELECT `e`.`Id`, `e`.`Contact_Name`, `e`.`Contact_Address_City`, `e`.`Contact_Address_State`, `e`.`Contact_Address_Street`, `e`.`Contact_Address_Zip` -FROM `Entity21807` AS `e` -"""); - } - } - - protected class MyContext21807 : DbContext - { - public MyContext21807(DbContextOptions options) - : base(options) - { - } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - => modelBuilder.Entity( - builder => - { - builder.HasKey(x => x.Id); - - builder.OwnsOne( - x => x.Contact, contact => - { - contact.OwnsOne(c => c.Address); - }); - - builder.Navigation(x => x.Contact).IsRequired(); - }); - - public void Seed() - { - Add(new Entity21807 { Id = "1", Contact = new Contact21807 { Address = new Address21807 { Zip = 12345 } } }); - - SaveChanges(); - } - - public class Entity21807 - { - public string Id { get; set; } - public Contact21807 Contact { get; set; } - } - - public class Contact21807 - { - public string Name { get; set; } - public Address21807 Address { get; set; } - } - - public class Address21807 - { - public string Street { get; set; } - public string City { get; set; } - public string State { get; set; } - public int Zip { get; set; } - } - } - - #endregion - - #region Issue22054 - - [ConditionalFact] - public virtual async Task Optional_dependent_is_null_when_sharing_required_column_with_principal() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - var query = context.Set().OrderByDescending(e => e.Id).ToList(); - - Assert.Equal(3, query.Count); - - Assert.Null(query[0].Contact); - Assert.Null(query[0].Data); - Assert.NotNull(query[1].Data); - Assert.NotNull(query[1].Contact); - Assert.Null(query[1].Contact.Address); - Assert.NotNull(query[2].Data); - Assert.NotNull(query[2].Contact); - Assert.NotNull(query[2].Contact.Address); - - AssertSql( - """ -SELECT [u].[Id], [u].[RowVersion], [u].[Contact_MobileNumber], [u].[SharedProperty], [u].[Contact_Address_City], [u].[Contact_Address_Zip], [u].[Data_Data], [u].[Data_Exists], [u].[RowVersion] -FROM [User22054] AS [u] -ORDER BY [u].[Id] DESC -"""); - } - } - - protected class MyContext22054 : DbContext - { - public MyContext22054(DbContextOptions options) - : base(options) - { - } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - => modelBuilder.Entity( - builder => - { - builder.HasKey(x => x.Id); - - builder.OwnsOne( - x => x.Contact, contact => - { - contact.Property(e => e.SharedProperty).IsRequired().HasColumnName("SharedProperty"); - - contact.OwnsOne( - c => c.Address, address => - { - address.Property("SharedProperty").IsRequired().HasColumnName("SharedProperty"); - }); - }); - - builder.OwnsOne(e => e.Data) - .Property("RowVersion") - .IsRowVersion() - .IsRequired() - .HasColumnType("TIMESTAMP") - .HasColumnName("RowVersion"); - - builder.Property(x => x.RowVersion) - .HasColumnType("TIMESTAMP") - .IsRowVersion() - .IsRequired() - .HasColumnName("RowVersion"); - }); - - public void Seed() - { - AddRange( - new User22054 - { - Data = new Data22054 { Data = "Data1" }, - Contact = new Contact22054 - { - MobileNumber = "123456", - SharedProperty = "Value1", - Address = new Address22054 - { - City = "Seattle", - Zip = 12345, - SharedProperty = "Value1" - } - } - }, - new User22054 - { - Data = new Data22054 { Data = "Data2" }, - Contact = new Contact22054 - { - MobileNumber = "654321", - SharedProperty = "Value2", - Address = null - } - }, - new User22054 { Contact = null, Data = null }); - - SaveChanges(); - } - - public class User22054 - { - public int Id { get; set; } - public Data22054 Data { get; set; } - public Contact22054 Contact { get; set; } - public byte[] RowVersion { get; set; } - } - - public class Data22054 - { - public string Data { get; set; } - public bool Exists { get; set; } - } - - public class Contact22054 - { - public string MobileNumber { get; set; } - public string SharedProperty { get; set; } - public Address22054 Address { get; set; } - } - - public class Address22054 - { - public string City { get; set; } - public string SharedProperty { get; set; } - public int Zip { get; set; } - } - } - - #endregion - - #region Issue14911 - - [ConditionalFact] - public virtual async Task Owned_entity_multiple_level_in_aggregate() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - var aggregate = context.Set().OrderByDescending(e => e.Id).FirstOrDefault(); - - Assert.Equal(10, aggregate.FirstValueObject.SecondValueObjects[0].FourthValueObject.FifthValueObjects[0].AnyValue); - Assert.Equal( - 20, - aggregate.FirstValueObject.SecondValueObjects[0].ThirdValueObjects[0].FourthValueObject.FifthValueObjects[0].AnyValue); - - AssertSql( -""" -SELECT `t`.`Id`, `t`.`FirstValueObject_Value`, `t2`.`Id`, `t2`.`AggregateId`, `t2`.`FourthValueObject_Value`, `t2`.`Id0`, `t2`.`AnyValue`, `t2`.`SecondValueObjectId`, `t2`.`Id1`, `t2`.`SecondValueObjectId0`, `t2`.`FourthValueObject_Value0`, `t2`.`Id00`, `t2`.`AnyValue0`, `t2`.`ThirdValueObjectId` -FROM ( - SELECT TOP 1 `a`.`Id`, `a`.`FirstValueObject_Value` - FROM `Aggregates` AS `a` - ORDER BY `a`.`Id` DESC -) AS `t` -LEFT JOIN ( - SELECT `s`.`Id`, `s`.`AggregateId`, `s`.`FourthValueObject_Value`, `f`.`Id` AS `Id0`, `f`.`AnyValue`, `f`.`SecondValueObjectId`, `t1`.`Id` AS `Id1`, `t1`.`SecondValueObjectId` AS `SecondValueObjectId0`, `t1`.`FourthValueObject_Value` AS `FourthValueObject_Value0`, `t1`.`Id0` AS `Id00`, `t1`.`AnyValue` AS `AnyValue0`, `t1`.`ThirdValueObjectId` - FROM (`SecondValueObjects` AS `s` - LEFT JOIN `FourthFifthValueObjects` AS `f` ON IIF(`s`.`FourthValueObject_Value` IS NOT NULL, `s`.`Id`, NULL) = `f`.`SecondValueObjectId`) - LEFT JOIN ( - SELECT `t0`.`Id`, `t0`.`SecondValueObjectId`, `t0`.`FourthValueObject_Value`, `t3`.`Id` AS `Id0`, `t3`.`AnyValue`, `t3`.`ThirdValueObjectId` - FROM `ThirdValueObjects` AS `t0` - LEFT JOIN `ThirdFifthValueObjects` AS `t3` ON IIF(`t0`.`FourthValueObject_Value` IS NOT NULL, `t0`.`Id`, NULL) = `t3`.`ThirdValueObjectId` - ) AS `t1` ON `s`.`Id` = `t1`.`SecondValueObjectId` -) AS `t2` ON IIF(`t`.`FirstValueObject_Value` IS NOT NULL, `t`.`Id`, NULL) = `t2`.`AggregateId` -ORDER BY `t`.`Id` DESC, `t2`.`Id`, `t2`.`Id0`, `t2`.`Id1` -"""); - } - } - - protected class MyContext14911 : DbContext - { - public MyContext14911(DbContextOptions options) - : base(options) - { - } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - => modelBuilder.Entity( - builder => - { - builder.ToTable("Aggregates"); - builder.HasKey(e => e.Id); - - builder.OwnsOne( - e => e.FirstValueObject, dr => - { - dr.OwnsMany( - d => d.SecondValueObjects, c => - { - c.ToTable("SecondValueObjects"); - c.Property("Id").IsRequired(); - c.HasKey("Id"); - c.OwnsOne( - b => b.FourthValueObject, b => - { - b.OwnsMany( - t => t.FifthValueObjects, sp => - { - sp.ToTable("FourthFifthValueObjects"); - sp.Property("Id").IsRequired(); - sp.HasKey("Id"); - sp.Property(e => e.AnyValue).IsRequired(); - sp.WithOwner().HasForeignKey("SecondValueObjectId"); - }); - }); - c.OwnsMany( - b => b.ThirdValueObjects, b => - { - b.ToTable("ThirdValueObjects"); - b.Property("Id").IsRequired(); - b.HasKey("Id"); - - b.OwnsOne( - d => d.FourthValueObject, dpd => - { - dpd.OwnsMany( - d => d.FifthValueObjects, sp => - { - sp.ToTable("ThirdFifthValueObjects"); - sp.Property("Id").IsRequired(); - sp.HasKey("Id"); - sp.Property(e => e.AnyValue).IsRequired(); - sp.WithOwner().HasForeignKey("ThirdValueObjectId"); - }); - }); - b.WithOwner().HasForeignKey("SecondValueObjectId"); - }); - c.WithOwner().HasForeignKey("AggregateId"); - }); - }); - }); - - public void Seed() - { - var aggregate = new Aggregate14911 - { - FirstValueObject = new FirstValueObject14911 - { - SecondValueObjects = new List - { - new() - { - FourthValueObject = - new FourthValueObject14911 - { - FifthValueObjects = new List { new() { AnyValue = 10 } } - }, - ThirdValueObjects = new List - { - new() - { - FourthValueObject = new FourthValueObject14911 - { - FifthValueObjects = new List { new() { AnyValue = 20 } } - } - } - } - } - } - } - }; - - Set().Add(aggregate); - - SaveChanges(); - } - - public class Aggregate14911 - { - public int Id { get; set; } - public FirstValueObject14911 FirstValueObject { get; set; } - } - - public class FirstValueObject14911 - { - public int Value { get; set; } - public List SecondValueObjects { get; set; } - } - - public class SecondValueObject14911 - { - public FourthValueObject14911 FourthValueObject { get; set; } - public List ThirdValueObjects { get; set; } - } - - public class ThirdValueObject14911 - { - public FourthValueObject14911 FourthValueObject { get; set; } - } - - public class FourthValueObject14911 - { - public int Value { get; set; } - public List FifthValueObjects { get; set; } - } - - public class FifthValueObject14911 - { - public int AnyValue { get; set; } - } - } - - #endregion - - #region Issue15215 - - [ConditionalFact] - public virtual async Task Repeated_parameters_in_generated_query_sql() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - var k = 1; - var a = context.Autos.Where(e => e.Id == k).First(); - var b = context.Autos.Where(e => e.Id == k + 1).First(); - - var equalQuery = (from d in context.EqualAutos - where (d.Auto == a && d.AnotherAuto == b) - || (d.Auto == b && d.AnotherAuto == a) - select d).ToList(); - - Assert.Single(equalQuery); - - AssertSql( -$""" -@__k_0='1' - -SELECT TOP 1 `a`.`Id`, `a`.`Name` -FROM `Autos` AS `a` -WHERE `a`.`Id` = {AssertSqlHelper.Parameter("@__k_0")} -""", -// -$""" -@__p_0='2' - -SELECT TOP 1 `a`.`Id`, `a`.`Name` -FROM `Autos` AS `a` -WHERE `a`.`Id` = {AssertSqlHelper.Parameter("@__p_0")} -""", -// -$""" -@__entity_equality_a_0_Id='1' (Nullable = true) -@__entity_equality_b_1_Id='2' (Nullable = true) -@__entity_equality_b_1_Id='2' (Nullable = true) -@__entity_equality_a_0_Id='1' (Nullable = true) - -SELECT `e`.`Id`, `e`.`AnotherAutoId`, `e`.`AutoId` -FROM (`EqualAutos` AS `e` -LEFT JOIN `Autos` AS `a` ON `e`.`AutoId` = `a`.`Id`) -LEFT JOIN `Autos` AS `a0` ON `e`.`AnotherAutoId` = `a0`.`Id` -WHERE (`a`.`Id` = {AssertSqlHelper.Parameter("@__entity_equality_a_0_Id")} AND `a0`.`Id` = {AssertSqlHelper.Parameter("@__entity_equality_b_1_Id")}) OR (`a`.`Id` = {AssertSqlHelper.Parameter("@__entity_equality_b_1_Id")} AND `a0`.`Id` = {AssertSqlHelper.Parameter("@__entity_equality_a_0_Id")}) -"""); - } - } - - protected class MyContext15215 : DbContext - { - public MyContext15215(DbContextOptions options) - : base(options) - { - } - - public DbSet Autos { get; set; } - public DbSet EqualAutos { get; set; } - - public void Seed() - { - for (var i = 0; i < 10; i++) - { - Add(new Auto15215 { Name = "Auto " + i }); - } - - SaveChanges(); - - AddRange( - new EqualAuto15215 { Auto = Autos.Find(1), AnotherAuto = Autos.Find(2) }, - new EqualAuto15215 { Auto = Autos.Find(5), AnotherAuto = Autos.Find(4) }); - - SaveChanges(); - } - - public class Auto15215 - { - public int Id { get; set; } - public string Name { get; set; } - } - - public class EqualAuto15215 - { - public int Id { get; set; } - public Auto15215 Auto { get; set; } - public Auto15215 AnotherAuto { get; set; } - } - } - - #endregion - - #region Issue22340 - - [ConditionalFact] - public virtual async Task Owned_entity_mapped_to_separate_table() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - var masterTrunk = - context.MasterTrunk.OrderBy(e => EF.Property(e, "Id")) - .FirstOrDefault(); //exception Sequence contains no elements. - - Assert.NotNull(masterTrunk); - - AssertSql( -""" -SELECT `t`.`Id`, `t`.`MasterTrunk22340Id`, `t`.`MasterTrunk22340Id0`, `f0`.`CurrencyBag22340MasterTrunk22340Id`, `f0`.`Id`, `f0`.`Amount`, `f0`.`Code`, `s0`.`CurrencyBag22340MasterTrunk22340Id`, `s0`.`Id`, `s0`.`Amount`, `s0`.`Code` -FROM (( - SELECT TOP 1 `m`.`Id`, `f`.`MasterTrunk22340Id`, `s`.`MasterTrunk22340Id` AS `MasterTrunk22340Id0` - FROM (`MasterTrunk` AS `m` - LEFT JOIN `FungibleBag` AS `f` ON `m`.`Id` = `f`.`MasterTrunk22340Id`) - LEFT JOIN `StaticBag` AS `s` ON `m`.`Id` = `s`.`MasterTrunk22340Id` - ORDER BY `m`.`Id` -) AS `t` -LEFT JOIN `FungibleBag_Currencies` AS `f0` ON `t`.`MasterTrunk22340Id` = `f0`.`CurrencyBag22340MasterTrunk22340Id`) -LEFT JOIN `StaticBag_Currencies` AS `s0` ON `t`.`MasterTrunk22340Id0` = `s0`.`CurrencyBag22340MasterTrunk22340Id` -ORDER BY `t`.`Id`, `t`.`MasterTrunk22340Id`, `t`.`MasterTrunk22340Id0`, `f0`.`CurrencyBag22340MasterTrunk22340Id`, `f0`.`Id`, `s0`.`CurrencyBag22340MasterTrunk22340Id` -"""); - } - } - - protected class MyContext22340 : DbContext - { - public MyContext22340(DbContextOptions options) - : base(options) - { - } - - public DbSet MasterTrunk { get; set; } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - var builder = modelBuilder.Entity(); - builder.Property("Id").ValueGeneratedOnAdd(); - builder.HasKey("Id"); - - builder.OwnsOne( - p => p.FungibleBag, p => - { - p.OwnsMany( - p => p.Currencies, p => - { - p.Property(p => p.Amount).IsConcurrencyToken(); - }); - - p.ToTable("FungibleBag"); - }); - - builder.OwnsOne( - p => p.StaticBag, p => - { - p.OwnsMany( - p => p.Currencies, p => - { - p.Property(p => p.Amount).IsConcurrencyToken(); - }); - p.ToTable("StaticBag"); - }); - } - - public void Seed() - { - var masterTrunk = new MasterTrunk22340 - { - FungibleBag = new CurrencyBag22340 { Currencies = new[] { new Currency22340 { Amount = 10, Code = 999 } } }, - StaticBag = new CurrencyBag22340 { Currencies = new[] { new Currency22340 { Amount = 555, Code = 111 } } } - }; - Add(masterTrunk); - - SaveChanges(); - } - - public class MasterTrunk22340 - { - public CurrencyBag22340 FungibleBag { get; set; } - public CurrencyBag22340 StaticBag { get; set; } - } - - public class CurrencyBag22340 - { - public IEnumerable Currencies { get; set; } - } - - public class Currency22340 - { - [Column(TypeName = "decimal(18,2)")] - public decimal Amount { get; set; } - - [Column(TypeName = "decimal(18,2)")] - public decimal Code { get; set; } - } - } - - #endregion - - #region Issue22568 - - [ConditionalFact] - public virtual async Task Cycles_in_auto_include() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - var principals = context.Set().ToList(); - Assert.Single(principals); - Assert.NotNull(principals[0].Dependent); - Assert.NotNull(principals[0].Dependent.Principal); - - var dependents = context.Set().ToList(); - Assert.Single(dependents); - Assert.NotNull(dependents[0].Principal); - Assert.NotNull(dependents[0].Principal.Dependent); - - AssertSql( -""" -SELECT `p`.`Id`, `d`.`Id`, `d`.`PrincipalId` -FROM `PrincipalOneToOne` AS `p` -LEFT JOIN `DependentOneToOne` AS `d` ON `p`.`Id` = `d`.`PrincipalId` -""", -// -""" -SELECT `d`.`Id`, `d`.`PrincipalId`, `p`.`Id` -FROM `DependentOneToOne` AS `d` -INNER JOIN `PrincipalOneToOne` AS `p` ON `d`.`PrincipalId` = `p`.`Id` -"""); - } - - using (var context = contextFactory.CreateContext()) - { - ClearLog(); - var principals = context.Set().ToList(); - Assert.Single(principals); - Assert.NotNull(principals[0].Dependents); - Assert.True(principals[0].Dependents.All(e => e.Principal != null)); - - var dependents = context.Set().ToList(); - Assert.Equal(2, dependents.Count); - Assert.True(dependents.All(e => e.Principal != null)); - Assert.True(dependents.All(e => e.Principal.Dependents != null)); - Assert.True(dependents.All(e => e.Principal.Dependents.All(i => i.Principal != null))); - - AssertSql( -""" -SELECT `p`.`Id`, `d`.`Id`, `d`.`PrincipalId` -FROM `PrincipalOneToMany` AS `p` -LEFT JOIN `DependentOneToMany` AS `d` ON `p`.`Id` = `d`.`PrincipalId` -ORDER BY `p`.`Id` -""", -// -""" -SELECT `d`.`Id`, `d`.`PrincipalId`, `p`.`Id`, `d0`.`Id`, `d0`.`PrincipalId` -FROM (`DependentOneToMany` AS `d` -INNER JOIN `PrincipalOneToMany` AS `p` ON `d`.`PrincipalId` = `p`.`Id`) -LEFT JOIN `DependentOneToMany` AS `d0` ON `p`.`Id` = `d0`.`PrincipalId` -ORDER BY `d`.`Id`, `p`.`Id` -"""); - } - - using (var context = contextFactory.CreateContext()) - { - ClearLog(); - Assert.Equal( - CoreStrings.AutoIncludeNavigationCycle("'PrincipalManyToMany.Dependents', 'DependentManyToMany.Principals'"), - Assert.Throws(() => context.Set().ToList()).Message); - - Assert.Equal( - CoreStrings.AutoIncludeNavigationCycle("'DependentManyToMany.Principals', 'PrincipalManyToMany.Dependents'"), - Assert.Throws(() => context.Set().ToList()).Message); - - context.Set().IgnoreAutoIncludes().ToList(); - context.Set().IgnoreAutoIncludes().ToList(); - - AssertSql( -""" -SELECT `p`.`Id` -FROM `PrincipalManyToMany` AS `p` -""", -// -""" -SELECT `d`.`Id` -FROM `DependentManyToMany` AS `d` -"""); - } - - using (var context = contextFactory.CreateContext()) - { - ClearLog(); - Assert.Equal( - CoreStrings.AutoIncludeNavigationCycle("'CycleA.Bs', 'CycleB.C', 'CycleC.As'"), - Assert.Throws(() => context.Set().ToList()).Message); - - Assert.Equal( - CoreStrings.AutoIncludeNavigationCycle("'CycleB.C', 'CycleC.As', 'CycleA.Bs'"), - Assert.Throws(() => context.Set().ToList()).Message); - - Assert.Equal( - CoreStrings.AutoIncludeNavigationCycle("'CycleC.As', 'CycleA.Bs', 'CycleB.C'"), - Assert.Throws(() => context.Set().ToList()).Message); - - context.Set().IgnoreAutoIncludes().ToList(); - context.Set().IgnoreAutoIncludes().ToList(); - context.Set().IgnoreAutoIncludes().ToList(); - - AssertSql( -""" -SELECT `c`.`Id`, `c`.`CycleCId` -FROM `CycleA` AS `c` -""", -// -""" -SELECT `c`.`Id`, `c`.`CId`, `c`.`CycleAId` -FROM `CycleB` AS `c` -""", -// -""" -SELECT `c`.`Id`, `c`.`BId` -FROM `CycleC` AS `c` -"""); - } - } - - protected class MyContext22568 : DbContext - { - public MyContext22568(DbContextOptions options) - : base(options) - { - } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - modelBuilder.Entity().Navigation(e => e.Dependent).AutoInclude(); - modelBuilder.Entity().Navigation(e => e.Principal).AutoInclude(); - modelBuilder.Entity().Navigation(e => e.Dependents).AutoInclude(); - modelBuilder.Entity().Navigation(e => e.Principal).AutoInclude(); - modelBuilder.Entity().Navigation(e => e.Dependents).AutoInclude(); - modelBuilder.Entity().Navigation(e => e.Principals).AutoInclude(); - - modelBuilder.Entity().Navigation(e => e.Bs).AutoInclude(); - modelBuilder.Entity().Navigation(e => e.C).AutoInclude(); - modelBuilder.Entity().Navigation(e => e.As).AutoInclude(); - } - - public void Seed() - { - Add(new PrincipalOneToOne { Dependent = new DependentOneToOne() }); - Add( - new PrincipalOneToMany - { - Dependents = new List - { - new(), new(), - } - }); - - SaveChanges(); - } - - public class PrincipalOneToOne - { - public int Id { get; set; } - public DependentOneToOne Dependent { get; set; } - } - - public class DependentOneToOne - { - public int Id { get; set; } - - [ForeignKey("Principal")] - public int PrincipalId { get; set; } - - public PrincipalOneToOne Principal { get; set; } - } - - public class PrincipalOneToMany - { - public int Id { get; set; } - public List Dependents { get; set; } - } - - public class DependentOneToMany - { - public int Id { get; set; } - - [ForeignKey("Principal")] - public int PrincipalId { get; set; } - - public PrincipalOneToMany Principal { get; set; } - } - - public class PrincipalManyToMany - { - public int Id { get; set; } - public List Dependents { get; set; } - } - - public class DependentManyToMany - { - public int Id { get; set; } - public List Principals { get; set; } - } - - public class CycleA - { - public int Id { get; set; } - public List Bs { get; set; } - } - - public class CycleB - { - public int Id { get; set; } - public CycleC C { get; set; } - } - - public class CycleC - { - public int Id { get; set; } - - [ForeignKey("B")] - public int BId { get; set; } - - private CycleB B { get; set; } - public List As { get; set; } - } - } - - #endregion - - #region Issue12274 - - [ConditionalFact] - public virtual async Task Parameterless_ctor_on_inner_DTO_gets_called_for_every_row() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - var results = context.Entities.Select( - x => - new MyContext12274.OuterDTO12274 - { - Id = x.Id, - Name = x.Name, - Inner = new MyContext12274.InnerDTO12274() - }).ToList(); - Assert.Equal(4, results.Count); - Assert.False(ReferenceEquals(results[0].Inner, results[1].Inner)); - Assert.False(ReferenceEquals(results[1].Inner, results[2].Inner)); - Assert.False(ReferenceEquals(results[2].Inner, results[3].Inner)); - } - } - - protected class MyContext12274 : DbContext - { - public DbSet Entities { get; set; } - - public MyContext12274(DbContextOptions options) - : base(options) - { - } - - public void Seed() - { - var e1 = new MyEntity12274 { Name = "1" }; - var e2 = new MyEntity12274 { Name = "2" }; - var e3 = new MyEntity12274 { Name = "3" }; - var e4 = new MyEntity12274 { Name = "4" }; - - Entities.AddRange(e1, e2, e3, e4); - SaveChanges(); - } - - public class MyEntity12274 - { - public int Id { get; set; } - public string Name { get; set; } - } - - public class OuterDTO12274 - { - public int Id { get; set; } - public string Name { get; set; } - public InnerDTO12274 Inner { get; set; } - } - - public class InnerDTO12274 - { - } - } - - #endregion - - #region Issue11835 - - [ConditionalFact] - public virtual async Task Projecting_correlated_collection_along_with_non_mapped_property() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - var result = context.Blogs.Select( - e => new - { - e.Id, - e.Title, - FirstPostName = e.Posts.Where(i => i.Name.Contains("2")).ToList() - }).ToList(); - - AssertSql( -""" -SELECT `b`.`Id`, `t`.`Id`, `t`.`BlogId`, `t`.`Name` -FROM `Blogs` AS `b` -LEFT JOIN ( - SELECT `p`.`Id`, `p`.`BlogId`, `p`.`Name` - FROM `Posts` AS `p` - WHERE `p`.`Name` LIKE '%2%' -) AS `t` ON `b`.`Id` = `t`.`BlogId` -ORDER BY `b`.`Id` -"""); - } - - using (var context = contextFactory.CreateContext()) - { - ClearLog(); - var result = context.Blogs.Select( - e => new - { - e.Id, - e.Title, - FirstPostName = e.Posts.OrderBy(i => i.Id).FirstOrDefault().Name - }).ToList(); - - AssertSql( -""" -SELECT `b`.`Id`, ( - SELECT TOP 1 `p`.`Name` - FROM `Posts` AS `p` - WHERE `b`.`Id` = `p`.`BlogId` - ORDER BY `p`.`Id`) -FROM `Blogs` AS `b` -"""); - } - } - - protected class MyContext11835 : DbContext - { - public DbSet Blogs { get; set; } - public DbSet Posts { get; set; } - - public MyContext11835(DbContextOptions options) - : base(options) - { - } - - public void Seed() - { - var b1 = new Blog11835 { Title = "B1" }; - var b2 = new Blog11835 { Title = "B2" }; - var p11 = new Post11835 { Name = "P11", Blog = b1 }; - var p12 = new Post11835 { Name = "P12", Blog = b1 }; - var p13 = new Post11835 { Name = "P13", Blog = b1 }; - var p21 = new Post11835 { Name = "P21", Blog = b2 }; - var p22 = new Post11835 { Name = "P22", Blog = b2 }; - - Blogs.AddRange(b1, b2); - Posts.AddRange(p11, p12, p13, p21, p22); - SaveChanges(); - } - - public class Blog11835 - { - public int Id { get; set; } - - [NotMapped] - public string Title { get; set; } - - public List Posts { get; set; } - } - - public class Post11835 - { - public int Id { get; set; } - public int BlogId { get; set; } - public Blog11835 Blog { get; set; } - public string Name { get; set; } - } - } - - #endregion - - #region Issue23211 - - [ConditionalFact] - public virtual async Task Collection_include_on_owner_with_owned_type_mapped_to_different_table() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - var owner = context.Set().Include(e => e.Dependents).AsSplitQuery().OrderBy(e => e.Id).Single(); - Assert.NotNull(owner.Dependents); - Assert.Equal(2, owner.Dependents.Count); - Assert.NotNull(owner.Owned1); - Assert.Equal("A", owner.Owned1.Value); - Assert.NotNull(owner.Owned2); - Assert.Equal("B", owner.Owned2.Value); - - AssertSql( -""" -SELECT TOP 2 `o`.`Id`, `o0`.`Owner23211Id`, `o0`.`Value`, `o1`.`Owner23211Id`, `o1`.`Value` -FROM (`Owner23211` AS `o` -LEFT JOIN `Owned123211` AS `o0` ON `o`.`Id` = `o0`.`Owner23211Id`) -LEFT JOIN `Owned223211` AS `o1` ON `o`.`Id` = `o1`.`Owner23211Id` -ORDER BY `o`.`Id`, `o0`.`Owner23211Id`, `o1`.`Owner23211Id` -""", -// -""" -SELECT `d`.`Id`, `d`.`Owner23211Id`, `t`.`Id`, `t`.`Owner23211Id`, `t`.`Owner23211Id0` -FROM ( - SELECT TOP 1 `o`.`Id`, `o0`.`Owner23211Id`, `o1`.`Owner23211Id` AS `Owner23211Id0` - FROM (`Owner23211` AS `o` - LEFT JOIN `Owned123211` AS `o0` ON `o`.`Id` = `o0`.`Owner23211Id`) - LEFT JOIN `Owned223211` AS `o1` ON `o`.`Id` = `o1`.`Owner23211Id` - ORDER BY `o`.`Id` -) AS `t` -INNER JOIN `Dependent23211` AS `d` ON `t`.`Id` = `d`.`Owner23211Id` -ORDER BY `t`.`Id`, `t`.`Owner23211Id`, `t`.`Owner23211Id0` -"""); - } - - using (var context = contextFactory.CreateContext()) - { - ClearLog(); - var owner = context.Set().Include(e => e.Dependents).AsSplitQuery().OrderBy(e => e.Id) - .Single(); - Assert.NotNull(owner.Dependents); - Assert.Equal(2, owner.Dependents.Count); - Assert.NotNull(owner.Owned); - Assert.Equal("A", owner.Owned.Value); - - AssertSql( -""" -SELECT TOP 2 `s`.`Id`, `o`.`SecondOwner23211Id`, `o`.`Value` -FROM `SecondOwner23211` AS `s` -LEFT JOIN `Owned23211` AS `o` ON `s`.`Id` = `o`.`SecondOwner23211Id` -ORDER BY `s`.`Id`, `o`.`SecondOwner23211Id` -""", -// -""" -SELECT `s0`.`Id`, `s0`.`SecondOwner23211Id`, `t`.`Id`, `t`.`SecondOwner23211Id` -FROM ( - SELECT TOP 1 `s`.`Id`, `o`.`SecondOwner23211Id` - FROM `SecondOwner23211` AS `s` - LEFT JOIN `Owned23211` AS `o` ON `s`.`Id` = `o`.`SecondOwner23211Id` - ORDER BY `s`.`Id` -) AS `t` -INNER JOIN `SecondDependent23211` AS `s0` ON `t`.`Id` = `s0`.`SecondOwner23211Id` -ORDER BY `t`.`Id`, `t`.`SecondOwner23211Id` -"""); - } - } - - protected class MyContext23211 : DbContext - { - public MyContext23211(DbContextOptions options) - : base(options) - { - } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - modelBuilder.Entity().OwnsOne(e => e.Owned1, b => b.ToTable("Owned123211")); - modelBuilder.Entity().OwnsOne(e => e.Owned2, b => b.ToTable("Owned223211")); - modelBuilder.Entity().OwnsOne(e => e.Owned, b => b.ToTable("Owned23211")); - } - - public void Seed() - { - Add( - new Owner23211 - { - Dependents = new List { new(), new() }, - Owned1 = new OwnedType23211 { Value = "A" }, - Owned2 = new OwnedType23211 { Value = "B" } - }); - - Add( - new SecondOwner23211 - { - Dependents = new List { new(), new() }, - Owned = new OwnedType23211 { Value = "A" } - }); - - SaveChanges(); - } - - public class Owner23211 - { - public int Id { get; set; } - public List Dependents { get; set; } - public OwnedType23211 Owned1 { get; set; } - public OwnedType23211 Owned2 { get; set; } - } - - public class OwnedType23211 - { - public string Value { get; set; } - } - - public class Dependent23211 - { - public int Id { get; set; } - } - - public class SecondOwner23211 - { - public int Id { get; set; } - public List Dependents { get; set; } - public OwnedType23211 Owned { get; set; } - } - - public class SecondDependent23211 - { - public int Id { get; set; } - } - } - - #endregion - - #region Issue10295 - - [ConditionalFact] - public virtual async Task Query_filter_with_contains_evaluates_correctly() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - var result = context.Entities.ToList(); - Assert.Single(result); - - AssertSql( -""" -SELECT `e`.`Id`, `e`.`Name` -FROM `Entities` AS `e` -WHERE `e`.`Id` NOT IN (1, 7) -"""); - } - } - - protected class MyContext10295 : DbContext - { - private readonly List _ids = new() { 1, 7 }; - - public DbSet Entities { get; set; } - - public MyContext10295(DbContextOptions options) - : base(options) - { - } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - => modelBuilder.Entity().HasQueryFilter(x => !_ids.Contains(x.Id)); - - public void Seed() - { - var e1 = new MyEntity10295 { Name = "Name1" }; - var e2 = new MyEntity10295 { Name = "Name2" }; - Entities.AddRange(e1, e2); - SaveChanges(); - } - - public class MyEntity10295 - { - public int Id { get; set; } - public string Name { get; set; } - } - } - - #endregion - - #region Issue19253 - - [ConditionalFact] - public virtual async Task Operators_combine_nullability_of_entity_shapers() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - Expression> leftKeySelector = x => x.forkey; - Expression> rightKeySelector = y => y.forkey; - - var query = context.A.GroupJoin( - context.B, - leftKeySelector, - rightKeySelector, - (left, rightg) => new { left, rightg }) - .SelectMany( - r => r.rightg.DefaultIfEmpty(), - (x, y) => new MyContext19253.JoinResult19253 { Left = x.left, Right = y }) - .Concat( - context.B.GroupJoin( - context.A, - rightKeySelector, - leftKeySelector, - (right, leftg) => new { leftg, right }) - .SelectMany( - l => l.leftg.DefaultIfEmpty(), - (x, y) => new MyContext19253.JoinResult19253 - { - Left = y, - Right = x.right - }) - .Where(z => z.Left.Equals(null))) - .ToList(); - - Assert.Equal(3, query.Count); - - AssertSql( -""" -SELECT `a`.`Id`, `a`.`a`, `a`.`a1`, `a`.`forkey`, `b`.`Id` AS `Id0`, `b`.`b`, `b`.`b1`, `b`.`forkey` AS `forkey0` -FROM `A` AS `a` -LEFT JOIN `B` AS `b` ON `a`.`forkey` = `b`.`forkey` -UNION ALL -SELECT `a0`.`Id`, `a0`.`a`, `a0`.`a1`, `a0`.`forkey`, `b0`.`Id` AS `Id0`, `b0`.`b`, `b0`.`b1`, `b0`.`forkey` AS `forkey0` -FROM `B` AS `b0` -LEFT JOIN `A` AS `a0` ON `b0`.`forkey` = `a0`.`forkey` -WHERE `a0`.`Id` IS NULL -"""); - } - - using (var context = contextFactory.CreateContext()) - { - ClearLog(); - Expression> leftKeySelector = x => x.forkey; - Expression> rightKeySelector = y => y.forkey; - - var query = context.A.GroupJoin( - context.B, - leftKeySelector, - rightKeySelector, - (left, rightg) => new { left, rightg }) - .SelectMany( - r => r.rightg.DefaultIfEmpty(), - (x, y) => new MyContext19253.JoinResult19253 { Left = x.left, Right = y }) - .Union( - context.B.GroupJoin( - context.A, - rightKeySelector, - leftKeySelector, - (right, leftg) => new { leftg, right }) - .SelectMany( - l => l.leftg.DefaultIfEmpty(), - (x, y) => new MyContext19253.JoinResult19253 - { - Left = y, - Right = x.right - }) - .Where(z => z.Left.Equals(null))) - .ToList(); - - Assert.Equal(3, query.Count); - - AssertSql( -""" -SELECT `a`.`Id`, `a`.`a`, `a`.`a1`, `a`.`forkey`, `b`.`Id` AS `Id0`, `b`.`b`, `b`.`b1`, `b`.`forkey` AS `forkey0` -FROM `A` AS `a` -LEFT JOIN `B` AS `b` ON `a`.`forkey` = `b`.`forkey` -UNION -SELECT `a0`.`Id`, `a0`.`a`, `a0`.`a1`, `a0`.`forkey`, `b0`.`Id` AS `Id0`, `b0`.`b`, `b0`.`b1`, `b0`.`forkey` AS `forkey0` -FROM `B` AS `b0` -LEFT JOIN `A` AS `a0` ON `b0`.`forkey` = `a0`.`forkey` -WHERE `a0`.`Id` IS NULL -"""); - } - - using (var context = contextFactory.CreateContext()) - { - ClearLog(); - Expression> leftKeySelector = x => x.forkey; - Expression> rightKeySelector = y => y.forkey; - - var query = context.A.GroupJoin( - context.B, - leftKeySelector, - rightKeySelector, - (left, rightg) => new { left, rightg }) - .SelectMany( - r => r.rightg.DefaultIfEmpty(), - (x, y) => new MyContext19253.JoinResult19253 { Left = x.left, Right = y }) - .Except( - context.B.GroupJoin( - context.A, - rightKeySelector, - leftKeySelector, - (right, leftg) => new { leftg, right }) - .SelectMany( - l => l.leftg.DefaultIfEmpty(), - (x, y) => new MyContext19253.JoinResult19253 - { - Left = y, - Right = x.right - })) - .ToList(); - - Assert.Single(query); - - AssertSql( - """ -SELECT [a].[Id], [a].[a], [a].[a1], [a].[forkey], [b].[Id] AS [Id0], [b].[b], [b].[b1], [b].[forkey] AS [forkey0] -FROM [A] AS [a] -LEFT JOIN [B] AS [b] ON [a].[forkey] = [b].[forkey] -EXCEPT -SELECT [a0].[Id], [a0].[a], [a0].[a1], [a0].[forkey], [b0].[Id] AS [Id0], [b0].[b], [b0].[b1], [b0].[forkey] AS [forkey0] -FROM [B] AS [b0] -LEFT JOIN [A] AS [a0] ON [b0].[forkey] = [a0].[forkey] -"""); - } - - using (var context = contextFactory.CreateContext()) - { - ClearLog(); - Expression> leftKeySelector = x => x.forkey; - Expression> rightKeySelector = y => y.forkey; - - var query = context.A.GroupJoin( - context.B, - leftKeySelector, - rightKeySelector, - (left, rightg) => new { left, rightg }) - .SelectMany( - r => r.rightg.DefaultIfEmpty(), - (x, y) => new MyContext19253.JoinResult19253 { Left = x.left, Right = y }) - .Intersect( - context.B.GroupJoin( - context.A, - rightKeySelector, - leftKeySelector, - (right, leftg) => new { leftg, right }) - .SelectMany( - l => l.leftg.DefaultIfEmpty(), - (x, y) => new MyContext19253.JoinResult19253 - { - Left = y, - Right = x.right - })) - .ToList(); - - Assert.Single(query); - - AssertSql( - """ -SELECT [a].[Id], [a].[a], [a].[a1], [a].[forkey], [b].[Id] AS [Id0], [b].[b], [b].[b1], [b].[forkey] AS [forkey0] -FROM [A] AS [a] -LEFT JOIN [B] AS [b] ON [a].[forkey] = [b].[forkey] -INTERSECT -SELECT [a0].[Id], [a0].[a], [a0].[a1], [a0].[forkey], [b0].[Id] AS [Id0], [b0].[b], [b0].[b1], [b0].[forkey] AS [forkey0] -FROM [B] AS [b0] -LEFT JOIN [A] AS [a0] ON [b0].[forkey] = [a0].[forkey] -"""); - } - } - - public class MyContext19253 : DbContext - { - public DbSet A { get; set; } - public DbSet B { get; set; } - - public MyContext19253(DbContextOptions options) - : base(options) - { - } - - public void Seed() - { - var tmp_a = new[] - { - new() - { - a = "a0", - a1 = "a1", - forkey = "a" - }, - new A19253 - { - a = "a2", - a1 = "a1", - forkey = "d" - }, - }; - var tmp_b = new[] - { - new() - { - b = "b0", - b1 = "b1", - forkey = "a" - }, - new B19253 - { - b = "b2", - b1 = "b1", - forkey = "c" - }, - }; - A.AddRange(tmp_a); - B.AddRange(tmp_b); - SaveChanges(); - } - - public class JoinResult19253 - { - public TLeft Left { get; set; } - - public TRight Right { get; set; } - } - - public class A19253 - { - public int Id { get; set; } - public string a { get; set; } - public string a1 { get; set; } - public string forkey { get; set; } - } - - public class B19253 - { - public int Id { get; set; } - public string b { get; set; } - public string b1 { get; set; } - public string forkey { get; set; } - } - } - - #endregion - - #region Issue22841 - - [ConditionalFact] - public async Task SaveChangesAsync_accepts_changes_with_ConfigureAwait_true_22841() - { - var contextFactory = await InitializeAsync(); - - using var context = contextFactory.CreateContext(); - var observableThing = new ObservableThing22841(); - - using var trackingSynchronizationContext = new SingleThreadSynchronizationContext(); - var origSynchronizationContext = SynchronizationContext.Current; - SynchronizationContext.SetSynchronizationContext(trackingSynchronizationContext); - - // Do a dispatch once to make sure we're in the new synchronization context. This is necessary in case the below happens - // to complete synchronously, which shouldn't happen in principle - but just to be safe. - await Task.Delay(1).ConfigureAwait(true); - - bool? isMySyncContext = null; - Action callback = () => isMySyncContext = - SynchronizationContext.Current == trackingSynchronizationContext - && Thread.CurrentThread == trackingSynchronizationContext.Thread; - observableThing.Event += callback; - - try - { - await context.AddAsync(observableThing); - await context.SaveChangesAsync(); - } - finally - { - observableThing.Event -= callback; - SynchronizationContext.SetSynchronizationContext(origSynchronizationContext); - } - - Assert.True(isMySyncContext); - } - - protected class MyContext22841 : DbContext - { - public MyContext22841(DbContextOptions options) - : base(options) - { - } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - => modelBuilder - .Entity() - .Property(o => o.Id) - .UsePropertyAccessMode(PropertyAccessMode.Property); - - public DbSet ObservableThings { get; set; } - } - - public class ObservableThing22841 - { - public int Id - { - get => _id; - set - { - _id = value; - Event?.Invoke(); - } - } - - private int _id; - - public event Action Event; - } - - #endregion Issue22841 - - #region Issue12482 - - [ConditionalFact] - public virtual async Task Batch_insert_with_sqlvariant_different_types_12482() - { - var contextFactory = await InitializeAsync(); - - using (var context = contextFactory.CreateContext()) - { - context.AddRange( - new MyContext12482.BaseEntity12482 { Value = 10.0999 }, - new MyContext12482.BaseEntity12482 { Value = -12345 }, - new MyContext12482.BaseEntity12482 { Value = "String Value" }, - new MyContext12482.BaseEntity12482 { Value = new DateTime(2020, 1, 1) }); - - context.SaveChanges(); - - AssertSql( - """ -@p0='10.0999' (Nullable = true) (DbType = Object) -@p1='-12345' (Nullable = true) (DbType = Object) -@p2='String Value' (Size = 12) (DbType = Object) -@p3='2020-01-01T00:00:00.0000000' (Nullable = true) (DbType = Object) - -SET IMPLICIT_TRANSACTIONS OFF; -SET NOCOUNT ON; -MERGE [BaseEntities] USING ( -VALUES (@p0, 0), -(@p1, 1), -(@p2, 2), -(@p3, 3)) AS i ([Value], _Position) ON 1=0 -WHEN NOT MATCHED THEN -INSERT ([Value]) -VALUES (i.[Value]) -OUTPUT INSERTED.[Id], i._Position; -"""); - } - } - - protected class MyContext12482 : DbContext - { - public virtual DbSet BaseEntities { get; set; } - - public MyContext12482(DbContextOptions options) - : base(options) - { - } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - => modelBuilder.Entity(); - - public class BaseEntity12482 - { - public int Id { get; set; } - - [Column(TypeName = "sql_variant")] - public object Value { get; set; } - } - } - - #endregion - - #region Issue23674 - - [ConditionalFact] - public virtual async Task Walking_back_include_tree_is_not_allowed_1() - { - var contextFactory = await InitializeAsync(); - - using (var context = contextFactory.CreateContext()) - { - var query = context.Set() - .Include(p => p.ManyDependents) - .ThenInclude(m => m.Principal.SingleDependent); - - Assert.Equal( - CoreStrings.WarningAsErrorTemplate( - CoreEventId.NavigationBaseIncludeIgnored.ToString(), - CoreResources.LogNavigationBaseIncludeIgnored(new TestLogger()) - .GenerateMessage("ManyDependent23674.Principal"), - "CoreEventId.NavigationBaseIncludeIgnored"), - Assert.Throws( - () => query.ToList()).Message); - } - } - - [ConditionalFact] - public virtual async Task Walking_back_include_tree_is_not_allowed_2() - { - var contextFactory = await InitializeAsync(); - - using (var context = contextFactory.CreateContext()) - { - var query = context.Set().Include(p => p.SingleDependent.Principal.ManyDependents); - - Assert.Equal( - CoreStrings.WarningAsErrorTemplate( - CoreEventId.NavigationBaseIncludeIgnored.ToString(), - CoreResources.LogNavigationBaseIncludeIgnored(new TestLogger()) - .GenerateMessage("SingleDependent23674.Principal"), - "CoreEventId.NavigationBaseIncludeIgnored"), - Assert.Throws( - () => query.ToList()).Message); - } - } - - [ConditionalFact] - public virtual async Task Walking_back_include_tree_is_not_allowed_3() - { - var contextFactory = await InitializeAsync(); - - using (var context = contextFactory.CreateContext()) - { - // This does not warn because after round-tripping from one-to-many from dependent side, the number of dependents could be larger. - var query = context.Set() - .Include(p => p.Principal.ManyDependents) - .ThenInclude(m => m.SingleDependent) - .ToList(); - } - } - - [ConditionalFact] - public virtual async Task Walking_back_include_tree_is_not_allowed_4() - { - var contextFactory = await InitializeAsync(); - - using (var context = contextFactory.CreateContext()) - { - var query = context.Set().Include(p => p.ManyDependent.SingleDependent.Principal); - - Assert.Equal( - CoreStrings.WarningAsErrorTemplate( - CoreEventId.NavigationBaseIncludeIgnored.ToString(), - CoreResources.LogNavigationBaseIncludeIgnored(new TestLogger()) - .GenerateMessage("ManyDependent23674.SingleDependent"), - "CoreEventId.NavigationBaseIncludeIgnored"), - Assert.Throws( - () => query.ToList()).Message); - } - } - - private class Principal23674 - { - public int Id { get; set; } - public List ManyDependents { get; set; } - public SingleDependent23674 SingleDependent { get; set; } - } - - private class ManyDependent23674 - { - public int Id { get; set; } - public Principal23674 Principal { get; set; } - public SingleDependent23674 SingleDependent { get; set; } - } - - private class SingleDependent23674 - { - public int Id { get; set; } - public Principal23674 Principal { get; set; } - public int PrincipalId { get; set; } - public int ManyDependentId { get; set; } - public ManyDependent23674 ManyDependent { get; set; } - } - - private class MyContext23674 : DbContext - { - public MyContext23674(DbContextOptions options) - : base(options) - { - } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - => modelBuilder.Entity(); - } - - #endregion - - #region Issue23676 - - [ConditionalFact] - public virtual async Task Projection_with_multiple_includes_and_subquery_with_set_operation() - { - var contextFactory = await InitializeAsync(); - - using var context = contextFactory.CreateContext(); - var id = 1; - var person = await context.Persons - .Include(p => p.Images) - .Include(p => p.Actor) - .ThenInclude(a => a.Movies) - .ThenInclude(p => p.Movie) - .Include(p => p.Director) - .ThenInclude(a => a.Movies) - .ThenInclude(p => p.Movie) - .Select( - x => new - { - x.Id, - x.Name, - x.Surname, - x.Birthday, - x.Hometown, - x.Bio, - x.AvatarUrl, - Images = x.Images - .Select( - i => new - { - i.Id, - i.ImageUrl, - i.Height, - i.Width - }).ToList(), - KnownByFilms = x.Actor.Movies - .Select(m => m.Movie) - .Union( - x.Director.Movies - .Select(m => m.Movie)) - .Select( - m => new - { - m.Id, - m.Name, - m.PosterUrl, - m.Rating - }).ToList() - }) - .FirstOrDefaultAsync(x => x.Id == id); - - // Verify the valid generated SQL - AssertSql( - """ -@__id_0='1' - -SELECT [t].[Id], [t].[Name], [t].[Surname], [t].[Birthday], [t].[Hometown], [t].[Bio], [t].[AvatarUrl], [t].[Id0], [t].[Id1], [p0].[Id], [p0].[ImageUrl], [p0].[Height], [p0].[Width], [t0].[Id], [t0].[Name], [t0].[PosterUrl], [t0].[Rating] -FROM ( - SELECT TOP(1) [p].[Id], [p].[Name], [p].[Surname], [p].[Birthday], [p].[Hometown], [p].[Bio], [p].[AvatarUrl], [a].[Id] AS [Id0], [d].[Id] AS [Id1] - FROM [Persons] AS [p] - LEFT JOIN [ActorEntity] AS [a] ON [p].[Id] = [a].[PersonId] - LEFT JOIN [DirectorEntity] AS [d] ON [p].[Id] = [d].[PersonId] - WHERE [p].[Id] = @__id_0 -) AS [t] -LEFT JOIN [PersonImageEntity] AS [p0] ON [t].[Id] = [p0].[PersonId] -OUTER APPLY ( - SELECT [m0].[Id], [m0].[Budget], [m0].[Description], [m0].[DurationInMins], [m0].[Name], [m0].[PosterUrl], [m0].[Rating], [m0].[ReleaseDate], [m0].[Revenue] - FROM [MovieActorEntity] AS [m] - INNER JOIN [MovieEntity] AS [m0] ON [m].[MovieId] = [m0].[Id] - WHERE [t].[Id0] IS NOT NULL AND [t].[Id0] = [m].[ActorId] - UNION - SELECT [m2].[Id], [m2].[Budget], [m2].[Description], [m2].[DurationInMins], [m2].[Name], [m2].[PosterUrl], [m2].[Rating], [m2].[ReleaseDate], [m2].[Revenue] - FROM [MovieDirectorEntity] AS [m1] - INNER JOIN [MovieEntity] AS [m2] ON [m1].[MovieId] = [m2].[Id] - WHERE [t].[Id1] IS NOT NULL AND [t].[Id1] = [m1].[DirectorId] -) AS [t0] -ORDER BY [t].[Id], [t].[Id0], [t].[Id1], [p0].[Id] -"""); - } - - private class PersonEntity - { - public int Id { get; set; } - public string Name { get; set; } - public string Surname { get; set; } - public DateTime Birthday { get; set; } - public string Hometown { get; set; } - public string Bio { get; set; } - public string AvatarUrl { get; set; } - - public ActorEntity Actor { get; set; } - public DirectorEntity Director { get; set; } - public IList Images { get; } = new List(); - } - - private class PersonImageEntity - { - public int Id { get; set; } - public string ImageUrl { get; set; } - public int Height { get; set; } - public int Width { get; set; } - public PersonEntity Person { get; set; } - } - - private class ActorEntity - { - public int Id { get; set; } - public int PersonId { get; set; } - public PersonEntity Person { get; set; } - - public IList Movies { get; } = new List(); - } - - private class MovieActorEntity - { - public int Id { get; set; } - public int ActorId { get; set; } - public ActorEntity Actor { get; set; } - - public int MovieId { get; set; } - public MovieEntity Movie { get; set; } - - public string RoleInFilm { get; set; } - - public int Order { get; set; } - } - - private class DirectorEntity - { - public int Id { get; set; } - public int PersonId { get; set; } - public PersonEntity Person { get; set; } - - public IList Movies { get; } = new List(); - } - - private class MovieDirectorEntity - { - public int Id { get; set; } - public int DirectorId { get; set; } - public DirectorEntity Director { get; set; } - - public int MovieId { get; set; } - public MovieEntity Movie { get; set; } - } - - private class MovieEntity - { - public int Id { get; set; } - public string Name { get; set; } - public double Rating { get; set; } - public string Description { get; set; } - public DateTime ReleaseDate { get; set; } - public int DurationInMins { get; set; } - public int Budget { get; set; } - public int Revenue { get; set; } - public string PosterUrl { get; set; } - - public IList Directors { get; set; } = new List(); - public IList Actors { get; set; } = new List(); - } - - private class MyContext23676 : DbContext - { - public MyContext23676(DbContextOptions options) - : base(options) - { - } - - public DbSet Persons { get; set; } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - } - } - - #endregion - - #region Issue19947 - - [ConditionalFact] - public virtual async Task Multiple_select_many_in_projection() - { - var contextFactory = await InitializeAsync(); - - using var context = contextFactory.CreateContext(); - var query = context.Users.Select( - captain => new - { - CaptainRateDtos = captain.Cars - .SelectMany(car0 => car0.Taxis) - .OrderByDescending(taxi => taxi.DateArrived).Take(12) - .Select( - taxi => new - { - Rate = taxi.UserRate.Value, - UserRateText = taxi.UserTextRate, - UserId = taxi.UserEUser.Id, - }).ToList(), - ReportCount = captain.Cars - .SelectMany(car1 => car1.Taxis).Count(taxi0 => taxi0.ReportText != ""), - }).SingleOrDefault(); - - // Verify the valid generated SQL - AssertSql( - """ -SELECT [t].[Id], [t1].[Rate], [t1].[UserRateText], [t1].[UserId], [t1].[Id], [t1].[Id0], [t].[c] -FROM ( - SELECT TOP(2) ( - SELECT COUNT(*) - FROM [Cars] AS [c] - INNER JOIN [Taxis] AS [t0] ON [c].[Id] = [t0].[CarId] - WHERE [u].[Id] = [c].[EUserId] AND ([t0].[ReportText] <> N'' OR [t0].[ReportText] IS NULL)) AS [c], [u].[Id] - FROM [Users] AS [u] -) AS [t] -OUTER APPLY ( - SELECT [t2].[UserRate] AS [Rate], [t2].[UserTextRate] AS [UserRateText], [u0].[Id] AS [UserId], [t2].[Id], [t2].[Id0], [t2].[DateArrived] - FROM ( - SELECT TOP(12) [c0].[Id], [t3].[Id] AS [Id0], [t3].[DateArrived], [t3].[UserEUserId], [t3].[UserRate], [t3].[UserTextRate] - FROM [Cars] AS [c0] - INNER JOIN [Taxis] AS [t3] ON [c0].[Id] = [t3].[CarId] - WHERE [t].[Id] = [c0].[EUserId] - ORDER BY [t3].[DateArrived] DESC - ) AS [t2] - LEFT JOIN [Users] AS [u0] ON [t2].[UserEUserId] = [u0].[Id] -) AS [t1] -ORDER BY [t].[Id], [t1].[DateArrived] DESC, [t1].[Id], [t1].[Id0] -"""); - } - - [ConditionalFact] - public virtual async Task Single_select_many_in_projection_with_take() - { - var contextFactory = await InitializeAsync(); - - using var context = contextFactory.CreateContext(); - var query = context.Users.Select( - captain => new - { - CaptainRateDtos = captain.Cars - .SelectMany(car0 => car0.Taxis) - .OrderByDescending(taxi => taxi.DateArrived).Take(12) - .Select( - taxi => new - { - Rate = taxi.UserRate.Value, - UserRateText = taxi.UserTextRate, - UserId = taxi.UserEUser.Id, - }).ToList() - }).SingleOrDefault(); - - // Verify the valid generated SQL - AssertSql( - """ -SELECT [t].[Id], [t1].[Rate], [t1].[UserRateText], [t1].[UserId], [t1].[Id], [t1].[Id0] -FROM ( - SELECT TOP(2) [u].[Id] - FROM [Users] AS [u] -) AS [t] -OUTER APPLY ( - SELECT [t0].[UserRate] AS [Rate], [t0].[UserTextRate] AS [UserRateText], [u0].[Id] AS [UserId], [t0].[Id], [t0].[Id0], [t0].[DateArrived] - FROM ( - SELECT TOP(12) [c].[Id], [t2].[Id] AS [Id0], [t2].[DateArrived], [t2].[UserEUserId], [t2].[UserRate], [t2].[UserTextRate] - FROM [Cars] AS [c] - INNER JOIN [Taxis] AS [t2] ON [c].[Id] = [t2].[CarId] - WHERE [t].[Id] = [c].[EUserId] - ORDER BY [t2].[DateArrived] DESC - ) AS [t0] - LEFT JOIN [Users] AS [u0] ON [t0].[UserEUserId] = [u0].[Id] -) AS [t1] -ORDER BY [t].[Id], [t1].[DateArrived] DESC, [t1].[Id], [t1].[Id0] -"""); - } - - private class EUser - { - public int Id { get; set; } - - public ICollection Cars { get; set; } - } - - private class Taxi - { - public int Id { get; set; } - public DateTime? DateArrived { get; set; } - public int? UserRate { get; set; } - public string UserTextRate { get; set; } - public string ReportText { get; set; } - public EUser UserEUser { get; set; } - } - - private class Car - { - public int Id { get; set; } - public ICollection Taxis { get; set; } - } - - private class MyContext19947 : DbContext - { - public MyContext19947(DbContextOptions options) - : base(options) - { - } - - public DbSet Users { get; set; } - public DbSet Cars { get; set; } - public DbSet Taxis { get; set; } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - } - } - - #endregion - - #region Issue20813 - - [ConditionalFact] - public virtual async Task SelectMany_and_collection_in_projection_in_FirstOrDefault() - { - var contextFactory = await InitializeAsync(); - - using var context = contextFactory.CreateContext(); - var referenceId = "a"; - var customerId = new Guid("1115c816-6c4c-4016-94df-d8b60a22ffa1"); - var query = context.Orders - .Where(o => o.ExternalReferenceId == referenceId && o.CustomerId == customerId) - .Select( - o => new - { - IdentityDocuments = o.IdentityDocuments.Select( - id => new - { - Images = o.IdentityDocuments - .SelectMany(id => id.Images) - .Select(i => new { i.Image }), - }) - }).SingleOrDefault(); - - // Verify the valid generated SQL - AssertSql( - """ -@__referenceId_0='a' (Size = 4000) -@__customerId_1='1115c816-6c4c-4016-94df-d8b60a22ffa1' - -SELECT [t].[Id], [t0].[Id], [t0].[Image], [t0].[Id0], [t0].[Id00] -FROM ( - SELECT TOP(2) [o].[Id] - FROM [Orders] AS [o] - WHERE [o].[ExternalReferenceId] = @__referenceId_0 AND [o].[CustomerId] = @__customerId_1 -) AS [t] -OUTER APPLY ( - SELECT [i].[Id], [t1].[Image], [t1].[Id] AS [Id0], [t1].[Id0] AS [Id00] - FROM [IdentityDocument] AS [i] - OUTER APPLY ( - SELECT [i1].[Image], [i0].[Id], [i1].[Id] AS [Id0] - FROM [IdentityDocument] AS [i0] - INNER JOIN [IdentityDocumentImage] AS [i1] ON [i0].[Id] = [i1].[IdentityDocumentId] - WHERE [t].[Id] = [i0].[OrderId] - ) AS [t1] - WHERE [t].[Id] = [i].[OrderId] -) AS [t0] -ORDER BY [t].[Id], [t0].[Id], [t0].[Id0] -"""); - } - - private class Order - { - private ICollection _identityDocuments; - - public Guid Id { get; set; } - - public Guid CustomerId { get; set; } - - public string ExternalReferenceId { get; set; } - - public ICollection IdentityDocuments - { - get => _identityDocuments = _identityDocuments ?? new Collection(); - set => _identityDocuments = value; - } - } - - private class IdentityDocument - { - private ICollection _images; - - public Guid Id { get; set; } - - [ForeignKey(nameof(Order))] - public Guid OrderId { get; set; } - - public Order Order { get; set; } - - public ICollection Images - { - get => _images = _images ?? new Collection(); - set => _images = value; - } - } - - private class IdentityDocumentImage - { - public Guid Id { get; set; } - - [ForeignKey(nameof(IdentityDocument))] - public Guid IdentityDocumentId { get; set; } - - public byte[] Image { get; set; } - - public IdentityDocument IdentityDocument { get; set; } - } - - private class MyContext20813 : DbContext - { - public MyContext20813(DbContextOptions options) - : base(options) - { - } - - public DbSet Orders { get; set; } - } - - #endregion - - #region Issue18738 - - [ConditionalFact] - public virtual async Task Set_operation_in_pending_collection() - { - var contextFactory = await InitializeAsync(); - - using var context = contextFactory.CreateContext(); - var resultCollection = context.StudentGameMapper - .OrderBy(s => s.Id) - .Select( - s => new StudentGameResult - { - SportsList = ( - from inDoorSports in context.InDoorSports - where inDoorSports.Id == s.InCategoryId - select inDoorSports.Name) - .Union( - from outDoorSports in context.OutDoorSports - where outDoorSports.Id == s.OutCategoryId - select outDoorSports.Name) - .ToList() - }) - .Take(5) // Without this line the query works - .ToList(); - - // Verify the valid generated SQL - AssertSql( - """ -@__p_0='5' - -SELECT [t].[Id], [t0].[Name] -FROM ( - SELECT TOP(@__p_0) [s].[Id], [s].[InCategoryId], [s].[OutCategoryId] - FROM [StudentGameMapper] AS [s] - ORDER BY [s].[Id] -) AS [t] -OUTER APPLY ( - SELECT [i].[Name] - FROM [InDoorSports] AS [i] - WHERE [i].[Id] = [t].[InCategoryId] - UNION - SELECT [o].[Name] - FROM [OutDoorSports] AS [o] - WHERE [o].[Id] = [t].[OutCategoryId] -) AS [t0] -ORDER BY [t].[Id] -"""); - } - - private class StudentGameMapper - { - public int Id { get; set; } - public int InCategoryId { get; set; } - public int OutCategoryId { get; set; } - } - - private class InDoorSports - { - public int Id { get; set; } - public string Name { get; set; } - } - - private class OutDoorSports - { - public int Id { get; set; } - public string Name { get; set; } - } - - private class StudentGameResult - { - public int GroupId { get; set; } - public int StudentId { get; set; } - public List SportsList { get; set; } - } - - private class MyContext18738 : DbContext - { - public MyContext18738(DbContextOptions options) - : base(options) - { - } - - public DbSet StudentGameMapper { get; set; } - public DbSet InDoorSports { get; set; } - public DbSet OutDoorSports { get; set; } - } - - #endregion - - #region Issue24216 - - [ConditionalFact] - public virtual async Task Subquery_take_SelectMany_with_TVF() - { - var contextFactory = await InitializeAsync(); - - using var context = contextFactory.CreateContext(); - - context.Database.ExecuteSqlRaw( - @"create function [dbo].[GetPersonStatusAsOf] (@personId bigint, @timestamp datetime2) - returns @personStatus table - ( - Id bigint not null, - PersonId bigint not null, - GenderId bigint not null, - StatusMessage nvarchar(max) - ) - as - begin - insert into @personStatus - select [m].[Id], [m].[PersonId], [m].[PersonId], null - from [Message] as [m] - where [m].[PersonId] = @personId and [m].[TimeStamp] = @timestamp - return - end"); - - ClearLog(); - - var q = from m in context.Message - orderby m.Id - select m; - - var q2 = - from m in q.Take(10) - from asof in context.GetPersonStatusAsOf(m.PersonId, m.Timestamp) - select new { Gender = (from g in context.Gender where g.Id == asof.GenderId select g.Description).Single() }; - - q2.ToList(); - - // Verify the valid generated SQL - AssertSql( - """ -@__p_0='10' - -SELECT ( - SELECT TOP(1) [g0].[Description] - FROM [Gender] AS [g0] - WHERE [g0].[Id] = [g].[GenderId]) AS [Gender] -FROM ( - SELECT TOP(@__p_0) [m].[Id], [m].[PersonId], [m].[Timestamp] - FROM [Message] AS [m] - ORDER BY [m].[Id] -) AS [t] -CROSS APPLY [dbo].[GetPersonStatusAsOf]([t].[PersonId], [t].[Timestamp]) AS [g] -ORDER BY [t].[Id] -"""); - } - - private class Gender - { - public long Id { get; set; } - - public string Description { get; set; } - } - - private class Message - { - public long Id { get; set; } - - public long PersonId { get; set; } - - public DateTime Timestamp { get; set; } - } - - private class PersonStatus - { - public long Id { get; set; } - - public long PersonId { get; set; } - - public long GenderId { get; set; } - - public string StatusMessage { get; set; } - } - - private class MyContext24216 : DbContext - { - public MyContext24216(DbContextOptions options) - : base(options) - { - } - - public DbSet Gender { get; set; } - - public DbSet Message { get; set; } - - public IQueryable GetPersonStatusAsOf(long personId, DateTime asOf) - => FromExpression(() => GetPersonStatusAsOf(personId, asOf)); - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - base.OnModelCreating(modelBuilder); - - modelBuilder.HasDbFunction( - typeof(MyContext24216).GetMethod( - nameof(GetPersonStatusAsOf), - new[] { typeof(long), typeof(DateTime) })); - } - } - - #endregion - - #region Issue23198 - - [ConditionalFact] - public virtual void An_optional_dependent_without_any_columns_and_nested_dependent_throws() - { - using var context = new MyContext23198(); - - Assert.Equal( - RelationalStrings.OptionalDependentWithDependentWithoutIdentifyingProperty(nameof(AnOwnedTypeWithOwnedProperties)), - Assert.Throws(() => context.Model).Message); - } - - private class MyContext23198 : DbContext - { - protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) - => optionsBuilder.UseJet(); - - protected override void OnModelCreating(ModelBuilder modelBuilder) - => modelBuilder.Entity().OwnsOne( - e => e.AnOwnedTypeWithOwnedProperties, - b => - { - b.OwnsOne(e => e.AnOwnedTypeWithPrimitiveProperties1); - b.OwnsOne(e => e.AnOwnedTypeWithPrimitiveProperties2); - }); - } - - public class AnAggregateRoot - { - public string Id { get; set; } - public AnOwnedTypeWithOwnedProperties AnOwnedTypeWithOwnedProperties { get; set; } - } - - public class AnOwnedTypeWithOwnedProperties - { - public AnOwnedTypeWithPrimitiveProperties1 AnOwnedTypeWithPrimitiveProperties1 { get; set; } - public AnOwnedTypeWithPrimitiveProperties2 AnOwnedTypeWithPrimitiveProperties2 { get; set; } - } - - public class AnOwnedTypeWithPrimitiveProperties1 - { - public string Name { get; set; } - } - - public class AnOwnedTypeWithPrimitiveProperties2 - { - public string Name { get; set; } - } - - #endregion - - #region Issue24569 - - // TODO: Remove when JSON is first class and we have proper tests. See issue#4021 - - [ConditionalFact] - public virtual async Task Builtin_tvf_translated_correctly() - { - var contextFactory = await InitializeAsync(seed: c => c.Seed()); - - using (var context = contextFactory.CreateContext()) - { - var query = await (from c in context.Cars - from j in context.OpenJson(c.Json, "$.items") - select new { c, j }).ToListAsync(); - - AssertSql( - """ -SELECT [c].[Id], [c].[Json], [o].[Value] -FROM [Cars] AS [c] -CROSS APPLY OPENJSON([c].[Json], N'$.items') AS [o] -"""); - } - } - - protected class MyContext24569 : DbContext - { - public DbSet Cars { get; set; } - - public MyContext24569(DbContextOptions options) - : base(options) - { - } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - => modelBuilder.HasDbFunction(() => OpenJson(string.Empty, string.Empty)).HasStoreType("nvarchar(max)"); - - [DbFunction("OPENJSON", IsBuiltIn = true)] - public IQueryable OpenJson(string column, string jsonPath) - => FromExpression(() => OpenJson(column, jsonPath)); - - public void Seed() - { - Cars.Add(new Car24569 { Json = @"{ ""name"": ""test"", ""items"": [{""id"": 1}, {""id"": 2}] }", }); - - SaveChanges(); - } - - public class Car24569 - { - public int Id { get; set; } - - public string Json { get; set; } - } - - [Keyless] - public class JsonResult - { - public string Value { get; set; } - } - } - - #endregion - - #region Issue25400 - - [ConditionalTheory] - [InlineData(true)] - [InlineData(false)] - public virtual async Task NoTracking_split_query_creates_only_required_instances(bool async) - { - var contextFactory = await InitializeAsync( - seed: c => c.Seed(), - onConfiguring: o => new JetDbContextOptionsBuilder(o).UseQuerySplittingBehavior(QuerySplittingBehavior.SplitQuery)); - - using (var context = contextFactory.CreateContext()) - { - Test25400.ConstructorCallCount = 0; - - var query = context.Set().AsNoTracking().OrderBy(e => e.Id); - var test = async - ? await query.FirstOrDefaultAsync() - : query.FirstOrDefault(); - - Assert.Equal(1, Test25400.ConstructorCallCount); - - AssertSql( -""" -SELECT TOP 1 `t`.`Id`, `t`.`Value` -FROM `Tests` AS `t` -ORDER BY `t`.`Id` -"""); - } - } - - protected class MyContext25400 : DbContext - { - public DbSet Tests { get; set; } - - public MyContext25400(DbContextOptions options) - : base(options) - { - } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - => modelBuilder.Entity().HasKey(e => e.Id); - - public void Seed() - { - Tests.Add(new Test25400(15)); - - SaveChanges(); - } - } - - protected class Test25400 - { - public static int ConstructorCallCount; - - public Test25400() - { - ++ConstructorCallCount; - } - - public Test25400(int value) - { - Value = value; - } - - public int Id { get; set; } - public int Value { get; set; } - } - - #endregion - - #region Issue25225 - - [ConditionalFact] - public virtual async Task Can_query_with_nav_collection_in_projection_with_split_query_in_parallel_async() - { - var contextFactory = await CreateContext25225Async(); - var task1 = QueryAsync(MyContext25225.Parent1Id, MyContext25225.Collection1Id); - var task2 = QueryAsync(MyContext25225.Parent2Id, MyContext25225.Collection2Id); - await Task.WhenAll(task1, task2); - - async Task QueryAsync(Guid parentId, Guid collectionId) - { - using (var context = contextFactory.CreateContext()) - { - ClearLog(); - for (var i = 0; i < 100; i++) - { - var parent = await SelectParent25225(context, parentId).SingleAsync(); - AssertParent25225(parentId, collectionId, parent); - } - } - } - } - - [ConditionalFact] - public virtual async Task Can_query_with_nav_collection_in_projection_with_split_query_in_parallel_sync() - { - var contextFactory = await CreateContext25225Async(); - var task1 = Task.Run(() => Query(MyContext25225.Parent1Id, MyContext25225.Collection1Id)); - var task2 = Task.Run(() => Query(MyContext25225.Parent2Id, MyContext25225.Collection2Id)); - await Task.WhenAll(task1, task2); - - void Query(Guid parentId, Guid collectionId) - { - using (var context = contextFactory.CreateContext()) - { - ClearLog(); - for (var i = 0; i < 10; i++) - { - var parent = SelectParent25225(context, parentId).Single(); - AssertParent25225(parentId, collectionId, parent); - } - } - } - } - - private Task> CreateContext25225Async() - => InitializeAsync( - seed: c => c.Seed(), - onConfiguring: o => new JetDbContextOptionsBuilder(o).UseQuerySplittingBehavior(QuerySplittingBehavior.SplitQuery) - ); - - private static IQueryable SelectParent25225(MyContext25225 context, Guid parentId) - => context - .Parents - .Where(x => x.Id == parentId) - .Select( - p => new ParentViewModel25225 - { - Id = p.Id, - Collection = p - .Collection - .Select( - c => new CollectionViewModel25225 - { - Id = c.Id, - ParentId = c.ParentId, - }) - .ToArray() - }); - - private static void AssertParent25225(Guid expectedParentId, Guid expectedCollectionId, ParentViewModel25225 actualParent) - { - Assert.Equal(expectedParentId, actualParent.Id); - Assert.Collection( - actualParent.Collection, - c => Assert.Equal(expectedCollectionId, c.Id) - ); - } - - protected class MyContext25225 : DbContext - { - public static readonly Guid Parent1Id = new("d6457b52-690a-419e-8982-a1a8551b4572"); - public static readonly Guid Parent2Id = new("e79c82f4-3ae7-4c65-85db-04e08cba6fa7"); - public static readonly Guid Collection1Id = new("7ce625fb-863d-41b3-b42e-e4e4367f7548"); - public static readonly Guid Collection2Id = new("d347bbd5-003a-441f-a148-df8ab8ac4a29"); - public DbSet Parents { get; set; } - - public MyContext25225(DbContextOptions options) - : base(options) - { - } - - public void Seed() - { - var parent1 = new Parent25225 { Id = Parent1Id, Collection = new List { new() { Id = Collection1Id, } } }; - - var parent2 = new Parent25225 { Id = Parent2Id, Collection = new List { new() { Id = Collection2Id, } } }; - - AddRange(parent1, parent2); - - SaveChanges(); - } - - public class Parent25225 - { - public Guid Id { get; set; } - public ICollection Collection { get; set; } - } - - public class Collection25225 - { - public Guid Id { get; set; } - public Guid ParentId { get; set; } - public Parent25225 Parent { get; set; } - } - } - - public class ParentViewModel25225 - { - public Guid Id { get; set; } - public ICollection Collection { get; set; } - } - - public class CollectionViewModel25225 - { - public Guid Id { get; set; } - public Guid ParentId { get; set; } - } - - #endregion - - #region Issue26742 - - [ConditionalTheory] - [InlineData(null, "")] - //[InlineData(0, " (Scale = 0)")] //https://github.com/dotnet/SqlClient/issues/1380 cause this test to fail, not EF - [InlineData(1, " (Scale = 1)")] - [InlineData(2, " (Scale = 2)")] - [InlineData(3, " (Scale = 3)")] - [InlineData(4, " (Scale = 4)")] - [InlineData(5, " (Scale = 5)")] - [InlineData(6, " (Scale = 6)")] - [InlineData(7, " (Scale = 7)")] - public virtual async Task Query_generates_correct_datetime2_parameter_definition(int? fractionalSeconds, string postfix) - { - var contextFactory = await InitializeAsync( - onModelCreating: modelBuilder => - { - if (fractionalSeconds.HasValue) - { - modelBuilder.Entity().Property(p => p.DateTime).HasPrecision(fractionalSeconds.Value); - } - }); - - var parameter = new DateTime(2021, 11, 12, 13, 14, 15).AddTicks(1234567); - - using (var context = contextFactory.CreateContext()) - { - _ = context.Entities.Where(x => x.DateTime == parameter).Select(e => e.DateTime).FirstOrDefault(); - - AssertSql( -$""" -@__parameter_0='2021-11-12T13:14:15.0000000' (DbType = DateTime) - -SELECT TOP 1 `e`.`DateTime` -FROM `Entities` AS `e` -WHERE `e`.`DateTime` = CDATE({AssertSqlHelper.Parameter("@__parameter_0")}) -"""); - } - } - - [ConditionalTheory] - [InlineData(null, "")] - //[InlineData(0, " (Scale = 0)")] //https://github.com/dotnet/SqlClient/issues/1380 cause this test to fail, not EF - [InlineData(1, " (Scale = 1)")] - [InlineData(2, " (Scale = 2)")] - [InlineData(3, " (Scale = 3)")] - [InlineData(4, " (Scale = 4)")] - [InlineData(5, " (Scale = 5)")] - [InlineData(6, " (Scale = 6)")] - [InlineData(7, " (Scale = 7)")] - public virtual async Task Query_generates_correct_datetimeoffset_parameter_definition(int? fractionalSeconds, string postfix) - { - var contextFactory = await InitializeAsync( - onModelCreating: modelBuilder => - { - if (fractionalSeconds.HasValue) - { - modelBuilder.Entity().Property(p => p.DateTimeOffset).HasPrecision(fractionalSeconds.Value); - } - }); - - var parameter = new DateTimeOffset(new DateTime(2021, 11, 12, 13, 14, 15).AddTicks(1234567), TimeSpan.FromHours(10)); - - using (var context = contextFactory.CreateContext()) - { - _ = context.Entities.Where(x => x.DateTimeOffset == parameter).Select(e => e.DateTimeOffset).FirstOrDefault(); - - AssertSql( -$""" -@__parameter_0='2021-11-12T03:14:15.0000000Z' (DbType = DateTime) - -SELECT TOP 1 `e`.`DateTimeOffset` -FROM `Entities` AS `e` -WHERE `e`.`DateTimeOffset` = {AssertSqlHelper.Parameter("@__parameter_0")} -"""); - } - } - - [ConditionalTheory] - [InlineData(null, "")] - //[InlineData(0, " (Scale = 0)")] //https://github.com/dotnet/SqlClient/issues/1380 cause this test to fail, not EF - [InlineData(1, " (Scale = 1)")] - [InlineData(2, " (Scale = 2)")] - [InlineData(3, " (Scale = 3)")] - [InlineData(4, " (Scale = 4)")] - [InlineData(5, " (Scale = 5)")] - [InlineData(6, " (Scale = 6)")] - [InlineData(7, " (Scale = 7)")] - public virtual async Task Query_generates_correct_timespan_parameter_definition(int? fractionalSeconds, string postfix) - { - var contextFactory = await InitializeAsync( - onModelCreating: modelBuilder => - { - if (fractionalSeconds.HasValue) - { - modelBuilder.Entity().Property(p => p.TimeSpan).HasPrecision(fractionalSeconds.Value); - } - }); - - var parameter = TimeSpan.Parse("12:34:56.7890123", CultureInfo.InvariantCulture); - - using (var context = contextFactory.CreateContext()) - { - _ = context.Entities.Where(x => x.TimeSpan == parameter).Select(e => e.TimeSpan).FirstOrDefault(); - - AssertSql( -$""" -@__parameter_0='12:34:56.7890123' - -SELECT TOP 1 `e`.`TimeSpan` -FROM `Entities` AS `e` -WHERE `e`.`TimeSpan` = {AssertSqlHelper.Parameter("@__parameter_0")} -"""); - } - } - - protected class MyContext_26742 : DbContext - { - public DbSet Entities { get; set; } - - public MyContext_26742(DbContextOptions options) - : base(options) - { - } - - public class Entity - { - public int Id { get; set; } - public TimeSpan TimeSpan { get; set; } - public DateTime DateTime { get; set; } - public DateTimeOffset DateTimeOffset { get; set; } - } - } - - #endregion - - protected override string StoreName - => "QueryBugsTest"; - - protected TestSqlLoggerFactory TestSqlLoggerFactory - => (TestSqlLoggerFactory)ListLoggerFactory; - - protected override ITestStoreFactory TestStoreFactory - => JetTestStoreFactory.Instance; - - protected override DbContextOptionsBuilder AddOptions(DbContextOptionsBuilder builder) - => base.AddOptions(builder).ConfigureWarnings( - w => - { - w.Log(JetEventId.ByteIdentityColumnWarning); - w.Log(JetEventId.DecimalTypeKeyWarning); - }); - - protected override TestStore CreateTestStore() - => JetTestStore.CreateInitialized(StoreName); - - private static readonly FieldInfo _querySplittingBehaviorFieldInfo = - typeof(RelationalOptionsExtension).GetField("_querySplittingBehavior", BindingFlags.NonPublic | BindingFlags.Instance); - - protected DbContextOptionsBuilder ClearQuerySplittingBehavior(DbContextOptionsBuilder optionsBuilder) - { - var extension = optionsBuilder.Options.FindExtension(); - if (extension == null) - { - extension = new JetOptionsExtension(); - } - else - { - _querySplittingBehaviorFieldInfo.SetValue(extension, null); - } - - ((IDbContextOptionsBuilderInfrastructure)optionsBuilder).AddOrUpdateExtension(extension); - - return optionsBuilder; - } - - protected void ClearLog() - => TestSqlLoggerFactory.Clear(); - - protected void AssertSql(params string[] expected) - => TestSqlLoggerFactory.AssertBaseline(expected); - } -} diff --git a/test/EFCore.Jet.FunctionalTests/Query/QueryFilterFuncletizationJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/QueryFilterFuncletizationJetTest.cs index 06842ebd..7d9fa289 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/QueryFilterFuncletizationJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/QueryFilterFuncletizationJetTest.cs @@ -184,25 +184,31 @@ public override void DbContext_property_based_filter_does_not_short_circuit() base.DbContext_property_based_filter_does_not_short_circuit(); AssertSql( - $@"{AssertSqlHelper.Declaration("@__ef_filter__p_0='False'")} -{AssertSqlHelper.Declaration("@__ef_filter__IsModerated_1='True' (Nullable = true)")} + $""" +@__ef_filter__p_1='False' +@__ef_filter__IsModerated_0='True' (Nullable = true) SELECT `s`.`Id`, `s`.`IsDeleted`, `s`.`IsModerated` FROM `ShortCircuitFilter` AS `s` -WHERE `s`.`IsDeleted` <> TRUE AND ({AssertSqlHelper.Parameter("@__ef_filter__p_0")} = TRUE OR {AssertSqlHelper.Parameter("@__ef_filter__IsModerated_1")} = `s`.`IsModerated`)", +WHERE `s`.`IsDeleted` <> TRUE AND ({AssertSqlHelper.Parameter("@__ef_filter__p_1")} = TRUE OR {AssertSqlHelper.Parameter("@__ef_filter__IsModerated_0")} = `s`.`IsModerated`) +""", // - $@"{AssertSqlHelper.Declaration("@__ef_filter__p_0='False'")} -{AssertSqlHelper.Declaration("@__ef_filter__IsModerated_1='False' (Nullable = true)")} + $""" +@__ef_filter__p_1='False' +@__ef_filter__IsModerated_0='False' (Nullable = true) SELECT `s`.`Id`, `s`.`IsDeleted`, `s`.`IsModerated` FROM `ShortCircuitFilter` AS `s` -WHERE `s`.`IsDeleted` <> TRUE AND ({AssertSqlHelper.Parameter("@__ef_filter__p_0")} = TRUE OR {AssertSqlHelper.Parameter("@__ef_filter__IsModerated_1")} = `s`.`IsModerated`)", +WHERE `s`.`IsDeleted` <> TRUE AND ({AssertSqlHelper.Parameter("@__ef_filter__p_1")} = TRUE OR {AssertSqlHelper.Parameter("@__ef_filter__IsModerated_0")} = `s`.`IsModerated`) +""", // - $@"{AssertSqlHelper.Declaration("@__ef_filter__p_0='True'")} + $""" +@__ef_filter__p_1='True' SELECT `s`.`Id`, `s`.`IsDeleted`, `s`.`IsModerated` FROM `ShortCircuitFilter` AS `s` -WHERE `s`.`IsDeleted` <> TRUE AND {AssertSqlHelper.Parameter("@__ef_filter__p_0")} = TRUE"); +WHERE `s`.`IsDeleted` <> TRUE AND {AssertSqlHelper.Parameter("@__ef_filter__p_1")} = TRUE +"""); } public override void EntityTypeConfiguration_DbContext_field_is_parameterized() diff --git a/test/EFCore.Jet.FunctionalTests/Query/QueryLoggingJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/QueryLoggingJetTest.cs index fac50be3..7a695e1a 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/QueryLoggingJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/QueryLoggingJetTest.cs @@ -42,7 +42,7 @@ var customers "Compiling query expression: ", Fixture.TestSqlLoggerFactory.Log[0].Message); Assert.StartsWith( - "Generated query execution expression: " + Environment.NewLine + "'queryContext => new SingleQueryingEnumerable(", + "Generated query execution expression: " + Environment.NewLine + "'queryContext => SingleQueryingEnumerable.Create(", Fixture.TestSqlLoggerFactory.Log[1].Message); } @@ -56,7 +56,7 @@ var customers Assert.NotNull(customers); Assert.StartsWith( - "Generated query execution expression: " + Environment.NewLine + "'queryContext => new SplitQueryingEnumerable(", + "Generated query execution expression: " + Environment.NewLine + "'queryContext => SplitQueryingEnumerable.Create(", Fixture.TestSqlLoggerFactory.Log[1].Message); } diff --git a/test/EFCore.Jet.FunctionalTests/Query/SimpleQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/SimpleQueryJetTest.cs deleted file mode 100644 index b0d6450c..00000000 --- a/test/EFCore.Jet.FunctionalTests/Query/SimpleQueryJetTest.cs +++ /dev/null @@ -1,601 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -// ReSharper disable InconsistentNaming - -using System.Data.Odbc; -using System.Data.OleDb; -using System.Linq; -using System.Threading.Tasks; -using EntityFrameworkCore.Jet.FunctionalTests.TestUtilities; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Query; -using Microsoft.EntityFrameworkCore.TestUtilities; -using Xunit; - -namespace EntityFrameworkCore.Jet.FunctionalTests.Query; - -public class SimpleQueryJetTest : SimpleQueryRelationalTestBase -{ - protected override ITestStoreFactory TestStoreFactory - => JetTestStoreFactory.Instance; - - public override async Task Multiple_nested_reference_navigations(bool async) - { - await base.Multiple_nested_reference_navigations(async); - - AssertSql( -$""" -@__p_0='3' - -SELECT TOP 1 `s`.`Id`, `s`.`Email`, `s`.`Logon`, `s`.`ManagerId`, `s`.`Name`, `s`.`SecondaryManagerId` -FROM `Staff` AS `s` -WHERE `s`.`Id` = {AssertSqlHelper.Parameter("@__p_0")} -""", -// -$""" -@__id_0='1' - -SELECT TOP 2 `a`.`Id`, `a`.`Complete`, `a`.`Deleted`, `a`.`PeriodEnd`, `a`.`PeriodStart`, `a`.`StaffId`, `s`.`Id`, `s`.`Email`, `s`.`Logon`, `s`.`ManagerId`, `s`.`Name`, `s`.`SecondaryManagerId`, `s0`.`Id`, `s0`.`Email`, `s0`.`Logon`, `s0`.`ManagerId`, `s0`.`Name`, `s0`.`SecondaryManagerId`, `s1`.`Id`, `s1`.`Email`, `s1`.`Logon`, `s1`.`ManagerId`, `s1`.`Name`, `s1`.`SecondaryManagerId` -FROM ((`Appraisals` AS `a` -INNER JOIN `Staff` AS `s` ON `a`.`StaffId` = `s`.`Id`) -LEFT JOIN `Staff` AS `s0` ON `s`.`ManagerId` = `s0`.`Id`) -LEFT JOIN `Staff` AS `s1` ON `s`.`SecondaryManagerId` = `s1`.`Id` -WHERE `a`.`Id` = {AssertSqlHelper.Parameter("@__id_0")} -"""); - } - - public override async Task Comparing_enum_casted_to_byte_with_int_parameter(bool async) - { - await base.Comparing_enum_casted_to_byte_with_int_parameter(async); - - AssertSql( -$""" -@__bitterTaste_0='1' - -SELECT `i`.`IceCreamId`, `i`.`Name`, `i`.`Taste` -FROM `IceCreams` AS `i` -WHERE `i`.`Taste` = {AssertSqlHelper.Parameter("@__bitterTaste_0")} -"""); - } - - public override async Task Comparing_enum_casted_to_byte_with_int_constant(bool async) - { - await base.Comparing_enum_casted_to_byte_with_int_constant(async); - - AssertSql( -""" -SELECT `i`.`IceCreamId`, `i`.`Name`, `i`.`Taste` -FROM `IceCreams` AS `i` -WHERE `i`.`Taste` = 1 -"""); - } - - public override async Task Comparing_byte_column_to_enum_in_vb_creating_double_cast(bool async) - { - await base.Comparing_byte_column_to_enum_in_vb_creating_double_cast(async); - - AssertSql( -""" -SELECT `f`.`Id`, `f`.`Taste` -FROM `Food` AS `f` -WHERE `f`.`Taste` = CBYTE(1) -"""); - } - - public override async Task Null_check_removal_in_ternary_maintain_appropriate_cast(bool async) - { - await base.Null_check_removal_in_ternary_maintain_appropriate_cast(async); - - AssertSql( -""" -SELECT `f`.`Taste` AS `Bar` -FROM `Food` AS `f` -"""); - } - - public override async Task Bool_discriminator_column_works(bool async) - { - await base.Bool_discriminator_column_works(async); - - AssertSql( -""" -SELECT `a`.`Id`, `a`.`BlogId`, `b`.`Id`, `b`.`IsPhotoBlog`, `b`.`Title`, `b`.`NumberOfPhotos` -FROM `Authors` AS `a` -LEFT JOIN `Blog` AS `b` ON `a`.`BlogId` = `b`.`Id` -"""); - } - - public override async Task Count_member_over_IReadOnlyCollection_works(bool async) - { - await base.Count_member_over_IReadOnlyCollection_works(async); - - AssertSql( -""" -SELECT ( - SELECT COUNT(*) - FROM `Books` AS `b` - WHERE `a`.`AuthorId` = `b`.`AuthorId`) AS `BooksCount` -FROM `Authors` AS `a` -"""); - } - - public override async Task Multiple_different_entity_type_from_different_namespaces(bool async) - { - await base.Multiple_different_entity_type_from_different_namespaces(async); - - AssertSql( -""" -SELECT cast(null as int) AS MyValue -"""); - } - - public override async Task Unwrap_convert_node_over_projection_when_translating_contains_over_subquery(bool async) - { - await base.Unwrap_convert_node_over_projection_when_translating_contains_over_subquery(async); - - AssertSql( -$""" -@__currentUserId_0='1' - -SELECT IIF(`u`.`Id` IN ( - SELECT `u0`.`Id` - FROM `Memberships` AS `m` - INNER JOIN `Users` AS `u0` ON `m`.`UserId` = `u0`.`Id` - WHERE `m`.`GroupId` IN ( - SELECT `m0`.`GroupId` - FROM `Memberships` AS `m0` - WHERE `m0`.`UserId` = {AssertSqlHelper.Parameter("@__currentUserId_0")} - ) - ), TRUE, FALSE) AS `HasAccess` -FROM `Users` AS `u` -"""); - } - - public override async Task Unwrap_convert_node_over_projection_when_translating_contains_over_subquery_2(bool async) - { - await base.Unwrap_convert_node_over_projection_when_translating_contains_over_subquery_2(async); - - AssertSql( -$""" -@__currentUserId_0='1' - -SELECT IIF(`u`.`Id` IN ( - SELECT `u0`.`Id` - FROM (`Memberships` AS `m` - INNER JOIN `Groups` AS `g` ON `m`.`GroupId` = `g`.`Id`) - INNER JOIN `Users` AS `u0` ON `m`.`UserId` = `u0`.`Id` - WHERE `g`.`Id` IN ( - SELECT `g0`.`Id` - FROM `Memberships` AS `m0` - INNER JOIN `Groups` AS `g0` ON `m0`.`GroupId` = `g0`.`Id` - WHERE `m0`.`UserId` = {AssertSqlHelper.Parameter("@__currentUserId_0")} - ) - ), TRUE, FALSE) AS `HasAccess` -FROM `Users` AS `u` -"""); - } - - public override async Task Unwrap_convert_node_over_projection_when_translating_contains_over_subquery_3(bool async) - { - await base.Unwrap_convert_node_over_projection_when_translating_contains_over_subquery_3(async); - - AssertSql( -$""" -@__currentUserId_0='1' - -SELECT IIF(EXISTS ( - SELECT 1 - FROM `Memberships` AS `m` - INNER JOIN `Users` AS `u0` ON `m`.`UserId` = `u0`.`Id` - WHERE `m`.`GroupId` IN ( - SELECT `m0`.`GroupId` - FROM `Memberships` AS `m0` - WHERE `m0`.`UserId` = {AssertSqlHelper.Parameter("@__currentUserId_0")} - ) AND `u0`.`Id` = `u`.`Id`), TRUE, FALSE) AS `HasAccess` -FROM `Users` AS `u` -"""); - } - - public override async Task GroupBy_aggregate_on_right_side_of_join(bool async) - { - await base.GroupBy_aggregate_on_right_side_of_join(async); - - AssertSql( -$""" -@__orderId_0='123456' -@__orderId_0='123456' - -SELECT `o`.`Id`, `o`.`CancellationDate`, `o`.`OrderId`, `o`.`ShippingDate` -FROM `OrderItems` AS `o` -INNER JOIN ( - SELECT `o0`.`OrderId` AS `Key`, MAX(IIF(`o0`.`ShippingDate` IS NULL AND `o0`.`CancellationDate` IS NULL, `o0`.`OrderId`, `o0`.`OrderId` - 10000000)) AS `IsPending` - FROM `OrderItems` AS `o0` - WHERE `o0`.`OrderId` = {AssertSqlHelper.Parameter("@__orderId_0")} - GROUP BY `o0`.`OrderId` -) AS `t` ON `o`.`OrderId` = `t`.`Key` -WHERE `o`.`OrderId` = {AssertSqlHelper.Parameter("@__orderId_0")} -ORDER BY `o`.`OrderId` -"""); - } - - public override async Task Enum_with_value_converter_matching_take_value(bool async) - { - await base.Enum_with_value_converter_matching_take_value(async); - - AssertSql( -$""" -@__orderItemType_1='MyType1' (Nullable = false) (Size = 255) -@__orderItemType_1='MyType1' (Nullable = false) (Size = 255) - -SELECT `o1`.`Id`, IIF(( - SELECT TOP 1 `o2`.`Price` - FROM `OrderItems` AS `o2` - WHERE `o1`.`Id` = `o2`.`Order26472Id` AND `o2`.`Type` = {AssertSqlHelper.Parameter("@__orderItemType_1")}) IS NULL, 0.0, ( - SELECT TOP 1 `o2`.`Price` - FROM `OrderItems` AS `o2` - WHERE `o1`.`Id` = `o2`.`Order26472Id` AND `o2`.`Type` = {AssertSqlHelper.Parameter("@__orderItemType_1")})) AS `SpecialSum` -FROM ( - SELECT TOP 1 `o`.`Id` - FROM `Orders` AS `o` - WHERE EXISTS ( - SELECT 1 - FROM `OrderItems` AS `o0` - WHERE `o`.`Id` = `o0`.`Order26472Id`) - ORDER BY `o`.`Id` -) AS `t` -INNER JOIN `Orders` AS `o1` ON `t`.`Id` = `o1`.`Id` -ORDER BY `t`.`Id` -"""); - } - - public override async Task GroupBy_Aggregate_over_navigations_repeated(bool async) - { - await base.GroupBy_Aggregate_over_navigations_repeated(async); - - AssertSql( -""" -SELECT ( - SELECT MIN(`o`.`HourlyRate`) - FROM `TimeSheets` AS `t0` - LEFT JOIN `Order` AS `o` ON `t0`.`OrderId` = `o`.`Id` - WHERE `t0`.`OrderId` IS NOT NULL AND `t`.`OrderId` = `t0`.`OrderId`) AS `HourlyRate`, ( - SELECT MIN(`c`.`Id`) - FROM (`TimeSheets` AS `t1` - INNER JOIN `Project` AS `p` ON `t1`.`ProjectId` = `p`.`Id`) - LEFT JOIN `Customers` AS `c` ON `p`.`CustomerId` = `c`.`Id` - WHERE (`t1`.`OrderId` IS NOT NULL AND `t`.`OrderId` = `t1`.`OrderId`) AND (`p`.`CustomerId` IS NOT NULL AND `c`.`Id` IS NOT NULL)) AS `CustomerId`, ( - SELECT MIN(`c0`.`Name`) - FROM (`TimeSheets` AS `t2` - INNER JOIN `Project` AS `p0` ON `t2`.`ProjectId` = `p0`.`Id`) - LEFT JOIN `Customers` AS `c0` ON `p0`.`CustomerId` = `c0`.`Id` - WHERE (`t2`.`OrderId` IS NOT NULL AND `t`.`OrderId` = `t2`.`OrderId`) AND (`p0`.`CustomerId` IS NOT NULL AND `c0`.`Id` IS NOT NULL)) AS `CustomerName` -FROM `TimeSheets` AS `t` -WHERE `t`.`OrderId` IS NOT NULL -GROUP BY `t`.`OrderId` -"""); - } - - public override async Task Aggregate_over_subquery_in_group_by_projection(bool async) - { - await base.Aggregate_over_subquery_in_group_by_projection(async); - - AssertSql( -""" -SELECT `o`.`CustomerId`, ( - SELECT MIN(`o0`.`HourlyRate`) - FROM `Order` AS `o0` - WHERE `o0`.`CustomerId` = `o`.`CustomerId`) AS `CustomerMinHourlyRate`, MIN(`o`.`HourlyRate`) AS `HourlyRate`, COUNT(*) AS `Count` -FROM `Order` AS `o` -WHERE `o`.`Number` <> 'A1' OR `o`.`Number` IS NULL -GROUP BY `o`.`CustomerId`, `o`.`Number` -"""); - } - - public override async Task Aggregate_over_subquery_in_group_by_projection_2(bool async) - { - await base.Aggregate_over_subquery_in_group_by_projection_2(async); - - AssertSql( -""" -SELECT [t].[Value] AS [A], ( - SELECT MAX([t0].[Id]) - FROM [Table] AS [t0] - WHERE [t0].[Value] = (MAX([t].[Id]) * 6) OR (([t0].[Value] IS NULL) AND (MAX([t].[Id]) IS NULL))) AS [B] -FROM [Table] AS [t] -GROUP BY [t].[Value] -"""); - } - - public override async Task Group_by_aggregate_in_subquery_projection_after_group_by(bool async) - { - await base.Group_by_aggregate_in_subquery_projection_after_group_by(async); - - AssertSql( -""" -SELECT [t].[Value] AS [A], COALESCE(SUM([t].[Id]), 0) AS [B], COALESCE(( - SELECT TOP(1) COALESCE(SUM([t].[Id]), 0) + COALESCE(SUM([t0].[Id]), 0) - FROM [Table] AS [t0] - GROUP BY [t0].[Value] - ORDER BY (SELECT 1)), 0) AS [C] -FROM [Table] AS [t] -GROUP BY [t].[Value] -"""); - } - - public override async Task Group_by_multiple_aggregate_joining_different_tables(bool async) - { - await base.Group_by_multiple_aggregate_joining_different_tables(async); - - AssertSql( -""" -SELECT ( - SELECT COUNT(*) - FROM ( - SELECT DISTINCT [c].[Value1] - FROM ( - SELECT [p0].[Id], [p0].[Child1Id], [p0].[Child2Id], [p0].[ChildFilter1Id], [p0].[ChildFilter2Id], 1 AS [Key] - FROM [Parents] AS [p0] - ) AS [t1] - LEFT JOIN [Child1] AS [c] ON [t1].[Child1Id] = [c].[Id] - WHERE [t].[Key] = [t1].[Key] - ) AS [t0]) AS [Test1], ( - SELECT COUNT(*) - FROM ( - SELECT DISTINCT [c0].[Value2] - FROM ( - SELECT [p1].[Id], [p1].[Child1Id], [p1].[Child2Id], [p1].[ChildFilter1Id], [p1].[ChildFilter2Id], 1 AS [Key] - FROM [Parents] AS [p1] - ) AS [t3] - LEFT JOIN [Child2] AS [c0] ON [t3].[Child2Id] = [c0].[Id] - WHERE [t].[Key] = [t3].[Key] - ) AS [t2]) AS [Test2] -FROM ( - SELECT 1 AS [Key] - FROM [Parents] AS [p] -) AS [t] -GROUP BY [t].[Key] -"""); - } - - public override async Task Group_by_multiple_aggregate_joining_different_tables_with_query_filter(bool async) - { - await base.Group_by_multiple_aggregate_joining_different_tables_with_query_filter(async); - - AssertSql( -""" -SELECT ( - SELECT COUNT(*) - FROM ( - SELECT DISTINCT [t2].[Value1] - FROM ( - SELECT [p0].[Id], [p0].[Child1Id], [p0].[Child2Id], [p0].[ChildFilter1Id], [p0].[ChildFilter2Id], 1 AS [Key] - FROM [Parents] AS [p0] - ) AS [t0] - LEFT JOIN ( - SELECT [c].[Id], [c].[Filter1], [c].[Value1] - FROM [ChildFilter1] AS [c] - WHERE [c].[Filter1] = N'Filter1' - ) AS [t2] ON [t0].[ChildFilter1Id] = [t2].[Id] - WHERE [t].[Key] = [t0].[Key] - ) AS [t1]) AS [Test1], ( - SELECT COUNT(*) - FROM ( - SELECT DISTINCT [t5].[Value2] - FROM ( - SELECT [p1].[Id], [p1].[Child1Id], [p1].[Child2Id], [p1].[ChildFilter1Id], [p1].[ChildFilter2Id], 1 AS [Key] - FROM [Parents] AS [p1] - ) AS [t4] - LEFT JOIN ( - SELECT [c0].[Id], [c0].[Filter2], [c0].[Value2] - FROM [ChildFilter2] AS [c0] - WHERE [c0].[Filter2] = N'Filter2' - ) AS [t5] ON [t4].[ChildFilter2Id] = [t5].[Id] - WHERE [t].[Key] = [t4].[Key] - ) AS [t3]) AS [Test2] -FROM ( - SELECT 1 AS [Key] - FROM [Parents] AS [p] -) AS [t] -GROUP BY [t].[Key] -"""); - } - - public override async Task Subquery_first_member_compared_to_null(bool async) - { - await base.Subquery_first_member_compared_to_null(async); - - AssertSql( -""" -SELECT ( - SELECT TOP 1 `c1`.`SomeOtherNullableDateTime` - FROM `Child26744` AS `c1` - WHERE `p`.`Id` = `c1`.`ParentId` AND `c1`.`SomeNullableDateTime` IS NULL - ORDER BY `c1`.`SomeInteger`) -FROM `Parents` AS `p` -WHERE EXISTS ( - SELECT 1 - FROM `Child26744` AS `c` - WHERE `p`.`Id` = `c`.`ParentId` AND `c`.`SomeNullableDateTime` IS NULL) AND ( - SELECT TOP 1 `c0`.`SomeOtherNullableDateTime` - FROM `Child26744` AS `c0` - WHERE `p`.`Id` = `c0`.`ParentId` AND `c0`.`SomeNullableDateTime` IS NULL - ORDER BY `c0`.`SomeInteger`) IS NOT NULL -"""); - } - - public override async Task SelectMany_where_Select(bool async) - { - await base.SelectMany_where_Select(async); - - AssertSql( -""" -SELECT [t0].[SomeNullableDateTime] -FROM [Parents] AS [p] -INNER JOIN ( - SELECT [t].[ParentId], [t].[SomeNullableDateTime], [t].[SomeOtherNullableDateTime] - FROM ( - SELECT [c].[ParentId], [c].[SomeNullableDateTime], [c].[SomeOtherNullableDateTime], ROW_NUMBER() OVER(PARTITION BY [c].[ParentId] ORDER BY [c].[SomeInteger]) AS [row] - FROM [Child26744] AS [c] - WHERE [c].[SomeNullableDateTime] IS NULL - ) AS [t] - WHERE [t].[row] <= 1 -) AS [t0] ON [p].[Id] = [t0].[ParentId] -WHERE [t0].[SomeOtherNullableDateTime] IS NOT NULL -"""); - } - - public override async Task StoreType_for_UDF_used(bool async) - { - await base.StoreType_for_UDF_used(async); - - AssertSql( -$""" -@__date_0='2012-12-12T00:00:00.0000000' (DbType = DateTime) - -SELECT `m`.`Id`, `m`.`SomeDate` -FROM `MyEntities` AS `m` -WHERE `m`.`SomeDate` = CDATE({AssertSqlHelper.Parameter("@__date_0")}) -""", -// -$""" -@__date_0='2012-12-12T00:00:00.0000000' (DbType = DateTime) - -SELECT `m`.`Id`, `m`.`SomeDate` -FROM `MyEntities` AS `m` -WHERE `dbo`.`ModifyDate`(`m`.`SomeDate`) = CDATE({AssertSqlHelper.Parameter("@__date_0")}) -"""); - } - - public override async Task Pushdown_does_not_add_grouping_key_to_projection_when_distinct_is_applied(bool async) - { - await base.Pushdown_does_not_add_grouping_key_to_projection_when_distinct_is_applied(async); - - AssertSql( -""" -SELECT TOP 123456 `t`.`JSON` -FROM `TableData` AS `t` -INNER JOIN ( - SELECT DISTINCT `i`.`Parcel` - FROM `IndexData` AS `i` - WHERE `i`.`Parcel` = 'some condition' - GROUP BY `i`.`Parcel`, `i`.`RowId` - HAVING COUNT(*) = 1 -) AS `t0` ON `t`.`ParcelNumber` = `t0`.`Parcel` -WHERE `t`.`TableId` = 123 -ORDER BY `t`.`ParcelNumber` -"""); - } - - public override async Task Hierarchy_query_with_abstract_type_sibling(bool async) - { - await base.Hierarchy_query_with_abstract_type_sibling(async); - - AssertSql( -""" -SELECT `a`.`Id`, `a`.`Discriminator`, `a`.`Species`, `a`.`Name`, `a`.`EdcuationLevel`, `a`.`FavoriteToy` -FROM `Animals` AS `a` -WHERE `a`.`Discriminator` IN ('Cat', 'Dog') AND (`a`.`Species` LIKE 'F%') -"""); - } - - public override async Task Hierarchy_query_with_abstract_type_sibling_TPT(bool async) - { - await base.Hierarchy_query_with_abstract_type_sibling_TPT(async); - - AssertSql( -""" -SELECT `a`.`Id`, `a`.`Species`, `p`.`Name`, `c`.`EdcuationLevel`, `d`.`FavoriteToy`, IIF(`d`.`Id` IS NOT NULL, 'Dog', IIF(`c`.`Id` IS NOT NULL, 'Cat', NULL)) AS `Discriminator` -FROM ((`Animals` AS `a` -LEFT JOIN `Pets` AS `p` ON `a`.`Id` = `p`.`Id`) -LEFT JOIN `Cats` AS `c` ON `a`.`Id` = `c`.`Id`) -LEFT JOIN `Dogs` AS `d` ON `a`.`Id` = `d`.`Id` -WHERE (`d`.`Id` IS NOT NULL OR `c`.`Id` IS NOT NULL) AND (`a`.`Species` LIKE 'F%') -"""); - } - - public override async Task Hierarchy_query_with_abstract_type_sibling_TPC(bool async) - { - await base.Hierarchy_query_with_abstract_type_sibling_TPC(async); - - AssertSql( -""" -SELECT `t`.`Id`, `t`.`Species`, `t`.`Name`, `t`.`EdcuationLevel`, `t`.`FavoriteToy`, `t`.`Discriminator` -FROM ( - SELECT `c`.`Id`, `c`.`Species`, `c`.`Name`, `c`.`EdcuationLevel`, NULL AS `FavoriteToy`, 'Cat' AS `Discriminator` - FROM `Cats` AS `c` - UNION ALL - SELECT `d`.`Id`, `d`.`Species`, `d`.`Name`, NULL AS `EdcuationLevel`, `d`.`FavoriteToy`, 'Dog' AS `Discriminator` - FROM `Dogs` AS `d` -) AS `t` -WHERE `t`.`Species` LIKE 'F%' -"""); - } - - [ConditionalTheory] - [MemberData(nameof(IsAsyncData))] - public virtual async Task Muliple_occurrences_of_FromSql_in_group_by_aggregate(bool async) - { - var contextFactory = await InitializeAsync(); - using var context = contextFactory.CreateContext(); - - var parameter = TestEnvironment.DataAccessProviderFactory.CreateParameter(); - if (parameter is OdbcParameter odbcParameter) - { - odbcParameter.Value = 1; - odbcParameter.OdbcType = OdbcType.Int;//Looks like odbcparameter doesnt automatically infer the type - } - else if (parameter is OleDbParameter oleDbParameter) - { - oleDbParameter.Value = 1; - } - - var query = context.DemoEntities - .FromSqlRaw("SELECT * FROM DemoEntities WHERE Id = {0}", parameter) - .Select(e => e.Id); - - var query2 = context.DemoEntities - .Where(e => query.Contains(e.Id)) - .GroupBy(e => e.Id) - .Select(g => new { g.Key, Aggregate = g.Count() }); - - if (async) - { - await query2.ToListAsync(); - } - else - { - query2.ToList(); - } - - AssertSql( -$""" -p0='1' - -SELECT `d`.`Id` AS `Key`, COUNT(*) AS `Aggregate` -FROM `DemoEntities` AS `d` -WHERE `d`.`Id` IN ( - SELECT `e`.`Id` - FROM ( - SELECT * FROM DemoEntities WHERE Id = {AssertSqlHelper.Parameter("@p0")} - ) AS `e` -) -GROUP BY `d`.`Id` -"""); - } - - protected class Context27427 : DbContext - { - public Context27427(DbContextOptions options) - : base(options) - { - } - - public DbSet DemoEntities { get; set; } - } - - protected class DemoEntity - { - public int Id { get; set; } - } -} diff --git a/test/EFCore.Jet.FunctionalTests/Query/SqlExecutorJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/SqlExecutorJetTest.cs index 815b005f..4bf82a96 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/SqlExecutorJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/SqlExecutorJetTest.cs @@ -11,13 +11,13 @@ using Xunit.Abstractions; using Microsoft.EntityFrameworkCore; using Xunit; - +#nullable disable namespace EntityFrameworkCore.Jet.FunctionalTests.Query { - public class SqlExecutorJetTest : SqlExecutorTestBase> + public class SqlExecutorJetTest : SqlExecutorTestBase> { // ReSharper disable once UnusedParameter.Local - public SqlExecutorJetTest(NorthwindQueryJetFixture fixture, ITestOutputHelper testOutputHelper) + public SqlExecutorJetTest(NorthwindQueryJetFixture fixture, ITestOutputHelper testOutputHelper) : base(fixture) { Fixture.TestSqlLoggerFactory.Clear(); diff --git a/test/EFCore.Jet.FunctionalTests/Query/SqlQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/SqlQueryJetTest.cs index fa753733..a37ae7d8 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/SqlQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/SqlQueryJetTest.cs @@ -12,7 +12,7 @@ using Microsoft.EntityFrameworkCore.TestUtilities; using Xunit; using Xunit.Abstractions; - +#nullable disable namespace EntityFrameworkCore.Jet.FunctionalTests.Query; public class SqlQueryJetTest : SqlQueryTestBase> diff --git a/test/EFCore.Jet.FunctionalTests/Query/TPCFiltersInheritanceQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/TPCFiltersInheritanceQueryJetTest.cs index 286318a2..9370612c 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/TPCFiltersInheritanceQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/TPCFiltersInheritanceQueryJetTest.cs @@ -31,16 +31,16 @@ public override async Task Can_use_of_type_animal(bool async) AssertSql( """ -SELECT `t`.`Id`, `t`.`CountryId`, `t`.`Name`, `t`.`Species`, `t`.`EagleId`, `t`.`IsFlightless`, `t`.`Group`, `t`.`FoundOn`, `t`.`Discriminator` +SELECT `u`.`Id`, `u`.`CountryId`, `u`.`Name`, `u`.`Species`, `u`.`EagleId`, `u`.`IsFlightless`, `u`.`Group`, `u`.`FoundOn`, `u`.`Discriminator` FROM ( SELECT `e`.`Id`, `e`.`CountryId`, `e`.`Name`, `e`.`Species`, `e`.`EagleId`, `e`.`IsFlightless`, `e`.`Group`, CVar(NULL) AS `FoundOn`, 'Eagle' AS `Discriminator` FROM `Eagle` AS `e` UNION ALL SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, CVar(NULL) AS `Group`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` FROM `Kiwi` AS `k` -) AS `t` -WHERE `t`.`CountryId` = 1 -ORDER BY `t`.`Species` +) AS `u` +WHERE `u`.`CountryId` = 1 +ORDER BY `u`.`Species` """); } @@ -50,12 +50,12 @@ public override async Task Can_use_is_kiwi(bool async) AssertSql( """ -SELECT `t`.`Id`, `t`.`CountryId`, `t`.`Name`, `t`.`Species`, `t`.`EagleId`, `t`.`IsFlightless`, `t`.`Group`, `t`.`FoundOn`, `t`.`Discriminator` +SELECT `u`.`Id`, `u`.`CountryId`, `u`.`Name`, `u`.`Species`, `u`.`EagleId`, `u`.`IsFlightless`, `u`.`Group`, `u`.`FoundOn`, `u`.`Discriminator` FROM ( SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, CVar(NULL) AS `Group`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` FROM `Kiwi` AS `k` -) AS `t` -WHERE `t`.`CountryId` = 1 +) AS `u` +WHERE `u`.`CountryId` = 1 """); } @@ -65,15 +65,15 @@ public override async Task Can_use_is_kiwi_with_other_predicate(bool async) AssertSql( """ -SELECT `t`.`Id`, `t`.`CountryId`, `t`.`Name`, `t`.`Species`, `t`.`EagleId`, `t`.`IsFlightless`, `t`.`Group`, `t`.`FoundOn`, `t`.`Discriminator` +SELECT `u`.`Id`, `u`.`CountryId`, `u`.`Name`, `u`.`Species`, `u`.`EagleId`, `u`.`IsFlightless`, `u`.`Group`, `u`.`FoundOn`, `u`.`Discriminator` FROM ( SELECT `e`.`Id`, `e`.`CountryId`, `e`.`Name`, `e`.`Species`, `e`.`EagleId`, `e`.`IsFlightless`, `e`.`Group`, CVar(NULL) AS `FoundOn`, 'Eagle' AS `Discriminator` FROM `Eagle` AS `e` UNION ALL SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, CVar(NULL) AS `Group`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` FROM `Kiwi` AS `k` -) AS `t` -WHERE `t`.`CountryId` = 1 AND `t`.`Discriminator` = 'Kiwi' AND `t`.`CountryId` = 1 +) AS `u` +WHERE `u`.`CountryId` = 1 AND `u`.`Discriminator` = 'Kiwi' AND `u`.`CountryId` = 1 """); } @@ -83,15 +83,15 @@ public override async Task Can_use_is_kiwi_in_projection(bool async) AssertSql( """ -SELECT IIF(`t`.`Discriminator` = 'Kiwi', TRUE, FALSE) +SELECT IIF(`u`.`Discriminator` = 'Kiwi', TRUE, FALSE) FROM ( SELECT `e`.`CountryId`, 'Eagle' AS `Discriminator` FROM `Eagle` AS `e` UNION ALL SELECT `k`.`CountryId`, 'Kiwi' AS `Discriminator` FROM `Kiwi` AS `k` -) AS `t` -WHERE `t`.`CountryId` = 1 +) AS `u` +WHERE `u`.`CountryId` = 1 """); } @@ -101,16 +101,16 @@ public override async Task Can_use_of_type_bird(bool async) AssertSql( """ -SELECT `t`.`Id`, `t`.`CountryId`, `t`.`Name`, `t`.`Species`, `t`.`EagleId`, `t`.`IsFlightless`, `t`.`Group`, `t`.`FoundOn`, `t`.`Discriminator` +SELECT `u`.`Id`, `u`.`CountryId`, `u`.`Name`, `u`.`Species`, `u`.`EagleId`, `u`.`IsFlightless`, `u`.`Group`, `u`.`FoundOn`, `u`.`Discriminator` FROM ( SELECT `e`.`Id`, `e`.`CountryId`, `e`.`Name`, `e`.`Species`, `e`.`EagleId`, `e`.`IsFlightless`, `e`.`Group`, CVar(NULL) AS `FoundOn`, 'Eagle' AS `Discriminator` FROM `Eagle` AS `e` UNION ALL SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, CVar(NULL) AS `Group`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` FROM `Kiwi` AS `k` -) AS `t` -WHERE `t`.`CountryId` = 1 -ORDER BY `t`.`Species` +) AS `u` +WHERE `u`.`CountryId` = 1 +ORDER BY `u`.`Species` """); } @@ -120,16 +120,16 @@ public override async Task Can_use_of_type_bird_predicate(bool async) AssertSql( """ -SELECT `t`.`Id`, `t`.`CountryId`, `t`.`Name`, `t`.`Species`, `t`.`EagleId`, `t`.`IsFlightless`, `t`.`Group`, `t`.`FoundOn`, `t`.`Discriminator` +SELECT `u`.`Id`, `u`.`CountryId`, `u`.`Name`, `u`.`Species`, `u`.`EagleId`, `u`.`IsFlightless`, `u`.`Group`, `u`.`FoundOn`, `u`.`Discriminator` FROM ( SELECT `e`.`Id`, `e`.`CountryId`, `e`.`Name`, `e`.`Species`, `e`.`EagleId`, `e`.`IsFlightless`, `e`.`Group`, CVar(NULL) AS `FoundOn`, 'Eagle' AS `Discriminator` FROM `Eagle` AS `e` UNION ALL SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, CVar(NULL) AS `Group`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` FROM `Kiwi` AS `k` -) AS `t` -WHERE `t`.`CountryId` = 1 -ORDER BY `t`.`Species` +) AS `u` +WHERE `u`.`CountryId` = 1 +ORDER BY `u`.`Species` """); } @@ -139,15 +139,15 @@ public override async Task Can_use_of_type_bird_with_projection(bool async) AssertSql( """ -SELECT `t`.`Name` +SELECT `u`.`Name` FROM ( SELECT `e`.`CountryId`, `e`.`Name` FROM `Eagle` AS `e` UNION ALL SELECT `k`.`CountryId`, `k`.`Name` FROM `Kiwi` AS `k` -) AS `t` -WHERE `t`.`CountryId` = 1 +) AS `u` +WHERE `u`.`CountryId` = 1 """); } @@ -157,16 +157,16 @@ public override async Task Can_use_of_type_bird_first(bool async) AssertSql( """ -SELECT TOP 1 `t`.`Id`, `t`.`CountryId`, `t`.`Name`, `t`.`Species`, `t`.`EagleId`, `t`.`IsFlightless`, `t`.`Group`, `t`.`FoundOn`, `t`.`Discriminator` +SELECT TOP 1 `u`.`Id`, `u`.`CountryId`, `u`.`Name`, `u`.`Species`, `u`.`EagleId`, `u`.`IsFlightless`, `u`.`Group`, `u`.`FoundOn`, `u`.`Discriminator` FROM ( SELECT `e`.`Id`, `e`.`CountryId`, `e`.`Name`, `e`.`Species`, `e`.`EagleId`, `e`.`IsFlightless`, `e`.`Group`, CVar(NULL) AS `FoundOn`, 'Eagle' AS `Discriminator` FROM `Eagle` AS `e` UNION ALL SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, CVar(NULL) AS `Group`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` FROM `Kiwi` AS `k` -) AS `t` -WHERE `t`.`CountryId` = 1 -ORDER BY `t`.`Species` +) AS `u` +WHERE `u`.`CountryId` = 1 +ORDER BY `u`.`Species` """); } @@ -176,12 +176,12 @@ public override async Task Can_use_of_type_kiwi(bool async) AssertSql( """ -SELECT `t`.`Id`, `t`.`CountryId`, `t`.`Name`, `t`.`Species`, `t`.`EagleId`, `t`.`IsFlightless`, `t`.`FoundOn`, `t`.`Discriminator` +SELECT `u`.`Id`, `u`.`CountryId`, `u`.`Name`, `u`.`Species`, `u`.`EagleId`, `u`.`IsFlightless`, `u`.`FoundOn`, `u`.`Discriminator` FROM ( SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` FROM `Kiwi` AS `k` -) AS `t` -WHERE `t`.`CountryId` = 1 +) AS `u` +WHERE `u`.`CountryId` = 1 """); } diff --git a/test/EFCore.Jet.FunctionalTests/Query/TPCGearsOfWarQueryJetFixture.cs b/test/EFCore.Jet.FunctionalTests/Query/TPCGearsOfWarQueryJetFixture.cs index 0fa7d858..b0f330c3 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/TPCGearsOfWarQueryJetFixture.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/TPCGearsOfWarQueryJetFixture.cs @@ -1,6 +1,8 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. +using System; +using System.Threading.Tasks; using EntityFrameworkCore.Jet.FunctionalTests.TestUtilities; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Query; @@ -21,7 +23,7 @@ protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext con modelBuilder.Entity().Property(g => g.Location).HasColumnType("varchar(100)"); } - protected override void Seed(GearsOfWarContext context) + protected override async Task SeedAsync(GearsOfWarContext context) { // 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`"); @@ -43,6 +45,18 @@ protected override void Seed(GearsOfWarContext context) { mission.Timeline = mission.Timeline.AddYears(100); } + if (mission.Date.Year < 100) + { + mission.Date = mission.Date.AddYears(100); + } + } + + foreach (var tag in tags) + { + if (tag.IssueDate.Year < 100) + { + tag.IssueDate = tag.IssueDate.AddYears(100); + } } GearsOfWarData.WireUp( @@ -58,11 +72,11 @@ protected override void Seed(GearsOfWarContext context) context.LocustLeaders.AddRange(locustLeaders); context.Factions.AddRange(factions); context.LocustHighCommands.AddRange(locustHighCommands); - context.SaveChanges(); + await context.SaveChangesAsync(); GearsOfWarData.WireUp2(locustLeaders, factions); - context.SaveChanges(); + await context.SaveChangesAsync(); } public override ISetSource GetExpectedData() @@ -75,7 +89,20 @@ public override ISetSource GetExpectedData() { mission.Timeline = mission.Timeline.AddYears(100); } + if (mission.Date.Year < 100) + { + mission.Date = mission.Date.AddYears(100); + } mission.Timeline = JetTestHelpers.GetExpectedValue(mission.Timeline); + mission.Duration = new TimeSpan(mission.Duration.Days, mission.Duration.Hours, mission.Duration.Minutes, mission.Duration.Seconds); + } + + foreach (var tag in data.Tags) + { + if (tag.IssueDate.Year < 100) + { + tag.IssueDate = tag.IssueDate.AddYears(100); + } } return data; diff --git a/test/EFCore.Jet.FunctionalTests/Query/TPCGearsOfWarQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/TPCGearsOfWarQueryJetTest.cs index 4483042c..adc080c4 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/TPCGearsOfWarQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/TPCGearsOfWarQueryJetTest.cs @@ -25,27 +25,35 @@ public TPCGearsOfWarQueryJetTest(TPCGearsOfWarQueryJetFixture fixture, ITestOutp Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); } - protected override bool CanExecuteQueryString - => false; - [ConditionalFact] public virtual void Check_all_tests_overridden() => TestHelpers.AssertAllMethodsOverridden(GetType()); + public override async Task Non_string_concat_uses_appropriate_type_mapping(bool async) + { + await base.Non_string_concat_uses_appropriate_type_mapping(async); + + AssertSql( + """ +SELECT `m`.`Duration` +FROM `Missions` AS `m` +"""); + } + public override async Task Entity_equality_empty(bool async) { await base.Entity_equality_empty(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` +) AS `u` WHERE 0 = 1 """); } @@ -55,8 +63,8 @@ public override async Task Include_multiple_one_to_one_and_one_to_many(bool asyn await base.Include_multiple_one_to_one_and_one_to_many(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note`, `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM (`Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` @@ -64,9 +72,9 @@ 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`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId`) -LEFT JOIN `Weapons` AS `w` ON `t0`.`FullName` = `w`.`OwnerFullName` -ORDER BY `t`.`Id`, `t0`.`Nickname`, `t0`.`SquadId` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId`) +LEFT JOIN `Weapons` AS `w` ON `u`.`FullName` = `w`.`OwnerFullName` +ORDER BY `t`.`Id`, `u`.`Nickname`, `u`.`SquadId` """); } @@ -75,8 +83,8 @@ public override async Task Include_multiple_one_to_one_optional_and_one_to_one_r await base.Include_multiple_one_to_one_optional_and_one_to_one_required(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator`, `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name` + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note`, `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name` FROM (`Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` @@ -84,8 +92,8 @@ 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`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId`) -LEFT JOIN `Squads` AS `s` ON `t0`.`SquadId` = `s`.`Id` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId`) +LEFT JOIN `Squads` AS `s` ON `u`.`SquadId` = `s`.`Id` """); } @@ -94,24 +102,24 @@ public override async Task Include_multiple_circular(bool async) await base.Include_multiple_circular(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `c`.`Name`, `c`.`Location`, `c`.`Nation`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `c`.`Name`, `c`.`Location`, `c`.`Nation`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` FROM (( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` -INNER JOIN `Cities` AS `c` ON `t`.`CityOfBirthName` = `c`.`Name`) +) AS `u` +INNER JOIN `Cities` AS `c` ON `u`.`CityOfBirthName` = `c`.`Name`) LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g0` UNION ALL SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` FROM `Officers` AS `o0` -) AS `t0` ON `c`.`Name` = `t0`.`AssignedCityName` -ORDER BY `t`.`Nickname`, `t`.`SquadId`, `c`.`Name`, `t0`.`Nickname` +) AS `u0` ON `c`.`Name` = `u0`.`AssignedCityName` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `c`.`Name`, `u0`.`Nickname` """); } @@ -120,25 +128,25 @@ public override async Task Include_multiple_circular_with_filter(bool async) await base.Include_multiple_circular_with_filter(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `c`.`Name`, `c`.`Location`, `c`.`Nation`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `c`.`Name`, `c`.`Location`, `c`.`Nation`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` FROM (( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` -INNER JOIN `Cities` AS `c` ON `t`.`CityOfBirthName` = `c`.`Name`) +) AS `u` +INNER JOIN `Cities` AS `c` ON `u`.`CityOfBirthName` = `c`.`Name`) LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g0` UNION ALL SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` FROM `Officers` AS `o0` -) AS `t0` ON `c`.`Name` = `t0`.`AssignedCityName` -WHERE `t`.`Nickname` = 'Marcus' -ORDER BY `t`.`Nickname`, `t`.`SquadId`, `c`.`Name`, `t0`.`Nickname` +) AS `u0` ON `c`.`Name` = `u0`.`AssignedCityName` +WHERE `u`.`Nickname` = 'Marcus' +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `c`.`Name`, `u0`.`Nickname` """); } @@ -147,18 +155,18 @@ public override async Task Include_using_alternate_key(bool async) await base.Include_using_alternate_key(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` -LEFT JOIN `Weapons` AS `w` ON `t`.`FullName` = `w`.`OwnerFullName` -WHERE `t`.`Nickname` = 'Marcus' -ORDER BY `t`.`Nickname`, `t`.`SquadId` +) AS `u` +LEFT JOIN `Weapons` AS `w` ON `u`.`FullName` = `w`.`OwnerFullName` +WHERE `u`.`Nickname` = 'Marcus' +ORDER BY `u`.`Nickname`, `u`.`SquadId` """); } @@ -168,19 +176,19 @@ public override async Task Include_navigation_on_derived_type(bool async) AssertSql( """ -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator` +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` FROM ( 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 `t` +) AS `u` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` UNION ALL SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` FROM `Officers` AS `o0` -) AS `t0` ON `t`.`Nickname` = `t0`.`LeaderNickname` AND `t`.`SquadId` = `t0`.`LeaderSquadId` -ORDER BY `t`.`Nickname`, `t`.`SquadId`, `t0`.`Nickname` +) AS `u0` ON `u`.`Nickname` = `u0`.`LeaderNickname` AND `u`.`SquadId` = `u0`.`LeaderSquadId` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `u0`.`Nickname` """); } @@ -189,20 +197,20 @@ public override async Task String_based_Include_navigation_on_derived_type(bool await base.String_based_Include_navigation_on_derived_type(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` FROM ( 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 `t` +) AS `u` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` UNION ALL SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` FROM `Officers` AS `o0` -) AS `t0` ON `t`.`Nickname` = `t0`.`LeaderNickname` AND `t`.`SquadId` = `t0`.`LeaderSquadId` -ORDER BY `t`.`Nickname`, `t`.`SquadId`, `t0`.`Nickname` +) AS `u0` ON `u`.`Nickname` = `u0`.`LeaderNickname` AND `u`.`SquadId` = `u0`.`LeaderSquadId` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `u0`.`Nickname` """); } @@ -211,8 +219,8 @@ public override async Task Select_Where_Navigation_Included(bool async) await base.Select_Where_Navigation_Included(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator` + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note`, `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM `Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` @@ -220,8 +228,8 @@ 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`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` -WHERE `t0`.`Nickname` = 'Marcus' +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE `u`.`Nickname` = 'Marcus' """); } @@ -230,17 +238,17 @@ public override async Task Include_with_join_reference1(bool async) await base.Include_with_join_reference1(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `c`.`Name`, `c`.`Location`, `c`.`Nation` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `c`.`Name`, `c`.`Location`, `c`.`Nation` FROM (( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` -INNER JOIN `Tags` AS `t0` ON `t`.`SquadId` = `t0`.`GearSquadId` AND `t`.`Nickname` = `t0`.`GearNickName`) -INNER JOIN `Cities` AS `c` ON `t`.`CityOfBirthName` = `c`.`Name` +) AS `u` +INNER JOIN `Tags` AS `t` ON `u`.`SquadId` = `t`.`GearSquadId` AND `u`.`Nickname` = `t`.`GearNickName`) +INNER JOIN `Cities` AS `c` ON `u`.`CityOfBirthName` = `c`.`Name` """); } @@ -249,8 +257,8 @@ public override async Task Include_with_join_reference2(bool async) await base.Include_with_join_reference2(async); AssertSql( -""" -SELECT `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator`, `c`.`Name`, `c`.`Location`, `c`.`Nation` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `c`.`Name`, `c`.`Location`, `c`.`Nation` FROM (`Tags` AS `t` INNER JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` @@ -258,9 +266,9 @@ INNER 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`.`GearSquadId` = `t0`.`SquadId` AND `t`.`GearNickName` = `t0`.`Nickname`) -LEFT JOIN `Cities` AS `c` ON `t0`.`CityOfBirthName` = `c`.`Name` -WHERE `t0`.`CityOfBirthName` IS NOT NULL AND `c`.`Name` IS NOT NULL +) AS `u` ON `t`.`GearSquadId` = `u`.`SquadId` AND `t`.`GearNickName` = `u`.`Nickname`) +LEFT JOIN `Cities` AS `c` ON `u`.`CityOfBirthName` = `c`.`Name` +WHERE `u`.`CityOfBirthName` IS NOT NULL AND `c`.`Name` IS NOT NULL """); } @@ -269,18 +277,18 @@ public override async Task Include_with_join_collection1(bool async) await base.Include_with_join_collection1(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `t0`.`Id`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `t`.`Id`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM (( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` -INNER JOIN `Tags` AS `t0` ON `t`.`SquadId` = `t0`.`GearSquadId` AND `t`.`Nickname` = `t0`.`GearNickName`) -LEFT JOIN `Weapons` AS `w` ON `t`.`FullName` = `w`.`OwnerFullName` -ORDER BY `t`.`Nickname`, `t`.`SquadId`, `t0`.`Id` +) AS `u` +INNER JOIN `Tags` AS `t` ON `u`.`SquadId` = `t`.`GearSquadId` AND `u`.`Nickname` = `t`.`GearNickName`) +LEFT JOIN `Weapons` AS `w` ON `u`.`FullName` = `w`.`OwnerFullName` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `t`.`Id` """); } @@ -290,7 +298,7 @@ public override async Task Include_with_join_collection2(bool async) AssertSql( """ -SELECT `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator`, `t`.`Id`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `t`.`Id`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM (`Tags` AS `t` INNER JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` @@ -298,9 +306,9 @@ INNER 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`.`GearSquadId` = `t0`.`SquadId` AND `t`.`GearNickName` = `t0`.`Nickname`) -LEFT JOIN `Weapons` AS `w` ON `t0`.`FullName` = `w`.`OwnerFullName` -ORDER BY `t`.`Id`, `t0`.`Nickname`, `t0`.`SquadId` +) AS `u` ON `t`.`GearSquadId` = `u`.`SquadId` AND `t`.`GearNickName` = `u`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `u`.`FullName` = `w`.`OwnerFullName` +ORDER BY `t`.`Id`, `u`.`Nickname`, `u`.`SquadId` """); } @@ -309,22 +317,22 @@ public override async Task Include_where_list_contains_navigation(bool async) await base.Include_where_list_contains_navigation(async); AssertSql( -""" + """ SELECT `t`.`Id` FROM `Tags` AS `t` """, -// -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `t0`.`Id`, `t0`.`GearNickName`, `t0`.`GearSquadId`, `t0`.`IssueDate`, `t0`.`Note` + // + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` -LEFT JOIN `Tags` AS `t0` ON `t`.`Nickname` = `t0`.`GearNickName` AND `t`.`SquadId` = `t0`.`GearSquadId` -WHERE `t0`.`Id` IS NOT NULL AND `t0`.`Id` IN ('{34c8d86e-a4ac-4be5-827f-584dda348a07}', '{70534e05-782c-4052-8720-c2c54481ce5f}', '{a7be028a-0cf2-448f-ab55-ce8bc5d8cf69}', '{a8ad98f9-e023-4e2a-9a70-c2728455bd34}', '{b39a6fba-9026-4d69-828e-fd7068673e57}', '{df36f493-463f-4123-83f9-6b135deeb7ba}') +) AS `u` +LEFT JOIN `Tags` AS `t` ON `u`.`Nickname` = `t`.`GearNickName` AND `u`.`SquadId` = `t`.`GearSquadId` +WHERE `t`.`Id` IS NOT NULL AND `t`.`Id` IN ('{34c8d86e-a4ac-4be5-827f-584dda348a07}', '{70534e05-782c-4052-8720-c2c54481ce5f}', '{a7be028a-0cf2-448f-ab55-ce8bc5d8cf69}', '{a8ad98f9-e023-4e2a-9a70-c2728455bd34}', '{b39a6fba-9026-4d69-828e-fd7068673e57}', '{df36f493-463f-4123-83f9-6b135deeb7ba}') """); } @@ -333,23 +341,23 @@ public override async Task Include_where_list_contains_navigation2(bool async) await base.Include_where_list_contains_navigation2(async); AssertSql( -""" + """ SELECT `t`.`Id` FROM `Tags` AS `t` """, -// -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `t0`.`Id`, `t0`.`GearNickName`, `t0`.`GearSquadId`, `t0`.`IssueDate`, `t0`.`Note` + // + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` FROM (( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` -INNER JOIN `Cities` AS `c` ON `t`.`CityOfBirthName` = `c`.`Name`) -LEFT JOIN `Tags` AS `t0` ON `t`.`Nickname` = `t0`.`GearNickName` AND `t`.`SquadId` = `t0`.`GearSquadId` -WHERE `c`.`Location` IS NOT NULL AND `t0`.`Id` IN ('{34c8d86e-a4ac-4be5-827f-584dda348a07}', '{70534e05-782c-4052-8720-c2c54481ce5f}', '{a7be028a-0cf2-448f-ab55-ce8bc5d8cf69}', '{a8ad98f9-e023-4e2a-9a70-c2728455bd34}', '{b39a6fba-9026-4d69-828e-fd7068673e57}', '{df36f493-463f-4123-83f9-6b135deeb7ba}') +) AS `u` +INNER JOIN `Cities` AS `c` ON `u`.`CityOfBirthName` = `c`.`Name`) +LEFT JOIN `Tags` AS `t` ON `u`.`Nickname` = `t`.`GearNickName` AND `u`.`SquadId` = `t`.`GearSquadId` +WHERE `c`.`Location` IS NOT NULL AND `t`.`Id` IN ('{34c8d86e-a4ac-4be5-827f-584dda348a07}', '{70534e05-782c-4052-8720-c2c54481ce5f}', '{a7be028a-0cf2-448f-ab55-ce8bc5d8cf69}', '{a8ad98f9-e023-4e2a-9a70-c2728455bd34}', '{b39a6fba-9026-4d69-828e-fd7068673e57}', '{df36f493-463f-4123-83f9-6b135deeb7ba}') """); } @@ -358,22 +366,22 @@ public override async Task Navigation_accessed_twice_outside_and_inside_subquery await base.Navigation_accessed_twice_outside_and_inside_subquery(async); AssertSql( -""" + """ SELECT `t`.`Id` FROM `Tags` AS `t` """, -// -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + // + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` -LEFT JOIN `Tags` AS `t0` ON `t`.`Nickname` = `t0`.`GearNickName` AND `t`.`SquadId` = `t0`.`GearSquadId` -WHERE `t0`.`Id` IS NOT NULL AND `t0`.`Id` IN ('{34c8d86e-a4ac-4be5-827f-584dda348a07}', '{70534e05-782c-4052-8720-c2c54481ce5f}', '{a7be028a-0cf2-448f-ab55-ce8bc5d8cf69}', '{a8ad98f9-e023-4e2a-9a70-c2728455bd34}', '{b39a6fba-9026-4d69-828e-fd7068673e57}', '{df36f493-463f-4123-83f9-6b135deeb7ba}') +) AS `u` +LEFT JOIN `Tags` AS `t` ON `u`.`Nickname` = `t`.`GearNickName` AND `u`.`SquadId` = `t`.`GearSquadId` +WHERE `t`.`Id` IS NOT NULL AND `t`.`Id` IN ('{34c8d86e-a4ac-4be5-827f-584dda348a07}', '{70534e05-782c-4052-8720-c2c54481ce5f}', '{a7be028a-0cf2-448f-ab55-ce8bc5d8cf69}', '{a8ad98f9-e023-4e2a-9a70-c2728455bd34}', '{b39a6fba-9026-4d69-828e-fd7068673e57}', '{df36f493-463f-4123-83f9-6b135deeb7ba}') """); } @@ -382,25 +390,25 @@ public override async Task Include_with_join_multi_level(bool async) await base.Include_with_join_multi_level(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `c`.`Name`, `c`.`Location`, `c`.`Nation`, `t0`.`Id`, `t1`.`Nickname`, `t1`.`SquadId`, `t1`.`AssignedCityName`, `t1`.`CityOfBirthName`, `t1`.`FullName`, `t1`.`HasSoulPatch`, `t1`.`LeaderNickname`, `t1`.`LeaderSquadId`, `t1`.`Rank`, `t1`.`Discriminator` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `c`.`Name`, `c`.`Location`, `c`.`Nation`, `t`.`Id`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` FROM ((( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` -INNER JOIN `Tags` AS `t0` ON `t`.`SquadId` = `t0`.`GearSquadId` AND `t`.`Nickname` = `t0`.`GearNickName`) -INNER JOIN `Cities` AS `c` ON `t`.`CityOfBirthName` = `c`.`Name`) +) AS `u` +INNER JOIN `Tags` AS `t` ON `u`.`SquadId` = `t`.`GearSquadId` AND `u`.`Nickname` = `t`.`GearNickName`) +INNER JOIN `Cities` AS `c` ON `u`.`CityOfBirthName` = `c`.`Name`) LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g0` UNION ALL SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` FROM `Officers` AS `o0` -) AS `t1` ON `c`.`Name` = `t1`.`AssignedCityName` -ORDER BY `t`.`Nickname`, `t`.`SquadId`, `t0`.`Id`, `c`.`Name`, `t1`.`Nickname` +) AS `u0` ON `c`.`Name` = `u0`.`AssignedCityName` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `t`.`Id`, `c`.`Name`, `u0`.`Nickname` """); } @@ -410,14 +418,14 @@ public override async Task Include_with_join_and_inheritance1(bool async) AssertSql( """ -SELECT `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator`, `c`.`Name`, `c`.`Location`, `c`.`Nation` +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `c`.`Name`, `c`.`Location`, `c`.`Nation` FROM (`Tags` AS `t` INNER JOIN ( 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`.`GearSquadId` = `t0`.`SquadId` AND `t`.`GearNickName` = `t0`.`Nickname`) -LEFT JOIN `Cities` AS `c` ON `t0`.`CityOfBirthName` = `c`.`Name` -WHERE `t0`.`CityOfBirthName` IS NOT NULL AND `c`.`Name` IS NOT NULL +) AS `u` ON `t`.`GearSquadId` = `u`.`SquadId` AND `t`.`GearNickName` = `u`.`Nickname`) +LEFT JOIN `Cities` AS `c` ON `u`.`CityOfBirthName` = `c`.`Name` +WHERE `u`.`CityOfBirthName` IS NOT NULL AND `c`.`Name` IS NOT NULL """); } @@ -426,21 +434,21 @@ public override async Task Include_with_join_and_inheritance_with_orderby_before await base.Include_with_join_and_inheritance_with_orderby_before_and_after_include(async); AssertSql( -""" -SELECT `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator`, `t`.`Id`, `t1`.`Nickname`, `t1`.`SquadId`, `t1`.`AssignedCityName`, `t1`.`CityOfBirthName`, `t1`.`FullName`, `t1`.`HasSoulPatch`, `t1`.`LeaderNickname`, `t1`.`LeaderSquadId`, `t1`.`Rank`, `t1`.`Discriminator` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `t`.`Id`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` FROM (`Tags` AS `t` INNER JOIN ( 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`.`GearSquadId` = `t0`.`SquadId` AND `t`.`GearNickName` = `t0`.`Nickname`) +) AS `u` ON `t`.`GearSquadId` = `u`.`SquadId` AND `t`.`GearNickName` = `u`.`Nickname`) LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` UNION ALL SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` FROM `Officers` AS `o0` -) AS `t1` ON `t0`.`Nickname` = `t1`.`LeaderNickname` AND `t0`.`SquadId` = `t1`.`LeaderSquadId` -ORDER BY NOT (`t0`.`HasSoulPatch`), `t0`.`Nickname` DESC, `t`.`Id`, `t0`.`SquadId`, `t1`.`Nickname` +) AS `u0` ON `u`.`Nickname` = `u0`.`LeaderNickname` AND `u`.`SquadId` = `u0`.`LeaderSquadId` +ORDER BY NOT (`u`.`HasSoulPatch`), `u`.`Nickname` DESC, `t`.`Id`, `u`.`SquadId`, `u0`.`Nickname` """); } @@ -449,15 +457,15 @@ public override async Task Include_with_join_and_inheritance2(bool async) await base.Include_with_join_and_inheritance2(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `t0`.`Id`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `t`.`Id`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM (( 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 `t` -INNER JOIN `Tags` AS `t0` ON `t`.`SquadId` = `t0`.`GearSquadId` AND `t`.`Nickname` = `t0`.`GearNickName`) -LEFT JOIN `Weapons` AS `w` ON `t`.`FullName` = `w`.`OwnerFullName` -ORDER BY `t`.`Nickname`, `t`.`SquadId`, `t0`.`Id` +) AS `u` +INNER JOIN `Tags` AS `t` ON `u`.`SquadId` = `t`.`GearSquadId` AND `u`.`Nickname` = `t`.`GearNickName`) +LEFT JOIN `Weapons` AS `w` ON `u`.`FullName` = `w`.`OwnerFullName` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `t`.`Id` """); } @@ -466,21 +474,21 @@ public override async Task Include_with_join_and_inheritance3(bool async) await base.Include_with_join_and_inheritance3(async); AssertSql( -""" -SELECT `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator`, `t`.`Id`, `t1`.`Nickname`, `t1`.`SquadId`, `t1`.`AssignedCityName`, `t1`.`CityOfBirthName`, `t1`.`FullName`, `t1`.`HasSoulPatch`, `t1`.`LeaderNickname`, `t1`.`LeaderSquadId`, `t1`.`Rank`, `t1`.`Discriminator` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `t`.`Id`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` FROM (`Tags` AS `t` INNER JOIN ( 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`.`GearSquadId` = `t0`.`SquadId` AND `t`.`GearNickName` = `t0`.`Nickname`) +) AS `u` ON `t`.`GearSquadId` = `u`.`SquadId` AND `t`.`GearNickName` = `u`.`Nickname`) LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` UNION ALL SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` FROM `Officers` AS `o0` -) AS `t1` ON `t0`.`Nickname` = `t1`.`LeaderNickname` AND `t0`.`SquadId` = `t1`.`LeaderSquadId` -ORDER BY `t`.`Id`, `t0`.`Nickname`, `t0`.`SquadId`, `t1`.`Nickname` +) AS `u0` ON `u`.`Nickname` = `u0`.`LeaderNickname` AND `u`.`SquadId` = `u0`.`LeaderSquadId` +ORDER BY `t`.`Id`, `u`.`Nickname`, `u`.`SquadId`, `u0`.`Nickname` """); } @@ -490,7 +498,7 @@ public override async Task Include_with_nested_navigation_in_order_by(bool async AssertSql( """ -SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM (`Weapons` AS `w` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` @@ -498,9 +506,9 @@ 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 `t` ON `w`.`OwnerFullName` = `t`.`FullName`) -LEFT JOIN `Cities` AS `c` ON `t`.`CityOfBirthName` = `c`.`Name` -WHERE `t`.`Nickname` <> 'Paduk' OR `t`.`Nickname` IS NULL +) AS `u` ON `w`.`OwnerFullName` = `u`.`FullName`) +LEFT JOIN `Cities` AS `c` ON `u`.`CityOfBirthName` = `c`.`Name` +WHERE `u`.`Nickname` <> 'Paduk' OR `u`.`Nickname` IS NULL ORDER BY `c`.`Name`, `w`.`Id` """); } @@ -510,16 +518,16 @@ public override async Task Where_enum(bool async) await base.Where_enum(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` -WHERE `t`.`Rank` = 4 +) AS `u` +WHERE `u`.`Rank` = 4 """); } @@ -586,28 +594,28 @@ public override async Task Where_bitwise_and_enum(bool async) await base.Where_bitwise_and_enum(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` -WHERE (`t`.`Rank` BAND 2) > 0 +) AS `u` +WHERE (`u`.`Rank` BAND 2) > 0 """, -// -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + // + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` -WHERE (`t`.`Rank` BAND 2) = 2 +) AS `u` +WHERE (`u`.`Rank` BAND 2) = 2 """); } @@ -616,40 +624,40 @@ public override async Task Where_bitwise_and_integral(bool async) await base.Where_bitwise_and_integral(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` -WHERE (`t`.`Rank` BAND 1) = 1 +) AS `u` +WHERE (`u`.`Rank` BAND 1) = 1 """, -// -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + // + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` -WHERE (CLNG(`t`.`Rank`) BAND 1) = 1 +) AS `u` +WHERE (CLNG(`u`.`Rank`) BAND 1) = 1 """, -// -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + // + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` -WHERE (CINT(`t`.`Rank`) BAND 1) = 1 +) AS `u` +WHERE (CINT(`u`.`Rank`) BAND 1) = 1 """); } @@ -716,16 +724,16 @@ public override async Task Where_bitwise_or_enum(bool async) await base.Where_bitwise_or_enum(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` -WHERE (`t`.`Rank` BOR 2) > 0 +) AS `u` +WHERE (`u`.`Rank` BOR 2) > 0 """); } @@ -734,16 +742,16 @@ public override async Task Bitwise_projects_values_in_select(bool async) await base.Bitwise_projects_values_in_select(async); AssertSql( -""" -SELECT TOP 1 IIF((`t`.`Rank` BAND 2) = 2, TRUE, FALSE) AS `BitwiseTrue`, IIF((`t`.`Rank` BAND 2) = 4, TRUE, FALSE) AS `BitwiseFalse`, `t`.`Rank` BAND 2 AS `BitwiseValue` + """ +SELECT TOP 1 IIF((`u`.`Rank` BAND 2) = 2, TRUE, FALSE) AS `BitwiseTrue`, IIF((`u`.`Rank` BAND 2) = 4, TRUE, FALSE) AS `BitwiseFalse`, `u`.`Rank` BAND 2 AS `BitwiseValue` FROM ( SELECT `g`.`Rank` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Rank` FROM `Officers` AS `o` -) AS `t` -WHERE (`t`.`Rank` BAND 2) = 2 +) AS `u` +WHERE (`u`.`Rank` BAND 2) = 2 """); } @@ -752,64 +760,64 @@ public override async Task Where_enum_has_flag(bool async) await base.Where_enum_has_flag(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` -WHERE (`t`.`Rank` BAND 2) = 2 +) AS `u` +WHERE (`u`.`Rank` BAND 2) = 2 """, -// -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + // + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` -WHERE (`t`.`Rank` BAND 18) = 18 +) AS `u` +WHERE (`u`.`Rank` BAND 18) = 18 """, -// -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + // + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` -WHERE (`t`.`Rank` BAND 1) = 1 +) AS `u` +WHERE (`u`.`Rank` BAND 1) = 1 """, -// -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + // + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` -WHERE (`t`.`Rank` BAND 1) = 1 +) AS `u` +WHERE (`u`.`Rank` BAND 1) = 1 """, -// -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + // + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` -WHERE (2 BAND `t`.`Rank`) = `t`.`Rank` +) AS `u` +WHERE (2 BAND `u`.`Rank`) = `u`.`Rank` """); } @@ -818,100 +826,100 @@ public override async Task Where_enum_has_flag_subquery(bool async) await base.Where_enum_has_flag_subquery(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` -WHERE (`t`.`Rank` BAND IIF(( - SELECT TOP 1 `t0`.`Rank` +) AS `u` +WHERE (`u`.`Rank` BAND IIF(( + SELECT TOP 1 `u0`.`Rank` FROM ( - SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`Rank` FROM `Gears` AS `g0` UNION ALL - SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`Rank` FROM `Officers` AS `o0` - ) AS `t0` - ORDER BY `t0`.`Nickname`, `t0`.`SquadId`) IS NULL, 0, ( - SELECT TOP 1 `t0`.`Rank` + ) AS `u0` + ORDER BY `u0`.`Nickname`, `u0`.`SquadId`) IS NULL, 0, ( + SELECT TOP 1 `u0`.`Rank` FROM ( - SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`Rank` FROM `Gears` AS `g0` UNION ALL - SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`Rank` FROM `Officers` AS `o0` - ) AS `t0` - ORDER BY `t0`.`Nickname`, `t0`.`SquadId`))) = IIF(( - SELECT TOP 1 `t0`.`Rank` + ) AS `u0` + ORDER BY `u0`.`Nickname`, `u0`.`SquadId`))) = IIF(( + SELECT TOP 1 `u0`.`Rank` FROM ( - SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`Rank` FROM `Gears` AS `g0` UNION ALL - SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`Rank` FROM `Officers` AS `o0` - ) AS `t0` - ORDER BY `t0`.`Nickname`, `t0`.`SquadId`) IS NULL, 0, ( - SELECT TOP 1 `t0`.`Rank` + ) AS `u0` + ORDER BY `u0`.`Nickname`, `u0`.`SquadId`) IS NULL, 0, ( + SELECT TOP 1 `u0`.`Rank` FROM ( - SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`Rank` FROM `Gears` AS `g0` UNION ALL - SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`Rank` FROM `Officers` AS `o0` - ) AS `t0` - ORDER BY `t0`.`Nickname`, `t0`.`SquadId`)) + ) AS `u0` + ORDER BY `u0`.`Nickname`, `u0`.`SquadId`)) """, -// -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + // + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` +) AS `u` WHERE (2 BAND IIF(( - SELECT TOP 1 `t0`.`Rank` + SELECT TOP 1 `u0`.`Rank` FROM ( - SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`Rank` FROM `Gears` AS `g0` UNION ALL - SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`Rank` FROM `Officers` AS `o0` - ) AS `t0` - ORDER BY `t0`.`Nickname`, `t0`.`SquadId`) IS NULL, 0, ( - SELECT TOP 1 `t0`.`Rank` + ) AS `u0` + ORDER BY `u0`.`Nickname`, `u0`.`SquadId`) IS NULL, 0, ( + SELECT TOP 1 `u0`.`Rank` FROM ( - SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`Rank` FROM `Gears` AS `g0` UNION ALL - SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`Rank` FROM `Officers` AS `o0` - ) AS `t0` - ORDER BY `t0`.`Nickname`, `t0`.`SquadId`))) = IIF(( - SELECT TOP 1 `t0`.`Rank` + ) AS `u0` + ORDER BY `u0`.`Nickname`, `u0`.`SquadId`))) = IIF(( + SELECT TOP 1 `u0`.`Rank` FROM ( - SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`Rank` FROM `Gears` AS `g0` UNION ALL - SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`Rank` FROM `Officers` AS `o0` - ) AS `t0` - ORDER BY `t0`.`Nickname`, `t0`.`SquadId`) IS NULL, 0, ( - SELECT TOP 1 `t0`.`Rank` + ) AS `u0` + ORDER BY `u0`.`Nickname`, `u0`.`SquadId`) IS NULL, 0, ( + SELECT TOP 1 `u0`.`Rank` FROM ( - SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`Rank` FROM `Gears` AS `g0` UNION ALL - SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`Rank` FROM `Officers` AS `o0` - ) AS `t0` - ORDER BY `t0`.`Nickname`, `t0`.`SquadId`)) + ) AS `u0` + ORDER BY `u0`.`Nickname`, `u0`.`SquadId`)) """); } @@ -920,82 +928,82 @@ public override async Task Where_enum_has_flag_subquery_with_pushdown(bool async await base.Where_enum_has_flag_subquery_with_pushdown(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` -WHERE (`t`.`Rank` BAND ( - SELECT TOP 1 `t0`.`Rank` +) AS `u` +WHERE (`u`.`Rank` BAND ( + SELECT TOP 1 `u0`.`Rank` FROM ( - SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`Rank` FROM `Gears` AS `g0` UNION ALL - SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`Rank` FROM `Officers` AS `o0` - ) AS `t0` - ORDER BY `t0`.`Nickname`, `t0`.`SquadId`)) = ( - SELECT TOP 1 `t0`.`Rank` + ) AS `u0` + ORDER BY `u0`.`Nickname`, `u0`.`SquadId`)) = ( + SELECT TOP 1 `u0`.`Rank` FROM ( - SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`Rank` FROM `Gears` AS `g0` UNION ALL - SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`Rank` FROM `Officers` AS `o0` - ) AS `t0` - ORDER BY `t0`.`Nickname`, `t0`.`SquadId`) OR ( - SELECT TOP 1 `t0`.`Rank` + ) AS `u0` + ORDER BY `u0`.`Nickname`, `u0`.`SquadId`) OR ( + SELECT TOP 1 `u0`.`Rank` FROM ( - SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`Rank` FROM `Gears` AS `g0` UNION ALL - SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`Rank` FROM `Officers` AS `o0` - ) AS `t0` - ORDER BY `t0`.`Nickname`, `t0`.`SquadId`) IS NULL + ) AS `u0` + ORDER BY `u0`.`Nickname`, `u0`.`SquadId`) IS NULL """, -// -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + // + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` +) AS `u` WHERE (2 BAND ( - SELECT TOP 1 `t0`.`Rank` + SELECT TOP 1 `u0`.`Rank` FROM ( - SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`Rank` FROM `Gears` AS `g0` UNION ALL - SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`Rank` FROM `Officers` AS `o0` - ) AS `t0` - ORDER BY `t0`.`Nickname`, `t0`.`SquadId`)) = ( - SELECT TOP 1 `t0`.`Rank` + ) AS `u0` + ORDER BY `u0`.`Nickname`, `u0`.`SquadId`)) = ( + SELECT TOP 1 `u0`.`Rank` FROM ( - SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`Rank` FROM `Gears` AS `g0` UNION ALL - SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`Rank` FROM `Officers` AS `o0` - ) AS `t0` - ORDER BY `t0`.`Nickname`, `t0`.`SquadId`) OR ( - SELECT TOP 1 `t0`.`Rank` + ) AS `u0` + ORDER BY `u0`.`Nickname`, `u0`.`SquadId`) OR ( + SELECT TOP 1 `u0`.`Rank` FROM ( - SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`Rank` FROM `Gears` AS `g0` UNION ALL - SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`Rank` FROM `Officers` AS `o0` - ) AS `t0` - ORDER BY `t0`.`Nickname`, `t0`.`SquadId`) IS NULL + ) AS `u0` + ORDER BY `u0`.`Nickname`, `u0`.`SquadId`) IS NULL """); } @@ -1004,43 +1012,43 @@ public override async Task Where_enum_has_flag_subquery_client_eval(bool async) await base.Where_enum_has_flag_subquery_client_eval(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` -WHERE (`t`.`Rank` BAND ( - SELECT TOP 1 `t0`.`Rank` +) AS `u` +WHERE (`u`.`Rank` BAND ( + SELECT TOP 1 `u0`.`Rank` FROM ( - SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`Rank` FROM `Gears` AS `g0` UNION ALL - SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`Rank` FROM `Officers` AS `o0` - ) AS `t0` - ORDER BY `t0`.`Nickname`, `t0`.`SquadId`)) = ( - SELECT TOP 1 `t0`.`Rank` + ) AS `u0` + ORDER BY `u0`.`Nickname`, `u0`.`SquadId`)) = ( + SELECT TOP 1 `u0`.`Rank` FROM ( - SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`Rank` FROM `Gears` AS `g0` UNION ALL - SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`Rank` FROM `Officers` AS `o0` - ) AS `t0` - ORDER BY `t0`.`Nickname`, `t0`.`SquadId`) OR ( - SELECT TOP 1 `t0`.`Rank` + ) AS `u0` + ORDER BY `u0`.`Nickname`, `u0`.`SquadId`) OR ( + SELECT TOP 1 `u0`.`Rank` FROM ( - SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`Rank` FROM `Gears` AS `g0` UNION ALL - SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`Rank` FROM `Officers` AS `o0` - ) AS `t0` - ORDER BY `t0`.`Nickname`, `t0`.`SquadId`) IS NULL + ) AS `u0` + ORDER BY `u0`.`Nickname`, `u0`.`SquadId`) IS NULL """); } @@ -1049,19 +1057,19 @@ public override async Task Where_enum_has_flag_with_non_nullable_parameter(bool await base.Where_enum_has_flag_with_non_nullable_parameter(async); AssertSql( -""" + """ @__parameter_0='2' @__parameter_0='2' -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` -WHERE (`t`.`Rank` BAND @__parameter_0) = @__parameter_0 +) AS `u` +WHERE (`u`.`Rank` BAND @__parameter_0) = @__parameter_0 """); } @@ -1070,19 +1078,19 @@ public override async Task Where_has_flag_with_nullable_parameter(bool async) await base.Where_has_flag_with_nullable_parameter(async); AssertSql( -""" + """ @__parameter_0='2' (Nullable = true) @__parameter_0='2' (Nullable = true) -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` -WHERE (`t`.`Rank` BAND @__parameter_0) = @__parameter_0 +) AS `u` +WHERE (`u`.`Rank` BAND @__parameter_0) = @__parameter_0 """); } @@ -1091,16 +1099,16 @@ public override async Task Select_enum_has_flag(bool async) await base.Select_enum_has_flag(async); AssertSql( -""" -SELECT TOP 1 IIF((`t`.`Rank` BAND 2) = 2, TRUE, FALSE) AS `hasFlagTrue`, IIF((`t`.`Rank` BAND 4) = 4, TRUE, FALSE) AS `hasFlagFalse` + """ +SELECT TOP 1 IIF((`u`.`Rank` BAND 2) = 2, TRUE, FALSE) AS `hasFlagTrue`, IIF((`u`.`Rank` BAND 4) = 4, TRUE, FALSE) AS `hasFlagFalse` FROM ( SELECT `g`.`Rank` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Rank` FROM `Officers` AS `o` -) AS `t` -WHERE (`t`.`Rank` BAND 2) = 2 +) AS `u` +WHERE (`u`.`Rank` BAND 2) = 2 """); } @@ -1109,19 +1117,19 @@ public override async Task Where_count_subquery_without_collision(bool async) await base.Where_count_subquery_without_collision(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` +) AS `u` WHERE ( SELECT COUNT(*) FROM `Weapons` AS `w` - WHERE `t`.`FullName` = `w`.`OwnerFullName`) = 2 + WHERE `u`.`FullName` = `w`.`OwnerFullName`) = 2 """); } @@ -1130,19 +1138,19 @@ public override async Task Where_any_subquery_without_collision(bool async) await base.Where_any_subquery_without_collision(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` +) AS `u` WHERE EXISTS ( SELECT 1 FROM `Weapons` AS `w` - WHERE `t`.`FullName` = `w`.`OwnerFullName`) + WHERE `u`.`FullName` = `w`.`OwnerFullName`) """); } @@ -1158,6 +1166,17 @@ public override async Task Select_inverted_boolean(bool async) """); } + public override async Task Select_inverted_nullable_boolean(bool async) + { + await base.Select_inverted_nullable_boolean(async); + + AssertSql( + """ +SELECT [l].[Id], [l].[Eradicated] ^ CAST(1 AS bit) AS [Alive] +FROM [LocustHordes] AS [l] +"""); + } + public override async Task Select_comparison_with_null(bool async) { await base.Select_comparison_with_null(async); @@ -1184,27 +1203,27 @@ public override async Task Select_null_parameter(bool async) await base.Select_null_parameter(async); AssertSql( -""" + """ @__ammunitionType_0='1' (Nullable = true) SELECT `w`.`Id`, @__ammunitionType_0 AS `AmmoType` FROM `Weapons` AS `w` """, -// -""" -SELECT `w`.`Id`, NULL AS `AmmoType` + // + """ +SELECT `w`.`Id`, CVar(NULL) AS `AmmoType` FROM `Weapons` AS `w` """, -// -""" + // + """ @__ammunitionType_0='2' (Nullable = true) SELECT `w`.`Id`, @__ammunitionType_0 AS `AmmoType` FROM `Weapons` AS `w` """, -// -""" -SELECT `w`.`Id`, NULL AS `AmmoType` + // + """ +SELECT `w`.`Id`, CVar(NULL) AS `AmmoType` FROM `Weapons` AS `w` """); } @@ -1292,16 +1311,16 @@ public override async Task Null_propagation_optimization1(bool async) await base.Null_propagation_optimization1(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` -WHERE `t`.`LeaderNickname` = 'Marcus' AND `t`.`LeaderNickname` IS NOT NULL +) AS `u` +WHERE `u`.`LeaderNickname` = 'Marcus' """); } @@ -1311,16 +1330,16 @@ public override async Task Null_propagation_optimization2(bool async) // issue #16050 AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` -WHERE IIF(`t`.`LeaderNickname` IS NULL, NULL, IIF((`t`.`LeaderNickname` LIKE '%us') AND `t`.`LeaderNickname` IS NOT NULL, TRUE, FALSE)) = TRUE +) AS `u` +WHERE IIF(`u`.`LeaderNickname` IS NULL, NULL, IIF((`u`.`LeaderNickname` LIKE '%us') AND `u`.`LeaderNickname` IS NOT NULL, TRUE, FALSE)) = TRUE """); } @@ -1330,16 +1349,16 @@ public override async Task Null_propagation_optimization3(bool async) // issue #16050 AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` -WHERE IIF(`t`.`LeaderNickname` IS NOT NULL, IIF(`t`.`LeaderNickname` LIKE '%us', TRUE, FALSE), NULL) = TRUE +) AS `u` +WHERE IIF(`u`.`LeaderNickname` IS NOT NULL, IIF(`u`.`LeaderNickname` LIKE '%us', TRUE, FALSE), NULL) = TRUE """); } @@ -1349,16 +1368,16 @@ public override async Task Null_propagation_optimization4(bool async) // issue #16050 AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` -WHERE IIF(`t`.`LeaderNickname` IS NULL, NULL, IIF(LEN(`t`.`LeaderNickname`) IS NULL, NULL, CLNG(LEN(`t`.`LeaderNickname`)))) = 5 AND IIF(`t`.`LeaderNickname` IS NULL, NULL, IIF(LEN(`t`.`LeaderNickname`) IS NULL, NULL, CLNG(LEN(`t`.`LeaderNickname`)))) IS NOT NULL +) AS `u` +WHERE IIF(`u`.`LeaderNickname` IS NULL, NULL, IIF(LEN(`u`.`LeaderNickname`) IS NULL, NULL, CLNG(LEN(`u`.`LeaderNickname`)))) = 5 """); } @@ -1368,16 +1387,16 @@ public override async Task Null_propagation_optimization5(bool async) // issue #16050 AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` -WHERE IIF(`t`.`LeaderNickname` IS NOT NULL, IIF(LEN(`t`.`LeaderNickname`) IS NULL, NULL, CLNG(LEN(`t`.`LeaderNickname`))), NULL) = 5 AND IIF(`t`.`LeaderNickname` IS NOT NULL, IIF(LEN(`t`.`LeaderNickname`) IS NULL, NULL, CLNG(LEN(`t`.`LeaderNickname`))), NULL) IS NOT NULL +) AS `u` +WHERE IIF(`u`.`LeaderNickname` IS NOT NULL, IIF(LEN(`u`.`LeaderNickname`) IS NULL, NULL, CLNG(LEN(`u`.`LeaderNickname`))), NULL) = 5 """); } @@ -1387,16 +1406,16 @@ public override async Task Null_propagation_optimization6(bool async) // issue #16050 AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` -WHERE IIF(`t`.`LeaderNickname` IS NOT NULL, IIF(LEN(`t`.`LeaderNickname`) IS NULL, NULL, CLNG(LEN(`t`.`LeaderNickname`))), NULL) = 5 AND IIF(`t`.`LeaderNickname` IS NOT NULL, IIF(LEN(`t`.`LeaderNickname`) IS NULL, NULL, CLNG(LEN(`t`.`LeaderNickname`))), NULL) IS NOT NULL +) AS `u` +WHERE IIF(`u`.`LeaderNickname` IS NOT NULL, IIF(LEN(`u`.`LeaderNickname`) IS NULL, NULL, CLNG(LEN(`u`.`LeaderNickname`))), NULL) = 5 """); } @@ -1406,15 +1425,15 @@ public override async Task Select_null_propagation_optimization7(bool async) // issue #16050 AssertSql( -""" -SELECT IIF(`t`.`LeaderNickname` IS NOT NULL, `t`.`LeaderNickname` & `t`.`LeaderNickname`, NULL) + """ +SELECT IIF(`u`.`LeaderNickname` IS NOT NULL, `u`.`LeaderNickname` & `u`.`LeaderNickname`, NULL) FROM ( SELECT `g`.`LeaderNickname` FROM `Gears` AS `g` UNION ALL SELECT `o`.`LeaderNickname` FROM `Officers` AS `o` -) AS `t` +) AS `u` """); } @@ -1423,15 +1442,15 @@ public override async Task Select_null_propagation_optimization8(bool async) await base.Select_null_propagation_optimization8(async); AssertSql( -""" -SELECT IIF(`t`.`LeaderNickname` IS NULL, '', `t`.`LeaderNickname`) & IIF(`t`.`LeaderNickname` IS NULL, '', `t`.`LeaderNickname`) + """ +SELECT IIF(`u`.`LeaderNickname` IS NULL, '', `u`.`LeaderNickname`) & IIF(`u`.`LeaderNickname` IS NULL, '', `u`.`LeaderNickname`) FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`LeaderNickname` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`LeaderNickname` FROM `Officers` AS `o` -) AS `t` +) AS `u` """); } @@ -1441,14 +1460,14 @@ public override async Task Select_null_propagation_optimization9(bool async) AssertSql( """ -SELECT IIF(LEN(`t`.`FullName`) IS NULL, NULL, CLNG(LEN(`t`.`FullName`))) +SELECT IIF(LEN(`u`.`FullName`) IS NULL, NULL, CLNG(LEN(`u`.`FullName`))) FROM ( SELECT `g`.`FullName` FROM `Gears` AS `g` UNION ALL SELECT `o`.`FullName` FROM `Officers` AS `o` -) AS `t` +) AS `u` """); } @@ -1457,15 +1476,15 @@ public override async Task Select_null_propagation_negative1(bool async) await base.Select_null_propagation_negative1(async); AssertSql( -""" -SELECT IIF(`t`.`LeaderNickname` IS NOT NULL, IIF(IIF(LEN(`t`.`Nickname`) IS NULL, NULL, CLNG(LEN(`t`.`Nickname`))) = 5, TRUE, FALSE), NULL) + """ +SELECT IIF(`u`.`LeaderNickname` IS NOT NULL, IIF(IIF(LEN(`u`.`Nickname`) IS NULL, NULL, CLNG(LEN(`u`.`Nickname`))) = 5, TRUE, FALSE), NULL) FROM ( SELECT `g`.`Nickname`, `g`.`LeaderNickname` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`LeaderNickname` FROM `Officers` AS `o` -) AS `t` +) AS `u` """); } @@ -1474,22 +1493,22 @@ public override async Task Select_null_propagation_negative2(bool async) await base.Select_null_propagation_negative2(async); AssertSql( -""" -SELECT IIF(`t`.`LeaderNickname` IS NOT NULL, `t0`.`LeaderNickname`, NULL) + """ +SELECT IIF(`u`.`LeaderNickname` IS NOT NULL, `u0`.`LeaderNickname`, NULL) FROM ( SELECT `g`.`LeaderNickname` FROM `Gears` AS `g` UNION ALL SELECT `o`.`LeaderNickname` FROM `Officers` AS `o` -) AS `t`, +) AS `u`, ( SELECT `g0`.`LeaderNickname` FROM `Gears` AS `g0` UNION ALL SELECT `o0`.`LeaderNickname` FROM `Officers` AS `o0` -) AS `t0` +) AS `u0` """); } @@ -1585,15 +1604,15 @@ public override async Task Select_null_propagation_negative6(bool async) await base.Select_null_propagation_negative6(async); AssertSql( -""" -SELECT IIF(`t`.`LeaderNickname` IS NOT NULL, IIF(IIF(LEN(`t`.`LeaderNickname`) IS NULL, NULL, CLNG(LEN(`t`.`LeaderNickname`))) <> IIF(LEN(`t`.`LeaderNickname`) IS NULL, NULL, CLNG(LEN(`t`.`LeaderNickname`))), TRUE, FALSE), NULL) + """ +SELECT IIF(`u`.`LeaderNickname` IS NOT NULL, FALSE, NULL) FROM ( SELECT `g`.`LeaderNickname` FROM `Gears` AS `g` UNION ALL SELECT `o`.`LeaderNickname` FROM `Officers` AS `o` -) AS `t` +) AS `u` """); } @@ -1602,15 +1621,15 @@ public override async Task Select_null_propagation_negative7(bool async) await base.Select_null_propagation_negative7(async); AssertSql( -""" -SELECT IIF(`t`.`LeaderNickname` IS NOT NULL, TRUE, NULL) + """ +SELECT IIF(`u`.`LeaderNickname` IS NOT NULL, TRUE, NULL) FROM ( SELECT `g`.`LeaderNickname` FROM `Gears` AS `g` UNION ALL SELECT `o`.`LeaderNickname` FROM `Officers` AS `o` -) AS `t` +) AS `u` """); } @@ -1619,7 +1638,7 @@ public override async Task Select_null_propagation_negative8(bool async) await base.Select_null_propagation_negative8(async); AssertSql( -""" + """ SELECT IIF(`s`.`Id` IS NOT NULL, `c`.`Name`, NULL) FROM ((`Tags` AS `t` LEFT JOIN ( @@ -1628,9 +1647,9 @@ LEFT JOIN ( UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName` FROM `Officers` AS `o` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId`) -LEFT JOIN `Squads` AS `s` ON `t0`.`SquadId` = `s`.`Id`) -LEFT JOIN `Cities` AS `c` ON `t0`.`AssignedCityName` = `c`.`Name` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId`) +LEFT JOIN `Squads` AS `s` ON `u`.`SquadId` = `s`.`Id`) +LEFT JOIN `Cities` AS `c` ON `u`.`AssignedCityName` = `c`.`Name` """); } @@ -1639,15 +1658,15 @@ public override async Task Select_null_propagation_negative9(bool async) await base.Select_null_propagation_negative9(async); AssertSql( -""" -SELECT IIF(`t`.`LeaderNickname` IS NOT NULL, IIF(IIF(IIF(LEN(`t`.`Nickname`) IS NULL, NULL, CLNG(LEN(`t`.`Nickname`))) = 5, TRUE, FALSE) IS NULL, FALSE, IIF(IIF(LEN(`t`.`Nickname`) IS NULL, NULL, CLNG(LEN(`t`.`Nickname`))) = 5, TRUE, FALSE)), NULL) + """ +SELECT IIF(`u`.`LeaderNickname` IS NOT NULL, IIF(IIF(LEN(`u`.`Nickname`) IS NULL, NULL, CLNG(LEN(`u`.`Nickname`))) = 5, TRUE, FALSE), NULL) FROM ( SELECT `g`.`Nickname`, `g`.`LeaderNickname` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`LeaderNickname` FROM `Officers` AS `o` -) AS `t` +) AS `u` """); } @@ -1656,8 +1675,8 @@ public override async Task Select_null_propagation_works_for_navigations_with_co await base.Select_null_propagation_works_for_navigations_with_composite_keys(async); AssertSql( -""" -SELECT `t0`.`Nickname` + """ +SELECT `u`.`Nickname` FROM `Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId` @@ -1665,7 +1684,7 @@ LEFT JOIN ( UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId` FROM `Officers` AS `o` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` """); } @@ -1674,7 +1693,7 @@ public override async Task Select_null_propagation_works_for_multiple_navigation await base.Select_null_propagation_works_for_multiple_navigations_with_composite_keys(async); AssertSql( -""" + """ SELECT IIF(`c`.`Name` IS NOT NULL, `c`.`Name`, NULL) FROM (((`Tags` AS `t` LEFT JOIN ( @@ -1683,16 +1702,16 @@ LEFT JOIN ( UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId` FROM `Officers` AS `o` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `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))) +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId`) +LEFT JOIN `Tags` AS `t0` ON (`u`.`Nickname` = `t0`.`GearNickName` OR (`u`.`Nickname` IS NULL AND `t0`.`GearNickName` IS NULL)) AND (`u`.`SquadId` = `t0`.`GearSquadId` OR (`u`.`SquadId` IS NULL AND `t0`.`GearSquadId` IS NULL))) LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName` FROM `Gears` AS `g0` UNION ALL SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName` FROM `Officers` AS `o0` -) AS `t2` ON `t1`.`GearNickName` = `t2`.`Nickname` AND `t1`.`GearSquadId` = `t2`.`SquadId`) -LEFT JOIN `Cities` AS `c` ON `t2`.`AssignedCityName` = `c`.`Name` +) AS `u0` ON `t0`.`GearNickName` = `u0`.`Nickname` AND `t0`.`GearSquadId` = `u0`.`SquadId`) +LEFT JOIN `Cities` AS `c` ON `u0`.`AssignedCityName` = `c`.`Name` """); } @@ -1701,16 +1720,16 @@ public override async Task Select_conditional_with_anonymous_type_and_null_const await base.Select_conditional_with_anonymous_type_and_null_constant(async); AssertSql( -""" -SELECT IIF(`t`.`LeaderNickname` IS NOT NULL, TRUE, FALSE), `t`.`HasSoulPatch` + """ +SELECT IIF(`u`.`LeaderNickname` IS NOT NULL, TRUE, FALSE), `u`.`HasSoulPatch` FROM ( SELECT `g`.`Nickname`, `g`.`HasSoulPatch`, `g`.`LeaderNickname` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`HasSoulPatch`, `o`.`LeaderNickname` FROM `Officers` AS `o` -) AS `t` -ORDER BY `t`.`Nickname` +) AS `u` +ORDER BY `u`.`Nickname` """); } @@ -1719,16 +1738,16 @@ public override async Task Select_conditional_with_anonymous_types(bool async) await base.Select_conditional_with_anonymous_types(async); AssertSql( -""" -SELECT IIF(`t`.`LeaderNickname` IS NOT NULL, TRUE, FALSE), `t`.`Nickname`, `t`.`FullName` + """ +SELECT IIF(`u`.`LeaderNickname` IS NOT NULL, TRUE, FALSE), `u`.`Nickname`, `u`.`FullName` FROM ( SELECT `g`.`Nickname`, `g`.`FullName`, `g`.`LeaderNickname` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`FullName`, `o`.`LeaderNickname` FROM `Officers` AS `o` -) AS `t` -ORDER BY `t`.`Nickname` +) AS `u` +ORDER BY `u`.`Nickname` """); } @@ -1737,17 +1756,17 @@ public override async Task Where_conditional_equality_1(bool async) await base.Where_conditional_equality_1(async); AssertSql( -""" -SELECT `t`.`Nickname` + """ +SELECT `u`.`Nickname` FROM ( SELECT `g`.`Nickname`, `g`.`HasSoulPatch`, `g`.`LeaderNickname` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`HasSoulPatch`, `o`.`LeaderNickname` FROM `Officers` AS `o` -) AS `t` -WHERE `t`.`LeaderNickname` IS NULL -ORDER BY `t`.`Nickname` +) AS `u` +WHERE `u`.`LeaderNickname` IS NULL +ORDER BY `u`.`Nickname` """); } @@ -1756,17 +1775,17 @@ public override async Task Where_conditional_equality_2(bool async) await base.Where_conditional_equality_2(async); AssertSql( -""" -SELECT `t`.`Nickname` + """ +SELECT `u`.`Nickname` FROM ( SELECT `g`.`Nickname`, `g`.`HasSoulPatch`, `g`.`LeaderNickname` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`HasSoulPatch`, `o`.`LeaderNickname` FROM `Officers` AS `o` -) AS `t` -WHERE `t`.`LeaderNickname` IS NULL -ORDER BY `t`.`Nickname` +) AS `u` +WHERE `u`.`LeaderNickname` IS NULL +ORDER BY `u`.`Nickname` """); } @@ -1775,16 +1794,16 @@ public override async Task Where_conditional_equality_3(bool async) await base.Where_conditional_equality_3(async); AssertSql( -""" -SELECT `t`.`Nickname` + """ +SELECT `u`.`Nickname` FROM ( SELECT `g`.`Nickname`, `g`.`LeaderNickname` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`LeaderNickname` FROM `Officers` AS `o` -) AS `t` -ORDER BY `t`.`Nickname` +) AS `u` +ORDER BY `u`.`Nickname` """); } @@ -1793,16 +1812,16 @@ public override async Task Select_coalesce_with_anonymous_types(bool async) await base.Select_coalesce_with_anonymous_types(async); AssertSql( -""" -SELECT `t`.`LeaderNickname`, `t`.`FullName` + """ +SELECT `u`.`LeaderNickname`, `u`.`FullName` FROM ( SELECT `g`.`Nickname`, `g`.`FullName`, `g`.`LeaderNickname` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`FullName`, `o`.`LeaderNickname` FROM `Officers` AS `o` -) AS `t` -ORDER BY `t`.`Nickname` +) AS `u` +ORDER BY `u`.`Nickname` """); } @@ -1818,16 +1837,16 @@ public override async Task Where_member_access_on_anonymous_type(bool async) await base.Where_member_access_on_anonymous_type(async); AssertSql( -""" -SELECT `t`.`Nickname` + """ +SELECT `u`.`Nickname` FROM ( SELECT `g`.`Nickname`, `g`.`LeaderNickname` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`LeaderNickname` FROM `Officers` AS `o` -) AS `t` -WHERE `t`.`LeaderNickname` = 'Marcus' +) AS `u` +WHERE `u`.`LeaderNickname` = 'Marcus' """); } @@ -1836,15 +1855,15 @@ public override async Task Where_compare_anonymous_types_with_uncorrelated_membe await base.Where_compare_anonymous_types_with_uncorrelated_members(async); AssertSql( -""" -SELECT `t`.`Nickname` + """ +SELECT `u`.`Nickname` FROM ( SELECT `g`.`Nickname` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname` FROM `Officers` AS `o` -) AS `t` +) AS `u` WHERE 0 = 1 """); } @@ -1854,28 +1873,28 @@ public override async Task Select_Where_Navigation_Scalar_Equals_Navigation_Scal await base.Select_Where_Navigation_Scalar_Equals_Navigation_Scalar(async); AssertSql( -""" -SELECT `t1`.`Id`, `t1`.`GearNickName`, `t1`.`GearSquadId`, `t1`.`IssueDate`, `t1`.`Note`, `t1`.`Id0`, `t1`.`GearNickName0`, `t1`.`GearSquadId0`, `t1`.`IssueDate0`, `t1`.`Note0` + """ +SELECT `s`.`Id`, `s`.`GearNickName`, `s`.`GearSquadId`, `s`.`IssueDate`, `s`.`Note`, `s`.`Id0`, `s`.`GearNickName0`, `s`.`GearSquadId0`, `s`.`IssueDate0`, `s`.`Note0` FROM (( SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note`, `t0`.`Id` AS `Id0`, `t0`.`GearNickName` AS `GearNickName0`, `t0`.`GearSquadId` AS `GearSquadId0`, `t0`.`IssueDate` AS `IssueDate0`, `t0`.`Note` AS `Note0` FROM `Tags` AS `t`, `Tags` AS `t0` -) AS `t1` +) AS `s` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId` FROM `Officers` AS `o` -) AS `t2` ON `t1`.`GearNickName` = `t2`.`Nickname` AND `t1`.`GearSquadId` = `t2`.`SquadId`) +) AS `u` ON `s`.`GearNickName` = `u`.`Nickname` AND `s`.`GearSquadId` = `u`.`SquadId`) LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId` FROM `Gears` AS `g0` UNION ALL SELECT `o0`.`Nickname`, `o0`.`SquadId` FROM `Officers` AS `o0` -) AS `t3` ON `t1`.`GearNickName0` = `t3`.`Nickname` AND `t1`.`GearSquadId0` = `t3`.`SquadId` -WHERE `t2`.`Nickname` = `t3`.`Nickname` OR (`t2`.`Nickname` IS NULL AND `t3`.`Nickname` IS NULL) +) AS `u0` ON `s`.`GearNickName0` = `u0`.`Nickname` AND `s`.`GearSquadId0` = `u0`.`SquadId` +WHERE `u`.`Nickname` = `u0`.`Nickname` OR (`u`.`Nickname` IS NULL AND `u0`.`Nickname` IS NULL) """); } @@ -1884,8 +1903,8 @@ public override async Task Select_Singleton_Navigation_With_Member_Access(bool a await base.Select_Singleton_Navigation_With_Member_Access(async); AssertSql( -""" -SELECT `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM `Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` @@ -1893,8 +1912,8 @@ 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`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` -WHERE `t0`.`Nickname` = 'Marcus' AND (`t0`.`CityOfBirthName` <> 'Ephyra' OR `t0`.`CityOfBirthName` IS NULL) +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE `u`.`Nickname` = 'Marcus' AND (`u`.`CityOfBirthName` <> 'Ephyra' OR `u`.`CityOfBirthName` IS NULL) """); } @@ -1903,7 +1922,7 @@ public override async Task Select_Where_Navigation(bool async) await base.Select_Where_Navigation(async); AssertSql( -""" + """ SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` FROM `Tags` AS `t` LEFT JOIN ( @@ -1912,8 +1931,8 @@ LEFT JOIN ( UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId` FROM `Officers` AS `o` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` -WHERE `t0`.`Nickname` = 'Marcus' +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE `u`.`Nickname` = 'Marcus' """); } @@ -1922,28 +1941,28 @@ public override async Task Select_Where_Navigation_Equals_Navigation(bool async) await base.Select_Where_Navigation_Equals_Navigation(async); AssertSql( -""" -SELECT `t1`.`Id`, `t1`.`GearNickName`, `t1`.`GearSquadId`, `t1`.`IssueDate`, `t1`.`Note`, `t1`.`Id0`, `t1`.`GearNickName0`, `t1`.`GearSquadId0`, `t1`.`IssueDate0`, `t1`.`Note0` + """ +SELECT `s`.`Id`, `s`.`GearNickName`, `s`.`GearSquadId`, `s`.`IssueDate`, `s`.`Note`, `s`.`Id0`, `s`.`GearNickName0`, `s`.`GearSquadId0`, `s`.`IssueDate0`, `s`.`Note0` FROM (( SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note`, `t0`.`Id` AS `Id0`, `t0`.`GearNickName` AS `GearNickName0`, `t0`.`GearSquadId` AS `GearSquadId0`, `t0`.`IssueDate` AS `IssueDate0`, `t0`.`Note` AS `Note0` FROM `Tags` AS `t`, `Tags` AS `t0` -) AS `t1` +) AS `s` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId` FROM `Officers` AS `o` -) AS `t2` ON `t1`.`GearNickName` = `t2`.`Nickname` AND `t1`.`GearSquadId` = `t2`.`SquadId`) +) AS `u` ON `s`.`GearNickName` = `u`.`Nickname` AND `s`.`GearSquadId` = `u`.`SquadId`) LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId` FROM `Gears` AS `g0` UNION ALL SELECT `o0`.`Nickname`, `o0`.`SquadId` FROM `Officers` AS `o0` -) AS `t3` ON `t1`.`GearNickName0` = `t3`.`Nickname` AND `t1`.`GearSquadId0` = `t3`.`SquadId` -WHERE (`t2`.`Nickname` = `t3`.`Nickname` OR (`t2`.`Nickname` IS NULL AND `t3`.`Nickname` IS NULL)) AND (`t2`.`SquadId` = `t3`.`SquadId` OR (`t2`.`SquadId` IS NULL AND `t3`.`SquadId` IS NULL)) +) AS `u0` ON `s`.`GearNickName0` = `u0`.`Nickname` AND `s`.`GearSquadId0` = `u0`.`SquadId` +WHERE (`u`.`Nickname` = `u0`.`Nickname` OR (`u`.`Nickname` IS NULL AND `u0`.`Nickname` IS NULL)) AND (`u`.`SquadId` = `u0`.`SquadId` OR (`u`.`SquadId` IS NULL AND `u0`.`SquadId` IS NULL)) """); } @@ -1953,17 +1972,17 @@ public override async Task Select_Where_Navigation_Null(bool async) AssertSql( """ - SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` - FROM `Tags` AS `t` - LEFT JOIN ( - SELECT `g`.`Nickname`, `g`.`SquadId` - FROM `Gears` AS `g` - UNION ALL - SELECT `o`.`Nickname`, `o`.`SquadId` - FROM `Officers` AS `o` - ) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` - WHERE `t0`.`Nickname` IS NULL OR `t0`.`SquadId` IS NULL - """); +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE `u`.`Nickname` IS NULL OR `u`.`SquadId` IS NULL +"""); } public override async Task Select_Where_Navigation_Null_Reverse(bool async) @@ -1980,8 +1999,8 @@ LEFT JOIN ( UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId` FROM `Officers` AS `o` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` -WHERE `t0`.`Nickname` IS NULL OR `t0`.`SquadId` IS NULL +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE `u`.`Nickname` IS NULL OR `u`.`SquadId` IS NULL """); } @@ -1991,27 +2010,27 @@ public override async Task Select_Where_Navigation_Scalar_Equals_Navigation_Scal AssertSql( """ -SELECT `t1`.`Id` AS `Id1`, `t1`.`Id0` AS `Id2` +SELECT `s`.`Id` AS `Id1`, `s`.`Id0` AS `Id2` FROM (( SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t0`.`Id` AS `Id0`, `t0`.`GearNickName` AS `GearNickName0`, `t0`.`GearSquadId` AS `GearSquadId0` FROM `Tags` AS `t`, `Tags` AS `t0` -) AS `t1` +) AS `s` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId` FROM `Officers` AS `o` -) AS `t2` ON `t1`.`GearNickName` = `t2`.`Nickname` AND `t1`.`GearSquadId` = `t2`.`SquadId`) +) AS `u` ON `s`.`GearNickName` = `u`.`Nickname` AND `s`.`GearSquadId` = `u`.`SquadId`) LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId` FROM `Gears` AS `g0` UNION ALL SELECT `o0`.`Nickname`, `o0`.`SquadId` FROM `Officers` AS `o0` -) AS `t3` ON `t1`.`GearNickName0` = `t3`.`Nickname` AND `t1`.`GearSquadId0` = `t3`.`SquadId` -WHERE `t2`.`Nickname` = `t3`.`Nickname` OR (`t2`.`Nickname` IS NULL AND `t3`.`Nickname` IS NULL) +) AS `u0` ON `s`.`GearNickName0` = `u0`.`Nickname` AND `s`.`GearSquadId0` = `u0`.`SquadId` +WHERE `u`.`Nickname` = `u0`.`Nickname` OR (`u`.`Nickname` IS NULL AND `u0`.`Nickname` IS NULL) """); } @@ -2033,23 +2052,23 @@ public override async Task Where_subquery_boolean(bool async) await base.Where_subquery_boolean(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` +) AS `u` WHERE IIF(( SELECT TOP 1 `w`.`IsAutomatic` FROM `Weapons` AS `w` - WHERE `t`.`FullName` = `w`.`OwnerFullName` + WHERE `u`.`FullName` = `w`.`OwnerFullName` ORDER BY `w`.`Id`) IS NULL, FALSE, ( SELECT TOP 1 `w`.`IsAutomatic` FROM `Weapons` AS `w` - WHERE `t`.`FullName` = `w`.`OwnerFullName` + WHERE `u`.`FullName` = `w`.`OwnerFullName` ORDER BY `w`.`Id`)) = TRUE """); } @@ -2059,19 +2078,19 @@ public override async Task Where_subquery_boolean_with_pushdown(bool async) await base.Where_subquery_boolean_with_pushdown(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` +) AS `u` WHERE ( SELECT TOP 1 `w`.`IsAutomatic` FROM `Weapons` AS `w` - WHERE `t`.`FullName` = `w`.`OwnerFullName` + WHERE `u`.`FullName` = `w`.`OwnerFullName` ORDER BY `w`.`Id`) = TRUE """); } @@ -2182,23 +2201,23 @@ public override async Task Where_subquery_distinct_singleordefault_boolean2(bool await base.Where_subquery_distinct_singleordefault_boolean2(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` -WHERE `t`.`HasSoulPatch` = TRUE AND IIF(( +) AS `u` +WHERE `u`.`HasSoulPatch` = TRUE AND IIF(( SELECT DISTINCT TOP 1 `w`.`IsAutomatic` FROM `Weapons` AS `w` - WHERE `t`.`FullName` = `w`.`OwnerFullName` AND (`w`.`Name` LIKE '%Lancer%')) IS NULL, FALSE, ( + WHERE `u`.`FullName` = `w`.`OwnerFullName` AND (`w`.`Name` LIKE '%Lancer%')) IS NULL, FALSE, ( SELECT DISTINCT TOP 1 `w`.`IsAutomatic` FROM `Weapons` AS `w` - WHERE `t`.`FullName` = `w`.`OwnerFullName` AND (`w`.`Name` LIKE '%Lancer%'))) = TRUE -ORDER BY `t`.`Nickname` + WHERE `u`.`FullName` = `w`.`OwnerFullName` AND (`w`.`Name` LIKE '%Lancer%'))) = TRUE +ORDER BY `u`.`Nickname` """); } @@ -2446,21 +2465,21 @@ public override async Task Concat_with_count(bool async) await base.Concat_with_count(async); AssertSql( -""" + """ SELECT COUNT(*) FROM ( - SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + SELECT 1 FROM `Gears` AS `g` UNION ALL - SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + SELECT 1 FROM `Officers` AS `o` UNION ALL - SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + SELECT 1 FROM `Gears` AS `g0` UNION ALL - SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + SELECT 1 FROM `Officers` AS `o0` -) AS `t0` +) AS `u1` """); } @@ -2469,21 +2488,21 @@ public override async Task Concat_scalars_with_count(bool async) await base.Concat_scalars_with_count(async); AssertSql( -""" + """ SELECT COUNT(*) FROM ( - SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + SELECT 1 FROM `Gears` AS `g` UNION ALL - SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + SELECT 1 FROM `Officers` AS `o` UNION ALL - SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + SELECT 1 FROM `Gears` AS `g0` UNION ALL - SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + SELECT 1 FROM `Officers` AS `o0` -) AS `t0` +) AS `u1` """); } @@ -2492,27 +2511,27 @@ public override async Task Concat_anonymous_with_count(bool async) await base.Concat_anonymous_with_count(async); AssertSql( -""" + """ SELECT COUNT(*) FROM ( - SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `t`.`Nickname` AS `Name` + SELECT 1 FROM ( - SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + SELECT 1 FROM `Gears` AS `g` UNION ALL - SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + SELECT 1 FROM `Officers` AS `o` - ) AS `t` + ) AS `u` UNION ALL - SELECT `t1`.`Nickname`, `t1`.`SquadId`, `t1`.`AssignedCityName`, `t1`.`CityOfBirthName`, `t1`.`FullName`, `t1`.`HasSoulPatch`, `t1`.`LeaderNickname`, `t1`.`LeaderSquadId`, `t1`.`Rank`, `t1`.`Discriminator`, `t1`.`FullName` AS `Name` + SELECT 1 FROM ( - SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + SELECT 1 FROM `Gears` AS `g0` UNION ALL - SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + SELECT 1 FROM `Officers` AS `o0` - ) AS `t1` -) AS `t0` + ) AS `u0` +) AS `u1` """); } @@ -2658,8 +2677,8 @@ public override async Task Singleton_Navigation_With_Member_Access(bool async) await base.Singleton_Navigation_With_Member_Access(async); AssertSql( -""" -SELECT `t0`.`CityOfBirthName` AS `B` + """ +SELECT `u`.`CityOfBirthName` AS `B` FROM `Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`CityOfBirthName` @@ -2667,8 +2686,8 @@ LEFT JOIN ( UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`CityOfBirthName` FROM `Officers` AS `o` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` -WHERE `t0`.`Nickname` = 'Marcus' AND (`t0`.`CityOfBirthName` <> 'Ephyra' OR `t0`.`CityOfBirthName` IS NULL) +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE `u`.`Nickname` = 'Marcus' AND (`u`.`CityOfBirthName` <> 'Ephyra' OR `u`.`CityOfBirthName` IS NULL) """); } @@ -2677,8 +2696,8 @@ public override async Task GroupJoin_Composite_Key(bool async) await base.GroupJoin_Composite_Key(async); AssertSql( -""" -SELECT `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM `Tags` AS `t` INNER JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` @@ -2686,7 +2705,7 @@ INNER 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`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` """); } @@ -2695,26 +2714,26 @@ public override async Task Join_navigation_translated_to_subquery_composite_key( await base.Join_navigation_translated_to_subquery_composite_key(async); AssertSql( -""" -SELECT `t`.`FullName`, `t1`.`Note` + """ +SELECT `u`.`FullName`, `s`.`Note` FROM ( SELECT `g`.`FullName` FROM `Gears` AS `g` UNION ALL SELECT `o`.`FullName` FROM `Officers` AS `o` -) AS `t` +) AS `u` INNER JOIN ( - SELECT `t0`.`Note`, `t2`.`FullName` - FROM `Tags` AS `t0` + SELECT `t`.`Note`, `u0`.`FullName` + FROM `Tags` AS `t` LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`FullName` FROM `Gears` AS `g0` UNION ALL SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`FullName` FROM `Officers` AS `o0` - ) AS `t2` ON `t0`.`GearNickName` = `t2`.`Nickname` AND `t0`.`GearSquadId` = `t2`.`SquadId` -) AS `t1` ON `t`.`FullName` = `t1`.`FullName` + ) AS `u0` ON `t`.`GearNickName` = `u0`.`Nickname` AND `t`.`GearSquadId` = `u0`.`SquadId` +) AS `s` ON `u`.`FullName` = `s`.`FullName` """); } @@ -2723,26 +2742,26 @@ public override async Task Join_with_order_by_on_inner_sequence_navigation_trans await base.Join_with_order_by_on_inner_sequence_navigation_translated_to_subquery_composite_key(async); AssertSql( -""" -SELECT `t`.`FullName`, `t1`.`Note` + """ +SELECT `u`.`FullName`, `s`.`Note` FROM ( SELECT `g`.`FullName` FROM `Gears` AS `g` UNION ALL SELECT `o`.`FullName` FROM `Officers` AS `o` -) AS `t` +) AS `u` INNER JOIN ( - SELECT `t0`.`Note`, `t2`.`FullName` - FROM `Tags` AS `t0` + SELECT `t`.`Note`, `u0`.`FullName` + FROM `Tags` AS `t` LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`FullName` FROM `Gears` AS `g0` UNION ALL SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`FullName` FROM `Officers` AS `o0` - ) AS `t2` ON `t0`.`GearNickName` = `t2`.`Nickname` AND `t0`.`GearSquadId` = `t2`.`SquadId` -) AS `t1` ON `t`.`FullName` = `t1`.`FullName` + ) AS `u0` ON `t`.`GearNickName` = `u0`.`Nickname` AND `t`.`GearSquadId` = `u0`.`SquadId` +) AS `s` ON `u`.`FullName` = `s`.`FullName` """); } @@ -2751,16 +2770,16 @@ public override async Task Join_with_order_by_without_skip_or_take(bool async) await base.Join_with_order_by_without_skip_or_take(async); AssertSql( -""" -SELECT `w`.`Name`, `t`.`FullName` + """ +SELECT `w`.`Name`, `u`.`FullName` FROM ( SELECT `g`.`FullName` FROM `Gears` AS `g` UNION ALL SELECT `o`.`FullName` FROM `Officers` AS `o` -) AS `t` -INNER JOIN `Weapons` AS `w` ON `t`.`FullName` = `w`.`OwnerFullName` +) AS `u` +INNER JOIN `Weapons` AS `w` ON `u`.`FullName` = `w`.`OwnerFullName` """); } @@ -2769,8 +2788,8 @@ public override async Task Join_with_order_by_without_skip_or_take_nested(bool a await base.Join_with_order_by_without_skip_or_take_nested(async); AssertSql( -""" -SELECT `w`.`Name`, `t`.`FullName` + """ +SELECT `w`.`Name`, `u`.`FullName` FROM (`Squads` AS `s` INNER JOIN ( SELECT `g`.`SquadId`, `g`.`FullName` @@ -2778,9 +2797,9 @@ INNER JOIN ( UNION ALL SELECT `o`.`SquadId`, `o`.`FullName` FROM `Officers` AS `o` -) AS `t` ON `s`.`Id` = `t`.`SquadId`) -LEFT JOIN `Weapons` AS `w` ON `t`.`FullName` = `w`.`OwnerFullName` -WHERE `t`.`FullName` IS NOT NULL AND `w`.`OwnerFullName` IS NOT NULL +) AS `u` ON `s`.`Id` = `u`.`SquadId`) +LEFT JOIN `Weapons` AS `w` ON `u`.`FullName` = `w`.`OwnerFullName` +WHERE `u`.`FullName` IS NOT NULL AND `w`.`OwnerFullName` IS NOT NULL """); } @@ -2789,14 +2808,14 @@ public override async Task Collection_with_inheritance_and_join_include_joined(b await base.Collection_with_inheritance_and_join_include_joined(async); AssertSql( -""" -SELECT `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator`, `t1`.`Id`, `t1`.`GearNickName`, `t1`.`GearSquadId`, `t1`.`IssueDate`, `t1`.`Note` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `t0`.`Id`, `t0`.`GearNickName`, `t0`.`GearSquadId`, `t0`.`IssueDate`, `t0`.`Note` FROM (`Tags` AS `t` INNER JOIN ( 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`.`GearSquadId` = `t0`.`SquadId` AND `t`.`GearNickName` = `t0`.`Nickname`) -LEFT JOIN `Tags` AS `t1` ON `t0`.`Nickname` = `t1`.`GearNickName` AND `t0`.`SquadId` = `t1`.`GearSquadId` +) AS `u` ON `t`.`GearSquadId` = `u`.`SquadId` AND `t`.`GearNickName` = `u`.`Nickname`) +LEFT JOIN `Tags` AS `t0` ON `u`.`Nickname` = `t0`.`GearNickName` AND `u`.`SquadId` = `t0`.`GearSquadId` """); } @@ -2805,14 +2824,14 @@ public override async Task Collection_with_inheritance_and_join_include_source(b await base.Collection_with_inheritance_and_join_include_source(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `t1`.`Id`, `t1`.`GearNickName`, `t1`.`GearSquadId`, `t1`.`IssueDate`, `t1`.`Note` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `t0`.`Id`, `t0`.`GearNickName`, `t0`.`GearSquadId`, `t0`.`IssueDate`, `t0`.`Note` FROM (( 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 `t` -INNER JOIN `Tags` AS `t0` ON `t`.`SquadId` = `t0`.`GearSquadId` AND `t`.`Nickname` = `t0`.`GearNickName`) -LEFT JOIN `Tags` AS `t1` ON `t`.`Nickname` = `t1`.`GearNickName` AND `t`.`SquadId` = `t1`.`GearSquadId` +) AS `u` +INNER JOIN `Tags` AS `t` ON `u`.`SquadId` = `t`.`GearSquadId` AND `u`.`Nickname` = `t`.`GearNickName`) +LEFT JOIN `Tags` AS `t0` ON `u`.`Nickname` = `t0`.`GearNickName` AND `u`.`SquadId` = `t0`.`GearSquadId` """); } @@ -2871,19 +2890,19 @@ public override async Task Non_unicode_string_literals_is_used_for_non_unicode_c await base.Non_unicode_string_literals_is_used_for_non_unicode_column_with_subquery(async); AssertSql( -""" + """ SELECT `c`.`Name`, `c`.`Location`, `c`.`Nation` FROM `Cities` AS `c` WHERE `c`.`Location` = 'Unknown' AND ( SELECT COUNT(*) FROM ( - SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + SELECT `g`.`Nickname`, `g`.`CityOfBirthName` FROM `Gears` AS `g` UNION ALL - SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + SELECT `o`.`Nickname`, `o`.`CityOfBirthName` FROM `Officers` AS `o` - ) AS `t` - WHERE `c`.`Name` = `t`.`CityOfBirthName` AND `t`.`Nickname` = 'Paduk') = 1 + ) AS `u` + WHERE `c`.`Name` = `u`.`CityOfBirthName` AND `u`.`Nickname` = 'Paduk') = 1 """); } @@ -2892,17 +2911,17 @@ public override async Task Non_unicode_string_literals_is_used_for_non_unicode_c await base.Non_unicode_string_literals_is_used_for_non_unicode_column_in_subquery(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` -INNER JOIN `Cities` AS `c` ON `t`.`CityOfBirthName` = `c`.`Name` -WHERE `t`.`Nickname` = 'Marcus' AND `c`.`Location` = 'Jacinto''s location' +) AS `u` +INNER JOIN `Cities` AS `c` ON `u`.`CityOfBirthName` = `c`.`Name` +WHERE `u`.`Nickname` = 'Marcus' AND `c`.`Location` = 'Jacinto''s location' """); } @@ -2936,23 +2955,23 @@ public override void Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_coalesc AssertSql( """ -SELECT `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator`, `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +SELECT `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator`, `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM (( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` +) AS `u` LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g0` UNION ALL SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` FROM `Officers` AS `o0` -) AS `t0` ON `t`.`LeaderNickname` = `t0`.`Nickname`) -LEFT JOIN `Weapons` AS `w` ON `t`.`FullName` = `w`.`OwnerFullName` -ORDER BY `t`.`Nickname`, `t`.`SquadId`, `t0`.`Nickname`, `t0`.`SquadId` +) AS `u0` ON `u`.`LeaderNickname` = `u0`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `u`.`FullName` = `w`.`OwnerFullName` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `u0`.`Nickname`, `u0`.`SquadId` """); } @@ -2962,23 +2981,23 @@ public override void Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_coalesc AssertSql( """ -SELECT `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator`, `t`.`Nickname`, `t`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` +SELECT `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator`, `u`.`Nickname`, `u`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM (( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` +) AS `u` LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g0` UNION ALL SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` FROM `Officers` AS `o0` -) AS `t0` ON `t`.`LeaderNickname` = `t0`.`Nickname`) -LEFT JOIN `Weapons` AS `w` ON `t0`.`FullName` = `w`.`OwnerFullName` -ORDER BY `t`.`Nickname`, `t`.`SquadId`, `t0`.`Nickname`, `t0`.`SquadId` +) AS `u0` ON `u`.`LeaderNickname` = `u0`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `u0`.`FullName` = `w`.`OwnerFullName` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `u0`.`Nickname`, `u0`.`SquadId` """); } @@ -2988,25 +3007,25 @@ public override async Task Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_c // Issue#16897 AssertSql( -""" -SELECT `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator`, `t`.`Nickname`, `t`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` + """ +SELECT `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator`, `u`.`Nickname`, `u`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` FROM ((( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` +) AS `u` LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g0` UNION ALL SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` FROM `Officers` AS `o0` -) AS `t0` ON `t`.`LeaderNickname` = `t0`.`Nickname`) -LEFT JOIN `Weapons` AS `w` ON `t0`.`FullName` = `w`.`OwnerFullName`) -LEFT JOIN `Weapons` AS `w0` ON `t`.`FullName` = `w0`.`OwnerFullName` -ORDER BY `t`.`Nickname`, `t`.`SquadId`, `t0`.`Nickname`, `t0`.`SquadId`, `w`.`Id` +) AS `u0` ON `u`.`LeaderNickname` = `u0`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `u0`.`FullName` = `w`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w0` ON `u`.`FullName` = `w0`.`OwnerFullName` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `u0`.`Nickname`, `u0`.`SquadId`, `w`.`Id` """); } @@ -3016,27 +3035,27 @@ public override async Task Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_c // Issue#16897 AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `t0`.`Nickname`, `t0`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId`, `w1`.`Id`, `w1`.`AmmunitionType`, `w1`.`IsAutomatic`, `w1`.`Name`, `w1`.`OwnerFullName`, `w1`.`SynergyWithId`, `w2`.`Id`, `w2`.`AmmunitionType`, `w2`.`IsAutomatic`, `w2`.`Name`, `w2`.`OwnerFullName`, `w2`.`SynergyWithId` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `u0`.`Nickname`, `u0`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId`, `w1`.`Id`, `w1`.`AmmunitionType`, `w1`.`IsAutomatic`, `w1`.`Name`, `w1`.`OwnerFullName`, `w1`.`SynergyWithId`, `w2`.`Id`, `w2`.`AmmunitionType`, `w2`.`IsAutomatic`, `w2`.`Name`, `w2`.`OwnerFullName`, `w2`.`SynergyWithId` FROM ((((( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` +) AS `u` LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g0` UNION ALL SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` FROM `Officers` AS `o0` -) AS `t0` ON `t`.`LeaderNickname` = `t0`.`Nickname`) -LEFT JOIN `Weapons` AS `w` ON `t`.`FullName` = `w`.`OwnerFullName`) -LEFT JOIN `Weapons` AS `w0` ON `t0`.`FullName` = `w0`.`OwnerFullName`) -LEFT JOIN `Weapons` AS `w1` ON `t0`.`FullName` = `w1`.`OwnerFullName`) -LEFT JOIN `Weapons` AS `w2` ON `t`.`FullName` = `w2`.`OwnerFullName` -ORDER BY `t`.`Nickname`, `t`.`SquadId`, `t0`.`Nickname`, `t0`.`SquadId`, `w`.`Id`, `w0`.`Id`, `w1`.`Id` +) AS `u0` ON `u`.`LeaderNickname` = `u0`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `u`.`FullName` = `w`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w0` ON `u0`.`FullName` = `w0`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w1` ON `u0`.`FullName` = `w1`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w2` ON `u`.`FullName` = `w2`.`OwnerFullName` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `u0`.`Nickname`, `u0`.`SquadId`, `w`.`Id`, `w0`.`Id`, `w1`.`Id` """); } @@ -3046,22 +3065,22 @@ public override async Task Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_i // Issue#16897 AssertSql( -""" -SELECT `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator`, `t`.`Nickname`, `t`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` + """ +SELECT `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator`, `u`.`Nickname`, `u`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` FROM ((( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` +) AS `u` LEFT JOIN ( SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` FROM `Officers` AS `o0` -) AS `t0` ON `t`.`LeaderNickname` = `t0`.`Nickname`) -LEFT JOIN `Weapons` AS `w` ON `t0`.`FullName` = `w`.`OwnerFullName`) -LEFT JOIN `Weapons` AS `w0` ON `t`.`FullName` = `w0`.`OwnerFullName` -ORDER BY `t`.`Nickname`, `t`.`SquadId`, `t0`.`Nickname`, `t0`.`SquadId`, `w`.`Id` +) AS `u0` ON `u`.`LeaderNickname` = `u0`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `u0`.`FullName` = `w`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w0` ON `u`.`FullName` = `w0`.`OwnerFullName` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `u0`.`Nickname`, `u0`.`SquadId`, `w`.`Id` """); } @@ -3071,25 +3090,25 @@ public override async Task Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_c // Issue#16897 AssertSql( -""" -SELECT IIF(`t0`.`Nickname` IS NOT NULL AND `t0`.`SquadId` IS NOT NULL, TRUE, FALSE), `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator`, `t`.`Nickname`, `t`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` + """ +SELECT IIF(`u0`.`Nickname` IS NOT NULL AND `u0`.`SquadId` IS NOT NULL, TRUE, FALSE), `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator`, `u`.`Nickname`, `u`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` FROM ((( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` +) AS `u` LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g0` UNION ALL SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` FROM `Officers` AS `o0` -) AS `t0` ON `t`.`LeaderNickname` = `t0`.`Nickname`) -LEFT JOIN `Weapons` AS `w` ON `t0`.`FullName` = `w`.`OwnerFullName`) -LEFT JOIN `Weapons` AS `w0` ON `t`.`FullName` = `w0`.`OwnerFullName` -ORDER BY `t`.`Nickname`, `t`.`SquadId`, `t0`.`Nickname`, `t0`.`SquadId`, `w`.`Id` +) AS `u0` ON `u`.`LeaderNickname` = `u0`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `u0`.`FullName` = `w`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w0` ON `u`.`FullName` = `w0`.`OwnerFullName` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `u0`.`Nickname`, `u0`.`SquadId`, `w`.`Id` """); } @@ -3098,29 +3117,29 @@ public override async Task Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_c await base.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_complex_projection_result(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `t0`.`Nickname`, `t0`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId`, `w1`.`Id`, `w1`.`AmmunitionType`, `w1`.`IsAutomatic`, `w1`.`Name`, `w1`.`OwnerFullName`, `w1`.`SynergyWithId`, `w2`.`Id`, `w2`.`AmmunitionType`, `w2`.`IsAutomatic`, `w2`.`Name`, `w2`.`OwnerFullName`, `w2`.`SynergyWithId`, IIF(`t0`.`Nickname` IS NOT NULL AND `t0`.`SquadId` IS NOT NULL, TRUE, FALSE), `w3`.`Id`, `w3`.`AmmunitionType`, `w3`.`IsAutomatic`, `w3`.`Name`, `w3`.`OwnerFullName`, `w3`.`SynergyWithId`, `w4`.`Id`, `w4`.`AmmunitionType`, `w4`.`IsAutomatic`, `w4`.`Name`, `w4`.`OwnerFullName`, `w4`.`SynergyWithId` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `u0`.`Nickname`, `u0`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId`, `w1`.`Id`, `w1`.`AmmunitionType`, `w1`.`IsAutomatic`, `w1`.`Name`, `w1`.`OwnerFullName`, `w1`.`SynergyWithId`, `w2`.`Id`, `w2`.`AmmunitionType`, `w2`.`IsAutomatic`, `w2`.`Name`, `w2`.`OwnerFullName`, `w2`.`SynergyWithId`, IIF(`u0`.`Nickname` IS NOT NULL AND `u0`.`SquadId` IS NOT NULL, TRUE, FALSE), `w3`.`Id`, `w3`.`AmmunitionType`, `w3`.`IsAutomatic`, `w3`.`Name`, `w3`.`OwnerFullName`, `w3`.`SynergyWithId`, `w4`.`Id`, `w4`.`AmmunitionType`, `w4`.`IsAutomatic`, `w4`.`Name`, `w4`.`OwnerFullName`, `w4`.`SynergyWithId` FROM ((((((( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` +) AS `u` LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g0` UNION ALL SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` FROM `Officers` AS `o0` -) AS `t0` ON `t`.`LeaderNickname` = `t0`.`Nickname`) -LEFT JOIN `Weapons` AS `w` ON `t`.`FullName` = `w`.`OwnerFullName`) -LEFT JOIN `Weapons` AS `w0` ON `t0`.`FullName` = `w0`.`OwnerFullName`) -LEFT JOIN `Weapons` AS `w1` ON `t0`.`FullName` = `w1`.`OwnerFullName`) -LEFT JOIN `Weapons` AS `w2` ON `t`.`FullName` = `w2`.`OwnerFullName`) -LEFT JOIN `Weapons` AS `w3` ON `t0`.`FullName` = `w3`.`OwnerFullName`) -LEFT JOIN `Weapons` AS `w4` ON `t`.`FullName` = `w4`.`OwnerFullName` -ORDER BY `t`.`Nickname`, `t`.`SquadId`, `t0`.`Nickname`, `t0`.`SquadId`, `w`.`Id`, `w0`.`Id`, `w1`.`Id`, `w2`.`Id`, `w3`.`Id` +) AS `u0` ON `u`.`LeaderNickname` = `u0`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `u`.`FullName` = `w`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w0` ON `u0`.`FullName` = `w0`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w1` ON `u0`.`FullName` = `w1`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w2` ON `u`.`FullName` = `w2`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w3` ON `u0`.`FullName` = `w3`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w4` ON `u`.`FullName` = `w4`.`OwnerFullName` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `u0`.`Nickname`, `u0`.`SquadId`, `w`.`Id`, `w0`.`Id`, `w1`.`Id`, `w2`.`Id`, `w3`.`Id` """); } @@ -3129,10 +3148,17 @@ public override async Task Coalesce_operator_in_predicate(bool async) await base.Coalesce_operator_in_predicate(async); AssertSql( -""" -SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` -FROM `Weapons` AS `w` -WHERE IIF(`w`.`IsAutomatic` IS NULL, FALSE, `w`.`IsAutomatic`) = TRUE + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE IIF(`u`.`HasSoulPatch` IS NULL, FALSE, `u`.`HasSoulPatch`) = TRUE """); } @@ -3141,10 +3167,17 @@ public override async Task Coalesce_operator_in_predicate_with_other_conditions( await base.Coalesce_operator_in_predicate_with_other_conditions(async); AssertSql( -""" -SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` -FROM `Weapons` AS `w` -WHERE `w`.`AmmunitionType` = 1 AND IIF(`w`.`IsAutomatic` IS NULL, FALSE, `w`.`IsAutomatic`) = TRUE + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE (`t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL) AND IIF(`u`.`HasSoulPatch` IS NULL, FALSE, `u`.`HasSoulPatch`) = TRUE """); } @@ -3154,8 +3187,15 @@ public override async Task Coalesce_operator_in_projection_with_other_conditions AssertSql( """ -SELECT IIF(`w`.`AmmunitionType` = 1 AND `w`.`AmmunitionType` IS NOT NULL AND IIF(`w`.`IsAutomatic` IS NULL, FALSE, `w`.`IsAutomatic`) = TRUE, TRUE, FALSE) -FROM `Weapons` AS `w` +SELECT IIF((`t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL) AND IIF(`u`.`HasSoulPatch` IS NULL, FALSE, `u`.`HasSoulPatch`) = TRUE, TRUE, FALSE) +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` """); } @@ -3164,7 +3204,7 @@ public override async Task Optional_navigation_type_compensation_works_with_pred await base.Optional_navigation_type_compensation_works_with_predicate(async); AssertSql( -""" + """ SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` FROM `Tags` AS `t` LEFT JOIN ( @@ -3173,8 +3213,8 @@ LEFT JOIN ( UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`HasSoulPatch` FROM `Officers` AS `o` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` -WHERE (`t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL) AND `t0`.`HasSoulPatch` = TRUE +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE (`t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL) AND `u`.`HasSoulPatch` = TRUE """); } @@ -3183,7 +3223,7 @@ public override async Task Optional_navigation_type_compensation_works_with_pred await base.Optional_navigation_type_compensation_works_with_predicate2(async); AssertSql( -""" + """ SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` FROM `Tags` AS `t` LEFT JOIN ( @@ -3192,8 +3232,8 @@ LEFT JOIN ( UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`HasSoulPatch` FROM `Officers` AS `o` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` -WHERE `t0`.`HasSoulPatch` = TRUE +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE `u`.`HasSoulPatch` = TRUE """); } @@ -3202,7 +3242,7 @@ public override async Task Optional_navigation_type_compensation_works_with_pred await base.Optional_navigation_type_compensation_works_with_predicate_negated(async); AssertSql( -""" + """ SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` FROM `Tags` AS `t` LEFT JOIN ( @@ -3211,8 +3251,8 @@ LEFT JOIN ( UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`HasSoulPatch` FROM `Officers` AS `o` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` -WHERE `t0`.`HasSoulPatch` <> TRUE +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE `u`.`HasSoulPatch` <> TRUE """); } @@ -3221,7 +3261,7 @@ public override async Task Optional_navigation_type_compensation_works_with_pred await base.Optional_navigation_type_compensation_works_with_predicate_negated_complex1(async); AssertSql( -""" + """ SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` FROM `Tags` AS `t` LEFT JOIN ( @@ -3230,8 +3270,8 @@ LEFT JOIN ( UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`HasSoulPatch` FROM `Officers` AS `o` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` -WHERE IIF(`t0`.`HasSoulPatch` = TRUE, TRUE, `t0`.`HasSoulPatch`) <> TRUE +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE IIF(`u`.`HasSoulPatch` = TRUE, TRUE, `u`.`HasSoulPatch`) <> TRUE """); } @@ -3249,8 +3289,8 @@ LEFT JOIN ( UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`HasSoulPatch` FROM `Officers` AS `o` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` -WHERE IIF(`t0`.`HasSoulPatch` <> TRUE, FALSE, `t0`.`HasSoulPatch`) <> TRUE +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE IIF(`u`.`HasSoulPatch` <> TRUE, FALSE, `u`.`HasSoulPatch`) <> TRUE """); } @@ -3259,7 +3299,7 @@ public override async Task Optional_navigation_type_compensation_works_with_cond await base.Optional_navigation_type_compensation_works_with_conditional_expression(async); AssertSql( -""" + """ SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` FROM `Tags` AS `t` LEFT JOIN ( @@ -3268,8 +3308,8 @@ LEFT JOIN ( UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`HasSoulPatch` FROM `Officers` AS `o` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` -WHERE IIF(`t0`.`HasSoulPatch` = TRUE, TRUE, FALSE) = TRUE +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE IIF(`u`.`HasSoulPatch` = TRUE, TRUE, FALSE) = TRUE """); } @@ -3278,7 +3318,7 @@ public override async Task Optional_navigation_type_compensation_works_with_bina await base.Optional_navigation_type_compensation_works_with_binary_expression(async); AssertSql( -""" + """ SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` FROM `Tags` AS `t` LEFT JOIN ( @@ -3287,8 +3327,8 @@ LEFT JOIN ( UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`HasSoulPatch` FROM `Officers` AS `o` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` -WHERE `t0`.`HasSoulPatch` = TRUE OR (`t`.`Note` LIKE '%Cole%') +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE `u`.`HasSoulPatch` = TRUE OR (`t`.`Note` LIKE '%Cole%') """); } @@ -3297,8 +3337,8 @@ public override async Task Optional_navigation_type_compensation_works_with_bina await base.Optional_navigation_type_compensation_works_with_binary_and_expression(async); AssertSql( -""" -SELECT IIF(`t0`.`HasSoulPatch` = TRUE AND (`t`.`Note` LIKE '%Cole%') AND `t`.`Note` IS NOT NULL, TRUE, FALSE) + """ +SELECT IIF(`u`.`HasSoulPatch` = TRUE AND (`t`.`Note` LIKE '%Cole%') AND `t`.`Note` IS NOT NULL, TRUE, FALSE) FROM `Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` @@ -3306,7 +3346,7 @@ LEFT JOIN ( UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`HasSoulPatch` FROM `Officers` AS `o` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` """); } @@ -3315,8 +3355,8 @@ public override async Task Optional_navigation_type_compensation_works_with_proj await base.Optional_navigation_type_compensation_works_with_projection(async); AssertSql( -""" -SELECT `t0`.`SquadId` + """ +SELECT `u`.`SquadId` FROM `Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId` @@ -3324,7 +3364,7 @@ LEFT JOIN ( UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId` FROM `Officers` AS `o` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` WHERE `t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL """); } @@ -3334,8 +3374,8 @@ public override async Task Optional_navigation_type_compensation_works_with_proj await base.Optional_navigation_type_compensation_works_with_projection_into_anonymous_type(async); AssertSql( -""" -SELECT `t0`.`SquadId` + """ +SELECT `u`.`SquadId` FROM `Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId` @@ -3343,7 +3383,7 @@ LEFT JOIN ( UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId` FROM `Officers` AS `o` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` WHERE `t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL """); } @@ -3353,8 +3393,8 @@ public override async Task Optional_navigation_type_compensation_works_with_DTOs await base.Optional_navigation_type_compensation_works_with_DTOs(async); AssertSql( -""" -SELECT `t0`.`SquadId` AS `Id` + """ +SELECT `u`.`SquadId` AS `Id` FROM `Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId` @@ -3362,7 +3402,7 @@ LEFT JOIN ( UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId` FROM `Officers` AS `o` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` WHERE `t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL """); } @@ -3372,8 +3412,8 @@ public override async Task Optional_navigation_type_compensation_works_with_list await base.Optional_navigation_type_compensation_works_with_list_initializers(async); AssertSql( -""" -SELECT `t0`.`SquadId`, `t0`.`SquadId` + 1 + """ +SELECT `u`.`SquadId`, `u`.`SquadId` + 1 FROM `Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId` @@ -3381,7 +3421,7 @@ LEFT JOIN ( UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId` FROM `Officers` AS `o` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` WHERE `t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL ORDER BY `t`.`Note` """); @@ -3392,8 +3432,8 @@ public override async Task Optional_navigation_type_compensation_works_with_arra await base.Optional_navigation_type_compensation_works_with_array_initializers(async); AssertSql( -""" -SELECT `t0`.`SquadId` + """ +SELECT `u`.`SquadId` FROM `Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId` @@ -3401,7 +3441,7 @@ LEFT JOIN ( UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId` FROM `Officers` AS `o` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` WHERE `t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL """); } @@ -3411,7 +3451,7 @@ public override async Task Optional_navigation_type_compensation_works_with_orde await base.Optional_navigation_type_compensation_works_with_orderby(async); AssertSql( -""" + """ SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` FROM `Tags` AS `t` LEFT JOIN ( @@ -3420,9 +3460,9 @@ LEFT JOIN ( UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId` FROM `Officers` AS `o` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` WHERE `t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL -ORDER BY `t0`.`SquadId` +ORDER BY `u`.`SquadId` """); } @@ -3431,18 +3471,18 @@ public override async Task Optional_navigation_type_compensation_works_with_all( await base.Optional_navigation_type_compensation_works_with_all(async); AssertSql( -""" + """ SELECT IIF(NOT EXISTS ( SELECT 1 FROM `Tags` AS `t` LEFT JOIN ( - SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` FROM `Gears` AS `g` UNION ALL - SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`HasSoulPatch` FROM `Officers` AS `o` - ) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` - WHERE (`t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL) AND `t0`.`HasSoulPatch` <> TRUE), TRUE, FALSE) + ) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` + WHERE (`t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL) AND `u`.`HasSoulPatch` <> TRUE), TRUE, FALSE) FROM (SELECT COUNT(*) FROM `#Dual`) """); } @@ -3452,7 +3492,7 @@ public override async Task Optional_navigation_type_compensation_works_with_nega await base.Optional_navigation_type_compensation_works_with_negated_predicate(async); AssertSql( -""" + """ SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` FROM `Tags` AS `t` LEFT JOIN ( @@ -3461,8 +3501,8 @@ LEFT JOIN ( UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`HasSoulPatch` FROM `Officers` AS `o` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` -WHERE (`t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL) AND `t0`.`HasSoulPatch` <> TRUE +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE (`t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL) AND `u`.`HasSoulPatch` <> TRUE """); } @@ -3471,26 +3511,26 @@ public override async Task Optional_navigation_type_compensation_works_with_cont await base.Optional_navigation_type_compensation_works_with_contains(async); AssertSql( -""" -SELECT [t].[Id], [t].[GearNickName], [t].[GearSquadId], [t].[IssueDate], [t].[Note] -FROM [Tags] AS [t] + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` LEFT JOIN ( - SELECT [g].[Nickname], [g].[SquadId] - FROM [Gears] AS [g] + SELECT `g`.`Nickname`, `g`.`SquadId` + FROM `Gears` AS `g` UNION ALL - SELECT [o].[Nickname], [o].[SquadId] - FROM [Officers] AS [o] -) AS [t0] ON [t].[GearNickName] = [t0].[Nickname] AND [t].[GearSquadId] = [t0].[SquadId] -WHERE ([t].[Note] <> N'K.I.A.' OR ([t].[Note] IS NULL)) AND EXISTS ( - SELECT 1 + SELECT `o`.`Nickname`, `o`.`SquadId` + FROM `Officers` AS `o` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE (`t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL) AND `u`.`SquadId` IN ( + SELECT `u0`.`SquadId` FROM ( - SELECT [g0].[Nickname], [g0].[SquadId], [g0].[AssignedCityName], [g0].[CityOfBirthName], [g0].[FullName], [g0].[HasSoulPatch], [g0].[LeaderNickname], [g0].[LeaderSquadId], [g0].[Rank], N'Gear' AS [Discriminator] - FROM [Gears] AS [g0] + SELECT `g0`.`SquadId` + FROM `Gears` AS `g0` UNION ALL - SELECT [o0].[Nickname], [o0].[SquadId], [o0].[AssignedCityName], [o0].[CityOfBirthName], [o0].[FullName], [o0].[HasSoulPatch], [o0].[LeaderNickname], [o0].[LeaderSquadId], [o0].[Rank], N'Officer' AS [Discriminator] - FROM [Officers] AS [o0] - ) AS [t1] - WHERE [t1].[SquadId] = [t0].[SquadId]) + SELECT `o0`.`SquadId` + FROM `Officers` AS `o0` + ) AS `u0` +) """); } @@ -3513,23 +3553,23 @@ public override async Task Select_correlated_filtered_collection(bool async) await base.Select_correlated_filtered_collection(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `c`.`Name`, `t0`.`Id`, `t0`.`AmmunitionType`, `t0`.`IsAutomatic`, `t0`.`Name`, `t0`.`OwnerFullName`, `t0`.`SynergyWithId` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `c`.`Name`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` FROM (( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`CityOfBirthName`, `g`.`FullName` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`CityOfBirthName`, `o`.`FullName` FROM `Officers` AS `o` -) AS `t` -INNER JOIN `Cities` AS `c` ON `t`.`CityOfBirthName` = `c`.`Name`) +) AS `u` +INNER JOIN `Cities` AS `c` ON `u`.`CityOfBirthName` = `c`.`Name`) LEFT JOIN ( SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM `Weapons` AS `w` WHERE `w`.`Name` <> 'Lancer' OR `w`.`Name` IS NULL -) AS `t0` ON `t`.`FullName` = `t0`.`OwnerFullName` +) AS `w0` ON `u`.`FullName` = `w0`.`OwnerFullName` WHERE `c`.`Name` IN ('Ephyra', 'Hanover') -ORDER BY `t`.`Nickname`, `t`.`SquadId`, `c`.`Name` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `c`.`Name` """); } @@ -3538,24 +3578,24 @@ public override async Task Select_correlated_filtered_collection_with_composite_ await base.Select_correlated_filtered_collection_with_composite_key(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u1`.`Nickname`, `u1`.`SquadId`, `u1`.`AssignedCityName`, `u1`.`CityOfBirthName`, `u1`.`FullName`, `u1`.`HasSoulPatch`, `u1`.`LeaderNickname`, `u1`.`LeaderSquadId`, `u1`.`Rank`, `u1`.`Discriminator` FROM ( SELECT `o`.`Nickname`, `o`.`SquadId` FROM `Officers` AS `o` -) AS `t` +) AS `u` LEFT JOIN ( - SELECT `t1`.`Nickname`, `t1`.`SquadId`, `t1`.`AssignedCityName`, `t1`.`CityOfBirthName`, `t1`.`FullName`, `t1`.`HasSoulPatch`, `t1`.`LeaderNickname`, `t1`.`LeaderSquadId`, `t1`.`Rank`, `t1`.`Discriminator` + SELECT `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` UNION ALL SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` FROM `Officers` AS `o0` - ) AS `t1` - WHERE `t1`.`Nickname` <> 'Dom' -) AS `t0` ON `t`.`Nickname` = `t0`.`LeaderNickname` AND `t`.`SquadId` = `t0`.`LeaderSquadId` -ORDER BY `t`.`Nickname`, `t`.`SquadId`, `t0`.`Nickname` + ) AS `u0` + WHERE `u0`.`Nickname` <> 'Dom' +) AS `u1` ON `u`.`Nickname` = `u1`.`LeaderNickname` AND `u`.`SquadId` = `u1`.`LeaderSquadId` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `u1`.`Nickname` """); } @@ -3564,8 +3604,8 @@ public override async Task Select_correlated_filtered_collection_works_with_cach await base.Select_correlated_filtered_collection_works_with_caching(async); AssertSql( -""" -SELECT `t`.`Id`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator` + """ +SELECT `t`.`Id`, `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM `Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` @@ -3573,8 +3613,8 @@ 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`.`GearNickName` = `t0`.`Nickname` -ORDER BY `t`.`Note`, `t`.`Id`, `t0`.`Nickname` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` +ORDER BY `t`.`Note`, `t`.`Id`, `u`.`Nickname` """); } @@ -3692,7 +3732,7 @@ public override async Task Where_datetimeoffset_now(bool async) AssertSql( """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE `m`.`Timeline` <> NOW() """); @@ -3705,7 +3745,7 @@ public override async Task Where_datetimeoffset_utcnow(bool async) AssertSql( $""" -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE `m`.`Timeline` <> DATEADD('n', {dtoffset}.0, NOW()) """); @@ -3713,15 +3753,23 @@ public override async Task Where_datetimeoffset_utcnow(bool async) public override async Task Where_datetimeoffset_date_component(bool async) { - await base.Where_datetimeoffset_date_component(async); + //We have to specifically use 1 JAn 100 as that is the minimum in Jet. + //The default 0 in DateTimeOffset is normally mapped to the OLE Automation date 30 Dec 1899 + //Investigate if we can pick the scenario up automatically and have a new DateTimeOffset().Date go to the required value if we have a comparison + //await base.Where_datetimeoffset_date_component(async); + await AssertQuery( + async, + ss => from m in ss.Set() + where m.Timeline.Date > new DateTimeOffset(100, 1, 1, 0, 0, 0, new TimeSpan()).Date + select m); AssertSql( - $""" -@__Date_0='0001-01-01T00:00:00.0000000' (DbType = DateTime) + """ +@__Date_0='0100-01-01T00:00:00.0000000' (DbType = DateTime) -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` -WHERE DATEVALUE(`m`.`Timeline`) > {AssertSqlHelper.Parameter("@__Date_0")} +WHERE DATEVALUE(`m`.`Timeline`) > CDATE(@__Date_0) """); } @@ -3735,7 +3783,7 @@ await AssertQuery( AssertSql( """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE DATEPART('yyyy', `m`.`Timeline`) = 102 """); @@ -3747,7 +3795,7 @@ public override async Task Where_datetimeoffset_month_component(bool async) AssertSql( """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE DATEPART('m', `m`.`Timeline`) = 1 """); @@ -3759,7 +3807,7 @@ public override async Task Where_datetimeoffset_dayofyear_component(bool async) AssertSql( """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE DATEPART('y', `m`.`Timeline`) = 2 """); @@ -3771,7 +3819,7 @@ public override async Task Where_datetimeoffset_day_component(bool async) AssertSql( """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE DATEPART('d', `m`.`Timeline`) = 2 """); @@ -3787,7 +3835,7 @@ await AssertQuery( AssertSql( """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE DATEPART('h', `m`.`Timeline`) = 8 """); @@ -3799,7 +3847,7 @@ public override async Task Where_datetimeoffset_minute_component(bool async) AssertSql( """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE DATEPART('n', `m`.`Timeline`) = 0 """); @@ -3811,7 +3859,7 @@ public override async Task Where_datetimeoffset_second_component(bool async) AssertSql( """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE DATEPART('s', `m`.`Timeline`) = 0 """); @@ -3921,7 +3969,7 @@ public override async Task Complex_predicate_with_AndAlso_and_nullable_bool_prop await base.Complex_predicate_with_AndAlso_and_nullable_bool_property(async); AssertSql( -""" + """ SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM `Weapons` AS `w` LEFT JOIN ( @@ -3930,8 +3978,8 @@ LEFT JOIN ( UNION ALL SELECT `o`.`FullName`, `o`.`HasSoulPatch` FROM `Officers` AS `o` -) AS `t` ON `w`.`OwnerFullName` = `t`.`FullName` -WHERE `w`.`Id` <> 50 AND `t`.`HasSoulPatch` <> TRUE +) AS `u` ON `w`.`OwnerFullName` = `u`.`FullName` +WHERE `w`.`Id` <> 50 AND `u`.`HasSoulPatch` <> TRUE """); } @@ -3940,17 +3988,17 @@ public override async Task Distinct_with_optional_navigation_is_translated_to_sq await base.Distinct_with_optional_navigation_is_translated_to_sql(async); AssertSql( -""" -SELECT DISTINCT `t`.`HasSoulPatch` + """ +SELECT DISTINCT `u`.`HasSoulPatch` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`HasSoulPatch` FROM `Officers` AS `o` -) AS `t` -LEFT JOIN `Tags` AS `t0` ON `t`.`Nickname` = `t0`.`GearNickName` AND `t`.`SquadId` = `t0`.`GearSquadId` -WHERE `t0`.`Note` <> 'Foo' OR `t0`.`Note` IS NULL +) AS `u` +LEFT JOIN `Tags` AS `t` ON `u`.`Nickname` = `t`.`GearNickName` AND `u`.`SquadId` = `t`.`GearSquadId` +WHERE `t`.`Note` <> 'Foo' OR `t`.`Note` IS NULL """); } @@ -3960,16 +4008,16 @@ public override async Task Sum_with_optional_navigation_is_translated_to_sql(boo AssertSql( """ -SELECT IIF(SUM(`t`.`SquadId`) IS NULL, 0, SUM(`t`.`SquadId`)) +SELECT IIF(SUM(`u`.`SquadId`) IS NULL, 0, SUM(`u`.`SquadId`)) FROM ( SELECT `g`.`Nickname`, `g`.`SquadId` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId` FROM `Officers` AS `o` -) AS `t` -LEFT JOIN `Tags` AS `t0` ON `t`.`Nickname` = `t0`.`GearNickName` AND `t`.`SquadId` = `t0`.`GearSquadId` -WHERE `t0`.`Note` <> 'Foo' OR `t0`.`Note` IS NULL +) AS `u` +LEFT JOIN `Tags` AS `t` ON `u`.`Nickname` = `t`.`GearNickName` AND `u`.`SquadId` = `t`.`GearSquadId` +WHERE `t`.`Note` <> 'Foo' OR `t`.`Note` IS NULL """); } @@ -3978,7 +4026,7 @@ public override async Task Count_with_optional_navigation_is_translated_to_sql(b await base.Count_with_optional_navigation_is_translated_to_sql(async); AssertSql( -""" + """ SELECT COUNT(*) FROM ( SELECT `g`.`Nickname`, `g`.`SquadId` @@ -3986,9 +4034,9 @@ SELECT COUNT(*) UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId` FROM `Officers` AS `o` -) AS `t` -LEFT JOIN `Tags` AS `t0` ON `t`.`Nickname` = `t0`.`GearNickName` AND `t`.`SquadId` = `t0`.`GearSquadId` -WHERE `t0`.`Note` <> 'Foo' OR `t0`.`Note` IS NULL +) AS `u` +LEFT JOIN `Tags` AS `t` ON `u`.`Nickname` = `t`.`GearNickName` AND `u`.`SquadId` = `t`.`GearSquadId` +WHERE `t`.`Note` <> 'Foo' OR `t`.`Note` IS NULL """); } @@ -3997,16 +4045,16 @@ public override async Task FirstOrDefault_with_manually_created_groupjoin_is_tra await base.FirstOrDefault_with_manually_created_groupjoin_is_translated_to_sql(async); AssertSql( -""" + """ SELECT TOP 1 `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name` FROM `Squads` AS `s` LEFT JOIN ( - SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + SELECT `g`.`SquadId` FROM `Gears` AS `g` UNION ALL - SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + SELECT `o`.`SquadId` FROM `Officers` AS `o` -) AS `t` ON `s`.`Id` = `t`.`SquadId` +) AS `u` ON `s`.`Id` = `u`.`SquadId` WHERE `s`.`Name` = 'Kilo' """); } @@ -4016,20 +4064,20 @@ public override async Task Any_with_optional_navigation_as_subquery_predicate_is await base.Any_with_optional_navigation_as_subquery_predicate_is_translated_to_sql(async); AssertSql( -""" + """ SELECT `s`.`Name` FROM `Squads` AS `s` WHERE NOT EXISTS ( SELECT 1 FROM ( - SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + SELECT `g`.`Nickname`, `g`.`SquadId` FROM `Gears` AS `g` UNION ALL - SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + SELECT `o`.`Nickname`, `o`.`SquadId` FROM `Officers` AS `o` - ) AS `t` - LEFT JOIN `Tags` AS `t0` ON `t`.`Nickname` = `t0`.`GearNickName` AND `t`.`SquadId` = `t0`.`GearSquadId` - WHERE `s`.`Id` = `t`.`SquadId` AND `t0`.`Note` = 'Dom''s Tag') + ) AS `u` + LEFT JOIN `Tags` AS `t` ON `u`.`Nickname` = `t`.`GearNickName` AND `u`.`SquadId` = `t`.`GearSquadId` + WHERE `s`.`Id` = `u`.`SquadId` AND `t`.`Note` = 'Dom''s Tag') """); } @@ -4038,18 +4086,18 @@ public override async Task All_with_optional_navigation_is_translated_to_sql(boo await base.All_with_optional_navigation_is_translated_to_sql(async); AssertSql( -""" + """ SELECT IIF(NOT EXISTS ( SELECT 1 FROM ( - SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + SELECT `g`.`Nickname`, `g`.`SquadId` FROM `Gears` AS `g` UNION ALL - SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + SELECT `o`.`Nickname`, `o`.`SquadId` FROM `Officers` AS `o` - ) AS `t` - LEFT JOIN `Tags` AS `t0` ON `t`.`Nickname` = `t0`.`GearNickName` AND `t`.`SquadId` = `t0`.`GearSquadId` - WHERE `t0`.`Note` = 'Foo' AND `t0`.`Note` IS NOT NULL), TRUE, FALSE) + ) AS `u` + LEFT JOIN `Tags` AS `t` ON `u`.`Nickname` = `t`.`GearNickName` AND `u`.`SquadId` = `t`.`GearSquadId` + WHERE `t`.`Note` = 'Foo'), TRUE, FALSE) FROM (SELECT COUNT(*) FROM `#Dual`) """); } @@ -4071,17 +4119,17 @@ public override async Task Unnecessary_include_doesnt_get_added_complex_when_pro await base.Unnecessary_include_doesnt_get_added_complex_when_projecting_EF_Property(async); AssertSql( -""" -SELECT `t`.`FullName` + """ +SELECT `u`.`FullName` FROM ( SELECT `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`Rank` FROM `Gears` AS `g` UNION ALL SELECT `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`Rank` FROM `Officers` AS `o` -) AS `t` -WHERE `t`.`HasSoulPatch` = TRUE -ORDER BY `t`.`Rank` +) AS `u` +WHERE `u`.`HasSoulPatch` = TRUE +ORDER BY `u`.`Rank` """); } @@ -4090,17 +4138,17 @@ public override async Task Multiple_order_bys_are_properly_lifted_from_subquery_ await base.Multiple_order_bys_are_properly_lifted_from_subquery_created_by_include(async); AssertSql( -""" -SELECT `t`.`FullName` + """ +SELECT `u`.`FullName` FROM ( SELECT `g`.`FullName`, `g`.`HasSoulPatch` FROM `Gears` AS `g` UNION ALL SELECT `o`.`FullName`, `o`.`HasSoulPatch` FROM `Officers` AS `o` -) AS `t` -WHERE `t`.`HasSoulPatch` <> TRUE -ORDER BY `t`.`FullName` +) AS `u` +WHERE `u`.`HasSoulPatch` <> TRUE +ORDER BY `u`.`FullName` """); } @@ -4109,17 +4157,17 @@ public override async Task Order_by_is_properly_lifted_from_subquery_with_same_o await base.Order_by_is_properly_lifted_from_subquery_with_same_order_by_in_the_outer_query(async); AssertSql( -""" -SELECT `t`.`FullName` + """ +SELECT `u`.`FullName` FROM ( SELECT `g`.`FullName`, `g`.`HasSoulPatch` FROM `Gears` AS `g` UNION ALL SELECT `o`.`FullName`, `o`.`HasSoulPatch` FROM `Officers` AS `o` -) AS `t` -WHERE `t`.`HasSoulPatch` <> TRUE -ORDER BY `t`.`FullName` +) AS `u` +WHERE `u`.`HasSoulPatch` <> TRUE +ORDER BY `u`.`FullName` """); } @@ -4128,18 +4176,18 @@ public override async Task Where_is_properly_lifted_from_subquery_created_by_inc await base.Where_is_properly_lifted_from_subquery_created_by_include(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `t0`.`Id`, `t0`.`GearNickName`, `t0`.`GearSquadId`, `t0`.`IssueDate`, `t0`.`Note` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` -LEFT JOIN `Tags` AS `t0` ON `t`.`Nickname` = `t0`.`GearNickName` AND `t`.`SquadId` = `t0`.`GearSquadId` -WHERE `t`.`FullName` <> 'Augustus Cole' AND `t`.`HasSoulPatch` <> TRUE -ORDER BY `t`.`FullName` +) AS `u` +LEFT JOIN `Tags` AS `t` ON `u`.`Nickname` = `t`.`GearNickName` AND `u`.`SquadId` = `t`.`GearSquadId` +WHERE `u`.`FullName` <> 'Augustus Cole' AND `u`.`HasSoulPatch` <> TRUE +ORDER BY `u`.`FullName` """); } @@ -4148,24 +4196,24 @@ public override async Task Subquery_is_lifted_from_main_from_clause_of_SelectMan await base.Subquery_is_lifted_from_main_from_clause_of_SelectMany(async); AssertSql( -""" -SELECT `t`.`FullName` AS `Name1`, `t0`.`FullName` AS `Name2` + """ +SELECT `u`.`FullName` AS `Name1`, `u0`.`FullName` AS `Name2` FROM ( SELECT `g`.`FullName`, `g`.`HasSoulPatch` FROM `Gears` AS `g` UNION ALL SELECT `o`.`FullName`, `o`.`HasSoulPatch` FROM `Officers` AS `o` -) AS `t`, +) AS `u`, ( SELECT `g0`.`FullName`, `g0`.`HasSoulPatch` FROM `Gears` AS `g0` UNION ALL SELECT `o0`.`FullName`, `o0`.`HasSoulPatch` FROM `Officers` AS `o0` -) AS `t0` -WHERE `t`.`HasSoulPatch` = TRUE AND `t0`.`HasSoulPatch` <> TRUE -ORDER BY `t`.`FullName` +) AS `u0` +WHERE `u`.`HasSoulPatch` = TRUE AND `u0`.`HasSoulPatch` <> TRUE +ORDER BY `u`.`FullName` """); } @@ -4174,18 +4222,18 @@ public override async Task Subquery_containing_SelectMany_projecting_main_from_c await base.Subquery_containing_SelectMany_projecting_main_from_clause_gets_lifted(async); AssertSql( -""" -SELECT `t`.`FullName` + """ +SELECT `u`.`FullName` FROM ( SELECT `g`.`FullName`, `g`.`HasSoulPatch` FROM `Gears` AS `g` UNION ALL SELECT `o`.`FullName`, `o`.`HasSoulPatch` FROM `Officers` AS `o` -) AS `t`, -`Tags` AS `t0` -WHERE `t`.`HasSoulPatch` = TRUE -ORDER BY `t`.`FullName` +) AS `u`, +`Tags` AS `t` +WHERE `u`.`HasSoulPatch` = TRUE +ORDER BY `u`.`FullName` """); } @@ -4195,16 +4243,16 @@ public override async Task Subquery_containing_join_projecting_main_from_clause_ AssertSql( """ -SELECT `t`.`Nickname` +SELECT `u`.`Nickname` FROM ( SELECT `g`.`Nickname` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname` FROM `Officers` AS `o` -) AS `t` -INNER JOIN `Tags` AS `t0` ON `t`.`Nickname` = `t0`.`GearNickName` -ORDER BY `t`.`Nickname` +) AS `u` +INNER JOIN `Tags` AS `t` ON `u`.`Nickname` = `t`.`GearNickName` +ORDER BY `u`.`Nickname` """); } @@ -4213,17 +4261,17 @@ public override async Task Subquery_containing_left_join_projecting_main_from_cl await base.Subquery_containing_left_join_projecting_main_from_clause_gets_lifted(async); AssertSql( -""" -SELECT `t`.`Nickname` + """ +SELECT `u`.`Nickname` FROM ( SELECT `g`.`Nickname` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname` FROM `Officers` AS `o` -) AS `t` -LEFT JOIN `Tags` AS `t0` ON `t`.`Nickname` = `t0`.`GearNickName` -ORDER BY `t`.`Nickname` +) AS `u` +LEFT JOIN `Tags` AS `t` ON `u`.`Nickname` = `t`.`GearNickName` +ORDER BY `u`.`Nickname` """); } @@ -4233,18 +4281,18 @@ public override async Task Subquery_containing_join_gets_lifted_clashing_names(b AssertSql( """ -SELECT `t`.`Nickname` +SELECT `u`.`Nickname` FROM (( SELECT `g`.`Nickname` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname` FROM `Officers` AS `o` -) AS `t` -INNER JOIN `Tags` AS `t0` ON `t`.`Nickname` = `t0`.`GearNickName`) -INNER JOIN `Tags` AS `t1` ON `t`.`Nickname` = `t1`.`GearNickName` -WHERE `t0`.`GearNickName` <> 'Cole Train' OR `t0`.`GearNickName` IS NULL -ORDER BY `t`.`Nickname`, `t1`.`Id` +) AS `u` +INNER JOIN `Tags` AS `t` ON `u`.`Nickname` = `t`.`GearNickName`) +INNER JOIN `Tags` AS `t0` ON `u`.`Nickname` = `t0`.`GearNickName` +WHERE `t`.`GearNickName` <> 'Cole Train' OR `t`.`GearNickName` IS NULL +ORDER BY `u`.`Nickname`, `t0`.`Id` """); } @@ -4253,21 +4301,21 @@ public override async Task Subquery_created_by_include_gets_lifted_nested(bool a await base.Subquery_created_by_include_gets_lifted_nested(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `c`.`Name`, `c`.`Location`, `c`.`Nation` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `c`.`Name`, `c`.`Location`, `c`.`Nation` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` -INNER JOIN `Cities` AS `c` ON `t`.`CityOfBirthName` = `c`.`Name` +) AS `u` +INNER JOIN `Cities` AS `c` ON `u`.`CityOfBirthName` = `c`.`Name` WHERE EXISTS ( SELECT 1 FROM `Weapons` AS `w` - WHERE `t`.`FullName` = `w`.`OwnerFullName`) AND `t`.`HasSoulPatch` <> TRUE -ORDER BY `t`.`Nickname` + WHERE `u`.`FullName` = `w`.`OwnerFullName`) AND `u`.`HasSoulPatch` <> TRUE +ORDER BY `u`.`Nickname` """); } @@ -4276,24 +4324,24 @@ public override async Task Subquery_is_lifted_from_additional_from_clause(bool a await base.Subquery_is_lifted_from_additional_from_clause(async); AssertSql( -""" -SELECT `t`.`FullName` AS `Name1`, `t0`.`FullName` AS `Name2` + """ +SELECT `u`.`FullName` AS `Name1`, `u0`.`FullName` AS `Name2` FROM ( SELECT `g`.`FullName`, `g`.`HasSoulPatch` FROM `Gears` AS `g` UNION ALL SELECT `o`.`FullName`, `o`.`HasSoulPatch` FROM `Officers` AS `o` -) AS `t`, +) AS `u`, ( SELECT `g0`.`FullName`, `g0`.`HasSoulPatch` FROM `Gears` AS `g0` UNION ALL SELECT `o0`.`FullName`, `o0`.`HasSoulPatch` FROM `Officers` AS `o0` -) AS `t0` -WHERE `t`.`HasSoulPatch` = TRUE AND `t0`.`HasSoulPatch` <> TRUE -ORDER BY `t`.`FullName` +) AS `u0` +WHERE `u`.`HasSoulPatch` = TRUE AND `u0`.`HasSoulPatch` <> TRUE +ORDER BY `u`.`FullName` """); } @@ -4302,21 +4350,21 @@ public override async Task Subquery_with_result_operator_is_not_lifted(bool asyn await base.Subquery_with_result_operator_is_not_lifted(async); AssertSql( -""" -SELECT `t0`.`FullName` + """ +SELECT `u0`.`FullName` FROM ( - SELECT TOP 2 `t`.`FullName`, `t`.`Rank` + SELECT TOP 2 `u`.`FullName`, `u`.`Rank` FROM ( SELECT `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`Rank` FROM `Gears` AS `g` UNION ALL SELECT `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`Rank` FROM `Officers` AS `o` - ) AS `t` - WHERE `t`.`HasSoulPatch` <> TRUE - ORDER BY `t`.`FullName` -) AS `t0` -ORDER BY `t0`.`Rank` + ) AS `u` + WHERE `u`.`HasSoulPatch` <> TRUE + ORDER BY `u`.`FullName` +) AS `u0` +ORDER BY `u0`.`Rank` """); } @@ -4399,20 +4447,20 @@ public override async Task Take_without_orderby_followed_by_orderBy_is_pushed_do await base.Take_without_orderby_followed_by_orderBy_is_pushed_down3(async); AssertSql( -""" -SELECT `t0`.`FullName` + """ +SELECT `u0`.`FullName` FROM ( - SELECT TOP 999 `t`.`FullName`, `t`.`Rank` + SELECT TOP 999 `u`.`FullName`, `u`.`Rank` FROM ( SELECT `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`Rank` FROM `Gears` AS `g` UNION ALL SELECT `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`Rank` FROM `Officers` AS `o` - ) AS `t` - WHERE `t`.`HasSoulPatch` <> TRUE -) AS `t0` -ORDER BY `t0`.`FullName`, `t0`.`Rank` + ) AS `u` + WHERE `u`.`HasSoulPatch` <> TRUE +) AS `u0` +ORDER BY `u0`.`FullName`, `u0`.`Rank` """); } @@ -4543,13 +4591,13 @@ public override async Task Collection_navigation_access_on_derived_entity_using_ SELECT `l`.`Name`, ( SELECT COUNT(*) FROM ( - 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` + SELECT `l0`.`LocustHordeId` FROM `LocustLeaders` AS `l0` UNION ALL - SELECT `l1`.`Name`, `l1`.`LocustHordeId`, `l1`.`ThreatLevel`, `l1`.`ThreatLevelByte`, `l1`.`ThreatLevelNullableByte`, `l1`.`DefeatedByNickname`, `l1`.`DefeatedBySquadId`, `l1`.`HighCommandId`, 'LocustCommander' AS `Discriminator` + SELECT `l1`.`LocustHordeId` FROM `LocustCommanders` AS `l1` - ) AS `t` - WHERE `l`.`Id` = `t`.`LocustHordeId`) AS `LeadersCount` + ) AS `u` + WHERE `l`.`Id` = `u`.`LocustHordeId`) AS `LeadersCount` FROM `LocustHordes` AS `l` ORDER BY `l`.`Name` """); @@ -4560,8 +4608,8 @@ public override async Task Collection_navigation_access_on_derived_entity_using_ await base.Collection_navigation_access_on_derived_entity_using_cast_in_SelectMany(async); AssertSql( -""" -SELECT `l`.`Name`, `t`.`Name` AS `LeaderName` + """ +SELECT `l`.`Name`, `u`.`Name` AS `LeaderName` FROM `LocustHordes` AS `l` INNER JOIN ( SELECT `l0`.`Name`, `l0`.`LocustHordeId` @@ -4569,8 +4617,8 @@ INNER JOIN ( UNION ALL SELECT `l1`.`Name`, `l1`.`LocustHordeId` FROM `LocustCommanders` AS `l1` -) AS `t` ON `l`.`Id` = `t`.`LocustHordeId` -ORDER BY `t`.`Name` +) AS `u` ON `l`.`Id` = `u`.`LocustHordeId` +ORDER BY `u`.`Name` """); } @@ -4580,7 +4628,7 @@ public override async Task Include_on_derived_entity_using_OfType(bool async) AssertSql( """ -SELECT `l`.`Id`, `l`.`CapitalName`, `l`.`Name`, `l`.`ServerAddress`, `l`.`CommanderName`, `l`.`Eradicated`, `l0`.`Name`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, `t`.`Name`, `t`.`LocustHordeId`, `t`.`ThreatLevel`, `t`.`ThreatLevelByte`, `t`.`ThreatLevelNullableByte`, `t`.`DefeatedByNickname`, `t`.`DefeatedBySquadId`, `t`.`HighCommandId`, `t`.`Discriminator` +SELECT `l`.`Id`, `l`.`CapitalName`, `l`.`Name`, `l`.`ServerAddress`, `l`.`CommanderName`, `l`.`Eradicated`, `l0`.`Name`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, `u`.`Name`, `u`.`LocustHordeId`, `u`.`ThreatLevel`, `u`.`ThreatLevelByte`, `u`.`ThreatLevelNullableByte`, `u`.`DefeatedByNickname`, `u`.`DefeatedBySquadId`, `u`.`HighCommandId`, `u`.`Discriminator` FROM (`LocustHordes` AS `l` LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`CommanderName` = `l0`.`Name`) LEFT JOIN ( @@ -4589,7 +4637,7 @@ LEFT JOIN ( UNION ALL SELECT `l2`.`Name`, `l2`.`LocustHordeId`, `l2`.`ThreatLevel`, `l2`.`ThreatLevelByte`, `l2`.`ThreatLevelNullableByte`, `l2`.`DefeatedByNickname`, `l2`.`DefeatedBySquadId`, `l2`.`HighCommandId`, 'LocustCommander' AS `Discriminator` FROM `LocustCommanders` AS `l2` -) AS `t` ON `l`.`Id` = `t`.`LocustHordeId` +) AS `u` ON `l`.`Id` = `u`.`LocustHordeId` ORDER BY `l`.`Name`, `l`.`Id`, `l0`.`Name` """); } @@ -4599,18 +4647,18 @@ public override async Task Distinct_on_subquery_doesnt_get_lifted(bool async) await base.Distinct_on_subquery_doesnt_get_lifted(async); AssertSql( -""" -SELECT `t0`.`HasSoulPatch` + """ +SELECT `u0`.`HasSoulPatch` FROM ( - SELECT DISTINCT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + SELECT DISTINCT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` -) AS `t0` + ) AS `u` +) AS `u0` """); } @@ -4630,24 +4678,24 @@ public override async Task Comparing_two_collection_navigations_composite_key(bo await base.Comparing_two_collection_navigations_composite_key(async); AssertSql( -""" -SELECT `t`.`Nickname` AS `Nickname1`, `t0`.`Nickname` AS `Nickname2` + """ +SELECT `u`.`Nickname` AS `Nickname1`, `u0`.`Nickname` AS `Nickname2` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId` FROM `Officers` AS `o` -) AS `t`, +) AS `u`, ( SELECT `g0`.`Nickname`, `g0`.`SquadId` FROM `Gears` AS `g0` UNION ALL SELECT `o0`.`Nickname`, `o0`.`SquadId` FROM `Officers` AS `o0` -) AS `t0` -WHERE `t`.`Nickname` = `t0`.`Nickname` AND `t`.`SquadId` = `t0`.`SquadId` -ORDER BY `t`.`Nickname` +) AS `u0` +WHERE `u`.`Nickname` = `u0`.`Nickname` AND `u`.`SquadId` = `u0`.`SquadId` +ORDER BY `u`.`Nickname` """); } @@ -4656,26 +4704,26 @@ public override async Task Comparing_two_collection_navigations_inheritance(bool await base.Comparing_two_collection_navigations_inheritance(async); AssertSql( -""" -SELECT `t0`.`Name`, `t0`.`Nickname` + """ +SELECT `s`.`Name`, `s`.`Nickname` FROM (( - SELECT `l`.`Name`, `l`.`CommanderName`, `t`.`Nickname`, `t`.`SquadId` + SELECT `l`.`Name`, `l`.`CommanderName`, `u`.`Nickname`, `u`.`SquadId` FROM `LocustHordes` AS `l`, ( - SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`HasSoulPatch` - FROM `Officers` AS `o0` - ) AS `t` - WHERE `t`.`HasSoulPatch` = TRUE -) AS `t0` -LEFT JOIN `LocustCommanders` AS `l0` ON `t0`.`CommanderName` = `l0`.`Name`) + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`HasSoulPatch` + FROM `Officers` AS `o` + ) AS `u` + WHERE `u`.`HasSoulPatch` = TRUE +) AS `s` +LEFT JOIN `LocustCommanders` AS `l0` ON `s`.`CommanderName` = `l0`.`Name`) LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId` FROM `Gears` AS `g` UNION ALL - SELECT `o`.`Nickname`, `o`.`SquadId` - FROM `Officers` AS `o` -) AS `t1` ON `l0`.`DefeatedByNickname` = `t1`.`Nickname` AND `l0`.`DefeatedBySquadId` = `t1`.`SquadId` -WHERE `t1`.`Nickname` = `t0`.`Nickname` AND `t1`.`SquadId` = `t0`.`SquadId` + SELECT `o0`.`Nickname`, `o0`.`SquadId` + FROM `Officers` AS `o0` +) AS `u0` ON `l0`.`DefeatedByNickname` = `u0`.`Nickname` AND `l0`.`DefeatedBySquadId` = `u0`.`SquadId` +WHERE `u0`.`Nickname` = `s`.`Nickname` AND `u0`.`SquadId` = `s`.`SquadId` """); } @@ -4684,21 +4732,21 @@ public override async Task Comparing_entities_using_Equals_inheritance(bool asyn await base.Comparing_entities_using_Equals_inheritance(async); AssertSql( -""" -SELECT `t`.`Nickname` AS `Nickname1`, `t0`.`Nickname` AS `Nickname2` + """ +SELECT `u`.`Nickname` AS `Nickname1`, `u0`.`Nickname` AS `Nickname2` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId` FROM `Officers` AS `o` -) AS `t`, +) AS `u`, ( SELECT `o0`.`Nickname`, `o0`.`SquadId` FROM `Officers` AS `o0` -) AS `t0` -WHERE `t`.`Nickname` = `t0`.`Nickname` AND `t`.`SquadId` = `t0`.`SquadId` -ORDER BY `t`.`Nickname`, `t0`.`Nickname` +) AS `u0` +WHERE `u`.`Nickname` = `u0`.`Nickname` AND `u`.`SquadId` = `u0`.`SquadId` +ORDER BY `u`.`Nickname`, `u0`.`Nickname` """); } @@ -4707,17 +4755,17 @@ public override async Task Contains_on_nullable_array_produces_correct_sql(bool await base.Contains_on_nullable_array_produces_correct_sql(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` -LEFT JOIN `Cities` AS `c` ON `t`.`AssignedCityName` = `c`.`Name` -WHERE `t`.`SquadId` < 2 AND (`c`.`Name` IS NULL OR `c`.`Name` = 'Ephyra') +) AS `u` +LEFT JOIN `Cities` AS `c` ON `u`.`AssignedCityName` = `c`.`Name` +WHERE `u`.`SquadId` < 2 AND (`c`.`Name` IS NULL OR `c`.`Name` = 'Ephyra') """); } @@ -4726,7 +4774,7 @@ public override async Task Optional_navigation_with_collection_composite_key(boo await base.Optional_navigation_with_collection_composite_key(async); AssertSql( -""" + """ SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` FROM `Tags` AS `t` LEFT JOIN ( @@ -4735,17 +4783,17 @@ LEFT JOIN ( UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, 'Officer' AS `Discriminator` FROM `Officers` AS `o` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` -WHERE `t0`.`Discriminator` = 'Officer' AND ( +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE `u`.`Discriminator` = 'Officer' AND ( SELECT COUNT(*) FROM ( - SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + SELECT `g0`.`Nickname`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId` FROM `Gears` AS `g0` UNION ALL - SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + SELECT `o0`.`Nickname`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId` FROM `Officers` AS `o0` - ) AS `t1` - WHERE `t0`.`Nickname` IS NOT NULL AND `t0`.`SquadId` IS NOT NULL AND `t0`.`Nickname` = `t1`.`LeaderNickname` AND `t0`.`SquadId` = `t1`.`LeaderSquadId` AND `t1`.`Nickname` = 'Dom') > 0 + ) AS `u0` + WHERE `u`.`Nickname` IS NOT NULL AND `u`.`SquadId` IS NOT NULL AND `u`.`Nickname` = `u0`.`LeaderNickname` AND `u`.`SquadId` = `u0`.`LeaderSquadId` AND `u0`.`Nickname` = 'Dom') > 0 """); } @@ -4777,7 +4825,7 @@ public override async Task Project_collection_navigation_with_inheritance1(bool AssertSql( """ -SELECT `l`.`Id`, `l0`.`Name`, `l1`.`Id`, `t`.`Name`, `t`.`LocustHordeId`, `t`.`ThreatLevel`, `t`.`ThreatLevelByte`, `t`.`ThreatLevelNullableByte`, `t`.`DefeatedByNickname`, `t`.`DefeatedBySquadId`, `t`.`HighCommandId`, `t`.`Discriminator` +SELECT `l`.`Id`, `l0`.`Name`, `l1`.`Id`, `u`.`Name`, `u`.`LocustHordeId`, `u`.`ThreatLevel`, `u`.`ThreatLevelByte`, `u`.`ThreatLevelNullableByte`, `u`.`DefeatedByNickname`, `u`.`DefeatedBySquadId`, `u`.`HighCommandId`, `u`.`Discriminator` FROM ((`LocustHordes` AS `l` LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`CommanderName` = `l0`.`Name`) LEFT JOIN `LocustHordes` AS `l1` ON `l0`.`Name` = `l1`.`CommanderName`) @@ -4787,7 +4835,7 @@ LEFT JOIN ( UNION ALL SELECT `l3`.`Name`, `l3`.`LocustHordeId`, `l3`.`ThreatLevel`, `l3`.`ThreatLevelByte`, `l3`.`ThreatLevelNullableByte`, `l3`.`DefeatedByNickname`, `l3`.`DefeatedBySquadId`, `l3`.`HighCommandId`, 'LocustCommander' AS `Discriminator` FROM `LocustCommanders` AS `l3` -) AS `t` ON `l1`.`Id` = `t`.`LocustHordeId` +) AS `u` ON `l1`.`Id` = `u`.`LocustHordeId` ORDER BY `l`.`Id`, `l0`.`Name`, `l1`.`Id` """); } @@ -4796,8 +4844,8 @@ public override async Task Project_collection_navigation_with_inheritance2(bool { await base.Project_collection_navigation_with_inheritance2(async); AssertSql( - """ -SELECT `l`.`Id`, `l0`.`Name`, `t`.`Nickname`, `t`.`SquadId`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator` + """ +SELECT `l`.`Id`, `l0`.`Name`, `u`.`Nickname`, `u`.`SquadId`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` FROM ((`LocustHordes` AS `l` LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`CommanderName` = `l0`.`Name`) LEFT JOIN ( @@ -4806,15 +4854,15 @@ LEFT JOIN ( UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId` FROM `Officers` AS `o` -) AS `t` ON `l0`.`DefeatedByNickname` = `t`.`Nickname` AND `l0`.`DefeatedBySquadId` = `t`.`SquadId`) +) AS `u` ON `l0`.`DefeatedByNickname` = `u`.`Nickname` AND `l0`.`DefeatedBySquadId` = `u`.`SquadId`) LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g0` UNION ALL SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` FROM `Officers` AS `o0` -) AS `t0` ON (`t`.`Nickname` = `t0`.`LeaderNickname` OR (`t`.`Nickname` IS NULL AND `t0`.`LeaderNickname` IS NULL)) AND `t`.`SquadId` = `t0`.`LeaderSquadId` -ORDER BY `l`.`Id`, `l0`.`Name`, `t`.`Nickname`, `t`.`SquadId`, `t0`.`Nickname` +) AS `u0` ON (`u`.`Nickname` = `u0`.`LeaderNickname` OR (`u`.`Nickname` IS NULL AND `u0`.`LeaderNickname` IS NULL)) AND `u`.`SquadId` = `u0`.`LeaderSquadId` +ORDER BY `l`.`Id`, `l0`.`Name`, `u`.`Nickname`, `u`.`SquadId`, `u0`.`Nickname` """); } @@ -4822,8 +4870,8 @@ public override async Task Project_collection_navigation_with_inheritance3(bool { await base.Project_collection_navigation_with_inheritance3(async); AssertSql( - """ -SELECT `l`.`Id`, `l0`.`Name`, `t`.`Nickname`, `t`.`SquadId`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator` + """ +SELECT `l`.`Id`, `l0`.`Name`, `u`.`Nickname`, `u`.`SquadId`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` FROM ((`LocustHordes` AS `l` LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`CommanderName` = `l0`.`Name`) LEFT JOIN ( @@ -4832,15 +4880,15 @@ LEFT JOIN ( UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId` FROM `Officers` AS `o` -) AS `t` ON `l0`.`DefeatedByNickname` = `t`.`Nickname` AND `l0`.`DefeatedBySquadId` = `t`.`SquadId`) +) AS `u` ON `l0`.`DefeatedByNickname` = `u`.`Nickname` AND `l0`.`DefeatedBySquadId` = `u`.`SquadId`) LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g0` UNION ALL SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` FROM `Officers` AS `o0` -) AS `t0` ON (`t`.`Nickname` = `t0`.`LeaderNickname` OR (`t`.`Nickname` IS NULL AND `t0`.`LeaderNickname` IS NULL)) AND `t`.`SquadId` = `t0`.`LeaderSquadId` -ORDER BY `l`.`Id`, `l0`.`Name`, `t`.`Nickname`, `t`.`SquadId`, `t0`.`Nickname` +) AS `u0` ON (`u`.`Nickname` = `u0`.`LeaderNickname` OR (`u`.`Nickname` IS NULL AND `u0`.`LeaderNickname` IS NULL)) AND `u`.`SquadId` = `u0`.`LeaderSquadId` +ORDER BY `l`.`Id`, `l0`.`Name`, `u`.`Nickname`, `u`.`SquadId`, `u0`.`Nickname` """); } @@ -4850,21 +4898,21 @@ public override async Task Include_reference_on_derived_type_using_string(bool a AssertSql( """ -SELECT `t`.`Name`, `t`.`LocustHordeId`, `t`.`ThreatLevel`, `t`.`ThreatLevelByte`, `t`.`ThreatLevelNullableByte`, `t`.`DefeatedByNickname`, `t`.`DefeatedBySquadId`, `t`.`HighCommandId`, `t`.`Discriminator`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator` +SELECT `u`.`Name`, `u`.`LocustHordeId`, `u`.`ThreatLevel`, `u`.`ThreatLevelByte`, `u`.`ThreatLevelNullableByte`, `u`.`DefeatedByNickname`, `u`.`DefeatedBySquadId`, `u`.`HighCommandId`, `u`.`Discriminator`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`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` FROM `LocustLeaders` AS `l` UNION ALL 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` +) AS `u` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 IIF(`t`.`DefeatedBySquadId` IS NULL, NULL, CLNG(`t`.`DefeatedBySquadId`)) = `t0`.`SquadId` +) AS `u0` ON `u`.`DefeatedByNickname` = `u0`.`Nickname` AND IIF(`u`.`DefeatedBySquadId` IS NULL, NULL, CLNG(`u`.`DefeatedBySquadId`)) = `u0`.`SquadId` """); } @@ -4874,22 +4922,22 @@ public override async Task Include_reference_on_derived_type_using_string_nested AssertSql( """ -SELECT `t`.`Name`, `t`.`LocustHordeId`, `t`.`ThreatLevel`, `t`.`ThreatLevelByte`, `t`.`ThreatLevelNullableByte`, `t`.`DefeatedByNickname`, `t`.`DefeatedBySquadId`, `t`.`HighCommandId`, `t`.`Discriminator`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator`, `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name` +SELECT `u`.`Name`, `u`.`LocustHordeId`, `u`.`ThreatLevel`, `u`.`ThreatLevelByte`, `u`.`ThreatLevelNullableByte`, `u`.`DefeatedByNickname`, `u`.`DefeatedBySquadId`, `u`.`HighCommandId`, `u`.`Discriminator`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator`, `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name` 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` FROM `LocustLeaders` AS `l` UNION ALL 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` +) AS `u` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 IIF(`t`.`DefeatedBySquadId` IS NULL, NULL, CLNG(`t`.`DefeatedBySquadId`)) = `t0`.`SquadId`) -LEFT JOIN `Squads` AS `s` ON `t0`.`SquadId` = `s`.`Id` +) AS `u0` ON `u`.`DefeatedByNickname` = `u0`.`Nickname` AND IIF(`u`.`DefeatedBySquadId` IS NULL, NULL, CLNG(`u`.`DefeatedBySquadId`)) = `u0`.`SquadId`) +LEFT JOIN `Squads` AS `s` ON `u0`.`SquadId` = `s`.`Id` """); } @@ -4898,34 +4946,34 @@ public override async Task Include_reference_on_derived_type_using_string_nested await base.Include_reference_on_derived_type_using_string_nested2(async); AssertSql( -""" -SELECT `t`.`Name`, `t`.`LocustHordeId`, `t`.`ThreatLevel`, `t`.`ThreatLevelByte`, `t`.`ThreatLevelNullableByte`, `t`.`DefeatedByNickname`, `t`.`DefeatedBySquadId`, `t`.`HighCommandId`, `t`.`Discriminator`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator`, `t1`.`Nickname`, `t1`.`SquadId`, `t1`.`AssignedCityName`, `t1`.`CityOfBirthName`, `t1`.`FullName`, `t1`.`HasSoulPatch`, `t1`.`LeaderNickname`, `t1`.`LeaderSquadId`, `t1`.`Rank`, `t1`.`Discriminator`, `t1`.`Name`, `t1`.`Location`, `t1`.`Nation` + """ +SELECT `u`.`Name`, `u`.`LocustHordeId`, `u`.`ThreatLevel`, `u`.`ThreatLevelByte`, `u`.`ThreatLevelNullableByte`, `u`.`DefeatedByNickname`, `u`.`DefeatedBySquadId`, `u`.`HighCommandId`, `u`.`Discriminator`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `s`.`Name`, `s`.`Location`, `s`.`Nation` 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` FROM `LocustLeaders` AS `l` UNION ALL 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` +) AS `u` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 IIF(`t`.`DefeatedBySquadId` IS NULL, NULL, CLNG(`t`.`DefeatedBySquadId`)) = `t0`.`SquadId`) +) AS `u0` ON `u`.`DefeatedByNickname` = `u0`.`Nickname` AND IIF(`u`.`DefeatedBySquadId` IS NULL, NULL, CLNG(`u`.`DefeatedBySquadId`)) = `u0`.`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` + SELECT `u1`.`Nickname`, `u1`.`SquadId`, `u1`.`AssignedCityName`, `u1`.`CityOfBirthName`, `u1`.`FullName`, `u1`.`HasSoulPatch`, `u1`.`LeaderNickname`, `u1`.`LeaderSquadId`, `u1`.`Rank`, `u1`.`Discriminator`, `c`.`Name`, `c`.`Location`, `c`.`Nation` FROM ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g0` UNION ALL SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` FROM `Officers` AS `o0` - ) AS `t2` - INNER JOIN `Cities` AS `c` ON `t2`.`CityOfBirthName` = `c`.`Name` -) AS `t1` ON (`t0`.`Nickname` = `t1`.`LeaderNickname` OR (`t0`.`Nickname` IS NULL AND `t1`.`LeaderNickname` IS NULL)) AND `t0`.`SquadId` = `t1`.`LeaderSquadId` -ORDER BY `t`.`Name`, `t0`.`Nickname`, `t0`.`SquadId`, `t1`.`Nickname`, `t1`.`SquadId` + ) AS `u1` + INNER JOIN `Cities` AS `c` ON `u1`.`CityOfBirthName` = `c`.`Name` +) AS `s` ON (`u0`.`Nickname` = `s`.`LeaderNickname` OR (`u0`.`Nickname` IS NULL AND `s`.`LeaderNickname` IS NULL)) AND `u0`.`SquadId` = `s`.`LeaderSquadId` +ORDER BY `u`.`Name`, `u0`.`Nickname`, `u0`.`SquadId`, `s`.`Nickname`, `s`.`SquadId` """); } @@ -4935,21 +4983,21 @@ public override async Task Include_reference_on_derived_type_using_lambda(bool a AssertSql( """ -SELECT `t`.`Name`, `t`.`LocustHordeId`, `t`.`ThreatLevel`, `t`.`ThreatLevelByte`, `t`.`ThreatLevelNullableByte`, `t`.`DefeatedByNickname`, `t`.`DefeatedBySquadId`, `t`.`HighCommandId`, `t`.`Discriminator`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator` +SELECT `u`.`Name`, `u`.`LocustHordeId`, `u`.`ThreatLevel`, `u`.`ThreatLevelByte`, `u`.`ThreatLevelNullableByte`, `u`.`DefeatedByNickname`, `u`.`DefeatedBySquadId`, `u`.`HighCommandId`, `u`.`Discriminator`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`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` FROM `LocustLeaders` AS `l` UNION ALL 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` +) AS `u` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 IIF(`t`.`DefeatedBySquadId` IS NULL, NULL, CLNG(`t`.`DefeatedBySquadId`)) = `t0`.`SquadId` +) AS `u0` ON `u`.`DefeatedByNickname` = `u0`.`Nickname` AND IIF(`u`.`DefeatedBySquadId` IS NULL, NULL, CLNG(`u`.`DefeatedBySquadId`)) = `u0`.`SquadId` """); } @@ -4959,21 +5007,21 @@ public override async Task Include_reference_on_derived_type_using_lambda_with_s AssertSql( """ -SELECT `t`.`Name`, `t`.`LocustHordeId`, `t`.`ThreatLevel`, `t`.`ThreatLevelByte`, `t`.`ThreatLevelNullableByte`, `t`.`DefeatedByNickname`, `t`.`DefeatedBySquadId`, `t`.`HighCommandId`, `t`.`Discriminator`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator` +SELECT `u`.`Name`, `u`.`LocustHordeId`, `u`.`ThreatLevel`, `u`.`ThreatLevelByte`, `u`.`ThreatLevelNullableByte`, `u`.`DefeatedByNickname`, `u`.`DefeatedBySquadId`, `u`.`HighCommandId`, `u`.`Discriminator`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`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` FROM `LocustLeaders` AS `l` UNION ALL 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` +) AS `u` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 IIF(`t`.`DefeatedBySquadId` IS NULL, NULL, CLNG(`t`.`DefeatedBySquadId`)) = `t0`.`SquadId` +) AS `u0` ON `u`.`DefeatedByNickname` = `u0`.`Nickname` AND IIF(`u`.`DefeatedBySquadId` IS NULL, NULL, CLNG(`u`.`DefeatedBySquadId`)) = `u0`.`SquadId` """); } @@ -4983,21 +5031,21 @@ public override async Task Include_reference_on_derived_type_using_lambda_with_t AssertSql( """ -SELECT `t`.`Name`, `t`.`LocustHordeId`, `t`.`ThreatLevel`, `t`.`ThreatLevelByte`, `t`.`ThreatLevelNullableByte`, `t`.`DefeatedByNickname`, `t`.`DefeatedBySquadId`, `t`.`HighCommandId`, `t`.`Discriminator`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator` +SELECT `u`.`Name`, `u`.`LocustHordeId`, `u`.`ThreatLevel`, `u`.`ThreatLevelByte`, `u`.`ThreatLevelNullableByte`, `u`.`DefeatedByNickname`, `u`.`DefeatedBySquadId`, `u`.`HighCommandId`, `u`.`Discriminator`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`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` FROM `LocustLeaders` AS `l` UNION ALL 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` +) AS `u` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 IIF(`t`.`DefeatedBySquadId` IS NULL, NULL, CLNG(`t`.`DefeatedBySquadId`)) = `t0`.`SquadId` +) AS `u0` ON `u`.`DefeatedByNickname` = `u0`.`Nickname` AND IIF(`u`.`DefeatedBySquadId` IS NULL, NULL, CLNG(`u`.`DefeatedBySquadId`)) = `u0`.`SquadId` """); } @@ -5006,23 +5054,23 @@ public override async Task Include_collection_on_derived_type_using_string(bool await base.Include_collection_on_derived_type_using_string(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` +) AS `u` LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g0` UNION ALL SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` FROM `Officers` AS `o0` -) AS `t0` ON `t`.`Nickname` = `t0`.`LeaderNickname` AND `t`.`SquadId` = `t0`.`LeaderSquadId` -ORDER BY `t`.`Nickname`, `t`.`SquadId`, `t0`.`Nickname` +) AS `u0` ON `u`.`Nickname` = `u0`.`LeaderNickname` AND `u`.`SquadId` = `u0`.`LeaderSquadId` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `u0`.`Nickname` """); } @@ -5031,23 +5079,23 @@ public override async Task Include_collection_on_derived_type_using_lambda(bool await base.Include_collection_on_derived_type_using_lambda(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` +) AS `u` LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g0` UNION ALL SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` FROM `Officers` AS `o0` -) AS `t0` ON `t`.`Nickname` = `t0`.`LeaderNickname` AND `t`.`SquadId` = `t0`.`LeaderSquadId` -ORDER BY `t`.`Nickname`, `t`.`SquadId`, `t0`.`Nickname` +) AS `u0` ON `u`.`Nickname` = `u0`.`LeaderNickname` AND `u`.`SquadId` = `u0`.`LeaderSquadId` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `u0`.`Nickname` """); } @@ -5057,22 +5105,22 @@ public override async Task Include_collection_on_derived_type_using_lambda_with_ AssertSql( """ -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator` +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` +) AS `u` LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g0` UNION ALL SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` FROM `Officers` AS `o0` -) AS `t0` ON `t`.`Nickname` = `t0`.`LeaderNickname` AND `t`.`SquadId` = `t0`.`LeaderSquadId` -ORDER BY `t`.`Nickname`, `t`.`SquadId`, `t0`.`Nickname` +) AS `u0` ON `u`.`Nickname` = `u0`.`LeaderNickname` AND `u`.`SquadId` = `u0`.`LeaderSquadId` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `u0`.`Nickname` """); } @@ -5081,18 +5129,18 @@ public override async Task Include_base_navigation_on_derived_entity(bool async) await base.Include_base_navigation_on_derived_entity(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `t0`.`Id`, `t0`.`GearNickName`, `t0`.`GearSquadId`, `t0`.`IssueDate`, `t0`.`Note`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM (( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` -LEFT JOIN `Tags` AS `t0` ON `t`.`Nickname` = `t0`.`GearNickName` AND `t`.`SquadId` = `t0`.`GearSquadId`) -LEFT JOIN `Weapons` AS `w` ON `t`.`FullName` = `w`.`OwnerFullName` -ORDER BY `t`.`Nickname`, `t`.`SquadId`, `t0`.`Id` +) AS `u` +LEFT JOIN `Tags` AS `t` ON `u`.`Nickname` = `t`.`GearNickName` AND `u`.`SquadId` = `t`.`GearSquadId`) +LEFT JOIN `Weapons` AS `w` ON `u`.`FullName` = `w`.`OwnerFullName` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `t`.`Id` """); } @@ -5101,8 +5149,8 @@ public override async Task ThenInclude_collection_on_derived_after_base_referenc await base.ThenInclude_collection_on_derived_after_base_reference(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note`, `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM (`Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` @@ -5110,9 +5158,9 @@ 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`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId`) -LEFT JOIN `Weapons` AS `w` ON `t0`.`FullName` = `w`.`OwnerFullName` -ORDER BY `t`.`Id`, `t0`.`Nickname`, `t0`.`SquadId` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId`) +LEFT JOIN `Weapons` AS `w` ON `u`.`FullName` = `w`.`OwnerFullName` +ORDER BY `t`.`Id`, `u`.`Nickname`, `u`.`SquadId` """); } @@ -5121,8 +5169,8 @@ public override async Task ThenInclude_collection_on_derived_after_derived_refer await base.ThenInclude_collection_on_derived_after_derived_reference(async); AssertSql( -""" -SELECT `l`.`Id`, `l`.`CapitalName`, `l`.`Name`, `l`.`ServerAddress`, `l`.`CommanderName`, `l`.`Eradicated`, `l0`.`Name`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator` + """ +SELECT `l`.`Id`, `l`.`CapitalName`, `l`.`Name`, `l`.`ServerAddress`, `l`.`CommanderName`, `l`.`Eradicated`, `l0`.`Name`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` FROM ((`LocustHordes` AS `l` LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`CommanderName` = `l0`.`Name`) LEFT JOIN ( @@ -5131,15 +5179,15 @@ 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 `t` ON `l0`.`DefeatedByNickname` = `t`.`Nickname` AND `l0`.`DefeatedBySquadId` = `t`.`SquadId`) +) AS `u` ON `l0`.`DefeatedByNickname` = `u`.`Nickname` AND `l0`.`DefeatedBySquadId` = `u`.`SquadId`) LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g0` UNION ALL SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` FROM `Officers` AS `o0` -) AS `t0` ON (`t`.`Nickname` = `t0`.`LeaderNickname` OR (`t`.`Nickname` IS NULL AND `t0`.`LeaderNickname` IS NULL)) AND `t`.`SquadId` = `t0`.`LeaderSquadId` -ORDER BY `l`.`Id`, `l0`.`Name`, `t`.`Nickname`, `t`.`SquadId`, `t0`.`Nickname` +) AS `u0` ON (`u`.`Nickname` = `u0`.`LeaderNickname` OR (`u`.`Nickname` IS NULL AND `u0`.`LeaderNickname` IS NULL)) AND `u`.`SquadId` = `u0`.`LeaderSquadId` +ORDER BY `l`.`Id`, `l0`.`Name`, `u`.`Nickname`, `u`.`SquadId`, `u0`.`Nickname` """); } @@ -5148,33 +5196,33 @@ public override async Task ThenInclude_collection_on_derived_after_derived_colle await base.ThenInclude_collection_on_derived_after_derived_collection(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `t1`.`Nickname`, `t1`.`SquadId`, `t1`.`AssignedCityName`, `t1`.`CityOfBirthName`, `t1`.`FullName`, `t1`.`HasSoulPatch`, `t1`.`LeaderNickname`, `t1`.`LeaderSquadId`, `t1`.`Rank`, `t1`.`Discriminator`, `t1`.`Nickname0`, `t1`.`SquadId0`, `t1`.`AssignedCityName0`, `t1`.`CityOfBirthName0`, `t1`.`FullName0`, `t1`.`HasSoulPatch0`, `t1`.`LeaderNickname0`, `t1`.`LeaderSquadId0`, `t1`.`Rank0`, `t1`.`Discriminator0` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `s`.`Nickname0`, `s`.`SquadId0`, `s`.`AssignedCityName0`, `s`.`CityOfBirthName0`, `s`.`FullName0`, `s`.`HasSoulPatch0`, `s`.`LeaderNickname0`, `s`.`LeaderSquadId0`, `s`.`Rank0`, `s`.`Discriminator0` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` +) AS `u` LEFT JOIN ( - SELECT `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator`, `t2`.`Nickname` AS `Nickname0`, `t2`.`SquadId` AS `SquadId0`, `t2`.`AssignedCityName` AS `AssignedCityName0`, `t2`.`CityOfBirthName` AS `CityOfBirthName0`, `t2`.`FullName` AS `FullName0`, `t2`.`HasSoulPatch` AS `HasSoulPatch0`, `t2`.`LeaderNickname` AS `LeaderNickname0`, `t2`.`LeaderSquadId` AS `LeaderSquadId0`, `t2`.`Rank` AS `Rank0`, `t2`.`Discriminator` AS `Discriminator0` + SELECT `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator`, `u1`.`Nickname` AS `Nickname0`, `u1`.`SquadId` AS `SquadId0`, `u1`.`AssignedCityName` AS `AssignedCityName0`, `u1`.`CityOfBirthName` AS `CityOfBirthName0`, `u1`.`FullName` AS `FullName0`, `u1`.`HasSoulPatch` AS `HasSoulPatch0`, `u1`.`LeaderNickname` AS `LeaderNickname0`, `u1`.`LeaderSquadId` AS `LeaderSquadId0`, `u1`.`Rank` AS `Rank0`, `u1`.`Discriminator` AS `Discriminator0` FROM ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g0` UNION ALL SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` FROM `Officers` AS `o0` - ) AS `t0` + ) AS `u0` LEFT JOIN ( SELECT `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`AssignedCityName`, `g1`.`CityOfBirthName`, `g1`.`FullName`, `g1`.`HasSoulPatch`, `g1`.`LeaderNickname`, `g1`.`LeaderSquadId`, `g1`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g1` UNION ALL SELECT `o1`.`Nickname`, `o1`.`SquadId`, `o1`.`AssignedCityName`, `o1`.`CityOfBirthName`, `o1`.`FullName`, `o1`.`HasSoulPatch`, `o1`.`LeaderNickname`, `o1`.`LeaderSquadId`, `o1`.`Rank`, 'Officer' AS `Discriminator` FROM `Officers` AS `o1` - ) AS `t2` ON `t0`.`Nickname` = `t2`.`LeaderNickname` AND `t0`.`SquadId` = `t2`.`LeaderSquadId` -) AS `t1` ON `t`.`Nickname` = `t1`.`LeaderNickname` AND `t`.`SquadId` = `t1`.`LeaderSquadId` -ORDER BY `t`.`Nickname`, `t`.`SquadId`, `t1`.`Nickname`, `t1`.`SquadId`, `t1`.`Nickname0` + ) AS `u1` ON `u0`.`Nickname` = `u1`.`LeaderNickname` AND `u0`.`SquadId` = `u1`.`LeaderSquadId` +) AS `s` ON `u`.`Nickname` = `s`.`LeaderNickname` AND `u`.`SquadId` = `s`.`LeaderSquadId` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `s`.`Nickname`, `s`.`SquadId`, `s`.`Nickname0` """); } @@ -5183,27 +5231,27 @@ public override async Task ThenInclude_reference_on_derived_after_derived_collec await base.ThenInclude_reference_on_derived_after_derived_collection(async); AssertSql( -""" -SELECT `l`.`Id`, `l`.`CapitalName`, `l`.`Name`, `l`.`ServerAddress`, `l`.`CommanderName`, `l`.`Eradicated`, `t1`.`Name`, `t1`.`LocustHordeId`, `t1`.`ThreatLevel`, `t1`.`ThreatLevelByte`, `t1`.`ThreatLevelNullableByte`, `t1`.`DefeatedByNickname`, `t1`.`DefeatedBySquadId`, `t1`.`HighCommandId`, `t1`.`Discriminator`, `t1`.`Nickname`, `t1`.`SquadId`, `t1`.`AssignedCityName`, `t1`.`CityOfBirthName`, `t1`.`FullName`, `t1`.`HasSoulPatch`, `t1`.`LeaderNickname`, `t1`.`LeaderSquadId`, `t1`.`Rank`, `t1`.`Discriminator0` + """ +SELECT `l`.`Id`, `l`.`CapitalName`, `l`.`Name`, `l`.`ServerAddress`, `l`.`CommanderName`, `l`.`Eradicated`, `s`.`Name`, `s`.`LocustHordeId`, `s`.`ThreatLevel`, `s`.`ThreatLevelByte`, `s`.`ThreatLevelNullableByte`, `s`.`DefeatedByNickname`, `s`.`DefeatedBySquadId`, `s`.`HighCommandId`, `s`.`Discriminator`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator0` FROM `LocustHordes` AS `l` LEFT JOIN ( - SELECT `t`.`Name`, `t`.`LocustHordeId`, `t`.`ThreatLevel`, `t`.`ThreatLevelByte`, `t`.`ThreatLevelNullableByte`, `t`.`DefeatedByNickname`, `t`.`DefeatedBySquadId`, `t`.`HighCommandId`, `t`.`Discriminator`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator` AS `Discriminator0` + SELECT `u`.`Name`, `u`.`LocustHordeId`, `u`.`ThreatLevel`, `u`.`ThreatLevelByte`, `u`.`ThreatLevelNullableByte`, `u`.`DefeatedByNickname`, `u`.`DefeatedBySquadId`, `u`.`HighCommandId`, `u`.`Discriminator`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` AS `Discriminator0` FROM ( 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`, 'LocustCommander' AS `Discriminator` FROM `LocustCommanders` AS `l1` - ) AS `t` + ) AS `u` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 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` + ) AS `u0` ON `u`.`DefeatedByNickname` = `u0`.`Nickname` AND IIF(`u`.`DefeatedBySquadId` IS NULL, NULL, CLNG(`u`.`DefeatedBySquadId`)) = `u0`.`SquadId` +) AS `s` ON `l`.`Id` = `s`.`LocustHordeId` +ORDER BY `l`.`Id`, `s`.`Name`, `s`.`Nickname` """); } @@ -5212,8 +5260,8 @@ public override async Task Multiple_derived_included_on_one_method(bool async) await base.Multiple_derived_included_on_one_method(async); AssertSql( -""" -SELECT `l`.`Id`, `l`.`CapitalName`, `l`.`Name`, `l`.`ServerAddress`, `l`.`CommanderName`, `l`.`Eradicated`, `l0`.`Name`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator` + """ +SELECT `l`.`Id`, `l`.`CapitalName`, `l`.`Name`, `l`.`ServerAddress`, `l`.`CommanderName`, `l`.`Eradicated`, `l0`.`Name`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` FROM ((`LocustHordes` AS `l` LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`CommanderName` = `l0`.`Name`) LEFT JOIN ( @@ -5222,15 +5270,15 @@ 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 `t` ON `l0`.`DefeatedByNickname` = `t`.`Nickname` AND `l0`.`DefeatedBySquadId` = `t`.`SquadId`) +) AS `u` ON `l0`.`DefeatedByNickname` = `u`.`Nickname` AND `l0`.`DefeatedBySquadId` = `u`.`SquadId`) LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g0` UNION ALL SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` FROM `Officers` AS `o0` -) AS `t0` ON (`t`.`Nickname` = `t0`.`LeaderNickname` OR (`t`.`Nickname` IS NULL AND `t0`.`LeaderNickname` IS NULL)) AND `t`.`SquadId` = `t0`.`LeaderSquadId` -ORDER BY `l`.`Id`, `l0`.`Name`, `t`.`Nickname`, `t`.`SquadId`, `t0`.`Nickname` +) AS `u0` ON (`u`.`Nickname` = `u0`.`LeaderNickname` OR (`u`.`Nickname` IS NULL AND `u0`.`LeaderNickname` IS NULL)) AND `u`.`SquadId` = `u0`.`LeaderSquadId` +ORDER BY `l`.`Id`, `l0`.`Name`, `u`.`Nickname`, `u`.`SquadId`, `u0`.`Nickname` """); } @@ -5239,28 +5287,28 @@ public override async Task Include_on_derived_multi_level(bool async) await base.Include_on_derived_multi_level(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator`, `t0`.`Id`, `t0`.`Banner`, `t0`.`Banner5`, `t0`.`InternalNumber`, `t0`.`Name`, `t0`.`SquadId0`, `t0`.`MissionId` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `s1`.`Nickname`, `s1`.`SquadId`, `s1`.`AssignedCityName`, `s1`.`CityOfBirthName`, `s1`.`FullName`, `s1`.`HasSoulPatch`, `s1`.`LeaderNickname`, `s1`.`LeaderSquadId`, `s1`.`Rank`, `s1`.`Discriminator`, `s1`.`Id`, `s1`.`Banner`, `s1`.`Banner5`, `s1`.`InternalNumber`, `s1`.`Name`, `s1`.`SquadId0`, `s1`.`MissionId` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` +) AS `u` LEFT JOIN ( - SELECT `t1`.`Nickname`, `t1`.`SquadId`, `t1`.`AssignedCityName`, `t1`.`CityOfBirthName`, `t1`.`FullName`, `t1`.`HasSoulPatch`, `t1`.`LeaderNickname`, `t1`.`LeaderSquadId`, `t1`.`Rank`, `t1`.`Discriminator`, `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name`, `s0`.`SquadId` AS `SquadId0`, `s0`.`MissionId` + SELECT `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator`, `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name`, `s0`.`SquadId` AS `SquadId0`, `s0`.`MissionId` FROM (( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g0` UNION ALL SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` FROM `Officers` AS `o0` - ) AS `t1` - INNER JOIN `Squads` AS `s` ON `t1`.`SquadId` = `s`.`Id`) + ) AS `u0` + INNER JOIN `Squads` AS `s` ON `u0`.`SquadId` = `s`.`Id`) LEFT JOIN `SquadMissions` AS `s0` ON `s`.`Id` = `s0`.`SquadId` -) AS `t0` ON `t`.`Nickname` = `t0`.`LeaderNickname` AND `t`.`SquadId` = `t0`.`LeaderSquadId` -ORDER BY `t`.`Nickname`, `t`.`SquadId`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`Id`, `t0`.`SquadId0` +) AS `s1` ON `u`.`Nickname` = `s1`.`LeaderNickname` AND `u`.`SquadId` = `s1`.`LeaderSquadId` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `s1`.`Nickname`, `s1`.`SquadId`, `s1`.`Id`, `s1`.`SquadId0` """); } @@ -5269,8 +5317,8 @@ public override async Task Projecting_nullable_bool_in_conditional_works(bool as await base.Projecting_nullable_bool_in_conditional_works(async); AssertSql( -""" -SELECT IIF(`t0`.`Nickname` IS NOT NULL AND `t0`.`SquadId` IS NOT NULL, `t0`.`HasSoulPatch`, FALSE) AS `Prop` + """ +SELECT IIF(`u`.`Nickname` IS NOT NULL AND `u`.`SquadId` IS NOT NULL, `u`.`HasSoulPatch`, FALSE) AS `Prop` FROM `Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` @@ -5278,25 +5326,59 @@ LEFT JOIN ( UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`HasSoulPatch` FROM `Officers` AS `o` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` """); } - public override async Task Enum_ToString_is_client_eval(bool async) + public override async Task ToString_enum_property_projection(bool async) { - await base.Enum_ToString_is_client_eval(async); + await base.ToString_enum_property_projection(async); AssertSql( -""" -SELECT `t`.`Rank` + """ +SELECT IIF(`u`.`Rank` = 0, 'None', IIF(`u`.`Rank` = 1, 'Private', IIF(`u`.`Rank` = 2, 'Corporal', IIF(`u`.`Rank` = 4, 'Sergeant', IIF(`u`.`Rank` = 8, 'Lieutenant', IIF(`u`.`Rank` = 16, 'Captain', IIF(`u`.`Rank` = 32, 'Major', IIF(`u`.`Rank` = 64, 'Colonel', IIF(`u`.`Rank` = 128, 'General', (`u`.`Rank` & '')))))))))) FROM ( - SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`Rank` + SELECT `g`.`Rank` FROM `Gears` AS `g` UNION ALL - SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`Rank` + SELECT `o`.`Rank` FROM `Officers` AS `o` -) AS `t` -ORDER BY `t`.`SquadId`, `t`.`Nickname` +) AS `u` +"""); + } + + public override async Task ToString_nullable_enum_property_projection(bool async) + { + await base.ToString_nullable_enum_property_projection(async); + + AssertSql( + """ +SELECT IIF(`w`.`AmmunitionType` = 1, 'Cartridge', IIF(`w`.`AmmunitionType` = 2, 'Shell', IIF((`w`.`AmmunitionType` & '') IS NULL, '', (`w`.`AmmunitionType` & '')))) +FROM `Weapons` AS `w` +"""); + } + + public override async Task ToString_enum_contains(bool async) + { + await base.ToString_enum_contains(async); + + AssertSql( + """ +SELECT `m`.`CodeName` +FROM `Missions` AS `m` +WHERE (`m`.`Difficulty` & '') LIKE '%Med%' +"""); + } + + public override async Task ToString_nullable_enum_contains(bool async) + { + await base.ToString_nullable_enum_contains(async); + + AssertSql( + """ +SELECT `w`.`Name` +FROM `Weapons` AS `w` +WHERE IIF(`w`.`AmmunitionType` = 1, 'Cartridge', IIF(`w`.`AmmunitionType` = 2, 'Shell', IIF((`w`.`AmmunitionType` & '') IS NULL, '', (`w`.`AmmunitionType` & '')))) LIKE '%Cart%' """); } @@ -5305,18 +5387,18 @@ public override async Task Correlated_collections_naked_navigation_with_ToList(b await base.Correlated_collections_naked_navigation_with_ToList(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` FROM `Officers` AS `o` -) AS `t` -LEFT JOIN `Weapons` AS `w` ON `t`.`FullName` = `w`.`OwnerFullName` -WHERE `t`.`Nickname` <> 'Marcus' -ORDER BY `t`.`Nickname`, `t`.`SquadId` +) AS `u` +LEFT JOIN `Weapons` AS `w` ON `u`.`FullName` = `w`.`OwnerFullName` +WHERE `u`.`Nickname` <> 'Marcus' +ORDER BY `u`.`Nickname`, `u`.`SquadId` """); } @@ -5325,20 +5407,20 @@ public override async Task Correlated_collections_naked_navigation_with_ToList_f await base.Correlated_collections_naked_navigation_with_ToList_followed_by_projecting_count(async); AssertSql( -""" + """ SELECT ( SELECT COUNT(*) FROM `Weapons` AS `w` - WHERE `t`.`FullName` = `w`.`OwnerFullName`) + WHERE `u`.`FullName` = `w`.`OwnerFullName`) FROM ( SELECT `g`.`Nickname`, `g`.`FullName` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`FullName` FROM `Officers` AS `o` -) AS `t` -WHERE `t`.`Nickname` <> 'Marcus' -ORDER BY `t`.`Nickname` +) AS `u` +WHERE `u`.`Nickname` <> 'Marcus' +ORDER BY `u`.`Nickname` """); } @@ -5347,18 +5429,18 @@ public override async Task Correlated_collections_naked_navigation_with_ToArray( await base.Correlated_collections_naked_navigation_with_ToArray(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` FROM `Officers` AS `o` -) AS `t` -LEFT JOIN `Weapons` AS `w` ON `t`.`FullName` = `w`.`OwnerFullName` -WHERE `t`.`Nickname` <> 'Marcus' -ORDER BY `t`.`Nickname`, `t`.`SquadId` +) AS `u` +LEFT JOIN `Weapons` AS `w` ON `u`.`FullName` = `w`.`OwnerFullName` +WHERE `u`.`Nickname` <> 'Marcus' +ORDER BY `u`.`Nickname`, `u`.`SquadId` """); } @@ -5367,22 +5449,22 @@ public override async Task Correlated_collections_basic_projection(bool async) await base.Correlated_collections_basic_projection(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t0`.`Id`, `t0`.`AmmunitionType`, `t0`.`IsAutomatic`, `t0`.`Name`, `t0`.`OwnerFullName`, `t0`.`SynergyWithId` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` FROM `Officers` AS `o` -) AS `t` +) AS `u` LEFT JOIN ( SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM `Weapons` AS `w` WHERE `w`.`IsAutomatic` = TRUE OR `w`.`Name` <> 'foo' OR `w`.`Name` IS NULL -) AS `t0` ON `t`.`FullName` = `t0`.`OwnerFullName` -WHERE `t`.`Nickname` <> 'Marcus' -ORDER BY `t`.`Nickname`, `t`.`SquadId` +) AS `w0` ON `u`.`FullName` = `w0`.`OwnerFullName` +WHERE `u`.`Nickname` <> 'Marcus' +ORDER BY `u`.`Nickname`, `u`.`SquadId` """); } @@ -5391,22 +5473,22 @@ public override async Task Correlated_collections_basic_projection_explicit_to_l await base.Correlated_collections_basic_projection_explicit_to_list(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t0`.`Id`, `t0`.`AmmunitionType`, `t0`.`IsAutomatic`, `t0`.`Name`, `t0`.`OwnerFullName`, `t0`.`SynergyWithId` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` FROM `Officers` AS `o` -) AS `t` +) AS `u` LEFT JOIN ( SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM `Weapons` AS `w` WHERE `w`.`IsAutomatic` = TRUE OR `w`.`Name` <> 'foo' OR `w`.`Name` IS NULL -) AS `t0` ON `t`.`FullName` = `t0`.`OwnerFullName` -WHERE `t`.`Nickname` <> 'Marcus' -ORDER BY `t`.`Nickname`, `t`.`SquadId` +) AS `w0` ON `u`.`FullName` = `w0`.`OwnerFullName` +WHERE `u`.`Nickname` <> 'Marcus' +ORDER BY `u`.`Nickname`, `u`.`SquadId` """); } @@ -5415,22 +5497,22 @@ public override async Task Correlated_collections_basic_projection_explicit_to_a await base.Correlated_collections_basic_projection_explicit_to_array(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t0`.`Id`, `t0`.`AmmunitionType`, `t0`.`IsAutomatic`, `t0`.`Name`, `t0`.`OwnerFullName`, `t0`.`SynergyWithId` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` FROM `Officers` AS `o` -) AS `t` +) AS `u` LEFT JOIN ( SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM `Weapons` AS `w` WHERE `w`.`IsAutomatic` = TRUE OR `w`.`Name` <> 'foo' OR `w`.`Name` IS NULL -) AS `t0` ON `t`.`FullName` = `t0`.`OwnerFullName` -WHERE `t`.`Nickname` <> 'Marcus' -ORDER BY `t`.`Nickname`, `t`.`SquadId` +) AS `w0` ON `u`.`FullName` = `w0`.`OwnerFullName` +WHERE `u`.`Nickname` <> 'Marcus' +ORDER BY `u`.`Nickname`, `u`.`SquadId` """); } @@ -5439,22 +5521,22 @@ public override async Task Correlated_collections_basic_projection_ordered(bool await base.Correlated_collections_basic_projection_ordered(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t0`.`Id`, `t0`.`AmmunitionType`, `t0`.`IsAutomatic`, `t0`.`Name`, `t0`.`OwnerFullName`, `t0`.`SynergyWithId` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` FROM `Officers` AS `o` -) AS `t` +) AS `u` LEFT JOIN ( SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM `Weapons` AS `w` WHERE `w`.`IsAutomatic` = TRUE OR `w`.`Name` <> 'foo' OR `w`.`Name` IS NULL -) AS `t0` ON `t`.`FullName` = `t0`.`OwnerFullName` -WHERE `t`.`Nickname` <> 'Marcus' -ORDER BY `t`.`Nickname`, `t`.`SquadId`, `t0`.`Name` DESC +) AS `w0` ON `u`.`FullName` = `w0`.`OwnerFullName` +WHERE `u`.`Nickname` <> 'Marcus' +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `w0`.`Name` DESC """); } @@ -5463,25 +5545,25 @@ public override async Task Correlated_collections_basic_projection_composite_key await base.Correlated_collections_basic_projection_composite_key(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t0`.`Nickname`, `t0`.`FullName`, `t0`.`SquadId` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u1`.`Nickname`, `u1`.`FullName`, `u1`.`SquadId` FROM ( SELECT `o`.`Nickname`, `o`.`SquadId` FROM `Officers` AS `o` -) AS `t` +) AS `u` LEFT JOIN ( - SELECT `t1`.`Nickname`, `t1`.`FullName`, `t1`.`SquadId`, `t1`.`LeaderNickname`, `t1`.`LeaderSquadId` + SELECT `u0`.`Nickname`, `u0`.`FullName`, `u0`.`SquadId`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId` FROM `Gears` AS `g` UNION ALL SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId` FROM `Officers` AS `o0` - ) AS `t1` - WHERE `t1`.`HasSoulPatch` <> TRUE -) AS `t0` ON `t`.`Nickname` = `t0`.`LeaderNickname` AND `t`.`SquadId` = `t0`.`LeaderSquadId` -WHERE `t`.`Nickname` <> 'Foo' -ORDER BY `t`.`Nickname`, `t`.`SquadId`, `t0`.`Nickname` + ) AS `u0` + WHERE `u0`.`HasSoulPatch` <> TRUE +) AS `u1` ON `u`.`Nickname` = `u1`.`LeaderNickname` AND `u`.`SquadId` = `u1`.`LeaderSquadId` +WHERE `u`.`Nickname` <> 'Foo' +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `u1`.`Nickname` """); } @@ -5490,22 +5572,22 @@ public override async Task Correlated_collections_basic_projecting_single_proper await base.Correlated_collections_basic_projecting_single_property(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t0`.`Name`, `t0`.`Id` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `w0`.`Name`, `w0`.`Id` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` FROM `Officers` AS `o` -) AS `t` +) AS `u` LEFT JOIN ( SELECT `w`.`Name`, `w`.`Id`, `w`.`OwnerFullName` FROM `Weapons` AS `w` WHERE `w`.`IsAutomatic` = TRUE OR `w`.`Name` <> 'foo' OR `w`.`Name` IS NULL -) AS `t0` ON `t`.`FullName` = `t0`.`OwnerFullName` -WHERE `t`.`Nickname` <> 'Marcus' -ORDER BY `t`.`Nickname`, `t`.`SquadId` +) AS `w0` ON `u`.`FullName` = `w0`.`OwnerFullName` +WHERE `u`.`Nickname` <> 'Marcus' +ORDER BY `u`.`Nickname`, `u`.`SquadId` """); } @@ -5514,22 +5596,22 @@ public override async Task Correlated_collections_basic_projecting_constant(bool await base.Correlated_collections_basic_projecting_constant(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t0`.`c`, `t0`.`Id` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `w0`.`c`, `w0`.`Id` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` FROM `Officers` AS `o` -) AS `t` +) AS `u` LEFT JOIN ( SELECT 'BFG' AS `c`, `w`.`Id`, `w`.`OwnerFullName` FROM `Weapons` AS `w` WHERE `w`.`IsAutomatic` = TRUE OR `w`.`Name` <> 'foo' OR `w`.`Name` IS NULL -) AS `t0` ON `t`.`FullName` = `t0`.`OwnerFullName` -WHERE `t`.`Nickname` <> 'Marcus' -ORDER BY `t`.`Nickname`, `t`.`SquadId` +) AS `w0` ON `u`.`FullName` = `w0`.`OwnerFullName` +WHERE `u`.`Nickname` <> 'Marcus' +ORDER BY `u`.`Nickname`, `u`.`SquadId` """); } @@ -5538,22 +5620,22 @@ public override async Task Correlated_collections_basic_projecting_constant_bool await base.Correlated_collections_basic_projecting_constant_bool(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t0`.`c`, `t0`.`Id` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `w0`.`c`, `w0`.`Id` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` FROM `Officers` AS `o` -) AS `t` +) AS `u` LEFT JOIN ( SELECT TRUE AS `c`, `w`.`Id`, `w`.`OwnerFullName` FROM `Weapons` AS `w` WHERE `w`.`IsAutomatic` = TRUE OR `w`.`Name` <> 'foo' OR `w`.`Name` IS NULL -) AS `t0` ON `t`.`FullName` = `t0`.`OwnerFullName` -WHERE `t`.`Nickname` <> 'Marcus' -ORDER BY `t`.`Nickname`, `t`.`SquadId` +) AS `w0` ON `u`.`FullName` = `w0`.`OwnerFullName` +WHERE `u`.`Nickname` <> 'Marcus' +ORDER BY `u`.`Nickname`, `u`.`SquadId` """); } @@ -5562,23 +5644,23 @@ public override async Task Correlated_collections_projection_of_collection_thru_ await base.Correlated_collections_projection_of_collection_thru_navigation(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `s`.`Id`, `t0`.`SquadId`, `t0`.`MissionId` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `s`.`Id`, `s1`.`SquadId`, `s1`.`MissionId` FROM (( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` FROM `Officers` AS `o` -) AS `t` -INNER JOIN `Squads` AS `s` ON `t`.`SquadId` = `s`.`Id`) +) AS `u` +INNER JOIN `Squads` AS `s` ON `u`.`SquadId` = `s`.`Id`) LEFT JOIN ( SELECT `s0`.`SquadId`, `s0`.`MissionId` FROM `SquadMissions` AS `s0` WHERE `s0`.`MissionId` <> 17 -) AS `t0` ON `s`.`Id` = `t0`.`SquadId` -WHERE `t`.`Nickname` <> 'Marcus' -ORDER BY `t`.`FullName`, `t`.`Nickname`, `t`.`SquadId`, `s`.`Id`, `t0`.`SquadId` +) AS `s1` ON `s`.`Id` = `s1`.`SquadId` +WHERE `u`.`Nickname` <> 'Marcus' +ORDER BY `u`.`FullName`, `u`.`Nickname`, `u`.`SquadId`, `s`.`Id`, `s1`.`SquadId` """); } @@ -5587,8 +5669,8 @@ public override async Task Correlated_collections_project_anonymous_collection_r await base.Correlated_collections_project_anonymous_collection_result(async); AssertSql( -""" -SELECT `s`.`Name`, `s`.`Id`, `t`.`FullName`, `t`.`Rank`, `t`.`Nickname`, `t`.`SquadId` + """ +SELECT `s`.`Name`, `s`.`Id`, `u`.`FullName`, `u`.`Rank`, `u`.`Nickname`, `u`.`SquadId` FROM `Squads` AS `s` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName`, `g`.`Rank` @@ -5596,9 +5678,9 @@ LEFT JOIN ( UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName`, `o`.`Rank` FROM `Officers` AS `o` -) AS `t` ON `s`.`Id` = `t`.`SquadId` +) AS `u` ON `s`.`Id` = `u`.`SquadId` WHERE `s`.`Id` < 20 -ORDER BY `s`.`Id`, `t`.`Nickname` +ORDER BY `s`.`Id`, `u`.`Nickname` """); } @@ -5607,21 +5689,21 @@ public override async Task Correlated_collections_nested(bool async) await base.Correlated_collections_nested(async); AssertSql( -""" -SELECT `s`.`Id`, `t0`.`SquadId`, `t0`.`MissionId`, `t0`.`Id`, `t0`.`SquadId0`, `t0`.`MissionId0` + """ +SELECT `s`.`Id`, `s3`.`SquadId`, `s3`.`MissionId`, `s3`.`Id`, `s3`.`SquadId0`, `s3`.`MissionId0` FROM `Squads` AS `s` LEFT JOIN ( - SELECT `s0`.`SquadId`, `s0`.`MissionId`, `m`.`Id`, `t`.`SquadId` AS `SquadId0`, `t`.`MissionId` AS `MissionId0` + SELECT `s0`.`SquadId`, `s0`.`MissionId`, `m`.`Id`, `s2`.`SquadId` AS `SquadId0`, `s2`.`MissionId` AS `MissionId0` FROM (`SquadMissions` AS `s0` INNER JOIN `Missions` AS `m` ON `s0`.`MissionId` = `m`.`Id`) LEFT JOIN ( SELECT `s1`.`SquadId`, `s1`.`MissionId` FROM `SquadMissions` AS `s1` WHERE `s1`.`SquadId` < 7 - ) AS `t` ON `m`.`Id` = `t`.`MissionId` + ) AS `s2` ON `m`.`Id` = `s2`.`MissionId` WHERE `s0`.`MissionId` < 42 -) AS `t0` ON `s`.`Id` = `t0`.`SquadId` -ORDER BY `s`.`Id`, `t0`.`SquadId`, `t0`.`MissionId`, `t0`.`Id`, `t0`.`SquadId0` +) AS `s3` ON `s`.`Id` = `s3`.`SquadId` +ORDER BY `s`.`Id`, `s3`.`SquadId`, `s3`.`MissionId`, `s3`.`Id`, `s3`.`SquadId0` """); } @@ -5630,21 +5712,21 @@ public override async Task Correlated_collections_nested_mixed_streaming_with_bu await base.Correlated_collections_nested_mixed_streaming_with_buffer1(async); AssertSql( -""" -SELECT `s`.`Id`, `t0`.`SquadId`, `t0`.`MissionId`, `t0`.`Id`, `t0`.`SquadId0`, `t0`.`MissionId0` + """ +SELECT `s`.`Id`, `s3`.`SquadId`, `s3`.`MissionId`, `s3`.`Id`, `s3`.`SquadId0`, `s3`.`MissionId0` FROM `Squads` AS `s` LEFT JOIN ( - SELECT `s0`.`SquadId`, `s0`.`MissionId`, `m`.`Id`, `t`.`SquadId` AS `SquadId0`, `t`.`MissionId` AS `MissionId0` + SELECT `s0`.`SquadId`, `s0`.`MissionId`, `m`.`Id`, `s2`.`SquadId` AS `SquadId0`, `s2`.`MissionId` AS `MissionId0` FROM (`SquadMissions` AS `s0` INNER JOIN `Missions` AS `m` ON `s0`.`MissionId` = `m`.`Id`) LEFT JOIN ( SELECT `s1`.`SquadId`, `s1`.`MissionId` FROM `SquadMissions` AS `s1` WHERE `s1`.`SquadId` < 2 - ) AS `t` ON `m`.`Id` = `t`.`MissionId` + ) AS `s2` ON `m`.`Id` = `s2`.`MissionId` WHERE `s0`.`MissionId` < 3 -) AS `t0` ON `s`.`Id` = `t0`.`SquadId` -ORDER BY `s`.`Id`, `t0`.`SquadId`, `t0`.`MissionId`, `t0`.`Id`, `t0`.`SquadId0` +) AS `s3` ON `s`.`Id` = `s3`.`SquadId` +ORDER BY `s`.`Id`, `s3`.`SquadId`, `s3`.`MissionId`, `s3`.`Id`, `s3`.`SquadId0` """); } @@ -5653,21 +5735,21 @@ public override async Task Correlated_collections_nested_mixed_streaming_with_bu await base.Correlated_collections_nested_mixed_streaming_with_buffer2(async); AssertSql( -""" -SELECT `s`.`Id`, `t0`.`SquadId`, `t0`.`MissionId`, `t0`.`Id`, `t0`.`SquadId0`, `t0`.`MissionId0` + """ +SELECT `s`.`Id`, `s3`.`SquadId`, `s3`.`MissionId`, `s3`.`Id`, `s3`.`SquadId0`, `s3`.`MissionId0` FROM `Squads` AS `s` LEFT JOIN ( - SELECT `s0`.`SquadId`, `s0`.`MissionId`, `m`.`Id`, `t`.`SquadId` AS `SquadId0`, `t`.`MissionId` AS `MissionId0` + SELECT `s0`.`SquadId`, `s0`.`MissionId`, `m`.`Id`, `s2`.`SquadId` AS `SquadId0`, `s2`.`MissionId` AS `MissionId0` FROM (`SquadMissions` AS `s0` INNER JOIN `Missions` AS `m` ON `s0`.`MissionId` = `m`.`Id`) LEFT JOIN ( SELECT `s1`.`SquadId`, `s1`.`MissionId` FROM `SquadMissions` AS `s1` WHERE `s1`.`SquadId` < 7 - ) AS `t` ON `m`.`Id` = `t`.`MissionId` + ) AS `s2` ON `m`.`Id` = `s2`.`MissionId` WHERE `s0`.`MissionId` < 42 -) AS `t0` ON `s`.`Id` = `t0`.`SquadId` -ORDER BY `s`.`Id`, `t0`.`SquadId`, `t0`.`MissionId`, `t0`.`Id`, `t0`.`SquadId0` +) AS `s3` ON `s`.`Id` = `s3`.`SquadId` +ORDER BY `s`.`Id`, `s3`.`SquadId`, `s3`.`MissionId`, `s3`.`Id`, `s3`.`SquadId0` """); } @@ -5676,29 +5758,29 @@ public override async Task Correlated_collections_nested_with_custom_ordering(bo await base.Correlated_collections_nested_with_custom_ordering(async); AssertSql( -""" -SELECT `t`.`FullName`, `t`.`Nickname`, `t`.`SquadId`, `t1`.`FullName`, `t1`.`Nickname`, `t1`.`SquadId`, `t1`.`Id`, `t1`.`AmmunitionType`, `t1`.`IsAutomatic`, `t1`.`Name`, `t1`.`OwnerFullName`, `t1`.`SynergyWithId` + """ +SELECT `u`.`FullName`, `u`.`Nickname`, `u`.`SquadId`, `s`.`FullName`, `s`.`Nickname`, `s`.`SquadId`, `s`.`Id`, `s`.`AmmunitionType`, `s`.`IsAutomatic`, `s`.`Name`, `s`.`OwnerFullName`, `s`.`SynergyWithId` FROM ( SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName`, `o`.`HasSoulPatch` FROM `Officers` AS `o` -) AS `t` +) AS `u` LEFT JOIN ( - SELECT `t0`.`FullName`, `t0`.`Nickname`, `t0`.`SquadId`, `t2`.`Id`, `t2`.`AmmunitionType`, `t2`.`IsAutomatic`, `t2`.`Name`, `t2`.`OwnerFullName`, `t2`.`SynergyWithId`, `t0`.`Rank`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId` + SELECT `u0`.`FullName`, `u0`.`Nickname`, `u0`.`SquadId`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId`, `u0`.`Rank`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` FROM `Gears` AS `g` UNION ALL SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`FullName`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank` FROM `Officers` AS `o0` - ) AS `t0` + ) AS `u0` LEFT JOIN ( SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM `Weapons` AS `w` WHERE `w`.`Name` <> 'Bar' OR `w`.`Name` IS NULL - ) AS `t2` ON `t0`.`FullName` = `t2`.`OwnerFullName` - WHERE `t0`.`FullName` <> 'Foo' -) AS `t1` ON `t`.`Nickname` = `t1`.`LeaderNickname` AND `t`.`SquadId` = `t1`.`LeaderSquadId` -ORDER BY NOT (`t`.`HasSoulPatch`) DESC, `t`.`Nickname`, `t`.`SquadId`, `t1`.`Rank`, `t1`.`Nickname`, `t1`.`SquadId`, NOT (`t1`.`IsAutomatic`) + ) AS `w0` ON `u0`.`FullName` = `w0`.`OwnerFullName` + WHERE `u0`.`FullName` <> 'Foo' +) AS `s` ON `u`.`Nickname` = `s`.`LeaderNickname` AND `u`.`SquadId` = `s`.`LeaderSquadId` +ORDER BY NOT (`u`.`HasSoulPatch`) DESC, `u`.`Nickname`, `u`.`SquadId`, `s`.`Rank`, `s`.`Nickname`, `s`.`SquadId`, NOT (`s`.`IsAutomatic`) """); } @@ -5707,26 +5789,26 @@ public override async Task Correlated_collections_same_collection_projected_mult await base.Correlated_collections_same_collection_projected_multiple_times(async); AssertSql( -""" -SELECT `t`.`FullName`, `t`.`Nickname`, `t`.`SquadId`, `t0`.`Id`, `t0`.`AmmunitionType`, `t0`.`IsAutomatic`, `t0`.`Name`, `t0`.`OwnerFullName`, `t0`.`SynergyWithId`, `t1`.`Id`, `t1`.`AmmunitionType`, `t1`.`IsAutomatic`, `t1`.`Name`, `t1`.`OwnerFullName`, `t1`.`SynergyWithId` + """ +SELECT `u`.`FullName`, `u`.`Nickname`, `u`.`SquadId`, `w1`.`Id`, `w1`.`AmmunitionType`, `w1`.`IsAutomatic`, `w1`.`Name`, `w1`.`OwnerFullName`, `w1`.`SynergyWithId`, `w2`.`Id`, `w2`.`AmmunitionType`, `w2`.`IsAutomatic`, `w2`.`Name`, `w2`.`OwnerFullName`, `w2`.`SynergyWithId` FROM (( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` FROM `Officers` AS `o` -) AS `t` +) AS `u` LEFT JOIN ( SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM `Weapons` AS `w` WHERE `w`.`IsAutomatic` = TRUE -) AS `t0` ON `t`.`FullName` = `t0`.`OwnerFullName`) +) AS `w1` ON `u`.`FullName` = `w1`.`OwnerFullName`) LEFT JOIN ( SELECT `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` FROM `Weapons` AS `w0` WHERE `w0`.`IsAutomatic` = TRUE -) AS `t1` ON `t`.`FullName` = `t1`.`OwnerFullName` -ORDER BY `t`.`Nickname`, `t`.`SquadId`, `t0`.`Id` +) AS `w2` ON `u`.`FullName` = `w2`.`OwnerFullName` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `w1`.`Id` """); } @@ -5735,26 +5817,26 @@ public override async Task Correlated_collections_similar_collection_projected_m await base.Correlated_collections_similar_collection_projected_multiple_times(async); AssertSql( -""" -SELECT `t`.`FullName`, `t`.`Nickname`, `t`.`SquadId`, `t0`.`Id`, `t0`.`AmmunitionType`, `t0`.`IsAutomatic`, `t0`.`Name`, `t0`.`OwnerFullName`, `t0`.`SynergyWithId`, `t1`.`Id`, `t1`.`AmmunitionType`, `t1`.`IsAutomatic`, `t1`.`Name`, `t1`.`OwnerFullName`, `t1`.`SynergyWithId` + """ +SELECT `u`.`FullName`, `u`.`Nickname`, `u`.`SquadId`, `w1`.`Id`, `w1`.`AmmunitionType`, `w1`.`IsAutomatic`, `w1`.`Name`, `w1`.`OwnerFullName`, `w1`.`SynergyWithId`, `w2`.`Id`, `w2`.`AmmunitionType`, `w2`.`IsAutomatic`, `w2`.`Name`, `w2`.`OwnerFullName`, `w2`.`SynergyWithId` FROM (( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName`, `g`.`Rank` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName`, `o`.`Rank` FROM `Officers` AS `o` -) AS `t` +) AS `u` LEFT JOIN ( SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM `Weapons` AS `w` WHERE `w`.`IsAutomatic` = TRUE -) AS `t0` ON `t`.`FullName` = `t0`.`OwnerFullName`) +) AS `w1` ON `u`.`FullName` = `w1`.`OwnerFullName`) LEFT JOIN ( SELECT `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` FROM `Weapons` AS `w0` WHERE `w0`.`IsAutomatic` <> TRUE -) AS `t1` ON `t`.`FullName` = `t1`.`OwnerFullName` -ORDER BY `t`.`Rank`, `t`.`Nickname`, `t`.`SquadId`, `t0`.`OwnerFullName`, `t0`.`Id`, NOT (`t1`.`IsAutomatic`) +) AS `w2` ON `u`.`FullName` = `w2`.`OwnerFullName` +ORDER BY `u`.`Rank`, `u`.`Nickname`, `u`.`SquadId`, `w1`.`OwnerFullName`, `w1`.`Id`, NOT (`w2`.`IsAutomatic`) """); } @@ -5763,25 +5845,25 @@ public override async Task Correlated_collections_different_collections_projecte await base.Correlated_collections_different_collections_projected(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t0`.`Name`, `t0`.`IsAutomatic`, `t0`.`Id`, `t1`.`Nickname`, `t1`.`Rank`, `t1`.`SquadId` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `w0`.`Name`, `w0`.`IsAutomatic`, `w0`.`Id`, `u0`.`Nickname`, `u0`.`Rank`, `u0`.`SquadId` FROM (( SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` FROM `Officers` AS `o` -) AS `t` +) AS `u` LEFT JOIN ( SELECT `w`.`Name`, `w`.`IsAutomatic`, `w`.`Id`, `w`.`OwnerFullName` FROM `Weapons` AS `w` WHERE `w`.`IsAutomatic` = TRUE -) AS `t0` ON `t`.`FullName` = `t0`.`OwnerFullName`) +) AS `w0` ON `u`.`FullName` = `w0`.`OwnerFullName`) LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` FROM `Gears` AS `g` UNION ALL SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`FullName`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank` FROM `Officers` AS `o0` -) AS `t1` ON `t`.`Nickname` = `t1`.`LeaderNickname` AND `t`.`SquadId` = `t1`.`LeaderSquadId` -ORDER BY `t`.`FullName`, `t`.`Nickname`, `t`.`SquadId`, `t0`.`Id`, `t1`.`FullName`, `t1`.`Nickname` +) AS `u0` ON `u`.`Nickname` = `u0`.`LeaderNickname` AND `u`.`SquadId` = `u0`.`LeaderSquadId` +ORDER BY `u`.`FullName`, `u`.`Nickname`, `u`.`SquadId`, `w0`.`Id`, `u0`.`FullName`, `u0`.`Nickname` """); } @@ -5789,24 +5871,24 @@ public override async Task Multiple_orderby_with_navigation_expansion_on_one_of_ { await base.Multiple_orderby_with_navigation_expansion_on_one_of_the_order_bys(async); AssertSql( - """ -SELECT `t`.`FullName` + """ +SELECT `u`.`FullName` FROM ( SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName`, `o`.`HasSoulPatch` FROM `Officers` AS `o` -) AS `t` -LEFT JOIN `Tags` AS `t0` ON `t`.`Nickname` = `t0`.`GearNickName` AND `t`.`SquadId` = `t0`.`GearSquadId` +) AS `u` +LEFT JOIN `Tags` AS `t` ON `u`.`Nickname` = `t`.`GearNickName` AND `u`.`SquadId` = `t`.`GearSquadId` WHERE EXISTS ( SELECT 1 FROM ( - SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + SELECT `g`.`LeaderNickname`, `g`.`LeaderSquadId` FROM `Gears` AS `g` UNION ALL - SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + SELECT `o0`.`LeaderNickname`, `o0`.`LeaderSquadId` FROM `Officers` AS `o0` - ) AS `t1` - WHERE `t`.`Nickname` = `t1`.`LeaderNickname` AND `t`.`SquadId` = `t1`.`LeaderSquadId`) -ORDER BY NOT (`t`.`HasSoulPatch`) DESC, `t0`.`Note` + ) AS `u0` + WHERE `u`.`Nickname` = `u0`.`LeaderNickname` AND `u`.`SquadId` = `u0`.`LeaderSquadId`) +ORDER BY NOT (`u`.`HasSoulPatch`) DESC, `t`.`Note` """); } @@ -5814,42 +5896,42 @@ public override async Task Multiple_orderby_with_navigation_expansion_on_one_of_ { await base.Multiple_orderby_with_navigation_expansion_on_one_of_the_order_bys_inside_subquery(async); AssertSql( - """ -SELECT `t`.`FullName`, `t`.`Nickname`, `t`.`SquadId`, `t0`.`Id`, `t2`.`Nickname`, `t2`.`SquadId`, `t3`.`Id`, `t3`.`AmmunitionType`, `t3`.`IsAutomatic`, `t3`.`Name`, `t3`.`OwnerFullName`, `t3`.`SynergyWithId`, `t3`.`Nickname`, `t3`.`SquadId` + """ +SELECT `u`.`FullName`, `u`.`Nickname`, `u`.`SquadId`, `t`.`Id`, `u1`.`Nickname`, `u1`.`SquadId`, `s`.`Id`, `s`.`AmmunitionType`, `s`.`IsAutomatic`, `s`.`Name`, `s`.`OwnerFullName`, `s`.`SynergyWithId`, `s`.`Nickname`, `s`.`SquadId` FROM ((( SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName`, `o`.`HasSoulPatch` FROM `Officers` AS `o` -) AS `t` -LEFT JOIN `Tags` AS `t0` ON `t`.`Nickname` = `t0`.`GearNickName` AND `t`.`SquadId` = `t0`.`GearSquadId`) +) AS `u` +LEFT JOIN `Tags` AS `t` ON `u`.`Nickname` = `t`.`GearNickName` AND `u`.`SquadId` = `t`.`GearSquadId`) LEFT JOIN ( - SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` - FROM `Gears` AS `g` + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`FullName` + FROM `Gears` AS `g0` UNION ALL - SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`FullName` - FROM `Officers` AS `o0` -) AS `t2` ON `t0`.`GearNickName` = `t2`.`Nickname` AND `t0`.`GearSquadId` = `t2`.`SquadId`) + SELECT `o1`.`Nickname`, `o1`.`SquadId`, `o1`.`FullName` + FROM `Officers` AS `o1` +) AS `u1` ON `t`.`GearNickName` = `u1`.`Nickname` AND `t`.`GearSquadId` = `u1`.`SquadId`) LEFT JOIN ( - SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `t4`.`Nickname`, `t4`.`SquadId` + SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `u2`.`Nickname`, `u2`.`SquadId` FROM `Weapons` AS `w` LEFT JOIN ( - SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`FullName` - FROM `Gears` AS `g0` + SELECT `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`FullName` + FROM `Gears` AS `g1` UNION ALL - SELECT `o1`.`Nickname`, `o1`.`SquadId`, `o1`.`FullName` - FROM `Officers` AS `o1` - ) AS `t4` ON `w`.`OwnerFullName` = `t4`.`FullName` -) AS `t3` ON `t2`.`FullName` = `t3`.`OwnerFullName` + SELECT `o2`.`Nickname`, `o2`.`SquadId`, `o2`.`FullName` + FROM `Officers` AS `o2` + ) AS `u2` ON `w`.`OwnerFullName` = `u2`.`FullName` +) AS `s` ON `u1`.`FullName` = `s`.`OwnerFullName` WHERE EXISTS ( SELECT 1 FROM ( - SELECT `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`AssignedCityName`, `g1`.`CityOfBirthName`, `g1`.`FullName`, `g1`.`HasSoulPatch`, `g1`.`LeaderNickname`, `g1`.`LeaderSquadId`, `g1`.`Rank`, 'Gear' AS `Discriminator` - FROM `Gears` AS `g1` + SELECT `g`.`LeaderNickname`, `g`.`LeaderSquadId` + FROM `Gears` AS `g` UNION ALL - SELECT `o2`.`Nickname`, `o2`.`SquadId`, `o2`.`AssignedCityName`, `o2`.`CityOfBirthName`, `o2`.`FullName`, `o2`.`HasSoulPatch`, `o2`.`LeaderNickname`, `o2`.`LeaderSquadId`, `o2`.`Rank`, 'Officer' AS `Discriminator` - FROM `Officers` AS `o2` - ) AS `t1` - WHERE `t`.`Nickname` = `t1`.`LeaderNickname` AND `t`.`SquadId` = `t1`.`LeaderSquadId`) -ORDER BY NOT (`t`.`HasSoulPatch`) DESC, `t0`.`Note`, `t`.`Nickname`, `t`.`SquadId`, `t0`.`Id`, `t2`.`Nickname`, `t2`.`SquadId`, NOT (`t3`.`IsAutomatic`), `t3`.`Nickname` DESC, `t3`.`Id` + SELECT `o0`.`LeaderNickname`, `o0`.`LeaderSquadId` + FROM `Officers` AS `o0` + ) AS `u0` + WHERE `u`.`Nickname` = `u0`.`LeaderNickname` AND `u`.`SquadId` = `u0`.`LeaderSquadId`) +ORDER BY NOT (`u`.`HasSoulPatch`) DESC, `t`.`Note`, `u`.`Nickname`, `u`.`SquadId`, `t`.`Id`, `u1`.`Nickname`, `u1`.`SquadId`, NOT (`s`.`IsAutomatic`), `s`.`Nickname` DESC, `s`.`Id` """); } @@ -5859,42 +5941,42 @@ public override async Task Multiple_orderby_with_navigation_expansion_on_one_of_ await base.Multiple_orderby_with_navigation_expansion_on_one_of_the_order_bys_inside_subquery_duplicated_orderings(async); AssertSql( -""" -SELECT `t`.`FullName`, `t`.`Nickname`, `t`.`SquadId`, `t0`.`Id`, `t2`.`Nickname`, `t2`.`SquadId`, `t3`.`Id`, `t3`.`AmmunitionType`, `t3`.`IsAutomatic`, `t3`.`Name`, `t3`.`OwnerFullName`, `t3`.`SynergyWithId`, `t3`.`Nickname`, `t3`.`SquadId` + """ +SELECT `u`.`FullName`, `u`.`Nickname`, `u`.`SquadId`, `t`.`Id`, `u1`.`Nickname`, `u1`.`SquadId`, `s`.`Id`, `s`.`AmmunitionType`, `s`.`IsAutomatic`, `s`.`Name`, `s`.`OwnerFullName`, `s`.`SynergyWithId`, `s`.`Nickname`, `s`.`SquadId` FROM ((( SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName`, `o`.`HasSoulPatch` FROM `Officers` AS `o` -) AS `t` -LEFT JOIN `Tags` AS `t0` ON `t`.`Nickname` = `t0`.`GearNickName` AND `t`.`SquadId` = `t0`.`GearSquadId`) +) AS `u` +LEFT JOIN `Tags` AS `t` ON `u`.`Nickname` = `t`.`GearNickName` AND `u`.`SquadId` = `t`.`GearSquadId`) LEFT JOIN ( - SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` - FROM `Gears` AS `g` + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`FullName` + FROM `Gears` AS `g0` UNION ALL - SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`FullName` - FROM `Officers` AS `o0` -) AS `t2` ON `t0`.`GearNickName` = `t2`.`Nickname` AND `t0`.`GearSquadId` = `t2`.`SquadId`) + SELECT `o1`.`Nickname`, `o1`.`SquadId`, `o1`.`FullName` + FROM `Officers` AS `o1` +) AS `u1` ON `t`.`GearNickName` = `u1`.`Nickname` AND `t`.`GearSquadId` = `u1`.`SquadId`) LEFT JOIN ( - SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `t4`.`Nickname`, `t4`.`SquadId` + SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `u2`.`Nickname`, `u2`.`SquadId` FROM `Weapons` AS `w` LEFT JOIN ( - SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`FullName` - FROM `Gears` AS `g0` + SELECT `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`FullName` + FROM `Gears` AS `g1` UNION ALL - SELECT `o1`.`Nickname`, `o1`.`SquadId`, `o1`.`FullName` - FROM `Officers` AS `o1` - ) AS `t4` ON `w`.`OwnerFullName` = `t4`.`FullName` -) AS `t3` ON `t2`.`FullName` = `t3`.`OwnerFullName` + SELECT `o2`.`Nickname`, `o2`.`SquadId`, `o2`.`FullName` + FROM `Officers` AS `o2` + ) AS `u2` ON `w`.`OwnerFullName` = `u2`.`FullName` +) AS `s` ON `u1`.`FullName` = `s`.`OwnerFullName` WHERE EXISTS ( SELECT 1 FROM ( - SELECT `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`AssignedCityName`, `g1`.`CityOfBirthName`, `g1`.`FullName`, `g1`.`HasSoulPatch`, `g1`.`LeaderNickname`, `g1`.`LeaderSquadId`, `g1`.`Rank`, 'Gear' AS `Discriminator` - FROM `Gears` AS `g1` + SELECT `g`.`LeaderNickname`, `g`.`LeaderSquadId` + FROM `Gears` AS `g` UNION ALL - SELECT `o2`.`Nickname`, `o2`.`SquadId`, `o2`.`AssignedCityName`, `o2`.`CityOfBirthName`, `o2`.`FullName`, `o2`.`HasSoulPatch`, `o2`.`LeaderNickname`, `o2`.`LeaderSquadId`, `o2`.`Rank`, 'Officer' AS `Discriminator` - FROM `Officers` AS `o2` - ) AS `t1` - WHERE `t`.`Nickname` = `t1`.`LeaderNickname` AND `t`.`SquadId` = `t1`.`LeaderSquadId`) -ORDER BY NOT (`t`.`HasSoulPatch`) DESC, `t0`.`Note`, `t`.`Nickname`, `t`.`SquadId`, `t0`.`Id`, `t2`.`Nickname`, `t2`.`SquadId`, NOT (`t3`.`IsAutomatic`), `t3`.`Nickname` DESC, `t3`.`Id` + SELECT `o0`.`LeaderNickname`, `o0`.`LeaderSquadId` + FROM `Officers` AS `o0` + ) AS `u0` + WHERE `u`.`Nickname` = `u0`.`LeaderNickname` AND `u`.`SquadId` = `u0`.`LeaderSquadId`) +ORDER BY NOT (`u`.`HasSoulPatch`) DESC, `t`.`Note`, `u`.`Nickname`, `u`.`SquadId`, `t`.`Id`, `u1`.`Nickname`, `u1`.`SquadId`, NOT (`s`.`IsAutomatic`), `s`.`Nickname` DESC, `s`.`Id` """); } @@ -5903,45 +5985,45 @@ public override async Task Multiple_orderby_with_navigation_expansion_on_one_of_ { await base.Multiple_orderby_with_navigation_expansion_on_one_of_the_order_bys_inside_subquery_complex_orderings(async); AssertSql( - """ -SELECT `t`.`FullName`, `t`.`Nickname`, `t`.`SquadId`, `t0`.`Id`, `t2`.`Nickname`, `t2`.`SquadId`, `t3`.`Id`, `t3`.`AmmunitionType`, `t3`.`IsAutomatic`, `t3`.`Name`, `t3`.`OwnerFullName`, `t3`.`SynergyWithId`, `t3`.`Nickname`, `t3`.`SquadId` + """ +SELECT `u`.`FullName`, `u`.`Nickname`, `u`.`SquadId`, `t`.`Id`, `u1`.`Nickname`, `u1`.`SquadId`, `s`.`Id`, `s`.`AmmunitionType`, `s`.`IsAutomatic`, `s`.`Name`, `s`.`OwnerFullName`, `s`.`SynergyWithId`, `s`.`Nickname`, `s`.`SquadId` FROM ((( SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName`, `o`.`HasSoulPatch` FROM `Officers` AS `o` -) AS `t` -LEFT JOIN `Tags` AS `t0` ON `t`.`Nickname` = `t0`.`GearNickName` AND `t`.`SquadId` = `t0`.`GearSquadId`) +) AS `u` +LEFT JOIN `Tags` AS `t` ON `u`.`Nickname` = `t`.`GearNickName` AND `u`.`SquadId` = `t`.`GearSquadId`) LEFT JOIN ( - SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` - FROM `Gears` AS `g` + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`FullName` + FROM `Gears` AS `g0` UNION ALL - SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`FullName` - FROM `Officers` AS `o0` -) AS `t2` ON `t0`.`GearNickName` = `t2`.`Nickname` AND `t0`.`GearSquadId` = `t2`.`SquadId`) + SELECT `o1`.`Nickname`, `o1`.`SquadId`, `o1`.`FullName` + FROM `Officers` AS `o1` +) AS `u1` ON `t`.`GearNickName` = `u1`.`Nickname` AND `t`.`GearSquadId` = `u1`.`SquadId`) LEFT JOIN ( - SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `t4`.`Nickname`, `t4`.`SquadId`, ( + SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `u2`.`Nickname`, `u2`.`SquadId`, ( SELECT COUNT(*) FROM `Weapons` AS `w0` - WHERE `t4`.`FullName` IS NOT NULL AND `t4`.`FullName` = `w0`.`OwnerFullName`) AS `c` + WHERE `u2`.`FullName` IS NOT NULL AND `u2`.`FullName` = `w0`.`OwnerFullName`) AS `c` FROM `Weapons` AS `w` LEFT JOIN ( - SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`FullName` - FROM `Gears` AS `g0` + SELECT `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`FullName` + FROM `Gears` AS `g1` UNION ALL - SELECT `o1`.`Nickname`, `o1`.`SquadId`, `o1`.`FullName` - FROM `Officers` AS `o1` - ) AS `t4` ON `w`.`OwnerFullName` = `t4`.`FullName` -) AS `t3` ON `t2`.`FullName` = `t3`.`OwnerFullName` + SELECT `o2`.`Nickname`, `o2`.`SquadId`, `o2`.`FullName` + FROM `Officers` AS `o2` + ) AS `u2` ON `w`.`OwnerFullName` = `u2`.`FullName` +) AS `s` ON `u1`.`FullName` = `s`.`OwnerFullName` WHERE EXISTS ( SELECT 1 FROM ( - SELECT `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`AssignedCityName`, `g1`.`CityOfBirthName`, `g1`.`FullName`, `g1`.`HasSoulPatch`, `g1`.`LeaderNickname`, `g1`.`LeaderSquadId`, `g1`.`Rank`, 'Gear' AS `Discriminator` - FROM `Gears` AS `g1` + SELECT `g`.`LeaderNickname`, `g`.`LeaderSquadId` + FROM `Gears` AS `g` UNION ALL - SELECT `o2`.`Nickname`, `o2`.`SquadId`, `o2`.`AssignedCityName`, `o2`.`CityOfBirthName`, `o2`.`FullName`, `o2`.`HasSoulPatch`, `o2`.`LeaderNickname`, `o2`.`LeaderSquadId`, `o2`.`Rank`, 'Officer' AS `Discriminator` - FROM `Officers` AS `o2` - ) AS `t1` - WHERE `t`.`Nickname` = `t1`.`LeaderNickname` AND `t`.`SquadId` = `t1`.`LeaderSquadId`) -ORDER BY NOT (`t`.`HasSoulPatch`) DESC, `t0`.`Note`, `t`.`Nickname`, `t`.`SquadId`, `t0`.`Id`, `t2`.`Nickname`, `t2`.`SquadId`, `t3`.`Id` DESC, `t3`.`c`, `t3`.`Nickname` + SELECT `o0`.`LeaderNickname`, `o0`.`LeaderSquadId` + FROM `Officers` AS `o0` + ) AS `u0` + WHERE `u`.`Nickname` = `u0`.`LeaderNickname` AND `u`.`SquadId` = `u0`.`LeaderSquadId`) +ORDER BY NOT (`u`.`HasSoulPatch`) DESC, `t`.`Note`, `u`.`Nickname`, `u`.`SquadId`, `t`.`Id`, `u1`.`Nickname`, `u1`.`SquadId`, `s`.`Id` DESC, `s`.`c`, `s`.`Nickname` """); } @@ -5950,74 +6032,74 @@ public override async Task Correlated_collections_multiple_nested_complex_collec await base.Correlated_collections_multiple_nested_complex_collections(async); AssertSql( -""" -SELECT `t`.`FullName`, `t`.`Nickname`, `t`.`SquadId`, `t0`.`Id`, `t2`.`Nickname`, `t2`.`SquadId`, `t3`.`FullName`, `t3`.`Nickname`, `t3`.`SquadId`, `t3`.`Id`, `t3`.`Nickname0`, `t3`.`SquadId0`, `t3`.`Id0`, `t3`.`Name`, `t3`.`IsAutomatic`, `t3`.`Id1`, `t3`.`Nickname00`, `t3`.`HasSoulPatch`, `t3`.`SquadId00`, `t8`.`Id`, `t8`.`AmmunitionType`, `t8`.`IsAutomatic`, `t8`.`Name`, `t8`.`OwnerFullName`, `t8`.`SynergyWithId`, `t8`.`Nickname`, `t8`.`SquadId` + """ +SELECT `u`.`FullName`, `u`.`Nickname`, `u`.`SquadId`, `t`.`Id`, `u1`.`Nickname`, `u1`.`SquadId`, `s1`.`FullName`, `s1`.`Nickname`, `s1`.`SquadId`, `s1`.`Id`, `s1`.`Nickname0`, `s1`.`SquadId0`, `s1`.`Id0`, `s1`.`Name`, `s1`.`IsAutomatic`, `s1`.`Id1`, `s1`.`Nickname00`, `s1`.`HasSoulPatch`, `s1`.`SquadId00`, `s2`.`Id`, `s2`.`AmmunitionType`, `s2`.`IsAutomatic`, `s2`.`Name`, `s2`.`OwnerFullName`, `s2`.`SynergyWithId`, `s2`.`Nickname`, `s2`.`SquadId` FROM (((( SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName`, `o`.`HasSoulPatch` FROM `Officers` AS `o` -) AS `t` -LEFT JOIN `Tags` AS `t0` ON `t`.`Nickname` = `t0`.`GearNickName` AND `t`.`SquadId` = `t0`.`GearSquadId`) +) AS `u` +LEFT JOIN `Tags` AS `t` ON `u`.`Nickname` = `t`.`GearNickName` AND `u`.`SquadId` = `t`.`GearSquadId`) LEFT JOIN ( - SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` - FROM `Gears` AS `g` + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`FullName` + FROM `Gears` AS `g0` UNION ALL - SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`FullName` - FROM `Officers` AS `o0` -) AS `t2` ON `t0`.`GearNickName` = `t2`.`Nickname` AND `t0`.`GearSquadId` = `t2`.`SquadId`) + SELECT `o1`.`Nickname`, `o1`.`SquadId`, `o1`.`FullName` + FROM `Officers` AS `o1` +) AS `u1` ON `t`.`GearNickName` = `u1`.`Nickname` AND `t`.`GearSquadId` = `u1`.`SquadId`) LEFT JOIN ( - SELECT `t4`.`FullName`, `t4`.`Nickname`, `t4`.`SquadId`, `t5`.`Id`, `t5`.`Nickname` AS `Nickname0`, `t5`.`SquadId` AS `SquadId0`, `t5`.`Id0`, `t5`.`Name`, `t5`.`IsAutomatic`, `t5`.`Id1`, `t5`.`Nickname0` AS `Nickname00`, `t5`.`HasSoulPatch`, `t5`.`SquadId0` AS `SquadId00`, `t4`.`Rank`, `t5`.`IsAutomatic0`, `t4`.`LeaderNickname`, `t4`.`LeaderSquadId` + SELECT `u2`.`FullName`, `u2`.`Nickname`, `u2`.`SquadId`, `s0`.`Id`, `s0`.`Nickname` AS `Nickname0`, `s0`.`SquadId` AS `SquadId0`, `s0`.`Id0`, `s0`.`Name`, `s0`.`IsAutomatic`, `s0`.`Id1`, `s0`.`Nickname0` AS `Nickname00`, `s0`.`HasSoulPatch`, `s0`.`SquadId0` AS `SquadId00`, `u2`.`Rank`, `s0`.`IsAutomatic0`, `u2`.`LeaderNickname`, `u2`.`LeaderSquadId` FROM ( - SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`FullName`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank` - FROM `Gears` AS `g0` + SELECT `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`FullName`, `g1`.`LeaderNickname`, `g1`.`LeaderSquadId`, `g1`.`Rank` + FROM `Gears` AS `g1` UNION ALL - SELECT `o1`.`Nickname`, `o1`.`SquadId`, `o1`.`FullName`, `o1`.`LeaderNickname`, `o1`.`LeaderSquadId`, `o1`.`Rank` - FROM `Officers` AS `o1` - ) AS `t4` + SELECT `o2`.`Nickname`, `o2`.`SquadId`, `o2`.`FullName`, `o2`.`LeaderNickname`, `o2`.`LeaderSquadId`, `o2`.`Rank` + FROM `Officers` AS `o2` + ) AS `u2` LEFT JOIN ( - SELECT `w`.`Id`, `t6`.`Nickname`, `t6`.`SquadId`, `s`.`Id` AS `Id0`, `w0`.`Name`, `w0`.`IsAutomatic`, `w0`.`Id` AS `Id1`, `t7`.`Nickname` AS `Nickname0`, `t7`.`HasSoulPatch`, `t7`.`SquadId` AS `SquadId0`, `w`.`IsAutomatic` AS `IsAutomatic0`, `w`.`OwnerFullName` + SELECT `w`.`Id`, `u3`.`Nickname`, `u3`.`SquadId`, `s`.`Id` AS `Id0`, `w0`.`Name`, `w0`.`IsAutomatic`, `w0`.`Id` AS `Id1`, `u4`.`Nickname` AS `Nickname0`, `u4`.`HasSoulPatch`, `u4`.`SquadId` AS `SquadId0`, `w`.`IsAutomatic` AS `IsAutomatic0`, `w`.`OwnerFullName` FROM (((`Weapons` AS `w` LEFT JOIN ( - SELECT `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`FullName` - FROM `Gears` AS `g1` - UNION ALL - SELECT `o2`.`Nickname`, `o2`.`SquadId`, `o2`.`FullName` - FROM `Officers` AS `o2` - ) AS `t6` ON `w`.`OwnerFullName` = `t6`.`FullName`) - LEFT JOIN `Squads` AS `s` ON `t6`.`SquadId` = `s`.`Id`) - LEFT JOIN `Weapons` AS `w0` ON `t6`.`FullName` = `w0`.`OwnerFullName`) - LEFT JOIN ( - SELECT `g2`.`Nickname`, `g2`.`SquadId`, `g2`.`HasSoulPatch` + SELECT `g2`.`Nickname`, `g2`.`SquadId`, `g2`.`FullName` FROM `Gears` AS `g2` UNION ALL - SELECT `o3`.`Nickname`, `o3`.`SquadId`, `o3`.`HasSoulPatch` + SELECT `o3`.`Nickname`, `o3`.`SquadId`, `o3`.`FullName` FROM `Officers` AS `o3` - ) AS `t7` ON `s`.`Id` = `t7`.`SquadId` + ) AS `u3` ON `w`.`OwnerFullName` = `u3`.`FullName`) + LEFT JOIN `Squads` AS `s` ON `u3`.`SquadId` = `s`.`Id`) + LEFT JOIN `Weapons` AS `w0` ON `u3`.`FullName` = `w0`.`OwnerFullName`) + LEFT JOIN ( + SELECT `g3`.`Nickname`, `g3`.`SquadId`, `g3`.`HasSoulPatch` + FROM `Gears` AS `g3` + UNION ALL + SELECT `o4`.`Nickname`, `o4`.`SquadId`, `o4`.`HasSoulPatch` + FROM `Officers` AS `o4` + ) AS `u4` ON `s`.`Id` = `u4`.`SquadId` WHERE `w`.`Name` <> 'Bar' OR `w`.`Name` IS NULL - ) AS `t5` ON `t4`.`FullName` = `t5`.`OwnerFullName` - WHERE `t4`.`FullName` <> 'Foo' -) AS `t3` ON `t`.`Nickname` = `t3`.`LeaderNickname` AND `t`.`SquadId` = `t3`.`LeaderSquadId`) + ) AS `s0` ON `u2`.`FullName` = `s0`.`OwnerFullName` + WHERE `u2`.`FullName` <> 'Foo' +) AS `s1` ON `u`.`Nickname` = `s1`.`LeaderNickname` AND `u`.`SquadId` = `s1`.`LeaderSquadId`) LEFT JOIN ( - SELECT `w1`.`Id`, `w1`.`AmmunitionType`, `w1`.`IsAutomatic`, `w1`.`Name`, `w1`.`OwnerFullName`, `w1`.`SynergyWithId`, `t9`.`Nickname`, `t9`.`SquadId` + SELECT `w1`.`Id`, `w1`.`AmmunitionType`, `w1`.`IsAutomatic`, `w1`.`Name`, `w1`.`OwnerFullName`, `w1`.`SynergyWithId`, `u5`.`Nickname`, `u5`.`SquadId` FROM `Weapons` AS `w1` LEFT JOIN ( - SELECT `g3`.`Nickname`, `g3`.`SquadId`, `g3`.`FullName` - FROM `Gears` AS `g3` + SELECT `g4`.`Nickname`, `g4`.`SquadId`, `g4`.`FullName` + FROM `Gears` AS `g4` UNION ALL - SELECT `o4`.`Nickname`, `o4`.`SquadId`, `o4`.`FullName` - FROM `Officers` AS `o4` - ) AS `t9` ON `w1`.`OwnerFullName` = `t9`.`FullName` -) AS `t8` ON `t2`.`FullName` = `t8`.`OwnerFullName` + SELECT `o5`.`Nickname`, `o5`.`SquadId`, `o5`.`FullName` + FROM `Officers` AS `o5` + ) AS `u5` ON `w1`.`OwnerFullName` = `u5`.`FullName` +) AS `s2` ON `u1`.`FullName` = `s2`.`OwnerFullName` WHERE EXISTS ( SELECT 1 FROM ( - SELECT `g4`.`Nickname`, `g4`.`SquadId`, `g4`.`AssignedCityName`, `g4`.`CityOfBirthName`, `g4`.`FullName`, `g4`.`HasSoulPatch`, `g4`.`LeaderNickname`, `g4`.`LeaderSquadId`, `g4`.`Rank`, 'Gear' AS `Discriminator` - FROM `Gears` AS `g4` + SELECT `g`.`LeaderNickname`, `g`.`LeaderSquadId` + FROM `Gears` AS `g` UNION ALL - SELECT `o5`.`Nickname`, `o5`.`SquadId`, `o5`.`AssignedCityName`, `o5`.`CityOfBirthName`, `o5`.`FullName`, `o5`.`HasSoulPatch`, `o5`.`LeaderNickname`, `o5`.`LeaderSquadId`, `o5`.`Rank`, 'Officer' AS `Discriminator` - FROM `Officers` AS `o5` - ) AS `t1` - WHERE `t`.`Nickname` = `t1`.`LeaderNickname` AND `t`.`SquadId` = `t1`.`LeaderSquadId`) -ORDER BY NOT (`t`.`HasSoulPatch`) DESC, `t0`.`Note`, `t`.`Nickname`, `t`.`SquadId`, `t0`.`Id`, `t2`.`Nickname`, `t2`.`SquadId`, `t3`.`Rank`, `t3`.`Nickname`, `t3`.`SquadId`, NOT (`t3`.`IsAutomatic0`), `t3`.`Id`, `t3`.`Nickname0`, `t3`.`SquadId0`, `t3`.`Id0`, `t3`.`Id1`, `t3`.`Nickname00`, `t3`.`SquadId00`, NOT (`t8`.`IsAutomatic`), `t8`.`Nickname` DESC, `t8`.`Id` + SELECT `o0`.`LeaderNickname`, `o0`.`LeaderSquadId` + FROM `Officers` AS `o0` + ) AS `u0` + WHERE `u`.`Nickname` = `u0`.`LeaderNickname` AND `u`.`SquadId` = `u0`.`LeaderSquadId`) +ORDER BY NOT (`u`.`HasSoulPatch`) DESC, `t`.`Note`, `u`.`Nickname`, `u`.`SquadId`, `t`.`Id`, `u1`.`Nickname`, `u1`.`SquadId`, `s1`.`Rank`, `s1`.`Nickname`, `s1`.`SquadId`, NOT (`s1`.`IsAutomatic0`), `s1`.`Id`, `s1`.`Nickname0`, `s1`.`SquadId0`, `s1`.`Id0`, `s1`.`Id1`, `s1`.`Nickname00`, `s1`.`SquadId00`, NOT (`s2`.`IsAutomatic`), `s2`.`Nickname` DESC, `s2`.`Id` """); } @@ -6256,18 +6338,18 @@ public override async Task Correlated_collections_with_FirstOrDefault(bool async await base.Correlated_collections_with_FirstOrDefault(async); AssertSql( -""" + """ SELECT ( - SELECT TOP 1 `t`.`FullName` + SELECT TOP 1 `u`.`FullName` FROM ( - SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` FROM `Gears` AS `g` UNION ALL - SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` FROM `Officers` AS `o` - ) AS `t` - WHERE `s`.`Id` = `t`.`SquadId` - ORDER BY `t`.`Nickname`) + ) AS `u` + WHERE `s`.`Id` = `u`.`SquadId` + ORDER BY `u`.`Nickname`) FROM `Squads` AS `s` ORDER BY `s`.`Name` """); @@ -6278,8 +6360,8 @@ public override async Task Correlated_collections_on_left_join_with_predicate(bo await base.Correlated_collections_on_left_join_with_predicate(async); AssertSql( -""" -SELECT `t0`.`Nickname`, `t`.`Id`, `t0`.`SquadId`, `w`.`Name`, `w`.`Id` + """ +SELECT `u`.`Nickname`, `t`.`Id`, `u`.`SquadId`, `w`.`Name`, `w`.`Id` FROM (`Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName`, `g`.`HasSoulPatch` @@ -6287,10 +6369,10 @@ LEFT JOIN ( UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName`, `o`.`HasSoulPatch` FROM `Officers` AS `o` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname`) -LEFT JOIN `Weapons` AS `w` ON `t0`.`FullName` = `w`.`OwnerFullName` -WHERE `t0`.`HasSoulPatch` <> TRUE -ORDER BY `t`.`Id`, `t0`.`Nickname`, `t0`.`SquadId` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `u`.`FullName` = `w`.`OwnerFullName` +WHERE `u`.`HasSoulPatch` <> TRUE +ORDER BY `t`.`Id`, `u`.`Nickname`, `u`.`SquadId` """); } @@ -6299,8 +6381,8 @@ public override async Task Correlated_collections_on_left_join_with_null_value(b await base.Correlated_collections_on_left_join_with_null_value(async); AssertSql( -""" -SELECT `t`.`Id`, `t0`.`Nickname`, `t0`.`SquadId`, `w`.`Name`, `w`.`Id` + """ +SELECT `t`.`Id`, `u`.`Nickname`, `u`.`SquadId`, `w`.`Name`, `w`.`Id` FROM (`Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` @@ -6308,9 +6390,9 @@ LEFT JOIN ( UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` FROM `Officers` AS `o` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname`) -LEFT JOIN `Weapons` AS `w` ON `t0`.`FullName` = `w`.`OwnerFullName` -ORDER BY `t`.`Note`, `t`.`Id`, `t0`.`Nickname`, `t0`.`SquadId` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `u`.`FullName` = `w`.`OwnerFullName` +ORDER BY `t`.`Note`, `t`.`Id`, `u`.`Nickname`, `u`.`SquadId` """); } @@ -6319,21 +6401,21 @@ public override async Task Correlated_collections_left_join_with_self_reference( await base.Correlated_collections_left_join_with_self_reference(async); AssertSql( -""" -SELECT `t`.`Note`, `t`.`Id`, `t0`.`Nickname`, `t0`.`SquadId`, `t1`.`FullName`, `t1`.`Nickname`, `t1`.`SquadId` + """ +SELECT `t`.`Note`, `t`.`Id`, `u`.`Nickname`, `u`.`SquadId`, `u0`.`FullName`, `u0`.`Nickname`, `u0`.`SquadId` FROM (`Tags` AS `t` LEFT JOIN ( SELECT `o`.`Nickname`, `o`.`SquadId` FROM `Officers` AS `o` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname`) +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname`) LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName`, `g`.`LeaderNickname`, `g`.`LeaderSquadId` FROM `Gears` AS `g` UNION ALL SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`FullName`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId` FROM `Officers` AS `o0` -) AS `t1` ON (`t0`.`Nickname` = `t1`.`LeaderNickname` OR (`t0`.`Nickname` IS NULL AND `t1`.`LeaderNickname` IS NULL)) AND `t0`.`SquadId` = `t1`.`LeaderSquadId` -ORDER BY `t`.`Id`, `t0`.`Nickname`, `t0`.`SquadId`, `t1`.`Nickname` +) AS `u0` ON (`u`.`Nickname` = `u0`.`LeaderNickname` OR (`u`.`Nickname` IS NULL AND `u0`.`LeaderNickname` IS NULL)) AND `u`.`SquadId` = `u0`.`LeaderSquadId` +ORDER BY `t`.`Id`, `u`.`Nickname`, `u`.`SquadId`, `u0`.`Nickname` """); } @@ -6342,8 +6424,8 @@ public override async Task Correlated_collections_deeply_nested_left_join(bool a await base.Correlated_collections_deeply_nested_left_join(async); AssertSql( -""" -SELECT `t`.`Id`, `t0`.`Nickname`, `t0`.`SquadId`, `s`.`Id`, `t1`.`Nickname`, `t1`.`SquadId`, `t1`.`Id`, `t1`.`AmmunitionType`, `t1`.`IsAutomatic`, `t1`.`Name`, `t1`.`OwnerFullName`, `t1`.`SynergyWithId` + """ +SELECT `t`.`Id`, `u`.`Nickname`, `u`.`SquadId`, `s`.`Id`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`Id`, `s0`.`AmmunitionType`, `s0`.`IsAutomatic`, `s0`.`Name`, `s0`.`OwnerFullName`, `s0`.`SynergyWithId` FROM ((`Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId` @@ -6351,25 +6433,25 @@ LEFT JOIN ( UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId` FROM `Officers` AS `o` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname`) -LEFT JOIN `Squads` AS `s` ON `t0`.`SquadId` = `s`.`Id`) +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname`) +LEFT JOIN `Squads` AS `s` ON `u`.`SquadId` = `s`.`Id`) LEFT JOIN ( - SELECT `t2`.`Nickname`, `t2`.`SquadId`, `t3`.`Id`, `t3`.`AmmunitionType`, `t3`.`IsAutomatic`, `t3`.`Name`, `t3`.`OwnerFullName`, `t3`.`SynergyWithId` + SELECT `u0`.`Nickname`, `u0`.`SquadId`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` FROM ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`FullName`, `g0`.`HasSoulPatch` FROM `Gears` AS `g0` UNION ALL SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`FullName`, `o0`.`HasSoulPatch` FROM `Officers` AS `o0` - ) AS `t2` + ) AS `u0` LEFT JOIN ( SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM `Weapons` AS `w` WHERE `w`.`IsAutomatic` = TRUE - ) AS `t3` ON `t2`.`FullName` = `t3`.`OwnerFullName` - WHERE `t2`.`HasSoulPatch` = TRUE -) AS `t1` ON `s`.`Id` = `t1`.`SquadId` -ORDER BY `t`.`Note`, `t0`.`Nickname` DESC, `t`.`Id`, `t0`.`SquadId`, `s`.`Id`, `t1`.`Nickname`, `t1`.`SquadId` + ) AS `w0` ON `u0`.`FullName` = `w0`.`OwnerFullName` + WHERE `u0`.`HasSoulPatch` = TRUE +) AS `s0` ON `s`.`Id` = `s0`.`SquadId` +ORDER BY `t`.`Note`, `u`.`Nickname` DESC, `t`.`Id`, `u`.`SquadId`, `s`.`Id`, `s0`.`Nickname`, `s0`.`SquadId` """); } @@ -6378,8 +6460,8 @@ public override async Task Correlated_collections_from_left_join_with_additional await base.Correlated_collections_from_left_join_with_additional_elements_projected_of_that_join(async); AssertSql( -""" -SELECT `w`.`Id`, `t`.`Nickname`, `t`.`SquadId`, `s`.`Id`, `t1`.`Nickname`, `t1`.`SquadId`, `t1`.`Id`, `t1`.`AmmunitionType`, `t1`.`IsAutomatic`, `t1`.`Name`, `t1`.`OwnerFullName`, `t1`.`SynergyWithId`, `t1`.`Rank` + """ +SELECT `w`.`Id`, `u`.`Nickname`, `u`.`SquadId`, `s`.`Id`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`Id`, `s0`.`AmmunitionType`, `s0`.`IsAutomatic`, `s0`.`Name`, `s0`.`OwnerFullName`, `s0`.`SynergyWithId`, `s0`.`Rank` FROM ((`Weapons` AS `w` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` @@ -6387,24 +6469,24 @@ LEFT JOIN ( UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` FROM `Officers` AS `o` -) AS `t` ON `w`.`OwnerFullName` = `t`.`FullName`) -LEFT JOIN `Squads` AS `s` ON `t`.`SquadId` = `s`.`Id`) +) AS `u` ON `w`.`OwnerFullName` = `u`.`FullName`) +LEFT JOIN `Squads` AS `s` ON `u`.`SquadId` = `s`.`Id`) LEFT JOIN ( - SELECT `t0`.`Nickname`, `t0`.`SquadId`, `t2`.`Id`, `t2`.`AmmunitionType`, `t2`.`IsAutomatic`, `t2`.`Name`, `t2`.`OwnerFullName`, `t2`.`SynergyWithId`, `t0`.`Rank`, `t0`.`FullName` + SELECT `u0`.`Nickname`, `u0`.`SquadId`, `w1`.`Id`, `w1`.`AmmunitionType`, `w1`.`IsAutomatic`, `w1`.`Name`, `w1`.`OwnerFullName`, `w1`.`SynergyWithId`, `u0`.`Rank`, `u0`.`FullName` FROM ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`FullName`, `g0`.`Rank` FROM `Gears` AS `g0` UNION ALL SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`FullName`, `o0`.`Rank` FROM `Officers` AS `o0` - ) AS `t0` + ) AS `u0` LEFT JOIN ( SELECT `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` FROM `Weapons` AS `w0` WHERE `w0`.`IsAutomatic` <> TRUE - ) AS `t2` ON `t0`.`FullName` = `t2`.`OwnerFullName` -) AS `t1` ON `s`.`Id` = `t1`.`SquadId` -ORDER BY `w`.`Name`, `w`.`Id`, `t`.`Nickname`, `t`.`SquadId`, `s`.`Id`, `t1`.`FullName` DESC, `t1`.`Nickname`, `t1`.`SquadId`, `t1`.`Id` + ) AS `w1` ON `u0`.`FullName` = `w1`.`OwnerFullName` +) AS `s0` ON `s`.`Id` = `s0`.`SquadId` +ORDER BY `w`.`Name`, `w`.`Id`, `u`.`Nickname`, `u`.`SquadId`, `s`.`Id`, `s0`.`FullName` DESC, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`Id` """); } @@ -6413,17 +6495,17 @@ public override async Task Correlated_collections_complex_scenario1(bool async) await base.Correlated_collections_complex_scenario1(async); AssertSql( -""" -SELECT `t`.`FullName`, `t`.`Nickname`, `t`.`SquadId`, `t1`.`Id`, `t1`.`Nickname`, `t1`.`SquadId`, `t1`.`Id0`, `t1`.`Nickname0`, `t1`.`HasSoulPatch`, `t1`.`SquadId0` + """ +SELECT `u`.`FullName`, `u`.`Nickname`, `u`.`SquadId`, `s0`.`Id`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`Id0`, `s0`.`Nickname0`, `s0`.`HasSoulPatch`, `s0`.`SquadId0` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` FROM `Officers` AS `o` -) AS `t` +) AS `u` LEFT JOIN ( - SELECT `w`.`Id`, `t0`.`Nickname`, `t0`.`SquadId`, `s`.`Id` AS `Id0`, `t2`.`Nickname` AS `Nickname0`, `t2`.`HasSoulPatch`, `t2`.`SquadId` AS `SquadId0`, `w`.`OwnerFullName` + SELECT `w`.`Id`, `u0`.`Nickname`, `u0`.`SquadId`, `s`.`Id` AS `Id0`, `u1`.`Nickname` AS `Nickname0`, `u1`.`HasSoulPatch`, `u1`.`SquadId` AS `SquadId0`, `w`.`OwnerFullName` FROM ((`Weapons` AS `w` LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`FullName` @@ -6431,17 +6513,17 @@ LEFT JOIN ( UNION ALL SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`FullName` FROM `Officers` AS `o0` - ) AS `t0` ON `w`.`OwnerFullName` = `t0`.`FullName`) - LEFT JOIN `Squads` AS `s` ON `t0`.`SquadId` = `s`.`Id`) + ) AS `u0` ON `w`.`OwnerFullName` = `u0`.`FullName`) + LEFT JOIN `Squads` AS `s` ON `u0`.`SquadId` = `s`.`Id`) LEFT JOIN ( SELECT `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`HasSoulPatch` FROM `Gears` AS `g1` UNION ALL SELECT `o1`.`Nickname`, `o1`.`SquadId`, `o1`.`HasSoulPatch` FROM `Officers` AS `o1` - ) AS `t2` ON `s`.`Id` = `t2`.`SquadId` -) AS `t1` ON `t`.`FullName` = `t1`.`OwnerFullName` -ORDER BY `t`.`Nickname`, `t`.`SquadId`, `t1`.`Id`, `t1`.`Nickname`, `t1`.`SquadId`, `t1`.`Id0`, `t1`.`Nickname0` + ) AS `u1` ON `s`.`Id` = `u1`.`SquadId` +) AS `s0` ON `u`.`FullName` = `s0`.`OwnerFullName` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `s0`.`Id`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`Id0`, `s0`.`Nickname0` """); } @@ -6450,23 +6532,23 @@ public override async Task Correlated_collections_complex_scenario2(bool async) await base.Correlated_collections_complex_scenario2(async); AssertSql( -""" -SELECT `t`.`FullName`, `t`.`Nickname`, `t`.`SquadId`, `t3`.`FullName`, `t3`.`Nickname`, `t3`.`SquadId`, `t3`.`Id`, `t3`.`Nickname0`, `t3`.`SquadId0`, `t3`.`Id0`, `t3`.`Nickname00`, `t3`.`HasSoulPatch`, `t3`.`SquadId00` + """ +SELECT `u`.`FullName`, `u`.`Nickname`, `u`.`SquadId`, `s1`.`FullName`, `s1`.`Nickname`, `s1`.`SquadId`, `s1`.`Id`, `s1`.`Nickname0`, `s1`.`SquadId0`, `s1`.`Id0`, `s1`.`Nickname00`, `s1`.`HasSoulPatch`, `s1`.`SquadId00` FROM ( SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` FROM `Officers` AS `o` -) AS `t` +) AS `u` LEFT JOIN ( - SELECT `t0`.`FullName`, `t0`.`Nickname`, `t0`.`SquadId`, `t1`.`Id`, `t1`.`Nickname` AS `Nickname0`, `t1`.`SquadId` AS `SquadId0`, `t1`.`Id0`, `t1`.`Nickname0` AS `Nickname00`, `t1`.`HasSoulPatch`, `t1`.`SquadId0` AS `SquadId00`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId` + SELECT `u0`.`FullName`, `u0`.`Nickname`, `u0`.`SquadId`, `s0`.`Id`, `s0`.`Nickname` AS `Nickname0`, `s0`.`SquadId` AS `SquadId0`, `s0`.`Id0`, `s0`.`Nickname0` AS `Nickname00`, `s0`.`HasSoulPatch`, `s0`.`SquadId0` AS `SquadId00`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName`, `g`.`LeaderNickname`, `g`.`LeaderSquadId` FROM `Gears` AS `g` UNION ALL SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`FullName`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId` FROM `Officers` AS `o0` - ) AS `t0` + ) AS `u0` LEFT JOIN ( - SELECT `w`.`Id`, `t2`.`Nickname`, `t2`.`SquadId`, `s`.`Id` AS `Id0`, `t4`.`Nickname` AS `Nickname0`, `t4`.`HasSoulPatch`, `t4`.`SquadId` AS `SquadId0`, `w`.`OwnerFullName` + SELECT `w`.`Id`, `u1`.`Nickname`, `u1`.`SquadId`, `s`.`Id` AS `Id0`, `u2`.`Nickname` AS `Nickname0`, `u2`.`HasSoulPatch`, `u2`.`SquadId` AS `SquadId0`, `w`.`OwnerFullName` FROM ((`Weapons` AS `w` LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`FullName` @@ -6474,18 +6556,18 @@ LEFT JOIN ( UNION ALL SELECT `o1`.`Nickname`, `o1`.`SquadId`, `o1`.`FullName` FROM `Officers` AS `o1` - ) AS `t2` ON `w`.`OwnerFullName` = `t2`.`FullName`) - LEFT JOIN `Squads` AS `s` ON `t2`.`SquadId` = `s`.`Id`) + ) AS `u1` ON `w`.`OwnerFullName` = `u1`.`FullName`) + LEFT JOIN `Squads` AS `s` ON `u1`.`SquadId` = `s`.`Id`) LEFT JOIN ( SELECT `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`HasSoulPatch` FROM `Gears` AS `g1` UNION ALL SELECT `o2`.`Nickname`, `o2`.`SquadId`, `o2`.`HasSoulPatch` FROM `Officers` AS `o2` - ) AS `t4` ON `s`.`Id` = `t4`.`SquadId` - ) AS `t1` ON `t0`.`FullName` = `t1`.`OwnerFullName` -) AS `t3` ON `t`.`Nickname` = `t3`.`LeaderNickname` AND `t`.`SquadId` = `t3`.`LeaderSquadId` -ORDER BY `t`.`Nickname`, `t`.`SquadId`, `t3`.`Nickname`, `t3`.`SquadId`, `t3`.`Id`, `t3`.`Nickname0`, `t3`.`SquadId0`, `t3`.`Id0`, `t3`.`Nickname00` + ) AS `u2` ON `s`.`Id` = `u2`.`SquadId` + ) AS `s0` ON `u0`.`FullName` = `s0`.`OwnerFullName` +) AS `s1` ON `u`.`Nickname` = `s1`.`LeaderNickname` AND `u`.`SquadId` = `s1`.`LeaderSquadId` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `s1`.`Nickname`, `s1`.`SquadId`, `s1`.`Id`, `s1`.`Nickname0`, `s1`.`SquadId0`, `s1`.`Id0`, `s1`.`Nickname00` """); } @@ -6494,17 +6576,17 @@ public override async Task Correlated_collections_with_funky_orderby_complex_sce await base.Correlated_collections_with_funky_orderby_complex_scenario1(async); AssertSql( -""" -SELECT `t`.`FullName`, `t`.`Nickname`, `t`.`SquadId`, `t1`.`Id`, `t1`.`Nickname`, `t1`.`SquadId`, `t1`.`Id0`, `t1`.`Nickname0`, `t1`.`HasSoulPatch`, `t1`.`SquadId0` + """ +SELECT `u`.`FullName`, `u`.`Nickname`, `u`.`SquadId`, `s0`.`Id`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`Id0`, `s0`.`Nickname0`, `s0`.`HasSoulPatch`, `s0`.`SquadId0` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` FROM `Officers` AS `o` -) AS `t` +) AS `u` LEFT JOIN ( - SELECT `w`.`Id`, `t0`.`Nickname`, `t0`.`SquadId`, `s`.`Id` AS `Id0`, `t2`.`Nickname` AS `Nickname0`, `t2`.`HasSoulPatch`, `t2`.`SquadId` AS `SquadId0`, `w`.`OwnerFullName` + SELECT `w`.`Id`, `u0`.`Nickname`, `u0`.`SquadId`, `s`.`Id` AS `Id0`, `u1`.`Nickname` AS `Nickname0`, `u1`.`HasSoulPatch`, `u1`.`SquadId` AS `SquadId0`, `w`.`OwnerFullName` FROM ((`Weapons` AS `w` LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`FullName` @@ -6512,17 +6594,17 @@ LEFT JOIN ( UNION ALL SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`FullName` FROM `Officers` AS `o0` - ) AS `t0` ON `w`.`OwnerFullName` = `t0`.`FullName`) - LEFT JOIN `Squads` AS `s` ON `t0`.`SquadId` = `s`.`Id`) + ) AS `u0` ON `w`.`OwnerFullName` = `u0`.`FullName`) + LEFT JOIN `Squads` AS `s` ON `u0`.`SquadId` = `s`.`Id`) LEFT JOIN ( SELECT `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`HasSoulPatch` FROM `Gears` AS `g1` UNION ALL SELECT `o1`.`Nickname`, `o1`.`SquadId`, `o1`.`HasSoulPatch` FROM `Officers` AS `o1` - ) AS `t2` ON `s`.`Id` = `t2`.`SquadId` -) AS `t1` ON `t`.`FullName` = `t1`.`OwnerFullName` -ORDER BY `t`.`FullName`, `t`.`Nickname` DESC, `t`.`SquadId`, `t1`.`Id`, `t1`.`Nickname`, `t1`.`SquadId`, `t1`.`Id0`, `t1`.`Nickname0` + ) AS `u1` ON `s`.`Id` = `u1`.`SquadId` +) AS `s0` ON `u`.`FullName` = `s0`.`OwnerFullName` +ORDER BY `u`.`FullName`, `u`.`Nickname` DESC, `u`.`SquadId`, `s0`.`Id`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`Id0`, `s0`.`Nickname0` """); } @@ -6531,23 +6613,23 @@ public override async Task Correlated_collections_with_funky_orderby_complex_sce await base.Correlated_collections_with_funky_orderby_complex_scenario2(async); AssertSql( -""" -SELECT `t`.`FullName`, `t`.`Nickname`, `t`.`SquadId`, `t3`.`FullName`, `t3`.`Nickname`, `t3`.`SquadId`, `t3`.`Id`, `t3`.`Nickname0`, `t3`.`SquadId0`, `t3`.`Id0`, `t3`.`Nickname00`, `t3`.`HasSoulPatch`, `t3`.`SquadId00` + """ +SELECT `u`.`FullName`, `u`.`Nickname`, `u`.`SquadId`, `s1`.`FullName`, `s1`.`Nickname`, `s1`.`SquadId`, `s1`.`Id`, `s1`.`Nickname0`, `s1`.`SquadId0`, `s1`.`Id0`, `s1`.`Nickname00`, `s1`.`HasSoulPatch`, `s1`.`SquadId00` FROM ( SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname` FROM `Officers` AS `o` -) AS `t` +) AS `u` LEFT JOIN ( - SELECT `t0`.`FullName`, `t0`.`Nickname`, `t0`.`SquadId`, `t1`.`Id`, `t1`.`Nickname` AS `Nickname0`, `t1`.`SquadId` AS `SquadId0`, `t1`.`Id0`, `t1`.`Nickname0` AS `Nickname00`, `t1`.`HasSoulPatch`, `t1`.`SquadId0` AS `SquadId00`, `t0`.`HasSoulPatch` AS `HasSoulPatch0`, `t1`.`IsAutomatic`, `t1`.`Name`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId` + SELECT `u0`.`FullName`, `u0`.`Nickname`, `u0`.`SquadId`, `s0`.`Id`, `s0`.`Nickname` AS `Nickname0`, `s0`.`SquadId` AS `SquadId0`, `s0`.`Id0`, `s0`.`Nickname0` AS `Nickname00`, `s0`.`HasSoulPatch`, `s0`.`SquadId0` AS `SquadId00`, `u0`.`HasSoulPatch` AS `HasSoulPatch0`, `s0`.`IsAutomatic`, `s0`.`Name`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId` FROM `Gears` AS `g` UNION ALL SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId` FROM `Officers` AS `o0` - ) AS `t0` + ) AS `u0` LEFT JOIN ( - SELECT `w`.`Id`, `t2`.`Nickname`, `t2`.`SquadId`, `s`.`Id` AS `Id0`, `t4`.`Nickname` AS `Nickname0`, `t4`.`HasSoulPatch`, `t4`.`SquadId` AS `SquadId0`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName` + SELECT `w`.`Id`, `u1`.`Nickname`, `u1`.`SquadId`, `s`.`Id` AS `Id0`, `u2`.`Nickname` AS `Nickname0`, `u2`.`HasSoulPatch`, `u2`.`SquadId` AS `SquadId0`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName` FROM ((`Weapons` AS `w` LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`FullName` @@ -6555,18 +6637,18 @@ LEFT JOIN ( UNION ALL SELECT `o1`.`Nickname`, `o1`.`SquadId`, `o1`.`FullName` FROM `Officers` AS `o1` - ) AS `t2` ON `w`.`OwnerFullName` = `t2`.`FullName`) - LEFT JOIN `Squads` AS `s` ON `t2`.`SquadId` = `s`.`Id`) + ) AS `u1` ON `w`.`OwnerFullName` = `u1`.`FullName`) + LEFT JOIN `Squads` AS `s` ON `u1`.`SquadId` = `s`.`Id`) LEFT JOIN ( SELECT `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`HasSoulPatch` FROM `Gears` AS `g1` UNION ALL SELECT `o2`.`Nickname`, `o2`.`SquadId`, `o2`.`HasSoulPatch` FROM `Officers` AS `o2` - ) AS `t4` ON `s`.`Id` = `t4`.`SquadId` - ) AS `t1` ON `t0`.`FullName` = `t1`.`OwnerFullName` -) AS `t3` ON `t`.`Nickname` = `t3`.`LeaderNickname` AND `t`.`SquadId` = `t3`.`LeaderSquadId` -ORDER BY NOT (`t`.`HasSoulPatch`), `t`.`LeaderNickname`, `t`.`FullName`, `t`.`Nickname`, `t`.`SquadId`, `t3`.`FullName`, NOT (`t3`.`HasSoulPatch0`) DESC, `t3`.`Nickname`, `t3`.`SquadId`, NOT (`t3`.`IsAutomatic`), `t3`.`Name` DESC, `t3`.`Id`, `t3`.`Nickname0`, `t3`.`SquadId0`, `t3`.`Id0`, `t3`.`Nickname00` + ) AS `u2` ON `s`.`Id` = `u2`.`SquadId` + ) AS `s0` ON `u0`.`FullName` = `s0`.`OwnerFullName` +) AS `s1` ON `u`.`Nickname` = `s1`.`LeaderNickname` AND `u`.`SquadId` = `s1`.`LeaderSquadId` +ORDER BY NOT (`u`.`HasSoulPatch`), `u`.`LeaderNickname`, `u`.`FullName`, `u`.`Nickname`, `u`.`SquadId`, `s1`.`FullName`, NOT (`s1`.`HasSoulPatch0`) DESC, `s1`.`Nickname`, `s1`.`SquadId`, NOT (`s1`.`IsAutomatic`), `s1`.`Name` DESC, `s1`.`Id`, `s1`.`Nickname0`, `s1`.`SquadId0`, `s1`.`Id0`, `s1`.`Nickname00` """); } @@ -6575,21 +6657,21 @@ public override async Task Correlated_collection_with_top_level_FirstOrDefault(b await base.Correlated_collection_with_top_level_FirstOrDefault(async); AssertSql( -""" -SELECT `t0`.`Nickname`, `t0`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + """ +SELECT `u0`.`Nickname`, `u0`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM ( - SELECT TOP 1 `t`.`Nickname`, `t`.`SquadId`, `t`.`FullName` + SELECT TOP 1 `u`.`Nickname`, `u`.`SquadId`, `u`.`FullName` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` FROM `Officers` AS `o` - ) AS `t` - ORDER BY `t`.`Nickname` -) AS `t0` -LEFT JOIN `Weapons` AS `w` ON `t0`.`FullName` = `w`.`OwnerFullName` -ORDER BY `t0`.`Nickname`, `t0`.`SquadId` + ) AS `u` + ORDER BY `u`.`Nickname` +) AS `u0` +LEFT JOIN `Weapons` AS `w` ON `u0`.`FullName` = `w`.`OwnerFullName` +ORDER BY `u0`.`Nickname`, `u0`.`SquadId` """); } @@ -6598,15 +6680,15 @@ public override async Task Correlated_collection_with_top_level_Count(bool async await base.Correlated_collection_with_top_level_Count(async); AssertSql( -""" + """ SELECT COUNT(*) FROM ( - SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + SELECT 1 FROM `Gears` AS `g` UNION ALL - SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + SELECT 1 FROM `Officers` AS `o` -) AS `t` +) AS `u` """); } @@ -6615,21 +6697,21 @@ public override async Task Correlated_collection_with_top_level_Last_with_orderb await base.Correlated_collection_with_top_level_Last_with_orderby_on_outer(async); AssertSql( -""" -SELECT `t0`.`Nickname`, `t0`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + """ +SELECT `u0`.`Nickname`, `u0`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM ( - SELECT TOP 1 `t`.`Nickname`, `t`.`SquadId`, `t`.`FullName` + SELECT TOP 1 `u`.`Nickname`, `u`.`SquadId`, `u`.`FullName` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` FROM `Officers` AS `o` - ) AS `t` - ORDER BY `t`.`FullName` -) AS `t0` -LEFT JOIN `Weapons` AS `w` ON `t0`.`FullName` = `w`.`OwnerFullName` -ORDER BY `t0`.`FullName`, `t0`.`Nickname`, `t0`.`SquadId` + ) AS `u` + ORDER BY `u`.`FullName` +) AS `u0` +LEFT JOIN `Weapons` AS `w` ON `u0`.`FullName` = `w`.`OwnerFullName` +ORDER BY `u0`.`FullName`, `u0`.`Nickname`, `u0`.`SquadId` """); } @@ -6638,21 +6720,21 @@ public override async Task Correlated_collection_with_top_level_Last_with_order_ await base.Correlated_collection_with_top_level_Last_with_order_by_on_inner(async); AssertSql( -""" -SELECT `t0`.`Nickname`, `t0`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + """ +SELECT `u0`.`Nickname`, `u0`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM ( - SELECT TOP 1 `t`.`Nickname`, `t`.`SquadId`, `t`.`FullName` + SELECT TOP 1 `u`.`Nickname`, `u`.`SquadId`, `u`.`FullName` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` FROM `Officers` AS `o` - ) AS `t` - ORDER BY `t`.`FullName` DESC -) AS `t0` -LEFT JOIN `Weapons` AS `w` ON `t0`.`FullName` = `w`.`OwnerFullName` -ORDER BY `t0`.`FullName` DESC, `t0`.`Nickname`, `t0`.`SquadId`, `w`.`Name` + ) AS `u` + ORDER BY `u`.`FullName` DESC +) AS `u0` +LEFT JOIN `Weapons` AS `w` ON `u0`.`FullName` = `w`.`OwnerFullName` +ORDER BY `u0`.`FullName` DESC, `u0`.`Nickname`, `u0`.`SquadId`, `w`.`Name` """); } @@ -6661,21 +6743,21 @@ public override async Task Null_semantics_on_nullable_bool_from_inner_join_subqu await base.Null_semantics_on_nullable_bool_from_inner_join_subquery_is_fully_applied(async); AssertSql( -""" -SELECT `t0`.`Id`, `t0`.`CapitalName`, `t0`.`Name`, `t0`.`ServerAddress`, `t0`.`CommanderName`, `t0`.`Eradicated` + """ +SELECT `l2`.`Id`, `l2`.`CapitalName`, `l2`.`Name`, `l2`.`ServerAddress`, `l2`.`CommanderName`, `l2`.`Eradicated` FROM ( - SELECT `l0`.`Name` - FROM `LocustLeaders` AS `l0` + SELECT `l`.`Name` + FROM `LocustLeaders` AS `l` UNION ALL - SELECT `l1`.`Name` - FROM `LocustCommanders` AS `l1` -) AS `t` + SELECT `l0`.`Name` + FROM `LocustCommanders` AS `l0` +) AS `u` INNER JOIN ( - SELECT `l`.`Id`, `l`.`CapitalName`, `l`.`Name`, `l`.`ServerAddress`, `l`.`CommanderName`, `l`.`Eradicated` - FROM `LocustHordes` AS `l` - WHERE `l`.`Name` = 'Swarm' -) AS `t0` ON `t`.`Name` = `t0`.`CommanderName` -WHERE `t0`.`Eradicated` <> TRUE OR `t0`.`Eradicated` IS NULL + SELECT `l1`.`Id`, `l1`.`CapitalName`, `l1`.`Name`, `l1`.`ServerAddress`, `l1`.`CommanderName`, `l1`.`Eradicated` + FROM `LocustHordes` AS `l1` + WHERE `l1`.`Name` = 'Swarm' +) AS `l2` ON `u`.`Name` = `l2`.`CommanderName` +WHERE `l2`.`Eradicated` = FALSE OR `l2`.`Eradicated` IS NULL """); } @@ -6684,21 +6766,21 @@ public override async Task Null_semantics_on_nullable_bool_from_left_join_subque await base.Null_semantics_on_nullable_bool_from_left_join_subquery_is_fully_applied(async); AssertSql( -""" -SELECT `t0`.`Id`, `t0`.`CapitalName`, `t0`.`Name`, `t0`.`ServerAddress`, `t0`.`CommanderName`, `t0`.`Eradicated` + """ +SELECT `l2`.`Id`, `l2`.`CapitalName`, `l2`.`Name`, `l2`.`ServerAddress`, `l2`.`CommanderName`, `l2`.`Eradicated` FROM ( - SELECT `l0`.`Name` - FROM `LocustLeaders` AS `l0` + SELECT `l`.`Name` + FROM `LocustLeaders` AS `l` UNION ALL - SELECT `l1`.`Name` - FROM `LocustCommanders` AS `l1` -) AS `t` + SELECT `l0`.`Name` + FROM `LocustCommanders` AS `l0` +) AS `u` LEFT JOIN ( - SELECT `l`.`Id`, `l`.`CapitalName`, `l`.`Name`, `l`.`ServerAddress`, `l`.`CommanderName`, `l`.`Eradicated` - FROM `LocustHordes` AS `l` - WHERE `l`.`Name` = 'Swarm' -) AS `t0` ON `t`.`Name` = `t0`.`CommanderName` -WHERE `t0`.`Eradicated` <> TRUE OR `t0`.`Eradicated` IS NULL + SELECT `l1`.`Id`, `l1`.`CapitalName`, `l1`.`Name`, `l1`.`ServerAddress`, `l1`.`CommanderName`, `l1`.`Eradicated` + FROM `LocustHordes` AS `l1` + WHERE `l1`.`Name` = 'Swarm' +) AS `l2` ON `u`.`Name` = `l2`.`CommanderName` +WHERE `l2`.`Eradicated` = FALSE OR `l2`.`Eradicated` IS NULL """); } @@ -6707,29 +6789,29 @@ public override async Task Include_on_derived_type_with_order_by_and_paging(bool await base.Include_on_derived_type_with_order_by_and_paging(async); AssertSql( -""" -SELECT `t2`.`Name`, `t2`.`LocustHordeId`, `t2`.`ThreatLevel`, `t2`.`ThreatLevelByte`, `t2`.`ThreatLevelNullableByte`, `t2`.`DefeatedByNickname`, `t2`.`DefeatedBySquadId`, `t2`.`HighCommandId`, `t2`.`Discriminator`, `t2`.`Nickname`, `t2`.`SquadId`, `t2`.`AssignedCityName`, `t2`.`CityOfBirthName`, `t2`.`FullName`, `t2`.`HasSoulPatch`, `t2`.`LeaderNickname`, `t2`.`LeaderSquadId`, `t2`.`Rank`, `t2`.`Discriminator0` AS `Discriminator`, `t2`.`Id`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + """ +SELECT `s`.`Name`, `s`.`LocustHordeId`, `s`.`ThreatLevel`, `s`.`ThreatLevelByte`, `s`.`ThreatLevelNullableByte`, `s`.`DefeatedByNickname`, `s`.`DefeatedBySquadId`, `s`.`HighCommandId`, `s`.`Discriminator`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator0` AS `Discriminator`, `s`.`Id`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM ( - SELECT TOP 10 `t`.`Name`, `t`.`LocustHordeId`, `t`.`ThreatLevel`, `t`.`ThreatLevelByte`, `t`.`ThreatLevelNullableByte`, `t`.`DefeatedByNickname`, `t`.`DefeatedBySquadId`, `t`.`HighCommandId`, `t`.`Discriminator`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator` AS `Discriminator0`, `t1`.`Id`, `t1`.`Note` + SELECT TOP 10 `u`.`Name`, `u`.`LocustHordeId`, `u`.`ThreatLevel`, `u`.`ThreatLevelByte`, `u`.`ThreatLevelNullableByte`, `u`.`DefeatedByNickname`, `u`.`DefeatedBySquadId`, `u`.`HighCommandId`, `u`.`Discriminator`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` AS `Discriminator0`, `t`.`Id`, `t`.`Note` 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` FROM `LocustLeaders` AS `l` UNION ALL 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` + ) AS `u` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 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` -LEFT JOIN `Weapons` AS `w` ON `t2`.`FullName` = `w`.`OwnerFullName` -ORDER BY `t2`.`Note`, `t2`.`Name`, `t2`.`Nickname`, `t2`.`SquadId`, `t2`.`Id` + ) AS `u0` ON `u`.`DefeatedByNickname` = `u0`.`Nickname` AND IIF(`u`.`DefeatedBySquadId` IS NULL, NULL, CLNG(`u`.`DefeatedBySquadId`)) = `u0`.`SquadId`) + LEFT JOIN `Tags` AS `t` ON (`u0`.`Nickname` = `t`.`GearNickName` OR (`u0`.`Nickname` IS NULL AND `t`.`GearNickName` IS NULL)) AND (`u0`.`SquadId` = `t`.`GearSquadId` OR (`u0`.`SquadId` IS NULL AND `t`.`GearSquadId` IS NULL)) + ORDER BY `t`.`Note` +) AS `s` +LEFT JOIN `Weapons` AS `w` ON `s`.`FullName` = `w`.`OwnerFullName` +ORDER BY `s`.`Note`, `s`.`Name`, `s`.`Nickname`, `s`.`SquadId`, `s`.`Id` """); } @@ -6739,15 +6821,15 @@ public override async Task Select_required_navigation_on_derived_type(bool async AssertSql( """ -SELECT `l`.`Name` +SELECT `l1`.`Name` FROM ( SELECT CVar(NULL) AS `HighCommandId` - FROM `LocustLeaders` AS `l0` + FROM `LocustLeaders` AS `l` UNION ALL - 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` + SELECT `l0`.`HighCommandId` + FROM `LocustCommanders` AS `l0` +) AS `u` +LEFT JOIN `LocustHighCommands` AS `l1` ON IIF(`u`.`HighCommandId` IS NULL, NULL, CLNG(`u`.`HighCommandId`)) = `l1`.`Id` """); } @@ -6756,7 +6838,7 @@ public override async Task Select_required_navigation_on_the_same_type_with_cast await base.Select_required_navigation_on_the_same_type_with_cast(async); AssertSql( -""" + """ SELECT `c`.`Name` FROM ( SELECT `g`.`CityOfBirthName` @@ -6764,8 +6846,8 @@ public override async Task Select_required_navigation_on_the_same_type_with_cast UNION ALL SELECT `o`.`CityOfBirthName` FROM `Officers` AS `o` -) AS `t` -INNER JOIN `Cities` AS `c` ON `t`.`CityOfBirthName` = `c`.`Name` +) AS `u` +INNER JOIN `Cities` AS `c` ON `u`.`CityOfBirthName` = `c`.`Name` """); } @@ -6775,16 +6857,16 @@ public override async Task Where_required_navigation_on_derived_type(bool async) AssertSql( """ -SELECT `t`.`Name`, `t`.`LocustHordeId`, `t`.`ThreatLevel`, `t`.`ThreatLevelByte`, `t`.`ThreatLevelNullableByte`, `t`.`DefeatedByNickname`, `t`.`DefeatedBySquadId`, `t`.`HighCommandId`, `t`.`Discriminator` +SELECT `u`.`Name`, `u`.`LocustHordeId`, `u`.`ThreatLevel`, `u`.`ThreatLevelByte`, `u`.`ThreatLevelNullableByte`, `u`.`DefeatedByNickname`, `u`.`DefeatedBySquadId`, `u`.`HighCommandId`, `u`.`Discriminator` FROM ( - 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` + 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` + FROM `LocustLeaders` AS `l` UNION ALL - 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 + 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 `u` +LEFT JOIN `LocustHighCommands` AS `l1` ON IIF(`u`.`HighCommandId` IS NULL, NULL, CLNG(`u`.`HighCommandId`)) = `l1`.`Id` +WHERE `l1`.`IsOperational` = TRUE """); } @@ -6872,7 +6954,7 @@ public override async Task Negated_bool_ternary_inside_anonymous_type_in_project AssertSql( """ -SELECT IIF(IIF(`t0`.`HasSoulPatch` = TRUE, TRUE, IIF(`t0`.`HasSoulPatch` IS NULL, TRUE, `t0`.`HasSoulPatch`)) <> TRUE, TRUE, FALSE) AS `c` +SELECT IIF(IIF(`u`.`HasSoulPatch` = TRUE, TRUE, IIF(`u`.`HasSoulPatch` IS NULL, TRUE, `u`.`HasSoulPatch`)) <> TRUE, TRUE, FALSE) AS `c` FROM `Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` @@ -6880,7 +6962,7 @@ LEFT JOIN ( UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`HasSoulPatch` FROM `Officers` AS `o` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` """); } @@ -6889,17 +6971,17 @@ public override async Task Order_by_entity_qsre(bool async) await base.Order_by_entity_qsre(async); AssertSql( -""" -SELECT `t`.`FullName` + """ +SELECT `u`.`FullName` FROM ( SELECT `g`.`Nickname`, `g`.`AssignedCityName`, `g`.`FullName` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`AssignedCityName`, `o`.`FullName` FROM `Officers` AS `o` -) AS `t` -LEFT JOIN `Cities` AS `c` ON `t`.`AssignedCityName` = `c`.`Name` -ORDER BY `c`.`Name`, `t`.`Nickname` DESC +) AS `u` +LEFT JOIN `Cities` AS `c` ON `u`.`AssignedCityName` = `c`.`Name` +ORDER BY `c`.`Name`, `u`.`Nickname` DESC """); } @@ -6908,14 +6990,14 @@ public override async Task Order_by_entity_qsre_with_inheritance(bool async) await base.Order_by_entity_qsre_with_inheritance(async); AssertSql( -""" -SELECT `t`.`Name` + """ +SELECT `u`.`Name` FROM ( - SELECT `l0`.`Name`, `l0`.`HighCommandId` - FROM `LocustCommanders` AS `l0` -) AS `t` -INNER JOIN `LocustHighCommands` AS `l` ON `t`.`HighCommandId` = `l`.`Id` -ORDER BY `l`.`Id`, `t`.`Name` + SELECT `l`.`Name`, `l`.`HighCommandId` + FROM `LocustCommanders` AS `l` +) AS `u` +INNER JOIN `LocustHighCommands` AS `l0` ON `u`.`HighCommandId` = `l0`.`Id` +ORDER BY `l0`.`Id`, `u`.`Name` """); } @@ -6924,7 +7006,7 @@ public override async Task Order_by_entity_qsre_composite_key(bool async) await base.Order_by_entity_qsre_composite_key(async); AssertSql( -""" + """ SELECT `w`.`Name` FROM `Weapons` AS `w` LEFT JOIN ( @@ -6933,8 +7015,8 @@ LEFT JOIN ( UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` FROM `Officers` AS `o` -) AS `t` ON `w`.`OwnerFullName` = `t`.`FullName` -ORDER BY `t`.`Nickname`, `t`.`SquadId`, `w`.`Id` +) AS `u` ON `w`.`OwnerFullName` = `u`.`FullName` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `w`.`Id` """); } @@ -6943,7 +7025,7 @@ public override async Task Order_by_entity_qsre_with_other_orderbys(bool async) await base.Order_by_entity_qsre_with_other_orderbys(async); AssertSql( -""" + """ SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM (`Weapons` AS `w` LEFT JOIN ( @@ -6952,9 +7034,9 @@ LEFT JOIN ( UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` FROM `Officers` AS `o` -) AS `t` ON `w`.`OwnerFullName` = `t`.`FullName`) +) AS `u` ON `w`.`OwnerFullName` = `u`.`FullName`) LEFT JOIN `Weapons` AS `w0` ON `w`.`SynergyWithId` = `w0`.`Id` -ORDER BY NOT (`w`.`IsAutomatic`), `t`.`Nickname` DESC, `t`.`SquadId` DESC, `w0`.`Id`, `w`.`Name` +ORDER BY NOT (`w`.`IsAutomatic`), `u`.`Nickname` DESC, `u`.`SquadId` DESC, `w0`.`Id`, `w`.`Name` """); } @@ -6975,22 +7057,22 @@ public override async Task Join_on_entity_qsre_keys_composite_key(bool async) await base.Join_on_entity_qsre_keys_composite_key(async); AssertSql( -""" -SELECT `t`.`FullName` AS `GearName1`, `t0`.`FullName` AS `GearName2` + """ +SELECT `u`.`FullName` AS `GearName1`, `u0`.`FullName` AS `GearName2` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` FROM `Officers` AS `o` -) AS `t` +) AS `u` INNER JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`FullName` FROM `Gears` AS `g0` UNION ALL SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`FullName` FROM `Officers` AS `o0` -) AS `t0` ON `t`.`Nickname` = `t0`.`Nickname` AND `t`.`SquadId` = `t0`.`SquadId` +) AS `u0` ON `u`.`Nickname` = `u0`.`Nickname` AND `u`.`SquadId` = `u0`.`SquadId` """); } @@ -6999,19 +7081,19 @@ public override async Task Join_on_entity_qsre_keys_inheritance(bool async) await base.Join_on_entity_qsre_keys_inheritance(async); AssertSql( -""" -SELECT `t`.`FullName` AS `GearName`, `t0`.`FullName` AS `OfficerName` + """ +SELECT `u`.`FullName` AS `GearName`, `u0`.`FullName` AS `OfficerName` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` FROM `Officers` AS `o` -) AS `t` +) AS `u` INNER JOIN ( SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`FullName` FROM `Officers` AS `o0` -) AS `t0` ON `t`.`Nickname` = `t0`.`Nickname` AND `t`.`SquadId` = `t0`.`SquadId` +) AS `u0` ON `u`.`Nickname` = `u0`.`Nickname` AND `u`.`SquadId` = `u0`.`SquadId` """); } @@ -7034,20 +7116,20 @@ public override async Task Join_on_entity_qsre_keys_inner_key_is_navigation(bool await base.Join_on_entity_qsre_keys_inner_key_is_navigation(async); AssertSql( -""" -SELECT `c`.`Name` AS `CityName`, `t0`.`Nickname` AS `GearNickname` + """ +SELECT `c`.`Name` AS `CityName`, `s`.`Nickname` AS `GearNickname` FROM `Cities` AS `c` INNER JOIN ( - SELECT `t`.`Nickname`, `c0`.`Name` + SELECT `u`.`Nickname`, `c0`.`Name` FROM ( SELECT `g`.`Nickname`, `g`.`AssignedCityName` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`AssignedCityName` FROM `Officers` AS `o` - ) AS `t` - LEFT JOIN `Cities` AS `c0` ON `t`.`AssignedCityName` = `c0`.`Name` -) AS `t0` ON `c`.`Name` = `t0`.`Name` + ) AS `u` + LEFT JOIN `Cities` AS `c0` ON `u`.`AssignedCityName` = `c0`.`Name` +) AS `s` ON `c`.`Name` = `s`.`Name` """); } @@ -7056,27 +7138,27 @@ public override async Task Join_on_entity_qsre_keys_inner_key_is_navigation_comp await base.Join_on_entity_qsre_keys_inner_key_is_navigation_composite_key(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t1`.`Note` + """ +SELECT `u`.`Nickname`, `s`.`Note` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId` FROM `Officers` AS `o` -) AS `t` +) AS `u` INNER JOIN ( - SELECT `t0`.`Note`, `t2`.`Nickname`, `t2`.`SquadId` - FROM `Tags` AS `t0` + SELECT `t`.`Note`, `u0`.`Nickname`, `u0`.`SquadId` + FROM `Tags` AS `t` LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId` FROM `Gears` AS `g0` UNION ALL SELECT `o0`.`Nickname`, `o0`.`SquadId` FROM `Officers` AS `o0` - ) AS `t2` ON `t0`.`GearNickName` = `t2`.`Nickname` AND `t0`.`GearSquadId` = `t2`.`SquadId` - WHERE `t0`.`Note` IN ('Cole''s Tag', 'Dom''s Tag') -) AS `t1` ON `t`.`Nickname` = `t1`.`Nickname` AND `t`.`SquadId` = `t1`.`SquadId` + ) AS `u0` ON `t`.`GearNickName` = `u0`.`Nickname` AND `t`.`GearSquadId` = `u0`.`SquadId` + WHERE `t`.`Note` IN ('Cole''s Tag', 'Dom''s Tag') +) AS `s` ON `u`.`Nickname` = `s`.`Nickname` AND `u`.`SquadId` = `s`.`SquadId` """); } @@ -7085,8 +7167,8 @@ public override async Task Join_on_entity_qsre_keys_inner_key_is_nested_navigati await base.Join_on_entity_qsre_keys_inner_key_is_nested_navigation(async); AssertSql( -""" -SELECT `s`.`Name` AS `SquadName`, `t0`.`Name` AS `WeaponName` + """ +SELECT `s`.`Name` AS `SquadName`, `s1`.`Name` AS `WeaponName` FROM `Squads` AS `s` INNER JOIN ( SELECT `w`.`Name`, `s0`.`Id` AS `Id0` @@ -7097,10 +7179,10 @@ LEFT JOIN ( UNION ALL SELECT `o`.`SquadId`, `o`.`FullName` FROM `Officers` AS `o` - ) AS `t` ON `w`.`OwnerFullName` = `t`.`FullName`) - LEFT JOIN `Squads` AS `s0` ON `t`.`SquadId` = `s0`.`Id` + ) AS `u` ON `w`.`OwnerFullName` = `u`.`FullName`) + LEFT JOIN `Squads` AS `s0` ON `u`.`SquadId` = `s0`.`Id` WHERE `w`.`IsAutomatic` = TRUE -) AS `t0` ON `s`.`Id` = `t0`.`Id0` +) AS `s1` ON `s`.`Id` = `s1`.`Id0` """); } @@ -7109,8 +7191,8 @@ public override async Task GroupJoin_on_entity_qsre_keys_inner_key_is_nested_nav await base.GroupJoin_on_entity_qsre_keys_inner_key_is_nested_navigation(async); AssertSql( -""" -SELECT `s`.`Name` AS `SquadName`, `t0`.`Name` AS `WeaponName` + """ +SELECT `s`.`Name` AS `SquadName`, `s1`.`Name` AS `WeaponName` FROM `Squads` AS `s` LEFT JOIN ( SELECT `w`.`Name`, `s0`.`Id` AS `Id0` @@ -7121,9 +7203,9 @@ LEFT JOIN ( UNION ALL SELECT `o`.`SquadId`, `o`.`FullName` FROM `Officers` AS `o` - ) AS `t` ON `w`.`OwnerFullName` = `t`.`FullName`) - LEFT JOIN `Squads` AS `s0` ON `t`.`SquadId` = `s0`.`Id` -) AS `t0` ON `s`.`Id` = `t0`.`Id0` + ) AS `u` ON `w`.`OwnerFullName` = `u`.`FullName`) + LEFT JOIN `Squads` AS `s0` ON `u`.`SquadId` = `s0`.`Id` +) AS `s1` ON `s`.`Id` = `s1`.`Id0` """); } @@ -7132,25 +7214,25 @@ public override async Task Streaming_correlated_collection_issue_11403(bool asyn await base.Streaming_correlated_collection_issue_11403(async); AssertSql( -""" -SELECT `t0`.`Nickname`, `t0`.`SquadId`, `t1`.`Id`, `t1`.`AmmunitionType`, `t1`.`IsAutomatic`, `t1`.`Name`, `t1`.`OwnerFullName`, `t1`.`SynergyWithId` + """ +SELECT `u0`.`Nickname`, `u0`.`SquadId`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` FROM ( - SELECT TOP 1 `t`.`Nickname`, `t`.`SquadId`, `t`.`FullName` + SELECT TOP 1 `u`.`Nickname`, `u`.`SquadId`, `u`.`FullName` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` FROM `Officers` AS `o` - ) AS `t` - ORDER BY `t`.`Nickname` -) AS `t0` + ) AS `u` + ORDER BY `u`.`Nickname` +) AS `u0` LEFT JOIN ( SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM `Weapons` AS `w` WHERE `w`.`IsAutomatic` <> TRUE -) AS `t1` ON `t0`.`FullName` = `t1`.`OwnerFullName` -ORDER BY `t0`.`Nickname`, `t0`.`SquadId`, `t1`.`Id` +) AS `w0` ON `u0`.`FullName` = `w0`.`OwnerFullName` +ORDER BY `u0`.`Nickname`, `u0`.`SquadId`, `w0`.`Id` """); } @@ -7158,26 +7240,26 @@ public override async Task Project_one_value_type_from_empty_collection(bool asy { await base.Project_one_value_type_from_empty_collection(async); AssertSql( - """ + """ SELECT `s`.`Name`, IIF(( - SELECT TOP 1 `t`.`SquadId` + SELECT TOP 1 `u`.`SquadId` FROM ( - SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + SELECT `g`.`SquadId`, `g`.`HasSoulPatch` FROM `Gears` AS `g` UNION ALL - SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + SELECT `o`.`SquadId`, `o`.`HasSoulPatch` FROM `Officers` AS `o` - ) AS `t` - WHERE `s`.`Id` = `t`.`SquadId` AND `t`.`HasSoulPatch` = TRUE) IS NULL, 0, ( - SELECT TOP 1 `t`.`SquadId` + ) AS `u` + WHERE `s`.`Id` = `u`.`SquadId` AND `u`.`HasSoulPatch` = TRUE) IS NULL, 0, ( + SELECT TOP 1 `u`.`SquadId` FROM ( - SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + SELECT `g`.`SquadId`, `g`.`HasSoulPatch` FROM `Gears` AS `g` UNION ALL - SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + SELECT `o`.`SquadId`, `o`.`HasSoulPatch` FROM `Officers` AS `o` - ) AS `t` - WHERE `s`.`Id` = `t`.`SquadId` AND `t`.`HasSoulPatch` = TRUE)) AS `SquadId` + ) AS `u` + WHERE `s`.`Id` = `u`.`SquadId` AND `u`.`HasSoulPatch` = TRUE)) AS `SquadId` FROM `Squads` AS `s` WHERE `s`.`Name` = 'Kilo' """); @@ -7187,17 +7269,17 @@ public override async Task Project_one_value_type_converted_to_nullable_from_emp { await base.Project_one_value_type_converted_to_nullable_from_empty_collection(async); AssertSql( - """ + """ SELECT `s`.`Name`, ( - SELECT TOP 1 `t`.`SquadId` + SELECT TOP 1 `u`.`SquadId` FROM ( - SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + SELECT `g`.`SquadId`, `g`.`HasSoulPatch` FROM `Gears` AS `g` UNION ALL - SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + SELECT `o`.`SquadId`, `o`.`HasSoulPatch` FROM `Officers` AS `o` - ) AS `t` - WHERE `s`.`Id` = `t`.`SquadId` AND `t`.`HasSoulPatch` = TRUE) AS `SquadId` + ) AS `u` + WHERE `s`.`Id` = `u`.`SquadId` AND `u`.`HasSoulPatch` = TRUE) AS `SquadId` FROM `Squads` AS `s` WHERE `s`.`Name` = 'Kilo' """); @@ -7235,28 +7317,28 @@ public override async Task Filter_on_subquery_projecting_one_value_type_from_emp await base.Filter_on_subquery_projecting_one_value_type_from_empty_collection(async); AssertSql( -""" + """ SELECT `s`.`Name` FROM `Squads` AS `s` WHERE `s`.`Name` = 'Kilo' AND IIF(( - SELECT TOP 1 `t`.`SquadId` + SELECT TOP 1 `u`.`SquadId` FROM ( - SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + SELECT `g`.`SquadId`, `g`.`HasSoulPatch` FROM `Gears` AS `g` UNION ALL - SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + SELECT `o`.`SquadId`, `o`.`HasSoulPatch` FROM `Officers` AS `o` - ) AS `t` - WHERE `s`.`Id` = `t`.`SquadId` AND `t`.`HasSoulPatch` = TRUE) IS NULL, 0, ( - SELECT TOP 1 `t`.`SquadId` + ) AS `u` + WHERE `s`.`Id` = `u`.`SquadId` AND `u`.`HasSoulPatch` = TRUE) IS NULL, 0, ( + SELECT TOP 1 `u`.`SquadId` FROM ( - SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + SELECT `g`.`SquadId`, `g`.`HasSoulPatch` FROM `Gears` AS `g` UNION ALL - SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + SELECT `o`.`SquadId`, `o`.`HasSoulPatch` FROM `Officers` AS `o` - ) AS `t` - WHERE `s`.`Id` = `t`.`SquadId` AND `t`.`HasSoulPatch` = TRUE)) <> 0 + ) AS `u` + WHERE `s`.`Id` = `u`.`SquadId` AND `u`.`HasSoulPatch` = TRUE)) <> 0 """); } @@ -7265,26 +7347,26 @@ public override async Task Select_subquery_projecting_single_constant_int(bool a await base.Select_subquery_projecting_single_constant_int(async); AssertSql( -""" + """ SELECT `s`.`Name`, IIF(( SELECT TOP 1 42 FROM ( - SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + SELECT `g`.`SquadId`, `g`.`HasSoulPatch` FROM `Gears` AS `g` UNION ALL - SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + SELECT `o`.`SquadId`, `o`.`HasSoulPatch` FROM `Officers` AS `o` - ) AS `t` - WHERE `s`.`Id` = `t`.`SquadId` AND `t`.`HasSoulPatch` = TRUE) IS NULL, 0, ( + ) AS `u` + WHERE `s`.`Id` = `u`.`SquadId` AND `u`.`HasSoulPatch` = TRUE) IS NULL, 0, ( SELECT TOP 1 42 FROM ( - SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + SELECT `g`.`SquadId`, `g`.`HasSoulPatch` FROM `Gears` AS `g` UNION ALL - SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + SELECT `o`.`SquadId`, `o`.`HasSoulPatch` FROM `Officers` AS `o` - ) AS `t` - WHERE `s`.`Id` = `t`.`SquadId` AND `t`.`HasSoulPatch` = TRUE)) AS `Gear` + ) AS `u` + WHERE `s`.`Id` = `u`.`SquadId` AND `u`.`HasSoulPatch` = TRUE)) AS `Gear` FROM `Squads` AS `s` """); } @@ -7298,13 +7380,13 @@ public override async Task Select_subquery_projecting_single_constant_string(boo SELECT `s`.`Name`, ( SELECT TOP 1 'Foo' FROM ( - SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + SELECT `g`.`SquadId`, `g`.`HasSoulPatch` FROM `Gears` AS `g` UNION ALL - SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + SELECT `o`.`SquadId`, `o`.`HasSoulPatch` FROM `Officers` AS `o` - ) AS `t` - WHERE `s`.`Id` = `t`.`SquadId` AND `t`.`HasSoulPatch` = TRUE) AS `Gear` + ) AS `u` + WHERE `s`.`Id` = `u`.`SquadId` AND `u`.`HasSoulPatch` = TRUE) AS `Gear` FROM `Squads` AS `s` """); } @@ -7314,26 +7396,26 @@ public override async Task Select_subquery_projecting_single_constant_bool(bool await base.Select_subquery_projecting_single_constant_bool(async); AssertSql( -""" + """ SELECT `s`.`Name`, IIF(( SELECT TOP 1 TRUE FROM ( - SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + SELECT `g`.`SquadId`, `g`.`HasSoulPatch` FROM `Gears` AS `g` UNION ALL - SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + SELECT `o`.`SquadId`, `o`.`HasSoulPatch` FROM `Officers` AS `o` - ) AS `t` - WHERE `s`.`Id` = `t`.`SquadId` AND `t`.`HasSoulPatch` = TRUE) IS NULL, FALSE, ( + ) AS `u` + WHERE `s`.`Id` = `u`.`SquadId` AND `u`.`HasSoulPatch` = TRUE) IS NULL, FALSE, ( SELECT TOP 1 TRUE FROM ( - SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + SELECT `g`.`SquadId`, `g`.`HasSoulPatch` FROM `Gears` AS `g` UNION ALL - SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + SELECT `o`.`SquadId`, `o`.`HasSoulPatch` FROM `Officers` AS `o` - ) AS `t` - WHERE `s`.`Id` = `t`.`SquadId` AND `t`.`HasSoulPatch` = TRUE)) AS `Gear` + ) AS `u` + WHERE `s`.`Id` = `u`.`SquadId` AND `u`.`HasSoulPatch` = TRUE)) AS `Gear` FROM `Squads` AS `s` """); } @@ -7395,8 +7477,8 @@ public override async Task Include_with_order_by_constant(bool async) await base.Include_with_order_by_constant(async); AssertSql( -""" -SELECT `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name`, `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + """ +SELECT `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name`, `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM `Squads` AS `s` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` @@ -7404,8 +7486,8 @@ 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 `t` ON `s`.`Id` = `t`.`SquadId` -ORDER BY `s`.`Id`, `t`.`Nickname` +) AS `u` ON `s`.`Id` = `u`.`SquadId` +ORDER BY `s`.`Id`, `u`.`Nickname` """); } @@ -7414,17 +7496,17 @@ public override async Task Correlated_collection_order_by_constant(bool async) await base.Correlated_collection_order_by_constant(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `w`.`Name`, `w`.`Id` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `w`.`Name`, `w`.`Id` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` FROM `Officers` AS `o` -) AS `t` -LEFT JOIN `Weapons` AS `w` ON `t`.`FullName` = `w`.`OwnerFullName` -ORDER BY `t`.`Nickname`, `t`.`SquadId` +) AS `u` +LEFT JOIN `Weapons` AS `w` ON `u`.`FullName` = `w`.`OwnerFullName` +ORDER BY `u`.`Nickname`, `u`.`SquadId` """); } @@ -7485,26 +7567,26 @@ public override async Task Include_collection_OrderBy_aggregate(bool async) await base.Include_collection_OrderBy_aggregate(async); AssertSql( -""" -SELECT `t2`.`Nickname`, `t2`.`SquadId`, `t2`.`AssignedCityName`, `t2`.`CityOfBirthName`, `t2`.`FullName`, `t2`.`HasSoulPatch`, `t2`.`LeaderNickname`, `t2`.`LeaderSquadId`, `t2`.`Rank`, `t2`.`Discriminator`, `t2`.`Nickname0`, `t2`.`SquadId0`, `t2`.`AssignedCityName0`, `t2`.`CityOfBirthName0`, `t2`.`FullName0`, `t2`.`HasSoulPatch0`, `t2`.`LeaderNickname0`, `t2`.`LeaderSquadId0`, `t2`.`Rank0`, `t2`.`Discriminator0`, `t2`.`c` + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `s`.`Nickname0`, `s`.`SquadId0`, `s`.`AssignedCityName0`, `s`.`CityOfBirthName0`, `s`.`FullName0`, `s`.`HasSoulPatch0`, `s`.`LeaderNickname0`, `s`.`LeaderSquadId0`, `s`.`Rank0`, `s`.`Discriminator0`, `s`.`c` FROM ( - SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `t0`.`Nickname` AS `Nickname0`, `t0`.`SquadId` AS `SquadId0`, `t0`.`AssignedCityName` AS `AssignedCityName0`, `t0`.`CityOfBirthName` AS `CityOfBirthName0`, `t0`.`FullName` AS `FullName0`, `t0`.`HasSoulPatch` AS `HasSoulPatch0`, `t0`.`LeaderNickname` AS `LeaderNickname0`, `t0`.`LeaderSquadId` AS `LeaderSquadId0`, `t0`.`Rank` AS `Rank0`, `t0`.`Discriminator` AS `Discriminator0`, ( + SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `u0`.`Nickname` AS `Nickname0`, `u0`.`SquadId` AS `SquadId0`, `u0`.`AssignedCityName` AS `AssignedCityName0`, `u0`.`CityOfBirthName` AS `CityOfBirthName0`, `u0`.`FullName` AS `FullName0`, `u0`.`HasSoulPatch` AS `HasSoulPatch0`, `u0`.`LeaderNickname` AS `LeaderNickname0`, `u0`.`LeaderSquadId` AS `LeaderSquadId0`, `u0`.`Rank` AS `Rank0`, `u0`.`Discriminator` AS `Discriminator0`, ( SELECT COUNT(*) - FROM `Weapons` AS `w0` - WHERE `t`.`FullName` = `w0`.`OwnerFullName`) AS `c` + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName`) AS `c` FROM ( 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 `t` + ) AS `u` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` UNION ALL SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` FROM `Officers` AS `o0` - ) AS `t0` ON `t`.`Nickname` = `t0`.`LeaderNickname` AND `t`.`SquadId` = `t0`.`LeaderSquadId` -) AS `t2` -ORDER BY `t2`.`c`, `t2`.`Nickname`, `t2`.`SquadId`, `t2`.`Nickname0` + ) AS `u0` ON `u`.`Nickname` = `u0`.`LeaderNickname` AND `u`.`SquadId` = `u0`.`LeaderSquadId` +) AS `s` +ORDER BY `s`.`c`, `s`.`Nickname`, `s`.`SquadId`, `s`.`Nickname0` """); } @@ -7513,27 +7595,27 @@ public override async Task Include_collection_with_complex_OrderBy2(bool async) await base.Include_collection_with_complex_OrderBy2(async); AssertSql( -""" -SELECT `t2`.`Nickname`, `t2`.`SquadId`, `t2`.`AssignedCityName`, `t2`.`CityOfBirthName`, `t2`.`FullName`, `t2`.`HasSoulPatch`, `t2`.`LeaderNickname`, `t2`.`LeaderSquadId`, `t2`.`Rank`, `t2`.`Discriminator`, `t2`.`Nickname0`, `t2`.`SquadId0`, `t2`.`AssignedCityName0`, `t2`.`CityOfBirthName0`, `t2`.`FullName0`, `t2`.`HasSoulPatch0`, `t2`.`LeaderNickname0`, `t2`.`LeaderSquadId0`, `t2`.`Rank0`, `t2`.`Discriminator0`, `t2`.`c` + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `s`.`Nickname0`, `s`.`SquadId0`, `s`.`AssignedCityName0`, `s`.`CityOfBirthName0`, `s`.`FullName0`, `s`.`HasSoulPatch0`, `s`.`LeaderNickname0`, `s`.`LeaderSquadId0`, `s`.`Rank0`, `s`.`Discriminator0`, `s`.`c` FROM ( - SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `t0`.`Nickname` AS `Nickname0`, `t0`.`SquadId` AS `SquadId0`, `t0`.`AssignedCityName` AS `AssignedCityName0`, `t0`.`CityOfBirthName` AS `CityOfBirthName0`, `t0`.`FullName` AS `FullName0`, `t0`.`HasSoulPatch` AS `HasSoulPatch0`, `t0`.`LeaderNickname` AS `LeaderNickname0`, `t0`.`LeaderSquadId` AS `LeaderSquadId0`, `t0`.`Rank` AS `Rank0`, `t0`.`Discriminator` AS `Discriminator0`, ( - SELECT TOP 1 `w0`.`IsAutomatic` - FROM `Weapons` AS `w0` - WHERE `t`.`FullName` = `w0`.`OwnerFullName` - ORDER BY `w0`.`Id`) AS `c` + SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `u0`.`Nickname` AS `Nickname0`, `u0`.`SquadId` AS `SquadId0`, `u0`.`AssignedCityName` AS `AssignedCityName0`, `u0`.`CityOfBirthName` AS `CityOfBirthName0`, `u0`.`FullName` AS `FullName0`, `u0`.`HasSoulPatch` AS `HasSoulPatch0`, `u0`.`LeaderNickname` AS `LeaderNickname0`, `u0`.`LeaderSquadId` AS `LeaderSquadId0`, `u0`.`Rank` AS `Rank0`, `u0`.`Discriminator` AS `Discriminator0`, ( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`) AS `c` FROM ( 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 `t` + ) AS `u` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` UNION ALL SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` FROM `Officers` AS `o0` - ) AS `t0` ON `t`.`Nickname` = `t0`.`LeaderNickname` AND `t`.`SquadId` = `t0`.`LeaderSquadId` -) AS `t2` -ORDER BY NOT (`t2`.`c`), `t2`.`Nickname`, `t2`.`SquadId`, `t2`.`Nickname0` + ) AS `u0` ON `u`.`Nickname` = `u0`.`LeaderNickname` AND `u`.`SquadId` = `u0`.`LeaderSquadId` +) AS `s` +ORDER BY NOT (`s`.`c`), `s`.`Nickname`, `s`.`SquadId`, `s`.`Nickname0` """); } @@ -7542,31 +7624,31 @@ public override async Task Include_collection_with_complex_OrderBy3(bool async) await base.Include_collection_with_complex_OrderBy3(async); AssertSql( -""" -SELECT `t2`.`Nickname`, `t2`.`SquadId`, `t2`.`AssignedCityName`, `t2`.`CityOfBirthName`, `t2`.`FullName`, `t2`.`HasSoulPatch`, `t2`.`LeaderNickname`, `t2`.`LeaderSquadId`, `t2`.`Rank`, `t2`.`Discriminator`, `t2`.`Nickname0`, `t2`.`SquadId0`, `t2`.`AssignedCityName0`, `t2`.`CityOfBirthName0`, `t2`.`FullName0`, `t2`.`HasSoulPatch0`, `t2`.`LeaderNickname0`, `t2`.`LeaderSquadId0`, `t2`.`Rank0`, `t2`.`Discriminator0`, `t2`.`c` + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `s`.`Nickname0`, `s`.`SquadId0`, `s`.`AssignedCityName0`, `s`.`CityOfBirthName0`, `s`.`FullName0`, `s`.`HasSoulPatch0`, `s`.`LeaderNickname0`, `s`.`LeaderSquadId0`, `s`.`Rank0`, `s`.`Discriminator0`, `s`.`c` FROM ( - SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `t0`.`Nickname` AS `Nickname0`, `t0`.`SquadId` AS `SquadId0`, `t0`.`AssignedCityName` AS `AssignedCityName0`, `t0`.`CityOfBirthName` AS `CityOfBirthName0`, `t0`.`FullName` AS `FullName0`, `t0`.`HasSoulPatch` AS `HasSoulPatch0`, `t0`.`LeaderNickname` AS `LeaderNickname0`, `t0`.`LeaderSquadId` AS `LeaderSquadId0`, `t0`.`Rank` AS `Rank0`, `t0`.`Discriminator` AS `Discriminator0`, IIF(( - SELECT TOP 1 `w0`.`IsAutomatic` - FROM `Weapons` AS `w0` - WHERE `t`.`FullName` = `w0`.`OwnerFullName` - ORDER BY `w0`.`Id`) IS NULL, FALSE, ( - SELECT TOP 1 `w0`.`IsAutomatic` - FROM `Weapons` AS `w0` - WHERE `t`.`FullName` = `w0`.`OwnerFullName` - ORDER BY `w0`.`Id`)) AS `c` + SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `u0`.`Nickname` AS `Nickname0`, `u0`.`SquadId` AS `SquadId0`, `u0`.`AssignedCityName` AS `AssignedCityName0`, `u0`.`CityOfBirthName` AS `CityOfBirthName0`, `u0`.`FullName` AS `FullName0`, `u0`.`HasSoulPatch` AS `HasSoulPatch0`, `u0`.`LeaderNickname` AS `LeaderNickname0`, `u0`.`LeaderSquadId` AS `LeaderSquadId0`, `u0`.`Rank` AS `Rank0`, `u0`.`Discriminator` AS `Discriminator0`, IIF(( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`) IS NULL, FALSE, ( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`)) AS `c` FROM ( 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 `t` + ) AS `u` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` UNION ALL SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` FROM `Officers` AS `o0` - ) AS `t0` ON `t`.`Nickname` = `t0`.`LeaderNickname` AND `t`.`SquadId` = `t0`.`LeaderSquadId` -) AS `t2` -ORDER BY NOT (`t2`.`c`), `t2`.`Nickname`, `t2`.`SquadId`, `t2`.`Nickname0` + ) AS `u0` ON `u`.`Nickname` = `u0`.`LeaderNickname` AND `u`.`SquadId` = `u0`.`LeaderSquadId` +) AS `s` +ORDER BY NOT (`s`.`c`), `s`.`Nickname`, `s`.`SquadId`, `s`.`Nickname0` """); } @@ -7576,29 +7658,29 @@ public override async Task Correlated_collection_with_complex_OrderBy(bool async AssertSql( """ -SELECT `t3`.`Nickname`, `t3`.`SquadId`, `t3`.`Nickname0`, `t3`.`SquadId0`, `t3`.`AssignedCityName`, `t3`.`CityOfBirthName`, `t3`.`FullName`, `t3`.`HasSoulPatch`, `t3`.`LeaderNickname`, `t3`.`LeaderSquadId`, `t3`.`Rank`, `t3`.`Discriminator`, `t3`.`c` +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`Nickname0`, `s`.`SquadId0`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `s`.`c` FROM ( - SELECT `t`.`Nickname`, `t`.`SquadId`, `t0`.`Nickname` AS `Nickname0`, `t0`.`SquadId` AS `SquadId0`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator`, ( + SELECT `u`.`Nickname`, `u`.`SquadId`, `u1`.`Nickname` AS `Nickname0`, `u1`.`SquadId` AS `SquadId0`, `u1`.`AssignedCityName`, `u1`.`CityOfBirthName`, `u1`.`FullName`, `u1`.`HasSoulPatch`, `u1`.`LeaderNickname`, `u1`.`LeaderSquadId`, `u1`.`Rank`, `u1`.`Discriminator`, ( SELECT COUNT(*) - FROM `Weapons` AS `w0` - WHERE `t`.`FullName` = `w0`.`OwnerFullName`) AS `c` + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName`) AS `c` FROM ( SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` FROM `Officers` AS `o` - ) AS `t` + ) AS `u` LEFT JOIN ( - SELECT `t1`.`Nickname`, `t1`.`SquadId`, `t1`.`AssignedCityName`, `t1`.`CityOfBirthName`, `t1`.`FullName`, `t1`.`HasSoulPatch`, `t1`.`LeaderNickname`, `t1`.`LeaderSquadId`, `t1`.`Rank`, `t1`.`Discriminator` + SELECT `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` UNION ALL SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` FROM `Officers` AS `o0` - ) AS `t1` - WHERE `t1`.`HasSoulPatch` <> TRUE - ) AS `t0` ON `t`.`Nickname` = `t0`.`LeaderNickname` AND `t`.`SquadId` = `t0`.`LeaderSquadId` -) AS `t3` -ORDER BY `t3`.`c`, `t3`.`Nickname`, `t3`.`SquadId`, `t3`.`Nickname0` + ) AS `u0` + WHERE `u0`.`HasSoulPatch` <> TRUE + ) AS `u1` ON `u`.`Nickname` = `u1`.`LeaderNickname` AND `u`.`SquadId` = `u1`.`LeaderSquadId` +) AS `s` +ORDER BY `s`.`c`, `s`.`Nickname`, `s`.`SquadId`, `s`.`Nickname0` """); } @@ -7607,48 +7689,48 @@ public override async Task Correlated_collection_with_very_complex_order_by(bool await base.Correlated_collection_with_very_complex_order_by(async); AssertSql( -""" -SELECT `t7`.`Nickname`, `t7`.`SquadId`, `t7`.`Nickname0`, `t7`.`SquadId0`, `t7`.`AssignedCityName`, `t7`.`CityOfBirthName`, `t7`.`FullName`, `t7`.`HasSoulPatch`, `t7`.`LeaderNickname`, `t7`.`LeaderSquadId`, `t7`.`Rank`, `t7`.`Discriminator`, `t7`.`c` + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`Nickname0`, `s`.`SquadId0`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `s`.`c` FROM ( - SELECT `t`.`Nickname`, `t`.`SquadId`, `t1`.`Nickname` AS `Nickname0`, `t1`.`SquadId` AS `SquadId0`, `t1`.`AssignedCityName`, `t1`.`CityOfBirthName`, `t1`.`FullName`, `t1`.`HasSoulPatch`, `t1`.`LeaderNickname`, `t1`.`LeaderSquadId`, `t1`.`Rank`, `t1`.`Discriminator`, ( + SELECT `u`.`Nickname`, `u`.`SquadId`, `u2`.`Nickname` AS `Nickname0`, `u2`.`SquadId` AS `SquadId0`, `u2`.`AssignedCityName`, `u2`.`CityOfBirthName`, `u2`.`FullName`, `u2`.`HasSoulPatch`, `u2`.`LeaderNickname`, `u2`.`LeaderSquadId`, `u2`.`Rank`, `u2`.`Discriminator`, ( SELECT COUNT(*) - FROM `Weapons` AS `w0` - WHERE `t`.`FullName` = `w0`.`OwnerFullName` AND `w0`.`IsAutomatic` = IIF(( - SELECT TOP 1 `t5`.`HasSoulPatch` + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName` AND `w`.`IsAutomatic` = IIF(( + SELECT TOP 1 `u0`.`HasSoulPatch` FROM ( - SELECT `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`AssignedCityName`, `g1`.`CityOfBirthName`, `g1`.`FullName`, `g1`.`HasSoulPatch`, `g1`.`LeaderNickname`, `g1`.`LeaderSquadId`, `g1`.`Rank`, 'Gear' AS `Discriminator` - FROM `Gears` AS `g1` + SELECT `g`.`Nickname`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` UNION ALL - SELECT `o2`.`Nickname`, `o2`.`SquadId`, `o2`.`AssignedCityName`, `o2`.`CityOfBirthName`, `o2`.`FullName`, `o2`.`HasSoulPatch`, `o2`.`LeaderNickname`, `o2`.`LeaderSquadId`, `o2`.`Rank`, 'Officer' AS `Discriminator` - FROM `Officers` AS `o2` - ) AS `t5` - WHERE `t5`.`Nickname` = 'Marcus') IS NULL, FALSE, ( - SELECT TOP 1 `t5`.`HasSoulPatch` + SELECT `o0`.`Nickname`, `o0`.`HasSoulPatch` + FROM `Officers` AS `o0` + ) AS `u0` + WHERE `u0`.`Nickname` = 'Marcus') IS NULL, FALSE, ( + SELECT TOP 1 `u0`.`HasSoulPatch` FROM ( - SELECT `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`AssignedCityName`, `g1`.`CityOfBirthName`, `g1`.`FullName`, `g1`.`HasSoulPatch`, `g1`.`LeaderNickname`, `g1`.`LeaderSquadId`, `g1`.`Rank`, 'Gear' AS `Discriminator` - FROM `Gears` AS `g1` + SELECT `g`.`Nickname`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` UNION ALL - SELECT `o2`.`Nickname`, `o2`.`SquadId`, `o2`.`AssignedCityName`, `o2`.`CityOfBirthName`, `o2`.`FullName`, `o2`.`HasSoulPatch`, `o2`.`LeaderNickname`, `o2`.`LeaderSquadId`, `o2`.`Rank`, 'Officer' AS `Discriminator` - FROM `Officers` AS `o2` - ) AS `t5` - WHERE `t5`.`Nickname` = 'Marcus'))) AS `c` + SELECT `o0`.`Nickname`, `o0`.`HasSoulPatch` + FROM `Officers` AS `o0` + ) AS `u0` + WHERE `u0`.`Nickname` = 'Marcus'))) AS `c` FROM ( SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` FROM `Officers` AS `o` - ) AS `t` + ) AS `u` LEFT JOIN ( - SELECT `t2`.`Nickname`, `t2`.`SquadId`, `t2`.`AssignedCityName`, `t2`.`CityOfBirthName`, `t2`.`FullName`, `t2`.`HasSoulPatch`, `t2`.`LeaderNickname`, `t2`.`LeaderSquadId`, `t2`.`Rank`, `t2`.`Discriminator` + SELECT `u1`.`Nickname`, `u1`.`SquadId`, `u1`.`AssignedCityName`, `u1`.`CityOfBirthName`, `u1`.`FullName`, `u1`.`HasSoulPatch`, `u1`.`LeaderNickname`, `u1`.`LeaderSquadId`, `u1`.`Rank`, `u1`.`Discriminator` FROM ( - SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` - FROM `Gears` AS `g` + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g0` UNION ALL - SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` - FROM `Officers` AS `o0` - ) AS `t2` - WHERE `t2`.`HasSoulPatch` <> TRUE - ) AS `t1` ON `t`.`Nickname` = `t1`.`LeaderNickname` AND `t`.`SquadId` = `t1`.`LeaderSquadId` -) AS `t7` -ORDER BY `t7`.`c`, `t7`.`Nickname`, `t7`.`SquadId`, `t7`.`Nickname0` + SELECT `o1`.`Nickname`, `o1`.`SquadId`, `o1`.`AssignedCityName`, `o1`.`CityOfBirthName`, `o1`.`FullName`, `o1`.`HasSoulPatch`, `o1`.`LeaderNickname`, `o1`.`LeaderSquadId`, `o1`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o1` + ) AS `u1` + WHERE `u1`.`HasSoulPatch` <> TRUE + ) AS `u2` ON `u`.`Nickname` = `u2`.`LeaderNickname` AND `u`.`SquadId` = `u2`.`LeaderSquadId` +) AS `s` +ORDER BY `s`.`c`, `s`.`Nickname`, `s`.`SquadId`, `s`.`Nickname0` """); } @@ -7672,11 +7754,11 @@ public override async Task Select_subquery_boolean(bool async) SELECT IIF(( SELECT TOP 1 `w`.`IsAutomatic` FROM `Weapons` AS `w` - WHERE `t`.`FullName` = `w`.`OwnerFullName` + WHERE `u`.`FullName` = `w`.`OwnerFullName` ORDER BY `w`.`Id`) IS NULL, FALSE, ( SELECT TOP 1 `w`.`IsAutomatic` FROM `Weapons` AS `w` - WHERE `t`.`FullName` = `w`.`OwnerFullName` + WHERE `u`.`FullName` = `w`.`OwnerFullName` ORDER BY `w`.`Id`)) FROM ( SELECT `g`.`FullName` @@ -7684,7 +7766,7 @@ SELECT TOP 1 `w`.`IsAutomatic` UNION ALL SELECT `o`.`FullName` FROM `Officers` AS `o` -) AS `t` +) AS `u` """); } @@ -7693,11 +7775,11 @@ public override async Task Select_subquery_boolean_with_pushdown(bool async) await base.Select_subquery_boolean_with_pushdown(async); AssertSql( -""" + """ SELECT ( SELECT TOP 1 `w`.`IsAutomatic` FROM `Weapons` AS `w` - WHERE `t`.`FullName` = `w`.`OwnerFullName` + WHERE `u`.`FullName` = `w`.`OwnerFullName` ORDER BY `w`.`Id`) FROM ( SELECT `g`.`FullName` @@ -7705,7 +7787,7 @@ SELECT TOP 1 `w`.`IsAutomatic` UNION ALL SELECT `o`.`FullName` FROM `Officers` AS `o` -) AS `t` +) AS `u` """); } @@ -7718,11 +7800,11 @@ public override async Task Select_subquery_int_with_inside_cast_and_coalesce(boo SELECT IIF(( SELECT TOP 1 `w`.`Id` FROM `Weapons` AS `w` - WHERE `t`.`FullName` = `w`.`OwnerFullName` + WHERE `u`.`FullName` = `w`.`OwnerFullName` ORDER BY `w`.`Id`) IS NULL, 42, ( SELECT TOP 1 `w`.`Id` FROM `Weapons` AS `w` - WHERE `t`.`FullName` = `w`.`OwnerFullName` + WHERE `u`.`FullName` = `w`.`OwnerFullName` ORDER BY `w`.`Id`)) FROM ( SELECT `g`.`FullName` @@ -7730,7 +7812,7 @@ SELECT TOP 1 `w`.`Id` UNION ALL SELECT `o`.`FullName` FROM `Officers` AS `o` -) AS `t` +) AS `u` """); } @@ -7739,15 +7821,15 @@ public override async Task Select_subquery_int_with_outside_cast_and_coalesce(bo await base.Select_subquery_int_with_outside_cast_and_coalesce(async); AssertSql( -""" + """ SELECT IIF(( SELECT TOP 1 `w`.`Id` FROM `Weapons` AS `w` - WHERE `t`.`FullName` = `w`.`OwnerFullName` - ORDER BY `w`.`Id`) IS NULL, IIF(0 IS NULL, 42, 0), ( + WHERE `u`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`) IS NULL, 0, ( SELECT TOP 1 `w`.`Id` FROM `Weapons` AS `w` - WHERE `t`.`FullName` = `w`.`OwnerFullName` + WHERE `u`.`FullName` = `w`.`OwnerFullName` ORDER BY `w`.`Id`)) FROM ( SELECT `g`.`FullName` @@ -7755,7 +7837,7 @@ SELECT TOP 1 `w`.`Id` UNION ALL SELECT `o`.`FullName` FROM `Officers` AS `o` -) AS `t` +) AS `u` """); } @@ -7764,15 +7846,15 @@ public override async Task Select_subquery_int_with_pushdown_and_coalesce(bool a await base.Select_subquery_int_with_pushdown_and_coalesce(async); AssertSql( -""" + """ SELECT IIF(( SELECT TOP 1 `w`.`Id` FROM `Weapons` AS `w` - WHERE `t`.`FullName` = `w`.`OwnerFullName` + WHERE `u`.`FullName` = `w`.`OwnerFullName` ORDER BY `w`.`Id`) IS NULL, 42, ( SELECT TOP 1 `w`.`Id` FROM `Weapons` AS `w` - WHERE `t`.`FullName` = `w`.`OwnerFullName` + WHERE `u`.`FullName` = `w`.`OwnerFullName` ORDER BY `w`.`Id`)) FROM ( SELECT `g`.`FullName` @@ -7780,7 +7862,7 @@ SELECT TOP 1 `w`.`Id` UNION ALL SELECT `o`.`FullName` FROM `Officers` AS `o` -) AS `t` +) AS `u` """); } @@ -7789,19 +7871,19 @@ public override async Task Select_subquery_int_with_pushdown_and_coalesce2(bool await base.Select_subquery_int_with_pushdown_and_coalesce2(async); AssertSql( -""" + """ SELECT IIF(( SELECT TOP 1 `w`.`Id` FROM `Weapons` AS `w` - WHERE `t`.`FullName` = `w`.`OwnerFullName` + WHERE `u`.`FullName` = `w`.`OwnerFullName` ORDER BY `w`.`Id`) IS NULL, ( SELECT TOP 1 `w0`.`Id` FROM `Weapons` AS `w0` - WHERE `t`.`FullName` = `w0`.`OwnerFullName` + WHERE `u`.`FullName` = `w0`.`OwnerFullName` ORDER BY `w0`.`Id`), ( SELECT TOP 1 `w`.`Id` FROM `Weapons` AS `w` - WHERE `t`.`FullName` = `w`.`OwnerFullName` + WHERE `u`.`FullName` = `w`.`OwnerFullName` ORDER BY `w`.`Id`)) FROM ( SELECT `g`.`FullName` @@ -7809,7 +7891,7 @@ SELECT TOP 1 `w`.`Id` UNION ALL SELECT `o`.`FullName` FROM `Officers` AS `o` -) AS `t` +) AS `u` """); } @@ -7818,15 +7900,15 @@ public override async Task Select_subquery_boolean_empty(bool async) await base.Select_subquery_boolean_empty(async); AssertSql( -""" + """ SELECT IIF(( SELECT TOP 1 `w`.`IsAutomatic` FROM `Weapons` AS `w` - WHERE `t`.`FullName` = `w`.`OwnerFullName` AND `w`.`Name` = 'BFG' + WHERE `u`.`FullName` = `w`.`OwnerFullName` AND `w`.`Name` = 'BFG' ORDER BY `w`.`Id`) IS NULL, FALSE, ( SELECT TOP 1 `w`.`IsAutomatic` FROM `Weapons` AS `w` - WHERE `t`.`FullName` = `w`.`OwnerFullName` AND `w`.`Name` = 'BFG' + WHERE `u`.`FullName` = `w`.`OwnerFullName` AND `w`.`Name` = 'BFG' ORDER BY `w`.`Id`)) FROM ( SELECT `g`.`FullName` @@ -7834,7 +7916,7 @@ SELECT TOP 1 `w`.`IsAutomatic` UNION ALL SELECT `o`.`FullName` FROM `Officers` AS `o` -) AS `t` +) AS `u` """); } @@ -7843,11 +7925,11 @@ public override async Task Select_subquery_boolean_empty_with_pushdown(bool asyn await base.Select_subquery_boolean_empty_with_pushdown(async); AssertSql( -""" + """ SELECT ( SELECT TOP 1 `w`.`IsAutomatic` FROM `Weapons` AS `w` - WHERE `t`.`FullName` = `w`.`OwnerFullName` AND `w`.`Name` = 'BFG' + WHERE `u`.`FullName` = `w`.`OwnerFullName` AND `w`.`Name` = 'BFG' ORDER BY `w`.`Id`) FROM ( SELECT `g`.`FullName` @@ -7855,7 +7937,7 @@ SELECT TOP 1 `w`.`IsAutomatic` UNION ALL SELECT `o`.`FullName` FROM `Officers` AS `o` -) AS `t` +) AS `u` """); } @@ -7888,22 +7970,22 @@ public override async Task Select_subquery_distinct_singleordefault_boolean2(boo await base.Select_subquery_distinct_singleordefault_boolean2(async); AssertSql( -""" + """ SELECT IIF(( SELECT DISTINCT TOP 1 `w`.`IsAutomatic` FROM `Weapons` AS `w` - WHERE `t`.`FullName` = `w`.`OwnerFullName` AND (`w`.`Name` LIKE '%Lancer%')) IS NULL, FALSE, ( + WHERE `u`.`FullName` = `w`.`OwnerFullName` AND (`w`.`Name` LIKE '%Lancer%')) IS NULL, FALSE, ( SELECT DISTINCT TOP 1 `w`.`IsAutomatic` FROM `Weapons` AS `w` - WHERE `t`.`FullName` = `w`.`OwnerFullName` AND (`w`.`Name` LIKE '%Lancer%'))) + WHERE `u`.`FullName` = `w`.`OwnerFullName` AND (`w`.`Name` LIKE '%Lancer%'))) FROM ( SELECT `g`.`FullName`, `g`.`HasSoulPatch` FROM `Gears` AS `g` UNION ALL SELECT `o`.`FullName`, `o`.`HasSoulPatch` FROM `Officers` AS `o` -) AS `t` -WHERE `t`.`HasSoulPatch` = TRUE +) AS `u` +WHERE `u`.`HasSoulPatch` = TRUE """); } @@ -7960,22 +8042,22 @@ public override async Task Select_subquery_distinct_singleordefault_boolean_empt await base.Select_subquery_distinct_singleordefault_boolean_empty2(async); AssertSql( -""" + """ SELECT IIF(( SELECT DISTINCT TOP 1 `w`.`IsAutomatic` FROM `Weapons` AS `w` - WHERE `t`.`FullName` = `w`.`OwnerFullName` AND `w`.`Name` = 'BFG') IS NULL, FALSE, ( + WHERE `u`.`FullName` = `w`.`OwnerFullName` AND `w`.`Name` = 'BFG') IS NULL, FALSE, ( SELECT DISTINCT TOP 1 `w`.`IsAutomatic` FROM `Weapons` AS `w` - WHERE `t`.`FullName` = `w`.`OwnerFullName` AND `w`.`Name` = 'BFG')) + WHERE `u`.`FullName` = `w`.`OwnerFullName` AND `w`.`Name` = 'BFG')) FROM ( SELECT `g`.`FullName`, `g`.`HasSoulPatch` FROM `Gears` AS `g` UNION ALL SELECT `o`.`FullName`, `o`.`HasSoulPatch` FROM `Officers` AS `o` -) AS `t` -WHERE `t`.`HasSoulPatch` = TRUE +) AS `u` +WHERE `u`.`HasSoulPatch` = TRUE """); } @@ -8008,8 +8090,8 @@ public override async Task Cast_subquery_to_base_type_using_typed_ToList(bool as await base.Cast_subquery_to_base_type_using_typed_ToList(async); AssertSql( -""" -SELECT `c`.`Name`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Nickname`, `t`.`Rank`, `t`.`SquadId` + """ +SELECT `c`.`Name`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Nickname`, `u`.`Rank`, `u`.`SquadId` FROM `Cities` AS `c` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` @@ -8017,9 +8099,9 @@ LEFT JOIN ( UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank` FROM `Officers` AS `o` -) AS `t` ON `c`.`Name` = `t`.`AssignedCityName` +) AS `u` ON `c`.`Name` = `u`.`AssignedCityName` WHERE `c`.`Name` = 'Ephyra' -ORDER BY `c`.`Name`, `t`.`Nickname` +ORDER BY `c`.`Name`, `u`.`Nickname` """); } @@ -8029,18 +8111,18 @@ public override async Task Cast_ordered_subquery_to_base_type_using_typed_ToArra AssertSql( """ - SELECT `c`.`Name`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Nickname`, `t`.`Rank`, `t`.`SquadId` - FROM `Cities` AS `c` - LEFT JOIN ( - SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` - FROM `Gears` AS `g` - UNION ALL - SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank` - FROM `Officers` AS `o` - ) AS `t` ON `c`.`Name` = `t`.`AssignedCityName` - WHERE `c`.`Name` = 'Ephyra' - ORDER BY `c`.`Name`, `t`.`Nickname` DESC - """); +SELECT `c`.`Name`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Nickname`, `u`.`Rank`, `u`.`SquadId` +FROM `Cities` AS `c` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank` + FROM `Officers` AS `o` +) AS `u` ON `c`.`Name` = `u`.`AssignedCityName` +WHERE `c`.`Name` = 'Ephyra' +ORDER BY `c`.`Name`, `u`.`Nickname` DESC +"""); } public override async Task Correlated_collection_with_complex_order_by_funcletized_to_constant_bool(bool async) @@ -8048,17 +8130,17 @@ public override async Task Correlated_collection_with_complex_order_by_funcletiz await base.Correlated_collection_with_complex_order_by_funcletized_to_constant_bool(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `w`.`Name`, `w`.`Id` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `w`.`Name`, `w`.`Id` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` FROM `Officers` AS `o` -) AS `t` -LEFT JOIN `Weapons` AS `w` ON `t`.`FullName` = `w`.`OwnerFullName` -ORDER BY `t`.`Nickname`, `t`.`SquadId` +) AS `u` +LEFT JOIN `Weapons` AS `w` ON `u`.`FullName` = `w`.`OwnerFullName` +ORDER BY `u`.`Nickname`, `u`.`SquadId` """); } @@ -8119,12 +8201,12 @@ public override async Task Double_order_by_binary_expression(bool async) AssertSql( """ -SELECT `t`.`Binary` +SELECT `w0`.`Binary` FROM ( SELECT `w`.`Id` + 2 AS `Binary` FROM `Weapons` AS `w` -) AS `t` -ORDER BY `t`.`Binary` +) AS `w0` +ORDER BY `w0`.`Binary` """); } @@ -8186,16 +8268,16 @@ public override async Task String_concat_on_various_types(bool async) AssertSql( """ -SELECT ('HasSoulPatch ' & (`t`.`HasSoulPatch` & '')) & ' HasSoulPatch' AS `HasSoulPatch`, ('Rank ' & (`t`.`Rank` & '')) & ' Rank' AS `Rank`, ('SquadId ' & (`t`.`SquadId` & '')) & ' SquadId' AS `SquadId`, ('Rating ' & IIF((`m`.`Rating` & '') IS NULL, '', (`m`.`Rating` & ''))) & ' Rating' AS `Rating`, ('Timeline ' & (`m`.`Timeline` & '')) & ' Timeline' AS `Timeline` +SELECT ('HasSoulPatch ' & (`u`.`HasSoulPatch` & '')) & ' HasSoulPatch' AS `HasSoulPatch`, ('Rank ' & (`u`.`Rank` & '')) & ' Rank' AS `Rank`, ('SquadId ' & (`u`.`SquadId` & '')) & ' SquadId' AS `SquadId`, ('Rating ' & IIF((`m`.`Rating` & '') IS NULL, '', (`m`.`Rating` & ''))) & ' Rating' AS `Rating`, ('Timeline ' & (`m`.`Timeline` & '')) & ' Timeline' AS `Timeline` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch`, `g`.`Rank` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`HasSoulPatch`, `o`.`Rank` FROM `Officers` AS `o` -) AS `t`, +) AS `u`, `Missions` AS `m` -ORDER BY `t`.`Nickname`, `m`.`Id` +ORDER BY `u`.`Nickname`, `m`.`Id` """); } @@ -8204,9 +8286,9 @@ public override async Task Time_of_day_datetimeoffset(bool async) await base.Time_of_day_datetimeoffset(async); AssertSql( -""" -SELECT CONVERT(time, [m].[Timeline]) -FROM [Missions] AS [m] + """ +SELECT TIMEVALUE(`m`.`Timeline`) +FROM `Missions` AS `m` """); } @@ -8215,16 +8297,16 @@ public override async Task GroupBy_Property_Include_Select_Average(bool async) await base.GroupBy_Property_Include_Select_Average(async); AssertSql( -""" -SELECT AVG(CDBL(`t`.`SquadId`)) + """ +SELECT AVG(CDBL(`u`.`SquadId`)) FROM ( SELECT `g`.`SquadId`, `g`.`Rank` FROM `Gears` AS `g` UNION ALL SELECT `o`.`SquadId`, `o`.`Rank` FROM `Officers` AS `o` -) AS `t` -GROUP BY `t`.`Rank` +) AS `u` +GROUP BY `u`.`Rank` """); } @@ -8233,16 +8315,16 @@ public override async Task GroupBy_Property_Include_Select_Sum(bool async) await base.GroupBy_Property_Include_Select_Sum(async); AssertSql( -""" -SELECT IIF(SUM(`t`.`SquadId`) IS NULL, 0, SUM(`t`.`SquadId`)) + """ +SELECT IIF(SUM(`u`.`SquadId`) IS NULL, 0, SUM(`u`.`SquadId`)) FROM ( SELECT `g`.`SquadId`, `g`.`Rank` FROM `Gears` AS `g` UNION ALL SELECT `o`.`SquadId`, `o`.`Rank` FROM `Officers` AS `o` -) AS `t` -GROUP BY `t`.`Rank` +) AS `u` +GROUP BY `u`.`Rank` """); } @@ -8251,7 +8333,7 @@ public override async Task GroupBy_Property_Include_Select_Count(bool async) await base.GroupBy_Property_Include_Select_Count(async); AssertSql( -""" + """ SELECT COUNT(*) FROM ( SELECT `g`.`Rank` @@ -8259,8 +8341,8 @@ SELECT COUNT(*) UNION ALL SELECT `o`.`Rank` FROM `Officers` AS `o` -) AS `t` -GROUP BY `t`.`Rank` +) AS `u` +GROUP BY `u`.`Rank` """); } @@ -8269,7 +8351,7 @@ public override async Task GroupBy_Property_Include_Select_LongCount(bool async) await base.GroupBy_Property_Include_Select_LongCount(async); AssertSql( -""" + """ SELECT COUNT(*) FROM ( SELECT `g`.`Rank` @@ -8277,8 +8359,8 @@ SELECT COUNT(*) UNION ALL SELECT `o`.`Rank` FROM `Officers` AS `o` -) AS `t` -GROUP BY `t`.`Rank` +) AS `u` +GROUP BY `u`.`Rank` """); } @@ -8287,16 +8369,16 @@ public override async Task GroupBy_Property_Include_Select_Min(bool async) await base.GroupBy_Property_Include_Select_Min(async); AssertSql( -""" -SELECT MIN(`t`.`SquadId`) + """ +SELECT MIN(`u`.`SquadId`) FROM ( SELECT `g`.`SquadId`, `g`.`Rank` FROM `Gears` AS `g` UNION ALL SELECT `o`.`SquadId`, `o`.`Rank` FROM `Officers` AS `o` -) AS `t` -GROUP BY `t`.`Rank` +) AS `u` +GROUP BY `u`.`Rank` """); } @@ -8305,17 +8387,17 @@ public override async Task GroupBy_Property_Include_Aggregate_with_anonymous_sel await base.GroupBy_Property_Include_Aggregate_with_anonymous_selector(async); AssertSql( -""" -SELECT `t`.`Nickname` AS `Key`, COUNT(*) AS `c` + """ +SELECT `u`.`Nickname` AS `Key`, COUNT(*) AS `c` FROM ( SELECT `g`.`Nickname` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname` FROM `Officers` AS `o` -) AS `t` -GROUP BY `t`.`Nickname` -ORDER BY `t`.`Nickname` +) AS `u` +GROUP BY `u`.`Nickname` +ORDER BY `u`.`Nickname` """); } @@ -8361,16 +8443,16 @@ public override async Task GroupBy_Property_Include_Select_Max(bool async) await base.GroupBy_Property_Include_Select_Max(async); AssertSql( -""" -SELECT MAX(`t`.`SquadId`) + """ +SELECT MAX(`u`.`SquadId`) FROM ( SELECT `g`.`SquadId`, `g`.`Rank` FROM `Gears` AS `g` UNION ALL SELECT `o`.`SquadId`, `o`.`Rank` FROM `Officers` AS `o` -) AS `t` -GROUP BY `t`.`Rank` +) AS `u` +GROUP BY `u`.`Rank` """); } @@ -8416,14 +8498,14 @@ public override async Task Include_collection_with_Cast_to_base(bool async) await base.Include_collection_with_Cast_to_base(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM ( 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 `t` -LEFT JOIN `Weapons` AS `w` ON `t`.`FullName` = `w`.`OwnerFullName` -ORDER BY `t`.`Nickname`, `t`.`SquadId` +) AS `u` +LEFT JOIN `Weapons` AS `w` ON `u`.`FullName` = `w`.`OwnerFullName` +ORDER BY `u`.`Nickname`, `u`.`SquadId` """); } @@ -8432,16 +8514,16 @@ public override async Task Include_with_client_method_and_member_access_still_ap await base.Include_with_client_method_and_member_access_still_applies_includes(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `t0`.`Id`, `t0`.`GearNickName`, `t0`.`GearSquadId`, `t0`.`IssueDate`, `t0`.`Note` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` -LEFT JOIN `Tags` AS `t0` ON `t`.`Nickname` = `t0`.`GearNickName` AND `t`.`SquadId` = `t0`.`GearSquadId` +) AS `u` +LEFT JOIN `Tags` AS `t` ON `u`.`Nickname` = `t`.`GearNickName` AND `u`.`SquadId` = `t`.`GearSquadId` """); } @@ -8450,17 +8532,17 @@ public override async Task Include_with_projection_of_unmapped_property_still_ge await base.Include_with_projection_of_unmapped_property_still_gets_applied(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` -LEFT JOIN `Weapons` AS `w` ON `t`.`FullName` = `w`.`OwnerFullName` -ORDER BY `t`.`Nickname`, `t`.`SquadId` +) AS `u` +LEFT JOIN `Weapons` AS `w` ON `u`.`FullName` = `w`.`OwnerFullName` +ORDER BY `u`.`Nickname`, `u`.`SquadId` """); } @@ -8468,22 +8550,22 @@ public override async Task Multiple_includes_with_client_method_around_entity_an { await base.Multiple_includes_with_client_method_around_entity_and_also_projecting_included_collection(); AssertSql( - """ -SELECT `s`.`Name`, `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator`, `t0`.`Id`, `t0`.`AmmunitionType`, `t0`.`IsAutomatic`, `t0`.`Name`, `t0`.`OwnerFullName`, `t0`.`SynergyWithId` + """ +SELECT `s`.`Name`, `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`AssignedCityName`, `s0`.`CityOfBirthName`, `s0`.`FullName`, `s0`.`HasSoulPatch`, `s0`.`LeaderNickname`, `s0`.`LeaderSquadId`, `s0`.`Rank`, `s0`.`Discriminator`, `s0`.`Id`, `s0`.`AmmunitionType`, `s0`.`IsAutomatic`, `s0`.`Name`, `s0`.`OwnerFullName`, `s0`.`SynergyWithId` FROM `Squads` AS `s` LEFT JOIN ( - SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` - LEFT JOIN `Weapons` AS `w` ON `t`.`FullName` = `w`.`OwnerFullName` -) AS `t0` ON `s`.`Id` = `t0`.`SquadId` + ) AS `u` + LEFT JOIN `Weapons` AS `w` ON `u`.`FullName` = `w`.`OwnerFullName` +) AS `s0` ON `s`.`Id` = `s0`.`SquadId` WHERE `s`.`Name` = 'Delta' -ORDER BY `s`.`Id`, `t0`.`Nickname`, `t0`.`SquadId` +ORDER BY `s`.`Id`, `s0`.`Nickname`, `s0`.`SquadId` """); } @@ -8492,16 +8574,16 @@ public override async Task OrderBy_same_expression_containing_IsNull_correctly_d await base.OrderBy_same_expression_containing_IsNull_correctly_deduplicates_the_ordering(async); AssertSql( -""" -SELECT IIF(`t`.`LeaderNickname` IS NOT NULL, IIF(IIF(LEN(`t`.`Nickname`) IS NULL, NULL, CLNG(LEN(`t`.`Nickname`))) = 5, TRUE, FALSE), NULL) + """ +SELECT IIF(`u`.`LeaderNickname` IS NOT NULL, IIF(IIF(LEN(`u`.`Nickname`) IS NULL, NULL, CLNG(LEN(`u`.`Nickname`))) = 5, TRUE, FALSE), NULL) FROM ( SELECT `g`.`Nickname`, `g`.`LeaderNickname` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`LeaderNickname` FROM `Officers` AS `o` -) AS `t` -ORDER BY NOT (IIF(IIF(`t`.`LeaderNickname` IS NOT NULL, IIF(IIF(LEN(`t`.`Nickname`) IS NULL, NULL, CLNG(LEN(`t`.`Nickname`))) = 5, TRUE, FALSE), NULL) IS NOT NULL, TRUE, FALSE)) +) AS `u` +ORDER BY NOT (IIF(IIF(`u`.`LeaderNickname` IS NOT NULL, IIF(IIF(LEN(`u`.`Nickname`) IS NULL, NULL, CLNG(LEN(`u`.`Nickname`))) = 5, TRUE, FALSE), NULL) IS NOT NULL, TRUE, FALSE)) """); } @@ -8533,10 +8615,10 @@ public override async Task GetValueOrDefault_in_filter_non_nullable_column(bool await base.GetValueOrDefault_in_filter_non_nullable_column(async); AssertSql( -""" + """ SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM `Weapons` AS `w` -WHERE IIF(`w`.`Id` IS NULL, 0, `w`.`Id`) = 0 +WHERE `w`.`Id` = 0 """); } @@ -8581,19 +8663,19 @@ public override async Task Filter_with_complex_predicate_containing_subquery(boo await base.Filter_with_complex_predicate_containing_subquery(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` -WHERE `t`.`FullName` <> 'Dom' AND EXISTS ( +) AS `u` +WHERE `u`.`FullName` <> 'Dom' AND EXISTS ( SELECT 1 FROM `Weapons` AS `w` - WHERE `t`.`FullName` = `w`.`OwnerFullName` AND `w`.`IsAutomatic` = TRUE) + WHERE `u`.`FullName` = `w`.`OwnerFullName` AND `w`.`IsAutomatic` = TRUE) """); } @@ -8603,11 +8685,11 @@ public override async Task Query_with_complex_let_containing_ordering_and_filter await base.Query_with_complex_let_containing_ordering_and_filter_projecting_firstOrDefault_element_of_let(async); AssertSql( -""" -SELECT `t`.`Nickname`, ( + """ +SELECT `u`.`Nickname`, ( SELECT TOP 1 `w`.`Name` FROM `Weapons` AS `w` - WHERE `t`.`FullName` = `w`.`OwnerFullName` AND `w`.`IsAutomatic` = TRUE + WHERE `u`.`FullName` = `w`.`OwnerFullName` AND `w`.`IsAutomatic` = TRUE ORDER BY `w`.`AmmunitionType` DESC) AS `WeaponName` FROM ( SELECT `g`.`Nickname`, `g`.`FullName` @@ -8615,8 +8697,8 @@ SELECT TOP 1 `w`.`Name` UNION ALL SELECT `o`.`Nickname`, `o`.`FullName` FROM `Officers` AS `o` -) AS `t` -WHERE `t`.`Nickname` <> 'Dom' +) AS `u` +WHERE `u`.`Nickname` <> 'Dom' """); } @@ -8626,7 +8708,7 @@ public override async Task await base.Null_semantics_is_correctly_applied_for_function_comparisons_that_take_arguments_from_optional_navigation(async); AssertSql( -""" + """ SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` FROM `Tags` AS `t` LEFT JOIN ( @@ -8635,8 +8717,8 @@ LEFT JOIN ( UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId` FROM `Officers` AS `o` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` -WHERE IIF(`t0`.`SquadId` IS NULL, NULL, MID(`t`.`Note`, 0 + 1, `t0`.`SquadId`)) = `t`.`GearNickName` OR ((`t`.`Note` IS NULL OR `t0`.`SquadId` IS NULL) AND `t`.`GearNickName` IS NULL) +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE IIF(`u`.`SquadId` IS NULL, NULL, MID(`t`.`Note`, 0 + 1, `u`.`SquadId`)) = `t`.`GearNickName` OR ((`t`.`Note` IS NULL OR `u`.`SquadId` IS NULL) AND `t`.`GearNickName` IS NULL) """); } @@ -8647,7 +8729,7 @@ await base.Null_semantics_is_correctly_applied_for_function_comparisons_that_tak async); AssertSql( -""" + """ SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` FROM (`Tags` AS `t` LEFT JOIN ( @@ -8656,8 +8738,8 @@ LEFT JOIN ( UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId` FROM `Officers` AS `o` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId`) -LEFT JOIN `Squads` AS `s` ON `t0`.`SquadId` = `s`.`Id` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId`) +LEFT JOIN `Squads` AS `s` ON `u`.`SquadId` = `s`.`Id` WHERE IIF(LEN(`s`.`Name`) IS NULL, NULL, MID(`t`.`Note`, 0 + 1, IIF(LEN(`s`.`Name`) IS NULL, NULL, CLNG(LEN(`s`.`Name`))))) = `t`.`GearNickName` OR ((`t`.`Note` IS NULL OR `s`.`Name` IS NULL) AND `t`.`GearNickName` IS NULL) """); } @@ -8686,15 +8768,15 @@ public override async Task OfTypeNav1(bool async) await base.OfTypeNav1(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM (( 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 `t` -LEFT JOIN `Tags` AS `t0` ON `t`.`Nickname` = `t0`.`GearNickName` AND `t`.`SquadId` = `t0`.`GearSquadId`) -LEFT JOIN `Tags` AS `t1` ON `t`.`Nickname` = `t1`.`GearNickName` AND `t`.`SquadId` = `t1`.`GearSquadId` -WHERE (`t0`.`Note` <> 'Foo' OR `t0`.`Note` IS NULL) AND (`t1`.`Note` <> 'Bar' OR `t1`.`Note` IS NULL) +) AS `u` +LEFT JOIN `Tags` AS `t` ON `u`.`Nickname` = `t`.`GearNickName` AND `u`.`SquadId` = `t`.`GearSquadId`) +LEFT JOIN `Tags` AS `t0` ON `u`.`Nickname` = `t0`.`GearNickName` AND `u`.`SquadId` = `t0`.`GearSquadId` +WHERE (`t`.`Note` <> 'Foo' OR `t`.`Note` IS NULL) AND (`t0`.`Note` <> 'Bar' OR `t0`.`Note` IS NULL) """); } @@ -8703,15 +8785,15 @@ public override async Task OfTypeNav2(bool async) await base.OfTypeNav2(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM (( 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 `t` -LEFT JOIN `Tags` AS `t0` ON `t`.`Nickname` = `t0`.`GearNickName` AND `t`.`SquadId` = `t0`.`GearSquadId`) -LEFT JOIN `Cities` AS `c` ON `t`.`AssignedCityName` = `c`.`Name` -WHERE (`t0`.`Note` <> 'Foo' OR `t0`.`Note` IS NULL) AND (`c`.`Location` <> 'Bar' OR `c`.`Location` IS NULL) +) AS `u` +LEFT JOIN `Tags` AS `t` ON `u`.`Nickname` = `t`.`GearNickName` AND `u`.`SquadId` = `t`.`GearSquadId`) +LEFT JOIN `Cities` AS `c` ON `u`.`AssignedCityName` = `c`.`Name` +WHERE (`t`.`Note` <> 'Foo' OR `t`.`Note` IS NULL) AND (`c`.`Location` <> 'Bar' OR `c`.`Location` IS NULL) """); } @@ -8720,16 +8802,16 @@ public override async Task OfTypeNav3(bool async) await base.OfTypeNav3(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ((( 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 `t` -LEFT JOIN `Tags` AS `t0` ON `t`.`Nickname` = `t0`.`GearNickName` AND `t`.`SquadId` = `t0`.`GearSquadId`) -INNER JOIN `Weapons` AS `w` ON `t`.`FullName` = `w`.`OwnerFullName`) -LEFT JOIN `Tags` AS `t1` ON `t`.`Nickname` = `t1`.`GearNickName` AND `t`.`SquadId` = `t1`.`GearSquadId` -WHERE (`t0`.`Note` <> 'Foo' OR `t0`.`Note` IS NULL) AND (`t1`.`Note` <> 'Bar' OR `t1`.`Note` IS NULL) +) AS `u` +LEFT JOIN `Tags` AS `t` ON `u`.`Nickname` = `t`.`GearNickName` AND `u`.`SquadId` = `t`.`GearSquadId`) +INNER JOIN `Weapons` AS `w` ON `u`.`FullName` = `w`.`OwnerFullName`) +LEFT JOIN `Tags` AS `t0` ON `u`.`Nickname` = `t0`.`GearNickName` AND `u`.`SquadId` = `t0`.`GearSquadId` +WHERE (`t`.`Note` <> 'Foo' OR `t`.`Note` IS NULL) AND (`t0`.`Note` <> 'Bar' OR `t0`.`Note` IS NULL) """); } @@ -8794,28 +8876,28 @@ public override async Task Where_contains_on_navigation_with_composite_keys(bool await base.Where_contains_on_navigation_with_composite_keys(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` +) AS `u` WHERE EXISTS ( SELECT 1 FROM `Cities` AS `c` WHERE EXISTS ( SELECT 1 FROM ( - SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`CityOfBirthName` FROM `Gears` AS `g0` UNION ALL - SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`CityOfBirthName` FROM `Officers` AS `o0` - ) AS `t0` - WHERE `c`.`Name` = `t0`.`CityOfBirthName` AND `t0`.`Nickname` = `t`.`Nickname` AND `t0`.`SquadId` = `t`.`SquadId`)) + ) AS `u0` + WHERE `c`.`Name` = `u0`.`CityOfBirthName` AND `u0`.`Nickname` = `u`.`Nickname` AND `u0`.`SquadId` = `u`.`SquadId`)) """); } @@ -8825,22 +8907,22 @@ public override async Task Include_with_complex_order_by(bool async) AssertSql( """ -SELECT `t1`.`Nickname`, `t1`.`SquadId`, `t1`.`AssignedCityName`, `t1`.`CityOfBirthName`, `t1`.`FullName`, `t1`.`HasSoulPatch`, `t1`.`LeaderNickname`, `t1`.`LeaderSquadId`, `t1`.`Rank`, `t1`.`Discriminator`, `t1`.`Id`, `t1`.`AmmunitionType`, `t1`.`IsAutomatic`, `t1`.`Name`, `t1`.`OwnerFullName`, `t1`.`SynergyWithId`, `t1`.`c` +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `s`.`Id`, `s`.`AmmunitionType`, `s`.`IsAutomatic`, `s`.`Name`, `s`.`OwnerFullName`, `s`.`SynergyWithId`, `s`.`c` FROM ( - SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId`, ( - SELECT TOP 1 `w1`.`Name` - FROM `Weapons` AS `w1` - WHERE `t`.`FullName` = `w1`.`OwnerFullName` AND (`w1`.`Name` LIKE '%Gnasher%')) AS `c` + SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId`, ( + SELECT TOP 1 `w`.`Name` + FROM `Weapons` AS `w` + WHERE `u`.`FullName` = `w`.`OwnerFullName` AND (`w`.`Name` LIKE '%Gnasher%')) AS `c` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` - LEFT JOIN `Weapons` AS `w0` ON `t`.`FullName` = `w0`.`OwnerFullName` -) AS `t1` -ORDER BY `t1`.`c`, `t1`.`Nickname`, `t1`.`SquadId` + ) AS `u` + LEFT JOIN `Weapons` AS `w0` ON `u`.`FullName` = `w0`.`OwnerFullName` +) AS `s` +ORDER BY `s`.`c`, `s`.`Nickname`, `s`.`SquadId` """); } @@ -8879,19 +8961,19 @@ public override async Task Bool_projection_from_subquery_treated_appropriately_i await base.Bool_projection_from_subquery_treated_appropriately_in_where(async); AssertSql( -""" + """ SELECT `c`.`Name`, `c`.`Location`, `c`.`Nation` FROM `Cities` AS `c` WHERE ( - SELECT TOP 1 `t`.`HasSoulPatch` + SELECT TOP 1 `u`.`HasSoulPatch` FROM ( - SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` FROM `Gears` AS `g` UNION ALL - SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`HasSoulPatch` FROM `Officers` AS `o` - ) AS `t` - ORDER BY `t`.`Nickname`, `t`.`SquadId`) = TRUE + ) AS `u` + ORDER BY `u`.`Nickname`, `u`.`SquadId`) = TRUE """); } @@ -8908,13 +8990,13 @@ await AssertQuery( m => start <= m.Timeline.Date && m.Timeline < end && dates.Contains(m.Timeline))); AssertSql( - $""" + """ @__start_0='1902-01-01T08:30:00.0000000Z' (DbType = DateTime) @__end_1='1902-01-03T08:30:00.0000000Z' (DbType = DateTime) -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` -WHERE {AssertSqlHelper.Parameter("@__start_0")} <= DATEVALUE(`m`.`Timeline`) AND `m`.`Timeline` < {AssertSqlHelper.Parameter("@__end_1")} AND `m`.`Timeline` = CDATE('1902-01-02 08:30:00') +WHERE @__start_0 <= DATEVALUE(`m`.`Timeline`) AND `m`.`Timeline` < @__end_1 AND `m`.`Timeline` = CDATE('1902-01-02 08:30:00') """); } @@ -8937,22 +9019,22 @@ public override async Task Left_join_projection_using_coalesce_tracking(bool asy { await base.Left_join_projection_using_coalesce_tracking(async); AssertSql( - """ -SELECT `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator`, `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + """ +SELECT `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator`, `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` +) AS `u` LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g0` UNION ALL SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` FROM `Officers` AS `o0` -) AS `t0` ON `t`.`LeaderNickname` = `t0`.`Nickname` +) AS `u0` ON `u`.`LeaderNickname` = `u0`.`Nickname` """); } @@ -8960,22 +9042,22 @@ public override async Task Left_join_projection_using_conditional_tracking(bool { await base.Left_join_projection_using_conditional_tracking(async); AssertSql( - """ -SELECT IIF(`t0`.`Nickname` IS NULL OR `t0`.`SquadId` IS NULL, TRUE, FALSE), `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator` + """ +SELECT IIF(`u0`.`Nickname` IS NULL OR `u0`.`SquadId` IS NULL, TRUE, FALSE), `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` +) AS `u` LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g0` UNION ALL SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` FROM `Officers` AS `o0` -) AS `t0` ON `t`.`LeaderNickname` = `t0`.`Nickname` +) AS `u0` ON `u`.`LeaderNickname` = `u0`.`Nickname` """); } @@ -9018,8 +9100,8 @@ public override async Task Project_collection_navigation_nested_composite_key(bo await base.Project_collection_navigation_nested_composite_key(async); AssertSql( -""" -SELECT `t`.`Id`, `t0`.`Nickname`, `t0`.`SquadId`, `t1`.`Nickname`, `t1`.`SquadId`, `t1`.`AssignedCityName`, `t1`.`CityOfBirthName`, `t1`.`FullName`, `t1`.`HasSoulPatch`, `t1`.`LeaderNickname`, `t1`.`LeaderSquadId`, `t1`.`Rank`, `t1`.`Discriminator` + """ +SELECT `t`.`Id`, `u`.`Nickname`, `u`.`SquadId`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` FROM (`Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, 'Gear' AS `Discriminator` @@ -9027,16 +9109,16 @@ LEFT JOIN ( UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, 'Officer' AS `Discriminator` FROM `Officers` AS `o` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId`) +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId`) LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g0` UNION ALL SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` FROM `Officers` AS `o0` -) AS `t1` ON (`t0`.`Nickname` = `t1`.`LeaderNickname` OR (`t0`.`Nickname` IS NULL AND `t1`.`LeaderNickname` IS NULL)) AND `t0`.`SquadId` = `t1`.`LeaderSquadId` -WHERE `t0`.`Discriminator` = 'Officer' -ORDER BY `t`.`Id`, `t0`.`Nickname`, `t0`.`SquadId`, `t1`.`Nickname` +) AS `u0` ON (`u`.`Nickname` = `u0`.`LeaderNickname` OR (`u`.`Nickname` IS NULL AND `u0`.`LeaderNickname` IS NULL)) AND `u`.`SquadId` = `u0`.`LeaderSquadId` +WHERE `u`.`Discriminator` = 'Officer' +ORDER BY `t`.`Id`, `u`.`Nickname`, `u`.`SquadId`, `u0`.`Nickname` """); } @@ -9064,22 +9146,22 @@ public override async Task SelectMany_Where_DefaultIfEmpty_with_navigation_in_th await base.SelectMany_Where_DefaultIfEmpty_with_navigation_in_the_collection_selector(async); AssertSql( -""" + """ @__isAutomatic_0='True' -SELECT `t`.`Nickname`, `t`.`FullName`, IIF(`t0`.`Id` IS NOT NULL, TRUE, FALSE) AS `Collection` +SELECT `u`.`Nickname`, `u`.`FullName`, IIF(`w0`.`Id` IS NOT NULL, TRUE, FALSE) AS `Collection` FROM ( SELECT `g`.`Nickname`, `g`.`FullName` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`FullName` FROM `Officers` AS `o` -) AS `t` +) AS `u` LEFT JOIN ( SELECT `w`.`Id`, `w`.`OwnerFullName` FROM `Weapons` AS `w` WHERE `w`.`IsAutomatic` = @__isAutomatic_0 -) AS `t0` ON `t`.`FullName` = `t0`.`OwnerFullName` +) AS `w0` ON `u`.`FullName` = `w0`.`OwnerFullName` """); } @@ -9088,22 +9170,22 @@ public override async Task Join_with_inner_being_a_subquery_projecting_single_pr await base.Join_with_inner_being_a_subquery_projecting_single_property(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` +) AS `u` INNER JOIN ( - SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + SELECT `g0`.`Nickname` FROM `Gears` AS `g0` UNION ALL - SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + SELECT `o0`.`Nickname` FROM `Officers` AS `o0` -) AS `t0` ON `t`.`Nickname` = `t0`.`Nickname` +) AS `u0` ON `u`.`Nickname` = `u0`.`Nickname` """); } @@ -9112,22 +9194,22 @@ public override async Task Join_with_inner_being_a_subquery_projecting_anonymous await base.Join_with_inner_being_a_subquery_projecting_anonymous_type_with_single_property(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` +) AS `u` INNER JOIN ( - SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + SELECT `g0`.`Nickname` FROM `Gears` AS `g0` UNION ALL - SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + SELECT `o0`.`Nickname` FROM `Officers` AS `o0` -) AS `t0` ON `t`.`Nickname` = `t0`.`Nickname` +) AS `u0` ON `u`.`Nickname` = `u0`.`Nickname` """); } @@ -9174,17 +9256,17 @@ public override async Task Navigation_based_on_complex_expression4(bool async) await base.Navigation_based_on_complex_expression4(async); AssertSql( -""" -SELECT TRUE, `l0`.`Name`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, `t0`.`Name0`, `t0`.`LocustHordeId`, `t0`.`ThreatLevel`, `t0`.`ThreatLevelByte`, `t0`.`ThreatLevelNullableByte`, `t0`.`DefeatedByNickname`, `t0`.`DefeatedBySquadId`, `t0`.`HighCommandId`, `t0`.`Discriminator` + """ +SELECT TRUE, `l1`.`Name`, `l1`.`LocustHordeId`, `l1`.`ThreatLevel`, `l1`.`ThreatLevelByte`, `l1`.`ThreatLevelNullableByte`, `l1`.`DefeatedByNickname`, `l1`.`DefeatedBySquadId`, `l1`.`HighCommandId`, `s`.`Name0`, `s`.`LocustHordeId`, `s`.`ThreatLevel`, `s`.`ThreatLevelByte`, `s`.`ThreatLevelNullableByte`, `s`.`DefeatedByNickname`, `s`.`DefeatedBySquadId`, `s`.`HighCommandId`, `s`.`Discriminator` FROM ( - SELECT `l`.`CommanderName`, `t`.`Name` AS `Name0`, `t`.`LocustHordeId`, `t`.`ThreatLevel`, `t`.`ThreatLevelByte`, `t`.`ThreatLevelNullableByte`, `t`.`DefeatedByNickname`, `t`.`DefeatedBySquadId`, `t`.`HighCommandId`, `t`.`Discriminator` + SELECT `l`.`CommanderName`, `u`.`Name` AS `Name0`, `u`.`LocustHordeId`, `u`.`ThreatLevel`, `u`.`ThreatLevelByte`, `u`.`ThreatLevelNullableByte`, `u`.`DefeatedByNickname`, `u`.`DefeatedBySquadId`, `u`.`HighCommandId`, `u`.`Discriminator` FROM `LocustHordes` AS `l`, ( - 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` -) AS `t0` -LEFT JOIN `LocustCommanders` AS `l0` ON `t0`.`CommanderName` = `l0`.`Name` + 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 `u` +) AS `s` +LEFT JOIN `LocustCommanders` AS `l1` ON `s`.`CommanderName` = `l1`.`Name` """); } @@ -9253,17 +9335,17 @@ public override async Task OfType_in_subquery_works(bool async) await base.OfType_in_subquery_works(async); AssertSql( -""" -SELECT `t0`.`Name`, `t0`.`Location`, `t0`.`Nation` + """ +SELECT `s`.`Name`, `s`.`Location`, `s`.`Nation` FROM `Officers` AS `o` INNER JOIN ( - SELECT `c`.`Name`, `c`.`Location`, `c`.`Nation`, `t`.`LeaderNickname`, `t`.`LeaderSquadId` + SELECT `c`.`Name`, `c`.`Location`, `c`.`Nation`, `u`.`LeaderNickname`, `u`.`LeaderSquadId` FROM ( SELECT `o0`.`AssignedCityName`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId` FROM `Officers` AS `o0` - ) AS `t` - LEFT JOIN `Cities` AS `c` ON `t`.`AssignedCityName` = `c`.`Name` -) AS `t0` ON `o`.`Nickname` = `t0`.`LeaderNickname` AND `o`.`SquadId` = `t0`.`LeaderSquadId` + ) AS `u` + LEFT JOIN `Cities` AS `c` ON `u`.`AssignedCityName` = `c`.`Name` +) AS `s` ON `o`.`Nickname` = `s`.`LeaderNickname` AND `o`.`SquadId` = `s`.`LeaderSquadId` """); } @@ -9283,21 +9365,21 @@ public override async Task Accessing_reference_navigation_collection_composition await base.Accessing_reference_navigation_collection_composition_generates_single_query(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t0`.`Id`, `t0`.`IsAutomatic`, `t0`.`Name`, `t0`.`Id0` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `s`.`Id`, `s`.`IsAutomatic`, `s`.`Name`, `s`.`Id0` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` FROM `Officers` AS `o` -) AS `t` +) AS `u` LEFT JOIN ( SELECT `w`.`Id`, `w`.`IsAutomatic`, `w0`.`Name`, `w0`.`Id` AS `Id0`, `w`.`OwnerFullName` FROM `Weapons` AS `w` LEFT JOIN `Weapons` AS `w0` ON `w`.`SynergyWithId` = `w0`.`Id` -) AS `t0` ON `t`.`FullName` = `t0`.`OwnerFullName` -ORDER BY `t`.`Nickname`, `t`.`SquadId`, `t0`.`Id` +) AS `s` ON `u`.`FullName` = `s`.`OwnerFullName` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `s`.`Id` """); } @@ -9306,8 +9388,8 @@ public override async Task Reference_include_chain_loads_correctly_when_middle_i await base.Reference_include_chain_loads_correctly_when_middle_is_null(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator`, `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name` + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note`, `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name` FROM (`Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` @@ -9315,8 +9397,8 @@ 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`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId`) -LEFT JOIN `Squads` AS `s` ON `t0`.`SquadId` = `s`.`Id` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId`) +LEFT JOIN `Squads` AS `s` ON `u`.`SquadId` = `s`.`Id` ORDER BY `t`.`Note` """); } @@ -9326,8 +9408,8 @@ public override async Task Accessing_property_of_optional_navigation_in_child_pr await base.Accessing_property_of_optional_navigation_in_child_projection_works(async); AssertSql( -""" -SELECT IIF(`t0`.`Nickname` IS NOT NULL AND `t0`.`SquadId` IS NOT NULL, TRUE, FALSE), `t`.`Id`, `t0`.`Nickname`, `t0`.`SquadId`, `t1`.`Nickname`, `t1`.`Id`, `t1`.`SquadId` + """ +SELECT IIF(`u`.`Nickname` IS NOT NULL AND `u`.`SquadId` IS NOT NULL, TRUE, FALSE), `t`.`Id`, `u`.`Nickname`, `u`.`SquadId`, `s`.`Nickname`, `s`.`Id`, `s`.`SquadId` FROM (`Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` @@ -9335,9 +9417,9 @@ LEFT JOIN ( UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` FROM `Officers` AS `o` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId`) +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId`) LEFT JOIN ( - SELECT `t2`.`Nickname`, `w`.`Id`, `t2`.`SquadId`, `w`.`OwnerFullName` + SELECT `u0`.`Nickname`, `w`.`Id`, `u0`.`SquadId`, `w`.`OwnerFullName` FROM `Weapons` AS `w` LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`FullName` @@ -9345,9 +9427,9 @@ LEFT JOIN ( UNION ALL SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`FullName` FROM `Officers` AS `o0` - ) AS `t2` ON `w`.`OwnerFullName` = `t2`.`FullName` -) AS `t1` ON `t0`.`FullName` = `t1`.`OwnerFullName` -ORDER BY `t`.`Note`, `t`.`Id`, `t0`.`Nickname`, `t0`.`SquadId`, `t1`.`Id`, `t1`.`Nickname` + ) AS `u0` ON `w`.`OwnerFullName` = `u0`.`FullName` +) AS `s` ON `u`.`FullName` = `s`.`OwnerFullName` +ORDER BY `t`.`Note`, `t`.`Id`, `u`.`Nickname`, `u`.`SquadId`, `s`.`Id`, `s`.`Nickname` """); } @@ -9362,10 +9444,10 @@ public override async Task Collection_navigation_ofType_filter_works(bool async) WHERE EXISTS ( SELECT 1 FROM ( - SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + SELECT `o`.`Nickname`, `o`.`CityOfBirthName` FROM `Officers` AS `o` - ) AS `t` - WHERE `c`.`Name` = `t`.`CityOfBirthName` AND `t`.`Nickname` = 'Marcus') + ) AS `u` + WHERE `c`.`Name` = `u`.`CityOfBirthName` AND `u`.`Nickname` = 'Marcus') """); } @@ -9374,23 +9456,22 @@ public override async Task Query_reusing_parameter_doesnt_declare_duplicate_para await base.Query_reusing_parameter_doesnt_declare_duplicate_parameter(async); AssertSql( -""" -@__prm_Inner_Nickname_0='Marcus' (Size = 255) + """ @__prm_Inner_Nickname_0='Marcus' (Size = 255) -SELECT `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator` +SELECT `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` FROM ( - SELECT DISTINCT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + SELECT DISTINCT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` - WHERE `t`.`Nickname` <> @__prm_Inner_Nickname_0 AND `t`.`Nickname` <> @__prm_Inner_Nickname_0 -) AS `t0` -ORDER BY `t0`.`FullName` + ) AS `u` + WHERE `u`.`Nickname` <> @__prm_Inner_Nickname_0 +) AS `u0` +ORDER BY `u0`.`FullName` """); } @@ -9399,43 +9480,43 @@ public override async Task Query_reusing_parameter_with_inner_query_doesnt_decla await base.Query_reusing_parameter_with_inner_query_doesnt_declare_duplicate_parameter(async); AssertSql( -""" + """ @__squadId_0='1' @__squadId_0='1' -SELECT `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator` +SELECT `u1`.`Nickname`, `u1`.`SquadId`, `u1`.`AssignedCityName`, `u1`.`CityOfBirthName`, `u1`.`FullName`, `u1`.`HasSoulPatch`, `u1`.`LeaderNickname`, `u1`.`LeaderSquadId`, `u1`.`Rank`, `u1`.`Discriminator` FROM ( - SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` - INNER JOIN `Squads` AS `s` ON `t`.`SquadId` = `s`.`Id` + ) AS `u` + INNER JOIN `Squads` AS `s` ON `u`.`SquadId` = `s`.`Id` WHERE `s`.`Id` IN ( SELECT `s0`.`Id` FROM `Squads` AS `s0` WHERE `s0`.`Id` = @__squadId_0 ) UNION ALL - SELECT `t1`.`Nickname`, `t1`.`SquadId`, `t1`.`AssignedCityName`, `t1`.`CityOfBirthName`, `t1`.`FullName`, `t1`.`HasSoulPatch`, `t1`.`LeaderNickname`, `t1`.`LeaderSquadId`, `t1`.`Rank`, `t1`.`Discriminator` + SELECT `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` FROM ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g0` UNION ALL SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` FROM `Officers` AS `o0` - ) AS `t1` - INNER JOIN `Squads` AS `s1` ON `t1`.`SquadId` = `s1`.`Id` + ) AS `u0` + INNER JOIN `Squads` AS `s1` ON `u0`.`SquadId` = `s1`.`Id` WHERE `s1`.`Id` IN ( SELECT `s2`.`Id` FROM `Squads` AS `s2` WHERE `s2`.`Id` = @__squadId_0 ) -) AS `t0` -ORDER BY `t0`.`FullName` +) AS `u1` +ORDER BY `u1`.`FullName` """); } @@ -9444,7 +9525,7 @@ public override async Task Query_reusing_parameter_with_inner_query_expression_d await base.Query_reusing_parameter_with_inner_query_expression_doesnt_declare_duplicate_parameter(async); AssertSql( -""" + """ @__gearId_0='1' @__gearId_0='1' @@ -9453,13 +9534,13 @@ public override async Task Query_reusing_parameter_with_inner_query_expression_d WHERE EXISTS ( SELECT 1 FROM ( - SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + SELECT `g`.`SquadId` FROM `Gears` AS `g` UNION ALL - SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + SELECT `o`.`SquadId` FROM `Officers` AS `o` - ) AS `t` - WHERE `s`.`Id` = `t`.`SquadId` AND `t`.`SquadId` = @__gearId_0 AND `t`.`SquadId` = @__gearId_0) + ) AS `u` + WHERE `s`.`Id` = `u`.`SquadId` AND `u`.`SquadId` = @__gearId_0 AND `u`.`SquadId` = @__gearId_0) """); } @@ -9468,26 +9549,26 @@ public override async Task Query_reusing_parameter_doesnt_declare_duplicate_para await base.Query_reusing_parameter_doesnt_declare_duplicate_parameter_complex(async); AssertSql( -""" + """ @__entity_equality_prm_Inner_Squad_0_Id='1' (Nullable = true) @__entity_equality_prm_Inner_Squad_0_Id='1' (Nullable = true) -SELECT `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator` +SELECT `s1`.`Nickname`, `s1`.`SquadId`, `s1`.`AssignedCityName`, `s1`.`CityOfBirthName`, `s1`.`FullName`, `s1`.`HasSoulPatch`, `s1`.`LeaderNickname`, `s1`.`LeaderSquadId`, `s1`.`Rank`, `s1`.`Discriminator` FROM ( - SELECT DISTINCT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + SELECT DISTINCT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` - INNER JOIN `Squads` AS `s` ON `t`.`SquadId` = `s`.`Id` + ) AS `u` + INNER JOIN `Squads` AS `s` ON `u`.`SquadId` = `s`.`Id` WHERE `s`.`Id` = @__entity_equality_prm_Inner_Squad_0_Id -) AS `t0` -INNER JOIN `Squads` AS `s0` ON `t0`.`SquadId` = `s0`.`Id` +) AS `s1` +INNER JOIN `Squads` AS `s0` ON `s1`.`SquadId` = `s0`.`Id` WHERE `s0`.`Id` = @__entity_equality_prm_Inner_Squad_0_Id -ORDER BY `t0`.`FullName` +ORDER BY `s1`.`FullName` """); } @@ -9496,36 +9577,36 @@ public override async Task Complex_GroupBy_after_set_operator(bool async) await base.Complex_GroupBy_after_set_operator(async); AssertSql( -""" -SELECT `t0`.`Name`, `t0`.`Count`, IIF(SUM(`t0`.`Count`) IS NULL, 0, SUM(`t0`.`Count`)) AS `Sum` + """ +SELECT `u1`.`Name`, `u1`.`Count`, IIF(SUM(`u1`.`Count`) IS NULL, 0, SUM(`u1`.`Count`)) AS `Sum` FROM ( SELECT `c`.`Name`, ( SELECT COUNT(*) FROM `Weapons` AS `w` - WHERE `t`.`FullName` = `w`.`OwnerFullName`) AS `Count` + WHERE `u`.`FullName` = `w`.`OwnerFullName`) AS `Count` FROM ( SELECT `g`.`AssignedCityName`, `g`.`FullName` FROM `Gears` AS `g` UNION ALL SELECT `o`.`AssignedCityName`, `o`.`FullName` FROM `Officers` AS `o` - ) AS `t` - LEFT JOIN `Cities` AS `c` ON `t`.`AssignedCityName` = `c`.`Name` + ) AS `u` + LEFT JOIN `Cities` AS `c` ON `u`.`AssignedCityName` = `c`.`Name` UNION ALL SELECT `c0`.`Name`, ( SELECT COUNT(*) FROM `Weapons` AS `w0` - WHERE `t1`.`FullName` = `w0`.`OwnerFullName`) AS `Count` + WHERE `u0`.`FullName` = `w0`.`OwnerFullName`) AS `Count` FROM ( SELECT `g0`.`CityOfBirthName`, `g0`.`FullName` FROM `Gears` AS `g0` UNION ALL SELECT `o0`.`CityOfBirthName`, `o0`.`FullName` FROM `Officers` AS `o0` - ) AS `t1` - INNER JOIN `Cities` AS `c0` ON `t1`.`CityOfBirthName` = `c0`.`Name` -) AS `t0` -GROUP BY `t0`.`Name`, `t0`.`Count` + ) AS `u0` + INNER JOIN `Cities` AS `c0` ON `u0`.`CityOfBirthName` = `c0`.`Name` +) AS `u1` +GROUP BY `u1`.`Name`, `u1`.`Count` """); } @@ -9534,36 +9615,36 @@ public override async Task Complex_GroupBy_after_set_operator_using_result_selec await base.Complex_GroupBy_after_set_operator_using_result_selector(async); AssertSql( -""" -SELECT `t0`.`Name`, `t0`.`Count`, IIF(SUM(`t0`.`Count`) IS NULL, 0, SUM(`t0`.`Count`)) AS `Sum` + """ +SELECT `u1`.`Name`, `u1`.`Count`, IIF(SUM(`u1`.`Count`) IS NULL, 0, SUM(`u1`.`Count`)) AS `Sum` FROM ( SELECT `c`.`Name`, ( SELECT COUNT(*) FROM `Weapons` AS `w` - WHERE `t`.`FullName` = `w`.`OwnerFullName`) AS `Count` + WHERE `u`.`FullName` = `w`.`OwnerFullName`) AS `Count` FROM ( SELECT `g`.`AssignedCityName`, `g`.`FullName` FROM `Gears` AS `g` UNION ALL SELECT `o`.`AssignedCityName`, `o`.`FullName` FROM `Officers` AS `o` - ) AS `t` - LEFT JOIN `Cities` AS `c` ON `t`.`AssignedCityName` = `c`.`Name` + ) AS `u` + LEFT JOIN `Cities` AS `c` ON `u`.`AssignedCityName` = `c`.`Name` UNION ALL SELECT `c0`.`Name`, ( SELECT COUNT(*) FROM `Weapons` AS `w0` - WHERE `t1`.`FullName` = `w0`.`OwnerFullName`) AS `Count` + WHERE `u0`.`FullName` = `w0`.`OwnerFullName`) AS `Count` FROM ( SELECT `g0`.`CityOfBirthName`, `g0`.`FullName` FROM `Gears` AS `g0` UNION ALL SELECT `o0`.`CityOfBirthName`, `o0`.`FullName` FROM `Officers` AS `o0` - ) AS `t1` - INNER JOIN `Cities` AS `c0` ON `t1`.`CityOfBirthName` = `c0`.`Name` -) AS `t0` -GROUP BY `t0`.`Name`, `t0`.`Count` + ) AS `u0` + INNER JOIN `Cities` AS `c0` ON `u0`.`CityOfBirthName` = `c0`.`Name` +) AS `u1` +GROUP BY `u1`.`Name`, `u1`.`Count` """); } @@ -9572,18 +9653,18 @@ public override async Task Left_join_with_GroupBy_with_composite_group_key(bool await base.Left_join_with_GroupBy_with_composite_group_key(async); AssertSql( -""" -SELECT `t`.`CityOfBirthName`, `t`.`HasSoulPatch` + """ +SELECT `u`.`CityOfBirthName`, `u`.`HasSoulPatch` FROM (( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`CityOfBirthName`, `g`.`HasSoulPatch` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`CityOfBirthName`, `o`.`HasSoulPatch` FROM `Officers` AS `o` -) AS `t` -INNER JOIN `Squads` AS `s` ON `t`.`SquadId` = `s`.`Id`) -LEFT JOIN `Tags` AS `t0` ON `t`.`Nickname` = `t0`.`GearNickName` -GROUP BY `t`.`CityOfBirthName`, `t`.`HasSoulPatch` +) AS `u` +INNER JOIN `Squads` AS `s` ON `u`.`SquadId` = `s`.`Id`) +LEFT JOIN `Tags` AS `t` ON `u`.`Nickname` = `t`.`GearNickName` +GROUP BY `u`.`CityOfBirthName`, `u`.`HasSoulPatch` """); } @@ -9592,19 +9673,19 @@ public override async Task GroupBy_with_boolean_grouping_key(bool async) await base.GroupBy_with_boolean_grouping_key(async); AssertSql( -""" -SELECT `t0`.`CityOfBirthName`, `t0`.`HasSoulPatch`, `t0`.`IsMarcus`, COUNT(*) AS `Count` + """ +SELECT `u0`.`CityOfBirthName`, `u0`.`HasSoulPatch`, `u0`.`IsMarcus`, COUNT(*) AS `Count` FROM ( - SELECT `t`.`CityOfBirthName`, `t`.`HasSoulPatch`, IIF(`t`.`Nickname` = 'Marcus', TRUE, FALSE) AS `IsMarcus` + SELECT `u`.`CityOfBirthName`, `u`.`HasSoulPatch`, IIF(`u`.`Nickname` = 'Marcus', TRUE, FALSE) AS `IsMarcus` FROM ( SELECT `g`.`Nickname`, `g`.`CityOfBirthName`, `g`.`HasSoulPatch` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`CityOfBirthName`, `o`.`HasSoulPatch` FROM `Officers` AS `o` - ) AS `t` -) AS `t0` -GROUP BY `t0`.`CityOfBirthName`, `t0`.`HasSoulPatch`, `t0`.`IsMarcus` + ) AS `u` +) AS `u0` +GROUP BY `u0`.`CityOfBirthName`, `u0`.`HasSoulPatch`, `u0`.`IsMarcus` """); } @@ -9613,8 +9694,8 @@ public override async Task GroupBy_with_boolean_groupin_key_thru_navigation_acce await base.GroupBy_with_boolean_groupin_key_thru_navigation_access(async); AssertSql( -""" -SELECT `t0`.`HasSoulPatch`, LCASE(`s`.`Name`) AS `Name` + """ +SELECT `u`.`HasSoulPatch`, LCASE(`s`.`Name`) AS `Name` FROM (`Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` @@ -9622,9 +9703,9 @@ LEFT JOIN ( UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`HasSoulPatch` FROM `Officers` AS `o` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId`) -LEFT JOIN `Squads` AS `s` ON `t0`.`SquadId` = `s`.`Id` -GROUP BY `t0`.`HasSoulPatch`, `s`.`Name` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId`) +LEFT JOIN `Squads` AS `s` ON `u`.`SquadId` = `s`.`Id` +GROUP BY `u`.`HasSoulPatch`, `s`.`Name` """); } @@ -9641,8 +9722,8 @@ public override async Task Group_by_over_projection_with_multiple_properties_acc UNION ALL SELECT `o`.`CityOfBirthName` FROM `Officers` AS `o` -) AS `t` -INNER JOIN `Cities` AS `c` ON `t`.`CityOfBirthName` = `c`.`Name` +) AS `u` +INNER JOIN `Cities` AS `c` ON `u`.`CityOfBirthName` = `c`.`Name` GROUP BY `c`.`Name` """); } @@ -9652,8 +9733,8 @@ public override async Task Group_by_on_StartsWith_with_null_parameter_as_argumen await base.Group_by_on_StartsWith_with_null_parameter_as_argument(async); AssertSql( -""" -SELECT `t0`.`Key` + """ +SELECT `u0`.`Key` FROM ( SELECT FALSE AS `Key` FROM ( @@ -9662,9 +9743,9 @@ SELECT FALSE AS `Key` UNION ALL SELECT `o`.`FullName` FROM `Officers` AS `o` - ) AS `t` -) AS `t0` -GROUP BY `t0`.`Key` + ) AS `u` +) AS `u0` +GROUP BY `u0`.`Key` """); } @@ -9672,16 +9753,16 @@ public override async Task Group_by_with_having_StartsWith_with_null_parameter_a { await base.Group_by_with_having_StartsWith_with_null_parameter_as_argument(async); AssertSql( -""" -SELECT `t`.`FullName` + """ +SELECT `u`.`FullName` FROM ( SELECT `g`.`FullName` FROM `Gears` AS `g` UNION ALL SELECT `o`.`FullName` FROM `Officers` AS `o` -) AS `t` -GROUP BY `t`.`FullName` +) AS `u` +GROUP BY `u`.`FullName` HAVING 0 = 1 """); } @@ -9691,7 +9772,7 @@ public override async Task Select_StartsWith_with_null_parameter_as_argument(boo await base.Select_StartsWith_with_null_parameter_as_argument(async); AssertSql( -""" + """ SELECT FALSE FROM ( SELECT `g`.`FullName` @@ -9699,7 +9780,7 @@ SELECT FALSE UNION ALL SELECT `o`.`FullName` FROM `Officers` AS `o` -) AS `t` +) AS `u` """); } @@ -9708,17 +9789,17 @@ public override async Task Select_null_parameter_is_not_null(bool async) await base.Select_null_parameter_is_not_null(async); AssertSql( -""" + """ @__p_0='False' SELECT CBOOL(@__p_0) FROM ( - SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + SELECT 1 FROM `Gears` AS `g` UNION ALL - SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + SELECT 1 FROM `Officers` AS `o` -) AS `t` +) AS `u` """); } @@ -9727,17 +9808,17 @@ public override async Task Where_null_parameter_is_not_null(bool async) await base.Where_null_parameter_is_not_null(async); AssertSql( -""" + """ @__p_0='False' -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` +) AS `u` WHERE @__p_0 = TRUE """); } @@ -9747,16 +9828,16 @@ public override async Task OrderBy_StartsWith_with_null_parameter_as_argument(bo await base.OrderBy_StartsWith_with_null_parameter_as_argument(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` -ORDER BY `t`.`Nickname` +) AS `u` +ORDER BY `u`.`Nickname` """); } @@ -9765,15 +9846,15 @@ public override async Task OrderBy_Contains_empty_list(bool async) await base.OrderBy_Contains_empty_list(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` +) AS `u` """); } @@ -9782,56 +9863,56 @@ public override async Task Where_with_enum_flags_parameter(bool async) await base.Where_with_enum_flags_parameter(async); AssertSql( -""" + """ @__rank_0='1' (Nullable = true) @__rank_0='1' (Nullable = true) -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` -WHERE (`t`.`Rank` BAND @__rank_0) = @__rank_0 +) AS `u` +WHERE (`u`.`Rank` BAND @__rank_0) = @__rank_0 """, -// -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + // + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` +) AS `u` """, -// -""" + // + """ @__rank_0='2' (Nullable = true) @__rank_0='2' (Nullable = true) -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` -WHERE (`t`.`Rank` BOR @__rank_0) <> @__rank_0 +) AS `u` +WHERE (`u`.`Rank` BOR @__rank_0) <> @__rank_0 """, -// -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + // + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` +) AS `u` WHERE 0 = 1 """); } @@ -9841,37 +9922,37 @@ public override async Task FirstOrDefault_navigation_access_entity_equality_in_w await base.FirstOrDefault_navigation_access_entity_equality_in_where_predicate_apply_peneding_selector(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` -LEFT JOIN `Cities` AS `c` ON `t`.`AssignedCityName` = `c`.`Name` +) AS `u` +LEFT JOIN `Cities` AS `c` ON `u`.`AssignedCityName` = `c`.`Name` WHERE `c`.`Name` = ( SELECT TOP 1 `c0`.`Name` FROM ( - SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + SELECT `g0`.`Nickname`, `g0`.`CityOfBirthName` FROM `Gears` AS `g0` UNION ALL - SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + SELECT `o0`.`Nickname`, `o0`.`CityOfBirthName` FROM `Officers` AS `o0` - ) AS `t0` - INNER JOIN `Cities` AS `c0` ON `t0`.`CityOfBirthName` = `c0`.`Name` - ORDER BY `t0`.`Nickname`) OR (`c`.`Name` IS NULL AND ( + ) AS `u0` + INNER JOIN `Cities` AS `c0` ON `u0`.`CityOfBirthName` = `c0`.`Name` + ORDER BY `u0`.`Nickname`) OR (`c`.`Name` IS NULL AND ( SELECT TOP 1 `c0`.`Name` FROM ( - SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + SELECT `g0`.`Nickname`, `g0`.`CityOfBirthName` FROM `Gears` AS `g0` UNION ALL - SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + SELECT `o0`.`Nickname`, `o0`.`CityOfBirthName` FROM `Officers` AS `o0` - ) AS `t0` - INNER JOIN `Cities` AS `c0` ON `t0`.`CityOfBirthName` = `c0`.`Name` - ORDER BY `t0`.`Nickname`) IS NULL) + ) AS `u0` + INNER JOIN `Cities` AS `c0` ON `u0`.`CityOfBirthName` = `c0`.`Name` + ORDER BY `u0`.`Nickname`) IS NULL) """); } @@ -9880,47 +9961,47 @@ public override async Task Bitwise_operation_with_non_null_parameter_optimizes_n await base.Bitwise_operation_with_non_null_parameter_optimizes_null_checks(async); AssertSql( -""" + """ @__ranks_0='134' -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` -WHERE (`t`.`Rank` BAND @__ranks_0) <> 0 +) AS `u` +WHERE (`u`.`Rank` BAND @__ranks_0) <> 0 """, -// -""" + // + """ @__ranks_0='134' @__ranks_0='134' -SELECT IIF((`t`.`Rank` BOR @__ranks_0) = @__ranks_0, TRUE, FALSE) +SELECT IIF((`u`.`Rank` BOR @__ranks_0) = @__ranks_0, TRUE, FALSE) FROM ( SELECT `g`.`Rank` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Rank` FROM `Officers` AS `o` -) AS `t` +) AS `u` """, -// -""" + // + """ @__ranks_0='134' @__ranks_0='134' @__ranks_0='134' -SELECT IIF((`t`.`Rank` BOR (`t`.`Rank` BOR (@__ranks_0 BOR (`t`.`Rank` BOR @__ranks_0)))) = @__ranks_0, TRUE, FALSE) +SELECT IIF((`u`.`Rank` BOR (`u`.`Rank` BOR (@__ranks_0 BOR (`u`.`Rank` BOR @__ranks_0)))) = @__ranks_0, TRUE, FALSE) FROM ( SELECT `g`.`Rank` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Rank` FROM `Officers` AS `o` -) AS `t` +) AS `u` """); } @@ -9975,32 +10056,32 @@ public override async Task Logical_operation_with_non_null_parameter_optimizes_n await base.Logical_operation_with_non_null_parameter_optimizes_null_checks(async); AssertSql( -""" + """ @__prm_0='True' -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` -WHERE `t`.`HasSoulPatch` <> @__prm_0 +) AS `u` +WHERE `u`.`HasSoulPatch` <> @__prm_0 """, -// -""" + // + """ @__prm_0='False' -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` -WHERE `t`.`HasSoulPatch` <> @__prm_0 +) AS `u` +WHERE `u`.`HasSoulPatch` <> @__prm_0 """); } @@ -10020,17 +10101,17 @@ public override async Task Join_inner_source_custom_projection_followed_by_filte await base.Join_inner_source_custom_projection_followed_by_filter(async); AssertSql( -""" -SELECT IIF(`l`.`Name` = 'Locust', TRUE, NULL) AS `IsEradicated`, `l`.`CommanderName`, `l`.`Name` + """ +SELECT IIF(`l1`.`Name` = 'Locust', TRUE, NULL) AS `IsEradicated`, `l1`.`CommanderName`, `l1`.`Name` FROM ( - SELECT `l0`.`Name` - FROM `LocustLeaders` AS `l0` + SELECT `l`.`Name` + FROM `LocustLeaders` AS `l` UNION ALL - SELECT `l1`.`Name` - FROM `LocustCommanders` AS `l1` -) AS `t` -INNER JOIN `LocustHordes` AS `l` ON `t`.`Name` = `l`.`CommanderName` -WHERE IIF(`l`.`Name` = 'Locust', TRUE, NULL) <> TRUE OR IIF(`l`.`Name` = 'Locust', TRUE, NULL) IS NULL + SELECT `l0`.`Name` + FROM `LocustCommanders` AS `l0` +) AS `u` +INNER JOIN `LocustHordes` AS `l1` ON `u`.`Name` = `l1`.`CommanderName` +WHERE IIF(`l1`.`Name` = 'Locust', TRUE, NULL) = FALSE OR IIF(`l1`.`Name` = 'Locust', TRUE, NULL) IS NULL """); } @@ -10118,13 +10199,10 @@ public virtual void Byte_array_filter_by_length_parameter_compiled2() @__byteArrayParam='0x2A80' (Size = 510) @__byteArrayParam='0x2A80' (Size = 510) @__byteArrayParam='0x2A80' (Size = 510) -@__byteArrayParam='0x2A80' (Size = 510) -@__byteArrayParam='0x2A80' (Size = 510) -@__byteArrayParam='0x2A80' (Size = 510) SELECT COUNT(*) FROM `Squads` AS `s` -WHERE IIF(ASCB(RIGHTB(`s`.`Banner`, 1)) = 0, LENB(`s`.`Banner`) - 1, LENB(`s`.`Banner`)) = IIF(IIF(ASCB(RIGHTB(@__byteArrayParam, 1)) = 0, LENB(@__byteArrayParam) - 1, LENB(@__byteArrayParam)) IS NULL, NULL, CLNG(IIF(ASCB(RIGHTB(@__byteArrayParam, 1)) = 0, LENB(@__byteArrayParam) - 1, LENB(@__byteArrayParam)))) OR (IIF(ASCB(RIGHTB(`s`.`Banner`, 1)) = 0, LENB(`s`.`Banner`) - 1, LENB(`s`.`Banner`)) IS NULL AND IIF(ASCB(RIGHTB(@__byteArrayParam, 1)) = 0, LENB(@__byteArrayParam) - 1, LENB(@__byteArrayParam)) IS NULL) +WHERE IIF(ASCB(RIGHTB(`s`.`Banner`, 1)) = 0, LENB(`s`.`Banner`) - 1, LENB(`s`.`Banner`)) = IIF(IIF(ASCB(RIGHTB(@__byteArrayParam, 1)) = 0, LENB(@__byteArrayParam) - 1, LENB(@__byteArrayParam)) IS NULL, NULL, CLNG(IIF(ASCB(RIGHTB(@__byteArrayParam, 1)) = 0, LENB(@__byteArrayParam) - 1, LENB(@__byteArrayParam)))) """); } @@ -10169,18 +10247,18 @@ public override async Task Conditional_expression_with_test_being_simplified_to_ await base.Conditional_expression_with_test_being_simplified_to_constant_simple(isAsync); AssertSql( -""" + """ @__prm_0='True' -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` -WHERE IIF(`t`.`HasSoulPatch` = @__prm_0, TRUE, FALSE) = TRUE +) AS `u` +WHERE IIF(`u`.`HasSoulPatch` = @__prm_0, TRUE, FALSE) = TRUE """); } @@ -10193,21 +10271,21 @@ public override async Task Conditional_expression_with_test_being_simplified_to_ @__prm_0='True' @__prm2_1='Marcus' Lancer' (Size = 255) -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` -WHERE IIF(`t`.`HasSoulPatch` = @__prm_0, IIF(( +) AS `u` +WHERE IIF(`u`.`HasSoulPatch` = @__prm_0, IIF(( SELECT TOP 1 `w`.`Name` FROM `Weapons` AS `w` - WHERE `w`.`Id` = `t`.`SquadId`) = @__prm2_1 AND ( + WHERE `w`.`Id` = `u`.`SquadId`) = @__prm2_1 AND ( SELECT TOP 1 `w`.`Name` FROM `Weapons` AS `w` - WHERE `w`.`Id` = `t`.`SquadId`) IS NOT NULL, TRUE, FALSE), FALSE) = TRUE + WHERE `w`.`Id` = `u`.`SquadId`) IS NOT NULL, TRUE, FALSE), FALSE) = TRUE """); } @@ -10233,12 +10311,12 @@ await AssertQuery( ss => ss.Set().Where(m => m.Timeline.Date >= dateTimeOffset.Date)); AssertSql( - $""" + """ @__dateTimeOffset_Date_0='0102-03-01T00:00:00.0000000' (DbType = DateTime) -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` -WHERE DATEVALUE(`m`.`Timeline`) >= {AssertSqlHelper.Parameter("@__dateTimeOffset_Date_0")} +WHERE DATEVALUE(`m`.`Timeline`) >= CDATE(@__dateTimeOffset_Date_0) """); } @@ -10247,15 +10325,15 @@ public override async Task Conditional_with_conditions_evaluating_to_false_gets_ await base.Conditional_with_conditions_evaluating_to_false_gets_optimized(async); AssertSql( -""" -SELECT `t`.`FullName` + """ +SELECT `u`.`FullName` FROM ( SELECT `g`.`Nickname`, `g`.`CityOfBirthName`, `g`.`FullName` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`CityOfBirthName`, `o`.`FullName` FROM `Officers` AS `o` -) AS `t` +) AS `u` """); } @@ -10265,14 +10343,14 @@ public override async Task Conditional_with_conditions_evaluating_to_true_gets_o AssertSql( """ -SELECT `t`.`CityOfBirthName` +SELECT `u`.`CityOfBirthName` FROM ( SELECT `g`.`Nickname`, `g`.`CityOfBirthName`, `g`.`FullName` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`CityOfBirthName`, `o`.`FullName` FROM `Officers` AS `o` -) AS `t` +) AS `u` """); } @@ -10281,7 +10359,7 @@ public override async Task Projecting_required_string_column_compared_to_null_pa await base.Projecting_required_string_column_compared_to_null_parameter(async); AssertSql( -""" + """ SELECT FALSE FROM ( SELECT `g`.`Nickname` @@ -10289,7 +10367,7 @@ SELECT FALSE UNION ALL SELECT `o`.`Nickname` FROM `Officers` AS `o` -) AS `t` +) AS `u` """); } @@ -10312,13 +10390,13 @@ public override async Task Group_by_nullable_property_HasValue_and_project_the_g await base.Group_by_nullable_property_HasValue_and_project_the_grouping_key(async); AssertSql( -""" -SELECT `t`.`Key` + """ +SELECT `w0`.`Key` FROM ( SELECT IIF(`w`.`SynergyWithId` IS NOT NULL, TRUE, FALSE) AS `Key` FROM `Weapons` AS `w` -) AS `t` -GROUP BY `t`.`Key` +) AS `w0` +GROUP BY `w0`.`Key` """); } @@ -10340,15 +10418,15 @@ public override async Task Checked_context_with_cast_does_not_fail(bool isAsync) AssertSql( """ -SELECT `t`.`Name`, `t`.`LocustHordeId`, `t`.`ThreatLevel`, `t`.`ThreatLevelByte`, `t`.`ThreatLevelNullableByte`, `t`.`DefeatedByNickname`, `t`.`DefeatedBySquadId`, `t`.`HighCommandId`, `t`.`Discriminator` +SELECT `u`.`Name`, `u`.`LocustHordeId`, `u`.`ThreatLevel`, `u`.`ThreatLevelByte`, `u`.`ThreatLevelNullableByte`, `u`.`DefeatedByNickname`, `u`.`DefeatedBySquadId`, `u`.`HighCommandId`, `u`.`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` FROM `LocustLeaders` AS `l` UNION ALL 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 CBYTE(`t`.`ThreatLevel`) >= CBYTE(5) +) AS `u` +WHERE CBYTE(`u`.`ThreatLevel`) >= CBYTE(5) """); } @@ -10358,15 +10436,15 @@ public override async Task Checked_context_with_addition_does_not_fail(bool isAs AssertSql( """ -SELECT `t`.`Name`, `t`.`LocustHordeId`, `t`.`ThreatLevel`, `t`.`ThreatLevelByte`, `t`.`ThreatLevelNullableByte`, `t`.`DefeatedByNickname`, `t`.`DefeatedBySquadId`, `t`.`HighCommandId`, `t`.`Discriminator` +SELECT `u`.`Name`, `u`.`LocustHordeId`, `u`.`ThreatLevel`, `u`.`ThreatLevelByte`, `u`.`ThreatLevelNullableByte`, `u`.`DefeatedByNickname`, `u`.`DefeatedBySquadId`, `u`.`HighCommandId`, `u`.`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` FROM `LocustLeaders` AS `l` UNION ALL 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 CLNG(`t`.`ThreatLevel`) <= (5 + CLNG(`t`.`ThreatLevel`)) +) AS `u` +WHERE CLNG(`u`.`ThreatLevel`) <= (5 + CLNG(`u`.`ThreatLevel`)) """); } @@ -10420,7 +10498,7 @@ public override async Task Where_TimeSpan_Hours(bool async) AssertSql( """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE DATEPART('h', `m`.`Duration`) = 1 """); @@ -10432,7 +10510,7 @@ public override async Task Where_TimeSpan_Minutes(bool async) AssertSql( """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE DATEPART('n', `m`.`Duration`) = 2 """); @@ -10444,7 +10522,7 @@ public override async Task Where_TimeSpan_Seconds(bool async) AssertSql( """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE DATEPART('s', `m`.`Duration`) = 3 """); @@ -10467,25 +10545,25 @@ public override async Task Contains_on_collection_of_byte_subquery(bool async) await base.Contains_on_collection_of_byte_subquery(async); AssertSql( -""" -SELECT [t].[Name], [t].[LocustHordeId], [t].[ThreatLevel], [t].[ThreatLevelByte], [t].[ThreatLevelNullableByte], [t].[DefeatedByNickname], [t].[DefeatedBySquadId], [t].[HighCommandId], [t].[Discriminator] + """ +SELECT `u`.`Name`, `u`.`LocustHordeId`, `u`.`ThreatLevel`, `u`.`ThreatLevelByte`, `u`.`ThreatLevelNullableByte`, `u`.`DefeatedByNickname`, `u`.`DefeatedBySquadId`, `u`.`HighCommandId`, `u`.`Discriminator` FROM ( - SELECT [l].[Name], [l].[LocustHordeId], [l].[ThreatLevel], [l].[ThreatLevelByte], [l].[ThreatLevelNullableByte], NULL AS [DefeatedByNickname], NULL AS [DefeatedBySquadId], NULL AS [HighCommandId], N'LocustLeader' AS [Discriminator] - FROM [LocustLeaders] AS [l] + 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` + FROM `LocustLeaders` AS `l` UNION ALL - SELECT [l0].[Name], [l0].[LocustHordeId], [l0].[ThreatLevel], [l0].[ThreatLevelByte], [l0].[ThreatLevelNullableByte], [l0].[DefeatedByNickname], [l0].[DefeatedBySquadId], [l0].[HighCommandId], N'LocustCommander' AS [Discriminator] - FROM [LocustCommanders] AS [l0] -) AS [t] -WHERE EXISTS ( - SELECT 1 + 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 `u` +WHERE `u`.`ThreatLevelByte` IN ( + SELECT `u0`.`ThreatLevelByte` FROM ( - SELECT [l1].[Name], [l1].[LocustHordeId], [l1].[ThreatLevel], [l1].[ThreatLevelByte], [l1].[ThreatLevelNullableByte], NULL AS [DefeatedByNickname], NULL AS [DefeatedBySquadId], NULL AS [HighCommandId], N'LocustLeader' AS [Discriminator] - FROM [LocustLeaders] AS [l1] + SELECT `l1`.`ThreatLevelByte` + FROM `LocustLeaders` AS `l1` UNION ALL - SELECT [l2].[Name], [l2].[LocustHordeId], [l2].[ThreatLevel], [l2].[ThreatLevelByte], [l2].[ThreatLevelNullableByte], [l2].[DefeatedByNickname], [l2].[DefeatedBySquadId], [l2].[HighCommandId], N'LocustCommander' AS [Discriminator] - FROM [LocustCommanders] AS [l2] - ) AS [t0] - WHERE [t0].[ThreatLevelByte] = [t].[ThreatLevelByte]) + SELECT `l2`.`ThreatLevelByte` + FROM `LocustCommanders` AS `l2` + ) AS `u0` +) """); } @@ -10495,14 +10573,14 @@ public override async Task Contains_on_collection_of_nullable_byte_subquery(bool AssertSql( """ -SELECT `t`.`Name`, `t`.`LocustHordeId`, `t`.`ThreatLevel`, `t`.`ThreatLevelByte`, `t`.`ThreatLevelNullableByte`, `t`.`DefeatedByNickname`, `t`.`DefeatedBySquadId`, `t`.`HighCommandId`, `t`.`Discriminator` +SELECT `u`.`Name`, `u`.`LocustHordeId`, `u`.`ThreatLevel`, `u`.`ThreatLevelByte`, `u`.`ThreatLevelNullableByte`, `u`.`DefeatedByNickname`, `u`.`DefeatedBySquadId`, `u`.`HighCommandId`, `u`.`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` FROM `LocustLeaders` AS `l` UNION ALL 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` +) AS `u` WHERE EXISTS ( SELECT 1 FROM ( @@ -10511,8 +10589,8 @@ SELECT 1 UNION ALL SELECT `l2`.`ThreatLevelNullableByte` FROM `LocustCommanders` AS `l2` - ) AS `t0` - WHERE `t0`.`ThreatLevelNullableByte` = `t`.`ThreatLevelNullableByte` OR (`t0`.`ThreatLevelNullableByte` IS NULL AND `t`.`ThreatLevelNullableByte` IS NULL)) + ) AS `u0` + WHERE `u0`.`ThreatLevelNullableByte` = `u`.`ThreatLevelNullableByte` OR (`u0`.`ThreatLevelNullableByte` IS NULL AND `u`.`ThreatLevelNullableByte` IS NULL)) """); } @@ -10522,14 +10600,14 @@ public override async Task Contains_on_collection_of_nullable_byte_subquery_null AssertSql( """ -SELECT `t`.`Name`, `t`.`LocustHordeId`, `t`.`ThreatLevel`, `t`.`ThreatLevelByte`, `t`.`ThreatLevelNullableByte`, `t`.`DefeatedByNickname`, `t`.`DefeatedBySquadId`, `t`.`HighCommandId`, `t`.`Discriminator` +SELECT `u`.`Name`, `u`.`LocustHordeId`, `u`.`ThreatLevel`, `u`.`ThreatLevelByte`, `u`.`ThreatLevelNullableByte`, `u`.`DefeatedByNickname`, `u`.`DefeatedBySquadId`, `u`.`HighCommandId`, `u`.`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` FROM `LocustLeaders` AS `l` UNION ALL 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` +) AS `u` WHERE EXISTS ( SELECT 1 FROM ( @@ -10538,8 +10616,8 @@ SELECT 1 UNION ALL SELECT `l2`.`ThreatLevelNullableByte` FROM `LocustCommanders` AS `l2` - ) AS `t0` - WHERE `t0`.`ThreatLevelNullableByte` IS NULL) + ) AS `u0` + WHERE `u0`.`ThreatLevelNullableByte` IS NULL) """); } @@ -10549,14 +10627,14 @@ public override async Task Contains_on_collection_of_nullable_byte_subquery_null AssertSql( """ -SELECT `t`.`Name`, `t`.`LocustHordeId`, `t`.`ThreatLevel`, `t`.`ThreatLevelByte`, `t`.`ThreatLevelNullableByte`, `t`.`DefeatedByNickname`, `t`.`DefeatedBySquadId`, `t`.`HighCommandId`, `t`.`Discriminator` +SELECT `u`.`Name`, `u`.`LocustHordeId`, `u`.`ThreatLevel`, `u`.`ThreatLevelByte`, `u`.`ThreatLevelNullableByte`, `u`.`DefeatedByNickname`, `u`.`DefeatedBySquadId`, `u`.`HighCommandId`, `u`.`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` FROM `LocustLeaders` AS `l` UNION ALL 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` +) AS `u` WHERE EXISTS ( SELECT 1 FROM ( @@ -10565,8 +10643,8 @@ SELECT 1 UNION ALL SELECT `l2`.`ThreatLevelNullableByte` FROM `LocustCommanders` AS `l2` - ) AS `t0` - WHERE `t0`.`ThreatLevelNullableByte` IS NULL) + ) AS `u0` + WHERE `u0`.`ThreatLevelNullableByte` IS NULL) """); } @@ -10576,7 +10654,7 @@ public override async Task Contains_on_byte_array_property_using_byte_column(boo AssertSql( """ -SELECT `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name`, `t`.`Name`, `t`.`LocustHordeId`, `t`.`ThreatLevel`, `t`.`ThreatLevelByte`, `t`.`ThreatLevelNullableByte`, `t`.`DefeatedByNickname`, `t`.`DefeatedBySquadId`, `t`.`HighCommandId`, `t`.`Discriminator` +SELECT `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name`, `u`.`Name`, `u`.`LocustHordeId`, `u`.`ThreatLevel`, `u`.`ThreatLevelByte`, `u`.`ThreatLevelNullableByte`, `u`.`DefeatedByNickname`, `u`.`DefeatedBySquadId`, `u`.`HighCommandId`, `u`.`Discriminator` FROM `Squads` AS `s`, ( 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` @@ -10584,8 +10662,8 @@ public override async Task Contains_on_byte_array_property_using_byte_column(boo UNION ALL 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 INSTR(1, STRCONV(`s`.`Banner`, 64), CHR(`t`.`ThreatLevelByte`), 0) > 0 +) AS `u` +WHERE INSTR(1, STRCONV(`s`.`Banner`, 64), CHR(`u`.`ThreatLevelByte`), 0) > 0 """); } @@ -10758,18 +10836,18 @@ public override async Task Enum_flags_closure_typed_as_underlying_type_generates await base.Enum_flags_closure_typed_as_underlying_type_generates_correct_parameter_type(async); AssertSql( -""" + """ @__prm_0='133' -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` -WHERE (@__prm_0 BAND `t`.`Rank`) = `t`.`Rank` +) AS `u` +WHERE (@__prm_0 BAND `u`.`Rank`) = `u`.`Rank` """); } @@ -10778,18 +10856,18 @@ public override async Task Enum_flags_closure_typed_as_different_type_generates_ await base.Enum_flags_closure_typed_as_different_type_generates_correct_parameter_type(async); AssertSql( -""" + """ @__prm_0='5' -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` -WHERE (@__prm_0 BAND CLNG(`t`.`Rank`)) = CLNG(`t`.`Rank`) +) AS `u` +WHERE (@__prm_0 BAND CLNG(`u`.`Rank`)) = CLNG(`u`.`Rank`) """); } @@ -10798,16 +10876,16 @@ public override async Task Constant_enum_with_same_underlying_value_as_previousl await base.Constant_enum_with_same_underlying_value_as_previously_parameterized_int(async); AssertSql( -""" -SELECT TOP 1 `t`.`Rank` BAND 1 + """ +SELECT TOP 1 `u`.`Rank` BAND 1 FROM ( SELECT `g`.`Nickname`, `g`.`Rank` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`Rank` FROM `Officers` AS `o` -) AS `t` -ORDER BY `t`.`Nickname` +) AS `u` +ORDER BY `u`.`Nickname` """); } @@ -10868,7 +10946,7 @@ public override async Task Groupby_anonymous_type_with_navigations_followed_up_b await base.Groupby_anonymous_type_with_navigations_followed_up_by_anonymous_projection_and_orderby(async); AssertSql( -""" + """ SELECT `c`.`Name`, `c`.`Location`, COUNT(*) AS `Count` FROM (`Weapons` AS `w` LEFT JOIN ( @@ -10877,8 +10955,8 @@ LEFT JOIN ( UNION ALL SELECT `o`.`CityOfBirthName`, `o`.`FullName` FROM `Officers` AS `o` -) AS `t` ON `w`.`OwnerFullName` = `t`.`FullName`) -LEFT JOIN `Cities` AS `c` ON `t`.`CityOfBirthName` = `c`.`Name` +) AS `u` ON `w`.`OwnerFullName` = `u`.`FullName`) +LEFT JOIN `Cities` AS `c` ON `u`.`CityOfBirthName` = `c`.`Name` GROUP BY `c`.`Name`, `c`.`Location` ORDER BY `c`.`Location` """); @@ -10889,17 +10967,17 @@ public override async Task SelectMany_predicate_with_non_equality_comparison_con await base.SelectMany_predicate_with_non_equality_comparison_converted_to_inner_join(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` -INNER JOIN `Weapons` AS `w` ON `t`.`FullName` <> `w`.`OwnerFullName` OR `w`.`OwnerFullName` IS NULL -ORDER BY `t`.`Nickname`, `w`.`Id` +) AS `u` +INNER JOIN `Weapons` AS `w` ON `u`.`FullName` <> `w`.`OwnerFullName` OR `w`.`OwnerFullName` IS NULL +ORDER BY `u`.`Nickname`, `w`.`Id` """); } @@ -10908,17 +10986,17 @@ public override async Task SelectMany_predicate_with_non_equality_comparison_Def await base.SelectMany_predicate_with_non_equality_comparison_DefaultIfEmpty_converted_to_left_join(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` -LEFT JOIN `Weapons` AS `w` ON `t`.`FullName` <> `w`.`OwnerFullName` OR `w`.`OwnerFullName` IS NULL -ORDER BY `t`.`Nickname`, `w`.`Id` +) AS `u` +LEFT JOIN `Weapons` AS `w` ON `u`.`FullName` <> `w`.`OwnerFullName` OR `w`.`OwnerFullName` IS NULL +ORDER BY `u`.`Nickname`, `w`.`Id` """); } @@ -10928,21 +11006,21 @@ public override async Task SelectMany_predicate_after_navigation_with_non_equali await base.SelectMany_predicate_after_navigation_with_non_equality_comparison_DefaultIfEmpty_converted_to_left_join(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `t0`.`Id`, `t0`.`AmmunitionType`, `t0`.`IsAutomatic`, `t0`.`Name`, `t0`.`OwnerFullName`, `t0`.`SynergyWithId` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `s`.`Id`, `s`.`AmmunitionType`, `s`.`IsAutomatic`, `s`.`Name`, `s`.`OwnerFullName`, `s`.`SynergyWithId` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` +) AS `u` LEFT JOIN ( SELECT `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` FROM `Weapons` AS `w` LEFT JOIN `Weapons` AS `w0` ON `w`.`SynergyWithId` = `w0`.`Id` -) AS `t0` ON `t`.`FullName` <> `t0`.`OwnerFullName` OR `t0`.`OwnerFullName` IS NULL -ORDER BY `t`.`Nickname`, `t0`.`Id` +) AS `s` ON `u`.`FullName` <> `s`.`OwnerFullName` OR `s`.`OwnerFullName` IS NULL +ORDER BY `u`.`Nickname`, `s`.`Id` """); } @@ -10951,7 +11029,7 @@ public override async Task SelectMany_without_result_selector_and_non_equality_c await base.SelectMany_without_result_selector_and_non_equality_comparison_converted_to_join(async); AssertSql( -""" + """ SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM ( SELECT `g`.`FullName` @@ -10959,8 +11037,8 @@ public override async Task SelectMany_without_result_selector_and_non_equality_c UNION ALL SELECT `o`.`FullName` FROM `Officers` AS `o` -) AS `t` -LEFT JOIN `Weapons` AS `w` ON `t`.`FullName` <> `w`.`OwnerFullName` OR `w`.`OwnerFullName` IS NULL +) AS `u` +LEFT JOIN `Weapons` AS `w` ON `u`.`FullName` <> `w`.`OwnerFullName` OR `w`.`OwnerFullName` IS NULL """); } @@ -10969,17 +11047,17 @@ public override async Task Filtered_collection_projection_with_order_comparison_ await base.Filtered_collection_projection_with_order_comparison_predicate_converted_to_join(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` FROM `Officers` AS `o` -) AS `t` -LEFT JOIN `Weapons` AS `w` ON `t`.`FullName` = `w`.`OwnerFullName` AND `t`.`SquadId` < `w`.`Id` -ORDER BY `t`.`Nickname`, `t`.`SquadId` +) AS `u` +LEFT JOIN `Weapons` AS `w` ON `u`.`FullName` = `w`.`OwnerFullName` AND `u`.`SquadId` < `w`.`Id` +ORDER BY `u`.`Nickname`, `u`.`SquadId` """); } @@ -10988,17 +11066,17 @@ public override async Task Filtered_collection_projection_with_order_comparison_ await base.Filtered_collection_projection_with_order_comparison_predicate_converted_to_join2(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` FROM `Officers` AS `o` -) AS `t` -LEFT JOIN `Weapons` AS `w` ON `t`.`FullName` = `w`.`OwnerFullName` AND `t`.`SquadId` <= `w`.`Id` -ORDER BY `t`.`Nickname`, `t`.`SquadId` +) AS `u` +LEFT JOIN `Weapons` AS `w` ON `u`.`FullName` = `w`.`OwnerFullName` AND `u`.`SquadId` <= `w`.`Id` +ORDER BY `u`.`Nickname`, `u`.`SquadId` """); } @@ -11007,17 +11085,17 @@ public override async Task Filtered_collection_projection_with_order_comparison_ await base.Filtered_collection_projection_with_order_comparison_predicate_converted_to_join3(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` FROM `Officers` AS `o` -) AS `t` -LEFT JOIN `Weapons` AS `w` ON `t`.`FullName` = `w`.`OwnerFullName` AND `t`.`SquadId` >= `w`.`Id` -ORDER BY `t`.`Nickname`, `t`.`SquadId` +) AS `u` +LEFT JOIN `Weapons` AS `w` ON `u`.`FullName` = `w`.`OwnerFullName` AND `u`.`SquadId` >= `w`.`Id` +ORDER BY `u`.`Nickname`, `u`.`SquadId` """); } @@ -11054,26 +11132,26 @@ public override async Task FirstOrDefault_over_int_compared_to_zero(bool async) SELECT `s`.`Name` FROM `Squads` AS `s` WHERE `s`.`Name` = 'Delta' AND IIF(( - SELECT TOP 1 `t`.`SquadId` + SELECT TOP 1 `u`.`SquadId` FROM ( - SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + SELECT `g`.`SquadId`, `g`.`FullName`, `g`.`HasSoulPatch` FROM `Gears` AS `g` UNION ALL - SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + SELECT `o`.`SquadId`, `o`.`FullName`, `o`.`HasSoulPatch` FROM `Officers` AS `o` - ) AS `t` - WHERE `s`.`Id` = `t`.`SquadId` AND `t`.`HasSoulPatch` = TRUE - ORDER BY `t`.`FullName`) IS NULL, 0, ( - SELECT TOP 1 `t`.`SquadId` + ) AS `u` + WHERE `s`.`Id` = `u`.`SquadId` AND `u`.`HasSoulPatch` = TRUE + ORDER BY `u`.`FullName`) IS NULL, 0, ( + SELECT TOP 1 `u`.`SquadId` FROM ( - SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + SELECT `g`.`SquadId`, `g`.`FullName`, `g`.`HasSoulPatch` FROM `Gears` AS `g` UNION ALL - SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + SELECT `o`.`SquadId`, `o`.`FullName`, `o`.`HasSoulPatch` FROM `Officers` AS `o` - ) AS `t` - WHERE `s`.`Id` = `t`.`SquadId` AND `t`.`HasSoulPatch` = TRUE - ORDER BY `t`.`FullName`)) <> 0 + ) AS `u` + WHERE `s`.`Id` = `u`.`SquadId` AND `u`.`HasSoulPatch` = TRUE + ORDER BY `u`.`FullName`)) <> 0 """); } @@ -11108,28 +11186,28 @@ public override async Task Accessing_derived_property_using_hard_and_soft_cast(b 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` + """ +SELECT `u`.`Name`, `u`.`LocustHordeId`, `u`.`ThreatLevel`, `u`.`ThreatLevelByte`, `u`.`ThreatLevelNullableByte`, `u`.`DefeatedByNickname`, `u`.`DefeatedBySquadId`, `u`.`HighCommandId`, `u`.`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` FROM `LocustLeaders` AS `l` UNION ALL 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 (IIF(`t`.`HighCommandId` IS NULL, NULL, CLNG(`t`.`HighCommandId`)) <> 0 OR IIF(`t`.`HighCommandId` IS NULL, NULL, CLNG(`t`.`HighCommandId`)) IS NULL) +) AS `u` +WHERE `u`.`Discriminator` = 'LocustCommander' AND (IIF(`u`.`HighCommandId` IS NULL, NULL, CLNG(`u`.`HighCommandId`)) <> 0 OR IIF(`u`.`HighCommandId` IS NULL, NULL, CLNG(`u`.`HighCommandId`)) IS NULL) """, - // - """ -SELECT `t`.`Name`, `t`.`LocustHordeId`, `t`.`ThreatLevel`, `t`.`ThreatLevelByte`, `t`.`ThreatLevelNullableByte`, `t`.`DefeatedByNickname`, `t`.`DefeatedBySquadId`, `t`.`HighCommandId`, `t`.`Discriminator` + // + """ +SELECT `u`.`Name`, `u`.`LocustHordeId`, `u`.`ThreatLevel`, `u`.`ThreatLevelByte`, `u`.`ThreatLevelNullableByte`, `u`.`DefeatedByNickname`, `u`.`DefeatedBySquadId`, `u`.`HighCommandId`, `u`.`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` FROM `LocustLeaders` AS `l` UNION ALL 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 (IIF(`t`.`HighCommandId` IS NULL, NULL, CLNG(`t`.`HighCommandId`)) <> 0 OR IIF(`t`.`HighCommandId` IS NULL, NULL, CLNG(`t`.`HighCommandId`)) IS NULL) +) AS `u` +WHERE `u`.`Discriminator` = 'LocustCommander' AND (IIF(`u`.`HighCommandId` IS NULL, NULL, CLNG(`u`.`HighCommandId`)) <> 0 OR IIF(`u`.`HighCommandId` IS NULL, NULL, CLNG(`u`.`HighCommandId`)) IS NULL) """); } @@ -11139,22 +11217,22 @@ public override async Task Cast_to_derived_followed_by_include_and_FirstOrDefaul AssertSql( """ -SELECT TOP 1 `t`.`Name`, `t`.`LocustHordeId`, `t`.`ThreatLevel`, `t`.`ThreatLevelByte`, `t`.`ThreatLevelNullableByte`, `t`.`DefeatedByNickname`, `t`.`DefeatedBySquadId`, `t`.`HighCommandId`, `t`.`Discriminator`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator` +SELECT TOP 1 `u`.`Name`, `u`.`LocustHordeId`, `u`.`ThreatLevel`, `u`.`ThreatLevelByte`, `u`.`ThreatLevelNullableByte`, `u`.`DefeatedByNickname`, `u`.`DefeatedBySquadId`, `u`.`HighCommandId`, `u`.`Discriminator`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`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` FROM `LocustLeaders` AS `l` UNION ALL 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` +) AS `u` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 IIF(`t`.`DefeatedBySquadId` IS NULL, NULL, CLNG(`t`.`DefeatedBySquadId`)) = `t0`.`SquadId` -WHERE `t`.`Name` LIKE '%Queen%' +) AS `u0` ON `u`.`DefeatedByNickname` = `u0`.`Nickname` AND IIF(`u`.`DefeatedBySquadId` IS NULL, NULL, CLNG(`u`.`DefeatedBySquadId`)) = `u0`.`SquadId` +WHERE `u`.`Name` LIKE '%Queen%' """); } @@ -11228,23 +11306,23 @@ public override async Task Composite_key_entity_equal(bool async) await base.Composite_key_entity_equal(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t`, +) AS `u`, ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g0` UNION ALL SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` FROM `Officers` AS `o0` -) AS `t0` -WHERE `t`.`Nickname` = `t0`.`Nickname` AND `t`.`SquadId` = `t0`.`SquadId` +) AS `u0` +WHERE `u`.`Nickname` = `u0`.`Nickname` AND `u`.`SquadId` = `u0`.`SquadId` """); } @@ -11253,23 +11331,23 @@ public override async Task Composite_key_entity_not_equal(bool async) await base.Composite_key_entity_not_equal(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t`, +) AS `u`, ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g0` UNION ALL SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` FROM `Officers` AS `o0` -) AS `t0` -WHERE `t`.`Nickname` <> `t0`.`Nickname` OR `t`.`SquadId` <> `t0`.`SquadId` +) AS `u0` +WHERE `u`.`Nickname` <> `u0`.`Nickname` OR `u`.`SquadId` <> `u0`.`SquadId` """); } @@ -11278,20 +11356,20 @@ public override async Task Composite_key_entity_equal_null(bool async) await base.Composite_key_entity_equal_null(async); AssertSql( -""" -SELECT `t`.`Name`, `t`.`LocustHordeId`, `t`.`ThreatLevel`, `t`.`ThreatLevelByte`, `t`.`ThreatLevelNullableByte`, `t`.`DefeatedByNickname`, `t`.`DefeatedBySquadId`, `t`.`HighCommandId`, `t`.`Discriminator` + """ +SELECT `u`.`Name`, `u`.`LocustHordeId`, `u`.`ThreatLevel`, `u`.`ThreatLevelByte`, `u`.`ThreatLevelNullableByte`, `u`.`DefeatedByNickname`, `u`.`DefeatedBySquadId`, `u`.`HighCommandId`, `u`.`Discriminator` FROM ( SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l`.`DefeatedByNickname`, `l`.`DefeatedBySquadId`, `l`.`HighCommandId`, 'LocustCommander' AS `Discriminator` FROM `LocustCommanders` AS `l` -) AS `t` +) AS `u` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId` FROM `Officers` AS `o` -) AS `t0` ON `t`.`DefeatedByNickname` = `t0`.`Nickname` AND `t`.`DefeatedBySquadId` = `t0`.`SquadId` -WHERE `t0`.`Nickname` IS NULL OR `t0`.`SquadId` IS NULL +) AS `u0` ON `u`.`DefeatedByNickname` = `u0`.`Nickname` AND `u`.`DefeatedBySquadId` = `u0`.`SquadId` +WHERE `u0`.`Nickname` IS NULL OR `u0`.`SquadId` IS NULL """); } @@ -11300,20 +11378,20 @@ public override async Task Composite_key_entity_not_equal_null(bool async) await base.Composite_key_entity_not_equal_null(async); AssertSql( -""" -SELECT `t`.`Name`, `t`.`LocustHordeId`, `t`.`ThreatLevel`, `t`.`ThreatLevelByte`, `t`.`ThreatLevelNullableByte`, `t`.`DefeatedByNickname`, `t`.`DefeatedBySquadId`, `t`.`HighCommandId`, `t`.`Discriminator` + """ +SELECT `u`.`Name`, `u`.`LocustHordeId`, `u`.`ThreatLevel`, `u`.`ThreatLevelByte`, `u`.`ThreatLevelNullableByte`, `u`.`DefeatedByNickname`, `u`.`DefeatedBySquadId`, `u`.`HighCommandId`, `u`.`Discriminator` FROM ( SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l`.`DefeatedByNickname`, `l`.`DefeatedBySquadId`, `l`.`HighCommandId`, 'LocustCommander' AS `Discriminator` FROM `LocustCommanders` AS `l` -) AS `t` +) AS `u` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId` FROM `Officers` AS `o` -) AS `t0` ON `t`.`DefeatedByNickname` = `t0`.`Nickname` AND `t`.`DefeatedBySquadId` = `t0`.`SquadId` -WHERE `t0`.`Nickname` IS NOT NULL AND `t0`.`SquadId` IS NOT NULL +) AS `u0` ON `u`.`DefeatedByNickname` = `u0`.`Nickname` AND `u`.`DefeatedBySquadId` = `u0`.`SquadId` +WHERE `u0`.`Nickname` IS NOT NULL AND `u0`.`SquadId` IS NOT NULL """); } @@ -11322,8 +11400,8 @@ public override async Task Projecting_property_converted_to_nullable_with_compar await base.Projecting_property_converted_to_nullable_with_comparison(async); AssertSql( -""" -SELECT `t`.`Note`, IIF(`t`.`GearNickName` IS NOT NULL, TRUE, FALSE), `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`HasSoulPatch` + """ +SELECT `t`.`Note`, IIF(`t`.`GearNickName` IS NOT NULL, TRUE, FALSE), `u`.`Nickname`, `u`.`SquadId`, `u`.`HasSoulPatch` FROM `Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` @@ -11331,8 +11409,8 @@ LEFT JOIN ( UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`HasSoulPatch` FROM `Officers` AS `o` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` -WHERE IIF(`t`.`GearNickName` IS NOT NULL, `t0`.`SquadId`, NULL) = 1 +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE IIF(`t`.`GearNickName` IS NOT NULL, `u`.`SquadId`, NULL) = 1 """); } @@ -11341,8 +11419,8 @@ public override async Task Projecting_property_converted_to_nullable_with_additi await base.Projecting_property_converted_to_nullable_with_addition(async); AssertSql( -""" -SELECT `t`.`Note`, IIF(`t`.`GearNickName` IS NOT NULL, TRUE, FALSE), `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`HasSoulPatch` + """ +SELECT `t`.`Note`, IIF(`t`.`GearNickName` IS NOT NULL, TRUE, FALSE), `u`.`Nickname`, `u`.`SquadId`, `u`.`HasSoulPatch` FROM `Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` @@ -11350,8 +11428,8 @@ LEFT JOIN ( UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`HasSoulPatch` FROM `Officers` AS `o` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` -WHERE (IIF(`t`.`GearNickName` IS NOT NULL, `t0`.`SquadId`, NULL) + 1) = 2 +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE (IIF(`t`.`GearNickName` IS NOT NULL, `u`.`SquadId`, NULL) + 1) = 2 """); } @@ -11360,8 +11438,8 @@ public override async Task Projecting_property_converted_to_nullable_with_additi await base.Projecting_property_converted_to_nullable_with_addition_and_final_projection(async); AssertSql( -""" -SELECT `t`.`Note`, IIF(`t`.`GearNickName` IS NOT NULL, `t0`.`SquadId`, NULL) + 1 AS `Value` + """ +SELECT `t`.`Note`, IIF(`t`.`GearNickName` IS NOT NULL, `u`.`SquadId`, NULL) + 1 AS `Value` FROM `Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId` @@ -11369,8 +11447,8 @@ LEFT JOIN ( UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId` FROM `Officers` AS `o` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` -WHERE IIF(`t`.`GearNickName` IS NOT NULL, `t0`.`Nickname`, NULL) IS NOT NULL +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE IIF(`t`.`GearNickName` IS NOT NULL, `u`.`Nickname`, NULL) IS NOT NULL """); } @@ -11380,7 +11458,7 @@ public override async Task Projecting_property_converted_to_nullable_with_condit AssertSql( """ -SELECT IIF(`t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL, IIF(`t`.`GearNickName` IS NOT NULL, `t0`.`SquadId`, NULL), -1) +SELECT IIF(`t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL, IIF(`t`.`GearNickName` IS NOT NULL, `u`.`SquadId`, NULL), -1) FROM `Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId` @@ -11388,7 +11466,7 @@ LEFT JOIN ( UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId` FROM `Officers` AS `o` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` """); } @@ -11397,8 +11475,8 @@ public override async Task Projecting_property_converted_to_nullable_with_functi await base.Projecting_property_converted_to_nullable_with_function_call(async); AssertSql( -""" -SELECT MID(IIF(`t`.`GearNickName` IS NOT NULL, `t0`.`Nickname`, NULL), 0 + 1, 3) + """ +SELECT MID(IIF(`t`.`GearNickName` IS NOT NULL, `u`.`Nickname`, NULL), 0 + 1, 3) FROM `Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId` @@ -11406,7 +11484,7 @@ LEFT JOIN ( UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId` FROM `Officers` AS `o` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` """); } @@ -11415,8 +11493,8 @@ public override async Task Projecting_property_converted_to_nullable_with_functi await base.Projecting_property_converted_to_nullable_with_function_call2(async); AssertSql( -""" -SELECT `t`.`Note`, MID(`t`.`Note`, 0 + 1, IIF(`t`.`GearNickName` IS NOT NULL, `t0`.`SquadId`, NULL)) AS `Function` + """ +SELECT `t`.`Note`, MID(`t`.`Note`, 0 + 1, IIF(`t`.`GearNickName` IS NOT NULL, `u`.`SquadId`, NULL)) AS `Function` FROM `Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId` @@ -11424,8 +11502,8 @@ LEFT JOIN ( UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId` FROM `Officers` AS `o` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` -WHERE IIF(`t`.`GearNickName` IS NOT NULL, `t0`.`Nickname`, NULL) IS NOT NULL +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE IIF(`t`.`GearNickName` IS NOT NULL, `u`.`Nickname`, NULL) IS NOT NULL """); } @@ -11435,7 +11513,7 @@ public override async Task Projecting_property_converted_to_nullable_into_elemen AssertSql( """ -SELECT IIF(`t`.`GearNickName` IS NOT NULL, IIF(LEN(`t0`.`Nickname`) IS NULL, NULL, CLNG(LEN(`t0`.`Nickname`))), NULL), IIF(`t`.`GearNickName` IS NOT NULL, `t0`.`SquadId`, NULL), IIF(`t`.`GearNickName` IS NOT NULL, `t0`.`SquadId`, NULL) + 1 +SELECT IIF(`t`.`GearNickName` IS NOT NULL, IIF(LEN(`u`.`Nickname`) IS NULL, NULL, CLNG(LEN(`u`.`Nickname`))), NULL), IIF(`t`.`GearNickName` IS NOT NULL, `u`.`SquadId`, NULL), IIF(`t`.`GearNickName` IS NOT NULL, `u`.`SquadId`, NULL) + 1 FROM `Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId` @@ -11443,8 +11521,8 @@ LEFT JOIN ( UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId` FROM `Officers` AS `o` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` -WHERE IIF(`t`.`GearNickName` IS NOT NULL, `t0`.`Nickname`, NULL) IS NOT NULL +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE IIF(`t`.`GearNickName` IS NOT NULL, `u`.`Nickname`, NULL) IS NOT NULL ORDER BY `t`.`Note` """); } @@ -11455,7 +11533,7 @@ public override async Task Projecting_property_converted_to_nullable_into_member AssertSql( """ -SELECT IIF(`t`.`GearNickName` IS NOT NULL, `t0`.`SquadId`, NULL) AS `Id` +SELECT IIF(`t`.`GearNickName` IS NOT NULL, `u`.`SquadId`, NULL) AS `Id` FROM `Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId` @@ -11463,8 +11541,8 @@ LEFT JOIN ( UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId` FROM `Officers` AS `o` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` -WHERE IIF(`t`.`GearNickName` IS NOT NULL, `t0`.`Nickname`, NULL) IS NOT NULL +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE IIF(`t`.`GearNickName` IS NOT NULL, `u`.`Nickname`, NULL) IS NOT NULL ORDER BY `t`.`Note` """); } @@ -11475,7 +11553,7 @@ public override async Task Projecting_property_converted_to_nullable_into_new_ar AssertSql( """ -SELECT IIF(`t`.`GearNickName` IS NOT NULL, IIF(LEN(`t0`.`Nickname`) IS NULL, NULL, CLNG(LEN(`t0`.`Nickname`))), NULL), IIF(`t`.`GearNickName` IS NOT NULL, `t0`.`SquadId`, NULL), IIF(`t`.`GearNickName` IS NOT NULL, `t0`.`SquadId`, NULL) + 1 +SELECT IIF(`t`.`GearNickName` IS NOT NULL, IIF(LEN(`u`.`Nickname`) IS NULL, NULL, CLNG(LEN(`u`.`Nickname`))), NULL), IIF(`t`.`GearNickName` IS NOT NULL, `u`.`SquadId`, NULL), IIF(`t`.`GearNickName` IS NOT NULL, `u`.`SquadId`, NULL) + 1 FROM `Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId` @@ -11483,8 +11561,8 @@ LEFT JOIN ( UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId` FROM `Officers` AS `o` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` -WHERE IIF(`t`.`GearNickName` IS NOT NULL, `t0`.`Nickname`, NULL) IS NOT NULL +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE IIF(`t`.`GearNickName` IS NOT NULL, `u`.`Nickname`, NULL) IS NOT NULL ORDER BY `t`.`Note` """); } @@ -11494,7 +11572,7 @@ public override async Task Projecting_property_converted_to_nullable_into_unary( await base.Projecting_property_converted_to_nullable_into_unary(async); AssertSql( -""" + """ SELECT `t`.`Note` FROM `Tags` AS `t` LEFT JOIN ( @@ -11503,8 +11581,8 @@ LEFT JOIN ( UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`HasSoulPatch` FROM `Officers` AS `o` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` -WHERE IIF(`t`.`GearNickName` IS NOT NULL, `t0`.`Nickname`, NULL) IS NOT NULL AND IIF(`t`.`GearNickName` IS NOT NULL, `t0`.`HasSoulPatch`, NULL) <> TRUE +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE IIF(`t`.`GearNickName` IS NOT NULL, `u`.`Nickname`, NULL) IS NOT NULL AND IIF(`t`.`GearNickName` IS NOT NULL, `u`.`HasSoulPatch`, NULL) <> TRUE ORDER BY `t`.`Note` """); } @@ -11514,18 +11592,18 @@ public override async Task Projecting_property_converted_to_nullable_into_member await base.Projecting_property_converted_to_nullable_into_member_access(async); AssertSql( -""" -SELECT `t`.`Nickname` + """ +SELECT `u`.`Nickname` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`CityOfBirthName` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`CityOfBirthName` FROM `Officers` AS `o` -) AS `t` -LEFT JOIN `Tags` AS `t0` ON `t`.`Nickname` = `t0`.`GearNickName` AND `t`.`SquadId` = `t0`.`GearSquadId` -WHERE DATEPART('m', `t0`.`IssueDate`) <> 5 -ORDER BY `t`.`Nickname` +) AS `u` +LEFT JOIN `Tags` AS `t` ON `u`.`Nickname` = `t`.`GearNickName` AND `u`.`SquadId` = `t`.`GearSquadId` +WHERE DATEPART('m', `t`.`IssueDate`) <> 5 +ORDER BY `u`.`Nickname` """); } @@ -11534,8 +11612,8 @@ public override async Task Projecting_property_converted_to_nullable_and_use_it_ await base.Projecting_property_converted_to_nullable_and_use_it_in_order_by(async); AssertSql( -""" -SELECT `t`.`Note`, IIF(`t`.`GearNickName` IS NOT NULL, TRUE, FALSE), `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`HasSoulPatch` + """ +SELECT `t`.`Note`, IIF(`t`.`GearNickName` IS NOT NULL, TRUE, FALSE), `u`.`Nickname`, `u`.`SquadId`, `u`.`HasSoulPatch` FROM `Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` @@ -11543,9 +11621,9 @@ LEFT JOIN ( UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`HasSoulPatch` FROM `Officers` AS `o` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` -WHERE IIF(`t`.`GearNickName` IS NOT NULL, `t0`.`Nickname`, NULL) IS NOT NULL -ORDER BY IIF(`t`.`GearNickName` IS NOT NULL, `t0`.`SquadId`, NULL), `t`.`Note` +) AS `u` ON `t`.`GearNickName` = `u`.`Nickname` AND `t`.`GearSquadId` = `u`.`SquadId` +WHERE IIF(`t`.`GearNickName` IS NOT NULL, `u`.`Nickname`, NULL) IS NOT NULL +ORDER BY IIF(`t`.`GearNickName` IS NOT NULL, `u`.`SquadId`, NULL), `t`.`Note` """); } @@ -11555,7 +11633,7 @@ public override async Task Where_DateOnly_Year(bool async) AssertSql( """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE DATEPART('yyyy', `m`.`Date`) = 1990 """); @@ -11567,7 +11645,7 @@ public override async Task Where_DateOnly_Month(bool async) AssertSql( """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE DATEPART('m', `m`.`Date`) = 11 """); @@ -11579,7 +11657,7 @@ public override async Task Where_DateOnly_Day(bool async) AssertSql( """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE DATEPART('d', `m`.`Date`) = 10 """); @@ -11591,7 +11669,7 @@ public override async Task Where_DateOnly_DayOfYear(bool async) AssertSql( """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE DATEPART('y', `m`.`Date`) = 314 """); @@ -11610,7 +11688,7 @@ public override async Task Where_DateOnly_AddYears(bool async) AssertSql( """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE DATEADD('yyyy', CLNG(3), `m`.`Date`) = #1993-11-10# """); @@ -11622,7 +11700,7 @@ public override async Task Where_DateOnly_AddMonths(bool async) AssertSql( """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE DATEADD('m', CLNG(3), `m`.`Date`) = #1991-02-10# """); @@ -11634,7 +11712,7 @@ public override async Task Where_DateOnly_AddDays(bool async) AssertSql( """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE DATEADD('d', CLNG(3), `m`.`Date`) = #1990-11-13# """); @@ -11646,7 +11724,7 @@ public override async Task Where_TimeOnly_Hour(bool async) AssertSql( """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE DATEPART('h', `m`.`Time`) = 10 """); @@ -11658,7 +11736,7 @@ public override async Task Where_TimeOnly_Minute(bool async) AssertSql( """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE DATEPART('n', `m`.`Time`) = 15 """); @@ -11670,7 +11748,7 @@ public override async Task Where_TimeOnly_Second(bool async) AssertSql( """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE DATEPART('s', `m`.`Time`) = 50 """); @@ -11694,7 +11772,7 @@ public override async Task Where_TimeOnly_AddHours(bool async) AssertSql( """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE TIMEVALUE(DATEADD('h', CLNG(3.0), `m`.`Time`)) = TIMEVALUE('13:15:50') """); @@ -11706,7 +11784,7 @@ public override async Task Where_TimeOnly_AddMinutes(bool async) AssertSql( """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE TIMEVALUE(DATEADD('n', CLNG(3.0), `m`.`Time`)) = TIMEVALUE('10:18:50') """); @@ -11725,7 +11803,7 @@ public override async Task Where_TimeOnly_IsBetween(bool async) AssertSql( """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE (IIF(`m`.`Time` >= TIMEVALUE('10:00:00'), TRUE, FALSE) BAND IIF(`m`.`Time` < TIMEVALUE('11:00:00'), TRUE, FALSE)) = TRUE """); @@ -11738,6 +11816,117 @@ public override async Task Where_TimeOnly_subtract_TimeOnly(bool async) AssertSql(); } + public override async Task Where_TimeOnly_FromDateTime_compared_to_property(bool async) + { + await base.Where_TimeOnly_FromDateTime_compared_to_property(async); + + AssertSql( +""" +SELECT [t].[Id] AS [TagId], [m].[Id] AS [MissionId] +FROM [Tags] AS [t] +CROSS JOIN [Missions] AS [m] +WHERE CAST([t].[IssueDate] AS time) = [m].[Time] +"""); + } + + public override async Task Where_TimeOnly_FromDateTime_compared_to_parameter(bool async) + { + await base.Where_TimeOnly_FromDateTime_compared_to_parameter(async); + + AssertSql( +""" +@__time_0='02:00' (DbType = Time) + +SELECT [t].[Id], [t].[GearNickName], [t].[GearSquadId], [t].[IssueDate], [t].[Note] +FROM [Tags] AS [t] +LEFT JOIN ( + SELECT [g].[Nickname], [g].[SquadId] + FROM [Gears] AS [g] + UNION ALL + SELECT [o].[Nickname], [o].[SquadId] + FROM [Officers] AS [o] +) AS [u] ON [t].[GearNickName] = [u].[Nickname] AND [t].[GearSquadId] = [u].[SquadId] +WHERE [u].[Nickname] IS NOT NULL AND [u].[SquadId] IS NOT NULL AND CAST(DATEADD(hour, CAST(CAST([u].[SquadId] AS float) AS int), [t].[IssueDate]) AS time) = @__time_0 +"""); + } + + public override async Task Where_TimeOnly_FromDateTime_compared_to_constant(bool async) + { + await base.Where_TimeOnly_FromDateTime_compared_to_constant(async); + + AssertSql( +""" +SELECT [t].[Id], [t].[GearNickName], [t].[GearSquadId], [t].[IssueDate], [t].[Note] +FROM [Tags] AS [t] +WHERE CAST(DATEADD(hour, CAST(CAST(CAST(LEN([t].[Note]) AS int) AS float) AS int), [t].[IssueDate]) AS time) > '09:00:00' +"""); + } + + public override async Task Where_TimeOnly_FromTimeSpan_compared_to_property(bool async) + { + await base.Where_TimeOnly_FromTimeSpan_compared_to_property(async); + + AssertSql( +""" +SELECT [m].[Id], [m].[CodeName], [m].[Date], [m].[Difficulty], [m].[Duration], [m].[Rating], [m].[Time], [m].[Timeline] +FROM [Missions] AS [m] +WHERE CAST([m].[Duration] AS time) < [m].[Time] +"""); + } + + public override async Task Where_TimeOnly_FromTimeSpan_compared_to_parameter(bool async) + { + await base.Where_TimeOnly_FromTimeSpan_compared_to_parameter(async); + + AssertSql( +""" +@__time_0='01:02' (DbType = Time) + +SELECT [m].[Id], [m].[CodeName], [m].[Date], [m].[Difficulty], [m].[Duration], [m].[Rating], [m].[Time], [m].[Timeline] +FROM [Missions] AS [m] +WHERE CAST([m].[Duration] AS time) = @__time_0 +"""); + } + + public override async Task Order_by_TimeOnly_FromTimeSpan(bool async) + { + await base.Order_by_TimeOnly_FromTimeSpan(async); + + AssertSql( +""" +SELECT [m].[Id], [m].[CodeName], [m].[Date], [m].[Difficulty], [m].[Duration], [m].[Rating], [m].[Time], [m].[Timeline] +FROM [Missions] AS [m] +ORDER BY CAST([m].[Duration] AS time) +"""); + } + + public override async Task Where_DateOnly_FromDateTime_compared_to_property(bool async) + { + await base.Where_DateOnly_FromDateTime_compared_to_property(async); + + AssertSql( + """ +SELECT `t`.`Id` AS `TagId`, `m`.`Id` AS `MissionId` +FROM `Tags` AS `t`, +`Missions` AS `m` +WHERE `t`.`IssueDate` > `m`.`Date` +"""); + } + + public override async Task Where_DateOnly_FromDateTime_compared_to_constant_and_parameter(bool async) + { + await base.Where_DateOnly_FromDateTime_compared_to_constant_and_parameter(async); + + AssertSql( +""" +@__prm_0='10/11/0002' (DbType = Date) + +SELECT [t].[Id], [t].[GearNickName], [t].[GearSquadId], [t].[IssueDate], [t].[Note] +FROM [Tags] AS [t] +WHERE CAST([t].[IssueDate] AS date) IN (@__prm_0, '0015-03-07') +"""); + } + public override async Task Project_navigation_defined_on_base_from_entity_with_inheritance_using_soft_cast(bool async) { await base.Project_navigation_defined_on_base_from_entity_with_inheritance_using_soft_cast(async); @@ -11807,38 +11996,38 @@ public override async Task Join_entity_with_itself_grouped_by_key_followed_by_in await base.Join_entity_with_itself_grouped_by_key_followed_by_include_skip_take(async); AssertSql( -""" -SELECT `t3`.`Nickname`, `t3`.`SquadId`, `t3`.`AssignedCityName`, `t3`.`CityOfBirthName`, `t3`.`FullName`, `t3`.`HasSoulPatch`, `t3`.`LeaderNickname`, `t3`.`LeaderSquadId`, `t3`.`Rank`, `t3`.`Discriminator`, `t3`.`HasSoulPatch0`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + """ +SELECT `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`AssignedCityName`, `s0`.`CityOfBirthName`, `s0`.`FullName`, `s0`.`HasSoulPatch`, `s0`.`LeaderNickname`, `s0`.`LeaderSquadId`, `s0`.`Rank`, `s0`.`Discriminator`, `s0`.`HasSoulPatch0`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM ( - SELECT TOP 10 `t2`.`Nickname`, `t2`.`SquadId`, `t2`.`AssignedCityName`, `t2`.`CityOfBirthName`, `t2`.`FullName`, `t2`.`HasSoulPatch`, `t2`.`LeaderNickname`, `t2`.`LeaderSquadId`, `t2`.`Rank`, `t2`.`Discriminator`, `t2`.`HasSoulPatch0` + SELECT TOP 10 `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `s`.`HasSoulPatch0` FROM ( - SELECT TOP 10 `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `t0`.`HasSoulPatch` AS `HasSoulPatch0` + SELECT TOP 10 `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `u1`.`HasSoulPatch` AS `HasSoulPatch0` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` + ) AS `u` LEFT JOIN ( - SELECT MIN(IIF(LEN(`t1`.`Nickname`) IS NULL, NULL, CLNG(LEN(`t1`.`Nickname`)))) AS `c`, `t1`.`HasSoulPatch` + SELECT MIN(IIF(LEN(`u0`.`Nickname`) IS NULL, NULL, CLNG(LEN(`u0`.`Nickname`)))) AS `c`, `u0`.`HasSoulPatch` FROM ( SELECT `g0`.`Nickname`, `g0`.`HasSoulPatch` FROM `Gears` AS `g0` UNION ALL SELECT `o0`.`Nickname`, `o0`.`HasSoulPatch` FROM `Officers` AS `o0` - ) AS `t1` - WHERE `t1`.`Nickname` <> 'Dom' - GROUP BY `t1`.`HasSoulPatch` - ) AS `t0` ON IIF(LEN(`t`.`Nickname`) IS NULL, NULL, CLNG(LEN(`t`.`Nickname`))) = `t0`.`c` - WHERE `t0`.`c` IS NOT NULL - ORDER BY `t`.`Nickname` - ) AS `t2` - ORDER BY `t2`.`Nickname` DESC -) AS `t3` -LEFT JOIN `Weapons` AS `w` ON `t3`.`FullName` = `w`.`OwnerFullName` -ORDER BY `t3`.`Nickname`, `t3`.`SquadId`, NOT (`t3`.`HasSoulPatch0`) + ) AS `u0` + WHERE `u0`.`Nickname` <> 'Dom' + GROUP BY `u0`.`HasSoulPatch` + ) AS `u1` ON IIF(LEN(`u`.`Nickname`) IS NULL, NULL, CLNG(LEN(`u`.`Nickname`))) = `u1`.`c` + WHERE `u1`.`c` IS NOT NULL + ORDER BY `u`.`Nickname` + ) AS `s` + ORDER BY `s`.`Nickname` DESC +) AS `s0` +LEFT JOIN `Weapons` AS `w` ON `s0`.`FullName` = `w`.`OwnerFullName` +ORDER BY `s0`.`Nickname`, `s0`.`SquadId`, NOT (`s0`.`HasSoulPatch0`) """); } @@ -11847,16 +12036,16 @@ public override async Task Where_bool_column_and_Contains(bool async) await base.Where_bool_column_and_Contains(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` -WHERE `t`.`HasSoulPatch` = TRUE AND `t`.`HasSoulPatch` IN (FALSE, TRUE) +) AS `u` +WHERE `u`.`HasSoulPatch` = TRUE AND `u`.`HasSoulPatch` IN (FALSE, TRUE) """); } @@ -11866,15 +12055,15 @@ public override async Task Where_bool_column_or_Contains(bool async) AssertSql( """ -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` -WHERE `t`.`HasSoulPatch` = TRUE AND `t`.`HasSoulPatch` IN (FALSE, TRUE) +) AS `u` +WHERE `u`.`HasSoulPatch` = TRUE AND `u`.`HasSoulPatch` IN (FALSE, TRUE) """); } @@ -11898,18 +12087,18 @@ public override async Task Enum_matching_take_value_gets_different_type_mapping( await base.Enum_matching_take_value_gets_different_type_mapping(async); AssertSql( -""" + """ @__value_1='1' -SELECT TOP 1 `t`.`Rank` BAND @__value_1 +SELECT TOP 1 `u`.`Rank` BAND @__value_1 FROM ( SELECT `g`.`Nickname`, `g`.`Rank` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`Rank` FROM `Officers` AS `o` -) AS `t` -ORDER BY `t`.`Nickname` +) AS `u` +ORDER BY `u`.`Nickname` """); } @@ -11918,22 +12107,22 @@ public override async Task SelectMany_Where_DefaultIfEmpty_with_navigation_in_th await base.SelectMany_Where_DefaultIfEmpty_with_navigation_in_the_collection_selector_order_comparison(async); AssertSql( -""" + """ @__prm_0='1' -SELECT `t`.`Nickname`, `t`.`FullName`, IIF(`t0`.`Id` IS NOT NULL, TRUE, FALSE) AS `Collection` +SELECT `u`.`Nickname`, `u`.`FullName`, IIF(`w0`.`Id` IS NOT NULL, TRUE, FALSE) AS `Collection` FROM ( SELECT `g`.`Nickname`, `g`.`FullName` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`FullName` FROM `Officers` AS `o` -) AS `t` +) AS `u` LEFT JOIN ( SELECT `w`.`Id`, `w`.`OwnerFullName` FROM `Weapons` AS `w` WHERE `w`.`Id` > @__prm_0 -) AS `t0` ON `t`.`FullName` = `t0`.`OwnerFullName` +) AS `w0` ON `u`.`FullName` = `w0`.`OwnerFullName` """); } @@ -12045,22 +12234,22 @@ public override async Task SelectMany_Where_DefaultIfEmpty_with_navigation_in_th await base.SelectMany_Where_DefaultIfEmpty_with_navigation_in_the_collection_selector_not_equal(async); AssertSql( -""" + """ @__isAutomatic_0='True' -SELECT `t`.`Nickname`, `t`.`FullName`, IIF(`t0`.`Id` IS NOT NULL, TRUE, FALSE) AS `Collection` +SELECT `u`.`Nickname`, `u`.`FullName`, IIF(`w0`.`Id` IS NOT NULL, TRUE, FALSE) AS `Collection` FROM ( SELECT `g`.`Nickname`, `g`.`FullName` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`FullName` FROM `Officers` AS `o` -) AS `t` +) AS `u` LEFT JOIN ( SELECT `w`.`Id`, `w`.`OwnerFullName` FROM `Weapons` AS `w` WHERE `w`.`IsAutomatic` <> @__isAutomatic_0 -) AS `t0` ON `t`.`FullName` = `t0`.`OwnerFullName` +) AS `w0` ON `u`.`FullName` = `w0`.`OwnerFullName` """); } @@ -12106,36 +12295,52 @@ public override async Task Comparison_with_value_converted_subclass(bool async) public override async Task FirstOrDefault_on_empty_collection_of_DateTime_in_subquery(bool async) { - await base.FirstOrDefault_on_empty_collection_of_DateTime_in_subquery(async); + //await base.FirstOrDefault_on_empty_collection_of_DateTime_in_subquery(async); + await AssertQuery( + async, + ss => from g in ss.Set() + let invalidTagIssueDate = (from t in ss.Set() + where t.GearNickName == g.FullName + orderby t.Id + select t.IssueDate).FirstOrDefault() + where g.Tag.IssueDate > invalidTagIssueDate + select new { g.Nickname, invalidTagIssueDate }, + ss => from g in ss.Set() + let invalidTagIssueDate = (from t in ss.Set() + where t.GearNickName == g.FullName + orderby t.Id + select t.IssueDate).FirstOrDefault(new DateTime(100, 1, 1)) + where g.Tag.IssueDate > invalidTagIssueDate + select new { g.Nickname, invalidTagIssueDate }); AssertSql( """ -SELECT `t`.`Nickname`, IIF(( - SELECT TOP 1 `t2`.`IssueDate` - FROM `Tags` AS `t2` - WHERE `t2`.`GearNickName` = `t`.`FullName` - ORDER BY `t2`.`Id`) IS NULL, #1899-12-30#, ( - SELECT TOP 1 `t2`.`IssueDate` - FROM `Tags` AS `t2` - WHERE `t2`.`GearNickName` = `t`.`FullName` - ORDER BY `t2`.`Id`)) AS `invalidTagIssueDate` +SELECT `u`.`Nickname`, IIF(( + SELECT TOP 1 `t1`.`IssueDate` + FROM `Tags` AS `t1` + WHERE `t1`.`GearNickName` = `u`.`FullName` + ORDER BY `t1`.`Id`) IS NULL, #0100-01-01#, ( + SELECT TOP 1 `t1`.`IssueDate` + FROM `Tags` AS `t1` + WHERE `t1`.`GearNickName` = `u`.`FullName` + ORDER BY `t1`.`Id`)) AS `invalidTagIssueDate` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` FROM `Officers` AS `o` -) AS `t` -LEFT JOIN `Tags` AS `t0` ON `t`.`Nickname` = `t0`.`GearNickName` AND `t`.`SquadId` = `t0`.`GearSquadId` -WHERE `t0`.`IssueDate` > IIF(( - SELECT TOP 1 `t1`.`IssueDate` - FROM `Tags` AS `t1` - WHERE `t1`.`GearNickName` = `t`.`FullName` - ORDER BY `t1`.`Id`) IS NULL, #1899-12-30#, ( - SELECT TOP 1 `t1`.`IssueDate` - FROM `Tags` AS `t1` - WHERE `t1`.`GearNickName` = `t`.`FullName` - ORDER BY `t1`.`Id`)) +) AS `u` +LEFT JOIN `Tags` AS `t` ON `u`.`Nickname` = `t`.`GearNickName` AND `u`.`SquadId` = `t`.`GearSquadId` +WHERE `t`.`IssueDate` > IIF(( + SELECT TOP 1 `t0`.`IssueDate` + FROM `Tags` AS `t0` + WHERE `t0`.`GearNickName` = `u`.`FullName` + ORDER BY `t0`.`Id`) IS NULL, #0100-01-01#, ( + SELECT TOP 1 `t0`.`IssueDate` + FROM `Tags` AS `t0` + WHERE `t0`.`GearNickName` = `u`.`FullName` + ORDER BY `t0`.`Id`)) """); } @@ -12240,24 +12445,24 @@ public override async Task Cast_to_derived_followed_by_multiple_includes(bool as AssertSql( """ -SELECT `t`.`Name`, `t`.`LocustHordeId`, `t`.`ThreatLevel`, `t`.`ThreatLevelByte`, `t`.`ThreatLevelNullableByte`, `t`.`DefeatedByNickname`, `t`.`DefeatedBySquadId`, `t`.`HighCommandId`, `t`.`Discriminator`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +SELECT `u`.`Name`, `u`.`LocustHordeId`, `u`.`ThreatLevel`, `u`.`ThreatLevelByte`, `u`.`ThreatLevelNullableByte`, `u`.`DefeatedByNickname`, `u`.`DefeatedBySquadId`, `u`.`HighCommandId`, `u`.`Discriminator`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` 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` FROM `LocustLeaders` AS `l` UNION ALL 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` +) AS `u` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 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` +) AS `u0` ON `u`.`DefeatedByNickname` = `u0`.`Nickname` AND IIF(`u`.`DefeatedBySquadId` IS NULL, NULL, CLNG(`u`.`DefeatedBySquadId`)) = `u0`.`SquadId`) +LEFT JOIN `Weapons` AS `w` ON `u0`.`FullName` = `w`.`OwnerFullName` +WHERE `u`.`Name` LIKE '%Queen%' +ORDER BY `u`.`Name`, `u0`.`Nickname`, `u0`.`SquadId` """); } @@ -12290,7 +12495,7 @@ public override async Task Where_equals_method_on_nullable_with_object_overload( AssertSql( """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE `m`.`Rating` IS NULL """); @@ -12336,8 +12541,8 @@ public override async Task Include_after_SelectMany_throws(bool async) { await base.Include_after_SelectMany_throws(async); AssertSql( - """ -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name` FROM ((`LocustHordes` AS `l` LEFT JOIN `Cities` AS `c` ON `l`.`CapitalName` = `c`.`Name`) LEFT JOIN ( @@ -12346,9 +12551,9 @@ 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 `t` ON `c`.`Name` = `t`.`CityOfBirthName`) -LEFT JOIN `Squads` AS `s` ON `t`.`SquadId` = `s`.`Id` -WHERE `c`.`Name` IS NOT NULL AND `t`.`CityOfBirthName` IS NOT NULL AND `t`.`SquadId` IS NOT NULL AND `s`.`Id` IS NOT NULL +) AS `u` ON `c`.`Name` = `u`.`CityOfBirthName`) +LEFT JOIN `Squads` AS `s` ON `u`.`SquadId` = `s`.`Id` +WHERE `c`.`Name` IS NOT NULL AND `u`.`CityOfBirthName` IS NOT NULL AND `u`.`SquadId` IS NOT NULL AND `s`.`Id` IS NOT NULL """); } @@ -12357,20 +12562,20 @@ public override async Task Correlated_collection_with_distinct_projecting_identi await base.Correlated_collection_with_distinct_projecting_identifier_column_composite_key(async); AssertSql( -""" -SELECT `s`.`Id`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`HasSoulPatch` + """ +SELECT `s`.`Id`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`HasSoulPatch` FROM `Squads` AS `s` LEFT JOIN ( - SELECT DISTINCT `t`.`Nickname`, `t`.`SquadId`, `t`.`HasSoulPatch` + SELECT DISTINCT `u`.`Nickname`, `u`.`SquadId`, `u`.`HasSoulPatch` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`HasSoulPatch` FROM `Officers` AS `o` - ) AS `t` -) AS `t0` ON `s`.`Id` = `t0`.`SquadId` -ORDER BY `s`.`Id`, `t0`.`Nickname` + ) AS `u` +) AS `u0` ON `s`.`Id` = `u0`.`SquadId` +ORDER BY `s`.`Id`, `u0`.`Nickname` """); } @@ -12379,15 +12584,15 @@ public override async Task Include_on_entity_that_is_not_present_in_final_projec await base.Include_on_entity_that_is_not_present_in_final_projection_but_uses_TypeIs_instead(async); AssertSql( -""" -SELECT `t`.`Nickname`, IIF(`t`.`Discriminator` = 'Officer', TRUE, FALSE) AS `IsOfficer` + """ +SELECT `u`.`Nickname`, IIF(`u`.`Discriminator` = 'Officer', TRUE, FALSE) AS `IsOfficer` FROM ( SELECT `g`.`Nickname`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, 'Officer' AS `Discriminator` FROM `Officers` AS `o` -) AS `t` +) AS `u` """); } @@ -12408,12 +12613,30 @@ public override async Task ToString_boolean_property_nullable(bool async) await base.ToString_boolean_property_nullable(async); AssertSql( -""" -SELECT IIF(`l`.`Eradicated` = FALSE, 'False', IIF(`l`.`Eradicated` = TRUE, 'True', NULL)) + """ +SELECT IIF(`l`.`Eradicated` = FALSE, 'False', IIF(`l`.`Eradicated` = TRUE, 'True', '')) FROM `LocustHordes` AS `l` """); } + public override async Task ToString_boolean_computed_nullable(bool async) + { + await base.ToString_boolean_computed_nullable(async); + + AssertSql( + """ +SELECT CASE CASE + WHEN NOT ([l].[Eradicated] = CAST(1 AS bit) OR ([l].[CommanderName] = N'Unknown' AND [l].[CommanderName] IS NOT NULL)) THEN CAST(0 AS bit) + WHEN [l].[Eradicated] = CAST(1 AS bit) OR ([l].[CommanderName] = N'Unknown' AND [l].[CommanderName] IS NOT NULL) THEN CAST(1 AS bit) +END + WHEN CAST(0 AS bit) THEN N'False' + WHEN CAST(1 AS bit) THEN N'True' + ELSE N'' +END +FROM [LocustHordes] AS [l] +"""); + } + public override async Task Correlated_collection_after_distinct_3_levels(bool async) { await base.Correlated_collection_after_distinct_3_levels(async); @@ -12487,15 +12710,15 @@ public override async Task String_concat_nullable_expressions_are_coalesced(bool await base.String_concat_nullable_expressions_are_coalesced(async); AssertSql( -""" -SELECT ((`t`.`FullName` & '') & IIF(`t`.`LeaderNickname` IS NULL, '', `t`.`LeaderNickname`)) & '' + """ +SELECT ((`u`.`FullName` & '') & IIF(`u`.`LeaderNickname` IS NULL, '', `u`.`LeaderNickname`)) & '' FROM ( SELECT `g`.`FullName`, `g`.`LeaderNickname` FROM `Gears` AS `g` UNION ALL SELECT `o`.`FullName`, `o`.`LeaderNickname` FROM `Officers` AS `o` -) AS `t` +) AS `u` """); } @@ -12504,20 +12727,20 @@ public override async Task Correlated_collection_with_distinct_projecting_identi await base.Correlated_collection_with_distinct_projecting_identifier_column_and_correlation_key(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t0`.`Id`, `t0`.`Name`, `t0`.`OwnerFullName` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `w0`.`Id`, `w0`.`Name`, `w0`.`OwnerFullName` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` FROM `Gears` AS `g` UNION ALL SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`FullName` FROM `Officers` AS `o` -) AS `t` +) AS `u` LEFT JOIN ( SELECT DISTINCT `w`.`Id`, `w`.`Name`, `w`.`OwnerFullName` FROM `Weapons` AS `w` -) AS `t0` ON `t`.`FullName` = `t0`.`OwnerFullName` -ORDER BY `t`.`Nickname`, `t`.`SquadId` +) AS `w0` ON `u`.`FullName` = `w0`.`OwnerFullName` +ORDER BY `u`.`Nickname`, `u`.`SquadId` """); } @@ -12858,19 +13081,19 @@ public override async Task Where_subquery_equality_to_null_with_composite_key(bo await base.Where_subquery_equality_to_null_with_composite_key(async); AssertSql( -""" + """ SELECT `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name` FROM `Squads` AS `s` WHERE NOT EXISTS ( SELECT 1 FROM ( - SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + SELECT `g`.`SquadId` FROM `Gears` AS `g` UNION ALL - SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + SELECT `o`.`SquadId` FROM `Officers` AS `o` - ) AS `t` - WHERE `s`.`Id` = `t`.`SquadId`) + ) AS `u` + WHERE `s`.`Id` = `u`.`SquadId`) """); } @@ -12885,13 +13108,13 @@ public override async Task Where_subquery_equality_to_null_with_composite_key_sh WHERE NOT EXISTS ( SELECT 1 FROM ( - SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + SELECT `g`.`SquadId`, `g`.`FullName` FROM `Gears` AS `g` UNION ALL - SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + SELECT `o`.`SquadId`, `o`.`FullName` FROM `Officers` AS `o` - ) AS `t` - WHERE `s`.`Id` = `t`.`SquadId` AND `t`.`FullName` = 'Anthony Carmine') + ) AS `u` + WHERE `s`.`Id` = `u`.`SquadId` AND `u`.`FullName` = 'Anthony Carmine') """); } @@ -12900,19 +13123,19 @@ public override async Task Where_subquery_equality_to_null_without_composite_key await base.Where_subquery_equality_to_null_without_composite_key(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` +) AS `u` WHERE NOT EXISTS ( SELECT 1 FROM `Weapons` AS `w` - WHERE `t`.`FullName` = `w`.`OwnerFullName`) + WHERE `u`.`FullName` = `w`.`OwnerFullName`) """); } @@ -12922,18 +13145,18 @@ public override async Task Where_subquery_equality_to_null_without_composite_key AssertSql( """ -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` +) AS `u` WHERE NOT EXISTS ( SELECT 1 FROM `Weapons` AS `w` - WHERE `t`.`FullName` = `w`.`OwnerFullName` AND `w`.`Name` = 'Hammer of Dawn') + WHERE `u`.`FullName` = `w`.`OwnerFullName` AND `w`.`Name` = 'Hammer of Dawn') """); } @@ -12943,21 +13166,21 @@ public override async Task Include_reference_on_derived_type_using_EF_Property(b AssertSql( """ -SELECT `t`.`Name`, `t`.`LocustHordeId`, `t`.`ThreatLevel`, `t`.`ThreatLevelByte`, `t`.`ThreatLevelNullableByte`, `t`.`DefeatedByNickname`, `t`.`DefeatedBySquadId`, `t`.`HighCommandId`, `t`.`Discriminator`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator` +SELECT `u`.`Name`, `u`.`LocustHordeId`, `u`.`ThreatLevel`, `u`.`ThreatLevelByte`, `u`.`ThreatLevelNullableByte`, `u`.`DefeatedByNickname`, `u`.`DefeatedBySquadId`, `u`.`HighCommandId`, `u`.`Discriminator`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`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` FROM `LocustLeaders` AS `l` UNION ALL 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` +) AS `u` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 IIF(`t`.`DefeatedBySquadId` IS NULL, NULL, CLNG(`t`.`DefeatedBySquadId`)) = `t0`.`SquadId` +) AS `u0` ON `u`.`DefeatedByNickname` = `u0`.`Nickname` AND IIF(`u`.`DefeatedBySquadId` IS NULL, NULL, CLNG(`u`.`DefeatedBySquadId`)) = `u0`.`SquadId` """); } @@ -12966,23 +13189,23 @@ public override async Task Include_collection_on_derived_type_using_EF_Property( await base.Include_collection_on_derived_type_using_EF_Property(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` +) AS `u` LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g0` UNION ALL SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` FROM `Officers` AS `o0` -) AS `t0` ON `t`.`Nickname` = `t0`.`LeaderNickname` AND `t`.`SquadId` = `t0`.`LeaderSquadId` -ORDER BY `t`.`Nickname`, `t`.`SquadId`, `t0`.`Nickname` +) AS `u0` ON `u`.`Nickname` = `u0`.`LeaderNickname` AND `u`.`SquadId` = `u0`.`LeaderSquadId` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `u0`.`Nickname` """); } @@ -12991,20 +13214,20 @@ public override async Task EF_Property_based_Include_navigation_on_derived_type( await base.EF_Property_based_Include_navigation_on_derived_type(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` FROM ( 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 `t` +) AS `u` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` UNION ALL SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` FROM `Officers` AS `o0` -) AS `t0` ON `t`.`Nickname` = `t0`.`LeaderNickname` AND `t`.`SquadId` = `t0`.`LeaderSquadId` -ORDER BY `t`.`Nickname`, `t`.`SquadId`, `t0`.`Nickname` +) AS `u0` ON `u`.`Nickname` = `u0`.`LeaderNickname` AND `u`.`SquadId` = `u0`.`LeaderSquadId` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `u0`.`Nickname` """); } @@ -13013,24 +13236,24 @@ public override async Task ElementAt_basic_with_OrderBy(bool async) await base.ElementAt_basic_with_OrderBy(async); AssertSql( -""" -SELECT `t1`.`Nickname`, `t1`.`SquadId`, `t1`.`AssignedCityName`, `t1`.`CityOfBirthName`, `t1`.`FullName`, `t1`.`HasSoulPatch`, `t1`.`LeaderNickname`, `t1`.`LeaderSquadId`, `t1`.`Rank`, `t1`.`Discriminator` + """ +SELECT `u1`.`Nickname`, `u1`.`SquadId`, `u1`.`AssignedCityName`, `u1`.`CityOfBirthName`, `u1`.`FullName`, `u1`.`HasSoulPatch`, `u1`.`LeaderNickname`, `u1`.`LeaderSquadId`, `u1`.`Rank`, `u1`.`Discriminator` FROM ( - SELECT TOP 1 `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator` + SELECT TOP 1 `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` FROM ( - SELECT TOP 1 `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + SELECT TOP 1 `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` - ORDER BY `t`.`FullName` - ) AS `t0` - ORDER BY `t0`.`FullName` DESC -) AS `t1` -ORDER BY `t1`.`FullName` + ) AS `u` + ORDER BY `u`.`FullName` + ) AS `u0` + ORDER BY `u0`.`FullName` DESC +) AS `u1` +ORDER BY `u1`.`FullName` """); } @@ -13039,24 +13262,24 @@ public override async Task ElementAtOrDefault_basic_with_OrderBy(bool async) await base.ElementAtOrDefault_basic_with_OrderBy(async); AssertSql( -""" -SELECT `t1`.`Nickname`, `t1`.`SquadId`, `t1`.`AssignedCityName`, `t1`.`CityOfBirthName`, `t1`.`FullName`, `t1`.`HasSoulPatch`, `t1`.`LeaderNickname`, `t1`.`LeaderSquadId`, `t1`.`Rank`, `t1`.`Discriminator` + """ +SELECT `u1`.`Nickname`, `u1`.`SquadId`, `u1`.`AssignedCityName`, `u1`.`CityOfBirthName`, `u1`.`FullName`, `u1`.`HasSoulPatch`, `u1`.`LeaderNickname`, `u1`.`LeaderSquadId`, `u1`.`Rank`, `u1`.`Discriminator` FROM ( - SELECT TOP 1 `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator` + SELECT TOP 1 `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` FROM ( - SELECT TOP 2 `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + SELECT TOP 2 `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` - ORDER BY `t`.`FullName` - ) AS `t0` - ORDER BY `t0`.`FullName` DESC -) AS `t1` -ORDER BY `t1`.`FullName` + ) AS `u` + ORDER BY `u`.`FullName` + ) AS `u0` + ORDER BY `u0`.`FullName` DESC +) AS `u1` +ORDER BY `u1`.`FullName` """); } @@ -13065,24 +13288,24 @@ public override async Task ElementAtOrDefault_basic_with_OrderBy_parameter(bool await base.ElementAtOrDefault_basic_with_OrderBy_parameter(async); AssertSql( -""" -SELECT `t1`.`Nickname`, `t1`.`SquadId`, `t1`.`AssignedCityName`, `t1`.`CityOfBirthName`, `t1`.`FullName`, `t1`.`HasSoulPatch`, `t1`.`LeaderNickname`, `t1`.`LeaderSquadId`, `t1`.`Rank`, `t1`.`Discriminator` + """ +SELECT `u1`.`Nickname`, `u1`.`SquadId`, `u1`.`AssignedCityName`, `u1`.`CityOfBirthName`, `u1`.`FullName`, `u1`.`HasSoulPatch`, `u1`.`LeaderNickname`, `u1`.`LeaderSquadId`, `u1`.`Rank`, `u1`.`Discriminator` FROM ( - SELECT TOP 1 `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator` + SELECT TOP 1 `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator` FROM ( - SELECT TOP 3 `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + SELECT TOP 3 `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` - ORDER BY `t`.`FullName` - ) AS `t0` - ORDER BY `t0`.`FullName` DESC -) AS `t1` -ORDER BY `t1`.`FullName` + ) AS `u` + ORDER BY `u`.`FullName` + ) AS `u0` + ORDER BY `u0`.`FullName` DESC +) AS `u1` +ORDER BY `u1`.`FullName` """); } @@ -13175,25 +13398,25 @@ public override async Task DateTimeOffset_to_unix_time_seconds(bool async) await base.DateTimeOffset_to_unix_time_seconds(async); AssertSql( - $""" + """ @__unixEpochSeconds_0='0' (DbType = Decimal) -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name`, `s1`.`SquadId`, `s1`.`MissionId` +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name`, `s1`.`SquadId`, `s1`.`MissionId` FROM (( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` -INNER JOIN `Squads` AS `s` ON `t`.`SquadId` = `s`.`Id`) +) AS `u` +INNER JOIN `Squads` AS `s` ON `u`.`SquadId` = `s`.`Id`) LEFT JOIN `SquadMissions` AS `s1` ON `s`.`Id` = `s1`.`SquadId` WHERE NOT EXISTS ( SELECT `s0`.`SquadId` FROM `SquadMissions` AS `s0` INNER JOIN `Missions` AS `m` ON `s0`.`MissionId` = `m`.`Id` - WHERE `s`.`Id` = `s0`.`SquadId` AND {AssertSqlHelper.Parameter("@__unixEpochSeconds_0")} = DATEDIFF('s', CDATE('1970-01-01 00:00:00'), `m`.`Timeline`)) -ORDER BY `t`.`Nickname`, `t`.`SquadId`, `s`.`Id`, `s1`.`SquadId` + WHERE `s`.`Id` = `s0`.`SquadId` AND @__unixEpochSeconds_0 = DATEDIFF('s', CDATE('1970-01-01 00:00:00'), `m`.`Timeline`)) +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `s`.`Id`, `s1`.`SquadId` """); } @@ -13206,29 +13429,35 @@ public override async Task Set_operator_with_navigation_in_projection_groupby_ag SELECT `s`.`Name`, ( SELECT IIF(SUM(IIF(LEN(`c`.`Location`) IS NULL, NULL, CLNG(LEN(`c`.`Location`)))) IS NULL, 0, SUM(IIF(LEN(`c`.`Location`) IS NULL, NULL, CLNG(LEN(`c`.`Location`))))) FROM (( - SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` - FROM `Gears` AS `g0` + SELECT `g2`.`SquadId`, `g2`.`CityOfBirthName` + FROM `Gears` AS `g2` UNION ALL - SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` - FROM `Officers` AS `o0` - ) AS `t3` - INNER JOIN `Squads` AS `s0` ON `t3`.`SquadId` = `s0`.`Id`) - INNER JOIN `Cities` AS `c` ON `t3`.`CityOfBirthName` = `c`.`Name` + SELECT `o2`.`SquadId`, `o2`.`CityOfBirthName` + FROM `Officers` AS `o2` + ) AS `u3` + INNER JOIN `Squads` AS `s0` ON `u3`.`SquadId` = `s0`.`Id`) + INNER JOIN `Cities` AS `c` ON `u3`.`CityOfBirthName` = `c`.`Name` WHERE 'Marcus' IN ( - SELECT `t4`.`Nickname` + SELECT `u4`.`Nickname` FROM ( - SELECT `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`AssignedCityName`, `g1`.`CityOfBirthName`, `g1`.`FullName`, `g1`.`HasSoulPatch`, `g1`.`LeaderNickname`, `g1`.`LeaderSquadId`, `g1`.`Rank`, 'Gear' AS `Discriminator` - FROM `Gears` AS `g1` - UNION ALL - SELECT `o1`.`Nickname`, `o1`.`SquadId`, `o1`.`AssignedCityName`, `o1`.`CityOfBirthName`, `o1`.`FullName`, `o1`.`HasSoulPatch`, `o1`.`LeaderNickname`, `o1`.`LeaderSquadId`, `o1`.`Rank`, 'Officer' AS `Discriminator` - FROM `Officers` AS `o1` - UNION ALL - SELECT `g2`.`Nickname`, `g2`.`SquadId`, `g2`.`AssignedCityName`, `g2`.`CityOfBirthName`, `g2`.`FullName`, `g2`.`HasSoulPatch`, `g2`.`LeaderNickname`, `g2`.`LeaderSquadId`, `g2`.`Rank`, 'Gear' AS `Discriminator` - FROM `Gears` AS `g2` + SELECT `u5`.`Nickname` + FROM ( + SELECT `g3`.`Nickname` + FROM `Gears` AS `g3` + UNION ALL + SELECT `o3`.`Nickname` + FROM `Officers` AS `o3` + ) AS `u5` UNION ALL - SELECT `o2`.`Nickname`, `o2`.`SquadId`, `o2`.`AssignedCityName`, `o2`.`CityOfBirthName`, `o2`.`FullName`, `o2`.`HasSoulPatch`, `o2`.`LeaderNickname`, `o2`.`LeaderSquadId`, `o2`.`Rank`, 'Officer' AS `Discriminator` - FROM `Officers` AS `o2` - ) AS `t4` + SELECT `u6`.`Nickname` + FROM ( + SELECT `g4`.`Nickname` + FROM `Gears` AS `g4` + UNION ALL + SELECT `o4`.`Nickname` + FROM `Officers` AS `o4` + ) AS `u6` + ) AS `u4` ) AND (`s`.`Name` = `s0`.`Name` OR (`s`.`Name` IS NULL AND `s0`.`Name` IS NULL))) AS `SumOfLengths` FROM ( SELECT `g`.`SquadId` @@ -13236,23 +13465,29 @@ UNION ALL UNION ALL SELECT `o`.`SquadId` FROM `Officers` AS `o` -) AS `t` -INNER JOIN `Squads` AS `s` ON `t`.`SquadId` = `s`.`Id` +) AS `u` +INNER JOIN `Squads` AS `s` ON `u`.`SquadId` = `s`.`Id` WHERE 'Marcus' IN ( - SELECT `t0`.`Nickname` + SELECT `u2`.`Nickname` FROM ( - SELECT `g3`.`Nickname`, `g3`.`SquadId`, `g3`.`AssignedCityName`, `g3`.`CityOfBirthName`, `g3`.`FullName`, `g3`.`HasSoulPatch`, `g3`.`LeaderNickname`, `g3`.`LeaderSquadId`, `g3`.`Rank`, 'Gear' AS `Discriminator` - FROM `Gears` AS `g3` - UNION ALL - SELECT `o3`.`Nickname`, `o3`.`SquadId`, `o3`.`AssignedCityName`, `o3`.`CityOfBirthName`, `o3`.`FullName`, `o3`.`HasSoulPatch`, `o3`.`LeaderNickname`, `o3`.`LeaderSquadId`, `o3`.`Rank`, 'Officer' AS `Discriminator` - FROM `Officers` AS `o3` - UNION ALL - SELECT `g4`.`Nickname`, `g4`.`SquadId`, `g4`.`AssignedCityName`, `g4`.`CityOfBirthName`, `g4`.`FullName`, `g4`.`HasSoulPatch`, `g4`.`LeaderNickname`, `g4`.`LeaderSquadId`, `g4`.`Rank`, 'Gear' AS `Discriminator` - FROM `Gears` AS `g4` + SELECT `u0`.`Nickname` + FROM ( + SELECT `g0`.`Nickname` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname` + FROM `Officers` AS `o0` + ) AS `u0` UNION ALL - SELECT `o4`.`Nickname`, `o4`.`SquadId`, `o4`.`AssignedCityName`, `o4`.`CityOfBirthName`, `o4`.`FullName`, `o4`.`HasSoulPatch`, `o4`.`LeaderNickname`, `o4`.`LeaderSquadId`, `o4`.`Rank`, 'Officer' AS `Discriminator` - FROM `Officers` AS `o4` - ) AS `t0` + SELECT `u1`.`Nickname` + FROM ( + SELECT `g1`.`Nickname` + FROM `Gears` AS `g1` + UNION ALL + SELECT `o1`.`Nickname` + FROM `Officers` AS `o1` + ) AS `u1` + ) AS `u2` ) GROUP BY `s`.`Name` """); @@ -13263,19 +13498,19 @@ public override async Task Nav_expansion_inside_Contains_argument(bool async) await base.Nav_expansion_inside_Contains_argument(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` +) AS `u` WHERE IIF(EXISTS ( SELECT 1 FROM `Weapons` AS `w` - WHERE `t`.`FullName` = `w`.`OwnerFullName`), 1, 0) IN (1, -1) + WHERE `u`.`FullName` = `w`.`OwnerFullName`), 1, 0) IN (1, -1) """); } @@ -13284,19 +13519,19 @@ public override async Task Nav_expansion_with_member_pushdown_inside_Contains_ar await base.Nav_expansion_with_member_pushdown_inside_Contains_argument(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` FROM `Gears` AS `g` 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 `t` +) AS `u` WHERE ( SELECT TOP 1 `w`.`Name` FROM `Weapons` AS `w` - WHERE `t`.`FullName` = `w`.`OwnerFullName` + WHERE `u`.`FullName` = `w`.`OwnerFullName` ORDER BY `w`.`Id`) IN ('Marcus'' Lancer', 'Dom''s Gnasher') """); } @@ -13361,6 +13596,235 @@ public override async Task Nav_expansion_inside_ElementAt_correlated_to_source(b AssertSql(); } + public override async Task Include_one_to_many_on_composite_key_then_orderby_key_properties(bool async) + { + await base.Include_one_to_many_on_composite_key_then_orderby_key_properties(async); + + AssertSql( + """ +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN `Weapons` AS `w` ON `u`.`FullName` = `w`.`OwnerFullName` +ORDER BY `u`.`SquadId`, `u`.`Nickname` +"""); + } + + public override async Task Find_underlying_property_after_GroupJoin_DefaultIfEmpty(bool async) + { + await base.Find_underlying_property_after_GroupJoin_DefaultIfEmpty(async); + + AssertSql( + """ +SELECT `u`.`FullName`, IIF(`u0`.`ThreatLevel` IS NULL, NULL, CLNG(`u0`.`ThreatLevel`)) AS `ThreatLevel` +FROM ( + SELECT `g`.`Nickname`, `g`.`FullName` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`FullName` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN ( + SELECT `l`.`ThreatLevel`, `l`.`DefeatedByNickname` + FROM `LocustCommanders` AS `l` +) AS `u0` ON `u`.`Nickname` = `u0`.`DefeatedByNickname` +"""); + } + + public override async Task Join_include_coalesce_simple(bool async) + { + await base.Join_include_coalesce_simple(async); + + AssertSql( + """ +SELECT `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator`, `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, IIF(`u`.`Nickname` = 'Marcus', TRUE, FALSE) +FROM (( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o0` +) AS `u0` ON `u`.`LeaderNickname` = `u0`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `u`.`FullName` = `w`.`OwnerFullName` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `u0`.`Nickname`, `u0`.`SquadId` +""", + // + """ +SELECT `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator`, `u`.`Nickname`, `u`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM (( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o0` +) AS `u0` ON `u`.`LeaderNickname` = `u0`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `u0`.`FullName` = `w`.`OwnerFullName` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `u0`.`Nickname`, `u0`.`SquadId` +""", + // + """ +SELECT `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator`, `u`.`Nickname`, `u`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` +FROM ((( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o0` +) AS `u0` ON `u`.`LeaderNickname` = `u0`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `u0`.`FullName` = `w`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w0` ON `u`.`FullName` = `w0`.`OwnerFullName` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `u0`.`Nickname`, `u0`.`SquadId`, `w`.`Id` +"""); + } + + public override async Task Join_include_coalesce_nested(bool async) + { + await base.Join_include_coalesce_nested(async); + + AssertSql( + """ +SELECT `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator`, `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, IIF(`u`.`Nickname` = 'Marcus', TRUE, FALSE) +FROM (( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o0` +) AS `u0` ON `u`.`LeaderNickname` = `u0`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `u`.`FullName` = `w`.`OwnerFullName` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `u0`.`Nickname`, `u0`.`SquadId` +""", + // + """ +SELECT `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator`, `u`.`Nickname`, `u`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `w1`.`Id`, `w1`.`AmmunitionType`, `w1`.`IsAutomatic`, `w1`.`Name`, `w1`.`OwnerFullName`, `w1`.`SynergyWithId` +FROM (((( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o0` +) AS `u0` ON `u`.`LeaderNickname` = `u0`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `u0`.`FullName` = `w`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w0` ON `u0`.`FullName` = `w0`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w1` ON `u0`.`FullName` = `w1`.`OwnerFullName` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `u0`.`Nickname`, `u0`.`SquadId`, `w`.`Id`, `w0`.`Id` +"""); + } + + public override async Task Join_include_conditional(bool async) + { + await base.Join_include_conditional(async); + + AssertSql( + """ +SELECT IIF(`u0`.`Nickname` IS NOT NULL AND `u0`.`SquadId` IS NOT NULL, TRUE, FALSE), `u0`.`Nickname`, `u0`.`SquadId`, `u0`.`AssignedCityName`, `u0`.`CityOfBirthName`, `u0`.`FullName`, `u0`.`HasSoulPatch`, `u0`.`LeaderNickname`, `u0`.`LeaderSquadId`, `u0`.`Rank`, `u0`.`Discriminator`, `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, IIF(`u`.`Nickname` = 'Marcus', TRUE, FALSE) +FROM (( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g0` + UNION ALL + SELECT `o0`.`Nickname`, `o0`.`SquadId`, `o0`.`AssignedCityName`, `o0`.`CityOfBirthName`, `o0`.`FullName`, `o0`.`HasSoulPatch`, `o0`.`LeaderNickname`, `o0`.`LeaderSquadId`, `o0`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o0` +) AS `u0` ON `u`.`LeaderNickname` = `u0`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `u`.`FullName` = `w`.`OwnerFullName` +ORDER BY `u`.`Nickname`, `u`.`SquadId`, `u0`.`Nickname`, `u0`.`SquadId` +"""); + } + + public override async Task Derived_reference_is_skipped_when_base_type(bool async) + { + await base.Derived_reference_is_skipped_when_base_type(async); + + AssertSql( + """ +SELECT `u`.`Name`, `u`.`LocustHordeId`, `u`.`ThreatLevel`, `u`.`ThreatLevelByte`, `u`.`ThreatLevelNullableByte`, `u`.`DefeatedByNickname`, `u`.`DefeatedBySquadId`, `u`.`HighCommandId`, `u`.`Discriminator`, `l1`.`Id`, `l1`.`IsOperational`, `l1`.`Name` +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` + FROM `LocustLeaders` AS `l` + UNION ALL + 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 `u` +LEFT JOIN `LocustHighCommands` AS `l1` ON IIF(`u`.`HighCommandId` IS NULL, NULL, CLNG(`u`.`HighCommandId`)) = `l1`.`Id` +"""); + } + + public override async Task Nested_contains_with_enum(bool async) + { + await base.Nested_contains_with_enum(async); + + AssertSql( + """ +@__key_1='5f221fb9-66f4-442a-92c9-d97ed5989cc7' +@__key_1='5f221fb9-66f4-442a-92c9-d97ed5989cc7' + +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` +FROM ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, 'Gear' AS `Discriminator` + FROM `Gears` AS `g` + UNION ALL + SELECT `o`.`Nickname`, `o`.`SquadId`, `o`.`AssignedCityName`, `o`.`CityOfBirthName`, `o`.`FullName`, `o`.`HasSoulPatch`, `o`.`LeaderNickname`, `o`.`LeaderSquadId`, `o`.`Rank`, 'Officer' AS `Discriminator` + FROM `Officers` AS `o` +) AS `u` +WHERE IIF(`u`.`Rank` = 1, @__key_1, @__key_1) IN ('{0a47bcb7-a1cb-4345-8944-c58f82d6aac7}', '{5f221fb9-66f4-442a-92c9-d97ed5989cc7}') +""", + // + """ +@__key_1='5f221fb9-66f4-442a-92c9-d97ed5989cc7' +@__key_1='5f221fb9-66f4-442a-92c9-d97ed5989cc7' + +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Weapons` AS `w` +WHERE IIF(`w`.`AmmunitionType` = 1, @__key_1, @__key_1) IN ('{0a47bcb7-a1cb-4345-8944-c58f82d6aac7}', '{5f221fb9-66f4-442a-92c9-d97ed5989cc7}') +"""); + } + private void AssertSql(params string[] expected) => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); } diff --git a/test/EFCore.Jet.FunctionalTests/Query/TPCInheritanceQueryJetTestBase.cs b/test/EFCore.Jet.FunctionalTests/Query/TPCInheritanceQueryJetTestBase.cs index 7e21261b..11cf72f0 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/TPCInheritanceQueryJetTestBase.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/TPCInheritanceQueryJetTestBase.cs @@ -19,7 +19,7 @@ protected TPCInheritanceQueryJetTestBase(TFixture fixture, ITestOutputHelper tes [ConditionalFact] public virtual void Check_all_tests_overridden() - => TestHelpers.AssertAllMethodsOverridden(GetType().BaseType); + => TestHelpers.AssertAllMethodsOverridden(GetType().BaseType!); public override async Task Byte_enum_value_constant_used_in_projection(bool async) { @@ -38,16 +38,16 @@ public override async Task Can_filter_all_animals(bool async) AssertSql( """ -SELECT `t`.`Id`, `t`.`CountryId`, `t`.`Name`, `t`.`Species`, `t`.`EagleId`, `t`.`IsFlightless`, `t`.`Group`, `t`.`FoundOn`, `t`.`Discriminator` +SELECT `u`.`Id`, `u`.`CountryId`, `u`.`Name`, `u`.`Species`, `u`.`EagleId`, `u`.`IsFlightless`, `u`.`Group`, `u`.`FoundOn`, `u`.`Discriminator` FROM ( SELECT `e`.`Id`, `e`.`CountryId`, `e`.`Name`, `e`.`Species`, `e`.`EagleId`, `e`.`IsFlightless`, `e`.`Group`, CVar(NULL) AS `FoundOn`, 'Eagle' AS `Discriminator` FROM `Eagle` AS `e` UNION ALL SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, CVar(NULL) AS `Group`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` FROM `Kiwi` AS `k` -) AS `t` -WHERE `t`.`Name` = 'Great spotted kiwi' -ORDER BY `t`.`Species` +) AS `u` +WHERE `u`.`Name` = 'Great spotted kiwi' +ORDER BY `u`.`Species` """); } @@ -57,7 +57,7 @@ public override async Task Can_include_animals(bool async) AssertSql( """ -SELECT `c`.`Id`, `c`.`Name`, `t`.`Id`, `t`.`CountryId`, `t`.`Name`, `t`.`Species`, `t`.`EagleId`, `t`.`IsFlightless`, `t`.`Group`, `t`.`FoundOn`, `t`.`Discriminator` +SELECT `c`.`Id`, `c`.`Name`, `u`.`Id`, `u`.`CountryId`, `u`.`Name`, `u`.`Species`, `u`.`EagleId`, `u`.`IsFlightless`, `u`.`Group`, `u`.`FoundOn`, `u`.`Discriminator` FROM `Countries` AS `c` LEFT JOIN ( SELECT `e`.`Id`, `e`.`CountryId`, `e`.`Name`, `e`.`Species`, `e`.`EagleId`, `e`.`IsFlightless`, `e`.`Group`, CVar(NULL) AS `FoundOn`, 'Eagle' AS `Discriminator` @@ -65,7 +65,7 @@ LEFT JOIN ( UNION ALL SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, CVar(NULL) AS `Group`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` FROM `Kiwi` AS `k` -) AS `t` ON `c`.`Id` = `t`.`CountryId` +) AS `u` ON `c`.`Id` = `u`.`CountryId` ORDER BY `c`.`Name`, `c`.`Id` """); } @@ -76,24 +76,24 @@ public override async Task Can_include_prey(bool async) AssertSql( """ -SELECT `t`.`Id`, `t`.`CountryId`, `t`.`Name`, `t`.`Species`, `t`.`EagleId`, `t`.`IsFlightless`, `t`.`Group`, `t0`.`Id`, `t0`.`CountryId`, `t0`.`Name`, `t0`.`Species`, `t0`.`EagleId`, `t0`.`IsFlightless`, `t0`.`Group`, `t0`.`FoundOn`, `t0`.`Discriminator` +SELECT `e1`.`Id`, `e1`.`CountryId`, `e1`.`Name`, `e1`.`Species`, `e1`.`EagleId`, `e1`.`IsFlightless`, `e1`.`Group`, `u`.`Id`, `u`.`CountryId`, `u`.`Name`, `u`.`Species`, `u`.`EagleId`, `u`.`IsFlightless`, `u`.`Group`, `u`.`FoundOn`, `u`.`Discriminator` FROM ( SELECT TOP 2 `e`.`Id`, `e`.`CountryId`, `e`.`Name`, `e`.`Species`, `e`.`EagleId`, `e`.`IsFlightless`, `e`.`Group` FROM `Eagle` AS `e` -) AS `t` +) AS `e1` LEFT JOIN ( SELECT `e0`.`Id`, `e0`.`CountryId`, `e0`.`Name`, `e0`.`Species`, `e0`.`EagleId`, `e0`.`IsFlightless`, `e0`.`Group`, CVar(NULL) AS `FoundOn`, 'Eagle' AS `Discriminator` FROM `Eagle` AS `e0` UNION ALL SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, CVar(NULL) AS `Group`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` FROM `Kiwi` AS `k` -) AS `t0` ON `t`.`Id` = `t0`.`EagleId` -ORDER BY `t`.`Id` +) AS `u` ON `e1`.`Id` = `u`.`EagleId` +ORDER BY `e1`.`Id` """); } - public override void Can_insert_update_delete() - => base.Can_insert_update_delete(); + public override async Task Can_insert_update_delete() + => await base.Can_insert_update_delete(); public override async Task Can_query_all_animals(bool async) { @@ -101,15 +101,15 @@ public override async Task Can_query_all_animals(bool async) AssertSql( """ -SELECT `t`.`Id`, `t`.`CountryId`, `t`.`Name`, `t`.`Species`, `t`.`EagleId`, `t`.`IsFlightless`, `t`.`Group`, `t`.`FoundOn`, `t`.`Discriminator` +SELECT `u`.`Id`, `u`.`CountryId`, `u`.`Name`, `u`.`Species`, `u`.`EagleId`, `u`.`IsFlightless`, `u`.`Group`, `u`.`FoundOn`, `u`.`Discriminator` FROM ( SELECT `e`.`Id`, `e`.`CountryId`, `e`.`Name`, `e`.`Species`, `e`.`EagleId`, `e`.`IsFlightless`, `e`.`Group`, CVar(NULL) AS `FoundOn`, 'Eagle' AS `Discriminator` FROM `Eagle` AS `e` UNION ALL SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, CVar(NULL) AS `Group`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` FROM `Kiwi` AS `k` -) AS `t` -ORDER BY `t`.`Species` +) AS `u` +ORDER BY `u`.`Species` """); } @@ -119,15 +119,15 @@ public override async Task Can_query_all_birds(bool async) AssertSql( """ -SELECT `t`.`Id`, `t`.`CountryId`, `t`.`Name`, `t`.`Species`, `t`.`EagleId`, `t`.`IsFlightless`, `t`.`Group`, `t`.`FoundOn`, `t`.`Discriminator` +SELECT `u`.`Id`, `u`.`CountryId`, `u`.`Name`, `u`.`Species`, `u`.`EagleId`, `u`.`IsFlightless`, `u`.`Group`, `u`.`FoundOn`, `u`.`Discriminator` FROM ( SELECT `e`.`Id`, `e`.`CountryId`, `e`.`Name`, `e`.`Species`, `e`.`EagleId`, `e`.`IsFlightless`, `e`.`Group`, CVar(NULL) AS `FoundOn`, 'Eagle' AS `Discriminator` FROM `Eagle` AS `e` UNION ALL SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, CVar(NULL) AS `Group`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` FROM `Kiwi` AS `k` -) AS `t` -ORDER BY `t`.`Species` +) AS `u` +ORDER BY `u`.`Species` """); } @@ -137,15 +137,15 @@ public override async Task Can_query_all_plants(bool async) AssertSql( """ -SELECT `t`.`Species`, `t`.`CountryId`, `t`.`Genus`, `t`.`Name`, `t`.`HasThorns`, `t`.`AdditionalInfo_Nickname`, `t`.`AdditionalInfo_LeafStructure_AreLeavesBig`, `t`.`AdditionalInfo_LeafStructure_NumLeaves`, `t`.`Discriminator` +SELECT `u`.`Species`, `u`.`CountryId`, `u`.`Genus`, `u`.`Name`, `u`.`HasThorns`, `u`.`AdditionalInfo_Nickname`, `u`.`AdditionalInfo_LeafStructure_AreLeavesBig`, `u`.`AdditionalInfo_LeafStructure_NumLeaves`, `u`.`Discriminator` FROM ( SELECT `d`.`Species`, `d`.`CountryId`, `d`.`Genus`, `d`.`Name`, `d`.`AdditionalInfo_Nickname`, `d`.`AdditionalInfo_LeafStructure_AreLeavesBig`, `d`.`AdditionalInfo_LeafStructure_NumLeaves`, CVar(NULL) AS `HasThorns`, 'Daisy' AS `Discriminator` FROM `Daisies` AS `d` UNION ALL SELECT `r`.`Species`, `r`.`CountryId`, `r`.`Genus`, `r`.`Name`, NULL AS `AdditionalInfo_Nickname`, CVar(NULL) AS `AdditionalInfo_LeafStructure_AreLeavesBig`, CVar(NULL) AS `AdditionalInfo_LeafStructure_NumLeaves`, `r`.`HasThorns`, 'Rose' AS `Discriminator` FROM `Roses` AS `r` -) AS `t` -ORDER BY `t`.`Species` +) AS `u` +ORDER BY `u`.`Species` """); } @@ -176,8 +176,8 @@ UNION ALL SELECT `l`.`Id`, `l`.`SortIndex`, CVar(NULL) AS `CaffeineGrams`, CVar(NULL) AS `CokeCO2`, CVar(NULL) AS `SugarGrams`, `l`.`LiltCO2`, `l`.`SugarGrams` AS `SugarGrams0`, CVar(NULL) AS `CaffeineGrams0`, CVar(NULL) AS `HasMilk`, 'Lilt' AS `Discriminator` FROM `Lilt` AS `l` UNION ALL -SELECT `t0`.`Id`, `t0`.`SortIndex`, CVar(NULL) AS `CaffeineGrams`, CVar(NULL) AS `CokeCO2`, CVar(NULL) AS `SugarGrams`, CVar(NULL) AS `LiltCO2`, CVar(NULL) AS `SugarGrams0`, `t0`.`CaffeineGrams` AS `CaffeineGrams0`, `t0`.`HasMilk`, 'Tea' AS `Discriminator` -FROM `Tea` AS `t0` +SELECT `t`.`Id`, `t`.`SortIndex`, CVar(NULL) AS `CaffeineGrams`, CVar(NULL) AS `CokeCO2`, CVar(NULL) AS `SugarGrams`, CVar(NULL) AS `LiltCO2`, CVar(NULL) AS `SugarGrams0`, `t`.`CaffeineGrams` AS `CaffeineGrams0`, `t`.`HasMilk`, 'Tea' AS `Discriminator` +FROM `Tea` AS `t` """); } @@ -263,14 +263,14 @@ public override async Task Can_use_is_kiwi_with_cast(bool async) AssertSql( """ -SELECT IIF(`t`.`Discriminator` = 'Kiwi', `t`.`FoundOn`, CBYTE(0)) AS `Value` +SELECT IIF(`u`.`Discriminator` = 'Kiwi', `u`.`FoundOn`, CBYTE(0)) AS `Value` FROM ( SELECT CVar(NULL) AS `FoundOn`, 'Eagle' AS `Discriminator` FROM `Eagle` AS `e` UNION ALL SELECT `k`.`FoundOn`, 'Kiwi' AS `Discriminator` FROM `Kiwi` AS `k` -) AS `t` +) AS `u` """); } @@ -280,14 +280,14 @@ public override async Task Can_use_is_kiwi_in_projection(bool async) AssertSql( """ -SELECT IIF(`t`.`Discriminator` = 'Kiwi', TRUE, FALSE) +SELECT IIF(`u`.`Discriminator` = 'Kiwi', TRUE, FALSE) FROM ( SELECT 'Eagle' AS `Discriminator` FROM `Eagle` AS `e` UNION ALL SELECT 'Kiwi' AS `Discriminator` FROM `Kiwi` AS `k` -) AS `t` +) AS `u` """); } @@ -297,15 +297,15 @@ public override async Task Can_use_is_kiwi_with_other_predicate(bool async) AssertSql( """ -SELECT `t`.`Id`, `t`.`CountryId`, `t`.`Name`, `t`.`Species`, `t`.`EagleId`, `t`.`IsFlightless`, `t`.`Group`, `t`.`FoundOn`, `t`.`Discriminator` +SELECT `u`.`Id`, `u`.`CountryId`, `u`.`Name`, `u`.`Species`, `u`.`EagleId`, `u`.`IsFlightless`, `u`.`Group`, `u`.`FoundOn`, `u`.`Discriminator` FROM ( SELECT `e`.`Id`, `e`.`CountryId`, `e`.`Name`, `e`.`Species`, `e`.`EagleId`, `e`.`IsFlightless`, `e`.`Group`, CVar(NULL) AS `FoundOn`, 'Eagle' AS `Discriminator` FROM `Eagle` AS `e` UNION ALL SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, CVar(NULL) AS `Group`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` FROM `Kiwi` AS `k` -) AS `t` -WHERE `t`.`Discriminator` = 'Kiwi' AND `t`.`CountryId` = 1 +) AS `u` +WHERE `u`.`Discriminator` = 'Kiwi' AND `u`.`CountryId` = 1 """); } @@ -315,15 +315,15 @@ public override async Task Can_use_of_type_animal(bool async) AssertSql( """ -SELECT `t`.`Id`, `t`.`CountryId`, `t`.`Name`, `t`.`Species`, `t`.`EagleId`, `t`.`IsFlightless`, `t`.`Group`, `t`.`FoundOn`, `t`.`Discriminator` +SELECT `u`.`Id`, `u`.`CountryId`, `u`.`Name`, `u`.`Species`, `u`.`EagleId`, `u`.`IsFlightless`, `u`.`Group`, `u`.`FoundOn`, `u`.`Discriminator` FROM ( SELECT `e`.`Id`, `e`.`CountryId`, `e`.`Name`, `e`.`Species`, `e`.`EagleId`, `e`.`IsFlightless`, `e`.`Group`, CVar(NULL) AS `FoundOn`, 'Eagle' AS `Discriminator` FROM `Eagle` AS `e` UNION ALL SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, CVar(NULL) AS `Group`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` FROM `Kiwi` AS `k` -) AS `t` -ORDER BY `t`.`Species` +) AS `u` +ORDER BY `u`.`Species` """); } @@ -333,15 +333,15 @@ public override async Task Can_use_of_type_bird(bool async) AssertSql( """ -SELECT `t`.`Id`, `t`.`CountryId`, `t`.`Name`, `t`.`Species`, `t`.`EagleId`, `t`.`IsFlightless`, `t`.`Group`, `t`.`FoundOn`, `t`.`Discriminator` +SELECT `u`.`Id`, `u`.`CountryId`, `u`.`Name`, `u`.`Species`, `u`.`EagleId`, `u`.`IsFlightless`, `u`.`Group`, `u`.`FoundOn`, `u`.`Discriminator` FROM ( SELECT `e`.`Id`, `e`.`CountryId`, `e`.`Name`, `e`.`Species`, `e`.`EagleId`, `e`.`IsFlightless`, `e`.`Group`, CVar(NULL) AS `FoundOn`, 'Eagle' AS `Discriminator` FROM `Eagle` AS `e` UNION ALL SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, CVar(NULL) AS `Group`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` FROM `Kiwi` AS `k` -) AS `t` -ORDER BY `t`.`Species` +) AS `u` +ORDER BY `u`.`Species` """); } @@ -351,15 +351,15 @@ public override async Task Can_use_of_type_bird_first(bool async) AssertSql( """ -SELECT TOP 1 `t`.`Id`, `t`.`CountryId`, `t`.`Name`, `t`.`Species`, `t`.`EagleId`, `t`.`IsFlightless`, `t`.`Group`, `t`.`FoundOn`, `t`.`Discriminator` +SELECT TOP 1 `u`.`Id`, `u`.`CountryId`, `u`.`Name`, `u`.`Species`, `u`.`EagleId`, `u`.`IsFlightless`, `u`.`Group`, `u`.`FoundOn`, `u`.`Discriminator` FROM ( SELECT `e`.`Id`, `e`.`CountryId`, `e`.`Name`, `e`.`Species`, `e`.`EagleId`, `e`.`IsFlightless`, `e`.`Group`, CVar(NULL) AS `FoundOn`, 'Eagle' AS `Discriminator` FROM `Eagle` AS `e` UNION ALL SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, CVar(NULL) AS `Group`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` FROM `Kiwi` AS `k` -) AS `t` -ORDER BY `t`.`Species` +) AS `u` +ORDER BY `u`.`Species` """); } @@ -369,16 +369,16 @@ public override async Task Can_use_of_type_bird_predicate(bool async) AssertSql( """ -SELECT `t`.`Id`, `t`.`CountryId`, `t`.`Name`, `t`.`Species`, `t`.`EagleId`, `t`.`IsFlightless`, `t`.`Group`, `t`.`FoundOn`, `t`.`Discriminator` +SELECT `u`.`Id`, `u`.`CountryId`, `u`.`Name`, `u`.`Species`, `u`.`EagleId`, `u`.`IsFlightless`, `u`.`Group`, `u`.`FoundOn`, `u`.`Discriminator` FROM ( SELECT `e`.`Id`, `e`.`CountryId`, `e`.`Name`, `e`.`Species`, `e`.`EagleId`, `e`.`IsFlightless`, `e`.`Group`, CVar(NULL) AS `FoundOn`, 'Eagle' AS `Discriminator` FROM `Eagle` AS `e` UNION ALL SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, CVar(NULL) AS `Group`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` FROM `Kiwi` AS `k` -) AS `t` -WHERE `t`.`CountryId` = 1 -ORDER BY `t`.`Species` +) AS `u` +WHERE `u`.`CountryId` = 1 +ORDER BY `u`.`Species` """); } @@ -413,12 +413,12 @@ public override async Task Can_use_of_type_kiwi_where_north_on_derived_property( AssertSql( """ -SELECT `t`.`Id`, `t`.`CountryId`, `t`.`Name`, `t`.`Species`, `t`.`EagleId`, `t`.`IsFlightless`, `t`.`FoundOn`, `t`.`Discriminator` +SELECT `u`.`Id`, `u`.`CountryId`, `u`.`Name`, `u`.`Species`, `u`.`EagleId`, `u`.`IsFlightless`, `u`.`FoundOn`, `u`.`Discriminator` FROM ( SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` FROM `Kiwi` AS `k` -) AS `t` -WHERE `t`.`FoundOn` = CBYTE(0) +) AS `u` +WHERE `u`.`FoundOn` = CBYTE(0) """); } @@ -428,12 +428,12 @@ public override async Task Can_use_of_type_kiwi_where_south_on_derived_property( AssertSql( """ -SELECT `t`.`Id`, `t`.`CountryId`, `t`.`Name`, `t`.`Species`, `t`.`EagleId`, `t`.`IsFlightless`, `t`.`FoundOn`, `t`.`Discriminator` +SELECT `u`.`Id`, `u`.`CountryId`, `u`.`Name`, `u`.`Species`, `u`.`EagleId`, `u`.`IsFlightless`, `u`.`FoundOn`, `u`.`Discriminator` FROM ( SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` FROM `Kiwi` AS `k` -) AS `t` -WHERE `t`.`FoundOn` = CBYTE(1) +) AS `u` +WHERE `u`.`FoundOn` = CBYTE(1) """); } @@ -448,9 +448,9 @@ public override async Task Can_use_of_type_rose(bool async) """); } - public override void Member_access_on_intermediate_type_works() + public override async Task Member_access_on_intermediate_type_works() { - base.Member_access_on_intermediate_type_works(); + await base.Member_access_on_intermediate_type_works(); AssertSql( """ @@ -474,8 +474,8 @@ public override async Task OfType_Union_subquery(bool async) AssertSql(); } - public override void Setting_foreign_key_to_a_different_type_throws() - => base.Setting_foreign_key_to_a_different_type_throws(); + public override async Task Setting_foreign_key_to_a_different_type_throws() + => await base.Setting_foreign_key_to_a_different_type_throws(); public override async Task Subquery_OfType(bool async) { @@ -483,19 +483,19 @@ public override async Task Subquery_OfType(bool async) AssertSql( """ -SELECT DISTINCT `t0`.`Id`, `t0`.`CountryId`, `t0`.`Name`, `t0`.`Species`, `t0`.`EagleId`, `t0`.`IsFlightless`, `t0`.`FoundOn`, `t0`.`Discriminator` +SELECT DISTINCT `u0`.`Id`, `u0`.`CountryId`, `u0`.`Name`, `u0`.`Species`, `u0`.`EagleId`, `u0`.`IsFlightless`, `u0`.`FoundOn`, `u0`.`Discriminator` FROM ( - SELECT TOP 5 `t`.`Id`, `t`.`CountryId`, `t`.`Name`, `t`.`Species`, `t`.`EagleId`, `t`.`IsFlightless`, `t`.`FoundOn`, `t`.`Discriminator` + SELECT TOP 5 `u`.`Id`, `u`.`CountryId`, `u`.`Name`, `u`.`Species`, `u`.`EagleId`, `u`.`IsFlightless`, `u`.`FoundOn`, `u`.`Discriminator` FROM ( SELECT `e`.`Id`, `e`.`CountryId`, `e`.`Name`, `e`.`Species`, `e`.`EagleId`, `e`.`IsFlightless`, CVar(NULL) AS `FoundOn`, 'Eagle' AS `Discriminator` FROM `Eagle` AS `e` UNION ALL SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` FROM `Kiwi` AS `k` - ) AS `t` - ORDER BY `t`.`Species` -) AS `t0` -WHERE `t0`.`Discriminator` = 'Kiwi' + ) AS `u` + ORDER BY `u`.`Species` +) AS `u0` +WHERE `u0`.`Discriminator` = 'Kiwi' """); } @@ -519,29 +519,29 @@ public override async Task Is_operator_on_result_of_FirstOrDefault(bool async) AssertSql( """ -SELECT `t`.`Id`, `t`.`CountryId`, `t`.`Name`, `t`.`Species`, `t`.`EagleId`, `t`.`IsFlightless`, `t`.`Group`, `t`.`FoundOn`, `t`.`Discriminator` +SELECT `u`.`Id`, `u`.`CountryId`, `u`.`Name`, `u`.`Species`, `u`.`EagleId`, `u`.`IsFlightless`, `u`.`Group`, `u`.`FoundOn`, `u`.`Discriminator` FROM ( SELECT `e`.`Id`, `e`.`CountryId`, `e`.`Name`, `e`.`Species`, `e`.`EagleId`, `e`.`IsFlightless`, `e`.`Group`, CVar(NULL) AS `FoundOn`, 'Eagle' AS `Discriminator` FROM `Eagle` AS `e` UNION ALL SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, CVar(NULL) AS `Group`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` FROM `Kiwi` AS `k` -) AS `t` +) AS `u` WHERE EXISTS ( SELECT 1 FROM ( - SELECT TOP 1 `t1`.`Id`, `t1`.`CountryId`, `t1`.`Name`, `t1`.`Species`, `t1`.`EagleId`, `t1`.`IsFlightless`, `t1`.`Group`, `t1`.`FoundOn`, `t1`.`Discriminator` + SELECT TOP 1 `u0`.`Discriminator` FROM ( - SELECT `e0`.`Id`, `e0`.`CountryId`, `e0`.`Name`, `e0`.`Species`, `e0`.`EagleId`, `e0`.`IsFlightless`, `e0`.`Group`, CVar(NULL) AS `FoundOn`, 'Eagle' AS `Discriminator` + SELECT `e0`.`Name`, 'Eagle' AS `Discriminator` FROM `Eagle` AS `e0` UNION ALL - SELECT `k0`.`Id`, `k0`.`CountryId`, `k0`.`Name`, `k0`.`Species`, `k0`.`EagleId`, `k0`.`IsFlightless`, CVar(NULL) AS `Group`, `k0`.`FoundOn`, 'Kiwi' AS `Discriminator` + SELECT `k0`.`Name`, 'Kiwi' AS `Discriminator` FROM `Kiwi` AS `k0` - ) AS `t1` - WHERE `t1`.`Name` = 'Great spotted kiwi' - ) AS `t0` - WHERE `t0`.`Discriminator` = 'Kiwi') -ORDER BY `t`.`Species` + ) AS `u0` + WHERE `u0`.`Name` = 'Great spotted kiwi' + ) AS `u1` + WHERE `u1`.`Discriminator` = 'Kiwi') +ORDER BY `u`.`Species` """); } @@ -621,12 +621,12 @@ public override async Task Using_is_operator_on_multiple_type_with_no_result(boo AssertSql( """ -SELECT `t`.`Id`, `t`.`CountryId`, `t`.`Name`, `t`.`Species`, `t`.`EagleId`, `t`.`IsFlightless`, `t`.`Group`, `t`.`FoundOn`, `t`.`Discriminator` +SELECT `u`.`Id`, `u`.`CountryId`, `u`.`Name`, `u`.`Species`, `u`.`EagleId`, `u`.`IsFlightless`, `u`.`Group`, `u`.`FoundOn`, `u`.`Discriminator` FROM ( SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, CVar(NULL) AS `Group`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` FROM `Kiwi` AS `k` -) AS `t` -WHERE `t`.`Discriminator` = 'Eagle' +) AS `u` +WHERE `u`.`Discriminator` = 'Eagle' """); } @@ -636,12 +636,12 @@ public override async Task Using_is_operator_with_of_type_on_multiple_type_with_ AssertSql( """ -SELECT `t`.`Id`, `t`.`CountryId`, `t`.`Name`, `t`.`Species`, `t`.`EagleId`, `t`.`IsFlightless`, `t`.`Group`, `t`.`Discriminator` +SELECT `u`.`Id`, `u`.`CountryId`, `u`.`Name`, `u`.`Species`, `u`.`EagleId`, `u`.`IsFlightless`, `u`.`Group`, `u`.`Discriminator` FROM ( SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, CVar(NULL) AS `Group`, 'Kiwi' AS `Discriminator` FROM `Kiwi` AS `k` -) AS `t` -WHERE `t`.`Discriminator` = 'Eagle' +) AS `u` +WHERE `u`.`Discriminator` = 'Eagle' """); } @@ -658,14 +658,14 @@ public override async Task GetType_in_hierarchy_in_abstract_base_type(bool async AssertSql( """ -SELECT `t`.`Id`, `t`.`CountryId`, `t`.`Name`, `t`.`Species`, `t`.`EagleId`, `t`.`IsFlightless`, `t`.`Group`, `t`.`FoundOn`, `t`.`Discriminator` +SELECT `u`.`Id`, `u`.`CountryId`, `u`.`Name`, `u`.`Species`, `u`.`EagleId`, `u`.`IsFlightless`, `u`.`Group`, `u`.`FoundOn`, `u`.`Discriminator` FROM ( SELECT `e`.`Id`, `e`.`CountryId`, `e`.`Name`, `e`.`Species`, `e`.`EagleId`, `e`.`IsFlightless`, `e`.`Group`, CVar(NULL) AS `FoundOn`, 'Eagle' AS `Discriminator` FROM `Eagle` AS `e` UNION ALL SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, CVar(NULL) AS `Group`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` FROM `Kiwi` AS `k` -) AS `t` +) AS `u` WHERE 0 = 1 """); } @@ -676,14 +676,14 @@ public override async Task GetType_in_hierarchy_in_intermediate_type(bool async) AssertSql( """ -SELECT `t`.`Id`, `t`.`CountryId`, `t`.`Name`, `t`.`Species`, `t`.`EagleId`, `t`.`IsFlightless`, `t`.`Group`, `t`.`FoundOn`, `t`.`Discriminator` +SELECT `u`.`Id`, `u`.`CountryId`, `u`.`Name`, `u`.`Species`, `u`.`EagleId`, `u`.`IsFlightless`, `u`.`Group`, `u`.`FoundOn`, `u`.`Discriminator` FROM ( SELECT `e`.`Id`, `e`.`CountryId`, `e`.`Name`, `e`.`Species`, `e`.`EagleId`, `e`.`IsFlightless`, `e`.`Group`, CVar(NULL) AS `FoundOn`, 'Eagle' AS `Discriminator` FROM `Eagle` AS `e` UNION ALL SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, CVar(NULL) AS `Group`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` FROM `Kiwi` AS `k` -) AS `t` +) AS `u` WHERE 0 = 1 """); } @@ -727,15 +727,15 @@ public override async Task GetType_in_hierarchy_in_leaf_type_with_sibling2_not_e AssertSql( """ -SELECT `t`.`Id`, `t`.`CountryId`, `t`.`Name`, `t`.`Species`, `t`.`EagleId`, `t`.`IsFlightless`, `t`.`Group`, `t`.`FoundOn`, `t`.`Discriminator` +SELECT `u`.`Id`, `u`.`CountryId`, `u`.`Name`, `u`.`Species`, `u`.`EagleId`, `u`.`IsFlightless`, `u`.`Group`, `u`.`FoundOn`, `u`.`Discriminator` FROM ( SELECT `e`.`Id`, `e`.`CountryId`, `e`.`Name`, `e`.`Species`, `e`.`EagleId`, `e`.`IsFlightless`, `e`.`Group`, CVar(NULL) AS `FoundOn`, 'Eagle' AS `Discriminator` FROM `Eagle` AS `e` UNION ALL SELECT `k`.`Id`, `k`.`CountryId`, `k`.`Name`, `k`.`Species`, `k`.`EagleId`, `k`.`IsFlightless`, CVar(NULL) AS `Group`, `k`.`FoundOn`, 'Kiwi' AS `Discriminator` FROM `Kiwi` AS `k` -) AS `t` -WHERE `t`.`Discriminator` <> 'Kiwi' +) AS `u` +WHERE `u`.`Discriminator` <> 'Kiwi' """); } diff --git a/test/EFCore.Jet.FunctionalTests/Query/TPCManyToManyNoTrackingQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/TPCManyToManyNoTrackingQueryJetTest.cs index 2f66030b..6e582105 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/TPCManyToManyNoTrackingQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/TPCManyToManyNoTrackingQueryJetTest.cs @@ -19,9 +19,6 @@ public TPCManyToManyNoTrackingQueryJetTest(TPCManyToManyQueryJetFixture fixture, Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); } - protected override bool CanExecuteQueryString - => false; - [ConditionalFact] public virtual void Check_all_tests_overridden() => TestHelpers.AssertAllMethodsOverridden(GetType()); @@ -112,22 +109,22 @@ public override async Task Skip_navigation_count_with_predicate(bool async) AssertSql( """ -SELECT `t3`.`Id`, `t3`.`Name`, `t3`.`c` +SELECT `e0`.`Id`, `e0`.`Name`, `e0`.`c` FROM ( SELECT `e`.`Id`, `e`.`Name`, ( SELECT COUNT(*) - FROM `JoinOneToBranch` AS `j0` + FROM `JoinOneToBranch` AS `j` INNER JOIN ( - SELECT `b0`.`Id`, `b0`.`Name`, `b0`.`Number`, CVar(NULL) AS `IsGreen`, 'EntityBranch' AS `Discriminator` - FROM `Branches` AS `b0` + SELECT `b`.`Id`, `b`.`Name` + FROM `Branches` AS `b` UNION ALL - SELECT `l0`.`Id`, `l0`.`Name`, `l0`.`Number`, `l0`.`IsGreen`, 'EntityLeaf' AS `Discriminator` - FROM `Leaves` AS `l0` - ) AS `t1` ON `j0`.`EntityBranchId` = `t1`.`Id` - WHERE `e`.`Id` = `j0`.`EntityOneId` AND (`t1`.`Name` LIKE 'L%')) AS `c` + SELECT `l`.`Id`, `l`.`Name` + FROM `Leaves` AS `l` + ) AS `u` ON `j`.`EntityBranchId` = `u`.`Id` + WHERE `e`.`Id` = `j`.`EntityOneId` AND (`u`.`Name` LIKE 'L%')) AS `c` FROM `EntityOnes` AS `e` -) AS `t3` -ORDER BY `t3`.`c`, `t3`.`Id` +) AS `e0` +ORDER BY `e0`.`c`, `e0`.`Id` """); } @@ -153,16 +150,16 @@ public override async Task Skip_navigation_long_count_with_predicate(bool async) AssertSql( """ -SELECT `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name`, `t`.`ReferenceInverseId`, `t`.`c` +SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e2`.`c` FROM ( SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, ( SELECT COUNT(*) - FROM `EntityTwoEntityTwo` AS `e2` - INNER JOIN `EntityTwos` AS `e3` ON `e2`.`SelfSkipSharedLeftId` = `e3`.`Id` - WHERE `e`.`Id` = `e2`.`SelfSkipSharedRightId` AND (`e3`.`Name` LIKE 'L%')) AS `c` + FROM `EntityTwoEntityTwo` AS `e0` + INNER JOIN `EntityTwos` AS `e1` ON `e0`.`SelfSkipSharedLeftId` = `e1`.`Id` + WHERE `e`.`Id` = `e0`.`SelfSkipSharedRightId` AND (`e1`.`Name` LIKE 'L%')) AS `c` FROM `EntityTwos` AS `e` -) AS `t` -ORDER BY `t`.`c` DESC, `t`.`Id` +) AS `e2` +ORDER BY `e2`.`c` DESC, `e2`.`Id` """); } @@ -171,14 +168,14 @@ public override async Task Skip_navigation_select_many_average(bool async) await base.Skip_navigation_select_many_average(async); AssertSql( -""" -SELECT AVG(CDBL(`t`.`Key1`)) + """ +SELECT AVG(CDBL(`s`.`Key1`)) FROM `EntityTwos` AS `e` INNER JOIN ( SELECT `e1`.`Key1`, `e0`.`TwoSkipSharedId` FROM `EntityCompositeKeyEntityTwo` AS `e0` INNER JOIN `EntityCompositeKeys` AS `e1` ON `e0`.`CompositeKeySkipSharedKey1` = `e1`.`Key1` AND `e0`.`CompositeKeySkipSharedKey2` = `e1`.`Key2` AND `e0`.`CompositeKeySkipSharedKey3` = `e1`.`Key3` -) AS `t` ON `e`.`Id` = `t`.`TwoSkipSharedId` +) AS `s` ON `e`.`Id` = `s`.`TwoSkipSharedId` """); } @@ -187,14 +184,14 @@ public override async Task Skip_navigation_select_many_max(bool async) await base.Skip_navigation_select_many_max(async); AssertSql( -""" -SELECT MAX(`t`.`Key1`) + """ +SELECT MAX(`s`.`Key1`) FROM `EntityThrees` AS `e` INNER JOIN ( SELECT `e0`.`Key1`, `j`.`ThreeId` FROM `JoinThreeToCompositeKeyFull` AS `j` INNER JOIN `EntityCompositeKeys` AS `e0` ON `j`.`CompositeId1` = `e0`.`Key1` AND `j`.`CompositeId2` = `e0`.`Key2` AND `j`.`CompositeId3` = `e0`.`Key3` -) AS `t` ON `e`.`Id` = `t`.`ThreeId` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` """); } @@ -203,11 +200,11 @@ public override async Task Skip_navigation_select_many_min(bool async) await base.Skip_navigation_select_many_min(async); AssertSql( -""" -SELECT MIN(`t0`.`Id`) + """ +SELECT MIN(`s`.`Id`) FROM `EntityThrees` AS `e` INNER JOIN ( - SELECT `t`.`Id`, `e0`.`ThreeSkipSharedId` + SELECT `u`.`Id`, `e0`.`ThreeSkipSharedId` FROM `EntityRootEntityThree` AS `e0` INNER JOIN ( SELECT `r`.`Id` @@ -221,8 +218,8 @@ UNION ALL UNION ALL SELECT `l0`.`Id` FROM `Leaf2s` AS `l0` - ) AS `t` ON `e0`.`RootSkipSharedId` = `t`.`Id` -) AS `t0` ON `e`.`Id` = `t0`.`ThreeSkipSharedId` + ) AS `u` ON `e0`.`RootSkipSharedId` = `u`.`Id` +) AS `s` ON `e`.`Id` = `s`.`ThreeSkipSharedId` """); } @@ -231,8 +228,8 @@ public override async Task Skip_navigation_select_many_sum(bool async) await base.Skip_navigation_select_many_sum(async); AssertSql( -""" -SELECT IIF(SUM(`t0`.`Key1`) IS NULL, 0, SUM(`t0`.`Key1`)) + """ +SELECT IIF(SUM(`s`.`Key1`) IS NULL, 0, SUM(`s`.`Key1`)) FROM ( SELECT `r`.`Id` FROM `Roots` AS `r` @@ -245,12 +242,12 @@ UNION ALL UNION ALL SELECT `l0`.`Id` FROM `Leaf2s` AS `l0` -) AS `t` +) AS `u` INNER JOIN ( SELECT `e0`.`Key1`, `e`.`RootSkipSharedId` FROM `EntityCompositeKeyEntityRoot` AS `e` INNER JOIN `EntityCompositeKeys` AS `e0` ON `e`.`CompositeKeySkipSharedKey1` = `e0`.`Key1` AND `e`.`CompositeKeySkipSharedKey2` = `e0`.`Key2` AND `e`.`CompositeKeySkipSharedKey3` = `e0`.`Key3` -) AS `t0` ON `t`.`Id` = `t0`.`RootSkipSharedId` +) AS `s` ON `u`.`Id` = `s`.`RootSkipSharedId` """); } @@ -407,15 +404,15 @@ public override async Task Skip_navigation_cast(bool async) await base.Skip_navigation_cast(async); AssertSql( -""" -SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `t`.`Id`, `t`.`Name`, `t`.`Number`, `t`.`IsGreen`, `t`.`LeafId`, `t`.`CompositeId1`, `t`.`CompositeId2`, `t`.`CompositeId3` + """ +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3` FROM `EntityCompositeKeys` AS `e` LEFT JOIN ( SELECT `l`.`Id`, `l`.`Name`, `l`.`Number`, `l`.`IsGreen`, `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3` FROM `JoinCompositeKeyToLeaf` AS `j` INNER JOIN `Leaves` AS `l` ON `j`.`LeafId` = `l`.`Id` -) AS `t` ON `e`.`Key1` = `t`.`CompositeId1` AND `e`.`Key2` = `t`.`CompositeId2` AND `e`.`Key3` = `t`.`CompositeId3` -ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `t`.`LeafId`, `t`.`CompositeId1`, `t`.`CompositeId2`, `t`.`CompositeId3` +) AS `s` ON `e`.`Key1` = `s`.`CompositeId1` AND `e`.`Key2` = `s`.`CompositeId2` AND `e`.`Key3` = `s`.`CompositeId3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3` """); } @@ -425,10 +422,10 @@ public override async Task Skip_navigation_of_type(bool async) AssertSql( """ -SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `t0`.`Id`, `t0`.`Name`, `t0`.`Number`, `t0`.`IsGreen`, `t0`.`Discriminator`, `t0`.`RootSkipSharedId`, `t0`.`CompositeKeySkipSharedKey1`, `t0`.`CompositeKeySkipSharedKey2`, `t0`.`CompositeKeySkipSharedKey3` +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s`.`Discriminator`, `s`.`RootSkipSharedId`, `s`.`CompositeKeySkipSharedKey1`, `s`.`CompositeKeySkipSharedKey2`, `s`.`CompositeKeySkipSharedKey3` FROM `EntityCompositeKeys` AS `e` LEFT JOIN ( - SELECT `t`.`Id`, `t`.`Name`, `t`.`Number`, `t`.`IsGreen`, `t`.`Discriminator`, `e0`.`RootSkipSharedId`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3` + SELECT `u`.`Id`, `u`.`Name`, `u`.`Number`, `u`.`IsGreen`, `u`.`Discriminator`, `e0`.`RootSkipSharedId`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3` FROM `EntityCompositeKeyEntityRoot` AS `e0` INNER JOIN ( SELECT `r`.`Id`, `r`.`Name`, CVar(NULL) AS `Number`, CVar(NULL) AS `IsGreen`, 'EntityRoot' AS `Discriminator` @@ -442,10 +439,10 @@ UNION ALL UNION ALL SELECT `l0`.`Id`, `l0`.`Name`, CVar(NULL) AS `Number`, CVar(NULL) AS `IsGreen`, 'EntityLeaf2' AS `Discriminator` FROM `Leaf2s` AS `l0` - ) AS `t` ON `e0`.`RootSkipSharedId` = `t`.`Id` - WHERE `t`.`Discriminator` = 'EntityLeaf' -) AS `t0` ON `e`.`Key1` = `t0`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `t0`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `t0`.`CompositeKeySkipSharedKey3` -ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `t0`.`RootSkipSharedId`, `t0`.`CompositeKeySkipSharedKey1`, `t0`.`CompositeKeySkipSharedKey2`, `t0`.`CompositeKeySkipSharedKey3` + ) AS `u` ON `e0`.`RootSkipSharedId` = `u`.`Id` + WHERE `u`.`Discriminator` = 'EntityLeaf' +) AS `s` ON `e`.`Key1` = `s`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `s`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `s`.`CompositeKeySkipSharedKey3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`RootSkipSharedId`, `s`.`CompositeKeySkipSharedKey1`, `s`.`CompositeKeySkipSharedKey2`, `s`.`CompositeKeySkipSharedKey3` """); } @@ -494,8 +491,8 @@ public override async Task Select_many_over_skip_navigation(bool async) await base.Select_many_over_skip_navigation(async); AssertSql( -""" -SELECT `t0`.`Id`, `t0`.`CollectionInverseId`, `t0`.`Name`, `t0`.`ReferenceInverseId` + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId` FROM ( SELECT `r`.`Id` FROM `Roots` AS `r` @@ -508,12 +505,12 @@ UNION ALL UNION ALL SELECT `l0`.`Id` FROM `Leaf2s` AS `l0` -) AS `t` +) AS `u` INNER JOIN ( SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `e`.`RootSkipSharedId` FROM `EntityRootEntityThree` AS `e` INNER JOIN `EntityThrees` AS `e0` ON `e`.`ThreeSkipSharedId` = `e0`.`Id` -) AS `t0` ON `t`.`Id` = `t0`.`RootSkipSharedId` +) AS `s` ON `u`.`Id` = `s`.`RootSkipSharedId` """); } @@ -522,14 +519,14 @@ public override async Task Select_many_over_skip_navigation_where(bool async) await base.Select_many_over_skip_navigation_where(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name`, `t`.`ReferenceInverseId` + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId` FROM `EntityOnes` AS `e` LEFT JOIN ( SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `j`.`OneId` FROM `JoinOneToTwo` AS `j` INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` -) AS `t` ON `e`.`Id` = `t`.`OneId` +) AS `s` ON `e`.`Id` = `s`.`OneId` """); } @@ -599,10 +596,10 @@ public override async Task Select_many_over_skip_navigation_of_type(bool async) AssertSql( """ -SELECT `t0`.`Id`, `t0`.`Name`, `t0`.`Number`, `t0`.`IsGreen`, `t0`.`Discriminator` +SELECT `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s`.`Discriminator` FROM `EntityThrees` AS `e` INNER JOIN ( - SELECT `t`.`Id`, `t`.`Name`, `t`.`Number`, `t`.`IsGreen`, `t`.`Discriminator`, `e0`.`ThreeSkipSharedId` + SELECT `u`.`Id`, `u`.`Name`, `u`.`Number`, `u`.`IsGreen`, `u`.`Discriminator`, `e0`.`ThreeSkipSharedId` FROM `EntityRootEntityThree` AS `e0` INNER JOIN ( SELECT `r`.`Id`, `r`.`Name`, CVar(NULL) AS `Number`, CVar(NULL) AS `IsGreen`, 'EntityRoot' AS `Discriminator` @@ -616,9 +613,9 @@ UNION ALL UNION ALL SELECT `l0`.`Id`, `l0`.`Name`, CVar(NULL) AS `Number`, CVar(NULL) AS `IsGreen`, 'EntityLeaf2' AS `Discriminator` FROM `Leaf2s` AS `l0` - ) AS `t` ON `e0`.`RootSkipSharedId` = `t`.`Id` - WHERE `t`.`Discriminator` IN ('EntityBranch', 'EntityLeaf') -) AS `t0` ON `e`.`Id` = `t0`.`ThreeSkipSharedId` + ) AS `u` ON `e0`.`RootSkipSharedId` = `u`.`Id` + WHERE `u`.`Discriminator` IN ('EntityBranch', 'EntityLeaf') +) AS `s` ON `e`.`Id` = `s`.`ThreeSkipSharedId` """); } @@ -628,10 +625,10 @@ public override async Task Select_many_over_skip_navigation_cast(bool async) AssertSql( """ -SELECT `t0`.`Id`, `t0`.`Name`, `t0`.`Number`, `t0`.`IsGreen`, `t0`.`Discriminator` +SELECT `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s`.`Discriminator` FROM `EntityOnes` AS `e` INNER JOIN ( - SELECT `t`.`Id`, `t`.`Name`, `t`.`Number`, `t`.`IsGreen`, `t`.`Discriminator`, `j`.`EntityOneId` + SELECT `u`.`Id`, `u`.`Name`, `u`.`Number`, `u`.`IsGreen`, `u`.`Discriminator`, `j`.`EntityOneId` FROM `JoinOneToBranch` AS `j` INNER JOIN ( SELECT `b`.`Id`, `b`.`Name`, `b`.`Number`, CVar(NULL) AS `IsGreen`, 'EntityBranch' AS `Discriminator` @@ -639,8 +636,8 @@ INNER JOIN ( UNION ALL SELECT `l`.`Id`, `l`.`Name`, `l`.`Number`, `l`.`IsGreen`, 'EntityLeaf' AS `Discriminator` FROM `Leaves` AS `l` - ) AS `t` ON `j`.`EntityBranchId` = `t`.`Id` -) AS `t0` ON `e`.`Id` = `t0`.`EntityOneId` + ) AS `u` ON `j`.`EntityBranchId` = `u`.`Id` +) AS `s` ON `e`.`Id` = `s`.`EntityOneId` """); } @@ -649,15 +646,15 @@ public override async Task Select_skip_navigation(bool async) await base.Select_skip_navigation(async); AssertSql( -""" -SELECT `e`.`Id`, `t`.`Id`, `t`.`Name`, `t`.`LeftId`, `t`.`RightId` + """ +SELECT `e`.`Id`, `s`.`Id`, `s`.`Name`, `s`.`LeftId`, `s`.`RightId` FROM `EntityOnes` AS `e` LEFT JOIN ( SELECT `e0`.`Id`, `e0`.`Name`, `j`.`LeftId`, `j`.`RightId` FROM `JoinOneSelfPayload` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`LeftId` = `e0`.`Id` -) AS `t` ON `e`.`Id` = `t`.`RightId` -ORDER BY `e`.`Id`, `t`.`LeftId`, `t`.`RightId` +) AS `s` ON `e`.`Id` = `s`.`RightId` +ORDER BY `e`.`Id`, `s`.`LeftId`, `s`.`RightId` """); } @@ -666,25 +663,25 @@ public override async Task Select_skip_navigation_multiple(bool async) await base.Select_skip_navigation_multiple(async); AssertSql( -""" -SELECT `e`.`Id`, `t`.`Id`, `t`.`CollectionInverseId`, `t`.`Name`, `t`.`ReferenceInverseId`, `t`.`ThreeId`, `t`.`TwoId`, `t0`.`Id`, `t0`.`CollectionInverseId`, `t0`.`ExtraId`, `t0`.`Name`, `t0`.`ReferenceInverseId`, `t0`.`SelfSkipSharedLeftId`, `t0`.`SelfSkipSharedRightId`, `t1`.`Key1`, `t1`.`Key2`, `t1`.`Key3`, `t1`.`Name`, `t1`.`TwoSkipSharedId`, `t1`.`CompositeKeySkipSharedKey1`, `t1`.`CompositeKeySkipSharedKey2`, `t1`.`CompositeKeySkipSharedKey3` + """ +SELECT `e`.`Id`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId`, `s`.`ThreeId`, `s`.`TwoId`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name`, `s0`.`ReferenceInverseId`, `s0`.`SelfSkipSharedLeftId`, `s0`.`SelfSkipSharedRightId`, `s1`.`Key1`, `s1`.`Key2`, `s1`.`Key3`, `s1`.`Name`, `s1`.`TwoSkipSharedId`, `s1`.`CompositeKeySkipSharedKey1`, `s1`.`CompositeKeySkipSharedKey2`, `s1`.`CompositeKeySkipSharedKey3` FROM ((`EntityTwos` AS `e` LEFT JOIN ( SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `j`.`ThreeId`, `j`.`TwoId` FROM `JoinTwoToThree` AS `j` INNER JOIN `EntityThrees` AS `e0` ON `j`.`ThreeId` = `e0`.`Id` -) AS `t` ON `e`.`Id` = `t`.`TwoId`) +) AS `s` ON `e`.`Id` = `s`.`TwoId`) LEFT JOIN ( SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e1`.`SelfSkipSharedLeftId`, `e1`.`SelfSkipSharedRightId` FROM `EntityTwoEntityTwo` AS `e1` INNER JOIN `EntityTwos` AS `e2` ON `e1`.`SelfSkipSharedLeftId` = `e2`.`Id` -) AS `t0` ON `e`.`Id` = `t0`.`SelfSkipSharedRightId`) +) AS `s0` ON `e`.`Id` = `s0`.`SelfSkipSharedRightId`) LEFT JOIN ( SELECT `e4`.`Key1`, `e4`.`Key2`, `e4`.`Key3`, `e4`.`Name`, `e3`.`TwoSkipSharedId`, `e3`.`CompositeKeySkipSharedKey1`, `e3`.`CompositeKeySkipSharedKey2`, `e3`.`CompositeKeySkipSharedKey3` FROM `EntityCompositeKeyEntityTwo` AS `e3` INNER JOIN `EntityCompositeKeys` AS `e4` ON `e3`.`CompositeKeySkipSharedKey1` = `e4`.`Key1` AND `e3`.`CompositeKeySkipSharedKey2` = `e4`.`Key2` AND `e3`.`CompositeKeySkipSharedKey3` = `e4`.`Key3` -) AS `t1` ON `e`.`Id` = `t1`.`TwoSkipSharedId` -ORDER BY `e`.`Id`, `t`.`ThreeId`, `t`.`TwoId`, `t`.`Id`, `t0`.`SelfSkipSharedLeftId`, `t0`.`SelfSkipSharedRightId`, `t0`.`Id`, `t1`.`TwoSkipSharedId`, `t1`.`CompositeKeySkipSharedKey1`, `t1`.`CompositeKeySkipSharedKey2`, `t1`.`CompositeKeySkipSharedKey3`, `t1`.`Key1`, `t1`.`Key2` +) AS `s1` ON `e`.`Id` = `s1`.`TwoSkipSharedId` +ORDER BY `e`.`Id`, `s`.`ThreeId`, `s`.`TwoId`, `s`.`Id`, `s0`.`SelfSkipSharedLeftId`, `s0`.`SelfSkipSharedRightId`, `s0`.`Id`, `s1`.`TwoSkipSharedId`, `s1`.`CompositeKeySkipSharedKey1`, `s1`.`CompositeKeySkipSharedKey2`, `s1`.`CompositeKeySkipSharedKey3`, `s1`.`Key1`, `s1`.`Key2` """); } @@ -715,10 +712,10 @@ public override async Task Include_skip_navigation(bool async) AssertSql( """ -SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name`, `t0`.`Id`, `t0`.`Name`, `t0`.`Number`, `t0`.`Slumber`, `t0`.`IsGreen`, `t0`.`IsBrown`, `t0`.`Discriminator`, `t0`.`RootSkipSharedId`, `t0`.`CompositeKeySkipSharedKey1`, `t0`.`CompositeKeySkipSharedKey2`, `t0`.`CompositeKeySkipSharedKey3` +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name`, `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`Slumber`, `s`.`IsGreen`, `s`.`IsBrown`, `s`.`Discriminator`, `s`.`RootSkipSharedId`, `s`.`CompositeKeySkipSharedKey1`, `s`.`CompositeKeySkipSharedKey2`, `s`.`CompositeKeySkipSharedKey3` FROM `EntityCompositeKeys` AS `e` LEFT JOIN ( - SELECT `t`.`Id`, `t`.`Name`, `t`.`Number`, `t`.`Slumber`, `t`.`IsGreen`, `t`.`IsBrown`, `t`.`Discriminator`, `e0`.`RootSkipSharedId`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3` + SELECT `u`.`Id`, `u`.`Name`, `u`.`Number`, `u`.`Slumber`, `u`.`IsGreen`, `u`.`IsBrown`, `u`.`Discriminator`, `e0`.`RootSkipSharedId`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3` FROM `EntityCompositeKeyEntityRoot` AS `e0` INNER JOIN ( SELECT `r`.`Id`, `r`.`Name`, CVar(NULL) AS `Number`, CVar(NULL) AS `Slumber`, CVar(NULL) AS `IsGreen`, CVar(NULL) AS `IsBrown`, 'EntityRoot' AS `Discriminator` @@ -732,9 +729,9 @@ UNION ALL UNION ALL SELECT `l0`.`Id`, `l0`.`Name`, CVar(NULL) AS `Number`, `l0`.`Slumber`, CVar(NULL) AS `IsGreen`, `l0`.`IsBrown`, 'EntityLeaf2' AS `Discriminator` FROM `Leaf2s` AS `l0` - ) AS `t` ON `e0`.`RootSkipSharedId` = `t`.`Id` -) AS `t0` ON `e`.`Key1` = `t0`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `t0`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `t0`.`CompositeKeySkipSharedKey3` -ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `t0`.`RootSkipSharedId`, `t0`.`CompositeKeySkipSharedKey1`, `t0`.`CompositeKeySkipSharedKey2`, `t0`.`CompositeKeySkipSharedKey3` + ) AS `u` ON `e0`.`RootSkipSharedId` = `u`.`Id` +) AS `s` ON `e`.`Key1` = `s`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `s`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `s`.`CompositeKeySkipSharedKey3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`RootSkipSharedId`, `s`.`CompositeKeySkipSharedKey1`, `s`.`CompositeKeySkipSharedKey2`, `s`.`CompositeKeySkipSharedKey3` """); } @@ -743,16 +740,16 @@ public override async Task Include_skip_navigation_then_reference(bool async) await base.Include_skip_navigation_then_reference(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `t`.`Id`, `t`.`Name`, `t`.`Id0`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name0`, `t`.`ReferenceInverseId`, `t`.`OneId`, `t`.`TwoId` + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `s`.`OneId`, `s`.`TwoId` FROM `EntityTwos` AS `e` LEFT JOIN ( SELECT `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `j`.`OneId`, `j`.`TwoId` FROM (`JoinOneToTwo` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` -) AS `t` ON `e`.`Id` = `t`.`TwoId` -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`TwoId`, `t`.`Id` +) AS `s` ON `e`.`Id` = `s`.`TwoId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id` """); } @@ -761,20 +758,20 @@ public override async Task Include_skip_navigation_then_include_skip_navigation( await base.Include_skip_navigation_then_include_skip_navigation(async); AssertSql( -""" -SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name`, `t0`.`Id`, `t0`.`Name`, `t0`.`Number`, `t0`.`IsGreen`, `t0`.`LeafId`, `t0`.`CompositeId1`, `t0`.`CompositeId2`, `t0`.`CompositeId3`, `t0`.`Id0`, `t0`.`Name0`, `t0`.`EntityBranchId`, `t0`.`EntityOneId` + """ +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name`, `s0`.`Id`, `s0`.`Name`, `s0`.`Number`, `s0`.`IsGreen`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Id0`, `s0`.`Name0`, `s0`.`EntityBranchId`, `s0`.`EntityOneId` FROM `EntityCompositeKeys` AS `e` LEFT JOIN ( - SELECT `l`.`Id`, `l`.`Name`, `l`.`Number`, `l`.`IsGreen`, `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `t`.`Id` AS `Id0`, `t`.`Name` AS `Name0`, `t`.`EntityBranchId`, `t`.`EntityOneId` + SELECT `l`.`Id`, `l`.`Name`, `l`.`Number`, `l`.`IsGreen`, `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `s`.`Id` AS `Id0`, `s`.`Name` AS `Name0`, `s`.`EntityBranchId`, `s`.`EntityOneId` FROM (`JoinCompositeKeyToLeaf` AS `j` INNER JOIN `Leaves` AS `l` ON `j`.`LeafId` = `l`.`Id`) LEFT JOIN ( SELECT `e0`.`Id`, `e0`.`Name`, `j0`.`EntityBranchId`, `j0`.`EntityOneId` FROM `JoinOneToBranch` AS `j0` INNER JOIN `EntityOnes` AS `e0` ON `j0`.`EntityOneId` = `e0`.`Id` - ) AS `t` ON `l`.`Id` = `t`.`EntityBranchId` -) AS `t0` ON `e`.`Key1` = `t0`.`CompositeId1` AND `e`.`Key2` = `t0`.`CompositeId2` AND `e`.`Key3` = `t0`.`CompositeId3` -ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `t0`.`LeafId`, `t0`.`CompositeId1`, `t0`.`CompositeId2`, `t0`.`CompositeId3`, `t0`.`Id`, `t0`.`EntityBranchId`, `t0`.`EntityOneId` + ) AS `s` ON `l`.`Id` = `s`.`EntityBranchId` +) AS `s0` ON `e`.`Key1` = `s0`.`CompositeId1` AND `e`.`Key2` = `s0`.`CompositeId2` AND `e`.`Key3` = `s0`.`CompositeId3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Id`, `s0`.`EntityBranchId`, `s0`.`EntityOneId` """); } @@ -783,11 +780,11 @@ public override async Task Include_skip_navigation_then_include_reference_and_sk await base.Include_skip_navigation_then_include_reference_and_skip_navigation(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `t0`.`Id`, `t0`.`Name`, `t0`.`Id0`, `t0`.`CollectionInverseId`, `t0`.`ExtraId`, `t0`.`Name0`, `t0`.`ReferenceInverseId`, `t0`.`OneId`, `t0`.`ThreeId`, `t0`.`Id1`, `t0`.`Name1`, `t0`.`LeftId`, `t0`.`RightId` + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s0`.`Id`, `s0`.`Name`, `s0`.`Id0`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name0`, `s0`.`ReferenceInverseId`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Id1`, `s0`.`Name1`, `s0`.`LeftId`, `s0`.`RightId` FROM `EntityThrees` AS `e` LEFT JOIN ( - SELECT `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `j`.`OneId`, `j`.`ThreeId`, `t`.`Id` AS `Id1`, `t`.`Name` AS `Name1`, `t`.`LeftId`, `t`.`RightId` + SELECT `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `j`.`OneId`, `j`.`ThreeId`, `s`.`Id` AS `Id1`, `s`.`Name` AS `Name1`, `s`.`LeftId`, `s`.`RightId` FROM ((`JoinOneToThreePayloadFull` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId`) @@ -795,9 +792,9 @@ LEFT JOIN ( SELECT `e2`.`Id`, `e2`.`Name`, `j0`.`LeftId`, `j0`.`RightId` FROM `JoinOneSelfPayload` AS `j0` INNER JOIN `EntityOnes` AS `e2` ON `j0`.`RightId` = `e2`.`Id` - ) AS `t` ON `e0`.`Id` = `t`.`LeftId` -) AS `t0` ON `e`.`Id` = `t0`.`ThreeId` -ORDER BY `e`.`Id`, `t0`.`OneId`, `t0`.`ThreeId`, `t0`.`Id`, `t0`.`Id0`, `t0`.`LeftId`, `t0`.`RightId` + ) AS `s` ON `e0`.`Id` = `s`.`LeftId` +) AS `s0` ON `e`.`Id` = `s0`.`ThreeId` +ORDER BY `e`.`Id`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Id`, `s0`.`Id0`, `s0`.`LeftId`, `s0`.`RightId` """); } @@ -806,16 +803,16 @@ public override async Task Include_skip_navigation_and_reference(bool async) await base.Include_skip_navigation_and_reference(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `e0`.`Id`, `t`.`Id`, `t`.`Name`, `t`.`OneSkipSharedId`, `t`.`TwoSkipSharedId`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId` + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `e0`.`Id`, `s`.`Id`, `s`.`Name`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId` FROM (`EntityTwos` AS `e` LEFT JOIN `EntityThrees` AS `e0` ON `e`.`Id` = `e0`.`ReferenceInverseId`) LEFT JOIN ( SELECT `e2`.`Id`, `e2`.`Name`, `e1`.`OneSkipSharedId`, `e1`.`TwoSkipSharedId` FROM `EntityOneEntityTwo` AS `e1` INNER JOIN `EntityOnes` AS `e2` ON `e1`.`OneSkipSharedId` = `e2`.`Id` -) AS `t` ON `e`.`Id` = `t`.`TwoSkipSharedId` -ORDER BY `e`.`Id`, `e0`.`Id`, `t`.`OneSkipSharedId`, `t`.`TwoSkipSharedId` +) AS `s` ON `e`.`Id` = `s`.`TwoSkipSharedId` +ORDER BY `e`.`Id`, `e0`.`Id`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId` """); } @@ -824,16 +821,16 @@ public override async Task Filtered_include_skip_navigation_where(bool async) await base.Filtered_include_skip_navigation_where(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `t`.`Id`, `t`.`Name`, `t`.`OneId`, `t`.`ThreeId` + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`Id`, `s`.`Name`, `s`.`OneId`, `s`.`ThreeId` FROM `EntityThrees` AS `e` LEFT JOIN ( SELECT `e0`.`Id`, `e0`.`Name`, `j`.`OneId`, `j`.`ThreeId` FROM `JoinOneToThreePayloadFullShared` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` WHERE `e0`.`Id` < 10 -) AS `t` ON `e`.`Id` = `t`.`ThreeId` -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`ThreeId` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId` """); } @@ -842,15 +839,15 @@ public override async Task Filtered_include_skip_navigation_order_by(bool async) await base.Filtered_include_skip_navigation_order_by(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name`, `t`.`ReferenceInverseId`, `t`.`ThreeId`, `t`.`TwoId` + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId`, `s`.`ThreeId`, `s`.`TwoId` FROM `EntityThrees` AS `e` LEFT JOIN ( SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `j`.`ThreeId`, `j`.`TwoId` FROM `JoinTwoToThree` AS `j` INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` -) AS `t` ON `e`.`Id` = `t`.`ThreeId` -ORDER BY `e`.`Id`, `t`.`Id`, `t`.`ThreeId` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`Id`, `s`.`ThreeId` """); } @@ -923,7 +920,7 @@ public override async Task Filtered_then_include_skip_navigation_where(bool asyn AssertSql( """ -SELECT `t`.`Id`, `t`.`Name`, `t`.`Number`, `t`.`Slumber`, `t`.`IsGreen`, `t`.`IsBrown`, `t`.`Discriminator`, `t0`.`Id`, `t0`.`CollectionInverseId`, `t0`.`Name`, `t0`.`ReferenceInverseId`, `t0`.`RootSkipSharedId`, `t0`.`ThreeSkipSharedId`, `t0`.`Id0`, `t0`.`Name0`, `t0`.`OneId`, `t0`.`ThreeId` +SELECT `u`.`Id`, `u`.`Name`, `u`.`Number`, `u`.`Slumber`, `u`.`IsGreen`, `u`.`IsBrown`, `u`.`Discriminator`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`Name`, `s0`.`ReferenceInverseId`, `s0`.`RootSkipSharedId`, `s0`.`ThreeSkipSharedId`, `s0`.`Id0`, `s0`.`Name0`, `s0`.`OneId`, `s0`.`ThreeId` FROM ( SELECT `r`.`Id`, `r`.`Name`, CVar(NULL) AS `Number`, CVar(NULL) AS `Slumber`, CVar(NULL) AS `IsGreen`, CVar(NULL) AS `IsBrown`, 'EntityRoot' AS `Discriminator` FROM `Roots` AS `r` @@ -936,9 +933,9 @@ UNION ALL UNION ALL SELECT `l0`.`Id`, `l0`.`Name`, CVar(NULL) AS `Number`, `l0`.`Slumber`, CVar(NULL) AS `IsGreen`, `l0`.`IsBrown`, 'EntityLeaf2' AS `Discriminator` FROM `Leaf2s` AS `l0` -) AS `t` +) AS `u` LEFT JOIN ( - SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `e`.`RootSkipSharedId`, `e`.`ThreeSkipSharedId`, `t1`.`Id` AS `Id0`, `t1`.`Name` AS `Name0`, `t1`.`OneId`, `t1`.`ThreeId` + SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `e`.`RootSkipSharedId`, `e`.`ThreeSkipSharedId`, `s`.`Id` AS `Id0`, `s`.`Name` AS `Name0`, `s`.`OneId`, `s`.`ThreeId` FROM (`EntityRootEntityThree` AS `e` INNER JOIN `EntityThrees` AS `e0` ON `e`.`ThreeSkipSharedId` = `e0`.`Id`) LEFT JOIN ( @@ -946,9 +943,9 @@ LEFT JOIN ( FROM `JoinOneToThreePayloadFullShared` AS `j` INNER JOIN `EntityOnes` AS `e1` ON `j`.`OneId` = `e1`.`Id` WHERE `e1`.`Id` < 10 - ) AS `t1` ON `e0`.`Id` = `t1`.`ThreeId` -) AS `t0` ON `t`.`Id` = `t0`.`RootSkipSharedId` -ORDER BY `t`.`Id`, `t0`.`RootSkipSharedId`, `t0`.`ThreeSkipSharedId`, `t0`.`Id`, `t0`.`OneId`, `t0`.`ThreeId` + ) AS `s` ON `e0`.`Id` = `s`.`ThreeId` +) AS `s0` ON `u`.`Id` = `s0`.`RootSkipSharedId` +ORDER BY `u`.`Id`, `s0`.`RootSkipSharedId`, `s0`.`ThreeSkipSharedId`, `s0`.`Id`, `s0`.`OneId`, `s0`.`ThreeId` """); } @@ -995,21 +992,21 @@ public override async Task Filtered_include_skip_navigation_where_then_include_s await base.Filtered_include_skip_navigation_where_then_include_skip_navigation(async); AssertSql( -""" -SELECT `l`.`Id`, `l`.`Name`, `l`.`Number`, `l`.`IsGreen`, `t0`.`Key1`, `t0`.`Key2`, `t0`.`Key3`, `t0`.`Name`, `t0`.`LeafId`, `t0`.`CompositeId1`, `t0`.`CompositeId2`, `t0`.`CompositeId3`, `t0`.`Id`, `t0`.`CollectionInverseId`, `t0`.`ExtraId`, `t0`.`Name0`, `t0`.`ReferenceInverseId`, `t0`.`TwoSkipSharedId`, `t0`.`CompositeKeySkipSharedKey1`, `t0`.`CompositeKeySkipSharedKey2`, `t0`.`CompositeKeySkipSharedKey3` + """ +SELECT `l`.`Id`, `l`.`Name`, `l`.`Number`, `l`.`IsGreen`, `s0`.`Key1`, `s0`.`Key2`, `s0`.`Key3`, `s0`.`Name`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name0`, `s0`.`ReferenceInverseId`, `s0`.`TwoSkipSharedId`, `s0`.`CompositeKeySkipSharedKey1`, `s0`.`CompositeKeySkipSharedKey2`, `s0`.`CompositeKeySkipSharedKey3` FROM `Leaves` AS `l` LEFT JOIN ( - SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name`, `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name` AS `Name0`, `t`.`ReferenceInverseId`, `t`.`TwoSkipSharedId`, `t`.`CompositeKeySkipSharedKey1`, `t`.`CompositeKeySkipSharedKey2`, `t`.`CompositeKeySkipSharedKey3` + SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name`, `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name` AS `Name0`, `s`.`ReferenceInverseId`, `s`.`TwoSkipSharedId`, `s`.`CompositeKeySkipSharedKey1`, `s`.`CompositeKeySkipSharedKey2`, `s`.`CompositeKeySkipSharedKey3` FROM (`JoinCompositeKeyToLeaf` AS `j` INNER JOIN `EntityCompositeKeys` AS `e` ON `j`.`CompositeId1` = `e`.`Key1` AND `j`.`CompositeId2` = `e`.`Key2` AND `j`.`CompositeId3` = `e`.`Key3`) LEFT JOIN ( SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name`, `e1`.`ReferenceInverseId`, `e0`.`TwoSkipSharedId`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3` FROM `EntityCompositeKeyEntityTwo` AS `e0` INNER JOIN `EntityTwos` AS `e1` ON `e0`.`TwoSkipSharedId` = `e1`.`Id` - ) AS `t` ON `e`.`Key1` = `t`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `t`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `t`.`CompositeKeySkipSharedKey3` + ) AS `s` ON `e`.`Key1` = `s`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `s`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `s`.`CompositeKeySkipSharedKey3` WHERE `e`.`Key1` < 5 -) AS `t0` ON `l`.`Id` = `t0`.`LeafId` -ORDER BY `l`.`Id`, `t0`.`LeafId`, `t0`.`CompositeId1`, `t0`.`CompositeId2`, `t0`.`CompositeId3`, `t0`.`Key1`, `t0`.`Key2`, `t0`.`Key3`, `t0`.`TwoSkipSharedId`, `t0`.`CompositeKeySkipSharedKey1`, `t0`.`CompositeKeySkipSharedKey2`, `t0`.`CompositeKeySkipSharedKey3` +) AS `s0` ON `l`.`Id` = `s0`.`LeafId` +ORDER BY `l`.`Id`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Key1`, `s0`.`Key2`, `s0`.`Key3`, `s0`.`TwoSkipSharedId`, `s0`.`CompositeKeySkipSharedKey1`, `s0`.`CompositeKeySkipSharedKey2`, `s0`.`CompositeKeySkipSharedKey3` """); } @@ -1074,8 +1071,8 @@ public override async Task Filter_include_on_skip_navigation_combined(bool async await base.Filter_include_on_skip_navigation_combined(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `t`.`Id`, `t`.`Name`, `t`.`Id0`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name0`, `t`.`ReferenceInverseId`, `t`.`OneId`, `t`.`TwoId`, `t`.`Id1`, `t`.`CollectionInverseId0`, `t`.`ExtraId0`, `t`.`Name1`, `t`.`ReferenceInverseId0` + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id1`, `s`.`CollectionInverseId0`, `s`.`ExtraId0`, `s`.`Name1`, `s`.`ReferenceInverseId0` FROM `EntityTwos` AS `e` LEFT JOIN ( SELECT `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `j`.`OneId`, `j`.`TwoId`, `e2`.`Id` AS `Id1`, `e2`.`CollectionInverseId` AS `CollectionInverseId0`, `e2`.`ExtraId` AS `ExtraId0`, `e2`.`Name` AS `Name1`, `e2`.`ReferenceInverseId` AS `ReferenceInverseId0` @@ -1084,8 +1081,8 @@ LEFT JOIN ( LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId`) LEFT JOIN `EntityTwos` AS `e2` ON `e0`.`Id` = `e2`.`CollectionInverseId` WHERE `e0`.`Id` < 10 -) AS `t` ON `e`.`Id` = `t`.`TwoId` -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`TwoId`, `t`.`Id`, `t`.`Id0` +) AS `s` ON `e`.`Id` = `s`.`TwoId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s`.`Id0` """); } @@ -1133,21 +1130,21 @@ public override async Task Filtered_include_on_skip_navigation_then_filtered_inc await base.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `t0`.`Id`, `t0`.`Name`, `t0`.`OneId`, `t0`.`ThreeId`, `t0`.`Id0`, `t0`.`CollectionInverseId`, `t0`.`ExtraId`, `t0`.`Name0`, `t0`.`ReferenceInverseId` + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`Id`, `s`.`Name`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId` FROM `EntityThrees` AS `e` LEFT JOIN ( - SELECT `e0`.`Id`, `e0`.`Name`, `j`.`OneId`, `j`.`ThreeId`, `t`.`Id` AS `Id0`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name` AS `Name0`, `t`.`ReferenceInverseId` + SELECT `e0`.`Id`, `e0`.`Name`, `j`.`OneId`, `j`.`ThreeId`, `e2`.`Id` AS `Id0`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name` AS `Name0`, `e2`.`ReferenceInverseId` FROM (`JoinOneToThreePayloadFull` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) LEFT JOIN ( SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name`, `e1`.`ReferenceInverseId` FROM `EntityTwos` AS `e1` WHERE `e1`.`Id` < 5 - ) AS `t` ON `e0`.`Id` = `t`.`CollectionInverseId` + ) AS `e2` ON `e0`.`Id` = `e2`.`CollectionInverseId` WHERE `e0`.`Id` > 15 -) AS `t0` ON `e`.`Id` = `t0`.`ThreeId` -ORDER BY `e`.`Id`, `t0`.`OneId`, `t0`.`ThreeId`, `t0`.`Id` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id` """); } @@ -1156,21 +1153,21 @@ public override async Task Filtered_include_on_navigation_then_filtered_include_ await base.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`Name`, `t0`.`Id`, `t0`.`CollectionInverseId`, `t0`.`ExtraId`, `t0`.`Name`, `t0`.`ReferenceInverseId`, `t0`.`Id0`, `t0`.`CollectionInverseId0`, `t0`.`Name0`, `t0`.`ReferenceInverseId0`, `t0`.`ThreeId`, `t0`.`TwoId` + """ +SELECT `e`.`Id`, `e`.`Name`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name`, `s0`.`ReferenceInverseId`, `s0`.`Id0`, `s0`.`CollectionInverseId0`, `s0`.`Name0`, `s0`.`ReferenceInverseId0`, `s0`.`ThreeId`, `s0`.`TwoId` FROM `EntityOnes` AS `e` LEFT JOIN ( - SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `t`.`Id` AS `Id0`, `t`.`CollectionInverseId` AS `CollectionInverseId0`, `t`.`Name` AS `Name0`, `t`.`ReferenceInverseId` AS `ReferenceInverseId0`, `t`.`ThreeId`, `t`.`TwoId` + SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `s`.`Id` AS `Id0`, `s`.`CollectionInverseId` AS `CollectionInverseId0`, `s`.`Name` AS `Name0`, `s`.`ReferenceInverseId` AS `ReferenceInverseId0`, `s`.`ThreeId`, `s`.`TwoId` FROM `EntityTwos` AS `e0` LEFT JOIN ( SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`Name`, `e1`.`ReferenceInverseId`, `j`.`ThreeId`, `j`.`TwoId` FROM `JoinTwoToThree` AS `j` INNER JOIN `EntityThrees` AS `e1` ON `j`.`ThreeId` = `e1`.`Id` WHERE `e1`.`Id` < 5 - ) AS `t` ON `e0`.`Id` = `t`.`TwoId` + ) AS `s` ON `e0`.`Id` = `s`.`TwoId` WHERE `e0`.`Id` > 15 -) AS `t0` ON `e`.`Id` = `t0`.`CollectionInverseId` -ORDER BY `e`.`Id`, `t0`.`Id`, `t0`.`ThreeId`, `t0`.`TwoId` +) AS `s0` ON `e`.`Id` = `s0`.`CollectionInverseId` +ORDER BY `e`.`Id`, `s0`.`Id`, `s0`.`ThreeId`, `s0`.`TwoId` """); } @@ -1200,10 +1197,10 @@ public override async Task Include_skip_navigation_split(bool async) """, // """ -SELECT `t0`.`Id`, `t0`.`Name`, `t0`.`Number`, `t0`.`Slumber`, `t0`.`IsGreen`, `t0`.`IsBrown`, `t0`.`Discriminator`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3` +SELECT `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`Slumber`, `s`.`IsGreen`, `s`.`IsBrown`, `s`.`Discriminator`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3` FROM `EntityCompositeKeys` AS `e` INNER JOIN ( - SELECT `t`.`Id`, `t`.`Name`, `t`.`Number`, `t`.`Slumber`, `t`.`IsGreen`, `t`.`IsBrown`, `t`.`Discriminator`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3` + SELECT `u`.`Id`, `u`.`Name`, `u`.`Number`, `u`.`Slumber`, `u`.`IsGreen`, `u`.`IsBrown`, `u`.`Discriminator`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3` FROM `EntityCompositeKeyEntityRoot` AS `e0` INNER JOIN ( SELECT `r`.`Id`, `r`.`Name`, CVar(NULL) AS `Number`, CVar(NULL) AS `Slumber`, CVar(NULL) AS `IsGreen`, CVar(NULL) AS `IsBrown`, 'EntityRoot' AS `Discriminator` @@ -1217,8 +1214,8 @@ UNION ALL UNION ALL SELECT `l0`.`Id`, `l0`.`Name`, CVar(NULL) AS `Number`, `l0`.`Slumber`, CVar(NULL) AS `IsGreen`, `l0`.`IsBrown`, 'EntityLeaf2' AS `Discriminator` FROM `Leaf2s` AS `l0` - ) AS `t` ON `e0`.`RootSkipSharedId` = `t`.`Id` -) AS `t0` ON `e`.`Key1` = `t0`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `t0`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `t0`.`CompositeKeySkipSharedKey3` + ) AS `u` ON `e0`.`RootSkipSharedId` = `u`.`Id` +) AS `s` ON `e`.`Key1` = `s`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `s`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `s`.`CompositeKeySkipSharedKey3` ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3` """); } @@ -1228,21 +1225,21 @@ public override async Task Include_skip_navigation_then_reference_split(bool asy await base.Include_skip_navigation_then_reference_split(async); AssertSql( -""" + """ SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId` FROM `EntityTwos` AS `e` ORDER BY `e`.`Id` """, -// -""" -SELECT `t`.`Id`, `t`.`Name`, `t`.`Id0`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name0`, `t`.`ReferenceInverseId`, `e`.`Id` + // + """ +SELECT `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `e`.`Id` FROM `EntityTwos` AS `e` INNER JOIN ( SELECT `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `j`.`TwoId` FROM (`JoinOneToTwo` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` -) AS `t` ON `e`.`Id` = `t`.`TwoId` +) AS `s` ON `e`.`Id` = `s`.`TwoId` ORDER BY `e`.`Id` """); } @@ -1259,31 +1256,31 @@ public override async Task Include_skip_navigation_then_include_skip_navigation_ """, // """ -SELECT `t`.`Id`, `t`.`Name`, `t`.`Number`, `t`.`IsGreen`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `t`.`LeafId`, `t`.`CompositeId1`, `t`.`CompositeId2`, `t`.`CompositeId3` +SELECT `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3` FROM `EntityCompositeKeys` AS `e` INNER JOIN ( SELECT `l`.`Id`, `l`.`Name`, `l`.`Number`, `l`.`IsGreen`, `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3` FROM `JoinCompositeKeyToLeaf` AS `j` INNER JOIN `Leaves` AS `l` ON `j`.`LeafId` = `l`.`Id` -) AS `t` ON `e`.`Key1` = `t`.`CompositeId1` AND `e`.`Key2` = `t`.`CompositeId2` AND `e`.`Key3` = `t`.`CompositeId3` -ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `t`.`LeafId`, `t`.`CompositeId1`, `t`.`CompositeId2`, `t`.`CompositeId3`, `t`.`Id` +) AS `s` ON `e`.`Key1` = `s`.`CompositeId1` AND `e`.`Key2` = `s`.`CompositeId2` AND `e`.`Key3` = `s`.`CompositeId3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Id` """, // """ -SELECT `t0`.`Id`, `t0`.`Name`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `t`.`LeafId`, `t`.`CompositeId1`, `t`.`CompositeId2`, `t`.`CompositeId3`, `t`.`Id` +SELECT `s0`.`Id`, `s0`.`Name`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Id` FROM (`EntityCompositeKeys` AS `e` INNER JOIN ( SELECT `l`.`Id`, `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3` FROM `JoinCompositeKeyToLeaf` AS `j` INNER JOIN `Leaves` AS `l` ON `j`.`LeafId` = `l`.`Id` -) AS `t` ON `e`.`Key1` = `t`.`CompositeId1` AND `e`.`Key2` = `t`.`CompositeId2` AND `e`.`Key3` = `t`.`CompositeId3`) +) AS `s` ON `e`.`Key1` = `s`.`CompositeId1` AND `e`.`Key2` = `s`.`CompositeId2` AND `e`.`Key3` = `s`.`CompositeId3`) LEFT JOIN ( SELECT `e0`.`Id`, `e0`.`Name`, `j0`.`EntityBranchId` FROM `JoinOneToBranch` AS `j0` INNER JOIN `EntityOnes` AS `e0` ON `j0`.`EntityOneId` = `e0`.`Id` -) AS `t0` ON `t`.`Id` = `t0`.`EntityBranchId` -WHERE `t`.`Id` IS NOT NULL AND `t0`.`EntityBranchId` IS NOT NULL -ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `t`.`LeafId`, `t`.`CompositeId1`, `t`.`CompositeId2`, `t`.`CompositeId3`, `t`.`Id` +) AS `s0` ON `s`.`Id` = `s0`.`EntityBranchId` +WHERE `s`.`Id` IS NOT NULL AND `s0`.`EntityBranchId` IS NOT NULL +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Id` """); } @@ -1299,33 +1296,33 @@ ORDER BY `e`.`Id` """, // """ -SELECT `t`.`Id`, `t`.`Name`, `t`.`Id0`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name0`, `t`.`ReferenceInverseId`, `e`.`Id`, `t`.`OneId`, `t`.`ThreeId` +SELECT `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneId`, `s`.`ThreeId` FROM `EntityThrees` AS `e` INNER JOIN ( SELECT `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `j`.`OneId`, `j`.`ThreeId` FROM (`JoinOneToThreePayloadFull` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` -) AS `t` ON `e`.`Id` = `t`.`ThreeId` -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`ThreeId`, `t`.`Id`, `t`.`Id0` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id`, `s`.`Id0` """, // """ -SELECT `t0`.`Id`, `t0`.`Name`, `e`.`Id`, `t`.`OneId`, `t`.`ThreeId`, `t`.`Id`, `t`.`Id0` +SELECT `s0`.`Id`, `s0`.`Name`, `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id`, `s`.`Id0` FROM (`EntityThrees` AS `e` INNER JOIN ( SELECT `e0`.`Id`, `e1`.`Id` AS `Id0`, `j`.`OneId`, `j`.`ThreeId` FROM (`JoinOneToThreePayloadFull` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` -) AS `t` ON `e`.`Id` = `t`.`ThreeId`) +) AS `s` ON `e`.`Id` = `s`.`ThreeId`) LEFT JOIN ( SELECT `e2`.`Id`, `e2`.`Name`, `j0`.`LeftId` FROM `JoinOneSelfPayload` AS `j0` INNER JOIN `EntityOnes` AS `e2` ON `j0`.`RightId` = `e2`.`Id` -) AS `t0` ON `t`.`Id` = `t0`.`LeftId` -WHERE `t`.`Id` IS NOT NULL AND `t0`.`LeftId` IS NOT NULL -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`ThreeId`, `t`.`Id`, `t`.`Id0` +) AS `s0` ON `s`.`Id` = `s0`.`LeftId` +WHERE `s`.`Id` IS NOT NULL AND `s0`.`LeftId` IS NOT NULL +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id`, `s`.`Id0` """); } @@ -1334,22 +1331,22 @@ public override async Task Include_skip_navigation_and_reference_split(bool asyn await base.Include_skip_navigation_and_reference_split(async); AssertSql( -""" + """ SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId` FROM `EntityTwos` AS `e` LEFT JOIN `EntityThrees` AS `e0` ON `e`.`Id` = `e0`.`ReferenceInverseId` ORDER BY `e`.`Id`, `e0`.`Id` """, -// -""" -SELECT `t`.`Id`, `t`.`Name`, `e`.`Id`, `e0`.`Id` + // + """ +SELECT `s`.`Id`, `s`.`Name`, `e`.`Id`, `e0`.`Id` FROM (`EntityTwos` AS `e` LEFT JOIN `EntityThrees` AS `e0` ON `e`.`Id` = `e0`.`ReferenceInverseId`) INNER JOIN ( SELECT `e2`.`Id`, `e2`.`Name`, `e1`.`TwoSkipSharedId` FROM `EntityOneEntityTwo` AS `e1` INNER JOIN `EntityOnes` AS `e2` ON `e1`.`OneSkipSharedId` = `e2`.`Id` -) AS `t` ON `e`.`Id` = `t`.`TwoSkipSharedId` +) AS `s` ON `e`.`Id` = `s`.`TwoSkipSharedId` ORDER BY `e`.`Id`, `e0`.`Id` """); } @@ -1359,21 +1356,21 @@ public override async Task Filtered_include_skip_navigation_where_split(bool asy await base.Filtered_include_skip_navigation_where_split(async); AssertSql( -""" + """ SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId` FROM `EntityThrees` AS `e` ORDER BY `e`.`Id` """, -// -""" -SELECT `t`.`Id`, `t`.`Name`, `e`.`Id` + // + """ +SELECT `s`.`Id`, `s`.`Name`, `e`.`Id` FROM `EntityThrees` AS `e` INNER JOIN ( SELECT `e0`.`Id`, `e0`.`Name`, `j`.`ThreeId` FROM `JoinOneToThreePayloadFullShared` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` WHERE `e0`.`Id` < 10 -) AS `t` ON `e`.`Id` = `t`.`ThreeId` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` ORDER BY `e`.`Id` """); } @@ -1383,21 +1380,21 @@ public override async Task Filtered_include_skip_navigation_order_by_split(bool await base.Filtered_include_skip_navigation_order_by_split(async); AssertSql( -""" + """ SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId` FROM `EntityThrees` AS `e` ORDER BY `e`.`Id` """, -// -""" -SELECT `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name`, `t`.`ReferenceInverseId`, `e`.`Id` + // + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId`, `e`.`Id` FROM `EntityThrees` AS `e` INNER JOIN ( SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `j`.`ThreeId` FROM `JoinTwoToThree` AS `j` INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` -) AS `t` ON `e`.`Id` = `t`.`ThreeId` -ORDER BY `e`.`Id`, `t`.`Id` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`Id` """); } @@ -1487,8 +1484,8 @@ public override async Task Filtered_then_include_skip_navigation_where_split(boo await base.Filtered_then_include_skip_navigation_where_split(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`Name`, `t`.`Number`, `t`.`Slumber`, `t`.`IsGreen`, `t`.`IsBrown`, `t`.`Discriminator` + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`Number`, `u`.`Slumber`, `u`.`IsGreen`, `u`.`IsBrown`, `u`.`Discriminator` FROM ( SELECT `r`.`Id`, `r`.`Name`, CVar(NULL) AS `Number`, CVar(NULL) AS `Slumber`, CVar(NULL) AS `IsGreen`, CVar(NULL) AS `IsBrown`, 'EntityRoot' AS `Discriminator` FROM `Roots` AS `r` @@ -1501,12 +1498,12 @@ UNION ALL UNION ALL SELECT `l0`.`Id`, `l0`.`Name`, CVar(NULL) AS `Number`, `l0`.`Slumber`, CVar(NULL) AS `IsGreen`, `l0`.`IsBrown`, 'EntityLeaf2' AS `Discriminator` FROM `Leaf2s` AS `l0` -) AS `t` -ORDER BY `t`.`Id` +) AS `u` +ORDER BY `u`.`Id` """, - // - """ -SELECT `t0`.`Id`, `t0`.`CollectionInverseId`, `t0`.`Name`, `t0`.`ReferenceInverseId`, `t`.`Id`, `t0`.`RootSkipSharedId`, `t0`.`ThreeSkipSharedId` + // + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId`, `u`.`Id`, `s`.`RootSkipSharedId`, `s`.`ThreeSkipSharedId` FROM ( SELECT `r`.`Id` FROM `Roots` AS `r` @@ -1519,17 +1516,17 @@ UNION ALL UNION ALL SELECT `l0`.`Id` FROM `Leaf2s` AS `l0` -) AS `t` +) AS `u` INNER JOIN ( SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `e`.`RootSkipSharedId`, `e`.`ThreeSkipSharedId` FROM `EntityRootEntityThree` AS `e` INNER JOIN `EntityThrees` AS `e0` ON `e`.`ThreeSkipSharedId` = `e0`.`Id` -) AS `t0` ON `t`.`Id` = `t0`.`RootSkipSharedId` -ORDER BY `t`.`Id`, `t0`.`RootSkipSharedId`, `t0`.`ThreeSkipSharedId`, `t0`.`Id` +) AS `s` ON `u`.`Id` = `s`.`RootSkipSharedId` +ORDER BY `u`.`Id`, `s`.`RootSkipSharedId`, `s`.`ThreeSkipSharedId`, `s`.`Id` """, - // - """ -SELECT `t1`.`Id`, `t1`.`Name`, `t`.`Id`, `t0`.`RootSkipSharedId`, `t0`.`ThreeSkipSharedId`, `t0`.`Id` + // + """ +SELECT `s0`.`Id`, `s0`.`Name`, `u`.`Id`, `s`.`RootSkipSharedId`, `s`.`ThreeSkipSharedId`, `s`.`Id` FROM (( SELECT `r`.`Id` FROM `Roots` AS `r` @@ -1542,20 +1539,20 @@ UNION ALL UNION ALL SELECT `l0`.`Id` FROM `Leaf2s` AS `l0` -) AS `t` +) AS `u` INNER JOIN ( SELECT `e0`.`Id`, `e`.`RootSkipSharedId`, `e`.`ThreeSkipSharedId` FROM `EntityRootEntityThree` AS `e` INNER JOIN `EntityThrees` AS `e0` ON `e`.`ThreeSkipSharedId` = `e0`.`Id` -) AS `t0` ON `t`.`Id` = `t0`.`RootSkipSharedId`) +) AS `s` ON `u`.`Id` = `s`.`RootSkipSharedId`) LEFT JOIN ( SELECT `e1`.`Id`, `e1`.`Name`, `j`.`ThreeId` FROM `JoinOneToThreePayloadFullShared` AS `j` INNER JOIN `EntityOnes` AS `e1` ON `j`.`OneId` = `e1`.`Id` WHERE `e1`.`Id` < 10 -) AS `t1` ON `t0`.`Id` = `t1`.`ThreeId` -WHERE `t0`.`Id` IS NOT NULL AND `t1`.`ThreeId` IS NOT NULL -ORDER BY `t`.`Id`, `t0`.`RootSkipSharedId`, `t0`.`ThreeSkipSharedId`, `t0`.`Id` +) AS `s0` ON `s`.`Id` = `s0`.`ThreeId` +WHERE `s`.`Id` IS NOT NULL AND `s0`.`ThreeId` IS NOT NULL +ORDER BY `u`.`Id`, `s`.`RootSkipSharedId`, `s`.`ThreeSkipSharedId`, `s`.`Id` """); } @@ -1643,40 +1640,40 @@ public override async Task Filtered_include_skip_navigation_where_then_include_s await base.Filtered_include_skip_navigation_where_then_include_skip_navigation_split(async); AssertSql( -""" + """ SELECT `l`.`Id`, `l`.`Name`, `l`.`Number`, `l`.`IsGreen` FROM `Leaves` AS `l` ORDER BY `l`.`Id` """, - // - """ -SELECT `t`.`Key1`, `t`.`Key2`, `t`.`Key3`, `t`.`Name`, `l`.`Id`, `t`.`LeafId`, `t`.`CompositeId1`, `t`.`CompositeId2`, `t`.`CompositeId3` + // + """ +SELECT `s`.`Key1`, `s`.`Key2`, `s`.`Key3`, `s`.`Name`, `l`.`Id`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3` FROM `Leaves` AS `l` INNER JOIN ( SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name`, `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3` FROM `JoinCompositeKeyToLeaf` AS `j` INNER JOIN `EntityCompositeKeys` AS `e` ON `j`.`CompositeId1` = `e`.`Key1` AND `j`.`CompositeId2` = `e`.`Key2` AND `j`.`CompositeId3` = `e`.`Key3` WHERE `e`.`Key1` < 5 -) AS `t` ON `l`.`Id` = `t`.`LeafId` -ORDER BY `l`.`Id`, `t`.`LeafId`, `t`.`CompositeId1`, `t`.`CompositeId2`, `t`.`CompositeId3`, `t`.`Key1`, `t`.`Key2`, `t`.`Key3` +) AS `s` ON `l`.`Id` = `s`.`LeafId` +ORDER BY `l`.`Id`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Key1`, `s`.`Key2`, `s`.`Key3` """, - // - """ -SELECT `t0`.`Id`, `t0`.`CollectionInverseId`, `t0`.`ExtraId`, `t0`.`Name`, `t0`.`ReferenceInverseId`, `l`.`Id`, `t`.`LeafId`, `t`.`CompositeId1`, `t`.`CompositeId2`, `t`.`CompositeId3`, `t`.`Key1`, `t`.`Key2`, `t`.`Key3` + // + """ +SELECT `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name`, `s0`.`ReferenceInverseId`, `l`.`Id`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Key1`, `s`.`Key2`, `s`.`Key3` FROM (`Leaves` AS `l` INNER JOIN ( SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3` FROM `JoinCompositeKeyToLeaf` AS `j` INNER JOIN `EntityCompositeKeys` AS `e` ON `j`.`CompositeId1` = `e`.`Key1` AND `j`.`CompositeId2` = `e`.`Key2` AND `j`.`CompositeId3` = `e`.`Key3` WHERE `e`.`Key1` < 5 -) AS `t` ON `l`.`Id` = `t`.`LeafId`) +) AS `s` ON `l`.`Id` = `s`.`LeafId`) LEFT JOIN ( SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name`, `e1`.`ReferenceInverseId`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3` FROM `EntityCompositeKeyEntityTwo` AS `e0` INNER JOIN `EntityTwos` AS `e1` ON `e0`.`TwoSkipSharedId` = `e1`.`Id` -) AS `t0` ON `t`.`Key1` = `t0`.`CompositeKeySkipSharedKey1` AND `t`.`Key2` = `t0`.`CompositeKeySkipSharedKey2` AND `t`.`Key3` = `t0`.`CompositeKeySkipSharedKey3` -WHERE `t`.`Key1` IS NOT NULL AND `t0`.`CompositeKeySkipSharedKey1` IS NOT NULL AND `t`.`Key2` IS NOT NULL AND `t0`.`CompositeKeySkipSharedKey2` IS NOT NULL AND `t`.`Key3` IS NOT NULL AND `t0`.`CompositeKeySkipSharedKey3` IS NOT NULL -ORDER BY `l`.`Id`, `t`.`LeafId`, `t`.`CompositeId1`, `t`.`CompositeId2`, `t`.`CompositeId3`, `t`.`Key1`, `t`.`Key2`, `t`.`Key3` +) AS `s0` ON `s`.`Key1` = `s0`.`CompositeKeySkipSharedKey1` AND `s`.`Key2` = `s0`.`CompositeKeySkipSharedKey2` AND `s`.`Key3` = `s0`.`CompositeKeySkipSharedKey3` +WHERE `s`.`Key1` IS NOT NULL AND `s0`.`CompositeKeySkipSharedKey1` IS NOT NULL AND `s`.`Key2` IS NOT NULL AND `s0`.`CompositeKeySkipSharedKey2` IS NOT NULL AND `s`.`Key3` IS NOT NULL AND `s0`.`CompositeKeySkipSharedKey3` IS NOT NULL +ORDER BY `l`.`Id`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Key1`, `s`.`Key2`, `s`.`Key3` """); } @@ -1785,7 +1782,7 @@ ORDER BY `e`.`Id` """, // """ -SELECT `t`.`Id`, `t`.`Name`, `t`.`Id0`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name0`, `t`.`ReferenceInverseId`, `e`.`Id`, `t`.`OneId`, `t`.`TwoId` +SELECT `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneId`, `s`.`TwoId` FROM `EntityTwos` AS `e` INNER JOIN ( SELECT `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `j`.`OneId`, `j`.`TwoId` @@ -1793,12 +1790,12 @@ INNER JOIN ( INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` WHERE `e0`.`Id` < 10 -) AS `t` ON `e`.`Id` = `t`.`TwoId` -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`TwoId`, `t`.`Id`, `t`.`Id0` +) AS `s` ON `e`.`Id` = `s`.`TwoId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s`.`Id0` """, // """ -SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e`.`Id`, `t`.`OneId`, `t`.`TwoId`, `t`.`Id`, `t`.`Id0` +SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s`.`Id0` FROM (`EntityTwos` AS `e` INNER JOIN ( SELECT `e0`.`Id`, `e1`.`Id` AS `Id0`, `j`.`OneId`, `j`.`TwoId` @@ -1806,10 +1803,10 @@ INNER JOIN ( INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` WHERE `e0`.`Id` < 10 -) AS `t` ON `e`.`Id` = `t`.`TwoId`) -LEFT JOIN `EntityTwos` AS `e2` ON `t`.`Id` = `e2`.`CollectionInverseId` -WHERE `t`.`Id` IS NOT NULL AND `e2`.`CollectionInverseId` IS NOT NULL -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`TwoId`, `t`.`Id`, `t`.`Id0` +) AS `s` ON `e`.`Id` = `s`.`TwoId`) +LEFT JOIN `EntityTwos` AS `e2` ON `s`.`Id` = `e2`.`CollectionInverseId` +WHERE `s`.`Id` IS NOT NULL AND `e2`.`CollectionInverseId` IS NOT NULL +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s`.`Id0` """); } @@ -1894,33 +1891,33 @@ ORDER BY `e`.`Id` """, // """ -SELECT `t`.`Id`, `t`.`Name`, `e`.`Id`, `t`.`OneId`, `t`.`ThreeId` +SELECT `s`.`Id`, `s`.`Name`, `e`.`Id`, `s`.`OneId`, `s`.`ThreeId` FROM `EntityThrees` AS `e` INNER JOIN ( SELECT `e0`.`Id`, `e0`.`Name`, `j`.`OneId`, `j`.`ThreeId` FROM `JoinOneToThreePayloadFull` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` WHERE `e0`.`Id` > 15 -) AS `t` ON `e`.`Id` = `t`.`ThreeId` -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`ThreeId`, `t`.`Id` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id` """, // """ -SELECT `t0`.`Id`, `t0`.`CollectionInverseId`, `t0`.`ExtraId`, `t0`.`Name`, `t0`.`ReferenceInverseId`, `e`.`Id`, `t`.`OneId`, `t`.`ThreeId`, `t`.`Id` +SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id` FROM (`EntityThrees` AS `e` INNER JOIN ( SELECT `e0`.`Id`, `j`.`OneId`, `j`.`ThreeId` FROM `JoinOneToThreePayloadFull` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` WHERE `e0`.`Id` > 15 -) AS `t` ON `e`.`Id` = `t`.`ThreeId`) +) AS `s` ON `e`.`Id` = `s`.`ThreeId`) LEFT JOIN ( SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name`, `e1`.`ReferenceInverseId` FROM `EntityTwos` AS `e1` WHERE `e1`.`Id` < 5 -) AS `t0` ON `t`.`Id` = `t0`.`CollectionInverseId` -WHERE `t`.`Id` IS NOT NULL AND `t0`.`CollectionInverseId` IS NOT NULL -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`ThreeId`, `t`.`Id` +) AS `e2` ON `s`.`Id` = `e2`.`CollectionInverseId` +WHERE `s`.`Id` IS NOT NULL AND `e2`.`CollectionInverseId` IS NOT NULL +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id` """); } @@ -1936,32 +1933,32 @@ ORDER BY `e`.`Id` """, // """ -SELECT `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name`, `t`.`ReferenceInverseId`, `e`.`Id` +SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e`.`Id` FROM `EntityOnes` AS `e` INNER JOIN ( SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId` FROM `EntityTwos` AS `e0` WHERE `e0`.`Id` > 15 -) AS `t` ON `e`.`Id` = `t`.`CollectionInverseId` -ORDER BY `e`.`Id`, `t`.`Id` +) AS `e2` ON `e`.`Id` = `e2`.`CollectionInverseId` +ORDER BY `e`.`Id`, `e2`.`Id` """, // """ -SELECT `t0`.`Id`, `t0`.`CollectionInverseId`, `t0`.`Name`, `t0`.`ReferenceInverseId`, `e`.`Id`, `t`.`Id` +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId`, `e`.`Id`, `e2`.`Id` FROM (`EntityOnes` AS `e` INNER JOIN ( SELECT `e0`.`Id`, `e0`.`CollectionInverseId` FROM `EntityTwos` AS `e0` WHERE `e0`.`Id` > 15 -) AS `t` ON `e`.`Id` = `t`.`CollectionInverseId`) +) AS `e2` ON `e`.`Id` = `e2`.`CollectionInverseId`) LEFT JOIN ( SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`Name`, `e1`.`ReferenceInverseId`, `j`.`TwoId` FROM `JoinTwoToThree` AS `j` INNER JOIN `EntityThrees` AS `e1` ON `j`.`ThreeId` = `e1`.`Id` WHERE `e1`.`Id` < 5 -) AS `t0` ON `t`.`Id` = `t0`.`TwoId` -WHERE `t`.`Id` IS NOT NULL AND `t0`.`TwoId` IS NOT NULL -ORDER BY `e`.`Id`, `t`.`Id` +) AS `s` ON `e2`.`Id` = `s`.`TwoId` +WHERE `e2`.`Id` IS NOT NULL AND `s`.`TwoId` IS NOT NULL +ORDER BY `e`.`Id`, `e2`.`Id` """); } @@ -2005,14 +2002,14 @@ public override async Task Select_many_over_skip_navigation_where_non_equality(b await base.Select_many_over_skip_navigation_where_non_equality(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name`, `t`.`ReferenceInverseId` + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId` FROM `EntityOnes` AS `e` LEFT JOIN ( SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `j`.`OneId` FROM `JoinOneToTwo` AS `j` INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` -) AS `t` ON `e`.`Id` = `t`.`OneId` AND `e`.`Id` <> `t`.`Id` +) AS `s` ON `e`.`Id` = `s`.`OneId` AND `e`.`Id` <> `s`.`Id` """); } @@ -2073,14 +2070,14 @@ public override async Task GetType_in_hierarchy_in_querying_base_type(bool async AssertSql( """ -SELECT `t`.`Id`, `t`.`Name`, `t`.`Number`, `t`.`IsGreen`, `t`.`Discriminator` +SELECT `u`.`Id`, `u`.`Name`, `u`.`Number`, `u`.`IsGreen`, `u`.`Discriminator` FROM ( SELECT `b`.`Id`, `b`.`Name`, `b`.`Number`, CVar(NULL) AS `IsGreen`, 'EntityBranch' AS `Discriminator` FROM `Branches` AS `b` UNION ALL SELECT `l`.`Id`, `l`.`Name`, `l`.`Number`, `l`.`IsGreen`, 'EntityLeaf' AS `Discriminator` FROM `Leaves` AS `l` -) AS `t` +) AS `u` WHERE 0 = 1 """); } @@ -2213,22 +2210,22 @@ public override async Task Skip_navigation_count_with_predicate_unidirectional(b AssertSql( """ -SELECT `t3`.`Id`, `t3`.`Name`, `t3`.`c` +SELECT `u4`.`Id`, `u4`.`Name`, `u4`.`c` FROM ( SELECT `u`.`Id`, `u`.`Name`, ( SELECT COUNT(*) - FROM `UnidirectionalJoinOneToBranch` AS `u3` + FROM `UnidirectionalJoinOneToBranch` AS `u0` INNER JOIN ( - SELECT `u4`.`Id`, `u4`.`Name`, `u4`.`Number`, CVar(NULL) AS `IsGreen`, 'UnidirectionalEntityBranch' AS `Discriminator` - FROM `UnidirectionalBranches` AS `u4` + SELECT `u1`.`Id`, `u1`.`Name` + FROM `UnidirectionalBranches` AS `u1` UNION ALL - SELECT `u5`.`Id`, `u5`.`Name`, `u5`.`Number`, `u5`.`IsGreen`, 'UnidirectionalEntityLeaf' AS `Discriminator` - FROM `UnidirectionalLeaves` AS `u5` - ) AS `t1` ON `u3`.`UnidirectionalEntityBranchId` = `t1`.`Id` - WHERE `u`.`Id` = `u3`.`UnidirectionalEntityOneId` AND (`t1`.`Name` LIKE 'L%')) AS `c` + SELECT `u2`.`Id`, `u2`.`Name` + FROM `UnidirectionalLeaves` AS `u2` + ) AS `u3` ON `u0`.`UnidirectionalEntityBranchId` = `u3`.`Id` + WHERE `u`.`Id` = `u0`.`UnidirectionalEntityOneId` AND (`u3`.`Name` LIKE 'L%')) AS `c` FROM `UnidirectionalEntityOnes` AS `u` -) AS `t3` -ORDER BY `t3`.`c`, `t3`.`Id` +) AS `u4` +ORDER BY `u4`.`c`, `u4`.`Id` """); } @@ -2273,10 +2270,10 @@ public override async Task Skip_navigation_of_type_unidirectional(bool async) AssertSql( """ -SELECT `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `t0`.`Id`, `t0`.`Name`, `t0`.`Number`, `t0`.`IsGreen`, `t0`.`Discriminator`, `t0`.`RootSkipSharedId`, `t0`.`UnidirectionalEntityCompositeKeyKey1`, `t0`.`UnidirectionalEntityCompositeKeyKey2`, `t0`.`UnidirectionalEntityCompositeKeyKey3` +SELECT `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s`.`Discriminator`, `s`.`RootSkipSharedId`, `s`.`UnidirectionalEntityCompositeKeyKey1`, `s`.`UnidirectionalEntityCompositeKeyKey2`, `s`.`UnidirectionalEntityCompositeKeyKey3` FROM `UnidirectionalEntityCompositeKeys` AS `u` LEFT JOIN ( - SELECT `t`.`Id`, `t`.`Name`, `t`.`Number`, `t`.`IsGreen`, `t`.`Discriminator`, `u0`.`RootSkipSharedId`, `u0`.`UnidirectionalEntityCompositeKeyKey1`, `u0`.`UnidirectionalEntityCompositeKeyKey2`, `u0`.`UnidirectionalEntityCompositeKeyKey3` + SELECT `u4`.`Id`, `u4`.`Name`, `u4`.`Number`, `u4`.`IsGreen`, `u4`.`Discriminator`, `u0`.`RootSkipSharedId`, `u0`.`UnidirectionalEntityCompositeKeyKey1`, `u0`.`UnidirectionalEntityCompositeKeyKey2`, `u0`.`UnidirectionalEntityCompositeKeyKey3` FROM `UnidirectionalEntityCompositeKeyUnidirectionalEntityRoot` AS `u0` INNER JOIN ( SELECT `u1`.`Id`, `u1`.`Name`, CVar(NULL) AS `Number`, CVar(NULL) AS `IsGreen`, 'UnidirectionalEntityRoot' AS `Discriminator` @@ -2287,10 +2284,10 @@ UNION ALL UNION ALL SELECT `u3`.`Id`, `u3`.`Name`, `u3`.`Number`, `u3`.`IsGreen`, 'UnidirectionalEntityLeaf' AS `Discriminator` FROM `UnidirectionalLeaves` AS `u3` - ) AS `t` ON `u0`.`RootSkipSharedId` = `t`.`Id` - WHERE `t`.`Discriminator` = 'UnidirectionalEntityLeaf' -) AS `t0` ON `u`.`Key1` = `t0`.`UnidirectionalEntityCompositeKeyKey1` AND `u`.`Key2` = `t0`.`UnidirectionalEntityCompositeKeyKey2` AND `u`.`Key3` = `t0`.`UnidirectionalEntityCompositeKeyKey3` -ORDER BY `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `t0`.`RootSkipSharedId`, `t0`.`UnidirectionalEntityCompositeKeyKey1`, `t0`.`UnidirectionalEntityCompositeKeyKey2`, `t0`.`UnidirectionalEntityCompositeKeyKey3` + ) AS `u4` ON `u0`.`RootSkipSharedId` = `u4`.`Id` + WHERE `u4`.`Discriminator` = 'UnidirectionalEntityLeaf' +) AS `s` ON `u`.`Key1` = `s`.`UnidirectionalEntityCompositeKeyKey1` AND `u`.`Key2` = `s`.`UnidirectionalEntityCompositeKeyKey2` AND `u`.`Key3` = `s`.`UnidirectionalEntityCompositeKeyKey3` +ORDER BY `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `s`.`RootSkipSharedId`, `s`.`UnidirectionalEntityCompositeKeyKey1`, `s`.`UnidirectionalEntityCompositeKeyKey2`, `s`.`UnidirectionalEntityCompositeKeyKey3` """); } @@ -2339,23 +2336,23 @@ public override async Task Select_many_over_skip_navigation_unidirectional(bool await base.Select_many_over_skip_navigation_unidirectional(async); AssertSql( -""" -SELECT `t0`.`Id`, `t0`.`CollectionInverseId`, `t0`.`Name`, `t0`.`ReferenceInverseId` + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId` FROM ( - SELECT `u1`.`Id` - FROM `UnidirectionalRoots` AS `u1` + SELECT `u`.`Id` + FROM `UnidirectionalRoots` AS `u` UNION ALL - SELECT `u2`.`Id` - FROM `UnidirectionalBranches` AS `u2` + SELECT `u0`.`Id` + FROM `UnidirectionalBranches` AS `u0` UNION ALL - SELECT `u3`.`Id` - FROM `UnidirectionalLeaves` AS `u3` -) AS `t` + SELECT `u1`.`Id` + FROM `UnidirectionalLeaves` AS `u1` +) AS `u2` INNER JOIN ( - SELECT `u0`.`Id`, `u0`.`CollectionInverseId`, `u0`.`Name`, `u0`.`ReferenceInverseId`, `u`.`UnidirectionalEntityRootId` - FROM `UnidirectionalEntityRootUnidirectionalEntityThree` AS `u` - INNER JOIN `UnidirectionalEntityThrees` AS `u0` ON `u`.`ThreeSkipSharedId` = `u0`.`Id` -) AS `t0` ON `t`.`Id` = `t0`.`UnidirectionalEntityRootId` + SELECT `u4`.`Id`, `u4`.`CollectionInverseId`, `u4`.`Name`, `u4`.`ReferenceInverseId`, `u3`.`UnidirectionalEntityRootId` + FROM `UnidirectionalEntityRootUnidirectionalEntityThree` AS `u3` + INNER JOIN `UnidirectionalEntityThrees` AS `u4` ON `u3`.`ThreeSkipSharedId` = `u4`.`Id` +) AS `s` ON `u2`.`Id` = `s`.`UnidirectionalEntityRootId` """); } @@ -2364,14 +2361,14 @@ public override async Task Select_many_over_skip_navigation_where_unidirectional await base.Select_many_over_skip_navigation_where_unidirectional(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name`, `t`.`ReferenceInverseId` + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId` FROM `UnidirectionalEntityOnes` AS `u` LEFT JOIN ( SELECT `u1`.`Id`, `u1`.`CollectionInverseId`, `u1`.`ExtraId`, `u1`.`Name`, `u1`.`ReferenceInverseId`, `u0`.`OneId` FROM `UnidirectionalJoinOneToTwo` AS `u0` INNER JOIN `UnidirectionalEntityTwos` AS `u1` ON `u0`.`TwoId` = `u1`.`Id` -) AS `t` ON `u`.`Id` = `t`.`OneId` +) AS `s` ON `u`.`Id` = `s`.`OneId` """); } @@ -2421,10 +2418,10 @@ public override async Task Select_many_over_skip_navigation_cast_unidirectional( AssertSql( """ -SELECT `t0`.`Id`, `t0`.`Name`, `t0`.`Number`, `t0`.`IsGreen`, `t0`.`Discriminator` +SELECT `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s`.`Discriminator` FROM `UnidirectionalEntityOnes` AS `u` INNER JOIN ( - SELECT `t`.`Id`, `t`.`Name`, `t`.`Number`, `t`.`IsGreen`, `t`.`Discriminator`, `u0`.`UnidirectionalEntityOneId` + SELECT `u3`.`Id`, `u3`.`Name`, `u3`.`Number`, `u3`.`IsGreen`, `u3`.`Discriminator`, `u0`.`UnidirectionalEntityOneId` FROM `UnidirectionalJoinOneToBranch` AS `u0` INNER JOIN ( SELECT `u1`.`Id`, `u1`.`Name`, `u1`.`Number`, CVar(NULL) AS `IsGreen`, 'UnidirectionalEntityBranch' AS `Discriminator` @@ -2432,8 +2429,8 @@ INNER JOIN ( UNION ALL SELECT `u2`.`Id`, `u2`.`Name`, `u2`.`Number`, `u2`.`IsGreen`, 'UnidirectionalEntityLeaf' AS `Discriminator` FROM `UnidirectionalLeaves` AS `u2` - ) AS `t` ON `u0`.`UnidirectionalEntityBranchId` = `t`.`Id` -) AS `t0` ON `u`.`Id` = `t0`.`UnidirectionalEntityOneId` + ) AS `u3` ON `u0`.`UnidirectionalEntityBranchId` = `u3`.`Id` +) AS `s` ON `u`.`Id` = `s`.`UnidirectionalEntityOneId` """); } @@ -2442,15 +2439,15 @@ public override async Task Select_skip_navigation_unidirectional(bool async) await base.Select_skip_navigation_unidirectional(async); AssertSql( -""" -SELECT `u`.`Id`, `t`.`Id`, `t`.`Name`, `t`.`LeftId`, `t`.`RightId` + """ +SELECT `u`.`Id`, `s`.`Id`, `s`.`Name`, `s`.`LeftId`, `s`.`RightId` FROM `UnidirectionalEntityOnes` AS `u` LEFT JOIN ( SELECT `u1`.`Id`, `u1`.`Name`, `u0`.`LeftId`, `u0`.`RightId` FROM `UnidirectionalJoinOneSelfPayload` AS `u0` INNER JOIN `UnidirectionalEntityOnes` AS `u1` ON `u0`.`LeftId` = `u1`.`Id` -) AS `t` ON `u`.`Id` = `t`.`RightId` -ORDER BY `u`.`Id`, `t`.`LeftId`, `t`.`RightId` +) AS `s` ON `u`.`Id` = `s`.`RightId` +ORDER BY `u`.`Id`, `s`.`LeftId`, `s`.`RightId` """); } @@ -2460,10 +2457,10 @@ public override async Task Include_skip_navigation_unidirectional(bool async) AssertSql( """ -SELECT `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `u`.`Name`, `t0`.`Id`, `t0`.`Name`, `t0`.`Number`, `t0`.`IsGreen`, `t0`.`Discriminator`, `t0`.`RootSkipSharedId`, `t0`.`UnidirectionalEntityCompositeKeyKey1`, `t0`.`UnidirectionalEntityCompositeKeyKey2`, `t0`.`UnidirectionalEntityCompositeKeyKey3` +SELECT `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `u`.`Name`, `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s`.`Discriminator`, `s`.`RootSkipSharedId`, `s`.`UnidirectionalEntityCompositeKeyKey1`, `s`.`UnidirectionalEntityCompositeKeyKey2`, `s`.`UnidirectionalEntityCompositeKeyKey3` FROM `UnidirectionalEntityCompositeKeys` AS `u` LEFT JOIN ( - SELECT `t`.`Id`, `t`.`Name`, `t`.`Number`, `t`.`IsGreen`, `t`.`Discriminator`, `u0`.`RootSkipSharedId`, `u0`.`UnidirectionalEntityCompositeKeyKey1`, `u0`.`UnidirectionalEntityCompositeKeyKey2`, `u0`.`UnidirectionalEntityCompositeKeyKey3` + SELECT `u4`.`Id`, `u4`.`Name`, `u4`.`Number`, `u4`.`IsGreen`, `u4`.`Discriminator`, `u0`.`RootSkipSharedId`, `u0`.`UnidirectionalEntityCompositeKeyKey1`, `u0`.`UnidirectionalEntityCompositeKeyKey2`, `u0`.`UnidirectionalEntityCompositeKeyKey3` FROM `UnidirectionalEntityCompositeKeyUnidirectionalEntityRoot` AS `u0` INNER JOIN ( SELECT `u1`.`Id`, `u1`.`Name`, CVar(NULL) AS `Number`, CVar(NULL) AS `IsGreen`, 'UnidirectionalEntityRoot' AS `Discriminator` @@ -2474,9 +2471,9 @@ UNION ALL UNION ALL SELECT `u3`.`Id`, `u3`.`Name`, `u3`.`Number`, `u3`.`IsGreen`, 'UnidirectionalEntityLeaf' AS `Discriminator` FROM `UnidirectionalLeaves` AS `u3` - ) AS `t` ON `u0`.`RootSkipSharedId` = `t`.`Id` -) AS `t0` ON `u`.`Key1` = `t0`.`UnidirectionalEntityCompositeKeyKey1` AND `u`.`Key2` = `t0`.`UnidirectionalEntityCompositeKeyKey2` AND `u`.`Key3` = `t0`.`UnidirectionalEntityCompositeKeyKey3` -ORDER BY `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `t0`.`RootSkipSharedId`, `t0`.`UnidirectionalEntityCompositeKeyKey1`, `t0`.`UnidirectionalEntityCompositeKeyKey2`, `t0`.`UnidirectionalEntityCompositeKeyKey3` + ) AS `u4` ON `u0`.`RootSkipSharedId` = `u4`.`Id` +) AS `s` ON `u`.`Key1` = `s`.`UnidirectionalEntityCompositeKeyKey1` AND `u`.`Key2` = `s`.`UnidirectionalEntityCompositeKeyKey2` AND `u`.`Key3` = `s`.`UnidirectionalEntityCompositeKeyKey3` +ORDER BY `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `s`.`RootSkipSharedId`, `s`.`UnidirectionalEntityCompositeKeyKey1`, `s`.`UnidirectionalEntityCompositeKeyKey2`, `s`.`UnidirectionalEntityCompositeKeyKey3` """); } @@ -2485,16 +2482,16 @@ public override async Task Include_skip_navigation_then_reference_unidirectional await base.Include_skip_navigation_then_reference_unidirectional(async); AssertSql( -""" -SELECT `u`.`Id`, `u`.`CollectionInverseId`, `u`.`ExtraId`, `u`.`Name`, `u`.`ReferenceInverseId`, `t`.`Id`, `t`.`Name`, `t`.`Id0`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name0`, `t`.`ReferenceInverseId`, `t`.`OneId`, `t`.`TwoId` + """ +SELECT `u`.`Id`, `u`.`CollectionInverseId`, `u`.`ExtraId`, `u`.`Name`, `u`.`ReferenceInverseId`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `s`.`OneId`, `s`.`TwoId` FROM `UnidirectionalEntityTwos` AS `u` LEFT JOIN ( SELECT `u1`.`Id`, `u1`.`Name`, `u2`.`Id` AS `Id0`, `u2`.`CollectionInverseId`, `u2`.`ExtraId`, `u2`.`Name` AS `Name0`, `u2`.`ReferenceInverseId`, `u0`.`OneId`, `u0`.`TwoId` FROM (`UnidirectionalJoinOneToTwo` AS `u0` INNER JOIN `UnidirectionalEntityOnes` AS `u1` ON `u0`.`OneId` = `u1`.`Id`) LEFT JOIN `UnidirectionalEntityTwos` AS `u2` ON `u1`.`Id` = `u2`.`ReferenceInverseId` -) AS `t` ON `u`.`Id` = `t`.`TwoId` -ORDER BY `u`.`Id`, `t`.`OneId`, `t`.`TwoId`, `t`.`Id` +) AS `s` ON `u`.`Id` = `s`.`TwoId` +ORDER BY `u`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id` """); } @@ -2503,20 +2500,20 @@ public override async Task Include_skip_navigation_then_include_skip_navigation_ await base.Include_skip_navigation_then_include_skip_navigation_unidirectional(async); AssertSql( -""" -SELECT `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `u`.`Name`, `t0`.`Id`, `t0`.`Name`, `t0`.`Number`, `t0`.`IsGreen`, `t0`.`LeafId`, `t0`.`CompositeId1`, `t0`.`CompositeId2`, `t0`.`CompositeId3`, `t0`.`Id0`, `t0`.`Name0`, `t0`.`UnidirectionalEntityBranchId`, `t0`.`UnidirectionalEntityOneId` + """ +SELECT `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `u`.`Name`, `s0`.`Id`, `s0`.`Name`, `s0`.`Number`, `s0`.`IsGreen`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Id0`, `s0`.`Name0`, `s0`.`UnidirectionalEntityBranchId`, `s0`.`UnidirectionalEntityOneId` FROM `UnidirectionalEntityCompositeKeys` AS `u` LEFT JOIN ( - SELECT `u1`.`Id`, `u1`.`Name`, `u1`.`Number`, `u1`.`IsGreen`, `u0`.`LeafId`, `u0`.`CompositeId1`, `u0`.`CompositeId2`, `u0`.`CompositeId3`, `t`.`Id` AS `Id0`, `t`.`Name` AS `Name0`, `t`.`UnidirectionalEntityBranchId`, `t`.`UnidirectionalEntityOneId` + SELECT `u1`.`Id`, `u1`.`Name`, `u1`.`Number`, `u1`.`IsGreen`, `u0`.`LeafId`, `u0`.`CompositeId1`, `u0`.`CompositeId2`, `u0`.`CompositeId3`, `s`.`Id` AS `Id0`, `s`.`Name` AS `Name0`, `s`.`UnidirectionalEntityBranchId`, `s`.`UnidirectionalEntityOneId` FROM (`UnidirectionalJoinCompositeKeyToLeaf` AS `u0` INNER JOIN `UnidirectionalLeaves` AS `u1` ON `u0`.`LeafId` = `u1`.`Id`) LEFT JOIN ( SELECT `u3`.`Id`, `u3`.`Name`, `u2`.`UnidirectionalEntityBranchId`, `u2`.`UnidirectionalEntityOneId` FROM `UnidirectionalJoinOneToBranch` AS `u2` INNER JOIN `UnidirectionalEntityOnes` AS `u3` ON `u2`.`UnidirectionalEntityOneId` = `u3`.`Id` - ) AS `t` ON `u1`.`Id` = `t`.`UnidirectionalEntityBranchId` -) AS `t0` ON `u`.`Key1` = `t0`.`CompositeId1` AND `u`.`Key2` = `t0`.`CompositeId2` AND `u`.`Key3` = `t0`.`CompositeId3` -ORDER BY `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `t0`.`LeafId`, `t0`.`CompositeId1`, `t0`.`CompositeId2`, `t0`.`CompositeId3`, `t0`.`Id`, `t0`.`UnidirectionalEntityBranchId`, `t0`.`UnidirectionalEntityOneId` + ) AS `s` ON `u1`.`Id` = `s`.`UnidirectionalEntityBranchId` +) AS `s0` ON `u`.`Key1` = `s0`.`CompositeId1` AND `u`.`Key2` = `s0`.`CompositeId2` AND `u`.`Key3` = `s0`.`CompositeId3` +ORDER BY `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Id`, `s0`.`UnidirectionalEntityBranchId`, `s0`.`UnidirectionalEntityOneId` """); } @@ -2525,11 +2522,11 @@ public override async Task Include_skip_navigation_then_include_reference_and_sk await base.Include_skip_navigation_then_include_reference_and_skip_navigation_unidirectional(async); AssertSql( -""" -SELECT `u`.`Id`, `u`.`CollectionInverseId`, `u`.`Name`, `u`.`ReferenceInverseId`, `t0`.`Id`, `t0`.`Name`, `t0`.`Id0`, `t0`.`CollectionInverseId`, `t0`.`ExtraId`, `t0`.`Name0`, `t0`.`ReferenceInverseId`, `t0`.`OneId`, `t0`.`ThreeId`, `t0`.`Id1`, `t0`.`Name1`, `t0`.`LeftId`, `t0`.`RightId` + """ +SELECT `u`.`Id`, `u`.`CollectionInverseId`, `u`.`Name`, `u`.`ReferenceInverseId`, `s0`.`Id`, `s0`.`Name`, `s0`.`Id0`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name0`, `s0`.`ReferenceInverseId`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Id1`, `s0`.`Name1`, `s0`.`LeftId`, `s0`.`RightId` FROM `UnidirectionalEntityThrees` AS `u` LEFT JOIN ( - SELECT `u1`.`Id`, `u1`.`Name`, `u2`.`Id` AS `Id0`, `u2`.`CollectionInverseId`, `u2`.`ExtraId`, `u2`.`Name` AS `Name0`, `u2`.`ReferenceInverseId`, `u0`.`OneId`, `u0`.`ThreeId`, `t`.`Id` AS `Id1`, `t`.`Name` AS `Name1`, `t`.`LeftId`, `t`.`RightId` + SELECT `u1`.`Id`, `u1`.`Name`, `u2`.`Id` AS `Id0`, `u2`.`CollectionInverseId`, `u2`.`ExtraId`, `u2`.`Name` AS `Name0`, `u2`.`ReferenceInverseId`, `u0`.`OneId`, `u0`.`ThreeId`, `s`.`Id` AS `Id1`, `s`.`Name` AS `Name1`, `s`.`LeftId`, `s`.`RightId` FROM ((`UnidirectionalJoinOneToThreePayloadFull` AS `u0` INNER JOIN `UnidirectionalEntityOnes` AS `u1` ON `u0`.`OneId` = `u1`.`Id`) LEFT JOIN `UnidirectionalEntityTwos` AS `u2` ON `u1`.`Id` = `u2`.`ReferenceInverseId`) @@ -2537,9 +2534,9 @@ LEFT JOIN ( SELECT `u4`.`Id`, `u4`.`Name`, `u3`.`LeftId`, `u3`.`RightId` FROM `UnidirectionalJoinOneSelfPayload` AS `u3` INNER JOIN `UnidirectionalEntityOnes` AS `u4` ON `u3`.`RightId` = `u4`.`Id` - ) AS `t` ON `u1`.`Id` = `t`.`LeftId` -) AS `t0` ON `u`.`Id` = `t0`.`ThreeId` -ORDER BY `u`.`Id`, `t0`.`OneId`, `t0`.`ThreeId`, `t0`.`Id`, `t0`.`Id0`, `t0`.`LeftId`, `t0`.`RightId` + ) AS `s` ON `u1`.`Id` = `s`.`LeftId` +) AS `s0` ON `u`.`Id` = `s0`.`ThreeId` +ORDER BY `u`.`Id`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Id`, `s0`.`Id0`, `s0`.`LeftId`, `s0`.`RightId` """); } @@ -2548,16 +2545,16 @@ public override async Task Include_skip_navigation_and_reference_unidirectional( await base.Include_skip_navigation_and_reference_unidirectional(async); AssertSql( -""" -SELECT `u`.`Id`, `u`.`CollectionInverseId`, `u`.`ExtraId`, `u`.`Name`, `u`.`ReferenceInverseId`, `u0`.`Id`, `t`.`Id`, `t`.`Name`, `t`.`TwoSkipSharedId`, `t`.`UnidirectionalEntityOneId`, `u0`.`CollectionInverseId`, `u0`.`Name`, `u0`.`ReferenceInverseId` + """ +SELECT `u`.`Id`, `u`.`CollectionInverseId`, `u`.`ExtraId`, `u`.`Name`, `u`.`ReferenceInverseId`, `u0`.`Id`, `s`.`Id`, `s`.`Name`, `s`.`TwoSkipSharedId`, `s`.`UnidirectionalEntityOneId`, `u0`.`CollectionInverseId`, `u0`.`Name`, `u0`.`ReferenceInverseId` FROM (`UnidirectionalEntityTwos` AS `u` LEFT JOIN `UnidirectionalEntityThrees` AS `u0` ON `u`.`Id` = `u0`.`ReferenceInverseId`) LEFT JOIN ( SELECT `u2`.`Id`, `u2`.`Name`, `u1`.`TwoSkipSharedId`, `u1`.`UnidirectionalEntityOneId` FROM `UnidirectionalEntityOneUnidirectionalEntityTwo` AS `u1` INNER JOIN `UnidirectionalEntityOnes` AS `u2` ON `u1`.`UnidirectionalEntityOneId` = `u2`.`Id` -) AS `t` ON `u`.`Id` = `t`.`TwoSkipSharedId` -ORDER BY `u`.`Id`, `u0`.`Id`, `t`.`TwoSkipSharedId`, `t`.`UnidirectionalEntityOneId` +) AS `s` ON `u`.`Id` = `s`.`TwoSkipSharedId` +ORDER BY `u`.`Id`, `u0`.`Id`, `s`.`TwoSkipSharedId`, `s`.`UnidirectionalEntityOneId` """); } @@ -2566,16 +2563,16 @@ public override async Task Filtered_include_skip_navigation_where_unidirectional await base.Filtered_include_skip_navigation_where_unidirectional(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `t`.`Id`, `t`.`Name`, `t`.`OneId`, `t`.`ThreeId` + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`Id`, `s`.`Name`, `s`.`OneId`, `s`.`ThreeId` FROM `EntityThrees` AS `e` LEFT JOIN ( SELECT `e0`.`Id`, `e0`.`Name`, `j`.`OneId`, `j`.`ThreeId` FROM `JoinOneToThreePayloadFullShared` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` WHERE `e0`.`Id` < 10 -) AS `t` ON `e`.`Id` = `t`.`ThreeId` -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`ThreeId` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId` """); } @@ -2584,15 +2581,15 @@ public override async Task Filtered_include_skip_navigation_order_by_unidirectio await base.Filtered_include_skip_navigation_order_by_unidirectional(async); AssertSql( -""" -SELECT `u`.`Id`, `u`.`CollectionInverseId`, `u`.`Name`, `u`.`ReferenceInverseId`, `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name`, `t`.`ReferenceInverseId`, `t`.`ThreeId`, `t`.`TwoId` + """ +SELECT `u`.`Id`, `u`.`CollectionInverseId`, `u`.`Name`, `u`.`ReferenceInverseId`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId`, `s`.`ThreeId`, `s`.`TwoId` FROM `UnidirectionalEntityThrees` AS `u` LEFT JOIN ( SELECT `u1`.`Id`, `u1`.`CollectionInverseId`, `u1`.`ExtraId`, `u1`.`Name`, `u1`.`ReferenceInverseId`, `u0`.`ThreeId`, `u0`.`TwoId` FROM `UnidirectionalJoinTwoToThree` AS `u0` INNER JOIN `UnidirectionalEntityTwos` AS `u1` ON `u0`.`TwoId` = `u1`.`Id` -) AS `t` ON `u`.`Id` = `t`.`ThreeId` -ORDER BY `u`.`Id`, `t`.`Id`, `t`.`ThreeId` +) AS `s` ON `u`.`Id` = `s`.`ThreeId` +ORDER BY `u`.`Id`, `s`.`Id`, `s`.`ThreeId` """); } @@ -2663,21 +2660,21 @@ public override async Task Filtered_include_skip_navigation_where_then_include_s await base.Filtered_include_skip_navigation_where_then_include_skip_navigation_unidirectional(async); AssertSql( -""" -SELECT `u`.`Id`, `u`.`Name`, `u`.`Number`, `u`.`IsGreen`, `t0`.`Key1`, `t0`.`Key2`, `t0`.`Key3`, `t0`.`Name`, `t0`.`LeafId`, `t0`.`CompositeId1`, `t0`.`CompositeId2`, `t0`.`CompositeId3`, `t0`.`Id`, `t0`.`CollectionInverseId`, `t0`.`ExtraId`, `t0`.`Name0`, `t0`.`ReferenceInverseId`, `t0`.`TwoSkipSharedId`, `t0`.`UnidirectionalEntityCompositeKeyKey1`, `t0`.`UnidirectionalEntityCompositeKeyKey2`, `t0`.`UnidirectionalEntityCompositeKeyKey3` + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`Number`, `u`.`IsGreen`, `s0`.`Key1`, `s0`.`Key2`, `s0`.`Key3`, `s0`.`Name`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name0`, `s0`.`ReferenceInverseId`, `s0`.`TwoSkipSharedId`, `s0`.`UnidirectionalEntityCompositeKeyKey1`, `s0`.`UnidirectionalEntityCompositeKeyKey2`, `s0`.`UnidirectionalEntityCompositeKeyKey3` FROM `UnidirectionalLeaves` AS `u` LEFT JOIN ( - SELECT `u1`.`Key1`, `u1`.`Key2`, `u1`.`Key3`, `u1`.`Name`, `u0`.`LeafId`, `u0`.`CompositeId1`, `u0`.`CompositeId2`, `u0`.`CompositeId3`, `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name` AS `Name0`, `t`.`ReferenceInverseId`, `t`.`TwoSkipSharedId`, `t`.`UnidirectionalEntityCompositeKeyKey1`, `t`.`UnidirectionalEntityCompositeKeyKey2`, `t`.`UnidirectionalEntityCompositeKeyKey3` + SELECT `u1`.`Key1`, `u1`.`Key2`, `u1`.`Key3`, `u1`.`Name`, `u0`.`LeafId`, `u0`.`CompositeId1`, `u0`.`CompositeId2`, `u0`.`CompositeId3`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name` AS `Name0`, `s`.`ReferenceInverseId`, `s`.`TwoSkipSharedId`, `s`.`UnidirectionalEntityCompositeKeyKey1`, `s`.`UnidirectionalEntityCompositeKeyKey2`, `s`.`UnidirectionalEntityCompositeKeyKey3` FROM (`UnidirectionalJoinCompositeKeyToLeaf` AS `u0` INNER JOIN `UnidirectionalEntityCompositeKeys` AS `u1` ON `u0`.`CompositeId1` = `u1`.`Key1` AND `u0`.`CompositeId2` = `u1`.`Key2` AND `u0`.`CompositeId3` = `u1`.`Key3`) LEFT JOIN ( SELECT `u3`.`Id`, `u3`.`CollectionInverseId`, `u3`.`ExtraId`, `u3`.`Name`, `u3`.`ReferenceInverseId`, `u2`.`TwoSkipSharedId`, `u2`.`UnidirectionalEntityCompositeKeyKey1`, `u2`.`UnidirectionalEntityCompositeKeyKey2`, `u2`.`UnidirectionalEntityCompositeKeyKey3` FROM `UnidirectionalEntityCompositeKeyUnidirectionalEntityTwo` AS `u2` INNER JOIN `UnidirectionalEntityTwos` AS `u3` ON `u2`.`TwoSkipSharedId` = `u3`.`Id` - ) AS `t` ON `u1`.`Key1` = `t`.`UnidirectionalEntityCompositeKeyKey1` AND `u1`.`Key2` = `t`.`UnidirectionalEntityCompositeKeyKey2` AND `u1`.`Key3` = `t`.`UnidirectionalEntityCompositeKeyKey3` + ) AS `s` ON `u1`.`Key1` = `s`.`UnidirectionalEntityCompositeKeyKey1` AND `u1`.`Key2` = `s`.`UnidirectionalEntityCompositeKeyKey2` AND `u1`.`Key3` = `s`.`UnidirectionalEntityCompositeKeyKey3` WHERE `u1`.`Key1` < 5 -) AS `t0` ON `u`.`Id` = `t0`.`LeafId` -ORDER BY `u`.`Id`, `t0`.`LeafId`, `t0`.`CompositeId1`, `t0`.`CompositeId2`, `t0`.`CompositeId3`, `t0`.`Key1`, `t0`.`Key2`, `t0`.`Key3`, `t0`.`TwoSkipSharedId`, `t0`.`UnidirectionalEntityCompositeKeyKey1`, `t0`.`UnidirectionalEntityCompositeKeyKey2`, `t0`.`UnidirectionalEntityCompositeKeyKey3` +) AS `s0` ON `u`.`Id` = `s0`.`LeafId` +ORDER BY `u`.`Id`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Key1`, `s0`.`Key2`, `s0`.`Key3`, `s0`.`TwoSkipSharedId`, `s0`.`UnidirectionalEntityCompositeKeyKey1`, `s0`.`UnidirectionalEntityCompositeKeyKey2`, `s0`.`UnidirectionalEntityCompositeKeyKey3` """); } @@ -2686,8 +2683,8 @@ public override async Task Filter_include_on_skip_navigation_combined_unidirecti await base.Filter_include_on_skip_navigation_combined_unidirectional(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `t`.`Id`, `t`.`Name`, `t`.`Id0`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name0`, `t`.`ReferenceInverseId`, `t`.`OneId`, `t`.`TwoId`, `t`.`Id1`, `t`.`CollectionInverseId0`, `t`.`ExtraId0`, `t`.`Name1`, `t`.`ReferenceInverseId0` + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id1`, `s`.`CollectionInverseId0`, `s`.`ExtraId0`, `s`.`Name1`, `s`.`ReferenceInverseId0` FROM `EntityTwos` AS `e` LEFT JOIN ( SELECT `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `j`.`OneId`, `j`.`TwoId`, `e2`.`Id` AS `Id1`, `e2`.`CollectionInverseId` AS `CollectionInverseId0`, `e2`.`ExtraId` AS `ExtraId0`, `e2`.`Name` AS `Name1`, `e2`.`ReferenceInverseId` AS `ReferenceInverseId0` @@ -2696,8 +2693,8 @@ LEFT JOIN ( LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId`) LEFT JOIN `EntityTwos` AS `e2` ON `e0`.`Id` = `e2`.`CollectionInverseId` WHERE `e0`.`Id` < 10 -) AS `t` ON `e`.`Id` = `t`.`TwoId` -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`TwoId`, `t`.`Id`, `t`.`Id0` +) AS `s` ON `e`.`Id` = `s`.`TwoId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s`.`Id0` """); } @@ -2734,14 +2731,14 @@ public override async Task Select_many_over_skip_navigation_where_non_equality_u await base.Select_many_over_skip_navigation_where_non_equality_unidirectional(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name`, `t`.`ReferenceInverseId` + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId` FROM `UnidirectionalEntityOnes` AS `u` LEFT JOIN ( SELECT `u1`.`Id`, `u1`.`CollectionInverseId`, `u1`.`ExtraId`, `u1`.`Name`, `u1`.`ReferenceInverseId`, `u0`.`OneId` FROM `UnidirectionalJoinOneToTwo` AS `u0` INNER JOIN `UnidirectionalEntityTwos` AS `u1` ON `u0`.`TwoId` = `u1`.`Id` -) AS `t` ON `u`.`Id` = `t`.`OneId` AND `u`.`Id` <> `t`.`Id` +) AS `s` ON `u`.`Id` = `s`.`OneId` AND `u`.`Id` <> `s`.`Id` """); } @@ -2801,14 +2798,14 @@ public override async Task GetType_in_hierarchy_in_querying_base_type_unidirecti AssertSql( """ -SELECT `t`.`Id`, `t`.`Name`, `t`.`Number`, `t`.`IsGreen`, `t`.`Discriminator` +SELECT `u1`.`Id`, `u1`.`Name`, `u1`.`Number`, `u1`.`IsGreen`, `u1`.`Discriminator` FROM ( SELECT `u`.`Id`, `u`.`Name`, `u`.`Number`, CVar(NULL) AS `IsGreen`, 'UnidirectionalEntityBranch' AS `Discriminator` FROM `UnidirectionalBranches` AS `u` UNION ALL SELECT `u0`.`Id`, `u0`.`Name`, `u0`.`Number`, `u0`.`IsGreen`, 'UnidirectionalEntityLeaf' AS `Discriminator` FROM `UnidirectionalLeaves` AS `u0` -) AS `t` +) AS `u1` WHERE 0 = 1 """); } diff --git a/test/EFCore.Jet.FunctionalTests/Query/TPCManyToManyQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/TPCManyToManyQueryJetTest.cs index d0e10c68..4c1b4b59 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/TPCManyToManyQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/TPCManyToManyQueryJetTest.cs @@ -19,9 +19,6 @@ public TPCManyToManyQueryJetTest(TPCManyToManyQueryJetFixture fixture, ITestOutp Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); } - protected override bool CanExecuteQueryString - => false; - [ConditionalFact] public virtual void Check_all_tests_overridden() => TestHelpers.AssertAllMethodsOverridden(GetType()); @@ -112,22 +109,22 @@ public override async Task Skip_navigation_count_with_predicate(bool async) AssertSql( """ -SELECT `t3`.`Id`, `t3`.`Name`, `t3`.`c` +SELECT `e0`.`Id`, `e0`.`Name`, `e0`.`c` FROM ( SELECT `e`.`Id`, `e`.`Name`, ( SELECT COUNT(*) - FROM `JoinOneToBranch` AS `j0` + FROM `JoinOneToBranch` AS `j` INNER JOIN ( - SELECT `b0`.`Id`, `b0`.`Name`, `b0`.`Number`, CVar(NULL) AS `IsGreen`, 'EntityBranch' AS `Discriminator` - FROM `Branches` AS `b0` + SELECT `b`.`Id`, `b`.`Name` + FROM `Branches` AS `b` UNION ALL - SELECT `l0`.`Id`, `l0`.`Name`, `l0`.`Number`, `l0`.`IsGreen`, 'EntityLeaf' AS `Discriminator` - FROM `Leaves` AS `l0` - ) AS `t1` ON `j0`.`EntityBranchId` = `t1`.`Id` - WHERE `e`.`Id` = `j0`.`EntityOneId` AND (`t1`.`Name` LIKE 'L%')) AS `c` + SELECT `l`.`Id`, `l`.`Name` + FROM `Leaves` AS `l` + ) AS `u` ON `j`.`EntityBranchId` = `u`.`Id` + WHERE `e`.`Id` = `j`.`EntityOneId` AND (`u`.`Name` LIKE 'L%')) AS `c` FROM `EntityOnes` AS `e` -) AS `t3` -ORDER BY `t3`.`c`, `t3`.`Id` +) AS `e0` +ORDER BY `e0`.`c`, `e0`.`Id` """); } @@ -153,16 +150,16 @@ public override async Task Skip_navigation_long_count_with_predicate(bool async) AssertSql( """ -SELECT `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name`, `t`.`ReferenceInverseId`, `t`.`c` +SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e2`.`c` FROM ( SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, ( SELECT COUNT(*) - FROM `EntityTwoEntityTwo` AS `e2` - INNER JOIN `EntityTwos` AS `e3` ON `e2`.`SelfSkipSharedLeftId` = `e3`.`Id` - WHERE `e`.`Id` = `e2`.`SelfSkipSharedRightId` AND (`e3`.`Name` LIKE 'L%')) AS `c` + FROM `EntityTwoEntityTwo` AS `e0` + INNER JOIN `EntityTwos` AS `e1` ON `e0`.`SelfSkipSharedLeftId` = `e1`.`Id` + WHERE `e`.`Id` = `e0`.`SelfSkipSharedRightId` AND (`e1`.`Name` LIKE 'L%')) AS `c` FROM `EntityTwos` AS `e` -) AS `t` -ORDER BY `t`.`c` DESC, `t`.`Id` +) AS `e2` +ORDER BY `e2`.`c` DESC, `e2`.`Id` """); } @@ -171,14 +168,14 @@ public override async Task Skip_navigation_select_many_average(bool async) await base.Skip_navigation_select_many_average(async); AssertSql( -""" -SELECT AVG(CDBL(`t`.`Key1`)) + """ +SELECT AVG(CDBL(`s`.`Key1`)) FROM `EntityTwos` AS `e` INNER JOIN ( SELECT `e1`.`Key1`, `e0`.`TwoSkipSharedId` FROM `EntityCompositeKeyEntityTwo` AS `e0` INNER JOIN `EntityCompositeKeys` AS `e1` ON `e0`.`CompositeKeySkipSharedKey1` = `e1`.`Key1` AND `e0`.`CompositeKeySkipSharedKey2` = `e1`.`Key2` AND `e0`.`CompositeKeySkipSharedKey3` = `e1`.`Key3` -) AS `t` ON `e`.`Id` = `t`.`TwoSkipSharedId` +) AS `s` ON `e`.`Id` = `s`.`TwoSkipSharedId` """); } @@ -187,14 +184,14 @@ public override async Task Skip_navigation_select_many_max(bool async) await base.Skip_navigation_select_many_max(async); AssertSql( -""" -SELECT MAX(`t`.`Key1`) + """ +SELECT MAX(`s`.`Key1`) FROM `EntityThrees` AS `e` INNER JOIN ( SELECT `e0`.`Key1`, `j`.`ThreeId` FROM `JoinThreeToCompositeKeyFull` AS `j` INNER JOIN `EntityCompositeKeys` AS `e0` ON `j`.`CompositeId1` = `e0`.`Key1` AND `j`.`CompositeId2` = `e0`.`Key2` AND `j`.`CompositeId3` = `e0`.`Key3` -) AS `t` ON `e`.`Id` = `t`.`ThreeId` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` """); } @@ -203,11 +200,11 @@ public override async Task Skip_navigation_select_many_min(bool async) await base.Skip_navigation_select_many_min(async); AssertSql( -""" -SELECT MIN(`t0`.`Id`) + """ +SELECT MIN(`s`.`Id`) FROM `EntityThrees` AS `e` INNER JOIN ( - SELECT `t`.`Id`, `e0`.`ThreeSkipSharedId` + SELECT `u`.`Id`, `e0`.`ThreeSkipSharedId` FROM `EntityRootEntityThree` AS `e0` INNER JOIN ( SELECT `r`.`Id` @@ -221,8 +218,8 @@ UNION ALL UNION ALL SELECT `l0`.`Id` FROM `Leaf2s` AS `l0` - ) AS `t` ON `e0`.`RootSkipSharedId` = `t`.`Id` -) AS `t0` ON `e`.`Id` = `t0`.`ThreeSkipSharedId` + ) AS `u` ON `e0`.`RootSkipSharedId` = `u`.`Id` +) AS `s` ON `e`.`Id` = `s`.`ThreeSkipSharedId` """); } @@ -231,8 +228,8 @@ public override async Task Skip_navigation_select_many_sum(bool async) await base.Skip_navigation_select_many_sum(async); AssertSql( -""" -SELECT IIF(SUM(`t0`.`Key1`) IS NULL, 0, SUM(`t0`.`Key1`)) + """ +SELECT IIF(SUM(`s`.`Key1`) IS NULL, 0, SUM(`s`.`Key1`)) FROM ( SELECT `r`.`Id` FROM `Roots` AS `r` @@ -245,12 +242,12 @@ UNION ALL UNION ALL SELECT `l0`.`Id` FROM `Leaf2s` AS `l0` -) AS `t` +) AS `u` INNER JOIN ( SELECT `e0`.`Key1`, `e`.`RootSkipSharedId` FROM `EntityCompositeKeyEntityRoot` AS `e` INNER JOIN `EntityCompositeKeys` AS `e0` ON `e`.`CompositeKeySkipSharedKey1` = `e0`.`Key1` AND `e`.`CompositeKeySkipSharedKey2` = `e0`.`Key2` AND `e`.`CompositeKeySkipSharedKey3` = `e0`.`Key3` -) AS `t0` ON `t`.`Id` = `t0`.`RootSkipSharedId` +) AS `s` ON `u`.`Id` = `s`.`RootSkipSharedId` """); } @@ -407,15 +404,15 @@ public override async Task Skip_navigation_cast(bool async) await base.Skip_navigation_cast(async); AssertSql( -""" -SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `t`.`Id`, `t`.`Name`, `t`.`Number`, `t`.`IsGreen`, `t`.`LeafId`, `t`.`CompositeId1`, `t`.`CompositeId2`, `t`.`CompositeId3` + """ +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3` FROM `EntityCompositeKeys` AS `e` LEFT JOIN ( SELECT `l`.`Id`, `l`.`Name`, `l`.`Number`, `l`.`IsGreen`, `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3` FROM `JoinCompositeKeyToLeaf` AS `j` INNER JOIN `Leaves` AS `l` ON `j`.`LeafId` = `l`.`Id` -) AS `t` ON `e`.`Key1` = `t`.`CompositeId1` AND `e`.`Key2` = `t`.`CompositeId2` AND `e`.`Key3` = `t`.`CompositeId3` -ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `t`.`LeafId`, `t`.`CompositeId1`, `t`.`CompositeId2`, `t`.`CompositeId3` +) AS `s` ON `e`.`Key1` = `s`.`CompositeId1` AND `e`.`Key2` = `s`.`CompositeId2` AND `e`.`Key3` = `s`.`CompositeId3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3` """); } @@ -425,10 +422,10 @@ public override async Task Skip_navigation_of_type(bool async) AssertSql( """ -SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `t0`.`Id`, `t0`.`Name`, `t0`.`Number`, `t0`.`IsGreen`, `t0`.`Discriminator`, `t0`.`RootSkipSharedId`, `t0`.`CompositeKeySkipSharedKey1`, `t0`.`CompositeKeySkipSharedKey2`, `t0`.`CompositeKeySkipSharedKey3` +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s`.`Discriminator`, `s`.`RootSkipSharedId`, `s`.`CompositeKeySkipSharedKey1`, `s`.`CompositeKeySkipSharedKey2`, `s`.`CompositeKeySkipSharedKey3` FROM `EntityCompositeKeys` AS `e` LEFT JOIN ( - SELECT `t`.`Id`, `t`.`Name`, `t`.`Number`, `t`.`IsGreen`, `t`.`Discriminator`, `e0`.`RootSkipSharedId`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3` + SELECT `u`.`Id`, `u`.`Name`, `u`.`Number`, `u`.`IsGreen`, `u`.`Discriminator`, `e0`.`RootSkipSharedId`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3` FROM `EntityCompositeKeyEntityRoot` AS `e0` INNER JOIN ( SELECT `r`.`Id`, `r`.`Name`, CVar(NULL) AS `Number`, CVar(NULL) AS `IsGreen`, 'EntityRoot' AS `Discriminator` @@ -442,10 +439,10 @@ UNION ALL UNION ALL SELECT `l0`.`Id`, `l0`.`Name`, CVar(NULL) AS `Number`, CVar(NULL) AS `IsGreen`, 'EntityLeaf2' AS `Discriminator` FROM `Leaf2s` AS `l0` - ) AS `t` ON `e0`.`RootSkipSharedId` = `t`.`Id` - WHERE `t`.`Discriminator` = 'EntityLeaf' -) AS `t0` ON `e`.`Key1` = `t0`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `t0`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `t0`.`CompositeKeySkipSharedKey3` -ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `t0`.`RootSkipSharedId`, `t0`.`CompositeKeySkipSharedKey1`, `t0`.`CompositeKeySkipSharedKey2`, `t0`.`CompositeKeySkipSharedKey3` + ) AS `u` ON `e0`.`RootSkipSharedId` = `u`.`Id` + WHERE `u`.`Discriminator` = 'EntityLeaf' +) AS `s` ON `e`.`Key1` = `s`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `s`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `s`.`CompositeKeySkipSharedKey3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`RootSkipSharedId`, `s`.`CompositeKeySkipSharedKey1`, `s`.`CompositeKeySkipSharedKey2`, `s`.`CompositeKeySkipSharedKey3` """); } @@ -494,8 +491,8 @@ public override async Task Select_many_over_skip_navigation(bool async) await base.Select_many_over_skip_navigation(async); AssertSql( -""" -SELECT `t0`.`Id`, `t0`.`CollectionInverseId`, `t0`.`Name`, `t0`.`ReferenceInverseId` + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId` FROM ( SELECT `r`.`Id` FROM `Roots` AS `r` @@ -508,12 +505,12 @@ UNION ALL UNION ALL SELECT `l0`.`Id` FROM `Leaf2s` AS `l0` -) AS `t` +) AS `u` INNER JOIN ( SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `e`.`RootSkipSharedId` FROM `EntityRootEntityThree` AS `e` INNER JOIN `EntityThrees` AS `e0` ON `e`.`ThreeSkipSharedId` = `e0`.`Id` -) AS `t0` ON `t`.`Id` = `t0`.`RootSkipSharedId` +) AS `s` ON `u`.`Id` = `s`.`RootSkipSharedId` """); } @@ -522,14 +519,14 @@ public override async Task Select_many_over_skip_navigation_where(bool async) await base.Select_many_over_skip_navigation_where(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name`, `t`.`ReferenceInverseId` + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId` FROM `EntityOnes` AS `e` LEFT JOIN ( SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `j`.`OneId` FROM `JoinOneToTwo` AS `j` INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` -) AS `t` ON `e`.`Id` = `t`.`OneId` +) AS `s` ON `e`.`Id` = `s`.`OneId` """); } @@ -599,10 +596,10 @@ public override async Task Select_many_over_skip_navigation_of_type(bool async) AssertSql( """ -SELECT `t0`.`Id`, `t0`.`Name`, `t0`.`Number`, `t0`.`IsGreen`, `t0`.`Discriminator` +SELECT `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s`.`Discriminator` FROM `EntityThrees` AS `e` INNER JOIN ( - SELECT `t`.`Id`, `t`.`Name`, `t`.`Number`, `t`.`IsGreen`, `t`.`Discriminator`, `e0`.`ThreeSkipSharedId` + SELECT `u`.`Id`, `u`.`Name`, `u`.`Number`, `u`.`IsGreen`, `u`.`Discriminator`, `e0`.`ThreeSkipSharedId` FROM `EntityRootEntityThree` AS `e0` INNER JOIN ( SELECT `r`.`Id`, `r`.`Name`, CVar(NULL) AS `Number`, CVar(NULL) AS `IsGreen`, 'EntityRoot' AS `Discriminator` @@ -616,9 +613,9 @@ UNION ALL UNION ALL SELECT `l0`.`Id`, `l0`.`Name`, CVar(NULL) AS `Number`, CVar(NULL) AS `IsGreen`, 'EntityLeaf2' AS `Discriminator` FROM `Leaf2s` AS `l0` - ) AS `t` ON `e0`.`RootSkipSharedId` = `t`.`Id` - WHERE `t`.`Discriminator` IN ('EntityBranch', 'EntityLeaf') -) AS `t0` ON `e`.`Id` = `t0`.`ThreeSkipSharedId` + ) AS `u` ON `e0`.`RootSkipSharedId` = `u`.`Id` + WHERE `u`.`Discriminator` IN ('EntityBranch', 'EntityLeaf') +) AS `s` ON `e`.`Id` = `s`.`ThreeSkipSharedId` """); } @@ -628,10 +625,10 @@ public override async Task Select_many_over_skip_navigation_cast(bool async) AssertSql( """ -SELECT `t0`.`Id`, `t0`.`Name`, `t0`.`Number`, `t0`.`IsGreen`, `t0`.`Discriminator` +SELECT `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s`.`Discriminator` FROM `EntityOnes` AS `e` INNER JOIN ( - SELECT `t`.`Id`, `t`.`Name`, `t`.`Number`, `t`.`IsGreen`, `t`.`Discriminator`, `j`.`EntityOneId` + SELECT `u`.`Id`, `u`.`Name`, `u`.`Number`, `u`.`IsGreen`, `u`.`Discriminator`, `j`.`EntityOneId` FROM `JoinOneToBranch` AS `j` INNER JOIN ( SELECT `b`.`Id`, `b`.`Name`, `b`.`Number`, CVar(NULL) AS `IsGreen`, 'EntityBranch' AS `Discriminator` @@ -639,8 +636,8 @@ INNER JOIN ( UNION ALL SELECT `l`.`Id`, `l`.`Name`, `l`.`Number`, `l`.`IsGreen`, 'EntityLeaf' AS `Discriminator` FROM `Leaves` AS `l` - ) AS `t` ON `j`.`EntityBranchId` = `t`.`Id` -) AS `t0` ON `e`.`Id` = `t0`.`EntityOneId` + ) AS `u` ON `j`.`EntityBranchId` = `u`.`Id` +) AS `s` ON `e`.`Id` = `s`.`EntityOneId` """); } @@ -649,15 +646,15 @@ public override async Task Select_skip_navigation(bool async) await base.Select_skip_navigation(async); AssertSql( -""" -SELECT `e`.`Id`, `t`.`Id`, `t`.`Name`, `t`.`LeftId`, `t`.`RightId` + """ +SELECT `e`.`Id`, `s`.`Id`, `s`.`Name`, `s`.`LeftId`, `s`.`RightId` FROM `EntityOnes` AS `e` LEFT JOIN ( SELECT `e0`.`Id`, `e0`.`Name`, `j`.`LeftId`, `j`.`RightId` FROM `JoinOneSelfPayload` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`LeftId` = `e0`.`Id` -) AS `t` ON `e`.`Id` = `t`.`RightId` -ORDER BY `e`.`Id`, `t`.`LeftId`, `t`.`RightId` +) AS `s` ON `e`.`Id` = `s`.`RightId` +ORDER BY `e`.`Id`, `s`.`LeftId`, `s`.`RightId` """); } @@ -666,25 +663,25 @@ public override async Task Select_skip_navigation_multiple(bool async) await base.Select_skip_navigation_multiple(async); AssertSql( -""" -SELECT `e`.`Id`, `t`.`Id`, `t`.`CollectionInverseId`, `t`.`Name`, `t`.`ReferenceInverseId`, `t`.`ThreeId`, `t`.`TwoId`, `t0`.`Id`, `t0`.`CollectionInverseId`, `t0`.`ExtraId`, `t0`.`Name`, `t0`.`ReferenceInverseId`, `t0`.`SelfSkipSharedLeftId`, `t0`.`SelfSkipSharedRightId`, `t1`.`Key1`, `t1`.`Key2`, `t1`.`Key3`, `t1`.`Name`, `t1`.`TwoSkipSharedId`, `t1`.`CompositeKeySkipSharedKey1`, `t1`.`CompositeKeySkipSharedKey2`, `t1`.`CompositeKeySkipSharedKey3` + """ +SELECT `e`.`Id`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId`, `s`.`ThreeId`, `s`.`TwoId`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name`, `s0`.`ReferenceInverseId`, `s0`.`SelfSkipSharedLeftId`, `s0`.`SelfSkipSharedRightId`, `s1`.`Key1`, `s1`.`Key2`, `s1`.`Key3`, `s1`.`Name`, `s1`.`TwoSkipSharedId`, `s1`.`CompositeKeySkipSharedKey1`, `s1`.`CompositeKeySkipSharedKey2`, `s1`.`CompositeKeySkipSharedKey3` FROM ((`EntityTwos` AS `e` LEFT JOIN ( SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `j`.`ThreeId`, `j`.`TwoId` FROM `JoinTwoToThree` AS `j` INNER JOIN `EntityThrees` AS `e0` ON `j`.`ThreeId` = `e0`.`Id` -) AS `t` ON `e`.`Id` = `t`.`TwoId`) +) AS `s` ON `e`.`Id` = `s`.`TwoId`) LEFT JOIN ( SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e1`.`SelfSkipSharedLeftId`, `e1`.`SelfSkipSharedRightId` FROM `EntityTwoEntityTwo` AS `e1` INNER JOIN `EntityTwos` AS `e2` ON `e1`.`SelfSkipSharedLeftId` = `e2`.`Id` -) AS `t0` ON `e`.`Id` = `t0`.`SelfSkipSharedRightId`) +) AS `s0` ON `e`.`Id` = `s0`.`SelfSkipSharedRightId`) LEFT JOIN ( SELECT `e4`.`Key1`, `e4`.`Key2`, `e4`.`Key3`, `e4`.`Name`, `e3`.`TwoSkipSharedId`, `e3`.`CompositeKeySkipSharedKey1`, `e3`.`CompositeKeySkipSharedKey2`, `e3`.`CompositeKeySkipSharedKey3` FROM `EntityCompositeKeyEntityTwo` AS `e3` INNER JOIN `EntityCompositeKeys` AS `e4` ON `e3`.`CompositeKeySkipSharedKey1` = `e4`.`Key1` AND `e3`.`CompositeKeySkipSharedKey2` = `e4`.`Key2` AND `e3`.`CompositeKeySkipSharedKey3` = `e4`.`Key3` -) AS `t1` ON `e`.`Id` = `t1`.`TwoSkipSharedId` -ORDER BY `e`.`Id`, `t`.`ThreeId`, `t`.`TwoId`, `t`.`Id`, `t0`.`SelfSkipSharedLeftId`, `t0`.`SelfSkipSharedRightId`, `t0`.`Id`, `t1`.`TwoSkipSharedId`, `t1`.`CompositeKeySkipSharedKey1`, `t1`.`CompositeKeySkipSharedKey2`, `t1`.`CompositeKeySkipSharedKey3`, `t1`.`Key1`, `t1`.`Key2` +) AS `s1` ON `e`.`Id` = `s1`.`TwoSkipSharedId` +ORDER BY `e`.`Id`, `s`.`ThreeId`, `s`.`TwoId`, `s`.`Id`, `s0`.`SelfSkipSharedLeftId`, `s0`.`SelfSkipSharedRightId`, `s0`.`Id`, `s1`.`TwoSkipSharedId`, `s1`.`CompositeKeySkipSharedKey1`, `s1`.`CompositeKeySkipSharedKey2`, `s1`.`CompositeKeySkipSharedKey3`, `s1`.`Key1`, `s1`.`Key2` """); } @@ -715,10 +712,10 @@ public override async Task Include_skip_navigation(bool async) AssertSql( """ -SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name`, `t0`.`RootSkipSharedId`, `t0`.`CompositeKeySkipSharedKey1`, `t0`.`CompositeKeySkipSharedKey2`, `t0`.`CompositeKeySkipSharedKey3`, `t0`.`Id`, `t0`.`Name`, `t0`.`Number`, `t0`.`Slumber`, `t0`.`IsGreen`, `t0`.`IsBrown`, `t0`.`Discriminator` +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name`, `s`.`RootSkipSharedId`, `s`.`CompositeKeySkipSharedKey1`, `s`.`CompositeKeySkipSharedKey2`, `s`.`CompositeKeySkipSharedKey3`, `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`Slumber`, `s`.`IsGreen`, `s`.`IsBrown`, `s`.`Discriminator` FROM `EntityCompositeKeys` AS `e` LEFT JOIN ( - SELECT `e0`.`RootSkipSharedId`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3`, `t`.`Id`, `t`.`Name`, `t`.`Number`, `t`.`Slumber`, `t`.`IsGreen`, `t`.`IsBrown`, `t`.`Discriminator` + SELECT `e0`.`RootSkipSharedId`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3`, `u`.`Id`, `u`.`Name`, `u`.`Number`, `u`.`Slumber`, `u`.`IsGreen`, `u`.`IsBrown`, `u`.`Discriminator` FROM `EntityCompositeKeyEntityRoot` AS `e0` INNER JOIN ( SELECT `r`.`Id`, `r`.`Name`, CVar(NULL) AS `Number`, CVar(NULL) AS `Slumber`, CVar(NULL) AS `IsGreen`, CVar(NULL) AS `IsBrown`, 'EntityRoot' AS `Discriminator` @@ -732,9 +729,9 @@ UNION ALL UNION ALL SELECT `l0`.`Id`, `l0`.`Name`, CVar(NULL) AS `Number`, `l0`.`Slumber`, CVar(NULL) AS `IsGreen`, `l0`.`IsBrown`, 'EntityLeaf2' AS `Discriminator` FROM `Leaf2s` AS `l0` - ) AS `t` ON `e0`.`RootSkipSharedId` = `t`.`Id` -) AS `t0` ON `e`.`Key1` = `t0`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `t0`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `t0`.`CompositeKeySkipSharedKey3` -ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `t0`.`RootSkipSharedId`, `t0`.`CompositeKeySkipSharedKey1`, `t0`.`CompositeKeySkipSharedKey2`, `t0`.`CompositeKeySkipSharedKey3` + ) AS `u` ON `e0`.`RootSkipSharedId` = `u`.`Id` +) AS `s` ON `e`.`Key1` = `s`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `s`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `s`.`CompositeKeySkipSharedKey3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`RootSkipSharedId`, `s`.`CompositeKeySkipSharedKey1`, `s`.`CompositeKeySkipSharedKey2`, `s`.`CompositeKeySkipSharedKey3` """); } @@ -743,16 +740,16 @@ public override async Task Include_skip_navigation_then_reference(bool async) await base.Include_skip_navigation_then_reference(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `t`.`OneId`, `t`.`TwoId`, `t`.`JoinOneToTwoExtraId`, `t`.`Id`, `t`.`Name`, `t`.`Id0`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name0`, `t`.`ReferenceInverseId` + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`OneId`, `s`.`TwoId`, `s`.`JoinOneToTwoExtraId`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId` FROM `EntityTwos` AS `e` LEFT JOIN ( SELECT `j`.`OneId`, `j`.`TwoId`, `j`.`JoinOneToTwoExtraId`, `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId` FROM (`JoinOneToTwo` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` -) AS `t` ON `e`.`Id` = `t`.`TwoId` -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`TwoId`, `t`.`Id` +) AS `s` ON `e`.`Id` = `s`.`TwoId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id` """); } @@ -761,20 +758,20 @@ public override async Task Include_skip_navigation_then_include_skip_navigation( await base.Include_skip_navigation_then_include_skip_navigation(async); AssertSql( -""" -SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name`, `t0`.`LeafId`, `t0`.`CompositeId1`, `t0`.`CompositeId2`, `t0`.`CompositeId3`, `t0`.`Id`, `t0`.`Name`, `t0`.`Number`, `t0`.`IsGreen`, `t0`.`EntityBranchId`, `t0`.`EntityOneId`, `t0`.`Id0`, `t0`.`Name0` + """ +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Id`, `s0`.`Name`, `s0`.`Number`, `s0`.`IsGreen`, `s0`.`EntityBranchId`, `s0`.`EntityOneId`, `s0`.`Id0`, `s0`.`Name0` FROM `EntityCompositeKeys` AS `e` LEFT JOIN ( - SELECT `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `l`.`Id`, `l`.`Name`, `l`.`Number`, `l`.`IsGreen`, `t`.`EntityBranchId`, `t`.`EntityOneId`, `t`.`Id` AS `Id0`, `t`.`Name` AS `Name0` + SELECT `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `l`.`Id`, `l`.`Name`, `l`.`Number`, `l`.`IsGreen`, `s`.`EntityBranchId`, `s`.`EntityOneId`, `s`.`Id` AS `Id0`, `s`.`Name` AS `Name0` FROM (`JoinCompositeKeyToLeaf` AS `j` INNER JOIN `Leaves` AS `l` ON `j`.`LeafId` = `l`.`Id`) LEFT JOIN ( SELECT `j0`.`EntityBranchId`, `j0`.`EntityOneId`, `e0`.`Id`, `e0`.`Name` FROM `JoinOneToBranch` AS `j0` INNER JOIN `EntityOnes` AS `e0` ON `j0`.`EntityOneId` = `e0`.`Id` - ) AS `t` ON `l`.`Id` = `t`.`EntityBranchId` -) AS `t0` ON `e`.`Key1` = `t0`.`CompositeId1` AND `e`.`Key2` = `t0`.`CompositeId2` AND `e`.`Key3` = `t0`.`CompositeId3` -ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `t0`.`LeafId`, `t0`.`CompositeId1`, `t0`.`CompositeId2`, `t0`.`CompositeId3`, `t0`.`Id`, `t0`.`EntityBranchId`, `t0`.`EntityOneId` + ) AS `s` ON `l`.`Id` = `s`.`EntityBranchId` +) AS `s0` ON `e`.`Key1` = `s0`.`CompositeId1` AND `e`.`Key2` = `s0`.`CompositeId2` AND `e`.`Key3` = `s0`.`CompositeId3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Id`, `s0`.`EntityBranchId`, `s0`.`EntityOneId` """); } @@ -783,11 +780,11 @@ public override async Task Include_skip_navigation_then_include_reference_and_sk await base.Include_skip_navigation_then_include_reference_and_skip_navigation(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `t0`.`OneId`, `t0`.`ThreeId`, `t0`.`Payload`, `t0`.`Id`, `t0`.`Name`, `t0`.`Id0`, `t0`.`CollectionInverseId`, `t0`.`ExtraId`, `t0`.`Name0`, `t0`.`ReferenceInverseId`, `t0`.`LeftId`, `t0`.`RightId`, `t0`.`Payload0`, `t0`.`Id1`, `t0`.`Name1` + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Payload`, `s0`.`Id`, `s0`.`Name`, `s0`.`Id0`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name0`, `s0`.`ReferenceInverseId`, `s0`.`LeftId`, `s0`.`RightId`, `s0`.`Payload0`, `s0`.`Id1`, `s0`.`Name1` FROM `EntityThrees` AS `e` LEFT JOIN ( - SELECT `j`.`OneId`, `j`.`ThreeId`, `j`.`Payload`, `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `t`.`LeftId`, `t`.`RightId`, `t`.`Payload` AS `Payload0`, `t`.`Id` AS `Id1`, `t`.`Name` AS `Name1` + SELECT `j`.`OneId`, `j`.`ThreeId`, `j`.`Payload`, `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `s`.`LeftId`, `s`.`RightId`, `s`.`Payload` AS `Payload0`, `s`.`Id` AS `Id1`, `s`.`Name` AS `Name1` FROM ((`JoinOneToThreePayloadFull` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId`) @@ -795,9 +792,9 @@ LEFT JOIN ( SELECT `j0`.`LeftId`, `j0`.`RightId`, `j0`.`Payload`, `e2`.`Id`, `e2`.`Name` FROM `JoinOneSelfPayload` AS `j0` INNER JOIN `EntityOnes` AS `e2` ON `j0`.`RightId` = `e2`.`Id` - ) AS `t` ON `e0`.`Id` = `t`.`LeftId` -) AS `t0` ON `e`.`Id` = `t0`.`ThreeId` -ORDER BY `e`.`Id`, `t0`.`OneId`, `t0`.`ThreeId`, `t0`.`Id`, `t0`.`Id0`, `t0`.`LeftId`, `t0`.`RightId` + ) AS `s` ON `e0`.`Id` = `s`.`LeftId` +) AS `s0` ON `e`.`Id` = `s0`.`ThreeId` +ORDER BY `e`.`Id`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Id`, `s0`.`Id0`, `s0`.`LeftId`, `s0`.`RightId` """); } @@ -806,16 +803,16 @@ public override async Task Include_skip_navigation_and_reference(bool async) await base.Include_skip_navigation_and_reference(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `e0`.`Id`, `t`.`OneSkipSharedId`, `t`.`TwoSkipSharedId`, `t`.`Id`, `t`.`Name`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId` + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `e0`.`Id`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId`, `s`.`Id`, `s`.`Name`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId` FROM (`EntityTwos` AS `e` LEFT JOIN `EntityThrees` AS `e0` ON `e`.`Id` = `e0`.`ReferenceInverseId`) LEFT JOIN ( SELECT `e1`.`OneSkipSharedId`, `e1`.`TwoSkipSharedId`, `e2`.`Id`, `e2`.`Name` FROM `EntityOneEntityTwo` AS `e1` INNER JOIN `EntityOnes` AS `e2` ON `e1`.`OneSkipSharedId` = `e2`.`Id` -) AS `t` ON `e`.`Id` = `t`.`TwoSkipSharedId` -ORDER BY `e`.`Id`, `e0`.`Id`, `t`.`OneSkipSharedId`, `t`.`TwoSkipSharedId` +) AS `s` ON `e`.`Id` = `s`.`TwoSkipSharedId` +ORDER BY `e`.`Id`, `e0`.`Id`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId` """); } @@ -824,16 +821,16 @@ public override async Task Filtered_include_skip_navigation_where(bool async) await base.Filtered_include_skip_navigation_where(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `t`.`OneId`, `t`.`ThreeId`, `t`.`Payload`, `t`.`Id`, `t`.`Name` + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Payload`, `s`.`Id`, `s`.`Name` FROM `EntityThrees` AS `e` LEFT JOIN ( SELECT `j`.`OneId`, `j`.`ThreeId`, `j`.`Payload`, `e0`.`Id`, `e0`.`Name` FROM `JoinOneToThreePayloadFullShared` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` WHERE `e0`.`Id` < 10 -) AS `t` ON `e`.`Id` = `t`.`ThreeId` -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`ThreeId` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId` """); } @@ -842,15 +839,15 @@ public override async Task Filtered_include_skip_navigation_order_by(bool async) await base.Filtered_include_skip_navigation_order_by(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `t`.`ThreeId`, `t`.`TwoId`, `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name`, `t`.`ReferenceInverseId` + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`ThreeId`, `s`.`TwoId`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId` FROM `EntityThrees` AS `e` LEFT JOIN ( SELECT `j`.`ThreeId`, `j`.`TwoId`, `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId` FROM `JoinTwoToThree` AS `j` INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` -) AS `t` ON `e`.`Id` = `t`.`ThreeId` -ORDER BY `e`.`Id`, `t`.`Id`, `t`.`ThreeId` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`Id`, `s`.`ThreeId` """); } @@ -923,7 +920,7 @@ public override async Task Filtered_then_include_skip_navigation_where(bool asyn AssertSql( """ -SELECT `t`.`Id`, `t`.`Name`, `t`.`Number`, `t`.`Slumber`, `t`.`IsGreen`, `t`.`IsBrown`, `t`.`Discriminator`, `t0`.`RootSkipSharedId`, `t0`.`ThreeSkipSharedId`, `t0`.`Id`, `t0`.`CollectionInverseId`, `t0`.`Name`, `t0`.`ReferenceInverseId`, `t0`.`OneId`, `t0`.`ThreeId`, `t0`.`Payload`, `t0`.`Id0`, `t0`.`Name0` +SELECT `u`.`Id`, `u`.`Name`, `u`.`Number`, `u`.`Slumber`, `u`.`IsGreen`, `u`.`IsBrown`, `u`.`Discriminator`, `s0`.`RootSkipSharedId`, `s0`.`ThreeSkipSharedId`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`Name`, `s0`.`ReferenceInverseId`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Payload`, `s0`.`Id0`, `s0`.`Name0` FROM ( SELECT `r`.`Id`, `r`.`Name`, CVar(NULL) AS `Number`, CVar(NULL) AS `Slumber`, CVar(NULL) AS `IsGreen`, CVar(NULL) AS `IsBrown`, 'EntityRoot' AS `Discriminator` FROM `Roots` AS `r` @@ -936,9 +933,9 @@ UNION ALL UNION ALL SELECT `l0`.`Id`, `l0`.`Name`, CVar(NULL) AS `Number`, `l0`.`Slumber`, CVar(NULL) AS `IsGreen`, `l0`.`IsBrown`, 'EntityLeaf2' AS `Discriminator` FROM `Leaf2s` AS `l0` -) AS `t` +) AS `u` LEFT JOIN ( - SELECT `e`.`RootSkipSharedId`, `e`.`ThreeSkipSharedId`, `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `t1`.`OneId`, `t1`.`ThreeId`, `t1`.`Payload`, `t1`.`Id` AS `Id0`, `t1`.`Name` AS `Name0` + SELECT `e`.`RootSkipSharedId`, `e`.`ThreeSkipSharedId`, `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Payload`, `s`.`Id` AS `Id0`, `s`.`Name` AS `Name0` FROM (`EntityRootEntityThree` AS `e` INNER JOIN `EntityThrees` AS `e0` ON `e`.`ThreeSkipSharedId` = `e0`.`Id`) LEFT JOIN ( @@ -946,9 +943,9 @@ LEFT JOIN ( FROM `JoinOneToThreePayloadFullShared` AS `j` INNER JOIN `EntityOnes` AS `e1` ON `j`.`OneId` = `e1`.`Id` WHERE `e1`.`Id` < 10 - ) AS `t1` ON `e0`.`Id` = `t1`.`ThreeId` -) AS `t0` ON `t`.`Id` = `t0`.`RootSkipSharedId` -ORDER BY `t`.`Id`, `t0`.`RootSkipSharedId`, `t0`.`ThreeSkipSharedId`, `t0`.`Id`, `t0`.`OneId`, `t0`.`ThreeId` + ) AS `s` ON `e0`.`Id` = `s`.`ThreeId` +) AS `s0` ON `u`.`Id` = `s0`.`RootSkipSharedId` +ORDER BY `u`.`Id`, `s0`.`RootSkipSharedId`, `s0`.`ThreeSkipSharedId`, `s0`.`Id`, `s0`.`OneId`, `s0`.`ThreeId` """); } @@ -995,21 +992,21 @@ public override async Task Filtered_include_skip_navigation_where_then_include_s await base.Filtered_include_skip_navigation_where_then_include_skip_navigation(async); AssertSql( -""" -SELECT `l`.`Id`, `l`.`Name`, `l`.`Number`, `l`.`IsGreen`, `t0`.`LeafId`, `t0`.`CompositeId1`, `t0`.`CompositeId2`, `t0`.`CompositeId3`, `t0`.`Key1`, `t0`.`Key2`, `t0`.`Key3`, `t0`.`Name`, `t0`.`TwoSkipSharedId`, `t0`.`CompositeKeySkipSharedKey1`, `t0`.`CompositeKeySkipSharedKey2`, `t0`.`CompositeKeySkipSharedKey3`, `t0`.`Id`, `t0`.`CollectionInverseId`, `t0`.`ExtraId`, `t0`.`Name0`, `t0`.`ReferenceInverseId` + """ +SELECT `l`.`Id`, `l`.`Name`, `l`.`Number`, `l`.`IsGreen`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Key1`, `s0`.`Key2`, `s0`.`Key3`, `s0`.`Name`, `s0`.`TwoSkipSharedId`, `s0`.`CompositeKeySkipSharedKey1`, `s0`.`CompositeKeySkipSharedKey2`, `s0`.`CompositeKeySkipSharedKey3`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name0`, `s0`.`ReferenceInverseId` FROM `Leaves` AS `l` LEFT JOIN ( - SELECT `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name`, `t`.`TwoSkipSharedId`, `t`.`CompositeKeySkipSharedKey1`, `t`.`CompositeKeySkipSharedKey2`, `t`.`CompositeKeySkipSharedKey3`, `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name` AS `Name0`, `t`.`ReferenceInverseId` + SELECT `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name`, `s`.`TwoSkipSharedId`, `s`.`CompositeKeySkipSharedKey1`, `s`.`CompositeKeySkipSharedKey2`, `s`.`CompositeKeySkipSharedKey3`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name` AS `Name0`, `s`.`ReferenceInverseId` FROM (`JoinCompositeKeyToLeaf` AS `j` INNER JOIN `EntityCompositeKeys` AS `e` ON `j`.`CompositeId1` = `e`.`Key1` AND `j`.`CompositeId2` = `e`.`Key2` AND `j`.`CompositeId3` = `e`.`Key3`) LEFT JOIN ( SELECT `e0`.`TwoSkipSharedId`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3`, `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name`, `e1`.`ReferenceInverseId` FROM `EntityCompositeKeyEntityTwo` AS `e0` INNER JOIN `EntityTwos` AS `e1` ON `e0`.`TwoSkipSharedId` = `e1`.`Id` - ) AS `t` ON `e`.`Key1` = `t`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `t`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `t`.`CompositeKeySkipSharedKey3` + ) AS `s` ON `e`.`Key1` = `s`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `s`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `s`.`CompositeKeySkipSharedKey3` WHERE `e`.`Key1` < 5 -) AS `t0` ON `l`.`Id` = `t0`.`LeafId` -ORDER BY `l`.`Id`, `t0`.`LeafId`, `t0`.`CompositeId1`, `t0`.`CompositeId2`, `t0`.`CompositeId3`, `t0`.`Key1`, `t0`.`Key2`, `t0`.`Key3`, `t0`.`TwoSkipSharedId`, `t0`.`CompositeKeySkipSharedKey1`, `t0`.`CompositeKeySkipSharedKey2`, `t0`.`CompositeKeySkipSharedKey3` +) AS `s0` ON `l`.`Id` = `s0`.`LeafId` +ORDER BY `l`.`Id`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Key1`, `s0`.`Key2`, `s0`.`Key3`, `s0`.`TwoSkipSharedId`, `s0`.`CompositeKeySkipSharedKey1`, `s0`.`CompositeKeySkipSharedKey2`, `s0`.`CompositeKeySkipSharedKey3` """); } @@ -1074,8 +1071,8 @@ public override async Task Filter_include_on_skip_navigation_combined(bool async await base.Filter_include_on_skip_navigation_combined(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `t`.`OneId`, `t`.`TwoId`, `t`.`JoinOneToTwoExtraId`, `t`.`Id`, `t`.`Name`, `t`.`Id0`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name0`, `t`.`ReferenceInverseId`, `t`.`Id1`, `t`.`CollectionInverseId0`, `t`.`ExtraId0`, `t`.`Name1`, `t`.`ReferenceInverseId0` + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`OneId`, `s`.`TwoId`, `s`.`JoinOneToTwoExtraId`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `s`.`Id1`, `s`.`CollectionInverseId0`, `s`.`ExtraId0`, `s`.`Name1`, `s`.`ReferenceInverseId0` FROM `EntityTwos` AS `e` LEFT JOIN ( SELECT `j`.`OneId`, `j`.`TwoId`, `j`.`JoinOneToTwoExtraId`, `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `e2`.`Id` AS `Id1`, `e2`.`CollectionInverseId` AS `CollectionInverseId0`, `e2`.`ExtraId` AS `ExtraId0`, `e2`.`Name` AS `Name1`, `e2`.`ReferenceInverseId` AS `ReferenceInverseId0` @@ -1084,8 +1081,8 @@ LEFT JOIN ( LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId`) LEFT JOIN `EntityTwos` AS `e2` ON `e0`.`Id` = `e2`.`CollectionInverseId` WHERE `e0`.`Id` < 10 -) AS `t` ON `e`.`Id` = `t`.`TwoId` -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`TwoId`, `t`.`Id`, `t`.`Id0` +) AS `s` ON `e`.`Id` = `s`.`TwoId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s`.`Id0` """); } @@ -1133,21 +1130,21 @@ public override async Task Filtered_include_on_skip_navigation_then_filtered_inc await base.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `t0`.`OneId`, `t0`.`ThreeId`, `t0`.`Payload`, `t0`.`Id`, `t0`.`Name`, `t0`.`Id0`, `t0`.`CollectionInverseId`, `t0`.`ExtraId`, `t0`.`Name0`, `t0`.`ReferenceInverseId` + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Payload`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId` FROM `EntityThrees` AS `e` LEFT JOIN ( - SELECT `j`.`OneId`, `j`.`ThreeId`, `j`.`Payload`, `e0`.`Id`, `e0`.`Name`, `t`.`Id` AS `Id0`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name` AS `Name0`, `t`.`ReferenceInverseId` + SELECT `j`.`OneId`, `j`.`ThreeId`, `j`.`Payload`, `e0`.`Id`, `e0`.`Name`, `e2`.`Id` AS `Id0`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name` AS `Name0`, `e2`.`ReferenceInverseId` FROM (`JoinOneToThreePayloadFull` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) LEFT JOIN ( SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name`, `e1`.`ReferenceInverseId` FROM `EntityTwos` AS `e1` WHERE `e1`.`Id` < 5 - ) AS `t` ON `e0`.`Id` = `t`.`CollectionInverseId` + ) AS `e2` ON `e0`.`Id` = `e2`.`CollectionInverseId` WHERE `e0`.`Id` > 15 -) AS `t0` ON `e`.`Id` = `t0`.`ThreeId` -ORDER BY `e`.`Id`, `t0`.`OneId`, `t0`.`ThreeId`, `t0`.`Id` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id` """); } @@ -1156,21 +1153,21 @@ public override async Task Filtered_include_on_navigation_then_filtered_include_ await base.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`Name`, `t0`.`Id`, `t0`.`CollectionInverseId`, `t0`.`ExtraId`, `t0`.`Name`, `t0`.`ReferenceInverseId`, `t0`.`ThreeId`, `t0`.`TwoId`, `t0`.`Id0`, `t0`.`CollectionInverseId0`, `t0`.`Name0`, `t0`.`ReferenceInverseId0` + """ +SELECT `e`.`Id`, `e`.`Name`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name`, `s0`.`ReferenceInverseId`, `s0`.`ThreeId`, `s0`.`TwoId`, `s0`.`Id0`, `s0`.`CollectionInverseId0`, `s0`.`Name0`, `s0`.`ReferenceInverseId0` FROM `EntityOnes` AS `e` LEFT JOIN ( - SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `t`.`ThreeId`, `t`.`TwoId`, `t`.`Id` AS `Id0`, `t`.`CollectionInverseId` AS `CollectionInverseId0`, `t`.`Name` AS `Name0`, `t`.`ReferenceInverseId` AS `ReferenceInverseId0` + SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `s`.`ThreeId`, `s`.`TwoId`, `s`.`Id` AS `Id0`, `s`.`CollectionInverseId` AS `CollectionInverseId0`, `s`.`Name` AS `Name0`, `s`.`ReferenceInverseId` AS `ReferenceInverseId0` FROM `EntityTwos` AS `e0` LEFT JOIN ( SELECT `j`.`ThreeId`, `j`.`TwoId`, `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`Name`, `e1`.`ReferenceInverseId` FROM `JoinTwoToThree` AS `j` INNER JOIN `EntityThrees` AS `e1` ON `j`.`ThreeId` = `e1`.`Id` WHERE `e1`.`Id` < 5 - ) AS `t` ON `e0`.`Id` = `t`.`TwoId` + ) AS `s` ON `e0`.`Id` = `s`.`TwoId` WHERE `e0`.`Id` > 15 -) AS `t0` ON `e`.`Id` = `t0`.`CollectionInverseId` -ORDER BY `e`.`Id`, `t0`.`Id`, `t0`.`ThreeId`, `t0`.`TwoId` +) AS `s0` ON `e`.`Id` = `s0`.`CollectionInverseId` +ORDER BY `e`.`Id`, `s0`.`Id`, `s0`.`ThreeId`, `s0`.`TwoId` """); } @@ -1200,10 +1197,10 @@ public override async Task Include_skip_navigation_split(bool async) """, // """ -SELECT `t0`.`RootSkipSharedId`, `t0`.`CompositeKeySkipSharedKey1`, `t0`.`CompositeKeySkipSharedKey2`, `t0`.`CompositeKeySkipSharedKey3`, `t0`.`Id`, `t0`.`Name`, `t0`.`Number`, `t0`.`Slumber`, `t0`.`IsGreen`, `t0`.`IsBrown`, `t0`.`Discriminator`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3` +SELECT `s`.`RootSkipSharedId`, `s`.`CompositeKeySkipSharedKey1`, `s`.`CompositeKeySkipSharedKey2`, `s`.`CompositeKeySkipSharedKey3`, `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`Slumber`, `s`.`IsGreen`, `s`.`IsBrown`, `s`.`Discriminator`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3` FROM `EntityCompositeKeys` AS `e` INNER JOIN ( - SELECT `e0`.`RootSkipSharedId`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3`, `t`.`Id`, `t`.`Name`, `t`.`Number`, `t`.`Slumber`, `t`.`IsGreen`, `t`.`IsBrown`, `t`.`Discriminator` + SELECT `e0`.`RootSkipSharedId`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3`, `u`.`Id`, `u`.`Name`, `u`.`Number`, `u`.`Slumber`, `u`.`IsGreen`, `u`.`IsBrown`, `u`.`Discriminator` FROM `EntityCompositeKeyEntityRoot` AS `e0` INNER JOIN ( SELECT `r`.`Id`, `r`.`Name`, CVar(NULL) AS `Number`, CVar(NULL) AS `Slumber`, CVar(NULL) AS `IsGreen`, CVar(NULL) AS `IsBrown`, 'EntityRoot' AS `Discriminator` @@ -1217,8 +1214,8 @@ UNION ALL UNION ALL SELECT `l0`.`Id`, `l0`.`Name`, CVar(NULL) AS `Number`, `l0`.`Slumber`, CVar(NULL) AS `IsGreen`, `l0`.`IsBrown`, 'EntityLeaf2' AS `Discriminator` FROM `Leaf2s` AS `l0` - ) AS `t` ON `e0`.`RootSkipSharedId` = `t`.`Id` -) AS `t0` ON `e`.`Key1` = `t0`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `t0`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `t0`.`CompositeKeySkipSharedKey3` + ) AS `u` ON `e0`.`RootSkipSharedId` = `u`.`Id` +) AS `s` ON `e`.`Key1` = `s`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `s`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `s`.`CompositeKeySkipSharedKey3` ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3` """); } @@ -1228,21 +1225,21 @@ public override async Task Include_skip_navigation_then_reference_split(bool asy await base.Include_skip_navigation_then_reference_split(async); AssertSql( -""" + """ SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId` FROM `EntityTwos` AS `e` ORDER BY `e`.`Id` """, -// -""" -SELECT `t`.`OneId`, `t`.`TwoId`, `t`.`JoinOneToTwoExtraId`, `t`.`Id`, `t`.`Name`, `t`.`Id0`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name0`, `t`.`ReferenceInverseId`, `e`.`Id` + // + """ +SELECT `s`.`OneId`, `s`.`TwoId`, `s`.`JoinOneToTwoExtraId`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `e`.`Id` FROM `EntityTwos` AS `e` INNER JOIN ( SELECT `j`.`OneId`, `j`.`TwoId`, `j`.`JoinOneToTwoExtraId`, `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId` FROM (`JoinOneToTwo` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` -) AS `t` ON `e`.`Id` = `t`.`TwoId` +) AS `s` ON `e`.`Id` = `s`.`TwoId` ORDER BY `e`.`Id` """); } @@ -1259,31 +1256,31 @@ public override async Task Include_skip_navigation_then_include_skip_navigation_ """, // """ -SELECT `t`.`LeafId`, `t`.`CompositeId1`, `t`.`CompositeId2`, `t`.`CompositeId3`, `t`.`Id`, `t`.`Name`, `t`.`Number`, `t`.`IsGreen`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3` +SELECT `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3` FROM `EntityCompositeKeys` AS `e` INNER JOIN ( SELECT `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `l`.`Id`, `l`.`Name`, `l`.`Number`, `l`.`IsGreen` FROM `JoinCompositeKeyToLeaf` AS `j` INNER JOIN `Leaves` AS `l` ON `j`.`LeafId` = `l`.`Id` -) AS `t` ON `e`.`Key1` = `t`.`CompositeId1` AND `e`.`Key2` = `t`.`CompositeId2` AND `e`.`Key3` = `t`.`CompositeId3` -ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `t`.`LeafId`, `t`.`CompositeId1`, `t`.`CompositeId2`, `t`.`CompositeId3`, `t`.`Id` +) AS `s` ON `e`.`Key1` = `s`.`CompositeId1` AND `e`.`Key2` = `s`.`CompositeId2` AND `e`.`Key3` = `s`.`CompositeId3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Id` """, // """ -SELECT `t0`.`EntityBranchId`, `t0`.`EntityOneId`, `t0`.`Id`, `t0`.`Name`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `t`.`LeafId`, `t`.`CompositeId1`, `t`.`CompositeId2`, `t`.`CompositeId3`, `t`.`Id` +SELECT `s0`.`EntityBranchId`, `s0`.`EntityOneId`, `s0`.`Id`, `s0`.`Name`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Id` FROM (`EntityCompositeKeys` AS `e` INNER JOIN ( SELECT `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `l`.`Id` FROM `JoinCompositeKeyToLeaf` AS `j` INNER JOIN `Leaves` AS `l` ON `j`.`LeafId` = `l`.`Id` -) AS `t` ON `e`.`Key1` = `t`.`CompositeId1` AND `e`.`Key2` = `t`.`CompositeId2` AND `e`.`Key3` = `t`.`CompositeId3`) +) AS `s` ON `e`.`Key1` = `s`.`CompositeId1` AND `e`.`Key2` = `s`.`CompositeId2` AND `e`.`Key3` = `s`.`CompositeId3`) LEFT JOIN ( SELECT `j0`.`EntityBranchId`, `j0`.`EntityOneId`, `e0`.`Id`, `e0`.`Name` FROM `JoinOneToBranch` AS `j0` INNER JOIN `EntityOnes` AS `e0` ON `j0`.`EntityOneId` = `e0`.`Id` -) AS `t0` ON `t`.`Id` = `t0`.`EntityBranchId` -WHERE `t`.`Id` IS NOT NULL AND `t0`.`EntityBranchId` IS NOT NULL -ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `t`.`LeafId`, `t`.`CompositeId1`, `t`.`CompositeId2`, `t`.`CompositeId3`, `t`.`Id` +) AS `s0` ON `s`.`Id` = `s0`.`EntityBranchId` +WHERE `s`.`Id` IS NOT NULL AND `s0`.`EntityBranchId` IS NOT NULL +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Id` """); } @@ -1299,33 +1296,33 @@ ORDER BY `e`.`Id` """, // """ -SELECT `t`.`OneId`, `t`.`ThreeId`, `t`.`Payload`, `t`.`Id`, `t`.`Name`, `t`.`Id0`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name0`, `t`.`ReferenceInverseId`, `e`.`Id` +SELECT `s`.`OneId`, `s`.`ThreeId`, `s`.`Payload`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `e`.`Id` FROM `EntityThrees` AS `e` INNER JOIN ( SELECT `j`.`OneId`, `j`.`ThreeId`, `j`.`Payload`, `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId` FROM (`JoinOneToThreePayloadFull` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` -) AS `t` ON `e`.`Id` = `t`.`ThreeId` -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`ThreeId`, `t`.`Id`, `t`.`Id0` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id`, `s`.`Id0` """, // """ -SELECT `t0`.`LeftId`, `t0`.`RightId`, `t0`.`Payload`, `t0`.`Id`, `t0`.`Name`, `e`.`Id`, `t`.`OneId`, `t`.`ThreeId`, `t`.`Id`, `t`.`Id0` +SELECT `s0`.`LeftId`, `s0`.`RightId`, `s0`.`Payload`, `s0`.`Id`, `s0`.`Name`, `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id`, `s`.`Id0` FROM (`EntityThrees` AS `e` INNER JOIN ( SELECT `j`.`OneId`, `j`.`ThreeId`, `e0`.`Id`, `e1`.`Id` AS `Id0` FROM (`JoinOneToThreePayloadFull` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` -) AS `t` ON `e`.`Id` = `t`.`ThreeId`) +) AS `s` ON `e`.`Id` = `s`.`ThreeId`) LEFT JOIN ( SELECT `j0`.`LeftId`, `j0`.`RightId`, `j0`.`Payload`, `e2`.`Id`, `e2`.`Name` FROM `JoinOneSelfPayload` AS `j0` INNER JOIN `EntityOnes` AS `e2` ON `j0`.`RightId` = `e2`.`Id` -) AS `t0` ON `t`.`Id` = `t0`.`LeftId` -WHERE `t`.`Id` IS NOT NULL AND `t0`.`LeftId` IS NOT NULL -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`ThreeId`, `t`.`Id`, `t`.`Id0` +) AS `s0` ON `s`.`Id` = `s0`.`LeftId` +WHERE `s`.`Id` IS NOT NULL AND `s0`.`LeftId` IS NOT NULL +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id`, `s`.`Id0` """); } @@ -1334,22 +1331,22 @@ public override async Task Include_skip_navigation_and_reference_split(bool asyn await base.Include_skip_navigation_and_reference_split(async); AssertSql( -""" + """ SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId` FROM `EntityTwos` AS `e` LEFT JOIN `EntityThrees` AS `e0` ON `e`.`Id` = `e0`.`ReferenceInverseId` ORDER BY `e`.`Id`, `e0`.`Id` """, -// -""" -SELECT `t`.`OneSkipSharedId`, `t`.`TwoSkipSharedId`, `t`.`Id`, `t`.`Name`, `e`.`Id`, `e0`.`Id` + // + """ +SELECT `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId`, `s`.`Id`, `s`.`Name`, `e`.`Id`, `e0`.`Id` FROM (`EntityTwos` AS `e` LEFT JOIN `EntityThrees` AS `e0` ON `e`.`Id` = `e0`.`ReferenceInverseId`) INNER JOIN ( SELECT `e1`.`OneSkipSharedId`, `e1`.`TwoSkipSharedId`, `e2`.`Id`, `e2`.`Name` FROM `EntityOneEntityTwo` AS `e1` INNER JOIN `EntityOnes` AS `e2` ON `e1`.`OneSkipSharedId` = `e2`.`Id` -) AS `t` ON `e`.`Id` = `t`.`TwoSkipSharedId` +) AS `s` ON `e`.`Id` = `s`.`TwoSkipSharedId` ORDER BY `e`.`Id`, `e0`.`Id` """); } @@ -1359,21 +1356,21 @@ public override async Task Filtered_include_skip_navigation_where_split(bool asy await base.Filtered_include_skip_navigation_where_split(async); AssertSql( -""" + """ SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId` FROM `EntityThrees` AS `e` ORDER BY `e`.`Id` """, -// -""" -SELECT `t`.`OneId`, `t`.`ThreeId`, `t`.`Payload`, `t`.`Id`, `t`.`Name`, `e`.`Id` + // + """ +SELECT `s`.`OneId`, `s`.`ThreeId`, `s`.`Payload`, `s`.`Id`, `s`.`Name`, `e`.`Id` FROM `EntityThrees` AS `e` INNER JOIN ( SELECT `j`.`OneId`, `j`.`ThreeId`, `j`.`Payload`, `e0`.`Id`, `e0`.`Name` FROM `JoinOneToThreePayloadFullShared` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` WHERE `e0`.`Id` < 10 -) AS `t` ON `e`.`Id` = `t`.`ThreeId` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` ORDER BY `e`.`Id` """); } @@ -1383,21 +1380,21 @@ public override async Task Filtered_include_skip_navigation_order_by_split(bool await base.Filtered_include_skip_navigation_order_by_split(async); AssertSql( -""" + """ SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId` FROM `EntityThrees` AS `e` ORDER BY `e`.`Id` """, -// -""" -SELECT `t`.`ThreeId`, `t`.`TwoId`, `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name`, `t`.`ReferenceInverseId`, `e`.`Id` + // + """ +SELECT `s`.`ThreeId`, `s`.`TwoId`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId`, `e`.`Id` FROM `EntityThrees` AS `e` INNER JOIN ( SELECT `j`.`ThreeId`, `j`.`TwoId`, `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId` FROM `JoinTwoToThree` AS `j` INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` -) AS `t` ON `e`.`Id` = `t`.`ThreeId` -ORDER BY `e`.`Id`, `t`.`Id` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`Id` """); } @@ -1487,8 +1484,8 @@ public override async Task Filtered_then_include_skip_navigation_where_split(boo await base.Filtered_then_include_skip_navigation_where_split(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`Name`, `t`.`Number`, `t`.`Slumber`, `t`.`IsGreen`, `t`.`IsBrown`, `t`.`Discriminator` + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`Number`, `u`.`Slumber`, `u`.`IsGreen`, `u`.`IsBrown`, `u`.`Discriminator` FROM ( SELECT `r`.`Id`, `r`.`Name`, CVar(NULL) AS `Number`, CVar(NULL) AS `Slumber`, CVar(NULL) AS `IsGreen`, CVar(NULL) AS `IsBrown`, 'EntityRoot' AS `Discriminator` FROM `Roots` AS `r` @@ -1501,12 +1498,12 @@ UNION ALL UNION ALL SELECT `l0`.`Id`, `l0`.`Name`, CVar(NULL) AS `Number`, `l0`.`Slumber`, CVar(NULL) AS `IsGreen`, `l0`.`IsBrown`, 'EntityLeaf2' AS `Discriminator` FROM `Leaf2s` AS `l0` -) AS `t` -ORDER BY `t`.`Id` +) AS `u` +ORDER BY `u`.`Id` """, - // - """ -SELECT `t0`.`RootSkipSharedId`, `t0`.`ThreeSkipSharedId`, `t0`.`Id`, `t0`.`CollectionInverseId`, `t0`.`Name`, `t0`.`ReferenceInverseId`, `t`.`Id` + // + """ +SELECT `s`.`RootSkipSharedId`, `s`.`ThreeSkipSharedId`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId`, `u`.`Id` FROM ( SELECT `r`.`Id` FROM `Roots` AS `r` @@ -1519,17 +1516,17 @@ UNION ALL UNION ALL SELECT `l0`.`Id` FROM `Leaf2s` AS `l0` -) AS `t` +) AS `u` INNER JOIN ( SELECT `e`.`RootSkipSharedId`, `e`.`ThreeSkipSharedId`, `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId` FROM `EntityRootEntityThree` AS `e` INNER JOIN `EntityThrees` AS `e0` ON `e`.`ThreeSkipSharedId` = `e0`.`Id` -) AS `t0` ON `t`.`Id` = `t0`.`RootSkipSharedId` -ORDER BY `t`.`Id`, `t0`.`RootSkipSharedId`, `t0`.`ThreeSkipSharedId`, `t0`.`Id` +) AS `s` ON `u`.`Id` = `s`.`RootSkipSharedId` +ORDER BY `u`.`Id`, `s`.`RootSkipSharedId`, `s`.`ThreeSkipSharedId`, `s`.`Id` """, - // - """ -SELECT `t1`.`OneId`, `t1`.`ThreeId`, `t1`.`Payload`, `t1`.`Id`, `t1`.`Name`, `t`.`Id`, `t0`.`RootSkipSharedId`, `t0`.`ThreeSkipSharedId`, `t0`.`Id` + // + """ +SELECT `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Payload`, `s0`.`Id`, `s0`.`Name`, `u`.`Id`, `s`.`RootSkipSharedId`, `s`.`ThreeSkipSharedId`, `s`.`Id` FROM (( SELECT `r`.`Id` FROM `Roots` AS `r` @@ -1542,20 +1539,20 @@ UNION ALL UNION ALL SELECT `l0`.`Id` FROM `Leaf2s` AS `l0` -) AS `t` +) AS `u` INNER JOIN ( SELECT `e`.`RootSkipSharedId`, `e`.`ThreeSkipSharedId`, `e0`.`Id` FROM `EntityRootEntityThree` AS `e` INNER JOIN `EntityThrees` AS `e0` ON `e`.`ThreeSkipSharedId` = `e0`.`Id` -) AS `t0` ON `t`.`Id` = `t0`.`RootSkipSharedId`) +) AS `s` ON `u`.`Id` = `s`.`RootSkipSharedId`) LEFT JOIN ( SELECT `j`.`OneId`, `j`.`ThreeId`, `j`.`Payload`, `e1`.`Id`, `e1`.`Name` FROM `JoinOneToThreePayloadFullShared` AS `j` INNER JOIN `EntityOnes` AS `e1` ON `j`.`OneId` = `e1`.`Id` WHERE `e1`.`Id` < 10 -) AS `t1` ON `t0`.`Id` = `t1`.`ThreeId` -WHERE `t0`.`Id` IS NOT NULL AND `t1`.`ThreeId` IS NOT NULL -ORDER BY `t`.`Id`, `t0`.`RootSkipSharedId`, `t0`.`ThreeSkipSharedId`, `t0`.`Id` +) AS `s0` ON `s`.`Id` = `s0`.`ThreeId` +WHERE `s`.`Id` IS NOT NULL AND `s0`.`ThreeId` IS NOT NULL +ORDER BY `u`.`Id`, `s`.`RootSkipSharedId`, `s`.`ThreeSkipSharedId`, `s`.`Id` """); } @@ -1643,40 +1640,40 @@ public override async Task Filtered_include_skip_navigation_where_then_include_s await base.Filtered_include_skip_navigation_where_then_include_skip_navigation_split(async); AssertSql( -""" + """ SELECT `l`.`Id`, `l`.`Name`, `l`.`Number`, `l`.`IsGreen` FROM `Leaves` AS `l` ORDER BY `l`.`Id` """, - // - """ -SELECT `t`.`LeafId`, `t`.`CompositeId1`, `t`.`CompositeId2`, `t`.`CompositeId3`, `t`.`Key1`, `t`.`Key2`, `t`.`Key3`, `t`.`Name`, `l`.`Id` + // + """ +SELECT `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Key1`, `s`.`Key2`, `s`.`Key3`, `s`.`Name`, `l`.`Id` FROM `Leaves` AS `l` INNER JOIN ( SELECT `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name` FROM `JoinCompositeKeyToLeaf` AS `j` INNER JOIN `EntityCompositeKeys` AS `e` ON `j`.`CompositeId1` = `e`.`Key1` AND `j`.`CompositeId2` = `e`.`Key2` AND `j`.`CompositeId3` = `e`.`Key3` WHERE `e`.`Key1` < 5 -) AS `t` ON `l`.`Id` = `t`.`LeafId` -ORDER BY `l`.`Id`, `t`.`LeafId`, `t`.`CompositeId1`, `t`.`CompositeId2`, `t`.`CompositeId3`, `t`.`Key1`, `t`.`Key2`, `t`.`Key3` +) AS `s` ON `l`.`Id` = `s`.`LeafId` +ORDER BY `l`.`Id`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Key1`, `s`.`Key2`, `s`.`Key3` """, - // - """ -SELECT `t0`.`TwoSkipSharedId`, `t0`.`CompositeKeySkipSharedKey1`, `t0`.`CompositeKeySkipSharedKey2`, `t0`.`CompositeKeySkipSharedKey3`, `t0`.`Id`, `t0`.`CollectionInverseId`, `t0`.`ExtraId`, `t0`.`Name`, `t0`.`ReferenceInverseId`, `l`.`Id`, `t`.`LeafId`, `t`.`CompositeId1`, `t`.`CompositeId2`, `t`.`CompositeId3`, `t`.`Key1`, `t`.`Key2`, `t`.`Key3` + // + """ +SELECT `s0`.`TwoSkipSharedId`, `s0`.`CompositeKeySkipSharedKey1`, `s0`.`CompositeKeySkipSharedKey2`, `s0`.`CompositeKeySkipSharedKey3`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name`, `s0`.`ReferenceInverseId`, `l`.`Id`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Key1`, `s`.`Key2`, `s`.`Key3` FROM (`Leaves` AS `l` INNER JOIN ( SELECT `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3` FROM `JoinCompositeKeyToLeaf` AS `j` INNER JOIN `EntityCompositeKeys` AS `e` ON `j`.`CompositeId1` = `e`.`Key1` AND `j`.`CompositeId2` = `e`.`Key2` AND `j`.`CompositeId3` = `e`.`Key3` WHERE `e`.`Key1` < 5 -) AS `t` ON `l`.`Id` = `t`.`LeafId`) +) AS `s` ON `l`.`Id` = `s`.`LeafId`) LEFT JOIN ( SELECT `e0`.`TwoSkipSharedId`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3`, `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name`, `e1`.`ReferenceInverseId` FROM `EntityCompositeKeyEntityTwo` AS `e0` INNER JOIN `EntityTwos` AS `e1` ON `e0`.`TwoSkipSharedId` = `e1`.`Id` -) AS `t0` ON `t`.`Key1` = `t0`.`CompositeKeySkipSharedKey1` AND `t`.`Key2` = `t0`.`CompositeKeySkipSharedKey2` AND `t`.`Key3` = `t0`.`CompositeKeySkipSharedKey3` -WHERE `t`.`Key1` IS NOT NULL AND `t0`.`CompositeKeySkipSharedKey1` IS NOT NULL AND `t`.`Key2` IS NOT NULL AND `t0`.`CompositeKeySkipSharedKey2` IS NOT NULL AND `t`.`Key3` IS NOT NULL AND `t0`.`CompositeKeySkipSharedKey3` IS NOT NULL -ORDER BY `l`.`Id`, `t`.`LeafId`, `t`.`CompositeId1`, `t`.`CompositeId2`, `t`.`CompositeId3`, `t`.`Key1`, `t`.`Key2`, `t`.`Key3` +) AS `s0` ON `s`.`Key1` = `s0`.`CompositeKeySkipSharedKey1` AND `s`.`Key2` = `s0`.`CompositeKeySkipSharedKey2` AND `s`.`Key3` = `s0`.`CompositeKeySkipSharedKey3` +WHERE `s`.`Key1` IS NOT NULL AND `s0`.`CompositeKeySkipSharedKey1` IS NOT NULL AND `s`.`Key2` IS NOT NULL AND `s0`.`CompositeKeySkipSharedKey2` IS NOT NULL AND `s`.`Key3` IS NOT NULL AND `s0`.`CompositeKeySkipSharedKey3` IS NOT NULL +ORDER BY `l`.`Id`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Key1`, `s`.`Key2`, `s`.`Key3` """); } @@ -1785,7 +1782,7 @@ ORDER BY `e`.`Id` """, // """ -SELECT `t`.`OneId`, `t`.`TwoId`, `t`.`JoinOneToTwoExtraId`, `t`.`Id`, `t`.`Name`, `t`.`Id0`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name0`, `t`.`ReferenceInverseId`, `e`.`Id` +SELECT `s`.`OneId`, `s`.`TwoId`, `s`.`JoinOneToTwoExtraId`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `e`.`Id` FROM `EntityTwos` AS `e` INNER JOIN ( SELECT `j`.`OneId`, `j`.`TwoId`, `j`.`JoinOneToTwoExtraId`, `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId` @@ -1793,12 +1790,12 @@ INNER JOIN ( INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` WHERE `e0`.`Id` < 10 -) AS `t` ON `e`.`Id` = `t`.`TwoId` -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`TwoId`, `t`.`Id`, `t`.`Id0` +) AS `s` ON `e`.`Id` = `s`.`TwoId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s`.`Id0` """, // """ -SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e`.`Id`, `t`.`OneId`, `t`.`TwoId`, `t`.`Id`, `t`.`Id0` +SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s`.`Id0` FROM (`EntityTwos` AS `e` INNER JOIN ( SELECT `j`.`OneId`, `j`.`TwoId`, `e0`.`Id`, `e1`.`Id` AS `Id0` @@ -1806,10 +1803,10 @@ INNER JOIN ( INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` WHERE `e0`.`Id` < 10 -) AS `t` ON `e`.`Id` = `t`.`TwoId`) -LEFT JOIN `EntityTwos` AS `e2` ON `t`.`Id` = `e2`.`CollectionInverseId` -WHERE `t`.`Id` IS NOT NULL AND `e2`.`CollectionInverseId` IS NOT NULL -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`TwoId`, `t`.`Id`, `t`.`Id0` +) AS `s` ON `e`.`Id` = `s`.`TwoId`) +LEFT JOIN `EntityTwos` AS `e2` ON `s`.`Id` = `e2`.`CollectionInverseId` +WHERE `s`.`Id` IS NOT NULL AND `e2`.`CollectionInverseId` IS NOT NULL +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s`.`Id0` """); } @@ -1894,33 +1891,33 @@ ORDER BY `e`.`Id` """, // """ -SELECT `t`.`OneId`, `t`.`ThreeId`, `t`.`Payload`, `t`.`Id`, `t`.`Name`, `e`.`Id` +SELECT `s`.`OneId`, `s`.`ThreeId`, `s`.`Payload`, `s`.`Id`, `s`.`Name`, `e`.`Id` FROM `EntityThrees` AS `e` INNER JOIN ( SELECT `j`.`OneId`, `j`.`ThreeId`, `j`.`Payload`, `e0`.`Id`, `e0`.`Name` FROM `JoinOneToThreePayloadFull` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` WHERE `e0`.`Id` > 15 -) AS `t` ON `e`.`Id` = `t`.`ThreeId` -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`ThreeId`, `t`.`Id` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id` """, // """ -SELECT `t0`.`Id`, `t0`.`CollectionInverseId`, `t0`.`ExtraId`, `t0`.`Name`, `t0`.`ReferenceInverseId`, `e`.`Id`, `t`.`OneId`, `t`.`ThreeId`, `t`.`Id` +SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id` FROM (`EntityThrees` AS `e` INNER JOIN ( SELECT `j`.`OneId`, `j`.`ThreeId`, `e0`.`Id` FROM `JoinOneToThreePayloadFull` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` WHERE `e0`.`Id` > 15 -) AS `t` ON `e`.`Id` = `t`.`ThreeId`) +) AS `s` ON `e`.`Id` = `s`.`ThreeId`) LEFT JOIN ( SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name`, `e1`.`ReferenceInverseId` FROM `EntityTwos` AS `e1` WHERE `e1`.`Id` < 5 -) AS `t0` ON `t`.`Id` = `t0`.`CollectionInverseId` -WHERE `t`.`Id` IS NOT NULL AND `t0`.`CollectionInverseId` IS NOT NULL -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`ThreeId`, `t`.`Id` +) AS `e2` ON `s`.`Id` = `e2`.`CollectionInverseId` +WHERE `s`.`Id` IS NOT NULL AND `e2`.`CollectionInverseId` IS NOT NULL +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id` """); } @@ -1936,32 +1933,32 @@ ORDER BY `e`.`Id` """, // """ -SELECT `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name`, `t`.`ReferenceInverseId`, `e`.`Id` +SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e`.`Id` FROM `EntityOnes` AS `e` INNER JOIN ( SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId` FROM `EntityTwos` AS `e0` WHERE `e0`.`Id` > 15 -) AS `t` ON `e`.`Id` = `t`.`CollectionInverseId` -ORDER BY `e`.`Id`, `t`.`Id` +) AS `e2` ON `e`.`Id` = `e2`.`CollectionInverseId` +ORDER BY `e`.`Id`, `e2`.`Id` """, // """ -SELECT `t0`.`ThreeId`, `t0`.`TwoId`, `t0`.`Id`, `t0`.`CollectionInverseId`, `t0`.`Name`, `t0`.`ReferenceInverseId`, `e`.`Id`, `t`.`Id` +SELECT `s`.`ThreeId`, `s`.`TwoId`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId`, `e`.`Id`, `e2`.`Id` FROM (`EntityOnes` AS `e` INNER JOIN ( SELECT `e0`.`Id`, `e0`.`CollectionInverseId` FROM `EntityTwos` AS `e0` WHERE `e0`.`Id` > 15 -) AS `t` ON `e`.`Id` = `t`.`CollectionInverseId`) +) AS `e2` ON `e`.`Id` = `e2`.`CollectionInverseId`) LEFT JOIN ( SELECT `j`.`ThreeId`, `j`.`TwoId`, `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`Name`, `e1`.`ReferenceInverseId` FROM `JoinTwoToThree` AS `j` INNER JOIN `EntityThrees` AS `e1` ON `j`.`ThreeId` = `e1`.`Id` WHERE `e1`.`Id` < 5 -) AS `t0` ON `t`.`Id` = `t0`.`TwoId` -WHERE `t`.`Id` IS NOT NULL AND `t0`.`TwoId` IS NOT NULL -ORDER BY `e`.`Id`, `t`.`Id` +) AS `s` ON `e2`.`Id` = `s`.`TwoId` +WHERE `e2`.`Id` IS NOT NULL AND `s`.`TwoId` IS NOT NULL +ORDER BY `e`.`Id`, `e2`.`Id` """); } @@ -1970,20 +1967,20 @@ public override async Task Include_skip_navigation_then_include_inverse_works_fo await base.Include_skip_navigation_then_include_inverse_works_for_tracking_query(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `t0`.`OneId`, `t0`.`ThreeId`, `t0`.`Payload`, `t0`.`Id`, `t0`.`Name`, `t0`.`OneId0`, `t0`.`ThreeId0`, `t0`.`Payload0`, `t0`.`Id0`, `t0`.`CollectionInverseId`, `t0`.`Name0`, `t0`.`ReferenceInverseId` + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Payload`, `s0`.`Id`, `s0`.`Name`, `s0`.`OneId0`, `s0`.`ThreeId0`, `s0`.`Payload0`, `s0`.`Id0`, `s0`.`CollectionInverseId`, `s0`.`Name0`, `s0`.`ReferenceInverseId` FROM `EntityThrees` AS `e` LEFT JOIN ( - SELECT `j`.`OneId`, `j`.`ThreeId`, `j`.`Payload`, `e0`.`Id`, `e0`.`Name`, `t`.`OneId` AS `OneId0`, `t`.`ThreeId` AS `ThreeId0`, `t`.`Payload` AS `Payload0`, `t`.`Id` AS `Id0`, `t`.`CollectionInverseId`, `t`.`Name` AS `Name0`, `t`.`ReferenceInverseId` + SELECT `j`.`OneId`, `j`.`ThreeId`, `j`.`Payload`, `e0`.`Id`, `e0`.`Name`, `s`.`OneId` AS `OneId0`, `s`.`ThreeId` AS `ThreeId0`, `s`.`Payload` AS `Payload0`, `s`.`Id` AS `Id0`, `s`.`CollectionInverseId`, `s`.`Name` AS `Name0`, `s`.`ReferenceInverseId` FROM (`JoinOneToThreePayloadFullShared` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) LEFT JOIN ( SELECT `j0`.`OneId`, `j0`.`ThreeId`, `j0`.`Payload`, `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`Name`, `e1`.`ReferenceInverseId` FROM `JoinOneToThreePayloadFullShared` AS `j0` INNER JOIN `EntityThrees` AS `e1` ON `j0`.`ThreeId` = `e1`.`Id` - ) AS `t` ON `e0`.`Id` = `t`.`OneId` -) AS `t0` ON `e`.`Id` = `t0`.`ThreeId` -ORDER BY `e`.`Id`, `t0`.`OneId`, `t0`.`ThreeId`, `t0`.`Id`, `t0`.`OneId0`, `t0`.`ThreeId0` + ) AS `s` ON `e0`.`Id` = `s`.`OneId` +) AS `s0` ON `e`.`Id` = `s0`.`ThreeId` +ORDER BY `e`.`Id`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Id`, `s0`.`OneId0`, `s0`.`ThreeId0` """); } @@ -2013,14 +2010,14 @@ public override async Task Select_many_over_skip_navigation_where_non_equality(b await base.Select_many_over_skip_navigation_where_non_equality(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name`, `t`.`ReferenceInverseId` + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId` FROM `EntityOnes` AS `e` LEFT JOIN ( SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `j`.`OneId` FROM `JoinOneToTwo` AS `j` INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` -) AS `t` ON `e`.`Id` = `t`.`OneId` AND `e`.`Id` <> `t`.`Id` +) AS `s` ON `e`.`Id` = `s`.`OneId` AND `e`.`Id` <> `s`.`Id` """); } @@ -2081,14 +2078,14 @@ public override async Task GetType_in_hierarchy_in_querying_base_type(bool async AssertSql( """ -SELECT `t`.`Id`, `t`.`Name`, `t`.`Number`, `t`.`IsGreen`, `t`.`Discriminator` +SELECT `u`.`Id`, `u`.`Name`, `u`.`Number`, `u`.`IsGreen`, `u`.`Discriminator` FROM ( SELECT `b`.`Id`, `b`.`Name`, `b`.`Number`, CVar(NULL) AS `IsGreen`, 'EntityBranch' AS `Discriminator` FROM `Branches` AS `b` UNION ALL SELECT `l`.`Id`, `l`.`Name`, `l`.`Number`, `l`.`IsGreen`, 'EntityLeaf' AS `Discriminator` FROM `Leaves` AS `l` -) AS `t` +) AS `u` WHERE 0 = 1 """); } @@ -2214,22 +2211,22 @@ public override async Task Skip_navigation_count_with_predicate_unidirectional(b AssertSql( """ -SELECT `t3`.`Id`, `t3`.`Name`, `t3`.`c` +SELECT `u4`.`Id`, `u4`.`Name`, `u4`.`c` FROM ( SELECT `u`.`Id`, `u`.`Name`, ( SELECT COUNT(*) - FROM `UnidirectionalJoinOneToBranch` AS `u3` + FROM `UnidirectionalJoinOneToBranch` AS `u0` INNER JOIN ( - SELECT `u4`.`Id`, `u4`.`Name`, `u4`.`Number`, CVar(NULL) AS `IsGreen`, 'UnidirectionalEntityBranch' AS `Discriminator` - FROM `UnidirectionalBranches` AS `u4` + SELECT `u1`.`Id`, `u1`.`Name` + FROM `UnidirectionalBranches` AS `u1` UNION ALL - SELECT `u5`.`Id`, `u5`.`Name`, `u5`.`Number`, `u5`.`IsGreen`, 'UnidirectionalEntityLeaf' AS `Discriminator` - FROM `UnidirectionalLeaves` AS `u5` - ) AS `t1` ON `u3`.`UnidirectionalEntityBranchId` = `t1`.`Id` - WHERE `u`.`Id` = `u3`.`UnidirectionalEntityOneId` AND (`t1`.`Name` LIKE 'L%')) AS `c` + SELECT `u2`.`Id`, `u2`.`Name` + FROM `UnidirectionalLeaves` AS `u2` + ) AS `u3` ON `u0`.`UnidirectionalEntityBranchId` = `u3`.`Id` + WHERE `u`.`Id` = `u0`.`UnidirectionalEntityOneId` AND (`u3`.`Name` LIKE 'L%')) AS `c` FROM `UnidirectionalEntityOnes` AS `u` -) AS `t3` -ORDER BY `t3`.`c`, `t3`.`Id` +) AS `u4` +ORDER BY `u4`.`c`, `u4`.`Id` """); } @@ -2274,10 +2271,10 @@ public override async Task Skip_navigation_of_type_unidirectional(bool async) AssertSql( """ -SELECT `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `t0`.`Id`, `t0`.`Name`, `t0`.`Number`, `t0`.`IsGreen`, `t0`.`Discriminator`, `t0`.`RootSkipSharedId`, `t0`.`UnidirectionalEntityCompositeKeyKey1`, `t0`.`UnidirectionalEntityCompositeKeyKey2`, `t0`.`UnidirectionalEntityCompositeKeyKey3` +SELECT `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s`.`Discriminator`, `s`.`RootSkipSharedId`, `s`.`UnidirectionalEntityCompositeKeyKey1`, `s`.`UnidirectionalEntityCompositeKeyKey2`, `s`.`UnidirectionalEntityCompositeKeyKey3` FROM `UnidirectionalEntityCompositeKeys` AS `u` LEFT JOIN ( - SELECT `t`.`Id`, `t`.`Name`, `t`.`Number`, `t`.`IsGreen`, `t`.`Discriminator`, `u0`.`RootSkipSharedId`, `u0`.`UnidirectionalEntityCompositeKeyKey1`, `u0`.`UnidirectionalEntityCompositeKeyKey2`, `u0`.`UnidirectionalEntityCompositeKeyKey3` + SELECT `u4`.`Id`, `u4`.`Name`, `u4`.`Number`, `u4`.`IsGreen`, `u4`.`Discriminator`, `u0`.`RootSkipSharedId`, `u0`.`UnidirectionalEntityCompositeKeyKey1`, `u0`.`UnidirectionalEntityCompositeKeyKey2`, `u0`.`UnidirectionalEntityCompositeKeyKey3` FROM `UnidirectionalEntityCompositeKeyUnidirectionalEntityRoot` AS `u0` INNER JOIN ( SELECT `u1`.`Id`, `u1`.`Name`, CVar(NULL) AS `Number`, CVar(NULL) AS `IsGreen`, 'UnidirectionalEntityRoot' AS `Discriminator` @@ -2288,10 +2285,10 @@ UNION ALL UNION ALL SELECT `u3`.`Id`, `u3`.`Name`, `u3`.`Number`, `u3`.`IsGreen`, 'UnidirectionalEntityLeaf' AS `Discriminator` FROM `UnidirectionalLeaves` AS `u3` - ) AS `t` ON `u0`.`RootSkipSharedId` = `t`.`Id` - WHERE `t`.`Discriminator` = 'UnidirectionalEntityLeaf' -) AS `t0` ON `u`.`Key1` = `t0`.`UnidirectionalEntityCompositeKeyKey1` AND `u`.`Key2` = `t0`.`UnidirectionalEntityCompositeKeyKey2` AND `u`.`Key3` = `t0`.`UnidirectionalEntityCompositeKeyKey3` -ORDER BY `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `t0`.`RootSkipSharedId`, `t0`.`UnidirectionalEntityCompositeKeyKey1`, `t0`.`UnidirectionalEntityCompositeKeyKey2`, `t0`.`UnidirectionalEntityCompositeKeyKey3` + ) AS `u4` ON `u0`.`RootSkipSharedId` = `u4`.`Id` + WHERE `u4`.`Discriminator` = 'UnidirectionalEntityLeaf' +) AS `s` ON `u`.`Key1` = `s`.`UnidirectionalEntityCompositeKeyKey1` AND `u`.`Key2` = `s`.`UnidirectionalEntityCompositeKeyKey2` AND `u`.`Key3` = `s`.`UnidirectionalEntityCompositeKeyKey3` +ORDER BY `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `s`.`RootSkipSharedId`, `s`.`UnidirectionalEntityCompositeKeyKey1`, `s`.`UnidirectionalEntityCompositeKeyKey2`, `s`.`UnidirectionalEntityCompositeKeyKey3` """); } @@ -2340,23 +2337,23 @@ public override async Task Select_many_over_skip_navigation_unidirectional(bool await base.Select_many_over_skip_navigation_unidirectional(async); AssertSql( -""" -SELECT `t0`.`Id`, `t0`.`CollectionInverseId`, `t0`.`Name`, `t0`.`ReferenceInverseId` + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId` FROM ( - SELECT `u1`.`Id` - FROM `UnidirectionalRoots` AS `u1` + SELECT `u`.`Id` + FROM `UnidirectionalRoots` AS `u` UNION ALL - SELECT `u2`.`Id` - FROM `UnidirectionalBranches` AS `u2` + SELECT `u0`.`Id` + FROM `UnidirectionalBranches` AS `u0` UNION ALL - SELECT `u3`.`Id` - FROM `UnidirectionalLeaves` AS `u3` -) AS `t` + SELECT `u1`.`Id` + FROM `UnidirectionalLeaves` AS `u1` +) AS `u2` INNER JOIN ( - SELECT `u0`.`Id`, `u0`.`CollectionInverseId`, `u0`.`Name`, `u0`.`ReferenceInverseId`, `u`.`UnidirectionalEntityRootId` - FROM `UnidirectionalEntityRootUnidirectionalEntityThree` AS `u` - INNER JOIN `UnidirectionalEntityThrees` AS `u0` ON `u`.`ThreeSkipSharedId` = `u0`.`Id` -) AS `t0` ON `t`.`Id` = `t0`.`UnidirectionalEntityRootId` + SELECT `u4`.`Id`, `u4`.`CollectionInverseId`, `u4`.`Name`, `u4`.`ReferenceInverseId`, `u3`.`UnidirectionalEntityRootId` + FROM `UnidirectionalEntityRootUnidirectionalEntityThree` AS `u3` + INNER JOIN `UnidirectionalEntityThrees` AS `u4` ON `u3`.`ThreeSkipSharedId` = `u4`.`Id` +) AS `s` ON `u2`.`Id` = `s`.`UnidirectionalEntityRootId` """); } @@ -2365,14 +2362,14 @@ public override async Task Select_many_over_skip_navigation_where_unidirectional await base.Select_many_over_skip_navigation_where_unidirectional(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name`, `t`.`ReferenceInverseId` + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId` FROM `UnidirectionalEntityOnes` AS `u` LEFT JOIN ( SELECT `u1`.`Id`, `u1`.`CollectionInverseId`, `u1`.`ExtraId`, `u1`.`Name`, `u1`.`ReferenceInverseId`, `u0`.`OneId` FROM `UnidirectionalJoinOneToTwo` AS `u0` INNER JOIN `UnidirectionalEntityTwos` AS `u1` ON `u0`.`TwoId` = `u1`.`Id` -) AS `t` ON `u`.`Id` = `t`.`OneId` +) AS `s` ON `u`.`Id` = `s`.`OneId` """); } @@ -2422,10 +2419,10 @@ public override async Task Select_many_over_skip_navigation_cast_unidirectional( AssertSql( """ -SELECT `t0`.`Id`, `t0`.`Name`, `t0`.`Number`, `t0`.`IsGreen`, `t0`.`Discriminator` +SELECT `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s`.`Discriminator` FROM `UnidirectionalEntityOnes` AS `u` INNER JOIN ( - SELECT `t`.`Id`, `t`.`Name`, `t`.`Number`, `t`.`IsGreen`, `t`.`Discriminator`, `u0`.`UnidirectionalEntityOneId` + SELECT `u3`.`Id`, `u3`.`Name`, `u3`.`Number`, `u3`.`IsGreen`, `u3`.`Discriminator`, `u0`.`UnidirectionalEntityOneId` FROM `UnidirectionalJoinOneToBranch` AS `u0` INNER JOIN ( SELECT `u1`.`Id`, `u1`.`Name`, `u1`.`Number`, CVar(NULL) AS `IsGreen`, 'UnidirectionalEntityBranch' AS `Discriminator` @@ -2433,8 +2430,8 @@ INNER JOIN ( UNION ALL SELECT `u2`.`Id`, `u2`.`Name`, `u2`.`Number`, `u2`.`IsGreen`, 'UnidirectionalEntityLeaf' AS `Discriminator` FROM `UnidirectionalLeaves` AS `u2` - ) AS `t` ON `u0`.`UnidirectionalEntityBranchId` = `t`.`Id` -) AS `t0` ON `u`.`Id` = `t0`.`UnidirectionalEntityOneId` + ) AS `u3` ON `u0`.`UnidirectionalEntityBranchId` = `u3`.`Id` +) AS `s` ON `u`.`Id` = `s`.`UnidirectionalEntityOneId` """); } @@ -2442,15 +2439,15 @@ public override async Task Select_skip_navigation_unidirectional(bool async) { await base.Select_skip_navigation_unidirectional(async); AssertSql( -""" -SELECT `u`.`Id`, `t`.`Id`, `t`.`Name`, `t`.`LeftId`, `t`.`RightId` + """ +SELECT `u`.`Id`, `s`.`Id`, `s`.`Name`, `s`.`LeftId`, `s`.`RightId` FROM `UnidirectionalEntityOnes` AS `u` LEFT JOIN ( SELECT `u1`.`Id`, `u1`.`Name`, `u0`.`LeftId`, `u0`.`RightId` FROM `UnidirectionalJoinOneSelfPayload` AS `u0` INNER JOIN `UnidirectionalEntityOnes` AS `u1` ON `u0`.`LeftId` = `u1`.`Id` -) AS `t` ON `u`.`Id` = `t`.`RightId` -ORDER BY `u`.`Id`, `t`.`LeftId`, `t`.`RightId` +) AS `s` ON `u`.`Id` = `s`.`RightId` +ORDER BY `u`.`Id`, `s`.`LeftId`, `s`.`RightId` """); } @@ -2460,10 +2457,10 @@ public override async Task Include_skip_navigation_unidirectional(bool async) AssertSql( """ -SELECT `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `u`.`Name`, `t0`.`RootSkipSharedId`, `t0`.`UnidirectionalEntityCompositeKeyKey1`, `t0`.`UnidirectionalEntityCompositeKeyKey2`, `t0`.`UnidirectionalEntityCompositeKeyKey3`, `t0`.`Id`, `t0`.`Name`, `t0`.`Number`, `t0`.`IsGreen`, `t0`.`Discriminator` +SELECT `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `u`.`Name`, `s`.`RootSkipSharedId`, `s`.`UnidirectionalEntityCompositeKeyKey1`, `s`.`UnidirectionalEntityCompositeKeyKey2`, `s`.`UnidirectionalEntityCompositeKeyKey3`, `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s`.`Discriminator` FROM `UnidirectionalEntityCompositeKeys` AS `u` LEFT JOIN ( - SELECT `u0`.`RootSkipSharedId`, `u0`.`UnidirectionalEntityCompositeKeyKey1`, `u0`.`UnidirectionalEntityCompositeKeyKey2`, `u0`.`UnidirectionalEntityCompositeKeyKey3`, `t`.`Id`, `t`.`Name`, `t`.`Number`, `t`.`IsGreen`, `t`.`Discriminator` + SELECT `u0`.`RootSkipSharedId`, `u0`.`UnidirectionalEntityCompositeKeyKey1`, `u0`.`UnidirectionalEntityCompositeKeyKey2`, `u0`.`UnidirectionalEntityCompositeKeyKey3`, `u4`.`Id`, `u4`.`Name`, `u4`.`Number`, `u4`.`IsGreen`, `u4`.`Discriminator` FROM `UnidirectionalEntityCompositeKeyUnidirectionalEntityRoot` AS `u0` INNER JOIN ( SELECT `u1`.`Id`, `u1`.`Name`, CVar(NULL) AS `Number`, CVar(NULL) AS `IsGreen`, 'UnidirectionalEntityRoot' AS `Discriminator` @@ -2474,9 +2471,9 @@ UNION ALL UNION ALL SELECT `u3`.`Id`, `u3`.`Name`, `u3`.`Number`, `u3`.`IsGreen`, 'UnidirectionalEntityLeaf' AS `Discriminator` FROM `UnidirectionalLeaves` AS `u3` - ) AS `t` ON `u0`.`RootSkipSharedId` = `t`.`Id` -) AS `t0` ON `u`.`Key1` = `t0`.`UnidirectionalEntityCompositeKeyKey1` AND `u`.`Key2` = `t0`.`UnidirectionalEntityCompositeKeyKey2` AND `u`.`Key3` = `t0`.`UnidirectionalEntityCompositeKeyKey3` -ORDER BY `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `t0`.`RootSkipSharedId`, `t0`.`UnidirectionalEntityCompositeKeyKey1`, `t0`.`UnidirectionalEntityCompositeKeyKey2`, `t0`.`UnidirectionalEntityCompositeKeyKey3` + ) AS `u4` ON `u0`.`RootSkipSharedId` = `u4`.`Id` +) AS `s` ON `u`.`Key1` = `s`.`UnidirectionalEntityCompositeKeyKey1` AND `u`.`Key2` = `s`.`UnidirectionalEntityCompositeKeyKey2` AND `u`.`Key3` = `s`.`UnidirectionalEntityCompositeKeyKey3` +ORDER BY `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `s`.`RootSkipSharedId`, `s`.`UnidirectionalEntityCompositeKeyKey1`, `s`.`UnidirectionalEntityCompositeKeyKey2`, `s`.`UnidirectionalEntityCompositeKeyKey3` """); } @@ -2485,16 +2482,16 @@ public override async Task Include_skip_navigation_then_reference_unidirectional await base.Include_skip_navigation_then_reference_unidirectional(async); AssertSql( -""" -SELECT `u`.`Id`, `u`.`CollectionInverseId`, `u`.`ExtraId`, `u`.`Name`, `u`.`ReferenceInverseId`, `t`.`OneId`, `t`.`TwoId`, `t`.`UnidirectionalJoinOneToTwoExtraId`, `t`.`Id`, `t`.`Name`, `t`.`Id0`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name0`, `t`.`ReferenceInverseId` + """ +SELECT `u`.`Id`, `u`.`CollectionInverseId`, `u`.`ExtraId`, `u`.`Name`, `u`.`ReferenceInverseId`, `s`.`OneId`, `s`.`TwoId`, `s`.`UnidirectionalJoinOneToTwoExtraId`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId` FROM `UnidirectionalEntityTwos` AS `u` LEFT JOIN ( SELECT `u0`.`OneId`, `u0`.`TwoId`, `u0`.`UnidirectionalJoinOneToTwoExtraId`, `u1`.`Id`, `u1`.`Name`, `u2`.`Id` AS `Id0`, `u2`.`CollectionInverseId`, `u2`.`ExtraId`, `u2`.`Name` AS `Name0`, `u2`.`ReferenceInverseId` FROM (`UnidirectionalJoinOneToTwo` AS `u0` INNER JOIN `UnidirectionalEntityOnes` AS `u1` ON `u0`.`OneId` = `u1`.`Id`) LEFT JOIN `UnidirectionalEntityTwos` AS `u2` ON `u1`.`Id` = `u2`.`ReferenceInverseId` -) AS `t` ON `u`.`Id` = `t`.`TwoId` -ORDER BY `u`.`Id`, `t`.`OneId`, `t`.`TwoId`, `t`.`Id` +) AS `s` ON `u`.`Id` = `s`.`TwoId` +ORDER BY `u`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id` """); } @@ -2503,20 +2500,20 @@ public override async Task Include_skip_navigation_then_include_skip_navigation_ await base.Include_skip_navigation_then_include_skip_navigation_unidirectional(async); AssertSql( -""" -SELECT `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `u`.`Name`, `t0`.`LeafId`, `t0`.`CompositeId1`, `t0`.`CompositeId2`, `t0`.`CompositeId3`, `t0`.`Id`, `t0`.`Name`, `t0`.`Number`, `t0`.`IsGreen`, `t0`.`UnidirectionalEntityBranchId`, `t0`.`UnidirectionalEntityOneId`, `t0`.`Id0`, `t0`.`Name0` + """ +SELECT `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `u`.`Name`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Id`, `s0`.`Name`, `s0`.`Number`, `s0`.`IsGreen`, `s0`.`UnidirectionalEntityBranchId`, `s0`.`UnidirectionalEntityOneId`, `s0`.`Id0`, `s0`.`Name0` FROM `UnidirectionalEntityCompositeKeys` AS `u` LEFT JOIN ( - SELECT `u0`.`LeafId`, `u0`.`CompositeId1`, `u0`.`CompositeId2`, `u0`.`CompositeId3`, `u1`.`Id`, `u1`.`Name`, `u1`.`Number`, `u1`.`IsGreen`, `t`.`UnidirectionalEntityBranchId`, `t`.`UnidirectionalEntityOneId`, `t`.`Id` AS `Id0`, `t`.`Name` AS `Name0` + SELECT `u0`.`LeafId`, `u0`.`CompositeId1`, `u0`.`CompositeId2`, `u0`.`CompositeId3`, `u1`.`Id`, `u1`.`Name`, `u1`.`Number`, `u1`.`IsGreen`, `s`.`UnidirectionalEntityBranchId`, `s`.`UnidirectionalEntityOneId`, `s`.`Id` AS `Id0`, `s`.`Name` AS `Name0` FROM (`UnidirectionalJoinCompositeKeyToLeaf` AS `u0` INNER JOIN `UnidirectionalLeaves` AS `u1` ON `u0`.`LeafId` = `u1`.`Id`) LEFT JOIN ( SELECT `u2`.`UnidirectionalEntityBranchId`, `u2`.`UnidirectionalEntityOneId`, `u3`.`Id`, `u3`.`Name` FROM `UnidirectionalJoinOneToBranch` AS `u2` INNER JOIN `UnidirectionalEntityOnes` AS `u3` ON `u2`.`UnidirectionalEntityOneId` = `u3`.`Id` - ) AS `t` ON `u1`.`Id` = `t`.`UnidirectionalEntityBranchId` -) AS `t0` ON `u`.`Key1` = `t0`.`CompositeId1` AND `u`.`Key2` = `t0`.`CompositeId2` AND `u`.`Key3` = `t0`.`CompositeId3` -ORDER BY `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `t0`.`LeafId`, `t0`.`CompositeId1`, `t0`.`CompositeId2`, `t0`.`CompositeId3`, `t0`.`Id`, `t0`.`UnidirectionalEntityBranchId`, `t0`.`UnidirectionalEntityOneId` + ) AS `s` ON `u1`.`Id` = `s`.`UnidirectionalEntityBranchId` +) AS `s0` ON `u`.`Key1` = `s0`.`CompositeId1` AND `u`.`Key2` = `s0`.`CompositeId2` AND `u`.`Key3` = `s0`.`CompositeId3` +ORDER BY `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Id`, `s0`.`UnidirectionalEntityBranchId`, `s0`.`UnidirectionalEntityOneId` """); } @@ -2525,11 +2522,11 @@ public override async Task Include_skip_navigation_then_include_reference_and_sk await base.Include_skip_navigation_then_include_reference_and_skip_navigation_unidirectional(async); AssertSql( -""" -SELECT `u`.`Id`, `u`.`CollectionInverseId`, `u`.`Name`, `u`.`ReferenceInverseId`, `t0`.`OneId`, `t0`.`ThreeId`, `t0`.`Payload`, `t0`.`Id`, `t0`.`Name`, `t0`.`Id0`, `t0`.`CollectionInverseId`, `t0`.`ExtraId`, `t0`.`Name0`, `t0`.`ReferenceInverseId`, `t0`.`LeftId`, `t0`.`RightId`, `t0`.`Payload0`, `t0`.`Id1`, `t0`.`Name1` + """ +SELECT `u`.`Id`, `u`.`CollectionInverseId`, `u`.`Name`, `u`.`ReferenceInverseId`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Payload`, `s0`.`Id`, `s0`.`Name`, `s0`.`Id0`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name0`, `s0`.`ReferenceInverseId`, `s0`.`LeftId`, `s0`.`RightId`, `s0`.`Payload0`, `s0`.`Id1`, `s0`.`Name1` FROM `UnidirectionalEntityThrees` AS `u` LEFT JOIN ( - SELECT `u0`.`OneId`, `u0`.`ThreeId`, `u0`.`Payload`, `u1`.`Id`, `u1`.`Name`, `u2`.`Id` AS `Id0`, `u2`.`CollectionInverseId`, `u2`.`ExtraId`, `u2`.`Name` AS `Name0`, `u2`.`ReferenceInverseId`, `t`.`LeftId`, `t`.`RightId`, `t`.`Payload` AS `Payload0`, `t`.`Id` AS `Id1`, `t`.`Name` AS `Name1` + SELECT `u0`.`OneId`, `u0`.`ThreeId`, `u0`.`Payload`, `u1`.`Id`, `u1`.`Name`, `u2`.`Id` AS `Id0`, `u2`.`CollectionInverseId`, `u2`.`ExtraId`, `u2`.`Name` AS `Name0`, `u2`.`ReferenceInverseId`, `s`.`LeftId`, `s`.`RightId`, `s`.`Payload` AS `Payload0`, `s`.`Id` AS `Id1`, `s`.`Name` AS `Name1` FROM ((`UnidirectionalJoinOneToThreePayloadFull` AS `u0` INNER JOIN `UnidirectionalEntityOnes` AS `u1` ON `u0`.`OneId` = `u1`.`Id`) LEFT JOIN `UnidirectionalEntityTwos` AS `u2` ON `u1`.`Id` = `u2`.`ReferenceInverseId`) @@ -2537,9 +2534,9 @@ LEFT JOIN ( SELECT `u3`.`LeftId`, `u3`.`RightId`, `u3`.`Payload`, `u4`.`Id`, `u4`.`Name` FROM `UnidirectionalJoinOneSelfPayload` AS `u3` INNER JOIN `UnidirectionalEntityOnes` AS `u4` ON `u3`.`RightId` = `u4`.`Id` - ) AS `t` ON `u1`.`Id` = `t`.`LeftId` -) AS `t0` ON `u`.`Id` = `t0`.`ThreeId` -ORDER BY `u`.`Id`, `t0`.`OneId`, `t0`.`ThreeId`, `t0`.`Id`, `t0`.`Id0`, `t0`.`LeftId`, `t0`.`RightId` + ) AS `s` ON `u1`.`Id` = `s`.`LeftId` +) AS `s0` ON `u`.`Id` = `s0`.`ThreeId` +ORDER BY `u`.`Id`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Id`, `s0`.`Id0`, `s0`.`LeftId`, `s0`.`RightId` """); } @@ -2548,16 +2545,16 @@ public override async Task Include_skip_navigation_and_reference_unidirectional( await base.Include_skip_navigation_and_reference_unidirectional(async); AssertSql( -""" -SELECT `u`.`Id`, `u`.`CollectionInverseId`, `u`.`ExtraId`, `u`.`Name`, `u`.`ReferenceInverseId`, `u0`.`Id`, `t`.`TwoSkipSharedId`, `t`.`UnidirectionalEntityOneId`, `t`.`Id`, `t`.`Name`, `u0`.`CollectionInverseId`, `u0`.`Name`, `u0`.`ReferenceInverseId` + """ +SELECT `u`.`Id`, `u`.`CollectionInverseId`, `u`.`ExtraId`, `u`.`Name`, `u`.`ReferenceInverseId`, `u0`.`Id`, `s`.`TwoSkipSharedId`, `s`.`UnidirectionalEntityOneId`, `s`.`Id`, `s`.`Name`, `u0`.`CollectionInverseId`, `u0`.`Name`, `u0`.`ReferenceInverseId` FROM (`UnidirectionalEntityTwos` AS `u` LEFT JOIN `UnidirectionalEntityThrees` AS `u0` ON `u`.`Id` = `u0`.`ReferenceInverseId`) LEFT JOIN ( SELECT `u1`.`TwoSkipSharedId`, `u1`.`UnidirectionalEntityOneId`, `u2`.`Id`, `u2`.`Name` FROM `UnidirectionalEntityOneUnidirectionalEntityTwo` AS `u1` INNER JOIN `UnidirectionalEntityOnes` AS `u2` ON `u1`.`UnidirectionalEntityOneId` = `u2`.`Id` -) AS `t` ON `u`.`Id` = `t`.`TwoSkipSharedId` -ORDER BY `u`.`Id`, `u0`.`Id`, `t`.`TwoSkipSharedId`, `t`.`UnidirectionalEntityOneId` +) AS `s` ON `u`.`Id` = `s`.`TwoSkipSharedId` +ORDER BY `u`.`Id`, `u0`.`Id`, `s`.`TwoSkipSharedId`, `s`.`UnidirectionalEntityOneId` """); } @@ -2566,20 +2563,20 @@ public override async Task Include_skip_navigation_then_include_inverse_works_fo await base.Include_skip_navigation_then_include_inverse_works_for_tracking_query_unidirectional(async); AssertSql( -""" -SELECT `u`.`Id`, `u`.`CollectionInverseId`, `u`.`Name`, `u`.`ReferenceInverseId`, `t0`.`OneId`, `t0`.`ThreeId`, `t0`.`Payload`, `t0`.`Id`, `t0`.`Name`, `t0`.`OneId0`, `t0`.`ThreeId0`, `t0`.`Payload0`, `t0`.`Id0`, `t0`.`CollectionInverseId`, `t0`.`Name0`, `t0`.`ReferenceInverseId` + """ +SELECT `u`.`Id`, `u`.`CollectionInverseId`, `u`.`Name`, `u`.`ReferenceInverseId`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Payload`, `s0`.`Id`, `s0`.`Name`, `s0`.`OneId0`, `s0`.`ThreeId0`, `s0`.`Payload0`, `s0`.`Id0`, `s0`.`CollectionInverseId`, `s0`.`Name0`, `s0`.`ReferenceInverseId` FROM `UnidirectionalEntityThrees` AS `u` LEFT JOIN ( - SELECT `u0`.`OneId`, `u0`.`ThreeId`, `u0`.`Payload`, `u1`.`Id`, `u1`.`Name`, `t`.`OneId` AS `OneId0`, `t`.`ThreeId` AS `ThreeId0`, `t`.`Payload` AS `Payload0`, `t`.`Id` AS `Id0`, `t`.`CollectionInverseId`, `t`.`Name` AS `Name0`, `t`.`ReferenceInverseId` + SELECT `u0`.`OneId`, `u0`.`ThreeId`, `u0`.`Payload`, `u1`.`Id`, `u1`.`Name`, `s`.`OneId` AS `OneId0`, `s`.`ThreeId` AS `ThreeId0`, `s`.`Payload` AS `Payload0`, `s`.`Id` AS `Id0`, `s`.`CollectionInverseId`, `s`.`Name` AS `Name0`, `s`.`ReferenceInverseId` FROM (`UnidirectionalJoinOneToThreePayloadFullShared` AS `u0` INNER JOIN `UnidirectionalEntityOnes` AS `u1` ON `u0`.`OneId` = `u1`.`Id`) LEFT JOIN ( SELECT `u2`.`OneId`, `u2`.`ThreeId`, `u2`.`Payload`, `u3`.`Id`, `u3`.`CollectionInverseId`, `u3`.`Name`, `u3`.`ReferenceInverseId` FROM `UnidirectionalJoinOneToThreePayloadFullShared` AS `u2` INNER JOIN `UnidirectionalEntityThrees` AS `u3` ON `u2`.`ThreeId` = `u3`.`Id` - ) AS `t` ON `u1`.`Id` = `t`.`OneId` -) AS `t0` ON `u`.`Id` = `t0`.`ThreeId` -ORDER BY `u`.`Id`, `t0`.`OneId`, `t0`.`ThreeId`, `t0`.`Id`, `t0`.`OneId0`, `t0`.`ThreeId0` + ) AS `s` ON `u1`.`Id` = `s`.`OneId` +) AS `s0` ON `u`.`Id` = `s0`.`ThreeId` +ORDER BY `u`.`Id`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Id`, `s0`.`OneId0`, `s0`.`ThreeId0` """); } @@ -2588,16 +2585,16 @@ public override async Task Filtered_include_skip_navigation_where_unidirectional await base.Filtered_include_skip_navigation_where_unidirectional(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `t`.`OneId`, `t`.`ThreeId`, `t`.`Payload`, `t`.`Id`, `t`.`Name` + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Payload`, `s`.`Id`, `s`.`Name` FROM `EntityThrees` AS `e` LEFT JOIN ( SELECT `j`.`OneId`, `j`.`ThreeId`, `j`.`Payload`, `e0`.`Id`, `e0`.`Name` FROM `JoinOneToThreePayloadFullShared` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` WHERE `e0`.`Id` < 10 -) AS `t` ON `e`.`Id` = `t`.`ThreeId` -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`ThreeId` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId` """); } @@ -2606,15 +2603,15 @@ public override async Task Filtered_include_skip_navigation_order_by_unidirectio await base.Filtered_include_skip_navigation_order_by_unidirectional(async); AssertSql( -""" -SELECT `u`.`Id`, `u`.`CollectionInverseId`, `u`.`Name`, `u`.`ReferenceInverseId`, `t`.`ThreeId`, `t`.`TwoId`, `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name`, `t`.`ReferenceInverseId` + """ +SELECT `u`.`Id`, `u`.`CollectionInverseId`, `u`.`Name`, `u`.`ReferenceInverseId`, `s`.`ThreeId`, `s`.`TwoId`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId` FROM `UnidirectionalEntityThrees` AS `u` LEFT JOIN ( SELECT `u0`.`ThreeId`, `u0`.`TwoId`, `u1`.`Id`, `u1`.`CollectionInverseId`, `u1`.`ExtraId`, `u1`.`Name`, `u1`.`ReferenceInverseId` FROM `UnidirectionalJoinTwoToThree` AS `u0` INNER JOIN `UnidirectionalEntityTwos` AS `u1` ON `u0`.`TwoId` = `u1`.`Id` -) AS `t` ON `u`.`Id` = `t`.`ThreeId` -ORDER BY `u`.`Id`, `t`.`Id`, `t`.`ThreeId` +) AS `s` ON `u`.`Id` = `s`.`ThreeId` +ORDER BY `u`.`Id`, `s`.`Id`, `s`.`ThreeId` """); } @@ -2686,21 +2683,21 @@ public override async Task Filtered_include_skip_navigation_where_then_include_s await base.Filtered_include_skip_navigation_where_then_include_skip_navigation_unidirectional(async); AssertSql( -""" -SELECT `u`.`Id`, `u`.`Name`, `u`.`Number`, `u`.`IsGreen`, `t0`.`LeafId`, `t0`.`CompositeId1`, `t0`.`CompositeId2`, `t0`.`CompositeId3`, `t0`.`Key1`, `t0`.`Key2`, `t0`.`Key3`, `t0`.`Name`, `t0`.`TwoSkipSharedId`, `t0`.`UnidirectionalEntityCompositeKeyKey1`, `t0`.`UnidirectionalEntityCompositeKeyKey2`, `t0`.`UnidirectionalEntityCompositeKeyKey3`, `t0`.`Id`, `t0`.`CollectionInverseId`, `t0`.`ExtraId`, `t0`.`Name0`, `t0`.`ReferenceInverseId` + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`Number`, `u`.`IsGreen`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Key1`, `s0`.`Key2`, `s0`.`Key3`, `s0`.`Name`, `s0`.`TwoSkipSharedId`, `s0`.`UnidirectionalEntityCompositeKeyKey1`, `s0`.`UnidirectionalEntityCompositeKeyKey2`, `s0`.`UnidirectionalEntityCompositeKeyKey3`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name0`, `s0`.`ReferenceInverseId` FROM `UnidirectionalLeaves` AS `u` LEFT JOIN ( - SELECT `u0`.`LeafId`, `u0`.`CompositeId1`, `u0`.`CompositeId2`, `u0`.`CompositeId3`, `u1`.`Key1`, `u1`.`Key2`, `u1`.`Key3`, `u1`.`Name`, `t`.`TwoSkipSharedId`, `t`.`UnidirectionalEntityCompositeKeyKey1`, `t`.`UnidirectionalEntityCompositeKeyKey2`, `t`.`UnidirectionalEntityCompositeKeyKey3`, `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name` AS `Name0`, `t`.`ReferenceInverseId` + SELECT `u0`.`LeafId`, `u0`.`CompositeId1`, `u0`.`CompositeId2`, `u0`.`CompositeId3`, `u1`.`Key1`, `u1`.`Key2`, `u1`.`Key3`, `u1`.`Name`, `s`.`TwoSkipSharedId`, `s`.`UnidirectionalEntityCompositeKeyKey1`, `s`.`UnidirectionalEntityCompositeKeyKey2`, `s`.`UnidirectionalEntityCompositeKeyKey3`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name` AS `Name0`, `s`.`ReferenceInverseId` FROM (`UnidirectionalJoinCompositeKeyToLeaf` AS `u0` INNER JOIN `UnidirectionalEntityCompositeKeys` AS `u1` ON `u0`.`CompositeId1` = `u1`.`Key1` AND `u0`.`CompositeId2` = `u1`.`Key2` AND `u0`.`CompositeId3` = `u1`.`Key3`) LEFT JOIN ( SELECT `u2`.`TwoSkipSharedId`, `u2`.`UnidirectionalEntityCompositeKeyKey1`, `u2`.`UnidirectionalEntityCompositeKeyKey2`, `u2`.`UnidirectionalEntityCompositeKeyKey3`, `u3`.`Id`, `u3`.`CollectionInverseId`, `u3`.`ExtraId`, `u3`.`Name`, `u3`.`ReferenceInverseId` FROM `UnidirectionalEntityCompositeKeyUnidirectionalEntityTwo` AS `u2` INNER JOIN `UnidirectionalEntityTwos` AS `u3` ON `u2`.`TwoSkipSharedId` = `u3`.`Id` - ) AS `t` ON `u1`.`Key1` = `t`.`UnidirectionalEntityCompositeKeyKey1` AND `u1`.`Key2` = `t`.`UnidirectionalEntityCompositeKeyKey2` AND `u1`.`Key3` = `t`.`UnidirectionalEntityCompositeKeyKey3` + ) AS `s` ON `u1`.`Key1` = `s`.`UnidirectionalEntityCompositeKeyKey1` AND `u1`.`Key2` = `s`.`UnidirectionalEntityCompositeKeyKey2` AND `u1`.`Key3` = `s`.`UnidirectionalEntityCompositeKeyKey3` WHERE `u1`.`Key1` < 5 -) AS `t0` ON `u`.`Id` = `t0`.`LeafId` -ORDER BY `u`.`Id`, `t0`.`LeafId`, `t0`.`CompositeId1`, `t0`.`CompositeId2`, `t0`.`CompositeId3`, `t0`.`Key1`, `t0`.`Key2`, `t0`.`Key3`, `t0`.`TwoSkipSharedId`, `t0`.`UnidirectionalEntityCompositeKeyKey1`, `t0`.`UnidirectionalEntityCompositeKeyKey2`, `t0`.`UnidirectionalEntityCompositeKeyKey3` +) AS `s0` ON `u`.`Id` = `s0`.`LeafId` +ORDER BY `u`.`Id`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Key1`, `s0`.`Key2`, `s0`.`Key3`, `s0`.`TwoSkipSharedId`, `s0`.`UnidirectionalEntityCompositeKeyKey1`, `s0`.`UnidirectionalEntityCompositeKeyKey2`, `s0`.`UnidirectionalEntityCompositeKeyKey3` """); } @@ -2709,8 +2706,8 @@ public override async Task Filter_include_on_skip_navigation_combined_unidirecti await base.Filter_include_on_skip_navigation_combined_unidirectional(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `t`.`OneId`, `t`.`TwoId`, `t`.`JoinOneToTwoExtraId`, `t`.`Id`, `t`.`Name`, `t`.`Id0`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name0`, `t`.`ReferenceInverseId`, `t`.`Id1`, `t`.`CollectionInverseId0`, `t`.`ExtraId0`, `t`.`Name1`, `t`.`ReferenceInverseId0` + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`OneId`, `s`.`TwoId`, `s`.`JoinOneToTwoExtraId`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `s`.`Id1`, `s`.`CollectionInverseId0`, `s`.`ExtraId0`, `s`.`Name1`, `s`.`ReferenceInverseId0` FROM `EntityTwos` AS `e` LEFT JOIN ( SELECT `j`.`OneId`, `j`.`TwoId`, `j`.`JoinOneToTwoExtraId`, `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `e2`.`Id` AS `Id1`, `e2`.`CollectionInverseId` AS `CollectionInverseId0`, `e2`.`ExtraId` AS `ExtraId0`, `e2`.`Name` AS `Name1`, `e2`.`ReferenceInverseId` AS `ReferenceInverseId0` @@ -2719,8 +2716,8 @@ LEFT JOIN ( LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId`) LEFT JOIN `EntityTwos` AS `e2` ON `e0`.`Id` = `e2`.`CollectionInverseId` WHERE `e0`.`Id` < 10 -) AS `t` ON `e`.`Id` = `t`.`TwoId` -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`TwoId`, `t`.`Id`, `t`.`Id0` +) AS `s` ON `e`.`Id` = `s`.`TwoId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s`.`Id0` """); } @@ -2758,14 +2755,14 @@ public override async Task Select_many_over_skip_navigation_where_non_equality_u await base.Select_many_over_skip_navigation_where_non_equality_unidirectional(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name`, `t`.`ReferenceInverseId` + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId` FROM `UnidirectionalEntityOnes` AS `u` LEFT JOIN ( SELECT `u1`.`Id`, `u1`.`CollectionInverseId`, `u1`.`ExtraId`, `u1`.`Name`, `u1`.`ReferenceInverseId`, `u0`.`OneId` FROM `UnidirectionalJoinOneToTwo` AS `u0` INNER JOIN `UnidirectionalEntityTwos` AS `u1` ON `u0`.`TwoId` = `u1`.`Id` -) AS `t` ON `u`.`Id` = `t`.`OneId` AND `u`.`Id` <> `t`.`Id` +) AS `s` ON `u`.`Id` = `s`.`OneId` AND `u`.`Id` <> `s`.`Id` """); } @@ -2825,14 +2822,14 @@ public override async Task GetType_in_hierarchy_in_querying_base_type_unidirecti AssertSql( """ -SELECT `t`.`Id`, `t`.`Name`, `t`.`Number`, `t`.`IsGreen`, `t`.`Discriminator` +SELECT `u1`.`Id`, `u1`.`Name`, `u1`.`Number`, `u1`.`IsGreen`, `u1`.`Discriminator` FROM ( SELECT `u`.`Id`, `u`.`Name`, `u`.`Number`, CVar(NULL) AS `IsGreen`, 'UnidirectionalEntityBranch' AS `Discriminator` FROM `UnidirectionalBranches` AS `u` UNION ALL SELECT `u0`.`Id`, `u0`.`Name`, `u0`.`Number`, `u0`.`IsGreen`, 'UnidirectionalEntityLeaf' AS `Discriminator` FROM `UnidirectionalLeaves` AS `u0` -) AS `t` +) AS `u1` WHERE 0 = 1 """); } diff --git a/test/EFCore.Jet.FunctionalTests/Query/TPCRelationshipsQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/TPCRelationshipsQueryJetTest.cs index 71961e84..fef3e1da 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/TPCRelationshipsQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/TPCRelationshipsQueryJetTest.cs @@ -31,31 +31,31 @@ public override void Changes_in_derived_related_entities_are_detected() base.Changes_in_derived_related_entities_are_detected(); AssertSql( -""" -SELECT `t0`.`Id`, `t0`.`Name`, `t0`.`BaseId`, `t0`.`Discriminator`, `t0`.`BaseInheritanceRelationshipEntityId`, `t0`.`Id1`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `t0`.`Id0`, `t0`.`Name0`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `t0`.`OwnedReferenceOnDerived_Id`, `t0`.`OwnedReferenceOnDerived_Name`, `t1`.`Id`, `t1`.`BaseParentId`, `t1`.`Name`, `t1`.`DerivedProperty`, `t1`.`Discriminator` + """ +SELECT `s`.`Id`, `s`.`Name`, `s`.`BaseId`, `s`.`Discriminator`, `s`.`BaseInheritanceRelationshipEntityId`, `s`.`Id1`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `s`.`Id0`, `s`.`Name0`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `s`.`OwnedReferenceOnDerived_Id`, `s`.`OwnedReferenceOnDerived_Name`, `u0`.`Id`, `u0`.`BaseParentId`, `u0`.`Name`, `u0`.`DerivedProperty`, `u0`.`Discriminator` FROM ((( - SELECT TOP 2 `t`.`Id`, `t`.`Name`, `t`.`BaseId`, `t`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `o`.`Id` AS `Id0`, `o`.`Name` AS `Name0`, `d`.`Id` AS `Id1`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` + SELECT TOP 2 `u`.`Id`, `u`.`Name`, `u`.`BaseId`, `u`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `o`.`Id` AS `Id0`, `o`.`Name` AS `Name0`, `d0`.`Id` AS `Id1`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` FROM (( - SELECT `b0`.`Id`, `b0`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` - FROM `BaseEntities` AS `b0` + SELECT `b`.`Id`, `b`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` + FROM `BaseEntities` AS `b` UNION ALL - SELECT `d2`.`Id`, `d2`.`Name`, `d2`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` - FROM `DerivedEntities` AS `d2` - ) AS `t` - LEFT JOIN `OwnedReferences` AS `o` ON `t`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) - LEFT JOIN `DerivedEntities` AS `d` ON `t`.`Id` = `d`.`Id` - WHERE `t`.`Name` = 'Derived1(4)' -) AS `t0` -LEFT JOIN `OwnedCollections` AS `o0` ON `t0`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `t0`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId`) + SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d` + ) AS `u` + LEFT JOIN `OwnedReferences` AS `o` ON `u`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) + LEFT JOIN `DerivedEntities` AS `d0` ON `u`.`Id` = `d0`.`Id` + WHERE `u`.`Name` = 'Derived1(4)' +) AS `s` +LEFT JOIN `OwnedCollections` AS `o0` ON `s`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `s`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId`) LEFT JOIN ( - SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, CVar(NULL) AS `DerivedProperty`, 'BaseCollectionOnBase' AS `Discriminator` - FROM `BaseCollectionsOnBase` AS `b` + SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, CVar(NULL) AS `DerivedProperty`, 'BaseCollectionOnBase' AS `Discriminator` + FROM `BaseCollectionsOnBase` AS `b0` UNION ALL - SELECT `d1`.`Id`, `d1`.`BaseParentId`, `d1`.`Name`, `d1`.`DerivedProperty`, 'DerivedCollectionOnBase' AS `Discriminator` - FROM `DerivedCollectionsOnBase` AS `d1` -) AS `t1` ON `t0`.`Id` = `t1`.`BaseParentId` -ORDER BY `t0`.`Id`, `t0`.`BaseInheritanceRelationshipEntityId`, `t0`.`Id1`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id` + SELECT `d2`.`Id`, `d2`.`BaseParentId`, `d2`.`Name`, `d2`.`DerivedProperty`, 'DerivedCollectionOnBase' AS `Discriminator` + FROM `DerivedCollectionsOnBase` AS `d2` +) AS `u0` ON `s`.`Id` = `u0`.`BaseParentId` +ORDER BY `s`.`Id`, `s`.`BaseInheritanceRelationshipEntityId`, `s`.`Id1`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id` """); } @@ -65,20 +65,20 @@ public override async Task Include_collection_without_inheritance(bool async) AssertSql( """ -SELECT `t`.`Id`, `t`.`Name`, `t`.`BaseId`, `t`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `c`.`Id`, `c`.`Name`, `c`.`ParentId` +SELECT `u`.`Id`, `u`.`Name`, `u`.`BaseId`, `u`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name`, `c`.`Id`, `c`.`Name`, `c`.`ParentId` FROM ((((( SELECT `b`.`Id`, `b`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` FROM `BaseEntities` AS `b` UNION ALL - SELECT `d1`.`Id`, `d1`.`Name`, `d1`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` - FROM `DerivedEntities` AS `d1` -) AS `t` -LEFT JOIN `OwnedReferences` AS `o` ON `t`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`Id` = `d`.`Id`) -LEFT JOIN `OwnedCollections` AS `o0` ON `t`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `t`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId`) -LEFT JOIN `CollectionsOnBase` AS `c` ON `t`.`Id` = `c`.`ParentId` -ORDER BY `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id` + SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o` ON `u`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d0` ON `u`.`Id` = `d0`.`Id`) +LEFT JOIN `OwnedCollections` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `u`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId`) +LEFT JOIN `CollectionsOnBase` AS `c` ON `u`.`Id` = `c`.`ParentId` +ORDER BY `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id` """); } @@ -88,20 +88,20 @@ public override async Task Include_collection_without_inheritance_reverse(bool a AssertSql( """ -SELECT `c`.`Id`, `c`.`Name`, `c`.`ParentId`, `t`.`Id`, `t`.`Name`, `t`.`BaseId`, `t`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` +SELECT `c`.`Id`, `c`.`Name`, `c`.`ParentId`, `u`.`Id`, `u`.`Name`, `u`.`BaseId`, `u`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` FROM ((((`CollectionsOnBase` AS `c` LEFT JOIN ( SELECT `b`.`Id`, `b`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` FROM `BaseEntities` AS `b` UNION ALL - SELECT `d1`.`Id`, `d1`.`Name`, `d1`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` - FROM `DerivedEntities` AS `d1` -) AS `t` ON `c`.`ParentId` = `t`.`Id`) -LEFT JOIN `OwnedReferences` AS `o` ON `t`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`Id` = `d`.`Id`) -LEFT JOIN `OwnedCollections` AS `o0` ON `t`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `t`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` -ORDER BY `c`.`Id`, `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId` + SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d` +) AS `u` ON `c`.`ParentId` = `u`.`Id`) +LEFT JOIN `OwnedReferences` AS `o` ON `u`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d0` ON `u`.`Id` = `d0`.`Id`) +LEFT JOIN `OwnedCollections` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `u`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `c`.`Id`, `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` """); } @@ -111,21 +111,21 @@ public override async Task Include_collection_without_inheritance_with_filter(bo AssertSql( """ -SELECT `t`.`Id`, `t`.`Name`, `t`.`BaseId`, `t`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `c`.`Id`, `c`.`Name`, `c`.`ParentId` +SELECT `u`.`Id`, `u`.`Name`, `u`.`BaseId`, `u`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name`, `c`.`Id`, `c`.`Name`, `c`.`ParentId` FROM ((((( SELECT `b`.`Id`, `b`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` FROM `BaseEntities` AS `b` UNION ALL - SELECT `d1`.`Id`, `d1`.`Name`, `d1`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` - FROM `DerivedEntities` AS `d1` -) AS `t` -LEFT JOIN `OwnedReferences` AS `o` ON `t`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`Id` = `d`.`Id`) -LEFT JOIN `OwnedCollections` AS `o0` ON `t`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `t`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId`) -LEFT JOIN `CollectionsOnBase` AS `c` ON `t`.`Id` = `c`.`ParentId` -WHERE `t`.`Name` <> 'Bar' OR `t`.`Name` IS NULL -ORDER BY `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id` + SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o` ON `u`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d0` ON `u`.`Id` = `d0`.`Id`) +LEFT JOIN `OwnedCollections` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `u`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId`) +LEFT JOIN `CollectionsOnBase` AS `c` ON `u`.`Id` = `c`.`ParentId` +WHERE `u`.`Name` <> 'Bar' OR `u`.`Name` IS NULL +ORDER BY `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id` """); } @@ -135,21 +135,21 @@ public override async Task Include_collection_without_inheritance_with_filter_re AssertSql( """ -SELECT `c`.`Id`, `c`.`Name`, `c`.`ParentId`, `t`.`Id`, `t`.`Name`, `t`.`BaseId`, `t`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` +SELECT `c`.`Id`, `c`.`Name`, `c`.`ParentId`, `u`.`Id`, `u`.`Name`, `u`.`BaseId`, `u`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` FROM ((((`CollectionsOnBase` AS `c` LEFT JOIN ( SELECT `b`.`Id`, `b`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` FROM `BaseEntities` AS `b` UNION ALL - SELECT `d1`.`Id`, `d1`.`Name`, `d1`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` - FROM `DerivedEntities` AS `d1` -) AS `t` ON `c`.`ParentId` = `t`.`Id`) -LEFT JOIN `OwnedReferences` AS `o` ON `t`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`Id` = `d`.`Id`) -LEFT JOIN `OwnedCollections` AS `o0` ON `t`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `t`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` + SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d` +) AS `u` ON `c`.`ParentId` = `u`.`Id`) +LEFT JOIN `OwnedReferences` AS `o` ON `u`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d0` ON `u`.`Id` = `d0`.`Id`) +LEFT JOIN `OwnedCollections` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `u`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` WHERE `c`.`Name` <> 'Bar' OR `c`.`Name` IS NULL -ORDER BY `c`.`Id`, `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `c`.`Id`, `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` """); } @@ -159,26 +159,26 @@ public override async Task Include_collection_with_inheritance(bool async) AssertSql( """ -SELECT `t`.`Id`, `t`.`Name`, `t`.`BaseId`, `t`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `t0`.`Id`, `t0`.`BaseParentId`, `t0`.`Name`, `t0`.`DerivedProperty`, `t0`.`Discriminator` +SELECT `u`.`Id`, `u`.`Name`, `u`.`BaseId`, `u`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name`, `u0`.`Id`, `u0`.`BaseParentId`, `u0`.`Name`, `u0`.`DerivedProperty`, `u0`.`Discriminator` FROM ((((( SELECT `b`.`Id`, `b`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` FROM `BaseEntities` AS `b` UNION ALL - SELECT `d1`.`Id`, `d1`.`Name`, `d1`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` - FROM `DerivedEntities` AS `d1` -) AS `t` -LEFT JOIN `OwnedReferences` AS `o` ON `t`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`Id` = `d`.`Id`) -LEFT JOIN `OwnedCollections` AS `o0` ON `t`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `t`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId`) + SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o` ON `u`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d0` ON `u`.`Id` = `d0`.`Id`) +LEFT JOIN `OwnedCollections` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `u`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId`) LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, CVar(NULL) AS `DerivedProperty`, 'BaseCollectionOnBase' AS `Discriminator` FROM `BaseCollectionsOnBase` AS `b0` UNION ALL SELECT `d2`.`Id`, `d2`.`BaseParentId`, `d2`.`Name`, `d2`.`DerivedProperty`, 'DerivedCollectionOnBase' AS `Discriminator` FROM `DerivedCollectionsOnBase` AS `d2` -) AS `t0` ON `t`.`Id` = `t0`.`BaseParentId` -ORDER BY `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id` +) AS `u0` ON `u`.`Id` = `u0`.`BaseParentId` +ORDER BY `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id` """); } @@ -188,7 +188,7 @@ public override async Task Include_collection_with_inheritance_on_derived1(bool AssertSql( """ -SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `t`.`Id`, `t`.`BaseParentId`, `t`.`Name`, `t`.`DerivedProperty`, `t`.`Discriminator` +SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `u`.`Id`, `u`.`BaseParentId`, `u`.`Name`, `u`.`DerivedProperty`, `u`.`Discriminator` FROM (((`DerivedEntities` AS `d` LEFT JOIN `OwnedReferences` AS `o` ON `d`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) LEFT JOIN `OwnedCollections` AS `o0` ON `d`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) @@ -199,7 +199,7 @@ LEFT JOIN ( UNION ALL SELECT `d1`.`Id`, `d1`.`BaseParentId`, `d1`.`Name`, `d1`.`DerivedProperty`, 'DerivedCollectionOnBase' AS `Discriminator` FROM `DerivedCollectionsOnBase` AS `d1` -) AS `t` ON `d`.`Id` = `t`.`BaseParentId` +) AS `u` ON `d`.`Id` = `u`.`BaseParentId` ORDER BY `d`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id` """); } @@ -210,7 +210,7 @@ public override async Task Include_collection_with_inheritance_on_derived2(bool AssertSql( """ -SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `t`.`Id`, `t`.`Name`, `t`.`ParentId`, `t`.`DerivedInheritanceRelationshipEntityId`, `t`.`Discriminator` +SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `u`.`Id`, `u`.`Name`, `u`.`ParentId`, `u`.`DerivedInheritanceRelationshipEntityId`, `u`.`Discriminator` FROM (((`DerivedEntities` AS `d` LEFT JOIN `OwnedReferences` AS `o` ON `d`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) LEFT JOIN `OwnedCollections` AS `o0` ON `d`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) @@ -221,7 +221,7 @@ LEFT JOIN ( UNION ALL SELECT `d1`.`Id`, `d1`.`Name`, `d1`.`ParentId`, `d1`.`DerivedInheritanceRelationshipEntityId`, 'DerivedCollectionOnDerived' AS `Discriminator` FROM `DerivedCollectionsOnDerived` AS `d1` -) AS `t` ON `d`.`Id` = `t`.`ParentId` +) AS `u` ON `d`.`Id` = `u`.`ParentId` ORDER BY `d`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id` """); } @@ -248,19 +248,19 @@ public override async Task Include_collection_with_inheritance_on_derived_revers AssertSql( """ -SELECT `t`.`Id`, `t`.`Name`, `t`.`ParentId`, `t`.`DerivedInheritanceRelationshipEntityId`, `t`.`Discriminator`, `d`.`Id`, `d`.`Name`, `d`.`BaseId`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` +SELECT `u`.`Id`, `u`.`Name`, `u`.`ParentId`, `u`.`DerivedInheritanceRelationshipEntityId`, `u`.`Discriminator`, `d0`.`Id`, `d0`.`Name`, `d0`.`BaseId`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` FROM (((( SELECT `b`.`Id`, `b`.`Name`, `b`.`ParentId`, CVar(NULL) AS `DerivedInheritanceRelationshipEntityId`, 'BaseCollectionOnDerived' AS `Discriminator` FROM `BaseCollectionsOnDerived` AS `b` UNION ALL - SELECT `d1`.`Id`, `d1`.`Name`, `d1`.`ParentId`, `d1`.`DerivedInheritanceRelationshipEntityId`, 'DerivedCollectionOnDerived' AS `Discriminator` - FROM `DerivedCollectionsOnDerived` AS `d1` -) AS `t` -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`ParentId` = `d`.`Id`) -LEFT JOIN `OwnedReferences` AS `o` ON `d`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `OwnedCollections` AS `o0` ON `d`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `d`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` -ORDER BY `t`.`Id`, `d`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId` + SELECT `d`.`Id`, `d`.`Name`, `d`.`ParentId`, `d`.`DerivedInheritanceRelationshipEntityId`, 'DerivedCollectionOnDerived' AS `Discriminator` + FROM `DerivedCollectionsOnDerived` AS `d` +) AS `u` +LEFT JOIN `DerivedEntities` AS `d0` ON `u`.`ParentId` = `d0`.`Id`) +LEFT JOIN `OwnedReferences` AS `o` ON `d0`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `OwnedCollections` AS `o0` ON `d0`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `d0`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `u`.`Id`, `d0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` """); } @@ -270,26 +270,26 @@ public override async Task Include_collection_with_inheritance_reverse(bool asyn AssertSql( """ -SELECT `t`.`Id`, `t`.`BaseParentId`, `t`.`Name`, `t`.`DerivedProperty`, `t`.`Discriminator`, `t0`.`Id`, `t0`.`Name`, `t0`.`BaseId`, `t0`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` +SELECT `u`.`Id`, `u`.`BaseParentId`, `u`.`Name`, `u`.`DerivedProperty`, `u`.`Discriminator`, `u0`.`Id`, `u0`.`Name`, `u0`.`BaseId`, `u0`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `d1`.`OwnedReferenceOnDerived_Id`, `d1`.`OwnedReferenceOnDerived_Name` FROM ((((( SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, CVar(NULL) AS `DerivedProperty`, 'BaseCollectionOnBase' AS `Discriminator` FROM `BaseCollectionsOnBase` AS `b` UNION ALL - SELECT `d1`.`Id`, `d1`.`BaseParentId`, `d1`.`Name`, `d1`.`DerivedProperty`, 'DerivedCollectionOnBase' AS `Discriminator` - FROM `DerivedCollectionsOnBase` AS `d1` -) AS `t` + SELECT `d`.`Id`, `d`.`BaseParentId`, `d`.`Name`, `d`.`DerivedProperty`, 'DerivedCollectionOnBase' AS `Discriminator` + FROM `DerivedCollectionsOnBase` AS `d` +) AS `u` LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` FROM `BaseEntities` AS `b0` UNION ALL - SELECT `d2`.`Id`, `d2`.`Name`, `d2`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` - FROM `DerivedEntities` AS `d2` -) AS `t0` ON `t`.`BaseParentId` = `t0`.`Id`) -LEFT JOIN `OwnedReferences` AS `o` ON `t0`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t0`.`Id` = `d`.`Id`) -LEFT JOIN `OwnedCollections` AS `o0` ON `t0`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `t0`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` -ORDER BY `t`.`Id`, `t0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId` + SELECT `d0`.`Id`, `d0`.`Name`, `d0`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d0` +) AS `u0` ON `u`.`BaseParentId` = `u0`.`Id`) +LEFT JOIN `OwnedReferences` AS `o` ON `u0`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u0`.`Id` = `d1`.`Id`) +LEFT JOIN `OwnedCollections` AS `o0` ON `u0`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `u0`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `u`.`Id`, `u0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d2`.`DerivedInheritanceRelationshipEntityId` """); } @@ -299,27 +299,27 @@ public override async Task Include_collection_with_inheritance_with_filter(bool AssertSql( """ -SELECT `t`.`Id`, `t`.`Name`, `t`.`BaseId`, `t`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `t0`.`Id`, `t0`.`BaseParentId`, `t0`.`Name`, `t0`.`DerivedProperty`, `t0`.`Discriminator` +SELECT `u`.`Id`, `u`.`Name`, `u`.`BaseId`, `u`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name`, `u0`.`Id`, `u0`.`BaseParentId`, `u0`.`Name`, `u0`.`DerivedProperty`, `u0`.`Discriminator` FROM ((((( SELECT `b`.`Id`, `b`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` FROM `BaseEntities` AS `b` UNION ALL - SELECT `d1`.`Id`, `d1`.`Name`, `d1`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` - FROM `DerivedEntities` AS `d1` -) AS `t` -LEFT JOIN `OwnedReferences` AS `o` ON `t`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`Id` = `d`.`Id`) -LEFT JOIN `OwnedCollections` AS `o0` ON `t`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `t`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId`) + SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o` ON `u`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d0` ON `u`.`Id` = `d0`.`Id`) +LEFT JOIN `OwnedCollections` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `u`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId`) LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, CVar(NULL) AS `DerivedProperty`, 'BaseCollectionOnBase' AS `Discriminator` FROM `BaseCollectionsOnBase` AS `b0` UNION ALL SELECT `d2`.`Id`, `d2`.`BaseParentId`, `d2`.`Name`, `d2`.`DerivedProperty`, 'DerivedCollectionOnBase' AS `Discriminator` FROM `DerivedCollectionsOnBase` AS `d2` -) AS `t0` ON `t`.`Id` = `t0`.`BaseParentId` -WHERE `t`.`Name` <> 'Bar' OR `t`.`Name` IS NULL -ORDER BY `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id` +) AS `u0` ON `u`.`Id` = `u0`.`BaseParentId` +WHERE `u`.`Name` <> 'Bar' OR `u`.`Name` IS NULL +ORDER BY `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id` """); } @@ -329,27 +329,27 @@ public override async Task Include_collection_with_inheritance_with_filter_rever AssertSql( """ -SELECT `t`.`Id`, `t`.`BaseParentId`, `t`.`Name`, `t`.`DerivedProperty`, `t`.`Discriminator`, `t0`.`Id`, `t0`.`Name`, `t0`.`BaseId`, `t0`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` +SELECT `u`.`Id`, `u`.`BaseParentId`, `u`.`Name`, `u`.`DerivedProperty`, `u`.`Discriminator`, `u0`.`Id`, `u0`.`Name`, `u0`.`BaseId`, `u0`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `d1`.`OwnedReferenceOnDerived_Id`, `d1`.`OwnedReferenceOnDerived_Name` FROM ((((( SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, CVar(NULL) AS `DerivedProperty`, 'BaseCollectionOnBase' AS `Discriminator` FROM `BaseCollectionsOnBase` AS `b` UNION ALL - SELECT `d1`.`Id`, `d1`.`BaseParentId`, `d1`.`Name`, `d1`.`DerivedProperty`, 'DerivedCollectionOnBase' AS `Discriminator` - FROM `DerivedCollectionsOnBase` AS `d1` -) AS `t` + SELECT `d`.`Id`, `d`.`BaseParentId`, `d`.`Name`, `d`.`DerivedProperty`, 'DerivedCollectionOnBase' AS `Discriminator` + FROM `DerivedCollectionsOnBase` AS `d` +) AS `u` LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` FROM `BaseEntities` AS `b0` UNION ALL - SELECT `d2`.`Id`, `d2`.`Name`, `d2`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` - FROM `DerivedEntities` AS `d2` -) AS `t0` ON `t`.`BaseParentId` = `t0`.`Id`) -LEFT JOIN `OwnedReferences` AS `o` ON `t0`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t0`.`Id` = `d`.`Id`) -LEFT JOIN `OwnedCollections` AS `o0` ON `t0`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `t0`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` -WHERE `t`.`Name` <> 'Bar' OR `t`.`Name` IS NULL -ORDER BY `t`.`Id`, `t0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId` + SELECT `d0`.`Id`, `d0`.`Name`, `d0`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d0` +) AS `u0` ON `u`.`BaseParentId` = `u0`.`Id`) +LEFT JOIN `OwnedReferences` AS `o` ON `u0`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u0`.`Id` = `d1`.`Id`) +LEFT JOIN `OwnedCollections` AS `o0` ON `u0`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `u0`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +WHERE `u`.`Name` <> 'Bar' OR `u`.`Name` IS NULL +ORDER BY `u`.`Id`, `u0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d2`.`DerivedInheritanceRelationshipEntityId` """); } @@ -359,20 +359,20 @@ public override async Task Include_reference_without_inheritance(bool async) AssertSql( """ -SELECT `t`.`Id`, `t`.`Name`, `t`.`BaseId`, `t`.`Discriminator`, `r`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `r`.`Name`, `r`.`ParentId` +SELECT `u`.`Id`, `u`.`Name`, `u`.`BaseId`, `u`.`Discriminator`, `r`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name`, `r`.`Name`, `r`.`ParentId` FROM ((((( SELECT `b`.`Id`, `b`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` FROM `BaseEntities` AS `b` UNION ALL - SELECT `d1`.`Id`, `d1`.`Name`, `d1`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` - FROM `DerivedEntities` AS `d1` -) AS `t` -LEFT JOIN `ReferencesOnBase` AS `r` ON `t`.`Id` = `r`.`ParentId`) -LEFT JOIN `OwnedReferences` AS `o` ON `t`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`Id` = `d`.`Id`) -LEFT JOIN `OwnedCollections` AS `o0` ON `t`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `t`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` -ORDER BY `t`.`Id`, `r`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId` + SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `ReferencesOnBase` AS `r` ON `u`.`Id` = `r`.`ParentId`) +LEFT JOIN `OwnedReferences` AS `o` ON `u`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d0` ON `u`.`Id` = `d0`.`Id`) +LEFT JOIN `OwnedCollections` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `u`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `u`.`Id`, `r`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` """); } @@ -430,20 +430,20 @@ public override async Task Include_reference_without_inheritance_reverse(bool as AssertSql( """ -SELECT `r`.`Id`, `r`.`Name`, `r`.`ParentId`, `t`.`Id`, `t`.`Name`, `t`.`BaseId`, `t`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` +SELECT `r`.`Id`, `r`.`Name`, `r`.`ParentId`, `u`.`Id`, `u`.`Name`, `u`.`BaseId`, `u`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` FROM ((((`ReferencesOnBase` AS `r` LEFT JOIN ( SELECT `b`.`Id`, `b`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` FROM `BaseEntities` AS `b` UNION ALL - SELECT `d1`.`Id`, `d1`.`Name`, `d1`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` - FROM `DerivedEntities` AS `d1` -) AS `t` ON `r`.`ParentId` = `t`.`Id`) -LEFT JOIN `OwnedReferences` AS `o` ON `t`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`Id` = `d`.`Id`) -LEFT JOIN `OwnedCollections` AS `o0` ON `t`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `t`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` -ORDER BY `r`.`Id`, `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId` + SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d` +) AS `u` ON `r`.`ParentId` = `u`.`Id`) +LEFT JOIN `OwnedReferences` AS `o` ON `u`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d0` ON `u`.`Id` = `d0`.`Id`) +LEFT JOIN `OwnedCollections` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `u`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `r`.`Id`, `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` """); } @@ -453,21 +453,21 @@ public override async Task Include_reference_without_inheritance_with_filter(boo AssertSql( """ -SELECT `t`.`Id`, `t`.`Name`, `t`.`BaseId`, `t`.`Discriminator`, `r`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `r`.`Name`, `r`.`ParentId` +SELECT `u`.`Id`, `u`.`Name`, `u`.`BaseId`, `u`.`Discriminator`, `r`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name`, `r`.`Name`, `r`.`ParentId` FROM ((((( SELECT `b`.`Id`, `b`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` FROM `BaseEntities` AS `b` UNION ALL - SELECT `d1`.`Id`, `d1`.`Name`, `d1`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` - FROM `DerivedEntities` AS `d1` -) AS `t` -LEFT JOIN `ReferencesOnBase` AS `r` ON `t`.`Id` = `r`.`ParentId`) -LEFT JOIN `OwnedReferences` AS `o` ON `t`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`Id` = `d`.`Id`) -LEFT JOIN `OwnedCollections` AS `o0` ON `t`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `t`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` -WHERE `t`.`Name` <> 'Bar' OR `t`.`Name` IS NULL -ORDER BY `t`.`Id`, `r`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId` + SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `ReferencesOnBase` AS `r` ON `u`.`Id` = `r`.`ParentId`) +LEFT JOIN `OwnedReferences` AS `o` ON `u`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d0` ON `u`.`Id` = `d0`.`Id`) +LEFT JOIN `OwnedCollections` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `u`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +WHERE `u`.`Name` <> 'Bar' OR `u`.`Name` IS NULL +ORDER BY `u`.`Id`, `r`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` """); } @@ -477,21 +477,21 @@ public override async Task Include_reference_without_inheritance_with_filter_rev AssertSql( """ -SELECT `r`.`Id`, `r`.`Name`, `r`.`ParentId`, `t`.`Id`, `t`.`Name`, `t`.`BaseId`, `t`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` +SELECT `r`.`Id`, `r`.`Name`, `r`.`ParentId`, `u`.`Id`, `u`.`Name`, `u`.`BaseId`, `u`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` FROM ((((`ReferencesOnBase` AS `r` LEFT JOIN ( SELECT `b`.`Id`, `b`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` FROM `BaseEntities` AS `b` UNION ALL - SELECT `d1`.`Id`, `d1`.`Name`, `d1`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` - FROM `DerivedEntities` AS `d1` -) AS `t` ON `r`.`ParentId` = `t`.`Id`) -LEFT JOIN `OwnedReferences` AS `o` ON `t`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`Id` = `d`.`Id`) -LEFT JOIN `OwnedCollections` AS `o0` ON `t`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `t`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` + SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d` +) AS `u` ON `r`.`ParentId` = `u`.`Id`) +LEFT JOIN `OwnedReferences` AS `o` ON `u`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d0` ON `u`.`Id` = `d0`.`Id`) +LEFT JOIN `OwnedCollections` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `u`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` WHERE `r`.`Name` <> 'Bar' OR `r`.`Name` IS NULL -ORDER BY `r`.`Id`, `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `r`.`Id`, `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` """); } @@ -501,26 +501,26 @@ public override async Task Include_reference_with_inheritance(bool async) AssertSql( """ -SELECT `t`.`Id`, `t`.`Name`, `t`.`BaseId`, `t`.`Discriminator`, `t0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `t0`.`BaseParentId`, `t0`.`Name`, `t0`.`Discriminator` +SELECT `u`.`Id`, `u`.`Name`, `u`.`BaseId`, `u`.`Discriminator`, `u0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `d1`.`OwnedReferenceOnDerived_Id`, `d1`.`OwnedReferenceOnDerived_Name`, `u0`.`BaseParentId`, `u0`.`Name`, `u0`.`Discriminator` FROM ((((( SELECT `b`.`Id`, `b`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` FROM `BaseEntities` AS `b` UNION ALL - SELECT `d1`.`Id`, `d1`.`Name`, `d1`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` - FROM `DerivedEntities` AS `d1` -) AS `t` + SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d` +) AS `u` LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, 'BaseReferenceOnBase' AS `Discriminator` FROM `BaseReferencesOnBase` AS `b0` UNION ALL - SELECT `d2`.`Id`, `d2`.`BaseParentId`, `d2`.`Name`, 'DerivedReferenceOnBase' AS `Discriminator` - FROM `DerivedReferencesOnBase` AS `d2` -) AS `t0` ON `t`.`Id` = `t0`.`BaseParentId`) -LEFT JOIN `OwnedReferences` AS `o` ON `t`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`Id` = `d`.`Id`) -LEFT JOIN `OwnedCollections` AS `o0` ON `t`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `t`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` -ORDER BY `t`.`Id`, `t0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId` + SELECT `d0`.`Id`, `d0`.`BaseParentId`, `d0`.`Name`, 'DerivedReferenceOnBase' AS `Discriminator` + FROM `DerivedReferencesOnBase` AS `d0` +) AS `u0` ON `u`.`Id` = `u0`.`BaseParentId`) +LEFT JOIN `OwnedReferences` AS `o` ON `u`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) +LEFT JOIN `OwnedCollections` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `u`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `u`.`Id`, `u0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d2`.`DerivedInheritanceRelationshipEntityId` """); } @@ -529,20 +529,20 @@ public override async Task Include_reference_with_inheritance_on_derived1(bool a await base.Include_reference_with_inheritance_on_derived1(async); AssertSql( -""" -SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `t`.`BaseParentId`, `t`.`Name`, `t`.`Discriminator` + """ +SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `u`.`BaseParentId`, `u`.`Name`, `u`.`Discriminator` FROM (((`DerivedEntities` AS `d` LEFT JOIN ( SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, 'BaseReferenceOnBase' AS `Discriminator` FROM `BaseReferencesOnBase` AS `b` UNION ALL - SELECT `d1`.`Id`, `d1`.`BaseParentId`, `d1`.`Name`, 'DerivedReferenceOnBase' AS `Discriminator` - FROM `DerivedReferencesOnBase` AS `d1` -) AS `t` ON `d`.`Id` = `t`.`BaseParentId`) + SELECT `d0`.`Id`, `d0`.`BaseParentId`, `d0`.`Name`, 'DerivedReferenceOnBase' AS `Discriminator` + FROM `DerivedReferencesOnBase` AS `d0` +) AS `u` ON `d`.`Id` = `u`.`BaseParentId`) LEFT JOIN `OwnedReferences` AS `o` ON `d`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) LEFT JOIN `OwnedCollections` AS `o0` ON `d`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `d`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` -ORDER BY `d`.`Id`, `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId` +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `d`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `d`.`Id`, `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` """); } @@ -552,19 +552,19 @@ public override async Task Include_reference_with_inheritance_on_derived2(bool a AssertSql( """ -SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `t`.`BaseParentId`, `t`.`Name`, `t`.`DerivedInheritanceRelationshipEntityId`, `t`.`Discriminator` +SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `u`.`BaseParentId`, `u`.`Name`, `u`.`DerivedInheritanceRelationshipEntityId`, `u`.`Discriminator` FROM (((`DerivedEntities` AS `d` LEFT JOIN ( SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, CVar(NULL) AS `DerivedInheritanceRelationshipEntityId`, 'BaseReferenceOnDerived' AS `Discriminator` FROM `BaseReferencesOnDerived` AS `b` UNION ALL - SELECT `d1`.`Id`, `d1`.`BaseParentId`, `d1`.`Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, 'DerivedReferenceOnDerived' AS `Discriminator` - FROM `DerivedReferencesOnDerived` AS `d1` -) AS `t` ON `d`.`Id` = `t`.`BaseParentId`) + SELECT `d0`.`Id`, `d0`.`BaseParentId`, `d0`.`Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, 'DerivedReferenceOnDerived' AS `Discriminator` + FROM `DerivedReferencesOnDerived` AS `d0` +) AS `u` ON `d`.`Id` = `u`.`BaseParentId`) LEFT JOIN `OwnedReferences` AS `o` ON `d`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) LEFT JOIN `OwnedCollections` AS `o0` ON `d`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `d`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` -ORDER BY `d`.`Id`, `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId` +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `d`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `d`.`Id`, `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` """); } @@ -590,19 +590,19 @@ public override async Task Include_reference_with_inheritance_on_derived_reverse AssertSql( """ -SELECT `t`.`Id`, `t`.`BaseParentId`, `t`.`Name`, `t`.`DerivedInheritanceRelationshipEntityId`, `t`.`Discriminator`, `d`.`Id`, `d`.`Name`, `d`.`BaseId`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` +SELECT `u`.`Id`, `u`.`BaseParentId`, `u`.`Name`, `u`.`DerivedInheritanceRelationshipEntityId`, `u`.`Discriminator`, `d0`.`Id`, `d0`.`Name`, `d0`.`BaseId`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` FROM (((( SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, CVar(NULL) AS `DerivedInheritanceRelationshipEntityId`, 'BaseReferenceOnDerived' AS `Discriminator` FROM `BaseReferencesOnDerived` AS `b` UNION ALL - SELECT `d1`.`Id`, `d1`.`BaseParentId`, `d1`.`Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, 'DerivedReferenceOnDerived' AS `Discriminator` - FROM `DerivedReferencesOnDerived` AS `d1` -) AS `t` -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`BaseParentId` = `d`.`Id`) -LEFT JOIN `OwnedReferences` AS `o` ON `d`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `OwnedCollections` AS `o0` ON `d`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `d`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` -ORDER BY `t`.`Id`, `d`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId` + SELECT `d`.`Id`, `d`.`BaseParentId`, `d`.`Name`, `d`.`DerivedInheritanceRelationshipEntityId`, 'DerivedReferenceOnDerived' AS `Discriminator` + FROM `DerivedReferencesOnDerived` AS `d` +) AS `u` +LEFT JOIN `DerivedEntities` AS `d0` ON `u`.`BaseParentId` = `d0`.`Id`) +LEFT JOIN `OwnedReferences` AS `o` ON `d0`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `OwnedCollections` AS `o0` ON `d0`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `d0`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `u`.`Id`, `d0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` """); } @@ -611,21 +611,21 @@ public override async Task Include_reference_with_inheritance_on_derived_with_fi await base.Include_reference_with_inheritance_on_derived_with_filter1(async); AssertSql( -""" -SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `t`.`BaseParentId`, `t`.`Name`, `t`.`Discriminator` + """ +SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `u`.`BaseParentId`, `u`.`Name`, `u`.`Discriminator` FROM (((`DerivedEntities` AS `d` LEFT JOIN ( SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, 'BaseReferenceOnBase' AS `Discriminator` FROM `BaseReferencesOnBase` AS `b` UNION ALL - SELECT `d1`.`Id`, `d1`.`BaseParentId`, `d1`.`Name`, 'DerivedReferenceOnBase' AS `Discriminator` - FROM `DerivedReferencesOnBase` AS `d1` -) AS `t` ON `d`.`Id` = `t`.`BaseParentId`) + SELECT `d0`.`Id`, `d0`.`BaseParentId`, `d0`.`Name`, 'DerivedReferenceOnBase' AS `Discriminator` + FROM `DerivedReferencesOnBase` AS `d0` +) AS `u` ON `d`.`Id` = `u`.`BaseParentId`) LEFT JOIN `OwnedReferences` AS `o` ON `d`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) LEFT JOIN `OwnedCollections` AS `o0` ON `d`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `d`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `d`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` WHERE `d`.`Name` <> 'Bar' OR `d`.`Name` IS NULL -ORDER BY `d`.`Id`, `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `d`.`Id`, `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` """); } @@ -635,20 +635,20 @@ public override async Task Include_reference_with_inheritance_on_derived_with_fi AssertSql( """ -SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `t`.`BaseParentId`, `t`.`Name`, `t`.`DerivedInheritanceRelationshipEntityId`, `t`.`Discriminator` +SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `u`.`BaseParentId`, `u`.`Name`, `u`.`DerivedInheritanceRelationshipEntityId`, `u`.`Discriminator` FROM (((`DerivedEntities` AS `d` LEFT JOIN ( SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, CVar(NULL) AS `DerivedInheritanceRelationshipEntityId`, 'BaseReferenceOnDerived' AS `Discriminator` FROM `BaseReferencesOnDerived` AS `b` UNION ALL - SELECT `d1`.`Id`, `d1`.`BaseParentId`, `d1`.`Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, 'DerivedReferenceOnDerived' AS `Discriminator` - FROM `DerivedReferencesOnDerived` AS `d1` -) AS `t` ON `d`.`Id` = `t`.`BaseParentId`) + SELECT `d0`.`Id`, `d0`.`BaseParentId`, `d0`.`Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, 'DerivedReferenceOnDerived' AS `Discriminator` + FROM `DerivedReferencesOnDerived` AS `d0` +) AS `u` ON `d`.`Id` = `u`.`BaseParentId`) LEFT JOIN `OwnedReferences` AS `o` ON `d`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) LEFT JOIN `OwnedCollections` AS `o0` ON `d`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `d`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `d`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` WHERE `d`.`Name` <> 'Bar' OR `d`.`Name` IS NULL -ORDER BY `d`.`Id`, `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `d`.`Id`, `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` """); } @@ -675,20 +675,20 @@ public override async Task Include_reference_with_inheritance_on_derived_with_fi AssertSql( """ -SELECT `t`.`Id`, `t`.`BaseParentId`, `t`.`Name`, `t`.`DerivedInheritanceRelationshipEntityId`, `t`.`Discriminator`, `d`.`Id`, `d`.`Name`, `d`.`BaseId`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` +SELECT `u`.`Id`, `u`.`BaseParentId`, `u`.`Name`, `u`.`DerivedInheritanceRelationshipEntityId`, `u`.`Discriminator`, `d0`.`Id`, `d0`.`Name`, `d0`.`BaseId`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` FROM (((( SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, CVar(NULL) AS `DerivedInheritanceRelationshipEntityId`, 'BaseReferenceOnDerived' AS `Discriminator` FROM `BaseReferencesOnDerived` AS `b` UNION ALL - SELECT `d1`.`Id`, `d1`.`BaseParentId`, `d1`.`Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, 'DerivedReferenceOnDerived' AS `Discriminator` - FROM `DerivedReferencesOnDerived` AS `d1` -) AS `t` -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`BaseParentId` = `d`.`Id`) -LEFT JOIN `OwnedReferences` AS `o` ON `d`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `OwnedCollections` AS `o0` ON `d`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `d`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` -WHERE `t`.`Name` <> 'Bar' OR `t`.`Name` IS NULL -ORDER BY `t`.`Id`, `d`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId` + SELECT `d`.`Id`, `d`.`BaseParentId`, `d`.`Name`, `d`.`DerivedInheritanceRelationshipEntityId`, 'DerivedReferenceOnDerived' AS `Discriminator` + FROM `DerivedReferencesOnDerived` AS `d` +) AS `u` +LEFT JOIN `DerivedEntities` AS `d0` ON `u`.`BaseParentId` = `d0`.`Id`) +LEFT JOIN `OwnedReferences` AS `o` ON `d0`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `OwnedCollections` AS `o0` ON `d0`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `d0`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +WHERE `u`.`Name` <> 'Bar' OR `u`.`Name` IS NULL +ORDER BY `u`.`Id`, `d0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` """); } @@ -698,26 +698,26 @@ public override async Task Include_reference_with_inheritance_reverse(bool async AssertSql( """ -SELECT `t`.`Id`, `t`.`BaseParentId`, `t`.`Name`, `t`.`Discriminator`, `t0`.`Id`, `t0`.`Name`, `t0`.`BaseId`, `t0`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` +SELECT `u`.`Id`, `u`.`BaseParentId`, `u`.`Name`, `u`.`Discriminator`, `u0`.`Id`, `u0`.`Name`, `u0`.`BaseId`, `u0`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `d1`.`OwnedReferenceOnDerived_Id`, `d1`.`OwnedReferenceOnDerived_Name` FROM ((((( SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, 'BaseReferenceOnBase' AS `Discriminator` FROM `BaseReferencesOnBase` AS `b` UNION ALL - SELECT `d1`.`Id`, `d1`.`BaseParentId`, `d1`.`Name`, 'DerivedReferenceOnBase' AS `Discriminator` - FROM `DerivedReferencesOnBase` AS `d1` -) AS `t` + SELECT `d`.`Id`, `d`.`BaseParentId`, `d`.`Name`, 'DerivedReferenceOnBase' AS `Discriminator` + FROM `DerivedReferencesOnBase` AS `d` +) AS `u` LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` FROM `BaseEntities` AS `b0` UNION ALL - SELECT `d2`.`Id`, `d2`.`Name`, `d2`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` - FROM `DerivedEntities` AS `d2` -) AS `t0` ON `t`.`BaseParentId` = `t0`.`Id`) -LEFT JOIN `OwnedReferences` AS `o` ON `t0`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t0`.`Id` = `d`.`Id`) -LEFT JOIN `OwnedCollections` AS `o0` ON `t0`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `t0`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` -ORDER BY `t`.`Id`, `t0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId` + SELECT `d0`.`Id`, `d0`.`Name`, `d0`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d0` +) AS `u0` ON `u`.`BaseParentId` = `u0`.`Id`) +LEFT JOIN `OwnedReferences` AS `o` ON `u0`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u0`.`Id` = `d1`.`Id`) +LEFT JOIN `OwnedCollections` AS `o0` ON `u0`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `u0`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `u`.`Id`, `u0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d2`.`DerivedInheritanceRelationshipEntityId` """); } @@ -727,27 +727,27 @@ public override async Task Include_reference_with_inheritance_with_filter(bool a AssertSql( """ -SELECT `t`.`Id`, `t`.`Name`, `t`.`BaseId`, `t`.`Discriminator`, `t0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `t0`.`BaseParentId`, `t0`.`Name`, `t0`.`Discriminator` +SELECT `u`.`Id`, `u`.`Name`, `u`.`BaseId`, `u`.`Discriminator`, `u0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `d1`.`OwnedReferenceOnDerived_Id`, `d1`.`OwnedReferenceOnDerived_Name`, `u0`.`BaseParentId`, `u0`.`Name`, `u0`.`Discriminator` FROM ((((( SELECT `b`.`Id`, `b`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` FROM `BaseEntities` AS `b` UNION ALL - SELECT `d1`.`Id`, `d1`.`Name`, `d1`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` - FROM `DerivedEntities` AS `d1` -) AS `t` + SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d` +) AS `u` LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, 'BaseReferenceOnBase' AS `Discriminator` FROM `BaseReferencesOnBase` AS `b0` UNION ALL - SELECT `d2`.`Id`, `d2`.`BaseParentId`, `d2`.`Name`, 'DerivedReferenceOnBase' AS `Discriminator` - FROM `DerivedReferencesOnBase` AS `d2` -) AS `t0` ON `t`.`Id` = `t0`.`BaseParentId`) -LEFT JOIN `OwnedReferences` AS `o` ON `t`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`Id` = `d`.`Id`) -LEFT JOIN `OwnedCollections` AS `o0` ON `t`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `t`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` -WHERE `t`.`Name` <> 'Bar' OR `t`.`Name` IS NULL -ORDER BY `t`.`Id`, `t0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId` + SELECT `d0`.`Id`, `d0`.`BaseParentId`, `d0`.`Name`, 'DerivedReferenceOnBase' AS `Discriminator` + FROM `DerivedReferencesOnBase` AS `d0` +) AS `u0` ON `u`.`Id` = `u0`.`BaseParentId`) +LEFT JOIN `OwnedReferences` AS `o` ON `u`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) +LEFT JOIN `OwnedCollections` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `u`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +WHERE `u`.`Name` <> 'Bar' OR `u`.`Name` IS NULL +ORDER BY `u`.`Id`, `u0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d2`.`DerivedInheritanceRelationshipEntityId` """); } @@ -757,27 +757,27 @@ public override async Task Include_reference_with_inheritance_with_filter_revers AssertSql( """ -SELECT `t`.`Id`, `t`.`BaseParentId`, `t`.`Name`, `t`.`Discriminator`, `t0`.`Id`, `t0`.`Name`, `t0`.`BaseId`, `t0`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` +SELECT `u`.`Id`, `u`.`BaseParentId`, `u`.`Name`, `u`.`Discriminator`, `u0`.`Id`, `u0`.`Name`, `u0`.`BaseId`, `u0`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `d1`.`OwnedReferenceOnDerived_Id`, `d1`.`OwnedReferenceOnDerived_Name` FROM ((((( SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, 'BaseReferenceOnBase' AS `Discriminator` FROM `BaseReferencesOnBase` AS `b` UNION ALL - SELECT `d1`.`Id`, `d1`.`BaseParentId`, `d1`.`Name`, 'DerivedReferenceOnBase' AS `Discriminator` - FROM `DerivedReferencesOnBase` AS `d1` -) AS `t` + SELECT `d`.`Id`, `d`.`BaseParentId`, `d`.`Name`, 'DerivedReferenceOnBase' AS `Discriminator` + FROM `DerivedReferencesOnBase` AS `d` +) AS `u` LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` FROM `BaseEntities` AS `b0` UNION ALL - SELECT `d2`.`Id`, `d2`.`Name`, `d2`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` - FROM `DerivedEntities` AS `d2` -) AS `t0` ON `t`.`BaseParentId` = `t0`.`Id`) -LEFT JOIN `OwnedReferences` AS `o` ON `t0`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t0`.`Id` = `d`.`Id`) -LEFT JOIN `OwnedCollections` AS `o0` ON `t0`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `t0`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` -WHERE `t`.`Name` <> 'Bar' OR `t`.`Name` IS NULL -ORDER BY `t`.`Id`, `t0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId` + SELECT `d0`.`Id`, `d0`.`Name`, `d0`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d0` +) AS `u0` ON `u`.`BaseParentId` = `u0`.`Id`) +LEFT JOIN `OwnedReferences` AS `o` ON `u0`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u0`.`Id` = `d1`.`Id`) +LEFT JOIN `OwnedCollections` AS `o0` ON `u0`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `u0`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +WHERE `u`.`Name` <> 'Bar' OR `u`.`Name` IS NULL +ORDER BY `u`.`Id`, `u0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d2`.`DerivedInheritanceRelationshipEntityId` """); } @@ -786,24 +786,24 @@ public override async Task Include_self_reference_with_inheritance(bool async) await base.Include_self_reference_with_inheritance(async); AssertSql( -""" -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` + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`BaseId`, `u`.`Discriminator`, `d0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o1`.`BaseInheritanceRelationshipEntityId`, `o1`.`Id`, `o1`.`Name`, `o`.`Id`, `o`.`Name`, `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `d1`.`OwnedReferenceOnDerived_Id`, `d1`.`OwnedReferenceOnDerived_Name`, `d0`.`Name`, `d0`.`BaseId`, `o2`.`BaseInheritanceRelationshipEntityId`, `o2`.`Id`, `o2`.`Name`, `o0`.`Id`, `o0`.`Name`, `d3`.`DerivedInheritanceRelationshipEntityId`, `d3`.`Id`, `d3`.`Name`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` FROM (((((((( 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` = 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`) -LEFT JOIN `OwnedCollections` AS `o1` ON `t`.`Id` = `o1`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `t`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId`) -LEFT JOIN `OwnedCollections` AS `o2` ON `d`.`Id` = `o2`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `d`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` -ORDER BY `t`.`Id`, `d`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o1`.`BaseInheritanceRelationshipEntityId`, `o1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `o2`.`BaseInheritanceRelationshipEntityId`, `o2`.`Id`, `d2`.`DerivedInheritanceRelationshipEntityId` + SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `DerivedEntities` AS `d0` ON `u`.`Id` = IIF(`d0`.`BaseId` IS NULL, NULL, CLNG(`d0`.`BaseId`))) +LEFT JOIN `OwnedReferences` AS `o` ON `u`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) +LEFT JOIN `OwnedReferences` AS `o0` ON `d0`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `OwnedCollections` AS `o1` ON `u`.`Id` = `o1`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `u`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId`) +LEFT JOIN `OwnedCollections` AS `o2` ON `d0`.`Id` = `o2`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d3` ON `d0`.`Id` = `d3`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `u`.`Id`, `d0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o1`.`BaseInheritanceRelationshipEntityId`, `o1`.`Id`, `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `o2`.`BaseInheritanceRelationshipEntityId`, `o2`.`Id`, `d3`.`DerivedInheritanceRelationshipEntityId` """); } @@ -812,24 +812,24 @@ public override async Task Include_self_reference_with_inheritance_reverse(bool await base.Include_self_reference_with_inheritance_reverse(async); AssertSql( -""" -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` + """ +SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o1`.`BaseInheritanceRelationshipEntityId`, `o1`.`Id`, `o1`.`Name`, `o`.`Id`, `o`.`Name`, `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `u`.`Name`, `u`.`BaseId`, `u`.`Discriminator`, `o2`.`BaseInheritanceRelationshipEntityId`, `o2`.`Id`, `o2`.`Name`, `o0`.`Id`, `o0`.`Name`, `d3`.`DerivedInheritanceRelationshipEntityId`, `d3`.`Id`, `d3`.`Name`, `d1`.`OwnedReferenceOnDerived_Id`, `d1`.`OwnedReferenceOnDerived_Name` FROM (((((((`DerivedEntities` AS `d` LEFT JOIN ( 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 IIF(`d`.`BaseId` IS NULL, NULL, CLNG(`d`.`BaseId`)) = `t`.`Id`) + SELECT `d0`.`Id`, `d0`.`Name`, `d0`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d0` +) AS `u` ON IIF(`d`.`BaseId` IS NULL, NULL, CLNG(`d`.`BaseId`)) = `u`.`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`) +LEFT JOIN `OwnedReferences` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) LEFT JOIN `OwnedCollections` AS `o1` ON `d`.`Id` = `o1`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `d`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId`) -LEFT JOIN `OwnedCollections` AS `o2` ON `t`.`Id` = `o2`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `t`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` -ORDER BY `d`.`Id`, `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o1`.`BaseInheritanceRelationshipEntityId`, `o1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `o2`.`BaseInheritanceRelationshipEntityId`, `o2`.`Id`, `d2`.`DerivedInheritanceRelationshipEntityId` +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `d`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId`) +LEFT JOIN `OwnedCollections` AS `o2` ON `u`.`Id` = `o2`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d3` ON `u`.`Id` = `d3`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `d`.`Id`, `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o1`.`BaseInheritanceRelationshipEntityId`, `o1`.`Id`, `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `o2`.`BaseInheritanceRelationshipEntityId`, `o2`.`Id`, `d3`.`DerivedInheritanceRelationshipEntityId` """); } @@ -838,15 +838,15 @@ public override async Task Nested_include_collection_reference_on_non_entity_bas await base.Nested_include_collection_reference_on_non_entity_base(async); AssertSql( -""" -SELECT `r`.`Id`, `r`.`Name`, `t`.`Id`, `t`.`Name`, `t`.`ReferenceId`, `t`.`ReferencedEntityId`, `t`.`Id0`, `t`.`Name0` + """ +SELECT `r`.`Id`, `r`.`Name`, `s`.`Id`, `s`.`Name`, `s`.`ReferenceId`, `s`.`ReferencedEntityId`, `s`.`Id0`, `s`.`Name0` FROM `ReferencedEntities` AS `r` LEFT JOIN ( SELECT `p`.`Id`, `p`.`Name`, `p`.`ReferenceId`, `p`.`ReferencedEntityId`, `r0`.`Id` AS `Id0`, `r0`.`Name` AS `Name0` FROM `PrincipalEntities` AS `p` LEFT JOIN `ReferencedEntities` AS `r0` ON `p`.`ReferenceId` = `r0`.`Id` -) AS `t` ON `r`.`Id` = `t`.`ReferencedEntityId` -ORDER BY `r`.`Id`, `t`.`Id` +) AS `s` ON `r`.`Id` = `s`.`ReferencedEntityId` +ORDER BY `r`.`Id`, `s`.`Id` """); } @@ -855,37 +855,37 @@ public override async Task Nested_include_with_inheritance_collection_collection await base.Nested_include_with_inheritance_collection_collection(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`Name`, `t`.`BaseId`, `t`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `t1`.`Id`, `t1`.`BaseParentId`, `t1`.`Name`, `t1`.`DerivedProperty`, `t1`.`Discriminator`, `t1`.`Id0`, `t1`.`Name0`, `t1`.`ParentCollectionId`, `t1`.`ParentReferenceId`, `t1`.`Discriminator0` + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`BaseId`, `u`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name`, `s`.`Id`, `s`.`BaseParentId`, `s`.`Name`, `s`.`DerivedProperty`, `s`.`Discriminator`, `s`.`Id0`, `s`.`Name0`, `s`.`ParentCollectionId`, `s`.`ParentReferenceId`, `s`.`Discriminator0` FROM ((((( SELECT `b`.`Id`, `b`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` FROM `BaseEntities` AS `b` UNION ALL - SELECT `d1`.`Id`, `d1`.`Name`, `d1`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` - FROM `DerivedEntities` AS `d1` -) AS `t` -LEFT JOIN `OwnedReferences` AS `o` ON `t`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`Id` = `d`.`Id`) -LEFT JOIN `OwnedCollections` AS `o0` ON `t`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `t`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId`) + SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o` ON `u`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d0` ON `u`.`Id` = `d0`.`Id`) +LEFT JOIN `OwnedCollections` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `u`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId`) LEFT JOIN ( - SELECT `t0`.`Id`, `t0`.`BaseParentId`, `t0`.`Name`, `t0`.`DerivedProperty`, `t0`.`Discriminator`, `t2`.`Id` AS `Id0`, `t2`.`Name` AS `Name0`, `t2`.`ParentCollectionId`, `t2`.`ParentReferenceId`, `t2`.`Discriminator` AS `Discriminator0` + SELECT `u0`.`Id`, `u0`.`BaseParentId`, `u0`.`Name`, `u0`.`DerivedProperty`, `u0`.`Discriminator`, `u1`.`Id` AS `Id0`, `u1`.`Name` AS `Name0`, `u1`.`ParentCollectionId`, `u1`.`ParentReferenceId`, `u1`.`Discriminator` AS `Discriminator0` FROM ( SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, CVar(NULL) AS `DerivedProperty`, 'BaseCollectionOnBase' AS `Discriminator` FROM `BaseCollectionsOnBase` AS `b0` UNION ALL SELECT `d2`.`Id`, `d2`.`BaseParentId`, `d2`.`Name`, `d2`.`DerivedProperty`, 'DerivedCollectionOnBase' AS `Discriminator` FROM `DerivedCollectionsOnBase` AS `d2` - ) AS `t0` + ) AS `u0` LEFT JOIN ( SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, 'NestedCollectionBase' AS `Discriminator` FROM `NestedCollections` AS `n` UNION ALL SELECT `n0`.`Id`, `n0`.`Name`, `n0`.`ParentCollectionId`, `n0`.`ParentReferenceId`, 'NestedCollectionDerived' AS `Discriminator` FROM `NestedCollectionsDerived` AS `n0` - ) AS `t2` ON `t0`.`Id` = `t2`.`ParentCollectionId` -) AS `t1` ON `t`.`Id` = `t1`.`BaseParentId` -ORDER BY `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `t1`.`Id` + ) AS `u1` ON `u0`.`Id` = `u1`.`ParentCollectionId` +) AS `s` ON `u`.`Id` = `s`.`BaseParentId` +ORDER BY `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `s`.`Id` """); } @@ -894,34 +894,34 @@ public override async Task Nested_include_with_inheritance_collection_collection await base.Nested_include_with_inheritance_collection_collection_reverse(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`Name`, `t`.`ParentCollectionId`, `t`.`ParentReferenceId`, `t`.`Discriminator`, `t0`.`Id`, `t0`.`BaseParentId`, `t0`.`Name`, `t0`.`DerivedProperty`, `t0`.`Discriminator`, `t1`.`Id`, `t1`.`Name`, `t1`.`BaseId`, `t1`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`ParentCollectionId`, `u`.`ParentReferenceId`, `u`.`Discriminator`, `u0`.`Id`, `u0`.`BaseParentId`, `u0`.`Name`, `u0`.`DerivedProperty`, `u0`.`Discriminator`, `u1`.`Id`, `u1`.`Name`, `u1`.`BaseId`, `u1`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `d1`.`OwnedReferenceOnDerived_Id`, `d1`.`OwnedReferenceOnDerived_Name` FROM (((((( SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, 'NestedCollectionBase' AS `Discriminator` FROM `NestedCollections` AS `n` UNION ALL SELECT `n0`.`Id`, `n0`.`Name`, `n0`.`ParentCollectionId`, `n0`.`ParentReferenceId`, 'NestedCollectionDerived' AS `Discriminator` FROM `NestedCollectionsDerived` AS `n0` -) AS `t` +) AS `u` LEFT JOIN ( SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, CVar(NULL) AS `DerivedProperty`, 'BaseCollectionOnBase' AS `Discriminator` FROM `BaseCollectionsOnBase` AS `b` UNION ALL - SELECT `d1`.`Id`, `d1`.`BaseParentId`, `d1`.`Name`, `d1`.`DerivedProperty`, 'DerivedCollectionOnBase' AS `Discriminator` - FROM `DerivedCollectionsOnBase` AS `d1` -) AS `t0` ON `t`.`ParentCollectionId` = `t0`.`Id`) + SELECT `d`.`Id`, `d`.`BaseParentId`, `d`.`Name`, `d`.`DerivedProperty`, 'DerivedCollectionOnBase' AS `Discriminator` + FROM `DerivedCollectionsOnBase` AS `d` +) AS `u0` ON `u`.`ParentCollectionId` = `u0`.`Id`) LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` FROM `BaseEntities` AS `b0` UNION ALL - SELECT `d2`.`Id`, `d2`.`Name`, `d2`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` - FROM `DerivedEntities` AS `d2` -) AS `t1` ON `t0`.`BaseParentId` = `t1`.`Id`) -LEFT JOIN `OwnedReferences` AS `o` ON `t1`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t1`.`Id` = `d`.`Id`) -LEFT JOIN `OwnedCollections` AS `o0` ON `t1`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `t1`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` -ORDER BY `t`.`Id`, `t0`.`Id`, `t1`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId` + SELECT `d0`.`Id`, `d0`.`Name`, `d0`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d0` +) AS `u1` ON `u0`.`BaseParentId` = `u1`.`Id`) +LEFT JOIN `OwnedReferences` AS `o` ON `u1`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u1`.`Id` = `d1`.`Id`) +LEFT JOIN `OwnedCollections` AS `o0` ON `u1`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `u1`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `u`.`Id`, `u0`.`Id`, `u1`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d2`.`DerivedInheritanceRelationshipEntityId` """); } @@ -930,37 +930,37 @@ public override async Task Nested_include_with_inheritance_collection_reference( await base.Nested_include_with_inheritance_collection_reference(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`Name`, `t`.`BaseId`, `t`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `t1`.`Id`, `t1`.`BaseParentId`, `t1`.`Name`, `t1`.`DerivedProperty`, `t1`.`Discriminator`, `t1`.`Id0`, `t1`.`Name0`, `t1`.`ParentCollectionId`, `t1`.`ParentReferenceId`, `t1`.`Discriminator0` + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`BaseId`, `u`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name`, `s`.`Id`, `s`.`BaseParentId`, `s`.`Name`, `s`.`DerivedProperty`, `s`.`Discriminator`, `s`.`Id0`, `s`.`Name0`, `s`.`ParentCollectionId`, `s`.`ParentReferenceId`, `s`.`Discriminator0` FROM ((((( SELECT `b`.`Id`, `b`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` FROM `BaseEntities` AS `b` UNION ALL - SELECT `d1`.`Id`, `d1`.`Name`, `d1`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` - FROM `DerivedEntities` AS `d1` -) AS `t` -LEFT JOIN `OwnedReferences` AS `o` ON `t`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`Id` = `d`.`Id`) -LEFT JOIN `OwnedCollections` AS `o0` ON `t`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `t`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId`) + SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o` ON `u`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d0` ON `u`.`Id` = `d0`.`Id`) +LEFT JOIN `OwnedCollections` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `u`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId`) LEFT JOIN ( - SELECT `t0`.`Id`, `t0`.`BaseParentId`, `t0`.`Name`, `t0`.`DerivedProperty`, `t0`.`Discriminator`, `t2`.`Id` AS `Id0`, `t2`.`Name` AS `Name0`, `t2`.`ParentCollectionId`, `t2`.`ParentReferenceId`, `t2`.`Discriminator` AS `Discriminator0` + SELECT `u0`.`Id`, `u0`.`BaseParentId`, `u0`.`Name`, `u0`.`DerivedProperty`, `u0`.`Discriminator`, `u1`.`Id` AS `Id0`, `u1`.`Name` AS `Name0`, `u1`.`ParentCollectionId`, `u1`.`ParentReferenceId`, `u1`.`Discriminator` AS `Discriminator0` FROM ( SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, CVar(NULL) AS `DerivedProperty`, 'BaseCollectionOnBase' AS `Discriminator` FROM `BaseCollectionsOnBase` AS `b0` UNION ALL SELECT `d2`.`Id`, `d2`.`BaseParentId`, `d2`.`Name`, `d2`.`DerivedProperty`, 'DerivedCollectionOnBase' AS `Discriminator` FROM `DerivedCollectionsOnBase` AS `d2` - ) AS `t0` + ) AS `u0` LEFT JOIN ( SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, 'NestedReferenceBase' AS `Discriminator` FROM `NestedReferences` AS `n` UNION ALL SELECT `n0`.`Id`, `n0`.`Name`, `n0`.`ParentCollectionId`, `n0`.`ParentReferenceId`, 'NestedReferenceDerived' AS `Discriminator` FROM `NestedReferencesDerived` AS `n0` - ) AS `t2` ON `t0`.`Id` = `t2`.`ParentCollectionId` -) AS `t1` ON `t`.`Id` = `t1`.`BaseParentId` -ORDER BY `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `t1`.`Id` + ) AS `u1` ON `u0`.`Id` = `u1`.`ParentCollectionId` +) AS `s` ON `u`.`Id` = `s`.`BaseParentId` +ORDER BY `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `s`.`Id` """); } @@ -969,34 +969,34 @@ public override async Task Nested_include_with_inheritance_collection_reference_ await base.Nested_include_with_inheritance_collection_reference_reverse(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`Name`, `t`.`ParentCollectionId`, `t`.`ParentReferenceId`, `t`.`Discriminator`, `t0`.`Id`, `t0`.`BaseParentId`, `t0`.`Name`, `t0`.`DerivedProperty`, `t0`.`Discriminator`, `t1`.`Id`, `t1`.`Name`, `t1`.`BaseId`, `t1`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`ParentCollectionId`, `u`.`ParentReferenceId`, `u`.`Discriminator`, `u0`.`Id`, `u0`.`BaseParentId`, `u0`.`Name`, `u0`.`DerivedProperty`, `u0`.`Discriminator`, `u1`.`Id`, `u1`.`Name`, `u1`.`BaseId`, `u1`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `d1`.`OwnedReferenceOnDerived_Id`, `d1`.`OwnedReferenceOnDerived_Name` FROM (((((( SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, 'NestedReferenceBase' AS `Discriminator` FROM `NestedReferences` AS `n` UNION ALL SELECT `n0`.`Id`, `n0`.`Name`, `n0`.`ParentCollectionId`, `n0`.`ParentReferenceId`, 'NestedReferenceDerived' AS `Discriminator` FROM `NestedReferencesDerived` AS `n0` -) AS `t` +) AS `u` LEFT JOIN ( SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, CVar(NULL) AS `DerivedProperty`, 'BaseCollectionOnBase' AS `Discriminator` FROM `BaseCollectionsOnBase` AS `b` UNION ALL - SELECT `d1`.`Id`, `d1`.`BaseParentId`, `d1`.`Name`, `d1`.`DerivedProperty`, 'DerivedCollectionOnBase' AS `Discriminator` - FROM `DerivedCollectionsOnBase` AS `d1` -) AS `t0` ON `t`.`ParentCollectionId` = `t0`.`Id`) + SELECT `d`.`Id`, `d`.`BaseParentId`, `d`.`Name`, `d`.`DerivedProperty`, 'DerivedCollectionOnBase' AS `Discriminator` + FROM `DerivedCollectionsOnBase` AS `d` +) AS `u0` ON `u`.`ParentCollectionId` = `u0`.`Id`) LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` FROM `BaseEntities` AS `b0` UNION ALL - SELECT `d2`.`Id`, `d2`.`Name`, `d2`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` - FROM `DerivedEntities` AS `d2` -) AS `t1` ON `t0`.`BaseParentId` = `t1`.`Id`) -LEFT JOIN `OwnedReferences` AS `o` ON `t1`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t1`.`Id` = `d`.`Id`) -LEFT JOIN `OwnedCollections` AS `o0` ON `t1`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `t1`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` -ORDER BY `t`.`Id`, `t0`.`Id`, `t1`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId` + SELECT `d0`.`Id`, `d0`.`Name`, `d0`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d0` +) AS `u1` ON `u0`.`BaseParentId` = `u1`.`Id`) +LEFT JOIN `OwnedReferences` AS `o` ON `u1`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u1`.`Id` = `d1`.`Id`) +LEFT JOIN `OwnedCollections` AS `o0` ON `u1`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `u1`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `u`.`Id`, `u0`.`Id`, `u1`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d2`.`DerivedInheritanceRelationshipEntityId` """); } @@ -1005,34 +1005,34 @@ public override async Task Nested_include_with_inheritance_reference_collection( await base.Nested_include_with_inheritance_reference_collection(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`Name`, `t`.`BaseId`, `t`.`Discriminator`, `t0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `t0`.`BaseParentId`, `t0`.`Name`, `t0`.`Discriminator`, `t1`.`Id`, `t1`.`Name`, `t1`.`ParentCollectionId`, `t1`.`ParentReferenceId`, `t1`.`Discriminator` + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`BaseId`, `u`.`Discriminator`, `u0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `d1`.`OwnedReferenceOnDerived_Id`, `d1`.`OwnedReferenceOnDerived_Name`, `u0`.`BaseParentId`, `u0`.`Name`, `u0`.`Discriminator`, `u1`.`Id`, `u1`.`Name`, `u1`.`ParentCollectionId`, `u1`.`ParentReferenceId`, `u1`.`Discriminator` FROM (((((( SELECT `b`.`Id`, `b`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` FROM `BaseEntities` AS `b` UNION ALL - SELECT `d1`.`Id`, `d1`.`Name`, `d1`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` - FROM `DerivedEntities` AS `d1` -) AS `t` + SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d` +) AS `u` LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, 'BaseReferenceOnBase' AS `Discriminator` FROM `BaseReferencesOnBase` AS `b0` UNION ALL - SELECT `d2`.`Id`, `d2`.`BaseParentId`, `d2`.`Name`, 'DerivedReferenceOnBase' AS `Discriminator` - FROM `DerivedReferencesOnBase` AS `d2` -) AS `t0` ON `t`.`Id` = `t0`.`BaseParentId`) -LEFT JOIN `OwnedReferences` AS `o` ON `t`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`Id` = `d`.`Id`) -LEFT JOIN `OwnedCollections` AS `o0` ON `t`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `t`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId`) + SELECT `d0`.`Id`, `d0`.`BaseParentId`, `d0`.`Name`, 'DerivedReferenceOnBase' AS `Discriminator` + FROM `DerivedReferencesOnBase` AS `d0` +) AS `u0` ON `u`.`Id` = `u0`.`BaseParentId`) +LEFT JOIN `OwnedReferences` AS `o` ON `u`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) +LEFT JOIN `OwnedCollections` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `u`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId`) LEFT JOIN ( SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, 'NestedCollectionBase' AS `Discriminator` FROM `NestedCollections` AS `n` UNION ALL SELECT `n0`.`Id`, `n0`.`Name`, `n0`.`ParentCollectionId`, `n0`.`ParentReferenceId`, 'NestedCollectionDerived' AS `Discriminator` FROM `NestedCollectionsDerived` AS `n0` -) AS `t1` ON `t0`.`Id` = `t1`.`ParentReferenceId` -ORDER BY `t`.`Id`, `t0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id` +) AS `u1` ON `u0`.`Id` = `u1`.`ParentReferenceId` +ORDER BY `u`.`Id`, `u0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id` """); } @@ -1041,27 +1041,27 @@ public override async Task Nested_include_with_inheritance_reference_collection_ await base.Nested_include_with_inheritance_reference_collection_on_base(async); AssertSql( -""" -SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `t`.`BaseParentId`, `t`.`Name`, `t`.`Discriminator`, `t0`.`Id`, `t0`.`Name`, `t0`.`ParentCollectionId`, `t0`.`ParentReferenceId`, `t0`.`Discriminator` + """ +SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `u`.`BaseParentId`, `u`.`Name`, `u`.`Discriminator`, `u0`.`Id`, `u0`.`Name`, `u0`.`ParentCollectionId`, `u0`.`ParentReferenceId`, `u0`.`Discriminator` FROM ((((`DerivedEntities` AS `d` LEFT JOIN ( SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, 'BaseReferenceOnBase' AS `Discriminator` FROM `BaseReferencesOnBase` AS `b` UNION ALL - SELECT `d1`.`Id`, `d1`.`BaseParentId`, `d1`.`Name`, 'DerivedReferenceOnBase' AS `Discriminator` - FROM `DerivedReferencesOnBase` AS `d1` -) AS `t` ON `d`.`Id` = `t`.`BaseParentId`) + SELECT `d0`.`Id`, `d0`.`BaseParentId`, `d0`.`Name`, 'DerivedReferenceOnBase' AS `Discriminator` + FROM `DerivedReferencesOnBase` AS `d0` +) AS `u` ON `d`.`Id` = `u`.`BaseParentId`) LEFT JOIN `OwnedReferences` AS `o` ON `d`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) LEFT JOIN `OwnedCollections` AS `o0` ON `d`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `d`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `d`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId`) LEFT JOIN ( SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, 'NestedCollectionBase' AS `Discriminator` FROM `NestedCollections` AS `n` UNION ALL SELECT `n0`.`Id`, `n0`.`Name`, `n0`.`ParentCollectionId`, `n0`.`ParentReferenceId`, 'NestedCollectionDerived' AS `Discriminator` FROM `NestedCollectionsDerived` AS `n0` -) AS `t0` ON `t`.`Id` = `t0`.`ParentReferenceId` -ORDER BY `d`.`Id`, `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id` +) AS `u0` ON `u`.`Id` = `u0`.`ParentReferenceId` +ORDER BY `d`.`Id`, `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id` """); } @@ -1070,34 +1070,34 @@ public override async Task Nested_include_with_inheritance_reference_collection_ await base.Nested_include_with_inheritance_reference_collection_reverse(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`Name`, `t`.`ParentCollectionId`, `t`.`ParentReferenceId`, `t`.`Discriminator`, `t0`.`Id`, `t0`.`BaseParentId`, `t0`.`Name`, `t0`.`Discriminator`, `t1`.`Id`, `t1`.`Name`, `t1`.`BaseId`, `t1`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`ParentCollectionId`, `u`.`ParentReferenceId`, `u`.`Discriminator`, `u0`.`Id`, `u0`.`BaseParentId`, `u0`.`Name`, `u0`.`Discriminator`, `u1`.`Id`, `u1`.`Name`, `u1`.`BaseId`, `u1`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `d1`.`OwnedReferenceOnDerived_Id`, `d1`.`OwnedReferenceOnDerived_Name` FROM (((((( SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, 'NestedCollectionBase' AS `Discriminator` FROM `NestedCollections` AS `n` UNION ALL SELECT `n0`.`Id`, `n0`.`Name`, `n0`.`ParentCollectionId`, `n0`.`ParentReferenceId`, 'NestedCollectionDerived' AS `Discriminator` FROM `NestedCollectionsDerived` AS `n0` -) AS `t` +) AS `u` LEFT JOIN ( SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, 'BaseReferenceOnBase' AS `Discriminator` FROM `BaseReferencesOnBase` AS `b` UNION ALL - SELECT `d1`.`Id`, `d1`.`BaseParentId`, `d1`.`Name`, 'DerivedReferenceOnBase' AS `Discriminator` - FROM `DerivedReferencesOnBase` AS `d1` -) AS `t0` ON `t`.`ParentReferenceId` = `t0`.`Id`) + SELECT `d`.`Id`, `d`.`BaseParentId`, `d`.`Name`, 'DerivedReferenceOnBase' AS `Discriminator` + FROM `DerivedReferencesOnBase` AS `d` +) AS `u0` ON `u`.`ParentReferenceId` = `u0`.`Id`) LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` FROM `BaseEntities` AS `b0` UNION ALL - SELECT `d2`.`Id`, `d2`.`Name`, `d2`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` - FROM `DerivedEntities` AS `d2` -) AS `t1` ON `t0`.`BaseParentId` = `t1`.`Id`) -LEFT JOIN `OwnedReferences` AS `o` ON `t1`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t1`.`Id` = `d`.`Id`) -LEFT JOIN `OwnedCollections` AS `o0` ON `t1`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `t1`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` -ORDER BY `t`.`Id`, `t0`.`Id`, `t1`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId` + SELECT `d0`.`Id`, `d0`.`Name`, `d0`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d0` +) AS `u1` ON `u0`.`BaseParentId` = `u1`.`Id`) +LEFT JOIN `OwnedReferences` AS `o` ON `u1`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u1`.`Id` = `d1`.`Id`) +LEFT JOIN `OwnedCollections` AS `o0` ON `u1`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `u1`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `u`.`Id`, `u0`.`Id`, `u1`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d2`.`DerivedInheritanceRelationshipEntityId` """); } @@ -1106,34 +1106,34 @@ public override async Task Nested_include_with_inheritance_reference_reference(b await base.Nested_include_with_inheritance_reference_reference(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`Name`, `t`.`BaseId`, `t`.`Discriminator`, `t0`.`Id`, `t1`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `t0`.`BaseParentId`, `t0`.`Name`, `t0`.`Discriminator`, `t1`.`Name`, `t1`.`ParentCollectionId`, `t1`.`ParentReferenceId`, `t1`.`Discriminator` + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`BaseId`, `u`.`Discriminator`, `u0`.`Id`, `u1`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `d1`.`OwnedReferenceOnDerived_Id`, `d1`.`OwnedReferenceOnDerived_Name`, `u0`.`BaseParentId`, `u0`.`Name`, `u0`.`Discriminator`, `u1`.`Name`, `u1`.`ParentCollectionId`, `u1`.`ParentReferenceId`, `u1`.`Discriminator` FROM (((((( SELECT `b`.`Id`, `b`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` FROM `BaseEntities` AS `b` UNION ALL - SELECT `d1`.`Id`, `d1`.`Name`, `d1`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` - FROM `DerivedEntities` AS `d1` -) AS `t` + SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d` +) AS `u` LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, 'BaseReferenceOnBase' AS `Discriminator` FROM `BaseReferencesOnBase` AS `b0` UNION ALL - SELECT `d2`.`Id`, `d2`.`BaseParentId`, `d2`.`Name`, 'DerivedReferenceOnBase' AS `Discriminator` - FROM `DerivedReferencesOnBase` AS `d2` -) AS `t0` ON `t`.`Id` = `t0`.`BaseParentId`) + SELECT `d0`.`Id`, `d0`.`BaseParentId`, `d0`.`Name`, 'DerivedReferenceOnBase' AS `Discriminator` + FROM `DerivedReferencesOnBase` AS `d0` +) AS `u0` ON `u`.`Id` = `u0`.`BaseParentId`) LEFT JOIN ( SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, 'NestedReferenceBase' AS `Discriminator` FROM `NestedReferences` AS `n` UNION ALL SELECT `n0`.`Id`, `n0`.`Name`, `n0`.`ParentCollectionId`, `n0`.`ParentReferenceId`, 'NestedReferenceDerived' AS `Discriminator` FROM `NestedReferencesDerived` AS `n0` -) AS `t1` ON `t0`.`Id` = `t1`.`ParentReferenceId`) -LEFT JOIN `OwnedReferences` AS `o` ON `t`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`Id` = `d`.`Id`) -LEFT JOIN `OwnedCollections` AS `o0` ON `t`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `t`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` -ORDER BY `t`.`Id`, `t0`.`Id`, `t1`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId` +) AS `u1` ON `u0`.`Id` = `u1`.`ParentReferenceId`) +LEFT JOIN `OwnedReferences` AS `o` ON `u`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) +LEFT JOIN `OwnedCollections` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `u`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `u`.`Id`, `u0`.`Id`, `u1`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d2`.`DerivedInheritanceRelationshipEntityId` """); } @@ -1142,27 +1142,27 @@ public override async Task Nested_include_with_inheritance_reference_reference_o await base.Nested_include_with_inheritance_reference_reference_on_base(async); AssertSql( -""" -SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, `t`.`Id`, `t0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `t`.`BaseParentId`, `t`.`Name`, `t`.`Discriminator`, `t0`.`Name`, `t0`.`ParentCollectionId`, `t0`.`ParentReferenceId`, `t0`.`Discriminator` + """ +SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, `u`.`Id`, `u0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `u`.`BaseParentId`, `u`.`Name`, `u`.`Discriminator`, `u0`.`Name`, `u0`.`ParentCollectionId`, `u0`.`ParentReferenceId`, `u0`.`Discriminator` FROM ((((`DerivedEntities` AS `d` LEFT JOIN ( SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, 'BaseReferenceOnBase' AS `Discriminator` FROM `BaseReferencesOnBase` AS `b` UNION ALL - SELECT `d1`.`Id`, `d1`.`BaseParentId`, `d1`.`Name`, 'DerivedReferenceOnBase' AS `Discriminator` - FROM `DerivedReferencesOnBase` AS `d1` -) AS `t` ON `d`.`Id` = `t`.`BaseParentId`) + SELECT `d0`.`Id`, `d0`.`BaseParentId`, `d0`.`Name`, 'DerivedReferenceOnBase' AS `Discriminator` + FROM `DerivedReferencesOnBase` AS `d0` +) AS `u` ON `d`.`Id` = `u`.`BaseParentId`) LEFT JOIN ( SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, 'NestedReferenceBase' AS `Discriminator` FROM `NestedReferences` AS `n` UNION ALL SELECT `n0`.`Id`, `n0`.`Name`, `n0`.`ParentCollectionId`, `n0`.`ParentReferenceId`, 'NestedReferenceDerived' AS `Discriminator` FROM `NestedReferencesDerived` AS `n0` -) AS `t0` ON `t`.`Id` = `t0`.`ParentReferenceId`) +) AS `u0` ON `u`.`Id` = `u0`.`ParentReferenceId`) LEFT JOIN `OwnedReferences` AS `o` ON `d`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) LEFT JOIN `OwnedCollections` AS `o0` ON `d`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `d`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` -ORDER BY `d`.`Id`, `t`.`Id`, `t0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId` +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `d`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `d`.`Id`, `u`.`Id`, `u0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` """); } @@ -1171,34 +1171,34 @@ public override async Task Nested_include_with_inheritance_reference_reference_r await base.Nested_include_with_inheritance_reference_reference_reverse(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`Name`, `t`.`ParentCollectionId`, `t`.`ParentReferenceId`, `t`.`Discriminator`, `t0`.`Id`, `t0`.`BaseParentId`, `t0`.`Name`, `t0`.`Discriminator`, `t1`.`Id`, `t1`.`Name`, `t1`.`BaseId`, `t1`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`ParentCollectionId`, `u`.`ParentReferenceId`, `u`.`Discriminator`, `u0`.`Id`, `u0`.`BaseParentId`, `u0`.`Name`, `u0`.`Discriminator`, `u1`.`Id`, `u1`.`Name`, `u1`.`BaseId`, `u1`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `d1`.`OwnedReferenceOnDerived_Id`, `d1`.`OwnedReferenceOnDerived_Name` FROM (((((( SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, 'NestedReferenceBase' AS `Discriminator` FROM `NestedReferences` AS `n` UNION ALL SELECT `n0`.`Id`, `n0`.`Name`, `n0`.`ParentCollectionId`, `n0`.`ParentReferenceId`, 'NestedReferenceDerived' AS `Discriminator` FROM `NestedReferencesDerived` AS `n0` -) AS `t` +) AS `u` LEFT JOIN ( SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, 'BaseReferenceOnBase' AS `Discriminator` FROM `BaseReferencesOnBase` AS `b` UNION ALL - SELECT `d1`.`Id`, `d1`.`BaseParentId`, `d1`.`Name`, 'DerivedReferenceOnBase' AS `Discriminator` - FROM `DerivedReferencesOnBase` AS `d1` -) AS `t0` ON `t`.`ParentReferenceId` = `t0`.`Id`) + SELECT `d`.`Id`, `d`.`BaseParentId`, `d`.`Name`, 'DerivedReferenceOnBase' AS `Discriminator` + FROM `DerivedReferencesOnBase` AS `d` +) AS `u0` ON `u`.`ParentReferenceId` = `u0`.`Id`) LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` FROM `BaseEntities` AS `b0` UNION ALL - SELECT `d2`.`Id`, `d2`.`Name`, `d2`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` - FROM `DerivedEntities` AS `d2` -) AS `t1` ON `t0`.`BaseParentId` = `t1`.`Id`) -LEFT JOIN `OwnedReferences` AS `o` ON `t1`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t1`.`Id` = `d`.`Id`) -LEFT JOIN `OwnedCollections` AS `o0` ON `t1`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `t1`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` -ORDER BY `t`.`Id`, `t0`.`Id`, `t1`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId` + SELECT `d0`.`Id`, `d0`.`Name`, `d0`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d0` +) AS `u1` ON `u0`.`BaseParentId` = `u1`.`Id`) +LEFT JOIN `OwnedReferences` AS `o` ON `u1`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u1`.`Id` = `d1`.`Id`) +LEFT JOIN `OwnedCollections` AS `o0` ON `u1`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `u1`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `u`.`Id`, `u0`.`Id`, `u1`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d2`.`DerivedInheritanceRelationshipEntityId` """); } @@ -1208,22 +1208,22 @@ public override async Task Collection_projection_on_base_type(bool async) AssertSql( """ -SELECT `t`.`Id`, `t0`.`Id`, `t0`.`BaseParentId`, `t0`.`Name`, `t0`.`DerivedProperty`, `t0`.`Discriminator` +SELECT `u`.`Id`, `u0`.`Id`, `u0`.`BaseParentId`, `u0`.`Name`, `u0`.`DerivedProperty`, `u0`.`Discriminator` FROM ( SELECT `b`.`Id` FROM `BaseEntities` AS `b` UNION ALL SELECT `d`.`Id` FROM `DerivedEntities` AS `d` -) AS `t` +) AS `u` LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, CVar(NULL) AS `DerivedProperty`, 'BaseCollectionOnBase' AS `Discriminator` FROM `BaseCollectionsOnBase` AS `b0` UNION ALL SELECT `d0`.`Id`, `d0`.`BaseParentId`, `d0`.`Name`, `d0`.`DerivedProperty`, 'DerivedCollectionOnBase' AS `Discriminator` FROM `DerivedCollectionsOnBase` AS `d0` -) AS `t0` ON `t`.`Id` = `t0`.`BaseParentId` -ORDER BY `t`.`Id` +) AS `u0` ON `u`.`Id` = `u0`.`BaseParentId` +ORDER BY `u`.`Id` """); } @@ -1233,21 +1233,21 @@ public override async Task Include_on_derived_type_with_queryable_Cast(bool asyn AssertSql( """ -SELECT `t`.`Id`, `t`.`Name`, `t`.`BaseId`, `t`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `d1`.`Id`, `d1`.`Name`, `d1`.`ParentId`, `d1`.`DerivedInheritanceRelationshipEntityId` +SELECT `u`.`Id`, `u`.`Name`, `u`.`BaseId`, `u`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `o`.`Id`, `o`.`Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name`, `d2`.`Id`, `d2`.`Name`, `d2`.`ParentId`, `d2`.`DerivedInheritanceRelationshipEntityId` FROM ((((( SELECT `b`.`Id`, `b`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` FROM `BaseEntities` AS `b` UNION ALL - SELECT `d2`.`Id`, `d2`.`Name`, `d2`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` - FROM `DerivedEntities` AS `d2` -) AS `t` -LEFT JOIN `OwnedReferences` AS `o` ON `t`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`Id` = `d`.`Id`) -LEFT JOIN `OwnedCollections` AS `o0` ON `t`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `t`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedCollectionsOnDerived` AS `d1` ON `t`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` -WHERE `t`.`Id` >= 4 -ORDER BY `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id` + SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o` ON `u`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d0` ON `u`.`Id` = `d0`.`Id`) +LEFT JOIN `OwnedCollections` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `u`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedCollectionsOnDerived` AS `d2` ON `u`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +WHERE `u`.`Id` >= 4 +ORDER BY `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id` """); } @@ -1256,69 +1256,69 @@ public override async Task Include_collection_with_inheritance_split(bool async) await base.Include_collection_with_inheritance_split(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`Name`, `t`.`BaseId`, `t`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o`.`Id`, `o`.`Name`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`BaseId`, `u`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o`.`Id`, `o`.`Name`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` FROM (( SELECT `b`.`Id`, `b`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` FROM `BaseEntities` AS `b` UNION ALL - SELECT `d0`.`Id`, `d0`.`Name`, `d0`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` - FROM `DerivedEntities` AS `d0` -) AS `t` -LEFT JOIN `OwnedReferences` AS `o` ON `t`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`Id` = `d`.`Id` -ORDER BY `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o` ON `u`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d0` ON `u`.`Id` = `d0`.`Id` +ORDER BY `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id` """, - // - """ -SELECT `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + // + """ +SELECT `o1`.`BaseInheritanceRelationshipEntityId`, `o1`.`Id`, `o1`.`Name`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` FROM ((( SELECT `b`.`Id` FROM `BaseEntities` AS `b` UNION ALL - SELECT `d0`.`Id` - FROM `DerivedEntities` AS `d0` -) AS `t` -LEFT JOIN `OwnedReferences` AS `o` ON `t`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`Id` = `d`.`Id`) -INNER JOIN `OwnedCollections` AS `o0` ON `t`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId` -ORDER BY `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + SELECT `d`.`Id` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) +INNER JOIN `OwnedCollections` AS `o1` ON `u`.`Id` = `o1`.`BaseInheritanceRelationshipEntityId` +ORDER BY `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` """, - // - """ -SELECT `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + // + """ +SELECT `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` FROM ((( SELECT `b`.`Id` FROM `BaseEntities` AS `b` UNION ALL - SELECT `d1`.`Id` - FROM `DerivedEntities` AS `d1` -) AS `t` -LEFT JOIN `OwnedReferences` AS `o` ON `t`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`Id` = `d`.`Id`) -INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `t`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` -ORDER BY `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + SELECT `d`.`Id` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) +INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `u`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` """, - // - """ -SELECT `t0`.`Id`, `t0`.`BaseParentId`, `t0`.`Name`, `t0`.`DerivedProperty`, `t0`.`Discriminator`, `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + // + """ +SELECT `u0`.`Id`, `u0`.`BaseParentId`, `u0`.`Name`, `u0`.`DerivedProperty`, `u0`.`Discriminator`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` FROM ((( SELECT `b`.`Id` FROM `BaseEntities` AS `b` UNION ALL - SELECT `d0`.`Id` - FROM `DerivedEntities` AS `d0` -) AS `t` -LEFT JOIN `OwnedReferences` AS `o` ON `t`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`Id` = `d`.`Id`) + SELECT `d`.`Id` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) INNER JOIN ( SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, CVar(NULL) AS `DerivedProperty`, 'BaseCollectionOnBase' AS `Discriminator` FROM `BaseCollectionsOnBase` AS `b0` UNION ALL - SELECT `d1`.`Id`, `d1`.`BaseParentId`, `d1`.`Name`, `d1`.`DerivedProperty`, 'DerivedCollectionOnBase' AS `Discriminator` - FROM `DerivedCollectionsOnBase` AS `d1` -) AS `t0` ON `t`.`Id` = `t0`.`BaseParentId` -ORDER BY `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + SELECT `d3`.`Id`, `d3`.`BaseParentId`, `d3`.`Name`, `d3`.`DerivedProperty`, 'DerivedCollectionOnBase' AS `Discriminator` + FROM `DerivedCollectionsOnBase` AS `d3` +) AS `u0` ON `u`.`Id` = `u0`.`BaseParentId` +ORDER BY `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` """); } @@ -1327,71 +1327,71 @@ public override async Task Include_collection_with_inheritance_reverse_split(boo await base.Include_collection_with_inheritance_reverse_split(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`BaseParentId`, `t`.`Name`, `t`.`DerivedProperty`, `t`.`Discriminator`, `t0`.`Id`, `t0`.`Name`, `t0`.`BaseId`, `t0`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o`.`Id`, `o`.`Name`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` + """ +SELECT `u`.`Id`, `u`.`BaseParentId`, `u`.`Name`, `u`.`DerivedProperty`, `u`.`Discriminator`, `u0`.`Id`, `u0`.`Name`, `u0`.`BaseId`, `u0`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o`.`Id`, `o`.`Name`, `d1`.`OwnedReferenceOnDerived_Id`, `d1`.`OwnedReferenceOnDerived_Name` FROM ((( SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, CVar(NULL) AS `DerivedProperty`, 'BaseCollectionOnBase' AS `Discriminator` FROM `BaseCollectionsOnBase` AS `b` UNION ALL - SELECT `d0`.`Id`, `d0`.`BaseParentId`, `d0`.`Name`, `d0`.`DerivedProperty`, 'DerivedCollectionOnBase' AS `Discriminator` - FROM `DerivedCollectionsOnBase` AS `d0` -) AS `t` + SELECT `d`.`Id`, `d`.`BaseParentId`, `d`.`Name`, `d`.`DerivedProperty`, 'DerivedCollectionOnBase' AS `Discriminator` + FROM `DerivedCollectionsOnBase` AS `d` +) AS `u` LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` FROM `BaseEntities` AS `b0` UNION ALL - SELECT `d1`.`Id`, `d1`.`Name`, `d1`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` - FROM `DerivedEntities` AS `d1` -) AS `t0` ON `t`.`BaseParentId` = `t0`.`Id`) -LEFT JOIN `OwnedReferences` AS `o` ON `t0`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t0`.`Id` = `d`.`Id` -ORDER BY `t`.`Id`, `t0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + SELECT `d0`.`Id`, `d0`.`Name`, `d0`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d0` +) AS `u0` ON `u`.`BaseParentId` = `u0`.`Id`) +LEFT JOIN `OwnedReferences` AS `o` ON `u0`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u0`.`Id` = `d1`.`Id` +ORDER BY `u`.`Id`, `u0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` """, - // - """ -SELECT `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `t`.`Id`, `t0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + // + """ +SELECT `o1`.`BaseInheritanceRelationshipEntityId`, `o1`.`Id`, `o1`.`Name`, `u`.`Id`, `u0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d2`.`Id` FROM (((( SELECT `b`.`Id`, `b`.`BaseParentId` FROM `BaseCollectionsOnBase` AS `b` UNION ALL - SELECT `d0`.`Id`, `d0`.`BaseParentId` - FROM `DerivedCollectionsOnBase` AS `d0` -) AS `t` + SELECT `d`.`Id`, `d`.`BaseParentId` + FROM `DerivedCollectionsOnBase` AS `d` +) AS `u` LEFT JOIN ( SELECT `b0`.`Id` FROM `BaseEntities` AS `b0` UNION ALL - SELECT `d1`.`Id` - FROM `DerivedEntities` AS `d1` -) AS `t0` ON `t`.`BaseParentId` = `t0`.`Id`) -LEFT JOIN `OwnedReferences` AS `o` ON `t0`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t0`.`Id` = `d`.`Id`) -LEFT JOIN `OwnedCollections` AS `o0` ON `t0`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId` -WHERE `t0`.`Id` IS NOT NULL AND `o0`.`BaseInheritanceRelationshipEntityId` IS NOT NULL -ORDER BY `t`.`Id`, `t0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + SELECT `d0`.`Id` + FROM `DerivedEntities` AS `d0` +) AS `u0` ON `u`.`BaseParentId` = `u0`.`Id`) +LEFT JOIN `OwnedReferences` AS `o0` ON `u0`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d2` ON `u0`.`Id` = `d2`.`Id`) +LEFT JOIN `OwnedCollections` AS `o1` ON `u0`.`Id` = `o1`.`BaseInheritanceRelationshipEntityId` +WHERE `u0`.`Id` IS NOT NULL AND `o1`.`BaseInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `u`.`Id`, `u0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d2`.`Id` """, - // - """ -SELECT `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `t`.`Id`, `t0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + // + """ +SELECT `d3`.`DerivedInheritanceRelationshipEntityId`, `d3`.`Id`, `d3`.`Name`, `u`.`Id`, `u0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d2`.`Id` FROM (((( SELECT `b`.`Id`, `b`.`BaseParentId` FROM `BaseCollectionsOnBase` AS `b` UNION ALL - SELECT `d1`.`Id`, `d1`.`BaseParentId` - FROM `DerivedCollectionsOnBase` AS `d1` -) AS `t` + SELECT `d`.`Id`, `d`.`BaseParentId` + FROM `DerivedCollectionsOnBase` AS `d` +) AS `u` LEFT JOIN ( SELECT `b0`.`Id` FROM `BaseEntities` AS `b0` UNION ALL - SELECT `d2`.`Id` - FROM `DerivedEntities` AS `d2` -) AS `t0` ON `t`.`BaseParentId` = `t0`.`Id`) -LEFT JOIN `OwnedReferences` AS `o` ON `t0`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t0`.`Id` = `d`.`Id`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `t0`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` -WHERE `t0`.`Id` IS NOT NULL AND `d0`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL -ORDER BY `t`.`Id`, `t0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + SELECT `d0`.`Id` + FROM `DerivedEntities` AS `d0` +) AS `u0` ON `u`.`BaseParentId` = `u0`.`Id`) +LEFT JOIN `OwnedReferences` AS `o0` ON `u0`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d2` ON `u0`.`Id` = `d2`.`Id`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d3` ON `u0`.`Id` = `d3`.`DerivedInheritanceRelationshipEntityId` +WHERE `u0`.`Id` IS NOT NULL AND `d3`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `u`.`Id`, `u0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d2`.`Id` """); } @@ -1400,73 +1400,73 @@ public override async Task Include_collection_with_inheritance_with_filter_split await base.Include_collection_with_inheritance_with_filter_split(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`Name`, `t`.`BaseId`, `t`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o`.`Id`, `o`.`Name`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`BaseId`, `u`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o`.`Id`, `o`.`Name`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` FROM (( SELECT `b`.`Id`, `b`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` FROM `BaseEntities` AS `b` UNION ALL - SELECT `d0`.`Id`, `d0`.`Name`, `d0`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` - FROM `DerivedEntities` AS `d0` -) AS `t` -LEFT JOIN `OwnedReferences` AS `o` ON `t`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`Id` = `d`.`Id` -WHERE `t`.`Name` <> 'Bar' OR `t`.`Name` IS NULL -ORDER BY `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o` ON `u`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d0` ON `u`.`Id` = `d0`.`Id` +WHERE `u`.`Name` <> 'Bar' OR `u`.`Name` IS NULL +ORDER BY `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id` """, - // - """ -SELECT `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + // + """ +SELECT `o1`.`BaseInheritanceRelationshipEntityId`, `o1`.`Id`, `o1`.`Name`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` FROM ((( SELECT `b`.`Id`, `b`.`Name` FROM `BaseEntities` AS `b` UNION ALL - SELECT `d0`.`Id`, `d0`.`Name` - FROM `DerivedEntities` AS `d0` -) AS `t` -LEFT JOIN `OwnedReferences` AS `o` ON `t`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`Id` = `d`.`Id`) -INNER JOIN `OwnedCollections` AS `o0` ON `t`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId` -WHERE `t`.`Name` <> 'Bar' OR `t`.`Name` IS NULL -ORDER BY `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + SELECT `d`.`Id`, `d`.`Name` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) +INNER JOIN `OwnedCollections` AS `o1` ON `u`.`Id` = `o1`.`BaseInheritanceRelationshipEntityId` +WHERE `u`.`Name` <> 'Bar' OR `u`.`Name` IS NULL +ORDER BY `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` """, - // - """ -SELECT `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + // + """ +SELECT `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` FROM ((( SELECT `b`.`Id`, `b`.`Name` FROM `BaseEntities` AS `b` UNION ALL - SELECT `d1`.`Id`, `d1`.`Name` - FROM `DerivedEntities` AS `d1` -) AS `t` -LEFT JOIN `OwnedReferences` AS `o` ON `t`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`Id` = `d`.`Id`) -INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `t`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` -WHERE `t`.`Name` <> 'Bar' OR `t`.`Name` IS NULL -ORDER BY `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + SELECT `d`.`Id`, `d`.`Name` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) +INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `u`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +WHERE `u`.`Name` <> 'Bar' OR `u`.`Name` IS NULL +ORDER BY `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` """, - // - """ -SELECT `t0`.`Id`, `t0`.`BaseParentId`, `t0`.`Name`, `t0`.`DerivedProperty`, `t0`.`Discriminator`, `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + // + """ +SELECT `u0`.`Id`, `u0`.`BaseParentId`, `u0`.`Name`, `u0`.`DerivedProperty`, `u0`.`Discriminator`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` FROM ((( SELECT `b`.`Id`, `b`.`Name` FROM `BaseEntities` AS `b` UNION ALL - SELECT `d0`.`Id`, `d0`.`Name` - FROM `DerivedEntities` AS `d0` -) AS `t` -LEFT JOIN `OwnedReferences` AS `o` ON `t`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`Id` = `d`.`Id`) + SELECT `d`.`Id`, `d`.`Name` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) INNER JOIN ( SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, CVar(NULL) AS `DerivedProperty`, 'BaseCollectionOnBase' AS `Discriminator` FROM `BaseCollectionsOnBase` AS `b0` UNION ALL - SELECT `d1`.`Id`, `d1`.`BaseParentId`, `d1`.`Name`, `d1`.`DerivedProperty`, 'DerivedCollectionOnBase' AS `Discriminator` - FROM `DerivedCollectionsOnBase` AS `d1` -) AS `t0` ON `t`.`Id` = `t0`.`BaseParentId` -WHERE `t`.`Name` <> 'Bar' OR `t`.`Name` IS NULL -ORDER BY `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + SELECT `d3`.`Id`, `d3`.`BaseParentId`, `d3`.`Name`, `d3`.`DerivedProperty`, 'DerivedCollectionOnBase' AS `Discriminator` + FROM `DerivedCollectionsOnBase` AS `d3` +) AS `u0` ON `u`.`Id` = `u0`.`BaseParentId` +WHERE `u`.`Name` <> 'Bar' OR `u`.`Name` IS NULL +ORDER BY `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` """); } @@ -1475,72 +1475,72 @@ public override async Task Include_collection_with_inheritance_with_filter_rever await base.Include_collection_with_inheritance_with_filter_reverse_split(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`BaseParentId`, `t`.`Name`, `t`.`DerivedProperty`, `t`.`Discriminator`, `t0`.`Id`, `t0`.`Name`, `t0`.`BaseId`, `t0`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o`.`Id`, `o`.`Name`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` + """ +SELECT `u`.`Id`, `u`.`BaseParentId`, `u`.`Name`, `u`.`DerivedProperty`, `u`.`Discriminator`, `u0`.`Id`, `u0`.`Name`, `u0`.`BaseId`, `u0`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o`.`Id`, `o`.`Name`, `d1`.`OwnedReferenceOnDerived_Id`, `d1`.`OwnedReferenceOnDerived_Name` FROM ((( SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, CVar(NULL) AS `DerivedProperty`, 'BaseCollectionOnBase' AS `Discriminator` FROM `BaseCollectionsOnBase` AS `b` UNION ALL - SELECT `d0`.`Id`, `d0`.`BaseParentId`, `d0`.`Name`, `d0`.`DerivedProperty`, 'DerivedCollectionOnBase' AS `Discriminator` - FROM `DerivedCollectionsOnBase` AS `d0` -) AS `t` + SELECT `d`.`Id`, `d`.`BaseParentId`, `d`.`Name`, `d`.`DerivedProperty`, 'DerivedCollectionOnBase' AS `Discriminator` + FROM `DerivedCollectionsOnBase` AS `d` +) AS `u` LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` FROM `BaseEntities` AS `b0` UNION ALL - SELECT `d1`.`Id`, `d1`.`Name`, `d1`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` - FROM `DerivedEntities` AS `d1` -) AS `t0` ON `t`.`BaseParentId` = `t0`.`Id`) -LEFT JOIN `OwnedReferences` AS `o` ON `t0`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t0`.`Id` = `d`.`Id` -WHERE `t`.`Name` <> 'Bar' OR `t`.`Name` IS NULL -ORDER BY `t`.`Id`, `t0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + SELECT `d0`.`Id`, `d0`.`Name`, `d0`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d0` +) AS `u0` ON `u`.`BaseParentId` = `u0`.`Id`) +LEFT JOIN `OwnedReferences` AS `o` ON `u0`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u0`.`Id` = `d1`.`Id` +WHERE `u`.`Name` <> 'Bar' OR `u`.`Name` IS NULL +ORDER BY `u`.`Id`, `u0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` """, - // - """ -SELECT `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `t`.`Id`, `t0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + // + """ +SELECT `o1`.`BaseInheritanceRelationshipEntityId`, `o1`.`Id`, `o1`.`Name`, `u`.`Id`, `u0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d2`.`Id` FROM (((( SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name` FROM `BaseCollectionsOnBase` AS `b` UNION ALL - SELECT `d0`.`Id`, `d0`.`BaseParentId`, `d0`.`Name` - FROM `DerivedCollectionsOnBase` AS `d0` -) AS `t` + SELECT `d`.`Id`, `d`.`BaseParentId`, `d`.`Name` + FROM `DerivedCollectionsOnBase` AS `d` +) AS `u` LEFT JOIN ( SELECT `b0`.`Id` FROM `BaseEntities` AS `b0` UNION ALL - SELECT `d1`.`Id` - FROM `DerivedEntities` AS `d1` -) AS `t0` ON `t`.`BaseParentId` = `t0`.`Id`) -LEFT JOIN `OwnedReferences` AS `o` ON `t0`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t0`.`Id` = `d`.`Id`) -LEFT JOIN `OwnedCollections` AS `o0` ON `t0`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId` -WHERE (`t`.`Name` <> 'Bar' OR `t`.`Name` IS NULL) AND (`t0`.`Id` IS NOT NULL AND `o0`.`BaseInheritanceRelationshipEntityId` IS NOT NULL) -ORDER BY `t`.`Id`, `t0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + SELECT `d0`.`Id` + FROM `DerivedEntities` AS `d0` +) AS `u0` ON `u`.`BaseParentId` = `u0`.`Id`) +LEFT JOIN `OwnedReferences` AS `o0` ON `u0`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d2` ON `u0`.`Id` = `d2`.`Id`) +LEFT JOIN `OwnedCollections` AS `o1` ON `u0`.`Id` = `o1`.`BaseInheritanceRelationshipEntityId` +WHERE (`u`.`Name` <> 'Bar' OR `u`.`Name` IS NULL) AND (`u0`.`Id` IS NOT NULL AND `o1`.`BaseInheritanceRelationshipEntityId` IS NOT NULL) +ORDER BY `u`.`Id`, `u0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d2`.`Id` """, - // - """ -SELECT `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `t`.`Id`, `t0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + // + """ +SELECT `d3`.`DerivedInheritanceRelationshipEntityId`, `d3`.`Id`, `d3`.`Name`, `u`.`Id`, `u0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d2`.`Id` FROM (((( SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name` FROM `BaseCollectionsOnBase` AS `b` UNION ALL - SELECT `d1`.`Id`, `d1`.`BaseParentId`, `d1`.`Name` - FROM `DerivedCollectionsOnBase` AS `d1` -) AS `t` + SELECT `d`.`Id`, `d`.`BaseParentId`, `d`.`Name` + FROM `DerivedCollectionsOnBase` AS `d` +) AS `u` LEFT JOIN ( SELECT `b0`.`Id` FROM `BaseEntities` AS `b0` UNION ALL - SELECT `d2`.`Id` - FROM `DerivedEntities` AS `d2` -) AS `t0` ON `t`.`BaseParentId` = `t0`.`Id`) -LEFT JOIN `OwnedReferences` AS `o` ON `t0`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t0`.`Id` = `d`.`Id`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `t0`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` -WHERE (`t`.`Name` <> 'Bar' OR `t`.`Name` IS NULL) AND (`t0`.`Id` IS NOT NULL AND `d0`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL) -ORDER BY `t`.`Id`, `t0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + SELECT `d0`.`Id` + FROM `DerivedEntities` AS `d0` +) AS `u0` ON `u`.`BaseParentId` = `u0`.`Id`) +LEFT JOIN `OwnedReferences` AS `o0` ON `u0`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d2` ON `u0`.`Id` = `d2`.`Id`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d3` ON `u0`.`Id` = `d3`.`DerivedInheritanceRelationshipEntityId` +WHERE (`u`.`Name` <> 'Bar' OR `u`.`Name` IS NULL) AND (`u0`.`Id` IS NOT NULL AND `d3`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL) +ORDER BY `u`.`Id`, `u0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d2`.`Id` """); } @@ -1549,63 +1549,63 @@ public override async Task Include_collection_without_inheritance_split(bool asy await base.Include_collection_without_inheritance_split(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`Name`, `t`.`BaseId`, `t`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o`.`Id`, `o`.`Name`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`BaseId`, `u`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o`.`Id`, `o`.`Name`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` FROM (( SELECT `b`.`Id`, `b`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` FROM `BaseEntities` AS `b` UNION ALL - SELECT `d0`.`Id`, `d0`.`Name`, `d0`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` - FROM `DerivedEntities` AS `d0` -) AS `t` -LEFT JOIN `OwnedReferences` AS `o` ON `t`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`Id` = `d`.`Id` -ORDER BY `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o` ON `u`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d0` ON `u`.`Id` = `d0`.`Id` +ORDER BY `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id` """, - // - """ -SELECT `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + // + """ +SELECT `o1`.`BaseInheritanceRelationshipEntityId`, `o1`.`Id`, `o1`.`Name`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` FROM ((( SELECT `b`.`Id` FROM `BaseEntities` AS `b` UNION ALL - SELECT `d0`.`Id` - FROM `DerivedEntities` AS `d0` -) AS `t` -LEFT JOIN `OwnedReferences` AS `o` ON `t`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`Id` = `d`.`Id`) -INNER JOIN `OwnedCollections` AS `o0` ON `t`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId` -ORDER BY `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + SELECT `d`.`Id` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) +INNER JOIN `OwnedCollections` AS `o1` ON `u`.`Id` = `o1`.`BaseInheritanceRelationshipEntityId` +ORDER BY `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` """, - // - """ -SELECT `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + // + """ +SELECT `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` FROM ((( SELECT `b`.`Id` FROM `BaseEntities` AS `b` UNION ALL - SELECT `d1`.`Id` - FROM `DerivedEntities` AS `d1` -) AS `t` -LEFT JOIN `OwnedReferences` AS `o` ON `t`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`Id` = `d`.`Id`) -INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `t`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` -ORDER BY `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + SELECT `d`.`Id` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) +INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `u`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` """, - // - """ -SELECT `c`.`Id`, `c`.`Name`, `c`.`ParentId`, `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + // + """ +SELECT `c`.`Id`, `c`.`Name`, `c`.`ParentId`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` FROM ((( SELECT `b`.`Id` FROM `BaseEntities` AS `b` UNION ALL - SELECT `d0`.`Id` - FROM `DerivedEntities` AS `d0` -) AS `t` -LEFT JOIN `OwnedReferences` AS `o` ON `t`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`Id` = `d`.`Id`) -INNER JOIN `CollectionsOnBase` AS `c` ON `t`.`Id` = `c`.`ParentId` -ORDER BY `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + SELECT `d`.`Id` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) +INNER JOIN `CollectionsOnBase` AS `c` ON `u`.`Id` = `c`.`ParentId` +ORDER BY `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` """); } @@ -1614,53 +1614,53 @@ public override async Task Include_collection_without_inheritance_reverse_split( await base.Include_collection_without_inheritance_reverse_split(async); AssertSql( -""" -SELECT `c`.`Id`, `c`.`Name`, `c`.`ParentId`, `t`.`Id`, `t`.`Name`, `t`.`BaseId`, `t`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o`.`Id`, `o`.`Name`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` + """ +SELECT `c`.`Id`, `c`.`Name`, `c`.`ParentId`, `u`.`Id`, `u`.`Name`, `u`.`BaseId`, `u`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o`.`Id`, `o`.`Name`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` FROM ((`CollectionsOnBase` AS `c` LEFT JOIN ( SELECT `b`.`Id`, `b`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` FROM `BaseEntities` AS `b` UNION ALL - SELECT `d0`.`Id`, `d0`.`Name`, `d0`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` - FROM `DerivedEntities` AS `d0` -) AS `t` ON `c`.`ParentId` = `t`.`Id`) -LEFT JOIN `OwnedReferences` AS `o` ON `t`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`Id` = `d`.`Id` -ORDER BY `c`.`Id`, `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d` +) AS `u` ON `c`.`ParentId` = `u`.`Id`) +LEFT JOIN `OwnedReferences` AS `o` ON `u`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d0` ON `u`.`Id` = `d0`.`Id` +ORDER BY `c`.`Id`, `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id` """, - // - """ -SELECT `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `c`.`Id`, `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + // + """ +SELECT `o1`.`BaseInheritanceRelationshipEntityId`, `o1`.`Id`, `o1`.`Name`, `c`.`Id`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` FROM (((`CollectionsOnBase` AS `c` LEFT JOIN ( SELECT `b`.`Id` FROM `BaseEntities` AS `b` UNION ALL - SELECT `d0`.`Id` - FROM `DerivedEntities` AS `d0` -) AS `t` ON `c`.`ParentId` = `t`.`Id`) -LEFT JOIN `OwnedReferences` AS `o` ON `t`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`Id` = `d`.`Id`) -LEFT JOIN `OwnedCollections` AS `o0` ON `t`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId` -WHERE `t`.`Id` IS NOT NULL AND `o0`.`BaseInheritanceRelationshipEntityId` IS NOT NULL -ORDER BY `c`.`Id`, `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + SELECT `d`.`Id` + FROM `DerivedEntities` AS `d` +) AS `u` ON `c`.`ParentId` = `u`.`Id`) +LEFT JOIN `OwnedReferences` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) +LEFT JOIN `OwnedCollections` AS `o1` ON `u`.`Id` = `o1`.`BaseInheritanceRelationshipEntityId` +WHERE `u`.`Id` IS NOT NULL AND `o1`.`BaseInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `c`.`Id`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` """, - // - """ -SELECT `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `c`.`Id`, `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + // + """ +SELECT `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `c`.`Id`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` FROM (((`CollectionsOnBase` AS `c` LEFT JOIN ( SELECT `b`.`Id` FROM `BaseEntities` AS `b` UNION ALL - SELECT `d1`.`Id` - FROM `DerivedEntities` AS `d1` -) AS `t` ON `c`.`ParentId` = `t`.`Id`) -LEFT JOIN `OwnedReferences` AS `o` ON `t`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`Id` = `d`.`Id`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `t`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` -WHERE `t`.`Id` IS NOT NULL AND `d0`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL -ORDER BY `c`.`Id`, `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + SELECT `d`.`Id` + FROM `DerivedEntities` AS `d` +) AS `u` ON `c`.`ParentId` = `u`.`Id`) +LEFT JOIN `OwnedReferences` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `u`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +WHERE `u`.`Id` IS NOT NULL AND `d2`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `c`.`Id`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` """); } @@ -1669,67 +1669,67 @@ public override async Task Include_collection_without_inheritance_with_filter_sp await base.Include_collection_without_inheritance_with_filter_split(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`Name`, `t`.`BaseId`, `t`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o`.`Id`, `o`.`Name`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`BaseId`, `u`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o`.`Id`, `o`.`Name`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` FROM (( SELECT `b`.`Id`, `b`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` FROM `BaseEntities` AS `b` UNION ALL - SELECT `d0`.`Id`, `d0`.`Name`, `d0`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` - FROM `DerivedEntities` AS `d0` -) AS `t` -LEFT JOIN `OwnedReferences` AS `o` ON `t`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`Id` = `d`.`Id` -WHERE `t`.`Name` <> 'Bar' OR `t`.`Name` IS NULL -ORDER BY `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o` ON `u`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d0` ON `u`.`Id` = `d0`.`Id` +WHERE `u`.`Name` <> 'Bar' OR `u`.`Name` IS NULL +ORDER BY `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id` """, - // - """ -SELECT `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + // + """ +SELECT `o1`.`BaseInheritanceRelationshipEntityId`, `o1`.`Id`, `o1`.`Name`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` FROM ((( SELECT `b`.`Id`, `b`.`Name` FROM `BaseEntities` AS `b` UNION ALL - SELECT `d0`.`Id`, `d0`.`Name` - FROM `DerivedEntities` AS `d0` -) AS `t` -LEFT JOIN `OwnedReferences` AS `o` ON `t`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`Id` = `d`.`Id`) -INNER JOIN `OwnedCollections` AS `o0` ON `t`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId` -WHERE `t`.`Name` <> 'Bar' OR `t`.`Name` IS NULL -ORDER BY `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + SELECT `d`.`Id`, `d`.`Name` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) +INNER JOIN `OwnedCollections` AS `o1` ON `u`.`Id` = `o1`.`BaseInheritanceRelationshipEntityId` +WHERE `u`.`Name` <> 'Bar' OR `u`.`Name` IS NULL +ORDER BY `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` """, - // - """ -SELECT `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + // + """ +SELECT `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` FROM ((( SELECT `b`.`Id`, `b`.`Name` FROM `BaseEntities` AS `b` UNION ALL - SELECT `d1`.`Id`, `d1`.`Name` - FROM `DerivedEntities` AS `d1` -) AS `t` -LEFT JOIN `OwnedReferences` AS `o` ON `t`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`Id` = `d`.`Id`) -INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `t`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` -WHERE `t`.`Name` <> 'Bar' OR `t`.`Name` IS NULL -ORDER BY `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + SELECT `d`.`Id`, `d`.`Name` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) +INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `u`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +WHERE `u`.`Name` <> 'Bar' OR `u`.`Name` IS NULL +ORDER BY `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` """, - // - """ -SELECT `c`.`Id`, `c`.`Name`, `c`.`ParentId`, `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + // + """ +SELECT `c`.`Id`, `c`.`Name`, `c`.`ParentId`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` FROM ((( SELECT `b`.`Id`, `b`.`Name` FROM `BaseEntities` AS `b` UNION ALL - SELECT `d0`.`Id`, `d0`.`Name` - FROM `DerivedEntities` AS `d0` -) AS `t` -LEFT JOIN `OwnedReferences` AS `o` ON `t`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`Id` = `d`.`Id`) -INNER JOIN `CollectionsOnBase` AS `c` ON `t`.`Id` = `c`.`ParentId` -WHERE `t`.`Name` <> 'Bar' OR `t`.`Name` IS NULL -ORDER BY `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + SELECT `d`.`Id`, `d`.`Name` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) +INNER JOIN `CollectionsOnBase` AS `c` ON `u`.`Id` = `c`.`ParentId` +WHERE `u`.`Name` <> 'Bar' OR `u`.`Name` IS NULL +ORDER BY `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` """); } @@ -1738,54 +1738,54 @@ public override async Task Include_collection_without_inheritance_with_filter_re await base.Include_collection_without_inheritance_with_filter_reverse_split(async); AssertSql( -""" -SELECT `c`.`Id`, `c`.`Name`, `c`.`ParentId`, `t`.`Id`, `t`.`Name`, `t`.`BaseId`, `t`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o`.`Id`, `o`.`Name`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` + """ +SELECT `c`.`Id`, `c`.`Name`, `c`.`ParentId`, `u`.`Id`, `u`.`Name`, `u`.`BaseId`, `u`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o`.`Id`, `o`.`Name`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` FROM ((`CollectionsOnBase` AS `c` LEFT JOIN ( SELECT `b`.`Id`, `b`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` FROM `BaseEntities` AS `b` UNION ALL - SELECT `d0`.`Id`, `d0`.`Name`, `d0`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` - FROM `DerivedEntities` AS `d0` -) AS `t` ON `c`.`ParentId` = `t`.`Id`) -LEFT JOIN `OwnedReferences` AS `o` ON `t`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`Id` = `d`.`Id` + SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d` +) AS `u` ON `c`.`ParentId` = `u`.`Id`) +LEFT JOIN `OwnedReferences` AS `o` ON `u`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d0` ON `u`.`Id` = `d0`.`Id` WHERE `c`.`Name` <> 'Bar' OR `c`.`Name` IS NULL -ORDER BY `c`.`Id`, `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` +ORDER BY `c`.`Id`, `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id` """, - // - """ -SELECT `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `c`.`Id`, `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + // + """ +SELECT `o1`.`BaseInheritanceRelationshipEntityId`, `o1`.`Id`, `o1`.`Name`, `c`.`Id`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` FROM (((`CollectionsOnBase` AS `c` LEFT JOIN ( SELECT `b`.`Id` FROM `BaseEntities` AS `b` UNION ALL - SELECT `d0`.`Id` - FROM `DerivedEntities` AS `d0` -) AS `t` ON `c`.`ParentId` = `t`.`Id`) -LEFT JOIN `OwnedReferences` AS `o` ON `t`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`Id` = `d`.`Id`) -LEFT JOIN `OwnedCollections` AS `o0` ON `t`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId` -WHERE (`c`.`Name` <> 'Bar' OR `c`.`Name` IS NULL) AND (`t`.`Id` IS NOT NULL AND `o0`.`BaseInheritanceRelationshipEntityId` IS NOT NULL) -ORDER BY `c`.`Id`, `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + SELECT `d`.`Id` + FROM `DerivedEntities` AS `d` +) AS `u` ON `c`.`ParentId` = `u`.`Id`) +LEFT JOIN `OwnedReferences` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) +LEFT JOIN `OwnedCollections` AS `o1` ON `u`.`Id` = `o1`.`BaseInheritanceRelationshipEntityId` +WHERE (`c`.`Name` <> 'Bar' OR `c`.`Name` IS NULL) AND (`u`.`Id` IS NOT NULL AND `o1`.`BaseInheritanceRelationshipEntityId` IS NOT NULL) +ORDER BY `c`.`Id`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` """, - // - """ -SELECT `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `c`.`Id`, `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + // + """ +SELECT `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `c`.`Id`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` FROM (((`CollectionsOnBase` AS `c` LEFT JOIN ( SELECT `b`.`Id` FROM `BaseEntities` AS `b` UNION ALL - SELECT `d1`.`Id` - FROM `DerivedEntities` AS `d1` -) AS `t` ON `c`.`ParentId` = `t`.`Id`) -LEFT JOIN `OwnedReferences` AS `o` ON `t`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`Id` = `d`.`Id`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `t`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` -WHERE (`c`.`Name` <> 'Bar' OR `c`.`Name` IS NULL) AND (`t`.`Id` IS NOT NULL AND `d0`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL) -ORDER BY `c`.`Id`, `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + SELECT `d`.`Id` + FROM `DerivedEntities` AS `d` +) AS `u` ON `c`.`ParentId` = `u`.`Id`) +LEFT JOIN `OwnedReferences` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `u`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +WHERE (`c`.`Name` <> 'Bar' OR `c`.`Name` IS NULL) AND (`u`.`Id` IS NOT NULL AND `d2`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL) +ORDER BY `c`.`Id`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` """); } @@ -1794,41 +1794,41 @@ public override async Task Include_collection_with_inheritance_on_derived1_split await base.Include_collection_with_inheritance_on_derived1_split(async); AssertSql( -""" + """ SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, `o`.`BaseInheritanceRelationshipEntityId`, `o`.`Id`, `o`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` FROM `DerivedEntities` AS `d` LEFT JOIN `OwnedReferences` AS `o` ON `d`.`Id` = `o`.`BaseInheritanceRelationshipEntityId` ORDER BY `d`.`Id`, `o`.`BaseInheritanceRelationshipEntityId` """, - // - """ -SELECT `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `d`.`Id`, `o`.`BaseInheritanceRelationshipEntityId` + // + """ +SELECT `o1`.`BaseInheritanceRelationshipEntityId`, `o1`.`Id`, `o1`.`Name`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId` FROM (`DerivedEntities` AS `d` -LEFT JOIN `OwnedReferences` AS `o` ON `d`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -INNER JOIN `OwnedCollections` AS `o0` ON `d`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId` -ORDER BY `d`.`Id`, `o`.`BaseInheritanceRelationshipEntityId` +LEFT JOIN `OwnedReferences` AS `o0` ON `d`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +INNER JOIN `OwnedCollections` AS `o1` ON `d`.`Id` = `o1`.`BaseInheritanceRelationshipEntityId` +ORDER BY `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId` """, - // - """ -SELECT `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`Id`, `o`.`BaseInheritanceRelationshipEntityId` + // + """ +SELECT `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId` FROM (`DerivedEntities` AS `d` -LEFT JOIN `OwnedReferences` AS `o` ON `d`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `d`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` -ORDER BY `d`.`Id`, `o`.`BaseInheritanceRelationshipEntityId` +LEFT JOIN `OwnedReferences` AS `o0` ON `d`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `d`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId` """, - // - """ -SELECT `t`.`Id`, `t`.`BaseParentId`, `t`.`Name`, `t`.`DerivedProperty`, `t`.`Discriminator`, `d`.`Id`, `o`.`BaseInheritanceRelationshipEntityId` + // + """ +SELECT `u`.`Id`, `u`.`BaseParentId`, `u`.`Name`, `u`.`DerivedProperty`, `u`.`Discriminator`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId` FROM (`DerivedEntities` AS `d` -LEFT JOIN `OwnedReferences` AS `o` ON `d`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `OwnedReferences` AS `o0` ON `d`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) INNER JOIN ( SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, CVar(NULL) AS `DerivedProperty`, 'BaseCollectionOnBase' AS `Discriminator` FROM `BaseCollectionsOnBase` AS `b` UNION ALL - SELECT `d0`.`Id`, `d0`.`BaseParentId`, `d0`.`Name`, `d0`.`DerivedProperty`, 'DerivedCollectionOnBase' AS `Discriminator` - FROM `DerivedCollectionsOnBase` AS `d0` -) AS `t` ON `d`.`Id` = `t`.`BaseParentId` -ORDER BY `d`.`Id`, `o`.`BaseInheritanceRelationshipEntityId` + SELECT `d2`.`Id`, `d2`.`BaseParentId`, `d2`.`Name`, `d2`.`DerivedProperty`, 'DerivedCollectionOnBase' AS `Discriminator` + FROM `DerivedCollectionsOnBase` AS `d2` +) AS `u` ON `d`.`Id` = `u`.`BaseParentId` +ORDER BY `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId` """); } @@ -1837,41 +1837,41 @@ public override async Task Include_collection_with_inheritance_on_derived2_split await base.Include_collection_with_inheritance_on_derived2_split(async); AssertSql( -""" + """ SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, `o`.`BaseInheritanceRelationshipEntityId`, `o`.`Id`, `o`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` FROM `DerivedEntities` AS `d` LEFT JOIN `OwnedReferences` AS `o` ON `d`.`Id` = `o`.`BaseInheritanceRelationshipEntityId` ORDER BY `d`.`Id`, `o`.`BaseInheritanceRelationshipEntityId` """, - // - """ -SELECT `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `d`.`Id`, `o`.`BaseInheritanceRelationshipEntityId` + // + """ +SELECT `o1`.`BaseInheritanceRelationshipEntityId`, `o1`.`Id`, `o1`.`Name`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId` FROM (`DerivedEntities` AS `d` -LEFT JOIN `OwnedReferences` AS `o` ON `d`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -INNER JOIN `OwnedCollections` AS `o0` ON `d`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId` -ORDER BY `d`.`Id`, `o`.`BaseInheritanceRelationshipEntityId` +LEFT JOIN `OwnedReferences` AS `o0` ON `d`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +INNER JOIN `OwnedCollections` AS `o1` ON `d`.`Id` = `o1`.`BaseInheritanceRelationshipEntityId` +ORDER BY `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId` """, - // - """ -SELECT `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`Id`, `o`.`BaseInheritanceRelationshipEntityId` + // + """ +SELECT `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId` FROM (`DerivedEntities` AS `d` -LEFT JOIN `OwnedReferences` AS `o` ON `d`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `d`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` -ORDER BY `d`.`Id`, `o`.`BaseInheritanceRelationshipEntityId` +LEFT JOIN `OwnedReferences` AS `o0` ON `d`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `d`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId` """, - // - """ -SELECT `t`.`Id`, `t`.`Name`, `t`.`ParentId`, `t`.`DerivedInheritanceRelationshipEntityId`, `t`.`Discriminator`, `d`.`Id`, `o`.`BaseInheritanceRelationshipEntityId` + // + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`ParentId`, `u`.`DerivedInheritanceRelationshipEntityId`, `u`.`Discriminator`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId` FROM (`DerivedEntities` AS `d` -LEFT JOIN `OwnedReferences` AS `o` ON `d`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `OwnedReferences` AS `o0` ON `d`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) INNER JOIN ( SELECT `b`.`Id`, `b`.`Name`, `b`.`ParentId`, CVar(NULL) AS `DerivedInheritanceRelationshipEntityId`, 'BaseCollectionOnDerived' AS `Discriminator` FROM `BaseCollectionsOnDerived` AS `b` UNION ALL - SELECT `d0`.`Id`, `d0`.`Name`, `d0`.`ParentId`, `d0`.`DerivedInheritanceRelationshipEntityId`, 'DerivedCollectionOnDerived' AS `Discriminator` - FROM `DerivedCollectionsOnDerived` AS `d0` -) AS `t` ON `d`.`Id` = `t`.`ParentId` -ORDER BY `d`.`Id`, `o`.`BaseInheritanceRelationshipEntityId` + SELECT `d2`.`Id`, `d2`.`Name`, `d2`.`ParentId`, `d2`.`DerivedInheritanceRelationshipEntityId`, 'DerivedCollectionOnDerived' AS `Discriminator` + FROM `DerivedCollectionsOnDerived` AS `d2` +) AS `u` ON `d`.`Id` = `u`.`ParentId` +ORDER BY `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId` """); } @@ -1880,35 +1880,35 @@ public override async Task Include_collection_with_inheritance_on_derived3_split await base.Include_collection_with_inheritance_on_derived3_split(async); AssertSql( -""" + """ SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, `o`.`BaseInheritanceRelationshipEntityId`, `o`.`Id`, `o`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` FROM `DerivedEntities` AS `d` LEFT JOIN `OwnedReferences` AS `o` ON `d`.`Id` = `o`.`BaseInheritanceRelationshipEntityId` ORDER BY `d`.`Id`, `o`.`BaseInheritanceRelationshipEntityId` """, -// -""" -SELECT `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `d`.`Id`, `o`.`BaseInheritanceRelationshipEntityId` + // + """ +SELECT `o1`.`BaseInheritanceRelationshipEntityId`, `o1`.`Id`, `o1`.`Name`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId` FROM (`DerivedEntities` AS `d` -LEFT JOIN `OwnedReferences` AS `o` ON `d`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -INNER JOIN `OwnedCollections` AS `o0` ON `d`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId` -ORDER BY `d`.`Id`, `o`.`BaseInheritanceRelationshipEntityId` +LEFT JOIN `OwnedReferences` AS `o0` ON `d`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +INNER JOIN `OwnedCollections` AS `o1` ON `d`.`Id` = `o1`.`BaseInheritanceRelationshipEntityId` +ORDER BY `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId` """, -// -""" -SELECT `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`Id`, `o`.`BaseInheritanceRelationshipEntityId` + // + """ +SELECT `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId` FROM (`DerivedEntities` AS `d` -LEFT JOIN `OwnedReferences` AS `o` ON `d`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `d`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` -ORDER BY `d`.`Id`, `o`.`BaseInheritanceRelationshipEntityId` +LEFT JOIN `OwnedReferences` AS `o0` ON `d`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `d`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId` """, -// -""" -SELECT `d0`.`Id`, `d0`.`Name`, `d0`.`ParentId`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d`.`Id`, `o`.`BaseInheritanceRelationshipEntityId` + // + """ +SELECT `d2`.`Id`, `d2`.`Name`, `d2`.`ParentId`, `d2`.`DerivedInheritanceRelationshipEntityId`, `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId` FROM (`DerivedEntities` AS `d` -LEFT JOIN `OwnedReferences` AS `o` ON `d`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -INNER JOIN `DerivedCollectionsOnDerived` AS `d0` ON `d`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` -ORDER BY `d`.`Id`, `o`.`BaseInheritanceRelationshipEntityId` +LEFT JOIN `OwnedReferences` AS `o0` ON `d`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +INNER JOIN `DerivedCollectionsOnDerived` AS `d2` ON `d`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `d`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId` """); } @@ -1917,50 +1917,50 @@ public override async Task Include_collection_with_inheritance_on_derived_revers await base.Include_collection_with_inheritance_on_derived_reverse_split(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`Name`, `t`.`ParentId`, `t`.`DerivedInheritanceRelationshipEntityId`, `t`.`Discriminator`, `d`.`Id`, `d`.`Name`, `d`.`BaseId`, `o`.`BaseInheritanceRelationshipEntityId`, `o`.`Id`, `o`.`Name`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`ParentId`, `u`.`DerivedInheritanceRelationshipEntityId`, `u`.`Discriminator`, `d0`.`Id`, `d0`.`Name`, `d0`.`BaseId`, `o`.`BaseInheritanceRelationshipEntityId`, `o`.`Id`, `o`.`Name`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` FROM (( SELECT `b`.`Id`, `b`.`Name`, `b`.`ParentId`, CVar(NULL) AS `DerivedInheritanceRelationshipEntityId`, 'BaseCollectionOnDerived' AS `Discriminator` FROM `BaseCollectionsOnDerived` AS `b` UNION ALL - SELECT `d0`.`Id`, `d0`.`Name`, `d0`.`ParentId`, `d0`.`DerivedInheritanceRelationshipEntityId`, 'DerivedCollectionOnDerived' AS `Discriminator` - FROM `DerivedCollectionsOnDerived` AS `d0` -) AS `t` -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`ParentId` = `d`.`Id`) -LEFT JOIN `OwnedReferences` AS `o` ON `d`.`Id` = `o`.`BaseInheritanceRelationshipEntityId` -ORDER BY `t`.`Id`, `d`.`Id`, `o`.`BaseInheritanceRelationshipEntityId` + SELECT `d`.`Id`, `d`.`Name`, `d`.`ParentId`, `d`.`DerivedInheritanceRelationshipEntityId`, 'DerivedCollectionOnDerived' AS `Discriminator` + FROM `DerivedCollectionsOnDerived` AS `d` +) AS `u` +LEFT JOIN `DerivedEntities` AS `d0` ON `u`.`ParentId` = `d0`.`Id`) +LEFT JOIN `OwnedReferences` AS `o` ON `d0`.`Id` = `o`.`BaseInheritanceRelationshipEntityId` +ORDER BY `u`.`Id`, `d0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId` """, - // - """ -SELECT `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `t`.`Id`, `d`.`Id`, `o`.`BaseInheritanceRelationshipEntityId` + // + """ +SELECT `o1`.`BaseInheritanceRelationshipEntityId`, `o1`.`Id`, `o1`.`Name`, `u`.`Id`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId` FROM ((( SELECT `b`.`Id`, `b`.`ParentId` FROM `BaseCollectionsOnDerived` AS `b` UNION ALL - SELECT `d0`.`Id`, `d0`.`ParentId` - FROM `DerivedCollectionsOnDerived` AS `d0` -) AS `t` -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`ParentId` = `d`.`Id`) -LEFT JOIN `OwnedReferences` AS `o` ON `d`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `OwnedCollections` AS `o0` ON `d`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId` -WHERE `d`.`Id` IS NOT NULL AND `o0`.`BaseInheritanceRelationshipEntityId` IS NOT NULL -ORDER BY `t`.`Id`, `d`.`Id`, `o`.`BaseInheritanceRelationshipEntityId` + SELECT `d`.`Id`, `d`.`ParentId` + FROM `DerivedCollectionsOnDerived` AS `d` +) AS `u` +LEFT JOIN `DerivedEntities` AS `d0` ON `u`.`ParentId` = `d0`.`Id`) +LEFT JOIN `OwnedReferences` AS `o0` ON `d0`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `OwnedCollections` AS `o1` ON `d0`.`Id` = `o1`.`BaseInheritanceRelationshipEntityId` +WHERE `d0`.`Id` IS NOT NULL AND `o1`.`BaseInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `u`.`Id`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId` """, - // - """ -SELECT `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `t`.`Id`, `d`.`Id`, `o`.`BaseInheritanceRelationshipEntityId` + // + """ +SELECT `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `u`.`Id`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId` FROM ((( SELECT `b`.`Id`, `b`.`ParentId` FROM `BaseCollectionsOnDerived` AS `b` UNION ALL - SELECT `d1`.`Id`, `d1`.`ParentId` - FROM `DerivedCollectionsOnDerived` AS `d1` -) AS `t` -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`ParentId` = `d`.`Id`) -LEFT JOIN `OwnedReferences` AS `o` ON `d`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `d`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` -WHERE `d`.`Id` IS NOT NULL AND `d0`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL -ORDER BY `t`.`Id`, `d`.`Id`, `o`.`BaseInheritanceRelationshipEntityId` + SELECT `d`.`Id`, `d`.`ParentId` + FROM `DerivedCollectionsOnDerived` AS `d` +) AS `u` +LEFT JOIN `DerivedEntities` AS `d0` ON `u`.`ParentId` = `d0`.`Id`) +LEFT JOIN `OwnedReferences` AS `o0` ON `d0`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `d0`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +WHERE `d0`.`Id` IS NOT NULL AND `d2`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `u`.`Id`, `d0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId` """); } @@ -1969,98 +1969,98 @@ public override async Task Nested_include_with_inheritance_reference_collection_ await base.Nested_include_with_inheritance_reference_collection_split(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`Name`, `t`.`BaseId`, `t`.`Discriminator`, `t0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o`.`Id`, `o`.`Name`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `t0`.`BaseParentId`, `t0`.`Name`, `t0`.`Discriminator` + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`BaseId`, `u`.`Discriminator`, `u0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o`.`Id`, `o`.`Name`, `d1`.`OwnedReferenceOnDerived_Id`, `d1`.`OwnedReferenceOnDerived_Name`, `u0`.`BaseParentId`, `u0`.`Name`, `u0`.`Discriminator` FROM ((( SELECT `b`.`Id`, `b`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` FROM `BaseEntities` AS `b` UNION ALL - SELECT `d0`.`Id`, `d0`.`Name`, `d0`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` - FROM `DerivedEntities` AS `d0` -) AS `t` + SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d` +) AS `u` LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, 'BaseReferenceOnBase' AS `Discriminator` FROM `BaseReferencesOnBase` AS `b0` UNION ALL - SELECT `d1`.`Id`, `d1`.`BaseParentId`, `d1`.`Name`, 'DerivedReferenceOnBase' AS `Discriminator` - FROM `DerivedReferencesOnBase` AS `d1` -) AS `t0` ON `t`.`Id` = `t0`.`BaseParentId`) -LEFT JOIN `OwnedReferences` AS `o` ON `t`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`Id` = `d`.`Id` -ORDER BY `t`.`Id`, `t0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + SELECT `d0`.`Id`, `d0`.`BaseParentId`, `d0`.`Name`, 'DerivedReferenceOnBase' AS `Discriminator` + FROM `DerivedReferencesOnBase` AS `d0` +) AS `u0` ON `u`.`Id` = `u0`.`BaseParentId`) +LEFT JOIN `OwnedReferences` AS `o` ON `u`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id` +ORDER BY `u`.`Id`, `u0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` """, - // - """ -SELECT `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `t`.`Id`, `t0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + // + """ +SELECT `o1`.`BaseInheritanceRelationshipEntityId`, `o1`.`Id`, `o1`.`Name`, `u`.`Id`, `u0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d2`.`Id` FROM (((( SELECT `b`.`Id` FROM `BaseEntities` AS `b` UNION ALL - SELECT `d0`.`Id` - FROM `DerivedEntities` AS `d0` -) AS `t` + SELECT `d`.`Id` + FROM `DerivedEntities` AS `d` +) AS `u` LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`BaseParentId` FROM `BaseReferencesOnBase` AS `b0` UNION ALL - SELECT `d1`.`Id`, `d1`.`BaseParentId` - FROM `DerivedReferencesOnBase` AS `d1` -) AS `t0` ON `t`.`Id` = `t0`.`BaseParentId`) -LEFT JOIN `OwnedReferences` AS `o` ON `t`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`Id` = `d`.`Id`) -INNER JOIN `OwnedCollections` AS `o0` ON `t`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId` -ORDER BY `t`.`Id`, `t0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + SELECT `d0`.`Id`, `d0`.`BaseParentId` + FROM `DerivedReferencesOnBase` AS `d0` +) AS `u0` ON `u`.`Id` = `u0`.`BaseParentId`) +LEFT JOIN `OwnedReferences` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d2` ON `u`.`Id` = `d2`.`Id`) +INNER JOIN `OwnedCollections` AS `o1` ON `u`.`Id` = `o1`.`BaseInheritanceRelationshipEntityId` +ORDER BY `u`.`Id`, `u0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d2`.`Id` """, - // - """ -SELECT `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `t`.`Id`, `t0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + // + """ +SELECT `d3`.`DerivedInheritanceRelationshipEntityId`, `d3`.`Id`, `d3`.`Name`, `u`.`Id`, `u0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d2`.`Id` FROM (((( SELECT `b`.`Id` FROM `BaseEntities` AS `b` UNION ALL - SELECT `d1`.`Id` - FROM `DerivedEntities` AS `d1` -) AS `t` + SELECT `d`.`Id` + FROM `DerivedEntities` AS `d` +) AS `u` LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`BaseParentId` FROM `BaseReferencesOnBase` AS `b0` UNION ALL - SELECT `d2`.`Id`, `d2`.`BaseParentId` - FROM `DerivedReferencesOnBase` AS `d2` -) AS `t0` ON `t`.`Id` = `t0`.`BaseParentId`) -LEFT JOIN `OwnedReferences` AS `o` ON `t`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`Id` = `d`.`Id`) -INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `t`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` -ORDER BY `t`.`Id`, `t0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + SELECT `d0`.`Id`, `d0`.`BaseParentId` + FROM `DerivedReferencesOnBase` AS `d0` +) AS `u0` ON `u`.`Id` = `u0`.`BaseParentId`) +LEFT JOIN `OwnedReferences` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d2` ON `u`.`Id` = `d2`.`Id`) +INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d3` ON `u`.`Id` = `d3`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `u`.`Id`, `u0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d2`.`Id` """, - // - """ -SELECT `t1`.`Id`, `t1`.`Name`, `t1`.`ParentCollectionId`, `t1`.`ParentReferenceId`, `t1`.`Discriminator`, `t`.`Id`, `t0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + // + """ +SELECT `u1`.`Id`, `u1`.`Name`, `u1`.`ParentCollectionId`, `u1`.`ParentReferenceId`, `u1`.`Discriminator`, `u`.`Id`, `u0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d2`.`Id` FROM (((( SELECT `b`.`Id` FROM `BaseEntities` AS `b` UNION ALL - SELECT `d0`.`Id` - FROM `DerivedEntities` AS `d0` -) AS `t` + SELECT `d`.`Id` + FROM `DerivedEntities` AS `d` +) AS `u` LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`BaseParentId` FROM `BaseReferencesOnBase` AS `b0` UNION ALL - SELECT `d1`.`Id`, `d1`.`BaseParentId` - FROM `DerivedReferencesOnBase` AS `d1` -) AS `t0` ON `t`.`Id` = `t0`.`BaseParentId`) -LEFT JOIN `OwnedReferences` AS `o` ON `t`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`Id` = `d`.`Id`) + SELECT `d0`.`Id`, `d0`.`BaseParentId` + FROM `DerivedReferencesOnBase` AS `d0` +) AS `u0` ON `u`.`Id` = `u0`.`BaseParentId`) +LEFT JOIN `OwnedReferences` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d2` ON `u`.`Id` = `d2`.`Id`) LEFT JOIN ( SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, 'NestedCollectionBase' AS `Discriminator` FROM `NestedCollections` AS `n` UNION ALL SELECT `n0`.`Id`, `n0`.`Name`, `n0`.`ParentCollectionId`, `n0`.`ParentReferenceId`, 'NestedCollectionDerived' AS `Discriminator` FROM `NestedCollectionsDerived` AS `n0` -) AS `t1` ON `t0`.`Id` = `t1`.`ParentReferenceId` -WHERE `t0`.`Id` IS NOT NULL AND `t1`.`ParentReferenceId` IS NOT NULL -ORDER BY `t`.`Id`, `t0`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` +) AS `u1` ON `u0`.`Id` = `u1`.`ParentReferenceId` +WHERE `u0`.`Id` IS NOT NULL AND `u1`.`ParentReferenceId` IS NOT NULL +ORDER BY `u`.`Id`, `u0`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d2`.`Id` """); } @@ -2069,8 +2069,8 @@ public override async Task Nested_include_with_inheritance_reference_collection_ await base.Nested_include_with_inheritance_reference_collection_on_base_split(async); AssertSql( -""" -SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o`.`Id`, `o`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `t`.`BaseParentId`, `t`.`Name`, `t`.`Discriminator` + """ +SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `o`.`Id`, `o`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `u`.`BaseParentId`, `u`.`Name`, `u`.`Discriminator` FROM (`DerivedEntities` AS `d` LEFT JOIN ( SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, 'BaseReferenceOnBase' AS `Discriminator` @@ -2078,13 +2078,13 @@ LEFT JOIN ( UNION ALL SELECT `d0`.`Id`, `d0`.`BaseParentId`, `d0`.`Name`, 'DerivedReferenceOnBase' AS `Discriminator` FROM `DerivedReferencesOnBase` AS `d0` -) AS `t` ON `d`.`Id` = `t`.`BaseParentId`) +) AS `u` ON `d`.`Id` = `u`.`BaseParentId`) LEFT JOIN `OwnedReferences` AS `o` ON `d`.`Id` = `o`.`BaseInheritanceRelationshipEntityId` -ORDER BY `d`.`Id`, `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId` +ORDER BY `d`.`Id`, `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId` """, -// -""" -SELECT `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `d`.`Id`, `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId` + // + """ +SELECT `o1`.`BaseInheritanceRelationshipEntityId`, `o1`.`Id`, `o1`.`Name`, `d`.`Id`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId` FROM ((`DerivedEntities` AS `d` LEFT JOIN ( SELECT `b`.`Id`, `b`.`BaseParentId` @@ -2092,29 +2092,29 @@ LEFT JOIN ( UNION ALL SELECT `d0`.`Id`, `d0`.`BaseParentId` FROM `DerivedReferencesOnBase` AS `d0` -) AS `t` ON `d`.`Id` = `t`.`BaseParentId`) -LEFT JOIN `OwnedReferences` AS `o` ON `d`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -INNER JOIN `OwnedCollections` AS `o0` ON `d`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId` -ORDER BY `d`.`Id`, `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId` +) AS `u` ON `d`.`Id` = `u`.`BaseParentId`) +LEFT JOIN `OwnedReferences` AS `o0` ON `d`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +INNER JOIN `OwnedCollections` AS `o1` ON `d`.`Id` = `o1`.`BaseInheritanceRelationshipEntityId` +ORDER BY `d`.`Id`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId` """, -// -""" -SELECT `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`Id`, `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId` + // + """ +SELECT `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `d`.`Id`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId` FROM ((`DerivedEntities` AS `d` LEFT JOIN ( SELECT `b`.`Id`, `b`.`BaseParentId` FROM `BaseReferencesOnBase` AS `b` UNION ALL - SELECT `d1`.`Id`, `d1`.`BaseParentId` - FROM `DerivedReferencesOnBase` AS `d1` -) AS `t` ON `d`.`Id` = `t`.`BaseParentId`) -LEFT JOIN `OwnedReferences` AS `o` ON `d`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `d`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` -ORDER BY `d`.`Id`, `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId` + SELECT `d0`.`Id`, `d0`.`BaseParentId` + FROM `DerivedReferencesOnBase` AS `d0` +) AS `u` ON `d`.`Id` = `u`.`BaseParentId`) +LEFT JOIN `OwnedReferences` AS `o0` ON `d`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `d`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `d`.`Id`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId` """, -// -""" -SELECT `t0`.`Id`, `t0`.`Name`, `t0`.`ParentCollectionId`, `t0`.`ParentReferenceId`, `t0`.`Discriminator`, `d`.`Id`, `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId` + // + """ +SELECT `u0`.`Id`, `u0`.`Name`, `u0`.`ParentCollectionId`, `u0`.`ParentReferenceId`, `u0`.`Discriminator`, `d`.`Id`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId` FROM ((`DerivedEntities` AS `d` LEFT JOIN ( SELECT `b`.`Id`, `b`.`BaseParentId` @@ -2122,17 +2122,17 @@ LEFT JOIN ( UNION ALL SELECT `d0`.`Id`, `d0`.`BaseParentId` FROM `DerivedReferencesOnBase` AS `d0` -) AS `t` ON `d`.`Id` = `t`.`BaseParentId`) -LEFT JOIN `OwnedReferences` AS `o` ON `d`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +) AS `u` ON `d`.`Id` = `u`.`BaseParentId`) +LEFT JOIN `OwnedReferences` AS `o0` ON `d`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) LEFT JOIN ( SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, 'NestedCollectionBase' AS `Discriminator` FROM `NestedCollections` AS `n` UNION ALL SELECT `n0`.`Id`, `n0`.`Name`, `n0`.`ParentCollectionId`, `n0`.`ParentReferenceId`, 'NestedCollectionDerived' AS `Discriminator` FROM `NestedCollectionsDerived` AS `n0` -) AS `t0` ON `t`.`Id` = `t0`.`ParentReferenceId` -WHERE `t`.`Id` IS NOT NULL AND `t0`.`ParentReferenceId` IS NOT NULL -ORDER BY `d`.`Id`, `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId` +) AS `u0` ON `u`.`Id` = `u0`.`ParentReferenceId` +WHERE `u`.`Id` IS NOT NULL AND `u0`.`ParentReferenceId` IS NOT NULL +ORDER BY `d`.`Id`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId` """); } @@ -2141,92 +2141,92 @@ public override async Task Nested_include_with_inheritance_reference_collection_ await base.Nested_include_with_inheritance_reference_collection_reverse_split(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`Name`, `t`.`ParentCollectionId`, `t`.`ParentReferenceId`, `t`.`Discriminator`, `t0`.`Id`, `t0`.`BaseParentId`, `t0`.`Name`, `t0`.`Discriminator`, `t1`.`Id`, `t1`.`Name`, `t1`.`BaseId`, `t1`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o`.`Id`, `o`.`Name`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`ParentCollectionId`, `u`.`ParentReferenceId`, `u`.`Discriminator`, `u0`.`Id`, `u0`.`BaseParentId`, `u0`.`Name`, `u0`.`Discriminator`, `u1`.`Id`, `u1`.`Name`, `u1`.`BaseId`, `u1`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o`.`Id`, `o`.`Name`, `d1`.`OwnedReferenceOnDerived_Id`, `d1`.`OwnedReferenceOnDerived_Name` FROM (((( SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, 'NestedCollectionBase' AS `Discriminator` FROM `NestedCollections` AS `n` UNION ALL SELECT `n0`.`Id`, `n0`.`Name`, `n0`.`ParentCollectionId`, `n0`.`ParentReferenceId`, 'NestedCollectionDerived' AS `Discriminator` FROM `NestedCollectionsDerived` AS `n0` -) AS `t` +) AS `u` LEFT JOIN ( SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, 'BaseReferenceOnBase' AS `Discriminator` FROM `BaseReferencesOnBase` AS `b` UNION ALL - SELECT `d0`.`Id`, `d0`.`BaseParentId`, `d0`.`Name`, 'DerivedReferenceOnBase' AS `Discriminator` - FROM `DerivedReferencesOnBase` AS `d0` -) AS `t0` ON `t`.`ParentReferenceId` = `t0`.`Id`) + SELECT `d`.`Id`, `d`.`BaseParentId`, `d`.`Name`, 'DerivedReferenceOnBase' AS `Discriminator` + FROM `DerivedReferencesOnBase` AS `d` +) AS `u0` ON `u`.`ParentReferenceId` = `u0`.`Id`) LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` FROM `BaseEntities` AS `b0` UNION ALL - SELECT `d1`.`Id`, `d1`.`Name`, `d1`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` - FROM `DerivedEntities` AS `d1` -) AS `t1` ON `t0`.`BaseParentId` = `t1`.`Id`) -LEFT JOIN `OwnedReferences` AS `o` ON `t1`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t1`.`Id` = `d`.`Id` -ORDER BY `t`.`Id`, `t0`.`Id`, `t1`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + SELECT `d0`.`Id`, `d0`.`Name`, `d0`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d0` +) AS `u1` ON `u0`.`BaseParentId` = `u1`.`Id`) +LEFT JOIN `OwnedReferences` AS `o` ON `u1`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u1`.`Id` = `d1`.`Id` +ORDER BY `u`.`Id`, `u0`.`Id`, `u1`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` """, - // - """ -SELECT `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `t`.`Id`, `t0`.`Id`, `t1`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + // + """ +SELECT `o1`.`BaseInheritanceRelationshipEntityId`, `o1`.`Id`, `o1`.`Name`, `u`.`Id`, `u0`.`Id`, `u1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d2`.`Id` FROM ((((( SELECT `n`.`Id`, `n`.`ParentReferenceId` FROM `NestedCollections` AS `n` UNION ALL SELECT `n0`.`Id`, `n0`.`ParentReferenceId` FROM `NestedCollectionsDerived` AS `n0` -) AS `t` +) AS `u` LEFT JOIN ( SELECT `b`.`Id`, `b`.`BaseParentId` FROM `BaseReferencesOnBase` AS `b` UNION ALL - SELECT `d0`.`Id`, `d0`.`BaseParentId` - FROM `DerivedReferencesOnBase` AS `d0` -) AS `t0` ON `t`.`ParentReferenceId` = `t0`.`Id`) + SELECT `d`.`Id`, `d`.`BaseParentId` + FROM `DerivedReferencesOnBase` AS `d` +) AS `u0` ON `u`.`ParentReferenceId` = `u0`.`Id`) LEFT JOIN ( SELECT `b0`.`Id` FROM `BaseEntities` AS `b0` UNION ALL - SELECT `d1`.`Id` - FROM `DerivedEntities` AS `d1` -) AS `t1` ON `t0`.`BaseParentId` = `t1`.`Id`) -LEFT JOIN `OwnedReferences` AS `o` ON `t1`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t1`.`Id` = `d`.`Id`) -LEFT JOIN `OwnedCollections` AS `o0` ON `t1`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId` -WHERE `t1`.`Id` IS NOT NULL AND `o0`.`BaseInheritanceRelationshipEntityId` IS NOT NULL -ORDER BY `t`.`Id`, `t0`.`Id`, `t1`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + SELECT `d0`.`Id` + FROM `DerivedEntities` AS `d0` +) AS `u1` ON `u0`.`BaseParentId` = `u1`.`Id`) +LEFT JOIN `OwnedReferences` AS `o0` ON `u1`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d2` ON `u1`.`Id` = `d2`.`Id`) +LEFT JOIN `OwnedCollections` AS `o1` ON `u1`.`Id` = `o1`.`BaseInheritanceRelationshipEntityId` +WHERE `u1`.`Id` IS NOT NULL AND `o1`.`BaseInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `u`.`Id`, `u0`.`Id`, `u1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d2`.`Id` """, - // - """ -SELECT `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `t`.`Id`, `t0`.`Id`, `t1`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + // + """ +SELECT `d3`.`DerivedInheritanceRelationshipEntityId`, `d3`.`Id`, `d3`.`Name`, `u`.`Id`, `u0`.`Id`, `u1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d2`.`Id` FROM ((((( SELECT `n`.`Id`, `n`.`ParentReferenceId` FROM `NestedCollections` AS `n` UNION ALL SELECT `n0`.`Id`, `n0`.`ParentReferenceId` FROM `NestedCollectionsDerived` AS `n0` -) AS `t` +) AS `u` LEFT JOIN ( SELECT `b`.`Id`, `b`.`BaseParentId` FROM `BaseReferencesOnBase` AS `b` UNION ALL - SELECT `d1`.`Id`, `d1`.`BaseParentId` - FROM `DerivedReferencesOnBase` AS `d1` -) AS `t0` ON `t`.`ParentReferenceId` = `t0`.`Id`) + SELECT `d`.`Id`, `d`.`BaseParentId` + FROM `DerivedReferencesOnBase` AS `d` +) AS `u0` ON `u`.`ParentReferenceId` = `u0`.`Id`) LEFT JOIN ( SELECT `b0`.`Id` FROM `BaseEntities` AS `b0` UNION ALL - SELECT `d2`.`Id` - FROM `DerivedEntities` AS `d2` -) AS `t1` ON `t0`.`BaseParentId` = `t1`.`Id`) -LEFT JOIN `OwnedReferences` AS `o` ON `t1`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t1`.`Id` = `d`.`Id`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `t1`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` -WHERE `t1`.`Id` IS NOT NULL AND `d0`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL -ORDER BY `t`.`Id`, `t0`.`Id`, `t1`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + SELECT `d0`.`Id` + FROM `DerivedEntities` AS `d0` +) AS `u1` ON `u0`.`BaseParentId` = `u1`.`Id`) +LEFT JOIN `OwnedReferences` AS `o0` ON `u1`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d2` ON `u1`.`Id` = `d2`.`Id`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d3` ON `u1`.`Id` = `d3`.`DerivedInheritanceRelationshipEntityId` +WHERE `u1`.`Id` IS NOT NULL AND `d3`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `u`.`Id`, `u0`.`Id`, `u1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d2`.`Id` """); } @@ -2235,79 +2235,79 @@ public override async Task Nested_include_with_inheritance_collection_reference_ await base.Nested_include_with_inheritance_collection_reference_split(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`Name`, `t`.`BaseId`, `t`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o`.`Id`, `o`.`Name`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`BaseId`, `u`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o`.`Id`, `o`.`Name`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` FROM (( SELECT `b`.`Id`, `b`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` FROM `BaseEntities` AS `b` UNION ALL - SELECT `d0`.`Id`, `d0`.`Name`, `d0`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` - FROM `DerivedEntities` AS `d0` -) AS `t` -LEFT JOIN `OwnedReferences` AS `o` ON `t`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`Id` = `d`.`Id` -ORDER BY `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o` ON `u`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d0` ON `u`.`Id` = `d0`.`Id` +ORDER BY `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id` """, - // - """ -SELECT `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + // + """ +SELECT `o1`.`BaseInheritanceRelationshipEntityId`, `o1`.`Id`, `o1`.`Name`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` FROM ((( SELECT `b`.`Id` FROM `BaseEntities` AS `b` UNION ALL - SELECT `d0`.`Id` - FROM `DerivedEntities` AS `d0` -) AS `t` -LEFT JOIN `OwnedReferences` AS `o` ON `t`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`Id` = `d`.`Id`) -INNER JOIN `OwnedCollections` AS `o0` ON `t`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId` -ORDER BY `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + SELECT `d`.`Id` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) +INNER JOIN `OwnedCollections` AS `o1` ON `u`.`Id` = `o1`.`BaseInheritanceRelationshipEntityId` +ORDER BY `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` """, - // - """ -SELECT `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + // + """ +SELECT `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` FROM ((( SELECT `b`.`Id` FROM `BaseEntities` AS `b` UNION ALL - SELECT `d1`.`Id` - FROM `DerivedEntities` AS `d1` -) AS `t` -LEFT JOIN `OwnedReferences` AS `o` ON `t`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`Id` = `d`.`Id`) -INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `t`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` -ORDER BY `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + SELECT `d`.`Id` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) +INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `u`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` """, - // - """ -SELECT `t1`.`Id`, `t1`.`BaseParentId`, `t1`.`Name`, `t1`.`DerivedProperty`, `t1`.`Discriminator`, `t1`.`Id0`, `t1`.`Name0`, `t1`.`ParentCollectionId`, `t1`.`ParentReferenceId`, `t1`.`Discriminator0` AS `Discriminator`, `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + // + """ +SELECT `s`.`Id`, `s`.`BaseParentId`, `s`.`Name`, `s`.`DerivedProperty`, `s`.`Discriminator`, `s`.`Id0`, `s`.`Name0`, `s`.`ParentCollectionId`, `s`.`ParentReferenceId`, `s`.`Discriminator0` AS `Discriminator`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` FROM ((( SELECT `b`.`Id` FROM `BaseEntities` AS `b` UNION ALL - SELECT `d0`.`Id` - FROM `DerivedEntities` AS `d0` -) AS `t` -LEFT JOIN `OwnedReferences` AS `o` ON `t`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`Id` = `d`.`Id`) + SELECT `d`.`Id` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) INNER JOIN ( - SELECT `t0`.`Id`, `t0`.`BaseParentId`, `t0`.`Name`, `t0`.`DerivedProperty`, `t0`.`Discriminator`, `t2`.`Id` AS `Id0`, `t2`.`Name` AS `Name0`, `t2`.`ParentCollectionId`, `t2`.`ParentReferenceId`, `t2`.`Discriminator` AS `Discriminator0` + SELECT `u0`.`Id`, `u0`.`BaseParentId`, `u0`.`Name`, `u0`.`DerivedProperty`, `u0`.`Discriminator`, `u1`.`Id` AS `Id0`, `u1`.`Name` AS `Name0`, `u1`.`ParentCollectionId`, `u1`.`ParentReferenceId`, `u1`.`Discriminator` AS `Discriminator0` FROM ( SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, CVar(NULL) AS `DerivedProperty`, 'BaseCollectionOnBase' AS `Discriminator` FROM `BaseCollectionsOnBase` AS `b0` UNION ALL - SELECT `d1`.`Id`, `d1`.`BaseParentId`, `d1`.`Name`, `d1`.`DerivedProperty`, 'DerivedCollectionOnBase' AS `Discriminator` - FROM `DerivedCollectionsOnBase` AS `d1` - ) AS `t0` + SELECT `d3`.`Id`, `d3`.`BaseParentId`, `d3`.`Name`, `d3`.`DerivedProperty`, 'DerivedCollectionOnBase' AS `Discriminator` + FROM `DerivedCollectionsOnBase` AS `d3` + ) AS `u0` LEFT JOIN ( SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, 'NestedReferenceBase' AS `Discriminator` FROM `NestedReferences` AS `n` UNION ALL SELECT `n0`.`Id`, `n0`.`Name`, `n0`.`ParentCollectionId`, `n0`.`ParentReferenceId`, 'NestedReferenceDerived' AS `Discriminator` FROM `NestedReferencesDerived` AS `n0` - ) AS `t2` ON `t0`.`Id` = `t2`.`ParentCollectionId` -) AS `t1` ON `t`.`Id` = `t1`.`BaseParentId` -ORDER BY `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + ) AS `u1` ON `u0`.`Id` = `u1`.`ParentCollectionId` +) AS `s` ON `u`.`Id` = `s`.`BaseParentId` +ORDER BY `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` """); } @@ -2316,92 +2316,92 @@ public override async Task Nested_include_with_inheritance_collection_reference_ await base.Nested_include_with_inheritance_collection_reference_reverse_split(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`Name`, `t`.`ParentCollectionId`, `t`.`ParentReferenceId`, `t`.`Discriminator`, `t0`.`Id`, `t0`.`BaseParentId`, `t0`.`Name`, `t0`.`DerivedProperty`, `t0`.`Discriminator`, `t1`.`Id`, `t1`.`Name`, `t1`.`BaseId`, `t1`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o`.`Id`, `o`.`Name`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`ParentCollectionId`, `u`.`ParentReferenceId`, `u`.`Discriminator`, `u0`.`Id`, `u0`.`BaseParentId`, `u0`.`Name`, `u0`.`DerivedProperty`, `u0`.`Discriminator`, `u1`.`Id`, `u1`.`Name`, `u1`.`BaseId`, `u1`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o`.`Id`, `o`.`Name`, `d1`.`OwnedReferenceOnDerived_Id`, `d1`.`OwnedReferenceOnDerived_Name` FROM (((( SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, 'NestedReferenceBase' AS `Discriminator` FROM `NestedReferences` AS `n` UNION ALL SELECT `n0`.`Id`, `n0`.`Name`, `n0`.`ParentCollectionId`, `n0`.`ParentReferenceId`, 'NestedReferenceDerived' AS `Discriminator` FROM `NestedReferencesDerived` AS `n0` -) AS `t` +) AS `u` LEFT JOIN ( SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, CVar(NULL) AS `DerivedProperty`, 'BaseCollectionOnBase' AS `Discriminator` FROM `BaseCollectionsOnBase` AS `b` UNION ALL - SELECT `d0`.`Id`, `d0`.`BaseParentId`, `d0`.`Name`, `d0`.`DerivedProperty`, 'DerivedCollectionOnBase' AS `Discriminator` - FROM `DerivedCollectionsOnBase` AS `d0` -) AS `t0` ON `t`.`ParentCollectionId` = `t0`.`Id`) + SELECT `d`.`Id`, `d`.`BaseParentId`, `d`.`Name`, `d`.`DerivedProperty`, 'DerivedCollectionOnBase' AS `Discriminator` + FROM `DerivedCollectionsOnBase` AS `d` +) AS `u0` ON `u`.`ParentCollectionId` = `u0`.`Id`) LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` FROM `BaseEntities` AS `b0` UNION ALL - SELECT `d1`.`Id`, `d1`.`Name`, `d1`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` - FROM `DerivedEntities` AS `d1` -) AS `t1` ON `t0`.`BaseParentId` = `t1`.`Id`) -LEFT JOIN `OwnedReferences` AS `o` ON `t1`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t1`.`Id` = `d`.`Id` -ORDER BY `t`.`Id`, `t0`.`Id`, `t1`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + SELECT `d0`.`Id`, `d0`.`Name`, `d0`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d0` +) AS `u1` ON `u0`.`BaseParentId` = `u1`.`Id`) +LEFT JOIN `OwnedReferences` AS `o` ON `u1`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u1`.`Id` = `d1`.`Id` +ORDER BY `u`.`Id`, `u0`.`Id`, `u1`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` """, - // - """ -SELECT `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `t`.`Id`, `t0`.`Id`, `t1`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + // + """ +SELECT `o1`.`BaseInheritanceRelationshipEntityId`, `o1`.`Id`, `o1`.`Name`, `u`.`Id`, `u0`.`Id`, `u1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d2`.`Id` FROM ((((( SELECT `n`.`Id`, `n`.`ParentCollectionId` FROM `NestedReferences` AS `n` UNION ALL SELECT `n0`.`Id`, `n0`.`ParentCollectionId` FROM `NestedReferencesDerived` AS `n0` -) AS `t` +) AS `u` LEFT JOIN ( SELECT `b`.`Id`, `b`.`BaseParentId` FROM `BaseCollectionsOnBase` AS `b` UNION ALL - SELECT `d0`.`Id`, `d0`.`BaseParentId` - FROM `DerivedCollectionsOnBase` AS `d0` -) AS `t0` ON `t`.`ParentCollectionId` = `t0`.`Id`) + SELECT `d`.`Id`, `d`.`BaseParentId` + FROM `DerivedCollectionsOnBase` AS `d` +) AS `u0` ON `u`.`ParentCollectionId` = `u0`.`Id`) LEFT JOIN ( SELECT `b0`.`Id` FROM `BaseEntities` AS `b0` UNION ALL - SELECT `d1`.`Id` - FROM `DerivedEntities` AS `d1` -) AS `t1` ON `t0`.`BaseParentId` = `t1`.`Id`) -LEFT JOIN `OwnedReferences` AS `o` ON `t1`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t1`.`Id` = `d`.`Id`) -LEFT JOIN `OwnedCollections` AS `o0` ON `t1`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId` -WHERE `t1`.`Id` IS NOT NULL AND `o0`.`BaseInheritanceRelationshipEntityId` IS NOT NULL -ORDER BY `t`.`Id`, `t0`.`Id`, `t1`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + SELECT `d0`.`Id` + FROM `DerivedEntities` AS `d0` +) AS `u1` ON `u0`.`BaseParentId` = `u1`.`Id`) +LEFT JOIN `OwnedReferences` AS `o0` ON `u1`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d2` ON `u1`.`Id` = `d2`.`Id`) +LEFT JOIN `OwnedCollections` AS `o1` ON `u1`.`Id` = `o1`.`BaseInheritanceRelationshipEntityId` +WHERE `u1`.`Id` IS NOT NULL AND `o1`.`BaseInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `u`.`Id`, `u0`.`Id`, `u1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d2`.`Id` """, - // - """ -SELECT `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `t`.`Id`, `t0`.`Id`, `t1`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + // + """ +SELECT `d3`.`DerivedInheritanceRelationshipEntityId`, `d3`.`Id`, `d3`.`Name`, `u`.`Id`, `u0`.`Id`, `u1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d2`.`Id` FROM ((((( SELECT `n`.`Id`, `n`.`ParentCollectionId` FROM `NestedReferences` AS `n` UNION ALL SELECT `n0`.`Id`, `n0`.`ParentCollectionId` FROM `NestedReferencesDerived` AS `n0` -) AS `t` +) AS `u` LEFT JOIN ( SELECT `b`.`Id`, `b`.`BaseParentId` FROM `BaseCollectionsOnBase` AS `b` UNION ALL - SELECT `d1`.`Id`, `d1`.`BaseParentId` - FROM `DerivedCollectionsOnBase` AS `d1` -) AS `t0` ON `t`.`ParentCollectionId` = `t0`.`Id`) + SELECT `d`.`Id`, `d`.`BaseParentId` + FROM `DerivedCollectionsOnBase` AS `d` +) AS `u0` ON `u`.`ParentCollectionId` = `u0`.`Id`) LEFT JOIN ( SELECT `b0`.`Id` FROM `BaseEntities` AS `b0` UNION ALL - SELECT `d2`.`Id` - FROM `DerivedEntities` AS `d2` -) AS `t1` ON `t0`.`BaseParentId` = `t1`.`Id`) -LEFT JOIN `OwnedReferences` AS `o` ON `t1`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t1`.`Id` = `d`.`Id`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `t1`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` -WHERE `t1`.`Id` IS NOT NULL AND `d0`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL -ORDER BY `t`.`Id`, `t0`.`Id`, `t1`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + SELECT `d0`.`Id` + FROM `DerivedEntities` AS `d0` +) AS `u1` ON `u0`.`BaseParentId` = `u1`.`Id`) +LEFT JOIN `OwnedReferences` AS `o0` ON `u1`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d2` ON `u1`.`Id` = `d2`.`Id`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d3` ON `u1`.`Id` = `d3`.`DerivedInheritanceRelationshipEntityId` +WHERE `u1`.`Id` IS NOT NULL AND `d3`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `u`.`Id`, `u0`.`Id`, `u1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d2`.`Id` """); } @@ -2410,98 +2410,98 @@ public override async Task Nested_include_with_inheritance_collection_collection await base.Nested_include_with_inheritance_collection_collection_split(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`Name`, `t`.`BaseId`, `t`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o`.`Id`, `o`.`Name`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`BaseId`, `u`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o`.`Id`, `o`.`Name`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` FROM (( SELECT `b`.`Id`, `b`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` FROM `BaseEntities` AS `b` UNION ALL - SELECT `d0`.`Id`, `d0`.`Name`, `d0`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` - FROM `DerivedEntities` AS `d0` -) AS `t` -LEFT JOIN `OwnedReferences` AS `o` ON `t`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`Id` = `d`.`Id` -ORDER BY `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o` ON `u`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d0` ON `u`.`Id` = `d0`.`Id` +ORDER BY `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id` """, - // - """ -SELECT `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + // + """ +SELECT `o1`.`BaseInheritanceRelationshipEntityId`, `o1`.`Id`, `o1`.`Name`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` FROM ((( SELECT `b`.`Id` FROM `BaseEntities` AS `b` UNION ALL - SELECT `d0`.`Id` - FROM `DerivedEntities` AS `d0` -) AS `t` -LEFT JOIN `OwnedReferences` AS `o` ON `t`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`Id` = `d`.`Id`) -INNER JOIN `OwnedCollections` AS `o0` ON `t`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId` -ORDER BY `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + SELECT `d`.`Id` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) +INNER JOIN `OwnedCollections` AS `o1` ON `u`.`Id` = `o1`.`BaseInheritanceRelationshipEntityId` +ORDER BY `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` """, - // - """ -SELECT `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + // + """ +SELECT `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` FROM ((( SELECT `b`.`Id` FROM `BaseEntities` AS `b` UNION ALL - SELECT `d1`.`Id` - FROM `DerivedEntities` AS `d1` -) AS `t` -LEFT JOIN `OwnedReferences` AS `o` ON `t`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`Id` = `d`.`Id`) -INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `t`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` -ORDER BY `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + SELECT `d`.`Id` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) +INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `u`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` """, - // - """ -SELECT `t0`.`Id`, `t0`.`BaseParentId`, `t0`.`Name`, `t0`.`DerivedProperty`, `t0`.`Discriminator`, `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + // + """ +SELECT `u0`.`Id`, `u0`.`BaseParentId`, `u0`.`Name`, `u0`.`DerivedProperty`, `u0`.`Discriminator`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` FROM ((( SELECT `b`.`Id` FROM `BaseEntities` AS `b` UNION ALL - SELECT `d0`.`Id` - FROM `DerivedEntities` AS `d0` -) AS `t` -LEFT JOIN `OwnedReferences` AS `o` ON `t`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`Id` = `d`.`Id`) + SELECT `d`.`Id` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) INNER JOIN ( SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, CVar(NULL) AS `DerivedProperty`, 'BaseCollectionOnBase' AS `Discriminator` FROM `BaseCollectionsOnBase` AS `b0` UNION ALL - SELECT `d1`.`Id`, `d1`.`BaseParentId`, `d1`.`Name`, `d1`.`DerivedProperty`, 'DerivedCollectionOnBase' AS `Discriminator` - FROM `DerivedCollectionsOnBase` AS `d1` -) AS `t0` ON `t`.`Id` = `t0`.`BaseParentId` -ORDER BY `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `t0`.`Id` + SELECT `d3`.`Id`, `d3`.`BaseParentId`, `d3`.`Name`, `d3`.`DerivedProperty`, 'DerivedCollectionOnBase' AS `Discriminator` + FROM `DerivedCollectionsOnBase` AS `d3` +) AS `u0` ON `u`.`Id` = `u0`.`BaseParentId` +ORDER BY `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `u0`.`Id` """, - // - """ -SELECT `t1`.`Id`, `t1`.`Name`, `t1`.`ParentCollectionId`, `t1`.`ParentReferenceId`, `t1`.`Discriminator`, `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `t0`.`Id` + // + """ +SELECT `u1`.`Id`, `u1`.`Name`, `u1`.`ParentCollectionId`, `u1`.`ParentReferenceId`, `u1`.`Discriminator`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `u0`.`Id` FROM (((( SELECT `b`.`Id` FROM `BaseEntities` AS `b` UNION ALL - SELECT `d0`.`Id` - FROM `DerivedEntities` AS `d0` -) AS `t` -LEFT JOIN `OwnedReferences` AS `o` ON `t`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`Id` = `d`.`Id`) + SELECT `d`.`Id` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) INNER JOIN ( SELECT `b0`.`Id`, `b0`.`BaseParentId` FROM `BaseCollectionsOnBase` AS `b0` UNION ALL - SELECT `d1`.`Id`, `d1`.`BaseParentId` - FROM `DerivedCollectionsOnBase` AS `d1` -) AS `t0` ON `t`.`Id` = `t0`.`BaseParentId`) + SELECT `d3`.`Id`, `d3`.`BaseParentId` + FROM `DerivedCollectionsOnBase` AS `d3` +) AS `u0` ON `u`.`Id` = `u0`.`BaseParentId`) LEFT JOIN ( SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, 'NestedCollectionBase' AS `Discriminator` FROM `NestedCollections` AS `n` UNION ALL SELECT `n0`.`Id`, `n0`.`Name`, `n0`.`ParentCollectionId`, `n0`.`ParentReferenceId`, 'NestedCollectionDerived' AS `Discriminator` FROM `NestedCollectionsDerived` AS `n0` -) AS `t1` ON `t0`.`Id` = `t1`.`ParentCollectionId` -WHERE `t0`.`Id` IS NOT NULL AND `t1`.`ParentCollectionId` IS NOT NULL -ORDER BY `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `t0`.`Id` +) AS `u1` ON `u0`.`Id` = `u1`.`ParentCollectionId` +WHERE `u0`.`Id` IS NOT NULL AND `u1`.`ParentCollectionId` IS NOT NULL +ORDER BY `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `u0`.`Id` """); } @@ -2510,92 +2510,92 @@ public override async Task Nested_include_with_inheritance_collection_collection await base.Nested_include_with_inheritance_collection_collection_reverse_split(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`Name`, `t`.`ParentCollectionId`, `t`.`ParentReferenceId`, `t`.`Discriminator`, `t0`.`Id`, `t0`.`BaseParentId`, `t0`.`Name`, `t0`.`DerivedProperty`, `t0`.`Discriminator`, `t1`.`Id`, `t1`.`Name`, `t1`.`BaseId`, `t1`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o`.`Id`, `o`.`Name`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`ParentCollectionId`, `u`.`ParentReferenceId`, `u`.`Discriminator`, `u0`.`Id`, `u0`.`BaseParentId`, `u0`.`Name`, `u0`.`DerivedProperty`, `u0`.`Discriminator`, `u1`.`Id`, `u1`.`Name`, `u1`.`BaseId`, `u1`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id`, `o`.`Id`, `o`.`Name`, `d1`.`OwnedReferenceOnDerived_Id`, `d1`.`OwnedReferenceOnDerived_Name` FROM (((( SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, 'NestedCollectionBase' AS `Discriminator` FROM `NestedCollections` AS `n` UNION ALL SELECT `n0`.`Id`, `n0`.`Name`, `n0`.`ParentCollectionId`, `n0`.`ParentReferenceId`, 'NestedCollectionDerived' AS `Discriminator` FROM `NestedCollectionsDerived` AS `n0` -) AS `t` +) AS `u` LEFT JOIN ( SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, CVar(NULL) AS `DerivedProperty`, 'BaseCollectionOnBase' AS `Discriminator` FROM `BaseCollectionsOnBase` AS `b` UNION ALL - SELECT `d0`.`Id`, `d0`.`BaseParentId`, `d0`.`Name`, `d0`.`DerivedProperty`, 'DerivedCollectionOnBase' AS `Discriminator` - FROM `DerivedCollectionsOnBase` AS `d0` -) AS `t0` ON `t`.`ParentCollectionId` = `t0`.`Id`) + SELECT `d`.`Id`, `d`.`BaseParentId`, `d`.`Name`, `d`.`DerivedProperty`, 'DerivedCollectionOnBase' AS `Discriminator` + FROM `DerivedCollectionsOnBase` AS `d` +) AS `u0` ON `u`.`ParentCollectionId` = `u0`.`Id`) LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` FROM `BaseEntities` AS `b0` UNION ALL - SELECT `d1`.`Id`, `d1`.`Name`, `d1`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` - FROM `DerivedEntities` AS `d1` -) AS `t1` ON `t0`.`BaseParentId` = `t1`.`Id`) -LEFT JOIN `OwnedReferences` AS `o` ON `t1`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t1`.`Id` = `d`.`Id` -ORDER BY `t`.`Id`, `t0`.`Id`, `t1`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + SELECT `d0`.`Id`, `d0`.`Name`, `d0`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d0` +) AS `u1` ON `u0`.`BaseParentId` = `u1`.`Id`) +LEFT JOIN `OwnedReferences` AS `o` ON `u1`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u1`.`Id` = `d1`.`Id` +ORDER BY `u`.`Id`, `u0`.`Id`, `u1`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` """, - // - """ -SELECT `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `t`.`Id`, `t0`.`Id`, `t1`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + // + """ +SELECT `o1`.`BaseInheritanceRelationshipEntityId`, `o1`.`Id`, `o1`.`Name`, `u`.`Id`, `u0`.`Id`, `u1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d2`.`Id` FROM ((((( SELECT `n`.`Id`, `n`.`ParentCollectionId` FROM `NestedCollections` AS `n` UNION ALL SELECT `n0`.`Id`, `n0`.`ParentCollectionId` FROM `NestedCollectionsDerived` AS `n0` -) AS `t` +) AS `u` LEFT JOIN ( SELECT `b`.`Id`, `b`.`BaseParentId` FROM `BaseCollectionsOnBase` AS `b` UNION ALL - SELECT `d0`.`Id`, `d0`.`BaseParentId` - FROM `DerivedCollectionsOnBase` AS `d0` -) AS `t0` ON `t`.`ParentCollectionId` = `t0`.`Id`) + SELECT `d`.`Id`, `d`.`BaseParentId` + FROM `DerivedCollectionsOnBase` AS `d` +) AS `u0` ON `u`.`ParentCollectionId` = `u0`.`Id`) LEFT JOIN ( SELECT `b0`.`Id` FROM `BaseEntities` AS `b0` UNION ALL - SELECT `d1`.`Id` - FROM `DerivedEntities` AS `d1` -) AS `t1` ON `t0`.`BaseParentId` = `t1`.`Id`) -LEFT JOIN `OwnedReferences` AS `o` ON `t1`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t1`.`Id` = `d`.`Id`) -LEFT JOIN `OwnedCollections` AS `o0` ON `t1`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId` -WHERE `t1`.`Id` IS NOT NULL AND `o0`.`BaseInheritanceRelationshipEntityId` IS NOT NULL -ORDER BY `t`.`Id`, `t0`.`Id`, `t1`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + SELECT `d0`.`Id` + FROM `DerivedEntities` AS `d0` +) AS `u1` ON `u0`.`BaseParentId` = `u1`.`Id`) +LEFT JOIN `OwnedReferences` AS `o0` ON `u1`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d2` ON `u1`.`Id` = `d2`.`Id`) +LEFT JOIN `OwnedCollections` AS `o1` ON `u1`.`Id` = `o1`.`BaseInheritanceRelationshipEntityId` +WHERE `u1`.`Id` IS NOT NULL AND `o1`.`BaseInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `u`.`Id`, `u0`.`Id`, `u1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d2`.`Id` """, - // - """ -SELECT `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `t`.`Id`, `t0`.`Id`, `t1`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + // + """ +SELECT `d3`.`DerivedInheritanceRelationshipEntityId`, `d3`.`Id`, `d3`.`Name`, `u`.`Id`, `u0`.`Id`, `u1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d2`.`Id` FROM ((((( SELECT `n`.`Id`, `n`.`ParentCollectionId` FROM `NestedCollections` AS `n` UNION ALL SELECT `n0`.`Id`, `n0`.`ParentCollectionId` FROM `NestedCollectionsDerived` AS `n0` -) AS `t` +) AS `u` LEFT JOIN ( SELECT `b`.`Id`, `b`.`BaseParentId` FROM `BaseCollectionsOnBase` AS `b` UNION ALL - SELECT `d1`.`Id`, `d1`.`BaseParentId` - FROM `DerivedCollectionsOnBase` AS `d1` -) AS `t0` ON `t`.`ParentCollectionId` = `t0`.`Id`) + SELECT `d`.`Id`, `d`.`BaseParentId` + FROM `DerivedCollectionsOnBase` AS `d` +) AS `u0` ON `u`.`ParentCollectionId` = `u0`.`Id`) LEFT JOIN ( SELECT `b0`.`Id` FROM `BaseEntities` AS `b0` UNION ALL - SELECT `d2`.`Id` - FROM `DerivedEntities` AS `d2` -) AS `t1` ON `t0`.`BaseParentId` = `t1`.`Id`) -LEFT JOIN `OwnedReferences` AS `o` ON `t1`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t1`.`Id` = `d`.`Id`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `t1`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` -WHERE `t1`.`Id` IS NOT NULL AND `d0`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL -ORDER BY `t`.`Id`, `t0`.`Id`, `t1`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + SELECT `d0`.`Id` + FROM `DerivedEntities` AS `d0` +) AS `u1` ON `u0`.`BaseParentId` = `u1`.`Id`) +LEFT JOIN `OwnedReferences` AS `o0` ON `u1`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d2` ON `u1`.`Id` = `d2`.`Id`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d3` ON `u1`.`Id` = `d3`.`DerivedInheritanceRelationshipEntityId` +WHERE `u1`.`Id` IS NOT NULL AND `d3`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `u`.`Id`, `u0`.`Id`, `u1`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d2`.`Id` """); } @@ -2604,20 +2604,20 @@ public override async Task Nested_include_collection_reference_on_non_entity_bas await base.Nested_include_collection_reference_on_non_entity_base_split(async); AssertSql( -""" + """ SELECT `r`.`Id`, `r`.`Name` FROM `ReferencedEntities` AS `r` ORDER BY `r`.`Id` """, -// -""" -SELECT `t`.`Id`, `t`.`Name`, `t`.`ReferenceId`, `t`.`ReferencedEntityId`, `t`.`Id0`, `t`.`Name0`, `r`.`Id` + // + """ +SELECT `s`.`Id`, `s`.`Name`, `s`.`ReferenceId`, `s`.`ReferencedEntityId`, `s`.`Id0`, `s`.`Name0`, `r`.`Id` FROM `ReferencedEntities` AS `r` INNER JOIN ( SELECT `p`.`Id`, `p`.`Name`, `p`.`ReferenceId`, `p`.`ReferencedEntityId`, `r0`.`Id` AS `Id0`, `r0`.`Name` AS `Name0` FROM `PrincipalEntities` AS `p` LEFT JOIN `ReferencedEntities` AS `r0` ON `p`.`ReferenceId` = `r0`.`Id` -) AS `t` ON `r`.`Id` = `t`.`ReferencedEntityId` +) AS `s` ON `r`.`Id` = `s`.`ReferencedEntityId` ORDER BY `r`.`Id` """); } @@ -2628,34 +2628,34 @@ public override async Task Collection_projection_on_base_type_split(bool async) AssertSql( """ -SELECT `t`.`Id` +SELECT `u`.`Id` FROM ( SELECT `b`.`Id` FROM `BaseEntities` AS `b` UNION ALL SELECT `d`.`Id` FROM `DerivedEntities` AS `d` -) AS `t` -ORDER BY `t`.`Id` +) AS `u` +ORDER BY `u`.`Id` """, // """ -SELECT `t0`.`Id`, `t0`.`BaseParentId`, `t0`.`Name`, `t0`.`DerivedProperty`, `t0`.`Discriminator`, `t`.`Id` +SELECT `u0`.`Id`, `u0`.`BaseParentId`, `u0`.`Name`, `u0`.`DerivedProperty`, `u0`.`Discriminator`, `u`.`Id` FROM ( SELECT `b`.`Id` FROM `BaseEntities` AS `b` UNION ALL SELECT `d`.`Id` FROM `DerivedEntities` AS `d` -) AS `t` +) AS `u` INNER JOIN ( SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, CVar(NULL) AS `DerivedProperty`, 'BaseCollectionOnBase' AS `Discriminator` FROM `BaseCollectionsOnBase` AS `b0` UNION ALL SELECT `d0`.`Id`, `d0`.`BaseParentId`, `d0`.`Name`, `d0`.`DerivedProperty`, 'DerivedCollectionOnBase' AS `Discriminator` FROM `DerivedCollectionsOnBase` AS `d0` -) AS `t0` ON `t`.`Id` = `t0`.`BaseParentId` -ORDER BY `t`.`Id` +) AS `u0` ON `u`.`Id` = `u0`.`BaseParentId` +ORDER BY `u`.`Id` """); } @@ -2664,67 +2664,67 @@ public override async Task Include_on_derived_type_with_queryable_Cast_split(boo await base.Include_on_derived_type_with_queryable_Cast_split(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`Name`, `t`.`BaseId`, `t`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id`, `o`.`Id`, `o`.`Name`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` + """ +SELECT `u`.`Id`, `u`.`Name`, `u`.`BaseId`, `u`.`Discriminator`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id`, `o`.`Id`, `o`.`Name`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` FROM (( SELECT `b`.`Id`, `b`.`Name`, CVar(NULL) AS `BaseId`, 'BaseInheritanceRelationshipEntity' AS `Discriminator` FROM `BaseEntities` AS `b` UNION ALL - SELECT `d0`.`Id`, `d0`.`Name`, `d0`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` - FROM `DerivedEntities` AS `d0` -) AS `t` -LEFT JOIN `OwnedReferences` AS `o` ON `t`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`Id` = `d`.`Id` -WHERE `t`.`Id` >= 4 -ORDER BY `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + SELECT `d`.`Id`, `d`.`Name`, `d`.`BaseId`, 'DerivedInheritanceRelationshipEntity' AS `Discriminator` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o` ON `u`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d0` ON `u`.`Id` = `d0`.`Id` +WHERE `u`.`Id` >= 4 +ORDER BY `u`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d0`.`Id` """, - // - """ -SELECT `o0`.`BaseInheritanceRelationshipEntityId`, `o0`.`Id`, `o0`.`Name`, `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + // + """ +SELECT `o1`.`BaseInheritanceRelationshipEntityId`, `o1`.`Id`, `o1`.`Name`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` FROM ((( SELECT `b`.`Id` FROM `BaseEntities` AS `b` UNION ALL - SELECT `d0`.`Id` - FROM `DerivedEntities` AS `d0` -) AS `t` -LEFT JOIN `OwnedReferences` AS `o` ON `t`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`Id` = `d`.`Id`) -INNER JOIN `OwnedCollections` AS `o0` ON `t`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId` -WHERE `t`.`Id` >= 4 -ORDER BY `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + SELECT `d`.`Id` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) +INNER JOIN `OwnedCollections` AS `o1` ON `u`.`Id` = `o1`.`BaseInheritanceRelationshipEntityId` +WHERE `u`.`Id` >= 4 +ORDER BY `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` """, - // - """ -SELECT `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + // + """ +SELECT `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` FROM ((( SELECT `b`.`Id` FROM `BaseEntities` AS `b` UNION ALL - SELECT `d1`.`Id` - FROM `DerivedEntities` AS `d1` -) AS `t` -LEFT JOIN `OwnedReferences` AS `o` ON `t`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`Id` = `d`.`Id`) -INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `t`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` -WHERE `t`.`Id` >= 4 -ORDER BY `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + SELECT `d`.`Id` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) +INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `u`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +WHERE `u`.`Id` >= 4 +ORDER BY `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` """, - // - """ -SELECT `d0`.`Id`, `d0`.`Name`, `d0`.`ParentId`, `d0`.`DerivedInheritanceRelationshipEntityId`, `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + // + """ +SELECT `d3`.`Id`, `d3`.`Name`, `d3`.`ParentId`, `d3`.`DerivedInheritanceRelationshipEntityId`, `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` FROM ((( SELECT `b`.`Id` FROM `BaseEntities` AS `b` UNION ALL - SELECT `d1`.`Id` - FROM `DerivedEntities` AS `d1` -) AS `t` -LEFT JOIN `OwnedReferences` AS `o` ON `t`.`Id` = `o`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities` AS `d` ON `t`.`Id` = `d`.`Id`) -INNER JOIN `DerivedCollectionsOnDerived` AS `d0` ON `t`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` -WHERE `t`.`Id` >= 4 -ORDER BY `t`.`Id`, `o`.`BaseInheritanceRelationshipEntityId`, `d`.`Id` + SELECT `d`.`Id` + FROM `DerivedEntities` AS `d` +) AS `u` +LEFT JOIN `OwnedReferences` AS `o0` ON `u`.`Id` = `o0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities` AS `d1` ON `u`.`Id` = `d1`.`Id`) +INNER JOIN `DerivedCollectionsOnDerived` AS `d3` ON `u`.`Id` = `d3`.`DerivedInheritanceRelationshipEntityId` +WHERE `u`.`Id` >= 4 +ORDER BY `u`.`Id`, `o0`.`BaseInheritanceRelationshipEntityId`, `d1`.`Id` """); } diff --git a/test/EFCore.Jet.FunctionalTests/Query/TPHInheritanceQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/TPHInheritanceQueryJetTest.cs index b598b84a..caf3e84f 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/TPHInheritanceQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/TPHInheritanceQueryJetTest.cs @@ -9,7 +9,7 @@ using Microsoft.EntityFrameworkCore.TestUtilities; using Xunit; using Xunit.Abstractions; - +#nullable disable // ReSharper disable InconsistentNaming namespace EntityFrameworkCore.Jet.FunctionalTests.Query; @@ -331,15 +331,15 @@ public override async Task Can_include_prey(bool async) await base.Can_include_prey(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`CountryId`, `t`.`Discriminator`, `t`.`Name`, `t`.`Species`, `t`.`EagleId`, `t`.`IsFlightless`, `t`.`Group`, `a0`.`Id`, `a0`.`CountryId`, `a0`.`Discriminator`, `a0`.`Name`, `a0`.`Species`, `a0`.`EagleId`, `a0`.`IsFlightless`, `a0`.`Group`, `a0`.`FoundOn` + """ +SELECT `a1`.`Id`, `a1`.`CountryId`, `a1`.`Discriminator`, `a1`.`Name`, `a1`.`Species`, `a1`.`EagleId`, `a1`.`IsFlightless`, `a1`.`Group`, `a0`.`Id`, `a0`.`CountryId`, `a0`.`Discriminator`, `a0`.`Name`, `a0`.`Species`, `a0`.`EagleId`, `a0`.`IsFlightless`, `a0`.`Group`, `a0`.`FoundOn` FROM ( SELECT TOP 2 `a`.`Id`, `a`.`CountryId`, `a`.`Discriminator`, `a`.`Name`, `a`.`Species`, `a`.`EagleId`, `a`.`IsFlightless`, `a`.`Group` FROM `Animals` AS `a` WHERE `a`.`Discriminator` = 'Eagle' -) AS `t` -LEFT JOIN `Animals` AS `a0` ON `t`.`Id` = `a0`.`EagleId` -ORDER BY `t`.`Id` +) AS `a1` +LEFT JOIN `Animals` AS `a0` ON `a1`.`Id` = `a0`.`EagleId` +ORDER BY `a1`.`Id` """); } @@ -415,8 +415,8 @@ public override async Task Discriminator_used_when_projection_over_of_type(bool """); } - public override void Can_insert_update_delete() - => base.Can_insert_update_delete(); + public override async Task Can_insert_update_delete() + => await base.Can_insert_update_delete(); public override async Task Byte_enum_value_constant_used_in_projection(bool async) { @@ -482,14 +482,14 @@ public override async Task Subquery_OfType(bool async) await base.Subquery_OfType(async); AssertSql( -""" -SELECT DISTINCT `t`.`Id`, `t`.`CountryId`, `t`.`Discriminator`, `t`.`Name`, `t`.`Species`, `t`.`EagleId`, `t`.`IsFlightless`, `t`.`FoundOn` + """ +SELECT DISTINCT `a0`.`Id`, `a0`.`CountryId`, `a0`.`Discriminator`, `a0`.`Name`, `a0`.`Species`, `a0`.`EagleId`, `a0`.`IsFlightless`, `a0`.`FoundOn` FROM ( SELECT TOP 5 `a`.`Id`, `a`.`CountryId`, `a`.`Discriminator`, `a`.`Name`, `a`.`Species`, `a`.`EagleId`, `a`.`IsFlightless`, `a`.`FoundOn` FROM `Animals` AS `a` ORDER BY `a`.`Species` -) AS `t` -WHERE `t`.`Discriminator` = 'Kiwi' +) AS `a0` +WHERE `a0`.`Discriminator` = 'Kiwi' """); } @@ -513,9 +513,9 @@ FROM [Animals] AS [a0] """); } - public override void Member_access_on_intermediate_type_works() + public override async Task Member_access_on_intermediate_type_works() { - base.Member_access_on_intermediate_type_works(); + await base.Member_access_on_intermediate_type_works(); AssertSql( """ @@ -615,12 +615,12 @@ public override async Task Discriminator_with_cast_in_shadow_property(bool async """); } - public override void Setting_foreign_key_to_a_different_type_throws() + public override async Task Setting_foreign_key_to_a_different_type_throws() { - base.Setting_foreign_key_to_a_different_type_throws(); + await base.Setting_foreign_key_to_a_different_type_throws(); AssertSql( -""" + """ SELECT TOP 2 `a`.`Id`, `a`.`CountryId`, `a`.`Discriminator`, `a`.`Name`, `a`.`Species`, `a`.`EagleId`, `a`.`IsFlightless`, `a`.`FoundOn` FROM `Animals` AS `a` WHERE `a`.`Discriminator` = 'Kiwi' diff --git a/test/EFCore.Jet.FunctionalTests/Query/TPTFiltersInheritanceQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/TPTFiltersInheritanceQueryJetTest.cs index a289c687..7ad3a6a1 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/TPTFiltersInheritanceQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/TPTFiltersInheritanceQueryJetTest.cs @@ -179,7 +179,7 @@ public override async Task Can_use_IgnoreQueryFilters_and_GetDatabaseValues(bool await base.Can_use_IgnoreQueryFilters_and_GetDatabaseValues(async); AssertSql( -""" + """ SELECT TOP 2 `a`.`Id`, `a`.`CountryId`, `a`.`Name`, `a`.`Species`, `b`.`EagleId`, `b`.`IsFlightless`, `e`.`Group` FROM (`Animals` AS `a` INNER JOIN `Birds` AS `b` ON `a`.`Id` = `b`.`Id`) diff --git a/test/EFCore.Jet.FunctionalTests/Query/TPTGearsOfWarQueryJetFixture.cs b/test/EFCore.Jet.FunctionalTests/Query/TPTGearsOfWarQueryJetFixture.cs index de7a4d10..ec88a4d8 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/TPTGearsOfWarQueryJetFixture.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/TPTGearsOfWarQueryJetFixture.cs @@ -1,6 +1,8 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. +using System; +using System.Threading.Tasks; using EntityFrameworkCore.Jet.FunctionalTests.TestUtilities; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Query; @@ -21,10 +23,10 @@ protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext con modelBuilder.Entity().Property(g => g.Location).HasColumnType("varchar(100)"); } - protected override void Seed(GearsOfWarContext context) + protected override async Task SeedAsync(GearsOfWarContext context) { // 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`"); + await context.Database.ExecuteSqlAsync($"ALTER TABLE `Gears` DROP CONSTRAINT `FK_Gears_Officers_LeaderNickname_LeaderSquadId`"); var squads = GearsOfWarData.CreateSquads(); var missions = GearsOfWarData.CreateMissions(); @@ -43,6 +45,18 @@ protected override void Seed(GearsOfWarContext context) { mission.Timeline = mission.Timeline.AddYears(100); } + if (mission.Date.Year < 100) + { + mission.Date = mission.Date.AddYears(100); + } + } + + foreach (var tag in tags) + { + if (tag.IssueDate.Year < 100) + { + tag.IssueDate = tag.IssueDate.AddYears(100); + } } GearsOfWarData.WireUp( @@ -58,11 +72,11 @@ protected override void Seed(GearsOfWarContext context) context.LocustLeaders.AddRange(locustLeaders); context.Factions.AddRange(factions); context.LocustHighCommands.AddRange(locustHighCommands); - context.SaveChanges(); + await context.SaveChangesAsync(); GearsOfWarData.WireUp2(locustLeaders, factions); - context.SaveChanges(); + await context.SaveChangesAsync(); } public override ISetSource GetExpectedData() @@ -75,7 +89,20 @@ public override ISetSource GetExpectedData() { mission.Timeline = mission.Timeline.AddYears(100); } + if (mission.Date.Year < 100) + { + mission.Date = mission.Date.AddYears(100); + } mission.Timeline = JetTestHelpers.GetExpectedValue(mission.Timeline); + mission.Duration = new TimeSpan(mission.Duration.Days, mission.Duration.Hours, mission.Duration.Minutes, mission.Duration.Seconds); + } + + foreach (var tag in data.Tags) + { + if (tag.IssueDate.Year < 100) + { + tag.IssueDate = tag.IssueDate.AddYears(100); + } } return data; diff --git a/test/EFCore.Jet.FunctionalTests/Query/TPTGearsOfWarQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/TPTGearsOfWarQueryJetTest.cs index fc1163d0..6b11e9bc 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/TPTGearsOfWarQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/TPTGearsOfWarQueryJetTest.cs @@ -25,13 +25,21 @@ public TPTGearsOfWarQueryJetTest(TPTGearsOfWarQueryJetFixture fixture, ITestOutp Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); } - protected override bool CanExecuteQueryString - => false; - [ConditionalFact] public virtual void Check_all_tests_overridden() => TestHelpers.AssertAllMethodsOverridden(GetType()); + public override async Task Non_string_concat_uses_appropriate_type_mapping(bool async) + { + await base.Non_string_concat_uses_appropriate_type_mapping(async); + + AssertSql( + """ +SELECT `m`.`Duration` +FROM `Missions` AS `m` +"""); + } + public override async Task Entity_equality_empty(bool async) { await base.Entity_equality_empty(async); @@ -50,16 +58,16 @@ public override async Task Include_multiple_one_to_one_and_one_to_many(bool asyn await base.Include_multiple_one_to_one_and_one_to_many(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM (`Tags` AS `t` LEFT JOIN ( 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` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId`) -LEFT JOIN `Weapons` AS `w` ON `t0`.`FullName` = `w`.`OwnerFullName` -ORDER BY `t`.`Id`, `t0`.`Nickname`, `t0`.`SquadId` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId`) +LEFT JOIN `Weapons` AS `w` ON `s`.`FullName` = `w`.`OwnerFullName` +ORDER BY `t`.`Id`, `s`.`Nickname`, `s`.`SquadId` """); } @@ -68,15 +76,15 @@ public override async Task Include_multiple_one_to_one_optional_and_one_to_one_r await base.Include_multiple_one_to_one_optional_and_one_to_one_required(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator`, `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name` + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `s0`.`Id`, `s0`.`Banner`, `s0`.`Banner5`, `s0`.`InternalNumber`, `s0`.`Name` FROM (`Tags` AS `t` LEFT JOIN ( 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` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId`) -LEFT JOIN `Squads` AS `s` ON `t0`.`SquadId` = `s`.`Id` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId`) +LEFT JOIN `Squads` AS `s0` ON `s`.`SquadId` = `s0`.`Id` """); } @@ -85,8 +93,8 @@ public override async Task Include_multiple_circular(bool async) await base.Include_multiple_circular(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`, `c`.`Name`, `c`.`Location`, `c`.`Nation`, `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + """ +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`, `c`.`Name`, `c`.`Location`, `c`.`Nation`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator` FROM ((`Gears` AS `g` LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) INNER JOIN `Cities` AS `c` ON `g`.`CityOfBirthName` = `c`.`Name`) @@ -94,8 +102,8 @@ LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` FROM `Gears` AS `g0` LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` -) AS `t` ON `c`.`Name` = `t`.`AssignedCityName` -ORDER BY `g`.`Nickname`, `g`.`SquadId`, `c`.`Name`, `t`.`Nickname` +) AS `s` ON `c`.`Name` = `s`.`AssignedCityName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `c`.`Name`, `s`.`Nickname` """); } @@ -104,8 +112,8 @@ public override async Task Include_multiple_circular_with_filter(bool async) await base.Include_multiple_circular_with_filter(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`, `c`.`Name`, `c`.`Location`, `c`.`Nation`, `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + """ +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`, `c`.`Name`, `c`.`Location`, `c`.`Nation`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator` FROM ((`Gears` AS `g` LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) INNER JOIN `Cities` AS `c` ON `g`.`CityOfBirthName` = `c`.`Name`) @@ -113,9 +121,9 @@ LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` FROM `Gears` AS `g0` LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` -) AS `t` ON `c`.`Name` = `t`.`AssignedCityName` +) AS `s` ON `c`.`Name` = `s`.`AssignedCityName` WHERE `g`.`Nickname` = 'Marcus' -ORDER BY `g`.`Nickname`, `g`.`SquadId`, `c`.`Name`, `t`.`Nickname` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `c`.`Name`, `s`.`Nickname` """); } @@ -139,17 +147,17 @@ public override async Task Include_navigation_on_derived_type(bool async) await base.Include_navigation_on_derived_type(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`, `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + """ +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`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator` FROM (`Gears` AS `g` LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` FROM `Gears` AS `g0` LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` -) AS `t` ON `g`.`Nickname` = `t`.`LeaderNickname` AND `g`.`SquadId` = `t`.`LeaderSquadId` +) AS `s` ON `g`.`Nickname` = `s`.`LeaderNickname` AND `g`.`SquadId` = `s`.`LeaderSquadId` WHERE `o`.`Nickname` IS NOT NULL -ORDER BY `g`.`Nickname`, `g`.`SquadId`, `t`.`Nickname` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s`.`Nickname` """); } @@ -158,17 +166,17 @@ public override async Task String_based_Include_navigation_on_derived_type(bool await base.String_based_Include_navigation_on_derived_type(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`, `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + """ +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`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator` FROM (`Gears` AS `g` LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` FROM `Gears` AS `g0` LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` -) AS `t` ON `g`.`Nickname` = `t`.`LeaderNickname` AND `g`.`SquadId` = `t`.`LeaderSquadId` +) AS `s` ON `g`.`Nickname` = `s`.`LeaderNickname` AND `g`.`SquadId` = `s`.`LeaderSquadId` WHERE `o`.`Nickname` IS NOT NULL -ORDER BY `g`.`Nickname`, `g`.`SquadId`, `t`.`Nickname` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s`.`Nickname` """); } @@ -177,15 +185,15 @@ public override async Task Select_Where_Navigation_Included(bool async) await base.Select_Where_Navigation_Included(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator` + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator` FROM `Tags` AS `t` LEFT JOIN ( 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` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` -WHERE `t0`.`Nickname` = 'Marcus' +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE `s`.`Nickname` = 'Marcus' """); } @@ -208,16 +216,16 @@ public override async Task Include_with_join_reference2(bool async) await base.Include_with_join_reference2(async); AssertSql( -""" -SELECT `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator`, `c`.`Name`, `c`.`Location`, `c`.`Nation` + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `c`.`Name`, `c`.`Location`, `c`.`Nation` FROM (`Tags` AS `t` INNER JOIN ( 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` -) AS `t0` ON `t`.`GearSquadId` = `t0`.`SquadId` AND `t`.`GearNickName` = `t0`.`Nickname`) -LEFT JOIN `Cities` AS `c` ON `t0`.`CityOfBirthName` = `c`.`Name` -WHERE `t0`.`CityOfBirthName` IS NOT NULL AND `c`.`Name` IS NOT NULL +) AS `s` ON `t`.`GearSquadId` = `s`.`SquadId` AND `t`.`GearNickName` = `s`.`Nickname`) +LEFT JOIN `Cities` AS `c` ON `s`.`CityOfBirthName` = `c`.`Name` +WHERE `s`.`CityOfBirthName` IS NOT NULL AND `c`.`Name` IS NOT NULL """); } @@ -241,16 +249,16 @@ public override async Task Include_with_join_collection2(bool async) await base.Include_with_join_collection2(async); AssertSql( -""" -SELECT `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator`, `t`.`Id`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `t`.`Id`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM (`Tags` AS `t` INNER JOIN ( 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` -) AS `t0` ON `t`.`GearSquadId` = `t0`.`SquadId` AND `t`.`GearNickName` = `t0`.`Nickname`) -LEFT JOIN `Weapons` AS `w` ON `t0`.`FullName` = `w`.`OwnerFullName` -ORDER BY `t`.`Id`, `t0`.`Nickname`, `t0`.`SquadId` +) AS `s` ON `t`.`GearSquadId` = `s`.`SquadId` AND `t`.`GearNickName` = `s`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `s`.`FullName` = `w`.`OwnerFullName` +ORDER BY `t`.`Id`, `s`.`Nickname`, `s`.`SquadId` """); } @@ -317,8 +325,8 @@ public override async Task Include_with_join_multi_level(bool async) await base.Include_with_join_multi_level(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`, `c`.`Name`, `c`.`Location`, `c`.`Nation`, `t`.`Id`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator` + """ +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`, `c`.`Name`, `c`.`Location`, `c`.`Nation`, `t`.`Id`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator` FROM (((`Gears` AS `g` LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) INNER JOIN `Tags` AS `t` ON `g`.`SquadId` = `t`.`GearSquadId` AND `g`.`Nickname` = `t`.`GearNickName`) @@ -327,8 +335,8 @@ LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` FROM `Gears` AS `g0` LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` -) AS `t0` ON `c`.`Name` = `t0`.`AssignedCityName` -ORDER BY `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `c`.`Name`, `t0`.`Nickname` +) AS `s` ON `c`.`Name` = `s`.`AssignedCityName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `c`.`Name`, `s`.`Nickname` """); } @@ -337,17 +345,17 @@ public override async Task Include_with_join_and_inheritance1(bool async) await base.Include_with_join_and_inheritance1(async); AssertSql( -""" -SELECT `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator`, `c`.`Name`, `c`.`Location`, `c`.`Nation` + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `c`.`Name`, `c`.`Location`, `c`.`Nation` FROM (`Tags` AS `t` INNER JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` FROM `Gears` AS `g` LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` WHERE `o`.`Nickname` IS NOT NULL -) AS `t0` ON `t`.`GearSquadId` = `t0`.`SquadId` AND `t`.`GearNickName` = `t0`.`Nickname`) -LEFT JOIN `Cities` AS `c` ON `t0`.`CityOfBirthName` = `c`.`Name` -WHERE `t0`.`CityOfBirthName` IS NOT NULL AND `c`.`Name` IS NOT NULL +) AS `s` ON `t`.`GearSquadId` = `s`.`SquadId` AND `t`.`GearNickName` = `s`.`Nickname`) +LEFT JOIN `Cities` AS `c` ON `s`.`CityOfBirthName` = `c`.`Name` +WHERE `s`.`CityOfBirthName` IS NOT NULL AND `c`.`Name` IS NOT NULL """); } @@ -356,21 +364,21 @@ public override async Task Include_with_join_and_inheritance_with_orderby_before await base.Include_with_join_and_inheritance_with_orderby_before_and_after_include(async); AssertSql( - """ -SELECT `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator`, `t`.`Id`, `t1`.`Nickname`, `t1`.`SquadId`, `t1`.`AssignedCityName`, `t1`.`CityOfBirthName`, `t1`.`FullName`, `t1`.`HasSoulPatch`, `t1`.`LeaderNickname`, `t1`.`LeaderSquadId`, `t1`.`Rank`, `t1`.`Discriminator` + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `t`.`Id`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`AssignedCityName`, `s0`.`CityOfBirthName`, `s0`.`FullName`, `s0`.`HasSoulPatch`, `s0`.`LeaderNickname`, `s0`.`LeaderSquadId`, `s0`.`Rank`, `s0`.`Discriminator` FROM (`Tags` AS `t` INNER JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` FROM `Gears` AS `g` LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` WHERE `o`.`Nickname` IS NOT NULL -) AS `t0` ON `t`.`GearSquadId` = `t0`.`SquadId` AND `t`.`GearNickName` = `t0`.`Nickname`) +) AS `s` ON `t`.`GearSquadId` = `s`.`SquadId` AND `t`.`GearNickName` = `s`.`Nickname`) LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` FROM `Gears` AS `g0` LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` -) AS `t1` ON `t0`.`Nickname` = `t1`.`LeaderNickname` AND `t0`.`SquadId` = `t1`.`LeaderSquadId` -ORDER BY NOT (`t0`.`HasSoulPatch`), `t0`.`Nickname` DESC, `t`.`Id`, `t0`.`SquadId`, `t1`.`Nickname` +) AS `s0` ON `s`.`Nickname` = `s0`.`LeaderNickname` AND `s`.`SquadId` = `s0`.`LeaderSquadId` +ORDER BY NOT (`s`.`HasSoulPatch`), `s`.`Nickname` DESC, `t`.`Id`, `s`.`SquadId`, `s0`.`Nickname` """); } @@ -395,21 +403,21 @@ public override async Task Include_with_join_and_inheritance3(bool async) await base.Include_with_join_and_inheritance3(async); AssertSql( -""" -SELECT `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator`, `t`.`Id`, `t1`.`Nickname`, `t1`.`SquadId`, `t1`.`AssignedCityName`, `t1`.`CityOfBirthName`, `t1`.`FullName`, `t1`.`HasSoulPatch`, `t1`.`LeaderNickname`, `t1`.`LeaderSquadId`, `t1`.`Rank`, `t1`.`Discriminator` + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `t`.`Id`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`AssignedCityName`, `s0`.`CityOfBirthName`, `s0`.`FullName`, `s0`.`HasSoulPatch`, `s0`.`LeaderNickname`, `s0`.`LeaderSquadId`, `s0`.`Rank`, `s0`.`Discriminator` FROM (`Tags` AS `t` INNER JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` FROM `Gears` AS `g` LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` WHERE `o`.`Nickname` IS NOT NULL -) AS `t0` ON `t`.`GearSquadId` = `t0`.`SquadId` AND `t`.`GearNickName` = `t0`.`Nickname`) +) AS `s` ON `t`.`GearSquadId` = `s`.`SquadId` AND `t`.`GearNickName` = `s`.`Nickname`) LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` FROM `Gears` AS `g0` LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` -) AS `t1` ON `t0`.`Nickname` = `t1`.`LeaderNickname` AND `t0`.`SquadId` = `t1`.`LeaderSquadId` -ORDER BY `t`.`Id`, `t0`.`Nickname`, `t0`.`SquadId`, `t1`.`Nickname` +) AS `s0` ON `s`.`Nickname` = `s0`.`LeaderNickname` AND `s`.`SquadId` = `s0`.`LeaderSquadId` +ORDER BY `t`.`Id`, `s`.`Nickname`, `s`.`SquadId`, `s0`.`Nickname` """); } @@ -418,16 +426,16 @@ public override async Task Include_with_nested_navigation_in_order_by(bool async await base.Include_with_nested_navigation_in_order_by(async); AssertSql( -""" -SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + """ +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator` FROM (`Weapons` AS `w` LEFT JOIN ( 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` -) AS `t` ON `w`.`OwnerFullName` = `t`.`FullName`) -LEFT JOIN `Cities` AS `c` ON `t`.`CityOfBirthName` = `c`.`Name` -WHERE `t`.`Nickname` <> 'Paduk' OR `t`.`Nickname` IS NULL +) AS `s` ON `w`.`OwnerFullName` = `s`.`FullName`) +LEFT JOIN `Cities` AS `c` ON `s`.`CityOfBirthName` = `c`.`Name` +WHERE `s`.`Nickname` <> 'Paduk' OR `s`.`Nickname` IS NULL ORDER BY `c`.`Name`, `w`.`Id` """); } @@ -679,49 +687,41 @@ public override async Task Where_enum_has_flag_subquery(bool async) await base.Where_enum_has_flag_subquery(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` WHERE (`g`.`Rank` BAND IIF(( SELECT TOP 1 `g0`.`Rank` FROM `Gears` AS `g0` - LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` ORDER BY `g0`.`Nickname`, `g0`.`SquadId`) IS NULL, 0, ( SELECT TOP 1 `g0`.`Rank` FROM `Gears` AS `g0` - LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` ORDER BY `g0`.`Nickname`, `g0`.`SquadId`))) = IIF(( SELECT TOP 1 `g0`.`Rank` FROM `Gears` AS `g0` - LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` ORDER BY `g0`.`Nickname`, `g0`.`SquadId`) IS NULL, 0, ( SELECT TOP 1 `g0`.`Rank` FROM `Gears` AS `g0` - LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` ORDER BY `g0`.`Nickname`, `g0`.`SquadId`)) """, -// -""" + // + """ SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` FROM `Gears` AS `g` LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` WHERE (2 BAND IIF(( SELECT TOP 1 `g0`.`Rank` FROM `Gears` AS `g0` - LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` ORDER BY `g0`.`Nickname`, `g0`.`SquadId`) IS NULL, 0, ( SELECT TOP 1 `g0`.`Rank` FROM `Gears` AS `g0` - LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` ORDER BY `g0`.`Nickname`, `g0`.`SquadId`))) = IIF(( SELECT TOP 1 `g0`.`Rank` FROM `Gears` AS `g0` - LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` ORDER BY `g0`.`Nickname`, `g0`.`SquadId`) IS NULL, 0, ( SELECT TOP 1 `g0`.`Rank` FROM `Gears` AS `g0` - LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` ORDER BY `g0`.`Nickname`, `g0`.`SquadId`)) """); } @@ -731,50 +731,36 @@ public override async Task Where_enum_has_flag_subquery_with_pushdown(bool async await base.Where_enum_has_flag_subquery_with_pushdown(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` WHERE (`g`.`Rank` BAND ( SELECT TOP 1 `g0`.`Rank` FROM `Gears` AS `g0` - LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` ORDER BY `g0`.`Nickname`, `g0`.`SquadId`)) = ( SELECT TOP 1 `g0`.`Rank` FROM `Gears` AS `g0` - LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` - ORDER BY `g0`.`Nickname`, `g0`.`SquadId`) OR (( - SELECT TOP 1 `g0`.`Rank` - FROM `Gears` AS `g0` - LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` - ORDER BY `g0`.`Nickname`, `g0`.`SquadId`) IS NULL AND ( + ORDER BY `g0`.`Nickname`, `g0`.`SquadId`) OR ( SELECT TOP 1 `g0`.`Rank` FROM `Gears` AS `g0` - LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` - ORDER BY `g0`.`Nickname`, `g0`.`SquadId`) IS NULL) + ORDER BY `g0`.`Nickname`, `g0`.`SquadId`) IS NULL """, -// -""" + // + """ SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` FROM `Gears` AS `g` LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` WHERE (2 BAND ( SELECT TOP 1 `g0`.`Rank` FROM `Gears` AS `g0` - LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` ORDER BY `g0`.`Nickname`, `g0`.`SquadId`)) = ( SELECT TOP 1 `g0`.`Rank` FROM `Gears` AS `g0` - LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` - ORDER BY `g0`.`Nickname`, `g0`.`SquadId`) OR (( - SELECT TOP 1 `g0`.`Rank` - FROM `Gears` AS `g0` - LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` - ORDER BY `g0`.`Nickname`, `g0`.`SquadId`) IS NULL AND ( + ORDER BY `g0`.`Nickname`, `g0`.`SquadId`) OR ( SELECT TOP 1 `g0`.`Rank` FROM `Gears` AS `g0` - LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` - ORDER BY `g0`.`Nickname`, `g0`.`SquadId`) IS NULL) + ORDER BY `g0`.`Nickname`, `g0`.`SquadId`) IS NULL """); } @@ -783,27 +769,20 @@ public override async Task Where_enum_has_flag_subquery_client_eval(bool async) await base.Where_enum_has_flag_subquery_client_eval(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` WHERE (`g`.`Rank` BAND ( SELECT TOP 1 `g0`.`Rank` FROM `Gears` AS `g0` - LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` ORDER BY `g0`.`Nickname`, `g0`.`SquadId`)) = ( SELECT TOP 1 `g0`.`Rank` FROM `Gears` AS `g0` - LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` - ORDER BY `g0`.`Nickname`, `g0`.`SquadId`) OR (( - SELECT TOP 1 `g0`.`Rank` - FROM `Gears` AS `g0` - LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` - ORDER BY `g0`.`Nickname`, `g0`.`SquadId`) IS NULL AND ( + ORDER BY `g0`.`Nickname`, `g0`.`SquadId`) OR ( SELECT TOP 1 `g0`.`Rank` FROM `Gears` AS `g0` - LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` - ORDER BY `g0`.`Nickname`, `g0`.`SquadId`) IS NULL) + ORDER BY `g0`.`Nickname`, `g0`.`SquadId`) IS NULL """); } @@ -895,6 +874,17 @@ public override async Task Select_inverted_boolean(bool async) """); } + public override async Task Select_inverted_nullable_boolean(bool async) + { + await base.Select_inverted_nullable_boolean(async); + + AssertSql( + """ +SELECT [l].[Id], [l].[Eradicated] ^ CAST(1 AS bit) AS [Alive] +FROM [LocustHordes] AS [l] +"""); + } + public override async Task Select_comparison_with_null(bool async) { await base.Select_comparison_with_null(async); @@ -921,27 +911,27 @@ public override async Task Select_null_parameter(bool async) await base.Select_null_parameter(async); AssertSql( -""" + """ @__ammunitionType_0='1' (Nullable = true) SELECT `w`.`Id`, @__ammunitionType_0 AS `AmmoType` FROM `Weapons` AS `w` """, -// -""" -SELECT `w`.`Id`, NULL AS `AmmoType` + // + """ +SELECT `w`.`Id`, CVar(NULL) AS `AmmoType` FROM `Weapons` AS `w` """, -// -""" + // + """ @__ammunitionType_0='2' (Nullable = true) SELECT `w`.`Id`, @__ammunitionType_0 AS `AmmoType` FROM `Weapons` AS `w` """, -// -""" -SELECT `w`.`Id`, NULL AS `AmmoType` + // + """ +SELECT `w`.`Id`, CVar(NULL) AS `AmmoType` FROM `Weapons` AS `w` """); } @@ -1029,11 +1019,11 @@ public override async Task Null_propagation_optimization1(bool async) await base.Null_propagation_optimization1(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` -WHERE `g`.`LeaderNickname` = 'Marcus' AND `g`.`LeaderNickname` IS NOT NULL +WHERE `g`.`LeaderNickname` = 'Marcus' """); } @@ -1069,11 +1059,11 @@ public override async Task Null_propagation_optimization4(bool async) // issue #16050 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` -WHERE IIF(`g`.`LeaderNickname` IS NULL, NULL, IIF(LEN(`g`.`LeaderNickname`) IS NULL, NULL, CLNG(LEN(`g`.`LeaderNickname`)))) = 5 AND IIF(`g`.`LeaderNickname` IS NULL, NULL, IIF(LEN(`g`.`LeaderNickname`) IS NULL, NULL, CLNG(LEN(`g`.`LeaderNickname`)))) IS NOT NULL +WHERE IIF(`g`.`LeaderNickname` IS NULL, NULL, IIF(LEN(`g`.`LeaderNickname`) IS NULL, NULL, CLNG(LEN(`g`.`LeaderNickname`)))) = 5 """); } @@ -1082,11 +1072,11 @@ public override async Task Null_propagation_optimization5(bool async) await base.Null_propagation_optimization5(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` -WHERE IIF(`g`.`LeaderNickname` IS NOT NULL, IIF(LEN(`g`.`LeaderNickname`) IS NULL, NULL, CLNG(LEN(`g`.`LeaderNickname`))), NULL) = 5 AND IIF(`g`.`LeaderNickname` IS NOT NULL, IIF(LEN(`g`.`LeaderNickname`) IS NULL, NULL, CLNG(LEN(`g`.`LeaderNickname`))), NULL) IS NOT NULL +WHERE IIF(`g`.`LeaderNickname` IS NOT NULL, IIF(LEN(`g`.`LeaderNickname`) IS NULL, NULL, CLNG(LEN(`g`.`LeaderNickname`))), NULL) = 5 """); } @@ -1095,11 +1085,11 @@ public override async Task Null_propagation_optimization6(bool async) await base.Null_propagation_optimization6(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` -WHERE IIF(`g`.`LeaderNickname` IS NOT NULL, IIF(LEN(`g`.`LeaderNickname`) IS NULL, NULL, CLNG(LEN(`g`.`LeaderNickname`))), NULL) = 5 AND IIF(`g`.`LeaderNickname` IS NOT NULL, IIF(LEN(`g`.`LeaderNickname`) IS NULL, NULL, CLNG(LEN(`g`.`LeaderNickname`))), NULL) IS NOT NULL +WHERE IIF(`g`.`LeaderNickname` IS NOT NULL, IIF(LEN(`g`.`LeaderNickname`) IS NULL, NULL, CLNG(LEN(`g`.`LeaderNickname`))), NULL) = 5 """); } @@ -1152,13 +1142,13 @@ public override async Task Select_null_propagation_negative2(bool async) await base.Select_null_propagation_negative2(async); AssertSql( -""" -SELECT IIF(`g`.`LeaderNickname` IS NOT NULL, `t`.`LeaderNickname`, NULL) + """ +SELECT IIF(`g`.`LeaderNickname` IS NOT NULL, `s`.`LeaderNickname`, NULL) FROM `Gears` AS `g`, ( SELECT `g0`.`LeaderNickname` FROM `Gears` AS `g0` -) AS `t` +) AS `s` """); } @@ -1219,8 +1209,8 @@ public override async Task Select_null_propagation_negative6(bool async) await base.Select_null_propagation_negative6(async); AssertSql( -""" -SELECT IIF(`g`.`LeaderNickname` IS NOT NULL, IIF(IIF(LEN(`g`.`LeaderNickname`) IS NULL, NULL, CLNG(LEN(`g`.`LeaderNickname`))) <> IIF(LEN(`g`.`LeaderNickname`) IS NULL, NULL, CLNG(LEN(`g`.`LeaderNickname`))), TRUE, FALSE), NULL) + """ +SELECT IIF(`g`.`LeaderNickname` IS NOT NULL, FALSE, NULL) FROM `Gears` AS `g` """); } @@ -1241,15 +1231,15 @@ public override async Task Select_null_propagation_negative8(bool async) await base.Select_null_propagation_negative8(async); AssertSql( -""" -SELECT IIF(`s`.`Id` IS NOT NULL, `c`.`Name`, NULL) + """ +SELECT IIF(`s0`.`Id` IS NOT NULL, `c`.`Name`, NULL) FROM ((`Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName` FROM `Gears` AS `g` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId`) -LEFT JOIN `Squads` AS `s` ON `t0`.`SquadId` = `s`.`Id`) -LEFT JOIN `Cities` AS `c` ON `t0`.`AssignedCityName` = `c`.`Name` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId`) +LEFT JOIN `Squads` AS `s0` ON `s`.`SquadId` = `s0`.`Id`) +LEFT JOIN `Cities` AS `c` ON `s`.`AssignedCityName` = `c`.`Name` """); } @@ -1258,8 +1248,8 @@ public override async Task Select_null_propagation_negative9(bool async) await base.Select_null_propagation_negative9(async); AssertSql( -""" -SELECT IIF(`g`.`LeaderNickname` IS NOT NULL, IIF(IIF(IIF(LEN(`g`.`Nickname`) IS NULL, NULL, CLNG(LEN(`g`.`Nickname`))) = 5, TRUE, FALSE) IS NULL, FALSE, IIF(IIF(LEN(`g`.`Nickname`) IS NULL, NULL, CLNG(LEN(`g`.`Nickname`))) = 5, TRUE, FALSE)), NULL) + """ +SELECT IIF(`g`.`LeaderNickname` IS NOT NULL, IIF(IIF(LEN(`g`.`Nickname`) IS NULL, NULL, CLNG(LEN(`g`.`Nickname`))) = 5, TRUE, FALSE), NULL) FROM `Gears` AS `g` """); } @@ -1269,13 +1259,13 @@ public override async Task Select_null_propagation_works_for_navigations_with_co await base.Select_null_propagation_works_for_navigations_with_composite_keys(async); AssertSql( -""" -SELECT `t0`.`Nickname` + """ +SELECT `s`.`Nickname` FROM `Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId` FROM `Gears` AS `g` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` """); } @@ -1284,19 +1274,19 @@ public override async Task Select_null_propagation_works_for_multiple_navigation await base.Select_null_propagation_works_for_multiple_navigations_with_composite_keys(async); AssertSql( -""" + """ SELECT IIF(`c`.`Name` IS NOT NULL, `c`.`Name`, NULL) FROM (((`Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId` FROM `Gears` AS `g` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `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))) +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId`) +LEFT JOIN `Tags` AS `t0` ON (`s`.`Nickname` = `t0`.`GearNickName` OR (`s`.`Nickname` IS NULL AND `t0`.`GearNickName` IS NULL)) AND (`s`.`SquadId` = `t0`.`GearSquadId` OR (`s`.`SquadId` IS NULL AND `t0`.`GearSquadId` IS NULL))) LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName` FROM `Gears` AS `g0` -) AS `t2` ON `t1`.`GearNickName` = `t2`.`Nickname` AND `t1`.`GearSquadId` = `t2`.`SquadId`) -LEFT JOIN `Cities` AS `c` ON `t2`.`AssignedCityName` = `c`.`Name` +) AS `s0` ON `t0`.`GearNickName` = `s0`.`Nickname` AND `t0`.`GearSquadId` = `s0`.`SquadId`) +LEFT JOIN `Cities` AS `c` ON `s0`.`AssignedCityName` = `c`.`Name` """); } @@ -1410,22 +1400,22 @@ public override async Task Select_Where_Navigation_Scalar_Equals_Navigation_Scal await base.Select_Where_Navigation_Scalar_Equals_Navigation_Scalar(async); AssertSql( -""" -SELECT `t1`.`Id`, `t1`.`GearNickName`, `t1`.`GearSquadId`, `t1`.`IssueDate`, `t1`.`Note`, `t1`.`Id0`, `t1`.`GearNickName0`, `t1`.`GearSquadId0`, `t1`.`IssueDate0`, `t1`.`Note0` + """ +SELECT `s`.`Id`, `s`.`GearNickName`, `s`.`GearSquadId`, `s`.`IssueDate`, `s`.`Note`, `s`.`Id0`, `s`.`GearNickName0`, `s`.`GearSquadId0`, `s`.`IssueDate0`, `s`.`Note0` FROM (( SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note`, `t0`.`Id` AS `Id0`, `t0`.`GearNickName` AS `GearNickName0`, `t0`.`GearSquadId` AS `GearSquadId0`, `t0`.`IssueDate` AS `IssueDate0`, `t0`.`Note` AS `Note0` FROM `Tags` AS `t`, `Tags` AS `t0` -) AS `t1` +) AS `s` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId` FROM `Gears` AS `g` -) AS `t2` ON `t1`.`GearNickName` = `t2`.`Nickname` AND `t1`.`GearSquadId` = `t2`.`SquadId`) +) AS `s0` ON `s`.`GearNickName` = `s0`.`Nickname` AND `s`.`GearSquadId` = `s0`.`SquadId`) LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId` FROM `Gears` AS `g0` -) AS `t3` ON `t1`.`GearNickName0` = `t3`.`Nickname` AND `t1`.`GearSquadId0` = `t3`.`SquadId` -WHERE `t2`.`Nickname` = `t3`.`Nickname` OR (`t2`.`Nickname` IS NULL AND `t3`.`Nickname` IS NULL) +) AS `s1` ON `s`.`GearNickName0` = `s1`.`Nickname` AND `s`.`GearSquadId0` = `s1`.`SquadId` +WHERE `s0`.`Nickname` = `s1`.`Nickname` OR (`s0`.`Nickname` IS NULL AND `s1`.`Nickname` IS NULL) """); } @@ -1434,15 +1424,15 @@ public override async Task Select_Singleton_Navigation_With_Member_Access(bool a await base.Select_Singleton_Navigation_With_Member_Access(async); AssertSql( -""" -SELECT `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator` + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator` FROM `Tags` AS `t` LEFT JOIN ( 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` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` -WHERE `t0`.`Nickname` = 'Marcus' AND (`t0`.`CityOfBirthName` <> 'Ephyra' OR `t0`.`CityOfBirthName` IS NULL) +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE `s`.`Nickname` = 'Marcus' AND (`s`.`CityOfBirthName` <> 'Ephyra' OR `s`.`CityOfBirthName` IS NULL) """); } @@ -1451,14 +1441,14 @@ public override async Task Select_Where_Navigation(bool async) await base.Select_Where_Navigation(async); AssertSql( -""" + """ SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` FROM `Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId` FROM `Gears` AS `g` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` -WHERE `t0`.`Nickname` = 'Marcus' +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE `s`.`Nickname` = 'Marcus' """); } @@ -1467,22 +1457,22 @@ public override async Task Select_Where_Navigation_Equals_Navigation(bool async) await base.Select_Where_Navigation_Equals_Navigation(async); AssertSql( -""" -SELECT `t1`.`Id`, `t1`.`GearNickName`, `t1`.`GearSquadId`, `t1`.`IssueDate`, `t1`.`Note`, `t1`.`Id0`, `t1`.`GearNickName0`, `t1`.`GearSquadId0`, `t1`.`IssueDate0`, `t1`.`Note0` + """ +SELECT `s`.`Id`, `s`.`GearNickName`, `s`.`GearSquadId`, `s`.`IssueDate`, `s`.`Note`, `s`.`Id0`, `s`.`GearNickName0`, `s`.`GearSquadId0`, `s`.`IssueDate0`, `s`.`Note0` FROM (( SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note`, `t0`.`Id` AS `Id0`, `t0`.`GearNickName` AS `GearNickName0`, `t0`.`GearSquadId` AS `GearSquadId0`, `t0`.`IssueDate` AS `IssueDate0`, `t0`.`Note` AS `Note0` FROM `Tags` AS `t`, `Tags` AS `t0` -) AS `t1` +) AS `s` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId` FROM `Gears` AS `g` -) AS `t2` ON `t1`.`GearNickName` = `t2`.`Nickname` AND `t1`.`GearSquadId` = `t2`.`SquadId`) +) AS `s0` ON `s`.`GearNickName` = `s0`.`Nickname` AND `s`.`GearSquadId` = `s0`.`SquadId`) LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId` FROM `Gears` AS `g0` -) AS `t3` ON `t1`.`GearNickName0` = `t3`.`Nickname` AND `t1`.`GearSquadId0` = `t3`.`SquadId` -WHERE (`t2`.`Nickname` = `t3`.`Nickname` OR (`t2`.`Nickname` IS NULL AND `t3`.`Nickname` IS NULL)) AND (`t2`.`SquadId` = `t3`.`SquadId` OR (`t2`.`SquadId` IS NULL AND `t3`.`SquadId` IS NULL)) +) AS `s1` ON `s`.`GearNickName0` = `s1`.`Nickname` AND `s`.`GearSquadId0` = `s1`.`SquadId` +WHERE (`s0`.`Nickname` = `s1`.`Nickname` OR (`s0`.`Nickname` IS NULL AND `s1`.`Nickname` IS NULL)) AND (`s0`.`SquadId` = `s1`.`SquadId` OR (`s0`.`SquadId` IS NULL AND `s1`.`SquadId` IS NULL)) """); } @@ -1491,14 +1481,14 @@ public override async Task Select_Where_Navigation_Null(bool async) await base.Select_Where_Navigation_Null(async); AssertSql( -""" + """ SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` FROM `Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId` FROM `Gears` AS `g` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` -WHERE `t0`.`Nickname` IS NULL OR `t0`.`SquadId` IS NULL +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE `s`.`Nickname` IS NULL OR `s`.`SquadId` IS NULL """); } @@ -1507,14 +1497,14 @@ public override async Task Select_Where_Navigation_Null_Reverse(bool async) await base.Select_Where_Navigation_Null_Reverse(async); AssertSql( -""" + """ SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` FROM `Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId` FROM `Gears` AS `g` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` -WHERE `t0`.`Nickname` IS NULL OR `t0`.`SquadId` IS NULL +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE `s`.`Nickname` IS NULL OR `s`.`SquadId` IS NULL """); } @@ -1523,22 +1513,22 @@ public override async Task Select_Where_Navigation_Scalar_Equals_Navigation_Scal await base.Select_Where_Navigation_Scalar_Equals_Navigation_Scalar_Projected(async); AssertSql( -""" -SELECT `t1`.`Id` AS `Id1`, `t1`.`Id0` AS `Id2` + """ +SELECT `s`.`Id` AS `Id1`, `s`.`Id0` AS `Id2` FROM (( SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t0`.`Id` AS `Id0`, `t0`.`GearNickName` AS `GearNickName0`, `t0`.`GearSquadId` AS `GearSquadId0` FROM `Tags` AS `t`, `Tags` AS `t0` -) AS `t1` +) AS `s` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId` FROM `Gears` AS `g` -) AS `t2` ON `t1`.`GearNickName` = `t2`.`Nickname` AND `t1`.`GearSquadId` = `t2`.`SquadId`) +) AS `s0` ON `s`.`GearNickName` = `s0`.`Nickname` AND `s`.`GearSquadId` = `s0`.`SquadId`) LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId` FROM `Gears` AS `g0` -) AS `t3` ON `t1`.`GearNickName0` = `t3`.`Nickname` AND `t1`.`GearSquadId0` = `t3`.`SquadId` -WHERE `t2`.`Nickname` = `t3`.`Nickname` OR (`t2`.`Nickname` IS NULL AND `t3`.`Nickname` IS NULL) +) AS `s1` ON `s`.`GearNickName0` = `s1`.`Nickname` AND `s`.`GearSquadId0` = `s1`.`SquadId` +WHERE `s0`.`Nickname` = `s1`.`Nickname` OR (`s0`.`Nickname` IS NULL AND `s1`.`Nickname` IS NULL) """); } @@ -1919,17 +1909,15 @@ public override async Task Concat_with_count(bool async) await base.Concat_with_count(async); AssertSql( -""" + """ SELECT COUNT(*) FROM ( - 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` + SELECT 1 FROM `Gears` AS `g` - LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` UNION ALL - SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + SELECT 1 FROM `Gears` AS `g0` - LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` -) AS `t` +) AS `u` """); } @@ -1938,15 +1926,15 @@ public override async Task Concat_scalars_with_count(bool async) await base.Concat_scalars_with_count(async); AssertSql( -""" + """ SELECT COUNT(*) FROM ( - SELECT `g`.`Nickname` + SELECT 1 FROM `Gears` AS `g` UNION ALL - SELECT `g0`.`FullName` AS `Nickname` + SELECT 1 FROM `Gears` AS `g0` -) AS `t` +) AS `u` """); } @@ -1955,17 +1943,15 @@ public override async Task Concat_anonymous_with_count(bool async) await base.Concat_anonymous_with_count(async); AssertSql( -""" + """ SELECT COUNT(*) FROM ( - 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`, `g`.`Nickname` AS `Name` + SELECT 1 FROM `Gears` AS `g` - LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` UNION ALL - SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `g0`.`FullName` AS `Name` + SELECT 1 FROM `Gears` AS `g0` - LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` -) AS `t` +) AS `u` """); } @@ -2080,14 +2066,14 @@ public override async Task Singleton_Navigation_With_Member_Access(bool async) await base.Singleton_Navigation_With_Member_Access(async); AssertSql( -""" -SELECT `t0`.`CityOfBirthName` AS `B` + """ +SELECT `s`.`CityOfBirthName` AS `B` FROM `Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`CityOfBirthName` FROM `Gears` AS `g` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` -WHERE `t0`.`Nickname` = 'Marcus' AND (`t0`.`CityOfBirthName` <> 'Ephyra' OR `t0`.`CityOfBirthName` IS NULL) +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE `s`.`Nickname` = 'Marcus' AND (`s`.`CityOfBirthName` <> 'Ephyra' OR `s`.`CityOfBirthName` IS NULL) """); } @@ -2096,14 +2082,14 @@ public override async Task GroupJoin_Composite_Key(bool async) await base.GroupJoin_Composite_Key(async); AssertSql( -""" -SELECT `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator` + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator` FROM `Tags` AS `t` INNER JOIN ( 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` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` """); } @@ -2112,17 +2098,17 @@ public override async Task Join_navigation_translated_to_subquery_composite_key( await base.Join_navigation_translated_to_subquery_composite_key(async); AssertSql( -""" -SELECT `g`.`FullName`, `t1`.`Note` + """ +SELECT `g`.`FullName`, `s0`.`Note` FROM `Gears` AS `g` INNER JOIN ( - SELECT `t`.`Note`, `t0`.`FullName` + SELECT `t`.`Note`, `s`.`FullName` FROM `Tags` AS `t` LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`FullName` FROM `Gears` AS `g0` - ) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` -) AS `t1` ON `g`.`FullName` = `t1`.`FullName` + ) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +) AS `s0` ON `g`.`FullName` = `s0`.`FullName` """); } @@ -2131,17 +2117,17 @@ public override async Task Join_with_order_by_on_inner_sequence_navigation_trans await base.Join_with_order_by_on_inner_sequence_navigation_translated_to_subquery_composite_key(async); AssertSql( -""" -SELECT `g`.`FullName`, `t1`.`Note` + """ +SELECT `g`.`FullName`, `s0`.`Note` FROM `Gears` AS `g` INNER JOIN ( - SELECT `t`.`Note`, `t0`.`FullName` + SELECT `t`.`Note`, `s`.`FullName` FROM `Tags` AS `t` LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`FullName` FROM `Gears` AS `g0` - ) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` -) AS `t1` ON `g`.`FullName` = `t1`.`FullName` + ) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +) AS `s0` ON `g`.`FullName` = `s0`.`FullName` """); } @@ -2162,15 +2148,15 @@ public override async Task Join_with_order_by_without_skip_or_take_nested(bool a await base.Join_with_order_by_without_skip_or_take_nested(async); AssertSql( -""" -SELECT `w`.`Name`, `t`.`FullName` + """ +SELECT `w`.`Name`, `s0`.`FullName` FROM (`Squads` AS `s` INNER JOIN ( SELECT `g`.`SquadId`, `g`.`FullName` FROM `Gears` AS `g` -) AS `t` ON `s`.`Id` = `t`.`SquadId`) -LEFT JOIN `Weapons` AS `w` ON `t`.`FullName` = `w`.`OwnerFullName` -WHERE `t`.`FullName` IS NOT NULL AND `w`.`OwnerFullName` IS NOT NULL +) AS `s0` ON `s`.`Id` = `s0`.`SquadId`) +LEFT JOIN `Weapons` AS `w` ON `s0`.`FullName` = `w`.`OwnerFullName` +WHERE `s0`.`FullName` IS NOT NULL AND `w`.`OwnerFullName` IS NOT NULL """); } @@ -2179,16 +2165,16 @@ public override async Task Collection_with_inheritance_and_join_include_joined(b await base.Collection_with_inheritance_and_join_include_joined(async); AssertSql( -""" -SELECT `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator`, `t1`.`Id`, `t1`.`GearNickName`, `t1`.`GearSquadId`, `t1`.`IssueDate`, `t1`.`Note` + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `t0`.`Id`, `t0`.`GearNickName`, `t0`.`GearSquadId`, `t0`.`IssueDate`, `t0`.`Note` FROM (`Tags` AS `t` INNER JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` FROM `Gears` AS `g` LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` WHERE `o`.`Nickname` IS NOT NULL -) AS `t0` ON `t`.`GearSquadId` = `t0`.`SquadId` AND `t`.`GearNickName` = `t0`.`Nickname`) -LEFT JOIN `Tags` AS `t1` ON `t0`.`Nickname` = `t1`.`GearNickName` AND `t0`.`SquadId` = `t1`.`GearSquadId` +) AS `s` ON `t`.`GearSquadId` = `s`.`SquadId` AND `t`.`GearNickName` = `s`.`Nickname`) +LEFT JOIN `Tags` AS `t0` ON `s`.`Nickname` = `t0`.`GearNickName` AND `s`.`SquadId` = `t0`.`GearSquadId` """); } @@ -2262,13 +2248,12 @@ public override async Task Non_unicode_string_literals_is_used_for_non_unicode_c await base.Non_unicode_string_literals_is_used_for_non_unicode_column_with_subquery(async); AssertSql( -""" + """ SELECT `c`.`Name`, `c`.`Location`, `c`.`Nation` FROM `Cities` AS `c` WHERE `c`.`Location` = 'Unknown' AND ( SELECT COUNT(*) FROM `Gears` AS `g` - LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` WHERE `c`.`Name` = `g`.`CityOfBirthName` AND `g`.`Nickname` = 'Paduk') = 1 """); } @@ -2317,17 +2302,17 @@ public override void Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_coalesc // Issue#16897 AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `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`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `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`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM ((`Gears` AS `g` LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` FROM `Gears` AS `g0` LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` -) AS `t` ON `g`.`LeaderNickname` = `t`.`Nickname`) +) AS `s` ON `g`.`LeaderNickname` = `s`.`Nickname`) LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName` -ORDER BY `g`.`Nickname`, `g`.`SquadId`, `t`.`Nickname`, `t`.`SquadId` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s`.`Nickname`, `s`.`SquadId` """); } @@ -2337,17 +2322,17 @@ public override void Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_coalesc // Issue#16897 AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `g`.`Nickname`, `g`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `g`.`Nickname`, `g`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `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`) LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` FROM `Gears` AS `g0` LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` -) AS `t` ON `g`.`LeaderNickname` = `t`.`Nickname`) -LEFT JOIN `Weapons` AS `w` ON `t`.`FullName` = `w`.`OwnerFullName` -ORDER BY `g`.`Nickname`, `g`.`SquadId`, `t`.`Nickname`, `t`.`SquadId` +) AS `s` ON `g`.`LeaderNickname` = `s`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `s`.`FullName` = `w`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s`.`Nickname`, `s`.`SquadId` """); } @@ -2357,18 +2342,18 @@ public override async Task Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_c // Issue#16897 AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `g`.`Nickname`, `g`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `g`.`Nickname`, `g`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` FROM (((`Gears` AS `g` LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` FROM `Gears` AS `g0` LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` -) AS `t` ON `g`.`LeaderNickname` = `t`.`Nickname`) -LEFT JOIN `Weapons` AS `w` ON `t`.`FullName` = `w`.`OwnerFullName`) +) AS `s` ON `g`.`LeaderNickname` = `s`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `s`.`FullName` = `w`.`OwnerFullName`) LEFT JOIN `Weapons` AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` -ORDER BY `g`.`Nickname`, `g`.`SquadId`, `t`.`Nickname`, `t`.`SquadId`, `w`.`Id` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s`.`Nickname`, `s`.`SquadId`, `w`.`Id` """); } @@ -2378,20 +2363,20 @@ public override async Task Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_c // Issue#16897 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`, `t`.`Nickname`, `t`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId`, `w1`.`Id`, `w1`.`AmmunitionType`, `w1`.`IsAutomatic`, `w1`.`Name`, `w1`.`OwnerFullName`, `w1`.`SynergyWithId`, `w2`.`Id`, `w2`.`AmmunitionType`, `w2`.`IsAutomatic`, `w2`.`Name`, `w2`.`OwnerFullName`, `w2`.`SynergyWithId` + """ +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`, `s`.`Nickname`, `s`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId`, `w1`.`Id`, `w1`.`AmmunitionType`, `w1`.`IsAutomatic`, `w1`.`Name`, `w1`.`OwnerFullName`, `w1`.`SynergyWithId`, `w2`.`Id`, `w2`.`AmmunitionType`, `w2`.`IsAutomatic`, `w2`.`Name`, `w2`.`OwnerFullName`, `w2`.`SynergyWithId` FROM (((((`Gears` AS `g` LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` FROM `Gears` AS `g0` LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` -) AS `t` ON `g`.`LeaderNickname` = `t`.`Nickname`) +) AS `s` ON `g`.`LeaderNickname` = `s`.`Nickname`) LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName`) -LEFT JOIN `Weapons` AS `w0` ON `t`.`FullName` = `w0`.`OwnerFullName`) -LEFT JOIN `Weapons` AS `w1` ON `t`.`FullName` = `w1`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w0` ON `s`.`FullName` = `w0`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w1` ON `s`.`FullName` = `w1`.`OwnerFullName`) LEFT JOIN `Weapons` AS `w2` ON `g`.`FullName` = `w2`.`OwnerFullName` -ORDER BY `g`.`Nickname`, `g`.`SquadId`, `t`.`Nickname`, `t`.`SquadId`, `w`.`Id`, `w0`.`Id`, `w1`.`Id` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s`.`Nickname`, `s`.`SquadId`, `w`.`Id`, `w0`.`Id`, `w1`.`Id` """); } @@ -2401,8 +2386,8 @@ public override async Task Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_i // Issue#16897 AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `g`.`Nickname`, `g`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `g`.`Nickname`, `g`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` FROM (((`Gears` AS `g` LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) LEFT JOIN ( @@ -2410,10 +2395,10 @@ LEFT JOIN ( FROM `Gears` AS `g0` LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` WHERE `o0`.`Nickname` IS NOT NULL -) AS `t` ON `g`.`LeaderNickname` = `t`.`Nickname`) -LEFT JOIN `Weapons` AS `w` ON `t`.`FullName` = `w`.`OwnerFullName`) +) AS `s` ON `g`.`LeaderNickname` = `s`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `s`.`FullName` = `w`.`OwnerFullName`) LEFT JOIN `Weapons` AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` -ORDER BY `g`.`Nickname`, `g`.`SquadId`, `t`.`Nickname`, `t`.`SquadId`, `w`.`Id` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s`.`Nickname`, `s`.`SquadId`, `w`.`Id` """); } @@ -2423,18 +2408,18 @@ public override async Task Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_c // Issue#16897 AssertSql( -""" -SELECT IIF(`t`.`Nickname` IS NOT NULL AND `t`.`SquadId` IS NOT NULL, TRUE, FALSE), `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `g`.`Nickname`, `g`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` + """ +SELECT IIF(`s`.`Nickname` IS NOT NULL AND `s`.`SquadId` IS NOT NULL, TRUE, FALSE), `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `g`.`Nickname`, `g`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` FROM (((`Gears` AS `g` LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` FROM `Gears` AS `g0` LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` -) AS `t` ON `g`.`LeaderNickname` = `t`.`Nickname`) -LEFT JOIN `Weapons` AS `w` ON `t`.`FullName` = `w`.`OwnerFullName`) +) AS `s` ON `g`.`LeaderNickname` = `s`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `s`.`FullName` = `w`.`OwnerFullName`) LEFT JOIN `Weapons` AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` -ORDER BY `g`.`Nickname`, `g`.`SquadId`, `t`.`Nickname`, `t`.`SquadId`, `w`.`Id` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s`.`Nickname`, `s`.`SquadId`, `w`.`Id` """); } @@ -2443,22 +2428,22 @@ public override async Task Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_c await base.Include_on_GroupJoin_SelectMany_DefaultIfEmpty_with_complex_projection_result(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`, `t`.`Nickname`, `t`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId`, `w1`.`Id`, `w1`.`AmmunitionType`, `w1`.`IsAutomatic`, `w1`.`Name`, `w1`.`OwnerFullName`, `w1`.`SynergyWithId`, `w2`.`Id`, `w2`.`AmmunitionType`, `w2`.`IsAutomatic`, `w2`.`Name`, `w2`.`OwnerFullName`, `w2`.`SynergyWithId`, IIF(`t`.`Nickname` IS NOT NULL AND `t`.`SquadId` IS NOT NULL, TRUE, FALSE), `w3`.`Id`, `w3`.`AmmunitionType`, `w3`.`IsAutomatic`, `w3`.`Name`, `w3`.`OwnerFullName`, `w3`.`SynergyWithId`, `w4`.`Id`, `w4`.`AmmunitionType`, `w4`.`IsAutomatic`, `w4`.`Name`, `w4`.`OwnerFullName`, `w4`.`SynergyWithId` + """ +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`, `s`.`Nickname`, `s`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId`, `w1`.`Id`, `w1`.`AmmunitionType`, `w1`.`IsAutomatic`, `w1`.`Name`, `w1`.`OwnerFullName`, `w1`.`SynergyWithId`, `w2`.`Id`, `w2`.`AmmunitionType`, `w2`.`IsAutomatic`, `w2`.`Name`, `w2`.`OwnerFullName`, `w2`.`SynergyWithId`, IIF(`s`.`Nickname` IS NOT NULL AND `s`.`SquadId` IS NOT NULL, TRUE, FALSE), `w3`.`Id`, `w3`.`AmmunitionType`, `w3`.`IsAutomatic`, `w3`.`Name`, `w3`.`OwnerFullName`, `w3`.`SynergyWithId`, `w4`.`Id`, `w4`.`AmmunitionType`, `w4`.`IsAutomatic`, `w4`.`Name`, `w4`.`OwnerFullName`, `w4`.`SynergyWithId` FROM (((((((`Gears` AS `g` LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` FROM `Gears` AS `g0` LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` -) AS `t` ON `g`.`LeaderNickname` = `t`.`Nickname`) +) AS `s` ON `g`.`LeaderNickname` = `s`.`Nickname`) LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName`) -LEFT JOIN `Weapons` AS `w0` ON `t`.`FullName` = `w0`.`OwnerFullName`) -LEFT JOIN `Weapons` AS `w1` ON `t`.`FullName` = `w1`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w0` ON `s`.`FullName` = `w0`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w1` ON `s`.`FullName` = `w1`.`OwnerFullName`) LEFT JOIN `Weapons` AS `w2` ON `g`.`FullName` = `w2`.`OwnerFullName`) -LEFT JOIN `Weapons` AS `w3` ON `t`.`FullName` = `w3`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w3` ON `s`.`FullName` = `w3`.`OwnerFullName`) LEFT JOIN `Weapons` AS `w4` ON `g`.`FullName` = `w4`.`OwnerFullName` -ORDER BY `g`.`Nickname`, `g`.`SquadId`, `t`.`Nickname`, `t`.`SquadId`, `w`.`Id`, `w0`.`Id`, `w1`.`Id`, `w2`.`Id`, `w3`.`Id` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s`.`Nickname`, `s`.`SquadId`, `w`.`Id`, `w0`.`Id`, `w1`.`Id`, `w2`.`Id`, `w3`.`Id` """); } @@ -2467,10 +2452,14 @@ public override async Task Coalesce_operator_in_predicate(bool async) await base.Coalesce_operator_in_predicate(async); AssertSql( -""" -SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` -FROM `Weapons` AS `w` -WHERE IIF(`w`.`IsAutomatic` IS NULL, FALSE, `w`.`IsAutomatic`) = TRUE + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE IIF(`s`.`HasSoulPatch` IS NULL, FALSE, `s`.`HasSoulPatch`) = TRUE """); } @@ -2479,10 +2468,14 @@ public override async Task Coalesce_operator_in_predicate_with_other_conditions( await base.Coalesce_operator_in_predicate_with_other_conditions(async); AssertSql( -""" -SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` -FROM `Weapons` AS `w` -WHERE `w`.`AmmunitionType` = 1 AND IIF(`w`.`IsAutomatic` IS NULL, FALSE, `w`.`IsAutomatic`) = TRUE + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE (`t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL) AND IIF(`s`.`HasSoulPatch` IS NULL, FALSE, `s`.`HasSoulPatch`) = TRUE """); } @@ -2491,9 +2484,13 @@ public override async Task Coalesce_operator_in_projection_with_other_conditions await base.Coalesce_operator_in_projection_with_other_conditions(async); AssertSql( -""" -SELECT IIF(`w`.`AmmunitionType` = 1 AND `w`.`AmmunitionType` IS NOT NULL AND IIF(`w`.`IsAutomatic` IS NULL, FALSE, `w`.`IsAutomatic`) = TRUE, TRUE, FALSE) -FROM `Weapons` AS `w` + """ +SELECT IIF((`t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL) AND IIF(`s`.`HasSoulPatch` IS NULL, FALSE, `s`.`HasSoulPatch`) = TRUE, TRUE, FALSE) +FROM `Tags` AS `t` +LEFT JOIN ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` + FROM `Gears` AS `g` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` """); } @@ -2502,14 +2499,14 @@ public override async Task Optional_navigation_type_compensation_works_with_pred await base.Optional_navigation_type_compensation_works_with_predicate(async); AssertSql( -""" + """ SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` FROM `Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` FROM `Gears` AS `g` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` -WHERE (`t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL) AND `t0`.`HasSoulPatch` = TRUE +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE (`t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL) AND `s`.`HasSoulPatch` = TRUE """); } @@ -2524,8 +2521,8 @@ public override async Task Optional_navigation_type_compensation_works_with_pred LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` FROM `Gears` AS `g` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` -WHERE `t0`.`HasSoulPatch` = TRUE +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE `s`.`HasSoulPatch` = TRUE """); } @@ -2534,14 +2531,14 @@ public override async Task Optional_navigation_type_compensation_works_with_pred await base.Optional_navigation_type_compensation_works_with_predicate_negated(async); AssertSql( -""" + """ SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` FROM `Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` FROM `Gears` AS `g` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` -WHERE `t0`.`HasSoulPatch` <> TRUE +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE `s`.`HasSoulPatch` <> TRUE """); } @@ -2550,14 +2547,14 @@ public override async Task Optional_navigation_type_compensation_works_with_pred await base.Optional_navigation_type_compensation_works_with_predicate_negated_complex1(async); AssertSql( -""" + """ SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` FROM `Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` FROM `Gears` AS `g` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` -WHERE IIF(`t0`.`HasSoulPatch` = TRUE, TRUE, `t0`.`HasSoulPatch`) <> TRUE +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE IIF(`s`.`HasSoulPatch` = TRUE, TRUE, `s`.`HasSoulPatch`) <> TRUE """); } @@ -2572,8 +2569,8 @@ public override async Task Optional_navigation_type_compensation_works_with_pred LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` FROM `Gears` AS `g` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` -WHERE IIF(`t0`.`HasSoulPatch` <> TRUE, FALSE, `t0`.`HasSoulPatch`) <> TRUE +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE IIF(`s`.`HasSoulPatch` <> TRUE, FALSE, `s`.`HasSoulPatch`) <> TRUE """); } @@ -2582,14 +2579,14 @@ public override async Task Optional_navigation_type_compensation_works_with_cond await base.Optional_navigation_type_compensation_works_with_conditional_expression(async); AssertSql( -""" + """ SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` FROM `Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` FROM `Gears` AS `g` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` -WHERE IIF(`t0`.`HasSoulPatch` = TRUE, TRUE, FALSE) = TRUE +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE IIF(`s`.`HasSoulPatch` = TRUE, TRUE, FALSE) = TRUE """); } @@ -2598,14 +2595,14 @@ public override async Task Optional_navigation_type_compensation_works_with_bina await base.Optional_navigation_type_compensation_works_with_binary_expression(async); AssertSql( -""" + """ SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` FROM `Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` FROM `Gears` AS `g` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` -WHERE `t0`.`HasSoulPatch` = TRUE OR (`t`.`Note` LIKE '%Cole%') +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE `s`.`HasSoulPatch` = TRUE OR (`t`.`Note` LIKE '%Cole%') """); } @@ -2614,13 +2611,13 @@ public override async Task Optional_navigation_type_compensation_works_with_bina await base.Optional_navigation_type_compensation_works_with_binary_and_expression(async); AssertSql( -""" -SELECT IIF(`t0`.`HasSoulPatch` = TRUE AND (`t`.`Note` LIKE '%Cole%') AND `t`.`Note` IS NOT NULL, TRUE, FALSE) + """ +SELECT IIF(`s`.`HasSoulPatch` = TRUE AND (`t`.`Note` LIKE '%Cole%') AND `t`.`Note` IS NOT NULL, TRUE, FALSE) FROM `Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` FROM `Gears` AS `g` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` """); } @@ -2629,13 +2626,13 @@ public override async Task Optional_navigation_type_compensation_works_with_proj await base.Optional_navigation_type_compensation_works_with_projection(async); AssertSql( -""" -SELECT `t0`.`SquadId` + """ +SELECT `s`.`SquadId` FROM `Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId` FROM `Gears` AS `g` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` WHERE `t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL """); } @@ -2645,13 +2642,13 @@ public override async Task Optional_navigation_type_compensation_works_with_proj await base.Optional_navigation_type_compensation_works_with_projection_into_anonymous_type(async); AssertSql( -""" -SELECT `t0`.`SquadId` + """ +SELECT `s`.`SquadId` FROM `Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId` FROM `Gears` AS `g` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` WHERE `t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL """); } @@ -2661,13 +2658,13 @@ public override async Task Optional_navigation_type_compensation_works_with_DTOs await base.Optional_navigation_type_compensation_works_with_DTOs(async); AssertSql( -""" -SELECT `t0`.`SquadId` AS `Id` + """ +SELECT `s`.`SquadId` AS `Id` FROM `Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId` FROM `Gears` AS `g` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` WHERE `t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL """); } @@ -2677,13 +2674,13 @@ public override async Task Optional_navigation_type_compensation_works_with_list await base.Optional_navigation_type_compensation_works_with_list_initializers(async); AssertSql( -""" -SELECT `t0`.`SquadId`, `t0`.`SquadId` + 1 + """ +SELECT `s`.`SquadId`, `s`.`SquadId` + 1 FROM `Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId` FROM `Gears` AS `g` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` WHERE `t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL ORDER BY `t`.`Note` """); @@ -2694,13 +2691,13 @@ public override async Task Optional_navigation_type_compensation_works_with_arra await base.Optional_navigation_type_compensation_works_with_array_initializers(async); AssertSql( -""" -SELECT `t0`.`SquadId` + """ +SELECT `s`.`SquadId` FROM `Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId` FROM `Gears` AS `g` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` WHERE `t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL """); } @@ -2710,15 +2707,15 @@ public override async Task Optional_navigation_type_compensation_works_with_orde await base.Optional_navigation_type_compensation_works_with_orderby(async); AssertSql( -""" + """ SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` FROM `Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId` FROM `Gears` AS `g` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` WHERE `t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL -ORDER BY `t0`.`SquadId` +ORDER BY `s`.`SquadId` """); } @@ -2727,16 +2724,15 @@ public override async Task Optional_navigation_type_compensation_works_with_all( await base.Optional_navigation_type_compensation_works_with_all(async); AssertSql( -""" + """ SELECT IIF(NOT EXISTS ( SELECT 1 FROM `Tags` AS `t` LEFT JOIN ( - 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` + SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` FROM `Gears` AS `g` - LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` - ) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` - WHERE (`t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL) AND `t0`.`HasSoulPatch` <> TRUE), TRUE, FALSE) + ) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` + WHERE (`t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL) AND `s`.`HasSoulPatch` <> TRUE), TRUE, FALSE) FROM (SELECT COUNT(*) FROM `#Dual`) """); } @@ -2744,35 +2740,32 @@ LEFT JOIN ( public override async Task Optional_navigation_type_compensation_works_with_negated_predicate(bool async) { await base.Optional_navigation_type_compensation_works_with_negated_predicate(async); - - AssertSql( -""" +AssertSql( + """ SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` FROM `Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` FROM `Gears` AS `g` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` -WHERE (`t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL) AND `t0`.`HasSoulPatch` <> TRUE +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE (`t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL) AND `s`.`HasSoulPatch` <> TRUE """); } public override async Task Optional_navigation_type_compensation_works_with_contains(bool async) { await base.Optional_navigation_type_compensation_works_with_contains(async); - - AssertSql( -""" +AssertSql( + """ SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` FROM `Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId` FROM `Gears` AS `g` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` -WHERE (`t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL) AND `t0`.`SquadId` IN ( +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE (`t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL) AND `s`.`SquadId` IN ( SELECT `g0`.`SquadId` FROM `Gears` AS `g0` - LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` ) """); } @@ -2794,17 +2787,16 @@ public override async Task Optional_navigation_type_compensation_works_with_take public override async Task Select_correlated_filtered_collection(bool async) { await base.Select_correlated_filtered_collection(async); - - AssertSql( -""" -SELECT `g`.`Nickname`, `g`.`SquadId`, `c`.`Name`, `t`.`Id`, `t`.`AmmunitionType`, `t`.`IsAutomatic`, `t`.`Name`, `t`.`OwnerFullName`, `t`.`SynergyWithId` +AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `c`.`Name`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` FROM (`Gears` AS `g` INNER JOIN `Cities` AS `c` ON `g`.`CityOfBirthName` = `c`.`Name`) LEFT JOIN ( SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM `Weapons` AS `w` WHERE `w`.`Name` <> 'Lancer' OR `w`.`Name` IS NULL -) AS `t` ON `g`.`FullName` = `t`.`OwnerFullName` +) AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` WHERE `c`.`Name` IN ('Ephyra', 'Hanover') ORDER BY `g`.`Nickname`, `g`.`SquadId`, `c`.`Name` """); @@ -2813,10 +2805,9 @@ LEFT JOIN ( public override async Task Select_correlated_filtered_collection_with_composite_key(bool async) { await base.Select_correlated_filtered_collection_with_composite_key(async); - - AssertSql( - """ -SELECT `g`.`Nickname`, `g`.`SquadId`, `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` +AssertSql( + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator` FROM (`Gears` AS `g` LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) LEFT JOIN ( @@ -2824,26 +2815,25 @@ LEFT JOIN ( FROM `Gears` AS `g0` LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` WHERE `g0`.`Nickname` <> 'Dom' -) AS `t` ON `g`.`Nickname` = `t`.`LeaderNickname` AND `g`.`SquadId` = `t`.`LeaderSquadId` +) AS `s` ON `g`.`Nickname` = `s`.`LeaderNickname` AND `g`.`SquadId` = `s`.`LeaderSquadId` WHERE `o`.`Nickname` IS NOT NULL -ORDER BY `g`.`Nickname`, `g`.`SquadId`, `t`.`Nickname` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s`.`Nickname` """); } public override async Task Select_correlated_filtered_collection_works_with_caching(bool async) { await base.Select_correlated_filtered_collection_works_with_caching(async); - - AssertSql( - """ -SELECT `t`.`Id`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator` +AssertSql( + """ +SELECT `t`.`Id`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator` FROM `Tags` AS `t` LEFT JOIN ( 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` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` -ORDER BY `t`.`Note`, `t`.`Id`, `t0`.`Nickname` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` +ORDER BY `t`.`Note`, `t`.`Id`, `s`.`Nickname` """); } @@ -2943,7 +2933,7 @@ public override async Task Where_datetimeoffset_now(bool async) AssertSql( """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE `m`.`Timeline` <> NOW() """); @@ -2956,7 +2946,7 @@ public override async Task Where_datetimeoffset_utcnow(bool async) AssertSql( $""" -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE `m`.`Timeline` <> DATEADD('n', {dtoffset}.0, NOW()) """); @@ -2964,15 +2954,23 @@ public override async Task Where_datetimeoffset_utcnow(bool async) public override async Task Where_datetimeoffset_date_component(bool async) { - await base.Where_datetimeoffset_date_component(async); + //We have to specifically use 1 JAn 100 as that is the minimum in Jet. + //The default 0 in DateTimeOffset is normally mapped to the OLE Automation date 30 Dec 1899 + //Investigate if we can pick the scenario up automatically and have a new DateTimeOffset().Date go to the required value if we have a comparison + //await base.Where_datetimeoffset_date_component(async); + await AssertQuery( + async, + ss => from m in ss.Set() + where m.Timeline.Date > new DateTimeOffset(100, 1, 1, 0, 0, 0, new TimeSpan()).Date + select m); AssertSql( - $""" -@__Date_0='0001-01-01T00:00:00.0000000' (DbType = DateTime) + """ +@__Date_0='0100-01-01T00:00:00.0000000' (DbType = DateTime) -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` -WHERE DATEVALUE(`m`.`Timeline`) > {AssertSqlHelper.Parameter("@__Date_0")} +WHERE DATEVALUE(`m`.`Timeline`) > CDATE(@__Date_0) """); } @@ -2986,7 +2984,7 @@ await AssertQuery( AssertSql( """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE DATEPART('yyyy', `m`.`Timeline`) = 102 """); @@ -2998,7 +2996,7 @@ public override async Task Where_datetimeoffset_month_component(bool async) AssertSql( """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE DATEPART('m', `m`.`Timeline`) = 1 """); @@ -3010,7 +3008,7 @@ public override async Task Where_datetimeoffset_dayofyear_component(bool async) AssertSql( """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE DATEPART('y', `m`.`Timeline`) = 2 """); @@ -3022,7 +3020,7 @@ public override async Task Where_datetimeoffset_day_component(bool async) AssertSql( """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE DATEPART('d', `m`.`Timeline`) = 2 """); @@ -3038,7 +3036,7 @@ await AssertQuery( AssertSql( """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE DATEPART('h', `m`.`Timeline`) = 8 """); @@ -3050,7 +3048,7 @@ public override async Task Where_datetimeoffset_minute_component(bool async) AssertSql( """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE DATEPART('n', `m`.`Timeline`) = 0 """); @@ -3062,7 +3060,7 @@ public override async Task Where_datetimeoffset_second_component(bool async) AssertSql( """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE DATEPART('s', `m`.`Timeline`) = 0 """); @@ -3171,14 +3169,14 @@ public override async Task Complex_predicate_with_AndAlso_and_nullable_bool_prop await base.Complex_predicate_with_AndAlso_and_nullable_bool_property(async); AssertSql( -""" + """ SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM `Weapons` AS `w` LEFT JOIN ( SELECT `g`.`FullName`, `g`.`HasSoulPatch` FROM `Gears` AS `g` -) AS `t` ON `w`.`OwnerFullName` = `t`.`FullName` -WHERE `w`.`Id` <> 50 AND `t`.`HasSoulPatch` <> TRUE +) AS `s` ON `w`.`OwnerFullName` = `s`.`FullName` +WHERE `w`.`Id` <> 50 AND `s`.`HasSoulPatch` <> TRUE """); } @@ -3226,14 +3224,13 @@ public override async Task FirstOrDefault_with_manually_created_groupjoin_is_tra await base.FirstOrDefault_with_manually_created_groupjoin_is_translated_to_sql(async); AssertSql( -""" + """ SELECT TOP 1 `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name` FROM `Squads` AS `s` LEFT JOIN ( - 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` + SELECT `g`.`SquadId` FROM `Gears` AS `g` - LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` -) AS `t` ON `s`.`Id` = `t`.`SquadId` +) AS `s0` ON `s`.`Id` = `s0`.`SquadId` WHERE `s`.`Name` = 'Kilo' """); } @@ -3243,13 +3240,12 @@ public override async Task Any_with_optional_navigation_as_subquery_predicate_is await base.Any_with_optional_navigation_as_subquery_predicate_is_translated_to_sql(async); AssertSql( -""" + """ SELECT `s`.`Name` FROM `Squads` AS `s` WHERE NOT EXISTS ( SELECT 1 - FROM (`Gears` AS `g` - LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) + FROM `Gears` AS `g` LEFT JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName` AND `g`.`SquadId` = `t`.`GearSquadId` WHERE `s`.`Id` = `g`.`SquadId` AND `t`.`Note` = 'Dom''s Tag') """); @@ -3260,13 +3256,12 @@ public override async Task All_with_optional_navigation_is_translated_to_sql(boo await base.All_with_optional_navigation_is_translated_to_sql(async); AssertSql( -""" + """ SELECT IIF(NOT EXISTS ( SELECT 1 - FROM (`Gears` AS `g` - LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) + FROM `Gears` AS `g` LEFT JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName` AND `g`.`SquadId` = `t`.`GearSquadId` - WHERE `t`.`Note` = 'Foo' AND `t`.`Note` IS NOT NULL), TRUE, FALSE) + WHERE `t`.`Note` = 'Foo'), TRUE, FALSE) FROM (SELECT COUNT(*) FROM `#Dual`) """); } @@ -3343,13 +3338,13 @@ public override async Task Subquery_is_lifted_from_main_from_clause_of_SelectMan AssertSql( """ -SELECT `g`.`FullName` AS `Name1`, `t`.`FullName` AS `Name2` +SELECT `g`.`FullName` AS `Name1`, `s`.`FullName` AS `Name2` FROM `Gears` AS `g`, ( SELECT `g0`.`FullName`, `g0`.`HasSoulPatch` FROM `Gears` AS `g0` -) AS `t` -WHERE `g`.`HasSoulPatch` = TRUE AND `t`.`HasSoulPatch` <> TRUE +) AS `s` +WHERE `g`.`HasSoulPatch` = TRUE AND `s`.`HasSoulPatch` <> TRUE ORDER BY `g`.`FullName` """); } @@ -3432,14 +3427,14 @@ public override async Task Subquery_is_lifted_from_additional_from_clause(bool a await base.Subquery_is_lifted_from_additional_from_clause(async); AssertSql( - """ -SELECT `g`.`FullName` AS `Name1`, `t`.`FullName` AS `Name2` + """ +SELECT `g`.`FullName` AS `Name1`, `s`.`FullName` AS `Name2` FROM `Gears` AS `g`, ( SELECT `g0`.`FullName`, `g0`.`HasSoulPatch` FROM `Gears` AS `g0` -) AS `t` -WHERE `g`.`HasSoulPatch` = TRUE AND `t`.`HasSoulPatch` <> TRUE +) AS `s` +WHERE `g`.`HasSoulPatch` = TRUE AND `s`.`HasSoulPatch` <> TRUE ORDER BY `g`.`FullName` """); } @@ -3449,15 +3444,15 @@ public override async Task Subquery_with_result_operator_is_not_lifted(bool asyn await base.Subquery_with_result_operator_is_not_lifted(async); AssertSql( - """ -SELECT `t`.`FullName` + """ +SELECT `s`.`FullName` FROM ( SELECT TOP 2 `g`.`FullName`, `g`.`Rank` FROM `Gears` AS `g` WHERE `g`.`HasSoulPatch` <> TRUE ORDER BY `g`.`FullName` -) AS `t` -ORDER BY `t`.`Rank` +) AS `s` +ORDER BY `s`.`Rank` """); } @@ -3520,14 +3515,14 @@ public override async Task Take_without_orderby_followed_by_orderBy_is_pushed_do await base.Take_without_orderby_followed_by_orderBy_is_pushed_down3(async); AssertSql( -""" -SELECT `t`.`FullName` + """ +SELECT `s`.`FullName` FROM ( SELECT TOP 999 `g`.`FullName`, `g`.`Rank` FROM `Gears` AS `g` WHERE `g`.`HasSoulPatch` <> TRUE -) AS `t` -ORDER BY `t`.`FullName`, `t`.`Rank` +) AS `s` +ORDER BY `s`.`FullName`, `s`.`Rank` """); } @@ -3610,15 +3605,15 @@ public override async Task Navigation_access_on_derived_entity_using_cast(bool a await base.Navigation_access_on_derived_entity_using_cast(async); AssertSql( -""" -SELECT `f`.`Name`, `t`.`ThreatLevel` AS `Threat` + """ +SELECT `f`.`Name`, `s`.`ThreatLevel` AS `Threat` FROM (`Factions` AS `f` LEFT JOIN `LocustHordes` AS `l` ON `f`.`Id` = `l`.`Id`) LEFT JOIN ( SELECT `l0`.`Name`, `l0`.`ThreatLevel` FROM `LocustLeaders` AS `l0` INNER JOIN `LocustCommanders` AS `l1` ON `l0`.`Name` = `l1`.`Name` -) AS `t` ON `l`.`CommanderName` = `t`.`Name` +) AS `s` ON `l`.`CommanderName` = `s`.`Name` WHERE `l`.`Id` IS NOT NULL ORDER BY `f`.`Name` """); @@ -3630,14 +3625,14 @@ public override async Task Navigation_access_on_derived_materialized_entity_usin AssertSql( """ -SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Name`, `f`.`ServerAddress`, `l`.`CommanderName`, `l`.`Eradicated`, IIF(`l`.`Id` IS NOT NULL, 'LocustHorde', NULL) AS `Discriminator`, `t`.`ThreatLevel` AS `Threat` +SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Name`, `f`.`ServerAddress`, `l`.`CommanderName`, `l`.`Eradicated`, IIF(`l`.`Id` IS NOT NULL, 'LocustHorde', NULL) AS `Discriminator`, `s`.`ThreatLevel` AS `Threat` FROM (`Factions` AS `f` LEFT JOIN `LocustHordes` AS `l` ON `f`.`Id` = `l`.`Id`) LEFT JOIN ( SELECT `l0`.`Name`, `l0`.`ThreatLevel` FROM `LocustLeaders` AS `l0` INNER JOIN `LocustCommanders` AS `l1` ON `l0`.`Name` = `l1`.`Name` -) AS `t` ON `l`.`CommanderName` = `t`.`Name` +) AS `s` ON `l`.`CommanderName` = `s`.`Name` WHERE `l`.`Id` IS NOT NULL ORDER BY `f`.`Name` """); @@ -3648,15 +3643,15 @@ public override async Task Navigation_access_via_EFProperty_on_derived_entity_us await base.Navigation_access_via_EFProperty_on_derived_entity_using_cast(async); AssertSql( -""" -SELECT `f`.`Name`, `t`.`ThreatLevel` AS `Threat` + """ +SELECT `f`.`Name`, `s`.`ThreatLevel` AS `Threat` FROM (`Factions` AS `f` LEFT JOIN `LocustHordes` AS `l` ON `f`.`Id` = `l`.`Id`) LEFT JOIN ( SELECT `l0`.`Name`, `l0`.`ThreatLevel` FROM `LocustLeaders` AS `l0` INNER JOIN `LocustCommanders` AS `l1` ON `l0`.`Name` = `l1`.`Name` -) AS `t` ON `l`.`CommanderName` = `t`.`Name` +) AS `s` ON `l`.`CommanderName` = `s`.`Name` WHERE `l`.`Id` IS NOT NULL ORDER BY `f`.`Name` """); @@ -3667,15 +3662,15 @@ public override async Task Navigation_access_fk_on_derived_entity_using_cast(boo await base.Navigation_access_fk_on_derived_entity_using_cast(async); AssertSql( -""" -SELECT `f`.`Name`, `t`.`Name` AS `CommanderName` + """ +SELECT `f`.`Name`, `s`.`Name` AS `CommanderName` FROM (`Factions` AS `f` LEFT JOIN `LocustHordes` AS `l` ON `f`.`Id` = `l`.`Id`) LEFT JOIN ( SELECT `l0`.`Name` FROM `LocustLeaders` AS `l0` INNER JOIN `LocustCommanders` AS `l1` ON `l0`.`Name` = `l1`.`Name` -) AS `t` ON `l`.`CommanderName` = `t`.`Name` +) AS `s` ON `l`.`CommanderName` = `s`.`Name` WHERE `l`.`Id` IS NOT NULL ORDER BY `f`.`Name` """); @@ -3686,11 +3681,10 @@ public override async Task Collection_navigation_access_on_derived_entity_using_ await base.Collection_navigation_access_on_derived_entity_using_cast(async); AssertSql( -""" + """ SELECT `f`.`Name`, ( SELECT COUNT(*) FROM `LocustLeaders` AS `l0` - LEFT JOIN `LocustCommanders` AS `l1` ON `l0`.`Name` = `l1`.`Name` WHERE `f`.`Id` = `l0`.`LocustHordeId`) AS `LeadersCount` FROM `Factions` AS `f` LEFT JOIN `LocustHordes` AS `l` ON `f`.`Id` = `l`.`Id` @@ -3702,57 +3696,54 @@ ORDER BY `f`.`Name` public override async Task Collection_navigation_access_on_derived_entity_using_cast_in_SelectMany(bool async) { await base.Collection_navigation_access_on_derived_entity_using_cast_in_SelectMany(async); - - AssertSql( -""" -SELECT `f`.`Name`, `t`.`Name` AS `LeaderName` +AssertSql( + """ +SELECT `f`.`Name`, `s`.`Name` AS `LeaderName` FROM (`Factions` AS `f` LEFT JOIN `LocustHordes` AS `l` ON `f`.`Id` = `l`.`Id`) INNER JOIN ( SELECT `l0`.`Name`, `l0`.`LocustHordeId` FROM `LocustLeaders` AS `l0` -) AS `t` ON `f`.`Id` = `t`.`LocustHordeId` +) AS `s` ON `f`.`Id` = `s`.`LocustHordeId` WHERE `l`.`Id` IS NOT NULL -ORDER BY `t`.`Name` +ORDER BY `s`.`Name` """); } public override async Task Include_on_derived_entity_using_OfType(bool async) { await base.Include_on_derived_entity_using_OfType(async); - - AssertSql( -""" -SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Name`, `f`.`ServerAddress`, `l`.`CommanderName`, `l`.`Eradicated`, IIF(`l`.`Id` IS NOT NULL, 'LocustHorde', NULL) AS `Discriminator`, `t`.`Name`, `t`.`LocustHordeId`, `t`.`ThreatLevel`, `t`.`ThreatLevelByte`, `t`.`ThreatLevelNullableByte`, `t`.`DefeatedByNickname`, `t`.`DefeatedBySquadId`, `t`.`HighCommandId`, `t0`.`Name`, `t0`.`LocustHordeId`, `t0`.`ThreatLevel`, `t0`.`ThreatLevelByte`, `t0`.`ThreatLevelNullableByte`, `t0`.`DefeatedByNickname`, `t0`.`DefeatedBySquadId`, `t0`.`HighCommandId`, `t0`.`Discriminator` +AssertSql( + """ +SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Name`, `f`.`ServerAddress`, `l`.`CommanderName`, `l`.`Eradicated`, IIF(`l`.`Id` IS NOT NULL, 'LocustHorde', NULL) AS `Discriminator`, `s`.`Name`, `s`.`LocustHordeId`, `s`.`ThreatLevel`, `s`.`ThreatLevelByte`, `s`.`ThreatLevelNullableByte`, `s`.`DefeatedByNickname`, `s`.`DefeatedBySquadId`, `s`.`HighCommandId`, `s0`.`Name`, `s0`.`LocustHordeId`, `s0`.`ThreatLevel`, `s0`.`ThreatLevelByte`, `s0`.`ThreatLevelNullableByte`, `s0`.`DefeatedByNickname`, `s0`.`DefeatedBySquadId`, `s0`.`HighCommandId`, `s0`.`Discriminator` FROM ((`Factions` AS `f` LEFT JOIN `LocustHordes` AS `l` ON `f`.`Id` = `l`.`Id`) LEFT JOIN ( SELECT `l0`.`Name`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l1`.`DefeatedByNickname`, `l1`.`DefeatedBySquadId`, `l1`.`HighCommandId` FROM `LocustLeaders` AS `l0` INNER JOIN `LocustCommanders` AS `l1` ON `l0`.`Name` = `l1`.`Name` -) AS `t` ON `l`.`CommanderName` = `t`.`Name`) +) AS `s` ON `l`.`CommanderName` = `s`.`Name`) LEFT JOIN ( SELECT `l2`.`Name`, `l2`.`LocustHordeId`, `l2`.`ThreatLevel`, `l2`.`ThreatLevelByte`, `l2`.`ThreatLevelNullableByte`, `l3`.`DefeatedByNickname`, `l3`.`DefeatedBySquadId`, `l3`.`HighCommandId`, IIF(`l3`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator` FROM `LocustLeaders` AS `l2` LEFT JOIN `LocustCommanders` AS `l3` ON `l2`.`Name` = `l3`.`Name` -) AS `t0` ON `f`.`Id` = `t0`.`LocustHordeId` +) AS `s0` ON `f`.`Id` = `s0`.`LocustHordeId` WHERE `l`.`Id` IS NOT NULL -ORDER BY `f`.`Name`, `f`.`Id`, `t`.`Name` +ORDER BY `f`.`Name`, `f`.`Id`, `s`.`Name` """); } public override async Task Distinct_on_subquery_doesnt_get_lifted(bool async) { await base.Distinct_on_subquery_doesnt_get_lifted(async); - - AssertSql( -""" -SELECT `t`.`HasSoulPatch` +AssertSql( + """ +SELECT `s`.`HasSoulPatch` FROM ( SELECT DISTINCT `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` -) AS `t` +) AS `s` """); } @@ -3771,16 +3762,15 @@ public override async Task Cast_result_operator_on_subquery_is_properly_lifted_t public override async Task Comparing_two_collection_navigations_composite_key(bool async) { await base.Comparing_two_collection_navigations_composite_key(async); - - AssertSql( -""" -SELECT `g`.`Nickname` AS `Nickname1`, `t`.`Nickname` AS `Nickname2` +AssertSql( + """ +SELECT `g`.`Nickname` AS `Nickname1`, `s`.`Nickname` AS `Nickname2` FROM `Gears` AS `g`, ( SELECT `g0`.`Nickname`, `g0`.`SquadId` FROM `Gears` AS `g0` -) AS `t` -WHERE `g`.`Nickname` = `t`.`Nickname` AND `g`.`SquadId` = `t`.`SquadId` +) AS `s` +WHERE `g`.`Nickname` = `s`.`Nickname` AND `g`.`SquadId` = `s`.`SquadId` ORDER BY `g`.`Nickname` """); } @@ -3816,19 +3806,18 @@ FROM [Gears] AS [g0] public override async Task Comparing_entities_using_Equals_inheritance(bool async) { await base.Comparing_entities_using_Equals_inheritance(async); - - AssertSql( -""" -SELECT `g`.`Nickname` AS `Nickname1`, `t`.`Nickname` AS `Nickname2` +AssertSql( + """ +SELECT `g`.`Nickname` AS `Nickname1`, `s`.`Nickname` AS `Nickname2` FROM `Gears` AS `g`, ( SELECT `g0`.`Nickname`, `g0`.`SquadId` FROM `Gears` AS `g0` - LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` - WHERE `o0`.`Nickname` IS NOT NULL -) AS `t` -WHERE `g`.`Nickname` = `t`.`Nickname` AND `g`.`SquadId` = `t`.`SquadId` -ORDER BY `g`.`Nickname`, `t`.`Nickname` + LEFT JOIN `Officers` AS `o` ON `g0`.`Nickname` = `o`.`Nickname` AND `g0`.`SquadId` = `o`.`SquadId` + WHERE `o`.`Nickname` IS NOT NULL +) AS `s` +WHERE `g`.`Nickname` = `s`.`Nickname` AND `g`.`SquadId` = `s`.`SquadId` +ORDER BY `g`.`Nickname`, `s`.`Nickname` """); } @@ -3851,19 +3840,18 @@ public override async Task Optional_navigation_with_collection_composite_key(boo await base.Optional_navigation_with_collection_composite_key(async); AssertSql( -""" + """ SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` FROM `Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, 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` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` -WHERE `t0`.`Discriminator` = 'Officer' AND ( +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE `s`.`Discriminator` = 'Officer' AND ( SELECT COUNT(*) FROM `Gears` AS `g0` - LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` - WHERE `t0`.`Nickname` IS NOT NULL AND `t0`.`SquadId` IS NOT NULL AND `t0`.`Nickname` = `g0`.`LeaderNickname` AND `t0`.`SquadId` = `g0`.`LeaderSquadId` AND `g0`.`Nickname` = 'Dom') > 0 + WHERE `s`.`Nickname` IS NOT NULL AND `s`.`SquadId` IS NOT NULL AND `s`.`Nickname` = `g0`.`LeaderNickname` AND `s`.`SquadId` = `g0`.`LeaderSquadId` AND `g0`.`Nickname` = 'Dom') > 0 """); } @@ -3898,27 +3886,27 @@ public override async Task Project_collection_navigation_with_inheritance1(bool await base.Project_collection_navigation_with_inheritance1(async); AssertSql( -""" -SELECT `f`.`Id`, `t`.`Name`, `t0`.`Id`, `t1`.`Name`, `t1`.`LocustHordeId`, `t1`.`ThreatLevel`, `t1`.`ThreatLevelByte`, `t1`.`ThreatLevelNullableByte`, `t1`.`DefeatedByNickname`, `t1`.`DefeatedBySquadId`, `t1`.`HighCommandId`, `t1`.`Discriminator` + """ +SELECT `f`.`Id`, `s`.`Name`, `s0`.`Id`, `s1`.`Name`, `s1`.`LocustHordeId`, `s1`.`ThreatLevel`, `s1`.`ThreatLevelByte`, `s1`.`ThreatLevelNullableByte`, `s1`.`DefeatedByNickname`, `s1`.`DefeatedBySquadId`, `s1`.`HighCommandId`, `s1`.`Discriminator` FROM (((`Factions` AS `f` LEFT JOIN `LocustHordes` AS `l` ON `f`.`Id` = `l`.`Id`) LEFT JOIN ( SELECT `l0`.`Name` FROM `LocustLeaders` AS `l0` INNER JOIN `LocustCommanders` AS `l1` ON `l0`.`Name` = `l1`.`Name` -) AS `t` ON `l`.`CommanderName` = `t`.`Name`) +) AS `s` ON `l`.`CommanderName` = `s`.`Name`) LEFT JOIN ( SELECT `f0`.`Id`, `l2`.`CommanderName` FROM `Factions` AS `f0` INNER JOIN `LocustHordes` AS `l2` ON `f0`.`Id` = `l2`.`Id` -) AS `t0` ON `t`.`Name` = `t0`.`CommanderName`) +) AS `s0` ON `s`.`Name` = `s0`.`CommanderName`) LEFT JOIN ( SELECT `l3`.`Name`, `l3`.`LocustHordeId`, `l3`.`ThreatLevel`, `l3`.`ThreatLevelByte`, `l3`.`ThreatLevelNullableByte`, `l4`.`DefeatedByNickname`, `l4`.`DefeatedBySquadId`, `l4`.`HighCommandId`, IIF(`l4`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator` FROM `LocustLeaders` AS `l3` LEFT JOIN `LocustCommanders` AS `l4` ON `l3`.`Name` = `l4`.`Name` -) AS `t1` ON `t0`.`Id` = `t1`.`LocustHordeId` +) AS `s1` ON `s0`.`Id` = `s1`.`LocustHordeId` WHERE `l`.`Id` IS NOT NULL -ORDER BY `f`.`Id`, `t`.`Name`, `t0`.`Id` +ORDER BY `f`.`Id`, `s`.`Name`, `s0`.`Id` """); } @@ -3927,26 +3915,26 @@ public override async Task Project_collection_navigation_with_inheritance2(bool await base.Project_collection_navigation_with_inheritance2(async); AssertSql( -""" -SELECT `f`.`Id`, `t`.`Name`, `t0`.`Nickname`, `t0`.`SquadId`, `t1`.`Nickname`, `t1`.`SquadId`, `t1`.`AssignedCityName`, `t1`.`CityOfBirthName`, `t1`.`FullName`, `t1`.`HasSoulPatch`, `t1`.`LeaderNickname`, `t1`.`LeaderSquadId`, `t1`.`Rank`, `t1`.`Discriminator` + """ +SELECT `f`.`Id`, `s`.`Name`, `s0`.`Nickname`, `s0`.`SquadId`, `s1`.`Nickname`, `s1`.`SquadId`, `s1`.`AssignedCityName`, `s1`.`CityOfBirthName`, `s1`.`FullName`, `s1`.`HasSoulPatch`, `s1`.`LeaderNickname`, `s1`.`LeaderSquadId`, `s1`.`Rank`, `s1`.`Discriminator` FROM (((`Factions` AS `f` LEFT JOIN `LocustHordes` AS `l` ON `f`.`Id` = `l`.`Id`) LEFT JOIN ( SELECT `l0`.`Name`, `l1`.`DefeatedByNickname`, `l1`.`DefeatedBySquadId` FROM `LocustLeaders` AS `l0` INNER JOIN `LocustCommanders` AS `l1` ON `l0`.`Name` = `l1`.`Name` -) AS `t` ON `l`.`CommanderName` = `t`.`Name`) +) AS `s` ON `l`.`CommanderName` = `s`.`Name`) LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId` FROM `Gears` AS `g` -) AS `t0` ON `t`.`DefeatedByNickname` = `t0`.`Nickname` AND `t`.`DefeatedBySquadId` = `t0`.`SquadId`) +) AS `s0` ON `s`.`DefeatedByNickname` = `s0`.`Nickname` AND `s`.`DefeatedBySquadId` = `s0`.`SquadId`) LEFT JOIN ( - SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` FROM `Gears` AS `g0` - LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` -) AS `t1` ON (`t0`.`Nickname` = `t1`.`LeaderNickname` OR (`t0`.`Nickname` IS NULL AND `t1`.`LeaderNickname` IS NULL)) AND `t0`.`SquadId` = `t1`.`LeaderSquadId` + LEFT JOIN `Officers` AS `o` ON `g0`.`Nickname` = `o`.`Nickname` AND `g0`.`SquadId` = `o`.`SquadId` +) AS `s1` ON (`s0`.`Nickname` = `s1`.`LeaderNickname` OR (`s0`.`Nickname` IS NULL AND `s1`.`LeaderNickname` IS NULL)) AND `s0`.`SquadId` = `s1`.`LeaderSquadId` WHERE `l`.`Id` IS NOT NULL -ORDER BY `f`.`Id`, `t`.`Name`, `t0`.`Nickname`, `t0`.`SquadId`, `t1`.`Nickname` +ORDER BY `f`.`Id`, `s`.`Name`, `s0`.`Nickname`, `s0`.`SquadId`, `s1`.`Nickname` """); } @@ -3955,26 +3943,26 @@ public override async Task Project_collection_navigation_with_inheritance3(bool await base.Project_collection_navigation_with_inheritance3(async); AssertSql( -""" -SELECT `f`.`Id`, `t`.`Name`, `t0`.`Nickname`, `t0`.`SquadId`, `t1`.`Nickname`, `t1`.`SquadId`, `t1`.`AssignedCityName`, `t1`.`CityOfBirthName`, `t1`.`FullName`, `t1`.`HasSoulPatch`, `t1`.`LeaderNickname`, `t1`.`LeaderSquadId`, `t1`.`Rank`, `t1`.`Discriminator` + """ +SELECT `f`.`Id`, `s`.`Name`, `s0`.`Nickname`, `s0`.`SquadId`, `s1`.`Nickname`, `s1`.`SquadId`, `s1`.`AssignedCityName`, `s1`.`CityOfBirthName`, `s1`.`FullName`, `s1`.`HasSoulPatch`, `s1`.`LeaderNickname`, `s1`.`LeaderSquadId`, `s1`.`Rank`, `s1`.`Discriminator` FROM (((`Factions` AS `f` LEFT JOIN `LocustHordes` AS `l` ON `f`.`Id` = `l`.`Id`) LEFT JOIN ( SELECT `l0`.`Name`, `l1`.`DefeatedByNickname`, `l1`.`DefeatedBySquadId` FROM `LocustLeaders` AS `l0` INNER JOIN `LocustCommanders` AS `l1` ON `l0`.`Name` = `l1`.`Name` -) AS `t` ON `l`.`CommanderName` = `t`.`Name`) +) AS `s` ON `l`.`CommanderName` = `s`.`Name`) LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId` FROM `Gears` AS `g` -) AS `t0` ON `t`.`DefeatedByNickname` = `t0`.`Nickname` AND `t`.`DefeatedBySquadId` = `t0`.`SquadId`) +) AS `s0` ON `s`.`DefeatedByNickname` = `s0`.`Nickname` AND `s`.`DefeatedBySquadId` = `s0`.`SquadId`) LEFT JOIN ( - SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` FROM `Gears` AS `g0` - LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` -) AS `t1` ON (`t0`.`Nickname` = `t1`.`LeaderNickname` OR (`t0`.`Nickname` IS NULL AND `t1`.`LeaderNickname` IS NULL)) AND `t0`.`SquadId` = `t1`.`LeaderSquadId` + LEFT JOIN `Officers` AS `o` ON `g0`.`Nickname` = `o`.`Nickname` AND `g0`.`SquadId` = `o`.`SquadId` +) AS `s1` ON (`s0`.`Nickname` = `s1`.`LeaderNickname` OR (`s0`.`Nickname` IS NULL AND `s1`.`LeaderNickname` IS NULL)) AND `s0`.`SquadId` = `s1`.`LeaderSquadId` WHERE `l`.`Id` IS NOT NULL -ORDER BY `f`.`Id`, `t`.`Name`, `t0`.`Nickname`, `t0`.`SquadId`, `t1`.`Nickname` +ORDER BY `f`.`Id`, `s`.`Name`, `s0`.`Nickname`, `s0`.`SquadId`, `s1`.`Nickname` """); } @@ -3983,15 +3971,15 @@ public override async Task Include_reference_on_derived_type_using_string(bool a await base.Include_reference_on_derived_type_using_string(async); AssertSql( -""" -SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, IIF(`l0`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator`, `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + """ +SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, IIF(`l0`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator` FROM (`LocustLeaders` AS `l` LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`Name` = `l0`.`Name`) LEFT JOIN ( 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` -) AS `t` ON `l0`.`DefeatedByNickname` = `t`.`Nickname` AND `l0`.`DefeatedBySquadId` = `t`.`SquadId` +) AS `s` ON `l0`.`DefeatedByNickname` = `s`.`Nickname` AND `l0`.`DefeatedBySquadId` = `s`.`SquadId` """); } @@ -4000,40 +3988,40 @@ public override async Task Include_reference_on_derived_type_using_string_nested await base.Include_reference_on_derived_type_using_string_nested1(async); AssertSql( -""" -SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, IIF(`l0`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator`, `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name` + """ +SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, IIF(`l0`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `s0`.`Id`, `s0`.`Banner`, `s0`.`Banner5`, `s0`.`InternalNumber`, `s0`.`Name` FROM ((`LocustLeaders` AS `l` LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`Name` = `l0`.`Name`) LEFT JOIN ( 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` -) AS `t` ON `l0`.`DefeatedByNickname` = `t`.`Nickname` AND `l0`.`DefeatedBySquadId` = `t`.`SquadId`) -LEFT JOIN `Squads` AS `s` ON `t`.`SquadId` = `s`.`Id` +) AS `s` ON `l0`.`DefeatedByNickname` = `s`.`Nickname` AND `l0`.`DefeatedBySquadId` = `s`.`SquadId`) +LEFT JOIN `Squads` AS `s0` ON `s`.`SquadId` = `s0`.`Id` """); } public override async Task Include_reference_on_derived_type_using_string_nested2(bool async) { - await base.Include_reference_on_derived_type_using_string_nested2(async); - + await base.Include_reference_on_derived_type_using_string_nested2(async); + AssertSql( -""" -SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, IIF(`l0`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator`, `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator`, `t0`.`Name`, `t0`.`Location`, `t0`.`Nation` + """ +SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, IIF(`l0`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`AssignedCityName`, `s0`.`CityOfBirthName`, `s0`.`FullName`, `s0`.`HasSoulPatch`, `s0`.`LeaderNickname`, `s0`.`LeaderSquadId`, `s0`.`Rank`, `s0`.`Discriminator`, `s0`.`Name`, `s0`.`Location`, `s0`.`Nation` FROM ((`LocustLeaders` AS `l` LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`Name` = `l0`.`Name`) LEFT JOIN ( 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` -) AS `t` ON `l0`.`DefeatedByNickname` = `t`.`Nickname` AND `l0`.`DefeatedBySquadId` = `t`.`SquadId`) +) AS `s` ON `l0`.`DefeatedByNickname` = `s`.`Nickname` AND `l0`.`DefeatedBySquadId` = `s`.`SquadId`) LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `c`.`Name`, `c`.`Location`, `c`.`Nation` FROM (`Gears` AS `g0` LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId`) INNER JOIN `Cities` AS `c` ON `g0`.`CityOfBirthName` = `c`.`Name` -) AS `t0` ON (`t`.`Nickname` = `t0`.`LeaderNickname` OR (`t`.`Nickname` IS NULL AND `t0`.`LeaderNickname` IS NULL)) AND `t`.`SquadId` = `t0`.`LeaderSquadId` -ORDER BY `l`.`Name`, `t`.`Nickname`, `t`.`SquadId`, `t0`.`Nickname`, `t0`.`SquadId` +) AS `s0` ON (`s`.`Nickname` = `s0`.`LeaderNickname` OR (`s`.`Nickname` IS NULL AND `s0`.`LeaderNickname` IS NULL)) AND `s`.`SquadId` = `s0`.`LeaderSquadId` +ORDER BY `l`.`Name`, `s`.`Nickname`, `s`.`SquadId`, `s0`.`Nickname`, `s0`.`SquadId` """); } @@ -4042,15 +4030,15 @@ public override async Task Include_reference_on_derived_type_using_lambda(bool a await base.Include_reference_on_derived_type_using_lambda(async); AssertSql( -""" -SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, IIF(`l0`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator`, `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + """ +SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, IIF(`l0`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator` FROM (`LocustLeaders` AS `l` LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`Name` = `l0`.`Name`) LEFT JOIN ( 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` -) AS `t` ON `l0`.`DefeatedByNickname` = `t`.`Nickname` AND `l0`.`DefeatedBySquadId` = `t`.`SquadId` +) AS `s` ON `l0`.`DefeatedByNickname` = `s`.`Nickname` AND `l0`.`DefeatedBySquadId` = `s`.`SquadId` """); } @@ -4059,15 +4047,15 @@ public override async Task Include_reference_on_derived_type_using_lambda_with_s await base.Include_reference_on_derived_type_using_lambda_with_soft_cast(async); AssertSql( - """ -SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, IIF(`l0`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator`, `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + """ +SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, IIF(`l0`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator` FROM (`LocustLeaders` AS `l` LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`Name` = `l0`.`Name`) LEFT JOIN ( 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` -) AS `t` ON `l0`.`DefeatedByNickname` = `t`.`Nickname` AND `l0`.`DefeatedBySquadId` = `t`.`SquadId` +) AS `s` ON `l0`.`DefeatedByNickname` = `s`.`Nickname` AND `l0`.`DefeatedBySquadId` = `s`.`SquadId` """); } @@ -4076,15 +4064,15 @@ public override async Task Include_reference_on_derived_type_using_lambda_with_t await base.Include_reference_on_derived_type_using_lambda_with_tracking(async); AssertSql( -""" -SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, IIF(`l0`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator`, `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + """ +SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, IIF(`l0`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator` FROM (`LocustLeaders` AS `l` LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`Name` = `l0`.`Name`) LEFT JOIN ( 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` -) AS `t` ON `l0`.`DefeatedByNickname` = `t`.`Nickname` AND `l0`.`DefeatedBySquadId` = `t`.`SquadId` +) AS `s` ON `l0`.`DefeatedByNickname` = `s`.`Nickname` AND `l0`.`DefeatedBySquadId` = `s`.`SquadId` """); } @@ -4093,16 +4081,16 @@ public override async Task Include_collection_on_derived_type_using_string(bool await base.Include_collection_on_derived_type_using_string(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`, `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + """ +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`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator` FROM (`Gears` AS `g` LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` FROM `Gears` AS `g0` LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` -) AS `t` ON `g`.`Nickname` = `t`.`LeaderNickname` AND `g`.`SquadId` = `t`.`LeaderSquadId` -ORDER BY `g`.`Nickname`, `g`.`SquadId`, `t`.`Nickname` +) AS `s` ON `g`.`Nickname` = `s`.`LeaderNickname` AND `g`.`SquadId` = `s`.`LeaderSquadId` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s`.`Nickname` """); } @@ -4111,16 +4099,16 @@ public override async Task Include_collection_on_derived_type_using_lambda(bool await base.Include_collection_on_derived_type_using_lambda(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`, `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + """ +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`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator` FROM (`Gears` AS `g` LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` FROM `Gears` AS `g0` LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` -) AS `t` ON `g`.`Nickname` = `t`.`LeaderNickname` AND `g`.`SquadId` = `t`.`LeaderSquadId` -ORDER BY `g`.`Nickname`, `g`.`SquadId`, `t`.`Nickname` +) AS `s` ON `g`.`Nickname` = `s`.`LeaderNickname` AND `g`.`SquadId` = `s`.`LeaderSquadId` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s`.`Nickname` """); } @@ -4129,16 +4117,16 @@ public override async Task Include_collection_on_derived_type_using_lambda_with_ await base.Include_collection_on_derived_type_using_lambda_with_soft_cast(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`, `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + """ +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`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator` FROM (`Gears` AS `g` LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` FROM `Gears` AS `g0` LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` -) AS `t` ON `g`.`Nickname` = `t`.`LeaderNickname` AND `g`.`SquadId` = `t`.`LeaderSquadId` -ORDER BY `g`.`Nickname`, `g`.`SquadId`, `t`.`Nickname` +) AS `s` ON `g`.`Nickname` = `s`.`LeaderNickname` AND `g`.`SquadId` = `s`.`LeaderSquadId` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s`.`Nickname` """); } @@ -4162,16 +4150,16 @@ public override async Task ThenInclude_collection_on_derived_after_base_referenc await base.ThenInclude_collection_on_derived_after_base_reference(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM (`Tags` AS `t` LEFT JOIN ( 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` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId`) -LEFT JOIN `Weapons` AS `w` ON `t0`.`FullName` = `w`.`OwnerFullName` -ORDER BY `t`.`Id`, `t0`.`Nickname`, `t0`.`SquadId` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId`) +LEFT JOIN `Weapons` AS `w` ON `s`.`FullName` = `w`.`OwnerFullName` +ORDER BY `t`.`Id`, `s`.`Nickname`, `s`.`SquadId` """); } @@ -4180,26 +4168,26 @@ public override async Task ThenInclude_collection_on_derived_after_derived_refer await base.ThenInclude_collection_on_derived_after_derived_reference(async); AssertSql( -""" -SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Name`, `f`.`ServerAddress`, `l`.`CommanderName`, `l`.`Eradicated`, IIF(`l`.`Id` IS NOT NULL, 'LocustHorde', NULL) AS `Discriminator`, `t`.`Name`, `t`.`LocustHordeId`, `t`.`ThreatLevel`, `t`.`ThreatLevelByte`, `t`.`ThreatLevelNullableByte`, `t`.`DefeatedByNickname`, `t`.`DefeatedBySquadId`, `t`.`HighCommandId`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator`, `t1`.`Nickname`, `t1`.`SquadId`, `t1`.`AssignedCityName`, `t1`.`CityOfBirthName`, `t1`.`FullName`, `t1`.`HasSoulPatch`, `t1`.`LeaderNickname`, `t1`.`LeaderSquadId`, `t1`.`Rank`, `t1`.`Discriminator` + """ +SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Name`, `f`.`ServerAddress`, `l`.`CommanderName`, `l`.`Eradicated`, IIF(`l`.`Id` IS NOT NULL, 'LocustHorde', NULL) AS `Discriminator`, `s`.`Name`, `s`.`LocustHordeId`, `s`.`ThreatLevel`, `s`.`ThreatLevelByte`, `s`.`ThreatLevelNullableByte`, `s`.`DefeatedByNickname`, `s`.`DefeatedBySquadId`, `s`.`HighCommandId`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`AssignedCityName`, `s0`.`CityOfBirthName`, `s0`.`FullName`, `s0`.`HasSoulPatch`, `s0`.`LeaderNickname`, `s0`.`LeaderSquadId`, `s0`.`Rank`, `s0`.`Discriminator`, `s1`.`Nickname`, `s1`.`SquadId`, `s1`.`AssignedCityName`, `s1`.`CityOfBirthName`, `s1`.`FullName`, `s1`.`HasSoulPatch`, `s1`.`LeaderNickname`, `s1`.`LeaderSquadId`, `s1`.`Rank`, `s1`.`Discriminator` FROM (((`Factions` AS `f` LEFT JOIN `LocustHordes` AS `l` ON `f`.`Id` = `l`.`Id`) LEFT JOIN ( SELECT `l0`.`Name`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l1`.`DefeatedByNickname`, `l1`.`DefeatedBySquadId`, `l1`.`HighCommandId` FROM `LocustLeaders` AS `l0` INNER JOIN `LocustCommanders` AS `l1` ON `l0`.`Name` = `l1`.`Name` -) AS `t` ON `l`.`CommanderName` = `t`.`Name`) +) AS `s` ON `l`.`CommanderName` = `s`.`Name`) LEFT JOIN ( 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` -) AS `t0` ON `t`.`DefeatedByNickname` = `t0`.`Nickname` AND `t`.`DefeatedBySquadId` = `t0`.`SquadId`) +) AS `s0` ON `s`.`DefeatedByNickname` = `s0`.`Nickname` AND `s`.`DefeatedBySquadId` = `s0`.`SquadId`) LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` FROM `Gears` AS `g0` LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` -) AS `t1` ON (`t0`.`Nickname` = `t1`.`LeaderNickname` OR (`t0`.`Nickname` IS NULL AND `t1`.`LeaderNickname` IS NULL)) AND `t0`.`SquadId` = `t1`.`LeaderSquadId` -ORDER BY `f`.`Id`, `t`.`Name`, `t0`.`Nickname`, `t0`.`SquadId`, `t1`.`Nickname` +) AS `s1` ON (`s0`.`Nickname` = `s1`.`LeaderNickname` OR (`s0`.`Nickname` IS NULL AND `s1`.`LeaderNickname` IS NULL)) AND `s0`.`SquadId` = `s1`.`LeaderSquadId` +ORDER BY `f`.`Id`, `s`.`Name`, `s0`.`Nickname`, `s0`.`SquadId`, `s1`.`Nickname` """); } @@ -4208,21 +4196,21 @@ public override async Task ThenInclude_collection_on_derived_after_derived_colle await base.ThenInclude_collection_on_derived_after_derived_collection(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`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator`, `t0`.`Nickname0`, `t0`.`SquadId0`, `t0`.`AssignedCityName0`, `t0`.`CityOfBirthName0`, `t0`.`FullName0`, `t0`.`HasSoulPatch0`, `t0`.`LeaderNickname0`, `t0`.`LeaderSquadId0`, `t0`.`Rank0`, `t0`.`Discriminator0` + """ +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`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`AssignedCityName`, `s0`.`CityOfBirthName`, `s0`.`FullName`, `s0`.`HasSoulPatch`, `s0`.`LeaderNickname`, `s0`.`LeaderSquadId`, `s0`.`Rank`, `s0`.`Discriminator`, `s0`.`Nickname0`, `s0`.`SquadId0`, `s0`.`AssignedCityName0`, `s0`.`CityOfBirthName0`, `s0`.`FullName0`, `s0`.`HasSoulPatch0`, `s0`.`LeaderNickname0`, `s0`.`LeaderSquadId0`, `s0`.`Rank0`, `s0`.`Discriminator0` FROM (`Gears` AS `g` LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) LEFT JOIN ( - SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `t`.`Nickname` AS `Nickname0`, `t`.`SquadId` AS `SquadId0`, `t`.`AssignedCityName` AS `AssignedCityName0`, `t`.`CityOfBirthName` AS `CityOfBirthName0`, `t`.`FullName` AS `FullName0`, `t`.`HasSoulPatch` AS `HasSoulPatch0`, `t`.`LeaderNickname` AS `LeaderNickname0`, `t`.`LeaderSquadId` AS `LeaderSquadId0`, `t`.`Rank` AS `Rank0`, `t`.`Discriminator` AS `Discriminator0` + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `s`.`Nickname` AS `Nickname0`, `s`.`SquadId` AS `SquadId0`, `s`.`AssignedCityName` AS `AssignedCityName0`, `s`.`CityOfBirthName` AS `CityOfBirthName0`, `s`.`FullName` AS `FullName0`, `s`.`HasSoulPatch` AS `HasSoulPatch0`, `s`.`LeaderNickname` AS `LeaderNickname0`, `s`.`LeaderSquadId` AS `LeaderSquadId0`, `s`.`Rank` AS `Rank0`, `s`.`Discriminator` AS `Discriminator0` FROM (`Gears` AS `g0` LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId`) LEFT JOIN ( SELECT `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`AssignedCityName`, `g1`.`CityOfBirthName`, `g1`.`FullName`, `g1`.`HasSoulPatch`, `g1`.`LeaderNickname`, `g1`.`LeaderSquadId`, `g1`.`Rank`, IIF(`o1`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` FROM `Gears` AS `g1` LEFT JOIN `Officers` AS `o1` ON `g1`.`Nickname` = `o1`.`Nickname` AND `g1`.`SquadId` = `o1`.`SquadId` - ) AS `t` ON `g0`.`Nickname` = `t`.`LeaderNickname` AND `g0`.`SquadId` = `t`.`LeaderSquadId` -) AS `t0` ON `g`.`Nickname` = `t0`.`LeaderNickname` AND `g`.`SquadId` = `t0`.`LeaderSquadId` -ORDER BY `g`.`Nickname`, `g`.`SquadId`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`Nickname0` + ) AS `s` ON `g0`.`Nickname` = `s`.`LeaderNickname` AND `g0`.`SquadId` = `s`.`LeaderSquadId` +) AS `s0` ON `g`.`Nickname` = `s0`.`LeaderNickname` AND `g`.`SquadId` = `s0`.`LeaderSquadId` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`Nickname0` """); } @@ -4231,21 +4219,21 @@ public override async Task ThenInclude_reference_on_derived_after_derived_collec await base.ThenInclude_reference_on_derived_after_derived_collection(async); AssertSql( -""" -SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Name`, `f`.`ServerAddress`, `l`.`CommanderName`, `l`.`Eradicated`, IIF(`l`.`Id` IS NOT NULL, 'LocustHorde', NULL) AS `Discriminator`, `t0`.`Name`, `t0`.`LocustHordeId`, `t0`.`ThreatLevel`, `t0`.`ThreatLevelByte`, `t0`.`ThreatLevelNullableByte`, `t0`.`DefeatedByNickname`, `t0`.`DefeatedBySquadId`, `t0`.`HighCommandId`, `t0`.`Discriminator`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator0` + """ +SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Name`, `f`.`ServerAddress`, `l`.`CommanderName`, `l`.`Eradicated`, IIF(`l`.`Id` IS NOT NULL, 'LocustHorde', NULL) AS `Discriminator`, `s0`.`Name`, `s0`.`LocustHordeId`, `s0`.`ThreatLevel`, `s0`.`ThreatLevelByte`, `s0`.`ThreatLevelNullableByte`, `s0`.`DefeatedByNickname`, `s0`.`DefeatedBySquadId`, `s0`.`HighCommandId`, `s0`.`Discriminator`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`AssignedCityName`, `s0`.`CityOfBirthName`, `s0`.`FullName`, `s0`.`HasSoulPatch`, `s0`.`LeaderNickname`, `s0`.`LeaderSquadId`, `s0`.`Rank`, `s0`.`Discriminator0` FROM (`Factions` AS `f` LEFT JOIN `LocustHordes` AS `l` ON `f`.`Id` = `l`.`Id`) LEFT JOIN ( - SELECT `l0`.`Name`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l1`.`DefeatedByNickname`, `l1`.`DefeatedBySquadId`, `l1`.`HighCommandId`, IIF(`l1`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator`, `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` AS `Discriminator0` + SELECT `l0`.`Name`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l1`.`DefeatedByNickname`, `l1`.`DefeatedBySquadId`, `l1`.`HighCommandId`, IIF(`l1`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator` AS `Discriminator0` FROM (`LocustLeaders` AS `l0` LEFT JOIN `LocustCommanders` AS `l1` ON `l0`.`Name` = `l1`.`Name`) LEFT JOIN ( 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` - ) AS `t` ON `l1`.`DefeatedByNickname` = `t`.`Nickname` AND `l1`.`DefeatedBySquadId` = `t`.`SquadId` -) AS `t0` ON `f`.`Id` = `t0`.`LocustHordeId` -ORDER BY `f`.`Id`, `t0`.`Name`, `t0`.`Nickname` + ) AS `s` ON `l1`.`DefeatedByNickname` = `s`.`Nickname` AND `l1`.`DefeatedBySquadId` = `s`.`SquadId` +) AS `s0` ON `f`.`Id` = `s0`.`LocustHordeId` +ORDER BY `f`.`Id`, `s0`.`Name`, `s0`.`Nickname` """); } @@ -4254,26 +4242,26 @@ public override async Task Multiple_derived_included_on_one_method(bool async) await base.Multiple_derived_included_on_one_method(async); AssertSql( -""" -SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Name`, `f`.`ServerAddress`, `l`.`CommanderName`, `l`.`Eradicated`, IIF(`l`.`Id` IS NOT NULL, 'LocustHorde', NULL) AS `Discriminator`, `t`.`Name`, `t`.`LocustHordeId`, `t`.`ThreatLevel`, `t`.`ThreatLevelByte`, `t`.`ThreatLevelNullableByte`, `t`.`DefeatedByNickname`, `t`.`DefeatedBySquadId`, `t`.`HighCommandId`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator`, `t1`.`Nickname`, `t1`.`SquadId`, `t1`.`AssignedCityName`, `t1`.`CityOfBirthName`, `t1`.`FullName`, `t1`.`HasSoulPatch`, `t1`.`LeaderNickname`, `t1`.`LeaderSquadId`, `t1`.`Rank`, `t1`.`Discriminator` + """ +SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Name`, `f`.`ServerAddress`, `l`.`CommanderName`, `l`.`Eradicated`, IIF(`l`.`Id` IS NOT NULL, 'LocustHorde', NULL) AS `Discriminator`, `s`.`Name`, `s`.`LocustHordeId`, `s`.`ThreatLevel`, `s`.`ThreatLevelByte`, `s`.`ThreatLevelNullableByte`, `s`.`DefeatedByNickname`, `s`.`DefeatedBySquadId`, `s`.`HighCommandId`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`AssignedCityName`, `s0`.`CityOfBirthName`, `s0`.`FullName`, `s0`.`HasSoulPatch`, `s0`.`LeaderNickname`, `s0`.`LeaderSquadId`, `s0`.`Rank`, `s0`.`Discriminator`, `s1`.`Nickname`, `s1`.`SquadId`, `s1`.`AssignedCityName`, `s1`.`CityOfBirthName`, `s1`.`FullName`, `s1`.`HasSoulPatch`, `s1`.`LeaderNickname`, `s1`.`LeaderSquadId`, `s1`.`Rank`, `s1`.`Discriminator` FROM (((`Factions` AS `f` LEFT JOIN `LocustHordes` AS `l` ON `f`.`Id` = `l`.`Id`) LEFT JOIN ( SELECT `l0`.`Name`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l1`.`DefeatedByNickname`, `l1`.`DefeatedBySquadId`, `l1`.`HighCommandId` FROM `LocustLeaders` AS `l0` INNER JOIN `LocustCommanders` AS `l1` ON `l0`.`Name` = `l1`.`Name` -) AS `t` ON `l`.`CommanderName` = `t`.`Name`) +) AS `s` ON `l`.`CommanderName` = `s`.`Name`) LEFT JOIN ( 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` -) AS `t0` ON `t`.`DefeatedByNickname` = `t0`.`Nickname` AND `t`.`DefeatedBySquadId` = `t0`.`SquadId`) +) AS `s0` ON `s`.`DefeatedByNickname` = `s0`.`Nickname` AND `s`.`DefeatedBySquadId` = `s0`.`SquadId`) LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` FROM `Gears` AS `g0` LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` -) AS `t1` ON (`t0`.`Nickname` = `t1`.`LeaderNickname` OR (`t0`.`Nickname` IS NULL AND `t1`.`LeaderNickname` IS NULL)) AND `t0`.`SquadId` = `t1`.`LeaderSquadId` -ORDER BY `f`.`Id`, `t`.`Name`, `t0`.`Nickname`, `t0`.`SquadId`, `t1`.`Nickname` +) AS `s1` ON (`s0`.`Nickname` = `s1`.`LeaderNickname` OR (`s0`.`Nickname` IS NULL AND `s1`.`LeaderNickname` IS NULL)) AND `s0`.`SquadId` = `s1`.`LeaderSquadId` +ORDER BY `f`.`Id`, `s`.`Name`, `s0`.`Nickname`, `s0`.`SquadId`, `s1`.`Nickname` """); } @@ -4282,8 +4270,8 @@ public override async Task Include_on_derived_multi_level(bool async) await base.Include_on_derived_multi_level(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`, `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `t`.`Id`, `t`.`Banner`, `t`.`Banner5`, `t`.`InternalNumber`, `t`.`Name`, `t`.`SquadId0`, `t`.`MissionId` + """ +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`, `s1`.`Nickname`, `s1`.`SquadId`, `s1`.`AssignedCityName`, `s1`.`CityOfBirthName`, `s1`.`FullName`, `s1`.`HasSoulPatch`, `s1`.`LeaderNickname`, `s1`.`LeaderSquadId`, `s1`.`Rank`, `s1`.`Discriminator`, `s1`.`Id`, `s1`.`Banner`, `s1`.`Banner5`, `s1`.`InternalNumber`, `s1`.`Name`, `s1`.`SquadId0`, `s1`.`MissionId` FROM (`Gears` AS `g` LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) LEFT JOIN ( @@ -4292,8 +4280,8 @@ LEFT JOIN ( LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId`) INNER JOIN `Squads` AS `s` ON `g0`.`SquadId` = `s`.`Id`) LEFT JOIN `SquadMissions` AS `s0` ON `s`.`Id` = `s0`.`SquadId` -) AS `t` ON `g`.`Nickname` = `t`.`LeaderNickname` AND `g`.`SquadId` = `t`.`LeaderSquadId` -ORDER BY `g`.`Nickname`, `g`.`SquadId`, `t`.`Nickname`, `t`.`SquadId`, `t`.`Id`, `t`.`SquadId0` +) AS `s1` ON `g`.`Nickname` = `s1`.`LeaderNickname` AND `g`.`SquadId` = `s1`.`LeaderSquadId` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s1`.`Nickname`, `s1`.`SquadId`, `s1`.`Id`, `s1`.`SquadId0` """); } @@ -4302,25 +4290,59 @@ public override async Task Projecting_nullable_bool_in_conditional_works(bool as await base.Projecting_nullable_bool_in_conditional_works(async); AssertSql( -""" -SELECT IIF(`t0`.`Nickname` IS NOT NULL AND `t0`.`SquadId` IS NOT NULL, `t0`.`HasSoulPatch`, FALSE) AS `Prop` + """ +SELECT IIF(`s`.`Nickname` IS NOT NULL AND `s`.`SquadId` IS NOT NULL, `s`.`HasSoulPatch`, FALSE) AS `Prop` FROM `Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` FROM `Gears` AS `g` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` """); } - public override async Task Enum_ToString_is_client_eval(bool async) + public override async Task ToString_enum_property_projection(bool async) { - await base.Enum_ToString_is_client_eval(async); + await base.ToString_enum_property_projection(async); AssertSql( -""" -SELECT `g`.`Rank` + """ +SELECT IIF(`g`.`Rank` = 0, 'None', IIF(`g`.`Rank` = 1, 'Private', IIF(`g`.`Rank` = 2, 'Corporal', IIF(`g`.`Rank` = 4, 'Sergeant', IIF(`g`.`Rank` = 8, 'Lieutenant', IIF(`g`.`Rank` = 16, 'Captain', IIF(`g`.`Rank` = 32, 'Major', IIF(`g`.`Rank` = 64, 'Colonel', IIF(`g`.`Rank` = 128, 'General', (`g`.`Rank` & '')))))))))) FROM `Gears` AS `g` -ORDER BY `g`.`SquadId`, `g`.`Nickname` +"""); + } + + public override async Task ToString_nullable_enum_property_projection(bool async) + { + await base.ToString_nullable_enum_property_projection(async); + + AssertSql( + """ +SELECT IIF(`w`.`AmmunitionType` = 1, 'Cartridge', IIF(`w`.`AmmunitionType` = 2, 'Shell', IIF((`w`.`AmmunitionType` & '') IS NULL, '', (`w`.`AmmunitionType` & '')))) +FROM `Weapons` AS `w` +"""); + } + + public override async Task ToString_enum_contains(bool async) + { + await base.ToString_enum_contains(async); + + AssertSql( + """ +SELECT `m`.`CodeName` +FROM `Missions` AS `m` +WHERE (`m`.`Difficulty` & '') LIKE '%Med%' +"""); + } + + public override async Task ToString_nullable_enum_contains(bool async) + { + await base.ToString_nullable_enum_contains(async); + + AssertSql( + """ +SELECT `w`.`Name` +FROM `Weapons` AS `w` +WHERE IIF(`w`.`AmmunitionType` = 1, 'Cartridge', IIF(`w`.`AmmunitionType` = 2, 'Shell', IIF((`w`.`AmmunitionType` & '') IS NULL, '', (`w`.`AmmunitionType` & '')))) LIKE '%Cart%' """); } @@ -4373,14 +4395,14 @@ public override async Task Correlated_collections_basic_projection(bool async) await base.Correlated_collections_basic_projection(async); AssertSql( -""" -SELECT `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `t`.`AmmunitionType`, `t`.`IsAutomatic`, `t`.`Name`, `t`.`OwnerFullName`, `t`.`SynergyWithId` + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` FROM `Gears` AS `g` LEFT JOIN ( SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM `Weapons` AS `w` WHERE `w`.`IsAutomatic` = TRUE OR `w`.`Name` <> 'foo' OR `w`.`Name` IS NULL -) AS `t` ON `g`.`FullName` = `t`.`OwnerFullName` +) AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` WHERE `g`.`Nickname` <> 'Marcus' ORDER BY `g`.`Nickname`, `g`.`SquadId` """); @@ -4388,17 +4410,17 @@ LEFT JOIN ( public override async Task Correlated_collections_basic_projection_explicit_to_list(bool async) { - await base.Correlated_collections_basic_projection_explicit_to_list(async); - + await base.Correlated_collections_basic_projection_explicit_to_list(async); + AssertSql( -""" -SELECT `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `t`.`AmmunitionType`, `t`.`IsAutomatic`, `t`.`Name`, `t`.`OwnerFullName`, `t`.`SynergyWithId` + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` FROM `Gears` AS `g` LEFT JOIN ( SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM `Weapons` AS `w` WHERE `w`.`IsAutomatic` = TRUE OR `w`.`Name` <> 'foo' OR `w`.`Name` IS NULL -) AS `t` ON `g`.`FullName` = `t`.`OwnerFullName` +) AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` WHERE `g`.`Nickname` <> 'Marcus' ORDER BY `g`.`Nickname`, `g`.`SquadId` """); @@ -4409,14 +4431,14 @@ public override async Task Correlated_collections_basic_projection_explicit_to_a await base.Correlated_collections_basic_projection_explicit_to_array(async); AssertSql( -""" -SELECT `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `t`.`AmmunitionType`, `t`.`IsAutomatic`, `t`.`Name`, `t`.`OwnerFullName`, `t`.`SynergyWithId` + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` FROM `Gears` AS `g` LEFT JOIN ( SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM `Weapons` AS `w` WHERE `w`.`IsAutomatic` = TRUE OR `w`.`Name` <> 'foo' OR `w`.`Name` IS NULL -) AS `t` ON `g`.`FullName` = `t`.`OwnerFullName` +) AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` WHERE `g`.`Nickname` <> 'Marcus' ORDER BY `g`.`Nickname`, `g`.`SquadId` """); @@ -4427,16 +4449,16 @@ public override async Task Correlated_collections_basic_projection_ordered(bool await base.Correlated_collections_basic_projection_ordered(async); AssertSql( -""" -SELECT `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `t`.`AmmunitionType`, `t`.`IsAutomatic`, `t`.`Name`, `t`.`OwnerFullName`, `t`.`SynergyWithId` + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` FROM `Gears` AS `g` LEFT JOIN ( SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM `Weapons` AS `w` WHERE `w`.`IsAutomatic` = TRUE OR `w`.`Name` <> 'foo' OR `w`.`Name` IS NULL -) AS `t` ON `g`.`FullName` = `t`.`OwnerFullName` +) AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` WHERE `g`.`Nickname` <> 'Marcus' -ORDER BY `g`.`Nickname`, `g`.`SquadId`, `t`.`Name` DESC +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `w0`.`Name` DESC """); } @@ -4445,17 +4467,17 @@ public override async Task Correlated_collections_basic_projection_composite_key await base.Correlated_collections_basic_projection_composite_key(async); AssertSql( -""" -SELECT `g`.`Nickname`, `g`.`SquadId`, `t`.`Nickname`, `t`.`FullName`, `t`.`SquadId` + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `s`.`Nickname`, `s`.`FullName`, `s`.`SquadId` FROM (`Gears` AS `g` LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`FullName`, `g0`.`SquadId`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId` FROM `Gears` AS `g0` WHERE `g0`.`HasSoulPatch` <> TRUE -) AS `t` ON `g`.`Nickname` = `t`.`LeaderNickname` AND `g`.`SquadId` = `t`.`LeaderSquadId` +) AS `s` ON `g`.`Nickname` = `s`.`LeaderNickname` AND `g`.`SquadId` = `s`.`LeaderSquadId` WHERE `o`.`Nickname` IS NOT NULL AND `g`.`Nickname` <> 'Foo' -ORDER BY `g`.`Nickname`, `g`.`SquadId`, `t`.`Nickname` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s`.`Nickname` """); } @@ -4464,14 +4486,14 @@ public override async Task Correlated_collections_basic_projecting_single_proper await base.Correlated_collections_basic_projecting_single_property(async); AssertSql( -""" -SELECT `g`.`Nickname`, `g`.`SquadId`, `t`.`Name`, `t`.`Id` + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `w0`.`Name`, `w0`.`Id` FROM `Gears` AS `g` LEFT JOIN ( SELECT `w`.`Name`, `w`.`Id`, `w`.`OwnerFullName` FROM `Weapons` AS `w` WHERE `w`.`IsAutomatic` = TRUE OR `w`.`Name` <> 'foo' OR `w`.`Name` IS NULL -) AS `t` ON `g`.`FullName` = `t`.`OwnerFullName` +) AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` WHERE `g`.`Nickname` <> 'Marcus' ORDER BY `g`.`Nickname`, `g`.`SquadId` """); @@ -4482,14 +4504,14 @@ public override async Task Correlated_collections_basic_projecting_constant(bool await base.Correlated_collections_basic_projecting_constant(async); AssertSql( -""" -SELECT `g`.`Nickname`, `g`.`SquadId`, `t`.`c`, `t`.`Id` + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `w0`.`c`, `w0`.`Id` FROM `Gears` AS `g` LEFT JOIN ( SELECT 'BFG' AS `c`, `w`.`Id`, `w`.`OwnerFullName` FROM `Weapons` AS `w` WHERE `w`.`IsAutomatic` = TRUE OR `w`.`Name` <> 'foo' OR `w`.`Name` IS NULL -) AS `t` ON `g`.`FullName` = `t`.`OwnerFullName` +) AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` WHERE `g`.`Nickname` <> 'Marcus' ORDER BY `g`.`Nickname`, `g`.`SquadId` """); @@ -4500,14 +4522,14 @@ public override async Task Correlated_collections_basic_projecting_constant_bool await base.Correlated_collections_basic_projecting_constant_bool(async); AssertSql( -""" -SELECT `g`.`Nickname`, `g`.`SquadId`, `t`.`c`, `t`.`Id` + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `w0`.`c`, `w0`.`Id` FROM `Gears` AS `g` LEFT JOIN ( SELECT TRUE AS `c`, `w`.`Id`, `w`.`OwnerFullName` FROM `Weapons` AS `w` WHERE `w`.`IsAutomatic` = TRUE OR `w`.`Name` <> 'foo' OR `w`.`Name` IS NULL -) AS `t` ON `g`.`FullName` = `t`.`OwnerFullName` +) AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` WHERE `g`.`Nickname` <> 'Marcus' ORDER BY `g`.`Nickname`, `g`.`SquadId` """); @@ -4518,17 +4540,17 @@ public override async Task Correlated_collections_projection_of_collection_thru_ await base.Correlated_collections_projection_of_collection_thru_navigation(async); AssertSql( -""" -SELECT `g`.`Nickname`, `g`.`SquadId`, `s`.`Id`, `t`.`SquadId`, `t`.`MissionId` + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `s`.`Id`, `s1`.`SquadId`, `s1`.`MissionId` FROM (`Gears` AS `g` INNER JOIN `Squads` AS `s` ON `g`.`SquadId` = `s`.`Id`) LEFT JOIN ( SELECT `s0`.`SquadId`, `s0`.`MissionId` FROM `SquadMissions` AS `s0` WHERE `s0`.`MissionId` <> 17 -) AS `t` ON `s`.`Id` = `t`.`SquadId` +) AS `s1` ON `s`.`Id` = `s1`.`SquadId` WHERE `g`.`Nickname` <> 'Marcus' -ORDER BY `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `s`.`Id`, `t`.`SquadId` +ORDER BY `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `s`.`Id`, `s1`.`SquadId` """); } @@ -4537,15 +4559,15 @@ public override async Task Correlated_collections_project_anonymous_collection_r await base.Correlated_collections_project_anonymous_collection_result(async); AssertSql( -""" -SELECT `s`.`Name`, `s`.`Id`, `t`.`FullName`, `t`.`Rank`, `t`.`Nickname`, `t`.`SquadId` + """ +SELECT `s`.`Name`, `s`.`Id`, `s0`.`FullName`, `s0`.`Rank`, `s0`.`Nickname`, `s0`.`SquadId` FROM `Squads` AS `s` LEFT JOIN ( SELECT `g`.`FullName`, `g`.`Rank`, `g`.`Nickname`, `g`.`SquadId` FROM `Gears` AS `g` -) AS `t` ON `s`.`Id` = `t`.`SquadId` +) AS `s0` ON `s`.`Id` = `s0`.`SquadId` WHERE `s`.`Id` < 20 -ORDER BY `s`.`Id`, `t`.`Nickname` +ORDER BY `s`.`Id`, `s0`.`Nickname` """); } @@ -4554,21 +4576,21 @@ public override async Task Correlated_collections_nested(bool async) await base.Correlated_collections_nested(async); AssertSql( -""" -SELECT `s`.`Id`, `t0`.`SquadId`, `t0`.`MissionId`, `t0`.`Id`, `t0`.`SquadId0`, `t0`.`MissionId0` + """ +SELECT `s`.`Id`, `s3`.`SquadId`, `s3`.`MissionId`, `s3`.`Id`, `s3`.`SquadId0`, `s3`.`MissionId0` FROM `Squads` AS `s` LEFT JOIN ( - SELECT `s0`.`SquadId`, `s0`.`MissionId`, `m`.`Id`, `t`.`SquadId` AS `SquadId0`, `t`.`MissionId` AS `MissionId0` + SELECT `s0`.`SquadId`, `s0`.`MissionId`, `m`.`Id`, `s2`.`SquadId` AS `SquadId0`, `s2`.`MissionId` AS `MissionId0` FROM (`SquadMissions` AS `s0` INNER JOIN `Missions` AS `m` ON `s0`.`MissionId` = `m`.`Id`) LEFT JOIN ( SELECT `s1`.`SquadId`, `s1`.`MissionId` FROM `SquadMissions` AS `s1` WHERE `s1`.`SquadId` < 7 - ) AS `t` ON `m`.`Id` = `t`.`MissionId` + ) AS `s2` ON `m`.`Id` = `s2`.`MissionId` WHERE `s0`.`MissionId` < 42 -) AS `t0` ON `s`.`Id` = `t0`.`SquadId` -ORDER BY `s`.`Id`, `t0`.`SquadId`, `t0`.`MissionId`, `t0`.`Id`, `t0`.`SquadId0` +) AS `s3` ON `s`.`Id` = `s3`.`SquadId` +ORDER BY `s`.`Id`, `s3`.`SquadId`, `s3`.`MissionId`, `s3`.`Id`, `s3`.`SquadId0` """); } @@ -4577,21 +4599,21 @@ public override async Task Correlated_collections_nested_mixed_streaming_with_bu await base.Correlated_collections_nested_mixed_streaming_with_buffer1(async); AssertSql( -""" -SELECT `s`.`Id`, `t0`.`SquadId`, `t0`.`MissionId`, `t0`.`Id`, `t0`.`SquadId0`, `t0`.`MissionId0` + """ +SELECT `s`.`Id`, `s3`.`SquadId`, `s3`.`MissionId`, `s3`.`Id`, `s3`.`SquadId0`, `s3`.`MissionId0` FROM `Squads` AS `s` LEFT JOIN ( - SELECT `s0`.`SquadId`, `s0`.`MissionId`, `m`.`Id`, `t`.`SquadId` AS `SquadId0`, `t`.`MissionId` AS `MissionId0` + SELECT `s0`.`SquadId`, `s0`.`MissionId`, `m`.`Id`, `s2`.`SquadId` AS `SquadId0`, `s2`.`MissionId` AS `MissionId0` FROM (`SquadMissions` AS `s0` INNER JOIN `Missions` AS `m` ON `s0`.`MissionId` = `m`.`Id`) LEFT JOIN ( SELECT `s1`.`SquadId`, `s1`.`MissionId` FROM `SquadMissions` AS `s1` WHERE `s1`.`SquadId` < 2 - ) AS `t` ON `m`.`Id` = `t`.`MissionId` + ) AS `s2` ON `m`.`Id` = `s2`.`MissionId` WHERE `s0`.`MissionId` < 3 -) AS `t0` ON `s`.`Id` = `t0`.`SquadId` -ORDER BY `s`.`Id`, `t0`.`SquadId`, `t0`.`MissionId`, `t0`.`Id`, `t0`.`SquadId0` +) AS `s3` ON `s`.`Id` = `s3`.`SquadId` +ORDER BY `s`.`Id`, `s3`.`SquadId`, `s3`.`MissionId`, `s3`.`Id`, `s3`.`SquadId0` """); } @@ -4600,21 +4622,21 @@ public override async Task Correlated_collections_nested_mixed_streaming_with_bu await base.Correlated_collections_nested_mixed_streaming_with_buffer2(async); AssertSql( -""" -SELECT `s`.`Id`, `t0`.`SquadId`, `t0`.`MissionId`, `t0`.`Id`, `t0`.`SquadId0`, `t0`.`MissionId0` + """ +SELECT `s`.`Id`, `s3`.`SquadId`, `s3`.`MissionId`, `s3`.`Id`, `s3`.`SquadId0`, `s3`.`MissionId0` FROM `Squads` AS `s` LEFT JOIN ( - SELECT `s0`.`SquadId`, `s0`.`MissionId`, `m`.`Id`, `t`.`SquadId` AS `SquadId0`, `t`.`MissionId` AS `MissionId0` + SELECT `s0`.`SquadId`, `s0`.`MissionId`, `m`.`Id`, `s2`.`SquadId` AS `SquadId0`, `s2`.`MissionId` AS `MissionId0` FROM (`SquadMissions` AS `s0` INNER JOIN `Missions` AS `m` ON `s0`.`MissionId` = `m`.`Id`) LEFT JOIN ( SELECT `s1`.`SquadId`, `s1`.`MissionId` FROM `SquadMissions` AS `s1` WHERE `s1`.`SquadId` < 7 - ) AS `t` ON `m`.`Id` = `t`.`MissionId` + ) AS `s2` ON `m`.`Id` = `s2`.`MissionId` WHERE `s0`.`MissionId` < 42 -) AS `t0` ON `s`.`Id` = `t0`.`SquadId` -ORDER BY `s`.`Id`, `t0`.`SquadId`, `t0`.`MissionId`, `t0`.`Id`, `t0`.`SquadId0` +) AS `s3` ON `s`.`Id` = `s3`.`SquadId` +ORDER BY `s`.`Id`, `s3`.`SquadId`, `s3`.`MissionId`, `s3`.`Id`, `s3`.`SquadId0` """); } @@ -4623,22 +4645,22 @@ public override async Task Correlated_collections_nested_with_custom_ordering(bo await base.Correlated_collections_nested_with_custom_ordering(async); AssertSql( -""" -SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `t0`.`FullName`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`Id`, `t0`.`AmmunitionType`, `t0`.`IsAutomatic`, `t0`.`Name`, `t0`.`OwnerFullName`, `t0`.`SynergyWithId` + """ +SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `s`.`FullName`, `s`.`Nickname`, `s`.`SquadId`, `s`.`Id`, `s`.`AmmunitionType`, `s`.`IsAutomatic`, `s`.`Name`, `s`.`OwnerFullName`, `s`.`SynergyWithId` FROM (`Gears` AS `g` LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) LEFT JOIN ( - SELECT `g0`.`FullName`, `g0`.`Nickname`, `g0`.`SquadId`, `t`.`Id`, `t`.`AmmunitionType`, `t`.`IsAutomatic`, `t`.`Name`, `t`.`OwnerFullName`, `t`.`SynergyWithId`, `g0`.`Rank`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId` + SELECT `g0`.`FullName`, `g0`.`Nickname`, `g0`.`SquadId`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId`, `g0`.`Rank`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId` FROM `Gears` AS `g0` LEFT JOIN ( SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM `Weapons` AS `w` WHERE `w`.`Name` <> 'Bar' OR `w`.`Name` IS NULL - ) AS `t` ON `g0`.`FullName` = `t`.`OwnerFullName` + ) AS `w0` ON `g0`.`FullName` = `w0`.`OwnerFullName` WHERE `g0`.`FullName` <> 'Foo' -) AS `t0` ON `g`.`Nickname` = `t0`.`LeaderNickname` AND `g`.`SquadId` = `t0`.`LeaderSquadId` +) AS `s` ON `g`.`Nickname` = `s`.`LeaderNickname` AND `g`.`SquadId` = `s`.`LeaderSquadId` WHERE `o`.`Nickname` IS NOT NULL -ORDER BY NOT (`g`.`HasSoulPatch`) DESC, `g`.`Nickname`, `g`.`SquadId`, `t0`.`Rank`, `t0`.`Nickname`, `t0`.`SquadId`, NOT (`t0`.`IsAutomatic`) +ORDER BY NOT (`g`.`HasSoulPatch`) DESC, `g`.`Nickname`, `g`.`SquadId`, `s`.`Rank`, `s`.`Nickname`, `s`.`SquadId`, NOT (`s`.`IsAutomatic`) """); } @@ -4647,20 +4669,20 @@ public override async Task Correlated_collections_same_collection_projected_mult await base.Correlated_collections_same_collection_projected_multiple_times(async); AssertSql( -""" -SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `t`.`AmmunitionType`, `t`.`IsAutomatic`, `t`.`Name`, `t`.`OwnerFullName`, `t`.`SynergyWithId`, `t0`.`Id`, `t0`.`AmmunitionType`, `t0`.`IsAutomatic`, `t0`.`Name`, `t0`.`OwnerFullName`, `t0`.`SynergyWithId` + """ +SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `w1`.`Id`, `w1`.`AmmunitionType`, `w1`.`IsAutomatic`, `w1`.`Name`, `w1`.`OwnerFullName`, `w1`.`SynergyWithId`, `w2`.`Id`, `w2`.`AmmunitionType`, `w2`.`IsAutomatic`, `w2`.`Name`, `w2`.`OwnerFullName`, `w2`.`SynergyWithId` FROM (`Gears` AS `g` LEFT JOIN ( SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM `Weapons` AS `w` WHERE `w`.`IsAutomatic` = TRUE -) AS `t` ON `g`.`FullName` = `t`.`OwnerFullName`) +) AS `w1` ON `g`.`FullName` = `w1`.`OwnerFullName`) LEFT JOIN ( SELECT `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` FROM `Weapons` AS `w0` WHERE `w0`.`IsAutomatic` = TRUE -) AS `t0` ON `g`.`FullName` = `t0`.`OwnerFullName` -ORDER BY `g`.`Nickname`, `g`.`SquadId`, `t`.`Id` +) AS `w2` ON `g`.`FullName` = `w2`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `w1`.`Id` """); } @@ -4669,20 +4691,20 @@ public override async Task Correlated_collections_similar_collection_projected_m await base.Correlated_collections_similar_collection_projected_multiple_times(async); AssertSql( -""" -SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `t`.`AmmunitionType`, `t`.`IsAutomatic`, `t`.`Name`, `t`.`OwnerFullName`, `t`.`SynergyWithId`, `t0`.`Id`, `t0`.`AmmunitionType`, `t0`.`IsAutomatic`, `t0`.`Name`, `t0`.`OwnerFullName`, `t0`.`SynergyWithId` + """ +SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `w1`.`Id`, `w1`.`AmmunitionType`, `w1`.`IsAutomatic`, `w1`.`Name`, `w1`.`OwnerFullName`, `w1`.`SynergyWithId`, `w2`.`Id`, `w2`.`AmmunitionType`, `w2`.`IsAutomatic`, `w2`.`Name`, `w2`.`OwnerFullName`, `w2`.`SynergyWithId` FROM (`Gears` AS `g` LEFT JOIN ( SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM `Weapons` AS `w` WHERE `w`.`IsAutomatic` = TRUE -) AS `t` ON `g`.`FullName` = `t`.`OwnerFullName`) +) AS `w1` ON `g`.`FullName` = `w1`.`OwnerFullName`) LEFT JOIN ( SELECT `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` FROM `Weapons` AS `w0` WHERE `w0`.`IsAutomatic` <> TRUE -) AS `t0` ON `g`.`FullName` = `t0`.`OwnerFullName` -ORDER BY `g`.`Rank`, `g`.`Nickname`, `g`.`SquadId`, `t`.`OwnerFullName`, `t`.`Id`, NOT (`t0`.`IsAutomatic`) +) AS `w2` ON `g`.`FullName` = `w2`.`OwnerFullName` +ORDER BY `g`.`Rank`, `g`.`Nickname`, `g`.`SquadId`, `w1`.`OwnerFullName`, `w1`.`Id`, NOT (`w2`.`IsAutomatic`) """); } @@ -4691,21 +4713,21 @@ public override async Task Correlated_collections_different_collections_projecte await base.Correlated_collections_different_collections_projected(async); AssertSql( -""" -SELECT `g`.`Nickname`, `g`.`SquadId`, `t`.`Name`, `t`.`IsAutomatic`, `t`.`Id`, `t0`.`Nickname`, `t0`.`Rank`, `t0`.`SquadId` + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `w0`.`Name`, `w0`.`IsAutomatic`, `w0`.`Id`, `s`.`Nickname`, `s`.`Rank`, `s`.`SquadId` FROM ((`Gears` AS `g` LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) LEFT JOIN ( SELECT `w`.`Name`, `w`.`IsAutomatic`, `w`.`Id`, `w`.`OwnerFullName` FROM `Weapons` AS `w` WHERE `w`.`IsAutomatic` = TRUE -) AS `t` ON `g`.`FullName` = `t`.`OwnerFullName`) +) AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName`) LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`Rank`, `g0`.`SquadId`, `g0`.`FullName`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId` FROM `Gears` AS `g0` -) AS `t0` ON `g`.`Nickname` = `t0`.`LeaderNickname` AND `g`.`SquadId` = `t0`.`LeaderSquadId` +) AS `s` ON `g`.`Nickname` = `s`.`LeaderNickname` AND `g`.`SquadId` = `s`.`LeaderSquadId` WHERE `o`.`Nickname` IS NOT NULL -ORDER BY `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `t0`.`FullName`, `t0`.`Nickname` +ORDER BY `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `w0`.`Id`, `s`.`FullName`, `s`.`Nickname` """); } @@ -4714,7 +4736,7 @@ public override async Task Multiple_orderby_with_navigation_expansion_on_one_of_ await base.Multiple_orderby_with_navigation_expansion_on_one_of_the_order_bys(async); AssertSql( -""" + """ SELECT `g`.`FullName` FROM (`Gears` AS `g` LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) @@ -4722,7 +4744,6 @@ public override async Task Multiple_orderby_with_navigation_expansion_on_one_of_ WHERE `o`.`Nickname` IS NOT NULL AND EXISTS ( SELECT 1 FROM `Gears` AS `g0` - LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` WHERE `g`.`Nickname` = `g0`.`LeaderNickname` AND `g`.`SquadId` = `g0`.`LeaderSquadId`) ORDER BY NOT (`g`.`HasSoulPatch`) DESC, `t`.`Note` """); @@ -4733,29 +4754,28 @@ public override async Task Multiple_orderby_with_navigation_expansion_on_one_of_ await base.Multiple_orderby_with_navigation_expansion_on_one_of_the_order_bys_inside_subquery(async); AssertSql( -""" -SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `t0`.`Nickname`, `t0`.`SquadId`, `t1`.`Id`, `t1`.`AmmunitionType`, `t1`.`IsAutomatic`, `t1`.`Name`, `t1`.`OwnerFullName`, `t1`.`SynergyWithId`, `t1`.`Nickname`, `t1`.`SquadId` + """ +SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `s`.`Nickname`, `s`.`SquadId`, `s1`.`Id`, `s1`.`AmmunitionType`, `s1`.`IsAutomatic`, `s1`.`Name`, `s1`.`OwnerFullName`, `s1`.`SynergyWithId`, `s1`.`Nickname`, `s1`.`SquadId` FROM (((`Gears` AS `g` LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) LEFT JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName` AND `g`.`SquadId` = `t`.`GearSquadId`) LEFT JOIN ( SELECT `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`FullName` FROM `Gears` AS `g1` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId`) +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId`) LEFT JOIN ( - SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `t2`.`Nickname`, `t2`.`SquadId` + SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `s0`.`Nickname`, `s0`.`SquadId` FROM `Weapons` AS `w` LEFT JOIN ( SELECT `g2`.`Nickname`, `g2`.`SquadId`, `g2`.`FullName` FROM `Gears` AS `g2` - ) AS `t2` ON `w`.`OwnerFullName` = `t2`.`FullName` -) AS `t1` ON `t0`.`FullName` = `t1`.`OwnerFullName` + ) AS `s0` ON `w`.`OwnerFullName` = `s0`.`FullName` +) AS `s1` ON `s`.`FullName` = `s1`.`OwnerFullName` WHERE `o`.`Nickname` IS NOT NULL AND EXISTS ( SELECT 1 FROM `Gears` AS `g0` - LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` WHERE `g`.`Nickname` = `g0`.`LeaderNickname` AND `g`.`SquadId` = `g0`.`LeaderSquadId`) -ORDER BY NOT (`g`.`HasSoulPatch`) DESC, `t`.`Note`, `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `t0`.`Nickname`, `t0`.`SquadId`, NOT (`t1`.`IsAutomatic`), `t1`.`Nickname` DESC, `t1`.`Id` +ORDER BY NOT (`g`.`HasSoulPatch`) DESC, `t`.`Note`, `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `s`.`Nickname`, `s`.`SquadId`, NOT (`s1`.`IsAutomatic`), `s1`.`Nickname` DESC, `s1`.`Id` """); } @@ -4765,29 +4785,28 @@ public override async Task Multiple_orderby_with_navigation_expansion_on_one_of_ await base.Multiple_orderby_with_navigation_expansion_on_one_of_the_order_bys_inside_subquery_duplicated_orderings(async); AssertSql( -""" -SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `t0`.`Nickname`, `t0`.`SquadId`, `t1`.`Id`, `t1`.`AmmunitionType`, `t1`.`IsAutomatic`, `t1`.`Name`, `t1`.`OwnerFullName`, `t1`.`SynergyWithId`, `t1`.`Nickname`, `t1`.`SquadId` + """ +SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `s`.`Nickname`, `s`.`SquadId`, `s1`.`Id`, `s1`.`AmmunitionType`, `s1`.`IsAutomatic`, `s1`.`Name`, `s1`.`OwnerFullName`, `s1`.`SynergyWithId`, `s1`.`Nickname`, `s1`.`SquadId` FROM (((`Gears` AS `g` LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) LEFT JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName` AND `g`.`SquadId` = `t`.`GearSquadId`) LEFT JOIN ( SELECT `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`FullName` FROM `Gears` AS `g1` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId`) +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId`) LEFT JOIN ( - SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `t2`.`Nickname`, `t2`.`SquadId` + SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `s0`.`Nickname`, `s0`.`SquadId` FROM `Weapons` AS `w` LEFT JOIN ( SELECT `g2`.`Nickname`, `g2`.`SquadId`, `g2`.`FullName` FROM `Gears` AS `g2` - ) AS `t2` ON `w`.`OwnerFullName` = `t2`.`FullName` -) AS `t1` ON `t0`.`FullName` = `t1`.`OwnerFullName` + ) AS `s0` ON `w`.`OwnerFullName` = `s0`.`FullName` +) AS `s1` ON `s`.`FullName` = `s1`.`OwnerFullName` WHERE `o`.`Nickname` IS NOT NULL AND EXISTS ( SELECT 1 FROM `Gears` AS `g0` - LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` WHERE `g`.`Nickname` = `g0`.`LeaderNickname` AND `g`.`SquadId` = `g0`.`LeaderSquadId`) -ORDER BY NOT (`g`.`HasSoulPatch`) DESC, `t`.`Note`, `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `t0`.`Nickname`, `t0`.`SquadId`, NOT (`t1`.`IsAutomatic`), `t1`.`Nickname` DESC, `t1`.`Id` +ORDER BY NOT (`g`.`HasSoulPatch`) DESC, `t`.`Note`, `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `s`.`Nickname`, `s`.`SquadId`, NOT (`s1`.`IsAutomatic`), `s1`.`Nickname` DESC, `s1`.`Id` """); } @@ -4797,32 +4816,31 @@ public override async Task Multiple_orderby_with_navigation_expansion_on_one_of_ await base.Multiple_orderby_with_navigation_expansion_on_one_of_the_order_bys_inside_subquery_complex_orderings(async); AssertSql( -""" -SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `t0`.`Nickname`, `t0`.`SquadId`, `t1`.`Id`, `t1`.`AmmunitionType`, `t1`.`IsAutomatic`, `t1`.`Name`, `t1`.`OwnerFullName`, `t1`.`SynergyWithId`, `t1`.`Nickname`, `t1`.`SquadId` + """ +SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `s`.`Nickname`, `s`.`SquadId`, `s1`.`Id`, `s1`.`AmmunitionType`, `s1`.`IsAutomatic`, `s1`.`Name`, `s1`.`OwnerFullName`, `s1`.`SynergyWithId`, `s1`.`Nickname`, `s1`.`SquadId` FROM (((`Gears` AS `g` LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) LEFT JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName` AND `g`.`SquadId` = `t`.`GearSquadId`) LEFT JOIN ( SELECT `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`FullName` FROM `Gears` AS `g1` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId`) +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId`) LEFT JOIN ( - SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `t2`.`Nickname`, `t2`.`SquadId`, ( + SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `s0`.`Nickname`, `s0`.`SquadId`, ( SELECT COUNT(*) FROM `Weapons` AS `w0` - WHERE `t2`.`FullName` IS NOT NULL AND `t2`.`FullName` = `w0`.`OwnerFullName`) AS `c` + WHERE `s0`.`FullName` IS NOT NULL AND `s0`.`FullName` = `w0`.`OwnerFullName`) AS `c` FROM `Weapons` AS `w` LEFT JOIN ( SELECT `g2`.`Nickname`, `g2`.`SquadId`, `g2`.`FullName` FROM `Gears` AS `g2` - ) AS `t2` ON `w`.`OwnerFullName` = `t2`.`FullName` -) AS `t1` ON `t0`.`FullName` = `t1`.`OwnerFullName` + ) AS `s0` ON `w`.`OwnerFullName` = `s0`.`FullName` +) AS `s1` ON `s`.`FullName` = `s1`.`OwnerFullName` WHERE `o`.`Nickname` IS NOT NULL AND EXISTS ( SELECT 1 FROM `Gears` AS `g0` - LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` WHERE `g`.`Nickname` = `g0`.`LeaderNickname` AND `g`.`SquadId` = `g0`.`LeaderSquadId`) -ORDER BY NOT (`g`.`HasSoulPatch`) DESC, `t`.`Note`, `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `t0`.`Nickname`, `t0`.`SquadId`, `t1`.`Id` DESC, `t1`.`c`, `t1`.`Nickname` +ORDER BY NOT (`g`.`HasSoulPatch`) DESC, `t`.`Note`, `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `s`.`Nickname`, `s`.`SquadId`, `s1`.`Id` DESC, `s1`.`c`, `s1`.`Nickname` """); } @@ -4831,49 +4849,48 @@ public override async Task Correlated_collections_multiple_nested_complex_collec await base.Correlated_collections_multiple_nested_complex_collections(async); AssertSql( -""" -SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `t0`.`Nickname`, `t0`.`SquadId`, `t2`.`FullName`, `t2`.`Nickname`, `t2`.`SquadId`, `t2`.`Id`, `t2`.`Nickname0`, `t2`.`SquadId0`, `t2`.`Id0`, `t2`.`Name`, `t2`.`IsAutomatic`, `t2`.`Id1`, `t2`.`Nickname00`, `t2`.`HasSoulPatch`, `t2`.`SquadId00`, `t5`.`Id`, `t5`.`AmmunitionType`, `t5`.`IsAutomatic`, `t5`.`Name`, `t5`.`OwnerFullName`, `t5`.`SynergyWithId`, `t5`.`Nickname`, `t5`.`SquadId` + """ +SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `s`.`Nickname`, `s`.`SquadId`, `s5`.`FullName`, `s5`.`Nickname`, `s5`.`SquadId`, `s5`.`Id`, `s5`.`Nickname0`, `s5`.`SquadId0`, `s5`.`Id0`, `s5`.`Name`, `s5`.`IsAutomatic`, `s5`.`Id1`, `s5`.`Nickname00`, `s5`.`HasSoulPatch`, `s5`.`SquadId00`, `s6`.`Id`, `s6`.`AmmunitionType`, `s6`.`IsAutomatic`, `s6`.`Name`, `s6`.`OwnerFullName`, `s6`.`SynergyWithId`, `s6`.`Nickname`, `s6`.`SquadId` FROM ((((`Gears` AS `g` LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) LEFT JOIN `Tags` AS `t` ON `g`.`Nickname` = `t`.`GearNickName` AND `g`.`SquadId` = `t`.`GearSquadId`) LEFT JOIN ( SELECT `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`FullName` FROM `Gears` AS `g1` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId`) +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId`) LEFT JOIN ( - SELECT `g2`.`FullName`, `g2`.`Nickname`, `g2`.`SquadId`, `t1`.`Id`, `t1`.`Nickname` AS `Nickname0`, `t1`.`SquadId` AS `SquadId0`, `t1`.`Id0`, `t1`.`Name`, `t1`.`IsAutomatic`, `t1`.`Id1`, `t1`.`Nickname0` AS `Nickname00`, `t1`.`HasSoulPatch`, `t1`.`SquadId0` AS `SquadId00`, `g2`.`Rank`, `t1`.`IsAutomatic0`, `g2`.`LeaderNickname`, `g2`.`LeaderSquadId` + SELECT `g2`.`FullName`, `g2`.`Nickname`, `g2`.`SquadId`, `s4`.`Id`, `s4`.`Nickname` AS `Nickname0`, `s4`.`SquadId` AS `SquadId0`, `s4`.`Id0`, `s4`.`Name`, `s4`.`IsAutomatic`, `s4`.`Id1`, `s4`.`Nickname0` AS `Nickname00`, `s4`.`HasSoulPatch`, `s4`.`SquadId0` AS `SquadId00`, `g2`.`Rank`, `s4`.`IsAutomatic0`, `g2`.`LeaderNickname`, `g2`.`LeaderSquadId` FROM `Gears` AS `g2` LEFT JOIN ( - SELECT `w`.`Id`, `t3`.`Nickname`, `t3`.`SquadId`, `s`.`Id` AS `Id0`, `w0`.`Name`, `w0`.`IsAutomatic`, `w0`.`Id` AS `Id1`, `t4`.`Nickname` AS `Nickname0`, `t4`.`HasSoulPatch`, `t4`.`SquadId` AS `SquadId0`, `w`.`IsAutomatic` AS `IsAutomatic0`, `w`.`OwnerFullName` + SELECT `w`.`Id`, `s0`.`Nickname`, `s0`.`SquadId`, `s1`.`Id` AS `Id0`, `w0`.`Name`, `w0`.`IsAutomatic`, `w0`.`Id` AS `Id1`, `s3`.`Nickname` AS `Nickname0`, `s3`.`HasSoulPatch`, `s3`.`SquadId` AS `SquadId0`, `w`.`IsAutomatic` AS `IsAutomatic0`, `w`.`OwnerFullName` FROM (((`Weapons` AS `w` LEFT JOIN ( SELECT `g3`.`Nickname`, `g3`.`SquadId`, `g3`.`FullName` FROM `Gears` AS `g3` - ) AS `t3` ON `w`.`OwnerFullName` = `t3`.`FullName`) - LEFT JOIN `Squads` AS `s` ON `t3`.`SquadId` = `s`.`Id`) - LEFT JOIN `Weapons` AS `w0` ON `t3`.`FullName` = `w0`.`OwnerFullName`) + ) AS `s0` ON `w`.`OwnerFullName` = `s0`.`FullName`) + LEFT JOIN `Squads` AS `s1` ON `s0`.`SquadId` = `s1`.`Id`) + LEFT JOIN `Weapons` AS `w0` ON `s0`.`FullName` = `w0`.`OwnerFullName`) LEFT JOIN ( SELECT `g4`.`Nickname`, `g4`.`HasSoulPatch`, `g4`.`SquadId` FROM `Gears` AS `g4` - ) AS `t4` ON `s`.`Id` = `t4`.`SquadId` + ) AS `s3` ON `s1`.`Id` = `s3`.`SquadId` WHERE `w`.`Name` <> 'Bar' OR `w`.`Name` IS NULL - ) AS `t1` ON `g2`.`FullName` = `t1`.`OwnerFullName` + ) AS `s4` ON `g2`.`FullName` = `s4`.`OwnerFullName` WHERE `g2`.`FullName` <> 'Foo' -) AS `t2` ON `g`.`Nickname` = `t2`.`LeaderNickname` AND `g`.`SquadId` = `t2`.`LeaderSquadId`) +) AS `s5` ON `g`.`Nickname` = `s5`.`LeaderNickname` AND `g`.`SquadId` = `s5`.`LeaderSquadId`) LEFT JOIN ( - SELECT `w1`.`Id`, `w1`.`AmmunitionType`, `w1`.`IsAutomatic`, `w1`.`Name`, `w1`.`OwnerFullName`, `w1`.`SynergyWithId`, `t6`.`Nickname`, `t6`.`SquadId` + SELECT `w1`.`Id`, `w1`.`AmmunitionType`, `w1`.`IsAutomatic`, `w1`.`Name`, `w1`.`OwnerFullName`, `w1`.`SynergyWithId`, `s2`.`Nickname`, `s2`.`SquadId` FROM `Weapons` AS `w1` LEFT JOIN ( SELECT `g5`.`Nickname`, `g5`.`SquadId`, `g5`.`FullName` FROM `Gears` AS `g5` - ) AS `t6` ON `w1`.`OwnerFullName` = `t6`.`FullName` -) AS `t5` ON `t0`.`FullName` = `t5`.`OwnerFullName` + ) AS `s2` ON `w1`.`OwnerFullName` = `s2`.`FullName` +) AS `s6` ON `s`.`FullName` = `s6`.`OwnerFullName` WHERE `o`.`Nickname` IS NOT NULL AND EXISTS ( SELECT 1 FROM `Gears` AS `g0` - LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` WHERE `g`.`Nickname` = `g0`.`LeaderNickname` AND `g`.`SquadId` = `g0`.`LeaderSquadId`) -ORDER BY NOT (`g`.`HasSoulPatch`) DESC, `t`.`Note`, `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `t0`.`Nickname`, `t0`.`SquadId`, `t2`.`Rank`, `t2`.`Nickname`, `t2`.`SquadId`, NOT (`t2`.`IsAutomatic0`), `t2`.`Id`, `t2`.`Nickname0`, `t2`.`SquadId0`, `t2`.`Id0`, `t2`.`Id1`, `t2`.`Nickname00`, `t2`.`SquadId00`, NOT (`t5`.`IsAutomatic`), `t5`.`Nickname` DESC, `t5`.`Id` +ORDER BY NOT (`g`.`HasSoulPatch`) DESC, `t`.`Note`, `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `s`.`Nickname`, `s`.`SquadId`, `s5`.`Rank`, `s5`.`Nickname`, `s5`.`SquadId`, NOT (`s5`.`IsAutomatic0`), `s5`.`Id`, `s5`.`Nickname0`, `s5`.`SquadId0`, `s5`.`Id0`, `s5`.`Id1`, `s5`.`Nickname00`, `s5`.`SquadId00`, NOT (`s6`.`IsAutomatic`), `s6`.`Nickname` DESC, `s6`.`Id` """); } @@ -5066,11 +5083,10 @@ public override async Task Correlated_collections_with_FirstOrDefault(bool async await base.Correlated_collections_with_FirstOrDefault(async); AssertSql( -""" + """ SELECT ( SELECT TOP 1 `g`.`FullName` FROM `Gears` AS `g` - LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` WHERE `s`.`Id` = `g`.`SquadId` ORDER BY `g`.`Nickname`) FROM `Squads` AS `s` @@ -5083,16 +5099,16 @@ public override async Task Correlated_collections_on_left_join_with_predicate(bo await base.Correlated_collections_on_left_join_with_predicate(async); AssertSql( -""" -SELECT `t0`.`Nickname`, `t`.`Id`, `t0`.`SquadId`, `w`.`Name`, `w`.`Id` + """ +SELECT `s`.`Nickname`, `t`.`Id`, `s`.`SquadId`, `w`.`Name`, `w`.`Id` FROM (`Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName`, `g`.`HasSoulPatch` FROM `Gears` AS `g` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname`) -LEFT JOIN `Weapons` AS `w` ON `t0`.`FullName` = `w`.`OwnerFullName` -WHERE `t0`.`HasSoulPatch` <> TRUE -ORDER BY `t`.`Id`, `t0`.`Nickname`, `t0`.`SquadId` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `s`.`FullName` = `w`.`OwnerFullName` +WHERE `s`.`HasSoulPatch` <> TRUE +ORDER BY `t`.`Id`, `s`.`Nickname`, `s`.`SquadId` """); } @@ -5101,15 +5117,15 @@ public override async Task Correlated_collections_on_left_join_with_null_value(b await base.Correlated_collections_on_left_join_with_null_value(async); AssertSql( -""" -SELECT `t`.`Id`, `t0`.`Nickname`, `t0`.`SquadId`, `w`.`Name`, `w`.`Id` + """ +SELECT `t`.`Id`, `s`.`Nickname`, `s`.`SquadId`, `w`.`Name`, `w`.`Id` FROM (`Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` FROM `Gears` AS `g` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname`) -LEFT JOIN `Weapons` AS `w` ON `t0`.`FullName` = `w`.`OwnerFullName` -ORDER BY `t`.`Note`, `t`.`Id`, `t0`.`Nickname`, `t0`.`SquadId` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `s`.`FullName` = `w`.`OwnerFullName` +ORDER BY `t`.`Note`, `t`.`Id`, `s`.`Nickname`, `s`.`SquadId` """); } @@ -5118,20 +5134,20 @@ public override async Task Correlated_collections_left_join_with_self_reference( await base.Correlated_collections_left_join_with_self_reference(async); AssertSql( -""" -SELECT `t`.`Note`, `t`.`Id`, `t0`.`Nickname`, `t0`.`SquadId`, `t1`.`FullName`, `t1`.`Nickname`, `t1`.`SquadId` + """ +SELECT `t`.`Note`, `t`.`Id`, `s`.`Nickname`, `s`.`SquadId`, `s0`.`FullName`, `s0`.`Nickname`, `s0`.`SquadId` FROM (`Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId` FROM `Gears` AS `g` LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` WHERE `o`.`Nickname` IS NOT NULL -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname`) +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname`) LEFT JOIN ( SELECT `g0`.`FullName`, `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId` FROM `Gears` AS `g0` -) AS `t1` ON (`t0`.`Nickname` = `t1`.`LeaderNickname` OR (`t0`.`Nickname` IS NULL AND `t1`.`LeaderNickname` IS NULL)) AND `t0`.`SquadId` = `t1`.`LeaderSquadId` -ORDER BY `t`.`Id`, `t0`.`Nickname`, `t0`.`SquadId`, `t1`.`Nickname` +) AS `s0` ON (`s`.`Nickname` = `s0`.`LeaderNickname` OR (`s`.`Nickname` IS NULL AND `s0`.`LeaderNickname` IS NULL)) AND `s`.`SquadId` = `s0`.`LeaderSquadId` +ORDER BY `t`.`Id`, `s`.`Nickname`, `s`.`SquadId`, `s0`.`Nickname` """); } @@ -5140,25 +5156,25 @@ public override async Task Correlated_collections_deeply_nested_left_join(bool a await base.Correlated_collections_deeply_nested_left_join(async); AssertSql( -""" -SELECT `t`.`Id`, `t0`.`Nickname`, `t0`.`SquadId`, `s`.`Id`, `t1`.`Nickname`, `t1`.`SquadId`, `t1`.`Id`, `t1`.`AmmunitionType`, `t1`.`IsAutomatic`, `t1`.`Name`, `t1`.`OwnerFullName`, `t1`.`SynergyWithId` + """ +SELECT `t`.`Id`, `s`.`Nickname`, `s`.`SquadId`, `s0`.`Id`, `s1`.`Nickname`, `s1`.`SquadId`, `s1`.`Id`, `s1`.`AmmunitionType`, `s1`.`IsAutomatic`, `s1`.`Name`, `s1`.`OwnerFullName`, `s1`.`SynergyWithId` FROM ((`Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId` FROM `Gears` AS `g` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname`) -LEFT JOIN `Squads` AS `s` ON `t0`.`SquadId` = `s`.`Id`) +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname`) +LEFT JOIN `Squads` AS `s0` ON `s`.`SquadId` = `s0`.`Id`) LEFT JOIN ( - SELECT `g0`.`Nickname`, `g0`.`SquadId`, `t2`.`Id`, `t2`.`AmmunitionType`, `t2`.`IsAutomatic`, `t2`.`Name`, `t2`.`OwnerFullName`, `t2`.`SynergyWithId` + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` FROM `Gears` AS `g0` LEFT JOIN ( SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM `Weapons` AS `w` WHERE `w`.`IsAutomatic` = TRUE - ) AS `t2` ON `g0`.`FullName` = `t2`.`OwnerFullName` + ) AS `w0` ON `g0`.`FullName` = `w0`.`OwnerFullName` WHERE `g0`.`HasSoulPatch` = TRUE -) AS `t1` ON `s`.`Id` = `t1`.`SquadId` -ORDER BY `t`.`Note`, `t0`.`Nickname` DESC, `t`.`Id`, `t0`.`SquadId`, `s`.`Id`, `t1`.`Nickname`, `t1`.`SquadId` +) AS `s1` ON `s0`.`Id` = `s1`.`SquadId` +ORDER BY `t`.`Note`, `s`.`Nickname` DESC, `t`.`Id`, `s`.`SquadId`, `s0`.`Id`, `s1`.`Nickname`, `s1`.`SquadId` """); } @@ -5167,24 +5183,24 @@ public override async Task Correlated_collections_from_left_join_with_additional await base.Correlated_collections_from_left_join_with_additional_elements_projected_of_that_join(async); AssertSql( -""" -SELECT `w`.`Id`, `t`.`Nickname`, `t`.`SquadId`, `s`.`Id`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`Id`, `t0`.`AmmunitionType`, `t0`.`IsAutomatic`, `t0`.`Name`, `t0`.`OwnerFullName`, `t0`.`SynergyWithId`, `t0`.`Rank` + """ +SELECT `w`.`Id`, `s`.`Nickname`, `s`.`SquadId`, `s0`.`Id`, `s1`.`Nickname`, `s1`.`SquadId`, `s1`.`Id`, `s1`.`AmmunitionType`, `s1`.`IsAutomatic`, `s1`.`Name`, `s1`.`OwnerFullName`, `s1`.`SynergyWithId`, `s1`.`Rank` FROM ((`Weapons` AS `w` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` FROM `Gears` AS `g` -) AS `t` ON `w`.`OwnerFullName` = `t`.`FullName`) -LEFT JOIN `Squads` AS `s` ON `t`.`SquadId` = `s`.`Id`) +) AS `s` ON `w`.`OwnerFullName` = `s`.`FullName`) +LEFT JOIN `Squads` AS `s0` ON `s`.`SquadId` = `s0`.`Id`) LEFT JOIN ( - SELECT `g0`.`Nickname`, `g0`.`SquadId`, `t1`.`Id`, `t1`.`AmmunitionType`, `t1`.`IsAutomatic`, `t1`.`Name`, `t1`.`OwnerFullName`, `t1`.`SynergyWithId`, `g0`.`Rank`, `g0`.`FullName` + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `w1`.`Id`, `w1`.`AmmunitionType`, `w1`.`IsAutomatic`, `w1`.`Name`, `w1`.`OwnerFullName`, `w1`.`SynergyWithId`, `g0`.`Rank`, `g0`.`FullName` FROM `Gears` AS `g0` LEFT JOIN ( SELECT `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` FROM `Weapons` AS `w0` WHERE `w0`.`IsAutomatic` <> TRUE - ) AS `t1` ON `g0`.`FullName` = `t1`.`OwnerFullName` -) AS `t0` ON `s`.`Id` = `t0`.`SquadId` -ORDER BY `w`.`Name`, `w`.`Id`, `t`.`Nickname`, `t`.`SquadId`, `s`.`Id`, `t0`.`FullName` DESC, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`Id` + ) AS `w1` ON `g0`.`FullName` = `w1`.`OwnerFullName` +) AS `s1` ON `s0`.`Id` = `s1`.`SquadId` +ORDER BY `w`.`Name`, `w`.`Id`, `s`.`Nickname`, `s`.`SquadId`, `s0`.`Id`, `s1`.`FullName` DESC, `s1`.`Nickname`, `s1`.`SquadId`, `s1`.`Id` """); } @@ -5193,23 +5209,23 @@ public override async Task Correlated_collections_complex_scenario1(bool async) await base.Correlated_collections_complex_scenario1(async); AssertSql( -""" -SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `t1`.`Id`, `t1`.`Nickname`, `t1`.`SquadId`, `t1`.`Id0`, `t1`.`Nickname0`, `t1`.`HasSoulPatch`, `t1`.`SquadId0` + """ +SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `s2`.`Id`, `s2`.`Nickname`, `s2`.`SquadId`, `s2`.`Id0`, `s2`.`Nickname0`, `s2`.`HasSoulPatch`, `s2`.`SquadId0` FROM `Gears` AS `g` LEFT JOIN ( - SELECT `w`.`Id`, `t`.`Nickname`, `t`.`SquadId`, `s`.`Id` AS `Id0`, `t0`.`Nickname` AS `Nickname0`, `t0`.`HasSoulPatch`, `t0`.`SquadId` AS `SquadId0`, `w`.`OwnerFullName` + SELECT `w`.`Id`, `s`.`Nickname`, `s`.`SquadId`, `s0`.`Id` AS `Id0`, `s1`.`Nickname` AS `Nickname0`, `s1`.`HasSoulPatch`, `s1`.`SquadId` AS `SquadId0`, `w`.`OwnerFullName` FROM ((`Weapons` AS `w` LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`FullName` FROM `Gears` AS `g0` - ) AS `t` ON `w`.`OwnerFullName` = `t`.`FullName`) - LEFT JOIN `Squads` AS `s` ON `t`.`SquadId` = `s`.`Id`) + ) AS `s` ON `w`.`OwnerFullName` = `s`.`FullName`) + LEFT JOIN `Squads` AS `s0` ON `s`.`SquadId` = `s0`.`Id`) LEFT JOIN ( SELECT `g1`.`Nickname`, `g1`.`HasSoulPatch`, `g1`.`SquadId` FROM `Gears` AS `g1` - ) AS `t0` ON `s`.`Id` = `t0`.`SquadId` -) AS `t1` ON `g`.`FullName` = `t1`.`OwnerFullName` -ORDER BY `g`.`Nickname`, `g`.`SquadId`, `t1`.`Id`, `t1`.`Nickname`, `t1`.`SquadId`, `t1`.`Id0`, `t1`.`Nickname0` + ) AS `s1` ON `s0`.`Id` = `s1`.`SquadId` +) AS `s2` ON `g`.`FullName` = `s2`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s2`.`Id`, `s2`.`Nickname`, `s2`.`SquadId`, `s2`.`Id0`, `s2`.`Nickname0` """); } @@ -5218,29 +5234,29 @@ public override async Task Correlated_collections_complex_scenario2(bool async) await base.Correlated_collections_complex_scenario2(async); AssertSql( -""" -SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `t2`.`FullName`, `t2`.`Nickname`, `t2`.`SquadId`, `t2`.`Id`, `t2`.`Nickname0`, `t2`.`SquadId0`, `t2`.`Id0`, `t2`.`Nickname00`, `t2`.`HasSoulPatch`, `t2`.`SquadId00` + """ +SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `s3`.`FullName`, `s3`.`Nickname`, `s3`.`SquadId`, `s3`.`Id`, `s3`.`Nickname0`, `s3`.`SquadId0`, `s3`.`Id0`, `s3`.`Nickname00`, `s3`.`HasSoulPatch`, `s3`.`SquadId00` FROM (`Gears` AS `g` LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) LEFT JOIN ( - SELECT `g0`.`FullName`, `g0`.`Nickname`, `g0`.`SquadId`, `t1`.`Id`, `t1`.`Nickname` AS `Nickname0`, `t1`.`SquadId` AS `SquadId0`, `t1`.`Id0`, `t1`.`Nickname0` AS `Nickname00`, `t1`.`HasSoulPatch`, `t1`.`SquadId0` AS `SquadId00`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId` + SELECT `g0`.`FullName`, `g0`.`Nickname`, `g0`.`SquadId`, `s2`.`Id`, `s2`.`Nickname` AS `Nickname0`, `s2`.`SquadId` AS `SquadId0`, `s2`.`Id0`, `s2`.`Nickname0` AS `Nickname00`, `s2`.`HasSoulPatch`, `s2`.`SquadId0` AS `SquadId00`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId` FROM `Gears` AS `g0` LEFT JOIN ( - SELECT `w`.`Id`, `t`.`Nickname`, `t`.`SquadId`, `s`.`Id` AS `Id0`, `t0`.`Nickname` AS `Nickname0`, `t0`.`HasSoulPatch`, `t0`.`SquadId` AS `SquadId0`, `w`.`OwnerFullName` + SELECT `w`.`Id`, `s`.`Nickname`, `s`.`SquadId`, `s0`.`Id` AS `Id0`, `s1`.`Nickname` AS `Nickname0`, `s1`.`HasSoulPatch`, `s1`.`SquadId` AS `SquadId0`, `w`.`OwnerFullName` FROM ((`Weapons` AS `w` LEFT JOIN ( SELECT `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`FullName` FROM `Gears` AS `g1` - ) AS `t` ON `w`.`OwnerFullName` = `t`.`FullName`) - LEFT JOIN `Squads` AS `s` ON `t`.`SquadId` = `s`.`Id`) + ) AS `s` ON `w`.`OwnerFullName` = `s`.`FullName`) + LEFT JOIN `Squads` AS `s0` ON `s`.`SquadId` = `s0`.`Id`) LEFT JOIN ( SELECT `g2`.`Nickname`, `g2`.`HasSoulPatch`, `g2`.`SquadId` FROM `Gears` AS `g2` - ) AS `t0` ON `s`.`Id` = `t0`.`SquadId` - ) AS `t1` ON `g0`.`FullName` = `t1`.`OwnerFullName` -) AS `t2` ON `g`.`Nickname` = `t2`.`LeaderNickname` AND `g`.`SquadId` = `t2`.`LeaderSquadId` + ) AS `s1` ON `s0`.`Id` = `s1`.`SquadId` + ) AS `s2` ON `g0`.`FullName` = `s2`.`OwnerFullName` +) AS `s3` ON `g`.`Nickname` = `s3`.`LeaderNickname` AND `g`.`SquadId` = `s3`.`LeaderSquadId` WHERE `o`.`Nickname` IS NOT NULL -ORDER BY `g`.`Nickname`, `g`.`SquadId`, `t2`.`Nickname`, `t2`.`SquadId`, `t2`.`Id`, `t2`.`Nickname0`, `t2`.`SquadId0`, `t2`.`Id0`, `t2`.`Nickname00` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s3`.`Nickname`, `s3`.`SquadId`, `s3`.`Id`, `s3`.`Nickname0`, `s3`.`SquadId0`, `s3`.`Id0`, `s3`.`Nickname00` """); } @@ -5249,23 +5265,23 @@ public override async Task Correlated_collections_with_funky_orderby_complex_sce await base.Correlated_collections_with_funky_orderby_complex_scenario1(async); AssertSql( -""" -SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `t1`.`Id`, `t1`.`Nickname`, `t1`.`SquadId`, `t1`.`Id0`, `t1`.`Nickname0`, `t1`.`HasSoulPatch`, `t1`.`SquadId0` + """ +SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `s2`.`Id`, `s2`.`Nickname`, `s2`.`SquadId`, `s2`.`Id0`, `s2`.`Nickname0`, `s2`.`HasSoulPatch`, `s2`.`SquadId0` FROM `Gears` AS `g` LEFT JOIN ( - SELECT `w`.`Id`, `t`.`Nickname`, `t`.`SquadId`, `s`.`Id` AS `Id0`, `t0`.`Nickname` AS `Nickname0`, `t0`.`HasSoulPatch`, `t0`.`SquadId` AS `SquadId0`, `w`.`OwnerFullName` + SELECT `w`.`Id`, `s`.`Nickname`, `s`.`SquadId`, `s0`.`Id` AS `Id0`, `s1`.`Nickname` AS `Nickname0`, `s1`.`HasSoulPatch`, `s1`.`SquadId` AS `SquadId0`, `w`.`OwnerFullName` FROM ((`Weapons` AS `w` LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`FullName` FROM `Gears` AS `g0` - ) AS `t` ON `w`.`OwnerFullName` = `t`.`FullName`) - LEFT JOIN `Squads` AS `s` ON `t`.`SquadId` = `s`.`Id`) + ) AS `s` ON `w`.`OwnerFullName` = `s`.`FullName`) + LEFT JOIN `Squads` AS `s0` ON `s`.`SquadId` = `s0`.`Id`) LEFT JOIN ( SELECT `g1`.`Nickname`, `g1`.`HasSoulPatch`, `g1`.`SquadId` FROM `Gears` AS `g1` - ) AS `t0` ON `s`.`Id` = `t0`.`SquadId` -) AS `t1` ON `g`.`FullName` = `t1`.`OwnerFullName` -ORDER BY `g`.`FullName`, `g`.`Nickname` DESC, `g`.`SquadId`, `t1`.`Id`, `t1`.`Nickname`, `t1`.`SquadId`, `t1`.`Id0`, `t1`.`Nickname0` + ) AS `s1` ON `s0`.`Id` = `s1`.`SquadId` +) AS `s2` ON `g`.`FullName` = `s2`.`OwnerFullName` +ORDER BY `g`.`FullName`, `g`.`Nickname` DESC, `g`.`SquadId`, `s2`.`Id`, `s2`.`Nickname`, `s2`.`SquadId`, `s2`.`Id0`, `s2`.`Nickname0` """); } @@ -5274,29 +5290,29 @@ public override async Task Correlated_collections_with_funky_orderby_complex_sce await base.Correlated_collections_with_funky_orderby_complex_scenario2(async); AssertSql( -""" -SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `t2`.`FullName`, `t2`.`Nickname`, `t2`.`SquadId`, `t2`.`Id`, `t2`.`Nickname0`, `t2`.`SquadId0`, `t2`.`Id0`, `t2`.`Nickname00`, `t2`.`HasSoulPatch`, `t2`.`SquadId00` + """ +SELECT `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `s3`.`FullName`, `s3`.`Nickname`, `s3`.`SquadId`, `s3`.`Id`, `s3`.`Nickname0`, `s3`.`SquadId0`, `s3`.`Id0`, `s3`.`Nickname00`, `s3`.`HasSoulPatch`, `s3`.`SquadId00` FROM (`Gears` AS `g` LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) LEFT JOIN ( - SELECT `g0`.`FullName`, `g0`.`Nickname`, `g0`.`SquadId`, `t1`.`Id`, `t1`.`Nickname` AS `Nickname0`, `t1`.`SquadId` AS `SquadId0`, `t1`.`Id0`, `t1`.`Nickname0` AS `Nickname00`, `t1`.`HasSoulPatch`, `t1`.`SquadId0` AS `SquadId00`, `g0`.`HasSoulPatch` AS `HasSoulPatch0`, `t1`.`IsAutomatic`, `t1`.`Name`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId` + SELECT `g0`.`FullName`, `g0`.`Nickname`, `g0`.`SquadId`, `s2`.`Id`, `s2`.`Nickname` AS `Nickname0`, `s2`.`SquadId` AS `SquadId0`, `s2`.`Id0`, `s2`.`Nickname0` AS `Nickname00`, `s2`.`HasSoulPatch`, `s2`.`SquadId0` AS `SquadId00`, `g0`.`HasSoulPatch` AS `HasSoulPatch0`, `s2`.`IsAutomatic`, `s2`.`Name`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId` FROM `Gears` AS `g0` LEFT JOIN ( - SELECT `w`.`Id`, `t`.`Nickname`, `t`.`SquadId`, `s`.`Id` AS `Id0`, `t0`.`Nickname` AS `Nickname0`, `t0`.`HasSoulPatch`, `t0`.`SquadId` AS `SquadId0`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName` + SELECT `w`.`Id`, `s`.`Nickname`, `s`.`SquadId`, `s0`.`Id` AS `Id0`, `s1`.`Nickname` AS `Nickname0`, `s1`.`HasSoulPatch`, `s1`.`SquadId` AS `SquadId0`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName` FROM ((`Weapons` AS `w` LEFT JOIN ( SELECT `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`FullName` FROM `Gears` AS `g1` - ) AS `t` ON `w`.`OwnerFullName` = `t`.`FullName`) - LEFT JOIN `Squads` AS `s` ON `t`.`SquadId` = `s`.`Id`) + ) AS `s` ON `w`.`OwnerFullName` = `s`.`FullName`) + LEFT JOIN `Squads` AS `s0` ON `s`.`SquadId` = `s0`.`Id`) LEFT JOIN ( SELECT `g2`.`Nickname`, `g2`.`HasSoulPatch`, `g2`.`SquadId` FROM `Gears` AS `g2` - ) AS `t0` ON `s`.`Id` = `t0`.`SquadId` - ) AS `t1` ON `g0`.`FullName` = `t1`.`OwnerFullName` -) AS `t2` ON `g`.`Nickname` = `t2`.`LeaderNickname` AND `g`.`SquadId` = `t2`.`LeaderSquadId` + ) AS `s1` ON `s0`.`Id` = `s1`.`SquadId` + ) AS `s2` ON `g0`.`FullName` = `s2`.`OwnerFullName` +) AS `s3` ON `g`.`Nickname` = `s3`.`LeaderNickname` AND `g`.`SquadId` = `s3`.`LeaderSquadId` WHERE `o`.`Nickname` IS NOT NULL -ORDER BY NOT (`g`.`HasSoulPatch`), `g`.`LeaderNickname`, `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `t2`.`FullName`, NOT (`t2`.`HasSoulPatch0`) DESC, `t2`.`Nickname`, `t2`.`SquadId`, NOT (`t2`.`IsAutomatic`), `t2`.`Name` DESC, `t2`.`Id`, `t2`.`Nickname0`, `t2`.`SquadId0`, `t2`.`Id0`, `t2`.`Nickname00` +ORDER BY NOT (`g`.`HasSoulPatch`), `g`.`LeaderNickname`, `g`.`FullName`, `g`.`Nickname`, `g`.`SquadId`, `s3`.`FullName`, NOT (`s3`.`HasSoulPatch0`) DESC, `s3`.`Nickname`, `s3`.`SquadId`, NOT (`s3`.`IsAutomatic`), `s3`.`Name` DESC, `s3`.`Id`, `s3`.`Nickname0`, `s3`.`SquadId0`, `s3`.`Id0`, `s3`.`Nickname00` """); } @@ -5305,15 +5321,15 @@ public override async Task Correlated_collection_with_top_level_FirstOrDefault(b await base.Correlated_collection_with_top_level_FirstOrDefault(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM ( SELECT TOP 1 `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` FROM `Gears` AS `g` ORDER BY `g`.`Nickname` -) AS `t` -LEFT JOIN `Weapons` AS `w` ON `t`.`FullName` = `w`.`OwnerFullName` -ORDER BY `t`.`Nickname`, `t`.`SquadId` +) AS `s` +LEFT JOIN `Weapons` AS `w` ON `s`.`FullName` = `w`.`OwnerFullName` +ORDER BY `s`.`Nickname`, `s`.`SquadId` """); } @@ -5333,15 +5349,15 @@ public override async Task Correlated_collection_with_top_level_Last_with_orderb await base.Correlated_collection_with_top_level_Last_with_orderby_on_outer(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM ( SELECT TOP 1 `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` FROM `Gears` AS `g` ORDER BY `g`.`FullName` -) AS `t` -LEFT JOIN `Weapons` AS `w` ON `t`.`FullName` = `w`.`OwnerFullName` -ORDER BY `t`.`FullName`, `t`.`Nickname`, `t`.`SquadId` +) AS `s` +LEFT JOIN `Weapons` AS `w` ON `s`.`FullName` = `w`.`OwnerFullName` +ORDER BY `s`.`FullName`, `s`.`Nickname`, `s`.`SquadId` """); } @@ -5350,15 +5366,15 @@ public override async Task Correlated_collection_with_top_level_Last_with_order_ await base.Correlated_collection_with_top_level_Last_with_order_by_on_inner(async); AssertSql( - """ -SELECT `t`.`Nickname`, `t`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM ( SELECT TOP 1 `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` FROM `Gears` AS `g` ORDER BY `g`.`FullName` DESC -) AS `t` -LEFT JOIN `Weapons` AS `w` ON `t`.`FullName` = `w`.`OwnerFullName` -ORDER BY `t`.`FullName` DESC, `t`.`Nickname`, `t`.`SquadId`, `w`.`Name` +) AS `s` +LEFT JOIN `Weapons` AS `w` ON `s`.`FullName` = `w`.`OwnerFullName` +ORDER BY `s`.`FullName` DESC, `s`.`Nickname`, `s`.`SquadId`, `w`.`Name` """); } @@ -5367,16 +5383,16 @@ public override async Task Null_semantics_on_nullable_bool_from_inner_join_subqu await base.Null_semantics_on_nullable_bool_from_inner_join_subquery_is_fully_applied(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`CapitalName`, `t`.`Name`, `t`.`ServerAddress`, `t`.`CommanderName`, `t`.`Eradicated`, `t`.`Discriminator` + """ +SELECT `s`.`Id`, `s`.`CapitalName`, `s`.`Name`, `s`.`ServerAddress`, `s`.`CommanderName`, `s`.`Eradicated`, `s`.`Discriminator` FROM `LocustLeaders` AS `l` INNER JOIN ( - SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Name`, `f`.`ServerAddress`, `l1`.`CommanderName`, `l1`.`Eradicated`, IIF(`l1`.`Id` IS NOT NULL, 'LocustHorde', NULL) AS `Discriminator` + SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Name`, `f`.`ServerAddress`, `l0`.`CommanderName`, `l0`.`Eradicated`, IIF(`l0`.`Id` IS NOT NULL, 'LocustHorde', NULL) AS `Discriminator` FROM `Factions` AS `f` - LEFT JOIN `LocustHordes` AS `l1` ON `f`.`Id` = `l1`.`Id` - WHERE `l1`.`Id` IS NOT NULL AND `f`.`Name` = 'Swarm' -) AS `t` ON `l`.`Name` = `t`.`CommanderName` -WHERE `t`.`Eradicated` <> TRUE OR `t`.`Eradicated` IS NULL + LEFT JOIN `LocustHordes` AS `l0` ON `f`.`Id` = `l0`.`Id` + WHERE `l0`.`Id` IS NOT NULL AND `f`.`Name` = 'Swarm' +) AS `s` ON `l`.`Name` = `s`.`CommanderName` +WHERE `s`.`Eradicated` = FALSE OR `s`.`Eradicated` IS NULL """); } @@ -5385,16 +5401,16 @@ public override async Task Null_semantics_on_nullable_bool_from_left_join_subque await base.Null_semantics_on_nullable_bool_from_left_join_subquery_is_fully_applied(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`CapitalName`, `t`.`Name`, `t`.`ServerAddress`, `t`.`CommanderName`, `t`.`Eradicated`, `t`.`Discriminator` + """ +SELECT `s`.`Id`, `s`.`CapitalName`, `s`.`Name`, `s`.`ServerAddress`, `s`.`CommanderName`, `s`.`Eradicated`, `s`.`Discriminator` FROM `LocustLeaders` AS `l` LEFT JOIN ( - SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Name`, `f`.`ServerAddress`, `l1`.`CommanderName`, `l1`.`Eradicated`, IIF(`l1`.`Id` IS NOT NULL, 'LocustHorde', NULL) AS `Discriminator` + SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Name`, `f`.`ServerAddress`, `l0`.`CommanderName`, `l0`.`Eradicated`, IIF(`l0`.`Id` IS NOT NULL, 'LocustHorde', NULL) AS `Discriminator` FROM `Factions` AS `f` - LEFT JOIN `LocustHordes` AS `l1` ON `f`.`Id` = `l1`.`Id` - WHERE `l1`.`Id` IS NOT NULL AND `f`.`Name` = 'Swarm' -) AS `t` ON `l`.`Name` = `t`.`CommanderName` -WHERE `t`.`Eradicated` <> TRUE OR `t`.`Eradicated` IS NULL + LEFT JOIN `LocustHordes` AS `l0` ON `f`.`Id` = `l0`.`Id` + WHERE `l0`.`Id` IS NOT NULL AND `f`.`Name` = 'Swarm' +) AS `s` ON `l`.`Name` = `s`.`CommanderName` +WHERE `s`.`Eradicated` = FALSE OR `s`.`Eradicated` IS NULL """); } @@ -5403,22 +5419,22 @@ public override async Task Include_on_derived_type_with_order_by_and_paging(bool await base.Include_on_derived_type_with_order_by_and_paging(async); AssertSql( -""" -SELECT `t1`.`Name`, `t1`.`LocustHordeId`, `t1`.`ThreatLevel`, `t1`.`ThreatLevelByte`, `t1`.`ThreatLevelNullableByte`, `t1`.`DefeatedByNickname`, `t1`.`DefeatedBySquadId`, `t1`.`HighCommandId`, `t1`.`Discriminator`, `t1`.`Nickname`, `t1`.`SquadId`, `t1`.`AssignedCityName`, `t1`.`CityOfBirthName`, `t1`.`FullName`, `t1`.`HasSoulPatch`, `t1`.`LeaderNickname`, `t1`.`LeaderSquadId`, `t1`.`Rank`, `t1`.`Discriminator0` AS `Discriminator`, `t1`.`Id`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + """ +SELECT `s0`.`Name`, `s0`.`LocustHordeId`, `s0`.`ThreatLevel`, `s0`.`ThreatLevelByte`, `s0`.`ThreatLevelNullableByte`, `s0`.`DefeatedByNickname`, `s0`.`DefeatedBySquadId`, `s0`.`HighCommandId`, `s0`.`Discriminator`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`AssignedCityName`, `s0`.`CityOfBirthName`, `s0`.`FullName`, `s0`.`HasSoulPatch`, `s0`.`LeaderNickname`, `s0`.`LeaderSquadId`, `s0`.`Rank`, `s0`.`Discriminator0` AS `Discriminator`, `s0`.`Id`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM ( - SELECT TOP 10 `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, IIF(`l0`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator`, `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` AS `Discriminator0`, `t0`.`Id`, `t0`.`Note` + SELECT TOP 10 `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, IIF(`l0`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator` AS `Discriminator0`, `t`.`Id`, `t`.`Note` FROM ((`LocustLeaders` AS `l` LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`Name` = `l0`.`Name`) LEFT JOIN ( 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` - ) AS `t` ON `l0`.`DefeatedByNickname` = `t`.`Nickname` AND `l0`.`DefeatedBySquadId` = `t`.`SquadId`) - LEFT JOIN `Tags` AS `t0` ON (`t`.`Nickname` = `t0`.`GearNickName` OR (`t`.`Nickname` IS NULL AND `t0`.`GearNickName` IS NULL)) AND (`t`.`SquadId` = `t0`.`GearSquadId` OR (`t`.`SquadId` IS NULL AND `t0`.`GearSquadId` IS NULL)) - ORDER BY `t0`.`Note` -) AS `t1` -LEFT JOIN `Weapons` AS `w` ON `t1`.`FullName` = `w`.`OwnerFullName` -ORDER BY `t1`.`Note`, `t1`.`Name`, `t1`.`Nickname`, `t1`.`SquadId`, `t1`.`Id` + ) AS `s` ON `l0`.`DefeatedByNickname` = `s`.`Nickname` AND `l0`.`DefeatedBySquadId` = `s`.`SquadId`) + LEFT JOIN `Tags` AS `t` ON (`s`.`Nickname` = `t`.`GearNickName` OR (`s`.`Nickname` IS NULL AND `t`.`GearNickName` IS NULL)) AND (`s`.`SquadId` = `t`.`GearSquadId` OR (`s`.`SquadId` IS NULL AND `t`.`GearSquadId` IS NULL)) + ORDER BY `t`.`Note` +) AS `s0` +LEFT JOIN `Weapons` AS `w` ON `s0`.`FullName` = `w`.`OwnerFullName` +ORDER BY `s0`.`Note`, `s0`.`Name`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`Id` """); } @@ -5532,13 +5548,13 @@ public override async Task Negated_bool_ternary_inside_anonymous_type_in_project await base.Negated_bool_ternary_inside_anonymous_type_in_projection(async); AssertSql( -""" -SELECT IIF(IIF(`t0`.`HasSoulPatch` = TRUE, TRUE, IIF(`t0`.`HasSoulPatch` IS NULL, TRUE, `t0`.`HasSoulPatch`)) <> TRUE, TRUE, FALSE) AS `c` + """ +SELECT IIF(IIF(`s`.`HasSoulPatch` = TRUE, TRUE, IIF(`s`.`HasSoulPatch` IS NULL, TRUE, `s`.`HasSoulPatch`)) <> TRUE, TRUE, FALSE) AS `c` FROM `Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` FROM `Gears` AS `g` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` """); } @@ -5575,14 +5591,14 @@ public override async Task Order_by_entity_qsre_composite_key(bool async) await base.Order_by_entity_qsre_composite_key(async); AssertSql( -""" + """ SELECT `w`.`Name` FROM `Weapons` AS `w` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` FROM `Gears` AS `g` -) AS `t` ON `w`.`OwnerFullName` = `t`.`FullName` -ORDER BY `t`.`Nickname`, `t`.`SquadId`, `w`.`Id` +) AS `s` ON `w`.`OwnerFullName` = `s`.`FullName` +ORDER BY `s`.`Nickname`, `s`.`SquadId`, `w`.`Id` """); } @@ -5591,15 +5607,15 @@ public override async Task Order_by_entity_qsre_with_other_orderbys(bool async) await base.Order_by_entity_qsre_with_other_orderbys(async); AssertSql( -""" + """ SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM (`Weapons` AS `w` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` FROM `Gears` AS `g` -) AS `t` ON `w`.`OwnerFullName` = `t`.`FullName`) +) AS `s` ON `w`.`OwnerFullName` = `s`.`FullName`) LEFT JOIN `Weapons` AS `w0` ON `w`.`SynergyWithId` = `w0`.`Id` -ORDER BY NOT (`w`.`IsAutomatic`), `t`.`Nickname` DESC, `t`.`SquadId` DESC, `w0`.`Id`, `w`.`Name` +ORDER BY NOT (`w`.`IsAutomatic`), `s`.`Nickname` DESC, `s`.`SquadId` DESC, `w0`.`Id`, `w`.`Name` """); } @@ -5620,13 +5636,13 @@ public override async Task Join_on_entity_qsre_keys_composite_key(bool async) await base.Join_on_entity_qsre_keys_composite_key(async); AssertSql( -""" -SELECT `g`.`FullName` AS `GearName1`, `t`.`FullName` AS `GearName2` + """ +SELECT `g`.`FullName` AS `GearName1`, `s`.`FullName` AS `GearName2` FROM `Gears` AS `g` INNER JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`FullName` FROM `Gears` AS `g0` -) AS `t` ON `g`.`Nickname` = `t`.`Nickname` AND `g`.`SquadId` = `t`.`SquadId` +) AS `s` ON `g`.`Nickname` = `s`.`Nickname` AND `g`.`SquadId` = `s`.`SquadId` """); } @@ -5635,15 +5651,15 @@ public override async Task Join_on_entity_qsre_keys_inheritance(bool async) await base.Join_on_entity_qsre_keys_inheritance(async); AssertSql( -""" -SELECT `g`.`FullName` AS `GearName`, `t`.`FullName` AS `OfficerName` + """ +SELECT `g`.`FullName` AS `GearName`, `s`.`FullName` AS `OfficerName` FROM `Gears` AS `g` INNER JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`FullName` FROM `Gears` AS `g0` - LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` - WHERE `o0`.`Nickname` IS NOT NULL -) AS `t` ON `g`.`Nickname` = `t`.`Nickname` AND `g`.`SquadId` = `t`.`SquadId` + LEFT JOIN `Officers` AS `o` ON `g0`.`Nickname` = `o`.`Nickname` AND `g0`.`SquadId` = `o`.`SquadId` + WHERE `o`.`Nickname` IS NOT NULL +) AS `s` ON `g`.`Nickname` = `s`.`Nickname` AND `g`.`SquadId` = `s`.`SquadId` """); } @@ -5666,14 +5682,14 @@ public override async Task Join_on_entity_qsre_keys_inner_key_is_navigation(bool await base.Join_on_entity_qsre_keys_inner_key_is_navigation(async); AssertSql( -""" -SELECT `c`.`Name` AS `CityName`, `t`.`Nickname` AS `GearNickname` + """ +SELECT `c`.`Name` AS `CityName`, `s`.`Nickname` AS `GearNickname` FROM `Cities` AS `c` INNER JOIN ( SELECT `g`.`Nickname`, `c0`.`Name` FROM `Gears` AS `g` LEFT JOIN `Cities` AS `c0` ON `g`.`AssignedCityName` = `c0`.`Name` -) AS `t` ON `c`.`Name` = `t`.`Name` +) AS `s` ON `c`.`Name` = `s`.`Name` """); } @@ -5682,18 +5698,18 @@ public override async Task Join_on_entity_qsre_keys_inner_key_is_navigation_comp await base.Join_on_entity_qsre_keys_inner_key_is_navigation_composite_key(async); AssertSql( - """ -SELECT `g`.`Nickname`, `t1`.`Note` + """ +SELECT `g`.`Nickname`, `s0`.`Note` FROM `Gears` AS `g` INNER JOIN ( - SELECT `t`.`Note`, `t0`.`Nickname`, `t0`.`SquadId` + SELECT `t`.`Note`, `s`.`Nickname`, `s`.`SquadId` FROM `Tags` AS `t` LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId` FROM `Gears` AS `g0` - ) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` + ) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` WHERE `t`.`Note` IN ('Cole''s Tag', 'Dom''s Tag') -) AS `t1` ON `g`.`Nickname` = `t1`.`Nickname` AND `g`.`SquadId` = `t1`.`SquadId` +) AS `s0` ON `g`.`Nickname` = `s0`.`Nickname` AND `g`.`SquadId` = `s0`.`SquadId` """); } @@ -5702,19 +5718,19 @@ public override async Task Join_on_entity_qsre_keys_inner_key_is_nested_navigati await base.Join_on_entity_qsre_keys_inner_key_is_nested_navigation(async); AssertSql( -""" -SELECT `s`.`Name` AS `SquadName`, `t0`.`Name` AS `WeaponName` + """ +SELECT `s`.`Name` AS `SquadName`, `s2`.`Name` AS `WeaponName` FROM `Squads` AS `s` INNER JOIN ( - SELECT `w`.`Name`, `s0`.`Id` AS `Id0` + SELECT `w`.`Name`, `s1`.`Id` AS `Id0` FROM (`Weapons` AS `w` LEFT JOIN ( SELECT `g`.`SquadId`, `g`.`FullName` FROM `Gears` AS `g` - ) AS `t` ON `w`.`OwnerFullName` = `t`.`FullName`) - LEFT JOIN `Squads` AS `s0` ON `t`.`SquadId` = `s0`.`Id` + ) AS `s0` ON `w`.`OwnerFullName` = `s0`.`FullName`) + LEFT JOIN `Squads` AS `s1` ON `s0`.`SquadId` = `s1`.`Id` WHERE `w`.`IsAutomatic` = TRUE -) AS `t0` ON `s`.`Id` = `t0`.`Id0` +) AS `s2` ON `s`.`Id` = `s2`.`Id0` """); } @@ -5723,18 +5739,18 @@ public override async Task GroupJoin_on_entity_qsre_keys_inner_key_is_nested_nav await base.GroupJoin_on_entity_qsre_keys_inner_key_is_nested_navigation(async); AssertSql( - """ -SELECT `s`.`Name` AS `SquadName`, `t0`.`Name` AS `WeaponName` + """ +SELECT `s`.`Name` AS `SquadName`, `s2`.`Name` AS `WeaponName` FROM `Squads` AS `s` LEFT JOIN ( - SELECT `w`.`Name`, `s0`.`Id` AS `Id0` + SELECT `w`.`Name`, `s1`.`Id` AS `Id0` FROM (`Weapons` AS `w` LEFT JOIN ( SELECT `g`.`SquadId`, `g`.`FullName` FROM `Gears` AS `g` - ) AS `t` ON `w`.`OwnerFullName` = `t`.`FullName`) - LEFT JOIN `Squads` AS `s0` ON `t`.`SquadId` = `s0`.`Id` -) AS `t0` ON `s`.`Id` = `t0`.`Id0` + ) AS `s0` ON `w`.`OwnerFullName` = `s0`.`FullName`) + LEFT JOIN `Squads` AS `s1` ON `s0`.`SquadId` = `s1`.`Id` +) AS `s2` ON `s`.`Id` = `s2`.`Id0` """); } @@ -5743,19 +5759,19 @@ public override async Task Streaming_correlated_collection_issue_11403(bool asyn await base.Streaming_correlated_collection_issue_11403(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t0`.`Id`, `t0`.`AmmunitionType`, `t0`.`IsAutomatic`, `t0`.`Name`, `t0`.`OwnerFullName`, `t0`.`SynergyWithId` + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` FROM ( SELECT TOP 1 `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` FROM `Gears` AS `g` ORDER BY `g`.`Nickname` -) AS `t` +) AS `s` LEFT JOIN ( SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM `Weapons` AS `w` WHERE `w`.`IsAutomatic` <> TRUE -) AS `t0` ON `t`.`FullName` = `t0`.`OwnerFullName` -ORDER BY `t`.`Nickname`, `t`.`SquadId`, `t0`.`Id` +) AS `w0` ON `s`.`FullName` = `w0`.`OwnerFullName` +ORDER BY `s`.`Nickname`, `s`.`SquadId`, `w0`.`Id` """); } @@ -5768,11 +5784,9 @@ public override async Task Project_one_value_type_from_empty_collection(bool asy SELECT `s`.`Name`, IIF(( SELECT TOP 1 `g`.`SquadId` FROM `Gears` AS `g` - LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` WHERE `s`.`Id` = `g`.`SquadId` AND `g`.`HasSoulPatch` = TRUE) IS NULL, 0, ( SELECT TOP 1 `g`.`SquadId` FROM `Gears` AS `g` - LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` WHERE `s`.`Id` = `g`.`SquadId` AND `g`.`HasSoulPatch` = TRUE)) AS `SquadId` FROM `Squads` AS `s` WHERE `s`.`Name` = 'Kilo' @@ -5784,11 +5798,10 @@ public override async Task Project_one_value_type_converted_to_nullable_from_emp await base.Project_one_value_type_converted_to_nullable_from_empty_collection(async); AssertSql( -""" + """ SELECT `s`.`Name`, ( SELECT TOP 1 `g`.`SquadId` FROM `Gears` AS `g` - LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` WHERE `s`.`Id` = `g`.`SquadId` AND `g`.`HasSoulPatch` = TRUE) AS `SquadId` FROM `Squads` AS `s` WHERE `s`.`Name` = 'Kilo' @@ -5821,17 +5834,15 @@ public override async Task Filter_on_subquery_projecting_one_value_type_from_emp await base.Filter_on_subquery_projecting_one_value_type_from_empty_collection(async); AssertSql( -""" + """ SELECT `s`.`Name` FROM `Squads` AS `s` WHERE `s`.`Name` = 'Kilo' AND IIF(( SELECT TOP 1 `g`.`SquadId` FROM `Gears` AS `g` - LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` WHERE `s`.`Id` = `g`.`SquadId` AND `g`.`HasSoulPatch` = TRUE) IS NULL, 0, ( SELECT TOP 1 `g`.`SquadId` FROM `Gears` AS `g` - LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` WHERE `s`.`Id` = `g`.`SquadId` AND `g`.`HasSoulPatch` = TRUE)) <> 0 """); } @@ -5845,11 +5856,9 @@ public override async Task Select_subquery_projecting_single_constant_int(bool a SELECT `s`.`Name`, IIF(( SELECT TOP 1 42 FROM `Gears` AS `g` - LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` WHERE `s`.`Id` = `g`.`SquadId` AND `g`.`HasSoulPatch` = TRUE) IS NULL, 0, ( SELECT TOP 1 42 FROM `Gears` AS `g` - LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` WHERE `s`.`Id` = `g`.`SquadId` AND `g`.`HasSoulPatch` = TRUE)) AS `Gear` FROM `Squads` AS `s` """); @@ -5860,11 +5869,10 @@ public override async Task Select_subquery_projecting_single_constant_string(boo await base.Select_subquery_projecting_single_constant_string(async); AssertSql( -""" + """ SELECT `s`.`Name`, ( SELECT TOP 1 'Foo' FROM `Gears` AS `g` - LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` WHERE `s`.`Id` = `g`.`SquadId` AND `g`.`HasSoulPatch` = TRUE) AS `Gear` FROM `Squads` AS `s` """); @@ -5879,11 +5887,9 @@ public override async Task Select_subquery_projecting_single_constant_bool(bool SELECT `s`.`Name`, IIF(( SELECT TOP 1 TRUE FROM `Gears` AS `g` - LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` WHERE `s`.`Id` = `g`.`SquadId` AND `g`.`HasSoulPatch` = TRUE) IS NULL, FALSE, ( SELECT TOP 1 TRUE FROM `Gears` AS `g` - LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` WHERE `s`.`Id` = `g`.`SquadId` AND `g`.`HasSoulPatch` = TRUE)) AS `Gear` FROM `Squads` AS `s` """); @@ -5931,15 +5937,15 @@ public override async Task Include_with_order_by_constant(bool async) await base.Include_with_order_by_constant(async); AssertSql( -""" -SELECT `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name`, `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + """ +SELECT `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`AssignedCityName`, `s0`.`CityOfBirthName`, `s0`.`FullName`, `s0`.`HasSoulPatch`, `s0`.`LeaderNickname`, `s0`.`LeaderSquadId`, `s0`.`Rank`, `s0`.`Discriminator` FROM `Squads` AS `s` LEFT JOIN ( 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` -) AS `t` ON `s`.`Id` = `t`.`SquadId` -ORDER BY `s`.`Id`, `t`.`Nickname` +) AS `s0` ON `s`.`Id` = `s0`.`SquadId` +ORDER BY `s`.`Id`, `s0`.`Nickname` """); } @@ -6002,22 +6008,22 @@ public override async Task Include_collection_OrderBy_aggregate(bool async) AssertSql( """ -SELECT `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator`, `t0`.`Nickname0`, `t0`.`SquadId0`, `t0`.`AssignedCityName0`, `t0`.`CityOfBirthName0`, `t0`.`FullName0`, `t0`.`HasSoulPatch0`, `t0`.`LeaderNickname0`, `t0`.`LeaderSquadId0`, `t0`.`Rank0`, `t0`.`Discriminator0`, `t0`.`c` +SELECT `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`AssignedCityName`, `s0`.`CityOfBirthName`, `s0`.`FullName`, `s0`.`HasSoulPatch`, `s0`.`LeaderNickname`, `s0`.`LeaderSquadId`, `s0`.`Rank`, `s0`.`Discriminator`, `s0`.`Nickname0`, `s0`.`SquadId0`, `s0`.`AssignedCityName0`, `s0`.`CityOfBirthName0`, `s0`.`FullName0`, `s0`.`HasSoulPatch0`, `s0`.`LeaderNickname0`, `s0`.`LeaderSquadId0`, `s0`.`Rank0`, `s0`.`Discriminator0`, `s0`.`c` FROM ( - 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`, `t`.`Nickname` AS `Nickname0`, `t`.`SquadId` AS `SquadId0`, `t`.`AssignedCityName` AS `AssignedCityName0`, `t`.`CityOfBirthName` AS `CityOfBirthName0`, `t`.`FullName` AS `FullName0`, `t`.`HasSoulPatch` AS `HasSoulPatch0`, `t`.`LeaderNickname` AS `LeaderNickname0`, `t`.`LeaderSquadId` AS `LeaderSquadId0`, `t`.`Rank` AS `Rank0`, `t`.`Discriminator` AS `Discriminator0`, ( + 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`, `s`.`Nickname` AS `Nickname0`, `s`.`SquadId` AS `SquadId0`, `s`.`AssignedCityName` AS `AssignedCityName0`, `s`.`CityOfBirthName` AS `CityOfBirthName0`, `s`.`FullName` AS `FullName0`, `s`.`HasSoulPatch` AS `HasSoulPatch0`, `s`.`LeaderNickname` AS `LeaderNickname0`, `s`.`LeaderSquadId` AS `LeaderSquadId0`, `s`.`Rank` AS `Rank0`, `s`.`Discriminator` AS `Discriminator0`, ( SELECT COUNT(*) - FROM `Weapons` AS `w0` - WHERE `g`.`FullName` = `w0`.`OwnerFullName`) AS `c` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName`) AS `c` FROM (`Gears` AS `g` LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` FROM `Gears` AS `g0` LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` - ) AS `t` ON `g`.`Nickname` = `t`.`LeaderNickname` AND `g`.`SquadId` = `t`.`LeaderSquadId` + ) AS `s` ON `g`.`Nickname` = `s`.`LeaderNickname` AND `g`.`SquadId` = `s`.`LeaderSquadId` WHERE `o`.`Nickname` IS NOT NULL -) AS `t0` -ORDER BY `t0`.`c`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`Nickname0` +) AS `s0` +ORDER BY `s0`.`c`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`Nickname0` """); } @@ -6027,23 +6033,23 @@ public override async Task Include_collection_with_complex_OrderBy2(bool async) AssertSql( """ -SELECT `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator`, `t0`.`Nickname0`, `t0`.`SquadId0`, `t0`.`AssignedCityName0`, `t0`.`CityOfBirthName0`, `t0`.`FullName0`, `t0`.`HasSoulPatch0`, `t0`.`LeaderNickname0`, `t0`.`LeaderSquadId0`, `t0`.`Rank0`, `t0`.`Discriminator0`, `t0`.`c` +SELECT `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`AssignedCityName`, `s0`.`CityOfBirthName`, `s0`.`FullName`, `s0`.`HasSoulPatch`, `s0`.`LeaderNickname`, `s0`.`LeaderSquadId`, `s0`.`Rank`, `s0`.`Discriminator`, `s0`.`Nickname0`, `s0`.`SquadId0`, `s0`.`AssignedCityName0`, `s0`.`CityOfBirthName0`, `s0`.`FullName0`, `s0`.`HasSoulPatch0`, `s0`.`LeaderNickname0`, `s0`.`LeaderSquadId0`, `s0`.`Rank0`, `s0`.`Discriminator0`, `s0`.`c` FROM ( - 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`, `t`.`Nickname` AS `Nickname0`, `t`.`SquadId` AS `SquadId0`, `t`.`AssignedCityName` AS `AssignedCityName0`, `t`.`CityOfBirthName` AS `CityOfBirthName0`, `t`.`FullName` AS `FullName0`, `t`.`HasSoulPatch` AS `HasSoulPatch0`, `t`.`LeaderNickname` AS `LeaderNickname0`, `t`.`LeaderSquadId` AS `LeaderSquadId0`, `t`.`Rank` AS `Rank0`, `t`.`Discriminator` AS `Discriminator0`, ( - SELECT TOP 1 `w0`.`IsAutomatic` - FROM `Weapons` AS `w0` - WHERE `g`.`FullName` = `w0`.`OwnerFullName` - ORDER BY `w0`.`Id`) AS `c` + 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`, `s`.`Nickname` AS `Nickname0`, `s`.`SquadId` AS `SquadId0`, `s`.`AssignedCityName` AS `AssignedCityName0`, `s`.`CityOfBirthName` AS `CityOfBirthName0`, `s`.`FullName` AS `FullName0`, `s`.`HasSoulPatch` AS `HasSoulPatch0`, `s`.`LeaderNickname` AS `LeaderNickname0`, `s`.`LeaderSquadId` AS `LeaderSquadId0`, `s`.`Rank` AS `Rank0`, `s`.`Discriminator` AS `Discriminator0`, ( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`) AS `c` FROM (`Gears` AS `g` LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` FROM `Gears` AS `g0` LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` - ) AS `t` ON `g`.`Nickname` = `t`.`LeaderNickname` AND `g`.`SquadId` = `t`.`LeaderSquadId` + ) AS `s` ON `g`.`Nickname` = `s`.`LeaderNickname` AND `g`.`SquadId` = `s`.`LeaderSquadId` WHERE `o`.`Nickname` IS NOT NULL -) AS `t0` -ORDER BY NOT (`t0`.`c`), `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`Nickname0` +) AS `s0` +ORDER BY NOT (`s0`.`c`), `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`Nickname0` """); } @@ -6053,27 +6059,27 @@ public override async Task Include_collection_with_complex_OrderBy3(bool async) AssertSql( """ -SELECT `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator`, `t0`.`Nickname0`, `t0`.`SquadId0`, `t0`.`AssignedCityName0`, `t0`.`CityOfBirthName0`, `t0`.`FullName0`, `t0`.`HasSoulPatch0`, `t0`.`LeaderNickname0`, `t0`.`LeaderSquadId0`, `t0`.`Rank0`, `t0`.`Discriminator0`, `t0`.`c` +SELECT `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`AssignedCityName`, `s0`.`CityOfBirthName`, `s0`.`FullName`, `s0`.`HasSoulPatch`, `s0`.`LeaderNickname`, `s0`.`LeaderSquadId`, `s0`.`Rank`, `s0`.`Discriminator`, `s0`.`Nickname0`, `s0`.`SquadId0`, `s0`.`AssignedCityName0`, `s0`.`CityOfBirthName0`, `s0`.`FullName0`, `s0`.`HasSoulPatch0`, `s0`.`LeaderNickname0`, `s0`.`LeaderSquadId0`, `s0`.`Rank0`, `s0`.`Discriminator0`, `s0`.`c` FROM ( - 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`, `t`.`Nickname` AS `Nickname0`, `t`.`SquadId` AS `SquadId0`, `t`.`AssignedCityName` AS `AssignedCityName0`, `t`.`CityOfBirthName` AS `CityOfBirthName0`, `t`.`FullName` AS `FullName0`, `t`.`HasSoulPatch` AS `HasSoulPatch0`, `t`.`LeaderNickname` AS `LeaderNickname0`, `t`.`LeaderSquadId` AS `LeaderSquadId0`, `t`.`Rank` AS `Rank0`, `t`.`Discriminator` AS `Discriminator0`, IIF(( - SELECT TOP 1 `w0`.`IsAutomatic` - FROM `Weapons` AS `w0` - WHERE `g`.`FullName` = `w0`.`OwnerFullName` - ORDER BY `w0`.`Id`) IS NULL, FALSE, ( - SELECT TOP 1 `w0`.`IsAutomatic` - FROM `Weapons` AS `w0` - WHERE `g`.`FullName` = `w0`.`OwnerFullName` - ORDER BY `w0`.`Id`)) AS `c` + 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`, `s`.`Nickname` AS `Nickname0`, `s`.`SquadId` AS `SquadId0`, `s`.`AssignedCityName` AS `AssignedCityName0`, `s`.`CityOfBirthName` AS `CityOfBirthName0`, `s`.`FullName` AS `FullName0`, `s`.`HasSoulPatch` AS `HasSoulPatch0`, `s`.`LeaderNickname` AS `LeaderNickname0`, `s`.`LeaderSquadId` AS `LeaderSquadId0`, `s`.`Rank` AS `Rank0`, `s`.`Discriminator` AS `Discriminator0`, IIF(( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`) IS NULL, FALSE, ( + SELECT TOP 1 `w`.`IsAutomatic` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` + ORDER BY `w`.`Id`)) AS `c` FROM (`Gears` AS `g` LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` FROM `Gears` AS `g0` LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` - ) AS `t` ON `g`.`Nickname` = `t`.`LeaderNickname` AND `g`.`SquadId` = `t`.`LeaderSquadId` + ) AS `s` ON `g`.`Nickname` = `s`.`LeaderNickname` AND `g`.`SquadId` = `s`.`LeaderSquadId` WHERE `o`.`Nickname` IS NOT NULL -) AS `t0` -ORDER BY NOT (`t0`.`c`), `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`Nickname0` +) AS `s0` +ORDER BY NOT (`s0`.`c`), `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`Nickname0` """); } @@ -6083,12 +6089,12 @@ public override async Task Correlated_collection_with_complex_OrderBy(bool async AssertSql( """ -SELECT `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`Nickname0`, `t0`.`SquadId0`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator`, `t0`.`c` +SELECT `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`Nickname0`, `s0`.`SquadId0`, `s0`.`AssignedCityName`, `s0`.`CityOfBirthName`, `s0`.`FullName`, `s0`.`HasSoulPatch`, `s0`.`LeaderNickname`, `s0`.`LeaderSquadId`, `s0`.`Rank`, `s0`.`Discriminator`, `s0`.`c` FROM ( - SELECT `g`.`Nickname`, `g`.`SquadId`, `t`.`Nickname` AS `Nickname0`, `t`.`SquadId` AS `SquadId0`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `s`.`Nickname` AS `Nickname0`, `s`.`SquadId` AS `SquadId0`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, ( SELECT COUNT(*) - FROM `Weapons` AS `w0` - WHERE `g`.`FullName` = `w0`.`OwnerFullName`) AS `c` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName`) AS `c` FROM (`Gears` AS `g` LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) LEFT JOIN ( @@ -6096,10 +6102,10 @@ LEFT JOIN ( FROM `Gears` AS `g0` LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` WHERE `g0`.`HasSoulPatch` <> TRUE - ) AS `t` ON `g`.`Nickname` = `t`.`LeaderNickname` AND `g`.`SquadId` = `t`.`LeaderSquadId` + ) AS `s` ON `g`.`Nickname` = `s`.`LeaderNickname` AND `g`.`SquadId` = `s`.`LeaderSquadId` WHERE `o`.`Nickname` IS NOT NULL -) AS `t0` -ORDER BY `t0`.`c`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`Nickname0` +) AS `s0` +ORDER BY `s0`.`c`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`Nickname0` """); } @@ -6108,32 +6114,30 @@ public override async Task Correlated_collection_with_very_complex_order_by(bool await base.Correlated_collection_with_very_complex_order_by(async); AssertSql( -""" -SELECT `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`Nickname0`, `t0`.`SquadId0`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator`, `t0`.`c` + """ +SELECT `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`Nickname0`, `s0`.`SquadId0`, `s0`.`AssignedCityName`, `s0`.`CityOfBirthName`, `s0`.`FullName`, `s0`.`HasSoulPatch`, `s0`.`LeaderNickname`, `s0`.`LeaderSquadId`, `s0`.`Rank`, `s0`.`Discriminator`, `s0`.`c` FROM ( - SELECT `g`.`Nickname`, `g`.`SquadId`, `t`.`Nickname` AS `Nickname0`, `t`.`SquadId` AS `SquadId0`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, ( + SELECT `g`.`Nickname`, `g`.`SquadId`, `s`.`Nickname` AS `Nickname0`, `s`.`SquadId` AS `SquadId0`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, ( SELECT COUNT(*) - FROM `Weapons` AS `w0` - WHERE `g`.`FullName` = `w0`.`OwnerFullName` AND `w0`.`IsAutomatic` = IIF(( - SELECT TOP 1 `g2`.`HasSoulPatch` - FROM `Gears` AS `g2` - LEFT JOIN `Officers` AS `o2` ON `g2`.`Nickname` = `o2`.`Nickname` AND `g2`.`SquadId` = `o2`.`SquadId` - WHERE `g2`.`Nickname` = 'Marcus') IS NULL, FALSE, ( - SELECT TOP 1 `g2`.`HasSoulPatch` - FROM `Gears` AS `g2` - LEFT JOIN `Officers` AS `o2` ON `g2`.`Nickname` = `o2`.`Nickname` AND `g2`.`SquadId` = `o2`.`SquadId` - WHERE `g2`.`Nickname` = 'Marcus'))) AS `c` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` AND `w`.`IsAutomatic` = IIF(( + SELECT TOP 1 `g0`.`HasSoulPatch` + FROM `Gears` AS `g0` + WHERE `g0`.`Nickname` = 'Marcus') IS NULL, FALSE, ( + SELECT TOP 1 `g0`.`HasSoulPatch` + FROM `Gears` AS `g0` + WHERE `g0`.`Nickname` = 'Marcus'))) AS `c` FROM (`Gears` AS `g` LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) LEFT JOIN ( - SELECT `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`AssignedCityName`, `g1`.`CityOfBirthName`, `g1`.`FullName`, `g1`.`HasSoulPatch`, `g1`.`LeaderNickname`, `g1`.`LeaderSquadId`, `g1`.`Rank`, IIF(`o1`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + SELECT `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`AssignedCityName`, `g1`.`CityOfBirthName`, `g1`.`FullName`, `g1`.`HasSoulPatch`, `g1`.`LeaderNickname`, `g1`.`LeaderSquadId`, `g1`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` FROM `Gears` AS `g1` - LEFT JOIN `Officers` AS `o1` ON `g1`.`Nickname` = `o1`.`Nickname` AND `g1`.`SquadId` = `o1`.`SquadId` + LEFT JOIN `Officers` AS `o0` ON `g1`.`Nickname` = `o0`.`Nickname` AND `g1`.`SquadId` = `o0`.`SquadId` WHERE `g1`.`HasSoulPatch` <> TRUE - ) AS `t` ON `g`.`Nickname` = `t`.`LeaderNickname` AND `g`.`SquadId` = `t`.`LeaderSquadId` + ) AS `s` ON `g`.`Nickname` = `s`.`LeaderNickname` AND `g`.`SquadId` = `s`.`LeaderSquadId` WHERE `o`.`Nickname` IS NOT NULL -) AS `t0` -ORDER BY `t0`.`c`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`Nickname0` +) AS `s0` +ORDER BY `s0`.`c`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`Nickname0` """); } @@ -6208,12 +6212,12 @@ public override async Task Select_subquery_int_with_outside_cast_and_coalesce(bo await base.Select_subquery_int_with_outside_cast_and_coalesce(async); AssertSql( -""" + """ SELECT IIF(( SELECT TOP 1 `w`.`Id` FROM `Weapons` AS `w` WHERE `g`.`FullName` = `w`.`OwnerFullName` - ORDER BY `w`.`Id`) IS NULL, IIF(0 IS NULL, 42, 0), ( + ORDER BY `w`.`Id`) IS NULL, 0, ( SELECT TOP 1 `w`.`Id` FROM `Weapons` AS `w` WHERE `g`.`FullName` = `w`.`OwnerFullName` @@ -6411,15 +6415,15 @@ public override async Task Cast_subquery_to_base_type_using_typed_ToList(bool as await base.Cast_subquery_to_base_type_using_typed_ToList(async); AssertSql( -""" -SELECT `c`.`Name`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Nickname`, `t`.`Rank`, `t`.`SquadId` + """ +SELECT `c`.`Name`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Nickname`, `s`.`Rank`, `s`.`SquadId` FROM `Cities` AS `c` LEFT JOIN ( SELECT `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Nickname`, `g`.`Rank`, `g`.`SquadId`, `g`.`AssignedCityName` FROM `Gears` AS `g` -) AS `t` ON `c`.`Name` = `t`.`AssignedCityName` +) AS `s` ON `c`.`Name` = `s`.`AssignedCityName` WHERE `c`.`Name` = 'Ephyra' -ORDER BY `c`.`Name`, `t`.`Nickname` +ORDER BY `c`.`Name`, `s`.`Nickname` """); } @@ -6428,15 +6432,15 @@ public override async Task Cast_ordered_subquery_to_base_type_using_typed_ToArra await base.Cast_ordered_subquery_to_base_type_using_typed_ToArray(async); AssertSql( -""" -SELECT `c`.`Name`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Nickname`, `t`.`Rank`, `t`.`SquadId` + """ +SELECT `c`.`Name`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Nickname`, `s`.`Rank`, `s`.`SquadId` FROM `Cities` AS `c` LEFT JOIN ( SELECT `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Nickname`, `g`.`Rank`, `g`.`SquadId`, `g`.`AssignedCityName` FROM `Gears` AS `g` -) AS `t` ON `c`.`Name` = `t`.`AssignedCityName` +) AS `s` ON `c`.`Name` = `s`.`AssignedCityName` WHERE `c`.`Name` = 'Ephyra' -ORDER BY `c`.`Name`, `t`.`Nickname` DESC +ORDER BY `c`.`Name`, `s`.`Nickname` DESC """); } @@ -6510,12 +6514,12 @@ public override async Task Double_order_by_binary_expression(bool async) AssertSql( """ -SELECT `t`.`Binary` +SELECT `w0`.`Binary` FROM ( SELECT `w`.`Id` + 2 AS `Binary` FROM `Weapons` AS `w` -) AS `t` -ORDER BY `t`.`Binary` +) AS `w0` +ORDER BY `w0`.`Binary` """); } @@ -6589,9 +6593,9 @@ public override async Task Time_of_day_datetimeoffset(bool async) await base.Time_of_day_datetimeoffset(async); AssertSql( -""" -SELECT CONVERT(time, [m].[Timeline]) -FROM [Missions] AS [m] + """ +SELECT TIMEVALUE(`m`.`Timeline`) +FROM `Missions` AS `m` """); } @@ -6783,17 +6787,17 @@ public override async Task Multiple_includes_with_client_method_around_entity_an await base.Multiple_includes_with_client_method_around_entity_and_also_projecting_included_collection(); AssertSql( -""" -SELECT `s`.`Name`, `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `t`.`Id`, `t`.`AmmunitionType`, `t`.`IsAutomatic`, `t`.`Name`, `t`.`OwnerFullName`, `t`.`SynergyWithId` + """ +SELECT `s`.`Name`, `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`AssignedCityName`, `s0`.`CityOfBirthName`, `s0`.`FullName`, `s0`.`HasSoulPatch`, `s0`.`LeaderNickname`, `s0`.`LeaderSquadId`, `s0`.`Rank`, `s0`.`Discriminator`, `s0`.`Id`, `s0`.`AmmunitionType`, `s0`.`IsAutomatic`, `s0`.`Name`, `s0`.`OwnerFullName`, `s0`.`SynergyWithId` FROM `Squads` AS `s` LEFT JOIN ( 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`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM (`Gears` AS `g` LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName` -) AS `t` ON `s`.`Id` = `t`.`SquadId` +) AS `s0` ON `s`.`Id` = `s0`.`SquadId` WHERE `s`.`Name` = 'Delta' -ORDER BY `s`.`Id`, `t`.`Nickname`, `t`.`SquadId` +ORDER BY `s`.`Id`, `s0`.`Nickname`, `s0`.`SquadId` """); } @@ -6840,7 +6844,7 @@ public override async Task GetValueOrDefault_in_filter_non_nullable_column(bool """ SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM `Weapons` AS `w` -WHERE IIF(`w`.`Id` IS NULL, 0, `w`.`Id`) = 0 +WHERE `w`.`Id` = 0 """); } @@ -6919,14 +6923,14 @@ public override async Task await base.Null_semantics_is_correctly_applied_for_function_comparisons_that_take_arguments_from_optional_navigation(async); AssertSql( -""" + """ SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` FROM `Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId` FROM `Gears` AS `g` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` -WHERE IIF(`t0`.`SquadId` IS NULL, NULL, MID(`t`.`Note`, 0 + 1, `t0`.`SquadId`)) = `t`.`GearNickName` OR ((`t`.`Note` IS NULL OR `t0`.`SquadId` IS NULL) AND `t`.`GearNickName` IS NULL) +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE IIF(`s`.`SquadId` IS NULL, NULL, MID(`t`.`Note`, 0 + 1, `s`.`SquadId`)) = `t`.`GearNickName` OR ((`t`.`Note` IS NULL OR `s`.`SquadId` IS NULL) AND `t`.`GearNickName` IS NULL) """); } @@ -6937,15 +6941,15 @@ await base.Null_semantics_is_correctly_applied_for_function_comparisons_that_tak async); AssertSql( -""" + """ SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note` FROM (`Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId` FROM `Gears` AS `g` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId`) -LEFT JOIN `Squads` AS `s` ON `t0`.`SquadId` = `s`.`Id` -WHERE IIF(LEN(`s`.`Name`) IS NULL, NULL, MID(`t`.`Note`, 0 + 1, IIF(LEN(`s`.`Name`) IS NULL, NULL, CLNG(LEN(`s`.`Name`))))) = `t`.`GearNickName` OR ((`t`.`Note` IS NULL OR `s`.`Name` IS NULL) AND `t`.`GearNickName` IS NULL) +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId`) +LEFT JOIN `Squads` AS `s0` ON `s`.`SquadId` = `s0`.`Id` +WHERE IIF(LEN(`s0`.`Name`) IS NULL, NULL, MID(`t`.`Note`, 0 + 1, IIF(LEN(`s0`.`Name`) IS NULL, NULL, CLNG(LEN(`s0`.`Name`))))) = `t`.`GearNickName` OR ((`t`.`Note` IS NULL OR `s0`.`Name` IS NULL) AND `t`.`GearNickName` IS NULL) """); } @@ -7048,8 +7052,8 @@ public override async Task Nav_rewrite_with_convert1(bool async) await base.Nav_rewrite_with_convert1(async); AssertSql( -""" -SELECT `t`.`Name`, `t`.`LocustHordeId`, `t`.`ThreatLevel`, `t`.`ThreatLevelByte`, `t`.`ThreatLevelNullableByte`, `t`.`DefeatedByNickname`, `t`.`DefeatedBySquadId`, `t`.`HighCommandId` + """ +SELECT `s`.`Name`, `s`.`LocustHordeId`, `s`.`ThreatLevel`, `s`.`ThreatLevelByte`, `s`.`ThreatLevelNullableByte`, `s`.`DefeatedByNickname`, `s`.`DefeatedBySquadId`, `s`.`HighCommandId` FROM ((`Factions` AS `f` LEFT JOIN `LocustHordes` AS `l` ON `f`.`Id` = `l`.`Id`) LEFT JOIN `Cities` AS `c` ON `f`.`CapitalName` = `c`.`Name`) @@ -7057,7 +7061,7 @@ LEFT JOIN ( SELECT `l0`.`Name`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l1`.`DefeatedByNickname`, `l1`.`DefeatedBySquadId`, `l1`.`HighCommandId` FROM `LocustLeaders` AS `l0` INNER JOIN `LocustCommanders` AS `l1` ON `l0`.`Name` = `l1`.`Name` -) AS `t` ON `l`.`CommanderName` = `t`.`Name` +) AS `s` ON `l`.`CommanderName` = `s`.`Name` WHERE `c`.`Name` <> 'Foo' OR `c`.`Name` IS NULL """); } @@ -7067,7 +7071,7 @@ public override async Task Nav_rewrite_with_convert2(bool async) await base.Nav_rewrite_with_convert2(async); AssertSql( -""" + """ SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Name`, `f`.`ServerAddress`, `l`.`CommanderName`, `l`.`Eradicated`, IIF(`l`.`Id` IS NOT NULL, 'LocustHorde', NULL) AS `Discriminator` FROM ((`Factions` AS `f` LEFT JOIN `LocustHordes` AS `l` ON `f`.`Id` = `l`.`Id`) @@ -7076,8 +7080,8 @@ LEFT JOIN ( SELECT `l0`.`Name` FROM `LocustLeaders` AS `l0` INNER JOIN `LocustCommanders` AS `l1` ON `l0`.`Name` = `l1`.`Name` -) AS `t` ON `l`.`CommanderName` = `t`.`Name` -WHERE (`c`.`Name` <> 'Foo' OR `c`.`Name` IS NULL) AND (`t`.`Name` <> 'Bar' OR `t`.`Name` IS NULL) +) AS `s` ON `l`.`CommanderName` = `s`.`Name` +WHERE (`c`.`Name` <> 'Foo' OR `c`.`Name` IS NULL) AND (`s`.`Name` <> 'Bar' OR `s`.`Name` IS NULL) """); } @@ -7086,7 +7090,7 @@ public override async Task Nav_rewrite_with_convert3(bool async) await base.Nav_rewrite_with_convert3(async); AssertSql( -""" + """ SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Name`, `f`.`ServerAddress`, `l`.`CommanderName`, `l`.`Eradicated`, IIF(`l`.`Id` IS NOT NULL, 'LocustHorde', NULL) AS `Discriminator` FROM ((`Factions` AS `f` LEFT JOIN `LocustHordes` AS `l` ON `f`.`Id` = `l`.`Id`) @@ -7095,8 +7099,8 @@ LEFT JOIN ( SELECT `l0`.`Name` FROM `LocustLeaders` AS `l0` INNER JOIN `LocustCommanders` AS `l1` ON `l0`.`Name` = `l1`.`Name` -) AS `t` ON `l`.`CommanderName` = `t`.`Name` -WHERE (`c`.`Name` <> 'Foo' OR `c`.`Name` IS NULL) AND (`t`.`Name` <> 'Bar' OR `t`.`Name` IS NULL) +) AS `s` ON `l`.`CommanderName` = `s`.`Name` +WHERE (`c`.`Name` <> 'Foo' OR `c`.`Name` IS NULL) AND (`s`.`Name` <> 'Bar' OR `s`.`Name` IS NULL) """); } @@ -7105,7 +7109,7 @@ public override async Task Where_contains_on_navigation_with_composite_keys(bool await base.Where_contains_on_navigation_with_composite_keys(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` @@ -7115,7 +7119,6 @@ SELECT 1 WHERE EXISTS ( SELECT 1 FROM `Gears` AS `g0` - LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` WHERE `c`.`Name` = `g0`.`CityOfBirthName` AND `g0`.`Nickname` = `g`.`Nickname` AND `g0`.`SquadId` = `g`.`SquadId`)) """); } @@ -7126,17 +7129,17 @@ public override async Task Include_with_complex_order_by(bool async) AssertSql( """ -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `t`.`Id`, `t`.`AmmunitionType`, `t`.`IsAutomatic`, `t`.`Name`, `t`.`OwnerFullName`, `t`.`SynergyWithId`, `t`.`c` +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `s`.`Id`, `s`.`AmmunitionType`, `s`.`IsAutomatic`, `s`.`Name`, `s`.`OwnerFullName`, `s`.`SynergyWithId`, `s`.`c` FROM ( 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`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId`, ( - SELECT TOP 1 `w1`.`Name` - FROM `Weapons` AS `w1` - WHERE `g`.`FullName` = `w1`.`OwnerFullName` AND (`w1`.`Name` LIKE '%Gnasher%')) AS `c` + SELECT TOP 1 `w`.`Name` + FROM `Weapons` AS `w` + WHERE `g`.`FullName` = `w`.`OwnerFullName` AND (`w`.`Name` LIKE '%Gnasher%')) AS `c` FROM (`Gears` AS `g` LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) LEFT JOIN `Weapons` AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` -) AS `t` -ORDER BY `t`.`c`, `t`.`Nickname`, `t`.`SquadId` +) AS `s` +ORDER BY `s`.`c`, `s`.`Nickname`, `s`.`SquadId` """); } @@ -7175,7 +7178,6 @@ public override async Task Bool_projection_from_subquery_treated_appropriately_i WHERE ( SELECT TOP 1 `g`.`HasSoulPatch` FROM `Gears` AS `g` - LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` ORDER BY `g`.`Nickname`, `g`.`SquadId`) = TRUE """); } @@ -7193,13 +7195,13 @@ await AssertQuery( m => start <= m.Timeline.Date && m.Timeline < end && dates.Contains(m.Timeline))); AssertSql( - $""" + """ @__start_0='1902-01-01T08:30:00.0000000Z' (DbType = DateTime) @__end_1='1902-01-03T08:30:00.0000000Z' (DbType = DateTime) -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` -WHERE {AssertSqlHelper.Parameter("@__start_0")} <= DATEVALUE(`m`.`Timeline`) AND `m`.`Timeline` < {AssertSqlHelper.Parameter("@__end_1")} AND `m`.`Timeline` = CDATE('1902-01-02 08:30:00') +WHERE @__start_0 <= DATEVALUE(`m`.`Timeline`) AND `m`.`Timeline` < @__end_1 AND `m`.`Timeline` = CDATE('1902-01-02 08:30:00') """); } @@ -7223,15 +7225,15 @@ public override async Task Left_join_projection_using_coalesce_tracking(bool asy await base.Left_join_projection_using_coalesce_tracking(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `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` + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `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`) LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` FROM `Gears` AS `g0` LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` -) AS `t` ON `g`.`LeaderNickname` = `t`.`Nickname` +) AS `s` ON `g`.`LeaderNickname` = `s`.`Nickname` """); } @@ -7240,15 +7242,15 @@ public override async Task Left_join_projection_using_conditional_tracking(bool await base.Left_join_projection_using_conditional_tracking(async); AssertSql( -""" -SELECT IIF(`t`.`Nickname` IS NULL OR `t`.`SquadId` IS NULL, TRUE, FALSE), `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`, `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + """ +SELECT IIF(`s`.`Nickname` IS NULL OR `s`.`SquadId` IS NULL, TRUE, FALSE), `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`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator` FROM (`Gears` AS `g` LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` FROM `Gears` AS `g0` LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` -) AS `t` ON `g`.`LeaderNickname` = `t`.`Nickname` +) AS `s` ON `g`.`LeaderNickname` = `s`.`Nickname` """); } @@ -7288,21 +7290,21 @@ public override async Task Project_collection_navigation_nested_composite_key(bo await base.Project_collection_navigation_nested_composite_key(async); AssertSql( -""" -SELECT `t`.`Id`, `t0`.`Nickname`, `t0`.`SquadId`, `t1`.`Nickname`, `t1`.`SquadId`, `t1`.`AssignedCityName`, `t1`.`CityOfBirthName`, `t1`.`FullName`, `t1`.`HasSoulPatch`, `t1`.`LeaderNickname`, `t1`.`LeaderSquadId`, `t1`.`Rank`, `t1`.`Discriminator` + """ +SELECT `t`.`Id`, `s`.`Nickname`, `s`.`SquadId`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`AssignedCityName`, `s0`.`CityOfBirthName`, `s0`.`FullName`, `s0`.`HasSoulPatch`, `s0`.`LeaderNickname`, `s0`.`LeaderSquadId`, `s0`.`Rank`, `s0`.`Discriminator` FROM (`Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, 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` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId`) +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId`) LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` FROM `Gears` AS `g0` LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` -) AS `t1` ON (`t0`.`Nickname` = `t1`.`LeaderNickname` OR (`t0`.`Nickname` IS NULL AND `t1`.`LeaderNickname` IS NULL)) AND `t0`.`SquadId` = `t1`.`LeaderSquadId` -WHERE `t0`.`Discriminator` = 'Officer' -ORDER BY `t`.`Id`, `t0`.`Nickname`, `t0`.`SquadId`, `t1`.`Nickname` +) AS `s0` ON (`s`.`Nickname` = `s0`.`LeaderNickname` OR (`s`.`Nickname` IS NULL AND `s0`.`LeaderNickname` IS NULL)) AND `s`.`SquadId` = `s0`.`LeaderSquadId` +WHERE `s`.`Discriminator` = 'Officer' +ORDER BY `t`.`Id`, `s`.`Nickname`, `s`.`SquadId`, `s0`.`Nickname` """); } @@ -7333,13 +7335,13 @@ public override async Task SelectMany_Where_DefaultIfEmpty_with_navigation_in_th """ @__isAutomatic_0='True' -SELECT `g`.`Nickname`, `g`.`FullName`, IIF(`t`.`Id` IS NOT NULL, TRUE, FALSE) AS `Collection` +SELECT `g`.`Nickname`, `g`.`FullName`, IIF(`w0`.`Id` IS NOT NULL, TRUE, FALSE) AS `Collection` FROM `Gears` AS `g` LEFT JOIN ( SELECT `w`.`Id`, `w`.`OwnerFullName` FROM `Weapons` AS `w` WHERE `w`.`IsAutomatic` = @__isAutomatic_0 -) AS `t` ON `g`.`FullName` = `t`.`OwnerFullName` +) AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` """); } @@ -7348,15 +7350,14 @@ public override async Task Join_with_inner_being_a_subquery_projecting_single_pr await base.Join_with_inner_being_a_subquery_projecting_single_property(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`) INNER JOIN ( - SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + SELECT `g0`.`Nickname` FROM `Gears` AS `g0` - LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` -) AS `t` ON `g`.`Nickname` = `t`.`Nickname` +) AS `s` ON `g`.`Nickname` = `s`.`Nickname` """); } @@ -7365,15 +7366,14 @@ public override async Task Join_with_inner_being_a_subquery_projecting_anonymous await base.Join_with_inner_being_a_subquery_projecting_anonymous_type_with_single_property(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`) INNER JOIN ( - SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + SELECT `g0`.`Nickname` FROM `Gears` AS `g0` - LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` -) AS `t` ON `g`.`Nickname` = `t`.`Nickname` +) AS `s` ON `g`.`Nickname` = `s`.`Nickname` """); } @@ -7390,8 +7390,8 @@ LEFT JOIN ( SELECT `l0`.`Name` FROM `LocustLeaders` AS `l0` INNER JOIN `LocustCommanders` AS `l1` ON `l0`.`Name` = `l1`.`Name` -) AS `t` ON `l`.`CommanderName` = `t`.`Name` -WHERE IIF(`l`.`Id` IS NOT NULL, IIF(`t`.`Name` IS NOT NULL, TRUE, FALSE), FALSE) = TRUE +) AS `s` ON `l`.`CommanderName` = `s`.`Name` +WHERE IIF(`l`.`Id` IS NOT NULL, IIF(`s`.`Name` IS NOT NULL, TRUE, FALSE), FALSE) = TRUE """); } @@ -7400,7 +7400,7 @@ public override async Task Navigation_based_on_complex_expression2(bool async) await base.Navigation_based_on_complex_expression2(async); AssertSql( -""" + """ SELECT `f`.`Id`, `f`.`CapitalName`, `f`.`Name`, `f`.`ServerAddress`, `l`.`CommanderName`, `l`.`Eradicated`, IIF(`l`.`Id` IS NOT NULL, 'LocustHorde', NULL) AS `Discriminator` FROM (`Factions` AS `f` LEFT JOIN `LocustHordes` AS `l` ON `f`.`Id` = `l`.`Id`) @@ -7408,8 +7408,8 @@ LEFT JOIN ( SELECT `l0`.`Name` FROM `LocustLeaders` AS `l0` INNER JOIN `LocustCommanders` AS `l1` ON `l0`.`Name` = `l1`.`Name` -) AS `t` ON `l`.`CommanderName` = `t`.`Name` -WHERE `l`.`Id` IS NOT NULL AND `t`.`Name` IS NOT NULL +) AS `s` ON `l`.`CommanderName` = `s`.`Name` +WHERE `l`.`Id` IS NOT NULL AND `s`.`Name` IS NOT NULL """); } @@ -7418,15 +7418,15 @@ public override async Task Navigation_based_on_complex_expression3(bool async) await base.Navigation_based_on_complex_expression3(async); AssertSql( -""" -SELECT `t`.`Name`, `t`.`LocustHordeId`, `t`.`ThreatLevel`, `t`.`ThreatLevelByte`, `t`.`ThreatLevelNullableByte`, `t`.`DefeatedByNickname`, `t`.`DefeatedBySquadId`, `t`.`HighCommandId` + """ +SELECT `s`.`Name`, `s`.`LocustHordeId`, `s`.`ThreatLevel`, `s`.`ThreatLevelByte`, `s`.`ThreatLevelNullableByte`, `s`.`DefeatedByNickname`, `s`.`DefeatedBySquadId`, `s`.`HighCommandId` FROM (`Factions` AS `f` LEFT JOIN `LocustHordes` AS `l` ON `f`.`Id` = `l`.`Id`) LEFT JOIN ( SELECT `l0`.`Name`, `l0`.`LocustHordeId`, `l0`.`ThreatLevel`, `l0`.`ThreatLevelByte`, `l0`.`ThreatLevelNullableByte`, `l1`.`DefeatedByNickname`, `l1`.`DefeatedBySquadId`, `l1`.`HighCommandId` FROM `LocustLeaders` AS `l0` INNER JOIN `LocustCommanders` AS `l1` ON `l0`.`Name` = `l1`.`Name` -) AS `t` ON `l`.`CommanderName` = `t`.`Name` +) AS `s` ON `l`.`CommanderName` = `s`.`Name` WHERE `l`.`Id` IS NOT NULL """); } @@ -7524,8 +7524,8 @@ public override async Task OfType_in_subquery_works(bool async) await base.OfType_in_subquery_works(async); AssertSql( -""" -SELECT `t`.`Name`, `t`.`Location`, `t`.`Nation` + """ +SELECT `s`.`Name`, `s`.`Location`, `s`.`Nation` FROM (`Gears` AS `g` INNER JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) INNER JOIN ( @@ -7534,7 +7534,7 @@ INNER JOIN ( LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId`) LEFT JOIN `Cities` AS `c` ON `g0`.`AssignedCityName` = `c`.`Name` WHERE `o0`.`Nickname` IS NOT NULL -) AS `t` ON `g`.`Nickname` = `t`.`LeaderNickname` AND `g`.`SquadId` = `t`.`LeaderSquadId` +) AS `s` ON `g`.`Nickname` = `s`.`LeaderNickname` AND `g`.`SquadId` = `s`.`LeaderSquadId` """); } @@ -7555,15 +7555,15 @@ public override async Task Accessing_reference_navigation_collection_composition await base.Accessing_reference_navigation_collection_composition_generates_single_query(async); AssertSql( -""" -SELECT `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `t`.`IsAutomatic`, `t`.`Name`, `t`.`Id0` + """ +SELECT `g`.`Nickname`, `g`.`SquadId`, `s`.`Id`, `s`.`IsAutomatic`, `s`.`Name`, `s`.`Id0` FROM `Gears` AS `g` LEFT JOIN ( SELECT `w`.`Id`, `w`.`IsAutomatic`, `w0`.`Name`, `w0`.`Id` AS `Id0`, `w`.`OwnerFullName` FROM `Weapons` AS `w` LEFT JOIN `Weapons` AS `w0` ON `w`.`SynergyWithId` = `w0`.`Id` -) AS `t` ON `g`.`FullName` = `t`.`OwnerFullName` -ORDER BY `g`.`Nickname`, `g`.`SquadId`, `t`.`Id` +) AS `s` ON `g`.`FullName` = `s`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s`.`Id` """); } @@ -7572,15 +7572,15 @@ public override async Task Reference_include_chain_loads_correctly_when_middle_i await base.Reference_include_chain_loads_correctly_when_middle_is_null(async); AssertSql( - """ -SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note`, `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator`, `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name` + """ +SELECT `t`.`Id`, `t`.`GearNickName`, `t`.`GearSquadId`, `t`.`IssueDate`, `t`.`Note`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `s0`.`Id`, `s0`.`Banner`, `s0`.`Banner5`, `s0`.`InternalNumber`, `s0`.`Name` FROM (`Tags` AS `t` LEFT JOIN ( 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` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId`) -LEFT JOIN `Squads` AS `s` ON `t0`.`SquadId` = `s`.`Id` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId`) +LEFT JOIN `Squads` AS `s0` ON `s`.`SquadId` = `s0`.`Id` ORDER BY `t`.`Note` """); } @@ -7590,22 +7590,22 @@ public override async Task Accessing_property_of_optional_navigation_in_child_pr await base.Accessing_property_of_optional_navigation_in_child_projection_works(async); AssertSql( -""" -SELECT IIF(`t0`.`Nickname` IS NOT NULL AND `t0`.`SquadId` IS NOT NULL, TRUE, FALSE), `t`.`Id`, `t0`.`Nickname`, `t0`.`SquadId`, `t1`.`Nickname`, `t1`.`Id`, `t1`.`SquadId` + """ +SELECT IIF(`s`.`Nickname` IS NOT NULL AND `s`.`SquadId` IS NOT NULL, TRUE, FALSE), `t`.`Id`, `s`.`Nickname`, `s`.`SquadId`, `s1`.`Nickname`, `s1`.`Id`, `s1`.`SquadId` FROM (`Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`FullName` FROM `Gears` AS `g` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId`) +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId`) LEFT JOIN ( - SELECT `t2`.`Nickname`, `w`.`Id`, `t2`.`SquadId`, `w`.`OwnerFullName` + SELECT `s0`.`Nickname`, `w`.`Id`, `s0`.`SquadId`, `w`.`OwnerFullName` FROM `Weapons` AS `w` LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`FullName` FROM `Gears` AS `g0` - ) AS `t2` ON `w`.`OwnerFullName` = `t2`.`FullName` -) AS `t1` ON `t0`.`FullName` = `t1`.`OwnerFullName` -ORDER BY `t`.`Note`, `t`.`Id`, `t0`.`Nickname`, `t0`.`SquadId`, `t1`.`Id`, `t1`.`Nickname` + ) AS `s0` ON `w`.`OwnerFullName` = `s0`.`FullName` +) AS `s1` ON `s`.`FullName` = `s1`.`OwnerFullName` +ORDER BY `t`.`Note`, `t`.`Id`, `s`.`Nickname`, `s`.`SquadId`, `s1`.`Id`, `s1`.`Nickname` """); } @@ -7630,18 +7630,17 @@ public override async Task Query_reusing_parameter_doesnt_declare_duplicate_para await base.Query_reusing_parameter_doesnt_declare_duplicate_parameter(async); AssertSql( -""" -@__prm_Inner_Nickname_0='Marcus' (Size = 255) + """ @__prm_Inner_Nickname_0='Marcus' (Size = 255) -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator` FROM ( SELECT DISTINCT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` FROM `Gears` AS `g` LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` - WHERE `g`.`Nickname` <> @__prm_Inner_Nickname_0 AND `g`.`Nickname` <> @__prm_Inner_Nickname_0 -) AS `t` -ORDER BY `t`.`FullName` + WHERE `g`.`Nickname` <> @__prm_Inner_Nickname_0 +) AS `s` +ORDER BY `s`.`FullName` """); } @@ -7650,11 +7649,11 @@ public override async Task Query_reusing_parameter_with_inner_query_doesnt_decla await base.Query_reusing_parameter_with_inner_query_doesnt_declare_duplicate_parameter(async); AssertSql( -""" + """ @__squadId_0='1' @__squadId_0='1' -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` +SELECT `u`.`Nickname`, `u`.`SquadId`, `u`.`AssignedCityName`, `u`.`CityOfBirthName`, `u`.`FullName`, `u`.`HasSoulPatch`, `u`.`LeaderNickname`, `u`.`LeaderSquadId`, `u`.`Rank`, `u`.`Discriminator` FROM ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` FROM (`Gears` AS `g` @@ -7675,8 +7674,8 @@ UNION ALL FROM `Squads` AS `s2` WHERE `s2`.`Id` = @__squadId_0 ) -) AS `t` -ORDER BY `t`.`FullName` +) AS `u` +ORDER BY `u`.`FullName` """); } @@ -7685,7 +7684,7 @@ public override async Task Query_reusing_parameter_with_inner_query_expression_d await base.Query_reusing_parameter_with_inner_query_expression_doesnt_declare_duplicate_parameter(async); AssertSql( -""" + """ @__gearId_0='1' @__gearId_0='1' @@ -7694,7 +7693,6 @@ public override async Task Query_reusing_parameter_with_inner_query_expression_d WHERE EXISTS ( SELECT 1 FROM `Gears` AS `g` - LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` WHERE `s`.`Id` = `g`.`SquadId` AND `g`.`SquadId` = @__gearId_0 AND `g`.`SquadId` = @__gearId_0) """); } @@ -7704,21 +7702,21 @@ public override async Task Query_reusing_parameter_doesnt_declare_duplicate_para await base.Query_reusing_parameter_doesnt_declare_duplicate_parameter_complex(async); AssertSql( -""" + """ @__entity_equality_prm_Inner_Squad_0_Id='1' (Nullable = true) @__entity_equality_prm_Inner_Squad_0_Id='1' (Nullable = true) -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` +SELECT `s1`.`Nickname`, `s1`.`SquadId`, `s1`.`AssignedCityName`, `s1`.`CityOfBirthName`, `s1`.`FullName`, `s1`.`HasSoulPatch`, `s1`.`LeaderNickname`, `s1`.`LeaderSquadId`, `s1`.`Rank`, `s1`.`Discriminator` FROM ( SELECT DISTINCT `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`) INNER JOIN `Squads` AS `s` ON `g`.`SquadId` = `s`.`Id` WHERE `s`.`Id` = @__entity_equality_prm_Inner_Squad_0_Id -) AS `t` -INNER JOIN `Squads` AS `s0` ON `t`.`SquadId` = `s0`.`Id` +) AS `s1` +INNER JOIN `Squads` AS `s0` ON `s1`.`SquadId` = `s0`.`Id` WHERE `s0`.`Id` = @__entity_equality_prm_Inner_Squad_0_Id -ORDER BY `t`.`FullName` +ORDER BY `s1`.`FullName` """); } @@ -7727,8 +7725,8 @@ public override async Task Complex_GroupBy_after_set_operator(bool async) await base.Complex_GroupBy_after_set_operator(async); AssertSql( -""" -SELECT `t`.`Name`, `t`.`Count`, IIF(SUM(`t`.`Count`) IS NULL, 0, SUM(`t`.`Count`)) AS `Sum` + """ +SELECT `u`.`Name`, `u`.`Count`, IIF(SUM(`u`.`Count`) IS NULL, 0, SUM(`u`.`Count`)) AS `Sum` FROM ( SELECT `c`.`Name`, ( SELECT COUNT(*) @@ -7743,8 +7741,8 @@ SELECT COUNT(*) WHERE `g0`.`FullName` = `w0`.`OwnerFullName`) AS `Count` FROM `Gears` AS `g0` INNER JOIN `Cities` AS `c0` ON `g0`.`CityOfBirthName` = `c0`.`Name` -) AS `t` -GROUP BY `t`.`Name`, `t`.`Count` +) AS `u` +GROUP BY `u`.`Name`, `u`.`Count` """); } @@ -7753,8 +7751,8 @@ public override async Task Complex_GroupBy_after_set_operator_using_result_selec await base.Complex_GroupBy_after_set_operator_using_result_selector(async); AssertSql( - """ -SELECT `t`.`Name`, `t`.`Count`, IIF(SUM(`t`.`Count`) IS NULL, 0, SUM(`t`.`Count`)) AS `Sum` + """ +SELECT `u`.`Name`, `u`.`Count`, IIF(SUM(`u`.`Count`) IS NULL, 0, SUM(`u`.`Count`)) AS `Sum` FROM ( SELECT `c`.`Name`, ( SELECT COUNT(*) @@ -7769,8 +7767,8 @@ SELECT COUNT(*) WHERE `g0`.`FullName` = `w0`.`OwnerFullName`) AS `Count` FROM `Gears` AS `g0` INNER JOIN `Cities` AS `c0` ON `g0`.`CityOfBirthName` = `c0`.`Name` -) AS `t` -GROUP BY `t`.`Name`, `t`.`Count` +) AS `u` +GROUP BY `u`.`Name`, `u`.`Count` """); } @@ -7793,13 +7791,13 @@ public override async Task GroupBy_with_boolean_grouping_key(bool async) await base.GroupBy_with_boolean_grouping_key(async); AssertSql( -""" -SELECT `t`.`CityOfBirthName`, `t`.`HasSoulPatch`, `t`.`IsMarcus`, COUNT(*) AS `Count` + """ +SELECT `s`.`CityOfBirthName`, `s`.`HasSoulPatch`, `s`.`IsMarcus`, COUNT(*) AS `Count` FROM ( SELECT `g`.`CityOfBirthName`, `g`.`HasSoulPatch`, IIF(`g`.`Nickname` = 'Marcus', TRUE, FALSE) AS `IsMarcus` FROM `Gears` AS `g` -) AS `t` -GROUP BY `t`.`CityOfBirthName`, `t`.`HasSoulPatch`, `t`.`IsMarcus` +) AS `s` +GROUP BY `s`.`CityOfBirthName`, `s`.`HasSoulPatch`, `s`.`IsMarcus` """); } @@ -7808,15 +7806,15 @@ public override async Task GroupBy_with_boolean_groupin_key_thru_navigation_acce await base.GroupBy_with_boolean_groupin_key_thru_navigation_access(async); AssertSql( - """ -SELECT `t0`.`HasSoulPatch`, LCASE(`s`.`Name`) AS `Name` + """ +SELECT `s`.`HasSoulPatch`, LCASE(`s0`.`Name`) AS `Name` FROM (`Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` FROM `Gears` AS `g` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId`) -LEFT JOIN `Squads` AS `s` ON `t0`.`SquadId` = `s`.`Id` -GROUP BY `t0`.`HasSoulPatch`, `s`.`Name` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId`) +LEFT JOIN `Squads` AS `s0` ON `s`.`SquadId` = `s0`.`Id` +GROUP BY `s`.`HasSoulPatch`, `s0`.`Name` """); } @@ -7838,13 +7836,13 @@ public override async Task Group_by_on_StartsWith_with_null_parameter_as_argumen await base.Group_by_on_StartsWith_with_null_parameter_as_argument(async); AssertSql( -""" -SELECT `t`.`Key` + """ +SELECT `s`.`Key` FROM ( SELECT FALSE AS `Key` FROM `Gears` AS `g` -) AS `t` -GROUP BY `t`.`Key` +) AS `s` +GROUP BY `s`.`Key` """); } @@ -7969,20 +7967,18 @@ public override async Task FirstOrDefault_navigation_access_entity_equality_in_w await base.FirstOrDefault_navigation_access_entity_equality_in_where_predicate_apply_peneding_selector(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`) LEFT JOIN `Cities` AS `c` ON `g`.`AssignedCityName` = `c`.`Name` WHERE `c`.`Name` = ( SELECT TOP 1 `c0`.`Name` - FROM (`Gears` AS `g0` - LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId`) + FROM `Gears` AS `g0` INNER JOIN `Cities` AS `c0` ON `g0`.`CityOfBirthName` = `c0`.`Name` ORDER BY `g0`.`Nickname`) OR (`c`.`Name` IS NULL AND ( SELECT TOP 1 `c0`.`Name` - FROM (`Gears` AS `g0` - LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId`) + FROM `Gears` AS `g0` INNER JOIN `Cities` AS `c0` ON `g0`.`CityOfBirthName` = `c0`.`Name` ORDER BY `g0`.`Nickname`) IS NULL) """); @@ -8108,16 +8104,16 @@ public override async Task Join_inner_source_custom_projection_followed_by_filte await base.Join_inner_source_custom_projection_followed_by_filter(async); AssertSql( -""" -SELECT IIF(`t`.`Name` = 'Locust', TRUE, NULL) AS `IsEradicated`, `t`.`CommanderName`, `t`.`Name` + """ +SELECT IIF(`s`.`Name` = 'Locust', TRUE, NULL) AS `IsEradicated`, `s`.`CommanderName`, `s`.`Name` FROM `LocustLeaders` AS `l` INNER JOIN ( - SELECT `f`.`Name`, `l1`.`CommanderName` + SELECT `f`.`Name`, `l0`.`CommanderName` FROM `Factions` AS `f` - LEFT JOIN `LocustHordes` AS `l1` ON `f`.`Id` = `l1`.`Id` - WHERE `l1`.`Id` IS NOT NULL -) AS `t` ON `l`.`Name` = `t`.`CommanderName` -WHERE IIF(`t`.`Name` = 'Locust', TRUE, NULL) <> TRUE OR IIF(`t`.`Name` = 'Locust', TRUE, NULL) IS NULL + LEFT JOIN `LocustHordes` AS `l0` ON `f`.`Id` = `l0`.`Id` + WHERE `l0`.`Id` IS NOT NULL +) AS `s` ON `l`.`Name` = `s`.`CommanderName` +WHERE IIF(`s`.`Name` = 'Locust', TRUE, NULL) = FALSE OR IIF(`s`.`Name` = 'Locust', TRUE, NULL) IS NULL """); } @@ -8205,13 +8201,10 @@ public virtual void Byte_array_filter_by_length_parameter_compiled2() @__byteArrayParam='0x2A80' (Size = 510) @__byteArrayParam='0x2A80' (Size = 510) @__byteArrayParam='0x2A80' (Size = 510) -@__byteArrayParam='0x2A80' (Size = 510) -@__byteArrayParam='0x2A80' (Size = 510) -@__byteArrayParam='0x2A80' (Size = 510) SELECT COUNT(*) FROM `Squads` AS `s` -WHERE IIF(ASCB(RIGHTB(`s`.`Banner`, 1)) = 0, LENB(`s`.`Banner`) - 1, LENB(`s`.`Banner`)) = IIF(IIF(ASCB(RIGHTB(@__byteArrayParam, 1)) = 0, LENB(@__byteArrayParam) - 1, LENB(@__byteArrayParam)) IS NULL, NULL, CLNG(IIF(ASCB(RIGHTB(@__byteArrayParam, 1)) = 0, LENB(@__byteArrayParam) - 1, LENB(@__byteArrayParam)))) OR (IIF(ASCB(RIGHTB(`s`.`Banner`, 1)) = 0, LENB(`s`.`Banner`) - 1, LENB(`s`.`Banner`)) IS NULL AND IIF(ASCB(RIGHTB(@__byteArrayParam, 1)) = 0, LENB(@__byteArrayParam) - 1, LENB(@__byteArrayParam)) IS NULL) +WHERE IIF(ASCB(RIGHTB(`s`.`Banner`, 1)) = 0, LENB(`s`.`Banner`) - 1, LENB(`s`.`Banner`)) = IIF(IIF(ASCB(RIGHTB(@__byteArrayParam, 1)) = 0, LENB(@__byteArrayParam) - 1, LENB(@__byteArrayParam)) IS NULL, NULL, CLNG(IIF(ASCB(RIGHTB(@__byteArrayParam, 1)) = 0, LENB(@__byteArrayParam) - 1, LENB(@__byteArrayParam)))) """); } @@ -8310,12 +8303,12 @@ await AssertQuery( ss => ss.Set().Where(m => m.Timeline.Date >= dateTimeOffset.Date)); AssertSql( - $""" + """ @__dateTimeOffset_Date_0='0102-03-01T00:00:00.0000000' (DbType = DateTime) -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` -WHERE DATEVALUE(`m`.`Timeline`) >= {AssertSqlHelper.Parameter("@__dateTimeOffset_Date_0")} +WHERE DATEVALUE(`m`.`Timeline`) >= CDATE(@__dateTimeOffset_Date_0) """); } @@ -8371,13 +8364,13 @@ public override async Task Group_by_nullable_property_HasValue_and_project_the_g await base.Group_by_nullable_property_HasValue_and_project_the_grouping_key(async); AssertSql( -""" -SELECT `t`.`Key` + """ +SELECT `w0`.`Key` FROM ( SELECT IIF(`w`.`SynergyWithId` IS NOT NULL, TRUE, FALSE) AS `Key` FROM `Weapons` AS `w` -) AS `t` -GROUP BY `t`.`Key` +) AS `w0` +GROUP BY `w0`.`Key` """); } @@ -8468,8 +8461,8 @@ public override async Task Where_TimeSpan_Hours(bool async) await base.Where_TimeSpan_Hours(async); AssertSql( - """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` + """ +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE DATEPART('h', `m`.`Duration`) = 1 """); @@ -8480,8 +8473,8 @@ public override async Task Where_TimeSpan_Minutes(bool async) await base.Where_TimeSpan_Minutes(async); AssertSql( - """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` + """ +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE DATEPART('n', `m`.`Duration`) = 2 """); @@ -8492,8 +8485,8 @@ public override async Task Where_TimeSpan_Seconds(bool async) await base.Where_TimeSpan_Seconds(async); AssertSql( - """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` + """ +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE DATEPART('s', `m`.`Duration`) = 3 """); @@ -8516,14 +8509,13 @@ public override async Task Contains_on_collection_of_byte_subquery(bool async) await base.Contains_on_collection_of_byte_subquery(async); AssertSql( -""" + """ SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, IIF(`l0`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator` FROM `LocustLeaders` AS `l` LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`Name` = `l0`.`Name` WHERE `l`.`ThreatLevelByte` IN ( SELECT `l1`.`ThreatLevelByte` FROM `LocustLeaders` AS `l1` - LEFT JOIN `LocustCommanders` AS `l2` ON `l1`.`Name` = `l2`.`Name` ) """); } @@ -8533,14 +8525,13 @@ public override async Task Contains_on_collection_of_nullable_byte_subquery(bool await base.Contains_on_collection_of_nullable_byte_subquery(async); AssertSql( -""" + """ SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, IIF(`l0`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator` FROM `LocustLeaders` AS `l` LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`Name` = `l0`.`Name` WHERE EXISTS ( SELECT 1 FROM `LocustLeaders` AS `l1` - LEFT JOIN `LocustCommanders` AS `l2` ON `l1`.`Name` = `l2`.`Name` WHERE `l1`.`ThreatLevelNullableByte` = `l`.`ThreatLevelNullableByte` OR (`l1`.`ThreatLevelNullableByte` IS NULL AND `l`.`ThreatLevelNullableByte` IS NULL)) """); } @@ -8550,14 +8541,13 @@ public override async Task Contains_on_collection_of_nullable_byte_subquery_null await base.Contains_on_collection_of_nullable_byte_subquery_null_constant(async); AssertSql( -""" + """ SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, IIF(`l0`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator` FROM `LocustLeaders` AS `l` LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`Name` = `l0`.`Name` WHERE EXISTS ( SELECT 1 FROM `LocustLeaders` AS `l1` - LEFT JOIN `LocustCommanders` AS `l2` ON `l1`.`Name` = `l2`.`Name` WHERE `l1`.`ThreatLevelNullableByte` IS NULL) """); } @@ -8567,14 +8557,13 @@ public override async Task Contains_on_collection_of_nullable_byte_subquery_null await base.Contains_on_collection_of_nullable_byte_subquery_null_parameter(async); AssertSql( -""" + """ SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, IIF(`l0`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator` FROM `LocustLeaders` AS `l` LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`Name` = `l0`.`Name` WHERE EXISTS ( SELECT 1 FROM `LocustLeaders` AS `l1` - LEFT JOIN `LocustCommanders` AS `l2` ON `l1`.`Name` = `l2`.`Name` WHERE `l1`.`ThreatLevelNullableByte` IS NULL) """); } @@ -8585,14 +8574,14 @@ public override async Task Contains_on_byte_array_property_using_byte_column(boo AssertSql( """ -SELECT `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name`, `t`.`Name`, `t`.`LocustHordeId`, `t`.`ThreatLevel`, `t`.`ThreatLevelByte`, `t`.`ThreatLevelNullableByte`, `t`.`DefeatedByNickname`, `t`.`DefeatedBySquadId`, `t`.`HighCommandId`, `t`.`Discriminator` +SELECT `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name`, `s0`.`Name`, `s0`.`LocustHordeId`, `s0`.`ThreatLevel`, `s0`.`ThreatLevelByte`, `s0`.`ThreatLevelNullableByte`, `s0`.`DefeatedByNickname`, `s0`.`DefeatedBySquadId`, `s0`.`HighCommandId`, `s0`.`Discriminator` FROM `Squads` AS `s`, ( SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, IIF(`l0`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator` FROM `LocustLeaders` AS `l` LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`Name` = `l0`.`Name` -) AS `t` -WHERE INSTR(1, STRCONV(`s`.`Banner`, 64), CHR(`t`.`ThreatLevelByte`), 0) > 0 +) AS `s0` +WHERE INSTR(1, STRCONV(`s`.`Banner`, 64), CHR(`s0`.`ThreatLevelByte`), 0) > 0 """); } @@ -8803,14 +8792,14 @@ public override async Task Groupby_anonymous_type_with_navigations_followed_up_b await base.Groupby_anonymous_type_with_navigations_followed_up_by_anonymous_projection_and_orderby(async); AssertSql( -""" + """ SELECT `c`.`Name`, `c`.`Location`, COUNT(*) AS `Count` FROM (`Weapons` AS `w` LEFT JOIN ( SELECT `g`.`CityOfBirthName`, `g`.`FullName` FROM `Gears` AS `g` -) AS `t` ON `w`.`OwnerFullName` = `t`.`FullName`) -LEFT JOIN `Cities` AS `c` ON `t`.`CityOfBirthName` = `c`.`Name` +) AS `s` ON `w`.`OwnerFullName` = `s`.`FullName`) +LEFT JOIN `Cities` AS `c` ON `s`.`CityOfBirthName` = `c`.`Name` GROUP BY `c`.`Name`, `c`.`Location` ORDER BY `c`.`Location` """); @@ -8850,16 +8839,16 @@ public override async Task SelectMany_predicate_after_navigation_with_non_equali await base.SelectMany_predicate_after_navigation_with_non_equality_comparison_DefaultIfEmpty_converted_to_left_join(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`, `t`.`Id`, `t`.`AmmunitionType`, `t`.`IsAutomatic`, `t`.`Name`, `t`.`OwnerFullName`, `t`.`SynergyWithId` + """ +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`, `s`.`Id`, `s`.`AmmunitionType`, `s`.`IsAutomatic`, `s`.`Name`, `s`.`OwnerFullName`, `s`.`SynergyWithId` FROM (`Gears` AS `g` LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) LEFT JOIN ( SELECT `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` FROM `Weapons` AS `w` LEFT JOIN `Weapons` AS `w0` ON `w`.`SynergyWithId` = `w0`.`Id` -) AS `t` ON `g`.`FullName` <> `t`.`OwnerFullName` OR `t`.`OwnerFullName` IS NULL -ORDER BY `g`.`Nickname`, `t`.`Id` +) AS `s` ON `g`.`FullName` <> `s`.`OwnerFullName` OR `s`.`OwnerFullName` IS NULL +ORDER BY `g`.`Nickname`, `s`.`Id` """); } @@ -8946,12 +8935,10 @@ public override async Task FirstOrDefault_over_int_compared_to_zero(bool async) WHERE `s`.`Name` = 'Delta' AND IIF(( SELECT TOP 1 `g`.`SquadId` FROM `Gears` AS `g` - LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` WHERE `s`.`Id` = `g`.`SquadId` AND `g`.`HasSoulPatch` = TRUE ORDER BY `g`.`FullName`) IS NULL, 0, ( SELECT TOP 1 `g`.`SquadId` FROM `Gears` AS `g` - LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` WHERE `s`.`Id` = `g`.`SquadId` AND `g`.`HasSoulPatch` = TRUE ORDER BY `g`.`FullName`)) <> 0 """); @@ -8999,17 +8986,16 @@ public override async Task Accessing_derived_property_using_hard_and_soft_cast(b public override async Task Cast_to_derived_followed_by_include_and_FirstOrDefault(bool async) { await base.Cast_to_derived_followed_by_include_and_FirstOrDefault(async); - - AssertSql( - """ -SELECT TOP 1 `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, IIF(`l0`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator`, `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` +AssertSql( + """ +SELECT TOP 1 `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, IIF(`l0`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator` FROM (`LocustLeaders` AS `l` LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`Name` = `l0`.`Name`) LEFT JOIN ( 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` -) AS `t` ON `l0`.`DefeatedByNickname` = `t`.`Nickname` AND `l0`.`DefeatedBySquadId` = `t`.`SquadId` +) AS `s` ON `l0`.`DefeatedByNickname` = `s`.`Nickname` AND `l0`.`DefeatedBySquadId` = `s`.`SquadId` WHERE `l`.`Name` LIKE '%Queen%' """); } @@ -9119,15 +9105,15 @@ public override async Task Composite_key_entity_equal_null(bool async) await base.Composite_key_entity_equal_null(async); AssertSql( -""" + """ SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, IIF(`l0`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator` FROM (`LocustLeaders` AS `l` LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`Name` = `l0`.`Name`) LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId` FROM `Gears` AS `g` -) AS `t` ON `l0`.`DefeatedByNickname` = `t`.`Nickname` AND `l0`.`DefeatedBySquadId` = `t`.`SquadId` -WHERE `l0`.`Name` IS NOT NULL AND (`t`.`Nickname` IS NULL OR `t`.`SquadId` IS NULL) +) AS `s` ON `l0`.`DefeatedByNickname` = `s`.`Nickname` AND `l0`.`DefeatedBySquadId` = `s`.`SquadId` +WHERE `l0`.`Name` IS NOT NULL AND (`s`.`Nickname` IS NULL OR `s`.`SquadId` IS NULL) """); } @@ -9136,15 +9122,15 @@ public override async Task Composite_key_entity_not_equal_null(bool async) await base.Composite_key_entity_not_equal_null(async); AssertSql( -""" + """ SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, IIF(`l0`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator` FROM (`LocustLeaders` AS `l` LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`Name` = `l0`.`Name`) LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId` FROM `Gears` AS `g` -) AS `t` ON `l0`.`DefeatedByNickname` = `t`.`Nickname` AND `l0`.`DefeatedBySquadId` = `t`.`SquadId` -WHERE `l0`.`Name` IS NOT NULL AND `t`.`Nickname` IS NOT NULL AND `t`.`SquadId` IS NOT NULL +) AS `s` ON `l0`.`DefeatedByNickname` = `s`.`Nickname` AND `l0`.`DefeatedBySquadId` = `s`.`SquadId` +WHERE `l0`.`Name` IS NOT NULL AND `s`.`Nickname` IS NOT NULL AND `s`.`SquadId` IS NOT NULL """); } @@ -9153,14 +9139,14 @@ public override async Task Projecting_property_converted_to_nullable_with_compar await base.Projecting_property_converted_to_nullable_with_comparison(async); AssertSql( - """ -SELECT `t`.`Note`, IIF(`t`.`GearNickName` IS NOT NULL, TRUE, FALSE), `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`HasSoulPatch` + """ +SELECT `t`.`Note`, IIF(`t`.`GearNickName` IS NOT NULL, TRUE, FALSE), `s`.`Nickname`, `s`.`SquadId`, `s`.`HasSoulPatch` FROM `Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` FROM `Gears` AS `g` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` -WHERE IIF(`t`.`GearNickName` IS NOT NULL, `t0`.`SquadId`, NULL) = 1 +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE IIF(`t`.`GearNickName` IS NOT NULL, `s`.`SquadId`, NULL) = 1 """); } @@ -9169,14 +9155,14 @@ public override async Task Projecting_property_converted_to_nullable_with_additi await base.Projecting_property_converted_to_nullable_with_addition(async); AssertSql( - """ -SELECT `t`.`Note`, IIF(`t`.`GearNickName` IS NOT NULL, TRUE, FALSE), `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`HasSoulPatch` + """ +SELECT `t`.`Note`, IIF(`t`.`GearNickName` IS NOT NULL, TRUE, FALSE), `s`.`Nickname`, `s`.`SquadId`, `s`.`HasSoulPatch` FROM `Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` FROM `Gears` AS `g` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` -WHERE (IIF(`t`.`GearNickName` IS NOT NULL, `t0`.`SquadId`, NULL) + 1) = 2 +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE (IIF(`t`.`GearNickName` IS NOT NULL, `s`.`SquadId`, NULL) + 1) = 2 """); } @@ -9186,13 +9172,13 @@ public override async Task Projecting_property_converted_to_nullable_with_additi AssertSql( """ -SELECT `t`.`Note`, IIF(`t`.`GearNickName` IS NOT NULL, `t0`.`SquadId`, NULL) + 1 AS `Value` +SELECT `t`.`Note`, IIF(`t`.`GearNickName` IS NOT NULL, `s`.`SquadId`, NULL) + 1 AS `Value` FROM `Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId` FROM `Gears` AS `g` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` -WHERE IIF(`t`.`GearNickName` IS NOT NULL, `t0`.`Nickname`, NULL) IS NOT NULL +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE IIF(`t`.`GearNickName` IS NOT NULL, `s`.`Nickname`, NULL) IS NOT NULL """); } @@ -9202,12 +9188,12 @@ public override async Task Projecting_property_converted_to_nullable_with_condit AssertSql( """ -SELECT IIF(`t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL, IIF(`t`.`GearNickName` IS NOT NULL, `t0`.`SquadId`, NULL), -1) +SELECT IIF(`t`.`Note` <> 'K.I.A.' OR `t`.`Note` IS NULL, IIF(`t`.`GearNickName` IS NOT NULL, `s`.`SquadId`, NULL), -1) FROM `Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId` FROM `Gears` AS `g` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` """); } @@ -9216,13 +9202,13 @@ public override async Task Projecting_property_converted_to_nullable_with_functi await base.Projecting_property_converted_to_nullable_with_function_call(async); AssertSql( -""" -SELECT MID(IIF(`t`.`GearNickName` IS NOT NULL, `t0`.`Nickname`, NULL), 0 + 1, 3) + """ +SELECT MID(IIF(`t`.`GearNickName` IS NOT NULL, `s`.`Nickname`, NULL), 0 + 1, 3) FROM `Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId` FROM `Gears` AS `g` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` """); } @@ -9231,14 +9217,14 @@ public override async Task Projecting_property_converted_to_nullable_with_functi await base.Projecting_property_converted_to_nullable_with_function_call2(async); AssertSql( -""" -SELECT `t`.`Note`, MID(`t`.`Note`, 0 + 1, IIF(`t`.`GearNickName` IS NOT NULL, `t0`.`SquadId`, NULL)) AS `Function` + """ +SELECT `t`.`Note`, MID(`t`.`Note`, 0 + 1, IIF(`t`.`GearNickName` IS NOT NULL, `s`.`SquadId`, NULL)) AS `Function` FROM `Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId` FROM `Gears` AS `g` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` -WHERE IIF(`t`.`GearNickName` IS NOT NULL, `t0`.`Nickname`, NULL) IS NOT NULL +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE IIF(`t`.`GearNickName` IS NOT NULL, `s`.`Nickname`, NULL) IS NOT NULL """); } @@ -9248,13 +9234,13 @@ public override async Task Projecting_property_converted_to_nullable_into_elemen AssertSql( """ -SELECT IIF(`t`.`GearNickName` IS NOT NULL, IIF(LEN(`t0`.`Nickname`) IS NULL, NULL, CLNG(LEN(`t0`.`Nickname`))), NULL), IIF(`t`.`GearNickName` IS NOT NULL, `t0`.`SquadId`, NULL), IIF(`t`.`GearNickName` IS NOT NULL, `t0`.`SquadId`, NULL) + 1 +SELECT IIF(`t`.`GearNickName` IS NOT NULL, IIF(LEN(`s`.`Nickname`) IS NULL, NULL, CLNG(LEN(`s`.`Nickname`))), NULL), IIF(`t`.`GearNickName` IS NOT NULL, `s`.`SquadId`, NULL), IIF(`t`.`GearNickName` IS NOT NULL, `s`.`SquadId`, NULL) + 1 FROM `Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId` FROM `Gears` AS `g` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` -WHERE IIF(`t`.`GearNickName` IS NOT NULL, `t0`.`Nickname`, NULL) IS NOT NULL +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE IIF(`t`.`GearNickName` IS NOT NULL, `s`.`Nickname`, NULL) IS NOT NULL ORDER BY `t`.`Note` """); } @@ -9265,13 +9251,13 @@ public override async Task Projecting_property_converted_to_nullable_into_member AssertSql( """ -SELECT IIF(`t`.`GearNickName` IS NOT NULL, `t0`.`SquadId`, NULL) AS `Id` +SELECT IIF(`t`.`GearNickName` IS NOT NULL, `s`.`SquadId`, NULL) AS `Id` FROM `Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId` FROM `Gears` AS `g` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` -WHERE IIF(`t`.`GearNickName` IS NOT NULL, `t0`.`Nickname`, NULL) IS NOT NULL +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE IIF(`t`.`GearNickName` IS NOT NULL, `s`.`Nickname`, NULL) IS NOT NULL ORDER BY `t`.`Note` """); } @@ -9282,13 +9268,13 @@ public override async Task Projecting_property_converted_to_nullable_into_new_ar AssertSql( """ -SELECT IIF(`t`.`GearNickName` IS NOT NULL, IIF(LEN(`t0`.`Nickname`) IS NULL, NULL, CLNG(LEN(`t0`.`Nickname`))), NULL), IIF(`t`.`GearNickName` IS NOT NULL, `t0`.`SquadId`, NULL), IIF(`t`.`GearNickName` IS NOT NULL, `t0`.`SquadId`, NULL) + 1 +SELECT IIF(`t`.`GearNickName` IS NOT NULL, IIF(LEN(`s`.`Nickname`) IS NULL, NULL, CLNG(LEN(`s`.`Nickname`))), NULL), IIF(`t`.`GearNickName` IS NOT NULL, `s`.`SquadId`, NULL), IIF(`t`.`GearNickName` IS NOT NULL, `s`.`SquadId`, NULL) + 1 FROM `Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId` FROM `Gears` AS `g` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` -WHERE IIF(`t`.`GearNickName` IS NOT NULL, `t0`.`Nickname`, NULL) IS NOT NULL +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE IIF(`t`.`GearNickName` IS NOT NULL, `s`.`Nickname`, NULL) IS NOT NULL ORDER BY `t`.`Note` """); } @@ -9298,14 +9284,14 @@ public override async Task Projecting_property_converted_to_nullable_into_unary( await base.Projecting_property_converted_to_nullable_into_unary(async); AssertSql( -""" + """ SELECT `t`.`Note` FROM `Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` FROM `Gears` AS `g` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` -WHERE IIF(`t`.`GearNickName` IS NOT NULL, `t0`.`Nickname`, NULL) IS NOT NULL AND IIF(`t`.`GearNickName` IS NOT NULL, `t0`.`HasSoulPatch`, NULL) <> TRUE +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE IIF(`t`.`GearNickName` IS NOT NULL, `s`.`Nickname`, NULL) IS NOT NULL AND IIF(`t`.`GearNickName` IS NOT NULL, `s`.`HasSoulPatch`, NULL) <> TRUE ORDER BY `t`.`Note` """); } @@ -9329,15 +9315,15 @@ public override async Task Projecting_property_converted_to_nullable_and_use_it_ await base.Projecting_property_converted_to_nullable_and_use_it_in_order_by(async); AssertSql( - """ -SELECT `t`.`Note`, IIF(`t`.`GearNickName` IS NOT NULL, TRUE, FALSE), `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`HasSoulPatch` + """ +SELECT `t`.`Note`, IIF(`t`.`GearNickName` IS NOT NULL, TRUE, FALSE), `s`.`Nickname`, `s`.`SquadId`, `s`.`HasSoulPatch` FROM `Tags` AS `t` LEFT JOIN ( SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` FROM `Gears` AS `g` -) AS `t0` ON `t`.`GearNickName` = `t0`.`Nickname` AND `t`.`GearSquadId` = `t0`.`SquadId` -WHERE IIF(`t`.`GearNickName` IS NOT NULL, `t0`.`Nickname`, NULL) IS NOT NULL -ORDER BY IIF(`t`.`GearNickName` IS NOT NULL, `t0`.`SquadId`, NULL), `t`.`Note` +) AS `s` ON `t`.`GearNickName` = `s`.`Nickname` AND `t`.`GearSquadId` = `s`.`SquadId` +WHERE IIF(`t`.`GearNickName` IS NOT NULL, `s`.`Nickname`, NULL) IS NOT NULL +ORDER BY IIF(`t`.`GearNickName` IS NOT NULL, `s`.`SquadId`, NULL), `t`.`Note` """); } @@ -9346,8 +9332,8 @@ public override async Task Where_DateOnly_Year(bool async) await base.Where_DateOnly_Year(async); AssertSql( - """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` + """ +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE DATEPART('yyyy', `m`.`Date`) = 1990 """); @@ -9358,8 +9344,8 @@ public override async Task Where_DateOnly_Month(bool async) await base.Where_DateOnly_Month(async); AssertSql( - """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` + """ +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE DATEPART('m', `m`.`Date`) = 11 """); @@ -9370,8 +9356,8 @@ public override async Task Where_DateOnly_Day(bool async) await base.Where_DateOnly_Day(async); AssertSql( - """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` + """ +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE DATEPART('d', `m`.`Date`) = 10 """); @@ -9382,8 +9368,8 @@ public override async Task Where_DateOnly_DayOfYear(bool async) await base.Where_DateOnly_DayOfYear(async); AssertSql( - """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` + """ +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE DATEPART('y', `m`.`Date`) = 314 """); @@ -9401,8 +9387,8 @@ public override async Task Where_DateOnly_AddYears(bool async) await base.Where_DateOnly_AddYears(async); AssertSql( - """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` + """ +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE DATEADD('yyyy', CLNG(3), `m`.`Date`) = #1993-11-10# """); @@ -9413,8 +9399,8 @@ public override async Task Where_DateOnly_AddMonths(bool async) await base.Where_DateOnly_AddMonths(async); AssertSql( - """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` + """ +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE DATEADD('m', CLNG(3), `m`.`Date`) = #1991-02-10# """); @@ -9425,8 +9411,8 @@ public override async Task Where_DateOnly_AddDays(bool async) await base.Where_DateOnly_AddDays(async); AssertSql( - """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` + """ +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE DATEADD('d', CLNG(3), `m`.`Date`) = #1990-11-13# """); @@ -9437,8 +9423,8 @@ public override async Task Where_TimeOnly_Hour(bool async) await base.Where_TimeOnly_Hour(async); AssertSql( - """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` + """ +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE DATEPART('h', `m`.`Time`) = 10 """); @@ -9449,8 +9435,8 @@ public override async Task Where_TimeOnly_Minute(bool async) await base.Where_TimeOnly_Minute(async); AssertSql( - """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` + """ +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE DATEPART('n', `m`.`Time`) = 15 """); @@ -9461,8 +9447,8 @@ public override async Task Where_TimeOnly_Second(bool async) await base.Where_TimeOnly_Second(async); AssertSql( - """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` + """ +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE DATEPART('s', `m`.`Time`) = 50 """); @@ -9486,7 +9472,7 @@ public override async Task Where_TimeOnly_AddHours(bool async) AssertSql( """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE TIMEVALUE(DATEADD('h', CLNG(3.0), `m`.`Time`)) = TIMEVALUE('13:15:50') """); @@ -9497,8 +9483,8 @@ public override async Task Where_TimeOnly_AddMinutes(bool async) await base.Where_TimeOnly_AddMinutes(async); AssertSql( - """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` + """ +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE TIMEVALUE(DATEADD('n', CLNG(3.0), `m`.`Time`)) = TIMEVALUE('10:18:50') """); @@ -9516,8 +9502,8 @@ public override async Task Where_TimeOnly_IsBetween(bool async) await base.Where_TimeOnly_IsBetween(async); AssertSql( - """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` + """ +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE (IIF(`m`.`Time` >= TIMEVALUE('10:00:00'), TRUE, FALSE) BAND IIF(`m`.`Time` < TIMEVALUE('11:00:00'), TRUE, FALSE)) = TRUE """); @@ -9530,6 +9516,114 @@ public override async Task Where_TimeOnly_subtract_TimeOnly(bool async) AssertSql(); } + public override async Task Where_TimeOnly_FromDateTime_compared_to_property(bool async) + { + await base.Where_TimeOnly_FromDateTime_compared_to_property(async); + + AssertSql( +""" +SELECT [t].[Id] AS [TagId], [m].[Id] AS [MissionId] +FROM [Tags] AS [t] +CROSS JOIN [Missions] AS [m] +WHERE CAST([t].[IssueDate] AS time) = [m].[Time] +"""); + } + + public override async Task Where_TimeOnly_FromDateTime_compared_to_parameter(bool async) + { + await base.Where_TimeOnly_FromDateTime_compared_to_parameter(async); + + AssertSql( +""" +@__time_0='02:00' (DbType = Time) + +SELECT [t].[Id], [t].[GearNickName], [t].[GearSquadId], [t].[IssueDate], [t].[Note] +FROM [Tags] AS [t] +LEFT JOIN ( + SELECT [g].[Nickname], [g].[SquadId] + FROM [Gears] AS [g] +) AS [s] ON [t].[GearNickName] = [s].[Nickname] AND [t].[GearSquadId] = [s].[SquadId] +WHERE [s].[Nickname] IS NOT NULL AND [s].[SquadId] IS NOT NULL AND CAST(DATEADD(hour, CAST(CAST([s].[SquadId] AS float) AS int), [t].[IssueDate]) AS time) = @__time_0 +"""); + } + + public override async Task Where_TimeOnly_FromDateTime_compared_to_constant(bool async) + { + await base.Where_TimeOnly_FromDateTime_compared_to_constant(async); + + AssertSql( +""" +SELECT [t].[Id], [t].[GearNickName], [t].[GearSquadId], [t].[IssueDate], [t].[Note] +FROM [Tags] AS [t] +WHERE CAST(DATEADD(hour, CAST(CAST(CAST(LEN([t].[Note]) AS int) AS float) AS int), [t].[IssueDate]) AS time) > '09:00:00' +"""); + } + + public override async Task Where_TimeOnly_FromTimeSpan_compared_to_property(bool async) + { + await base.Where_TimeOnly_FromTimeSpan_compared_to_property(async); + + AssertSql( +""" +SELECT [m].[Id], [m].[CodeName], [m].[Date], [m].[Difficulty], [m].[Duration], [m].[Rating], [m].[Time], [m].[Timeline] +FROM [Missions] AS [m] +WHERE CAST([m].[Duration] AS time) < [m].[Time] +"""); + } + + public override async Task Where_TimeOnly_FromTimeSpan_compared_to_parameter(bool async) + { + await base.Where_TimeOnly_FromTimeSpan_compared_to_parameter(async); + + AssertSql( +""" +@__time_0='01:02' (DbType = Time) + +SELECT [m].[Id], [m].[CodeName], [m].[Date], [m].[Difficulty], [m].[Duration], [m].[Rating], [m].[Time], [m].[Timeline] +FROM [Missions] AS [m] +WHERE CAST([m].[Duration] AS time) = @__time_0 +"""); + } + + public override async Task Order_by_TimeOnly_FromTimeSpan(bool async) + { + await base.Order_by_TimeOnly_FromTimeSpan(async); + + AssertSql( +""" +SELECT [m].[Id], [m].[CodeName], [m].[Date], [m].[Difficulty], [m].[Duration], [m].[Rating], [m].[Time], [m].[Timeline] +FROM [Missions] AS [m] +ORDER BY CAST([m].[Duration] AS time) +"""); + } + + public override async Task Where_DateOnly_FromDateTime_compared_to_property(bool async) + { + await base.Where_DateOnly_FromDateTime_compared_to_property(async); + + AssertSql( + """ +SELECT `t`.`Id` AS `TagId`, `m`.`Id` AS `MissionId` +FROM `Tags` AS `t`, +`Missions` AS `m` +WHERE `t`.`IssueDate` > `m`.`Date` +"""); + } + + public override async Task Where_DateOnly_FromDateTime_compared_to_constant_and_parameter(bool async) + { + await base.Where_DateOnly_FromDateTime_compared_to_constant_and_parameter(async); + + AssertSql( +""" +@__prm_0='10/11/0002' (DbType = Date) + +SELECT [t].[Id], [t].[GearNickName], [t].[GearSquadId], [t].[IssueDate], [t].[Note] +FROM [Tags] AS [t] +WHERE CAST([t].[IssueDate] AS date) IN (@__prm_0, '0015-03-07') +"""); + } + public override async Task Project_navigation_defined_on_base_from_entity_with_inheritance_using_soft_cast(bool async) { await base.Project_navigation_defined_on_base_from_entity_with_inheritance_using_soft_cast(async); @@ -9574,12 +9668,12 @@ public override async Task Join_entity_with_itself_grouped_by_key_followed_by_in await base.Join_entity_with_itself_grouped_by_key_followed_by_include_skip_take(async); AssertSql( -""" -SELECT `t1`.`Nickname`, `t1`.`SquadId`, `t1`.`AssignedCityName`, `t1`.`CityOfBirthName`, `t1`.`FullName`, `t1`.`HasSoulPatch`, `t1`.`LeaderNickname`, `t1`.`LeaderSquadId`, `t1`.`Rank`, `t1`.`Discriminator`, `t1`.`HasSoulPatch0`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` + """ +SELECT `s1`.`Nickname`, `s1`.`SquadId`, `s1`.`AssignedCityName`, `s1`.`CityOfBirthName`, `s1`.`FullName`, `s1`.`HasSoulPatch`, `s1`.`LeaderNickname`, `s1`.`LeaderSquadId`, `s1`.`Rank`, `s1`.`Discriminator`, `s1`.`HasSoulPatch0`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM ( - SELECT TOP 10 `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator`, `t0`.`HasSoulPatch0` + SELECT TOP 10 `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`AssignedCityName`, `s0`.`CityOfBirthName`, `s0`.`FullName`, `s0`.`HasSoulPatch`, `s0`.`LeaderNickname`, `s0`.`LeaderSquadId`, `s0`.`Rank`, `s0`.`Discriminator`, `s0`.`HasSoulPatch0` FROM ( - SELECT TOP 10 `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`, `t`.`HasSoulPatch` AS `HasSoulPatch0` + SELECT TOP 10 `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`, `s`.`HasSoulPatch` AS `HasSoulPatch0` FROM (`Gears` AS `g` LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) LEFT JOIN ( @@ -9587,14 +9681,14 @@ SELECT MIN(IIF(LEN(`g0`.`Nickname`) IS NULL, NULL, CLNG(LEN(`g0`.`Nickname`)))) FROM `Gears` AS `g0` WHERE `g0`.`Nickname` <> 'Dom' GROUP BY `g0`.`HasSoulPatch` - ) AS `t` ON IIF(LEN(`g`.`Nickname`) IS NULL, NULL, CLNG(LEN(`g`.`Nickname`))) = `t`.`c` - WHERE `t`.`c` IS NOT NULL + ) AS `s` ON IIF(LEN(`g`.`Nickname`) IS NULL, NULL, CLNG(LEN(`g`.`Nickname`))) = `s`.`c` + WHERE `s`.`c` IS NOT NULL ORDER BY `g`.`Nickname` - ) AS `t0` - ORDER BY `t0`.`Nickname` DESC -) AS `t1` -LEFT JOIN `Weapons` AS `w` ON `t1`.`FullName` = `w`.`OwnerFullName` -ORDER BY `t1`.`Nickname`, `t1`.`SquadId`, NOT (`t1`.`HasSoulPatch0`) + ) AS `s0` + ORDER BY `s0`.`Nickname` DESC +) AS `s1` +LEFT JOIN `Weapons` AS `w` ON `s1`.`FullName` = `w`.`OwnerFullName` +ORDER BY `s1`.`Nickname`, `s1`.`SquadId`, NOT (`s1`.`HasSoulPatch0`) """); } @@ -9658,16 +9752,16 @@ public override async Task SelectMany_Where_DefaultIfEmpty_with_navigation_in_th await base.SelectMany_Where_DefaultIfEmpty_with_navigation_in_the_collection_selector_order_comparison(async); AssertSql( -""" + """ @__prm_0='1' -SELECT `g`.`Nickname`, `g`.`FullName`, IIF(`t`.`Id` IS NOT NULL, TRUE, FALSE) AS `Collection` +SELECT `g`.`Nickname`, `g`.`FullName`, IIF(`w0`.`Id` IS NOT NULL, TRUE, FALSE) AS `Collection` FROM `Gears` AS `g` LEFT JOIN ( SELECT `w`.`Id`, `w`.`OwnerFullName` FROM `Weapons` AS `w` WHERE `w`.`Id` > @__prm_0 -) AS `t` ON `g`.`FullName` = `t`.`OwnerFullName` +) AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` """); } @@ -9754,16 +9848,16 @@ public override async Task SelectMany_Where_DefaultIfEmpty_with_navigation_in_th await base.SelectMany_Where_DefaultIfEmpty_with_navigation_in_the_collection_selector_not_equal(async); AssertSql( -""" + """ @__isAutomatic_0='True' -SELECT `g`.`Nickname`, `g`.`FullName`, IIF(`t`.`Id` IS NOT NULL, TRUE, FALSE) AS `Collection` +SELECT `g`.`Nickname`, `g`.`FullName`, IIF(`w0`.`Id` IS NOT NULL, TRUE, FALSE) AS `Collection` FROM `Gears` AS `g` LEFT JOIN ( SELECT `w`.`Id`, `w`.`OwnerFullName` FROM `Weapons` AS `w` WHERE `w`.`IsAutomatic` <> @__isAutomatic_0 -) AS `t` ON `g`.`FullName` = `t`.`OwnerFullName` +) AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` """); } @@ -9806,7 +9900,23 @@ public override async Task Comparison_with_value_converted_subclass(bool async) public override async Task FirstOrDefault_on_empty_collection_of_DateTime_in_subquery(bool async) { - await base.FirstOrDefault_on_empty_collection_of_DateTime_in_subquery(async); + //await base.FirstOrDefault_on_empty_collection_of_DateTime_in_subquery(async); + await AssertQuery( + async, + ss => from g in ss.Set() + let invalidTagIssueDate = (from t in ss.Set() + where t.GearNickName == g.FullName + orderby t.Id + select t.IssueDate).FirstOrDefault() + where g.Tag.IssueDate > invalidTagIssueDate + select new { g.Nickname, invalidTagIssueDate }, + ss => from g in ss.Set() + let invalidTagIssueDate = (from t in ss.Set() + where t.GearNickName == g.FullName + orderby t.Id + select t.IssueDate).FirstOrDefault(new DateTime(100, 1, 1)) + where g.Tag.IssueDate > invalidTagIssueDate + select new { g.Nickname, invalidTagIssueDate }); AssertSql( """ @@ -9814,7 +9924,7 @@ public override async Task FirstOrDefault_on_empty_collection_of_DateTime_in_sub SELECT TOP 1 `t1`.`IssueDate` FROM `Tags` AS `t1` WHERE `t1`.`GearNickName` = `g`.`FullName` - ORDER BY `t1`.`Id`) IS NULL, #1899-12-30#, ( + ORDER BY `t1`.`Id`) IS NULL, #0100-01-01#, ( SELECT TOP 1 `t1`.`IssueDate` FROM `Tags` AS `t1` WHERE `t1`.`GearNickName` = `g`.`FullName` @@ -9825,7 +9935,7 @@ SELECT TOP 1 `t1`.`IssueDate` SELECT TOP 1 `t0`.`IssueDate` FROM `Tags` AS `t0` WHERE `t0`.`GearNickName` = `g`.`FullName` - ORDER BY `t0`.`Id`) IS NULL, #1899-12-30#, ( + ORDER BY `t0`.`Id`) IS NULL, #0100-01-01#, ( SELECT TOP 1 `t0`.`IssueDate` FROM `Tags` AS `t0` WHERE `t0`.`GearNickName` = `g`.`FullName` @@ -9936,20 +10046,19 @@ public override async Task Include_after_Select_throws(bool async) public override async Task Cast_to_derived_followed_by_multiple_includes(bool async) { await base.Cast_to_derived_followed_by_multiple_includes(async); - - AssertSql( - """ -SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, IIF(`l0`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator`, `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +AssertSql( + """ +SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, IIF(`l0`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` FROM ((`LocustLeaders` AS `l` LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`Name` = `l0`.`Name`) LEFT JOIN ( 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` -) AS `t` ON `l0`.`DefeatedByNickname` = `t`.`Nickname` AND `l0`.`DefeatedBySquadId` = `t`.`SquadId`) -LEFT JOIN `Weapons` AS `w` ON `t`.`FullName` = `w`.`OwnerFullName` +) AS `s` ON `l0`.`DefeatedByNickname` = `s`.`Nickname` AND `l0`.`DefeatedBySquadId` = `s`.`SquadId`) +LEFT JOIN `Weapons` AS `w` ON `s`.`FullName` = `w`.`OwnerFullName` WHERE `l`.`Name` LIKE '%Queen%' -ORDER BY `l`.`Name`, `t`.`Nickname`, `t`.`SquadId` +ORDER BY `l`.`Name`, `s`.`Nickname`, `s`.`SquadId` """); } @@ -9976,7 +10085,7 @@ public override async Task Where_equals_method_on_nullable_with_object_overload( AssertSql( """ -SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` +SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` FROM `Missions` AS `m` WHERE `m`.`Rating` IS NULL """); @@ -10013,17 +10122,17 @@ public override async Task Include_after_SelectMany_throws(bool async) await base.Include_after_SelectMany_throws(async); AssertSql( -""" -SELECT `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator`, `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name` + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `s0`.`Id`, `s0`.`Banner`, `s0`.`Banner5`, `s0`.`InternalNumber`, `s0`.`Name` FROM ((`Factions` AS `f` LEFT JOIN `Cities` AS `c` ON `f`.`CapitalName` = `c`.`Name`) LEFT JOIN ( 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` -) AS `t` ON `c`.`Name` = `t`.`CityOfBirthName`) -LEFT JOIN `Squads` AS `s` ON `t`.`SquadId` = `s`.`Id` -WHERE `c`.`Name` IS NOT NULL AND `t`.`CityOfBirthName` IS NOT NULL AND `t`.`SquadId` IS NOT NULL AND `s`.`Id` IS NOT NULL +) AS `s` ON `c`.`Name` = `s`.`CityOfBirthName`) +LEFT JOIN `Squads` AS `s0` ON `s`.`SquadId` = `s0`.`Id` +WHERE `c`.`Name` IS NOT NULL AND `s`.`CityOfBirthName` IS NOT NULL AND `s`.`SquadId` IS NOT NULL AND `s0`.`Id` IS NOT NULL """); } @@ -10033,13 +10142,13 @@ public override async Task Correlated_collection_with_distinct_projecting_identi AssertSql( """ -SELECT `s`.`Id`, `t`.`Nickname`, `t`.`SquadId`, `t`.`HasSoulPatch` +SELECT `s`.`Id`, `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`HasSoulPatch` FROM `Squads` AS `s` LEFT JOIN ( SELECT DISTINCT `g`.`Nickname`, `g`.`SquadId`, `g`.`HasSoulPatch` FROM `Gears` AS `g` -) AS `t` ON `s`.`Id` = `t`.`SquadId` -ORDER BY `s`.`Id`, `t`.`Nickname` +) AS `s0` ON `s`.`Id` = `s0`.`SquadId` +ORDER BY `s`.`Id`, `s0`.`Nickname` """); } @@ -10072,13 +10181,31 @@ public override async Task ToString_boolean_property_nullable(bool async) await base.ToString_boolean_property_nullable(async); AssertSql( - """ -SELECT IIF(`l`.`Eradicated` = FALSE, 'False', IIF(`l`.`Eradicated` = TRUE, 'True', NULL)) + """ +SELECT IIF(`l`.`Eradicated` = FALSE, 'False', IIF(`l`.`Eradicated` = TRUE, 'True', '')) FROM `Factions` AS `f` INNER JOIN `LocustHordes` AS `l` ON `f`.`Id` = `l`.`Id` """); } + public override async Task ToString_boolean_computed_nullable(bool async) + { + await base.ToString_boolean_computed_nullable(async); + + AssertSql( + """ +SELECT CASE CASE + WHEN NOT ([l].[Eradicated] = CAST(1 AS bit) OR ([l].[CommanderName] = N'Unknown' AND [l].[CommanderName] IS NOT NULL)) THEN CAST(0 AS bit) + WHEN [l].[Eradicated] = CAST(1 AS bit) OR ([l].[CommanderName] = N'Unknown' AND [l].[CommanderName] IS NOT NULL) THEN CAST(1 AS bit) +END + WHEN CAST(0 AS bit) THEN N'False' + WHEN CAST(1 AS bit) THEN N'True' + ELSE N'' +END +FROM [LocustHordes] AS [l] +"""); + } + public override async Task Correlated_collection_after_distinct_3_levels(bool async) { await base.Correlated_collection_after_distinct_3_levels(async); @@ -10160,12 +10287,12 @@ public override async Task Correlated_collection_with_distinct_projecting_identi AssertSql( """ -SELECT `g`.`Nickname`, `g`.`SquadId`, `t`.`Id`, `t`.`Name`, `t`.`OwnerFullName` +SELECT `g`.`Nickname`, `g`.`SquadId`, `w0`.`Id`, `w0`.`Name`, `w0`.`OwnerFullName` FROM `Gears` AS `g` LEFT JOIN ( SELECT DISTINCT `w`.`Id`, `w`.`Name`, `w`.`OwnerFullName` FROM `Weapons` AS `w` -) AS `t` ON `g`.`FullName` = `t`.`OwnerFullName` +) AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` ORDER BY `g`.`Nickname`, `g`.`SquadId` """); } @@ -10470,13 +10597,12 @@ public override async Task Where_subquery_equality_to_null_with_composite_key(bo await base.Where_subquery_equality_to_null_with_composite_key(async); AssertSql( -""" + """ SELECT `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name` FROM `Squads` AS `s` WHERE NOT EXISTS ( SELECT 1 FROM `Gears` AS `g` - LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` WHERE `s`.`Id` = `g`.`SquadId`) """); } @@ -10486,13 +10612,12 @@ public override async Task Where_subquery_equality_to_null_with_composite_key_sh await base.Where_subquery_equality_to_null_with_composite_key_should_match_nulls(async); AssertSql( - """ + """ SELECT `s`.`Id`, `s`.`Banner`, `s`.`Banner5`, `s`.`InternalNumber`, `s`.`Name` FROM `Squads` AS `s` WHERE NOT EXISTS ( SELECT 1 FROM `Gears` AS `g` - LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` WHERE `s`.`Id` = `g`.`SquadId` AND `g`.`FullName` = 'Anthony Carmine') """); } @@ -10534,15 +10659,15 @@ public override async Task Include_reference_on_derived_type_using_EF_Property(b await base.Include_reference_on_derived_type_using_EF_Property(async); AssertSql( -""" -SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, IIF(`l0`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator`, `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + """ +SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, IIF(`l0`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator` FROM (`LocustLeaders` AS `l` LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`Name` = `l0`.`Name`) LEFT JOIN ( 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` -) AS `t` ON `l0`.`DefeatedByNickname` = `t`.`Nickname` AND `l0`.`DefeatedBySquadId` = `t`.`SquadId` +) AS `s` ON `l0`.`DefeatedByNickname` = `s`.`Nickname` AND `l0`.`DefeatedBySquadId` = `s`.`SquadId` """); } @@ -10551,16 +10676,16 @@ public override async Task Include_collection_on_derived_type_using_EF_Property( await base.Include_collection_on_derived_type_using_EF_Property(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`, `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + """ +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`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator` FROM (`Gears` AS `g` LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` FROM `Gears` AS `g0` LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` -) AS `t` ON `g`.`Nickname` = `t`.`LeaderNickname` AND `g`.`SquadId` = `t`.`LeaderSquadId` -ORDER BY `g`.`Nickname`, `g`.`SquadId`, `t`.`Nickname` +) AS `s` ON `g`.`Nickname` = `s`.`LeaderNickname` AND `g`.`SquadId` = `s`.`LeaderSquadId` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s`.`Nickname` """); } @@ -10569,17 +10694,17 @@ public override async Task EF_Property_based_Include_navigation_on_derived_type( await base.EF_Property_based_Include_navigation_on_derived_type(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`, `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + """ +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`, `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator` FROM (`Gears` AS `g` LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) LEFT JOIN ( SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` FROM `Gears` AS `g0` LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` -) AS `t` ON `g`.`Nickname` = `t`.`LeaderNickname` AND `g`.`SquadId` = `t`.`LeaderSquadId` +) AS `s` ON `g`.`Nickname` = `s`.`LeaderNickname` AND `g`.`SquadId` = `s`.`LeaderSquadId` WHERE `o`.`Nickname` IS NOT NULL -ORDER BY `g`.`Nickname`, `g`.`SquadId`, `t`.`Nickname` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s`.`Nickname` """); } @@ -10588,19 +10713,19 @@ public override async Task ElementAt_basic_with_OrderBy(bool async) await base.ElementAt_basic_with_OrderBy(async); AssertSql( -""" -SELECT `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator` + """ +SELECT `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`AssignedCityName`, `s0`.`CityOfBirthName`, `s0`.`FullName`, `s0`.`HasSoulPatch`, `s0`.`LeaderNickname`, `s0`.`LeaderSquadId`, `s0`.`Rank`, `s0`.`Discriminator` FROM ( - SELECT TOP 1 `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + SELECT TOP 1 `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator` FROM ( SELECT TOP 1 `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` ORDER BY `g`.`FullName` - ) AS `t` - ORDER BY `t`.`FullName` DESC -) AS `t0` -ORDER BY `t0`.`FullName` + ) AS `s` + ORDER BY `s`.`FullName` DESC +) AS `s0` +ORDER BY `s0`.`FullName` """); } @@ -10609,19 +10734,19 @@ public override async Task ElementAtOrDefault_basic_with_OrderBy(bool async) await base.ElementAtOrDefault_basic_with_OrderBy(async); AssertSql( -""" -SELECT `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator` + """ +SELECT `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`AssignedCityName`, `s0`.`CityOfBirthName`, `s0`.`FullName`, `s0`.`HasSoulPatch`, `s0`.`LeaderNickname`, `s0`.`LeaderSquadId`, `s0`.`Rank`, `s0`.`Discriminator` FROM ( - SELECT TOP 1 `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + SELECT TOP 1 `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator` FROM ( SELECT TOP 2 `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` ORDER BY `g`.`FullName` - ) AS `t` - ORDER BY `t`.`FullName` DESC -) AS `t0` -ORDER BY `t0`.`FullName` + ) AS `s` + ORDER BY `s`.`FullName` DESC +) AS `s0` +ORDER BY `s0`.`FullName` """); } @@ -10630,19 +10755,19 @@ public override async Task ElementAtOrDefault_basic_with_OrderBy_parameter(bool await base.ElementAtOrDefault_basic_with_OrderBy_parameter(async); AssertSql( -""" -SELECT `t0`.`Nickname`, `t0`.`SquadId`, `t0`.`AssignedCityName`, `t0`.`CityOfBirthName`, `t0`.`FullName`, `t0`.`HasSoulPatch`, `t0`.`LeaderNickname`, `t0`.`LeaderSquadId`, `t0`.`Rank`, `t0`.`Discriminator` + """ +SELECT `s0`.`Nickname`, `s0`.`SquadId`, `s0`.`AssignedCityName`, `s0`.`CityOfBirthName`, `s0`.`FullName`, `s0`.`HasSoulPatch`, `s0`.`LeaderNickname`, `s0`.`LeaderSquadId`, `s0`.`Rank`, `s0`.`Discriminator` FROM ( - SELECT TOP 1 `t`.`Nickname`, `t`.`SquadId`, `t`.`AssignedCityName`, `t`.`CityOfBirthName`, `t`.`FullName`, `t`.`HasSoulPatch`, `t`.`LeaderNickname`, `t`.`LeaderSquadId`, `t`.`Rank`, `t`.`Discriminator` + SELECT TOP 1 `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator` FROM ( SELECT TOP 3 `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` ORDER BY `g`.`FullName` - ) AS `t` - ORDER BY `t`.`FullName` DESC -) AS `t0` -ORDER BY `t0`.`FullName` + ) AS `s` + ORDER BY `s`.`FullName` DESC +) AS `s0` +ORDER BY `s0`.`FullName` """); } @@ -10744,38 +10869,33 @@ public override async Task Set_operator_with_navigation_in_projection_groupby_ag await base.Set_operator_with_navigation_in_projection_groupby_aggregate(async); AssertSql( -""" + """ SELECT `s`.`Name`, ( SELECT IIF(SUM(IIF(LEN(`c`.`Location`) IS NULL, NULL, CLNG(LEN(`c`.`Location`)))) IS NULL, 0, SUM(IIF(LEN(`c`.`Location`) IS NULL, NULL, CLNG(LEN(`c`.`Location`))))) - FROM ((`Gears` AS `g2` - LEFT JOIN `Officers` AS `o2` ON `g2`.`Nickname` = `o2`.`Nickname` AND `g2`.`SquadId` = `o2`.`SquadId`) + FROM (`Gears` AS `g2` INNER JOIN `Squads` AS `s0` ON `g2`.`SquadId` = `s0`.`Id`) INNER JOIN `Cities` AS `c` ON `g2`.`CityOfBirthName` = `c`.`Name` WHERE 'Marcus' IN ( - SELECT `t0`.`Nickname` + SELECT `u0`.`Nickname` FROM ( - SELECT `g3`.`Nickname`, `g3`.`SquadId`, `g3`.`AssignedCityName`, `g3`.`CityOfBirthName`, `g3`.`FullName`, `g3`.`HasSoulPatch`, `g3`.`LeaderNickname`, `g3`.`LeaderSquadId`, `g3`.`Rank`, IIF(`o3`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + SELECT `g3`.`Nickname` FROM `Gears` AS `g3` - LEFT JOIN `Officers` AS `o3` ON `g3`.`Nickname` = `o3`.`Nickname` AND `g3`.`SquadId` = `o3`.`SquadId` UNION ALL - SELECT `g4`.`Nickname`, `g4`.`SquadId`, `g4`.`AssignedCityName`, `g4`.`CityOfBirthName`, `g4`.`FullName`, `g4`.`HasSoulPatch`, `g4`.`LeaderNickname`, `g4`.`LeaderSquadId`, `g4`.`Rank`, IIF(`o4`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + SELECT `g4`.`Nickname` FROM `Gears` AS `g4` - LEFT JOIN `Officers` AS `o4` ON `g4`.`Nickname` = `o4`.`Nickname` AND `g4`.`SquadId` = `o4`.`SquadId` - ) AS `t0` + ) AS `u0` ) AND (`s`.`Name` = `s0`.`Name` OR (`s`.`Name` IS NULL AND `s0`.`Name` IS NULL))) AS `SumOfLengths` FROM `Gears` AS `g` INNER JOIN `Squads` AS `s` ON `g`.`SquadId` = `s`.`Id` WHERE 'Marcus' IN ( - SELECT `t`.`Nickname` + SELECT `u`.`Nickname` FROM ( - SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + SELECT `g0`.`Nickname` FROM `Gears` AS `g0` - LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` UNION ALL - SELECT `g1`.`Nickname`, `g1`.`SquadId`, `g1`.`AssignedCityName`, `g1`.`CityOfBirthName`, `g1`.`FullName`, `g1`.`HasSoulPatch`, `g1`.`LeaderNickname`, `g1`.`LeaderSquadId`, `g1`.`Rank`, IIF(`o1`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + SELECT `g1`.`Nickname` FROM `Gears` AS `g1` - LEFT JOIN `Officers` AS `o1` ON `g1`.`Nickname` = `o1`.`Nickname` AND `g1`.`SquadId` = `o1`.`SquadId` - ) AS `t` + ) AS `u` ) GROUP BY `s`.`Name` """); @@ -10868,6 +10988,174 @@ public override async Task Nav_expansion_inside_ElementAt_correlated_to_source(b AssertSql(); } + public override async Task Include_one_to_many_on_composite_key_then_orderby_key_properties(bool async) + { + await base.Include_one_to_many_on_composite_key_then_orderby_key_properties(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`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM (`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName` +ORDER BY `g`.`SquadId`, `g`.`Nickname` +"""); + } + + public override async Task Find_underlying_property_after_GroupJoin_DefaultIfEmpty(bool async) + { + await base.Find_underlying_property_after_GroupJoin_DefaultIfEmpty(async); + + AssertSql( + """ +SELECT `g`.`FullName`, IIF(`s`.`ThreatLevel` IS NULL, NULL, CLNG(`s`.`ThreatLevel`)) AS `ThreatLevel` +FROM `Gears` AS `g` +LEFT JOIN ( + SELECT `l`.`ThreatLevel`, `l0`.`DefeatedByNickname` + FROM `LocustLeaders` AS `l` + LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`Name` = `l0`.`Name` + WHERE `l0`.`Name` IS NOT NULL +) AS `s` ON `g`.`Nickname` = `s`.`DefeatedByNickname` +"""); + } + + public override async Task Join_include_coalesce_simple(bool async) + { + await base.Join_include_coalesce_simple(async); + + AssertSql( + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `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`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, IIF(`g`.`Nickname` = 'Marcus', TRUE, FALSE) +FROM ((`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g0` + LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` +) AS `s` ON `g`.`LeaderNickname` = `s`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s`.`Nickname`, `s`.`SquadId` +""", + // + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `g`.`Nickname`, `g`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `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`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g0` + LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` +) AS `s` ON `g`.`LeaderNickname` = `s`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `s`.`FullName` = `w`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s`.`Nickname`, `s`.`SquadId` +""", + // + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `g`.`Nickname`, `g`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId` +FROM (((`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g0` + LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` +) AS `s` ON `g`.`LeaderNickname` = `s`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `s`.`FullName` = `w`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w0` ON `g`.`FullName` = `w0`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s`.`Nickname`, `s`.`SquadId`, `w`.`Id` +"""); + } + + public override async Task Join_include_coalesce_nested(bool async) + { + await base.Join_include_coalesce_nested(async); + + AssertSql( + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `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`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, IIF(`g`.`Nickname` = 'Marcus', TRUE, FALSE) +FROM ((`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g0` + LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` +) AS `s` ON `g`.`LeaderNickname` = `s`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s`.`Nickname`, `s`.`SquadId` +""", + // + """ +SELECT `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `g`.`Nickname`, `g`.`SquadId`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, `w0`.`Id`, `w0`.`AmmunitionType`, `w0`.`IsAutomatic`, `w0`.`Name`, `w0`.`OwnerFullName`, `w0`.`SynergyWithId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator`, `w1`.`Id`, `w1`.`AmmunitionType`, `w1`.`IsAutomatic`, `w1`.`Name`, `w1`.`OwnerFullName`, `w1`.`SynergyWithId` +FROM ((((`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g0` + LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` +) AS `s` ON `g`.`LeaderNickname` = `s`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `s`.`FullName` = `w`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w0` ON `s`.`FullName` = `w0`.`OwnerFullName`) +LEFT JOIN `Weapons` AS `w1` ON `s`.`FullName` = `w1`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s`.`Nickname`, `s`.`SquadId`, `w`.`Id`, `w0`.`Id` +"""); + } + + public override async Task Join_include_conditional(bool async) + { + await base.Join_include_conditional(async); + + AssertSql( + """ +SELECT IIF(`s`.`Nickname` IS NOT NULL AND `s`.`SquadId` IS NOT NULL, TRUE, FALSE), `s`.`Nickname`, `s`.`SquadId`, `s`.`AssignedCityName`, `s`.`CityOfBirthName`, `s`.`FullName`, `s`.`HasSoulPatch`, `s`.`LeaderNickname`, `s`.`LeaderSquadId`, `s`.`Rank`, `s`.`Discriminator`, `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`, `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId`, IIF(`g`.`Nickname` = 'Marcus', TRUE, FALSE) +FROM ((`Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId`) +LEFT JOIN ( + SELECT `g0`.`Nickname`, `g0`.`SquadId`, `g0`.`AssignedCityName`, `g0`.`CityOfBirthName`, `g0`.`FullName`, `g0`.`HasSoulPatch`, `g0`.`LeaderNickname`, `g0`.`LeaderSquadId`, `g0`.`Rank`, IIF(`o0`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` + FROM `Gears` AS `g0` + LEFT JOIN `Officers` AS `o0` ON `g0`.`Nickname` = `o0`.`Nickname` AND `g0`.`SquadId` = `o0`.`SquadId` +) AS `s` ON `g`.`LeaderNickname` = `s`.`Nickname`) +LEFT JOIN `Weapons` AS `w` ON `g`.`FullName` = `w`.`OwnerFullName` +ORDER BY `g`.`Nickname`, `g`.`SquadId`, `s`.`Nickname`, `s`.`SquadId` +"""); + } + + public override async Task Derived_reference_is_skipped_when_base_type(bool async) + { + await base.Derived_reference_is_skipped_when_base_type(async); + + AssertSql( + """ +SELECT `l`.`Name`, `l`.`LocustHordeId`, `l`.`ThreatLevel`, `l`.`ThreatLevelByte`, `l`.`ThreatLevelNullableByte`, `l0`.`DefeatedByNickname`, `l0`.`DefeatedBySquadId`, `l0`.`HighCommandId`, IIF(`l0`.`Name` IS NOT NULL, 'LocustCommander', NULL) AS `Discriminator`, `l1`.`Id`, `l1`.`IsOperational`, `l1`.`Name` +FROM (`LocustLeaders` AS `l` +LEFT JOIN `LocustCommanders` AS `l0` ON `l`.`Name` = `l0`.`Name`) +LEFT JOIN `LocustHighCommands` AS `l1` ON `l0`.`HighCommandId` = `l1`.`Id` +"""); + } + + public override async Task Nested_contains_with_enum(bool async) + { + await base.Nested_contains_with_enum(async); + + AssertSql( + """ +@__key_1='5f221fb9-66f4-442a-92c9-d97ed5989cc7' +@__key_1='5f221fb9-66f4-442a-92c9-d97ed5989cc7' + +SELECT `g`.`Nickname`, `g`.`SquadId`, `g`.`AssignedCityName`, `g`.`CityOfBirthName`, `g`.`FullName`, `g`.`HasSoulPatch`, `g`.`LeaderNickname`, `g`.`LeaderSquadId`, `g`.`Rank`, IIF(`o`.`Nickname` IS NOT NULL, 'Officer', NULL) AS `Discriminator` +FROM `Gears` AS `g` +LEFT JOIN `Officers` AS `o` ON `g`.`Nickname` = `o`.`Nickname` AND `g`.`SquadId` = `o`.`SquadId` +WHERE IIF(`g`.`Rank` = 1, @__key_1, @__key_1) IN ('{0a47bcb7-a1cb-4345-8944-c58f82d6aac7}', '{5f221fb9-66f4-442a-92c9-d97ed5989cc7}') +""", + // + """ +@__key_1='5f221fb9-66f4-442a-92c9-d97ed5989cc7' +@__key_1='5f221fb9-66f4-442a-92c9-d97ed5989cc7' + +SELECT `w`.`Id`, `w`.`AmmunitionType`, `w`.`IsAutomatic`, `w`.`Name`, `w`.`OwnerFullName`, `w`.`SynergyWithId` +FROM `Weapons` AS `w` +WHERE IIF(`w`.`AmmunitionType` = 1, @__key_1, @__key_1) IN ('{0a47bcb7-a1cb-4345-8944-c58f82d6aac7}', '{5f221fb9-66f4-442a-92c9-d97ed5989cc7}') +"""); + } + private void AssertSql(params string[] expected) => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); } diff --git a/test/EFCore.Jet.FunctionalTests/Query/TPTInheritanceQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/TPTInheritanceQueryJetTest.cs index 6acb4b8d..c468283b 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/TPTInheritanceQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/TPTInheritanceQueryJetTest.cs @@ -57,8 +57,8 @@ public override async Task Can_include_animals(bool async) await base.Can_include_animals(async); AssertSql( -""" -SELECT `c`.`Id`, `c`.`Name`, `t`.`Id`, `t`.`CountryId`, `t`.`Name`, `t`.`Species`, `t`.`EagleId`, `t`.`IsFlightless`, `t`.`Group`, `t`.`FoundOn`, `t`.`Discriminator` + """ +SELECT `c`.`Id`, `c`.`Name`, `s`.`Id`, `s`.`CountryId`, `s`.`Name`, `s`.`Species`, `s`.`EagleId`, `s`.`IsFlightless`, `s`.`Group`, `s`.`FoundOn`, `s`.`Discriminator` FROM `Countries` AS `c` LEFT JOIN ( SELECT `a`.`Id`, `a`.`CountryId`, `a`.`Name`, `a`.`Species`, `b`.`EagleId`, `b`.`IsFlightless`, `e`.`Group`, `k`.`FoundOn`, IIF(`k`.`Id` IS NOT NULL, 'Kiwi', IIF(`e`.`Id` IS NOT NULL, 'Eagle', NULL)) AS `Discriminator` @@ -66,7 +66,7 @@ LEFT JOIN ( LEFT JOIN `Birds` AS `b` ON `a`.`Id` = `b`.`Id`) LEFT JOIN `Eagle` AS `e` ON `a`.`Id` = `e`.`Id`) LEFT JOIN `Kiwi` AS `k` ON `a`.`Id` = `k`.`Id` -) AS `t` ON `c`.`Id` = `t`.`CountryId` +) AS `s` ON `c`.`Id` = `s`.`CountryId` ORDER BY `c`.`Name`, `c`.`Id` """); } @@ -76,27 +76,27 @@ public override async Task Can_include_prey(bool async) await base.Can_include_prey(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`CountryId`, `t`.`Name`, `t`.`Species`, `t`.`EagleId`, `t`.`IsFlightless`, `t`.`Group`, `t0`.`Id`, `t0`.`CountryId`, `t0`.`Name`, `t0`.`Species`, `t0`.`EagleId`, `t0`.`IsFlightless`, `t0`.`Group`, `t0`.`FoundOn`, `t0`.`Discriminator` + """ +SELECT `s`.`Id`, `s`.`CountryId`, `s`.`Name`, `s`.`Species`, `s`.`EagleId`, `s`.`IsFlightless`, `s`.`Group`, `s0`.`Id`, `s0`.`CountryId`, `s0`.`Name`, `s0`.`Species`, `s0`.`EagleId`, `s0`.`IsFlightless`, `s0`.`Group`, `s0`.`FoundOn`, `s0`.`Discriminator` FROM ( SELECT TOP 2 `a`.`Id`, `a`.`CountryId`, `a`.`Name`, `a`.`Species`, `b`.`EagleId`, `b`.`IsFlightless`, `e`.`Group` FROM (`Animals` AS `a` INNER JOIN `Birds` AS `b` ON `a`.`Id` = `b`.`Id`) INNER JOIN `Eagle` AS `e` ON `a`.`Id` = `e`.`Id` -) AS `t` +) AS `s` LEFT JOIN ( SELECT `a0`.`Id`, `a0`.`CountryId`, `a0`.`Name`, `a0`.`Species`, `b0`.`EagleId`, `b0`.`IsFlightless`, `e0`.`Group`, `k`.`FoundOn`, IIF(`k`.`Id` IS NOT NULL, 'Kiwi', IIF(`e0`.`Id` IS NOT NULL, 'Eagle', NULL)) AS `Discriminator` FROM ((`Animals` AS `a0` INNER JOIN `Birds` AS `b0` ON `a0`.`Id` = `b0`.`Id`) LEFT JOIN `Eagle` AS `e0` ON `a0`.`Id` = `e0`.`Id`) LEFT JOIN `Kiwi` AS `k` ON `a0`.`Id` = `k`.`Id` -) AS `t0` ON `t`.`Id` = `t0`.`EagleId` -ORDER BY `t`.`Id` +) AS `s0` ON `s`.`Id` = `s0`.`EagleId` +ORDER BY `s`.`Id` """); } - public override void Can_insert_update_delete() - => base.Can_insert_update_delete(); + public override async Task Can_insert_update_delete() + => await base.Can_insert_update_delete(); public override async Task Can_query_all_animals(bool async) { @@ -433,9 +433,9 @@ public override async Task Can_use_of_type_rose(bool async) """); } - public override void Member_access_on_intermediate_type_works() + public override async Task Member_access_on_intermediate_type_works() { - base.Member_access_on_intermediate_type_works(); + await base.Member_access_on_intermediate_type_works(); AssertSql( """ @@ -461,9 +461,9 @@ public override async Task OfType_Union_subquery(bool async) AssertSql(" "); } - public override void Setting_foreign_key_to_a_different_type_throws() + public override async Task Setting_foreign_key_to_a_different_type_throws() { - base.Setting_foreign_key_to_a_different_type_throws(); + await base.Setting_foreign_key_to_a_different_type_throws(); AssertSql( """ @@ -491,8 +491,8 @@ public override async Task Subquery_OfType(bool async) await base.Subquery_OfType(async); AssertSql( -""" -SELECT DISTINCT `t`.`Id`, `t`.`CountryId`, `t`.`Name`, `t`.`Species`, `t`.`EagleId`, `t`.`IsFlightless`, `t`.`FoundOn`, `t`.`Discriminator` + """ +SELECT DISTINCT `s`.`Id`, `s`.`CountryId`, `s`.`Name`, `s`.`Species`, `s`.`EagleId`, `s`.`IsFlightless`, `s`.`FoundOn`, `s`.`Discriminator` FROM ( SELECT TOP 5 `a`.`Id`, `a`.`CountryId`, `a`.`Name`, `a`.`Species`, `b`.`EagleId`, `b`.`IsFlightless`, `k`.`FoundOn`, IIF(`k`.`Id` IS NOT NULL, 'Kiwi', IIF(`e`.`Id` IS NOT NULL, 'Eagle', NULL)) AS `Discriminator` FROM ((`Animals` AS `a` @@ -500,8 +500,8 @@ public override async Task Subquery_OfType(bool async) LEFT JOIN `Eagle` AS `e` ON `a`.`Id` = `e`.`Id`) LEFT JOIN `Kiwi` AS `k` ON `a`.`Id` = `k`.`Id` ORDER BY `a`.`Species` -) AS `t` -WHERE `t`.`Discriminator` = 'Kiwi' +) AS `s` +WHERE `s`.`Discriminator` = 'Kiwi' """); } @@ -549,7 +549,7 @@ public override async Task Is_operator_on_result_of_FirstOrDefault(bool async) await base.Is_operator_on_result_of_FirstOrDefault(async); AssertSql( -""" + """ SELECT `a`.`Id`, `a`.`CountryId`, `a`.`Name`, `a`.`Species`, `b`.`EagleId`, `b`.`IsFlightless`, `e`.`Group`, `k`.`FoundOn`, IIF(`k`.`Id` IS NOT NULL, 'Kiwi', IIF(`e`.`Id` IS NOT NULL, 'Eagle', NULL)) AS `Discriminator` FROM ((`Animals` AS `a` LEFT JOIN `Birds` AS `b` ON `a`.`Id` = `b`.`Id`) @@ -558,14 +558,12 @@ public override async Task Is_operator_on_result_of_FirstOrDefault(bool async) WHERE EXISTS ( SELECT 1 FROM ( - SELECT TOP 1 `a0`.`Id`, `a0`.`CountryId`, `a0`.`Name`, `a0`.`Species`, `b0`.`EagleId`, `b0`.`IsFlightless`, `e0`.`Group`, `k0`.`FoundOn`, IIF(`k0`.`Id` IS NOT NULL, 'Kiwi', IIF(`e0`.`Id` IS NOT NULL, 'Eagle', NULL)) AS `Discriminator`, `k0`.`Id` AS `Id0` - FROM ((`Animals` AS `a0` - LEFT JOIN `Birds` AS `b0` ON `a0`.`Id` = `b0`.`Id`) - LEFT JOIN `Eagle` AS `e0` ON `a0`.`Id` = `e0`.`Id`) + SELECT TOP 1 `k0`.`Id` AS `Id0` + FROM `Animals` AS `a0` LEFT JOIN `Kiwi` AS `k0` ON `a0`.`Id` = `k0`.`Id` WHERE `a0`.`Name` = 'Great spotted kiwi' - ) AS `t` - WHERE `t`.`Id0` IS NOT NULL) + ) AS `s` + WHERE `s`.`Id0` IS NOT NULL) ORDER BY `a`.`Species` """); } diff --git a/test/EFCore.Jet.FunctionalTests/Query/TPTManyToManyNoTrackingQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/TPTManyToManyNoTrackingQueryJetTest.cs index 77852348..be981de6 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/TPTManyToManyNoTrackingQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/TPTManyToManyNoTrackingQueryJetTest.cs @@ -20,9 +20,6 @@ public TPTManyToManyNoTrackingQueryJetTest(TPTManyToManyQueryJetFixture fixture, Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); } - protected override bool CanExecuteQueryString - => false; - [ConditionalFact] public virtual void Check_all_tests_overridden() => TestHelpers.AssertAllMethodsOverridden(GetType()); @@ -113,21 +110,20 @@ public override async Task Skip_navigation_count_with_predicate(bool async) AssertSql( """ -SELECT `t1`.`Id`, `t1`.`Name`, `t1`.`c` +SELECT `e0`.`Id`, `e0`.`Name`, `e0`.`c` FROM ( SELECT `e`.`Id`, `e`.`Name`, ( SELECT COUNT(*) - FROM `JoinOneToBranch` AS `j0` + FROM `JoinOneToBranch` AS `j` INNER JOIN ( - SELECT `r0`.`Id`, `r0`.`Name`, `b0`.`Number`, `l0`.`IsGreen`, IIF(`l0`.`Id` IS NOT NULL, 'EntityLeaf', NULL) AS `Discriminator` - FROM (`Roots` AS `r0` - INNER JOIN `Branches` AS `b0` ON `r0`.`Id` = `b0`.`Id`) - LEFT JOIN `Leaves` AS `l0` ON `r0`.`Id` = `l0`.`Id` - ) AS `t0` ON `j0`.`EntityBranchId` = `t0`.`Id` - WHERE `e`.`Id` = `j0`.`EntityOneId` AND (`t0`.`Name` LIKE 'L%')) AS `c` + SELECT `r`.`Id`, `r`.`Name` + FROM `Roots` AS `r` + INNER JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id` + ) AS `s` ON `j`.`EntityBranchId` = `s`.`Id` + WHERE `e`.`Id` = `j`.`EntityOneId` AND (`s`.`Name` LIKE 'L%')) AS `c` FROM `EntityOnes` AS `e` -) AS `t1` -ORDER BY `t1`.`c`, `t1`.`Id` +) AS `e0` +ORDER BY `e0`.`c`, `e0`.`Id` """); } @@ -153,16 +149,16 @@ public override async Task Skip_navigation_long_count_with_predicate(bool async) AssertSql( """ -SELECT `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name`, `t`.`ReferenceInverseId`, `t`.`c` +SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e2`.`c` FROM ( SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, ( SELECT COUNT(*) - FROM `EntityTwoEntityTwo` AS `e2` - INNER JOIN `EntityTwos` AS `e3` ON `e2`.`SelfSkipSharedLeftId` = `e3`.`Id` - WHERE `e`.`Id` = `e2`.`SelfSkipSharedRightId` AND (`e3`.`Name` LIKE 'L%')) AS `c` + FROM `EntityTwoEntityTwo` AS `e0` + INNER JOIN `EntityTwos` AS `e1` ON `e0`.`SelfSkipSharedLeftId` = `e1`.`Id` + WHERE `e`.`Id` = `e0`.`SelfSkipSharedRightId` AND (`e1`.`Name` LIKE 'L%')) AS `c` FROM `EntityTwos` AS `e` -) AS `t` -ORDER BY `t`.`c` DESC, `t`.`Id` +) AS `e2` +ORDER BY `e2`.`c` DESC, `e2`.`Id` """); } @@ -171,14 +167,14 @@ public override async Task Skip_navigation_select_many_average(bool async) await base.Skip_navigation_select_many_average(async); AssertSql( -""" -SELECT AVG(CDBL(`t`.`Key1`)) + """ +SELECT AVG(CDBL(`s`.`Key1`)) FROM `EntityTwos` AS `e` INNER JOIN ( SELECT `e1`.`Key1`, `e0`.`TwoSkipSharedId` FROM `EntityCompositeKeyEntityTwo` AS `e0` INNER JOIN `EntityCompositeKeys` AS `e1` ON `e0`.`CompositeKeySkipSharedKey1` = `e1`.`Key1` AND `e0`.`CompositeKeySkipSharedKey2` = `e1`.`Key2` AND `e0`.`CompositeKeySkipSharedKey3` = `e1`.`Key3` -) AS `t` ON `e`.`Id` = `t`.`TwoSkipSharedId` +) AS `s` ON `e`.`Id` = `s`.`TwoSkipSharedId` """); } @@ -187,14 +183,14 @@ public override async Task Skip_navigation_select_many_max(bool async) await base.Skip_navigation_select_many_max(async); AssertSql( -""" -SELECT MAX(`t`.`Key1`) + """ +SELECT MAX(`s`.`Key1`) FROM `EntityThrees` AS `e` INNER JOIN ( SELECT `e0`.`Key1`, `j`.`ThreeId` FROM `JoinThreeToCompositeKeyFull` AS `j` INNER JOIN `EntityCompositeKeys` AS `e0` ON `j`.`CompositeId1` = `e0`.`Key1` AND `j`.`CompositeId2` = `e0`.`Key2` AND `j`.`CompositeId3` = `e0`.`Key3` -) AS `t` ON `e`.`Id` = `t`.`ThreeId` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` """); } @@ -203,17 +199,17 @@ public override async Task Skip_navigation_select_many_min(bool async) await base.Skip_navigation_select_many_min(async); AssertSql( -""" -SELECT MIN(`t0`.`Id`) + """ +SELECT MIN(`s0`.`Id`) FROM `EntityThrees` AS `e` INNER JOIN ( - SELECT `t`.`Id`, `e0`.`ThreeSkipSharedId` + SELECT `s`.`Id`, `e0`.`ThreeSkipSharedId` FROM `EntityRootEntityThree` AS `e0` INNER JOIN ( SELECT `r`.`Id` FROM `Roots` AS `r` - ) AS `t` ON `e0`.`RootSkipSharedId` = `t`.`Id` -) AS `t0` ON `e`.`Id` = `t0`.`ThreeSkipSharedId` + ) AS `s` ON `e0`.`RootSkipSharedId` = `s`.`Id` +) AS `s0` ON `e`.`Id` = `s0`.`ThreeSkipSharedId` """); } @@ -222,14 +218,14 @@ public override async Task Skip_navigation_select_many_sum(bool async) await base.Skip_navigation_select_many_sum(async); AssertSql( -""" -SELECT IIF(SUM(`t`.`Key1`) IS NULL, 0, SUM(`t`.`Key1`)) + """ +SELECT IIF(SUM(`s`.`Key1`) IS NULL, 0, SUM(`s`.`Key1`)) FROM `Roots` AS `r` INNER JOIN ( SELECT `e0`.`Key1`, `e`.`RootSkipSharedId` FROM `EntityCompositeKeyEntityRoot` AS `e` INNER JOIN `EntityCompositeKeys` AS `e0` ON `e`.`CompositeKeySkipSharedKey1` = `e0`.`Key1` AND `e`.`CompositeKeySkipSharedKey2` = `e0`.`Key2` AND `e`.`CompositeKeySkipSharedKey3` = `e0`.`Key3` -) AS `t` ON `r`.`Id` = `t`.`RootSkipSharedId` +) AS `s` ON `r`.`Id` = `s`.`RootSkipSharedId` """); } @@ -383,20 +379,20 @@ public override async Task Skip_navigation_cast(bool async) await base.Skip_navigation_cast(async); AssertSql( -""" -SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `t0`.`Id`, `t0`.`Name`, `t0`.`Number`, `t0`.`IsGreen`, `t0`.`LeafId`, `t0`.`CompositeId1`, `t0`.`CompositeId2`, `t0`.`CompositeId3` + """ +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s0`.`Id`, `s0`.`Name`, `s0`.`Number`, `s0`.`IsGreen`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3` FROM `EntityCompositeKeys` AS `e` LEFT JOIN ( - SELECT `t`.`Id`, `t`.`Name`, `t`.`Number`, `t`.`IsGreen`, `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3` + SELECT `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3` FROM `JoinCompositeKeyToLeaf` AS `j` INNER JOIN ( SELECT `r`.`Id`, `r`.`Name`, `b`.`Number`, `l`.`IsGreen` FROM (`Roots` AS `r` INNER JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) INNER JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id` - ) AS `t` ON `j`.`LeafId` = `t`.`Id` -) AS `t0` ON `e`.`Key1` = `t0`.`CompositeId1` AND `e`.`Key2` = `t0`.`CompositeId2` AND `e`.`Key3` = `t0`.`CompositeId3` -ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `t0`.`LeafId`, `t0`.`CompositeId1`, `t0`.`CompositeId2`, `t0`.`CompositeId3` + ) AS `s` ON `j`.`LeafId` = `s`.`Id` +) AS `s0` ON `e`.`Key1` = `s0`.`CompositeId1` AND `e`.`Key2` = `s0`.`CompositeId2` AND `e`.`Key3` = `s0`.`CompositeId3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3` """); } @@ -405,11 +401,11 @@ public override async Task Skip_navigation_of_type(bool async) await base.Skip_navigation_of_type(async); AssertSql( -""" -SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `t0`.`Id`, `t0`.`Name`, `t0`.`Number`, `t0`.`IsGreen`, `t0`.`Discriminator`, `t0`.`RootSkipSharedId`, `t0`.`CompositeKeySkipSharedKey1`, `t0`.`CompositeKeySkipSharedKey2`, `t0`.`CompositeKeySkipSharedKey3` + """ +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s0`.`Id`, `s0`.`Name`, `s0`.`Number`, `s0`.`IsGreen`, `s0`.`Discriminator`, `s0`.`RootSkipSharedId`, `s0`.`CompositeKeySkipSharedKey1`, `s0`.`CompositeKeySkipSharedKey2`, `s0`.`CompositeKeySkipSharedKey3` FROM `EntityCompositeKeys` AS `e` LEFT JOIN ( - SELECT `t`.`Id`, `t`.`Name`, `t`.`Number`, `t`.`IsGreen`, `t`.`Discriminator`, `e0`.`RootSkipSharedId`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3` + SELECT `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s`.`Discriminator`, `e0`.`RootSkipSharedId`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3` FROM `EntityCompositeKeyEntityRoot` AS `e0` INNER JOIN ( SELECT `r`.`Id`, `r`.`Name`, `b`.`Number`, `l`.`IsGreen`, IIF(`l0`.`Id` IS NOT NULL, 'EntityLeaf2', IIF(`l`.`Id` IS NOT NULL, 'EntityLeaf', IIF(`b`.`Id` IS NOT NULL, 'EntityBranch', NULL))) AS `Discriminator` @@ -417,10 +413,10 @@ INNER JOIN ( LEFT JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) LEFT JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id`) LEFT JOIN `Leaf2s` AS `l0` ON `r`.`Id` = `l0`.`Id` - ) AS `t` ON `e0`.`RootSkipSharedId` = `t`.`Id` - WHERE `t`.`Discriminator` = 'EntityLeaf' -) AS `t0` ON `e`.`Key1` = `t0`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `t0`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `t0`.`CompositeKeySkipSharedKey3` -ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `t0`.`RootSkipSharedId`, `t0`.`CompositeKeySkipSharedKey1`, `t0`.`CompositeKeySkipSharedKey2`, `t0`.`CompositeKeySkipSharedKey3` + ) AS `s` ON `e0`.`RootSkipSharedId` = `s`.`Id` + WHERE `s`.`Discriminator` = 'EntityLeaf' +) AS `s0` ON `e`.`Key1` = `s0`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `s0`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `s0`.`CompositeKeySkipSharedKey3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s0`.`RootSkipSharedId`, `s0`.`CompositeKeySkipSharedKey1`, `s0`.`CompositeKeySkipSharedKey2`, `s0`.`CompositeKeySkipSharedKey3` """); } @@ -469,14 +465,14 @@ public override async Task Select_many_over_skip_navigation(bool async) await base.Select_many_over_skip_navigation(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`CollectionInverseId`, `t`.`Name`, `t`.`ReferenceInverseId` + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId` FROM `Roots` AS `r` INNER JOIN ( SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `e`.`RootSkipSharedId` FROM `EntityRootEntityThree` AS `e` INNER JOIN `EntityThrees` AS `e0` ON `e`.`ThreeSkipSharedId` = `e0`.`Id` -) AS `t` ON `r`.`Id` = `t`.`RootSkipSharedId` +) AS `s` ON `r`.`Id` = `s`.`RootSkipSharedId` """); } @@ -485,14 +481,14 @@ public override async Task Select_many_over_skip_navigation_where(bool async) await base.Select_many_over_skip_navigation_where(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name`, `t`.`ReferenceInverseId` + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId` FROM `EntityOnes` AS `e` LEFT JOIN ( SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `j`.`OneId` FROM `JoinOneToTwo` AS `j` INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` -) AS `t` ON `e`.`Id` = `t`.`OneId` +) AS `s` ON `e`.`Id` = `s`.`OneId` """); } @@ -561,11 +557,11 @@ public override async Task Select_many_over_skip_navigation_of_type(bool async) await base.Select_many_over_skip_navigation_of_type(async); AssertSql( -""" -SELECT `t0`.`Id`, `t0`.`Name`, `t0`.`Number`, `t0`.`IsGreen`, `t0`.`Discriminator` + """ +SELECT `s0`.`Id`, `s0`.`Name`, `s0`.`Number`, `s0`.`IsGreen`, `s0`.`Discriminator` FROM `EntityThrees` AS `e` INNER JOIN ( - SELECT `t`.`Id`, `t`.`Name`, `t`.`Number`, `t`.`IsGreen`, `t`.`Discriminator`, `e0`.`ThreeSkipSharedId` + SELECT `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s`.`Discriminator`, `e0`.`ThreeSkipSharedId` FROM `EntityRootEntityThree` AS `e0` INNER JOIN ( SELECT `r`.`Id`, `r`.`Name`, `b`.`Number`, `l`.`IsGreen`, IIF(`l0`.`Id` IS NOT NULL, 'EntityLeaf2', IIF(`l`.`Id` IS NOT NULL, 'EntityLeaf', IIF(`b`.`Id` IS NOT NULL, 'EntityBranch', NULL))) AS `Discriminator` @@ -573,9 +569,9 @@ INNER JOIN ( LEFT JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) LEFT JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id`) LEFT JOIN `Leaf2s` AS `l0` ON `r`.`Id` = `l0`.`Id` - ) AS `t` ON `e0`.`RootSkipSharedId` = `t`.`Id` - WHERE `t`.`Discriminator` IN ('EntityBranch', 'EntityLeaf') -) AS `t0` ON `e`.`Id` = `t0`.`ThreeSkipSharedId` + ) AS `s` ON `e0`.`RootSkipSharedId` = `s`.`Id` + WHERE `s`.`Discriminator` IN ('EntityBranch', 'EntityLeaf') +) AS `s0` ON `e`.`Id` = `s0`.`ThreeSkipSharedId` """); } @@ -584,19 +580,19 @@ public override async Task Select_many_over_skip_navigation_cast(bool async) await base.Select_many_over_skip_navigation_cast(async); AssertSql( -""" -SELECT `t0`.`Id`, `t0`.`Name`, `t0`.`Number`, `t0`.`IsGreen`, `t0`.`Discriminator` + """ +SELECT `s0`.`Id`, `s0`.`Name`, `s0`.`Number`, `s0`.`IsGreen`, `s0`.`Discriminator` FROM `EntityOnes` AS `e` INNER JOIN ( - SELECT `t`.`Id`, `t`.`Name`, `t`.`Number`, `t`.`IsGreen`, `t`.`Discriminator`, `j`.`EntityOneId` + SELECT `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s`.`Discriminator`, `j`.`EntityOneId` FROM `JoinOneToBranch` AS `j` INNER JOIN ( SELECT `r`.`Id`, `r`.`Name`, `b`.`Number`, `l`.`IsGreen`, IIF(`l`.`Id` IS NOT NULL, 'EntityLeaf', NULL) AS `Discriminator` FROM (`Roots` AS `r` INNER JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) LEFT JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id` - ) AS `t` ON `j`.`EntityBranchId` = `t`.`Id` -) AS `t0` ON `e`.`Id` = `t0`.`EntityOneId` + ) AS `s` ON `j`.`EntityBranchId` = `s`.`Id` +) AS `s0` ON `e`.`Id` = `s0`.`EntityOneId` """); } @@ -605,15 +601,15 @@ public override async Task Select_skip_navigation(bool async) await base.Select_skip_navigation(async); AssertSql( -""" -SELECT `e`.`Id`, `t`.`Id`, `t`.`Name`, `t`.`LeftId`, `t`.`RightId` + """ +SELECT `e`.`Id`, `s`.`Id`, `s`.`Name`, `s`.`LeftId`, `s`.`RightId` FROM `EntityOnes` AS `e` LEFT JOIN ( SELECT `e0`.`Id`, `e0`.`Name`, `j`.`LeftId`, `j`.`RightId` FROM `JoinOneSelfPayload` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`LeftId` = `e0`.`Id` -) AS `t` ON `e`.`Id` = `t`.`RightId` -ORDER BY `e`.`Id`, `t`.`LeftId`, `t`.`RightId` +) AS `s` ON `e`.`Id` = `s`.`RightId` +ORDER BY `e`.`Id`, `s`.`LeftId`, `s`.`RightId` """); } @@ -622,25 +618,25 @@ public override async Task Select_skip_navigation_multiple(bool async) await base.Select_skip_navigation_multiple(async); AssertSql( -""" -SELECT `e`.`Id`, `t`.`Id`, `t`.`CollectionInverseId`, `t`.`Name`, `t`.`ReferenceInverseId`, `t`.`ThreeId`, `t`.`TwoId`, `t0`.`Id`, `t0`.`CollectionInverseId`, `t0`.`ExtraId`, `t0`.`Name`, `t0`.`ReferenceInverseId`, `t0`.`SelfSkipSharedLeftId`, `t0`.`SelfSkipSharedRightId`, `t1`.`Key1`, `t1`.`Key2`, `t1`.`Key3`, `t1`.`Name`, `t1`.`TwoSkipSharedId`, `t1`.`CompositeKeySkipSharedKey1`, `t1`.`CompositeKeySkipSharedKey2`, `t1`.`CompositeKeySkipSharedKey3` + """ +SELECT `e`.`Id`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId`, `s`.`ThreeId`, `s`.`TwoId`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name`, `s0`.`ReferenceInverseId`, `s0`.`SelfSkipSharedLeftId`, `s0`.`SelfSkipSharedRightId`, `s1`.`Key1`, `s1`.`Key2`, `s1`.`Key3`, `s1`.`Name`, `s1`.`TwoSkipSharedId`, `s1`.`CompositeKeySkipSharedKey1`, `s1`.`CompositeKeySkipSharedKey2`, `s1`.`CompositeKeySkipSharedKey3` FROM ((`EntityTwos` AS `e` LEFT JOIN ( SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `j`.`ThreeId`, `j`.`TwoId` FROM `JoinTwoToThree` AS `j` INNER JOIN `EntityThrees` AS `e0` ON `j`.`ThreeId` = `e0`.`Id` -) AS `t` ON `e`.`Id` = `t`.`TwoId`) +) AS `s` ON `e`.`Id` = `s`.`TwoId`) LEFT JOIN ( SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e1`.`SelfSkipSharedLeftId`, `e1`.`SelfSkipSharedRightId` FROM `EntityTwoEntityTwo` AS `e1` INNER JOIN `EntityTwos` AS `e2` ON `e1`.`SelfSkipSharedLeftId` = `e2`.`Id` -) AS `t0` ON `e`.`Id` = `t0`.`SelfSkipSharedRightId`) +) AS `s0` ON `e`.`Id` = `s0`.`SelfSkipSharedRightId`) LEFT JOIN ( SELECT `e4`.`Key1`, `e4`.`Key2`, `e4`.`Key3`, `e4`.`Name`, `e3`.`TwoSkipSharedId`, `e3`.`CompositeKeySkipSharedKey1`, `e3`.`CompositeKeySkipSharedKey2`, `e3`.`CompositeKeySkipSharedKey3` FROM `EntityCompositeKeyEntityTwo` AS `e3` INNER JOIN `EntityCompositeKeys` AS `e4` ON `e3`.`CompositeKeySkipSharedKey1` = `e4`.`Key1` AND `e3`.`CompositeKeySkipSharedKey2` = `e4`.`Key2` AND `e3`.`CompositeKeySkipSharedKey3` = `e4`.`Key3` -) AS `t1` ON `e`.`Id` = `t1`.`TwoSkipSharedId` -ORDER BY `e`.`Id`, `t`.`ThreeId`, `t`.`TwoId`, `t`.`Id`, `t0`.`SelfSkipSharedLeftId`, `t0`.`SelfSkipSharedRightId`, `t0`.`Id`, `t1`.`TwoSkipSharedId`, `t1`.`CompositeKeySkipSharedKey1`, `t1`.`CompositeKeySkipSharedKey2`, `t1`.`CompositeKeySkipSharedKey3`, `t1`.`Key1`, `t1`.`Key2` +) AS `s1` ON `e`.`Id` = `s1`.`TwoSkipSharedId` +ORDER BY `e`.`Id`, `s`.`ThreeId`, `s`.`TwoId`, `s`.`Id`, `s0`.`SelfSkipSharedLeftId`, `s0`.`SelfSkipSharedRightId`, `s0`.`Id`, `s1`.`TwoSkipSharedId`, `s1`.`CompositeKeySkipSharedKey1`, `s1`.`CompositeKeySkipSharedKey2`, `s1`.`CompositeKeySkipSharedKey3`, `s1`.`Key1`, `s1`.`Key2` """); } @@ -670,11 +666,11 @@ public override async Task Include_skip_navigation(bool async) await base.Include_skip_navigation(async); AssertSql( -""" -SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name`, `t0`.`Id`, `t0`.`Name`, `t0`.`Number`, `t0`.`Slumber`, `t0`.`IsGreen`, `t0`.`IsBrown`, `t0`.`Discriminator`, `t0`.`RootSkipSharedId`, `t0`.`CompositeKeySkipSharedKey1`, `t0`.`CompositeKeySkipSharedKey2`, `t0`.`CompositeKeySkipSharedKey3` + """ +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name`, `s0`.`Id`, `s0`.`Name`, `s0`.`Number`, `s0`.`Slumber`, `s0`.`IsGreen`, `s0`.`IsBrown`, `s0`.`Discriminator`, `s0`.`RootSkipSharedId`, `s0`.`CompositeKeySkipSharedKey1`, `s0`.`CompositeKeySkipSharedKey2`, `s0`.`CompositeKeySkipSharedKey3` FROM `EntityCompositeKeys` AS `e` LEFT JOIN ( - SELECT `t`.`Id`, `t`.`Name`, `t`.`Number`, `t`.`Slumber`, `t`.`IsGreen`, `t`.`IsBrown`, `t`.`Discriminator`, `e0`.`RootSkipSharedId`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3` + SELECT `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`Slumber`, `s`.`IsGreen`, `s`.`IsBrown`, `s`.`Discriminator`, `e0`.`RootSkipSharedId`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3` FROM `EntityCompositeKeyEntityRoot` AS `e0` INNER JOIN ( SELECT `r`.`Id`, `r`.`Name`, `b`.`Number`, `b0`.`Slumber`, `l`.`IsGreen`, `l0`.`IsBrown`, IIF(`l0`.`Id` IS NOT NULL, 'EntityLeaf2', IIF(`l`.`Id` IS NOT NULL, 'EntityLeaf', IIF(`b`.`Id` IS NOT NULL, 'EntityBranch', NULL))) AS `Discriminator` @@ -683,9 +679,9 @@ INNER JOIN ( LEFT JOIN `Branch2s` AS `b0` ON `r`.`Id` = `b0`.`Id`) LEFT JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id`) LEFT JOIN `Leaf2s` AS `l0` ON `r`.`Id` = `l0`.`Id` - ) AS `t` ON `e0`.`RootSkipSharedId` = `t`.`Id` -) AS `t0` ON `e`.`Key1` = `t0`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `t0`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `t0`.`CompositeKeySkipSharedKey3` -ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `t0`.`RootSkipSharedId`, `t0`.`CompositeKeySkipSharedKey1`, `t0`.`CompositeKeySkipSharedKey2`, `t0`.`CompositeKeySkipSharedKey3` + ) AS `s` ON `e0`.`RootSkipSharedId` = `s`.`Id` +) AS `s0` ON `e`.`Key1` = `s0`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `s0`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `s0`.`CompositeKeySkipSharedKey3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s0`.`RootSkipSharedId`, `s0`.`CompositeKeySkipSharedKey1`, `s0`.`CompositeKeySkipSharedKey2`, `s0`.`CompositeKeySkipSharedKey3` """); } @@ -694,16 +690,16 @@ public override async Task Include_skip_navigation_then_reference(bool async) await base.Include_skip_navigation_then_reference(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `t`.`Id`, `t`.`Name`, `t`.`Id0`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name0`, `t`.`ReferenceInverseId`, `t`.`OneId`, `t`.`TwoId` + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `s`.`OneId`, `s`.`TwoId` FROM `EntityTwos` AS `e` LEFT JOIN ( SELECT `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `j`.`OneId`, `j`.`TwoId` FROM (`JoinOneToTwo` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` -) AS `t` ON `e`.`Id` = `t`.`TwoId` -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`TwoId`, `t`.`Id` +) AS `s` ON `e`.`Id` = `s`.`TwoId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id` """); } @@ -712,25 +708,25 @@ public override async Task Include_skip_navigation_then_include_skip_navigation( await base.Include_skip_navigation_then_include_skip_navigation(async); AssertSql( -""" -SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name`, `t1`.`Id`, `t1`.`Name`, `t1`.`Number`, `t1`.`IsGreen`, `t1`.`LeafId`, `t1`.`CompositeId1`, `t1`.`CompositeId2`, `t1`.`CompositeId3`, `t1`.`Id0`, `t1`.`Name0`, `t1`.`EntityBranchId`, `t1`.`EntityOneId` + """ +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name`, `s1`.`Id`, `s1`.`Name`, `s1`.`Number`, `s1`.`IsGreen`, `s1`.`LeafId`, `s1`.`CompositeId1`, `s1`.`CompositeId2`, `s1`.`CompositeId3`, `s1`.`Id0`, `s1`.`Name0`, `s1`.`EntityBranchId`, `s1`.`EntityOneId` FROM `EntityCompositeKeys` AS `e` LEFT JOIN ( - SELECT `t`.`Id`, `t`.`Name`, `t`.`Number`, `t`.`IsGreen`, `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `t0`.`Id` AS `Id0`, `t0`.`Name` AS `Name0`, `t0`.`EntityBranchId`, `t0`.`EntityOneId` + SELECT `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `s0`.`Id` AS `Id0`, `s0`.`Name` AS `Name0`, `s0`.`EntityBranchId`, `s0`.`EntityOneId` FROM (`JoinCompositeKeyToLeaf` AS `j` INNER JOIN ( SELECT `r`.`Id`, `r`.`Name`, `b`.`Number`, `l`.`IsGreen` FROM (`Roots` AS `r` INNER JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) INNER JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id` - ) AS `t` ON `j`.`LeafId` = `t`.`Id`) + ) AS `s` ON `j`.`LeafId` = `s`.`Id`) LEFT JOIN ( SELECT `e0`.`Id`, `e0`.`Name`, `j0`.`EntityBranchId`, `j0`.`EntityOneId` FROM `JoinOneToBranch` AS `j0` INNER JOIN `EntityOnes` AS `e0` ON `j0`.`EntityOneId` = `e0`.`Id` - ) AS `t0` ON `t`.`Id` = `t0`.`EntityBranchId` -) AS `t1` ON `e`.`Key1` = `t1`.`CompositeId1` AND `e`.`Key2` = `t1`.`CompositeId2` AND `e`.`Key3` = `t1`.`CompositeId3` -ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `t1`.`LeafId`, `t1`.`CompositeId1`, `t1`.`CompositeId2`, `t1`.`CompositeId3`, `t1`.`Id`, `t1`.`EntityBranchId`, `t1`.`EntityOneId` + ) AS `s0` ON `s`.`Id` = `s0`.`EntityBranchId` +) AS `s1` ON `e`.`Key1` = `s1`.`CompositeId1` AND `e`.`Key2` = `s1`.`CompositeId2` AND `e`.`Key3` = `s1`.`CompositeId3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s1`.`LeafId`, `s1`.`CompositeId1`, `s1`.`CompositeId2`, `s1`.`CompositeId3`, `s1`.`Id`, `s1`.`EntityBranchId`, `s1`.`EntityOneId` """); } @@ -739,11 +735,11 @@ public override async Task Include_skip_navigation_then_include_reference_and_sk await base.Include_skip_navigation_then_include_reference_and_skip_navigation(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `t0`.`Id`, `t0`.`Name`, `t0`.`Id0`, `t0`.`CollectionInverseId`, `t0`.`ExtraId`, `t0`.`Name0`, `t0`.`ReferenceInverseId`, `t0`.`OneId`, `t0`.`ThreeId`, `t0`.`Id1`, `t0`.`Name1`, `t0`.`LeftId`, `t0`.`RightId` + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s0`.`Id`, `s0`.`Name`, `s0`.`Id0`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name0`, `s0`.`ReferenceInverseId`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Id1`, `s0`.`Name1`, `s0`.`LeftId`, `s0`.`RightId` FROM `EntityThrees` AS `e` LEFT JOIN ( - SELECT `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `j`.`OneId`, `j`.`ThreeId`, `t`.`Id` AS `Id1`, `t`.`Name` AS `Name1`, `t`.`LeftId`, `t`.`RightId` + SELECT `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `j`.`OneId`, `j`.`ThreeId`, `s`.`Id` AS `Id1`, `s`.`Name` AS `Name1`, `s`.`LeftId`, `s`.`RightId` FROM ((`JoinOneToThreePayloadFull` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId`) @@ -751,9 +747,9 @@ LEFT JOIN ( SELECT `e2`.`Id`, `e2`.`Name`, `j0`.`LeftId`, `j0`.`RightId` FROM `JoinOneSelfPayload` AS `j0` INNER JOIN `EntityOnes` AS `e2` ON `j0`.`RightId` = `e2`.`Id` - ) AS `t` ON `e0`.`Id` = `t`.`LeftId` -) AS `t0` ON `e`.`Id` = `t0`.`ThreeId` -ORDER BY `e`.`Id`, `t0`.`OneId`, `t0`.`ThreeId`, `t0`.`Id`, `t0`.`Id0`, `t0`.`LeftId`, `t0`.`RightId` + ) AS `s` ON `e0`.`Id` = `s`.`LeftId` +) AS `s0` ON `e`.`Id` = `s0`.`ThreeId` +ORDER BY `e`.`Id`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Id`, `s0`.`Id0`, `s0`.`LeftId`, `s0`.`RightId` """); } @@ -762,16 +758,16 @@ public override async Task Include_skip_navigation_and_reference(bool async) await base.Include_skip_navigation_and_reference(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `e0`.`Id`, `t`.`Id`, `t`.`Name`, `t`.`OneSkipSharedId`, `t`.`TwoSkipSharedId`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId` + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `e0`.`Id`, `s`.`Id`, `s`.`Name`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId` FROM (`EntityTwos` AS `e` LEFT JOIN `EntityThrees` AS `e0` ON `e`.`Id` = `e0`.`ReferenceInverseId`) LEFT JOIN ( SELECT `e2`.`Id`, `e2`.`Name`, `e1`.`OneSkipSharedId`, `e1`.`TwoSkipSharedId` FROM `EntityOneEntityTwo` AS `e1` INNER JOIN `EntityOnes` AS `e2` ON `e1`.`OneSkipSharedId` = `e2`.`Id` -) AS `t` ON `e`.`Id` = `t`.`TwoSkipSharedId` -ORDER BY `e`.`Id`, `e0`.`Id`, `t`.`OneSkipSharedId`, `t`.`TwoSkipSharedId` +) AS `s` ON `e`.`Id` = `s`.`TwoSkipSharedId` +ORDER BY `e`.`Id`, `e0`.`Id`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId` """); } @@ -780,16 +776,16 @@ public override async Task Filtered_include_skip_navigation_where(bool async) await base.Filtered_include_skip_navigation_where(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `t`.`Id`, `t`.`Name`, `t`.`OneId`, `t`.`ThreeId` + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`Id`, `s`.`Name`, `s`.`OneId`, `s`.`ThreeId` FROM `EntityThrees` AS `e` LEFT JOIN ( SELECT `e0`.`Id`, `e0`.`Name`, `j`.`OneId`, `j`.`ThreeId` FROM `JoinOneToThreePayloadFullShared` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` WHERE `e0`.`Id` < 10 -) AS `t` ON `e`.`Id` = `t`.`ThreeId` -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`ThreeId` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId` """); } @@ -798,15 +794,15 @@ public override async Task Filtered_include_skip_navigation_order_by(bool async) await base.Filtered_include_skip_navigation_order_by(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name`, `t`.`ReferenceInverseId`, `t`.`ThreeId`, `t`.`TwoId` + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId`, `s`.`ThreeId`, `s`.`TwoId` FROM `EntityThrees` AS `e` LEFT JOIN ( SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `j`.`ThreeId`, `j`.`TwoId` FROM `JoinTwoToThree` AS `j` INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` -) AS `t` ON `e`.`Id` = `t`.`ThreeId` -ORDER BY `e`.`Id`, `t`.`Id`, `t`.`ThreeId` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`Id`, `s`.`ThreeId` """); } @@ -878,15 +874,15 @@ public override async Task Filtered_then_include_skip_navigation_where(bool asyn await base.Filtered_then_include_skip_navigation_where(async); AssertSql( -""" -SELECT `r`.`Id`, `r`.`Name`, `b`.`Number`, `b0`.`Slumber`, `l`.`IsGreen`, `l0`.`IsBrown`, IIF(`l0`.`Id` IS NOT NULL, 'EntityLeaf2', IIF(`l`.`Id` IS NOT NULL, 'EntityLeaf', IIF(`b`.`Id` IS NOT NULL, 'EntityBranch', NULL))) AS `Discriminator`, `t0`.`Id`, `t0`.`CollectionInverseId`, `t0`.`Name`, `t0`.`ReferenceInverseId`, `t0`.`RootSkipSharedId`, `t0`.`ThreeSkipSharedId`, `t0`.`Id0`, `t0`.`Name0`, `t0`.`OneId`, `t0`.`ThreeId` + """ +SELECT `r`.`Id`, `r`.`Name`, `b`.`Number`, `b0`.`Slumber`, `l`.`IsGreen`, `l0`.`IsBrown`, IIF(`l0`.`Id` IS NOT NULL, 'EntityLeaf2', IIF(`l`.`Id` IS NOT NULL, 'EntityLeaf', IIF(`b`.`Id` IS NOT NULL, 'EntityBranch', NULL))) AS `Discriminator`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`Name`, `s0`.`ReferenceInverseId`, `s0`.`RootSkipSharedId`, `s0`.`ThreeSkipSharedId`, `s0`.`Id0`, `s0`.`Name0`, `s0`.`OneId`, `s0`.`ThreeId` FROM ((((`Roots` AS `r` LEFT JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) LEFT JOIN `Branch2s` AS `b0` ON `r`.`Id` = `b0`.`Id`) LEFT JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id`) LEFT JOIN `Leaf2s` AS `l0` ON `r`.`Id` = `l0`.`Id`) LEFT JOIN ( - SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `e`.`RootSkipSharedId`, `e`.`ThreeSkipSharedId`, `t`.`Id` AS `Id0`, `t`.`Name` AS `Name0`, `t`.`OneId`, `t`.`ThreeId` + SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `e`.`RootSkipSharedId`, `e`.`ThreeSkipSharedId`, `s`.`Id` AS `Id0`, `s`.`Name` AS `Name0`, `s`.`OneId`, `s`.`ThreeId` FROM (`EntityRootEntityThree` AS `e` INNER JOIN `EntityThrees` AS `e0` ON `e`.`ThreeSkipSharedId` = `e0`.`Id`) LEFT JOIN ( @@ -894,9 +890,9 @@ LEFT JOIN ( FROM `JoinOneToThreePayloadFullShared` AS `j` INNER JOIN `EntityOnes` AS `e1` ON `j`.`OneId` = `e1`.`Id` WHERE `e1`.`Id` < 10 - ) AS `t` ON `e0`.`Id` = `t`.`ThreeId` -) AS `t0` ON `r`.`Id` = `t0`.`RootSkipSharedId` -ORDER BY `r`.`Id`, `t0`.`RootSkipSharedId`, `t0`.`ThreeSkipSharedId`, `t0`.`Id`, `t0`.`OneId`, `t0`.`ThreeId` + ) AS `s` ON `e0`.`Id` = `s`.`ThreeId` +) AS `s0` ON `r`.`Id` = `s0`.`RootSkipSharedId` +ORDER BY `r`.`Id`, `s0`.`RootSkipSharedId`, `s0`.`ThreeSkipSharedId`, `s0`.`Id`, `s0`.`OneId`, `s0`.`ThreeId` """); } @@ -939,23 +935,23 @@ public override async Task Filtered_include_skip_navigation_where_then_include_s await base.Filtered_include_skip_navigation_where_then_include_skip_navigation(async); AssertSql( -""" -SELECT `r`.`Id`, `r`.`Name`, `b`.`Number`, `l`.`IsGreen`, `t0`.`Key1`, `t0`.`Key2`, `t0`.`Key3`, `t0`.`Name`, `t0`.`LeafId`, `t0`.`CompositeId1`, `t0`.`CompositeId2`, `t0`.`CompositeId3`, `t0`.`Id`, `t0`.`CollectionInverseId`, `t0`.`ExtraId`, `t0`.`Name0`, `t0`.`ReferenceInverseId`, `t0`.`TwoSkipSharedId`, `t0`.`CompositeKeySkipSharedKey1`, `t0`.`CompositeKeySkipSharedKey2`, `t0`.`CompositeKeySkipSharedKey3` + """ +SELECT `r`.`Id`, `r`.`Name`, `b`.`Number`, `l`.`IsGreen`, `s0`.`Key1`, `s0`.`Key2`, `s0`.`Key3`, `s0`.`Name`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name0`, `s0`.`ReferenceInverseId`, `s0`.`TwoSkipSharedId`, `s0`.`CompositeKeySkipSharedKey1`, `s0`.`CompositeKeySkipSharedKey2`, `s0`.`CompositeKeySkipSharedKey3` FROM ((`Roots` AS `r` INNER JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) INNER JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id`) LEFT JOIN ( - SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name`, `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name` AS `Name0`, `t`.`ReferenceInverseId`, `t`.`TwoSkipSharedId`, `t`.`CompositeKeySkipSharedKey1`, `t`.`CompositeKeySkipSharedKey2`, `t`.`CompositeKeySkipSharedKey3` + SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name`, `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name` AS `Name0`, `s`.`ReferenceInverseId`, `s`.`TwoSkipSharedId`, `s`.`CompositeKeySkipSharedKey1`, `s`.`CompositeKeySkipSharedKey2`, `s`.`CompositeKeySkipSharedKey3` FROM (`JoinCompositeKeyToLeaf` AS `j` INNER JOIN `EntityCompositeKeys` AS `e` ON `j`.`CompositeId1` = `e`.`Key1` AND `j`.`CompositeId2` = `e`.`Key2` AND `j`.`CompositeId3` = `e`.`Key3`) LEFT JOIN ( SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name`, `e1`.`ReferenceInverseId`, `e0`.`TwoSkipSharedId`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3` FROM `EntityCompositeKeyEntityTwo` AS `e0` INNER JOIN `EntityTwos` AS `e1` ON `e0`.`TwoSkipSharedId` = `e1`.`Id` - ) AS `t` ON `e`.`Key1` = `t`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `t`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `t`.`CompositeKeySkipSharedKey3` + ) AS `s` ON `e`.`Key1` = `s`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `s`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `s`.`CompositeKeySkipSharedKey3` WHERE `e`.`Key1` < 5 -) AS `t0` ON `r`.`Id` = `t0`.`LeafId` -ORDER BY `r`.`Id`, `t0`.`LeafId`, `t0`.`CompositeId1`, `t0`.`CompositeId2`, `t0`.`CompositeId3`, `t0`.`Key1`, `t0`.`Key2`, `t0`.`Key3`, `t0`.`TwoSkipSharedId`, `t0`.`CompositeKeySkipSharedKey1`, `t0`.`CompositeKeySkipSharedKey2`, `t0`.`CompositeKeySkipSharedKey3` +) AS `s0` ON `r`.`Id` = `s0`.`LeafId` +ORDER BY `r`.`Id`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Key1`, `s0`.`Key2`, `s0`.`Key3`, `s0`.`TwoSkipSharedId`, `s0`.`CompositeKeySkipSharedKey1`, `s0`.`CompositeKeySkipSharedKey2`, `s0`.`CompositeKeySkipSharedKey3` """); } @@ -1020,8 +1016,8 @@ public override async Task Filter_include_on_skip_navigation_combined(bool async await base.Filter_include_on_skip_navigation_combined(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `t`.`Id`, `t`.`Name`, `t`.`Id0`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name0`, `t`.`ReferenceInverseId`, `t`.`OneId`, `t`.`TwoId`, `t`.`Id1`, `t`.`CollectionInverseId0`, `t`.`ExtraId0`, `t`.`Name1`, `t`.`ReferenceInverseId0` + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id1`, `s`.`CollectionInverseId0`, `s`.`ExtraId0`, `s`.`Name1`, `s`.`ReferenceInverseId0` FROM `EntityTwos` AS `e` LEFT JOIN ( SELECT `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `j`.`OneId`, `j`.`TwoId`, `e2`.`Id` AS `Id1`, `e2`.`CollectionInverseId` AS `CollectionInverseId0`, `e2`.`ExtraId` AS `ExtraId0`, `e2`.`Name` AS `Name1`, `e2`.`ReferenceInverseId` AS `ReferenceInverseId0` @@ -1030,8 +1026,8 @@ LEFT JOIN ( LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId`) LEFT JOIN `EntityTwos` AS `e2` ON `e0`.`Id` = `e2`.`CollectionInverseId` WHERE `e0`.`Id` < 10 -) AS `t` ON `e`.`Id` = `t`.`TwoId` -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`TwoId`, `t`.`Id`, `t`.`Id0` +) AS `s` ON `e`.`Id` = `s`.`TwoId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s`.`Id0` """); } @@ -1080,21 +1076,21 @@ public override async Task Filtered_include_on_skip_navigation_then_filtered_inc await base.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `t0`.`Id`, `t0`.`Name`, `t0`.`OneId`, `t0`.`ThreeId`, `t0`.`Id0`, `t0`.`CollectionInverseId`, `t0`.`ExtraId`, `t0`.`Name0`, `t0`.`ReferenceInverseId` + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`Id`, `s`.`Name`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId` FROM `EntityThrees` AS `e` LEFT JOIN ( - SELECT `e0`.`Id`, `e0`.`Name`, `j`.`OneId`, `j`.`ThreeId`, `t`.`Id` AS `Id0`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name` AS `Name0`, `t`.`ReferenceInverseId` + SELECT `e0`.`Id`, `e0`.`Name`, `j`.`OneId`, `j`.`ThreeId`, `e2`.`Id` AS `Id0`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name` AS `Name0`, `e2`.`ReferenceInverseId` FROM (`JoinOneToThreePayloadFull` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) LEFT JOIN ( SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name`, `e1`.`ReferenceInverseId` FROM `EntityTwos` AS `e1` WHERE `e1`.`Id` < 5 - ) AS `t` ON `e0`.`Id` = `t`.`CollectionInverseId` + ) AS `e2` ON `e0`.`Id` = `e2`.`CollectionInverseId` WHERE `e0`.`Id` > 15 -) AS `t0` ON `e`.`Id` = `t0`.`ThreeId` -ORDER BY `e`.`Id`, `t0`.`OneId`, `t0`.`ThreeId`, `t0`.`Id` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id` """); } @@ -1103,21 +1099,21 @@ public override async Task Filtered_include_on_navigation_then_filtered_include_ await base.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`Name`, `t0`.`Id`, `t0`.`CollectionInverseId`, `t0`.`ExtraId`, `t0`.`Name`, `t0`.`ReferenceInverseId`, `t0`.`Id0`, `t0`.`CollectionInverseId0`, `t0`.`Name0`, `t0`.`ReferenceInverseId0`, `t0`.`ThreeId`, `t0`.`TwoId` + """ +SELECT `e`.`Id`, `e`.`Name`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name`, `s0`.`ReferenceInverseId`, `s0`.`Id0`, `s0`.`CollectionInverseId0`, `s0`.`Name0`, `s0`.`ReferenceInverseId0`, `s0`.`ThreeId`, `s0`.`TwoId` FROM `EntityOnes` AS `e` LEFT JOIN ( - SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `t`.`Id` AS `Id0`, `t`.`CollectionInverseId` AS `CollectionInverseId0`, `t`.`Name` AS `Name0`, `t`.`ReferenceInverseId` AS `ReferenceInverseId0`, `t`.`ThreeId`, `t`.`TwoId` + SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `s`.`Id` AS `Id0`, `s`.`CollectionInverseId` AS `CollectionInverseId0`, `s`.`Name` AS `Name0`, `s`.`ReferenceInverseId` AS `ReferenceInverseId0`, `s`.`ThreeId`, `s`.`TwoId` FROM `EntityTwos` AS `e0` LEFT JOIN ( SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`Name`, `e1`.`ReferenceInverseId`, `j`.`ThreeId`, `j`.`TwoId` FROM `JoinTwoToThree` AS `j` INNER JOIN `EntityThrees` AS `e1` ON `j`.`ThreeId` = `e1`.`Id` WHERE `e1`.`Id` < 5 - ) AS `t` ON `e0`.`Id` = `t`.`TwoId` + ) AS `s` ON `e0`.`Id` = `s`.`TwoId` WHERE `e0`.`Id` > 15 -) AS `t0` ON `e`.`Id` = `t0`.`CollectionInverseId` -ORDER BY `e`.`Id`, `t0`.`Id`, `t0`.`ThreeId`, `t0`.`TwoId` +) AS `s0` ON `e`.`Id` = `s0`.`CollectionInverseId` +ORDER BY `e`.`Id`, `s0`.`Id`, `s0`.`ThreeId`, `s0`.`TwoId` """); } @@ -1163,17 +1159,17 @@ public override async Task Include_skip_navigation_split(bool async) await base.Include_skip_navigation_split(async); AssertSql( -""" + """ SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name` FROM `EntityCompositeKeys` AS `e` ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3` """, -// -""" -SELECT `t0`.`Id`, `t0`.`Name`, `t0`.`Number`, `t0`.`Slumber`, `t0`.`IsGreen`, `t0`.`IsBrown`, `t0`.`Discriminator`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3` + // + """ +SELECT `s0`.`Id`, `s0`.`Name`, `s0`.`Number`, `s0`.`Slumber`, `s0`.`IsGreen`, `s0`.`IsBrown`, `s0`.`Discriminator`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3` FROM `EntityCompositeKeys` AS `e` INNER JOIN ( - SELECT `t`.`Id`, `t`.`Name`, `t`.`Number`, `t`.`Slumber`, `t`.`IsGreen`, `t`.`IsBrown`, `t`.`Discriminator`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3` + SELECT `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`Slumber`, `s`.`IsGreen`, `s`.`IsBrown`, `s`.`Discriminator`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3` FROM `EntityCompositeKeyEntityRoot` AS `e0` INNER JOIN ( SELECT `r`.`Id`, `r`.`Name`, `b`.`Number`, `b0`.`Slumber`, `l`.`IsGreen`, `l0`.`IsBrown`, IIF(`l0`.`Id` IS NOT NULL, 'EntityLeaf2', IIF(`l`.`Id` IS NOT NULL, 'EntityLeaf', IIF(`b`.`Id` IS NOT NULL, 'EntityBranch', NULL))) AS `Discriminator` @@ -1182,8 +1178,8 @@ INNER JOIN ( LEFT JOIN `Branch2s` AS `b0` ON `r`.`Id` = `b0`.`Id`) LEFT JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id`) LEFT JOIN `Leaf2s` AS `l0` ON `r`.`Id` = `l0`.`Id` - ) AS `t` ON `e0`.`RootSkipSharedId` = `t`.`Id` -) AS `t0` ON `e`.`Key1` = `t0`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `t0`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `t0`.`CompositeKeySkipSharedKey3` + ) AS `s` ON `e0`.`RootSkipSharedId` = `s`.`Id` +) AS `s0` ON `e`.`Key1` = `s0`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `s0`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `s0`.`CompositeKeySkipSharedKey3` ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3` """); } @@ -1193,21 +1189,21 @@ public override async Task Include_skip_navigation_then_reference_split(bool asy await base.Include_skip_navigation_then_reference_split(async); AssertSql( -""" + """ SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId` FROM `EntityTwos` AS `e` ORDER BY `e`.`Id` """, -// -""" -SELECT `t`.`Id`, `t`.`Name`, `t`.`Id0`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name0`, `t`.`ReferenceInverseId`, `e`.`Id` + // + """ +SELECT `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `e`.`Id` FROM `EntityTwos` AS `e` INNER JOIN ( SELECT `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `j`.`TwoId` FROM (`JoinOneToTwo` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` -) AS `t` ON `e`.`Id` = `t`.`TwoId` +) AS `s` ON `e`.`Id` = `s`.`TwoId` ORDER BY `e`.`Id` """); } @@ -1217,48 +1213,48 @@ public override async Task Include_skip_navigation_then_include_skip_navigation_ await base.Include_skip_navigation_then_include_skip_navigation_split(async); AssertSql( -""" + """ SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name` FROM `EntityCompositeKeys` AS `e` ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3` """, - // - """ -SELECT `t0`.`Id`, `t0`.`Name`, `t0`.`Number`, `t0`.`IsGreen`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `t0`.`LeafId`, `t0`.`CompositeId1`, `t0`.`CompositeId2`, `t0`.`CompositeId3` + // + """ +SELECT `s0`.`Id`, `s0`.`Name`, `s0`.`Number`, `s0`.`IsGreen`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3` FROM `EntityCompositeKeys` AS `e` INNER JOIN ( - SELECT `t`.`Id`, `t`.`Name`, `t`.`Number`, `t`.`IsGreen`, `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3` + SELECT `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3` FROM `JoinCompositeKeyToLeaf` AS `j` INNER JOIN ( SELECT `r`.`Id`, `r`.`Name`, `b`.`Number`, `l`.`IsGreen` FROM (`Roots` AS `r` INNER JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) INNER JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id` - ) AS `t` ON `j`.`LeafId` = `t`.`Id` -) AS `t0` ON `e`.`Key1` = `t0`.`CompositeId1` AND `e`.`Key2` = `t0`.`CompositeId2` AND `e`.`Key3` = `t0`.`CompositeId3` -ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `t0`.`LeafId`, `t0`.`CompositeId1`, `t0`.`CompositeId2`, `t0`.`CompositeId3`, `t0`.`Id` + ) AS `s` ON `j`.`LeafId` = `s`.`Id` +) AS `s0` ON `e`.`Key1` = `s0`.`CompositeId1` AND `e`.`Key2` = `s0`.`CompositeId2` AND `e`.`Key3` = `s0`.`CompositeId3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Id` """, - // - """ -SELECT `t1`.`Id`, `t1`.`Name`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `t0`.`LeafId`, `t0`.`CompositeId1`, `t0`.`CompositeId2`, `t0`.`CompositeId3`, `t0`.`Id` + // + """ +SELECT `s1`.`Id`, `s1`.`Name`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Id` FROM (`EntityCompositeKeys` AS `e` INNER JOIN ( - SELECT `t`.`Id`, `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3` + SELECT `s`.`Id`, `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3` FROM `JoinCompositeKeyToLeaf` AS `j` INNER JOIN ( SELECT `r`.`Id` FROM (`Roots` AS `r` INNER JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) INNER JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id` - ) AS `t` ON `j`.`LeafId` = `t`.`Id` -) AS `t0` ON `e`.`Key1` = `t0`.`CompositeId1` AND `e`.`Key2` = `t0`.`CompositeId2` AND `e`.`Key3` = `t0`.`CompositeId3`) + ) AS `s` ON `j`.`LeafId` = `s`.`Id` +) AS `s0` ON `e`.`Key1` = `s0`.`CompositeId1` AND `e`.`Key2` = `s0`.`CompositeId2` AND `e`.`Key3` = `s0`.`CompositeId3`) LEFT JOIN ( SELECT `e0`.`Id`, `e0`.`Name`, `j0`.`EntityBranchId` FROM `JoinOneToBranch` AS `j0` INNER JOIN `EntityOnes` AS `e0` ON `j0`.`EntityOneId` = `e0`.`Id` -) AS `t1` ON `t0`.`Id` = `t1`.`EntityBranchId` -WHERE `t0`.`Id` IS NOT NULL AND `t1`.`EntityBranchId` IS NOT NULL -ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `t0`.`LeafId`, `t0`.`CompositeId1`, `t0`.`CompositeId2`, `t0`.`CompositeId3`, `t0`.`Id` +) AS `s1` ON `s0`.`Id` = `s1`.`EntityBranchId` +WHERE `s0`.`Id` IS NOT NULL AND `s1`.`EntityBranchId` IS NOT NULL +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Id` """); } @@ -1274,33 +1270,33 @@ ORDER BY `e`.`Id` """, // """ -SELECT `t`.`Id`, `t`.`Name`, `t`.`Id0`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name0`, `t`.`ReferenceInverseId`, `e`.`Id`, `t`.`OneId`, `t`.`ThreeId` +SELECT `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneId`, `s`.`ThreeId` FROM `EntityThrees` AS `e` INNER JOIN ( SELECT `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `j`.`OneId`, `j`.`ThreeId` FROM (`JoinOneToThreePayloadFull` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` -) AS `t` ON `e`.`Id` = `t`.`ThreeId` -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`ThreeId`, `t`.`Id`, `t`.`Id0` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id`, `s`.`Id0` """, // """ -SELECT `t0`.`Id`, `t0`.`Name`, `e`.`Id`, `t`.`OneId`, `t`.`ThreeId`, `t`.`Id`, `t`.`Id0` +SELECT `s0`.`Id`, `s0`.`Name`, `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id`, `s`.`Id0` FROM (`EntityThrees` AS `e` INNER JOIN ( SELECT `e0`.`Id`, `e1`.`Id` AS `Id0`, `j`.`OneId`, `j`.`ThreeId` FROM (`JoinOneToThreePayloadFull` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` -) AS `t` ON `e`.`Id` = `t`.`ThreeId`) +) AS `s` ON `e`.`Id` = `s`.`ThreeId`) LEFT JOIN ( SELECT `e2`.`Id`, `e2`.`Name`, `j0`.`LeftId` FROM `JoinOneSelfPayload` AS `j0` INNER JOIN `EntityOnes` AS `e2` ON `j0`.`RightId` = `e2`.`Id` -) AS `t0` ON `t`.`Id` = `t0`.`LeftId` -WHERE `t`.`Id` IS NOT NULL AND `t0`.`LeftId` IS NOT NULL -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`ThreeId`, `t`.`Id`, `t`.`Id0` +) AS `s0` ON `s`.`Id` = `s0`.`LeftId` +WHERE `s`.`Id` IS NOT NULL AND `s0`.`LeftId` IS NOT NULL +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id`, `s`.`Id0` """); } @@ -1309,22 +1305,22 @@ public override async Task Include_skip_navigation_and_reference_split(bool asyn await base.Include_skip_navigation_and_reference_split(async); AssertSql( -""" + """ SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId` FROM `EntityTwos` AS `e` LEFT JOIN `EntityThrees` AS `e0` ON `e`.`Id` = `e0`.`ReferenceInverseId` ORDER BY `e`.`Id`, `e0`.`Id` """, -// -""" -SELECT `t`.`Id`, `t`.`Name`, `e`.`Id`, `e0`.`Id` + // + """ +SELECT `s`.`Id`, `s`.`Name`, `e`.`Id`, `e0`.`Id` FROM (`EntityTwos` AS `e` LEFT JOIN `EntityThrees` AS `e0` ON `e`.`Id` = `e0`.`ReferenceInverseId`) INNER JOIN ( SELECT `e2`.`Id`, `e2`.`Name`, `e1`.`TwoSkipSharedId` FROM `EntityOneEntityTwo` AS `e1` INNER JOIN `EntityOnes` AS `e2` ON `e1`.`OneSkipSharedId` = `e2`.`Id` -) AS `t` ON `e`.`Id` = `t`.`TwoSkipSharedId` +) AS `s` ON `e`.`Id` = `s`.`TwoSkipSharedId` ORDER BY `e`.`Id`, `e0`.`Id` """); } @@ -1334,21 +1330,21 @@ public override async Task Filtered_include_skip_navigation_where_split(bool asy await base.Filtered_include_skip_navigation_where_split(async); AssertSql( -""" + """ SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId` FROM `EntityThrees` AS `e` ORDER BY `e`.`Id` """, -// -""" -SELECT `t`.`Id`, `t`.`Name`, `e`.`Id` + // + """ +SELECT `s`.`Id`, `s`.`Name`, `e`.`Id` FROM `EntityThrees` AS `e` INNER JOIN ( SELECT `e0`.`Id`, `e0`.`Name`, `j`.`ThreeId` FROM `JoinOneToThreePayloadFullShared` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` WHERE `e0`.`Id` < 10 -) AS `t` ON `e`.`Id` = `t`.`ThreeId` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` ORDER BY `e`.`Id` """); } @@ -1358,21 +1354,21 @@ public override async Task Filtered_include_skip_navigation_order_by_split(bool await base.Filtered_include_skip_navigation_order_by_split(async); AssertSql( -""" + """ SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId` FROM `EntityThrees` AS `e` ORDER BY `e`.`Id` """, -// -""" -SELECT `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name`, `t`.`ReferenceInverseId`, `e`.`Id` + // + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId`, `e`.`Id` FROM `EntityThrees` AS `e` INNER JOIN ( SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `j`.`ThreeId` FROM `JoinTwoToThree` AS `j` INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` -) AS `t` ON `e`.`Id` = `t`.`ThreeId` -ORDER BY `e`.`Id`, `t`.`Id` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`Id` """); } @@ -1473,32 +1469,32 @@ ORDER BY `r`.`Id` """, // """ -SELECT `t`.`Id`, `t`.`CollectionInverseId`, `t`.`Name`, `t`.`ReferenceInverseId`, `r`.`Id`, `t`.`RootSkipSharedId`, `t`.`ThreeSkipSharedId` +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId`, `r`.`Id`, `s`.`RootSkipSharedId`, `s`.`ThreeSkipSharedId` FROM `Roots` AS `r` INNER JOIN ( SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `e`.`RootSkipSharedId`, `e`.`ThreeSkipSharedId` FROM `EntityRootEntityThree` AS `e` INNER JOIN `EntityThrees` AS `e0` ON `e`.`ThreeSkipSharedId` = `e0`.`Id` -) AS `t` ON `r`.`Id` = `t`.`RootSkipSharedId` -ORDER BY `r`.`Id`, `t`.`RootSkipSharedId`, `t`.`ThreeSkipSharedId`, `t`.`Id` +) AS `s` ON `r`.`Id` = `s`.`RootSkipSharedId` +ORDER BY `r`.`Id`, `s`.`RootSkipSharedId`, `s`.`ThreeSkipSharedId`, `s`.`Id` """, // """ -SELECT `t0`.`Id`, `t0`.`Name`, `r`.`Id`, `t`.`RootSkipSharedId`, `t`.`ThreeSkipSharedId`, `t`.`Id` +SELECT `s0`.`Id`, `s0`.`Name`, `r`.`Id`, `s`.`RootSkipSharedId`, `s`.`ThreeSkipSharedId`, `s`.`Id` FROM (`Roots` AS `r` INNER JOIN ( SELECT `e0`.`Id`, `e`.`RootSkipSharedId`, `e`.`ThreeSkipSharedId` FROM `EntityRootEntityThree` AS `e` INNER JOIN `EntityThrees` AS `e0` ON `e`.`ThreeSkipSharedId` = `e0`.`Id` -) AS `t` ON `r`.`Id` = `t`.`RootSkipSharedId`) +) AS `s` ON `r`.`Id` = `s`.`RootSkipSharedId`) LEFT JOIN ( SELECT `e1`.`Id`, `e1`.`Name`, `j`.`ThreeId` FROM `JoinOneToThreePayloadFullShared` AS `j` INNER JOIN `EntityOnes` AS `e1` ON `j`.`OneId` = `e1`.`Id` WHERE `e1`.`Id` < 10 -) AS `t0` ON `t`.`Id` = `t0`.`ThreeId` -WHERE `t`.`Id` IS NOT NULL AND `t0`.`ThreeId` IS NOT NULL -ORDER BY `r`.`Id`, `t`.`RootSkipSharedId`, `t`.`ThreeSkipSharedId`, `t`.`Id` +) AS `s0` ON `s`.`Id` = `s0`.`ThreeId` +WHERE `s`.`Id` IS NOT NULL AND `s0`.`ThreeId` IS NOT NULL +ORDER BY `r`.`Id`, `s`.`RootSkipSharedId`, `s`.`ThreeSkipSharedId`, `s`.`Id` """); } @@ -1558,16 +1554,16 @@ public override async Task Filtered_include_skip_navigation_where_then_include_s await base.Filtered_include_skip_navigation_where_then_include_skip_navigation_split(async); AssertSql( -""" + """ SELECT `r`.`Id`, `r`.`Name`, `b`.`Number`, `l`.`IsGreen` FROM (`Roots` AS `r` INNER JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) INNER JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id` ORDER BY `r`.`Id` """, - // - """ -SELECT `t`.`Key1`, `t`.`Key2`, `t`.`Key3`, `t`.`Name`, `r`.`Id`, `t`.`LeafId`, `t`.`CompositeId1`, `t`.`CompositeId2`, `t`.`CompositeId3` + // + """ +SELECT `s`.`Key1`, `s`.`Key2`, `s`.`Key3`, `s`.`Name`, `r`.`Id`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3` FROM ((`Roots` AS `r` INNER JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) INNER JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id`) @@ -1576,12 +1572,12 @@ INNER JOIN ( FROM `JoinCompositeKeyToLeaf` AS `j` INNER JOIN `EntityCompositeKeys` AS `e` ON `j`.`CompositeId1` = `e`.`Key1` AND `j`.`CompositeId2` = `e`.`Key2` AND `j`.`CompositeId3` = `e`.`Key3` WHERE `e`.`Key1` < 5 -) AS `t` ON `r`.`Id` = `t`.`LeafId` -ORDER BY `r`.`Id`, `t`.`LeafId`, `t`.`CompositeId1`, `t`.`CompositeId2`, `t`.`CompositeId3`, `t`.`Key1`, `t`.`Key2`, `t`.`Key3` +) AS `s` ON `r`.`Id` = `s`.`LeafId` +ORDER BY `r`.`Id`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Key1`, `s`.`Key2`, `s`.`Key3` """, - // - """ -SELECT `t0`.`Id`, `t0`.`CollectionInverseId`, `t0`.`ExtraId`, `t0`.`Name`, `t0`.`ReferenceInverseId`, `r`.`Id`, `t`.`LeafId`, `t`.`CompositeId1`, `t`.`CompositeId2`, `t`.`CompositeId3`, `t`.`Key1`, `t`.`Key2`, `t`.`Key3` + // + """ +SELECT `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name`, `s0`.`ReferenceInverseId`, `r`.`Id`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Key1`, `s`.`Key2`, `s`.`Key3` FROM (((`Roots` AS `r` INNER JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) INNER JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id`) @@ -1590,14 +1586,14 @@ INNER JOIN ( FROM `JoinCompositeKeyToLeaf` AS `j` INNER JOIN `EntityCompositeKeys` AS `e` ON `j`.`CompositeId1` = `e`.`Key1` AND `j`.`CompositeId2` = `e`.`Key2` AND `j`.`CompositeId3` = `e`.`Key3` WHERE `e`.`Key1` < 5 -) AS `t` ON `r`.`Id` = `t`.`LeafId`) +) AS `s` ON `r`.`Id` = `s`.`LeafId`) LEFT JOIN ( SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name`, `e1`.`ReferenceInverseId`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3` FROM `EntityCompositeKeyEntityTwo` AS `e0` INNER JOIN `EntityTwos` AS `e1` ON `e0`.`TwoSkipSharedId` = `e1`.`Id` -) AS `t0` ON `t`.`Key1` = `t0`.`CompositeKeySkipSharedKey1` AND `t`.`Key2` = `t0`.`CompositeKeySkipSharedKey2` AND `t`.`Key3` = `t0`.`CompositeKeySkipSharedKey3` -WHERE `t`.`Key1` IS NOT NULL AND `t0`.`CompositeKeySkipSharedKey1` IS NOT NULL AND `t`.`Key2` IS NOT NULL AND `t0`.`CompositeKeySkipSharedKey2` IS NOT NULL AND `t`.`Key3` IS NOT NULL AND `t0`.`CompositeKeySkipSharedKey3` IS NOT NULL -ORDER BY `r`.`Id`, `t`.`LeafId`, `t`.`CompositeId1`, `t`.`CompositeId2`, `t`.`CompositeId3`, `t`.`Key1`, `t`.`Key2`, `t`.`Key3` +) AS `s0` ON `s`.`Key1` = `s0`.`CompositeKeySkipSharedKey1` AND `s`.`Key2` = `s0`.`CompositeKeySkipSharedKey2` AND `s`.`Key3` = `s0`.`CompositeKeySkipSharedKey3` +WHERE `s`.`Key1` IS NOT NULL AND `s0`.`CompositeKeySkipSharedKey1` IS NOT NULL AND `s`.`Key2` IS NOT NULL AND `s0`.`CompositeKeySkipSharedKey2` IS NOT NULL AND `s`.`Key3` IS NOT NULL AND `s0`.`CompositeKeySkipSharedKey3` IS NOT NULL +ORDER BY `r`.`Id`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Key1`, `s`.`Key2`, `s`.`Key3` """); } @@ -1706,7 +1702,7 @@ ORDER BY `e`.`Id` """, // """ -SELECT `t`.`Id`, `t`.`Name`, `t`.`Id0`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name0`, `t`.`ReferenceInverseId`, `e`.`Id`, `t`.`OneId`, `t`.`TwoId` +SELECT `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneId`, `s`.`TwoId` FROM `EntityTwos` AS `e` INNER JOIN ( SELECT `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `j`.`OneId`, `j`.`TwoId` @@ -1714,12 +1710,12 @@ INNER JOIN ( INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` WHERE `e0`.`Id` < 10 -) AS `t` ON `e`.`Id` = `t`.`TwoId` -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`TwoId`, `t`.`Id`, `t`.`Id0` +) AS `s` ON `e`.`Id` = `s`.`TwoId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s`.`Id0` """, // """ -SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e`.`Id`, `t`.`OneId`, `t`.`TwoId`, `t`.`Id`, `t`.`Id0` +SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s`.`Id0` FROM (`EntityTwos` AS `e` INNER JOIN ( SELECT `e0`.`Id`, `e1`.`Id` AS `Id0`, `j`.`OneId`, `j`.`TwoId` @@ -1727,10 +1723,10 @@ INNER JOIN ( INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` WHERE `e0`.`Id` < 10 -) AS `t` ON `e`.`Id` = `t`.`TwoId`) -LEFT JOIN `EntityTwos` AS `e2` ON `t`.`Id` = `e2`.`CollectionInverseId` -WHERE `t`.`Id` IS NOT NULL AND `e2`.`CollectionInverseId` IS NOT NULL -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`TwoId`, `t`.`Id`, `t`.`Id0` +) AS `s` ON `e`.`Id` = `s`.`TwoId`) +LEFT JOIN `EntityTwos` AS `e2` ON `s`.`Id` = `e2`.`CollectionInverseId` +WHERE `s`.`Id` IS NOT NULL AND `e2`.`CollectionInverseId` IS NOT NULL +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s`.`Id0` """); } @@ -1816,33 +1812,33 @@ ORDER BY `e`.`Id` """, // """ -SELECT `t`.`Id`, `t`.`Name`, `e`.`Id`, `t`.`OneId`, `t`.`ThreeId` +SELECT `s`.`Id`, `s`.`Name`, `e`.`Id`, `s`.`OneId`, `s`.`ThreeId` FROM `EntityThrees` AS `e` INNER JOIN ( SELECT `e0`.`Id`, `e0`.`Name`, `j`.`OneId`, `j`.`ThreeId` FROM `JoinOneToThreePayloadFull` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` WHERE `e0`.`Id` > 15 -) AS `t` ON `e`.`Id` = `t`.`ThreeId` -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`ThreeId`, `t`.`Id` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id` """, // """ -SELECT `t0`.`Id`, `t0`.`CollectionInverseId`, `t0`.`ExtraId`, `t0`.`Name`, `t0`.`ReferenceInverseId`, `e`.`Id`, `t`.`OneId`, `t`.`ThreeId`, `t`.`Id` +SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id` FROM (`EntityThrees` AS `e` INNER JOIN ( SELECT `e0`.`Id`, `j`.`OneId`, `j`.`ThreeId` FROM `JoinOneToThreePayloadFull` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` WHERE `e0`.`Id` > 15 -) AS `t` ON `e`.`Id` = `t`.`ThreeId`) +) AS `s` ON `e`.`Id` = `s`.`ThreeId`) LEFT JOIN ( SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name`, `e1`.`ReferenceInverseId` FROM `EntityTwos` AS `e1` WHERE `e1`.`Id` < 5 -) AS `t0` ON `t`.`Id` = `t0`.`CollectionInverseId` -WHERE `t`.`Id` IS NOT NULL AND `t0`.`CollectionInverseId` IS NOT NULL -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`ThreeId`, `t`.`Id` +) AS `e2` ON `s`.`Id` = `e2`.`CollectionInverseId` +WHERE `s`.`Id` IS NOT NULL AND `e2`.`CollectionInverseId` IS NOT NULL +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id` """); } @@ -1858,32 +1854,32 @@ ORDER BY `e`.`Id` """, // """ -SELECT `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name`, `t`.`ReferenceInverseId`, `e`.`Id` +SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e`.`Id` FROM `EntityOnes` AS `e` INNER JOIN ( SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId` FROM `EntityTwos` AS `e0` WHERE `e0`.`Id` > 15 -) AS `t` ON `e`.`Id` = `t`.`CollectionInverseId` -ORDER BY `e`.`Id`, `t`.`Id` +) AS `e2` ON `e`.`Id` = `e2`.`CollectionInverseId` +ORDER BY `e`.`Id`, `e2`.`Id` """, // """ -SELECT `t0`.`Id`, `t0`.`CollectionInverseId`, `t0`.`Name`, `t0`.`ReferenceInverseId`, `e`.`Id`, `t`.`Id` +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId`, `e`.`Id`, `e2`.`Id` FROM (`EntityOnes` AS `e` INNER JOIN ( SELECT `e0`.`Id`, `e0`.`CollectionInverseId` FROM `EntityTwos` AS `e0` WHERE `e0`.`Id` > 15 -) AS `t` ON `e`.`Id` = `t`.`CollectionInverseId`) +) AS `e2` ON `e`.`Id` = `e2`.`CollectionInverseId`) LEFT JOIN ( SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`Name`, `e1`.`ReferenceInverseId`, `j`.`TwoId` FROM `JoinTwoToThree` AS `j` INNER JOIN `EntityThrees` AS `e1` ON `j`.`ThreeId` = `e1`.`Id` WHERE `e1`.`Id` < 5 -) AS `t0` ON `t`.`Id` = `t0`.`TwoId` -WHERE `t`.`Id` IS NOT NULL AND `t0`.`TwoId` IS NOT NULL -ORDER BY `e`.`Id`, `t`.`Id` +) AS `s` ON `e2`.`Id` = `s`.`TwoId` +WHERE `e2`.`Id` IS NOT NULL AND `s`.`TwoId` IS NOT NULL +ORDER BY `e`.`Id`, `e2`.`Id` """); } @@ -1936,14 +1932,14 @@ public override async Task Select_many_over_skip_navigation_where_non_equality(b await base.Select_many_over_skip_navigation_where_non_equality(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name`, `t`.`ReferenceInverseId` + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId` FROM `EntityOnes` AS `e` LEFT JOIN ( SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `j`.`OneId` FROM `JoinOneToTwo` AS `j` INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` -) AS `t` ON `e`.`Id` = `t`.`OneId` AND `e`.`Id` <> `t`.`Id` +) AS `s` ON `e`.`Id` = `s`.`OneId` AND `e`.`Id` <> `s`.`Id` """); } @@ -2155,21 +2151,20 @@ public override async Task Skip_navigation_count_with_predicate_unidirectional(b AssertSql( """ -SELECT `t1`.`Id`, `t1`.`Name`, `t1`.`c` +SELECT `u4`.`Id`, `u4`.`Name`, `u4`.`c` FROM ( SELECT `u`.`Id`, `u`.`Name`, ( SELECT COUNT(*) - FROM `UnidirectionalJoinOneToBranch` AS `u4` + FROM `UnidirectionalJoinOneToBranch` AS `u0` INNER JOIN ( - SELECT `u5`.`Id`, `u5`.`Name`, `u6`.`Number`, `u7`.`IsGreen`, IIF(`u7`.`Id` IS NOT NULL, 'UnidirectionalEntityLeaf', NULL) AS `Discriminator` - FROM (`UnidirectionalRoots` AS `u5` - INNER JOIN `UnidirectionalBranches` AS `u6` ON `u5`.`Id` = `u6`.`Id`) - LEFT JOIN `UnidirectionalLeaves` AS `u7` ON `u5`.`Id` = `u7`.`Id` - ) AS `t0` ON `u4`.`UnidirectionalEntityBranchId` = `t0`.`Id` - WHERE `u`.`Id` = `u4`.`UnidirectionalEntityOneId` AND (`t0`.`Name` LIKE 'L%')) AS `c` + SELECT `u1`.`Id`, `u1`.`Name` + FROM `UnidirectionalRoots` AS `u1` + INNER JOIN `UnidirectionalBranches` AS `u2` ON `u1`.`Id` = `u2`.`Id` + ) AS `s` ON `u0`.`UnidirectionalEntityBranchId` = `s`.`Id` + WHERE `u`.`Id` = `u0`.`UnidirectionalEntityOneId` AND (`s`.`Name` LIKE 'L%')) AS `c` FROM `UnidirectionalEntityOnes` AS `u` -) AS `t1` -ORDER BY `t1`.`c`, `t1`.`Id` +) AS `u4` +ORDER BY `u4`.`c`, `u4`.`Id` """); } @@ -2215,21 +2210,21 @@ public override async Task Skip_navigation_of_type_unidirectional(bool async) await base.Skip_navigation_of_type_unidirectional(async); AssertSql( -""" -SELECT `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `t0`.`Id`, `t0`.`Name`, `t0`.`Number`, `t0`.`IsGreen`, `t0`.`Discriminator`, `t0`.`RootSkipSharedId`, `t0`.`UnidirectionalEntityCompositeKeyKey1`, `t0`.`UnidirectionalEntityCompositeKeyKey2`, `t0`.`UnidirectionalEntityCompositeKeyKey3` + """ +SELECT `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `s0`.`Id`, `s0`.`Name`, `s0`.`Number`, `s0`.`IsGreen`, `s0`.`Discriminator`, `s0`.`RootSkipSharedId`, `s0`.`UnidirectionalEntityCompositeKeyKey1`, `s0`.`UnidirectionalEntityCompositeKeyKey2`, `s0`.`UnidirectionalEntityCompositeKeyKey3` FROM `UnidirectionalEntityCompositeKeys` AS `u` LEFT JOIN ( - SELECT `t`.`Id`, `t`.`Name`, `t`.`Number`, `t`.`IsGreen`, `t`.`Discriminator`, `u0`.`RootSkipSharedId`, `u0`.`UnidirectionalEntityCompositeKeyKey1`, `u0`.`UnidirectionalEntityCompositeKeyKey2`, `u0`.`UnidirectionalEntityCompositeKeyKey3` + SELECT `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s`.`Discriminator`, `u0`.`RootSkipSharedId`, `u0`.`UnidirectionalEntityCompositeKeyKey1`, `u0`.`UnidirectionalEntityCompositeKeyKey2`, `u0`.`UnidirectionalEntityCompositeKeyKey3` FROM `UnidirectionalEntityCompositeKeyUnidirectionalEntityRoot` AS `u0` INNER JOIN ( SELECT `u1`.`Id`, `u1`.`Name`, `u2`.`Number`, `u3`.`IsGreen`, IIF(`u3`.`Id` IS NOT NULL, 'UnidirectionalEntityLeaf', IIF(`u2`.`Id` IS NOT NULL, 'UnidirectionalEntityBranch', NULL)) AS `Discriminator` FROM (`UnidirectionalRoots` AS `u1` LEFT JOIN `UnidirectionalBranches` AS `u2` ON `u1`.`Id` = `u2`.`Id`) LEFT JOIN `UnidirectionalLeaves` AS `u3` ON `u1`.`Id` = `u3`.`Id` - ) AS `t` ON `u0`.`RootSkipSharedId` = `t`.`Id` - WHERE `t`.`Discriminator` = 'UnidirectionalEntityLeaf' -) AS `t0` ON `u`.`Key1` = `t0`.`UnidirectionalEntityCompositeKeyKey1` AND `u`.`Key2` = `t0`.`UnidirectionalEntityCompositeKeyKey2` AND `u`.`Key3` = `t0`.`UnidirectionalEntityCompositeKeyKey3` -ORDER BY `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `t0`.`RootSkipSharedId`, `t0`.`UnidirectionalEntityCompositeKeyKey1`, `t0`.`UnidirectionalEntityCompositeKeyKey2`, `t0`.`UnidirectionalEntityCompositeKeyKey3` + ) AS `s` ON `u0`.`RootSkipSharedId` = `s`.`Id` + WHERE `s`.`Discriminator` = 'UnidirectionalEntityLeaf' +) AS `s0` ON `u`.`Key1` = `s0`.`UnidirectionalEntityCompositeKeyKey1` AND `u`.`Key2` = `s0`.`UnidirectionalEntityCompositeKeyKey2` AND `u`.`Key3` = `s0`.`UnidirectionalEntityCompositeKeyKey3` +ORDER BY `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `s0`.`RootSkipSharedId`, `s0`.`UnidirectionalEntityCompositeKeyKey1`, `s0`.`UnidirectionalEntityCompositeKeyKey2`, `s0`.`UnidirectionalEntityCompositeKeyKey3` """); } @@ -2278,14 +2273,14 @@ public override async Task Select_many_over_skip_navigation_unidirectional(bool await base.Select_many_over_skip_navigation_unidirectional(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`CollectionInverseId`, `t`.`Name`, `t`.`ReferenceInverseId` + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId` FROM `UnidirectionalRoots` AS `u` INNER JOIN ( - SELECT `u3`.`Id`, `u3`.`CollectionInverseId`, `u3`.`Name`, `u3`.`ReferenceInverseId`, `u2`.`UnidirectionalEntityRootId` - FROM `UnidirectionalEntityRootUnidirectionalEntityThree` AS `u2` - INNER JOIN `UnidirectionalEntityThrees` AS `u3` ON `u2`.`ThreeSkipSharedId` = `u3`.`Id` -) AS `t` ON `u`.`Id` = `t`.`UnidirectionalEntityRootId` + SELECT `u1`.`Id`, `u1`.`CollectionInverseId`, `u1`.`Name`, `u1`.`ReferenceInverseId`, `u0`.`UnidirectionalEntityRootId` + FROM `UnidirectionalEntityRootUnidirectionalEntityThree` AS `u0` + INNER JOIN `UnidirectionalEntityThrees` AS `u1` ON `u0`.`ThreeSkipSharedId` = `u1`.`Id` +) AS `s` ON `u`.`Id` = `s`.`UnidirectionalEntityRootId` """); } @@ -2294,14 +2289,14 @@ public override async Task Select_many_over_skip_navigation_where_unidirectional await base.Select_many_over_skip_navigation_where_unidirectional(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name`, `t`.`ReferenceInverseId` + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId` FROM `UnidirectionalEntityOnes` AS `u` LEFT JOIN ( SELECT `u1`.`Id`, `u1`.`CollectionInverseId`, `u1`.`ExtraId`, `u1`.`Name`, `u1`.`ReferenceInverseId`, `u0`.`OneId` FROM `UnidirectionalJoinOneToTwo` AS `u0` INNER JOIN `UnidirectionalEntityTwos` AS `u1` ON `u0`.`TwoId` = `u1`.`Id` -) AS `t` ON `u`.`Id` = `t`.`OneId` +) AS `s` ON `u`.`Id` = `s`.`OneId` """); } @@ -2350,19 +2345,19 @@ public override async Task Select_many_over_skip_navigation_cast_unidirectional( await base.Select_many_over_skip_navigation_cast_unidirectional(async); AssertSql( -""" -SELECT `t0`.`Id`, `t0`.`Name`, `t0`.`Number`, `t0`.`IsGreen`, `t0`.`Discriminator` + """ +SELECT `s0`.`Id`, `s0`.`Name`, `s0`.`Number`, `s0`.`IsGreen`, `s0`.`Discriminator` FROM `UnidirectionalEntityOnes` AS `u` INNER JOIN ( - SELECT `t`.`Id`, `t`.`Name`, `t`.`Number`, `t`.`IsGreen`, `t`.`Discriminator`, `u0`.`UnidirectionalEntityOneId` + SELECT `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s`.`Discriminator`, `u0`.`UnidirectionalEntityOneId` FROM `UnidirectionalJoinOneToBranch` AS `u0` INNER JOIN ( SELECT `u1`.`Id`, `u1`.`Name`, `u2`.`Number`, `u3`.`IsGreen`, IIF(`u3`.`Id` IS NOT NULL, 'UnidirectionalEntityLeaf', NULL) AS `Discriminator` FROM (`UnidirectionalRoots` AS `u1` INNER JOIN `UnidirectionalBranches` AS `u2` ON `u1`.`Id` = `u2`.`Id`) LEFT JOIN `UnidirectionalLeaves` AS `u3` ON `u1`.`Id` = `u3`.`Id` - ) AS `t` ON `u0`.`UnidirectionalEntityBranchId` = `t`.`Id` -) AS `t0` ON `u`.`Id` = `t0`.`UnidirectionalEntityOneId` + ) AS `s` ON `u0`.`UnidirectionalEntityBranchId` = `s`.`Id` +) AS `s0` ON `u`.`Id` = `s0`.`UnidirectionalEntityOneId` """); } @@ -2371,15 +2366,15 @@ public override async Task Select_skip_navigation_unidirectional(bool async) await base.Select_skip_navigation_unidirectional(async); AssertSql( -""" -SELECT `u`.`Id`, `t`.`Id`, `t`.`Name`, `t`.`LeftId`, `t`.`RightId` + """ +SELECT `u`.`Id`, `s`.`Id`, `s`.`Name`, `s`.`LeftId`, `s`.`RightId` FROM `UnidirectionalEntityOnes` AS `u` LEFT JOIN ( SELECT `u1`.`Id`, `u1`.`Name`, `u0`.`LeftId`, `u0`.`RightId` FROM `UnidirectionalJoinOneSelfPayload` AS `u0` INNER JOIN `UnidirectionalEntityOnes` AS `u1` ON `u0`.`LeftId` = `u1`.`Id` -) AS `t` ON `u`.`Id` = `t`.`RightId` -ORDER BY `u`.`Id`, `t`.`LeftId`, `t`.`RightId` +) AS `s` ON `u`.`Id` = `s`.`RightId` +ORDER BY `u`.`Id`, `s`.`LeftId`, `s`.`RightId` """); } @@ -2388,20 +2383,20 @@ public override async Task Include_skip_navigation_unidirectional(bool async) await base.Include_skip_navigation_unidirectional(async); AssertSql( -""" -SELECT `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `u`.`Name`, `t0`.`Id`, `t0`.`Name`, `t0`.`Number`, `t0`.`IsGreen`, `t0`.`Discriminator`, `t0`.`RootSkipSharedId`, `t0`.`UnidirectionalEntityCompositeKeyKey1`, `t0`.`UnidirectionalEntityCompositeKeyKey2`, `t0`.`UnidirectionalEntityCompositeKeyKey3` + """ +SELECT `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `u`.`Name`, `s0`.`Id`, `s0`.`Name`, `s0`.`Number`, `s0`.`IsGreen`, `s0`.`Discriminator`, `s0`.`RootSkipSharedId`, `s0`.`UnidirectionalEntityCompositeKeyKey1`, `s0`.`UnidirectionalEntityCompositeKeyKey2`, `s0`.`UnidirectionalEntityCompositeKeyKey3` FROM `UnidirectionalEntityCompositeKeys` AS `u` LEFT JOIN ( - SELECT `t`.`Id`, `t`.`Name`, `t`.`Number`, `t`.`IsGreen`, `t`.`Discriminator`, `u0`.`RootSkipSharedId`, `u0`.`UnidirectionalEntityCompositeKeyKey1`, `u0`.`UnidirectionalEntityCompositeKeyKey2`, `u0`.`UnidirectionalEntityCompositeKeyKey3` + SELECT `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s`.`Discriminator`, `u0`.`RootSkipSharedId`, `u0`.`UnidirectionalEntityCompositeKeyKey1`, `u0`.`UnidirectionalEntityCompositeKeyKey2`, `u0`.`UnidirectionalEntityCompositeKeyKey3` FROM `UnidirectionalEntityCompositeKeyUnidirectionalEntityRoot` AS `u0` INNER JOIN ( SELECT `u1`.`Id`, `u1`.`Name`, `u2`.`Number`, `u3`.`IsGreen`, IIF(`u3`.`Id` IS NOT NULL, 'UnidirectionalEntityLeaf', IIF(`u2`.`Id` IS NOT NULL, 'UnidirectionalEntityBranch', NULL)) AS `Discriminator` FROM (`UnidirectionalRoots` AS `u1` LEFT JOIN `UnidirectionalBranches` AS `u2` ON `u1`.`Id` = `u2`.`Id`) LEFT JOIN `UnidirectionalLeaves` AS `u3` ON `u1`.`Id` = `u3`.`Id` - ) AS `t` ON `u0`.`RootSkipSharedId` = `t`.`Id` -) AS `t0` ON `u`.`Key1` = `t0`.`UnidirectionalEntityCompositeKeyKey1` AND `u`.`Key2` = `t0`.`UnidirectionalEntityCompositeKeyKey2` AND `u`.`Key3` = `t0`.`UnidirectionalEntityCompositeKeyKey3` -ORDER BY `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `t0`.`RootSkipSharedId`, `t0`.`UnidirectionalEntityCompositeKeyKey1`, `t0`.`UnidirectionalEntityCompositeKeyKey2`, `t0`.`UnidirectionalEntityCompositeKeyKey3` + ) AS `s` ON `u0`.`RootSkipSharedId` = `s`.`Id` +) AS `s0` ON `u`.`Key1` = `s0`.`UnidirectionalEntityCompositeKeyKey1` AND `u`.`Key2` = `s0`.`UnidirectionalEntityCompositeKeyKey2` AND `u`.`Key3` = `s0`.`UnidirectionalEntityCompositeKeyKey3` +ORDER BY `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `s0`.`RootSkipSharedId`, `s0`.`UnidirectionalEntityCompositeKeyKey1`, `s0`.`UnidirectionalEntityCompositeKeyKey2`, `s0`.`UnidirectionalEntityCompositeKeyKey3` """); } @@ -2410,16 +2405,16 @@ public override async Task Include_skip_navigation_then_reference_unidirectional await base.Include_skip_navigation_then_reference_unidirectional(async); AssertSql( -""" -SELECT `u`.`Id`, `u`.`CollectionInverseId`, `u`.`ExtraId`, `u`.`Name`, `u`.`ReferenceInverseId`, `t`.`Id`, `t`.`Name`, `t`.`Id0`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name0`, `t`.`ReferenceInverseId`, `t`.`OneId`, `t`.`TwoId` + """ +SELECT `u`.`Id`, `u`.`CollectionInverseId`, `u`.`ExtraId`, `u`.`Name`, `u`.`ReferenceInverseId`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `s`.`OneId`, `s`.`TwoId` FROM `UnidirectionalEntityTwos` AS `u` LEFT JOIN ( SELECT `u1`.`Id`, `u1`.`Name`, `u2`.`Id` AS `Id0`, `u2`.`CollectionInverseId`, `u2`.`ExtraId`, `u2`.`Name` AS `Name0`, `u2`.`ReferenceInverseId`, `u0`.`OneId`, `u0`.`TwoId` FROM (`UnidirectionalJoinOneToTwo` AS `u0` INNER JOIN `UnidirectionalEntityOnes` AS `u1` ON `u0`.`OneId` = `u1`.`Id`) LEFT JOIN `UnidirectionalEntityTwos` AS `u2` ON `u1`.`Id` = `u2`.`ReferenceInverseId` -) AS `t` ON `u`.`Id` = `t`.`TwoId` -ORDER BY `u`.`Id`, `t`.`OneId`, `t`.`TwoId`, `t`.`Id` +) AS `s` ON `u`.`Id` = `s`.`TwoId` +ORDER BY `u`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id` """); } @@ -2428,25 +2423,25 @@ public override async Task Include_skip_navigation_then_include_skip_navigation_ await base.Include_skip_navigation_then_include_skip_navigation_unidirectional(async); AssertSql( -""" -SELECT `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `u`.`Name`, `t1`.`Id`, `t1`.`Name`, `t1`.`Number`, `t1`.`IsGreen`, `t1`.`LeafId`, `t1`.`CompositeId1`, `t1`.`CompositeId2`, `t1`.`CompositeId3`, `t1`.`Id0`, `t1`.`Name0`, `t1`.`UnidirectionalEntityBranchId`, `t1`.`UnidirectionalEntityOneId` + """ +SELECT `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `u`.`Name`, `s1`.`Id`, `s1`.`Name`, `s1`.`Number`, `s1`.`IsGreen`, `s1`.`LeafId`, `s1`.`CompositeId1`, `s1`.`CompositeId2`, `s1`.`CompositeId3`, `s1`.`Id0`, `s1`.`Name0`, `s1`.`UnidirectionalEntityBranchId`, `s1`.`UnidirectionalEntityOneId` FROM `UnidirectionalEntityCompositeKeys` AS `u` LEFT JOIN ( - SELECT `t`.`Id`, `t`.`Name`, `t`.`Number`, `t`.`IsGreen`, `u0`.`LeafId`, `u0`.`CompositeId1`, `u0`.`CompositeId2`, `u0`.`CompositeId3`, `t0`.`Id` AS `Id0`, `t0`.`Name` AS `Name0`, `t0`.`UnidirectionalEntityBranchId`, `t0`.`UnidirectionalEntityOneId` + SELECT `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `u0`.`LeafId`, `u0`.`CompositeId1`, `u0`.`CompositeId2`, `u0`.`CompositeId3`, `s0`.`Id` AS `Id0`, `s0`.`Name` AS `Name0`, `s0`.`UnidirectionalEntityBranchId`, `s0`.`UnidirectionalEntityOneId` FROM (`UnidirectionalJoinCompositeKeyToLeaf` AS `u0` INNER JOIN ( SELECT `u1`.`Id`, `u1`.`Name`, `u2`.`Number`, `u3`.`IsGreen` FROM (`UnidirectionalRoots` AS `u1` INNER JOIN `UnidirectionalBranches` AS `u2` ON `u1`.`Id` = `u2`.`Id`) INNER JOIN `UnidirectionalLeaves` AS `u3` ON `u1`.`Id` = `u3`.`Id` - ) AS `t` ON `u0`.`LeafId` = `t`.`Id`) + ) AS `s` ON `u0`.`LeafId` = `s`.`Id`) LEFT JOIN ( SELECT `u5`.`Id`, `u5`.`Name`, `u4`.`UnidirectionalEntityBranchId`, `u4`.`UnidirectionalEntityOneId` FROM `UnidirectionalJoinOneToBranch` AS `u4` INNER JOIN `UnidirectionalEntityOnes` AS `u5` ON `u4`.`UnidirectionalEntityOneId` = `u5`.`Id` - ) AS `t0` ON `t`.`Id` = `t0`.`UnidirectionalEntityBranchId` -) AS `t1` ON `u`.`Key1` = `t1`.`CompositeId1` AND `u`.`Key2` = `t1`.`CompositeId2` AND `u`.`Key3` = `t1`.`CompositeId3` -ORDER BY `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `t1`.`LeafId`, `t1`.`CompositeId1`, `t1`.`CompositeId2`, `t1`.`CompositeId3`, `t1`.`Id`, `t1`.`UnidirectionalEntityBranchId`, `t1`.`UnidirectionalEntityOneId` + ) AS `s0` ON `s`.`Id` = `s0`.`UnidirectionalEntityBranchId` +) AS `s1` ON `u`.`Key1` = `s1`.`CompositeId1` AND `u`.`Key2` = `s1`.`CompositeId2` AND `u`.`Key3` = `s1`.`CompositeId3` +ORDER BY `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `s1`.`LeafId`, `s1`.`CompositeId1`, `s1`.`CompositeId2`, `s1`.`CompositeId3`, `s1`.`Id`, `s1`.`UnidirectionalEntityBranchId`, `s1`.`UnidirectionalEntityOneId` """); } @@ -2455,11 +2450,11 @@ public override async Task Include_skip_navigation_then_include_reference_and_sk await base.Include_skip_navigation_then_include_reference_and_skip_navigation_unidirectional(async); AssertSql( -""" -SELECT `u`.`Id`, `u`.`CollectionInverseId`, `u`.`Name`, `u`.`ReferenceInverseId`, `t0`.`Id`, `t0`.`Name`, `t0`.`Id0`, `t0`.`CollectionInverseId`, `t0`.`ExtraId`, `t0`.`Name0`, `t0`.`ReferenceInverseId`, `t0`.`OneId`, `t0`.`ThreeId`, `t0`.`Id1`, `t0`.`Name1`, `t0`.`LeftId`, `t0`.`RightId` + """ +SELECT `u`.`Id`, `u`.`CollectionInverseId`, `u`.`Name`, `u`.`ReferenceInverseId`, `s0`.`Id`, `s0`.`Name`, `s0`.`Id0`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name0`, `s0`.`ReferenceInverseId`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Id1`, `s0`.`Name1`, `s0`.`LeftId`, `s0`.`RightId` FROM `UnidirectionalEntityThrees` AS `u` LEFT JOIN ( - SELECT `u1`.`Id`, `u1`.`Name`, `u2`.`Id` AS `Id0`, `u2`.`CollectionInverseId`, `u2`.`ExtraId`, `u2`.`Name` AS `Name0`, `u2`.`ReferenceInverseId`, `u0`.`OneId`, `u0`.`ThreeId`, `t`.`Id` AS `Id1`, `t`.`Name` AS `Name1`, `t`.`LeftId`, `t`.`RightId` + SELECT `u1`.`Id`, `u1`.`Name`, `u2`.`Id` AS `Id0`, `u2`.`CollectionInverseId`, `u2`.`ExtraId`, `u2`.`Name` AS `Name0`, `u2`.`ReferenceInverseId`, `u0`.`OneId`, `u0`.`ThreeId`, `s`.`Id` AS `Id1`, `s`.`Name` AS `Name1`, `s`.`LeftId`, `s`.`RightId` FROM ((`UnidirectionalJoinOneToThreePayloadFull` AS `u0` INNER JOIN `UnidirectionalEntityOnes` AS `u1` ON `u0`.`OneId` = `u1`.`Id`) LEFT JOIN `UnidirectionalEntityTwos` AS `u2` ON `u1`.`Id` = `u2`.`ReferenceInverseId`) @@ -2467,9 +2462,9 @@ LEFT JOIN ( SELECT `u4`.`Id`, `u4`.`Name`, `u3`.`LeftId`, `u3`.`RightId` FROM `UnidirectionalJoinOneSelfPayload` AS `u3` INNER JOIN `UnidirectionalEntityOnes` AS `u4` ON `u3`.`RightId` = `u4`.`Id` - ) AS `t` ON `u1`.`Id` = `t`.`LeftId` -) AS `t0` ON `u`.`Id` = `t0`.`ThreeId` -ORDER BY `u`.`Id`, `t0`.`OneId`, `t0`.`ThreeId`, `t0`.`Id`, `t0`.`Id0`, `t0`.`LeftId`, `t0`.`RightId` + ) AS `s` ON `u1`.`Id` = `s`.`LeftId` +) AS `s0` ON `u`.`Id` = `s0`.`ThreeId` +ORDER BY `u`.`Id`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Id`, `s0`.`Id0`, `s0`.`LeftId`, `s0`.`RightId` """); } @@ -2478,16 +2473,16 @@ public override async Task Include_skip_navigation_and_reference_unidirectional( await base.Include_skip_navigation_and_reference_unidirectional(async); AssertSql( -""" -SELECT `u`.`Id`, `u`.`CollectionInverseId`, `u`.`ExtraId`, `u`.`Name`, `u`.`ReferenceInverseId`, `u0`.`Id`, `t`.`Id`, `t`.`Name`, `t`.`TwoSkipSharedId`, `t`.`UnidirectionalEntityOneId`, `u0`.`CollectionInverseId`, `u0`.`Name`, `u0`.`ReferenceInverseId` + """ +SELECT `u`.`Id`, `u`.`CollectionInverseId`, `u`.`ExtraId`, `u`.`Name`, `u`.`ReferenceInverseId`, `u0`.`Id`, `s`.`Id`, `s`.`Name`, `s`.`TwoSkipSharedId`, `s`.`UnidirectionalEntityOneId`, `u0`.`CollectionInverseId`, `u0`.`Name`, `u0`.`ReferenceInverseId` FROM (`UnidirectionalEntityTwos` AS `u` LEFT JOIN `UnidirectionalEntityThrees` AS `u0` ON `u`.`Id` = `u0`.`ReferenceInverseId`) LEFT JOIN ( SELECT `u2`.`Id`, `u2`.`Name`, `u1`.`TwoSkipSharedId`, `u1`.`UnidirectionalEntityOneId` FROM `UnidirectionalEntityOneUnidirectionalEntityTwo` AS `u1` INNER JOIN `UnidirectionalEntityOnes` AS `u2` ON `u1`.`UnidirectionalEntityOneId` = `u2`.`Id` -) AS `t` ON `u`.`Id` = `t`.`TwoSkipSharedId` -ORDER BY `u`.`Id`, `u0`.`Id`, `t`.`TwoSkipSharedId`, `t`.`UnidirectionalEntityOneId` +) AS `s` ON `u`.`Id` = `s`.`TwoSkipSharedId` +ORDER BY `u`.`Id`, `u0`.`Id`, `s`.`TwoSkipSharedId`, `s`.`UnidirectionalEntityOneId` """); } @@ -2496,16 +2491,16 @@ public override async Task Filtered_include_skip_navigation_where_unidirectional await base.Filtered_include_skip_navigation_where_unidirectional(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `t`.`Id`, `t`.`Name`, `t`.`OneId`, `t`.`ThreeId` + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`Id`, `s`.`Name`, `s`.`OneId`, `s`.`ThreeId` FROM `EntityThrees` AS `e` LEFT JOIN ( SELECT `e0`.`Id`, `e0`.`Name`, `j`.`OneId`, `j`.`ThreeId` FROM `JoinOneToThreePayloadFullShared` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` WHERE `e0`.`Id` < 10 -) AS `t` ON `e`.`Id` = `t`.`ThreeId` -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`ThreeId` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId` """); } @@ -2513,15 +2508,15 @@ public override async Task Filtered_include_skip_navigation_order_by_unidirectio { await base.Filtered_include_skip_navigation_order_by_unidirectional(async); AssertSql( -""" -SELECT `u`.`Id`, `u`.`CollectionInverseId`, `u`.`Name`, `u`.`ReferenceInverseId`, `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name`, `t`.`ReferenceInverseId`, `t`.`ThreeId`, `t`.`TwoId` + """ +SELECT `u`.`Id`, `u`.`CollectionInverseId`, `u`.`Name`, `u`.`ReferenceInverseId`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId`, `s`.`ThreeId`, `s`.`TwoId` FROM `UnidirectionalEntityThrees` AS `u` LEFT JOIN ( SELECT `u1`.`Id`, `u1`.`CollectionInverseId`, `u1`.`ExtraId`, `u1`.`Name`, `u1`.`ReferenceInverseId`, `u0`.`ThreeId`, `u0`.`TwoId` FROM `UnidirectionalJoinTwoToThree` AS `u0` INNER JOIN `UnidirectionalEntityTwos` AS `u1` ON `u0`.`TwoId` = `u1`.`Id` -) AS `t` ON `u`.`Id` = `t`.`ThreeId` -ORDER BY `u`.`Id`, `t`.`Id`, `t`.`ThreeId` +) AS `s` ON `u`.`Id` = `s`.`ThreeId` +ORDER BY `u`.`Id`, `s`.`Id`, `s`.`ThreeId` """); } @@ -2592,23 +2587,23 @@ public override async Task Filtered_include_skip_navigation_where_then_include_s await base.Filtered_include_skip_navigation_where_then_include_skip_navigation_unidirectional(async); AssertSql( -""" -SELECT `u`.`Id`, `u`.`Name`, `u0`.`Number`, `u1`.`IsGreen`, `t0`.`Key1`, `t0`.`Key2`, `t0`.`Key3`, `t0`.`Name`, `t0`.`LeafId`, `t0`.`CompositeId1`, `t0`.`CompositeId2`, `t0`.`CompositeId3`, `t0`.`Id`, `t0`.`CollectionInverseId`, `t0`.`ExtraId`, `t0`.`Name0`, `t0`.`ReferenceInverseId`, `t0`.`TwoSkipSharedId`, `t0`.`UnidirectionalEntityCompositeKeyKey1`, `t0`.`UnidirectionalEntityCompositeKeyKey2`, `t0`.`UnidirectionalEntityCompositeKeyKey3` + """ +SELECT `u`.`Id`, `u`.`Name`, `u0`.`Number`, `u1`.`IsGreen`, `s0`.`Key1`, `s0`.`Key2`, `s0`.`Key3`, `s0`.`Name`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name0`, `s0`.`ReferenceInverseId`, `s0`.`TwoSkipSharedId`, `s0`.`UnidirectionalEntityCompositeKeyKey1`, `s0`.`UnidirectionalEntityCompositeKeyKey2`, `s0`.`UnidirectionalEntityCompositeKeyKey3` FROM ((`UnidirectionalRoots` AS `u` INNER JOIN `UnidirectionalBranches` AS `u0` ON `u`.`Id` = `u0`.`Id`) INNER JOIN `UnidirectionalLeaves` AS `u1` ON `u`.`Id` = `u1`.`Id`) LEFT JOIN ( - SELECT `u3`.`Key1`, `u3`.`Key2`, `u3`.`Key3`, `u3`.`Name`, `u2`.`LeafId`, `u2`.`CompositeId1`, `u2`.`CompositeId2`, `u2`.`CompositeId3`, `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name` AS `Name0`, `t`.`ReferenceInverseId`, `t`.`TwoSkipSharedId`, `t`.`UnidirectionalEntityCompositeKeyKey1`, `t`.`UnidirectionalEntityCompositeKeyKey2`, `t`.`UnidirectionalEntityCompositeKeyKey3` + SELECT `u3`.`Key1`, `u3`.`Key2`, `u3`.`Key3`, `u3`.`Name`, `u2`.`LeafId`, `u2`.`CompositeId1`, `u2`.`CompositeId2`, `u2`.`CompositeId3`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name` AS `Name0`, `s`.`ReferenceInverseId`, `s`.`TwoSkipSharedId`, `s`.`UnidirectionalEntityCompositeKeyKey1`, `s`.`UnidirectionalEntityCompositeKeyKey2`, `s`.`UnidirectionalEntityCompositeKeyKey3` FROM (`UnidirectionalJoinCompositeKeyToLeaf` AS `u2` INNER JOIN `UnidirectionalEntityCompositeKeys` AS `u3` ON `u2`.`CompositeId1` = `u3`.`Key1` AND `u2`.`CompositeId2` = `u3`.`Key2` AND `u2`.`CompositeId3` = `u3`.`Key3`) LEFT JOIN ( SELECT `u5`.`Id`, `u5`.`CollectionInverseId`, `u5`.`ExtraId`, `u5`.`Name`, `u5`.`ReferenceInverseId`, `u4`.`TwoSkipSharedId`, `u4`.`UnidirectionalEntityCompositeKeyKey1`, `u4`.`UnidirectionalEntityCompositeKeyKey2`, `u4`.`UnidirectionalEntityCompositeKeyKey3` FROM `UnidirectionalEntityCompositeKeyUnidirectionalEntityTwo` AS `u4` INNER JOIN `UnidirectionalEntityTwos` AS `u5` ON `u4`.`TwoSkipSharedId` = `u5`.`Id` - ) AS `t` ON `u3`.`Key1` = `t`.`UnidirectionalEntityCompositeKeyKey1` AND `u3`.`Key2` = `t`.`UnidirectionalEntityCompositeKeyKey2` AND `u3`.`Key3` = `t`.`UnidirectionalEntityCompositeKeyKey3` + ) AS `s` ON `u3`.`Key1` = `s`.`UnidirectionalEntityCompositeKeyKey1` AND `u3`.`Key2` = `s`.`UnidirectionalEntityCompositeKeyKey2` AND `u3`.`Key3` = `s`.`UnidirectionalEntityCompositeKeyKey3` WHERE `u3`.`Key1` < 5 -) AS `t0` ON `u`.`Id` = `t0`.`LeafId` -ORDER BY `u`.`Id`, `t0`.`LeafId`, `t0`.`CompositeId1`, `t0`.`CompositeId2`, `t0`.`CompositeId3`, `t0`.`Key1`, `t0`.`Key2`, `t0`.`Key3`, `t0`.`TwoSkipSharedId`, `t0`.`UnidirectionalEntityCompositeKeyKey1`, `t0`.`UnidirectionalEntityCompositeKeyKey2`, `t0`.`UnidirectionalEntityCompositeKeyKey3` +) AS `s0` ON `u`.`Id` = `s0`.`LeafId` +ORDER BY `u`.`Id`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Key1`, `s0`.`Key2`, `s0`.`Key3`, `s0`.`TwoSkipSharedId`, `s0`.`UnidirectionalEntityCompositeKeyKey1`, `s0`.`UnidirectionalEntityCompositeKeyKey2`, `s0`.`UnidirectionalEntityCompositeKeyKey3` """); } @@ -2617,8 +2612,8 @@ public override async Task Filter_include_on_skip_navigation_combined_unidirecti await base.Filter_include_on_skip_navigation_combined_unidirectional(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `t`.`Id`, `t`.`Name`, `t`.`Id0`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name0`, `t`.`ReferenceInverseId`, `t`.`OneId`, `t`.`TwoId`, `t`.`Id1`, `t`.`CollectionInverseId0`, `t`.`ExtraId0`, `t`.`Name1`, `t`.`ReferenceInverseId0` + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id1`, `s`.`CollectionInverseId0`, `s`.`ExtraId0`, `s`.`Name1`, `s`.`ReferenceInverseId0` FROM `EntityTwos` AS `e` LEFT JOIN ( SELECT `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `j`.`OneId`, `j`.`TwoId`, `e2`.`Id` AS `Id1`, `e2`.`CollectionInverseId` AS `CollectionInverseId0`, `e2`.`ExtraId` AS `ExtraId0`, `e2`.`Name` AS `Name1`, `e2`.`ReferenceInverseId` AS `ReferenceInverseId0` @@ -2627,8 +2622,8 @@ LEFT JOIN ( LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId`) LEFT JOIN `EntityTwos` AS `e2` ON `e0`.`Id` = `e2`.`CollectionInverseId` WHERE `e0`.`Id` < 10 -) AS `t` ON `e`.`Id` = `t`.`TwoId` -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`TwoId`, `t`.`Id`, `t`.`Id0` +) AS `s` ON `e`.`Id` = `s`.`TwoId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s`.`Id0` """); } @@ -2651,14 +2646,14 @@ public override async Task Select_many_over_skip_navigation_where_non_equality_u await base.Select_many_over_skip_navigation_where_non_equality_unidirectional(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name`, `t`.`ReferenceInverseId` + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId` FROM `UnidirectionalEntityOnes` AS `u` LEFT JOIN ( SELECT `u1`.`Id`, `u1`.`CollectionInverseId`, `u1`.`ExtraId`, `u1`.`Name`, `u1`.`ReferenceInverseId`, `u0`.`OneId` FROM `UnidirectionalJoinOneToTwo` AS `u0` INNER JOIN `UnidirectionalEntityTwos` AS `u1` ON `u0`.`TwoId` = `u1`.`Id` -) AS `t` ON `u`.`Id` = `t`.`OneId` AND `u`.`Id` <> `t`.`Id` +) AS `s` ON `u`.`Id` = `s`.`OneId` AND `u`.`Id` <> `s`.`Id` """); } diff --git a/test/EFCore.Jet.FunctionalTests/Query/TPTManyToManyQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/TPTManyToManyQueryJetTest.cs index 4567e078..83e5a683 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/TPTManyToManyQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/TPTManyToManyQueryJetTest.cs @@ -19,9 +19,6 @@ public TPTManyToManyQueryJetTest(TPTManyToManyQueryJetFixture fixture, ITestOutp Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper); } - protected override bool CanExecuteQueryString - => false; - [ConditionalFact] public virtual void Check_all_tests_overridden() => TestHelpers.AssertAllMethodsOverridden(GetType()); @@ -112,21 +109,20 @@ public override async Task Skip_navigation_count_with_predicate(bool async) AssertSql( """ -SELECT `t1`.`Id`, `t1`.`Name`, `t1`.`c` +SELECT `e0`.`Id`, `e0`.`Name`, `e0`.`c` FROM ( SELECT `e`.`Id`, `e`.`Name`, ( SELECT COUNT(*) - FROM `JoinOneToBranch` AS `j0` + FROM `JoinOneToBranch` AS `j` INNER JOIN ( - SELECT `r0`.`Id`, `r0`.`Name`, `b0`.`Number`, `l0`.`IsGreen`, IIF(`l0`.`Id` IS NOT NULL, 'EntityLeaf', NULL) AS `Discriminator` - FROM (`Roots` AS `r0` - INNER JOIN `Branches` AS `b0` ON `r0`.`Id` = `b0`.`Id`) - LEFT JOIN `Leaves` AS `l0` ON `r0`.`Id` = `l0`.`Id` - ) AS `t0` ON `j0`.`EntityBranchId` = `t0`.`Id` - WHERE `e`.`Id` = `j0`.`EntityOneId` AND (`t0`.`Name` LIKE 'L%')) AS `c` + SELECT `r`.`Id`, `r`.`Name` + FROM `Roots` AS `r` + INNER JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id` + ) AS `s` ON `j`.`EntityBranchId` = `s`.`Id` + WHERE `e`.`Id` = `j`.`EntityOneId` AND (`s`.`Name` LIKE 'L%')) AS `c` FROM `EntityOnes` AS `e` -) AS `t1` -ORDER BY `t1`.`c`, `t1`.`Id` +) AS `e0` +ORDER BY `e0`.`c`, `e0`.`Id` """); } @@ -152,16 +148,16 @@ public override async Task Skip_navigation_long_count_with_predicate(bool async) AssertSql( """ -SELECT `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name`, `t`.`ReferenceInverseId`, `t`.`c` +SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e2`.`c` FROM ( SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, ( SELECT COUNT(*) - FROM `EntityTwoEntityTwo` AS `e2` - INNER JOIN `EntityTwos` AS `e3` ON `e2`.`SelfSkipSharedLeftId` = `e3`.`Id` - WHERE `e`.`Id` = `e2`.`SelfSkipSharedRightId` AND (`e3`.`Name` LIKE 'L%')) AS `c` + FROM `EntityTwoEntityTwo` AS `e0` + INNER JOIN `EntityTwos` AS `e1` ON `e0`.`SelfSkipSharedLeftId` = `e1`.`Id` + WHERE `e`.`Id` = `e0`.`SelfSkipSharedRightId` AND (`e1`.`Name` LIKE 'L%')) AS `c` FROM `EntityTwos` AS `e` -) AS `t` -ORDER BY `t`.`c` DESC, `t`.`Id` +) AS `e2` +ORDER BY `e2`.`c` DESC, `e2`.`Id` """); } @@ -170,14 +166,14 @@ public override async Task Skip_navigation_select_many_average(bool async) await base.Skip_navigation_select_many_average(async); AssertSql( -""" -SELECT AVG(CDBL(`t`.`Key1`)) + """ +SELECT AVG(CDBL(`s`.`Key1`)) FROM `EntityTwos` AS `e` INNER JOIN ( SELECT `e1`.`Key1`, `e0`.`TwoSkipSharedId` FROM `EntityCompositeKeyEntityTwo` AS `e0` INNER JOIN `EntityCompositeKeys` AS `e1` ON `e0`.`CompositeKeySkipSharedKey1` = `e1`.`Key1` AND `e0`.`CompositeKeySkipSharedKey2` = `e1`.`Key2` AND `e0`.`CompositeKeySkipSharedKey3` = `e1`.`Key3` -) AS `t` ON `e`.`Id` = `t`.`TwoSkipSharedId` +) AS `s` ON `e`.`Id` = `s`.`TwoSkipSharedId` """); } @@ -186,14 +182,14 @@ public override async Task Skip_navigation_select_many_max(bool async) await base.Skip_navigation_select_many_max(async); AssertSql( -""" -SELECT MAX(`t`.`Key1`) + """ +SELECT MAX(`s`.`Key1`) FROM `EntityThrees` AS `e` INNER JOIN ( SELECT `e0`.`Key1`, `j`.`ThreeId` FROM `JoinThreeToCompositeKeyFull` AS `j` INNER JOIN `EntityCompositeKeys` AS `e0` ON `j`.`CompositeId1` = `e0`.`Key1` AND `j`.`CompositeId2` = `e0`.`Key2` AND `j`.`CompositeId3` = `e0`.`Key3` -) AS `t` ON `e`.`Id` = `t`.`ThreeId` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` """); } @@ -202,17 +198,17 @@ public override async Task Skip_navigation_select_many_min(bool async) await base.Skip_navigation_select_many_min(async); AssertSql( -""" -SELECT MIN(`t0`.`Id`) + """ +SELECT MIN(`s0`.`Id`) FROM `EntityThrees` AS `e` INNER JOIN ( - SELECT `t`.`Id`, `e0`.`ThreeSkipSharedId` + SELECT `s`.`Id`, `e0`.`ThreeSkipSharedId` FROM `EntityRootEntityThree` AS `e0` INNER JOIN ( SELECT `r`.`Id` FROM `Roots` AS `r` - ) AS `t` ON `e0`.`RootSkipSharedId` = `t`.`Id` -) AS `t0` ON `e`.`Id` = `t0`.`ThreeSkipSharedId` + ) AS `s` ON `e0`.`RootSkipSharedId` = `s`.`Id` +) AS `s0` ON `e`.`Id` = `s0`.`ThreeSkipSharedId` """); } @@ -221,14 +217,14 @@ public override async Task Skip_navigation_select_many_sum(bool async) await base.Skip_navigation_select_many_sum(async); AssertSql( -""" -SELECT IIF(SUM(`t`.`Key1`) IS NULL, 0, SUM(`t`.`Key1`)) + """ +SELECT IIF(SUM(`s`.`Key1`) IS NULL, 0, SUM(`s`.`Key1`)) FROM `Roots` AS `r` INNER JOIN ( SELECT `e0`.`Key1`, `e`.`RootSkipSharedId` FROM `EntityCompositeKeyEntityRoot` AS `e` INNER JOIN `EntityCompositeKeys` AS `e0` ON `e`.`CompositeKeySkipSharedKey1` = `e0`.`Key1` AND `e`.`CompositeKeySkipSharedKey2` = `e0`.`Key2` AND `e`.`CompositeKeySkipSharedKey3` = `e0`.`Key3` -) AS `t` ON `r`.`Id` = `t`.`RootSkipSharedId` +) AS `s` ON `r`.`Id` = `s`.`RootSkipSharedId` """); } @@ -382,20 +378,20 @@ public override async Task Skip_navigation_cast(bool async) await base.Skip_navigation_cast(async); AssertSql( -""" -SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `t0`.`Id`, `t0`.`Name`, `t0`.`Number`, `t0`.`IsGreen`, `t0`.`LeafId`, `t0`.`CompositeId1`, `t0`.`CompositeId2`, `t0`.`CompositeId3` + """ +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s0`.`Id`, `s0`.`Name`, `s0`.`Number`, `s0`.`IsGreen`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3` FROM `EntityCompositeKeys` AS `e` LEFT JOIN ( - SELECT `t`.`Id`, `t`.`Name`, `t`.`Number`, `t`.`IsGreen`, `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3` + SELECT `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3` FROM `JoinCompositeKeyToLeaf` AS `j` INNER JOIN ( SELECT `r`.`Id`, `r`.`Name`, `b`.`Number`, `l`.`IsGreen` FROM (`Roots` AS `r` INNER JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) INNER JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id` - ) AS `t` ON `j`.`LeafId` = `t`.`Id` -) AS `t0` ON `e`.`Key1` = `t0`.`CompositeId1` AND `e`.`Key2` = `t0`.`CompositeId2` AND `e`.`Key3` = `t0`.`CompositeId3` -ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `t0`.`LeafId`, `t0`.`CompositeId1`, `t0`.`CompositeId2`, `t0`.`CompositeId3` + ) AS `s` ON `j`.`LeafId` = `s`.`Id` +) AS `s0` ON `e`.`Key1` = `s0`.`CompositeId1` AND `e`.`Key2` = `s0`.`CompositeId2` AND `e`.`Key3` = `s0`.`CompositeId3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3` """); } @@ -404,11 +400,11 @@ public override async Task Skip_navigation_of_type(bool async) await base.Skip_navigation_of_type(async); AssertSql( -""" -SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `t0`.`Id`, `t0`.`Name`, `t0`.`Number`, `t0`.`IsGreen`, `t0`.`Discriminator`, `t0`.`RootSkipSharedId`, `t0`.`CompositeKeySkipSharedKey1`, `t0`.`CompositeKeySkipSharedKey2`, `t0`.`CompositeKeySkipSharedKey3` + """ +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s0`.`Id`, `s0`.`Name`, `s0`.`Number`, `s0`.`IsGreen`, `s0`.`Discriminator`, `s0`.`RootSkipSharedId`, `s0`.`CompositeKeySkipSharedKey1`, `s0`.`CompositeKeySkipSharedKey2`, `s0`.`CompositeKeySkipSharedKey3` FROM `EntityCompositeKeys` AS `e` LEFT JOIN ( - SELECT `t`.`Id`, `t`.`Name`, `t`.`Number`, `t`.`IsGreen`, `t`.`Discriminator`, `e0`.`RootSkipSharedId`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3` + SELECT `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s`.`Discriminator`, `e0`.`RootSkipSharedId`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3` FROM `EntityCompositeKeyEntityRoot` AS `e0` INNER JOIN ( SELECT `r`.`Id`, `r`.`Name`, `b`.`Number`, `l`.`IsGreen`, IIF(`l0`.`Id` IS NOT NULL, 'EntityLeaf2', IIF(`l`.`Id` IS NOT NULL, 'EntityLeaf', IIF(`b`.`Id` IS NOT NULL, 'EntityBranch', NULL))) AS `Discriminator` @@ -416,10 +412,10 @@ INNER JOIN ( LEFT JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) LEFT JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id`) LEFT JOIN `Leaf2s` AS `l0` ON `r`.`Id` = `l0`.`Id` - ) AS `t` ON `e0`.`RootSkipSharedId` = `t`.`Id` - WHERE `t`.`Discriminator` = 'EntityLeaf' -) AS `t0` ON `e`.`Key1` = `t0`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `t0`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `t0`.`CompositeKeySkipSharedKey3` -ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `t0`.`RootSkipSharedId`, `t0`.`CompositeKeySkipSharedKey1`, `t0`.`CompositeKeySkipSharedKey2`, `t0`.`CompositeKeySkipSharedKey3` + ) AS `s` ON `e0`.`RootSkipSharedId` = `s`.`Id` + WHERE `s`.`Discriminator` = 'EntityLeaf' +) AS `s0` ON `e`.`Key1` = `s0`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `s0`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `s0`.`CompositeKeySkipSharedKey3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s0`.`RootSkipSharedId`, `s0`.`CompositeKeySkipSharedKey1`, `s0`.`CompositeKeySkipSharedKey2`, `s0`.`CompositeKeySkipSharedKey3` """); } @@ -468,14 +464,14 @@ public override async Task Select_many_over_skip_navigation(bool async) await base.Select_many_over_skip_navigation(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`CollectionInverseId`, `t`.`Name`, `t`.`ReferenceInverseId` + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId` FROM `Roots` AS `r` INNER JOIN ( SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `e`.`RootSkipSharedId` FROM `EntityRootEntityThree` AS `e` INNER JOIN `EntityThrees` AS `e0` ON `e`.`ThreeSkipSharedId` = `e0`.`Id` -) AS `t` ON `r`.`Id` = `t`.`RootSkipSharedId` +) AS `s` ON `r`.`Id` = `s`.`RootSkipSharedId` """); } @@ -484,14 +480,14 @@ public override async Task Select_many_over_skip_navigation_where(bool async) await base.Select_many_over_skip_navigation_where(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name`, `t`.`ReferenceInverseId` + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId` FROM `EntityOnes` AS `e` LEFT JOIN ( SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `j`.`OneId` FROM `JoinOneToTwo` AS `j` INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` -) AS `t` ON `e`.`Id` = `t`.`OneId` +) AS `s` ON `e`.`Id` = `s`.`OneId` """); } @@ -560,11 +556,11 @@ public override async Task Select_many_over_skip_navigation_of_type(bool async) await base.Select_many_over_skip_navigation_of_type(async); AssertSql( -""" -SELECT `t0`.`Id`, `t0`.`Name`, `t0`.`Number`, `t0`.`IsGreen`, `t0`.`Discriminator` + """ +SELECT `s0`.`Id`, `s0`.`Name`, `s0`.`Number`, `s0`.`IsGreen`, `s0`.`Discriminator` FROM `EntityThrees` AS `e` INNER JOIN ( - SELECT `t`.`Id`, `t`.`Name`, `t`.`Number`, `t`.`IsGreen`, `t`.`Discriminator`, `e0`.`ThreeSkipSharedId` + SELECT `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s`.`Discriminator`, `e0`.`ThreeSkipSharedId` FROM `EntityRootEntityThree` AS `e0` INNER JOIN ( SELECT `r`.`Id`, `r`.`Name`, `b`.`Number`, `l`.`IsGreen`, IIF(`l0`.`Id` IS NOT NULL, 'EntityLeaf2', IIF(`l`.`Id` IS NOT NULL, 'EntityLeaf', IIF(`b`.`Id` IS NOT NULL, 'EntityBranch', NULL))) AS `Discriminator` @@ -572,9 +568,9 @@ INNER JOIN ( LEFT JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) LEFT JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id`) LEFT JOIN `Leaf2s` AS `l0` ON `r`.`Id` = `l0`.`Id` - ) AS `t` ON `e0`.`RootSkipSharedId` = `t`.`Id` - WHERE `t`.`Discriminator` IN ('EntityBranch', 'EntityLeaf') -) AS `t0` ON `e`.`Id` = `t0`.`ThreeSkipSharedId` + ) AS `s` ON `e0`.`RootSkipSharedId` = `s`.`Id` + WHERE `s`.`Discriminator` IN ('EntityBranch', 'EntityLeaf') +) AS `s0` ON `e`.`Id` = `s0`.`ThreeSkipSharedId` """); } @@ -583,19 +579,19 @@ public override async Task Select_many_over_skip_navigation_cast(bool async) await base.Select_many_over_skip_navigation_cast(async); AssertSql( -""" -SELECT `t0`.`Id`, `t0`.`Name`, `t0`.`Number`, `t0`.`IsGreen`, `t0`.`Discriminator` + """ +SELECT `s0`.`Id`, `s0`.`Name`, `s0`.`Number`, `s0`.`IsGreen`, `s0`.`Discriminator` FROM `EntityOnes` AS `e` INNER JOIN ( - SELECT `t`.`Id`, `t`.`Name`, `t`.`Number`, `t`.`IsGreen`, `t`.`Discriminator`, `j`.`EntityOneId` + SELECT `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s`.`Discriminator`, `j`.`EntityOneId` FROM `JoinOneToBranch` AS `j` INNER JOIN ( SELECT `r`.`Id`, `r`.`Name`, `b`.`Number`, `l`.`IsGreen`, IIF(`l`.`Id` IS NOT NULL, 'EntityLeaf', NULL) AS `Discriminator` FROM (`Roots` AS `r` INNER JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) LEFT JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id` - ) AS `t` ON `j`.`EntityBranchId` = `t`.`Id` -) AS `t0` ON `e`.`Id` = `t0`.`EntityOneId` + ) AS `s` ON `j`.`EntityBranchId` = `s`.`Id` +) AS `s0` ON `e`.`Id` = `s0`.`EntityOneId` """); } @@ -604,15 +600,15 @@ public override async Task Select_skip_navigation(bool async) await base.Select_skip_navigation(async); AssertSql( -""" -SELECT `e`.`Id`, `t`.`Id`, `t`.`Name`, `t`.`LeftId`, `t`.`RightId` + """ +SELECT `e`.`Id`, `s`.`Id`, `s`.`Name`, `s`.`LeftId`, `s`.`RightId` FROM `EntityOnes` AS `e` LEFT JOIN ( SELECT `e0`.`Id`, `e0`.`Name`, `j`.`LeftId`, `j`.`RightId` FROM `JoinOneSelfPayload` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`LeftId` = `e0`.`Id` -) AS `t` ON `e`.`Id` = `t`.`RightId` -ORDER BY `e`.`Id`, `t`.`LeftId`, `t`.`RightId` +) AS `s` ON `e`.`Id` = `s`.`RightId` +ORDER BY `e`.`Id`, `s`.`LeftId`, `s`.`RightId` """); } @@ -621,25 +617,25 @@ public override async Task Select_skip_navigation_multiple(bool async) await base.Select_skip_navigation_multiple(async); AssertSql( -""" -SELECT `e`.`Id`, `t`.`Id`, `t`.`CollectionInverseId`, `t`.`Name`, `t`.`ReferenceInverseId`, `t`.`ThreeId`, `t`.`TwoId`, `t0`.`Id`, `t0`.`CollectionInverseId`, `t0`.`ExtraId`, `t0`.`Name`, `t0`.`ReferenceInverseId`, `t0`.`SelfSkipSharedLeftId`, `t0`.`SelfSkipSharedRightId`, `t1`.`Key1`, `t1`.`Key2`, `t1`.`Key3`, `t1`.`Name`, `t1`.`TwoSkipSharedId`, `t1`.`CompositeKeySkipSharedKey1`, `t1`.`CompositeKeySkipSharedKey2`, `t1`.`CompositeKeySkipSharedKey3` + """ +SELECT `e`.`Id`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId`, `s`.`ThreeId`, `s`.`TwoId`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name`, `s0`.`ReferenceInverseId`, `s0`.`SelfSkipSharedLeftId`, `s0`.`SelfSkipSharedRightId`, `s1`.`Key1`, `s1`.`Key2`, `s1`.`Key3`, `s1`.`Name`, `s1`.`TwoSkipSharedId`, `s1`.`CompositeKeySkipSharedKey1`, `s1`.`CompositeKeySkipSharedKey2`, `s1`.`CompositeKeySkipSharedKey3` FROM ((`EntityTwos` AS `e` LEFT JOIN ( SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `j`.`ThreeId`, `j`.`TwoId` FROM `JoinTwoToThree` AS `j` INNER JOIN `EntityThrees` AS `e0` ON `j`.`ThreeId` = `e0`.`Id` -) AS `t` ON `e`.`Id` = `t`.`TwoId`) +) AS `s` ON `e`.`Id` = `s`.`TwoId`) LEFT JOIN ( SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e1`.`SelfSkipSharedLeftId`, `e1`.`SelfSkipSharedRightId` FROM `EntityTwoEntityTwo` AS `e1` INNER JOIN `EntityTwos` AS `e2` ON `e1`.`SelfSkipSharedLeftId` = `e2`.`Id` -) AS `t0` ON `e`.`Id` = `t0`.`SelfSkipSharedRightId`) +) AS `s0` ON `e`.`Id` = `s0`.`SelfSkipSharedRightId`) LEFT JOIN ( SELECT `e4`.`Key1`, `e4`.`Key2`, `e4`.`Key3`, `e4`.`Name`, `e3`.`TwoSkipSharedId`, `e3`.`CompositeKeySkipSharedKey1`, `e3`.`CompositeKeySkipSharedKey2`, `e3`.`CompositeKeySkipSharedKey3` FROM `EntityCompositeKeyEntityTwo` AS `e3` INNER JOIN `EntityCompositeKeys` AS `e4` ON `e3`.`CompositeKeySkipSharedKey1` = `e4`.`Key1` AND `e3`.`CompositeKeySkipSharedKey2` = `e4`.`Key2` AND `e3`.`CompositeKeySkipSharedKey3` = `e4`.`Key3` -) AS `t1` ON `e`.`Id` = `t1`.`TwoSkipSharedId` -ORDER BY `e`.`Id`, `t`.`ThreeId`, `t`.`TwoId`, `t`.`Id`, `t0`.`SelfSkipSharedLeftId`, `t0`.`SelfSkipSharedRightId`, `t0`.`Id`, `t1`.`TwoSkipSharedId`, `t1`.`CompositeKeySkipSharedKey1`, `t1`.`CompositeKeySkipSharedKey2`, `t1`.`CompositeKeySkipSharedKey3`, `t1`.`Key1`, `t1`.`Key2` +) AS `s1` ON `e`.`Id` = `s1`.`TwoSkipSharedId` +ORDER BY `e`.`Id`, `s`.`ThreeId`, `s`.`TwoId`, `s`.`Id`, `s0`.`SelfSkipSharedLeftId`, `s0`.`SelfSkipSharedRightId`, `s0`.`Id`, `s1`.`TwoSkipSharedId`, `s1`.`CompositeKeySkipSharedKey1`, `s1`.`CompositeKeySkipSharedKey2`, `s1`.`CompositeKeySkipSharedKey3`, `s1`.`Key1`, `s1`.`Key2` """); } @@ -669,11 +665,11 @@ public override async Task Include_skip_navigation(bool async) await base.Include_skip_navigation(async); AssertSql( -""" -SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name`, `t0`.`RootSkipSharedId`, `t0`.`CompositeKeySkipSharedKey1`, `t0`.`CompositeKeySkipSharedKey2`, `t0`.`CompositeKeySkipSharedKey3`, `t0`.`Id`, `t0`.`Name`, `t0`.`Number`, `t0`.`Slumber`, `t0`.`IsGreen`, `t0`.`IsBrown`, `t0`.`Discriminator` + """ +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name`, `s0`.`RootSkipSharedId`, `s0`.`CompositeKeySkipSharedKey1`, `s0`.`CompositeKeySkipSharedKey2`, `s0`.`CompositeKeySkipSharedKey3`, `s0`.`Id`, `s0`.`Name`, `s0`.`Number`, `s0`.`Slumber`, `s0`.`IsGreen`, `s0`.`IsBrown`, `s0`.`Discriminator` FROM `EntityCompositeKeys` AS `e` LEFT JOIN ( - SELECT `e0`.`RootSkipSharedId`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3`, `t`.`Id`, `t`.`Name`, `t`.`Number`, `t`.`Slumber`, `t`.`IsGreen`, `t`.`IsBrown`, `t`.`Discriminator` + SELECT `e0`.`RootSkipSharedId`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3`, `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`Slumber`, `s`.`IsGreen`, `s`.`IsBrown`, `s`.`Discriminator` FROM `EntityCompositeKeyEntityRoot` AS `e0` INNER JOIN ( SELECT `r`.`Id`, `r`.`Name`, `b`.`Number`, `b0`.`Slumber`, `l`.`IsGreen`, `l0`.`IsBrown`, IIF(`l0`.`Id` IS NOT NULL, 'EntityLeaf2', IIF(`l`.`Id` IS NOT NULL, 'EntityLeaf', IIF(`b`.`Id` IS NOT NULL, 'EntityBranch', NULL))) AS `Discriminator` @@ -682,9 +678,9 @@ INNER JOIN ( LEFT JOIN `Branch2s` AS `b0` ON `r`.`Id` = `b0`.`Id`) LEFT JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id`) LEFT JOIN `Leaf2s` AS `l0` ON `r`.`Id` = `l0`.`Id` - ) AS `t` ON `e0`.`RootSkipSharedId` = `t`.`Id` -) AS `t0` ON `e`.`Key1` = `t0`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `t0`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `t0`.`CompositeKeySkipSharedKey3` -ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `t0`.`RootSkipSharedId`, `t0`.`CompositeKeySkipSharedKey1`, `t0`.`CompositeKeySkipSharedKey2`, `t0`.`CompositeKeySkipSharedKey3` + ) AS `s` ON `e0`.`RootSkipSharedId` = `s`.`Id` +) AS `s0` ON `e`.`Key1` = `s0`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `s0`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `s0`.`CompositeKeySkipSharedKey3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s0`.`RootSkipSharedId`, `s0`.`CompositeKeySkipSharedKey1`, `s0`.`CompositeKeySkipSharedKey2`, `s0`.`CompositeKeySkipSharedKey3` """); } @@ -693,16 +689,16 @@ public override async Task Include_skip_navigation_then_reference(bool async) await base.Include_skip_navigation_then_reference(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `t`.`OneId`, `t`.`TwoId`, `t`.`JoinOneToTwoExtraId`, `t`.`Id`, `t`.`Name`, `t`.`Id0`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name0`, `t`.`ReferenceInverseId` + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`OneId`, `s`.`TwoId`, `s`.`JoinOneToTwoExtraId`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId` FROM `EntityTwos` AS `e` LEFT JOIN ( SELECT `j`.`OneId`, `j`.`TwoId`, `j`.`JoinOneToTwoExtraId`, `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId` FROM (`JoinOneToTwo` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` -) AS `t` ON `e`.`Id` = `t`.`TwoId` -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`TwoId`, `t`.`Id` +) AS `s` ON `e`.`Id` = `s`.`TwoId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id` """); } @@ -711,25 +707,25 @@ public override async Task Include_skip_navigation_then_include_skip_navigation( await base.Include_skip_navigation_then_include_skip_navigation(async); AssertSql( -""" -SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name`, `t1`.`LeafId`, `t1`.`CompositeId1`, `t1`.`CompositeId2`, `t1`.`CompositeId3`, `t1`.`Id`, `t1`.`Name`, `t1`.`Number`, `t1`.`IsGreen`, `t1`.`EntityBranchId`, `t1`.`EntityOneId`, `t1`.`Id0`, `t1`.`Name0` + """ +SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name`, `s1`.`LeafId`, `s1`.`CompositeId1`, `s1`.`CompositeId2`, `s1`.`CompositeId3`, `s1`.`Id`, `s1`.`Name`, `s1`.`Number`, `s1`.`IsGreen`, `s1`.`EntityBranchId`, `s1`.`EntityOneId`, `s1`.`Id0`, `s1`.`Name0` FROM `EntityCompositeKeys` AS `e` LEFT JOIN ( - SELECT `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `t`.`Id`, `t`.`Name`, `t`.`Number`, `t`.`IsGreen`, `t0`.`EntityBranchId`, `t0`.`EntityOneId`, `t0`.`Id` AS `Id0`, `t0`.`Name` AS `Name0` + SELECT `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s0`.`EntityBranchId`, `s0`.`EntityOneId`, `s0`.`Id` AS `Id0`, `s0`.`Name` AS `Name0` FROM (`JoinCompositeKeyToLeaf` AS `j` INNER JOIN ( SELECT `r`.`Id`, `r`.`Name`, `b`.`Number`, `l`.`IsGreen` FROM (`Roots` AS `r` INNER JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) INNER JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id` - ) AS `t` ON `j`.`LeafId` = `t`.`Id`) + ) AS `s` ON `j`.`LeafId` = `s`.`Id`) LEFT JOIN ( SELECT `j0`.`EntityBranchId`, `j0`.`EntityOneId`, `e0`.`Id`, `e0`.`Name` FROM `JoinOneToBranch` AS `j0` INNER JOIN `EntityOnes` AS `e0` ON `j0`.`EntityOneId` = `e0`.`Id` - ) AS `t0` ON `t`.`Id` = `t0`.`EntityBranchId` -) AS `t1` ON `e`.`Key1` = `t1`.`CompositeId1` AND `e`.`Key2` = `t1`.`CompositeId2` AND `e`.`Key3` = `t1`.`CompositeId3` -ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `t1`.`LeafId`, `t1`.`CompositeId1`, `t1`.`CompositeId2`, `t1`.`CompositeId3`, `t1`.`Id`, `t1`.`EntityBranchId`, `t1`.`EntityOneId` + ) AS `s0` ON `s`.`Id` = `s0`.`EntityBranchId` +) AS `s1` ON `e`.`Key1` = `s1`.`CompositeId1` AND `e`.`Key2` = `s1`.`CompositeId2` AND `e`.`Key3` = `s1`.`CompositeId3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s1`.`LeafId`, `s1`.`CompositeId1`, `s1`.`CompositeId2`, `s1`.`CompositeId3`, `s1`.`Id`, `s1`.`EntityBranchId`, `s1`.`EntityOneId` """); } @@ -738,11 +734,11 @@ public override async Task Include_skip_navigation_then_include_reference_and_sk await base.Include_skip_navigation_then_include_reference_and_skip_navigation(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `t0`.`OneId`, `t0`.`ThreeId`, `t0`.`Payload`, `t0`.`Id`, `t0`.`Name`, `t0`.`Id0`, `t0`.`CollectionInverseId`, `t0`.`ExtraId`, `t0`.`Name0`, `t0`.`ReferenceInverseId`, `t0`.`LeftId`, `t0`.`RightId`, `t0`.`Payload0`, `t0`.`Id1`, `t0`.`Name1` + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Payload`, `s0`.`Id`, `s0`.`Name`, `s0`.`Id0`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name0`, `s0`.`ReferenceInverseId`, `s0`.`LeftId`, `s0`.`RightId`, `s0`.`Payload0`, `s0`.`Id1`, `s0`.`Name1` FROM `EntityThrees` AS `e` LEFT JOIN ( - SELECT `j`.`OneId`, `j`.`ThreeId`, `j`.`Payload`, `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `t`.`LeftId`, `t`.`RightId`, `t`.`Payload` AS `Payload0`, `t`.`Id` AS `Id1`, `t`.`Name` AS `Name1` + SELECT `j`.`OneId`, `j`.`ThreeId`, `j`.`Payload`, `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `s`.`LeftId`, `s`.`RightId`, `s`.`Payload` AS `Payload0`, `s`.`Id` AS `Id1`, `s`.`Name` AS `Name1` FROM ((`JoinOneToThreePayloadFull` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId`) @@ -750,9 +746,9 @@ LEFT JOIN ( SELECT `j0`.`LeftId`, `j0`.`RightId`, `j0`.`Payload`, `e2`.`Id`, `e2`.`Name` FROM `JoinOneSelfPayload` AS `j0` INNER JOIN `EntityOnes` AS `e2` ON `j0`.`RightId` = `e2`.`Id` - ) AS `t` ON `e0`.`Id` = `t`.`LeftId` -) AS `t0` ON `e`.`Id` = `t0`.`ThreeId` -ORDER BY `e`.`Id`, `t0`.`OneId`, `t0`.`ThreeId`, `t0`.`Id`, `t0`.`Id0`, `t0`.`LeftId`, `t0`.`RightId` + ) AS `s` ON `e0`.`Id` = `s`.`LeftId` +) AS `s0` ON `e`.`Id` = `s0`.`ThreeId` +ORDER BY `e`.`Id`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Id`, `s0`.`Id0`, `s0`.`LeftId`, `s0`.`RightId` """); } @@ -761,16 +757,16 @@ public override async Task Include_skip_navigation_and_reference(bool async) await base.Include_skip_navigation_and_reference(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `e0`.`Id`, `t`.`OneSkipSharedId`, `t`.`TwoSkipSharedId`, `t`.`Id`, `t`.`Name`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId` + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `e0`.`Id`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId`, `s`.`Id`, `s`.`Name`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId` FROM (`EntityTwos` AS `e` LEFT JOIN `EntityThrees` AS `e0` ON `e`.`Id` = `e0`.`ReferenceInverseId`) LEFT JOIN ( SELECT `e1`.`OneSkipSharedId`, `e1`.`TwoSkipSharedId`, `e2`.`Id`, `e2`.`Name` FROM `EntityOneEntityTwo` AS `e1` INNER JOIN `EntityOnes` AS `e2` ON `e1`.`OneSkipSharedId` = `e2`.`Id` -) AS `t` ON `e`.`Id` = `t`.`TwoSkipSharedId` -ORDER BY `e`.`Id`, `e0`.`Id`, `t`.`OneSkipSharedId`, `t`.`TwoSkipSharedId` +) AS `s` ON `e`.`Id` = `s`.`TwoSkipSharedId` +ORDER BY `e`.`Id`, `e0`.`Id`, `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId` """); } @@ -779,16 +775,16 @@ public override async Task Filtered_include_skip_navigation_where(bool async) await base.Filtered_include_skip_navigation_where(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `t`.`OneId`, `t`.`ThreeId`, `t`.`Payload`, `t`.`Id`, `t`.`Name` + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Payload`, `s`.`Id`, `s`.`Name` FROM `EntityThrees` AS `e` LEFT JOIN ( SELECT `j`.`OneId`, `j`.`ThreeId`, `j`.`Payload`, `e0`.`Id`, `e0`.`Name` FROM `JoinOneToThreePayloadFullShared` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` WHERE `e0`.`Id` < 10 -) AS `t` ON `e`.`Id` = `t`.`ThreeId` -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`ThreeId` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId` """); } @@ -797,15 +793,15 @@ public override async Task Filtered_include_skip_navigation_order_by(bool async) await base.Filtered_include_skip_navigation_order_by(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `t`.`ThreeId`, `t`.`TwoId`, `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name`, `t`.`ReferenceInverseId` + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`ThreeId`, `s`.`TwoId`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId` FROM `EntityThrees` AS `e` LEFT JOIN ( SELECT `j`.`ThreeId`, `j`.`TwoId`, `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId` FROM `JoinTwoToThree` AS `j` INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` -) AS `t` ON `e`.`Id` = `t`.`ThreeId` -ORDER BY `e`.`Id`, `t`.`Id`, `t`.`ThreeId` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`Id`, `s`.`ThreeId` """); } @@ -877,15 +873,15 @@ public override async Task Filtered_then_include_skip_navigation_where(bool asyn await base.Filtered_then_include_skip_navigation_where(async); AssertSql( -""" -SELECT `r`.`Id`, `r`.`Name`, `b`.`Number`, `b0`.`Slumber`, `l`.`IsGreen`, `l0`.`IsBrown`, IIF(`l0`.`Id` IS NOT NULL, 'EntityLeaf2', IIF(`l`.`Id` IS NOT NULL, 'EntityLeaf', IIF(`b`.`Id` IS NOT NULL, 'EntityBranch', NULL))) AS `Discriminator`, `t0`.`RootSkipSharedId`, `t0`.`ThreeSkipSharedId`, `t0`.`Id`, `t0`.`CollectionInverseId`, `t0`.`Name`, `t0`.`ReferenceInverseId`, `t0`.`OneId`, `t0`.`ThreeId`, `t0`.`Payload`, `t0`.`Id0`, `t0`.`Name0` + """ +SELECT `r`.`Id`, `r`.`Name`, `b`.`Number`, `b0`.`Slumber`, `l`.`IsGreen`, `l0`.`IsBrown`, IIF(`l0`.`Id` IS NOT NULL, 'EntityLeaf2', IIF(`l`.`Id` IS NOT NULL, 'EntityLeaf', IIF(`b`.`Id` IS NOT NULL, 'EntityBranch', NULL))) AS `Discriminator`, `s0`.`RootSkipSharedId`, `s0`.`ThreeSkipSharedId`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`Name`, `s0`.`ReferenceInverseId`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Payload`, `s0`.`Id0`, `s0`.`Name0` FROM ((((`Roots` AS `r` LEFT JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) LEFT JOIN `Branch2s` AS `b0` ON `r`.`Id` = `b0`.`Id`) LEFT JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id`) LEFT JOIN `Leaf2s` AS `l0` ON `r`.`Id` = `l0`.`Id`) LEFT JOIN ( - SELECT `e`.`RootSkipSharedId`, `e`.`ThreeSkipSharedId`, `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `t`.`OneId`, `t`.`ThreeId`, `t`.`Payload`, `t`.`Id` AS `Id0`, `t`.`Name` AS `Name0` + SELECT `e`.`RootSkipSharedId`, `e`.`ThreeSkipSharedId`, `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Payload`, `s`.`Id` AS `Id0`, `s`.`Name` AS `Name0` FROM (`EntityRootEntityThree` AS `e` INNER JOIN `EntityThrees` AS `e0` ON `e`.`ThreeSkipSharedId` = `e0`.`Id`) LEFT JOIN ( @@ -893,9 +889,9 @@ LEFT JOIN ( FROM `JoinOneToThreePayloadFullShared` AS `j` INNER JOIN `EntityOnes` AS `e1` ON `j`.`OneId` = `e1`.`Id` WHERE `e1`.`Id` < 10 - ) AS `t` ON `e0`.`Id` = `t`.`ThreeId` -) AS `t0` ON `r`.`Id` = `t0`.`RootSkipSharedId` -ORDER BY `r`.`Id`, `t0`.`RootSkipSharedId`, `t0`.`ThreeSkipSharedId`, `t0`.`Id`, `t0`.`OneId`, `t0`.`ThreeId` + ) AS `s` ON `e0`.`Id` = `s`.`ThreeId` +) AS `s0` ON `r`.`Id` = `s0`.`RootSkipSharedId` +ORDER BY `r`.`Id`, `s0`.`RootSkipSharedId`, `s0`.`ThreeSkipSharedId`, `s0`.`Id`, `s0`.`OneId`, `s0`.`ThreeId` """); } @@ -938,23 +934,23 @@ public override async Task Filtered_include_skip_navigation_where_then_include_s await base.Filtered_include_skip_navigation_where_then_include_skip_navigation(async); AssertSql( -""" -SELECT `r`.`Id`, `r`.`Name`, `b`.`Number`, `l`.`IsGreen`, `t0`.`LeafId`, `t0`.`CompositeId1`, `t0`.`CompositeId2`, `t0`.`CompositeId3`, `t0`.`Key1`, `t0`.`Key2`, `t0`.`Key3`, `t0`.`Name`, `t0`.`TwoSkipSharedId`, `t0`.`CompositeKeySkipSharedKey1`, `t0`.`CompositeKeySkipSharedKey2`, `t0`.`CompositeKeySkipSharedKey3`, `t0`.`Id`, `t0`.`CollectionInverseId`, `t0`.`ExtraId`, `t0`.`Name0`, `t0`.`ReferenceInverseId` + """ +SELECT `r`.`Id`, `r`.`Name`, `b`.`Number`, `l`.`IsGreen`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Key1`, `s0`.`Key2`, `s0`.`Key3`, `s0`.`Name`, `s0`.`TwoSkipSharedId`, `s0`.`CompositeKeySkipSharedKey1`, `s0`.`CompositeKeySkipSharedKey2`, `s0`.`CompositeKeySkipSharedKey3`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name0`, `s0`.`ReferenceInverseId` FROM ((`Roots` AS `r` INNER JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) INNER JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id`) LEFT JOIN ( - SELECT `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name`, `t`.`TwoSkipSharedId`, `t`.`CompositeKeySkipSharedKey1`, `t`.`CompositeKeySkipSharedKey2`, `t`.`CompositeKeySkipSharedKey3`, `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name` AS `Name0`, `t`.`ReferenceInverseId` + SELECT `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name`, `s`.`TwoSkipSharedId`, `s`.`CompositeKeySkipSharedKey1`, `s`.`CompositeKeySkipSharedKey2`, `s`.`CompositeKeySkipSharedKey3`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name` AS `Name0`, `s`.`ReferenceInverseId` FROM (`JoinCompositeKeyToLeaf` AS `j` INNER JOIN `EntityCompositeKeys` AS `e` ON `j`.`CompositeId1` = `e`.`Key1` AND `j`.`CompositeId2` = `e`.`Key2` AND `j`.`CompositeId3` = `e`.`Key3`) LEFT JOIN ( SELECT `e0`.`TwoSkipSharedId`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3`, `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name`, `e1`.`ReferenceInverseId` FROM `EntityCompositeKeyEntityTwo` AS `e0` INNER JOIN `EntityTwos` AS `e1` ON `e0`.`TwoSkipSharedId` = `e1`.`Id` - ) AS `t` ON `e`.`Key1` = `t`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `t`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `t`.`CompositeKeySkipSharedKey3` + ) AS `s` ON `e`.`Key1` = `s`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `s`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `s`.`CompositeKeySkipSharedKey3` WHERE `e`.`Key1` < 5 -) AS `t0` ON `r`.`Id` = `t0`.`LeafId` -ORDER BY `r`.`Id`, `t0`.`LeafId`, `t0`.`CompositeId1`, `t0`.`CompositeId2`, `t0`.`CompositeId3`, `t0`.`Key1`, `t0`.`Key2`, `t0`.`Key3`, `t0`.`TwoSkipSharedId`, `t0`.`CompositeKeySkipSharedKey1`, `t0`.`CompositeKeySkipSharedKey2`, `t0`.`CompositeKeySkipSharedKey3` +) AS `s0` ON `r`.`Id` = `s0`.`LeafId` +ORDER BY `r`.`Id`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Key1`, `s0`.`Key2`, `s0`.`Key3`, `s0`.`TwoSkipSharedId`, `s0`.`CompositeKeySkipSharedKey1`, `s0`.`CompositeKeySkipSharedKey2`, `s0`.`CompositeKeySkipSharedKey3` """); } @@ -1019,8 +1015,8 @@ public override async Task Filter_include_on_skip_navigation_combined(bool async await base.Filter_include_on_skip_navigation_combined(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `t`.`OneId`, `t`.`TwoId`, `t`.`JoinOneToTwoExtraId`, `t`.`Id`, `t`.`Name`, `t`.`Id0`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name0`, `t`.`ReferenceInverseId`, `t`.`Id1`, `t`.`CollectionInverseId0`, `t`.`ExtraId0`, `t`.`Name1`, `t`.`ReferenceInverseId0` + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`OneId`, `s`.`TwoId`, `s`.`JoinOneToTwoExtraId`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `s`.`Id1`, `s`.`CollectionInverseId0`, `s`.`ExtraId0`, `s`.`Name1`, `s`.`ReferenceInverseId0` FROM `EntityTwos` AS `e` LEFT JOIN ( SELECT `j`.`OneId`, `j`.`TwoId`, `j`.`JoinOneToTwoExtraId`, `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `e2`.`Id` AS `Id1`, `e2`.`CollectionInverseId` AS `CollectionInverseId0`, `e2`.`ExtraId` AS `ExtraId0`, `e2`.`Name` AS `Name1`, `e2`.`ReferenceInverseId` AS `ReferenceInverseId0` @@ -1029,8 +1025,8 @@ LEFT JOIN ( LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId`) LEFT JOIN `EntityTwos` AS `e2` ON `e0`.`Id` = `e2`.`CollectionInverseId` WHERE `e0`.`Id` < 10 -) AS `t` ON `e`.`Id` = `t`.`TwoId` -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`TwoId`, `t`.`Id`, `t`.`Id0` +) AS `s` ON `e`.`Id` = `s`.`TwoId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s`.`Id0` """); } @@ -1079,21 +1075,21 @@ public override async Task Filtered_include_on_skip_navigation_then_filtered_inc await base.Filtered_include_on_skip_navigation_then_filtered_include_on_navigation(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `t0`.`OneId`, `t0`.`ThreeId`, `t0`.`Payload`, `t0`.`Id`, `t0`.`Name`, `t0`.`Id0`, `t0`.`CollectionInverseId`, `t0`.`ExtraId`, `t0`.`Name0`, `t0`.`ReferenceInverseId` + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Payload`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId` FROM `EntityThrees` AS `e` LEFT JOIN ( - SELECT `j`.`OneId`, `j`.`ThreeId`, `j`.`Payload`, `e0`.`Id`, `e0`.`Name`, `t`.`Id` AS `Id0`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name` AS `Name0`, `t`.`ReferenceInverseId` + SELECT `j`.`OneId`, `j`.`ThreeId`, `j`.`Payload`, `e0`.`Id`, `e0`.`Name`, `e2`.`Id` AS `Id0`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name` AS `Name0`, `e2`.`ReferenceInverseId` FROM (`JoinOneToThreePayloadFull` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) LEFT JOIN ( SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name`, `e1`.`ReferenceInverseId` FROM `EntityTwos` AS `e1` WHERE `e1`.`Id` < 5 - ) AS `t` ON `e0`.`Id` = `t`.`CollectionInverseId` + ) AS `e2` ON `e0`.`Id` = `e2`.`CollectionInverseId` WHERE `e0`.`Id` > 15 -) AS `t0` ON `e`.`Id` = `t0`.`ThreeId` -ORDER BY `e`.`Id`, `t0`.`OneId`, `t0`.`ThreeId`, `t0`.`Id` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id` """); } @@ -1102,21 +1098,21 @@ public override async Task Filtered_include_on_navigation_then_filtered_include_ await base.Filtered_include_on_navigation_then_filtered_include_on_skip_navigation(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`Name`, `t0`.`Id`, `t0`.`CollectionInverseId`, `t0`.`ExtraId`, `t0`.`Name`, `t0`.`ReferenceInverseId`, `t0`.`ThreeId`, `t0`.`TwoId`, `t0`.`Id0`, `t0`.`CollectionInverseId0`, `t0`.`Name0`, `t0`.`ReferenceInverseId0` + """ +SELECT `e`.`Id`, `e`.`Name`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name`, `s0`.`ReferenceInverseId`, `s0`.`ThreeId`, `s0`.`TwoId`, `s0`.`Id0`, `s0`.`CollectionInverseId0`, `s0`.`Name0`, `s0`.`ReferenceInverseId0` FROM `EntityOnes` AS `e` LEFT JOIN ( - SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `t`.`ThreeId`, `t`.`TwoId`, `t`.`Id` AS `Id0`, `t`.`CollectionInverseId` AS `CollectionInverseId0`, `t`.`Name` AS `Name0`, `t`.`ReferenceInverseId` AS `ReferenceInverseId0` + SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `s`.`ThreeId`, `s`.`TwoId`, `s`.`Id` AS `Id0`, `s`.`CollectionInverseId` AS `CollectionInverseId0`, `s`.`Name` AS `Name0`, `s`.`ReferenceInverseId` AS `ReferenceInverseId0` FROM `EntityTwos` AS `e0` LEFT JOIN ( SELECT `j`.`ThreeId`, `j`.`TwoId`, `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`Name`, `e1`.`ReferenceInverseId` FROM `JoinTwoToThree` AS `j` INNER JOIN `EntityThrees` AS `e1` ON `j`.`ThreeId` = `e1`.`Id` WHERE `e1`.`Id` < 5 - ) AS `t` ON `e0`.`Id` = `t`.`TwoId` + ) AS `s` ON `e0`.`Id` = `s`.`TwoId` WHERE `e0`.`Id` > 15 -) AS `t0` ON `e`.`Id` = `t0`.`CollectionInverseId` -ORDER BY `e`.`Id`, `t0`.`Id`, `t0`.`ThreeId`, `t0`.`TwoId` +) AS `s0` ON `e`.`Id` = `s0`.`CollectionInverseId` +ORDER BY `e`.`Id`, `s0`.`Id`, `s0`.`ThreeId`, `s0`.`TwoId` """); } @@ -1162,17 +1158,17 @@ public override async Task Include_skip_navigation_split(bool async) await base.Include_skip_navigation_split(async); AssertSql( -""" + """ SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name` FROM `EntityCompositeKeys` AS `e` ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3` """, -// -""" -SELECT `t0`.`RootSkipSharedId`, `t0`.`CompositeKeySkipSharedKey1`, `t0`.`CompositeKeySkipSharedKey2`, `t0`.`CompositeKeySkipSharedKey3`, `t0`.`Id`, `t0`.`Name`, `t0`.`Number`, `t0`.`Slumber`, `t0`.`IsGreen`, `t0`.`IsBrown`, `t0`.`Discriminator`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3` + // + """ +SELECT `s0`.`RootSkipSharedId`, `s0`.`CompositeKeySkipSharedKey1`, `s0`.`CompositeKeySkipSharedKey2`, `s0`.`CompositeKeySkipSharedKey3`, `s0`.`Id`, `s0`.`Name`, `s0`.`Number`, `s0`.`Slumber`, `s0`.`IsGreen`, `s0`.`IsBrown`, `s0`.`Discriminator`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3` FROM `EntityCompositeKeys` AS `e` INNER JOIN ( - SELECT `e0`.`RootSkipSharedId`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3`, `t`.`Id`, `t`.`Name`, `t`.`Number`, `t`.`Slumber`, `t`.`IsGreen`, `t`.`IsBrown`, `t`.`Discriminator` + SELECT `e0`.`RootSkipSharedId`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3`, `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`Slumber`, `s`.`IsGreen`, `s`.`IsBrown`, `s`.`Discriminator` FROM `EntityCompositeKeyEntityRoot` AS `e0` INNER JOIN ( SELECT `r`.`Id`, `r`.`Name`, `b`.`Number`, `b0`.`Slumber`, `l`.`IsGreen`, `l0`.`IsBrown`, IIF(`l0`.`Id` IS NOT NULL, 'EntityLeaf2', IIF(`l`.`Id` IS NOT NULL, 'EntityLeaf', IIF(`b`.`Id` IS NOT NULL, 'EntityBranch', NULL))) AS `Discriminator` @@ -1181,8 +1177,8 @@ INNER JOIN ( LEFT JOIN `Branch2s` AS `b0` ON `r`.`Id` = `b0`.`Id`) LEFT JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id`) LEFT JOIN `Leaf2s` AS `l0` ON `r`.`Id` = `l0`.`Id` - ) AS `t` ON `e0`.`RootSkipSharedId` = `t`.`Id` -) AS `t0` ON `e`.`Key1` = `t0`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `t0`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `t0`.`CompositeKeySkipSharedKey3` + ) AS `s` ON `e0`.`RootSkipSharedId` = `s`.`Id` +) AS `s0` ON `e`.`Key1` = `s0`.`CompositeKeySkipSharedKey1` AND `e`.`Key2` = `s0`.`CompositeKeySkipSharedKey2` AND `e`.`Key3` = `s0`.`CompositeKeySkipSharedKey3` ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3` """); } @@ -1192,21 +1188,21 @@ public override async Task Include_skip_navigation_then_reference_split(bool asy await base.Include_skip_navigation_then_reference_split(async); AssertSql( -""" + """ SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId` FROM `EntityTwos` AS `e` ORDER BY `e`.`Id` """, -// -""" -SELECT `t`.`OneId`, `t`.`TwoId`, `t`.`JoinOneToTwoExtraId`, `t`.`Id`, `t`.`Name`, `t`.`Id0`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name0`, `t`.`ReferenceInverseId`, `e`.`Id` + // + """ +SELECT `s`.`OneId`, `s`.`TwoId`, `s`.`JoinOneToTwoExtraId`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `e`.`Id` FROM `EntityTwos` AS `e` INNER JOIN ( SELECT `j`.`OneId`, `j`.`TwoId`, `j`.`JoinOneToTwoExtraId`, `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId` FROM (`JoinOneToTwo` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` -) AS `t` ON `e`.`Id` = `t`.`TwoId` +) AS `s` ON `e`.`Id` = `s`.`TwoId` ORDER BY `e`.`Id` """); } @@ -1216,48 +1212,48 @@ public override async Task Include_skip_navigation_then_include_skip_navigation_ await base.Include_skip_navigation_then_include_skip_navigation_split(async); AssertSql( -""" + """ SELECT `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `e`.`Name` FROM `EntityCompositeKeys` AS `e` ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3` """, - // - """ -SELECT `t0`.`LeafId`, `t0`.`CompositeId1`, `t0`.`CompositeId2`, `t0`.`CompositeId3`, `t0`.`Id`, `t0`.`Name`, `t0`.`Number`, `t0`.`IsGreen`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3` + // + """ +SELECT `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Id`, `s0`.`Name`, `s0`.`Number`, `s0`.`IsGreen`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3` FROM `EntityCompositeKeys` AS `e` INNER JOIN ( - SELECT `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `t`.`Id`, `t`.`Name`, `t`.`Number`, `t`.`IsGreen` + SELECT `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen` FROM `JoinCompositeKeyToLeaf` AS `j` INNER JOIN ( SELECT `r`.`Id`, `r`.`Name`, `b`.`Number`, `l`.`IsGreen` FROM (`Roots` AS `r` INNER JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) INNER JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id` - ) AS `t` ON `j`.`LeafId` = `t`.`Id` -) AS `t0` ON `e`.`Key1` = `t0`.`CompositeId1` AND `e`.`Key2` = `t0`.`CompositeId2` AND `e`.`Key3` = `t0`.`CompositeId3` -ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `t0`.`LeafId`, `t0`.`CompositeId1`, `t0`.`CompositeId2`, `t0`.`CompositeId3`, `t0`.`Id` + ) AS `s` ON `j`.`LeafId` = `s`.`Id` +) AS `s0` ON `e`.`Key1` = `s0`.`CompositeId1` AND `e`.`Key2` = `s0`.`CompositeId2` AND `e`.`Key3` = `s0`.`CompositeId3` +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Id` """, - // - """ -SELECT `t1`.`EntityBranchId`, `t1`.`EntityOneId`, `t1`.`Id`, `t1`.`Name`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `t0`.`LeafId`, `t0`.`CompositeId1`, `t0`.`CompositeId2`, `t0`.`CompositeId3`, `t0`.`Id` + // + """ +SELECT `s1`.`EntityBranchId`, `s1`.`EntityOneId`, `s1`.`Id`, `s1`.`Name`, `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Id` FROM (`EntityCompositeKeys` AS `e` INNER JOIN ( - SELECT `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `t`.`Id` + SELECT `j`.`LeafId`, `j`.`CompositeId1`, `j`.`CompositeId2`, `j`.`CompositeId3`, `s`.`Id` FROM `JoinCompositeKeyToLeaf` AS `j` INNER JOIN ( SELECT `r`.`Id` FROM (`Roots` AS `r` INNER JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) INNER JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id` - ) AS `t` ON `j`.`LeafId` = `t`.`Id` -) AS `t0` ON `e`.`Key1` = `t0`.`CompositeId1` AND `e`.`Key2` = `t0`.`CompositeId2` AND `e`.`Key3` = `t0`.`CompositeId3`) + ) AS `s` ON `j`.`LeafId` = `s`.`Id` +) AS `s0` ON `e`.`Key1` = `s0`.`CompositeId1` AND `e`.`Key2` = `s0`.`CompositeId2` AND `e`.`Key3` = `s0`.`CompositeId3`) LEFT JOIN ( SELECT `j0`.`EntityBranchId`, `j0`.`EntityOneId`, `e0`.`Id`, `e0`.`Name` FROM `JoinOneToBranch` AS `j0` INNER JOIN `EntityOnes` AS `e0` ON `j0`.`EntityOneId` = `e0`.`Id` -) AS `t1` ON `t0`.`Id` = `t1`.`EntityBranchId` -WHERE `t0`.`Id` IS NOT NULL AND `t1`.`EntityBranchId` IS NOT NULL -ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `t0`.`LeafId`, `t0`.`CompositeId1`, `t0`.`CompositeId2`, `t0`.`CompositeId3`, `t0`.`Id` +) AS `s1` ON `s0`.`Id` = `s1`.`EntityBranchId` +WHERE `s0`.`Id` IS NOT NULL AND `s1`.`EntityBranchId` IS NOT NULL +ORDER BY `e`.`Key1`, `e`.`Key2`, `e`.`Key3`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Id` """); } @@ -1273,33 +1269,33 @@ ORDER BY `e`.`Id` """, // """ -SELECT `t`.`OneId`, `t`.`ThreeId`, `t`.`Payload`, `t`.`Id`, `t`.`Name`, `t`.`Id0`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name0`, `t`.`ReferenceInverseId`, `e`.`Id` +SELECT `s`.`OneId`, `s`.`ThreeId`, `s`.`Payload`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `e`.`Id` FROM `EntityThrees` AS `e` INNER JOIN ( SELECT `j`.`OneId`, `j`.`ThreeId`, `j`.`Payload`, `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId` FROM (`JoinOneToThreePayloadFull` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` -) AS `t` ON `e`.`Id` = `t`.`ThreeId` -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`ThreeId`, `t`.`Id`, `t`.`Id0` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id`, `s`.`Id0` """, // """ -SELECT `t0`.`LeftId`, `t0`.`RightId`, `t0`.`Payload`, `t0`.`Id`, `t0`.`Name`, `e`.`Id`, `t`.`OneId`, `t`.`ThreeId`, `t`.`Id`, `t`.`Id0` +SELECT `s0`.`LeftId`, `s0`.`RightId`, `s0`.`Payload`, `s0`.`Id`, `s0`.`Name`, `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id`, `s`.`Id0` FROM (`EntityThrees` AS `e` INNER JOIN ( SELECT `j`.`OneId`, `j`.`ThreeId`, `e0`.`Id`, `e1`.`Id` AS `Id0` FROM (`JoinOneToThreePayloadFull` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` -) AS `t` ON `e`.`Id` = `t`.`ThreeId`) +) AS `s` ON `e`.`Id` = `s`.`ThreeId`) LEFT JOIN ( SELECT `j0`.`LeftId`, `j0`.`RightId`, `j0`.`Payload`, `e2`.`Id`, `e2`.`Name` FROM `JoinOneSelfPayload` AS `j0` INNER JOIN `EntityOnes` AS `e2` ON `j0`.`RightId` = `e2`.`Id` -) AS `t0` ON `t`.`Id` = `t0`.`LeftId` -WHERE `t`.`Id` IS NOT NULL AND `t0`.`LeftId` IS NOT NULL -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`ThreeId`, `t`.`Id`, `t`.`Id0` +) AS `s0` ON `s`.`Id` = `s0`.`LeftId` +WHERE `s`.`Id` IS NOT NULL AND `s0`.`LeftId` IS NOT NULL +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id`, `s`.`Id0` """); } @@ -1308,22 +1304,22 @@ public override async Task Include_skip_navigation_and_reference_split(bool asyn await base.Include_skip_navigation_and_reference_split(async); AssertSql( -""" + """ SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId` FROM `EntityTwos` AS `e` LEFT JOIN `EntityThrees` AS `e0` ON `e`.`Id` = `e0`.`ReferenceInverseId` ORDER BY `e`.`Id`, `e0`.`Id` """, -// -""" -SELECT `t`.`OneSkipSharedId`, `t`.`TwoSkipSharedId`, `t`.`Id`, `t`.`Name`, `e`.`Id`, `e0`.`Id` + // + """ +SELECT `s`.`OneSkipSharedId`, `s`.`TwoSkipSharedId`, `s`.`Id`, `s`.`Name`, `e`.`Id`, `e0`.`Id` FROM (`EntityTwos` AS `e` LEFT JOIN `EntityThrees` AS `e0` ON `e`.`Id` = `e0`.`ReferenceInverseId`) INNER JOIN ( SELECT `e1`.`OneSkipSharedId`, `e1`.`TwoSkipSharedId`, `e2`.`Id`, `e2`.`Name` FROM `EntityOneEntityTwo` AS `e1` INNER JOIN `EntityOnes` AS `e2` ON `e1`.`OneSkipSharedId` = `e2`.`Id` -) AS `t` ON `e`.`Id` = `t`.`TwoSkipSharedId` +) AS `s` ON `e`.`Id` = `s`.`TwoSkipSharedId` ORDER BY `e`.`Id`, `e0`.`Id` """); } @@ -1333,21 +1329,21 @@ public override async Task Filtered_include_skip_navigation_where_split(bool asy await base.Filtered_include_skip_navigation_where_split(async); AssertSql( -""" + """ SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId` FROM `EntityThrees` AS `e` ORDER BY `e`.`Id` """, -// -""" -SELECT `t`.`OneId`, `t`.`ThreeId`, `t`.`Payload`, `t`.`Id`, `t`.`Name`, `e`.`Id` + // + """ +SELECT `s`.`OneId`, `s`.`ThreeId`, `s`.`Payload`, `s`.`Id`, `s`.`Name`, `e`.`Id` FROM `EntityThrees` AS `e` INNER JOIN ( SELECT `j`.`OneId`, `j`.`ThreeId`, `j`.`Payload`, `e0`.`Id`, `e0`.`Name` FROM `JoinOneToThreePayloadFullShared` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` WHERE `e0`.`Id` < 10 -) AS `t` ON `e`.`Id` = `t`.`ThreeId` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` ORDER BY `e`.`Id` """); } @@ -1357,21 +1353,21 @@ public override async Task Filtered_include_skip_navigation_order_by_split(bool await base.Filtered_include_skip_navigation_order_by_split(async); AssertSql( -""" + """ SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId` FROM `EntityThrees` AS `e` ORDER BY `e`.`Id` """, -// -""" -SELECT `t`.`ThreeId`, `t`.`TwoId`, `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name`, `t`.`ReferenceInverseId`, `e`.`Id` + // + """ +SELECT `s`.`ThreeId`, `s`.`TwoId`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId`, `e`.`Id` FROM `EntityThrees` AS `e` INNER JOIN ( SELECT `j`.`ThreeId`, `j`.`TwoId`, `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId` FROM `JoinTwoToThree` AS `j` INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` -) AS `t` ON `e`.`Id` = `t`.`ThreeId` -ORDER BY `e`.`Id`, `t`.`Id` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`Id` """); } @@ -1472,32 +1468,32 @@ ORDER BY `r`.`Id` """, // """ -SELECT `t`.`RootSkipSharedId`, `t`.`ThreeSkipSharedId`, `t`.`Id`, `t`.`CollectionInverseId`, `t`.`Name`, `t`.`ReferenceInverseId`, `r`.`Id` +SELECT `s`.`RootSkipSharedId`, `s`.`ThreeSkipSharedId`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId`, `r`.`Id` FROM `Roots` AS `r` INNER JOIN ( SELECT `e`.`RootSkipSharedId`, `e`.`ThreeSkipSharedId`, `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId` FROM `EntityRootEntityThree` AS `e` INNER JOIN `EntityThrees` AS `e0` ON `e`.`ThreeSkipSharedId` = `e0`.`Id` -) AS `t` ON `r`.`Id` = `t`.`RootSkipSharedId` -ORDER BY `r`.`Id`, `t`.`RootSkipSharedId`, `t`.`ThreeSkipSharedId`, `t`.`Id` +) AS `s` ON `r`.`Id` = `s`.`RootSkipSharedId` +ORDER BY `r`.`Id`, `s`.`RootSkipSharedId`, `s`.`ThreeSkipSharedId`, `s`.`Id` """, // """ -SELECT `t0`.`OneId`, `t0`.`ThreeId`, `t0`.`Payload`, `t0`.`Id`, `t0`.`Name`, `r`.`Id`, `t`.`RootSkipSharedId`, `t`.`ThreeSkipSharedId`, `t`.`Id` +SELECT `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Payload`, `s0`.`Id`, `s0`.`Name`, `r`.`Id`, `s`.`RootSkipSharedId`, `s`.`ThreeSkipSharedId`, `s`.`Id` FROM (`Roots` AS `r` INNER JOIN ( SELECT `e`.`RootSkipSharedId`, `e`.`ThreeSkipSharedId`, `e0`.`Id` FROM `EntityRootEntityThree` AS `e` INNER JOIN `EntityThrees` AS `e0` ON `e`.`ThreeSkipSharedId` = `e0`.`Id` -) AS `t` ON `r`.`Id` = `t`.`RootSkipSharedId`) +) AS `s` ON `r`.`Id` = `s`.`RootSkipSharedId`) LEFT JOIN ( SELECT `j`.`OneId`, `j`.`ThreeId`, `j`.`Payload`, `e1`.`Id`, `e1`.`Name` FROM `JoinOneToThreePayloadFullShared` AS `j` INNER JOIN `EntityOnes` AS `e1` ON `j`.`OneId` = `e1`.`Id` WHERE `e1`.`Id` < 10 -) AS `t0` ON `t`.`Id` = `t0`.`ThreeId` -WHERE `t`.`Id` IS NOT NULL AND `t0`.`ThreeId` IS NOT NULL -ORDER BY `r`.`Id`, `t`.`RootSkipSharedId`, `t`.`ThreeSkipSharedId`, `t`.`Id` +) AS `s0` ON `s`.`Id` = `s0`.`ThreeId` +WHERE `s`.`Id` IS NOT NULL AND `s0`.`ThreeId` IS NOT NULL +ORDER BY `r`.`Id`, `s`.`RootSkipSharedId`, `s`.`ThreeSkipSharedId`, `s`.`Id` """); } @@ -1557,16 +1553,16 @@ public override async Task Filtered_include_skip_navigation_where_then_include_s await base.Filtered_include_skip_navigation_where_then_include_skip_navigation_split(async); AssertSql( -""" + """ SELECT `r`.`Id`, `r`.`Name`, `b`.`Number`, `l`.`IsGreen` FROM (`Roots` AS `r` INNER JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) INNER JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id` ORDER BY `r`.`Id` """, - // - """ -SELECT `t`.`LeafId`, `t`.`CompositeId1`, `t`.`CompositeId2`, `t`.`CompositeId3`, `t`.`Key1`, `t`.`Key2`, `t`.`Key3`, `t`.`Name`, `r`.`Id` + // + """ +SELECT `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Key1`, `s`.`Key2`, `s`.`Key3`, `s`.`Name`, `r`.`Id` FROM ((`Roots` AS `r` INNER JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) INNER JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id`) @@ -1575,12 +1571,12 @@ INNER JOIN ( FROM `JoinCompositeKeyToLeaf` AS `j` INNER JOIN `EntityCompositeKeys` AS `e` ON `j`.`CompositeId1` = `e`.`Key1` AND `j`.`CompositeId2` = `e`.`Key2` AND `j`.`CompositeId3` = `e`.`Key3` WHERE `e`.`Key1` < 5 -) AS `t` ON `r`.`Id` = `t`.`LeafId` -ORDER BY `r`.`Id`, `t`.`LeafId`, `t`.`CompositeId1`, `t`.`CompositeId2`, `t`.`CompositeId3`, `t`.`Key1`, `t`.`Key2`, `t`.`Key3` +) AS `s` ON `r`.`Id` = `s`.`LeafId` +ORDER BY `r`.`Id`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Key1`, `s`.`Key2`, `s`.`Key3` """, - // - """ -SELECT `t0`.`TwoSkipSharedId`, `t0`.`CompositeKeySkipSharedKey1`, `t0`.`CompositeKeySkipSharedKey2`, `t0`.`CompositeKeySkipSharedKey3`, `t0`.`Id`, `t0`.`CollectionInverseId`, `t0`.`ExtraId`, `t0`.`Name`, `t0`.`ReferenceInverseId`, `r`.`Id`, `t`.`LeafId`, `t`.`CompositeId1`, `t`.`CompositeId2`, `t`.`CompositeId3`, `t`.`Key1`, `t`.`Key2`, `t`.`Key3` + // + """ +SELECT `s0`.`TwoSkipSharedId`, `s0`.`CompositeKeySkipSharedKey1`, `s0`.`CompositeKeySkipSharedKey2`, `s0`.`CompositeKeySkipSharedKey3`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name`, `s0`.`ReferenceInverseId`, `r`.`Id`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Key1`, `s`.`Key2`, `s`.`Key3` FROM (((`Roots` AS `r` INNER JOIN `Branches` AS `b` ON `r`.`Id` = `b`.`Id`) INNER JOIN `Leaves` AS `l` ON `r`.`Id` = `l`.`Id`) @@ -1589,14 +1585,14 @@ INNER JOIN ( FROM `JoinCompositeKeyToLeaf` AS `j` INNER JOIN `EntityCompositeKeys` AS `e` ON `j`.`CompositeId1` = `e`.`Key1` AND `j`.`CompositeId2` = `e`.`Key2` AND `j`.`CompositeId3` = `e`.`Key3` WHERE `e`.`Key1` < 5 -) AS `t` ON `r`.`Id` = `t`.`LeafId`) +) AS `s` ON `r`.`Id` = `s`.`LeafId`) LEFT JOIN ( SELECT `e0`.`TwoSkipSharedId`, `e0`.`CompositeKeySkipSharedKey1`, `e0`.`CompositeKeySkipSharedKey2`, `e0`.`CompositeKeySkipSharedKey3`, `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name`, `e1`.`ReferenceInverseId` FROM `EntityCompositeKeyEntityTwo` AS `e0` INNER JOIN `EntityTwos` AS `e1` ON `e0`.`TwoSkipSharedId` = `e1`.`Id` -) AS `t0` ON `t`.`Key1` = `t0`.`CompositeKeySkipSharedKey1` AND `t`.`Key2` = `t0`.`CompositeKeySkipSharedKey2` AND `t`.`Key3` = `t0`.`CompositeKeySkipSharedKey3` -WHERE `t`.`Key1` IS NOT NULL AND `t0`.`CompositeKeySkipSharedKey1` IS NOT NULL AND `t`.`Key2` IS NOT NULL AND `t0`.`CompositeKeySkipSharedKey2` IS NOT NULL AND `t`.`Key3` IS NOT NULL AND `t0`.`CompositeKeySkipSharedKey3` IS NOT NULL -ORDER BY `r`.`Id`, `t`.`LeafId`, `t`.`CompositeId1`, `t`.`CompositeId2`, `t`.`CompositeId3`, `t`.`Key1`, `t`.`Key2`, `t`.`Key3` +) AS `s0` ON `s`.`Key1` = `s0`.`CompositeKeySkipSharedKey1` AND `s`.`Key2` = `s0`.`CompositeKeySkipSharedKey2` AND `s`.`Key3` = `s0`.`CompositeKeySkipSharedKey3` +WHERE `s`.`Key1` IS NOT NULL AND `s0`.`CompositeKeySkipSharedKey1` IS NOT NULL AND `s`.`Key2` IS NOT NULL AND `s0`.`CompositeKeySkipSharedKey2` IS NOT NULL AND `s`.`Key3` IS NOT NULL AND `s0`.`CompositeKeySkipSharedKey3` IS NOT NULL +ORDER BY `r`.`Id`, `s`.`LeafId`, `s`.`CompositeId1`, `s`.`CompositeId2`, `s`.`CompositeId3`, `s`.`Key1`, `s`.`Key2`, `s`.`Key3` """); } @@ -1705,7 +1701,7 @@ ORDER BY `e`.`Id` """, // """ -SELECT `t`.`OneId`, `t`.`TwoId`, `t`.`JoinOneToTwoExtraId`, `t`.`Id`, `t`.`Name`, `t`.`Id0`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name0`, `t`.`ReferenceInverseId`, `e`.`Id` +SELECT `s`.`OneId`, `s`.`TwoId`, `s`.`JoinOneToTwoExtraId`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `e`.`Id` FROM `EntityTwos` AS `e` INNER JOIN ( SELECT `j`.`OneId`, `j`.`TwoId`, `j`.`JoinOneToTwoExtraId`, `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId` @@ -1713,12 +1709,12 @@ INNER JOIN ( INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` WHERE `e0`.`Id` < 10 -) AS `t` ON `e`.`Id` = `t`.`TwoId` -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`TwoId`, `t`.`Id`, `t`.`Id0` +) AS `s` ON `e`.`Id` = `s`.`TwoId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s`.`Id0` """, // """ -SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e`.`Id`, `t`.`OneId`, `t`.`TwoId`, `t`.`Id`, `t`.`Id0` +SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s`.`Id0` FROM (`EntityTwos` AS `e` INNER JOIN ( SELECT `j`.`OneId`, `j`.`TwoId`, `e0`.`Id`, `e1`.`Id` AS `Id0` @@ -1726,10 +1722,10 @@ INNER JOIN ( INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId` WHERE `e0`.`Id` < 10 -) AS `t` ON `e`.`Id` = `t`.`TwoId`) -LEFT JOIN `EntityTwos` AS `e2` ON `t`.`Id` = `e2`.`CollectionInverseId` -WHERE `t`.`Id` IS NOT NULL AND `e2`.`CollectionInverseId` IS NOT NULL -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`TwoId`, `t`.`Id`, `t`.`Id0` +) AS `s` ON `e`.`Id` = `s`.`TwoId`) +LEFT JOIN `EntityTwos` AS `e2` ON `s`.`Id` = `e2`.`CollectionInverseId` +WHERE `s`.`Id` IS NOT NULL AND `e2`.`CollectionInverseId` IS NOT NULL +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s`.`Id0` """); } @@ -1815,33 +1811,33 @@ ORDER BY `e`.`Id` """, // """ -SELECT `t`.`OneId`, `t`.`ThreeId`, `t`.`Payload`, `t`.`Id`, `t`.`Name`, `e`.`Id` +SELECT `s`.`OneId`, `s`.`ThreeId`, `s`.`Payload`, `s`.`Id`, `s`.`Name`, `e`.`Id` FROM `EntityThrees` AS `e` INNER JOIN ( SELECT `j`.`OneId`, `j`.`ThreeId`, `j`.`Payload`, `e0`.`Id`, `e0`.`Name` FROM `JoinOneToThreePayloadFull` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` WHERE `e0`.`Id` > 15 -) AS `t` ON `e`.`Id` = `t`.`ThreeId` -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`ThreeId`, `t`.`Id` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id` """, // """ -SELECT `t0`.`Id`, `t0`.`CollectionInverseId`, `t0`.`ExtraId`, `t0`.`Name`, `t0`.`ReferenceInverseId`, `e`.`Id`, `t`.`OneId`, `t`.`ThreeId`, `t`.`Id` +SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id` FROM (`EntityThrees` AS `e` INNER JOIN ( SELECT `j`.`OneId`, `j`.`ThreeId`, `e0`.`Id` FROM `JoinOneToThreePayloadFull` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` WHERE `e0`.`Id` > 15 -) AS `t` ON `e`.`Id` = `t`.`ThreeId`) +) AS `s` ON `e`.`Id` = `s`.`ThreeId`) LEFT JOIN ( SELECT `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name`, `e1`.`ReferenceInverseId` FROM `EntityTwos` AS `e1` WHERE `e1`.`Id` < 5 -) AS `t0` ON `t`.`Id` = `t0`.`CollectionInverseId` -WHERE `t`.`Id` IS NOT NULL AND `t0`.`CollectionInverseId` IS NOT NULL -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`ThreeId`, `t`.`Id` +) AS `e2` ON `s`.`Id` = `e2`.`CollectionInverseId` +WHERE `s`.`Id` IS NOT NULL AND `e2`.`CollectionInverseId` IS NOT NULL +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Id` """); } @@ -1857,32 +1853,32 @@ ORDER BY `e`.`Id` """, // """ -SELECT `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name`, `t`.`ReferenceInverseId`, `e`.`Id` +SELECT `e2`.`Id`, `e2`.`CollectionInverseId`, `e2`.`ExtraId`, `e2`.`Name`, `e2`.`ReferenceInverseId`, `e`.`Id` FROM `EntityOnes` AS `e` INNER JOIN ( SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId` FROM `EntityTwos` AS `e0` WHERE `e0`.`Id` > 15 -) AS `t` ON `e`.`Id` = `t`.`CollectionInverseId` -ORDER BY `e`.`Id`, `t`.`Id` +) AS `e2` ON `e`.`Id` = `e2`.`CollectionInverseId` +ORDER BY `e`.`Id`, `e2`.`Id` """, // """ -SELECT `t0`.`ThreeId`, `t0`.`TwoId`, `t0`.`Id`, `t0`.`CollectionInverseId`, `t0`.`Name`, `t0`.`ReferenceInverseId`, `e`.`Id`, `t`.`Id` +SELECT `s`.`ThreeId`, `s`.`TwoId`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId`, `e`.`Id`, `e2`.`Id` FROM (`EntityOnes` AS `e` INNER JOIN ( SELECT `e0`.`Id`, `e0`.`CollectionInverseId` FROM `EntityTwos` AS `e0` WHERE `e0`.`Id` > 15 -) AS `t` ON `e`.`Id` = `t`.`CollectionInverseId`) +) AS `e2` ON `e`.`Id` = `e2`.`CollectionInverseId`) LEFT JOIN ( SELECT `j`.`ThreeId`, `j`.`TwoId`, `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`Name`, `e1`.`ReferenceInverseId` FROM `JoinTwoToThree` AS `j` INNER JOIN `EntityThrees` AS `e1` ON `j`.`ThreeId` = `e1`.`Id` WHERE `e1`.`Id` < 5 -) AS `t0` ON `t`.`Id` = `t0`.`TwoId` -WHERE `t`.`Id` IS NOT NULL AND `t0`.`TwoId` IS NOT NULL -ORDER BY `e`.`Id`, `t`.`Id` +) AS `s` ON `e2`.`Id` = `s`.`TwoId` +WHERE `e2`.`Id` IS NOT NULL AND `s`.`TwoId` IS NOT NULL +ORDER BY `e`.`Id`, `e2`.`Id` """); } @@ -1891,20 +1887,20 @@ public override async Task Include_skip_navigation_then_include_inverse_works_fo await base.Include_skip_navigation_then_include_inverse_works_for_tracking_query(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `t0`.`OneId`, `t0`.`ThreeId`, `t0`.`Payload`, `t0`.`Id`, `t0`.`Name`, `t0`.`OneId0`, `t0`.`ThreeId0`, `t0`.`Payload0`, `t0`.`Id0`, `t0`.`CollectionInverseId`, `t0`.`Name0`, `t0`.`ReferenceInverseId` + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Payload`, `s0`.`Id`, `s0`.`Name`, `s0`.`OneId0`, `s0`.`ThreeId0`, `s0`.`Payload0`, `s0`.`Id0`, `s0`.`CollectionInverseId`, `s0`.`Name0`, `s0`.`ReferenceInverseId` FROM `EntityThrees` AS `e` LEFT JOIN ( - SELECT `j`.`OneId`, `j`.`ThreeId`, `j`.`Payload`, `e0`.`Id`, `e0`.`Name`, `t`.`OneId` AS `OneId0`, `t`.`ThreeId` AS `ThreeId0`, `t`.`Payload` AS `Payload0`, `t`.`Id` AS `Id0`, `t`.`CollectionInverseId`, `t`.`Name` AS `Name0`, `t`.`ReferenceInverseId` + SELECT `j`.`OneId`, `j`.`ThreeId`, `j`.`Payload`, `e0`.`Id`, `e0`.`Name`, `s`.`OneId` AS `OneId0`, `s`.`ThreeId` AS `ThreeId0`, `s`.`Payload` AS `Payload0`, `s`.`Id` AS `Id0`, `s`.`CollectionInverseId`, `s`.`Name` AS `Name0`, `s`.`ReferenceInverseId` FROM (`JoinOneToThreePayloadFullShared` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id`) LEFT JOIN ( SELECT `j0`.`OneId`, `j0`.`ThreeId`, `j0`.`Payload`, `e1`.`Id`, `e1`.`CollectionInverseId`, `e1`.`Name`, `e1`.`ReferenceInverseId` FROM `JoinOneToThreePayloadFullShared` AS `j0` INNER JOIN `EntityThrees` AS `e1` ON `j0`.`ThreeId` = `e1`.`Id` - ) AS `t` ON `e0`.`Id` = `t`.`OneId` -) AS `t0` ON `e`.`Id` = `t0`.`ThreeId` -ORDER BY `e`.`Id`, `t0`.`OneId`, `t0`.`ThreeId`, `t0`.`Id`, `t0`.`OneId0`, `t0`.`ThreeId0` + ) AS `s` ON `e0`.`Id` = `s`.`OneId` +) AS `s0` ON `e`.`Id` = `s0`.`ThreeId` +ORDER BY `e`.`Id`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Id`, `s0`.`OneId0`, `s0`.`ThreeId0` """); } @@ -1943,14 +1939,14 @@ public override async Task Select_many_over_skip_navigation_where_non_equality(b await base.Select_many_over_skip_navigation_where_non_equality(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name`, `t`.`ReferenceInverseId` + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId` FROM `EntityOnes` AS `e` LEFT JOIN ( SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`ExtraId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `j`.`OneId` FROM `JoinOneToTwo` AS `j` INNER JOIN `EntityTwos` AS `e0` ON `j`.`TwoId` = `e0`.`Id` -) AS `t` ON `e`.`Id` = `t`.`OneId` AND `e`.`Id` <> `t`.`Id` +) AS `s` ON `e`.`Id` = `s`.`OneId` AND `e`.`Id` <> `s`.`Id` """); } @@ -2155,21 +2151,20 @@ public override async Task Skip_navigation_count_with_predicate_unidirectional(b AssertSql( """ -SELECT `t1`.`Id`, `t1`.`Name`, `t1`.`c` +SELECT `u4`.`Id`, `u4`.`Name`, `u4`.`c` FROM ( SELECT `u`.`Id`, `u`.`Name`, ( SELECT COUNT(*) - FROM `UnidirectionalJoinOneToBranch` AS `u4` + FROM `UnidirectionalJoinOneToBranch` AS `u0` INNER JOIN ( - SELECT `u5`.`Id`, `u5`.`Name`, `u6`.`Number`, `u7`.`IsGreen`, IIF(`u7`.`Id` IS NOT NULL, 'UnidirectionalEntityLeaf', NULL) AS `Discriminator` - FROM (`UnidirectionalRoots` AS `u5` - INNER JOIN `UnidirectionalBranches` AS `u6` ON `u5`.`Id` = `u6`.`Id`) - LEFT JOIN `UnidirectionalLeaves` AS `u7` ON `u5`.`Id` = `u7`.`Id` - ) AS `t0` ON `u4`.`UnidirectionalEntityBranchId` = `t0`.`Id` - WHERE `u`.`Id` = `u4`.`UnidirectionalEntityOneId` AND (`t0`.`Name` LIKE 'L%')) AS `c` + SELECT `u1`.`Id`, `u1`.`Name` + FROM `UnidirectionalRoots` AS `u1` + INNER JOIN `UnidirectionalBranches` AS `u2` ON `u1`.`Id` = `u2`.`Id` + ) AS `s` ON `u0`.`UnidirectionalEntityBranchId` = `s`.`Id` + WHERE `u`.`Id` = `u0`.`UnidirectionalEntityOneId` AND (`s`.`Name` LIKE 'L%')) AS `c` FROM `UnidirectionalEntityOnes` AS `u` -) AS `t1` -ORDER BY `t1`.`c`, `t1`.`Id` +) AS `u4` +ORDER BY `u4`.`c`, `u4`.`Id` """); } @@ -2215,21 +2210,21 @@ public override async Task Skip_navigation_of_type_unidirectional(bool async) await base.Skip_navigation_of_type_unidirectional(async); AssertSql( -""" -SELECT `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `t0`.`Id`, `t0`.`Name`, `t0`.`Number`, `t0`.`IsGreen`, `t0`.`Discriminator`, `t0`.`RootSkipSharedId`, `t0`.`UnidirectionalEntityCompositeKeyKey1`, `t0`.`UnidirectionalEntityCompositeKeyKey2`, `t0`.`UnidirectionalEntityCompositeKeyKey3` + """ +SELECT `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `s0`.`Id`, `s0`.`Name`, `s0`.`Number`, `s0`.`IsGreen`, `s0`.`Discriminator`, `s0`.`RootSkipSharedId`, `s0`.`UnidirectionalEntityCompositeKeyKey1`, `s0`.`UnidirectionalEntityCompositeKeyKey2`, `s0`.`UnidirectionalEntityCompositeKeyKey3` FROM `UnidirectionalEntityCompositeKeys` AS `u` LEFT JOIN ( - SELECT `t`.`Id`, `t`.`Name`, `t`.`Number`, `t`.`IsGreen`, `t`.`Discriminator`, `u0`.`RootSkipSharedId`, `u0`.`UnidirectionalEntityCompositeKeyKey1`, `u0`.`UnidirectionalEntityCompositeKeyKey2`, `u0`.`UnidirectionalEntityCompositeKeyKey3` + SELECT `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s`.`Discriminator`, `u0`.`RootSkipSharedId`, `u0`.`UnidirectionalEntityCompositeKeyKey1`, `u0`.`UnidirectionalEntityCompositeKeyKey2`, `u0`.`UnidirectionalEntityCompositeKeyKey3` FROM `UnidirectionalEntityCompositeKeyUnidirectionalEntityRoot` AS `u0` INNER JOIN ( SELECT `u1`.`Id`, `u1`.`Name`, `u2`.`Number`, `u3`.`IsGreen`, IIF(`u3`.`Id` IS NOT NULL, 'UnidirectionalEntityLeaf', IIF(`u2`.`Id` IS NOT NULL, 'UnidirectionalEntityBranch', NULL)) AS `Discriminator` FROM (`UnidirectionalRoots` AS `u1` LEFT JOIN `UnidirectionalBranches` AS `u2` ON `u1`.`Id` = `u2`.`Id`) LEFT JOIN `UnidirectionalLeaves` AS `u3` ON `u1`.`Id` = `u3`.`Id` - ) AS `t` ON `u0`.`RootSkipSharedId` = `t`.`Id` - WHERE `t`.`Discriminator` = 'UnidirectionalEntityLeaf' -) AS `t0` ON `u`.`Key1` = `t0`.`UnidirectionalEntityCompositeKeyKey1` AND `u`.`Key2` = `t0`.`UnidirectionalEntityCompositeKeyKey2` AND `u`.`Key3` = `t0`.`UnidirectionalEntityCompositeKeyKey3` -ORDER BY `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `t0`.`RootSkipSharedId`, `t0`.`UnidirectionalEntityCompositeKeyKey1`, `t0`.`UnidirectionalEntityCompositeKeyKey2`, `t0`.`UnidirectionalEntityCompositeKeyKey3` + ) AS `s` ON `u0`.`RootSkipSharedId` = `s`.`Id` + WHERE `s`.`Discriminator` = 'UnidirectionalEntityLeaf' +) AS `s0` ON `u`.`Key1` = `s0`.`UnidirectionalEntityCompositeKeyKey1` AND `u`.`Key2` = `s0`.`UnidirectionalEntityCompositeKeyKey2` AND `u`.`Key3` = `s0`.`UnidirectionalEntityCompositeKeyKey3` +ORDER BY `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `s0`.`RootSkipSharedId`, `s0`.`UnidirectionalEntityCompositeKeyKey1`, `s0`.`UnidirectionalEntityCompositeKeyKey2`, `s0`.`UnidirectionalEntityCompositeKeyKey3` """); } @@ -2278,14 +2273,14 @@ public override async Task Select_many_over_skip_navigation_unidirectional(bool await base.Select_many_over_skip_navigation_unidirectional(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`CollectionInverseId`, `t`.`Name`, `t`.`ReferenceInverseId` + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`Name`, `s`.`ReferenceInverseId` FROM `UnidirectionalRoots` AS `u` INNER JOIN ( - SELECT `u3`.`Id`, `u3`.`CollectionInverseId`, `u3`.`Name`, `u3`.`ReferenceInverseId`, `u2`.`UnidirectionalEntityRootId` - FROM `UnidirectionalEntityRootUnidirectionalEntityThree` AS `u2` - INNER JOIN `UnidirectionalEntityThrees` AS `u3` ON `u2`.`ThreeSkipSharedId` = `u3`.`Id` -) AS `t` ON `u`.`Id` = `t`.`UnidirectionalEntityRootId` + SELECT `u1`.`Id`, `u1`.`CollectionInverseId`, `u1`.`Name`, `u1`.`ReferenceInverseId`, `u0`.`UnidirectionalEntityRootId` + FROM `UnidirectionalEntityRootUnidirectionalEntityThree` AS `u0` + INNER JOIN `UnidirectionalEntityThrees` AS `u1` ON `u0`.`ThreeSkipSharedId` = `u1`.`Id` +) AS `s` ON `u`.`Id` = `s`.`UnidirectionalEntityRootId` """); } @@ -2294,14 +2289,14 @@ public override async Task Select_many_over_skip_navigation_where_unidirectional await base.Select_many_over_skip_navigation_where_unidirectional(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name`, `t`.`ReferenceInverseId` + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId` FROM `UnidirectionalEntityOnes` AS `u` LEFT JOIN ( SELECT `u1`.`Id`, `u1`.`CollectionInverseId`, `u1`.`ExtraId`, `u1`.`Name`, `u1`.`ReferenceInverseId`, `u0`.`OneId` FROM `UnidirectionalJoinOneToTwo` AS `u0` INNER JOIN `UnidirectionalEntityTwos` AS `u1` ON `u0`.`TwoId` = `u1`.`Id` -) AS `t` ON `u`.`Id` = `t`.`OneId` +) AS `s` ON `u`.`Id` = `s`.`OneId` """); } @@ -2350,19 +2345,19 @@ public override async Task Select_many_over_skip_navigation_cast_unidirectional( await base.Select_many_over_skip_navigation_cast_unidirectional(async); AssertSql( -""" -SELECT `t0`.`Id`, `t0`.`Name`, `t0`.`Number`, `t0`.`IsGreen`, `t0`.`Discriminator` + """ +SELECT `s0`.`Id`, `s0`.`Name`, `s0`.`Number`, `s0`.`IsGreen`, `s0`.`Discriminator` FROM `UnidirectionalEntityOnes` AS `u` INNER JOIN ( - SELECT `t`.`Id`, `t`.`Name`, `t`.`Number`, `t`.`IsGreen`, `t`.`Discriminator`, `u0`.`UnidirectionalEntityOneId` + SELECT `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s`.`Discriminator`, `u0`.`UnidirectionalEntityOneId` FROM `UnidirectionalJoinOneToBranch` AS `u0` INNER JOIN ( SELECT `u1`.`Id`, `u1`.`Name`, `u2`.`Number`, `u3`.`IsGreen`, IIF(`u3`.`Id` IS NOT NULL, 'UnidirectionalEntityLeaf', NULL) AS `Discriminator` FROM (`UnidirectionalRoots` AS `u1` INNER JOIN `UnidirectionalBranches` AS `u2` ON `u1`.`Id` = `u2`.`Id`) LEFT JOIN `UnidirectionalLeaves` AS `u3` ON `u1`.`Id` = `u3`.`Id` - ) AS `t` ON `u0`.`UnidirectionalEntityBranchId` = `t`.`Id` -) AS `t0` ON `u`.`Id` = `t0`.`UnidirectionalEntityOneId` + ) AS `s` ON `u0`.`UnidirectionalEntityBranchId` = `s`.`Id` +) AS `s0` ON `u`.`Id` = `s0`.`UnidirectionalEntityOneId` """); } @@ -2371,15 +2366,15 @@ public override async Task Select_skip_navigation_unidirectional(bool async) await base.Select_skip_navigation_unidirectional(async); AssertSql( -""" -SELECT `u`.`Id`, `t`.`Id`, `t`.`Name`, `t`.`LeftId`, `t`.`RightId` + """ +SELECT `u`.`Id`, `s`.`Id`, `s`.`Name`, `s`.`LeftId`, `s`.`RightId` FROM `UnidirectionalEntityOnes` AS `u` LEFT JOIN ( SELECT `u1`.`Id`, `u1`.`Name`, `u0`.`LeftId`, `u0`.`RightId` FROM `UnidirectionalJoinOneSelfPayload` AS `u0` INNER JOIN `UnidirectionalEntityOnes` AS `u1` ON `u0`.`LeftId` = `u1`.`Id` -) AS `t` ON `u`.`Id` = `t`.`RightId` -ORDER BY `u`.`Id`, `t`.`LeftId`, `t`.`RightId` +) AS `s` ON `u`.`Id` = `s`.`RightId` +ORDER BY `u`.`Id`, `s`.`LeftId`, `s`.`RightId` """); } @@ -2388,20 +2383,20 @@ public override async Task Include_skip_navigation_unidirectional(bool async) await base.Include_skip_navigation_unidirectional(async); AssertSql( -""" -SELECT `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `u`.`Name`, `t0`.`RootSkipSharedId`, `t0`.`UnidirectionalEntityCompositeKeyKey1`, `t0`.`UnidirectionalEntityCompositeKeyKey2`, `t0`.`UnidirectionalEntityCompositeKeyKey3`, `t0`.`Id`, `t0`.`Name`, `t0`.`Number`, `t0`.`IsGreen`, `t0`.`Discriminator` + """ +SELECT `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `u`.`Name`, `s0`.`RootSkipSharedId`, `s0`.`UnidirectionalEntityCompositeKeyKey1`, `s0`.`UnidirectionalEntityCompositeKeyKey2`, `s0`.`UnidirectionalEntityCompositeKeyKey3`, `s0`.`Id`, `s0`.`Name`, `s0`.`Number`, `s0`.`IsGreen`, `s0`.`Discriminator` FROM `UnidirectionalEntityCompositeKeys` AS `u` LEFT JOIN ( - SELECT `u0`.`RootSkipSharedId`, `u0`.`UnidirectionalEntityCompositeKeyKey1`, `u0`.`UnidirectionalEntityCompositeKeyKey2`, `u0`.`UnidirectionalEntityCompositeKeyKey3`, `t`.`Id`, `t`.`Name`, `t`.`Number`, `t`.`IsGreen`, `t`.`Discriminator` + SELECT `u0`.`RootSkipSharedId`, `u0`.`UnidirectionalEntityCompositeKeyKey1`, `u0`.`UnidirectionalEntityCompositeKeyKey2`, `u0`.`UnidirectionalEntityCompositeKeyKey3`, `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s`.`Discriminator` FROM `UnidirectionalEntityCompositeKeyUnidirectionalEntityRoot` AS `u0` INNER JOIN ( SELECT `u1`.`Id`, `u1`.`Name`, `u2`.`Number`, `u3`.`IsGreen`, IIF(`u3`.`Id` IS NOT NULL, 'UnidirectionalEntityLeaf', IIF(`u2`.`Id` IS NOT NULL, 'UnidirectionalEntityBranch', NULL)) AS `Discriminator` FROM (`UnidirectionalRoots` AS `u1` LEFT JOIN `UnidirectionalBranches` AS `u2` ON `u1`.`Id` = `u2`.`Id`) LEFT JOIN `UnidirectionalLeaves` AS `u3` ON `u1`.`Id` = `u3`.`Id` - ) AS `t` ON `u0`.`RootSkipSharedId` = `t`.`Id` -) AS `t0` ON `u`.`Key1` = `t0`.`UnidirectionalEntityCompositeKeyKey1` AND `u`.`Key2` = `t0`.`UnidirectionalEntityCompositeKeyKey2` AND `u`.`Key3` = `t0`.`UnidirectionalEntityCompositeKeyKey3` -ORDER BY `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `t0`.`RootSkipSharedId`, `t0`.`UnidirectionalEntityCompositeKeyKey1`, `t0`.`UnidirectionalEntityCompositeKeyKey2`, `t0`.`UnidirectionalEntityCompositeKeyKey3` + ) AS `s` ON `u0`.`RootSkipSharedId` = `s`.`Id` +) AS `s0` ON `u`.`Key1` = `s0`.`UnidirectionalEntityCompositeKeyKey1` AND `u`.`Key2` = `s0`.`UnidirectionalEntityCompositeKeyKey2` AND `u`.`Key3` = `s0`.`UnidirectionalEntityCompositeKeyKey3` +ORDER BY `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `s0`.`RootSkipSharedId`, `s0`.`UnidirectionalEntityCompositeKeyKey1`, `s0`.`UnidirectionalEntityCompositeKeyKey2`, `s0`.`UnidirectionalEntityCompositeKeyKey3` """); } @@ -2410,16 +2405,16 @@ public override async Task Include_skip_navigation_then_reference_unidirectional await base.Include_skip_navigation_then_reference_unidirectional(async); AssertSql( -""" -SELECT `u`.`Id`, `u`.`CollectionInverseId`, `u`.`ExtraId`, `u`.`Name`, `u`.`ReferenceInverseId`, `t`.`OneId`, `t`.`TwoId`, `t`.`UnidirectionalJoinOneToTwoExtraId`, `t`.`Id`, `t`.`Name`, `t`.`Id0`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name0`, `t`.`ReferenceInverseId` + """ +SELECT `u`.`Id`, `u`.`CollectionInverseId`, `u`.`ExtraId`, `u`.`Name`, `u`.`ReferenceInverseId`, `s`.`OneId`, `s`.`TwoId`, `s`.`UnidirectionalJoinOneToTwoExtraId`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId` FROM `UnidirectionalEntityTwos` AS `u` LEFT JOIN ( SELECT `u0`.`OneId`, `u0`.`TwoId`, `u0`.`UnidirectionalJoinOneToTwoExtraId`, `u1`.`Id`, `u1`.`Name`, `u2`.`Id` AS `Id0`, `u2`.`CollectionInverseId`, `u2`.`ExtraId`, `u2`.`Name` AS `Name0`, `u2`.`ReferenceInverseId` FROM (`UnidirectionalJoinOneToTwo` AS `u0` INNER JOIN `UnidirectionalEntityOnes` AS `u1` ON `u0`.`OneId` = `u1`.`Id`) LEFT JOIN `UnidirectionalEntityTwos` AS `u2` ON `u1`.`Id` = `u2`.`ReferenceInverseId` -) AS `t` ON `u`.`Id` = `t`.`TwoId` -ORDER BY `u`.`Id`, `t`.`OneId`, `t`.`TwoId`, `t`.`Id` +) AS `s` ON `u`.`Id` = `s`.`TwoId` +ORDER BY `u`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id` """); } @@ -2428,25 +2423,25 @@ public override async Task Include_skip_navigation_then_include_skip_navigation_ await base.Include_skip_navigation_then_include_skip_navigation_unidirectional(async); AssertSql( -""" -SELECT `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `u`.`Name`, `t1`.`LeafId`, `t1`.`CompositeId1`, `t1`.`CompositeId2`, `t1`.`CompositeId3`, `t1`.`Id`, `t1`.`Name`, `t1`.`Number`, `t1`.`IsGreen`, `t1`.`UnidirectionalEntityBranchId`, `t1`.`UnidirectionalEntityOneId`, `t1`.`Id0`, `t1`.`Name0` + """ +SELECT `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `u`.`Name`, `s1`.`LeafId`, `s1`.`CompositeId1`, `s1`.`CompositeId2`, `s1`.`CompositeId3`, `s1`.`Id`, `s1`.`Name`, `s1`.`Number`, `s1`.`IsGreen`, `s1`.`UnidirectionalEntityBranchId`, `s1`.`UnidirectionalEntityOneId`, `s1`.`Id0`, `s1`.`Name0` FROM `UnidirectionalEntityCompositeKeys` AS `u` LEFT JOIN ( - SELECT `u0`.`LeafId`, `u0`.`CompositeId1`, `u0`.`CompositeId2`, `u0`.`CompositeId3`, `t`.`Id`, `t`.`Name`, `t`.`Number`, `t`.`IsGreen`, `t0`.`UnidirectionalEntityBranchId`, `t0`.`UnidirectionalEntityOneId`, `t0`.`Id` AS `Id0`, `t0`.`Name` AS `Name0` + SELECT `u0`.`LeafId`, `u0`.`CompositeId1`, `u0`.`CompositeId2`, `u0`.`CompositeId3`, `s`.`Id`, `s`.`Name`, `s`.`Number`, `s`.`IsGreen`, `s0`.`UnidirectionalEntityBranchId`, `s0`.`UnidirectionalEntityOneId`, `s0`.`Id` AS `Id0`, `s0`.`Name` AS `Name0` FROM (`UnidirectionalJoinCompositeKeyToLeaf` AS `u0` INNER JOIN ( SELECT `u1`.`Id`, `u1`.`Name`, `u2`.`Number`, `u3`.`IsGreen` FROM (`UnidirectionalRoots` AS `u1` INNER JOIN `UnidirectionalBranches` AS `u2` ON `u1`.`Id` = `u2`.`Id`) INNER JOIN `UnidirectionalLeaves` AS `u3` ON `u1`.`Id` = `u3`.`Id` - ) AS `t` ON `u0`.`LeafId` = `t`.`Id`) + ) AS `s` ON `u0`.`LeafId` = `s`.`Id`) LEFT JOIN ( SELECT `u4`.`UnidirectionalEntityBranchId`, `u4`.`UnidirectionalEntityOneId`, `u5`.`Id`, `u5`.`Name` FROM `UnidirectionalJoinOneToBranch` AS `u4` INNER JOIN `UnidirectionalEntityOnes` AS `u5` ON `u4`.`UnidirectionalEntityOneId` = `u5`.`Id` - ) AS `t0` ON `t`.`Id` = `t0`.`UnidirectionalEntityBranchId` -) AS `t1` ON `u`.`Key1` = `t1`.`CompositeId1` AND `u`.`Key2` = `t1`.`CompositeId2` AND `u`.`Key3` = `t1`.`CompositeId3` -ORDER BY `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `t1`.`LeafId`, `t1`.`CompositeId1`, `t1`.`CompositeId2`, `t1`.`CompositeId3`, `t1`.`Id`, `t1`.`UnidirectionalEntityBranchId`, `t1`.`UnidirectionalEntityOneId` + ) AS `s0` ON `s`.`Id` = `s0`.`UnidirectionalEntityBranchId` +) AS `s1` ON `u`.`Key1` = `s1`.`CompositeId1` AND `u`.`Key2` = `s1`.`CompositeId2` AND `u`.`Key3` = `s1`.`CompositeId3` +ORDER BY `u`.`Key1`, `u`.`Key2`, `u`.`Key3`, `s1`.`LeafId`, `s1`.`CompositeId1`, `s1`.`CompositeId2`, `s1`.`CompositeId3`, `s1`.`Id`, `s1`.`UnidirectionalEntityBranchId`, `s1`.`UnidirectionalEntityOneId` """); } @@ -2455,11 +2450,11 @@ public override async Task Include_skip_navigation_then_include_reference_and_sk await base.Include_skip_navigation_then_include_reference_and_skip_navigation_unidirectional(async); AssertSql( -""" -SELECT `u`.`Id`, `u`.`CollectionInverseId`, `u`.`Name`, `u`.`ReferenceInverseId`, `t0`.`OneId`, `t0`.`ThreeId`, `t0`.`Payload`, `t0`.`Id`, `t0`.`Name`, `t0`.`Id0`, `t0`.`CollectionInverseId`, `t0`.`ExtraId`, `t0`.`Name0`, `t0`.`ReferenceInverseId`, `t0`.`LeftId`, `t0`.`RightId`, `t0`.`Payload0`, `t0`.`Id1`, `t0`.`Name1` + """ +SELECT `u`.`Id`, `u`.`CollectionInverseId`, `u`.`Name`, `u`.`ReferenceInverseId`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Payload`, `s0`.`Id`, `s0`.`Name`, `s0`.`Id0`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name0`, `s0`.`ReferenceInverseId`, `s0`.`LeftId`, `s0`.`RightId`, `s0`.`Payload0`, `s0`.`Id1`, `s0`.`Name1` FROM `UnidirectionalEntityThrees` AS `u` LEFT JOIN ( - SELECT `u0`.`OneId`, `u0`.`ThreeId`, `u0`.`Payload`, `u1`.`Id`, `u1`.`Name`, `u2`.`Id` AS `Id0`, `u2`.`CollectionInverseId`, `u2`.`ExtraId`, `u2`.`Name` AS `Name0`, `u2`.`ReferenceInverseId`, `t`.`LeftId`, `t`.`RightId`, `t`.`Payload` AS `Payload0`, `t`.`Id` AS `Id1`, `t`.`Name` AS `Name1` + SELECT `u0`.`OneId`, `u0`.`ThreeId`, `u0`.`Payload`, `u1`.`Id`, `u1`.`Name`, `u2`.`Id` AS `Id0`, `u2`.`CollectionInverseId`, `u2`.`ExtraId`, `u2`.`Name` AS `Name0`, `u2`.`ReferenceInverseId`, `s`.`LeftId`, `s`.`RightId`, `s`.`Payload` AS `Payload0`, `s`.`Id` AS `Id1`, `s`.`Name` AS `Name1` FROM ((`UnidirectionalJoinOneToThreePayloadFull` AS `u0` INNER JOIN `UnidirectionalEntityOnes` AS `u1` ON `u0`.`OneId` = `u1`.`Id`) LEFT JOIN `UnidirectionalEntityTwos` AS `u2` ON `u1`.`Id` = `u2`.`ReferenceInverseId`) @@ -2467,9 +2462,9 @@ LEFT JOIN ( SELECT `u3`.`LeftId`, `u3`.`RightId`, `u3`.`Payload`, `u4`.`Id`, `u4`.`Name` FROM `UnidirectionalJoinOneSelfPayload` AS `u3` INNER JOIN `UnidirectionalEntityOnes` AS `u4` ON `u3`.`RightId` = `u4`.`Id` - ) AS `t` ON `u1`.`Id` = `t`.`LeftId` -) AS `t0` ON `u`.`Id` = `t0`.`ThreeId` -ORDER BY `u`.`Id`, `t0`.`OneId`, `t0`.`ThreeId`, `t0`.`Id`, `t0`.`Id0`, `t0`.`LeftId`, `t0`.`RightId` + ) AS `s` ON `u1`.`Id` = `s`.`LeftId` +) AS `s0` ON `u`.`Id` = `s0`.`ThreeId` +ORDER BY `u`.`Id`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Id`, `s0`.`Id0`, `s0`.`LeftId`, `s0`.`RightId` """); } @@ -2478,16 +2473,16 @@ public override async Task Include_skip_navigation_and_reference_unidirectional( await base.Include_skip_navigation_and_reference_unidirectional(async); AssertSql( -""" -SELECT `u`.`Id`, `u`.`CollectionInverseId`, `u`.`ExtraId`, `u`.`Name`, `u`.`ReferenceInverseId`, `u0`.`Id`, `t`.`TwoSkipSharedId`, `t`.`UnidirectionalEntityOneId`, `t`.`Id`, `t`.`Name`, `u0`.`CollectionInverseId`, `u0`.`Name`, `u0`.`ReferenceInverseId` + """ +SELECT `u`.`Id`, `u`.`CollectionInverseId`, `u`.`ExtraId`, `u`.`Name`, `u`.`ReferenceInverseId`, `u0`.`Id`, `s`.`TwoSkipSharedId`, `s`.`UnidirectionalEntityOneId`, `s`.`Id`, `s`.`Name`, `u0`.`CollectionInverseId`, `u0`.`Name`, `u0`.`ReferenceInverseId` FROM (`UnidirectionalEntityTwos` AS `u` LEFT JOIN `UnidirectionalEntityThrees` AS `u0` ON `u`.`Id` = `u0`.`ReferenceInverseId`) LEFT JOIN ( SELECT `u1`.`TwoSkipSharedId`, `u1`.`UnidirectionalEntityOneId`, `u2`.`Id`, `u2`.`Name` FROM `UnidirectionalEntityOneUnidirectionalEntityTwo` AS `u1` INNER JOIN `UnidirectionalEntityOnes` AS `u2` ON `u1`.`UnidirectionalEntityOneId` = `u2`.`Id` -) AS `t` ON `u`.`Id` = `t`.`TwoSkipSharedId` -ORDER BY `u`.`Id`, `u0`.`Id`, `t`.`TwoSkipSharedId`, `t`.`UnidirectionalEntityOneId` +) AS `s` ON `u`.`Id` = `s`.`TwoSkipSharedId` +ORDER BY `u`.`Id`, `u0`.`Id`, `s`.`TwoSkipSharedId`, `s`.`UnidirectionalEntityOneId` """); } @@ -2496,20 +2491,20 @@ public override async Task Include_skip_navigation_then_include_inverse_works_fo await base.Include_skip_navigation_then_include_inverse_works_for_tracking_query_unidirectional(async); AssertSql( -""" -SELECT `u`.`Id`, `u`.`CollectionInverseId`, `u`.`Name`, `u`.`ReferenceInverseId`, `t0`.`OneId`, `t0`.`ThreeId`, `t0`.`Payload`, `t0`.`Id`, `t0`.`Name`, `t0`.`OneId0`, `t0`.`ThreeId0`, `t0`.`Payload0`, `t0`.`Id0`, `t0`.`CollectionInverseId`, `t0`.`Name0`, `t0`.`ReferenceInverseId` + """ +SELECT `u`.`Id`, `u`.`CollectionInverseId`, `u`.`Name`, `u`.`ReferenceInverseId`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Payload`, `s0`.`Id`, `s0`.`Name`, `s0`.`OneId0`, `s0`.`ThreeId0`, `s0`.`Payload0`, `s0`.`Id0`, `s0`.`CollectionInverseId`, `s0`.`Name0`, `s0`.`ReferenceInverseId` FROM `UnidirectionalEntityThrees` AS `u` LEFT JOIN ( - SELECT `u0`.`OneId`, `u0`.`ThreeId`, `u0`.`Payload`, `u1`.`Id`, `u1`.`Name`, `t`.`OneId` AS `OneId0`, `t`.`ThreeId` AS `ThreeId0`, `t`.`Payload` AS `Payload0`, `t`.`Id` AS `Id0`, `t`.`CollectionInverseId`, `t`.`Name` AS `Name0`, `t`.`ReferenceInverseId` + SELECT `u0`.`OneId`, `u0`.`ThreeId`, `u0`.`Payload`, `u1`.`Id`, `u1`.`Name`, `s`.`OneId` AS `OneId0`, `s`.`ThreeId` AS `ThreeId0`, `s`.`Payload` AS `Payload0`, `s`.`Id` AS `Id0`, `s`.`CollectionInverseId`, `s`.`Name` AS `Name0`, `s`.`ReferenceInverseId` FROM (`UnidirectionalJoinOneToThreePayloadFullShared` AS `u0` INNER JOIN `UnidirectionalEntityOnes` AS `u1` ON `u0`.`OneId` = `u1`.`Id`) LEFT JOIN ( SELECT `u2`.`OneId`, `u2`.`ThreeId`, `u2`.`Payload`, `u3`.`Id`, `u3`.`CollectionInverseId`, `u3`.`Name`, `u3`.`ReferenceInverseId` FROM `UnidirectionalJoinOneToThreePayloadFullShared` AS `u2` INNER JOIN `UnidirectionalEntityThrees` AS `u3` ON `u2`.`ThreeId` = `u3`.`Id` - ) AS `t` ON `u1`.`Id` = `t`.`OneId` -) AS `t0` ON `u`.`Id` = `t0`.`ThreeId` -ORDER BY `u`.`Id`, `t0`.`OneId`, `t0`.`ThreeId`, `t0`.`Id`, `t0`.`OneId0`, `t0`.`ThreeId0` + ) AS `s` ON `u1`.`Id` = `s`.`OneId` +) AS `s0` ON `u`.`Id` = `s0`.`ThreeId` +ORDER BY `u`.`Id`, `s0`.`OneId`, `s0`.`ThreeId`, `s0`.`Id`, `s0`.`OneId0`, `s0`.`ThreeId0` """); } @@ -2518,16 +2513,16 @@ public override async Task Filtered_include_skip_navigation_where_unidirectional await base.Filtered_include_skip_navigation_where_unidirectional(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `t`.`OneId`, `t`.`ThreeId`, `t`.`Payload`, `t`.`Id`, `t`.`Name` + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`OneId`, `s`.`ThreeId`, `s`.`Payload`, `s`.`Id`, `s`.`Name` FROM `EntityThrees` AS `e` LEFT JOIN ( SELECT `j`.`OneId`, `j`.`ThreeId`, `j`.`Payload`, `e0`.`Id`, `e0`.`Name` FROM `JoinOneToThreePayloadFullShared` AS `j` INNER JOIN `EntityOnes` AS `e0` ON `j`.`OneId` = `e0`.`Id` WHERE `e0`.`Id` < 10 -) AS `t` ON `e`.`Id` = `t`.`ThreeId` -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`ThreeId` +) AS `s` ON `e`.`Id` = `s`.`ThreeId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`ThreeId` """); } @@ -2536,15 +2531,15 @@ public override async Task Filtered_include_skip_navigation_order_by_unidirectio await base.Filtered_include_skip_navigation_order_by_unidirectional(async); AssertSql( -""" -SELECT `u`.`Id`, `u`.`CollectionInverseId`, `u`.`Name`, `u`.`ReferenceInverseId`, `t`.`ThreeId`, `t`.`TwoId`, `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name`, `t`.`ReferenceInverseId` + """ +SELECT `u`.`Id`, `u`.`CollectionInverseId`, `u`.`Name`, `u`.`ReferenceInverseId`, `s`.`ThreeId`, `s`.`TwoId`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId` FROM `UnidirectionalEntityThrees` AS `u` LEFT JOIN ( SELECT `u0`.`ThreeId`, `u0`.`TwoId`, `u1`.`Id`, `u1`.`CollectionInverseId`, `u1`.`ExtraId`, `u1`.`Name`, `u1`.`ReferenceInverseId` FROM `UnidirectionalJoinTwoToThree` AS `u0` INNER JOIN `UnidirectionalEntityTwos` AS `u1` ON `u0`.`TwoId` = `u1`.`Id` -) AS `t` ON `u`.`Id` = `t`.`ThreeId` -ORDER BY `u`.`Id`, `t`.`Id`, `t`.`ThreeId` +) AS `s` ON `u`.`Id` = `s`.`ThreeId` +ORDER BY `u`.`Id`, `s`.`Id`, `s`.`ThreeId` """); } @@ -2616,23 +2611,23 @@ public override async Task Filtered_include_skip_navigation_where_then_include_s await base.Filtered_include_skip_navigation_where_then_include_skip_navigation_unidirectional(async); AssertSql( -""" -SELECT `u`.`Id`, `u`.`Name`, `u0`.`Number`, `u1`.`IsGreen`, `t0`.`LeafId`, `t0`.`CompositeId1`, `t0`.`CompositeId2`, `t0`.`CompositeId3`, `t0`.`Key1`, `t0`.`Key2`, `t0`.`Key3`, `t0`.`Name`, `t0`.`TwoSkipSharedId`, `t0`.`UnidirectionalEntityCompositeKeyKey1`, `t0`.`UnidirectionalEntityCompositeKeyKey2`, `t0`.`UnidirectionalEntityCompositeKeyKey3`, `t0`.`Id`, `t0`.`CollectionInverseId`, `t0`.`ExtraId`, `t0`.`Name0`, `t0`.`ReferenceInverseId` + """ +SELECT `u`.`Id`, `u`.`Name`, `u0`.`Number`, `u1`.`IsGreen`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Key1`, `s0`.`Key2`, `s0`.`Key3`, `s0`.`Name`, `s0`.`TwoSkipSharedId`, `s0`.`UnidirectionalEntityCompositeKeyKey1`, `s0`.`UnidirectionalEntityCompositeKeyKey2`, `s0`.`UnidirectionalEntityCompositeKeyKey3`, `s0`.`Id`, `s0`.`CollectionInverseId`, `s0`.`ExtraId`, `s0`.`Name0`, `s0`.`ReferenceInverseId` FROM ((`UnidirectionalRoots` AS `u` INNER JOIN `UnidirectionalBranches` AS `u0` ON `u`.`Id` = `u0`.`Id`) INNER JOIN `UnidirectionalLeaves` AS `u1` ON `u`.`Id` = `u1`.`Id`) LEFT JOIN ( - SELECT `u2`.`LeafId`, `u2`.`CompositeId1`, `u2`.`CompositeId2`, `u2`.`CompositeId3`, `u3`.`Key1`, `u3`.`Key2`, `u3`.`Key3`, `u3`.`Name`, `t`.`TwoSkipSharedId`, `t`.`UnidirectionalEntityCompositeKeyKey1`, `t`.`UnidirectionalEntityCompositeKeyKey2`, `t`.`UnidirectionalEntityCompositeKeyKey3`, `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name` AS `Name0`, `t`.`ReferenceInverseId` + SELECT `u2`.`LeafId`, `u2`.`CompositeId1`, `u2`.`CompositeId2`, `u2`.`CompositeId3`, `u3`.`Key1`, `u3`.`Key2`, `u3`.`Key3`, `u3`.`Name`, `s`.`TwoSkipSharedId`, `s`.`UnidirectionalEntityCompositeKeyKey1`, `s`.`UnidirectionalEntityCompositeKeyKey2`, `s`.`UnidirectionalEntityCompositeKeyKey3`, `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name` AS `Name0`, `s`.`ReferenceInverseId` FROM (`UnidirectionalJoinCompositeKeyToLeaf` AS `u2` INNER JOIN `UnidirectionalEntityCompositeKeys` AS `u3` ON `u2`.`CompositeId1` = `u3`.`Key1` AND `u2`.`CompositeId2` = `u3`.`Key2` AND `u2`.`CompositeId3` = `u3`.`Key3`) LEFT JOIN ( SELECT `u4`.`TwoSkipSharedId`, `u4`.`UnidirectionalEntityCompositeKeyKey1`, `u4`.`UnidirectionalEntityCompositeKeyKey2`, `u4`.`UnidirectionalEntityCompositeKeyKey3`, `u5`.`Id`, `u5`.`CollectionInverseId`, `u5`.`ExtraId`, `u5`.`Name`, `u5`.`ReferenceInverseId` FROM `UnidirectionalEntityCompositeKeyUnidirectionalEntityTwo` AS `u4` INNER JOIN `UnidirectionalEntityTwos` AS `u5` ON `u4`.`TwoSkipSharedId` = `u5`.`Id` - ) AS `t` ON `u3`.`Key1` = `t`.`UnidirectionalEntityCompositeKeyKey1` AND `u3`.`Key2` = `t`.`UnidirectionalEntityCompositeKeyKey2` AND `u3`.`Key3` = `t`.`UnidirectionalEntityCompositeKeyKey3` + ) AS `s` ON `u3`.`Key1` = `s`.`UnidirectionalEntityCompositeKeyKey1` AND `u3`.`Key2` = `s`.`UnidirectionalEntityCompositeKeyKey2` AND `u3`.`Key3` = `s`.`UnidirectionalEntityCompositeKeyKey3` WHERE `u3`.`Key1` < 5 -) AS `t0` ON `u`.`Id` = `t0`.`LeafId` -ORDER BY `u`.`Id`, `t0`.`LeafId`, `t0`.`CompositeId1`, `t0`.`CompositeId2`, `t0`.`CompositeId3`, `t0`.`Key1`, `t0`.`Key2`, `t0`.`Key3`, `t0`.`TwoSkipSharedId`, `t0`.`UnidirectionalEntityCompositeKeyKey1`, `t0`.`UnidirectionalEntityCompositeKeyKey2`, `t0`.`UnidirectionalEntityCompositeKeyKey3` +) AS `s0` ON `u`.`Id` = `s0`.`LeafId` +ORDER BY `u`.`Id`, `s0`.`LeafId`, `s0`.`CompositeId1`, `s0`.`CompositeId2`, `s0`.`CompositeId3`, `s0`.`Key1`, `s0`.`Key2`, `s0`.`Key3`, `s0`.`TwoSkipSharedId`, `s0`.`UnidirectionalEntityCompositeKeyKey1`, `s0`.`UnidirectionalEntityCompositeKeyKey2`, `s0`.`UnidirectionalEntityCompositeKeyKey3` """); } @@ -2641,8 +2636,8 @@ public override async Task Filter_include_on_skip_navigation_combined_unidirecti await base.Filter_include_on_skip_navigation_combined_unidirectional(async); AssertSql( -""" -SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `t`.`OneId`, `t`.`TwoId`, `t`.`JoinOneToTwoExtraId`, `t`.`Id`, `t`.`Name`, `t`.`Id0`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name0`, `t`.`ReferenceInverseId`, `t`.`Id1`, `t`.`CollectionInverseId0`, `t`.`ExtraId0`, `t`.`Name1`, `t`.`ReferenceInverseId0` + """ +SELECT `e`.`Id`, `e`.`CollectionInverseId`, `e`.`ExtraId`, `e`.`Name`, `e`.`ReferenceInverseId`, `s`.`OneId`, `s`.`TwoId`, `s`.`JoinOneToTwoExtraId`, `s`.`Id`, `s`.`Name`, `s`.`Id0`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name0`, `s`.`ReferenceInverseId`, `s`.`Id1`, `s`.`CollectionInverseId0`, `s`.`ExtraId0`, `s`.`Name1`, `s`.`ReferenceInverseId0` FROM `EntityTwos` AS `e` LEFT JOIN ( SELECT `j`.`OneId`, `j`.`TwoId`, `j`.`JoinOneToTwoExtraId`, `e0`.`Id`, `e0`.`Name`, `e1`.`Id` AS `Id0`, `e1`.`CollectionInverseId`, `e1`.`ExtraId`, `e1`.`Name` AS `Name0`, `e1`.`ReferenceInverseId`, `e2`.`Id` AS `Id1`, `e2`.`CollectionInverseId` AS `CollectionInverseId0`, `e2`.`ExtraId` AS `ExtraId0`, `e2`.`Name` AS `Name1`, `e2`.`ReferenceInverseId` AS `ReferenceInverseId0` @@ -2651,8 +2646,8 @@ LEFT JOIN ( LEFT JOIN `EntityTwos` AS `e1` ON `e0`.`Id` = `e1`.`ReferenceInverseId`) LEFT JOIN `EntityTwos` AS `e2` ON `e0`.`Id` = `e2`.`CollectionInverseId` WHERE `e0`.`Id` < 10 -) AS `t` ON `e`.`Id` = `t`.`TwoId` -ORDER BY `e`.`Id`, `t`.`OneId`, `t`.`TwoId`, `t`.`Id`, `t`.`Id0` +) AS `s` ON `e`.`Id` = `s`.`TwoId` +ORDER BY `e`.`Id`, `s`.`OneId`, `s`.`TwoId`, `s`.`Id`, `s`.`Id0` """); } @@ -2674,14 +2669,14 @@ public override async Task Select_many_over_skip_navigation_where_non_equality_u { await base.Select_many_over_skip_navigation_where_non_equality_unidirectional(async); AssertSql( -""" -SELECT `t`.`Id`, `t`.`CollectionInverseId`, `t`.`ExtraId`, `t`.`Name`, `t`.`ReferenceInverseId` + """ +SELECT `s`.`Id`, `s`.`CollectionInverseId`, `s`.`ExtraId`, `s`.`Name`, `s`.`ReferenceInverseId` FROM `UnidirectionalEntityOnes` AS `u` LEFT JOIN ( SELECT `u1`.`Id`, `u1`.`CollectionInverseId`, `u1`.`ExtraId`, `u1`.`Name`, `u1`.`ReferenceInverseId`, `u0`.`OneId` FROM `UnidirectionalJoinOneToTwo` AS `u0` INNER JOIN `UnidirectionalEntityTwos` AS `u1` ON `u0`.`TwoId` = `u1`.`Id` -) AS `t` ON `u`.`Id` = `t`.`OneId` AND `u`.`Id` <> `t`.`Id` +) AS `s` ON `u`.`Id` = `s`.`OneId` AND `u`.`Id` <> `s`.`Id` """); } diff --git a/test/EFCore.Jet.FunctionalTests/Query/TPTRelationshipsQueryJetTest.cs b/test/EFCore.Jet.FunctionalTests/Query/TPTRelationshipsQueryJetTest.cs index 38945fd4..e4b8e53f 100644 --- a/test/EFCore.Jet.FunctionalTests/Query/TPTRelationshipsQueryJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Query/TPTRelationshipsQueryJetTest.cs @@ -31,22 +31,22 @@ public override void Changes_in_derived_related_entities_are_detected() base.Changes_in_derived_related_entities_are_detected(); AssertSql( -""" -SELECT `t`.`Id`, `t`.`Name`, `t`.`BaseId`, `t`.`Discriminator`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `t`.`OwnedReferenceOnBase_Id`, `t`.`OwnedReferenceOnBase_Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `t`.`Id0`, `t`.`OwnedReferenceOnDerived_Id`, `t`.`OwnedReferenceOnDerived_Name`, `t0`.`Id`, `t0`.`BaseParentId`, `t0`.`Name`, `t0`.`DerivedProperty`, `t0`.`Discriminator` + """ +SELECT `s`.`Id`, `s`.`Name`, `s`.`BaseId`, `s`.`Discriminator`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `s`.`OwnedReferenceOnBase_Id`, `s`.`OwnedReferenceOnBase_Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `s`.`Id0`, `s`.`OwnedReferenceOnDerived_Id`, `s`.`OwnedReferenceOnDerived_Name`, `s0`.`Id`, `s0`.`BaseParentId`, `s0`.`Name`, `s0`.`DerivedProperty`, `s0`.`Discriminator` FROM ((( SELECT TOP 2 `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d`.`Id` AS `Id0`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` FROM `BaseEntities` AS `b` LEFT JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id` WHERE `b`.`Name` = 'Derived1(4)' -) AS `t` -LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `t`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `t`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId`) +) AS `s` +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `s`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `s`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId`) LEFT JOIN ( SELECT `b1`.`Id`, `b1`.`BaseParentId`, `b1`.`Name`, `d1`.`DerivedProperty`, IIF(`d1`.`Id` IS NOT NULL, 'DerivedCollectionOnBase', NULL) AS `Discriminator` FROM `BaseCollectionsOnBase` AS `b1` LEFT JOIN `DerivedCollectionsOnBase` AS `d1` ON `b1`.`Id` = `d1`.`Id` -) AS `t0` ON `t`.`Id` = `t0`.`BaseParentId` -ORDER BY `t`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id` +) AS `s0` ON `s`.`Id` = `s0`.`BaseParentId` +ORDER BY `s`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id` """); } @@ -71,17 +71,17 @@ public override async Task Include_collection_without_inheritance_reverse(bool a await base.Include_collection_without_inheritance_reverse(async); AssertSql( -""" -SELECT `c`.`Id`, `c`.`Name`, `c`.`ParentId`, `t`.`Id`, `t`.`Name`, `t`.`BaseId`, `t`.`Discriminator`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `t`.`OwnedReferenceOnBase_Id`, `t`.`OwnedReferenceOnBase_Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `t`.`Id0`, `t`.`OwnedReferenceOnDerived_Id`, `t`.`OwnedReferenceOnDerived_Name` + """ +SELECT `c`.`Id`, `c`.`Name`, `c`.`ParentId`, `s`.`Id`, `s`.`Name`, `s`.`BaseId`, `s`.`Discriminator`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `s`.`OwnedReferenceOnBase_Id`, `s`.`OwnedReferenceOnBase_Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `s`.`Id0`, `s`.`OwnedReferenceOnDerived_Id`, `s`.`OwnedReferenceOnDerived_Name` FROM ((`CollectionsOnBase` AS `c` LEFT JOIN ( SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d`.`Id` AS `Id0`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` FROM `BaseEntities` AS `b` LEFT JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id` -) AS `t` ON `c`.`ParentId` = `t`.`Id`) -LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `t`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `t`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` -ORDER BY `c`.`Id`, `t`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId` +) AS `s` ON `c`.`ParentId` = `s`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `s`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `s`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `c`.`Id`, `s`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId` """); } @@ -107,18 +107,18 @@ public override async Task Include_collection_without_inheritance_with_filter_re await base.Include_collection_without_inheritance_with_filter_reverse(async); AssertSql( -""" -SELECT `c`.`Id`, `c`.`Name`, `c`.`ParentId`, `t`.`Id`, `t`.`Name`, `t`.`BaseId`, `t`.`Discriminator`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `t`.`OwnedReferenceOnBase_Id`, `t`.`OwnedReferenceOnBase_Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `t`.`Id0`, `t`.`OwnedReferenceOnDerived_Id`, `t`.`OwnedReferenceOnDerived_Name` + """ +SELECT `c`.`Id`, `c`.`Name`, `c`.`ParentId`, `s`.`Id`, `s`.`Name`, `s`.`BaseId`, `s`.`Discriminator`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `s`.`OwnedReferenceOnBase_Id`, `s`.`OwnedReferenceOnBase_Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `s`.`Id0`, `s`.`OwnedReferenceOnDerived_Id`, `s`.`OwnedReferenceOnDerived_Name` FROM ((`CollectionsOnBase` AS `c` LEFT JOIN ( SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d`.`Id` AS `Id0`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` FROM `BaseEntities` AS `b` LEFT JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id` -) AS `t` ON `c`.`ParentId` = `t`.`Id`) -LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `t`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `t`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` +) AS `s` ON `c`.`ParentId` = `s`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `s`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `s`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` WHERE `c`.`Name` <> 'Bar' OR `c`.`Name` IS NULL -ORDER BY `c`.`Id`, `t`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `c`.`Id`, `s`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId` """); } @@ -127,8 +127,8 @@ public override async Task Include_collection_with_inheritance(bool async) await base.Include_collection_with_inheritance(async); AssertSql( -""" -SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `t`.`Id`, `t`.`BaseParentId`, `t`.`Name`, `t`.`DerivedProperty`, `t`.`Discriminator` + """ +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `s`.`Id`, `s`.`BaseParentId`, `s`.`Name`, `s`.`DerivedProperty`, `s`.`Discriminator` FROM (((`BaseEntities` AS `b` LEFT JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) @@ -137,7 +137,7 @@ LEFT JOIN ( SELECT `b1`.`Id`, `b1`.`BaseParentId`, `b1`.`Name`, `d1`.`DerivedProperty`, IIF(`d1`.`Id` IS NOT NULL, 'DerivedCollectionOnBase', NULL) AS `Discriminator` FROM `BaseCollectionsOnBase` AS `b1` LEFT JOIN `DerivedCollectionsOnBase` AS `d1` ON `b1`.`Id` = `d1`.`Id` -) AS `t` ON `b`.`Id` = `t`.`BaseParentId` +) AS `s` ON `b`.`Id` = `s`.`BaseParentId` ORDER BY `b`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id` """); } @@ -147,8 +147,8 @@ public override async Task Include_collection_with_inheritance_on_derived1(bool await base.Include_collection_with_inheritance_on_derived1(async); AssertSql( -""" -SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `t`.`Id`, `t`.`BaseParentId`, `t`.`Name`, `t`.`DerivedProperty`, `t`.`Discriminator` + """ +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `s`.`Id`, `s`.`BaseParentId`, `s`.`Name`, `s`.`DerivedProperty`, `s`.`Discriminator` FROM (((`BaseEntities` AS `b` INNER JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) @@ -157,7 +157,7 @@ LEFT JOIN ( SELECT `b1`.`Id`, `b1`.`BaseParentId`, `b1`.`Name`, `d1`.`DerivedProperty`, IIF(`d1`.`Id` IS NOT NULL, 'DerivedCollectionOnBase', NULL) AS `Discriminator` FROM `BaseCollectionsOnBase` AS `b1` LEFT JOIN `DerivedCollectionsOnBase` AS `d1` ON `b1`.`Id` = `d1`.`Id` -) AS `t` ON `b`.`Id` = `t`.`BaseParentId` +) AS `s` ON `b`.`Id` = `s`.`BaseParentId` ORDER BY `b`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id` """); } @@ -167,8 +167,8 @@ public override async Task Include_collection_with_inheritance_on_derived2(bool await base.Include_collection_with_inheritance_on_derived2(async); AssertSql( -""" -SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `t`.`Id`, `t`.`Name`, `t`.`ParentId`, `t`.`DerivedInheritanceRelationshipEntityId`, `t`.`Discriminator` + """ +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `s`.`Id`, `s`.`Name`, `s`.`ParentId`, `s`.`DerivedInheritanceRelationshipEntityId`, `s`.`Discriminator` FROM (((`BaseEntities` AS `b` INNER JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) @@ -177,7 +177,7 @@ LEFT JOIN ( SELECT `b1`.`Id`, `b1`.`Name`, `b1`.`ParentId`, `d1`.`DerivedInheritanceRelationshipEntityId`, IIF(`d1`.`Id` IS NOT NULL, 'DerivedCollectionOnDerived', NULL) AS `Discriminator` FROM `BaseCollectionsOnDerived` AS `b1` LEFT JOIN `DerivedCollectionsOnDerived` AS `d1` ON `b1`.`Id` = `d1`.`Id` -) AS `t` ON `b`.`Id` = `t`.`ParentId` +) AS `s` ON `b`.`Id` = `s`.`ParentId` ORDER BY `b`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id` """); } @@ -187,8 +187,8 @@ public override async Task Include_collection_with_inheritance_on_derived3(bool await base.Include_collection_with_inheritance_on_derived3(async); AssertSql( -""" -SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `t`.`Id`, `t`.`Name`, `t`.`ParentId`, `t`.`DerivedInheritanceRelationshipEntityId` + """ +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `s`.`Id`, `s`.`Name`, `s`.`ParentId`, `s`.`DerivedInheritanceRelationshipEntityId` FROM (((`BaseEntities` AS `b` INNER JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) @@ -197,7 +197,7 @@ LEFT JOIN ( SELECT `b1`.`Id`, `b1`.`Name`, `b1`.`ParentId`, `d1`.`DerivedInheritanceRelationshipEntityId` FROM `BaseCollectionsOnDerived` AS `b1` INNER JOIN `DerivedCollectionsOnDerived` AS `d1` ON `b1`.`Id` = `d1`.`Id` -) AS `t` ON `b`.`Id` = `t`.`DerivedInheritanceRelationshipEntityId` +) AS `s` ON `b`.`Id` = `s`.`DerivedInheritanceRelationshipEntityId` ORDER BY `b`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id` """); } @@ -207,18 +207,18 @@ public override async Task Include_collection_with_inheritance_on_derived_revers await base.Include_collection_with_inheritance_on_derived_reverse(async); AssertSql( -""" -SELECT `b`.`Id`, `b`.`Name`, `b`.`ParentId`, `d`.`DerivedInheritanceRelationshipEntityId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedCollectionOnDerived', NULL) AS `Discriminator`, `t`.`Id`, `t`.`Name`, `t`.`BaseId`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `t`.`OwnedReferenceOnBase_Id`, `t`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `t`.`Id0`, `t`.`OwnedReferenceOnDerived_Id`, `t`.`OwnedReferenceOnDerived_Name` + """ +SELECT `b`.`Id`, `b`.`Name`, `b`.`ParentId`, `d`.`DerivedInheritanceRelationshipEntityId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedCollectionOnDerived', NULL) AS `Discriminator`, `s`.`Id`, `s`.`Name`, `s`.`BaseId`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `s`.`OwnedReferenceOnBase_Id`, `s`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `s`.`Id0`, `s`.`OwnedReferenceOnDerived_Id`, `s`.`OwnedReferenceOnDerived_Name` FROM (((`BaseCollectionsOnDerived` AS `b` LEFT JOIN `DerivedCollectionsOnDerived` AS `d` ON `b`.`Id` = `d`.`Id`) LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`Name`, `d0`.`BaseId`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `d0`.`Id` AS `Id0`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` FROM `BaseEntities` AS `b0` INNER JOIN `DerivedEntities` AS `d0` ON `b0`.`Id` = `d0`.`Id` -) AS `t` ON `b`.`ParentId` = `t`.`Id`) -LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `t`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `t`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` -ORDER BY `b`.`Id`, `t`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` +) AS `s` ON `b`.`ParentId` = `s`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `s`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `s`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` """); } @@ -227,18 +227,18 @@ public override async Task Include_collection_with_inheritance_reverse(bool asyn await base.Include_collection_with_inheritance_reverse(async); AssertSql( -""" -SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, `d`.`DerivedProperty`, IIF(`d`.`Id` IS NOT NULL, 'DerivedCollectionOnBase', NULL) AS `Discriminator`, `t`.`Id`, `t`.`Name`, `t`.`BaseId`, `t`.`Discriminator`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `t`.`OwnedReferenceOnBase_Id`, `t`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `t`.`Id0`, `t`.`OwnedReferenceOnDerived_Id`, `t`.`OwnedReferenceOnDerived_Name` + """ +SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, `d`.`DerivedProperty`, IIF(`d`.`Id` IS NOT NULL, 'DerivedCollectionOnBase', NULL) AS `Discriminator`, `s`.`Id`, `s`.`Name`, `s`.`BaseId`, `s`.`Discriminator`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `s`.`OwnedReferenceOnBase_Id`, `s`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `s`.`Id0`, `s`.`OwnedReferenceOnDerived_Id`, `s`.`OwnedReferenceOnDerived_Name` FROM (((`BaseCollectionsOnBase` AS `b` LEFT JOIN `DerivedCollectionsOnBase` AS `d` ON `b`.`Id` = `d`.`Id`) LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`Name`, `d0`.`BaseId`, IIF(`d0`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `d0`.`Id` AS `Id0`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` FROM `BaseEntities` AS `b0` LEFT JOIN `DerivedEntities` AS `d0` ON `b0`.`Id` = `d0`.`Id` -) AS `t` ON `b`.`BaseParentId` = `t`.`Id`) -LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `t`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `t`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` -ORDER BY `b`.`Id`, `t`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` +) AS `s` ON `b`.`BaseParentId` = `s`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `s`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `s`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` """); } @@ -247,8 +247,8 @@ public override async Task Include_collection_with_inheritance_with_filter(bool await base.Include_collection_with_inheritance_with_filter(async); AssertSql( -""" -SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `t`.`Id`, `t`.`BaseParentId`, `t`.`Name`, `t`.`DerivedProperty`, `t`.`Discriminator` + """ +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `s`.`Id`, `s`.`BaseParentId`, `s`.`Name`, `s`.`DerivedProperty`, `s`.`Discriminator` FROM (((`BaseEntities` AS `b` LEFT JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) @@ -257,7 +257,7 @@ LEFT JOIN ( SELECT `b1`.`Id`, `b1`.`BaseParentId`, `b1`.`Name`, `d1`.`DerivedProperty`, IIF(`d1`.`Id` IS NOT NULL, 'DerivedCollectionOnBase', NULL) AS `Discriminator` FROM `BaseCollectionsOnBase` AS `b1` LEFT JOIN `DerivedCollectionsOnBase` AS `d1` ON `b1`.`Id` = `d1`.`Id` -) AS `t` ON `b`.`Id` = `t`.`BaseParentId` +) AS `s` ON `b`.`Id` = `s`.`BaseParentId` WHERE `b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL ORDER BY `b`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id` """); @@ -268,19 +268,19 @@ public override async Task Include_collection_with_inheritance_with_filter_rever await base.Include_collection_with_inheritance_with_filter_reverse(async); AssertSql( -""" -SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, `d`.`DerivedProperty`, IIF(`d`.`Id` IS NOT NULL, 'DerivedCollectionOnBase', NULL) AS `Discriminator`, `t`.`Id`, `t`.`Name`, `t`.`BaseId`, `t`.`Discriminator`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `t`.`OwnedReferenceOnBase_Id`, `t`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `t`.`Id0`, `t`.`OwnedReferenceOnDerived_Id`, `t`.`OwnedReferenceOnDerived_Name` + """ +SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, `d`.`DerivedProperty`, IIF(`d`.`Id` IS NOT NULL, 'DerivedCollectionOnBase', NULL) AS `Discriminator`, `s`.`Id`, `s`.`Name`, `s`.`BaseId`, `s`.`Discriminator`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `s`.`OwnedReferenceOnBase_Id`, `s`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `s`.`Id0`, `s`.`OwnedReferenceOnDerived_Id`, `s`.`OwnedReferenceOnDerived_Name` FROM (((`BaseCollectionsOnBase` AS `b` LEFT JOIN `DerivedCollectionsOnBase` AS `d` ON `b`.`Id` = `d`.`Id`) LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`Name`, `d0`.`BaseId`, IIF(`d0`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `d0`.`Id` AS `Id0`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` FROM `BaseEntities` AS `b0` LEFT JOIN `DerivedEntities` AS `d0` ON `b0`.`Id` = `d0`.`Id` -) AS `t` ON `b`.`BaseParentId` = `t`.`Id`) -LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `t`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `t`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +) AS `s` ON `b`.`BaseParentId` = `s`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `s`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `s`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` WHERE `b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL -ORDER BY `b`.`Id`, `t`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` """); } @@ -337,17 +337,17 @@ public override async Task Include_reference_without_inheritance_on_derived_reve await base.Include_reference_without_inheritance_on_derived_reverse(async); AssertSql( -""" -SELECT `r`.`Id`, `r`.`Name`, `r`.`ParentId`, `t`.`Id`, `t`.`Name`, `t`.`BaseId`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `t`.`OwnedReferenceOnBase_Id`, `t`.`OwnedReferenceOnBase_Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `t`.`Id0`, `t`.`OwnedReferenceOnDerived_Id`, `t`.`OwnedReferenceOnDerived_Name` + """ +SELECT `r`.`Id`, `r`.`Name`, `r`.`ParentId`, `s`.`Id`, `s`.`Name`, `s`.`BaseId`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `s`.`OwnedReferenceOnBase_Id`, `s`.`OwnedReferenceOnBase_Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `s`.`Id0`, `s`.`OwnedReferenceOnDerived_Id`, `s`.`OwnedReferenceOnDerived_Name` FROM ((`ReferencesOnDerived` AS `r` LEFT JOIN ( SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d`.`Id` AS `Id0`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` FROM `BaseEntities` AS `b` INNER JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id` -) AS `t` ON `r`.`ParentId` = `t`.`Id`) -LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `t`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `t`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` -ORDER BY `r`.`Id`, `t`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId` +) AS `s` ON `r`.`ParentId` = `s`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `s`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `s`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `r`.`Id`, `s`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId` """); } @@ -356,17 +356,17 @@ public override async Task Include_reference_without_inheritance_reverse(bool as await base.Include_reference_without_inheritance_reverse(async); AssertSql( -""" -SELECT `r`.`Id`, `r`.`Name`, `r`.`ParentId`, `t`.`Id`, `t`.`Name`, `t`.`BaseId`, `t`.`Discriminator`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `t`.`OwnedReferenceOnBase_Id`, `t`.`OwnedReferenceOnBase_Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `t`.`Id0`, `t`.`OwnedReferenceOnDerived_Id`, `t`.`OwnedReferenceOnDerived_Name` + """ +SELECT `r`.`Id`, `r`.`Name`, `r`.`ParentId`, `s`.`Id`, `s`.`Name`, `s`.`BaseId`, `s`.`Discriminator`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `s`.`OwnedReferenceOnBase_Id`, `s`.`OwnedReferenceOnBase_Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `s`.`Id0`, `s`.`OwnedReferenceOnDerived_Id`, `s`.`OwnedReferenceOnDerived_Name` FROM ((`ReferencesOnBase` AS `r` LEFT JOIN ( SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d`.`Id` AS `Id0`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` FROM `BaseEntities` AS `b` LEFT JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id` -) AS `t` ON `r`.`ParentId` = `t`.`Id`) -LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `t`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `t`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` -ORDER BY `r`.`Id`, `t`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId` +) AS `s` ON `r`.`ParentId` = `s`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `s`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `s`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `r`.`Id`, `s`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId` """); } @@ -392,18 +392,18 @@ public override async Task Include_reference_without_inheritance_with_filter_rev await base.Include_reference_without_inheritance_with_filter_reverse(async); AssertSql( -""" -SELECT `r`.`Id`, `r`.`Name`, `r`.`ParentId`, `t`.`Id`, `t`.`Name`, `t`.`BaseId`, `t`.`Discriminator`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `t`.`OwnedReferenceOnBase_Id`, `t`.`OwnedReferenceOnBase_Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `t`.`Id0`, `t`.`OwnedReferenceOnDerived_Id`, `t`.`OwnedReferenceOnDerived_Name` + """ +SELECT `r`.`Id`, `r`.`Name`, `r`.`ParentId`, `s`.`Id`, `s`.`Name`, `s`.`BaseId`, `s`.`Discriminator`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `s`.`OwnedReferenceOnBase_Id`, `s`.`OwnedReferenceOnBase_Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `s`.`Id0`, `s`.`OwnedReferenceOnDerived_Id`, `s`.`OwnedReferenceOnDerived_Name` FROM ((`ReferencesOnBase` AS `r` LEFT JOIN ( SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d`.`Id` AS `Id0`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` FROM `BaseEntities` AS `b` LEFT JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id` -) AS `t` ON `r`.`ParentId` = `t`.`Id`) -LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `t`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `t`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` +) AS `s` ON `r`.`ParentId` = `s`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `s`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `s`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` WHERE `r`.`Name` <> 'Bar' OR `r`.`Name` IS NULL -ORDER BY `r`.`Id`, `t`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `r`.`Id`, `s`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId` """); } @@ -412,18 +412,18 @@ public override async Task Include_reference_with_inheritance(bool async) await base.Include_reference_with_inheritance(async); AssertSql( -""" -SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `t`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `t`.`BaseParentId`, `t`.`Name`, `t`.`Discriminator` + """ +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `s`.`BaseParentId`, `s`.`Name`, `s`.`Discriminator` FROM (((`BaseEntities` AS `b` LEFT JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, IIF(`d0`.`Id` IS NOT NULL, 'DerivedReferenceOnBase', NULL) AS `Discriminator` FROM `BaseReferencesOnBase` AS `b0` LEFT JOIN `DerivedReferencesOnBase` AS `d0` ON `b0`.`Id` = `d0`.`Id` -) AS `t` ON `b`.`Id` = `t`.`BaseParentId`) +) AS `s` ON `b`.`Id` = `s`.`BaseParentId`) LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `b`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` -ORDER BY `b`.`Id`, `t`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` """); } @@ -432,18 +432,18 @@ public override async Task Include_reference_with_inheritance_on_derived1(bool a await base.Include_reference_with_inheritance_on_derived1(async); AssertSql( -""" -SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, `t`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `t`.`BaseParentId`, `t`.`Name`, `t`.`Discriminator` + """ +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `s`.`BaseParentId`, `s`.`Name`, `s`.`Discriminator` FROM (((`BaseEntities` AS `b` INNER JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, IIF(`d0`.`Id` IS NOT NULL, 'DerivedReferenceOnBase', NULL) AS `Discriminator` FROM `BaseReferencesOnBase` AS `b0` LEFT JOIN `DerivedReferencesOnBase` AS `d0` ON `b0`.`Id` = `d0`.`Id` -) AS `t` ON `b`.`Id` = `t`.`BaseParentId`) +) AS `s` ON `b`.`Id` = `s`.`BaseParentId`) LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `b`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` -ORDER BY `b`.`Id`, `t`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` """); } @@ -452,18 +452,18 @@ public override async Task Include_reference_with_inheritance_on_derived2(bool a await base.Include_reference_with_inheritance_on_derived2(async); AssertSql( -""" -SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, `t`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `t`.`BaseParentId`, `t`.`Name`, `t`.`DerivedInheritanceRelationshipEntityId`, `t`.`Discriminator` + """ +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `s`.`BaseParentId`, `s`.`Name`, `s`.`DerivedInheritanceRelationshipEntityId`, `s`.`Discriminator` FROM (((`BaseEntities` AS `b` INNER JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, IIF(`d0`.`Id` IS NOT NULL, 'DerivedReferenceOnDerived', NULL) AS `Discriminator` FROM `BaseReferencesOnDerived` AS `b0` LEFT JOIN `DerivedReferencesOnDerived` AS `d0` ON `b0`.`Id` = `d0`.`Id` -) AS `t` ON `b`.`Id` = `t`.`BaseParentId`) +) AS `s` ON `b`.`Id` = `s`.`BaseParentId`) LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `b`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` -ORDER BY `b`.`Id`, `t`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` """); } @@ -472,18 +472,18 @@ public override async Task Include_reference_with_inheritance_on_derived4(bool a await base.Include_reference_with_inheritance_on_derived4(async); AssertSql( -""" -SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, `t`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `t`.`BaseParentId`, `t`.`Name`, `t`.`DerivedInheritanceRelationshipEntityId` + """ +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `s`.`BaseParentId`, `s`.`Name`, `s`.`DerivedInheritanceRelationshipEntityId` FROM (((`BaseEntities` AS `b` INNER JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, `d0`.`DerivedInheritanceRelationshipEntityId` FROM `BaseReferencesOnDerived` AS `b0` INNER JOIN `DerivedReferencesOnDerived` AS `d0` ON `b0`.`Id` = `d0`.`Id` -) AS `t` ON `b`.`Id` = `t`.`DerivedInheritanceRelationshipEntityId`) +) AS `s` ON `b`.`Id` = `s`.`DerivedInheritanceRelationshipEntityId`) LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `b`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` -ORDER BY `b`.`Id`, `t`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` """); } @@ -492,18 +492,18 @@ public override async Task Include_reference_with_inheritance_on_derived_reverse await base.Include_reference_with_inheritance_on_derived_reverse(async); AssertSql( -""" -SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, `d`.`DerivedInheritanceRelationshipEntityId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedReferenceOnDerived', NULL) AS `Discriminator`, `t`.`Id`, `t`.`Name`, `t`.`BaseId`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `t`.`OwnedReferenceOnBase_Id`, `t`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `t`.`Id0`, `t`.`OwnedReferenceOnDerived_Id`, `t`.`OwnedReferenceOnDerived_Name` + """ +SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, `d`.`DerivedInheritanceRelationshipEntityId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedReferenceOnDerived', NULL) AS `Discriminator`, `s`.`Id`, `s`.`Name`, `s`.`BaseId`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `s`.`OwnedReferenceOnBase_Id`, `s`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `s`.`Id0`, `s`.`OwnedReferenceOnDerived_Id`, `s`.`OwnedReferenceOnDerived_Name` FROM (((`BaseReferencesOnDerived` AS `b` LEFT JOIN `DerivedReferencesOnDerived` AS `d` ON `b`.`Id` = `d`.`Id`) LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`Name`, `d0`.`BaseId`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `d0`.`Id` AS `Id0`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` FROM `BaseEntities` AS `b0` INNER JOIN `DerivedEntities` AS `d0` ON `b0`.`Id` = `d0`.`Id` -) AS `t` ON `b`.`BaseParentId` = `t`.`Id`) -LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `t`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `t`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` -ORDER BY `b`.`Id`, `t`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` +) AS `s` ON `b`.`BaseParentId` = `s`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `s`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `s`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` """); } @@ -512,19 +512,19 @@ public override async Task Include_reference_with_inheritance_on_derived_with_fi await base.Include_reference_with_inheritance_on_derived_with_filter1(async); AssertSql( -""" -SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, `t`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `t`.`BaseParentId`, `t`.`Name`, `t`.`Discriminator` + """ +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `s`.`BaseParentId`, `s`.`Name`, `s`.`Discriminator` FROM (((`BaseEntities` AS `b` INNER JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, IIF(`d0`.`Id` IS NOT NULL, 'DerivedReferenceOnBase', NULL) AS `Discriminator` FROM `BaseReferencesOnBase` AS `b0` LEFT JOIN `DerivedReferencesOnBase` AS `d0` ON `b0`.`Id` = `d0`.`Id` -) AS `t` ON `b`.`Id` = `t`.`BaseParentId`) +) AS `s` ON `b`.`Id` = `s`.`BaseParentId`) LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `b`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` WHERE `b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL -ORDER BY `b`.`Id`, `t`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` """); } @@ -533,19 +533,19 @@ public override async Task Include_reference_with_inheritance_on_derived_with_fi await base.Include_reference_with_inheritance_on_derived_with_filter2(async); AssertSql( -""" -SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, `t`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `t`.`BaseParentId`, `t`.`Name`, `t`.`DerivedInheritanceRelationshipEntityId`, `t`.`Discriminator` + """ +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `s`.`BaseParentId`, `s`.`Name`, `s`.`DerivedInheritanceRelationshipEntityId`, `s`.`Discriminator` FROM (((`BaseEntities` AS `b` INNER JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, IIF(`d0`.`Id` IS NOT NULL, 'DerivedReferenceOnDerived', NULL) AS `Discriminator` FROM `BaseReferencesOnDerived` AS `b0` LEFT JOIN `DerivedReferencesOnDerived` AS `d0` ON `b0`.`Id` = `d0`.`Id` -) AS `t` ON `b`.`Id` = `t`.`BaseParentId`) +) AS `s` ON `b`.`Id` = `s`.`BaseParentId`) LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `b`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` WHERE `b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL -ORDER BY `b`.`Id`, `t`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` """); } @@ -554,19 +554,19 @@ public override async Task Include_reference_with_inheritance_on_derived_with_fi await base.Include_reference_with_inheritance_on_derived_with_filter4(async); AssertSql( -""" -SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, `t`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `t`.`BaseParentId`, `t`.`Name`, `t`.`DerivedInheritanceRelationshipEntityId` + """ +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `s`.`BaseParentId`, `s`.`Name`, `s`.`DerivedInheritanceRelationshipEntityId` FROM (((`BaseEntities` AS `b` INNER JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, `d0`.`DerivedInheritanceRelationshipEntityId` FROM `BaseReferencesOnDerived` AS `b0` INNER JOIN `DerivedReferencesOnDerived` AS `d0` ON `b0`.`Id` = `d0`.`Id` -) AS `t` ON `b`.`Id` = `t`.`DerivedInheritanceRelationshipEntityId`) +) AS `s` ON `b`.`Id` = `s`.`DerivedInheritanceRelationshipEntityId`) LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `b`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` WHERE `b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL -ORDER BY `b`.`Id`, `t`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` """); } @@ -575,19 +575,19 @@ public override async Task Include_reference_with_inheritance_on_derived_with_fi await base.Include_reference_with_inheritance_on_derived_with_filter_reverse(async); AssertSql( -""" -SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, `d`.`DerivedInheritanceRelationshipEntityId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedReferenceOnDerived', NULL) AS `Discriminator`, `t`.`Id`, `t`.`Name`, `t`.`BaseId`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `t`.`OwnedReferenceOnBase_Id`, `t`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `t`.`Id0`, `t`.`OwnedReferenceOnDerived_Id`, `t`.`OwnedReferenceOnDerived_Name` + """ +SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, `d`.`DerivedInheritanceRelationshipEntityId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedReferenceOnDerived', NULL) AS `Discriminator`, `s`.`Id`, `s`.`Name`, `s`.`BaseId`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `s`.`OwnedReferenceOnBase_Id`, `s`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `s`.`Id0`, `s`.`OwnedReferenceOnDerived_Id`, `s`.`OwnedReferenceOnDerived_Name` FROM (((`BaseReferencesOnDerived` AS `b` LEFT JOIN `DerivedReferencesOnDerived` AS `d` ON `b`.`Id` = `d`.`Id`) LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`Name`, `d0`.`BaseId`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `d0`.`Id` AS `Id0`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` FROM `BaseEntities` AS `b0` INNER JOIN `DerivedEntities` AS `d0` ON `b0`.`Id` = `d0`.`Id` -) AS `t` ON `b`.`BaseParentId` = `t`.`Id`) -LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `t`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `t`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +) AS `s` ON `b`.`BaseParentId` = `s`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `s`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `s`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` WHERE `b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL -ORDER BY `b`.`Id`, `t`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` """); } @@ -596,18 +596,18 @@ public override async Task Include_reference_with_inheritance_reverse(bool async await base.Include_reference_with_inheritance_reverse(async); AssertSql( -""" -SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, IIF(`d`.`Id` IS NOT NULL, 'DerivedReferenceOnBase', NULL) AS `Discriminator`, `t`.`Id`, `t`.`Name`, `t`.`BaseId`, `t`.`Discriminator`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `t`.`OwnedReferenceOnBase_Id`, `t`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `t`.`Id0`, `t`.`OwnedReferenceOnDerived_Id`, `t`.`OwnedReferenceOnDerived_Name` + """ +SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, IIF(`d`.`Id` IS NOT NULL, 'DerivedReferenceOnBase', NULL) AS `Discriminator`, `s`.`Id`, `s`.`Name`, `s`.`BaseId`, `s`.`Discriminator`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `s`.`OwnedReferenceOnBase_Id`, `s`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `s`.`Id0`, `s`.`OwnedReferenceOnDerived_Id`, `s`.`OwnedReferenceOnDerived_Name` FROM (((`BaseReferencesOnBase` AS `b` LEFT JOIN `DerivedReferencesOnBase` AS `d` ON `b`.`Id` = `d`.`Id`) LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`Name`, `d0`.`BaseId`, IIF(`d0`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `d0`.`Id` AS `Id0`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` FROM `BaseEntities` AS `b0` LEFT JOIN `DerivedEntities` AS `d0` ON `b0`.`Id` = `d0`.`Id` -) AS `t` ON `b`.`BaseParentId` = `t`.`Id`) -LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `t`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `t`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` -ORDER BY `b`.`Id`, `t`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` +) AS `s` ON `b`.`BaseParentId` = `s`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `s`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `s`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` """); } @@ -616,19 +616,19 @@ public override async Task Include_reference_with_inheritance_with_filter(bool a await base.Include_reference_with_inheritance_with_filter(async); AssertSql( -""" -SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `t`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `t`.`BaseParentId`, `t`.`Name`, `t`.`Discriminator` + """ +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `s`.`BaseParentId`, `s`.`Name`, `s`.`Discriminator` FROM (((`BaseEntities` AS `b` LEFT JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, IIF(`d0`.`Id` IS NOT NULL, 'DerivedReferenceOnBase', NULL) AS `Discriminator` FROM `BaseReferencesOnBase` AS `b0` LEFT JOIN `DerivedReferencesOnBase` AS `d0` ON `b0`.`Id` = `d0`.`Id` -) AS `t` ON `b`.`Id` = `t`.`BaseParentId`) +) AS `s` ON `b`.`Id` = `s`.`BaseParentId`) LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `b`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` WHERE `b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL -ORDER BY `b`.`Id`, `t`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` """); } @@ -637,19 +637,19 @@ public override async Task Include_reference_with_inheritance_with_filter_revers await base.Include_reference_with_inheritance_with_filter_reverse(async); AssertSql( -""" -SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, IIF(`d`.`Id` IS NOT NULL, 'DerivedReferenceOnBase', NULL) AS `Discriminator`, `t`.`Id`, `t`.`Name`, `t`.`BaseId`, `t`.`Discriminator`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `t`.`OwnedReferenceOnBase_Id`, `t`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `t`.`Id0`, `t`.`OwnedReferenceOnDerived_Id`, `t`.`OwnedReferenceOnDerived_Name` + """ +SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, IIF(`d`.`Id` IS NOT NULL, 'DerivedReferenceOnBase', NULL) AS `Discriminator`, `s`.`Id`, `s`.`Name`, `s`.`BaseId`, `s`.`Discriminator`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `s`.`OwnedReferenceOnBase_Id`, `s`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `s`.`Id0`, `s`.`OwnedReferenceOnDerived_Id`, `s`.`OwnedReferenceOnDerived_Name` FROM (((`BaseReferencesOnBase` AS `b` LEFT JOIN `DerivedReferencesOnBase` AS `d` ON `b`.`Id` = `d`.`Id`) LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`Name`, `d0`.`BaseId`, IIF(`d0`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `d0`.`Id` AS `Id0`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` FROM `BaseEntities` AS `b0` LEFT JOIN `DerivedEntities` AS `d0` ON `b0`.`Id` = `d0`.`Id` -) AS `t` ON `b`.`BaseParentId` = `t`.`Id`) -LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `t`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `t`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +) AS `s` ON `b`.`BaseParentId` = `s`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `s`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `s`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` WHERE `b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL -ORDER BY `b`.`Id`, `t`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` """); } @@ -658,20 +658,20 @@ public override async Task Include_self_reference_with_inheritance(bool async) await base.Include_self_reference_with_inheritance(async); AssertSql( -""" -SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `t`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `t`.`Name`, `t`.`BaseId`, `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `t`.`OwnedReferenceOnBase_Id`, `t`.`OwnedReferenceOnBase_Name`, `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `t`.`Id0`, `t`.`OwnedReferenceOnDerived_Id`, `t`.`OwnedReferenceOnDerived_Name` + """ +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `s`.`Name`, `s`.`BaseId`, `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `s`.`OwnedReferenceOnBase_Id`, `s`.`OwnedReferenceOnBase_Name`, `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `s`.`Id0`, `s`.`OwnedReferenceOnDerived_Id`, `s`.`OwnedReferenceOnDerived_Name` FROM (((((`BaseEntities` AS `b` LEFT JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`Name`, `d0`.`BaseId`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `d0`.`Id` AS `Id0`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` FROM `BaseEntities` AS `b0` INNER JOIN `DerivedEntities` AS `d0` ON `b0`.`Id` = `d0`.`Id` -) AS `t` ON `b`.`Id` = `t`.`BaseId`) +) AS `s` ON `b`.`Id` = `s`.`BaseId`) LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `b`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId`) -LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b2` ON `t`.`Id` = `b2`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `t`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` -ORDER BY `b`.`Id`, `t`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `d2`.`DerivedInheritanceRelationshipEntityId` +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b2` ON `s`.`Id` = `b2`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `s`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `d2`.`DerivedInheritanceRelationshipEntityId` """); } @@ -680,20 +680,20 @@ public override async Task Include_self_reference_with_inheritance_reverse(bool await base.Include_self_reference_with_inheritance_reverse(async); AssertSql( -""" -SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, `t`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `t`.`Name`, `t`.`BaseId`, `t`.`Discriminator`, `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `t`.`OwnedReferenceOnBase_Id`, `t`.`OwnedReferenceOnBase_Name`, `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `t`.`Id0`, `t`.`OwnedReferenceOnDerived_Id`, `t`.`OwnedReferenceOnDerived_Name` + """ +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `s`.`Name`, `s`.`BaseId`, `s`.`Discriminator`, `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `s`.`OwnedReferenceOnBase_Id`, `s`.`OwnedReferenceOnBase_Name`, `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `s`.`Id0`, `s`.`OwnedReferenceOnDerived_Id`, `s`.`OwnedReferenceOnDerived_Name` FROM (((((`BaseEntities` AS `b` INNER JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`Name`, `d0`.`BaseId`, IIF(`d0`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `d0`.`Id` AS `Id0`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` FROM `BaseEntities` AS `b0` LEFT JOIN `DerivedEntities` AS `d0` ON `b0`.`Id` = `d0`.`Id` -) AS `t` ON `d`.`BaseId` = `t`.`Id`) +) AS `s` ON `d`.`BaseId` = `s`.`Id`) LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `b`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId`) -LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b2` ON `t`.`Id` = `b2`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `t`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` -ORDER BY `b`.`Id`, `t`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `d2`.`DerivedInheritanceRelationshipEntityId` +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b2` ON `s`.`Id` = `b2`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `s`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `d2`.`DerivedInheritanceRelationshipEntityId` """); } @@ -702,15 +702,15 @@ public override async Task Nested_include_collection_reference_on_non_entity_bas await base.Nested_include_collection_reference_on_non_entity_base(async); AssertSql( -""" -SELECT `r`.`Id`, `r`.`Name`, `t`.`Id`, `t`.`Name`, `t`.`ReferenceId`, `t`.`ReferencedEntityId`, `t`.`Id0`, `t`.`Name0` + """ +SELECT `r`.`Id`, `r`.`Name`, `s`.`Id`, `s`.`Name`, `s`.`ReferenceId`, `s`.`ReferencedEntityId`, `s`.`Id0`, `s`.`Name0` FROM `ReferencedEntities` AS `r` LEFT JOIN ( SELECT `p`.`Id`, `p`.`Name`, `p`.`ReferenceId`, `p`.`ReferencedEntityId`, `r0`.`Id` AS `Id0`, `r0`.`Name` AS `Name0` FROM `PrincipalEntities` AS `p` LEFT JOIN `ReferencedEntities` AS `r0` ON `p`.`ReferenceId` = `r0`.`Id` -) AS `t` ON `r`.`Id` = `t`.`ReferencedEntityId` -ORDER BY `r`.`Id`, `t`.`Id` +) AS `s` ON `r`.`Id` = `s`.`ReferencedEntityId` +ORDER BY `r`.`Id`, `s`.`Id` """); } @@ -719,23 +719,23 @@ public override async Task Nested_include_with_inheritance_collection_collection await base.Nested_include_with_inheritance_collection_collection(async); AssertSql( -""" -SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `t0`.`Id`, `t0`.`BaseParentId`, `t0`.`Name`, `t0`.`DerivedProperty`, `t0`.`Discriminator`, `t0`.`Id0`, `t0`.`Name0`, `t0`.`ParentCollectionId`, `t0`.`ParentReferenceId`, `t0`.`Discriminator0` + """ +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `s0`.`Id`, `s0`.`BaseParentId`, `s0`.`Name`, `s0`.`DerivedProperty`, `s0`.`Discriminator`, `s0`.`Id0`, `s0`.`Name0`, `s0`.`ParentCollectionId`, `s0`.`ParentReferenceId`, `s0`.`Discriminator0` FROM (((`BaseEntities` AS `b` LEFT JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `b`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId`) LEFT JOIN ( - SELECT `b1`.`Id`, `b1`.`BaseParentId`, `b1`.`Name`, `d1`.`DerivedProperty`, IIF(`d1`.`Id` IS NOT NULL, 'DerivedCollectionOnBase', NULL) AS `Discriminator`, `t`.`Id` AS `Id0`, `t`.`Name` AS `Name0`, `t`.`ParentCollectionId`, `t`.`ParentReferenceId`, `t`.`Discriminator` AS `Discriminator0` + SELECT `b1`.`Id`, `b1`.`BaseParentId`, `b1`.`Name`, `d1`.`DerivedProperty`, IIF(`d1`.`Id` IS NOT NULL, 'DerivedCollectionOnBase', NULL) AS `Discriminator`, `s`.`Id` AS `Id0`, `s`.`Name` AS `Name0`, `s`.`ParentCollectionId`, `s`.`ParentReferenceId`, `s`.`Discriminator` AS `Discriminator0` FROM (`BaseCollectionsOnBase` AS `b1` LEFT JOIN `DerivedCollectionsOnBase` AS `d1` ON `b1`.`Id` = `d1`.`Id`) LEFT JOIN ( SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, IIF(`n0`.`Id` IS NOT NULL, 'NestedCollectionDerived', NULL) AS `Discriminator` FROM `NestedCollections` AS `n` LEFT JOIN `NestedCollectionsDerived` AS `n0` ON `n`.`Id` = `n0`.`Id` - ) AS `t` ON `b1`.`Id` = `t`.`ParentCollectionId` -) AS `t0` ON `b`.`Id` = `t0`.`BaseParentId` -ORDER BY `b`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `t0`.`Id` + ) AS `s` ON `b1`.`Id` = `s`.`ParentCollectionId` +) AS `s0` ON `b`.`Id` = `s0`.`BaseParentId` +ORDER BY `b`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `s0`.`Id` """); } @@ -744,23 +744,23 @@ public override async Task Nested_include_with_inheritance_collection_collection await base.Nested_include_with_inheritance_collection_collection_reverse(async); AssertSql( -""" -SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, IIF(`n0`.`Id` IS NOT NULL, 'NestedCollectionDerived', NULL) AS `Discriminator`, `t`.`Id`, `t`.`BaseParentId`, `t`.`Name`, `t`.`DerivedProperty`, `t`.`Discriminator`, `t0`.`Id`, `t0`.`Name`, `t0`.`BaseId`, `t0`.`Discriminator`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `t0`.`OwnedReferenceOnBase_Id`, `t0`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `t0`.`Id0`, `t0`.`OwnedReferenceOnDerived_Id`, `t0`.`OwnedReferenceOnDerived_Name` + """ +SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, IIF(`n0`.`Id` IS NOT NULL, 'NestedCollectionDerived', NULL) AS `Discriminator`, `s`.`Id`, `s`.`BaseParentId`, `s`.`Name`, `s`.`DerivedProperty`, `s`.`Discriminator`, `s0`.`Id`, `s0`.`Name`, `s0`.`BaseId`, `s0`.`Discriminator`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `s0`.`OwnedReferenceOnBase_Id`, `s0`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `s0`.`Id0`, `s0`.`OwnedReferenceOnDerived_Id`, `s0`.`OwnedReferenceOnDerived_Name` FROM ((((`NestedCollections` AS `n` LEFT JOIN `NestedCollectionsDerived` AS `n0` ON `n`.`Id` = `n0`.`Id`) LEFT JOIN ( SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, `d`.`DerivedProperty`, IIF(`d`.`Id` IS NOT NULL, 'DerivedCollectionOnBase', NULL) AS `Discriminator` FROM `BaseCollectionsOnBase` AS `b` LEFT JOIN `DerivedCollectionsOnBase` AS `d` ON `b`.`Id` = `d`.`Id` -) AS `t` ON `n`.`ParentCollectionId` = `t`.`Id`) +) AS `s` ON `n`.`ParentCollectionId` = `s`.`Id`) LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`Name`, `d0`.`BaseId`, IIF(`d0`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `d0`.`Id` AS `Id0`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` FROM `BaseEntities` AS `b0` LEFT JOIN `DerivedEntities` AS `d0` ON `b0`.`Id` = `d0`.`Id` -) AS `t0` ON `t`.`BaseParentId` = `t0`.`Id`) -LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `t0`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `t0`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` -ORDER BY `n`.`Id`, `t`.`Id`, `t0`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` +) AS `s0` ON `s`.`BaseParentId` = `s0`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `s0`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `s0`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `n`.`Id`, `s`.`Id`, `s0`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` """); } @@ -769,23 +769,23 @@ public override async Task Nested_include_with_inheritance_collection_reference( await base.Nested_include_with_inheritance_collection_reference(async); AssertSql( -""" -SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `t0`.`Id`, `t0`.`BaseParentId`, `t0`.`Name`, `t0`.`DerivedProperty`, `t0`.`Discriminator`, `t0`.`Id0`, `t0`.`Name0`, `t0`.`ParentCollectionId`, `t0`.`ParentReferenceId`, `t0`.`Discriminator0` + """ +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `s0`.`Id`, `s0`.`BaseParentId`, `s0`.`Name`, `s0`.`DerivedProperty`, `s0`.`Discriminator`, `s0`.`Id0`, `s0`.`Name0`, `s0`.`ParentCollectionId`, `s0`.`ParentReferenceId`, `s0`.`Discriminator0` FROM (((`BaseEntities` AS `b` LEFT JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `b`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId`) LEFT JOIN ( - SELECT `b1`.`Id`, `b1`.`BaseParentId`, `b1`.`Name`, `d1`.`DerivedProperty`, IIF(`d1`.`Id` IS NOT NULL, 'DerivedCollectionOnBase', NULL) AS `Discriminator`, `t`.`Id` AS `Id0`, `t`.`Name` AS `Name0`, `t`.`ParentCollectionId`, `t`.`ParentReferenceId`, `t`.`Discriminator` AS `Discriminator0` + SELECT `b1`.`Id`, `b1`.`BaseParentId`, `b1`.`Name`, `d1`.`DerivedProperty`, IIF(`d1`.`Id` IS NOT NULL, 'DerivedCollectionOnBase', NULL) AS `Discriminator`, `s`.`Id` AS `Id0`, `s`.`Name` AS `Name0`, `s`.`ParentCollectionId`, `s`.`ParentReferenceId`, `s`.`Discriminator` AS `Discriminator0` FROM (`BaseCollectionsOnBase` AS `b1` LEFT JOIN `DerivedCollectionsOnBase` AS `d1` ON `b1`.`Id` = `d1`.`Id`) LEFT JOIN ( SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, IIF(`n0`.`Id` IS NOT NULL, 'NestedReferenceDerived', NULL) AS `Discriminator` FROM `NestedReferences` AS `n` LEFT JOIN `NestedReferencesDerived` AS `n0` ON `n`.`Id` = `n0`.`Id` - ) AS `t` ON `b1`.`Id` = `t`.`ParentCollectionId` -) AS `t0` ON `b`.`Id` = `t0`.`BaseParentId` -ORDER BY `b`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `t0`.`Id` + ) AS `s` ON `b1`.`Id` = `s`.`ParentCollectionId` +) AS `s0` ON `b`.`Id` = `s0`.`BaseParentId` +ORDER BY `b`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `s0`.`Id` """); } @@ -794,23 +794,23 @@ public override async Task Nested_include_with_inheritance_collection_reference_ await base.Nested_include_with_inheritance_collection_reference_reverse(async); AssertSql( -""" -SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, IIF(`n0`.`Id` IS NOT NULL, 'NestedReferenceDerived', NULL) AS `Discriminator`, `t`.`Id`, `t`.`BaseParentId`, `t`.`Name`, `t`.`DerivedProperty`, `t`.`Discriminator`, `t0`.`Id`, `t0`.`Name`, `t0`.`BaseId`, `t0`.`Discriminator`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `t0`.`OwnedReferenceOnBase_Id`, `t0`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `t0`.`Id0`, `t0`.`OwnedReferenceOnDerived_Id`, `t0`.`OwnedReferenceOnDerived_Name` + """ +SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, IIF(`n0`.`Id` IS NOT NULL, 'NestedReferenceDerived', NULL) AS `Discriminator`, `s`.`Id`, `s`.`BaseParentId`, `s`.`Name`, `s`.`DerivedProperty`, `s`.`Discriminator`, `s0`.`Id`, `s0`.`Name`, `s0`.`BaseId`, `s0`.`Discriminator`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `s0`.`OwnedReferenceOnBase_Id`, `s0`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `s0`.`Id0`, `s0`.`OwnedReferenceOnDerived_Id`, `s0`.`OwnedReferenceOnDerived_Name` FROM ((((`NestedReferences` AS `n` LEFT JOIN `NestedReferencesDerived` AS `n0` ON `n`.`Id` = `n0`.`Id`) LEFT JOIN ( SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, `d`.`DerivedProperty`, IIF(`d`.`Id` IS NOT NULL, 'DerivedCollectionOnBase', NULL) AS `Discriminator` FROM `BaseCollectionsOnBase` AS `b` LEFT JOIN `DerivedCollectionsOnBase` AS `d` ON `b`.`Id` = `d`.`Id` -) AS `t` ON `n`.`ParentCollectionId` = `t`.`Id`) +) AS `s` ON `n`.`ParentCollectionId` = `s`.`Id`) LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`Name`, `d0`.`BaseId`, IIF(`d0`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `d0`.`Id` AS `Id0`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` FROM `BaseEntities` AS `b0` LEFT JOIN `DerivedEntities` AS `d0` ON `b0`.`Id` = `d0`.`Id` -) AS `t0` ON `t`.`BaseParentId` = `t0`.`Id`) -LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `t0`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `t0`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` -ORDER BY `n`.`Id`, `t`.`Id`, `t0`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` +) AS `s0` ON `s`.`BaseParentId` = `s0`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `s0`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `s0`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `n`.`Id`, `s`.`Id`, `s0`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` """); } @@ -819,23 +819,23 @@ public override async Task Nested_include_with_inheritance_reference_collection( await base.Nested_include_with_inheritance_reference_collection(async); AssertSql( -""" -SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `t`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `t`.`BaseParentId`, `t`.`Name`, `t`.`Discriminator`, `t0`.`Id`, `t0`.`Name`, `t0`.`ParentCollectionId`, `t0`.`ParentReferenceId`, `t0`.`Discriminator` + """ +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `s`.`BaseParentId`, `s`.`Name`, `s`.`Discriminator`, `s0`.`Id`, `s0`.`Name`, `s0`.`ParentCollectionId`, `s0`.`ParentReferenceId`, `s0`.`Discriminator` FROM ((((`BaseEntities` AS `b` LEFT JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, IIF(`d0`.`Id` IS NOT NULL, 'DerivedReferenceOnBase', NULL) AS `Discriminator` FROM `BaseReferencesOnBase` AS `b0` LEFT JOIN `DerivedReferencesOnBase` AS `d0` ON `b0`.`Id` = `d0`.`Id` -) AS `t` ON `b`.`Id` = `t`.`BaseParentId`) +) AS `s` ON `b`.`Id` = `s`.`BaseParentId`) LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `b`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId`) LEFT JOIN ( SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, IIF(`n0`.`Id` IS NOT NULL, 'NestedCollectionDerived', NULL) AS `Discriminator` FROM `NestedCollections` AS `n` LEFT JOIN `NestedCollectionsDerived` AS `n0` ON `n`.`Id` = `n0`.`Id` -) AS `t0` ON `t`.`Id` = `t0`.`ParentReferenceId` -ORDER BY `b`.`Id`, `t`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id` +) AS `s0` ON `s`.`Id` = `s0`.`ParentReferenceId` +ORDER BY `b`.`Id`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id` """); } @@ -844,23 +844,23 @@ public override async Task Nested_include_with_inheritance_reference_collection_ await base.Nested_include_with_inheritance_reference_collection_on_base(async); AssertSql( -""" -SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, `t`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `t`.`BaseParentId`, `t`.`Name`, `t`.`Discriminator`, `t0`.`Id`, `t0`.`Name`, `t0`.`ParentCollectionId`, `t0`.`ParentReferenceId`, `t0`.`Discriminator` + """ +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `s`.`BaseParentId`, `s`.`Name`, `s`.`Discriminator`, `s0`.`Id`, `s0`.`Name`, `s0`.`ParentCollectionId`, `s0`.`ParentReferenceId`, `s0`.`Discriminator` FROM ((((`BaseEntities` AS `b` INNER JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, IIF(`d0`.`Id` IS NOT NULL, 'DerivedReferenceOnBase', NULL) AS `Discriminator` FROM `BaseReferencesOnBase` AS `b0` LEFT JOIN `DerivedReferencesOnBase` AS `d0` ON `b0`.`Id` = `d0`.`Id` -) AS `t` ON `b`.`Id` = `t`.`BaseParentId`) +) AS `s` ON `b`.`Id` = `s`.`BaseParentId`) LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `b`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId`) LEFT JOIN ( SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, IIF(`n0`.`Id` IS NOT NULL, 'NestedCollectionDerived', NULL) AS `Discriminator` FROM `NestedCollections` AS `n` LEFT JOIN `NestedCollectionsDerived` AS `n0` ON `n`.`Id` = `n0`.`Id` -) AS `t0` ON `t`.`Id` = `t0`.`ParentReferenceId` -ORDER BY `b`.`Id`, `t`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id` +) AS `s0` ON `s`.`Id` = `s0`.`ParentReferenceId` +ORDER BY `b`.`Id`, `s`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id` """); } @@ -869,23 +869,23 @@ public override async Task Nested_include_with_inheritance_reference_collection_ await base.Nested_include_with_inheritance_reference_collection_reverse(async); AssertSql( -""" -SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, IIF(`n0`.`Id` IS NOT NULL, 'NestedCollectionDerived', NULL) AS `Discriminator`, `t`.`Id`, `t`.`BaseParentId`, `t`.`Name`, `t`.`Discriminator`, `t0`.`Id`, `t0`.`Name`, `t0`.`BaseId`, `t0`.`Discriminator`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `t0`.`OwnedReferenceOnBase_Id`, `t0`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `t0`.`Id0`, `t0`.`OwnedReferenceOnDerived_Id`, `t0`.`OwnedReferenceOnDerived_Name` + """ +SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, IIF(`n0`.`Id` IS NOT NULL, 'NestedCollectionDerived', NULL) AS `Discriminator`, `s`.`Id`, `s`.`BaseParentId`, `s`.`Name`, `s`.`Discriminator`, `s0`.`Id`, `s0`.`Name`, `s0`.`BaseId`, `s0`.`Discriminator`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `s0`.`OwnedReferenceOnBase_Id`, `s0`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `s0`.`Id0`, `s0`.`OwnedReferenceOnDerived_Id`, `s0`.`OwnedReferenceOnDerived_Name` FROM ((((`NestedCollections` AS `n` LEFT JOIN `NestedCollectionsDerived` AS `n0` ON `n`.`Id` = `n0`.`Id`) LEFT JOIN ( SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, IIF(`d`.`Id` IS NOT NULL, 'DerivedReferenceOnBase', NULL) AS `Discriminator` FROM `BaseReferencesOnBase` AS `b` LEFT JOIN `DerivedReferencesOnBase` AS `d` ON `b`.`Id` = `d`.`Id` -) AS `t` ON `n`.`ParentReferenceId` = `t`.`Id`) +) AS `s` ON `n`.`ParentReferenceId` = `s`.`Id`) LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`Name`, `d0`.`BaseId`, IIF(`d0`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `d0`.`Id` AS `Id0`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` FROM `BaseEntities` AS `b0` LEFT JOIN `DerivedEntities` AS `d0` ON `b0`.`Id` = `d0`.`Id` -) AS `t0` ON `t`.`BaseParentId` = `t0`.`Id`) -LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `t0`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `t0`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` -ORDER BY `n`.`Id`, `t`.`Id`, `t0`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` +) AS `s0` ON `s`.`BaseParentId` = `s0`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `s0`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `s0`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `n`.`Id`, `s`.`Id`, `s0`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` """); } @@ -894,23 +894,23 @@ public override async Task Nested_include_with_inheritance_reference_reference(b await base.Nested_include_with_inheritance_reference_reference(async); AssertSql( -""" -SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `t`.`Id`, `t0`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `t`.`BaseParentId`, `t`.`Name`, `t`.`Discriminator`, `t0`.`Name`, `t0`.`ParentCollectionId`, `t0`.`ParentReferenceId`, `t0`.`Discriminator` + """ +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `s`.`Id`, `s0`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `s`.`BaseParentId`, `s`.`Name`, `s`.`Discriminator`, `s0`.`Name`, `s0`.`ParentCollectionId`, `s0`.`ParentReferenceId`, `s0`.`Discriminator` FROM ((((`BaseEntities` AS `b` LEFT JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, IIF(`d0`.`Id` IS NOT NULL, 'DerivedReferenceOnBase', NULL) AS `Discriminator` FROM `BaseReferencesOnBase` AS `b0` LEFT JOIN `DerivedReferencesOnBase` AS `d0` ON `b0`.`Id` = `d0`.`Id` -) AS `t` ON `b`.`Id` = `t`.`BaseParentId`) +) AS `s` ON `b`.`Id` = `s`.`BaseParentId`) LEFT JOIN ( SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, IIF(`n0`.`Id` IS NOT NULL, 'NestedReferenceDerived', NULL) AS `Discriminator` FROM `NestedReferences` AS `n` LEFT JOIN `NestedReferencesDerived` AS `n0` ON `n`.`Id` = `n0`.`Id` -) AS `t0` ON `t`.`Id` = `t0`.`ParentReferenceId`) +) AS `s0` ON `s`.`Id` = `s0`.`ParentReferenceId`) LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `b`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` -ORDER BY `b`.`Id`, `t`.`Id`, `t0`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id`, `s`.`Id`, `s0`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` """); } @@ -919,23 +919,23 @@ public override async Task Nested_include_with_inheritance_reference_reference_o await base.Nested_include_with_inheritance_reference_reference_on_base(async); AssertSql( -""" -SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, `t`.`Id`, `t0`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `t`.`BaseParentId`, `t`.`Name`, `t`.`Discriminator`, `t0`.`Name`, `t0`.`ParentCollectionId`, `t0`.`ParentReferenceId`, `t0`.`Discriminator` + """ +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, `s`.`Id`, `s0`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `s`.`BaseParentId`, `s`.`Name`, `s`.`Discriminator`, `s0`.`Name`, `s0`.`ParentCollectionId`, `s0`.`ParentReferenceId`, `s0`.`Discriminator` FROM ((((`BaseEntities` AS `b` INNER JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, IIF(`d0`.`Id` IS NOT NULL, 'DerivedReferenceOnBase', NULL) AS `Discriminator` FROM `BaseReferencesOnBase` AS `b0` LEFT JOIN `DerivedReferencesOnBase` AS `d0` ON `b0`.`Id` = `d0`.`Id` -) AS `t` ON `b`.`Id` = `t`.`BaseParentId`) +) AS `s` ON `b`.`Id` = `s`.`BaseParentId`) LEFT JOIN ( SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, IIF(`n0`.`Id` IS NOT NULL, 'NestedReferenceDerived', NULL) AS `Discriminator` FROM `NestedReferences` AS `n` LEFT JOIN `NestedReferencesDerived` AS `n0` ON `n`.`Id` = `n0`.`Id` -) AS `t0` ON `t`.`Id` = `t0`.`ParentReferenceId`) +) AS `s0` ON `s`.`Id` = `s0`.`ParentReferenceId`) LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `b`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` -ORDER BY `b`.`Id`, `t`.`Id`, `t0`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id`, `s`.`Id`, `s0`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` """); } @@ -944,23 +944,23 @@ public override async Task Nested_include_with_inheritance_reference_reference_r await base.Nested_include_with_inheritance_reference_reference_reverse(async); AssertSql( -""" -SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, IIF(`n0`.`Id` IS NOT NULL, 'NestedReferenceDerived', NULL) AS `Discriminator`, `t`.`Id`, `t`.`BaseParentId`, `t`.`Name`, `t`.`Discriminator`, `t0`.`Id`, `t0`.`Name`, `t0`.`BaseId`, `t0`.`Discriminator`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `t0`.`OwnedReferenceOnBase_Id`, `t0`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `t0`.`Id0`, `t0`.`OwnedReferenceOnDerived_Id`, `t0`.`OwnedReferenceOnDerived_Name` + """ +SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, IIF(`n0`.`Id` IS NOT NULL, 'NestedReferenceDerived', NULL) AS `Discriminator`, `s`.`Id`, `s`.`BaseParentId`, `s`.`Name`, `s`.`Discriminator`, `s0`.`Id`, `s0`.`Name`, `s0`.`BaseId`, `s0`.`Discriminator`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `s0`.`OwnedReferenceOnBase_Id`, `s0`.`OwnedReferenceOnBase_Name`, `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `s0`.`Id0`, `s0`.`OwnedReferenceOnDerived_Id`, `s0`.`OwnedReferenceOnDerived_Name` FROM ((((`NestedReferences` AS `n` LEFT JOIN `NestedReferencesDerived` AS `n0` ON `n`.`Id` = `n0`.`Id`) LEFT JOIN ( SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, IIF(`d`.`Id` IS NOT NULL, 'DerivedReferenceOnBase', NULL) AS `Discriminator` FROM `BaseReferencesOnBase` AS `b` LEFT JOIN `DerivedReferencesOnBase` AS `d` ON `b`.`Id` = `d`.`Id` -) AS `t` ON `n`.`ParentReferenceId` = `t`.`Id`) +) AS `s` ON `n`.`ParentReferenceId` = `s`.`Id`) LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`Name`, `d0`.`BaseId`, IIF(`d0`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `d0`.`Id` AS `Id0`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` FROM `BaseEntities` AS `b0` LEFT JOIN `DerivedEntities` AS `d0` ON `b0`.`Id` = `d0`.`Id` -) AS `t0` ON `t`.`BaseParentId` = `t0`.`Id`) -LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `t0`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `t0`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` -ORDER BY `n`.`Id`, `t`.`Id`, `t0`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` +) AS `s0` ON `s`.`BaseParentId` = `s0`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `s0`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `s0`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `n`.`Id`, `s`.`Id`, `s0`.`Id`, `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `d1`.`DerivedInheritanceRelationshipEntityId` """); } @@ -969,14 +969,14 @@ public override async Task Collection_projection_on_base_type(bool async) await base.Collection_projection_on_base_type(async); AssertSql( -""" -SELECT `b`.`Id`, `t`.`Id`, `t`.`BaseParentId`, `t`.`Name`, `t`.`DerivedProperty`, `t`.`Discriminator` + """ +SELECT `b`.`Id`, `s`.`Id`, `s`.`BaseParentId`, `s`.`Name`, `s`.`DerivedProperty`, `s`.`Discriminator` FROM `BaseEntities` AS `b` LEFT JOIN ( - SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, `d0`.`DerivedProperty`, IIF(`d0`.`Id` IS NOT NULL, 'DerivedCollectionOnBase', NULL) AS `Discriminator` + SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, `d`.`DerivedProperty`, IIF(`d`.`Id` IS NOT NULL, 'DerivedCollectionOnBase', NULL) AS `Discriminator` FROM `BaseCollectionsOnBase` AS `b0` - LEFT JOIN `DerivedCollectionsOnBase` AS `d0` ON `b0`.`Id` = `d0`.`Id` -) AS `t` ON `b`.`Id` = `t`.`BaseParentId` + LEFT JOIN `DerivedCollectionsOnBase` AS `d` ON `b0`.`Id` = `d`.`Id` +) AS `s` ON `b`.`Id` = `s`.`BaseParentId` ORDER BY `b`.`Id` """); } @@ -986,8 +986,8 @@ public override async Task Include_on_derived_type_with_queryable_Cast(bool asyn await base.Include_on_derived_type_with_queryable_Cast(async); AssertSql( -""" -SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `t`.`Id`, `t`.`Name`, `t`.`ParentId`, `t`.`DerivedInheritanceRelationshipEntityId` + """ +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `s`.`Id`, `s`.`Name`, `s`.`ParentId`, `s`.`DerivedInheritanceRelationshipEntityId` FROM (((`BaseEntities` AS `b` LEFT JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId`) @@ -996,7 +996,7 @@ LEFT JOIN ( SELECT `b1`.`Id`, `b1`.`Name`, `b1`.`ParentId`, `d1`.`DerivedInheritanceRelationshipEntityId` FROM `BaseCollectionsOnDerived` AS `b1` INNER JOIN `DerivedCollectionsOnDerived` AS `d1` ON `b1`.`Id` = `d1`.`Id` -) AS `t` ON `b`.`Id` = `t`.`DerivedInheritanceRelationshipEntityId` +) AS `s` ON `b`.`Id` = `s`.`DerivedInheritanceRelationshipEntityId` WHERE `b`.`Id` >= 4 ORDER BY `b`.`Id`, `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id` """); @@ -1007,35 +1007,35 @@ public override async Task Include_collection_with_inheritance_split(bool async) await base.Include_collection_with_inheritance_split(async); AssertSql( -""" + """ SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` FROM `BaseEntities` AS `b` LEFT JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id` ORDER BY `b`.`Id` """, // -""" -SELECT `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`Id` + """ +SELECT `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`Id` FROM `BaseEntities` AS `b` -INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId` +INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId` ORDER BY `b`.`Id` """, // -""" -SELECT `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `b`.`Id` + """ +SELECT `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `b`.`Id` FROM `BaseEntities` AS `b` -INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `b`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` +INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `b`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` ORDER BY `b`.`Id` """, // -""" -SELECT `t`.`Id`, `t`.`BaseParentId`, `t`.`Name`, `t`.`DerivedProperty`, `t`.`Discriminator`, `b`.`Id` + """ +SELECT `s`.`Id`, `s`.`BaseParentId`, `s`.`Name`, `s`.`DerivedProperty`, `s`.`Discriminator`, `b`.`Id` FROM `BaseEntities` AS `b` INNER JOIN ( - SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, `d0`.`DerivedProperty`, IIF(`d0`.`Id` IS NOT NULL, 'DerivedCollectionOnBase', NULL) AS `Discriminator` - FROM `BaseCollectionsOnBase` AS `b0` - LEFT JOIN `DerivedCollectionsOnBase` AS `d0` ON `b0`.`Id` = `d0`.`Id` -) AS `t` ON `b`.`Id` = `t`.`BaseParentId` + SELECT `b2`.`Id`, `b2`.`BaseParentId`, `b2`.`Name`, `d2`.`DerivedProperty`, IIF(`d2`.`Id` IS NOT NULL, 'DerivedCollectionOnBase', NULL) AS `Discriminator` + FROM `BaseCollectionsOnBase` AS `b2` + LEFT JOIN `DerivedCollectionsOnBase` AS `d2` ON `b2`.`Id` = `d2`.`Id` +) AS `s` ON `b`.`Id` = `s`.`BaseParentId` ORDER BY `b`.`Id` """); } @@ -1045,40 +1045,40 @@ public override async Task Include_collection_with_inheritance_reverse_split(boo await base.Include_collection_with_inheritance_reverse_split(async); AssertSql( -""" -SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, `d`.`DerivedProperty`, IIF(`d`.`Id` IS NOT NULL, 'DerivedCollectionOnBase', NULL) AS `Discriminator`, `t`.`Id`, `t`.`Name`, `t`.`BaseId`, `t`.`Discriminator`, `t`.`OwnedReferenceOnBase_Id`, `t`.`OwnedReferenceOnBase_Name`, `t`.`Id0`, `t`.`OwnedReferenceOnDerived_Id`, `t`.`OwnedReferenceOnDerived_Name` + """ +SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, `d`.`DerivedProperty`, IIF(`d`.`Id` IS NOT NULL, 'DerivedCollectionOnBase', NULL) AS `Discriminator`, `s`.`Id`, `s`.`Name`, `s`.`BaseId`, `s`.`Discriminator`, `s`.`OwnedReferenceOnBase_Id`, `s`.`OwnedReferenceOnBase_Name`, `s`.`Id0`, `s`.`OwnedReferenceOnDerived_Id`, `s`.`OwnedReferenceOnDerived_Name` FROM (`BaseCollectionsOnBase` AS `b` LEFT JOIN `DerivedCollectionsOnBase` AS `d` ON `b`.`Id` = `d`.`Id`) LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`Name`, `d0`.`BaseId`, IIF(`d0`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `d0`.`Id` AS `Id0`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` FROM `BaseEntities` AS `b0` LEFT JOIN `DerivedEntities` AS `d0` ON `b0`.`Id` = `d0`.`Id` -) AS `t` ON `b`.`BaseParentId` = `t`.`Id` -ORDER BY `b`.`Id`, `t`.`Id` +) AS `s` ON `b`.`BaseParentId` = `s`.`Id` +ORDER BY `b`.`Id`, `s`.`Id` """, - // - """ -SELECT `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`Id`, `t`.`Id` + // + """ +SELECT `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b`.`Id`, `s`.`Id` FROM (`BaseCollectionsOnBase` AS `b` LEFT JOIN ( SELECT `b0`.`Id` FROM `BaseEntities` AS `b0` -) AS `t` ON `b`.`BaseParentId` = `t`.`Id`) -LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `t`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId` -WHERE `t`.`Id` IS NOT NULL AND `b1`.`BaseInheritanceRelationshipEntityId` IS NOT NULL -ORDER BY `b`.`Id`, `t`.`Id` +) AS `s` ON `b`.`BaseParentId` = `s`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b2` ON `s`.`Id` = `b2`.`BaseInheritanceRelationshipEntityId` +WHERE `s`.`Id` IS NOT NULL AND `b2`.`BaseInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `b`.`Id`, `s`.`Id` """, - // - """ -SELECT `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `b`.`Id`, `t`.`Id` + // + """ +SELECT `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `b`.`Id`, `s`.`Id` FROM (`BaseCollectionsOnBase` AS `b` LEFT JOIN ( SELECT `b0`.`Id` FROM `BaseEntities` AS `b0` -) AS `t` ON `b`.`BaseParentId` = `t`.`Id`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `t`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` -WHERE `t`.`Id` IS NOT NULL AND `d1`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL -ORDER BY `b`.`Id`, `t`.`Id` +) AS `s` ON `b`.`BaseParentId` = `s`.`Id`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `s`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +WHERE `s`.`Id` IS NOT NULL AND `d2`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `b`.`Id`, `s`.`Id` """); } @@ -1087,7 +1087,7 @@ public override async Task Include_collection_with_inheritance_with_filter_split await base.Include_collection_with_inheritance_with_filter_split(async); AssertSql( -""" + """ SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` FROM `BaseEntities` AS `b` LEFT JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id` @@ -1095,30 +1095,30 @@ public override async Task Include_collection_with_inheritance_with_filter_split ORDER BY `b`.`Id` """, // -""" -SELECT `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`Id` + """ +SELECT `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`Id` FROM `BaseEntities` AS `b` -INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId` +INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId` WHERE `b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL ORDER BY `b`.`Id` """, // -""" -SELECT `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `b`.`Id` + """ +SELECT `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `b`.`Id` FROM `BaseEntities` AS `b` -INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `b`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` +INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `b`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` WHERE `b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL ORDER BY `b`.`Id` """, // -""" -SELECT `t`.`Id`, `t`.`BaseParentId`, `t`.`Name`, `t`.`DerivedProperty`, `t`.`Discriminator`, `b`.`Id` + """ +SELECT `s`.`Id`, `s`.`BaseParentId`, `s`.`Name`, `s`.`DerivedProperty`, `s`.`Discriminator`, `b`.`Id` FROM `BaseEntities` AS `b` INNER JOIN ( - SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, `d0`.`DerivedProperty`, IIF(`d0`.`Id` IS NOT NULL, 'DerivedCollectionOnBase', NULL) AS `Discriminator` - FROM `BaseCollectionsOnBase` AS `b0` - LEFT JOIN `DerivedCollectionsOnBase` AS `d0` ON `b0`.`Id` = `d0`.`Id` -) AS `t` ON `b`.`Id` = `t`.`BaseParentId` + SELECT `b2`.`Id`, `b2`.`BaseParentId`, `b2`.`Name`, `d2`.`DerivedProperty`, IIF(`d2`.`Id` IS NOT NULL, 'DerivedCollectionOnBase', NULL) AS `Discriminator` + FROM `BaseCollectionsOnBase` AS `b2` + LEFT JOIN `DerivedCollectionsOnBase` AS `d2` ON `b2`.`Id` = `d2`.`Id` +) AS `s` ON `b`.`Id` = `s`.`BaseParentId` WHERE `b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL ORDER BY `b`.`Id` """); @@ -1129,41 +1129,41 @@ public override async Task Include_collection_with_inheritance_with_filter_rever await base.Include_collection_with_inheritance_with_filter_reverse_split(async); AssertSql( -""" -SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, `d`.`DerivedProperty`, IIF(`d`.`Id` IS NOT NULL, 'DerivedCollectionOnBase', NULL) AS `Discriminator`, `t`.`Id`, `t`.`Name`, `t`.`BaseId`, `t`.`Discriminator`, `t`.`OwnedReferenceOnBase_Id`, `t`.`OwnedReferenceOnBase_Name`, `t`.`Id0`, `t`.`OwnedReferenceOnDerived_Id`, `t`.`OwnedReferenceOnDerived_Name` + """ +SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, `d`.`DerivedProperty`, IIF(`d`.`Id` IS NOT NULL, 'DerivedCollectionOnBase', NULL) AS `Discriminator`, `s`.`Id`, `s`.`Name`, `s`.`BaseId`, `s`.`Discriminator`, `s`.`OwnedReferenceOnBase_Id`, `s`.`OwnedReferenceOnBase_Name`, `s`.`Id0`, `s`.`OwnedReferenceOnDerived_Id`, `s`.`OwnedReferenceOnDerived_Name` FROM (`BaseCollectionsOnBase` AS `b` LEFT JOIN `DerivedCollectionsOnBase` AS `d` ON `b`.`Id` = `d`.`Id`) LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`Name`, `d0`.`BaseId`, IIF(`d0`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `d0`.`Id` AS `Id0`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` FROM `BaseEntities` AS `b0` LEFT JOIN `DerivedEntities` AS `d0` ON `b0`.`Id` = `d0`.`Id` -) AS `t` ON `b`.`BaseParentId` = `t`.`Id` +) AS `s` ON `b`.`BaseParentId` = `s`.`Id` WHERE `b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL -ORDER BY `b`.`Id`, `t`.`Id` +ORDER BY `b`.`Id`, `s`.`Id` """, // -""" -SELECT `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`Id`, `t`.`Id` + """ +SELECT `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b`.`Id`, `s`.`Id` FROM (`BaseCollectionsOnBase` AS `b` LEFT JOIN ( SELECT `b0`.`Id` FROM `BaseEntities` AS `b0` -) AS `t` ON `b`.`BaseParentId` = `t`.`Id`) -LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `t`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId` -WHERE (`b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL) AND (`t`.`Id` IS NOT NULL AND `b1`.`BaseInheritanceRelationshipEntityId` IS NOT NULL) -ORDER BY `b`.`Id`, `t`.`Id` +) AS `s` ON `b`.`BaseParentId` = `s`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b2` ON `s`.`Id` = `b2`.`BaseInheritanceRelationshipEntityId` +WHERE (`b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL) AND (`s`.`Id` IS NOT NULL AND `b2`.`BaseInheritanceRelationshipEntityId` IS NOT NULL) +ORDER BY `b`.`Id`, `s`.`Id` """, // -""" -SELECT `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `b`.`Id`, `t`.`Id` + """ +SELECT `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `b`.`Id`, `s`.`Id` FROM (`BaseCollectionsOnBase` AS `b` LEFT JOIN ( SELECT `b0`.`Id` FROM `BaseEntities` AS `b0` -) AS `t` ON `b`.`BaseParentId` = `t`.`Id`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `t`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` -WHERE (`b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL) AND (`t`.`Id` IS NOT NULL AND `d1`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL) -ORDER BY `b`.`Id`, `t`.`Id` +) AS `s` ON `b`.`BaseParentId` = `s`.`Id`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `s`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +WHERE (`b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL) AND (`s`.`Id` IS NOT NULL AND `d2`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL) +ORDER BY `b`.`Id`, `s`.`Id` """); } @@ -1172,28 +1172,28 @@ public override async Task Include_collection_without_inheritance_split(bool asy await base.Include_collection_without_inheritance_split(async); AssertSql( -""" + """ SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` FROM `BaseEntities` AS `b` LEFT JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id` ORDER BY `b`.`Id` """, // -""" -SELECT `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`Id` + """ +SELECT `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`Id` FROM `BaseEntities` AS `b` -INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId` +INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId` ORDER BY `b`.`Id` """, // -""" -SELECT `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `b`.`Id` + """ +SELECT `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `b`.`Id` FROM `BaseEntities` AS `b` -INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `b`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` +INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `b`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` ORDER BY `b`.`Id` """, // -""" + """ SELECT `c`.`Id`, `c`.`Name`, `c`.`ParentId`, `b`.`Id` FROM `BaseEntities` AS `b` INNER JOIN `CollectionsOnBase` AS `c` ON `b`.`Id` = `c`.`ParentId` @@ -1207,38 +1207,38 @@ public override async Task Include_collection_without_inheritance_reverse_split( AssertSql( """ -SELECT `c`.`Id`, `c`.`Name`, `c`.`ParentId`, `t`.`Id`, `t`.`Name`, `t`.`BaseId`, `t`.`Discriminator`, `t`.`OwnedReferenceOnBase_Id`, `t`.`OwnedReferenceOnBase_Name`, `t`.`Id0`, `t`.`OwnedReferenceOnDerived_Id`, `t`.`OwnedReferenceOnDerived_Name` +SELECT `c`.`Id`, `c`.`Name`, `c`.`ParentId`, `s`.`Id`, `s`.`Name`, `s`.`BaseId`, `s`.`Discriminator`, `s`.`OwnedReferenceOnBase_Id`, `s`.`OwnedReferenceOnBase_Name`, `s`.`Id0`, `s`.`OwnedReferenceOnDerived_Id`, `s`.`OwnedReferenceOnDerived_Name` FROM `CollectionsOnBase` AS `c` LEFT JOIN ( SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d`.`Id` AS `Id0`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` FROM `BaseEntities` AS `b` LEFT JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id` -) AS `t` ON `c`.`ParentId` = `t`.`Id` -ORDER BY `c`.`Id`, `t`.`Id` +) AS `s` ON `c`.`ParentId` = `s`.`Id` +ORDER BY `c`.`Id`, `s`.`Id` """, // """ -SELECT `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `c`.`Id`, `t`.`Id` +SELECT `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `c`.`Id`, `s`.`Id` FROM (`CollectionsOnBase` AS `c` LEFT JOIN ( SELECT `b`.`Id` FROM `BaseEntities` AS `b` -) AS `t` ON `c`.`ParentId` = `t`.`Id`) -LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `t`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId` -WHERE `t`.`Id` IS NOT NULL AND `b0`.`BaseInheritanceRelationshipEntityId` IS NOT NULL -ORDER BY `c`.`Id`, `t`.`Id` +) AS `s` ON `c`.`ParentId` = `s`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `s`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId` +WHERE `s`.`Id` IS NOT NULL AND `b1`.`BaseInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `c`.`Id`, `s`.`Id` """, // """ -SELECT `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `c`.`Id`, `t`.`Id` +SELECT `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `c`.`Id`, `s`.`Id` FROM (`CollectionsOnBase` AS `c` LEFT JOIN ( SELECT `b`.`Id` FROM `BaseEntities` AS `b` -) AS `t` ON `c`.`ParentId` = `t`.`Id`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `t`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` -WHERE `t`.`Id` IS NOT NULL AND `d0`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL -ORDER BY `c`.`Id`, `t`.`Id` +) AS `s` ON `c`.`ParentId` = `s`.`Id`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `s`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +WHERE `s`.`Id` IS NOT NULL AND `d1`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `c`.`Id`, `s`.`Id` """); } @@ -1247,7 +1247,7 @@ public override async Task Include_collection_without_inheritance_with_filter_sp await base.Include_collection_without_inheritance_with_filter_split(async); AssertSql( -""" + """ SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` FROM `BaseEntities` AS `b` LEFT JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id` @@ -1255,23 +1255,23 @@ public override async Task Include_collection_without_inheritance_with_filter_sp ORDER BY `b`.`Id` """, // -""" -SELECT `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`Id` + """ +SELECT `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`Id` FROM `BaseEntities` AS `b` -INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId` +INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId` WHERE `b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL ORDER BY `b`.`Id` """, // -""" -SELECT `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `b`.`Id` + """ +SELECT `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `b`.`Id` FROM `BaseEntities` AS `b` -INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `b`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` +INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `b`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` WHERE `b`.`Name` <> 'Bar' OR `b`.`Name` IS NULL ORDER BY `b`.`Id` """, // -""" + """ SELECT `c`.`Id`, `c`.`Name`, `c`.`ParentId`, `b`.`Id` FROM `BaseEntities` AS `b` INNER JOIN `CollectionsOnBase` AS `c` ON `b`.`Id` = `c`.`ParentId` @@ -1285,40 +1285,40 @@ public override async Task Include_collection_without_inheritance_with_filter_re await base.Include_collection_without_inheritance_with_filter_reverse_split(async); AssertSql( -""" -SELECT `c`.`Id`, `c`.`Name`, `c`.`ParentId`, `t`.`Id`, `t`.`Name`, `t`.`BaseId`, `t`.`Discriminator`, `t`.`OwnedReferenceOnBase_Id`, `t`.`OwnedReferenceOnBase_Name`, `t`.`Id0`, `t`.`OwnedReferenceOnDerived_Id`, `t`.`OwnedReferenceOnDerived_Name` + """ +SELECT `c`.`Id`, `c`.`Name`, `c`.`ParentId`, `s`.`Id`, `s`.`Name`, `s`.`BaseId`, `s`.`Discriminator`, `s`.`OwnedReferenceOnBase_Id`, `s`.`OwnedReferenceOnBase_Name`, `s`.`Id0`, `s`.`OwnedReferenceOnDerived_Id`, `s`.`OwnedReferenceOnDerived_Name` FROM `CollectionsOnBase` AS `c` LEFT JOIN ( SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d`.`Id` AS `Id0`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` FROM `BaseEntities` AS `b` LEFT JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id` -) AS `t` ON `c`.`ParentId` = `t`.`Id` +) AS `s` ON `c`.`ParentId` = `s`.`Id` WHERE `c`.`Name` <> 'Bar' OR `c`.`Name` IS NULL -ORDER BY `c`.`Id`, `t`.`Id` +ORDER BY `c`.`Id`, `s`.`Id` """, // -""" -SELECT `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `c`.`Id`, `t`.`Id` + """ +SELECT `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `c`.`Id`, `s`.`Id` FROM (`CollectionsOnBase` AS `c` LEFT JOIN ( SELECT `b`.`Id` FROM `BaseEntities` AS `b` -) AS `t` ON `c`.`ParentId` = `t`.`Id`) -LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `t`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId` -WHERE (`c`.`Name` <> 'Bar' OR `c`.`Name` IS NULL) AND (`t`.`Id` IS NOT NULL AND `b0`.`BaseInheritanceRelationshipEntityId` IS NOT NULL) -ORDER BY `c`.`Id`, `t`.`Id` +) AS `s` ON `c`.`ParentId` = `s`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `s`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId` +WHERE (`c`.`Name` <> 'Bar' OR `c`.`Name` IS NULL) AND (`s`.`Id` IS NOT NULL AND `b1`.`BaseInheritanceRelationshipEntityId` IS NOT NULL) +ORDER BY `c`.`Id`, `s`.`Id` """, // -""" -SELECT `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `c`.`Id`, `t`.`Id` + """ +SELECT `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `c`.`Id`, `s`.`Id` FROM (`CollectionsOnBase` AS `c` LEFT JOIN ( SELECT `b`.`Id` FROM `BaseEntities` AS `b` -) AS `t` ON `c`.`ParentId` = `t`.`Id`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `t`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` -WHERE (`c`.`Name` <> 'Bar' OR `c`.`Name` IS NULL) AND (`t`.`Id` IS NOT NULL AND `d0`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL) -ORDER BY `c`.`Id`, `t`.`Id` +) AS `s` ON `c`.`ParentId` = `s`.`Id`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `s`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` +WHERE (`c`.`Name` <> 'Bar' OR `c`.`Name` IS NULL) AND (`s`.`Id` IS NOT NULL AND `d1`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL) +ORDER BY `c`.`Id`, `s`.`Id` """); } @@ -1327,38 +1327,38 @@ public override async Task Include_collection_with_inheritance_on_derived1_split await base.Include_collection_with_inheritance_on_derived1_split(async); AssertSql( -""" + """ SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` FROM `BaseEntities` AS `b` INNER JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id` ORDER BY `b`.`Id` """, // -""" -SELECT `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`Id` + """ +SELECT `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`Id` FROM (`BaseEntities` AS `b` INNER JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) -INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId` +INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId` ORDER BY `b`.`Id` """, // -""" -SELECT `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `b`.`Id` + """ +SELECT `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `b`.`Id` FROM (`BaseEntities` AS `b` INNER JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) -INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `b`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` +INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `b`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` ORDER BY `b`.`Id` """, // -""" -SELECT `t`.`Id`, `t`.`BaseParentId`, `t`.`Name`, `t`.`DerivedProperty`, `t`.`Discriminator`, `b`.`Id` + """ +SELECT `s`.`Id`, `s`.`BaseParentId`, `s`.`Name`, `s`.`DerivedProperty`, `s`.`Discriminator`, `b`.`Id` FROM (`BaseEntities` AS `b` INNER JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) INNER JOIN ( - SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, `d0`.`DerivedProperty`, IIF(`d0`.`Id` IS NOT NULL, 'DerivedCollectionOnBase', NULL) AS `Discriminator` - FROM `BaseCollectionsOnBase` AS `b0` - LEFT JOIN `DerivedCollectionsOnBase` AS `d0` ON `b0`.`Id` = `d0`.`Id` -) AS `t` ON `b`.`Id` = `t`.`BaseParentId` + SELECT `b2`.`Id`, `b2`.`BaseParentId`, `b2`.`Name`, `d2`.`DerivedProperty`, IIF(`d2`.`Id` IS NOT NULL, 'DerivedCollectionOnBase', NULL) AS `Discriminator` + FROM `BaseCollectionsOnBase` AS `b2` + LEFT JOIN `DerivedCollectionsOnBase` AS `d2` ON `b2`.`Id` = `d2`.`Id` +) AS `s` ON `b`.`Id` = `s`.`BaseParentId` ORDER BY `b`.`Id` """); } @@ -1368,38 +1368,38 @@ public override async Task Include_collection_with_inheritance_on_derived2_split await base.Include_collection_with_inheritance_on_derived2_split(async); AssertSql( -""" + """ SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` FROM `BaseEntities` AS `b` INNER JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id` ORDER BY `b`.`Id` """, // -""" -SELECT `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`Id` + """ +SELECT `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`Id` FROM (`BaseEntities` AS `b` INNER JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) -INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId` +INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId` ORDER BY `b`.`Id` """, // -""" -SELECT `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `b`.`Id` + """ +SELECT `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `b`.`Id` FROM (`BaseEntities` AS `b` INNER JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) -INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `b`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` +INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `b`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` ORDER BY `b`.`Id` """, // -""" -SELECT `t`.`Id`, `t`.`Name`, `t`.`ParentId`, `t`.`DerivedInheritanceRelationshipEntityId`, `t`.`Discriminator`, `b`.`Id` + """ +SELECT `s`.`Id`, `s`.`Name`, `s`.`ParentId`, `s`.`DerivedInheritanceRelationshipEntityId`, `s`.`Discriminator`, `b`.`Id` FROM (`BaseEntities` AS `b` INNER JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) INNER JOIN ( - SELECT `b0`.`Id`, `b0`.`Name`, `b0`.`ParentId`, `d0`.`DerivedInheritanceRelationshipEntityId`, IIF(`d0`.`Id` IS NOT NULL, 'DerivedCollectionOnDerived', NULL) AS `Discriminator` - FROM `BaseCollectionsOnDerived` AS `b0` - LEFT JOIN `DerivedCollectionsOnDerived` AS `d0` ON `b0`.`Id` = `d0`.`Id` -) AS `t` ON `b`.`Id` = `t`.`ParentId` + SELECT `b2`.`Id`, `b2`.`Name`, `b2`.`ParentId`, `d2`.`DerivedInheritanceRelationshipEntityId`, IIF(`d2`.`Id` IS NOT NULL, 'DerivedCollectionOnDerived', NULL) AS `Discriminator` + FROM `BaseCollectionsOnDerived` AS `b2` + LEFT JOIN `DerivedCollectionsOnDerived` AS `d2` ON `b2`.`Id` = `d2`.`Id` +) AS `s` ON `b`.`Id` = `s`.`ParentId` ORDER BY `b`.`Id` """); } @@ -1409,38 +1409,38 @@ public override async Task Include_collection_with_inheritance_on_derived3_split await base.Include_collection_with_inheritance_on_derived3_split(async); AssertSql( -""" + """ SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` FROM `BaseEntities` AS `b` INNER JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id` ORDER BY `b`.`Id` """, // -""" -SELECT `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`Id` + """ +SELECT `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`Id` FROM (`BaseEntities` AS `b` INNER JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) -INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId` +INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId` ORDER BY `b`.`Id` """, // -""" -SELECT `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `b`.`Id` + """ +SELECT `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `b`.`Id` FROM (`BaseEntities` AS `b` INNER JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) -INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `b`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` +INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `b`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` ORDER BY `b`.`Id` """, // -""" -SELECT `t`.`Id`, `t`.`Name`, `t`.`ParentId`, `t`.`DerivedInheritanceRelationshipEntityId`, `b`.`Id` + """ +SELECT `s`.`Id`, `s`.`Name`, `s`.`ParentId`, `s`.`DerivedInheritanceRelationshipEntityId`, `b`.`Id` FROM (`BaseEntities` AS `b` INNER JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) INNER JOIN ( - SELECT `b0`.`Id`, `b0`.`Name`, `b0`.`ParentId`, `d0`.`DerivedInheritanceRelationshipEntityId` - FROM `BaseCollectionsOnDerived` AS `b0` - INNER JOIN `DerivedCollectionsOnDerived` AS `d0` ON `b0`.`Id` = `d0`.`Id` -) AS `t` ON `b`.`Id` = `t`.`DerivedInheritanceRelationshipEntityId` + SELECT `b2`.`Id`, `b2`.`Name`, `b2`.`ParentId`, `d2`.`DerivedInheritanceRelationshipEntityId` + FROM `BaseCollectionsOnDerived` AS `b2` + INNER JOIN `DerivedCollectionsOnDerived` AS `d2` ON `b2`.`Id` = `d2`.`Id` +) AS `s` ON `b`.`Id` = `s`.`DerivedInheritanceRelationshipEntityId` ORDER BY `b`.`Id` """); } @@ -1450,42 +1450,42 @@ public override async Task Include_collection_with_inheritance_on_derived_revers await base.Include_collection_with_inheritance_on_derived_reverse_split(async); AssertSql( -""" -SELECT `b`.`Id`, `b`.`Name`, `b`.`ParentId`, `d`.`DerivedInheritanceRelationshipEntityId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedCollectionOnDerived', NULL) AS `Discriminator`, `t`.`Id`, `t`.`Name`, `t`.`BaseId`, `t`.`OwnedReferenceOnBase_Id`, `t`.`OwnedReferenceOnBase_Name`, `t`.`Id0`, `t`.`OwnedReferenceOnDerived_Id`, `t`.`OwnedReferenceOnDerived_Name` + """ +SELECT `b`.`Id`, `b`.`Name`, `b`.`ParentId`, `d`.`DerivedInheritanceRelationshipEntityId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedCollectionOnDerived', NULL) AS `Discriminator`, `s`.`Id`, `s`.`Name`, `s`.`BaseId`, `s`.`OwnedReferenceOnBase_Id`, `s`.`OwnedReferenceOnBase_Name`, `s`.`Id0`, `s`.`OwnedReferenceOnDerived_Id`, `s`.`OwnedReferenceOnDerived_Name` FROM (`BaseCollectionsOnDerived` AS `b` LEFT JOIN `DerivedCollectionsOnDerived` AS `d` ON `b`.`Id` = `d`.`Id`) LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`Name`, `d0`.`BaseId`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `d0`.`Id` AS `Id0`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` FROM `BaseEntities` AS `b0` INNER JOIN `DerivedEntities` AS `d0` ON `b0`.`Id` = `d0`.`Id` -) AS `t` ON `b`.`ParentId` = `t`.`Id` -ORDER BY `b`.`Id`, `t`.`Id` +) AS `s` ON `b`.`ParentId` = `s`.`Id` +ORDER BY `b`.`Id`, `s`.`Id` """, - // - """ -SELECT `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`Id`, `t`.`Id` + // + """ +SELECT `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b`.`Id`, `s`.`Id` FROM (`BaseCollectionsOnDerived` AS `b` LEFT JOIN ( SELECT `b0`.`Id` FROM `BaseEntities` AS `b0` INNER JOIN `DerivedEntities` AS `d0` ON `b0`.`Id` = `d0`.`Id` -) AS `t` ON `b`.`ParentId` = `t`.`Id`) -LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `t`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId` -WHERE `t`.`Id` IS NOT NULL AND `b1`.`BaseInheritanceRelationshipEntityId` IS NOT NULL -ORDER BY `b`.`Id`, `t`.`Id` +) AS `s` ON `b`.`ParentId` = `s`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b2` ON `s`.`Id` = `b2`.`BaseInheritanceRelationshipEntityId` +WHERE `s`.`Id` IS NOT NULL AND `b2`.`BaseInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `b`.`Id`, `s`.`Id` """, - // - """ -SELECT `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `b`.`Id`, `t`.`Id` + // + """ +SELECT `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `b`.`Id`, `s`.`Id` FROM (`BaseCollectionsOnDerived` AS `b` LEFT JOIN ( SELECT `b0`.`Id` FROM `BaseEntities` AS `b0` INNER JOIN `DerivedEntities` AS `d0` ON `b0`.`Id` = `d0`.`Id` -) AS `t` ON `b`.`ParentId` = `t`.`Id`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `t`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` -WHERE `t`.`Id` IS NOT NULL AND `d1`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL -ORDER BY `b`.`Id`, `t`.`Id` +) AS `s` ON `b`.`ParentId` = `s`.`Id`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `s`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +WHERE `s`.`Id` IS NOT NULL AND `d2`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `b`.`Id`, `s`.`Id` """); } @@ -1494,54 +1494,54 @@ public override async Task Nested_include_with_inheritance_reference_collection_ await base.Nested_include_with_inheritance_reference_collection_split(async); AssertSql( -""" -SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `t`.`Id`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `t`.`BaseParentId`, `t`.`Name`, `t`.`Discriminator` + """ +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `s`.`Id`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `s`.`BaseParentId`, `s`.`Name`, `s`.`Discriminator` FROM (`BaseEntities` AS `b` LEFT JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, IIF(`d0`.`Id` IS NOT NULL, 'DerivedReferenceOnBase', NULL) AS `Discriminator` FROM `BaseReferencesOnBase` AS `b0` LEFT JOIN `DerivedReferencesOnBase` AS `d0` ON `b0`.`Id` = `d0`.`Id` -) AS `t` ON `b`.`Id` = `t`.`BaseParentId` -ORDER BY `b`.`Id`, `t`.`Id` +) AS `s` ON `b`.`Id` = `s`.`BaseParentId` +ORDER BY `b`.`Id`, `s`.`Id` """, - // - """ -SELECT `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`Id`, `t`.`Id` + // + """ +SELECT `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b`.`Id`, `s`.`Id` FROM (`BaseEntities` AS `b` LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`BaseParentId` FROM `BaseReferencesOnBase` AS `b0` -) AS `t` ON `b`.`Id` = `t`.`BaseParentId`) -INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId` -ORDER BY `b`.`Id`, `t`.`Id` +) AS `s` ON `b`.`Id` = `s`.`BaseParentId`) +INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b2` ON `b`.`Id` = `b2`.`BaseInheritanceRelationshipEntityId` +ORDER BY `b`.`Id`, `s`.`Id` """, - // - """ -SELECT `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `b`.`Id`, `t`.`Id` + // + """ +SELECT `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `b`.`Id`, `s`.`Id` FROM (`BaseEntities` AS `b` LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`BaseParentId` FROM `BaseReferencesOnBase` AS `b0` -) AS `t` ON `b`.`Id` = `t`.`BaseParentId`) -INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `b`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` -ORDER BY `b`.`Id`, `t`.`Id` +) AS `s` ON `b`.`Id` = `s`.`BaseParentId`) +INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `b`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id`, `s`.`Id` """, - // - """ -SELECT `t0`.`Id`, `t0`.`Name`, `t0`.`ParentCollectionId`, `t0`.`ParentReferenceId`, `t0`.`Discriminator`, `b`.`Id`, `t`.`Id` + // + """ +SELECT `s0`.`Id`, `s0`.`Name`, `s0`.`ParentCollectionId`, `s0`.`ParentReferenceId`, `s0`.`Discriminator`, `b`.`Id`, `s`.`Id` FROM (`BaseEntities` AS `b` LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`BaseParentId` FROM `BaseReferencesOnBase` AS `b0` -) AS `t` ON `b`.`Id` = `t`.`BaseParentId`) +) AS `s` ON `b`.`Id` = `s`.`BaseParentId`) LEFT JOIN ( SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, IIF(`n0`.`Id` IS NOT NULL, 'NestedCollectionDerived', NULL) AS `Discriminator` FROM `NestedCollections` AS `n` LEFT JOIN `NestedCollectionsDerived` AS `n0` ON `n`.`Id` = `n0`.`Id` -) AS `t0` ON `t`.`Id` = `t0`.`ParentReferenceId` -WHERE `t`.`Id` IS NOT NULL AND `t0`.`ParentReferenceId` IS NOT NULL -ORDER BY `b`.`Id`, `t`.`Id` +) AS `s0` ON `s`.`Id` = `s0`.`ParentReferenceId` +WHERE `s`.`Id` IS NOT NULL AND `s0`.`ParentReferenceId` IS NOT NULL +ORDER BY `b`.`Id`, `s`.`Id` """); } @@ -1550,57 +1550,57 @@ public override async Task Nested_include_with_inheritance_reference_collection_ await base.Nested_include_with_inheritance_reference_collection_on_base_split(async); AssertSql( -""" -SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, `t`.`Id`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `t`.`BaseParentId`, `t`.`Name`, `t`.`Discriminator` + """ +SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, `s`.`Id`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name`, `s`.`BaseParentId`, `s`.`Name`, `s`.`Discriminator` FROM (`BaseEntities` AS `b` INNER JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, IIF(`d0`.`Id` IS NOT NULL, 'DerivedReferenceOnBase', NULL) AS `Discriminator` FROM `BaseReferencesOnBase` AS `b0` LEFT JOIN `DerivedReferencesOnBase` AS `d0` ON `b0`.`Id` = `d0`.`Id` -) AS `t` ON `b`.`Id` = `t`.`BaseParentId` -ORDER BY `b`.`Id`, `t`.`Id` +) AS `s` ON `b`.`Id` = `s`.`BaseParentId` +ORDER BY `b`.`Id`, `s`.`Id` """, - // - """ -SELECT `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`Id`, `t`.`Id` + // + """ +SELECT `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `b`.`Id`, `s`.`Id` FROM ((`BaseEntities` AS `b` INNER JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`BaseParentId` FROM `BaseReferencesOnBase` AS `b0` -) AS `t` ON `b`.`Id` = `t`.`BaseParentId`) -INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId` -ORDER BY `b`.`Id`, `t`.`Id` +) AS `s` ON `b`.`Id` = `s`.`BaseParentId`) +INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b2` ON `b`.`Id` = `b2`.`BaseInheritanceRelationshipEntityId` +ORDER BY `b`.`Id`, `s`.`Id` """, - // - """ -SELECT `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `b`.`Id`, `t`.`Id` + // + """ +SELECT `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `b`.`Id`, `s`.`Id` FROM ((`BaseEntities` AS `b` INNER JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`BaseParentId` FROM `BaseReferencesOnBase` AS `b0` -) AS `t` ON `b`.`Id` = `t`.`BaseParentId`) -INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `b`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` -ORDER BY `b`.`Id`, `t`.`Id` +) AS `s` ON `b`.`Id` = `s`.`BaseParentId`) +INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `b`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +ORDER BY `b`.`Id`, `s`.`Id` """, - // - """ -SELECT `t0`.`Id`, `t0`.`Name`, `t0`.`ParentCollectionId`, `t0`.`ParentReferenceId`, `t0`.`Discriminator`, `b`.`Id`, `t`.`Id` + // + """ +SELECT `s0`.`Id`, `s0`.`Name`, `s0`.`ParentCollectionId`, `s0`.`ParentReferenceId`, `s0`.`Discriminator`, `b`.`Id`, `s`.`Id` FROM ((`BaseEntities` AS `b` INNER JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id`) LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`BaseParentId` FROM `BaseReferencesOnBase` AS `b0` -) AS `t` ON `b`.`Id` = `t`.`BaseParentId`) +) AS `s` ON `b`.`Id` = `s`.`BaseParentId`) LEFT JOIN ( SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, IIF(`n0`.`Id` IS NOT NULL, 'NestedCollectionDerived', NULL) AS `Discriminator` FROM `NestedCollections` AS `n` LEFT JOIN `NestedCollectionsDerived` AS `n0` ON `n`.`Id` = `n0`.`Id` -) AS `t0` ON `t`.`Id` = `t0`.`ParentReferenceId` -WHERE `t`.`Id` IS NOT NULL AND `t0`.`ParentReferenceId` IS NOT NULL -ORDER BY `b`.`Id`, `t`.`Id` +) AS `s0` ON `s`.`Id` = `s0`.`ParentReferenceId` +WHERE `s`.`Id` IS NOT NULL AND `s0`.`ParentReferenceId` IS NOT NULL +ORDER BY `b`.`Id`, `s`.`Id` """); } @@ -1609,53 +1609,53 @@ public override async Task Nested_include_with_inheritance_reference_collection_ await base.Nested_include_with_inheritance_reference_collection_reverse_split(async); AssertSql( -""" -SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, IIF(`n0`.`Id` IS NOT NULL, 'NestedCollectionDerived', NULL) AS `Discriminator`, `t`.`Id`, `t`.`BaseParentId`, `t`.`Name`, `t`.`Discriminator`, `t0`.`Id`, `t0`.`Name`, `t0`.`BaseId`, `t0`.`Discriminator`, `t0`.`OwnedReferenceOnBase_Id`, `t0`.`OwnedReferenceOnBase_Name`, `t0`.`Id0`, `t0`.`OwnedReferenceOnDerived_Id`, `t0`.`OwnedReferenceOnDerived_Name` + """ +SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, IIF(`n0`.`Id` IS NOT NULL, 'NestedCollectionDerived', NULL) AS `Discriminator`, `s`.`Id`, `s`.`BaseParentId`, `s`.`Name`, `s`.`Discriminator`, `s0`.`Id`, `s0`.`Name`, `s0`.`BaseId`, `s0`.`Discriminator`, `s0`.`OwnedReferenceOnBase_Id`, `s0`.`OwnedReferenceOnBase_Name`, `s0`.`Id0`, `s0`.`OwnedReferenceOnDerived_Id`, `s0`.`OwnedReferenceOnDerived_Name` FROM ((`NestedCollections` AS `n` LEFT JOIN `NestedCollectionsDerived` AS `n0` ON `n`.`Id` = `n0`.`Id`) LEFT JOIN ( SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, IIF(`d`.`Id` IS NOT NULL, 'DerivedReferenceOnBase', NULL) AS `Discriminator` FROM `BaseReferencesOnBase` AS `b` LEFT JOIN `DerivedReferencesOnBase` AS `d` ON `b`.`Id` = `d`.`Id` -) AS `t` ON `n`.`ParentReferenceId` = `t`.`Id`) +) AS `s` ON `n`.`ParentReferenceId` = `s`.`Id`) LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`Name`, `d0`.`BaseId`, IIF(`d0`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `d0`.`Id` AS `Id0`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` FROM `BaseEntities` AS `b0` LEFT JOIN `DerivedEntities` AS `d0` ON `b0`.`Id` = `d0`.`Id` -) AS `t0` ON `t`.`BaseParentId` = `t0`.`Id` -ORDER BY `n`.`Id`, `t`.`Id`, `t0`.`Id` +) AS `s0` ON `s`.`BaseParentId` = `s0`.`Id` +ORDER BY `n`.`Id`, `s`.`Id`, `s0`.`Id` """, - // - """ -SELECT `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `n`.`Id`, `t`.`Id`, `t0`.`Id` + // + """ +SELECT `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `n`.`Id`, `s`.`Id`, `s0`.`Id` FROM ((`NestedCollections` AS `n` LEFT JOIN ( SELECT `b`.`Id`, `b`.`BaseParentId` FROM `BaseReferencesOnBase` AS `b` -) AS `t` ON `n`.`ParentReferenceId` = `t`.`Id`) +) AS `s` ON `n`.`ParentReferenceId` = `s`.`Id`) LEFT JOIN ( SELECT `b0`.`Id` FROM `BaseEntities` AS `b0` -) AS `t0` ON `t`.`BaseParentId` = `t0`.`Id`) -LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `t0`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId` -WHERE `t0`.`Id` IS NOT NULL AND `b1`.`BaseInheritanceRelationshipEntityId` IS NOT NULL -ORDER BY `n`.`Id`, `t`.`Id`, `t0`.`Id` +) AS `s0` ON `s`.`BaseParentId` = `s0`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b2` ON `s0`.`Id` = `b2`.`BaseInheritanceRelationshipEntityId` +WHERE `s0`.`Id` IS NOT NULL AND `b2`.`BaseInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `n`.`Id`, `s`.`Id`, `s0`.`Id` """, - // - """ -SELECT `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `n`.`Id`, `t`.`Id`, `t0`.`Id` + // + """ +SELECT `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `n`.`Id`, `s`.`Id`, `s0`.`Id` FROM ((`NestedCollections` AS `n` LEFT JOIN ( SELECT `b`.`Id`, `b`.`BaseParentId` FROM `BaseReferencesOnBase` AS `b` -) AS `t` ON `n`.`ParentReferenceId` = `t`.`Id`) +) AS `s` ON `n`.`ParentReferenceId` = `s`.`Id`) LEFT JOIN ( SELECT `b0`.`Id` FROM `BaseEntities` AS `b0` -) AS `t0` ON `t`.`BaseParentId` = `t0`.`Id`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `t0`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` -WHERE `t0`.`Id` IS NOT NULL AND `d1`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL -ORDER BY `n`.`Id`, `t`.`Id`, `t0`.`Id` +) AS `s0` ON `s`.`BaseParentId` = `s0`.`Id`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `s0`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +WHERE `s0`.`Id` IS NOT NULL AND `d2`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `n`.`Id`, `s`.`Id`, `s0`.`Id` """); } @@ -1664,40 +1664,40 @@ public override async Task Nested_include_with_inheritance_collection_reference_ await base.Nested_include_with_inheritance_collection_reference_split(async); AssertSql( -""" + """ SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` FROM `BaseEntities` AS `b` LEFT JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id` ORDER BY `b`.`Id` """, // -""" -SELECT `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`Id` + """ +SELECT `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`Id` FROM `BaseEntities` AS `b` -INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId` +INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId` ORDER BY `b`.`Id` """, // -""" -SELECT `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `b`.`Id` + """ +SELECT `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `b`.`Id` FROM `BaseEntities` AS `b` -INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `b`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` +INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `b`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` ORDER BY `b`.`Id` """, // -""" -SELECT `t0`.`Id`, `t0`.`BaseParentId`, `t0`.`Name`, `t0`.`DerivedProperty`, `t0`.`Discriminator`, `t0`.`Id0`, `t0`.`Name0`, `t0`.`ParentCollectionId`, `t0`.`ParentReferenceId`, `t0`.`Discriminator0` AS `Discriminator`, `b`.`Id` + """ +SELECT `s0`.`Id`, `s0`.`BaseParentId`, `s0`.`Name`, `s0`.`DerivedProperty`, `s0`.`Discriminator`, `s0`.`Id0`, `s0`.`Name0`, `s0`.`ParentCollectionId`, `s0`.`ParentReferenceId`, `s0`.`Discriminator0` AS `Discriminator`, `b`.`Id` FROM `BaseEntities` AS `b` INNER JOIN ( - SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, `d0`.`DerivedProperty`, IIF(`d0`.`Id` IS NOT NULL, 'DerivedCollectionOnBase', NULL) AS `Discriminator`, `t`.`Id` AS `Id0`, `t`.`Name` AS `Name0`, `t`.`ParentCollectionId`, `t`.`ParentReferenceId`, `t`.`Discriminator` AS `Discriminator0` - FROM (`BaseCollectionsOnBase` AS `b0` - LEFT JOIN `DerivedCollectionsOnBase` AS `d0` ON `b0`.`Id` = `d0`.`Id`) + SELECT `b2`.`Id`, `b2`.`BaseParentId`, `b2`.`Name`, `d2`.`DerivedProperty`, IIF(`d2`.`Id` IS NOT NULL, 'DerivedCollectionOnBase', NULL) AS `Discriminator`, `s`.`Id` AS `Id0`, `s`.`Name` AS `Name0`, `s`.`ParentCollectionId`, `s`.`ParentReferenceId`, `s`.`Discriminator` AS `Discriminator0` + FROM (`BaseCollectionsOnBase` AS `b2` + LEFT JOIN `DerivedCollectionsOnBase` AS `d2` ON `b2`.`Id` = `d2`.`Id`) LEFT JOIN ( SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, IIF(`n0`.`Id` IS NOT NULL, 'NestedReferenceDerived', NULL) AS `Discriminator` FROM `NestedReferences` AS `n` LEFT JOIN `NestedReferencesDerived` AS `n0` ON `n`.`Id` = `n0`.`Id` - ) AS `t` ON `b0`.`Id` = `t`.`ParentCollectionId` -) AS `t0` ON `b`.`Id` = `t0`.`BaseParentId` + ) AS `s` ON `b2`.`Id` = `s`.`ParentCollectionId` +) AS `s0` ON `b`.`Id` = `s0`.`BaseParentId` ORDER BY `b`.`Id` """); } @@ -1707,53 +1707,53 @@ public override async Task Nested_include_with_inheritance_collection_reference_ await base.Nested_include_with_inheritance_collection_reference_reverse_split(async); AssertSql( -""" -SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, IIF(`n0`.`Id` IS NOT NULL, 'NestedReferenceDerived', NULL) AS `Discriminator`, `t`.`Id`, `t`.`BaseParentId`, `t`.`Name`, `t`.`DerivedProperty`, `t`.`Discriminator`, `t0`.`Id`, `t0`.`Name`, `t0`.`BaseId`, `t0`.`Discriminator`, `t0`.`OwnedReferenceOnBase_Id`, `t0`.`OwnedReferenceOnBase_Name`, `t0`.`Id0`, `t0`.`OwnedReferenceOnDerived_Id`, `t0`.`OwnedReferenceOnDerived_Name` + """ +SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, IIF(`n0`.`Id` IS NOT NULL, 'NestedReferenceDerived', NULL) AS `Discriminator`, `s`.`Id`, `s`.`BaseParentId`, `s`.`Name`, `s`.`DerivedProperty`, `s`.`Discriminator`, `s0`.`Id`, `s0`.`Name`, `s0`.`BaseId`, `s0`.`Discriminator`, `s0`.`OwnedReferenceOnBase_Id`, `s0`.`OwnedReferenceOnBase_Name`, `s0`.`Id0`, `s0`.`OwnedReferenceOnDerived_Id`, `s0`.`OwnedReferenceOnDerived_Name` FROM ((`NestedReferences` AS `n` LEFT JOIN `NestedReferencesDerived` AS `n0` ON `n`.`Id` = `n0`.`Id`) LEFT JOIN ( SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, `d`.`DerivedProperty`, IIF(`d`.`Id` IS NOT NULL, 'DerivedCollectionOnBase', NULL) AS `Discriminator` FROM `BaseCollectionsOnBase` AS `b` LEFT JOIN `DerivedCollectionsOnBase` AS `d` ON `b`.`Id` = `d`.`Id` -) AS `t` ON `n`.`ParentCollectionId` = `t`.`Id`) +) AS `s` ON `n`.`ParentCollectionId` = `s`.`Id`) LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`Name`, `d0`.`BaseId`, IIF(`d0`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `d0`.`Id` AS `Id0`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` FROM `BaseEntities` AS `b0` LEFT JOIN `DerivedEntities` AS `d0` ON `b0`.`Id` = `d0`.`Id` -) AS `t0` ON `t`.`BaseParentId` = `t0`.`Id` -ORDER BY `n`.`Id`, `t`.`Id`, `t0`.`Id` +) AS `s0` ON `s`.`BaseParentId` = `s0`.`Id` +ORDER BY `n`.`Id`, `s`.`Id`, `s0`.`Id` """, - // - """ -SELECT `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `n`.`Id`, `t`.`Id`, `t0`.`Id` + // + """ +SELECT `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `n`.`Id`, `s`.`Id`, `s0`.`Id` FROM ((`NestedReferences` AS `n` LEFT JOIN ( SELECT `b`.`Id`, `b`.`BaseParentId` FROM `BaseCollectionsOnBase` AS `b` -) AS `t` ON `n`.`ParentCollectionId` = `t`.`Id`) +) AS `s` ON `n`.`ParentCollectionId` = `s`.`Id`) LEFT JOIN ( SELECT `b0`.`Id` FROM `BaseEntities` AS `b0` -) AS `t0` ON `t`.`BaseParentId` = `t0`.`Id`) -LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `t0`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId` -WHERE `t0`.`Id` IS NOT NULL AND `b1`.`BaseInheritanceRelationshipEntityId` IS NOT NULL -ORDER BY `n`.`Id`, `t`.`Id`, `t0`.`Id` +) AS `s0` ON `s`.`BaseParentId` = `s0`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b2` ON `s0`.`Id` = `b2`.`BaseInheritanceRelationshipEntityId` +WHERE `s0`.`Id` IS NOT NULL AND `b2`.`BaseInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `n`.`Id`, `s`.`Id`, `s0`.`Id` """, - // - """ -SELECT `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `n`.`Id`, `t`.`Id`, `t0`.`Id` + // + """ +SELECT `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `n`.`Id`, `s`.`Id`, `s0`.`Id` FROM ((`NestedReferences` AS `n` LEFT JOIN ( SELECT `b`.`Id`, `b`.`BaseParentId` FROM `BaseCollectionsOnBase` AS `b` -) AS `t` ON `n`.`ParentCollectionId` = `t`.`Id`) +) AS `s` ON `n`.`ParentCollectionId` = `s`.`Id`) LEFT JOIN ( SELECT `b0`.`Id` FROM `BaseEntities` AS `b0` -) AS `t0` ON `t`.`BaseParentId` = `t0`.`Id`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `t0`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` -WHERE `t0`.`Id` IS NOT NULL AND `d1`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL -ORDER BY `n`.`Id`, `t`.`Id`, `t0`.`Id` +) AS `s0` ON `s`.`BaseParentId` = `s0`.`Id`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `s0`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +WHERE `s0`.`Id` IS NOT NULL AND `d2`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `n`.`Id`, `s`.`Id`, `s0`.`Id` """); } @@ -1762,52 +1762,52 @@ public override async Task Nested_include_with_inheritance_collection_collection await base.Nested_include_with_inheritance_collection_collection_split(async); AssertSql( -""" + """ SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` FROM `BaseEntities` AS `b` LEFT JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id` ORDER BY `b`.`Id` """, - // - """ -SELECT `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`Id` + // + """ +SELECT `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`Id` FROM `BaseEntities` AS `b` -INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId` +INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId` ORDER BY `b`.`Id` """, - // - """ -SELECT `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `b`.`Id` + // + """ +SELECT `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `b`.`Id` FROM `BaseEntities` AS `b` -INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `b`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` +INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `b`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` ORDER BY `b`.`Id` """, - // - """ -SELECT `t`.`Id`, `t`.`BaseParentId`, `t`.`Name`, `t`.`DerivedProperty`, `t`.`Discriminator`, `b`.`Id` + // + """ +SELECT `s`.`Id`, `s`.`BaseParentId`, `s`.`Name`, `s`.`DerivedProperty`, `s`.`Discriminator`, `b`.`Id` FROM `BaseEntities` AS `b` INNER JOIN ( - SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, `d0`.`DerivedProperty`, IIF(`d0`.`Id` IS NOT NULL, 'DerivedCollectionOnBase', NULL) AS `Discriminator` - FROM `BaseCollectionsOnBase` AS `b0` - LEFT JOIN `DerivedCollectionsOnBase` AS `d0` ON `b0`.`Id` = `d0`.`Id` -) AS `t` ON `b`.`Id` = `t`.`BaseParentId` -ORDER BY `b`.`Id`, `t`.`Id` + SELECT `b2`.`Id`, `b2`.`BaseParentId`, `b2`.`Name`, `d2`.`DerivedProperty`, IIF(`d2`.`Id` IS NOT NULL, 'DerivedCollectionOnBase', NULL) AS `Discriminator` + FROM `BaseCollectionsOnBase` AS `b2` + LEFT JOIN `DerivedCollectionsOnBase` AS `d2` ON `b2`.`Id` = `d2`.`Id` +) AS `s` ON `b`.`Id` = `s`.`BaseParentId` +ORDER BY `b`.`Id`, `s`.`Id` """, - // - """ -SELECT `t0`.`Id`, `t0`.`Name`, `t0`.`ParentCollectionId`, `t0`.`ParentReferenceId`, `t0`.`Discriminator`, `b`.`Id`, `t`.`Id` + // + """ +SELECT `s0`.`Id`, `s0`.`Name`, `s0`.`ParentCollectionId`, `s0`.`ParentReferenceId`, `s0`.`Discriminator`, `b`.`Id`, `s`.`Id` FROM (`BaseEntities` AS `b` INNER JOIN ( - SELECT `b0`.`Id`, `b0`.`BaseParentId` - FROM `BaseCollectionsOnBase` AS `b0` -) AS `t` ON `b`.`Id` = `t`.`BaseParentId`) + SELECT `b2`.`Id`, `b2`.`BaseParentId` + FROM `BaseCollectionsOnBase` AS `b2` +) AS `s` ON `b`.`Id` = `s`.`BaseParentId`) LEFT JOIN ( SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, IIF(`n0`.`Id` IS NOT NULL, 'NestedCollectionDerived', NULL) AS `Discriminator` FROM `NestedCollections` AS `n` LEFT JOIN `NestedCollectionsDerived` AS `n0` ON `n`.`Id` = `n0`.`Id` -) AS `t0` ON `t`.`Id` = `t0`.`ParentCollectionId` -WHERE `t`.`Id` IS NOT NULL AND `t0`.`ParentCollectionId` IS NOT NULL -ORDER BY `b`.`Id`, `t`.`Id` +) AS `s0` ON `s`.`Id` = `s0`.`ParentCollectionId` +WHERE `s`.`Id` IS NOT NULL AND `s0`.`ParentCollectionId` IS NOT NULL +ORDER BY `b`.`Id`, `s`.`Id` """); } @@ -1816,53 +1816,53 @@ public override async Task Nested_include_with_inheritance_collection_collection await base.Nested_include_with_inheritance_collection_collection_reverse_split(async); AssertSql( -""" -SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, IIF(`n0`.`Id` IS NOT NULL, 'NestedCollectionDerived', NULL) AS `Discriminator`, `t`.`Id`, `t`.`BaseParentId`, `t`.`Name`, `t`.`DerivedProperty`, `t`.`Discriminator`, `t0`.`Id`, `t0`.`Name`, `t0`.`BaseId`, `t0`.`Discriminator`, `t0`.`OwnedReferenceOnBase_Id`, `t0`.`OwnedReferenceOnBase_Name`, `t0`.`Id0`, `t0`.`OwnedReferenceOnDerived_Id`, `t0`.`OwnedReferenceOnDerived_Name` + """ +SELECT `n`.`Id`, `n`.`Name`, `n`.`ParentCollectionId`, `n`.`ParentReferenceId`, IIF(`n0`.`Id` IS NOT NULL, 'NestedCollectionDerived', NULL) AS `Discriminator`, `s`.`Id`, `s`.`BaseParentId`, `s`.`Name`, `s`.`DerivedProperty`, `s`.`Discriminator`, `s0`.`Id`, `s0`.`Name`, `s0`.`BaseId`, `s0`.`Discriminator`, `s0`.`OwnedReferenceOnBase_Id`, `s0`.`OwnedReferenceOnBase_Name`, `s0`.`Id0`, `s0`.`OwnedReferenceOnDerived_Id`, `s0`.`OwnedReferenceOnDerived_Name` FROM ((`NestedCollections` AS `n` LEFT JOIN `NestedCollectionsDerived` AS `n0` ON `n`.`Id` = `n0`.`Id`) LEFT JOIN ( SELECT `b`.`Id`, `b`.`BaseParentId`, `b`.`Name`, `d`.`DerivedProperty`, IIF(`d`.`Id` IS NOT NULL, 'DerivedCollectionOnBase', NULL) AS `Discriminator` FROM `BaseCollectionsOnBase` AS `b` LEFT JOIN `DerivedCollectionsOnBase` AS `d` ON `b`.`Id` = `d`.`Id` -) AS `t` ON `n`.`ParentCollectionId` = `t`.`Id`) +) AS `s` ON `n`.`ParentCollectionId` = `s`.`Id`) LEFT JOIN ( SELECT `b0`.`Id`, `b0`.`Name`, `d0`.`BaseId`, IIF(`d0`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b0`.`OwnedReferenceOnBase_Id`, `b0`.`OwnedReferenceOnBase_Name`, `d0`.`Id` AS `Id0`, `d0`.`OwnedReferenceOnDerived_Id`, `d0`.`OwnedReferenceOnDerived_Name` FROM `BaseEntities` AS `b0` LEFT JOIN `DerivedEntities` AS `d0` ON `b0`.`Id` = `d0`.`Id` -) AS `t0` ON `t`.`BaseParentId` = `t0`.`Id` -ORDER BY `n`.`Id`, `t`.`Id`, `t0`.`Id` +) AS `s0` ON `s`.`BaseParentId` = `s0`.`Id` +ORDER BY `n`.`Id`, `s`.`Id`, `s0`.`Id` """, - // - """ -SELECT `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `n`.`Id`, `t`.`Id`, `t0`.`Id` + // + """ +SELECT `b2`.`BaseInheritanceRelationshipEntityId`, `b2`.`Id`, `b2`.`Name`, `n`.`Id`, `s`.`Id`, `s0`.`Id` FROM ((`NestedCollections` AS `n` LEFT JOIN ( SELECT `b`.`Id`, `b`.`BaseParentId` FROM `BaseCollectionsOnBase` AS `b` -) AS `t` ON `n`.`ParentCollectionId` = `t`.`Id`) +) AS `s` ON `n`.`ParentCollectionId` = `s`.`Id`) LEFT JOIN ( SELECT `b0`.`Id` FROM `BaseEntities` AS `b0` -) AS `t0` ON `t`.`BaseParentId` = `t0`.`Id`) -LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `t0`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId` -WHERE `t0`.`Id` IS NOT NULL AND `b1`.`BaseInheritanceRelationshipEntityId` IS NOT NULL -ORDER BY `n`.`Id`, `t`.`Id`, `t0`.`Id` +) AS `s0` ON `s`.`BaseParentId` = `s0`.`Id`) +LEFT JOIN `BaseEntities_OwnedCollectionOnBase` AS `b2` ON `s0`.`Id` = `b2`.`BaseInheritanceRelationshipEntityId` +WHERE `s0`.`Id` IS NOT NULL AND `b2`.`BaseInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `n`.`Id`, `s`.`Id`, `s0`.`Id` """, - // - """ -SELECT `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `n`.`Id`, `t`.`Id`, `t0`.`Id` + // + """ +SELECT `d2`.`DerivedInheritanceRelationshipEntityId`, `d2`.`Id`, `d2`.`Name`, `n`.`Id`, `s`.`Id`, `s0`.`Id` FROM ((`NestedCollections` AS `n` LEFT JOIN ( SELECT `b`.`Id`, `b`.`BaseParentId` FROM `BaseCollectionsOnBase` AS `b` -) AS `t` ON `n`.`ParentCollectionId` = `t`.`Id`) +) AS `s` ON `n`.`ParentCollectionId` = `s`.`Id`) LEFT JOIN ( SELECT `b0`.`Id` FROM `BaseEntities` AS `b0` -) AS `t0` ON `t`.`BaseParentId` = `t0`.`Id`) -LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `t0`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` -WHERE `t0`.`Id` IS NOT NULL AND `d1`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL -ORDER BY `n`.`Id`, `t`.`Id`, `t0`.`Id` +) AS `s0` ON `s`.`BaseParentId` = `s0`.`Id`) +LEFT JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d2` ON `s0`.`Id` = `d2`.`DerivedInheritanceRelationshipEntityId` +WHERE `s0`.`Id` IS NOT NULL AND `d2`.`DerivedInheritanceRelationshipEntityId` IS NOT NULL +ORDER BY `n`.`Id`, `s`.`Id`, `s0`.`Id` """); } @@ -1871,20 +1871,20 @@ public override async Task Nested_include_collection_reference_on_non_entity_bas await base.Nested_include_collection_reference_on_non_entity_base_split(async); AssertSql( -""" + """ SELECT `r`.`Id`, `r`.`Name` FROM `ReferencedEntities` AS `r` ORDER BY `r`.`Id` """, // -""" -SELECT `t`.`Id`, `t`.`Name`, `t`.`ReferenceId`, `t`.`ReferencedEntityId`, `t`.`Id0`, `t`.`Name0`, `r`.`Id` + """ +SELECT `s`.`Id`, `s`.`Name`, `s`.`ReferenceId`, `s`.`ReferencedEntityId`, `s`.`Id0`, `s`.`Name0`, `r`.`Id` FROM `ReferencedEntities` AS `r` INNER JOIN ( SELECT `p`.`Id`, `p`.`Name`, `p`.`ReferenceId`, `p`.`ReferencedEntityId`, `r0`.`Id` AS `Id0`, `r0`.`Name` AS `Name0` FROM `PrincipalEntities` AS `p` LEFT JOIN `ReferencedEntities` AS `r0` ON `p`.`ReferenceId` = `r0`.`Id` -) AS `t` ON `r`.`Id` = `t`.`ReferencedEntityId` +) AS `s` ON `r`.`Id` = `s`.`ReferencedEntityId` ORDER BY `r`.`Id` """); } @@ -1894,20 +1894,20 @@ public override async Task Collection_projection_on_base_type_split(bool async) await base.Collection_projection_on_base_type_split(async); AssertSql( -""" + """ SELECT `b`.`Id` FROM `BaseEntities` AS `b` ORDER BY `b`.`Id` """, // -""" -SELECT `t`.`Id`, `t`.`BaseParentId`, `t`.`Name`, `t`.`DerivedProperty`, `t`.`Discriminator`, `b`.`Id` + """ +SELECT `s`.`Id`, `s`.`BaseParentId`, `s`.`Name`, `s`.`DerivedProperty`, `s`.`Discriminator`, `b`.`Id` FROM `BaseEntities` AS `b` INNER JOIN ( SELECT `b0`.`Id`, `b0`.`BaseParentId`, `b0`.`Name`, `d0`.`DerivedProperty`, IIF(`d0`.`Id` IS NOT NULL, 'DerivedCollectionOnBase', NULL) AS `Discriminator` FROM `BaseCollectionsOnBase` AS `b0` LEFT JOIN `DerivedCollectionsOnBase` AS `d0` ON `b0`.`Id` = `d0`.`Id` -) AS `t` ON `b`.`Id` = `t`.`BaseParentId` +) AS `s` ON `b`.`Id` = `s`.`BaseParentId` ORDER BY `b`.`Id` """); } @@ -1917,7 +1917,7 @@ public override async Task Include_on_derived_type_with_queryable_Cast_split(boo await base.Include_on_derived_type_with_queryable_Cast_split(async); AssertSql( -""" + """ SELECT `b`.`Id`, `b`.`Name`, `d`.`BaseId`, IIF(`d`.`Id` IS NOT NULL, 'DerivedInheritanceRelationshipEntity', NULL) AS `Discriminator`, `b`.`OwnedReferenceOnBase_Id`, `b`.`OwnedReferenceOnBase_Name`, `d`.`Id`, `d`.`OwnedReferenceOnDerived_Id`, `d`.`OwnedReferenceOnDerived_Name` FROM `BaseEntities` AS `b` LEFT JOIN `DerivedEntities` AS `d` ON `b`.`Id` = `d`.`Id` @@ -1925,30 +1925,30 @@ public override async Task Include_on_derived_type_with_queryable_Cast_split(boo ORDER BY `b`.`Id` """, // -""" -SELECT `b0`.`BaseInheritanceRelationshipEntityId`, `b0`.`Id`, `b0`.`Name`, `b`.`Id` + """ +SELECT `b1`.`BaseInheritanceRelationshipEntityId`, `b1`.`Id`, `b1`.`Name`, `b`.`Id` FROM `BaseEntities` AS `b` -INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b0` ON `b`.`Id` = `b0`.`BaseInheritanceRelationshipEntityId` +INNER JOIN `BaseEntities_OwnedCollectionOnBase` AS `b1` ON `b`.`Id` = `b1`.`BaseInheritanceRelationshipEntityId` WHERE `b`.`Id` >= 4 ORDER BY `b`.`Id` """, // -""" -SELECT `d0`.`DerivedInheritanceRelationshipEntityId`, `d0`.`Id`, `d0`.`Name`, `b`.`Id` + """ +SELECT `d1`.`DerivedInheritanceRelationshipEntityId`, `d1`.`Id`, `d1`.`Name`, `b`.`Id` FROM `BaseEntities` AS `b` -INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d0` ON `b`.`Id` = `d0`.`DerivedInheritanceRelationshipEntityId` +INNER JOIN `DerivedEntities_OwnedCollectionOnDerived` AS `d1` ON `b`.`Id` = `d1`.`DerivedInheritanceRelationshipEntityId` WHERE `b`.`Id` >= 4 ORDER BY `b`.`Id` """, // -""" -SELECT `t`.`Id`, `t`.`Name`, `t`.`ParentId`, `t`.`DerivedInheritanceRelationshipEntityId`, `b`.`Id` + """ +SELECT `s`.`Id`, `s`.`Name`, `s`.`ParentId`, `s`.`DerivedInheritanceRelationshipEntityId`, `b`.`Id` FROM `BaseEntities` AS `b` INNER JOIN ( - SELECT `b0`.`Id`, `b0`.`Name`, `b0`.`ParentId`, `d0`.`DerivedInheritanceRelationshipEntityId` - FROM `BaseCollectionsOnDerived` AS `b0` - INNER JOIN `DerivedCollectionsOnDerived` AS `d0` ON `b0`.`Id` = `d0`.`Id` -) AS `t` ON `b`.`Id` = `t`.`DerivedInheritanceRelationshipEntityId` + SELECT `b2`.`Id`, `b2`.`Name`, `b2`.`ParentId`, `d2`.`DerivedInheritanceRelationshipEntityId` + FROM `BaseCollectionsOnDerived` AS `b2` + INNER JOIN `DerivedCollectionsOnDerived` AS `d2` ON `b2`.`Id` = `d2`.`Id` +) AS `s` ON `b`.`Id` = `s`.`DerivedInheritanceRelationshipEntityId` WHERE `b`.`Id` >= 4 ORDER BY `b`.`Id` """); diff --git a/test/EFCore.Jet.FunctionalTests/SaveChangesInterceptionJetTest.cs b/test/EFCore.Jet.FunctionalTests/SaveChangesInterceptionJetTest.cs index 5ccb524a..a200dc65 100644 --- a/test/EFCore.Jet.FunctionalTests/SaveChangesInterceptionJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/SaveChangesInterceptionJetTest.cs @@ -17,14 +17,11 @@ using Xunit; namespace EntityFrameworkCore.Jet.FunctionalTests; - -public abstract class SaveChangesInterceptionJetTestBase : SaveChangesInterceptionTestBase +#nullable disable +public abstract class SaveChangesInterceptionJetTestBase( + SaveChangesInterceptionJetTestBase.InterceptionJetFixtureBase fixture) + : SaveChangesInterceptionTestBase(fixture) { - protected SaveChangesInterceptionJetTestBase(InterceptionJetFixtureBase fixture) - : base(fixture) - { - } - [ConditionalTheory] [InlineData(false, false, false)] [InlineData(true, false, false)] @@ -39,7 +36,7 @@ public virtual async Task Intercept_concurrency_with_relational_specific_data(bo var saveChangesInterceptor = new RelationalConcurrencySaveChangesInterceptor(); var commandInterceptor = new TestCommandInterceptor(); - var context = CreateContext(saveChangesInterceptor, commandInterceptor); + var context = await CreateContextAsync(saveChangesInterceptor, commandInterceptor); using var _ = context; @@ -181,14 +178,10 @@ public override DbContextOptionsBuilder AddOptions(DbContextOptionsBuilder build } } - public class SaveChangesInterceptionJetTest - : SaveChangesInterceptionJetTestBase, IClassFixture + public class SaveChangesInterceptionJetTest(SaveChangesInterceptionJetTest.InterceptionJetFixture fixture) + : SaveChangesInterceptionJetTestBase(fixture), + IClassFixture { - public SaveChangesInterceptionJetTest(InterceptionJetFixture fixture) - : base(fixture) - { - } - public class InterceptionJetFixture : InterceptionJetFixtureBase { protected override string StoreName @@ -199,15 +192,11 @@ protected override bool ShouldSubscribeToDiagnosticListener } } - public class SaveChangesInterceptionWithDiagnosticsJetTest - : SaveChangesInterceptionJetTestBase, + public class SaveChangesInterceptionWithDiagnosticsJetTest( + SaveChangesInterceptionWithDiagnosticsJetTest.InterceptionJetFixture fixture) + : SaveChangesInterceptionJetTestBase(fixture), IClassFixture { - public SaveChangesInterceptionWithDiagnosticsJetTest(InterceptionJetFixture fixture) - : base(fixture) - { - } - public class InterceptionJetFixture : InterceptionJetFixtureBase { protected override string StoreName @@ -218,3 +207,4 @@ protected override bool ShouldSubscribeToDiagnosticListener } } } + \ No newline at end of file diff --git a/test/EFCore.Jet.FunctionalTests/Scaffolding/JetDatabaseModelFactoryTest.cs b/test/EFCore.Jet.FunctionalTests/Scaffolding/JetDatabaseModelFactoryTest.cs index 143aa2cf..046df412 100644 --- a/test/EFCore.Jet.FunctionalTests/Scaffolding/JetDatabaseModelFactoryTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Scaffolding/JetDatabaseModelFactoryTest.cs @@ -421,13 +421,13 @@ numericDefaultPrecisionColumn numeric(28, 5) NOT NULL { var columns = dbModel.Tables.Single().Columns; - Assert.Equal("decimal(18, 0)", columns.Single(c => c.Name == "decimalColumn").StoreType); - Assert.Equal("decimal(10, 5)", columns.Single(c => c.Name == "decimal105Column").StoreType); - Assert.Equal("decimal(18, 2)", columns.Single(c => c.Name == "decimalDefaultColumn").StoreType); - Assert.Equal("decimal(18, 0)", columns.Single(c => c.Name == "numericColumn").StoreType); - Assert.Equal("decimal(15, 2)", columns.Single(c => c.Name == "numeric152Column").StoreType); - Assert.Equal("decimal(18, 2)", columns.Single(c => c.Name == "numericDefaultColumn").StoreType); - Assert.Equal("decimal(28, 5)", + Assert.Equal("decimal(18,0)", columns.Single(c => c.Name == "decimalColumn").StoreType); + Assert.Equal("decimal(10,5)", columns.Single(c => c.Name == "decimal105Column").StoreType); + Assert.Equal("decimal(18,2)", columns.Single(c => c.Name == "decimalDefaultColumn").StoreType); + Assert.Equal("decimal(18,0)", columns.Single(c => c.Name == "numericColumn").StoreType); + Assert.Equal("decimal(15,2)", columns.Single(c => c.Name == "numeric152Column").StoreType); + Assert.Equal("decimal(18,2)", columns.Single(c => c.Name == "numericDefaultColumn").StoreType); + Assert.Equal("decimal(28,5)", columns.Single(c => c.Name == "numericDefaultPrecisionColumn").StoreType); }, "DROP TABLE NumericColumns;"); diff --git a/test/EFCore.Jet.FunctionalTests/SequentialGuidEndToEndTest.cs b/test/EFCore.Jet.FunctionalTests/SequentialGuidEndToEndTest.cs index 86490bf5..7530bc83 100644 --- a/test/EFCore.Jet.FunctionalTests/SequentialGuidEndToEndTest.cs +++ b/test/EFCore.Jet.FunctionalTests/SequentialGuidEndToEndTest.cs @@ -10,11 +10,11 @@ using Microsoft.EntityFrameworkCore.TestUtilities; using Microsoft.Extensions.DependencyInjection; using Xunit; - +#nullable disable // ReSharper disable InconsistentNaming namespace EntityFrameworkCore.Jet.FunctionalTests { - public class SequentialGuidEndToEndTest : IDisposable + public class SequentialGuidEndToEndTest : IAsyncLifetime { [ConditionalFact] public async Task Can_use_sequential_GUID_end_to_end_async() @@ -87,23 +87,15 @@ public async Task Can_use_explicit_values() } } - private class BronieContext : DbContext + private class BronieContext(IServiceProvider serviceProvider, string databaseName) : DbContext { - private readonly IServiceProvider _serviceProvider; - private readonly string _databaseName; - - public BronieContext(IServiceProvider serviceProvider, string databaseName) - { - _serviceProvider = serviceProvider; - _databaseName = databaseName; - } - public DbSet Pegasuses { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => optionsBuilder - .UseJet(JetTestStore.CreateConnectionString(_databaseName), TestEnvironment.DataAccessProviderFactory, b => b.ApplyConfiguration()) - .UseInternalServiceProvider(_serviceProvider); + .UseJet(JetTestStore.CreateConnectionString(databaseName), + TestEnvironment.DataAccessProviderFactory, b => b.ApplyConfiguration()) + .UseInternalServiceProvider(serviceProvider); } private class Pegasus @@ -113,13 +105,15 @@ private class Pegasus public int Index { get; set; } } - public SequentialGuidEndToEndTest() - { - TestStore = JetTestStore.CreateInitialized("SequentialGuidEndToEndTest"); - } + protected JetTestStore TestStore { get; private set; } - protected JetTestStore TestStore { get; } + public async Task InitializeAsync() + => TestStore = await JetTestStore.CreateInitializedAsync("SequentialGuidEndToEndTest"); - public virtual void Dispose() => TestStore.Dispose(); + public Task DisposeAsync() + { + TestStore.Dispose(); + return Task.CompletedTask; + } } } diff --git a/test/EFCore.Jet.FunctionalTests/StoreGeneratedFixupJetTest.cs b/test/EFCore.Jet.FunctionalTests/StoreGeneratedFixupJetTest.cs index 1771e8e7..28a3351c 100644 --- a/test/EFCore.Jet.FunctionalTests/StoreGeneratedFixupJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/StoreGeneratedFixupJetTest.cs @@ -1,5 +1,6 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +using System.Threading.Tasks; using EntityFrameworkCore.Jet.FunctionalTests.TestUtilities; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; @@ -10,19 +11,14 @@ // ReSharper disable InconsistentNaming namespace EntityFrameworkCore.Jet.FunctionalTests { - public class StoreGeneratedFixupJetTest : StoreGeneratedFixupRelationalTestBase< - StoreGeneratedFixupJetTest.StoreGeneratedFixupJetFixture> + public class StoreGeneratedFixupJetTest(StoreGeneratedFixupJetTest.StoreGeneratedFixupJetFixture fixture) + : StoreGeneratedFixupRelationalTestBase< + StoreGeneratedFixupJetTest.StoreGeneratedFixupJetFixture>(fixture) { - public StoreGeneratedFixupJetTest(StoreGeneratedFixupJetFixture fixture) - : base(fixture) - { - } - [ConditionalFact] - public void Temp_values_are_replaced_on_save() - { - ExecuteWithStrategyInTransaction( - context => + public Task Temp_values_are_replaced_on_save() + => ExecuteWithStrategyInTransactionAsync( + async context => { var entry = context.Add(new TestTemp()); @@ -31,12 +27,11 @@ public void Temp_values_are_replaced_on_save() var tempValue = entry.Property(e => e.Id).CurrentValue; - context.SaveChanges(); + await context.SaveChangesAsync(); Assert.False(entry.Property(e => e.Id).IsTemporary); Assert.NotEqual(tempValue, entry.Property(e => e.Id).CurrentValue); }); - } protected override void MarkIdsTemporary(DbContext context, object dependent, object principal) { diff --git a/test/EFCore.Jet.FunctionalTests/StoreGeneratedSqlServerTestBase.cs b/test/EFCore.Jet.FunctionalTests/StoreGeneratedSqlServerTestBase.cs index 4b8cbd6a..ced2fd51 100644 --- a/test/EFCore.Jet.FunctionalTests/StoreGeneratedSqlServerTestBase.cs +++ b/test/EFCore.Jet.FunctionalTests/StoreGeneratedSqlServerTestBase.cs @@ -1,10 +1,10 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. -#nullable enable using System.Collections.Generic; using System.ComponentModel.DataAnnotations.Schema; using System.Linq; +using System.Threading.Tasks; using EntityFrameworkCore.Jet.FunctionalTests.TestUtilities; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.ChangeTracking; @@ -311,11 +311,11 @@ protected class LongToDecimalDependentOptional } [ConditionalFact] - public virtual void Insert_update_and_delete_with_long_to_decimal_conversion() + public virtual Task Insert_update_and_delete_with_long_to_decimal_conversion() { var id1 = 0L; - ExecuteWithStrategyInTransaction( - context => + return ExecuteWithStrategyInTransactionAsync( + async context => { var principal1 = context.Add( new LongToDecimalPrincipal @@ -326,7 +326,7 @@ public virtual void Insert_update_and_delete_with_long_to_decimal_conversion() RequiredDependents = { new LongToDecimalDependentRequired(), new LongToDecimalDependentRequired() } }).Entity; - context.SaveChanges(); + await context.SaveChangesAsync(); id1 = principal1.Id; Assert.NotEqual(0L, id1); @@ -350,14 +350,13 @@ public virtual void Insert_update_and_delete_with_long_to_decimal_conversion() Assert.Same(principal1, dependent.Principal); Assert.Equal(id1, dependent.PrincipalId); } - }, - context => + }, async context => { - var principal1 = context.Set() + var principal1 = await context.Set() .Include(e => e.Dependents) .Include(e => e.OptionalDependents) .Include(e => e.RequiredDependents) - .Single(); + .SingleAsync(); Assert.Equal(principal1.Id, id1); foreach (var dependent in principal1.Dependents) @@ -382,21 +381,20 @@ public virtual void Insert_update_and_delete_with_long_to_decimal_conversion() principal1.OptionalDependents.Remove(principal1.OptionalDependents.First()); principal1.RequiredDependents.Remove(principal1.RequiredDependents.First()); - context.SaveChanges(); - }, - context => + await context.SaveChangesAsync(); + }, async context => { - var dependents1 = context.Set().Include(e => e.Principal).ToList(); + var dependents1 = await context.Set().Include(e => e.Principal).ToListAsync(); Assert.Equal(2, dependents1.Count); Assert.Null( context.Entry(dependents1.Single(e => e.Principal == null)) .Property("PrincipalId").CurrentValue); - var optionalDependents1 = context.Set().Include(e => e.Principal).ToList(); + var optionalDependents1 = await context.Set().Include(e => e.Principal).ToListAsync(); Assert.Equal(2, optionalDependents1.Count); Assert.Null(optionalDependents1.Single(e => e.Principal == null).PrincipalId); - var requiredDependents1 = context.Set().Include(e => e.Principal).ToList(); + var requiredDependents1 = await context.Set().Include(e => e.Principal).ToListAsync(); Assert.Single(requiredDependents1); context.Remove(dependents1.Single(e => e.Principal != null)); @@ -404,13 +402,12 @@ public virtual void Insert_update_and_delete_with_long_to_decimal_conversion() context.Remove(requiredDependents1.Single()); context.Remove(requiredDependents1.Single().Principal); - context.SaveChanges(); - }, - context => + await context.SaveChangesAsync(); + }, async context => { - Assert.Equal(1, context.Set().Count()); - Assert.Equal(1, context.Set().Count()); - Assert.Equal(0, context.Set().Count()); + Assert.Equal(1, await context.Set().CountAsync()); + Assert.Equal(1, await context.Set().CountAsync()); + Assert.Equal(0, await context.Set().CountAsync()); }); } @@ -418,7 +415,7 @@ protected override void UseTransaction(DatabaseFacade facade, IDbContextTransact => facade.UseTransaction(transaction.GetDbTransaction()); [ConditionalFact] - public virtual void Exception_in_SaveChanges_causes_store_values_to_be_reverted() + public virtual async Task Exception_in_SaveChanges_causes_store_values_to_be_reverted() { var entities = new List(); for (var i = 0; i < 100; i++) @@ -454,8 +451,8 @@ public virtual void Exception_in_SaveChanges_causes_store_values_to_be_reverted( for (var i = 0; i < 2; i++) { - ExecuteWithStrategyInTransaction( - context => + await ExecuteWithStrategyInTransactionAsync( + async context => { context.AddRange(entities); @@ -487,7 +484,7 @@ public virtual void Exception_in_SaveChanges_causes_store_values_to_be_reverted( // inner exception for details. // SqlException : Cannot insert explicit value for identity column in table // 'Blog' when IDENTITY_INSERT is set to OFF. - var updateException = Assert.Throws(() => context.SaveChanges()); + var updateException = await Assert.ThrowsAsync(() => context.SaveChangesAsync()); Assert.Single(updateException.Entries); foreach (var entity in entities.Take(100)) diff --git a/test/EFCore.Jet.FunctionalTests/TPTTableSplittingJetTest.cs b/test/EFCore.Jet.FunctionalTests/TPTTableSplittingJetTest.cs index 32a18d35..c3a2a556 100644 --- a/test/EFCore.Jet.FunctionalTests/TPTTableSplittingJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/TPTTableSplittingJetTest.cs @@ -153,25 +153,25 @@ public override async Task Can_change_dependent_instance_non_derived() { await base.Can_change_dependent_instance_non_derived(); AssertSql( -$""" + $""" @p0='Trek Pro Fit Madone 6 Series' (Nullable = false) (Size = 255) @p1='Repair' (Size = 255) INSERT INTO `LicensedOperators` (`VehicleName`, `LicenseType`) VALUES ({AssertSqlHelper.Parameter("@p0")}, {AssertSqlHelper.Parameter("@p1")}); -""" -, -$""" +""", + // + $""" @p0='repairman' (Size = 255) @p1='Trek Pro Fit Madone 6 Series' (Nullable = false) (Size = 255) UPDATE `Vehicles` SET `Operator_Name` = {AssertSqlHelper.Parameter("@p0")} WHERE `Name` = {AssertSqlHelper.Parameter("@p1")}; SELECT @@ROWCOUNT; -""" -, -""" -SELECT TOP 2 `v`.`Name`, `v`.`SeatingCapacity`, `c`.`AttachedVehicleName`, IIF(`c`.`Name` IS NOT NULL, 'CompositeVehicle', IIF(`p`.`Name` IS NOT NULL, 'PoweredVehicle', NULL)) AS `Discriminator`, `t`.`Name`, `t`.`Operator_Name`, `t`.`LicenseType`, `t`.`Discriminator` +""", + // + """ +SELECT TOP 2 `v`.`Name`, `v`.`SeatingCapacity`, `c`.`AttachedVehicleName`, IIF(`c`.`Name` IS NOT NULL, 'CompositeVehicle', IIF(`p`.`Name` IS NOT NULL, 'PoweredVehicle', NULL)) AS `Discriminator`, `s`.`Name`, `s`.`Operator_Name`, `s`.`LicenseType`, `s`.`Discriminator` FROM ((`Vehicles` AS `v` LEFT JOIN `PoweredVehicles` AS `p` ON `v`.`Name` = `p`.`Name`) LEFT JOIN `CompositeVehicles` AS `c` ON `v`.`Name` = `c`.`Name`) @@ -179,7 +179,7 @@ LEFT JOIN ( SELECT `v0`.`Name`, `v0`.`Operator_Name`, `l`.`LicenseType`, IIF(`l`.`VehicleName` IS NOT NULL, 'LicensedOperator', NULL) AS `Discriminator` FROM `Vehicles` AS `v0` LEFT JOIN `LicensedOperators` AS `l` ON `v0`.`Name` = `l`.`VehicleName` -) AS `t` ON `v`.`Name` = `t`.`Name` +) AS `s` ON `v`.`Name` = `s`.`Name` WHERE `v`.`Name` = 'Trek Pro Fit Madone 6 Series' """); } @@ -189,17 +189,17 @@ public override async Task Can_change_principal_instance_non_derived() await base.Can_change_principal_instance_non_derived(); AssertSql( -$""" + $""" @p0='2' @p1='Trek Pro Fit Madone 6 Series' (Nullable = false) (Size = 255) UPDATE `Vehicles` SET `SeatingCapacity` = {AssertSqlHelper.Parameter("@p0")} WHERE `Name` = {AssertSqlHelper.Parameter("@p1")}; SELECT @@ROWCOUNT; -""" -, -""" -SELECT TOP 2 `v`.`Name`, `v`.`SeatingCapacity`, `c`.`AttachedVehicleName`, IIF(`c`.`Name` IS NOT NULL, 'CompositeVehicle', IIF(`p`.`Name` IS NOT NULL, 'PoweredVehicle', NULL)) AS `Discriminator`, `t`.`Name`, `t`.`Operator_Name`, `t`.`LicenseType`, `t`.`Discriminator` +""", + // + """ +SELECT TOP 2 `v`.`Name`, `v`.`SeatingCapacity`, `c`.`AttachedVehicleName`, IIF(`c`.`Name` IS NOT NULL, 'CompositeVehicle', IIF(`p`.`Name` IS NOT NULL, 'PoweredVehicle', NULL)) AS `Discriminator`, `s`.`Name`, `s`.`Operator_Name`, `s`.`LicenseType`, `s`.`Discriminator` FROM ((`Vehicles` AS `v` LEFT JOIN `PoweredVehicles` AS `p` ON `v`.`Name` = `p`.`Name`) LEFT JOIN `CompositeVehicles` AS `c` ON `v`.`Name` = `c`.`Name`) @@ -207,7 +207,7 @@ LEFT JOIN ( SELECT `v0`.`Name`, `v0`.`Operator_Name`, `l`.`LicenseType`, IIF(`l`.`VehicleName` IS NOT NULL, 'LicensedOperator', NULL) AS `Discriminator` FROM `Vehicles` AS `v0` LEFT JOIN `LicensedOperators` AS `l` ON `v0`.`Name` = `l`.`VehicleName` -) AS `t` ON `v`.`Name` = `t`.`Name` +) AS `s` ON `v`.`Name` = `s`.`Name` WHERE `v`.`Name` = 'Trek Pro Fit Madone 6 Series' """); } diff --git a/test/EFCore.Jet.FunctionalTests/TableSplittingJetTest.cs b/test/EFCore.Jet.FunctionalTests/TableSplittingJetTest.cs index 41bc6e99..30167e2d 100644 --- a/test/EFCore.Jet.FunctionalTests/TableSplittingJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/TableSplittingJetTest.cs @@ -24,25 +24,25 @@ public override async Task Can_use_with_redundant_relationships() // TODO: `Name` shouldn't be selected multiple times and no joins are needed AssertSql( -""" -SELECT `v`.`Name`, `v`.`Discriminator`, `v`.`SeatingCapacity`, `v`.`AttachedVehicleName`, `v0`.`Name`, `v0`.`Operator_Discriminator`, `v0`.`Operator_Name`, `v0`.`LicenseType`, `t`.`Name`, `t`.`Active`, `t`.`Type`, `t0`.`Name`, `t0`.`Computed`, `t0`.`Description`, `t0`.`Engine_Discriminator`, `t1`.`Name`, `t1`.`Capacity`, `t1`.`FuelTank_Discriminator`, `t1`.`FuelType`, `t1`.`GrainGeometry` + """ +SELECT `v`.`Name`, `v`.`Discriminator`, `v`.`SeatingCapacity`, `v`.`AttachedVehicleName`, `v0`.`Name`, `v0`.`Operator_Discriminator`, `v0`.`Operator_Name`, `v0`.`LicenseType`, `v2`.`Name`, `v2`.`Active`, `v2`.`Type`, `v4`.`Name`, `v4`.`Computed`, `v4`.`Description`, `v4`.`Engine_Discriminator`, `v6`.`Name`, `v6`.`Capacity`, `v6`.`FuelTank_Discriminator`, `v6`.`FuelType`, `v6`.`GrainGeometry` FROM (((`Vehicles` AS `v` LEFT JOIN `Vehicles` AS `v0` ON `v`.`Name` = `v0`.`Name`) LEFT JOIN ( SELECT `v1`.`Name`, `v1`.`Active`, `v1`.`Type` FROM `Vehicles` AS `v1` WHERE `v1`.`Active` IS NOT NULL -) AS `t` ON `v0`.`Name` = IIF(`t`.`Active` IS NOT NULL, `t`.`Name`, NULL)) -LEFT JOIN ( - SELECT `v2`.`Name`, `v2`.`Computed`, `v2`.`Description`, `v2`.`Engine_Discriminator` - FROM `Vehicles` AS `v2` - WHERE `v2`.`Computed` IS NOT NULL AND `v2`.`Engine_Discriminator` IS NOT NULL -) AS `t0` ON `v`.`Name` = `t0`.`Name`) +) AS `v2` ON `v0`.`Name` = IIF(`v2`.`Active` IS NOT NULL, `v2`.`Name`, NULL)) LEFT JOIN ( - SELECT `v3`.`Name`, `v3`.`Capacity`, `v3`.`FuelTank_Discriminator`, `v3`.`FuelType`, `v3`.`GrainGeometry` + SELECT `v3`.`Name`, `v3`.`Computed`, `v3`.`Description`, `v3`.`Engine_Discriminator` FROM `Vehicles` AS `v3` - WHERE `v3`.`Capacity` IS NOT NULL AND `v3`.`FuelTank_Discriminator` IS NOT NULL -) AS `t1` ON `t0`.`Name` = `t1`.`Name` + WHERE `v3`.`Computed` IS NOT NULL AND `v3`.`Engine_Discriminator` IS NOT NULL +) AS `v4` ON `v`.`Name` = `v4`.`Name`) +LEFT JOIN ( + SELECT `v5`.`Name`, `v5`.`Capacity`, `v5`.`FuelTank_Discriminator`, `v5`.`FuelType`, `v5`.`GrainGeometry` + FROM `Vehicles` AS `v5` + WHERE `v5`.`Capacity` IS NOT NULL AND `v5`.`FuelTank_Discriminator` IS NOT NULL +) AS `v6` ON `v4`.`Name` = `v6`.`Name` ORDER BY `v`.`Name` """); } @@ -167,15 +167,15 @@ public override async Task Optional_dependent_materialized_when_no_properties() await base.Optional_dependent_materialized_when_no_properties(); AssertSql( -""" -SELECT TOP 1 `v`.`Name`, `v`.`Discriminator`, `v`.`SeatingCapacity`, `v`.`AttachedVehicleName`, `v0`.`Name`, `v0`.`Operator_Discriminator`, `v0`.`Operator_Name`, `v0`.`LicenseType`, `t`.`Name`, `t`.`Active`, `t`.`Type` + """ +SELECT TOP 1 `v`.`Name`, `v`.`Discriminator`, `v`.`SeatingCapacity`, `v`.`AttachedVehicleName`, `v0`.`Name`, `v0`.`Operator_Discriminator`, `v0`.`Operator_Name`, `v0`.`LicenseType`, `v2`.`Name`, `v2`.`Active`, `v2`.`Type` FROM (`Vehicles` AS `v` LEFT JOIN `Vehicles` AS `v0` ON `v`.`Name` = `v0`.`Name`) LEFT JOIN ( SELECT `v1`.`Name`, `v1`.`Active`, `v1`.`Type` FROM `Vehicles` AS `v1` WHERE `v1`.`Active` IS NOT NULL -) AS `t` ON `v0`.`Name` = IIF(`t`.`Active` IS NOT NULL, `t`.`Name`, NULL) +) AS `v2` ON `v0`.`Name` = IIF(`v2`.`Active` IS NOT NULL, `v2`.`Name`, NULL) WHERE `v`.`Name` = 'AIM-9M Sidewinder' ORDER BY `v`.`Name` """); diff --git a/test/EFCore.Jet.FunctionalTests/TestUtilities/JetAdventureWorksTestStoreFactory.cs b/test/EFCore.Jet.FunctionalTests/TestUtilities/JetAdventureWorksTestStoreFactory.cs index fe9fc506..b6d217b2 100644 --- a/test/EFCore.Jet.FunctionalTests/TestUtilities/JetAdventureWorksTestStoreFactory.cs +++ b/test/EFCore.Jet.FunctionalTests/TestUtilities/JetAdventureWorksTestStoreFactory.cs @@ -7,14 +7,14 @@ namespace EntityFrameworkCore.Jet.FunctionalTests.TestUtilities { public class JetAdventureWorksTestStoreFactory : JetTestStoreFactory { - public static new JetAdventureWorksTestStoreFactory Instance { get; } = new JetAdventureWorksTestStoreFactory(); + public new static JetAdventureWorksTestStoreFactory Instance { get; } = new(); protected JetAdventureWorksTestStoreFactory() { } public override TestStore GetOrCreate(string storeName) - => JetTestStore.GetOrCreate( + => JetTestStore.GetOrCreateWithScriptPath( "adventureworks", Path.Combine("SqlAzure", "adventureworks.sql")); } diff --git a/test/EFCore.Jet.FunctionalTests/TestUtilities/JetNorthwindTestStoreFactory.cs b/test/EFCore.Jet.FunctionalTests/TestUtilities/JetNorthwindTestStoreFactory.cs index 145bafb1..d583236a 100644 --- a/test/EFCore.Jet.FunctionalTests/TestUtilities/JetNorthwindTestStoreFactory.cs +++ b/test/EFCore.Jet.FunctionalTests/TestUtilities/JetNorthwindTestStoreFactory.cs @@ -15,6 +15,6 @@ protected JetNorthwindTestStoreFactory() } public override TestStore GetOrCreate(string storeName) - => JetTestStore.GetOrCreate(Name, scriptPath: "Northwind.sql"/*, templatePath: "Northwind.accdb"*/); + => JetTestStore.GetOrCreateWithScriptPath(Name, scriptPath: "Northwind.sql"/*, templatePath: "Northwind.accdb"*/); } } diff --git a/test/EFCore.Jet.FunctionalTests/TestUtilities/JetPrecompiledQueryTestHelpers.cs b/test/EFCore.Jet.FunctionalTests/TestUtilities/JetPrecompiledQueryTestHelpers.cs new file mode 100644 index 00000000..b34a0f56 --- /dev/null +++ b/test/EFCore.Jet.FunctionalTests/TestUtilities/JetPrecompiledQueryTestHelpers.cs @@ -0,0 +1,21 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Collections.Generic; +using System.Reflection; +using EntityFrameworkCore.Jet.Infrastructure.Internal; +using Microsoft.CodeAnalysis; +using Microsoft.EntityFrameworkCore.TestUtilities; + +namespace EntityFrameworkCore.Jet.FunctionalTests.TestUtilities; + +public class JetPrecompiledQueryTestHelpers : PrecompiledQueryTestHelpers +{ + public static JetPrecompiledQueryTestHelpers Instance = new(); + + protected override IEnumerable BuildProviderMetadataReferences() + { + yield return MetadataReference.CreateFromFile(typeof(JetOptionsExtension).Assembly.Location); + yield return MetadataReference.CreateFromFile(Assembly.GetExecutingAssembly().Location); + } +} diff --git a/test/EFCore.Jet.FunctionalTests/TestUtilities/JetTestStore.cs b/test/EFCore.Jet.FunctionalTests/TestUtilities/JetTestStore.cs index 772802ca..966c98a1 100644 --- a/test/EFCore.Jet.FunctionalTests/TestUtilities/JetTestStore.cs +++ b/test/EFCore.Jet.FunctionalTests/TestUtilities/JetTestStore.cs @@ -9,9 +9,11 @@ using System.Linq; using System.Reflection; using System.Text.RegularExpressions; +using System.Threading; using System.Threading.Tasks; using EntityFrameworkCore.Jet.Data; using EntityFrameworkCore.Jet.Infrastructure.Internal; +using Microsoft.CodeAnalysis.Differencing; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.TestUtilities; @@ -23,100 +25,107 @@ public class JetTestStore : RelationalTestStore { public const int CommandTimeout = 300; - public static JetTestStore GetNorthwindStore() - => (JetTestStore)JetNorthwindTestStoreFactory.Instance - .GetOrCreate(JetNorthwindTestStoreFactory.Name) - .Initialize(null, (Func)null); + private static string CurrentDirectory + => Environment.CurrentDirectory; - public static JetTestStore GetOrCreate(string name, string scriptPath = null, string templatePath = null) - => new JetTestStore(name, scriptPath: scriptPath, templatePath: templatePath); + public static async Task GetNorthwindStoreAsync() + => (JetTestStore)await JetNorthwindTestStoreFactory.Instance + .GetOrCreate(JetNorthwindTestStoreFactory.Name).InitializeAsync(null, (Func?)null); - public static JetTestStore GetOrCreateInitialized(string name) - => new JetTestStore(name).InitializeJet(null, (Func)null, null); + public static JetTestStore GetOrCreate(string name) + => new(name); + + public static async Task GetOrCreateInitializedAsync(string name) + => await new JetTestStore(name).InitializeJetAsync(null, (Func?)null, null); + + public static JetTestStore GetOrCreateWithInitScript(string name, string initScript) + => new(name, initScript: initScript); + + public static JetTestStore GetOrCreateWithScriptPath( + string name, + string scriptPath, + bool shared = true) + => new(name, scriptPath: scriptPath, shared: shared); public static JetTestStore Create(string name) - => new JetTestStore(name, shared: false); + => new(name, shared: false); - public static JetTestStore CreateInitialized(string name) - => new JetTestStore(name, shared: false) - .InitializeJet(null, (Func)null, null); + public static async Task CreateInitializedAsync( + string name, + bool? multipleActiveResultSets = null) + => await new JetTestStore(name, shared: false) + .InitializeJetAsync(null, (Func?)null, null); - private readonly string _scriptPath; - private readonly string _templatePath; + private readonly string? _initScript; + private readonly string? _scriptPath; private JetTestStore( string name, - string scriptPath = null, - string templatePath = null, + string? initScript = null, + string? scriptPath = null, bool shared = true) - : base(name + ".accdb", shared) + : base(name + ".accdb", shared, CreateConnection(name)) { - if (scriptPath != null) + if (initScript != null) { - _scriptPath = Path.Combine( - Path.GetDirectoryName( - typeof(JetTestStore).GetTypeInfo() - .Assembly.Location), scriptPath); + _initScript = initScript; } - if (templatePath != null) + if (scriptPath != null) { - _templatePath = Path.Combine( - Path.GetDirectoryName( - typeof(JetTestStore).GetTypeInfo() - .Assembly.Location), templatePath); + _scriptPath = Path.Combine(Path.GetDirectoryName(typeof(JetTestStore).Assembly.Location)!, scriptPath); } - - ConnectionString = CreateConnectionString(Name); - - var dataAccessProviderFactory = JetFactory.Instance.GetDataAccessProviderFactory(JetConnection.GetDataAccessProviderType(ConnectionString)); - var connection = (JetConnection)JetFactory.Instance.CreateConnection(); - connection.ConnectionString = ConnectionString; - connection.DataAccessProviderFactory = dataAccessProviderFactory; - - Connection = connection; } - public JetTestStore InitializeJet( - IServiceProvider serviceProvider, Func createContext, Action seed) - => (JetTestStore)Initialize(serviceProvider, createContext, seed); + public async Task InitializeJetAsync( + IServiceProvider? serviceProvider, + Func? createContext, + Func? seed) + => (JetTestStore)await InitializeAsync(serviceProvider, createContext, seed); - public JetTestStore InitializeJet( - IServiceProvider serviceProvider, Func createContext, Action seed) - => InitializeJet(serviceProvider, () => createContext(this), seed); + public async Task InitializeJetAsync( + IServiceProvider serviceProvider, + Func createContext, + Func seed) + => await InitializeJetAsync(serviceProvider, () => createContext(this), seed); - protected override void Initialize(Func createContext, Action seed, Action clean) + protected override async Task InitializeAsync(Func createContext, Func? seed, Func? clean) { if (CreateDatabase(clean)) { if (_scriptPath != null) { - ExecuteScript(_scriptPath); + ExecuteScript(await File.ReadAllTextAsync(_scriptPath)); } - else if (_templatePath == null) + else { - using (var context = createContext()) + using var context = createContext(); + await context.Database.EnsureCreatedResilientlyAsync(); + + if (_initScript != null) + { + ExecuteScript(_initScript); + } + + if (seed != null) { - context.Database.EnsureCreatedResiliently(); - seed?.Invoke(context); + await seed(context); } } } } public override DbContextOptionsBuilder AddProviderOptions(DbContextOptionsBuilder builder) - => builder.UseJet(Connection, b => b.ApplyConfiguration().UseShortTextForSystemString()).EnableSensitiveDataLogging().EnableDetailedErrors(); + => builder.UseJet(Connection, b => b.ApplyConfiguration().UseShortTextForSystemString()).EnableSensitiveDataLogging(); - private bool CreateDatabase(Action clean) + private bool CreateDatabase(Func? clean) { var connectionString = CreateConnectionString(Name); if (JetConnection.DatabaseExists(connectionString)) { // Only reseed scripted databases during CI runs - if (_scriptPath != null && - _templatePath == null && - !TestEnvironment.IsCI) + if (_scriptPath != null && !TestEnvironment.IsCI) { //return false; } @@ -125,40 +134,64 @@ private bool CreateDatabase(Action clean) DeleteDatabase(); } - if (_templatePath != null) - { - File.Copy(_templatePath, Name); - } - else - { - JetConnection.CreateDatabase(connectionString); - } - + JetConnection.CreateDatabase(connectionString); + //WaitForExists((JetConnection)Connection); return true; } - public override void Clean(DbContext context) - => context.Database.EnsureClean(); + public override Task CleanAsync(DbContext context) + { + context.Database.EnsureClean(); + return Task.CompletedTask; + } - public void ExecuteScript(string scriptPath) + public void ExecuteScript(string script) + => Execute( + Connection, command => + { + foreach (var batch in + new Regex(@"\s*;\s*$", RegexOptions.IgnoreCase | RegexOptions.Multiline, TimeSpan.FromMilliseconds(1000.0)) + .Split(script).Where(b => !string.IsNullOrEmpty(b))) + { + command.CommandText = batch; + command.ExecuteNonQuery(); + } + + return 0; + }, ""); + + private static void WaitForExists(JetConnection connection) + => new TestJetRetryingExecutionStrategy().Execute(connection, WaitForExistsImplementation); + + private static void WaitForExistsImplementation(JetConnection connection) { - var script = File.ReadAllText(scriptPath); - var batches = new Regex(@"\s*;\s*$", RegexOptions.IgnoreCase | RegexOptions.Multiline, TimeSpan.FromMilliseconds(1000.0)) - .Split(script) - .Where(b => !string.IsNullOrEmpty(b)) - .ToList(); - - Execute( - Connection, command => + var retryCount = 0; + while (true) { - foreach (var batch in batches) + try { - command.CommandText = batch; - command.ExecuteNonQuery(); + if (connection.State != ConnectionState.Closed) + { + connection.Close(); + } + + JetConnection.ClearPool(connection); + + connection.Open(); + connection.Close(); + return; } + catch (Exception /*e*/) + { + if (++retryCount >= 30 + /*|| e.Number != 233 && e.Number != -2 && e.Number != 4060 && e.Number != 1832 && e.Number != 5120*/) + { + throw; + } - return 0; - }, ""); + Thread.Sleep(100); + } + } } public void DeleteDatabase() @@ -180,49 +213,47 @@ public T ExecuteScalar(string sql, params object[] parameters) => ExecuteScalar(Connection, sql, parameters); private static T ExecuteScalar(DbConnection connection, string sql, params object[] parameters) - => Execute(connection, command => (T)command.ExecuteScalar(), sql, false, parameters); + => Execute(connection, command => (T)command.ExecuteScalar()!, sql, false, parameters); public Task ExecuteScalarAsync(string sql, params object[] parameters) => ExecuteScalarAsync(Connection, sql, parameters); - private static Task ExecuteScalarAsync(DbConnection connection, string sql, IReadOnlyList parameters = null) - => ExecuteAsync(connection, async command => (T)await command.ExecuteScalarAsync(), sql, false, parameters); + private static Task ExecuteScalarAsync(DbConnection connection, string sql, IReadOnlyList? parameters = null) + => ExecuteAsync(connection, async command => (T)(await command.ExecuteScalarAsync())!, sql, false, parameters); public int ExecuteNonQuery(string sql, params object[] parameters) => ExecuteNonQuery(Connection, sql, parameters); - private static int ExecuteNonQuery(DbConnection connection, string sql, object[] parameters = null) + private static int ExecuteNonQuery(DbConnection connection, string sql, object[]? parameters = null) => Execute(connection, command => command.ExecuteNonQuery(), sql, false, parameters); public Task ExecuteNonQueryAsync(string sql, params object[] parameters) => ExecuteNonQueryAsync(Connection, sql, parameters); - private static Task ExecuteNonQueryAsync(DbConnection connection, string sql, IReadOnlyList parameters = null) + private static Task ExecuteNonQueryAsync(DbConnection connection, string sql, IReadOnlyList? parameters = null) => ExecuteAsync(connection, command => command.ExecuteNonQueryAsync(), sql, false, parameters); public IEnumerable Query(string sql, params object[] parameters) => Query(Connection, sql, parameters); - private static IEnumerable Query(DbConnection connection, string sql, object[] parameters = null) + private static IEnumerable Query(DbConnection connection, string sql, object[]? parameters = null) => Execute( connection, command => { - using (var dataReader = command.ExecuteReader()) + using var dataReader = command.ExecuteReader(); + var results = Enumerable.Empty(); + while (dataReader.Read()) { - var results = Enumerable.Empty(); - while (dataReader.Read()) - { - results = results.Concat(new[] { dataReader.GetFieldValue(0) }); - } - - return results; + results = results.Concat(new[] { dataReader.GetFieldValue(0) }); } + + return results; }, sql, false, parameters); public Task> QueryAsync(string sql, params object[] parameters) => QueryAsync(Connection, sql, parameters); - private static Task> QueryAsync(DbConnection connection, string sql, object[] parameters = null) + private static Task> QueryAsync(DbConnection connection, string sql, object[]? parameters = null) => ExecuteAsync( connection, async command => { @@ -240,7 +271,7 @@ private static Task> QueryAsync(DbConnection connection, strin private static T Execute( DbConnection connection, Func execute, string sql, - bool useTransaction = false, object[] parameters = null) + bool useTransaction = false, object[]? parameters = null) => new TestJetRetryingExecutionStrategy().Execute( new { @@ -253,7 +284,7 @@ private static T Execute( state => ExecuteCommand(state.connection, state.execute, state.sql, state.useTransaction, state.parameters)); private static T ExecuteCommand( - DbConnection connection, Func execute, string sql, bool useTransaction, object[] parameters) + DbConnection connection, Func execute, string sql, bool useTransaction, object[]? parameters) { if (connection.State != ConnectionState.Closed) { @@ -263,21 +294,17 @@ private static T ExecuteCommand( connection.Open(); try { - using (var transaction = useTransaction - ? connection.BeginTransaction() - : null) + using var transaction = useTransaction ? connection.BeginTransaction() : null; + T result; + using (var command = CreateCommand(connection, sql, parameters)) { - T result; - using (var command = CreateCommand(connection, sql, parameters)) - { - command.Transaction = transaction; - result = execute(command); - } + command.Transaction = transaction; + result = execute(command); + } - transaction?.Commit(); + transaction?.Commit(); - return result; - } + return result; } finally { @@ -290,7 +317,7 @@ private static T ExecuteCommand( private static Task ExecuteAsync( DbConnection connection, Func> executeAsync, string sql, - bool useTransaction = false, IReadOnlyList parameters = null) + bool useTransaction = false, IReadOnlyList? parameters = null) => new TestJetRetryingExecutionStrategy().ExecuteAsync( new { @@ -304,7 +331,7 @@ private static Task ExecuteAsync( private static async Task ExecuteCommandAsync( DbConnection connection, Func> executeAsync, string sql, bool useTransaction, - IReadOnlyList parameters) + IReadOnlyList? parameters) { if (connection.State != ConnectionState.Closed) { @@ -314,23 +341,19 @@ private static async Task ExecuteCommandAsync( await connection.OpenAsync(); try { - using (var transaction = useTransaction - ? await connection.BeginTransactionAsync() - : null) + using var transaction = useTransaction ? await connection.BeginTransactionAsync() : null; + T result; + using (var command = CreateCommand(connection, sql, parameters)) { - T result; - using (var command = CreateCommand(connection, sql, parameters)) - { - result = await executeAsync(command); - } - - if (transaction != null) - { - await transaction.CommitAsync(); - } + result = await executeAsync(command); + } - return result; + if (transaction != null) + { + await transaction.CommitAsync(); } + + return result; } finally { @@ -342,7 +365,7 @@ private static async Task ExecuteCommandAsync( } private static DbCommand CreateCommand( - DbConnection connection, string commandText = null, IReadOnlyList parameters = null) + DbConnection connection, string commandText, IReadOnlyList? parameters = null) { var command = (JetCommand)connection.CreateCommand(); @@ -374,13 +397,19 @@ public override void Dispose() // DeleteDatabase(); } + private static JetConnection CreateConnection(string name) + { + var connectionString = CreateConnectionString(name); + return new JetConnection(connectionString); + } + public static string CreateConnectionString(string name) { var defaultConnectionString = TestEnvironment.DefaultConnection; var dataAccessProviderFactory = JetFactory.Instance.GetDataAccessProviderFactory(JetConnection.GetDataAccessProviderType(defaultConnectionString)); var connectionStringBuilder = dataAccessProviderFactory.CreateConnectionStringBuilder(); - connectionStringBuilder.ConnectionString = defaultConnectionString; + connectionStringBuilder!.ConnectionString = defaultConnectionString; connectionStringBuilder.SetDataSource(name); return connectionStringBuilder.ToString(); diff --git a/test/EFCore.Jet.FunctionalTests/TestUtilities/SqlExceptionFactory.cs b/test/EFCore.Jet.FunctionalTests/TestUtilities/SqlExceptionFactory.cs index 56fec6a0..5edf7c71 100644 --- a/test/EFCore.Jet.FunctionalTests/TestUtilities/SqlExceptionFactory.cs +++ b/test/EFCore.Jet.FunctionalTests/TestUtilities/SqlExceptionFactory.cs @@ -17,7 +17,7 @@ public static OleDbException CreateException(int number, Guid? connectionId = nu .DeclaredConstructors; return (OleDbException)exceptionCtors.First(c => c.GetParameters().Length == 3) - .Invoke(new object[] { "Bang!", number, null }); + .Invoke(["Bang!", number, null]); } } @@ -30,7 +30,7 @@ public static OdbcException CreateException(int number, Guid? connectionId = nul .DeclaredConstructors; return (OdbcException)exceptionCtors.First(c => c.GetParameters().Length == 3) - .Invoke(new object[] { "Bang!", number, null }); + .Invoke(["Bang!", number, null]); } } } diff --git a/test/EFCore.Jet.FunctionalTests/TestUtilities/TestEnvironment.cs b/test/EFCore.Jet.FunctionalTests/TestUtilities/TestEnvironment.cs index bb6950a3..8417606b 100644 --- a/test/EFCore.Jet.FunctionalTests/TestUtilities/TestEnvironment.cs +++ b/test/EFCore.Jet.FunctionalTests/TestUtilities/TestEnvironment.cs @@ -28,7 +28,7 @@ public static bool IsConfigured { var dataAccessProviderType = JetConnection.GetDataAccessProviderType(DefaultConnection); var dataAccessProviderFactory = JetFactory.Instance.GetDataAccessProviderFactory(dataAccessProviderType); - var connectionStringBuilder = dataAccessProviderFactory.CreateConnectionStringBuilder(); + var connectionStringBuilder = dataAccessProviderFactory.CreateConnectionStringBuilder()!; connectionStringBuilder.ConnectionString = DefaultConnection; return !string.IsNullOrEmpty(connectionStringBuilder.GetDataSource()); diff --git a/test/EFCore.Jet.FunctionalTests/TestUtilities/TestRelationalCommandBuilderFactory.cs b/test/EFCore.Jet.FunctionalTests/TestUtilities/TestRelationalCommandBuilderFactory.cs index 42a6340d..8cda4539 100644 --- a/test/EFCore.Jet.FunctionalTests/TestUtilities/TestRelationalCommandBuilderFactory.cs +++ b/test/EFCore.Jet.FunctionalTests/TestUtilities/TestRelationalCommandBuilderFactory.cs @@ -149,7 +149,7 @@ public Task ExecuteNonQueryAsync( return result; } - public object ExecuteScalar(RelationalCommandParameterObject parameterObject) + public object? ExecuteScalar(RelationalCommandParameterObject parameterObject) { var connection = parameterObject.Connection; var errorNumber = PreExecution(connection); @@ -164,7 +164,7 @@ public object ExecuteScalar(RelationalCommandParameterObject parameterObject) return result; } - public async Task ExecuteScalarAsync( + public async Task ExecuteScalarAsync( RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken = new CancellationToken()) { diff --git a/test/EFCore.Jet.FunctionalTests/TransactionJetTest.cs b/test/EFCore.Jet.FunctionalTests/TransactionJetTest.cs index bd30deac..62c36518 100644 --- a/test/EFCore.Jet.FunctionalTests/TransactionJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/TransactionJetTest.cs @@ -30,7 +30,7 @@ protected override DbContext CreateContextWithConnectionString() TestStore.ConnectionString, TestEnvironment.DataAccessProviderFactory, b => b.ApplyConfiguration().UseShortTextForSystemString().ExecutionStrategy(c => new JetExecutionStrategy(c)))) - .UseInternalServiceProvider(Fixture.ServiceProvider).EnableDetailedErrors(); + .UseInternalServiceProvider(Fixture.ServiceProvider); return new DbContext(options.Options); } diff --git a/test/EFCore.Jet.FunctionalTests/TwoDatabasesJetTest.cs b/test/EFCore.Jet.FunctionalTests/TwoDatabasesJetTest.cs index d30f9c41..6357d9a3 100644 --- a/test/EFCore.Jet.FunctionalTests/TwoDatabasesJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/TwoDatabasesJetTest.cs @@ -6,14 +6,9 @@ using Xunit; namespace EntityFrameworkCore.Jet.FunctionalTests; - -public class TwoDatabasesJetTest : TwoDatabasesTestBase, IClassFixture +#nullable disable +public class TwoDatabasesJetTest(JetFixture fixture) : TwoDatabasesTestBase(fixture), IClassFixture { - public TwoDatabasesJetTest(JetFixture fixture) - : base(fixture) - { - } - protected new JetFixture Fixture => (JetFixture)base.Fixture; diff --git a/test/EFCore.Jet.FunctionalTests/Update/MismatchedKeyTypesJetTest.cs b/test/EFCore.Jet.FunctionalTests/Update/MismatchedKeyTypesJetTest.cs index bc49865d..e7605b65 100644 --- a/test/EFCore.Jet.FunctionalTests/Update/MismatchedKeyTypesJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Update/MismatchedKeyTypesJetTest.cs @@ -8,6 +8,7 @@ using System.Linq; using System.Reflection; using System.Threading; +using System.Threading.Tasks; using System.Transactions; using EntityFrameworkCore.Jet.FunctionalTests.TestUtilities; using Microsoft.EntityFrameworkCore; @@ -18,14 +19,10 @@ namespace EntityFrameworkCore.Jet.FunctionalTests.Update; -public class MismatchedKeyTypesJetTest : IClassFixture +public class MismatchedKeyTypesJetTest(MismatchedKeyTypesJetTest.MismatchedKeyTypesJetFixture fixture) + : IClassFixture { - public MismatchedKeyTypesJetTest(MismatchedKeyTypesJetFixture fixture) - { - Fixture = fixture; - } - - public MismatchedKeyTypesJetFixture Fixture { get; } + public MismatchedKeyTypesJetFixture Fixture { get; } = fixture; [ConditionalFact] // Issue #28392 public virtual void Can_update_and_delete_with_bigint_FK_and_int_PK() @@ -375,13 +372,9 @@ public virtual void Queries_work_but_SaveChanges_fails_when_keys_incompatible_in Assert.Throws(() => context.SaveChanges()).InnerException!.InnerException!.Message); } - protected class MismatchedKeyTypesContextNoFks : MismatchedKeyTypesContext + protected class MismatchedKeyTypesContextNoFks(MismatchedKeyTypesJetFixture fixture) + : MismatchedKeyTypesContext(fixture) { - public MismatchedKeyTypesContextNoFks(MismatchedKeyTypesJetFixture fixture) - : base(fixture) - { - } - protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity( @@ -460,14 +453,9 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) } } - protected class MismatchedKeyTypesContext : DbContext + protected class MismatchedKeyTypesContext(MismatchedKeyTypesJetFixture fixture) : DbContext { - public MismatchedKeyTypesContext(MismatchedKeyTypesJetFixture fixture) - { - Fixture = fixture; - } - - public MismatchedKeyTypesJetFixture Fixture { get; } + public MismatchedKeyTypesJetFixture Fixture { get; } = fixture; public DbSet IntLongs => Set(); @@ -760,21 +748,9 @@ protected class OptionalSingleBadComposite public int? PrincipalId3 { get; set; } } - public class MismatchedKeyTypesJetFixture : IDisposable + public class MismatchedKeyTypesJetFixture : IAsyncLifetime { - public MismatchedKeyTypesJetFixture() - { - Store = JetTestStore.CreateInitialized("MismatchedKeyTypes"); - - using (var context = new MismatchedKeyTypesContextNoFks(this)) - { - context.Database.EnsureClean(); - } - - Seed(); - } - - public void Seed() + public async Task SeedAsync() { using var context = new MismatchedKeyTypesContext(this); @@ -820,13 +796,28 @@ public void Seed() Id3 = -1 }); - context.SaveChanges(); + await context.SaveChangesAsync(); } - public JetTestStore Store { get; set; } + public JetTestStore Store { get; set; } = null!; + + public async Task InitializeAsync() + { + Store = await JetTestStore.CreateInitializedAsync("MismatchedKeyTypes"); + + using (var context = new MismatchedKeyTypesContextNoFks(this)) + { + context.Database.EnsureClean(); + } + + await SeedAsync(); + } - public void Dispose() - => Store.Dispose(); + public Task DisposeAsync() + { + Store.Dispose(); + return Task.CompletedTask; + } } private class TemporaryByteValueGenerator : ValueGenerator diff --git a/test/EFCore.Jet.FunctionalTests/Update/NonSharedModelUpdatesJetTest.cs b/test/EFCore.Jet.FunctionalTests/Update/NonSharedModelUpdatesJetTest.cs index 07a4fc8d..4c061574 100644 --- a/test/EFCore.Jet.FunctionalTests/Update/NonSharedModelUpdatesJetTest.cs +++ b/test/EFCore.Jet.FunctionalTests/Update/NonSharedModelUpdatesJetTest.cs @@ -11,7 +11,7 @@ using Microsoft.EntityFrameworkCore.TestUtilities; using Microsoft.EntityFrameworkCore.Update; using Xunit; - +#nullable disable namespace EntityFrameworkCore.Jet.FunctionalTests.Update; public class NonSharedModelUpdatesJetTest : NonSharedModelUpdatesTestBase diff --git a/test/EFCore.Jet.IntegrationTests/EFCore.Jet.IntegrationTests.csproj b/test/EFCore.Jet.IntegrationTests/EFCore.Jet.IntegrationTests.csproj index db52d0bd..00803971 100644 --- a/test/EFCore.Jet.IntegrationTests/EFCore.Jet.IntegrationTests.csproj +++ b/test/EFCore.Jet.IntegrationTests/EFCore.Jet.IntegrationTests.csproj @@ -5,6 +5,7 @@ EntityFrameworkCore.Jet.IntegrationTests false AnyCPU;x86;x64 + disable diff --git a/test/EFCore.Jet.Tests/EFCore.Jet.Tests.csproj b/test/EFCore.Jet.Tests/EFCore.Jet.Tests.csproj index 89bbb6b0..892a2de5 100644 --- a/test/EFCore.Jet.Tests/EFCore.Jet.Tests.csproj +++ b/test/EFCore.Jet.Tests/EFCore.Jet.Tests.csproj @@ -14,9 +14,20 @@ PreserveNewest + + + + + + + + + + + @@ -25,8 +36,6 @@ - - @@ -38,7 +47,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/test/JetProviderExceptionTests/JetProviderExceptionTests.csproj b/test/JetProviderExceptionTests/JetProviderExceptionTests.csproj index 16c1e6c2..2b0435f9 100644 --- a/test/JetProviderExceptionTests/JetProviderExceptionTests.csproj +++ b/test/JetProviderExceptionTests/JetProviderExceptionTests.csproj @@ -4,6 +4,7 @@ Exe $(JetTestWindowsOnlyTargetFramework) AnyCPU;x86;x64 + disable diff --git a/test/Shared/TestUtilities/Attributes/TestRunnerCrashAttribute.cs b/test/Shared/TestUtilities/Attributes/TestRunnerCrashAttribute.cs index b9d61e2a..0e22815b 100644 --- a/test/Shared/TestUtilities/Attributes/TestRunnerCrashAttribute.cs +++ b/test/Shared/TestUtilities/Attributes/TestRunnerCrashAttribute.cs @@ -9,18 +9,14 @@ namespace EntityFrameworkCore.Jet.FunctionalTests.TestUtilities; /// Marks a test method or class that is known to crash the test runner. /// [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true)] -public class TestRunnerCrashAttribute : Attribute, ITestCondition +public class TestRunnerCrashAttribute(params AccessProviderTypeVariation[] accessProviderTypeVariations) + : Attribute, ITestCondition { public const string DefaultSkipReason = "The test is known to crash the test runner."; - protected AccessProviderTypeVariation[] AccessProviderTypeVariations { get; } - - public TestRunnerCrashAttribute(params AccessProviderTypeVariation[] accessProviderTypeVariations) - { - AccessProviderTypeVariations = accessProviderTypeVariations.Length > 0 - ? accessProviderTypeVariations - : new[] { AccessProviderTypeVariation.All }; - } + protected AccessProviderTypeVariation[] AccessProviderTypeVariations { get; } = accessProviderTypeVariations.Length > 0 + ? accessProviderTypeVariations + : new[] { AccessProviderTypeVariation.All }; public virtual ValueTask IsMetAsync() { @@ -37,7 +33,7 @@ public virtual ValueTask IsMetAsync() } public virtual string SkipReason - => Skip; + => Skip ?? DefaultSkipReason; - public virtual string Skip { get; set; } + public virtual string? Skip { get; set; } } \ No newline at end of file diff --git a/test/Shared/TestUtilities/Xunit/JetConditionalFactTestCase.cs b/test/Shared/TestUtilities/Xunit/JetConditionalFactTestCase.cs index e0373803..37753a8a 100644 --- a/test/Shared/TestUtilities/Xunit/JetConditionalFactTestCase.cs +++ b/test/Shared/TestUtilities/Xunit/JetConditionalFactTestCase.cs @@ -22,7 +22,7 @@ public JetConditionalFactTestCase( TestMethodDisplay defaultMethodDisplay, TestMethodDisplayOptions defaultMethodDisplayOptions, ITestMethod testMethod, - object[] testMethodArguments = null) + object[]? testMethodArguments = null) : base(diagnosticMessageSink, defaultMethodDisplay, defaultMethodDisplayOptions, testMethod, testMethodArguments) { } diff --git a/test/Shared/TestUtilities/Xunit/JetXunitTestFrameworkDiscoverer.cs b/test/Shared/TestUtilities/Xunit/JetXunitTestFrameworkDiscoverer.cs index f790be7e..21502148 100644 --- a/test/Shared/TestUtilities/Xunit/JetXunitTestFrameworkDiscoverer.cs +++ b/test/Shared/TestUtilities/Xunit/JetXunitTestFrameworkDiscoverer.cs @@ -8,6 +8,7 @@ namespace EntityFrameworkCore.Jet.FunctionalTests.TestUtilities.Xunit; +#nullable disable public class JetXunitTestFrameworkDiscoverer : XunitTestFrameworkDiscoverer { public JetXunitTestFrameworkDiscoverer( diff --git a/test/Shared/TestUtilities/Xunit/JetXunitTestRunner.cs b/test/Shared/TestUtilities/Xunit/JetXunitTestRunner.cs index 71c0ee4c..f93f9fc7 100644 --- a/test/Shared/TestUtilities/Xunit/JetXunitTestRunner.cs +++ b/test/Shared/TestUtilities/Xunit/JetXunitTestRunner.cs @@ -1,5 +1,7 @@ using System; using System.Collections.Generic; +using System.Data.Odbc; +using System.Data.OleDb; using System.IO; using System.Linq; using System.Reflection; @@ -137,7 +139,7 @@ protected virtual bool SkipFailedTest(Exception exception) foreach (var innerException in aggregateException.Flatten().InnerExceptions.SelectMany(e => e.FlattenHierarchy())) { - if (innerException is InvalidOperationException) + if (innerException is InvalidOperationException or OleDbException or OdbcException) { var message = innerException.Message; @@ -149,17 +151,17 @@ protected virtual bool SkipFailedTest(Exception exception) skip = expectedUnsupportedTranslation; unexpectedUnsupportedTranslation = !expectedUnsupportedTranslation; } - else if (message.StartsWith("The LINQ expression '") && - message.Contains("' could not be translated.")) + else if (message.StartsWith("Unsupported Jet expression")) { - var expectedUnsupportedTranslation = message.Contains("OUTER APPLY") || - message.Contains("CROSS APPLY") || - message.Contains("ROW_NUMBER() OVER") || - message.Contains("EXCEPT") || - message.Contains("INTERSECT"); - - skip = expectedUnsupportedTranslation; - unexpectedUnsupportedTranslation = !expectedUnsupportedTranslation; + skip = true; + } + else if (message.StartsWith("No value given for one or more required parameters.")) + { + skip = true; + } + else if (message.StartsWith("Syntax error in PARAMETER clause")) + { + skip = true; } if (skip)