Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -76,24 +76,36 @@ await Assert.ThrowsAsync<ArgumentException>(
public override async Task Nested_SelectMany_correlated_with_join_table_correctly_translated_to_apply(bool async)
{
// DefaultIfEmpty on child collection. Issue #19095.
await Assert.ThrowsAsync<EqualException>(
async () => await base.Nested_SelectMany_correlated_with_join_table_correctly_translated_to_apply(async));
// Query now works correctly in MySQL 8.0.40+
await base.Nested_SelectMany_correlated_with_join_table_correctly_translated_to_apply(async);

AssertSql(
"""
AssertSql(
"""
SELECT `s0`.`l1Name`, `s0`.`l2Name`, `s0`.`l3Name`
FROM `LevelOne` AS `l`
LEFT JOIN LATERAL (
JOIN LATERAL (
SELECT `s`.`l1Name`, `s`.`l2Name`, `s`.`l3Name`
FROM `LevelTwo` AS `l0`
LEFT JOIN `LevelThree` AS `l1` ON `l0`.`Id` = `l1`.`Id`
FROM (
SELECT 1
) AS `e`
LEFT JOIN (
SELECT `l0`.`Id`
FROM `LevelTwo` AS `l0`
WHERE `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id`
) AS `l1` ON TRUE
LEFT JOIN `LevelThree` AS `l2` ON `l1`.`Id` = `l2`.`Id`
JOIN LATERAL (
SELECT `l`.`Name` AS `l1Name`, `l1`.`Name` AS `l2Name`, `l3`.`Name` AS `l3Name`
FROM `LevelFour` AS `l2`
LEFT JOIN `LevelThree` AS `l3` ON `l2`.`OneToOne_Optional_PK_Inverse4Id` = `l3`.`Id`
WHERE `l1`.`Id` IS NOT NULL AND (`l1`.`Id` = `l2`.`OneToMany_Optional_Inverse4Id`)
SELECT `l`.`Name` AS `l1Name`, `l2`.`Name` AS `l2Name`, `l5`.`Name` AS `l3Name`
FROM (
SELECT 1
) AS `e0`
LEFT JOIN (
SELECT `l3`.`OneToOne_Optional_PK_Inverse4Id`
FROM `LevelFour` AS `l3`
WHERE `l2`.`Id` IS NOT NULL AND (`l2`.`Id` = `l3`.`OneToMany_Optional_Inverse4Id`)
) AS `l4` ON TRUE
LEFT JOIN `LevelThree` AS `l5` ON `l4`.`OneToOne_Optional_PK_Inverse4Id` = `l5`.`Id`
) AS `s` ON TRUE
WHERE `l`.`Id` = `l0`.`OneToMany_Optional_Inverse2Id`
) AS `s0` ON TRUE
""");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2165,7 +2165,25 @@ public override async Task Select_correlated_subquery_ordered(bool async)
{
await base.Select_correlated_subquery_ordered(async);

AssertSql();
AssertSql(
"""
@p='3'

SELECT `c0`.`CustomerID`, `o0`.`OrderID`, `o0`.`CustomerID`, `o0`.`EmployeeID`, `o0`.`OrderDate`
FROM (
SELECT `c`.`CustomerID`
FROM `Customers` AS `c`
ORDER BY `c`.`CustomerID`
LIMIT @p
) AS `c0`
LEFT JOIN LATERAL (
SELECT `o`.`OrderID`, `o`.`CustomerID`, `o`.`EmployeeID`, `o`.`OrderDate`, `c0`.`CustomerID` AS `CustomerID0`
FROM `Orders` AS `o`
ORDER BY `o`.`OrderID`, `c0`.`CustomerID`
LIMIT 2 OFFSET 100
) AS `o0` ON TRUE
ORDER BY `c0`.`CustomerID`, `o0`.`OrderID`, `o0`.`CustomerID0`
""");
}

public override async Task Select_nested_collection_in_anonymous_type_returning_ordered_queryable(bool async)
Expand Down Expand Up @@ -2204,7 +2222,17 @@ public override async Task Select_subquery_recursive_trivial(bool async)
{
await base.Select_subquery_recursive_trivial(async);

AssertSql();
AssertSql(
"""
SELECT `e`.`EmployeeID`, `s`.`EmployeeID`, `s`.`EmployeeID0`, `s`.`City`, `s`.`Country`, `s`.`FirstName`, `s`.`ReportsTo`, `s`.`Title`
FROM `Employees` AS `e`
LEFT JOIN LATERAL (
SELECT `e0`.`EmployeeID`, `e1`.`EmployeeID` AS `EmployeeID0`, `e1`.`City`, `e1`.`Country`, `e1`.`FirstName`, `e1`.`ReportsTo`, `e1`.`Title`
FROM `Employees` AS `e0`
LEFT JOIN `Employees` AS `e1` ON TRUE
) AS `s` ON TRUE
ORDER BY `e`.`EmployeeID`, `s`.`EmployeeID`, `s`.`EmployeeID0`
""");
}

public override async Task Where_subquery_on_bool(bool async)
Expand Down Expand Up @@ -2767,14 +2795,49 @@ public override async Task SelectMany_correlated_with_Select_value_type_and_Defa
{
await base.SelectMany_correlated_with_Select_value_type_and_DefaultIfEmpty_in_selector(async);

AssertSql();
AssertSql(
"""
SELECT COALESCE(`o0`.`OrderID`, 0)
FROM `Customers` AS `c`
LEFT JOIN LATERAL (
SELECT `o`.`OrderID`
FROM `Orders` AS `o`
WHERE (`c`.`CustomerID` = `o`.`CustomerID`) AND (`o`.`CustomerID` = 'NONEXISTENT')
LIMIT 2
) AS `o0` ON TRUE
""");
}

public override async Task SelectMany_correlated_subquery_hard(bool async)
{
await base.SelectMany_correlated_subquery_hard(async);

AssertSql();
AssertSql(
"""
@p='91'

SELECT `c1`.`City` AS `c1`, `e0`.`City`, `e0`.`c1`
FROM (
SELECT DISTINCT `c0`.`City`
FROM (
SELECT `c`.`City`
FROM `Customers` AS `c`
LIMIT @p
) AS `c0`
) AS `c1`
JOIN LATERAL (
SELECT `e`.`City`, `c1`.`City` AS `c1`
FROM `Employees` AS `e`
WHERE (`c1`.`City` = `e`.`City`) OR (`c1`.`City` IS NULL AND (`e`.`City` IS NULL))
LIMIT 9
) AS `e0` ON TRUE
JOIN LATERAL (
SELECT 1
FROM `Employees` AS `e1`
WHERE (`e0`.`City` = `e1`.`City`) OR (`e0`.`City` IS NULL AND (`e1`.`City` IS NULL))
LIMIT 9
) AS `e2` ON TRUE
""");
}

public override async Task SelectMany_cartesian_product_with_ordering(bool async)
Expand Down Expand Up @@ -4588,7 +4651,29 @@ public override async Task DefaultIfEmpty_in_subquery_nested_filter_order_compar
{
await base.DefaultIfEmpty_in_subquery_nested_filter_order_comparison(async);

AssertSql();
AssertSql(
"""
SELECT `c`.`CustomerID`, `s`.`OrderID`, `o2`.`OrderDate`
FROM `Customers` AS `c`
CROSS JOIN (
SELECT `o0`.`OrderID`
FROM (
SELECT 1
) AS `e`
LEFT JOIN (
SELECT `o`.`OrderID`
FROM `Orders` AS `o`
WHERE `o`.`OrderID` > 11050
) AS `o0` ON TRUE
) AS `s`
LEFT JOIN LATERAL (
SELECT `o1`.`OrderID`, `o1`.`OrderDate`
FROM `Orders` AS `o1`
WHERE `o1`.`OrderID` <= (CHAR_LENGTH(`c`.`CustomerID`) + 10250)
) AS `o2` ON TRUE
WHERE (`c`.`City` = 'Seattle') AND (`s`.`OrderID` IS NOT NULL AND (`o2`.`OrderID` IS NOT NULL))
ORDER BY `s`.`OrderID`, `o2`.`OrderDate`
""");
}

public override async Task OrderBy_skip_take(bool async)
Expand Down
Loading