You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
EntityFrameworkCore.Jet/test/EFCore.Jet.FunctionalTests/Query/SimpleQueryJetTest.JoinGrou...

590 lines
25 KiB
C#

// 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 Xunit;
namespace EntityFrameworkCore.Jet.FunctionalTests.Query
{
public partial class SimpleQueryJetTest
{
public override async Task Join_customers_orders_projection(bool isAsync)
{
await base.Join_customers_orders_projection(isAsync);
AssertSql(
$@"SELECT `c`.`ContactName`, `o`.`OrderID`
FROM `Customers` AS `c`
INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`");
}
public override async Task Join_customers_orders_entities(bool isAsync)
{
await base.Join_customers_orders_entities(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`
INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`");
}
public override async Task Join_select_many(bool isAsync)
{
await base.Join_select_many(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`, `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title`
FROM `Customers` AS `c`
INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`,
`Employees` AS `e`");
}
public override async Task Client_Join_select_many(bool isAsync)
{
await base.Client_Join_select_many(isAsync);
AssertSql(
$@"{AssertSqlHelper.Declaration("@__p_0='2'")}
SELECT `t0`.`EmployeeID`, `t0`.`City`, `t0`.`Country`, `t0`.`FirstName`, `t0`.`ReportsTo`, `t0`.`Title`
FROM (
SELECT TOP {AssertSqlHelper.Parameter("@__p_0")} `e0`.`EmployeeID`, `e0`.`City`, `e0`.`Country`, `e0`.`FirstName`, `e0`.`ReportsTo`, `e0`.`Title`
FROM `Employees` AS `e0`
ORDER BY `e0`.`EmployeeID`
) AS `t0`",
//
$@"{AssertSqlHelper.Declaration("@__p_0='2'")}
SELECT `t`.`EmployeeID`, `t`.`City`, `t`.`Country`, `t`.`FirstName`, `t`.`ReportsTo`, `t`.`Title`
FROM (
SELECT TOP {AssertSqlHelper.Parameter("@__p_0")} `e`.`EmployeeID`, `e`.`City`, `e`.`Country`, `e`.`FirstName`, `e`.`ReportsTo`, `e`.`Title`
FROM `Employees` AS `e`
ORDER BY `e`.`EmployeeID`
) AS `t`",
//
$@"SELECT `t1`.`EmployeeID`, `t1`.`City`, `t1`.`Country`, `t1`.`FirstName`, `t1`.`ReportsTo`, `t1`.`Title`
FROM (
SELECT `e1`.`EmployeeID`, `e1`.`City`, `e1`.`Country`, `e1`.`FirstName`, `e1`.`ReportsTo`, `e1`.`Title`
FROM `Employees` AS `e1`
ORDER BY `e1`.`EmployeeID`
SKIP 6 FETCH NEXT 2 ROWS ONLY
) AS `t1`",
//
$@"SELECT `t1`.`EmployeeID`, `t1`.`City`, `t1`.`Country`, `t1`.`FirstName`, `t1`.`ReportsTo`, `t1`.`Title`
FROM (
SELECT `e1`.`EmployeeID`, `e1`.`City`, `e1`.`Country`, `e1`.`FirstName`, `e1`.`ReportsTo`, `e1`.`Title`
FROM `Employees` AS `e1`
ORDER BY `e1`.`EmployeeID`
SKIP 6 FETCH NEXT 2 ROWS ONLY
) AS `t1`");
}
public override async Task Join_customers_orders_select(bool isAsync)
{
await base.Join_customers_orders_select(isAsync);
AssertSql(
$@"SELECT `c`.`ContactName`, `o`.`OrderID`
FROM `Customers` AS `c`
INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`");
}
public override async Task Join_customers_orders_with_subquery(bool isAsync)
{
await base.Join_customers_orders_with_subquery(isAsync);
AssertSql(
$@"SELECT `c`.`ContactName`, `t`.`OrderID`
FROM `Customers` AS `c`
INNER JOIN (
SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`
FROM `Orders` AS `o`
) AS `t` ON `c`.`CustomerID` = `t`.`CustomerID`
WHERE `t`.`CustomerID` = 'ALFKI'");
}
public override async Task Join_customers_orders_with_subquery_with_take(bool isAsync)
{
await base.Join_customers_orders_with_subquery_with_take(isAsync);
AssertSql(
$@"{AssertSqlHelper.Declaration("@__p_0='5'")}
SELECT `c`.`ContactName`, `t`.`OrderID`
FROM `Customers` AS `c`
INNER JOIN (
SELECT TOP {AssertSqlHelper.Parameter("@__p_0")} `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` = 'ALFKI'");
}
public override async Task Join_customers_orders_with_subquery_anonymous_property_method(bool isAsync)
{
await base.Join_customers_orders_with_subquery_anonymous_property_method(isAsync);
AssertSql(
$@"SELECT `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate`
FROM `Customers` AS `c`
INNER JOIN (
SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`
FROM `Orders` AS `o`
) AS `t` ON `c`.`CustomerID` = `t`.`CustomerID`
WHERE `t`.`CustomerID` = 'ALFKI'");
}
public override async Task Join_customers_orders_with_subquery_anonymous_property_method_with_take(bool isAsync)
{
await base.Join_customers_orders_with_subquery_anonymous_property_method_with_take(isAsync);
AssertSql(
$@"{AssertSqlHelper.Declaration("@__p_0='5'")}
SELECT `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate`
FROM `Customers` AS `c`
INNER JOIN (
SELECT TOP {AssertSqlHelper.Parameter("@__p_0")} `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` = 'ALFKI'");
}
public override async Task Join_customers_orders_with_subquery_predicate(bool isAsync)
{
await base.Join_customers_orders_with_subquery_predicate(isAsync);
AssertSql(
$@"SELECT `c`.`ContactName`, `t`.`OrderID`
FROM `Customers` AS `c`
INNER JOIN (
SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`
FROM `Orders` AS `o`
WHERE `o`.`OrderID` > 0
) AS `t` ON `c`.`CustomerID` = `t`.`CustomerID`
WHERE `t`.`CustomerID` = 'ALFKI'");
}
public override async Task Join_customers_orders_with_subquery_predicate_with_take(bool isAsync)
{
await base.Join_customers_orders_with_subquery_predicate_with_take(isAsync);
AssertSql(
$@"{AssertSqlHelper.Declaration("@__p_0='5'")}
SELECT `c`.`ContactName`, `t`.`OrderID`
FROM `Customers` AS `c`
INNER JOIN (
SELECT TOP {AssertSqlHelper.Parameter("@__p_0")} `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`
FROM `Orders` AS `o`
WHERE `o`.`OrderID` > 0
ORDER BY `o`.`OrderID`
) AS `t` ON `c`.`CustomerID` = `t`.`CustomerID`
WHERE `t`.`CustomerID` = 'ALFKI'");
}
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`
FROM `Customers` AS `c`
INNER JOIN `Orders` AS `o` ON (`c`.`CustomerID` = `o`.`CustomerID`) AND (`c`.`CustomerID` = `o`.`CustomerID`)");
}
public override async Task Join_complex_condition(bool isAsync)
{
await base.Join_complex_condition(isAsync);
AssertSql(
$@"SELECT `c`.`CustomerID`
FROM `Customers` AS `c`
INNER JOIN (
SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`
FROM `Orders` AS `o`
WHERE `o`.`OrderID` < 10250
) AS `t` ON True = True
WHERE `c`.`CustomerID` = 'ALFKI'");
}
public override async Task Join_client_new_expression(bool isAsync)
{
await base.Join_client_new_expression(isAsync);
AssertSql(
$@"SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`
FROM `Orders` AS `o`",
//
$@"SELECT `c`.`CustomerID`, `c`.`Address`, `c`.`City`, `c`.`CompanyName`, `c`.`ContactName`, `c`.`ContactTitle`, `c`.`Country`, `c`.`Fax`, `c`.`Phone`, `c`.`PostalCode`, `c`.`Region`
FROM `Customers` AS `c`");
}
public override async Task Join_same_collection_multiple(bool isAsync)
{
await base.Join_same_collection_multiple(isAsync);
AssertSql(
$@"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 `c`
INNER JOIN `Customers` AS `c0` ON `c`.`CustomerID` = `c0`.`CustomerID`)
INNER JOIN `Customers` AS `c1` ON `c`.`CustomerID` = `c1`.`CustomerID`");
}
public override async Task Join_same_collection_force_alias_uniquefication(bool isAsync)
{
await base.Join_same_collection_force_alias_uniquefication(isAsync);
AssertSql(
$@"SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`
FROM `Orders` AS `o`
INNER JOIN `Orders` AS `o0` ON `o`.`CustomerID` = `o0`.`CustomerID`");
}
public override async Task GroupJoin_customers_orders_count(bool isAsync)
{
await base.GroupJoin_customers_orders_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`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`
FROM `Customers` AS `c`
LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`
ORDER BY `c`.`CustomerID`");
}
public override async Task GroupJoin_customers_orders_count_preserves_ordering(bool isAsync)
{
await base.GroupJoin_customers_orders_count_preserves_ordering(isAsync);
AssertSql(
$@"{AssertSqlHelper.Declaration("@__p_0='5'")}
SELECT `t`.`CustomerID`, `t`.`Address`, `t`.`City`, `t`.`CompanyName`, `t`.`ContactName`, `t`.`ContactTitle`, `t`.`Country`, `t`.`Fax`, `t`.`Phone`, `t`.`PostalCode`, `t`.`Region`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`
FROM (
SELECT TOP {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` NOT IN ('VAFFE', 'DRACD')
ORDER BY `c`.`City`
) AS `t`
LEFT JOIN `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID`
ORDER BY `t`.`City`, `t`.`CustomerID`");
}
public override async Task GroupJoin_simple(bool isAsync)
{
await base.GroupJoin_simple(isAsync);
AssertSql(
$@"SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`
FROM `Customers` AS `c`
INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`");
}
public override async Task GroupJoin_simple2(bool isAsync)
{
await base.GroupJoin_simple2(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`
INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`");
}
public override async Task GroupJoin_simple3(bool isAsync)
{
await base.GroupJoin_simple3(isAsync);
AssertSql(
$@"SELECT `o`.`OrderID`
FROM `Customers` AS `c`
INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`");
}
public override async Task GroupJoin_tracking_groups(bool isAsync)
{
await base.GroupJoin_tracking_groups(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`
ORDER BY `c`.`CustomerID`");
}
public override async Task GroupJoin_tracking_groups2(bool isAsync)
{
await base.GroupJoin_tracking_groups2(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`
ORDER BY `c`.`CustomerID`");
}
public override async Task GroupJoin_simple_ordering(bool isAsync)
{
await base.GroupJoin_simple_ordering(isAsync);
AssertSql(
$@"SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`
FROM `Customers` AS `c`
INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`
ORDER BY `c`.`City`");
}
public override async Task GroupJoin_simple_subquery(bool isAsync)
{
await base.GroupJoin_simple_subquery(isAsync);
AssertSql(
$@"{AssertSqlHelper.Declaration("@__p_0='4'")}
SELECT `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate`
FROM `Customers` AS `c`
INNER JOIN (
SELECT TOP {AssertSqlHelper.Parameter("@__p_0")} `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`
FROM `Orders` AS `o`
ORDER BY `o`.`OrderID`
) AS `t` ON `c`.`CustomerID` = `t`.`CustomerID`");
}
public override async Task GroupJoin_DefaultIfEmpty(bool isAsync)
{
await base.GroupJoin_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`
FROM `Customers` AS `c`
LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`");
}
public override async Task GroupJoin_DefaultIfEmpty_multiple(bool isAsync)
{
await base.GroupJoin_DefaultIfEmpty_multiple(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`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`
FROM `Customers` AS `c`
LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`
LEFT JOIN `Orders` AS `o0` ON `c`.`CustomerID` = `o0`.`CustomerID`");
}
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`, `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`
FROM `Employees` AS `e`
LEFT JOIN `Orders` AS `o` ON `e`.`EmployeeID` = `o`.`EmployeeID`");
}
public override async Task GroupJoin_DefaultIfEmpty3(bool isAsync)
{
await base.GroupJoin_DefaultIfEmpty3(isAsync);
AssertSql(
$@"{AssertSqlHelper.Declaration("@__p_0='1'")}
SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`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 `Orders` AS `o` ON `t`.`CustomerID` = `o`.`CustomerID`
ORDER BY `t`.`CustomerID`");
}
public override async Task GroupJoin_Where(bool isAsync)
{
await base.GroupJoin_Where(isAsync);
AssertSql(
$@"SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`
FROM `Customers` AS `c`
INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`
WHERE `o`.`CustomerID` = 'ALFKI'");
}
public override async Task GroupJoin_Where_OrderBy(bool isAsync)
{
await base.GroupJoin_Where_OrderBy(isAsync);
AssertSql(
$@"SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`
FROM `Customers` AS `c`
INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`
WHERE (`o`.`CustomerID` = 'ALFKI') OR (`c`.`CustomerID` = 'ANATR')
ORDER BY `c`.`City`");
}
public override async Task GroupJoin_DefaultIfEmpty_Where(bool isAsync)
{
await base.GroupJoin_DefaultIfEmpty_Where(isAsync);
AssertSql(
$@"SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`
FROM `Customers` AS `c`
LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`
WHERE `o`.`OrderID` IS NOT NULL AND (`o`.`CustomerID` = 'ALFKI')");
}
public override async Task Join_GroupJoin_DefaultIfEmpty_Where(bool isAsync)
{
await base.Join_GroupJoin_DefaultIfEmpty_Where(isAsync);
AssertSql(
$@"SELECT `o2`.`OrderID`, `o2`.`CustomerID`, `o2`.`EmployeeID`, `o2`.`OrderDate`
FROM `Customers` AS `c`
INNER JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`
LEFT JOIN `Orders` AS `o2` ON `c`.`CustomerID` = `o2`.`CustomerID`
WHERE `o2`.`OrderID` IS NOT NULL AND (`o2`.`CustomerID` = 'ALFKI')");
}
public override async Task GroupJoin_DefaultIfEmpty_Project(bool isAsync)
{
await base.GroupJoin_DefaultIfEmpty_Project(isAsync);
AssertSql(
$@"SELECT `o`.`OrderID`
FROM `Customers` AS `c`
LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`");
}
public override async Task GroupJoin_with_different_outer_elements_with_same_key(bool isAsync)
{
await base.GroupJoin_with_different_outer_elements_with_same_key(isAsync);
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`");
}
public override async Task GroupJoin_with_different_outer_elements_with_same_key_with_predicate(bool isAsync)
{
await base.GroupJoin_with_different_outer_elements_with_same_key_with_predicate(isAsync);
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 `o`.`OrderID` > 11500");
}
public override async Task GroupJoin_with_different_outer_elements_with_same_key_projected_from_another_entity(bool isAsync)
{
await base.GroupJoin_with_different_outer_elements_with_same_key_projected_from_another_entity(isAsync);
AssertSql(
$@"SELECT `od`.`OrderID`, `od`.`ProductID`, `od`.`Discount`, `od`.`Quantity`, `od`.`UnitPrice`, `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 `od`
INNER JOIN `Orders` AS [od.Order] ON `od`.`OrderID` = [od.Order].`OrderID`
LEFT JOIN `Customers` AS `c` ON [od.Order].`CustomerID` = `c`.`CustomerID`");
}
public override async Task GroupJoin_SelectMany_subquery_with_filter(bool isAsync)
{
await base.GroupJoin_SelectMany_subquery_with_filter(isAsync);
AssertSql(
$@"SELECT `c`.`ContactName`, `t`.`OrderID`
FROM `Customers` AS `c`
INNER 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`");
}
public override async Task GroupJoin_SelectMany_subquery_with_filter_orderby(bool isAsync)
{
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`
FROM `Customers` AS `c`
LEFT JOIN `Orders` AS `o` ON `c`.`CustomerID` = `o`.`CustomerID`
ORDER BY `c`.`CustomerID`");
}
public override async Task GroupJoin_SelectMany_subquery_with_filter_and_DefaultIfEmpty(bool isAsync)
{
await base.GroupJoin_SelectMany_subquery_with_filter_and_DefaultIfEmpty(isAsync);
AssertSql(
$@"SELECT `c`.`ContactName`, `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`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`");
}
public override async Task GroupJoin_SelectMany_subquery_with_filter_orderby_and_DefaultIfEmpty(bool isAsync)
{
await base.GroupJoin_SelectMany_subquery_with_filter_orderby_and_DefaultIfEmpty(isAsync);
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`
ORDER BY `c`.`CustomerID`");
}
public override async Task GroupJoin_with_order_by_key_descending1(bool isAsync)
{
await base.GroupJoin_with_order_by_key_descending1(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 GroupJoin_with_order_by_key_descending2(bool isAsync)
{
await base.GroupJoin_with_order_by_key_descending2(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 GroupJoin_Subquery_with_Take_Then_SelectMany_Where(bool isAsync)
{
await base.GroupJoin_Subquery_with_Take_Then_SelectMany_Where(isAsync);
AssertSql(
$@"{AssertSqlHelper.Declaration("@__p_0='100'")}
SELECT `c`.`CustomerID`, `t0`.`OrderID`
FROM `Customers` AS `c`
INNER JOIN (
SELECT `t`.`OrderID`, `t`.`CustomerID`, `t`.`EmployeeID`, `t`.`OrderDate`
FROM (
SELECT TOP {AssertSqlHelper.Parameter("@__p_0")} `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`
FROM `Orders` AS `o`
ORDER BY `o`.`OrderID`
) AS `t`
WHERE `t`.`CustomerID` IS NOT NULL AND (`t`.`CustomerID` LIKE 'A' & '%')
) AS `t0` ON `c`.`CustomerID` = `t0`.`CustomerID`");
}
[ConditionalTheory(Skip = "Can be supported after rearranging CROSS JOIN/JOIN expressions.")]
public override Task GroupJoin_subquery_projection_outer_mixed(bool isAsync)
{
return base.GroupJoin_subquery_projection_outer_mixed(isAsync);
}
}
}