// 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.Query; using Microsoft.EntityFrameworkCore.TestUtilities; using Xunit.Abstractions; namespace EntityFrameworkCore.Jet.FunctionalTests.Query { public class QueryNavigationsJetTest : QueryNavigationsTestBase> { public QueryNavigationsJetTest( NorthwindQueryJetFixture fixture, ITestOutputHelper testOutputHelper) : base(fixture) { fixture.TestSqlLoggerFactory.Clear(); } public override async Task GroupJoin_with_nav_projected_in_subquery_when_client_eval(bool isAsync) { await base.GroupJoin_with_nav_projected_in_subquery_when_client_eval(isAsync); AssertSql( $@"SELECT `od0`.`OrderID`, `od0`.`ProductID`, `od0`.`Discount`, `od0`.`Quantity`, `od0`.`UnitPrice`, [od.Product0].`ProductID`, [od.Product0].`Discontinued`, [od.Product0].`ProductName`, [od.Product0].`SupplierID`, [od.Product0].`UnitPrice`, [od.Product0].`UnitsInStock` FROM `Order Details` AS `od0` INNER JOIN `Products` AS [od.Product0] ON `od0`.`ProductID` = [od.Product0].`ProductID`", // $@"SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, [o.Customer0].`CustomerID`, [o.Customer0].`Address`, [o.Customer0].`City`, [o.Customer0].`CompanyName`, [o.Customer0].`ContactName`, [o.Customer0].`ContactTitle`, [o.Customer0].`Country`, [o.Customer0].`Fax`, [o.Customer0].`Phone`, [o.Customer0].`PostalCode`, [o.Customer0].`Region` FROM `Orders` AS `o0` LEFT JOIN `Customers` AS [o.Customer0] ON `o0`.`CustomerID` = [o.Customer0].`CustomerID`", // $@"SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c`"); } public override async Task GroupJoin_with_nav_in_predicate_in_subquery_when_client_eval(bool isAsync) { await base.GroupJoin_with_nav_in_predicate_in_subquery_when_client_eval(isAsync); AssertSql( $@"SELECT `od0`.`OrderID`, `od0`.`ProductID`, `od0`.`Discount`, `od0`.`Quantity`, `od0`.`UnitPrice`, [od.Product0].`ProductID`, [od.Product0].`Discontinued`, [od.Product0].`ProductName`, [od.Product0].`SupplierID`, [od.Product0].`UnitPrice`, [od.Product0].`UnitsInStock` FROM `Order Details` AS `od0` INNER JOIN `Products` AS [od.Product0] ON `od0`.`ProductID` = [od.Product0].`ProductID`", // $@"SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, [o.Customer0].`CustomerID`, [o.Customer0].`Address`, [o.Customer0].`City`, [o.Customer0].`CompanyName`, [o.Customer0].`ContactName`, [o.Customer0].`ContactTitle`, [o.Customer0].`Country`, [o.Customer0].`Fax`, [o.Customer0].`Phone`, [o.Customer0].`PostalCode`, [o.Customer0].`Region` FROM `Orders` AS `o0` LEFT JOIN `Customers` AS [o.Customer0] ON `o0`.`CustomerID` = [o.Customer0].`CustomerID`", // $@"SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c`"); } public override async Task GroupJoin_with_nav_in_orderby_in_subquery_when_client_eval(bool isAsync) { await base.GroupJoin_with_nav_in_orderby_in_subquery_when_client_eval(isAsync); AssertSql( $@"SELECT `od0`.`OrderID`, `od0`.`ProductID`, `od0`.`Discount`, `od0`.`Quantity`, `od0`.`UnitPrice`, [od.Product0].`ProductID`, [od.Product0].`Discontinued`, [od.Product0].`ProductName`, [od.Product0].`SupplierID`, [od.Product0].`UnitPrice`, [od.Product0].`UnitsInStock` FROM `Order Details` AS `od0` INNER JOIN `Products` AS [od.Product0] ON `od0`.`ProductID` = [od.Product0].`ProductID`", // $@"SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, [o.Customer0].`CustomerID`, [o.Customer0].`Address`, [o.Customer0].`City`, [o.Customer0].`CompanyName`, [o.Customer0].`ContactName`, [o.Customer0].`ContactTitle`, [o.Customer0].`Country`, [o.Customer0].`Fax`, [o.Customer0].`Phone`, [o.Customer0].`PostalCode`, [o.Customer0].`Region` FROM `Orders` AS `o0` LEFT JOIN `Customers` AS [o.Customer0] ON `o0`.`CustomerID` = [o.Customer0].`CustomerID`", // $@"SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c`"); } public override async Task Select_Where_Navigation(bool isAsync) { await base.Select_Where_Navigation(isAsync); AssertSql( $@"SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` WHERE `c`.`City` = 'Seattle'"); } public override async Task Select_Where_Navigation_Contains(bool isAsync) { await base.Select_Where_Navigation_Contains(isAsync); AssertSql( $@"SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` WHERE CHARINDEX('Sea', `c`.`City`) > 0"); } public override async Task Select_Where_Navigation_Deep(bool isAsync) { await base.Select_Where_Navigation_Deep(isAsync); AssertSql( $@"{AssertSqlHelper.Declaration("@__p_0='1'")} SELECT TOP {AssertSqlHelper.Parameter("@__p_0")} `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` LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` WHERE `c`.`City` = 'Seattle' ORDER BY `o`.`OrderID`, `o`.`ProductID`"); } public override async Task Take_Select_Navigation(bool isAsync) { await base.Take_Select_Navigation(isAsync); AssertSql( $@"{AssertSqlHelper.Declaration("@__p_0='2'")} SELECT `t1`.`OrderID`, `t1`.`CustomerID`, `t1`.`EmployeeID`, `t1`.`OrderDate` FROM ( SELECT TOP {AssertSqlHelper.Parameter("@__p_0")} `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`CustomerID` ) AS `t` LEFT JOIN ( SELECT `t0`.`OrderID`, `t0`.`CustomerID`, `t0`.`EmployeeID`, `t0`.`OrderDate` FROM ( SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, ROW_NUMBER() OVER(PARTITION BY `o`.`CustomerID` ORDER BY `o`.`OrderID`) AS `row` FROM `Orders` AS `o` ) AS `t0` WHERE `t0`.`row` <= 1 ) AS `t1` ON `t`.`CustomerID` = `t1`.`CustomerID` ORDER BY `t`.`CustomerID`"); } public override async Task Select_collection_FirstOrDefault_project_single_column1(bool isAsync) { await base.Select_collection_FirstOrDefault_project_single_column1(isAsync); AssertSql( $@"{AssertSqlHelper.Declaration("@__p_0='2'")} SELECT TOP {AssertSqlHelper.Parameter("@__p_0")} ( SELECT TOP 1 `o`.`CustomerID` FROM `Orders` AS `o` WHERE `c`.`CustomerID` = `o`.`CustomerID` ORDER BY `o`.`OrderID`) FROM `Customers` AS `c` ORDER BY `c`.`CustomerID`"); } public override async Task Select_collection_FirstOrDefault_project_single_column2(bool isAsync) { await base.Select_collection_FirstOrDefault_project_single_column2(isAsync); AssertSql( $@"{AssertSqlHelper.Declaration("@__p_0='2'")} SELECT TOP {AssertSqlHelper.Parameter("@__p_0")} ( SELECT TOP 1 `o`.`CustomerID` FROM `Orders` AS `o` WHERE `c`.`CustomerID` = `o`.`CustomerID` ORDER BY `o`.`OrderID`) FROM `Customers` AS `c` ORDER BY `c`.`CustomerID`"); } public override async Task Select_collection_FirstOrDefault_project_anonymous_type(bool isAsync) { await base.Select_collection_FirstOrDefault_project_anonymous_type(isAsync); AssertSql( $@"{AssertSqlHelper.Declaration("@__p_0='2'")} SELECT `t1`.`CustomerID`, `t1`.`OrderID`, `t1`.`c` FROM ( SELECT TOP {AssertSqlHelper.Parameter("@__p_0")} `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'F' & '%' ORDER BY `c`.`CustomerID` ) AS `t` LEFT JOIN ( SELECT `t0`.`CustomerID`, `t0`.`OrderID`, `t0`.`c` FROM ( SELECT `o`.`CustomerID`, `o`.`OrderID`, 1 AS `c`, ROW_NUMBER() OVER(PARTITION BY `o`.`CustomerID` ORDER BY `o`.`OrderID`) AS `row` FROM `Orders` AS `o` ) AS `t0` WHERE `t0`.`row` <= 1 ) AS `t1` ON `t`.`CustomerID` = `t1`.`CustomerID` ORDER BY `t`.`CustomerID`"); } public override async Task Select_collection_FirstOrDefault_project_anonymous_type_client_eval(bool isAsync) { await base.Select_collection_FirstOrDefault_project_anonymous_type_client_eval(isAsync); AssertSql( $@"{AssertSqlHelper.Declaration("@__p_0='2'")} SELECT `t1`.`CustomerID`, `t1`.`OrderID`, `t1`.`c` FROM ( SELECT TOP {AssertSqlHelper.Parameter("@__p_0")} `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'F' & '%' ORDER BY `c`.`CustomerID` ) AS `t` LEFT JOIN ( SELECT `t0`.`CustomerID`, `t0`.`OrderID`, `t0`.`c` FROM ( SELECT `o`.`CustomerID`, `o`.`OrderID`, 1 AS `c`, ROW_NUMBER() OVER(PARTITION BY `o`.`CustomerID` ORDER BY `o`.`OrderID`) AS `row` FROM `Orders` AS `o` ) AS `t0` WHERE `t0`.`row` <= 1 ) AS `t1` ON `t`.`CustomerID` = `t1`.`CustomerID` ORDER BY `t`.`CustomerID`"); } public override async Task Select_collection_FirstOrDefault_project_entity(bool isAsync) { await base.Select_collection_FirstOrDefault_project_entity(isAsync); AssertSql( $@"{AssertSqlHelper.Declaration("@__p_0='2'")} SELECT `t1`.`OrderID`, `t1`.`CustomerID`, `t1`.`EmployeeID`, `t1`.`OrderDate` FROM ( SELECT TOP {AssertSqlHelper.Parameter("@__p_0")} `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY `c`.`CustomerID` ) AS `t` LEFT JOIN ( SELECT `t0`.`OrderID`, `t0`.`CustomerID`, `t0`.`EmployeeID`, `t0`.`OrderDate` FROM ( SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, ROW_NUMBER() OVER(PARTITION BY `o`.`CustomerID` ORDER BY `o`.`OrderID`) AS `row` FROM `Orders` AS `o` ) AS `t0` WHERE `t0`.`row` <= 1 ) AS `t1` ON `t`.`CustomerID` = `t1`.`CustomerID` ORDER BY `t`.`CustomerID`"); } public override async Task Skip_Select_Navigation(bool isAsync) { await base.Skip_Select_Navigation(isAsync); AssertSql( $@"{AssertSqlHelper.Declaration("@__p_0='20'")} SELECT `t1`.`OrderID`, `t1`.`CustomerID`, `t1`.`EmployeeID`, `t1`.`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` ORDER BY `c`.`CustomerID` SKIP {AssertSqlHelper.Parameter("@__p_0")} ) AS `t` LEFT JOIN ( SELECT `t0`.`OrderID`, `t0`.`CustomerID`, `t0`.`EmployeeID`, `t0`.`OrderDate` FROM ( SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, ROW_NUMBER() OVER(PARTITION BY `o`.`CustomerID` ORDER BY `o`.`OrderID`) AS `row` FROM `Orders` AS `o` ) AS `t0` WHERE `t0`.`row` <= 1 ) AS `t1` ON `t`.`CustomerID` = `t1`.`CustomerID` ORDER BY `t`.`CustomerID`"); } public override async Task Select_Where_Navigation_Included(bool isAsync) { await base.Select_Where_Navigation_Included(isAsync); AssertSql( $@"SELECT `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 `c`.`City` = 'Seattle'"); } public override async Task Include_with_multiple_optional_navigations(bool isAsync) { await base.Include_with_multiple_optional_navigations(isAsync); AssertSql( $@"SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `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 `Order Details` AS `o` INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` WHERE `c`.`City` = 'London'"); } public override async Task Select_Navigation(bool isAsync) { await base.Select_Navigation(isAsync); AssertSql( $@"SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Orders` AS `o` LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID`"); } public override async Task Select_Navigations(bool isAsync) { await base.Select_Navigations(isAsync); AssertSql( $@"SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Orders` AS `o` LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID`"); } public override async Task Select_Where_Navigation_Multiple_Access(bool isAsync) { await base.Select_Where_Navigation_Multiple_Access(isAsync); AssertSql( $@"SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` WHERE (`c`.`City` = 'Seattle') AND ((`c`.`Phone` <> '555 555 5555') OR `c`.`Phone` IS NULL)"); } public override async Task Select_Navigations_Where_Navigations(bool isAsync) { await base.Select_Navigations_Where_Navigations(isAsync); AssertSql( $@"SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Orders` AS `o` LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` WHERE (`c`.`City` = 'Seattle') AND ((`c`.`Phone` <> '555 555 5555') OR `c`.`Phone` IS NULL)"); } public override async Task Select_Singleton_Navigation_With_Member_Access(bool isAsync) { await base.Select_Singleton_Navigation_With_Member_Access(isAsync); AssertSql( $@"SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Orders` AS `o` LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` WHERE (`c`.`City` = 'Seattle') AND ((`c`.`Phone` <> '555 555 5555') OR `c`.`Phone` IS NULL)"); } public override async Task Select_count_plus_sum(bool isAsync) { await base.Select_count_plus_sum(isAsync); AssertSql( $@"SELECT ( SELECT SUM(CAST(`o`.`Quantity` AS int)) FROM `Order Details` AS `o` WHERE `o1`.`OrderID` = `o`.`OrderID`) + ( SELECT COUNT(*) FROM `Order Details` AS `o0` WHERE `o1`.`OrderID` = `o0`.`OrderID`) AS `Total` FROM `Orders` AS `o1`"); } public override async Task Singleton_Navigation_With_Member_Access(bool isAsync) { await base.Singleton_Navigation_With_Member_Access(isAsync); AssertSql( $@"SELECT `c`.`City` AS `B` FROM `Orders` AS `o` LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` WHERE (`c`.`City` = 'Seattle') AND ((`c`.`Phone` <> '555 555 5555') OR `c`.`Phone` IS NULL)"); } public override async Task Select_Where_Navigation_Scalar_Equals_Navigation_Scalar_Projected(bool isAsync) { await base.Select_Where_Navigation_Scalar_Equals_Navigation_Scalar_Projected(isAsync); AssertSql( $@"SELECT `o`.`CustomerID`, `t`.`CustomerID` AS `C2` FROM `Orders` AS `o`, ( SELECT `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` FROM `Orders` AS `o0` WHERE `o0`.`OrderID` < 10400 ) AS `t` LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` LEFT JOIN `Customers` AS `c0` ON `t`.`CustomerID` = `c0`.`CustomerID` WHERE (`o`.`OrderID` < 10300) AND ((`c`.`City` = `c0`.`City`) OR (`c`.`City` IS NULL AND `c0`.`City` IS NULL))"); } public override async Task Select_Where_Navigation_Equals_Navigation(bool isAsync) { await base.Select_Where_Navigation_Equals_Navigation(isAsync); AssertSql( $@"SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` FROM `Orders` AS `o`, `Orders` AS `o0` LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` LEFT JOIN `Customers` AS `c0` ON `o0`.`CustomerID` = `c0`.`CustomerID` WHERE ((`o`.`CustomerID` IS NOT NULL AND (`o`.`CustomerID` LIKE 'A' & '%')) AND (`o0`.`CustomerID` IS NOT NULL AND (`o0`.`CustomerID` LIKE 'A' & '%'))) AND ((`c`.`CustomerID` = `c0`.`CustomerID`) OR (`c`.`CustomerID` IS NULL AND `c0`.`CustomerID` IS NULL))"); } public override async Task Select_Where_Navigation_Null(bool isAsync) { await base.Select_Where_Navigation_Null(isAsync); AssertSql( $@"SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` FROM `Employees` AS `e` LEFT JOIN `Employees` AS `e0` ON `e`.`ReportsTo` = `e0`.`EmployeeID` WHERE `e0`.`EmployeeID` IS NULL"); } public override async Task Select_Where_Navigation_Null_Deep(bool isAsync) { await base.Select_Where_Navigation_Null_Deep(isAsync); AssertSql( $@"SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` FROM `Employees` AS `e` LEFT JOIN `Employees` AS `e0` ON `e`.`ReportsTo` = `e0`.`EmployeeID` LEFT JOIN `Employees` AS `e1` ON `e0`.`ReportsTo` = `e1`.`EmployeeID` WHERE `e1`.`EmployeeID` IS NULL"); } public override async Task Select_Where_Navigation_Null_Reverse(bool isAsync) { await base.Select_Where_Navigation_Null_Reverse(isAsync); AssertSql( $@"SELECT `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title` FROM `Employees` AS `e` LEFT JOIN `Employees` AS `e0` ON `e`.`ReportsTo` = `e0`.`EmployeeID` WHERE `e0`.`EmployeeID` IS NULL"); } public override async Task Select_collection_navigation_simple(bool isAsync) { await base.Select_collection_navigation_simple(isAsync); AssertSql( $@"SELECT `c`.`CustomerID`, `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 'A' & '%' ORDER BY `c`.`CustomerID`, `o`.`OrderID`"); } public override async Task Select_collection_navigation_simple2(bool isAsync) { await base.Select_collection_navigation_simple2(isAsync); AssertSql( $@"SELECT `c`.`CustomerID`, ( SELECT COUNT(*) FROM `Orders` AS `o` WHERE `c`.`CustomerID` = `o`.`CustomerID`) AS `Count` FROM `Customers` AS `c` WHERE `c`.`CustomerID` LIKE 'A' & '%' ORDER BY `c`.`CustomerID`"); } public override async Task Select_collection_navigation_simple_followed_by_ordering_by_scalar(bool isAsync) { await base.Select_collection_navigation_simple_followed_by_ordering_by_scalar(isAsync); AssertSql( $@"SELECT `c`.`CustomerID`, `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 'A' & '%' ORDER BY `c`.`CustomerID`, `o`.`OrderID`"); } public override async Task Select_collection_navigation_multi_part(bool isAsync) { await base.Select_collection_navigation_multi_part(isAsync); AssertSql( $@"SELECT `o`.`OrderID`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate` FROM `Orders` AS `o` LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` LEFT JOIN `Orders` AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID` WHERE `o`.`CustomerID` = 'ALFKI' ORDER BY `o`.`OrderID`, `o0`.`OrderID`"); } public override async Task Select_collection_navigation_multi_part2(bool isAsync) { await base.Select_collection_navigation_multi_part2(isAsync); AssertSql( $@"SELECT `o`.`OrderID`, `o`.`ProductID`, `o0`.`OrderID`, `o1`.`OrderID`, `o1`.`CustomerID`, `o1`.`EmployeeID`, `o1`.`OrderDate` FROM `Order Details` AS `o` INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` LEFT JOIN `Orders` AS `o1` ON `c`.`CustomerID` = `o1`.`CustomerID` WHERE (`o0`.`CustomerID` = 'ALFKI') OR (`o0`.`CustomerID` = 'ANTON') ORDER BY `o`.`OrderID`, `o`.`ProductID`, `o0`.`OrderID`, `o1`.`OrderID`"); } public override async Task Collection_select_nav_prop_any(bool isAsync) { await base.Collection_select_nav_prop_any(isAsync); AssertSql( $@"SELECT CASE WHEN EXISTS ( SELECT 1 FROM `Orders` AS `o` WHERE `c`.`CustomerID` = `o`.`CustomerID`) THEN True ELSE False END AS `Any` FROM `Customers` AS `c`"); } public override async Task Collection_select_nav_prop_predicate(bool isAsync) { await base.Collection_select_nav_prop_predicate(isAsync); AssertSql( $@"SELECT CASE WHEN ( SELECT COUNT(*) FROM `Orders` AS `o` WHERE `c`.`CustomerID` = `o`.`CustomerID`) > 0 THEN True ELSE False END FROM `Customers` AS `c`"); } public override async Task Collection_where_nav_prop_any(bool isAsync) { await base.Collection_where_nav_prop_any(isAsync); AssertSql( $@"SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` WHERE EXISTS ( SELECT 1 FROM `Orders` AS `o` WHERE `c`.`CustomerID` = `o`.`CustomerID`)"); } public override async Task Collection_where_nav_prop_any_predicate(bool isAsync) { await base.Collection_where_nav_prop_any_predicate(isAsync); AssertSql( $@"SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` WHERE EXISTS ( SELECT 1 FROM `Orders` AS `o` WHERE (`c`.`CustomerID` = `o`.`CustomerID`) AND (`o`.`OrderID` > 0))"); } public override async Task Collection_select_nav_prop_all(bool isAsync) { await base.Collection_select_nav_prop_all(isAsync); AssertSql( $@"SELECT CASE WHEN NOT EXISTS ( SELECT 1 FROM `Orders` AS `o` WHERE (`c`.`CustomerID` = `o`.`CustomerID`) AND ((`o`.`CustomerID` <> 'ALFKI') OR `o`.`CustomerID` IS NULL)) THEN True ELSE False END AS `All` FROM `Customers` AS `c`"); } public override async Task Collection_where_nav_prop_all(bool isAsync) { await base.Collection_where_nav_prop_all(isAsync); AssertSql( $@"SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` WHERE NOT EXISTS ( SELECT 1 FROM `Orders` AS `o` WHERE (`c`.`CustomerID` = `o`.`CustomerID`) AND ((`o`.`CustomerID` <> 'ALFKI') OR `o`.`CustomerID` IS NULL))"); } public override async Task Collection_select_nav_prop_count(bool isAsync) { await base.Collection_select_nav_prop_count(isAsync); AssertSql( $@"SELECT ( SELECT COUNT(*) FROM `Orders` AS `o` WHERE `c`.`CustomerID` = `o`.`CustomerID`) AS `Count` FROM `Customers` AS `c`"); } public override async Task Collection_where_nav_prop_count(bool isAsync) { await base.Collection_where_nav_prop_count(isAsync); AssertSql( $@"SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` WHERE ( SELECT COUNT(*) FROM `Orders` AS `o` WHERE `c`.`CustomerID` = `o`.`CustomerID`) > 5"); } public override async Task Collection_where_nav_prop_count_reverse(bool isAsync) { await base.Collection_where_nav_prop_count_reverse(isAsync); AssertSql( $@"SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` WHERE 5 < ( SELECT COUNT(*) FROM `Orders` AS `o` WHERE `c`.`CustomerID` = `o`.`CustomerID`)"); } public override async Task Collection_orderby_nav_prop_count(bool isAsync) { await base.Collection_orderby_nav_prop_count(isAsync); AssertSql( $@"SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` ORDER BY ( SELECT COUNT(*) FROM `Orders` AS `o` WHERE `c`.`CustomerID` = `o`.`CustomerID`), `c`.`CustomerID`"); } public override async Task Collection_select_nav_prop_long_count(bool isAsync) { await base.Collection_select_nav_prop_long_count(isAsync); AssertSql( $@"SELECT ( SELECT COUNT_BIG(*) FROM `Orders` AS `o` WHERE `c`.`CustomerID` = `o`.`CustomerID`) AS `C` FROM `Customers` AS `c`"); } public override async Task Select_multiple_complex_projections(bool isAsync) { await base.Select_multiple_complex_projections(isAsync); AssertSql( $@"SELECT ( SELECT COUNT(*) FROM `Order Details` AS `o` WHERE `o3`.`OrderID` = `o`.`OrderID`) AS `collection1`, `o3`.`OrderDate` AS `scalar1`, CASE WHEN EXISTS ( SELECT 1 FROM `Order Details` AS `o0` WHERE (`o3`.`OrderID` = `o0`.`OrderID`) AND (`o0`.`UnitPrice` > 10.0)) THEN True ELSE False END AS `any`, CASE WHEN `o3`.`CustomerID` = 'ALFKI' THEN '50' ELSE '10' END AS `conditional`, `o3`.`OrderID` AS `scalar2`, CASE WHEN NOT EXISTS ( SELECT 1 FROM `Order Details` AS `o1` WHERE (`o3`.`OrderID` = `o1`.`OrderID`) AND (`o1`.`OrderID` <> 42)) THEN True ELSE False END AS `all`, ( SELECT COUNT_BIG(*) FROM `Order Details` AS `o2` WHERE `o3`.`OrderID` = `o2`.`OrderID`) AS `collection2` FROM `Orders` AS `o3` WHERE `o3`.`CustomerID` IS NOT NULL AND (`o3`.`CustomerID` LIKE 'A' & '%')"); } public override async Task Collection_select_nav_prop_sum(bool isAsync) { await base.Collection_select_nav_prop_sum(isAsync); AssertSql( $@"SELECT ( SELECT SUM(`o`.`OrderID`) FROM `Orders` AS `o` WHERE `c`.`CustomerID` = `o`.`CustomerID`) AS `Sum` FROM `Customers` AS `c`"); } public override async Task Collection_select_nav_prop_sum_plus_one(bool isAsync) { await base.Collection_select_nav_prop_sum_plus_one(isAsync); AssertSql( $@""); } public override async Task Collection_where_nav_prop_sum(bool isAsync) { await base.Collection_where_nav_prop_sum(isAsync); AssertSql( $@"SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` WHERE ( SELECT SUM(`o`.`OrderID`) FROM `Orders` AS `o` WHERE `c`.`CustomerID` = `o`.`CustomerID`) > 1000"); } public override async Task Collection_select_nav_prop_first_or_default(bool isAsync) { await base.Collection_select_nav_prop_first_or_default(isAsync); AssertSql( $@"SELECT `t0`.`OrderID`, `t0`.`CustomerID`, `t0`.`EmployeeID`, `t0`.`OrderDate` FROM `Customers` AS `c` LEFT JOIN ( SELECT `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate` FROM ( SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, ROW_NUMBER() OVER(PARTITION BY `o`.`CustomerID` ORDER BY `o`.`OrderID`) AS `row` FROM `Orders` AS `o` ) AS `t` WHERE `t`.`row` <= 1 ) AS `t0` ON `c`.`CustomerID` = `t0`.`CustomerID` ORDER BY `c`.`CustomerID`"); } public override async Task Collection_select_nav_prop_first_or_default_then_nav_prop(bool isAsync) { await base.Collection_select_nav_prop_first_or_default_then_nav_prop(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` FROM `Customers` AS `c` LEFT JOIN ( SELECT `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` FROM ( 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` AS `CustomerID0`, ROW_NUMBER() OVER(PARTITION BY `o`.`CustomerID` ORDER BY `o`.`OrderID`) AS `row` FROM `Orders` AS `o` LEFT JOIN `Customers` AS `c0` ON `o`.`CustomerID` = `c0`.`CustomerID` WHERE `o`.`OrderID` IN (10643, 10692, 10702, 10835, 10952, 11011) ) AS `t` WHERE `t`.`row` <= 1 ) AS `t0` ON `c`.`CustomerID` = `t0`.`CustomerID0` WHERE `c`.`CustomerID` LIKE 'A' & '%' ORDER BY `c`.`CustomerID`"); } public override async Task Collection_select_nav_prop_first_or_default_then_nav_prop_nested(bool isAsync) { await base.Collection_select_nav_prop_first_or_default_then_nav_prop_nested(isAsync); AssertSql( $@"SELECT ( SELECT TOP 1 `c`.`City` FROM `Orders` AS `o` LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` WHERE `o`.`CustomerID` = 'ALFKI') FROM `Customers` AS `c0` WHERE `c0`.`CustomerID` LIKE 'A' & '%'"); } public override async Task Collection_select_nav_prop_single_or_default_then_nav_prop_nested(bool isAsync) { await base.Collection_select_nav_prop_single_or_default_then_nav_prop_nested(isAsync); AssertSql( $@"SELECT ( SELECT TOP 1 `c`.`City` FROM `Orders` AS `o` LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` WHERE `o`.`OrderID` = 10643) FROM `Customers` AS `c0` WHERE `c0`.`CustomerID` LIKE 'A' & '%'"); } public override async Task Collection_select_nav_prop_first_or_default_then_nav_prop_nested_using_property_method(bool isAsync) { await base.Collection_select_nav_prop_first_or_default_then_nav_prop_nested_using_property_method(isAsync); AssertSql( $@"SELECT ( SELECT TOP 1 `c`.`City` FROM `Orders` AS `o` LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` WHERE `o`.`CustomerID` = 'ALFKI') FROM `Customers` AS `c0` WHERE `c0`.`CustomerID` LIKE 'A' & '%'"); } public override async Task Collection_select_nav_prop_first_or_default_then_nav_prop_nested_with_orderby(bool isAsync) { await base.Collection_select_nav_prop_first_or_default_then_nav_prop_nested_with_orderby(isAsync); AssertSql( $@"SELECT ( SELECT TOP 1 `c`.`City` FROM `Orders` AS `o` LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` WHERE `o`.`CustomerID` = 'ALFKI' ORDER BY `o`.`CustomerID`) FROM `Customers` AS `c0` WHERE `c0`.`CustomerID` LIKE 'A' & '%'"); } public override async Task Navigation_fk_based_inside_contains(bool isAsync) { await base.Navigation_fk_based_inside_contains(isAsync); AssertSql( $@"SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` WHERE `c`.`CustomerID` IN ('ALFKI')"); } public override async Task Navigation_inside_contains(bool isAsync) { await base.Navigation_inside_contains(isAsync); AssertSql( $@"SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` WHERE `c`.`City` IN ('Novigrad', 'Seattle')"); } public override async Task Navigation_inside_contains_nested(bool isAsync) { await base.Navigation_inside_contains_nested(isAsync); AssertSql( $@"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` LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` WHERE `c`.`City` IN ('Novigrad', 'Seattle')"); } public override async Task Navigation_from_join_clause_inside_contains(bool isAsync) { await base.Navigation_from_join_clause_inside_contains(isAsync); AssertSql( $@"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` LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` WHERE `c`.`Country` IN ('USA', 'Redania')"); } public override async Task Where_subquery_on_navigation(bool isAsync) { await base.Where_subquery_on_navigation(isAsync); AssertSql( $@"SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` FROM `Products` AS `p` WHERE EXISTS ( SELECT 1 FROM ( SELECT `o`.`OrderID`, `o`.`ProductID` FROM `Order Details` AS `o` WHERE `p`.`ProductID` = `o`.`ProductID` ) AS `t0` INNER JOIN ( SELECT TOP 1 `o0`.`OrderID`, `o0`.`ProductID` FROM `Order Details` AS `o0` WHERE `o0`.`Quantity` = 1 ORDER BY `o0`.`OrderID` DESC, `o0`.`ProductID` ) AS `t1` ON (`t0`.`OrderID` = `t1`.`OrderID`) AND (`t0`.`ProductID` = `t1`.`ProductID`))"); } public override async Task Where_subquery_on_navigation2(bool isAsync) { await base.Where_subquery_on_navigation2(isAsync); AssertSql( $@"SELECT `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` FROM `Products` AS `p` WHERE EXISTS ( SELECT 1 FROM ( SELECT `o`.`OrderID`, `o`.`ProductID` FROM `Order Details` AS `o` WHERE `p`.`ProductID` = `o`.`ProductID` ) AS `t0` INNER JOIN ( SELECT TOP 1 `o0`.`OrderID`, `o0`.`ProductID` FROM `Order Details` AS `o0` ORDER BY `o0`.`OrderID` DESC, `o0`.`ProductID` ) AS `t1` ON (`t0`.`OrderID` = `t1`.`OrderID`) AND (`t0`.`ProductID` = `t1`.`ProductID`))"); } public override void Navigation_in_subquery_referencing_outer_query() { base.Navigation_in_subquery_referencing_outer_query(); AssertSql( $@"SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` WHERE (( SELECT COUNT(*) FROM `Order Details` AS `o0` INNER JOIN `Orders` AS `o1` ON `o0`.`OrderID` = `o1`.`OrderID` LEFT JOIN `Customers` AS `c0` ON `o1`.`CustomerID` = `c0`.`CustomerID` WHERE (`c`.`Country` = `c0`.`Country`) OR (`c`.`Country` IS NULL AND `c0`.`Country` IS NULL)) > 0) AND ((`o`.`OrderID` = 10643) OR (`o`.`OrderID` = 10692))"); } public override async Task GroupBy_on_nav_prop(bool isAsync) { await base.GroupBy_on_nav_prop(isAsync); AssertSql( $@"SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, [o.Customer].`City` FROM `Orders` AS `o` LEFT JOIN `Customers` AS [o.Customer] ON `o`.`CustomerID` = [o.Customer].`CustomerID` ORDER BY [o.Customer].`City`"); } public override async Task Where_nav_prop_group_by(bool isAsync) { await base.Where_nav_prop_group_by(isAsync); AssertSql( $@"SELECT `od`.`OrderID`, `od`.`ProductID`, `od`.`Discount`, `od`.`Quantity`, `od`.`UnitPrice` FROM `Order Details` AS `od` INNER JOIN `Orders` AS [od.Order] ON `od`.`OrderID` = [od.Order].`OrderID` WHERE [od.Order].`CustomerID` = 'ALFKI' ORDER BY `od`.`Quantity`"); } public override async Task Let_group_by_nav_prop(bool isAsync) { await base.Let_group_by_nav_prop(isAsync); AssertSql( $@"SELECT `od`.`OrderID`, `od`.`ProductID`, `od`.`Discount`, `od`.`Quantity`, `od`.`UnitPrice`, [od.Order].`CustomerID` AS `customer` FROM `Order Details` AS `od` INNER JOIN `Orders` AS [od.Order] ON `od`.`OrderID` = [od.Order].`OrderID` ORDER BY [od.Order].`CustomerID`"); } public override async Task Select_anonymous_type_order_by_field_group_by_same_field(bool isAsync) { await base.Select_anonymous_type_order_by_field_group_by_same_field(isAsync); AssertSql( $@""); } public override async Task Project_single_scalar_value_subquery_is_properly_inlined(bool isAsync) { await base.Project_single_scalar_value_subquery_is_properly_inlined(isAsync); AssertSql( $@"SELECT `c`.`CustomerID`, ( SELECT TOP 1 `o`.`OrderID` FROM `Orders` AS `o` WHERE `c`.`CustomerID` = `o`.`CustomerID` ORDER BY `o`.`OrderID`) AS `OrderId` FROM `Customers` AS `c`"); } public override async Task Project_single_entity_value_subquery_works(bool isAsync) { await base.Project_single_entity_value_subquery_works(isAsync); AssertSql( $@"SELECT `c`.`CustomerID`, `t0`.`OrderID`, `t0`.`CustomerID`, `t0`.`EmployeeID`, `t0`.`OrderDate` FROM `Customers` AS `c` LEFT JOIN ( SELECT `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate` FROM ( SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, ROW_NUMBER() OVER(PARTITION BY `o`.`CustomerID` ORDER BY `o`.`OrderID`) AS `row` FROM `Orders` AS `o` ) AS `t` WHERE `t`.`row` <= 1 ) AS `t0` ON `c`.`CustomerID` = `t0`.`CustomerID` WHERE `c`.`CustomerID` LIKE 'A' & '%' ORDER BY `c`.`CustomerID`"); } public override async Task Project_single_scalar_value_subquery_in_query_with_optional_navigation_works(bool isAsync) { await base.Project_single_scalar_value_subquery_in_query_with_optional_navigation_works(isAsync); AssertSql( $@"{AssertSqlHelper.Declaration("@__p_0='3'")} SELECT TOP {AssertSqlHelper.Parameter("@__p_0")} `o0`.`OrderID`, ( SELECT TOP 1 `o`.`OrderID` FROM `Order Details` AS `o` WHERE `o0`.`OrderID` = `o`.`OrderID` ORDER BY `o`.`OrderID`, `o`.`ProductID`) AS `OrderDetail`, `c`.`City` FROM `Orders` AS `o0` LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` ORDER BY `o0`.`OrderID`"); } public override async Task GroupJoin_with_complex_subquery_and_LOJ_gets_flattened(bool isAsync) { await base.GroupJoin_with_complex_subquery_and_LOJ_gets_flattened(isAsync); AssertSql( $@"SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region` FROM `Customers` AS `c` LEFT JOIN ( SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID` AS `OrderID0`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c0`.`CustomerID` AS `CustomerID0`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` FROM `Order Details` AS `o` INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = 10260 INNER JOIN `Customers` AS `c0` ON `o0`.`CustomerID` = `c0`.`CustomerID` ) AS `t` ON `c`.`CustomerID` = `t`.`CustomerID0`"); } public override async Task GroupJoin_with_complex_subquery_and_LOJ_gets_flattened2(bool isAsync) { await base.GroupJoin_with_complex_subquery_and_LOJ_gets_flattened2(isAsync); AssertSql( $@"SELECT `c`.`CustomerID` FROM `Customers` AS `c` LEFT JOIN ( SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `o0`.`OrderID` AS `OrderID0`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`, `c0`.`CustomerID` AS `CustomerID0`, `c0`.`Address`, `c0`.`City`, `c0`.`CompanyName`, `c0`.`ContactName`, `c0`.`ContactTitle`, `c0`.`Country`, `c0`.`Fax`, `c0`.`Phone`, `c0`.`PostalCode`, `c0`.`Region` FROM `Order Details` AS `o` INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = 10260 INNER JOIN `Customers` AS `c0` ON `o0`.`CustomerID` = `c0`.`CustomerID` ) AS `t` ON `c`.`CustomerID` = `t`.`CustomerID0`"); } public override async Task Navigation_with_collection_with_nullable_type_key(bool isAsync) { await base.Navigation_with_collection_with_nullable_type_key(isAsync); AssertSql( $@"SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate` FROM `Orders` AS `o` LEFT JOIN `Customers` AS `c` ON `o`.`CustomerID` = `c`.`CustomerID` WHERE ( SELECT COUNT(*) FROM `Orders` AS `o0` WHERE (`c`.`CustomerID` IS NOT NULL AND (`c`.`CustomerID` = `o0`.`CustomerID`)) AND (`o0`.`OrderID` > 10260)) > 30"); } public override async Task Client_groupjoin_with_orderby_key_descending(bool isAsync) { await base.Client_groupjoin_with_orderby_key_descending(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` FROM `Customers` AS `c` LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` WHERE `c`.`CustomerID` LIKE 'A' & '%' ORDER BY `c`.`CustomerID` DESC"); } public override async Task Navigation_projection_on_groupjoin_qsre(bool isAsync) { await base.Navigation_projection_on_groupjoin_qsre(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` FROM `Customers` AS `c` LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` WHERE `c`.`CustomerID` = 'ALFKI' ORDER BY `c`.`CustomerID`", // $@"{AssertSqlHelper.Declaration("@_outer_OrderID='10643'")} SELECT `od`.`OrderID`, `od`.`ProductID`, `od`.`Discount`, `od`.`Quantity`, `od`.`UnitPrice` FROM `Order Details` AS `od` WHERE {AssertSqlHelper.Parameter("@_outer_OrderID")} = `od`.`OrderID`", // $@"{AssertSqlHelper.Declaration("@_outer_OrderID='10692'")} SELECT `od`.`OrderID`, `od`.`ProductID`, `od`.`Discount`, `od`.`Quantity`, `od`.`UnitPrice` FROM `Order Details` AS `od` WHERE {AssertSqlHelper.Parameter("@_outer_OrderID")} = `od`.`OrderID`", // $@"{AssertSqlHelper.Declaration("@_outer_OrderID='10702'")} SELECT `od`.`OrderID`, `od`.`ProductID`, `od`.`Discount`, `od`.`Quantity`, `od`.`UnitPrice` FROM `Order Details` AS `od` WHERE {AssertSqlHelper.Parameter("@_outer_OrderID")} = `od`.`OrderID`", // $@"{AssertSqlHelper.Declaration("@_outer_OrderID='10835'")} SELECT `od`.`OrderID`, `od`.`ProductID`, `od`.`Discount`, `od`.`Quantity`, `od`.`UnitPrice` FROM `Order Details` AS `od` WHERE {AssertSqlHelper.Parameter("@_outer_OrderID")} = `od`.`OrderID`", // $@"{AssertSqlHelper.Declaration("@_outer_OrderID='10952'")} SELECT `od`.`OrderID`, `od`.`ProductID`, `od`.`Discount`, `od`.`Quantity`, `od`.`UnitPrice` FROM `Order Details` AS `od` WHERE {AssertSqlHelper.Parameter("@_outer_OrderID")} = `od`.`OrderID`", // $@"{AssertSqlHelper.Declaration("@_outer_OrderID='11011'")} SELECT `od`.`OrderID`, `od`.`ProductID`, `od`.`Discount`, `od`.`Quantity`, `od`.`UnitPrice` FROM `Order Details` AS `od` WHERE {AssertSqlHelper.Parameter("@_outer_OrderID")} = `od`.`OrderID`"); } public override async Task Navigation_projection_on_groupjoin_qsre_no_outer_in_final_result(bool isAsync) { await base.Navigation_projection_on_groupjoin_qsre_no_outer_in_final_result(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` FROM `Customers` AS `c` LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` WHERE `c`.`CustomerID` = 'ALFKI' ORDER BY `c`.`CustomerID`", // $@"{AssertSqlHelper.Declaration("@_outer_OrderID='10643'")} SELECT `od`.`OrderID`, `od`.`ProductID`, `od`.`Discount`, `od`.`Quantity`, `od`.`UnitPrice` FROM `Order Details` AS `od` WHERE {AssertSqlHelper.Parameter("@_outer_OrderID")} = `od`.`OrderID`", // $@"{AssertSqlHelper.Declaration("@_outer_OrderID='10692'")} SELECT `od`.`OrderID`, `od`.`ProductID`, `od`.`Discount`, `od`.`Quantity`, `od`.`UnitPrice` FROM `Order Details` AS `od` WHERE {AssertSqlHelper.Parameter("@_outer_OrderID")} = `od`.`OrderID`", // $@"{AssertSqlHelper.Declaration("@_outer_OrderID='10702'")} SELECT `od`.`OrderID`, `od`.`ProductID`, `od`.`Discount`, `od`.`Quantity`, `od`.`UnitPrice` FROM `Order Details` AS `od` WHERE {AssertSqlHelper.Parameter("@_outer_OrderID")} = `od`.`OrderID`", // $@"{AssertSqlHelper.Declaration("@_outer_OrderID='10835'")} SELECT `od`.`OrderID`, `od`.`ProductID`, `od`.`Discount`, `od`.`Quantity`, `od`.`UnitPrice` FROM `Order Details` AS `od` WHERE {AssertSqlHelper.Parameter("@_outer_OrderID")} = `od`.`OrderID`", // $@"{AssertSqlHelper.Declaration("@_outer_OrderID='10952'")} SELECT `od`.`OrderID`, `od`.`ProductID`, `od`.`Discount`, `od`.`Quantity`, `od`.`UnitPrice` FROM `Order Details` AS `od` WHERE {AssertSqlHelper.Parameter("@_outer_OrderID")} = `od`.`OrderID`", // $@"{AssertSqlHelper.Declaration("@_outer_OrderID='11011'")} SELECT `od`.`OrderID`, `od`.`ProductID`, `od`.`Discount`, `od`.`Quantity`, `od`.`UnitPrice` FROM `Order Details` AS `od` WHERE {AssertSqlHelper.Parameter("@_outer_OrderID")} = `od`.`OrderID`"); } public override async Task Navigation_projection_on_groupjoin_qsre_with_empty_grouping(bool isAsync) { await base.Navigation_projection_on_groupjoin_qsre_with_empty_grouping(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` FROM `Customers` AS `c` LEFT JOIN ( SELECT `oo`.`OrderID`, `oo`.`CustomerID`, `oo`.`EmployeeID`, `oo`.`OrderDate` FROM `Orders` AS `oo` WHERE `oo`.`OrderID` NOT IN (10308, 10625, 10759, 10926) ) AS `t` ON `c`.`CustomerID` = `t`.`CustomerID` WHERE `c`.`CustomerID` LIKE 'A' & '%' ORDER BY `c`.`CustomerID`", // $@"{AssertSqlHelper.Declaration("@_outer_OrderID='10643'")} SELECT `od`.`OrderID`, `od`.`ProductID`, `od`.`Discount`, `od`.`Quantity`, `od`.`UnitPrice` FROM `Order Details` AS `od` WHERE {AssertSqlHelper.Parameter("@_outer_OrderID")} = `od`.`OrderID`", // $@"{AssertSqlHelper.Declaration("@_outer_OrderID='10692'")} SELECT `od`.`OrderID`, `od`.`ProductID`, `od`.`Discount`, `od`.`Quantity`, `od`.`UnitPrice` FROM `Order Details` AS `od` WHERE {AssertSqlHelper.Parameter("@_outer_OrderID")} = `od`.`OrderID`", // $@"{AssertSqlHelper.Declaration("@_outer_OrderID='10702'")} SELECT `od`.`OrderID`, `od`.`ProductID`, `od`.`Discount`, `od`.`Quantity`, `od`.`UnitPrice` FROM `Order Details` AS `od` WHERE {AssertSqlHelper.Parameter("@_outer_OrderID")} = `od`.`OrderID`", // $@"{AssertSqlHelper.Declaration("@_outer_OrderID='10835'")} SELECT `od`.`OrderID`, `od`.`ProductID`, `od`.`Discount`, `od`.`Quantity`, `od`.`UnitPrice` FROM `Order Details` AS `od` WHERE {AssertSqlHelper.Parameter("@_outer_OrderID")} = `od`.`OrderID`", // $@"{AssertSqlHelper.Declaration("@_outer_OrderID='10952'")} SELECT `od`.`OrderID`, `od`.`ProductID`, `od`.`Discount`, `od`.`Quantity`, `od`.`UnitPrice` FROM `Order Details` AS `od` WHERE {AssertSqlHelper.Parameter("@_outer_OrderID")} = `od`.`OrderID`", // $@"{AssertSqlHelper.Declaration("@_outer_OrderID='11011'")} SELECT `od`.`OrderID`, `od`.`ProductID`, `od`.`Discount`, `od`.`Quantity`, `od`.`UnitPrice` FROM `Order Details` AS `od` WHERE {AssertSqlHelper.Parameter("@_outer_OrderID")} = `od`.`OrderID`", // $@"{AssertSqlHelper.Declaration("@_outer_OrderID='10365'")} SELECT `od`.`OrderID`, `od`.`ProductID`, `od`.`Discount`, `od`.`Quantity`, `od`.`UnitPrice` FROM `Order Details` AS `od` WHERE {AssertSqlHelper.Parameter("@_outer_OrderID")} = `od`.`OrderID`", // $@"{AssertSqlHelper.Declaration("@_outer_OrderID='10507'")} SELECT `od`.`OrderID`, `od`.`ProductID`, `od`.`Discount`, `od`.`Quantity`, `od`.`UnitPrice` FROM `Order Details` AS `od` WHERE {AssertSqlHelper.Parameter("@_outer_OrderID")} = `od`.`OrderID`"); } public override void Include_on_inner_projecting_groupjoin() { base.Include_on_inner_projecting_groupjoin(); AssertSql( $@"SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`, `oo`.`OrderID`, `oo`.`CustomerID`, `oo`.`EmployeeID`, `oo`.`OrderDate` FROM `Customers` AS `c` LEFT JOIN `Orders` AS `oo` ON `c`.`CustomerID` = `oo`.`CustomerID` WHERE `c`.`CustomerID` = 'ALFKI' ORDER BY `c`.`CustomerID`", // $@"{AssertSqlHelper.Declaration("@_outer_OrderID='10643'")} SELECT `od`.`OrderID`, `od`.`ProductID`, `od`.`Discount`, `od`.`Quantity`, `od`.`UnitPrice` FROM `Order Details` AS `od` WHERE {AssertSqlHelper.Parameter("@_outer_OrderID")} = `od`.`OrderID`", // $@"{AssertSqlHelper.Declaration("@_outer_OrderID='10692'")} SELECT `od`.`OrderID`, `od`.`ProductID`, `od`.`Discount`, `od`.`Quantity`, `od`.`UnitPrice` FROM `Order Details` AS `od` WHERE {AssertSqlHelper.Parameter("@_outer_OrderID")} = `od`.`OrderID`", // $@"{AssertSqlHelper.Declaration("@_outer_OrderID='10702'")} SELECT `od`.`OrderID`, `od`.`ProductID`, `od`.`Discount`, `od`.`Quantity`, `od`.`UnitPrice` FROM `Order Details` AS `od` WHERE {AssertSqlHelper.Parameter("@_outer_OrderID")} = `od`.`OrderID`", // $@"{AssertSqlHelper.Declaration("@_outer_OrderID='10835'")} SELECT `od`.`OrderID`, `od`.`ProductID`, `od`.`Discount`, `od`.`Quantity`, `od`.`UnitPrice` FROM `Order Details` AS `od` WHERE {AssertSqlHelper.Parameter("@_outer_OrderID")} = `od`.`OrderID`", // $@"{AssertSqlHelper.Declaration("@_outer_OrderID='10952'")} SELECT `od`.`OrderID`, `od`.`ProductID`, `od`.`Discount`, `od`.`Quantity`, `od`.`UnitPrice` FROM `Order Details` AS `od` WHERE {AssertSqlHelper.Parameter("@_outer_OrderID")} = `od`.`OrderID`", // $@"{AssertSqlHelper.Declaration("@_outer_OrderID='11011'")} SELECT `od`.`OrderID`, `od`.`ProductID`, `od`.`Discount`, `od`.`Quantity`, `od`.`UnitPrice` FROM `Order Details` AS `od` WHERE {AssertSqlHelper.Parameter("@_outer_OrderID")} = `od`.`OrderID`"); } public override void Include_on_inner_projecting_groupjoin_complex() { base.Include_on_inner_projecting_groupjoin_complex(); 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` FROM `Customers` AS `c` LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` WHERE `c`.`CustomerID` = 'ALFKI' ORDER BY `c`.`CustomerID`", // $@"{AssertSqlHelper.Declaration("@_outer_OrderID='10643'")} SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, [o.Product].`ProductID`, [o.Product].`Discontinued`, [o.Product].`ProductName`, [o.Product].`SupplierID`, [o.Product].`UnitPrice`, [o.Product].`UnitsInStock` FROM `Order Details` AS `o0` INNER JOIN `Products` AS [o.Product] ON `o0`.`ProductID` = [o.Product].`ProductID` WHERE {AssertSqlHelper.Parameter("@_outer_OrderID")} = `o0`.`OrderID`", // $@"{AssertSqlHelper.Declaration("@_outer_OrderID='10692'")} SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, [o.Product].`ProductID`, [o.Product].`Discontinued`, [o.Product].`ProductName`, [o.Product].`SupplierID`, [o.Product].`UnitPrice`, [o.Product].`UnitsInStock` FROM `Order Details` AS `o0` INNER JOIN `Products` AS [o.Product] ON `o0`.`ProductID` = [o.Product].`ProductID` WHERE {AssertSqlHelper.Parameter("@_outer_OrderID")} = `o0`.`OrderID`", // $@"{AssertSqlHelper.Declaration("@_outer_OrderID='10702'")} SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, [o.Product].`ProductID`, [o.Product].`Discontinued`, [o.Product].`ProductName`, [o.Product].`SupplierID`, [o.Product].`UnitPrice`, [o.Product].`UnitsInStock` FROM `Order Details` AS `o0` INNER JOIN `Products` AS [o.Product] ON `o0`.`ProductID` = [o.Product].`ProductID` WHERE {AssertSqlHelper.Parameter("@_outer_OrderID")} = `o0`.`OrderID`", // $@"{AssertSqlHelper.Declaration("@_outer_OrderID='10835'")} SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, [o.Product].`ProductID`, [o.Product].`Discontinued`, [o.Product].`ProductName`, [o.Product].`SupplierID`, [o.Product].`UnitPrice`, [o.Product].`UnitsInStock` FROM `Order Details` AS `o0` INNER JOIN `Products` AS [o.Product] ON `o0`.`ProductID` = [o.Product].`ProductID` WHERE {AssertSqlHelper.Parameter("@_outer_OrderID")} = `o0`.`OrderID`", // $@"{AssertSqlHelper.Declaration("@_outer_OrderID='10952'")} SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, [o.Product].`ProductID`, [o.Product].`Discontinued`, [o.Product].`ProductName`, [o.Product].`SupplierID`, [o.Product].`UnitPrice`, [o.Product].`UnitsInStock` FROM `Order Details` AS `o0` INNER JOIN `Products` AS [o.Product] ON `o0`.`ProductID` = [o.Product].`ProductID` WHERE {AssertSqlHelper.Parameter("@_outer_OrderID")} = `o0`.`OrderID`", // $@"{AssertSqlHelper.Declaration("@_outer_OrderID='11011'")} SELECT `o0`.`OrderID`, `o0`.`ProductID`, `o0`.`Discount`, `o0`.`Quantity`, `o0`.`UnitPrice`, [o.Product].`ProductID`, [o.Product].`Discontinued`, [o.Product].`ProductName`, [o.Product].`SupplierID`, [o.Product].`UnitPrice`, [o.Product].`UnitsInStock` FROM `Order Details` AS `o0` INNER JOIN `Products` AS [o.Product] ON `o0`.`ProductID` = [o.Product].`ProductID` WHERE {AssertSqlHelper.Parameter("@_outer_OrderID")} = `o0`.`OrderID`"); } public override async Task Group_join_doesnt_get_bound_directly_to_group_join_qsre(bool isAsync) { await base.Group_join_doesnt_get_bound_directly_to_group_join_qsre(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` FROM `Customers` AS `c` LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID` WHERE `c`.`CustomerID` LIKE 'A' & '%' ORDER BY `c`.`CustomerID`"); } public override async Task Multiple_include_with_multiple_optional_navigations(bool isAsync) { await base.Multiple_include_with_multiple_optional_navigations(isAsync); AssertSql( $@"SELECT `o`.`OrderID`, `o`.`ProductID`, `o`.`Discount`, `o`.`Quantity`, `o`.`UnitPrice`, `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`, `p`.`ProductID`, `p`.`Discontinued`, `p`.`ProductName`, `p`.`SupplierID`, `p`.`UnitPrice`, `p`.`UnitsInStock` FROM `Order Details` AS `o` INNER JOIN `Orders` AS `o0` ON `o`.`OrderID` = `o0`.`OrderID` LEFT JOIN `Customers` AS `c` ON `o0`.`CustomerID` = `c`.`CustomerID` INNER JOIN `Products` AS `p` ON `o`.`ProductID` = `p`.`ProductID` WHERE `c`.`City` = 'London'"); } private void AssertSql(params string[] expected) => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); protected override void ClearLog() => Fixture.TestSqlLoggerFactory.Clear(); } }