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.
307 lines
22 KiB
C#
307 lines
22 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 Microsoft.EntityFrameworkCore.Query;
|
|
using Xunit.Abstractions;
|
|
|
|
namespace EntityFrameworkCore.Jet.FunctionalTests.Query
|
|
{
|
|
public class ComplexNavigationsWeakQueryJetTest : ComplexNavigationsWeakQueryTestBase<ComplexNavigationsWeakQueryJetFixture>
|
|
{
|
|
public ComplexNavigationsWeakQueryJetTest(
|
|
ComplexNavigationsWeakQueryJetFixture fixture, ITestOutputHelper testOutputHelper)
|
|
: base(fixture)
|
|
{
|
|
Fixture.TestSqlLoggerFactory.Clear();
|
|
//Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper);
|
|
}
|
|
|
|
public override async Task Simple_level1_include(bool isAsync)
|
|
{
|
|
await base.Simple_level1_include(isAsync);
|
|
|
|
AssertSql(
|
|
$@"SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `t`.`Id`, `t`.`OneToOne_Required_PK_Date`, `t`.`Level1_Optional_Id`, `t`.`Level1_Required_Id`, `t`.`Level2_Name`, `t`.`OneToMany_Optional_Inverse2Id`, `t`.`OneToMany_Required_Inverse2Id`, `t`.`OneToOne_Optional_PK_Inverse2Id`
|
|
FROM `Level1` AS `l`
|
|
LEFT JOIN (
|
|
SELECT `l0`.`Id`, `l0`.`OneToOne_Required_PK_Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Level2_Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`Id` AS `Id0`
|
|
FROM `Level1` AS `l0`
|
|
INNER JOIN `Level1` AS `l1` ON `l0`.`Id` = `l1`.`Id`
|
|
WHERE `l0`.`OneToMany_Required_Inverse2Id` IS NOT NULL AND (`l0`.`Level1_Required_Id` IS NOT NULL AND `l0`.`OneToOne_Required_PK_Date` IS NOT NULL)
|
|
) AS `t` ON `l`.`Id` = `t`.`Id`");
|
|
}
|
|
|
|
public override async Task Simple_level1(bool isAsync)
|
|
{
|
|
await base.Simple_level1(isAsync);
|
|
|
|
AssertSql(
|
|
$@"SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`
|
|
FROM `Level1` AS `l`");
|
|
}
|
|
|
|
public override async Task Simple_level1_level2_include(bool isAsync)
|
|
{
|
|
await base.Simple_level1_level2_include(isAsync);
|
|
|
|
AssertSql(
|
|
$@"SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `t`.`Id`, `t`.`OneToOne_Required_PK_Date`, `t`.`Level1_Optional_Id`, `t`.`Level1_Required_Id`, `t`.`Level2_Name`, `t`.`OneToMany_Optional_Inverse2Id`, `t`.`OneToMany_Required_Inverse2Id`, `t`.`OneToOne_Optional_PK_Inverse2Id`, `t1`.`Id`, `t1`.`Level2_Optional_Id`, `t1`.`Level2_Required_Id`, `t1`.`Level3_Name`, `t1`.`OneToMany_Optional_Inverse3Id`, `t1`.`OneToMany_Required_Inverse3Id`, `t1`.`OneToOne_Optional_PK_Inverse3Id`
|
|
FROM `Level1` AS `l`
|
|
LEFT JOIN (
|
|
SELECT `l0`.`Id`, `l0`.`OneToOne_Required_PK_Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Level2_Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`Id` AS `Id0`
|
|
FROM `Level1` AS `l0`
|
|
INNER JOIN `Level1` AS `l1` ON `l0`.`Id` = `l1`.`Id`
|
|
WHERE `l0`.`OneToMany_Required_Inverse2Id` IS NOT NULL AND (`l0`.`Level1_Required_Id` IS NOT NULL AND `l0`.`OneToOne_Required_PK_Date` IS NOT NULL)
|
|
) AS `t` ON `l`.`Id` = `t`.`Id`
|
|
LEFT JOIN (
|
|
SELECT `l2`.`Id`, `l2`.`Level2_Optional_Id`, `l2`.`Level2_Required_Id`, `l2`.`Level3_Name`, `l2`.`OneToMany_Optional_Inverse3Id`, `l2`.`OneToMany_Required_Inverse3Id`, `l2`.`OneToOne_Optional_PK_Inverse3Id`, `t0`.`Id` AS `Id0`, `t0`.`Id0` AS `Id00`
|
|
FROM `Level1` AS `l2`
|
|
INNER JOIN (
|
|
SELECT `l3`.`Id`, `l3`.`OneToOne_Required_PK_Date`, `l3`.`Level1_Optional_Id`, `l3`.`Level1_Required_Id`, `l3`.`Level2_Name`, `l3`.`OneToMany_Optional_Inverse2Id`, `l3`.`OneToMany_Required_Inverse2Id`, `l3`.`OneToOne_Optional_PK_Inverse2Id`, `l4`.`Id` AS `Id0`
|
|
FROM `Level1` AS `l3`
|
|
INNER JOIN `Level1` AS `l4` ON `l3`.`Id` = `l4`.`Id`
|
|
WHERE `l3`.`OneToMany_Required_Inverse2Id` IS NOT NULL AND (`l3`.`Level1_Required_Id` IS NOT NULL AND `l3`.`OneToOne_Required_PK_Date` IS NOT NULL)
|
|
) AS `t0` ON `l2`.`Id` = `t0`.`Id`
|
|
WHERE `l2`.`OneToMany_Required_Inverse3Id` IS NOT NULL AND `l2`.`Level2_Required_Id` IS NOT NULL
|
|
) AS `t1` ON `t`.`Id` = `t1`.`Id`");
|
|
}
|
|
|
|
public override async Task Simple_level1_level2_GroupBy_Count(bool isAsync)
|
|
{
|
|
await base.Simple_level1_level2_GroupBy_Count(isAsync);
|
|
|
|
AssertSql(
|
|
$@"SELECT COUNT(*)
|
|
FROM `Level1` AS `l`
|
|
LEFT JOIN (
|
|
SELECT `l0`.`Id`, `l0`.`OneToOne_Required_PK_Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Level2_Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`Id` AS `Id0`
|
|
FROM `Level1` AS `l0`
|
|
INNER JOIN `Level1` AS `l1` ON `l0`.`Id` = `l1`.`Id`
|
|
WHERE `l0`.`OneToMany_Required_Inverse2Id` IS NOT NULL AND (`l0`.`Level1_Required_Id` IS NOT NULL AND `l0`.`OneToOne_Required_PK_Date` IS NOT NULL)
|
|
) AS `t` ON `l`.`Id` = `t`.`Id`
|
|
LEFT JOIN (
|
|
SELECT `l2`.`Id`, `l2`.`Level2_Optional_Id`, `l2`.`Level2_Required_Id`, `l2`.`Level3_Name`, `l2`.`OneToMany_Optional_Inverse3Id`, `l2`.`OneToMany_Required_Inverse3Id`, `l2`.`OneToOne_Optional_PK_Inverse3Id`, `t0`.`Id` AS `Id0`, `t0`.`Id0` AS `Id00`
|
|
FROM `Level1` AS `l2`
|
|
INNER JOIN (
|
|
SELECT `l3`.`Id`, `l3`.`OneToOne_Required_PK_Date`, `l3`.`Level1_Optional_Id`, `l3`.`Level1_Required_Id`, `l3`.`Level2_Name`, `l3`.`OneToMany_Optional_Inverse2Id`, `l3`.`OneToMany_Required_Inverse2Id`, `l3`.`OneToOne_Optional_PK_Inverse2Id`, `l4`.`Id` AS `Id0`
|
|
FROM `Level1` AS `l3`
|
|
INNER JOIN `Level1` AS `l4` ON `l3`.`Id` = `l4`.`Id`
|
|
WHERE `l3`.`OneToMany_Required_Inverse2Id` IS NOT NULL AND (`l3`.`Level1_Required_Id` IS NOT NULL AND `l3`.`OneToOne_Required_PK_Date` IS NOT NULL)
|
|
) AS `t0` ON `l2`.`Id` = `t0`.`Id`
|
|
WHERE `l2`.`OneToMany_Required_Inverse3Id` IS NOT NULL AND `l2`.`Level2_Required_Id` IS NOT NULL
|
|
) AS `t1` ON `t`.`Id` = `t1`.`Id`
|
|
GROUP BY `t1`.`Level3_Name`");
|
|
}
|
|
|
|
public override async Task Simple_level1_level2_GroupBy_Having_Count(bool isAsync)
|
|
{
|
|
await base.Simple_level1_level2_GroupBy_Having_Count(isAsync);
|
|
|
|
AssertSql(
|
|
$@"SELECT COUNT(*)
|
|
FROM `Level1` AS `l`
|
|
LEFT JOIN (
|
|
SELECT `l0`.`Id`, `l0`.`OneToOne_Required_PK_Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Level2_Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`Id` AS `Id0`
|
|
FROM `Level1` AS `l0`
|
|
INNER JOIN `Level1` AS `l1` ON `l0`.`Id` = `l1`.`Id`
|
|
WHERE `l0`.`OneToMany_Required_Inverse2Id` IS NOT NULL AND (`l0`.`Level1_Required_Id` IS NOT NULL AND `l0`.`OneToOne_Required_PK_Date` IS NOT NULL)
|
|
) AS `t` ON `l`.`Id` = `t`.`Id`
|
|
LEFT JOIN (
|
|
SELECT `l2`.`Id`, `l2`.`Level2_Optional_Id`, `l2`.`Level2_Required_Id`, `l2`.`Level3_Name`, `l2`.`OneToMany_Optional_Inverse3Id`, `l2`.`OneToMany_Required_Inverse3Id`, `l2`.`OneToOne_Optional_PK_Inverse3Id`, `t0`.`Id` AS `Id0`, `t0`.`Id0` AS `Id00`
|
|
FROM `Level1` AS `l2`
|
|
INNER JOIN (
|
|
SELECT `l3`.`Id`, `l3`.`OneToOne_Required_PK_Date`, `l3`.`Level1_Optional_Id`, `l3`.`Level1_Required_Id`, `l3`.`Level2_Name`, `l3`.`OneToMany_Optional_Inverse2Id`, `l3`.`OneToMany_Required_Inverse2Id`, `l3`.`OneToOne_Optional_PK_Inverse2Id`, `l4`.`Id` AS `Id0`
|
|
FROM `Level1` AS `l3`
|
|
INNER JOIN `Level1` AS `l4` ON `l3`.`Id` = `l4`.`Id`
|
|
WHERE `l3`.`OneToMany_Required_Inverse2Id` IS NOT NULL AND (`l3`.`Level1_Required_Id` IS NOT NULL AND `l3`.`OneToOne_Required_PK_Date` IS NOT NULL)
|
|
) AS `t0` ON `l2`.`Id` = `t0`.`Id`
|
|
WHERE `l2`.`OneToMany_Required_Inverse3Id` IS NOT NULL AND `l2`.`Level2_Required_Id` IS NOT NULL
|
|
) AS `t1` ON `t`.`Id` = `t1`.`Id`
|
|
GROUP BY `t1`.`Level3_Name`
|
|
HAVING MIN(IIf(`t`.`Id` IS NULL, 0, `t`.`Id`)) > 0");
|
|
}
|
|
|
|
public override async Task Simple_level1_level2_level3_include(bool isAsync)
|
|
{
|
|
await base.Simple_level1_level2_level3_include(isAsync);
|
|
|
|
AssertSql(
|
|
$@"SELECT `l`.`Id`, `l`.`Date`, `l`.`Name`, `t`.`Id`, `t`.`OneToOne_Required_PK_Date`, `t`.`Level1_Optional_Id`, `t`.`Level1_Required_Id`, `t`.`Level2_Name`, `t`.`OneToMany_Optional_Inverse2Id`, `t`.`OneToMany_Required_Inverse2Id`, `t`.`OneToOne_Optional_PK_Inverse2Id`, `t1`.`Id`, `t1`.`Level2_Optional_Id`, `t1`.`Level2_Required_Id`, `t1`.`Level3_Name`, `t1`.`OneToMany_Optional_Inverse3Id`, `t1`.`OneToMany_Required_Inverse3Id`, `t1`.`OneToOne_Optional_PK_Inverse3Id`, `t4`.`Id`, `t4`.`Level3_Optional_Id`, `t4`.`Level3_Required_Id`, `t4`.`Level4_Name`, `t4`.`OneToMany_Optional_Inverse4Id`, `t4`.`OneToMany_Required_Inverse4Id`, `t4`.`OneToOne_Optional_PK_Inverse4Id`
|
|
FROM `Level1` AS `l`
|
|
LEFT JOIN (
|
|
SELECT `l0`.`Id`, `l0`.`OneToOne_Required_PK_Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Level2_Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`Id` AS `Id0`
|
|
FROM `Level1` AS `l0`
|
|
INNER JOIN `Level1` AS `l1` ON `l0`.`Id` = `l1`.`Id`
|
|
WHERE `l0`.`OneToMany_Required_Inverse2Id` IS NOT NULL AND (`l0`.`Level1_Required_Id` IS NOT NULL AND `l0`.`OneToOne_Required_PK_Date` IS NOT NULL)
|
|
) AS `t` ON `l`.`Id` = `t`.`Id`
|
|
LEFT JOIN (
|
|
SELECT `l2`.`Id`, `l2`.`Level2_Optional_Id`, `l2`.`Level2_Required_Id`, `l2`.`Level3_Name`, `l2`.`OneToMany_Optional_Inverse3Id`, `l2`.`OneToMany_Required_Inverse3Id`, `l2`.`OneToOne_Optional_PK_Inverse3Id`, `t0`.`Id` AS `Id0`, `t0`.`Id0` AS `Id00`
|
|
FROM `Level1` AS `l2`
|
|
INNER JOIN (
|
|
SELECT `l3`.`Id`, `l3`.`OneToOne_Required_PK_Date`, `l3`.`Level1_Optional_Id`, `l3`.`Level1_Required_Id`, `l3`.`Level2_Name`, `l3`.`OneToMany_Optional_Inverse2Id`, `l3`.`OneToMany_Required_Inverse2Id`, `l3`.`OneToOne_Optional_PK_Inverse2Id`, `l4`.`Id` AS `Id0`
|
|
FROM `Level1` AS `l3`
|
|
INNER JOIN `Level1` AS `l4` ON `l3`.`Id` = `l4`.`Id`
|
|
WHERE `l3`.`OneToMany_Required_Inverse2Id` IS NOT NULL AND (`l3`.`Level1_Required_Id` IS NOT NULL AND `l3`.`OneToOne_Required_PK_Date` IS NOT NULL)
|
|
) AS `t0` ON `l2`.`Id` = `t0`.`Id`
|
|
WHERE `l2`.`OneToMany_Required_Inverse3Id` IS NOT NULL AND `l2`.`Level2_Required_Id` IS NOT NULL
|
|
) AS `t1` ON `t`.`Id` = `t1`.`Id`
|
|
LEFT JOIN (
|
|
SELECT `l5`.`Id`, `l5`.`Level3_Optional_Id`, `l5`.`Level3_Required_Id`, `l5`.`Level4_Name`, `l5`.`OneToMany_Optional_Inverse4Id`, `l5`.`OneToMany_Required_Inverse4Id`, `l5`.`OneToOne_Optional_PK_Inverse4Id`, `t3`.`Id` AS `Id0`, `t3`.`Id0` AS `Id00`, `t3`.`Id00` AS `Id000`
|
|
FROM `Level1` AS `l5`
|
|
INNER JOIN (
|
|
SELECT `l6`.`Id`, `l6`.`Level2_Optional_Id`, `l6`.`Level2_Required_Id`, `l6`.`Level3_Name`, `l6`.`OneToMany_Optional_Inverse3Id`, `l6`.`OneToMany_Required_Inverse3Id`, `l6`.`OneToOne_Optional_PK_Inverse3Id`, `t2`.`Id` AS `Id0`, `t2`.`Id0` AS `Id00`
|
|
FROM `Level1` AS `l6`
|
|
INNER JOIN (
|
|
SELECT `l7`.`Id`, `l7`.`OneToOne_Required_PK_Date`, `l7`.`Level1_Optional_Id`, `l7`.`Level1_Required_Id`, `l7`.`Level2_Name`, `l7`.`OneToMany_Optional_Inverse2Id`, `l7`.`OneToMany_Required_Inverse2Id`, `l7`.`OneToOne_Optional_PK_Inverse2Id`, `l8`.`Id` AS `Id0`
|
|
FROM `Level1` AS `l7`
|
|
INNER JOIN `Level1` AS `l8` ON `l7`.`Id` = `l8`.`Id`
|
|
WHERE `l7`.`OneToMany_Required_Inverse2Id` IS NOT NULL AND (`l7`.`Level1_Required_Id` IS NOT NULL AND `l7`.`OneToOne_Required_PK_Date` IS NOT NULL)
|
|
) AS `t2` ON `l6`.`Id` = `t2`.`Id`
|
|
WHERE `l6`.`OneToMany_Required_Inverse3Id` IS NOT NULL AND `l6`.`Level2_Required_Id` IS NOT NULL
|
|
) AS `t3` ON `l5`.`Id` = `t3`.`Id`
|
|
WHERE `l5`.`OneToMany_Required_Inverse4Id` IS NOT NULL AND `l5`.`Level3_Required_Id` IS NOT NULL
|
|
) AS `t4` ON `t1`.`Id` = `t4`.`Id`");
|
|
}
|
|
|
|
public override async Task Nested_group_join_with_take(bool isAsync)
|
|
{
|
|
await base.Nested_group_join_with_take(isAsync);
|
|
|
|
AssertSql(
|
|
$@"{AssertSqlHelper.Declaration("@__p_0='2'")}
|
|
|
|
SELECT `t5`.`Level2_Name`
|
|
FROM (
|
|
SELECT TOP {AssertSqlHelper.Parameter("@__p_0")} `t1`.`Id`, `t1`.`OneToOne_Required_PK_Date`, `t1`.`Level1_Optional_Id`, `t1`.`Level1_Required_Id`, `t1`.`Level2_Name`, `t1`.`OneToMany_Optional_Inverse2Id`, `t1`.`OneToMany_Required_Inverse2Id`, `t1`.`OneToOne_Optional_PK_Inverse2Id`, `l`.`Id` AS `Id0`
|
|
FROM `Level1` AS `l`
|
|
LEFT JOIN (
|
|
SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Name`, `t`.`Id` AS `Id0`, `t`.`OneToOne_Required_PK_Date`, `t`.`Level1_Optional_Id`, `t`.`Level1_Required_Id`, `t`.`Level2_Name`, `t`.`OneToMany_Optional_Inverse2Id`, `t`.`OneToMany_Required_Inverse2Id`, `t`.`OneToOne_Optional_PK_Inverse2Id`
|
|
FROM `Level1` AS `l0`
|
|
LEFT JOIN (
|
|
SELECT `l1`.`Id`, `l1`.`OneToOne_Required_PK_Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Level2_Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l2`.`Id` AS `Id0`
|
|
FROM `Level1` AS `l1`
|
|
INNER JOIN `Level1` AS `l2` ON `l1`.`Id` = `l2`.`Id`
|
|
WHERE `l1`.`OneToMany_Required_Inverse2Id` IS NOT NULL AND (`l1`.`Level1_Required_Id` IS NOT NULL AND `l1`.`OneToOne_Required_PK_Date` IS NOT NULL)
|
|
) AS `t` ON `l0`.`Id` = `t`.`Id`
|
|
WHERE `t`.`Id` IS NOT NULL
|
|
) AS `t0` ON `l`.`Id` = `t0`.`Level1_Optional_Id`
|
|
LEFT JOIN (
|
|
SELECT `l3`.`Id`, `l3`.`OneToOne_Required_PK_Date`, `l3`.`Level1_Optional_Id`, `l3`.`Level1_Required_Id`, `l3`.`Level2_Name`, `l3`.`OneToMany_Optional_Inverse2Id`, `l3`.`OneToMany_Required_Inverse2Id`, `l3`.`OneToOne_Optional_PK_Inverse2Id`, `l4`.`Id` AS `Id0`
|
|
FROM `Level1` AS `l3`
|
|
INNER JOIN `Level1` AS `l4` ON `l3`.`Id` = `l4`.`Id`
|
|
WHERE `l3`.`OneToMany_Required_Inverse2Id` IS NOT NULL AND (`l3`.`Level1_Required_Id` IS NOT NULL AND `l3`.`OneToOne_Required_PK_Date` IS NOT NULL)
|
|
) AS `t1` ON `t0`.`Id` = `t1`.`Id`
|
|
ORDER BY `l`.`Id`
|
|
) AS `t2`
|
|
LEFT JOIN (
|
|
SELECT `l5`.`Id`, `l5`.`Date`, `l5`.`Name`, `t3`.`Id` AS `Id0`, `t3`.`OneToOne_Required_PK_Date`, `t3`.`Level1_Optional_Id`, `t3`.`Level1_Required_Id`, `t3`.`Level2_Name`, `t3`.`OneToMany_Optional_Inverse2Id`, `t3`.`OneToMany_Required_Inverse2Id`, `t3`.`OneToOne_Optional_PK_Inverse2Id`
|
|
FROM `Level1` AS `l5`
|
|
LEFT JOIN (
|
|
SELECT `l6`.`Id`, `l6`.`OneToOne_Required_PK_Date`, `l6`.`Level1_Optional_Id`, `l6`.`Level1_Required_Id`, `l6`.`Level2_Name`, `l6`.`OneToMany_Optional_Inverse2Id`, `l6`.`OneToMany_Required_Inverse2Id`, `l6`.`OneToOne_Optional_PK_Inverse2Id`, `l7`.`Id` AS `Id0`
|
|
FROM `Level1` AS `l6`
|
|
INNER JOIN `Level1` AS `l7` ON `l6`.`Id` = `l7`.`Id`
|
|
WHERE `l6`.`OneToMany_Required_Inverse2Id` IS NOT NULL AND (`l6`.`Level1_Required_Id` IS NOT NULL AND `l6`.`OneToOne_Required_PK_Date` IS NOT NULL)
|
|
) AS `t3` ON `l5`.`Id` = `t3`.`Id`
|
|
WHERE `t3`.`Id` IS NOT NULL
|
|
) AS `t4` ON `t2`.`Id` = `t4`.`Level1_Optional_Id`
|
|
LEFT JOIN (
|
|
SELECT `l8`.`Id`, `l8`.`OneToOne_Required_PK_Date`, `l8`.`Level1_Optional_Id`, `l8`.`Level1_Required_Id`, `l8`.`Level2_Name`, `l8`.`OneToMany_Optional_Inverse2Id`, `l8`.`OneToMany_Required_Inverse2Id`, `l8`.`OneToOne_Optional_PK_Inverse2Id`, `l9`.`Id` AS `Id0`
|
|
FROM `Level1` AS `l8`
|
|
INNER JOIN `Level1` AS `l9` ON `l8`.`Id` = `l9`.`Id`
|
|
WHERE `l8`.`OneToMany_Required_Inverse2Id` IS NOT NULL AND (`l8`.`Level1_Required_Id` IS NOT NULL AND `l8`.`OneToOne_Required_PK_Date` IS NOT NULL)
|
|
) AS `t5` ON `t4`.`Id` = `t5`.`Id`
|
|
ORDER BY `t2`.`Id0`");
|
|
}
|
|
|
|
public override async Task Explicit_GroupJoin_in_subquery_with_unrelated_projection2(bool isAsync)
|
|
{
|
|
await base.Explicit_GroupJoin_in_subquery_with_unrelated_projection2(isAsync);
|
|
|
|
AssertSql(
|
|
$@"SELECT `t2`.`Id`
|
|
FROM (
|
|
SELECT DISTINCT `l`.`Id`, `l`.`Date`, `l`.`Name`
|
|
FROM `Level1` AS `l`
|
|
LEFT JOIN (
|
|
SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Name`, `t`.`Id` AS `Id0`, `t`.`OneToOne_Required_PK_Date`, `t`.`Level1_Optional_Id`, `t`.`Level1_Required_Id`, `t`.`Level2_Name`, `t`.`OneToMany_Optional_Inverse2Id`, `t`.`OneToMany_Required_Inverse2Id`, `t`.`OneToOne_Optional_PK_Inverse2Id`
|
|
FROM `Level1` AS `l0`
|
|
LEFT JOIN (
|
|
SELECT `l1`.`Id`, `l1`.`OneToOne_Required_PK_Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Level2_Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l2`.`Id` AS `Id0`
|
|
FROM `Level1` AS `l1`
|
|
INNER JOIN `Level1` AS `l2` ON `l1`.`Id` = `l2`.`Id`
|
|
WHERE `l1`.`OneToMany_Required_Inverse2Id` IS NOT NULL AND (`l1`.`Level1_Required_Id` IS NOT NULL AND `l1`.`OneToOne_Required_PK_Date` IS NOT NULL)
|
|
) AS `t` ON `l0`.`Id` = `t`.`Id`
|
|
WHERE `t`.`Id` IS NOT NULL
|
|
) AS `t0` ON `l`.`Id` = `t0`.`Level1_Optional_Id`
|
|
LEFT JOIN (
|
|
SELECT `l3`.`Id`, `l3`.`OneToOne_Required_PK_Date`, `l3`.`Level1_Optional_Id`, `l3`.`Level1_Required_Id`, `l3`.`Level2_Name`, `l3`.`OneToMany_Optional_Inverse2Id`, `l3`.`OneToMany_Required_Inverse2Id`, `l3`.`OneToOne_Optional_PK_Inverse2Id`, `l4`.`Id` AS `Id0`
|
|
FROM `Level1` AS `l3`
|
|
INNER JOIN `Level1` AS `l4` ON `l3`.`Id` = `l4`.`Id`
|
|
WHERE `l3`.`OneToMany_Required_Inverse2Id` IS NOT NULL AND (`l3`.`Level1_Required_Id` IS NOT NULL AND `l3`.`OneToOne_Required_PK_Date` IS NOT NULL)
|
|
) AS `t1` ON `t0`.`Id` = `t1`.`Id`
|
|
WHERE (`t1`.`Level2_Name` <> 'Foo') OR `t1`.`Level2_Name` IS NULL
|
|
) AS `t2`");
|
|
}
|
|
|
|
public override async Task Result_operator_nav_prop_reference_optional_via_DefaultIfEmpty(bool isAsync)
|
|
{
|
|
await base.Result_operator_nav_prop_reference_optional_via_DefaultIfEmpty(isAsync);
|
|
|
|
AssertSql(
|
|
$@"SELECT SUM(CASE
|
|
WHEN `t1`.`Id` IS NULL THEN 0
|
|
ELSE `t1`.`Level1_Required_Id`
|
|
END)
|
|
FROM `Level1` AS `l`
|
|
LEFT JOIN (
|
|
SELECT `l0`.`Id`, `l0`.`Date`, `l0`.`Name`, `t`.`Id` AS `Id0`, `t`.`OneToOne_Required_PK_Date`, `t`.`Level1_Optional_Id`, `t`.`Level1_Required_Id`, `t`.`Level2_Name`, `t`.`OneToMany_Optional_Inverse2Id`, `t`.`OneToMany_Required_Inverse2Id`, `t`.`OneToOne_Optional_PK_Inverse2Id`
|
|
FROM `Level1` AS `l0`
|
|
LEFT JOIN (
|
|
SELECT `l1`.`Id`, `l1`.`OneToOne_Required_PK_Date`, `l1`.`Level1_Optional_Id`, `l1`.`Level1_Required_Id`, `l1`.`Level2_Name`, `l1`.`OneToMany_Optional_Inverse2Id`, `l1`.`OneToMany_Required_Inverse2Id`, `l1`.`OneToOne_Optional_PK_Inverse2Id`, `l2`.`Id` AS `Id0`
|
|
FROM `Level1` AS `l1`
|
|
INNER JOIN `Level1` AS `l2` ON `l1`.`Id` = `l2`.`Id`
|
|
WHERE `l1`.`OneToMany_Required_Inverse2Id` IS NOT NULL AND (`l1`.`Level1_Required_Id` IS NOT NULL AND `l1`.`OneToOne_Required_PK_Date` IS NOT NULL)
|
|
) AS `t` ON `l0`.`Id` = `t`.`Id`
|
|
WHERE `t`.`Id` IS NOT NULL
|
|
) AS `t0` ON `l`.`Id` = `t0`.`Level1_Optional_Id`
|
|
LEFT JOIN (
|
|
SELECT `l3`.`Id`, `l3`.`OneToOne_Required_PK_Date`, `l3`.`Level1_Optional_Id`, `l3`.`Level1_Required_Id`, `l3`.`Level2_Name`, `l3`.`OneToMany_Optional_Inverse2Id`, `l3`.`OneToMany_Required_Inverse2Id`, `l3`.`OneToOne_Optional_PK_Inverse2Id`, `l4`.`Id` AS `Id0`
|
|
FROM `Level1` AS `l3`
|
|
INNER JOIN `Level1` AS `l4` ON `l3`.`Id` = `l4`.`Id`
|
|
WHERE `l3`.`OneToMany_Required_Inverse2Id` IS NOT NULL AND (`l3`.`Level1_Required_Id` IS NOT NULL AND `l3`.`OneToOne_Required_PK_Date` IS NOT NULL)
|
|
) AS `t1` ON `t0`.`Id` = `t1`.`Id`");
|
|
}
|
|
|
|
public override async Task SelectMany_with_Include1(bool isAsync)
|
|
{
|
|
await base.SelectMany_with_Include1(isAsync);
|
|
|
|
AssertSql(
|
|
$@"SELECT `t`.`Id`, `t`.`OneToOne_Required_PK_Date`, `t`.`Level1_Optional_Id`, `t`.`Level1_Required_Id`, `t`.`Level2_Name`, `t`.`OneToMany_Optional_Inverse2Id`, `t`.`OneToMany_Required_Inverse2Id`, `t`.`OneToOne_Optional_PK_Inverse2Id`, `l`.`Id`, `t`.`Id0`, `t1`.`Id`, `t1`.`Level2_Optional_Id`, `t1`.`Level2_Required_Id`, `t1`.`Level3_Name`, `t1`.`OneToMany_Optional_Inverse3Id`, `t1`.`OneToMany_Required_Inverse3Id`, `t1`.`OneToOne_Optional_PK_Inverse3Id`, `t1`.`Id0`, `t1`.`Id00`
|
|
FROM `Level1` AS `l`
|
|
INNER JOIN (
|
|
SELECT `l0`.`Id`, `l0`.`OneToOne_Required_PK_Date`, `l0`.`Level1_Optional_Id`, `l0`.`Level1_Required_Id`, `l0`.`Level2_Name`, `l0`.`OneToMany_Optional_Inverse2Id`, `l0`.`OneToMany_Required_Inverse2Id`, `l0`.`OneToOne_Optional_PK_Inverse2Id`, `l1`.`Id` AS `Id0`
|
|
FROM `Level1` AS `l0`
|
|
INNER JOIN `Level1` AS `l1` ON `l0`.`Id` = `l1`.`Id`
|
|
WHERE `l0`.`OneToMany_Required_Inverse2Id` IS NOT NULL AND (`l0`.`Level1_Required_Id` IS NOT NULL AND `l0`.`OneToOne_Required_PK_Date` IS NOT NULL)
|
|
) AS `t` ON `l`.`Id` = `t`.`OneToMany_Optional_Inverse2Id`
|
|
LEFT JOIN (
|
|
SELECT `l2`.`Id`, `l2`.`Level2_Optional_Id`, `l2`.`Level2_Required_Id`, `l2`.`Level3_Name`, `l2`.`OneToMany_Optional_Inverse3Id`, `l2`.`OneToMany_Required_Inverse3Id`, `l2`.`OneToOne_Optional_PK_Inverse3Id`, `t0`.`Id` AS `Id0`, `t0`.`Id0` AS `Id00`
|
|
FROM `Level1` AS `l2`
|
|
INNER JOIN (
|
|
SELECT `l3`.`Id`, `l3`.`OneToOne_Required_PK_Date`, `l3`.`Level1_Optional_Id`, `l3`.`Level1_Required_Id`, `l3`.`Level2_Name`, `l3`.`OneToMany_Optional_Inverse2Id`, `l3`.`OneToMany_Required_Inverse2Id`, `l3`.`OneToOne_Optional_PK_Inverse2Id`, `l4`.`Id` AS `Id0`
|
|
FROM `Level1` AS `l3`
|
|
INNER JOIN `Level1` AS `l4` ON `l3`.`Id` = `l4`.`Id`
|
|
WHERE `l3`.`OneToMany_Required_Inverse2Id` IS NOT NULL AND (`l3`.`Level1_Required_Id` IS NOT NULL AND `l3`.`OneToOne_Required_PK_Date` IS NOT NULL)
|
|
) AS `t0` ON `l2`.`Id` = `t0`.`Id`
|
|
WHERE `l2`.`OneToMany_Required_Inverse3Id` IS NOT NULL AND `l2`.`Level2_Required_Id` IS NOT NULL
|
|
) AS `t1` ON `t`.`Id` = `t1`.`OneToMany_Optional_Inverse3Id`
|
|
ORDER BY `l`.`Id`, `t`.`Id`, `t`.`Id0`, `t1`.`Id`, `t1`.`Id0`, `t1`.`Id00`");
|
|
}
|
|
|
|
private void AssertSql(params string[] expected)
|
|
=> Fixture.TestSqlLoggerFactory.AssertBaseline(expected);
|
|
}
|
|
}
|