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.
1692 lines
56 KiB
C#
1692 lines
56 KiB
C#
// Copyright (c) .NET Foundation. All rights reserved.
|
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
|
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
using Microsoft.EntityFrameworkCore.Query;
|
|
using Microsoft.EntityFrameworkCore.TestUtilities;
|
|
using Xunit;
|
|
using Xunit.Abstractions;
|
|
|
|
namespace EntityFramework.Jet.FunctionalTests.Query
|
|
{
|
|
public class GroupByQueryJetTest : GroupByQueryTestBase<NorthwindQueryJetFixture<NoopModelCustomizer>>
|
|
{
|
|
// ReSharper disable once UnusedParameter.Local
|
|
public GroupByQueryJetTest(NorthwindQueryJetFixture<NoopModelCustomizer> fixture, ITestOutputHelper testOutputHelper)
|
|
: base(fixture)
|
|
{
|
|
Fixture.TestSqlLoggerFactory.Clear();
|
|
//Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper);
|
|
}
|
|
|
|
public override async Task GroupBy_Property_Select_Average(bool isAsync)
|
|
{
|
|
await base.GroupBy_Property_Select_Average(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT AVG(CAST([o].[OrderID] AS float))
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID]");
|
|
|
|
// Validating that we don't generate warning when translating GroupBy. See Issue#11157
|
|
Assert.DoesNotContain("The LINQ expression 'GroupBy([o].CustomerID, [o])' could not be translated and will be evaluated locally.", Fixture.TestSqlLoggerFactory.Log.Select(l => l.Message));
|
|
}
|
|
|
|
public override async Task GroupBy_Property_Select_Count(bool isAsync)
|
|
{
|
|
await base.GroupBy_Property_Select_Count(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT COUNT(*)
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupBy_Property_Select_LongCount(bool isAsync)
|
|
{
|
|
await base.GroupBy_Property_Select_LongCount(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT COUNT(*)
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupBy_Property_Select_Max(bool isAsync)
|
|
{
|
|
await base.GroupBy_Property_Select_Max(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT MAX([o].[OrderID])
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupBy_Property_Select_Min(bool isAsync)
|
|
{
|
|
await base.GroupBy_Property_Select_Min(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT MIN([o].[OrderID])
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupBy_Property_Select_Sum(bool isAsync)
|
|
{
|
|
await base.GroupBy_Property_Select_Sum(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT SUM([o].[OrderID])
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupBy_Property_Select_Sum_Min_Max_Avg(bool isAsync)
|
|
{
|
|
await base.GroupBy_Property_Select_Sum_Min_Max_Avg(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT SUM([o].[OrderID]) AS [Sum], MIN([o].[OrderID]) AS [Min], MAX([o].[OrderID]) AS [Max], AVG(CAST([o].[OrderID] AS float)) AS [Avg]
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupBy_Property_Select_Key_Average(bool isAsync)
|
|
{
|
|
await base.GroupBy_Property_Select_Key_Average(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [o].[CustomerID] AS [Key], AVG(CAST([o].[OrderID] AS float)) AS [Average]
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupBy_Property_Select_Key_Count(bool isAsync)
|
|
{
|
|
await base.GroupBy_Property_Select_Key_Count(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [o].[CustomerID] AS [Key], COUNT(*) AS [Count]
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupBy_Property_Select_Key_LongCount(bool isAsync)
|
|
{
|
|
await base.GroupBy_Property_Select_Key_LongCount(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [o].[CustomerID] AS [Key], COUNT(*) AS [LongCount]
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupBy_Property_Select_Key_Max(bool isAsync)
|
|
{
|
|
await base.GroupBy_Property_Select_Key_Max(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [o].[CustomerID] AS [Key], MAX([o].[OrderID]) AS [Max]
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupBy_Property_Select_Key_Min(bool isAsync)
|
|
{
|
|
await base.GroupBy_Property_Select_Key_Min(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [o].[CustomerID] AS [Key], MIN([o].[OrderID]) AS [Min]
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupBy_Property_Select_Key_Sum(bool isAsync)
|
|
{
|
|
await base.GroupBy_Property_Select_Key_Sum(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [o].[CustomerID] AS [Key], SUM([o].[OrderID]) AS [Sum]
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupBy_Property_Select_Key_Sum_Min_Max_Avg(bool isAsync)
|
|
{
|
|
await base.GroupBy_Property_Select_Key_Sum_Min_Max_Avg(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [o].[CustomerID] AS [Key], SUM([o].[OrderID]) AS [Sum], MIN([o].[OrderID]) AS [Min], MAX([o].[OrderID]) AS [Max], AVG(CAST([o].[OrderID] AS float)) AS [Avg]
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupBy_Property_Select_Sum_Min_Key_Max_Avg(bool isAsync)
|
|
{
|
|
await base.GroupBy_Property_Select_Sum_Min_Key_Max_Avg(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT SUM([o].[OrderID]) AS [Sum], MIN([o].[OrderID]) AS [Min], [o].[CustomerID] AS [Key], MAX([o].[OrderID]) AS [Max], AVG(CAST([o].[OrderID] AS float)) AS [Avg]
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupBy_anonymous_Select_Average(bool isAsync)
|
|
{
|
|
await base.GroupBy_anonymous_Select_Average(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT AVG(CAST([o].[OrderID] AS float))
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupBy_anonymous_Select_Count(bool isAsync)
|
|
{
|
|
await base.GroupBy_anonymous_Select_Count(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT COUNT(*)
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupBy_anonymous_Select_LongCount(bool isAsync)
|
|
{
|
|
await base.GroupBy_anonymous_Select_LongCount(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT COUNT(*)
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupBy_anonymous_Select_Max(bool isAsync)
|
|
{
|
|
await base.GroupBy_anonymous_Select_Max(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT MAX([o].[OrderID])
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupBy_anonymous_Select_Min(bool isAsync)
|
|
{
|
|
await base.GroupBy_anonymous_Select_Min(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT MIN([o].[OrderID])
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupBy_anonymous_Select_Sum(bool isAsync)
|
|
{
|
|
await base.GroupBy_anonymous_Select_Sum(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT SUM([o].[OrderID])
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupBy_anonymous_Select_Sum_Min_Max_Avg(bool isAsync)
|
|
{
|
|
await base.GroupBy_anonymous_Select_Sum_Min_Max_Avg(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT SUM([o].[OrderID]) AS [Sum], MIN([o].[OrderID]) AS [Min], MAX([o].[OrderID]) AS [Max], AVG(CAST([o].[OrderID] AS float)) AS [Avg]
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupBy_anonymous_with_alias_Select_Key_Sum(bool isAsync)
|
|
{
|
|
await base.GroupBy_anonymous_with_alias_Select_Key_Sum(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [o].[CustomerID] AS [Key], SUM([o].[OrderID]) AS [Sum]
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupBy_Composite_Select_Average(bool isAsync)
|
|
{
|
|
await base.GroupBy_Composite_Select_Average(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT AVG(CAST([o].[OrderID] AS float))
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID], [o].[EmployeeID]");
|
|
}
|
|
|
|
public override async Task GroupBy_Composite_Select_Count(bool isAsync)
|
|
{
|
|
await base.GroupBy_Composite_Select_Count(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT COUNT(*)
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID], [o].[EmployeeID]");
|
|
}
|
|
|
|
public override async Task GroupBy_Composite_Select_LongCount(bool isAsync)
|
|
{
|
|
await base.GroupBy_Composite_Select_LongCount(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT COUNT(*)
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID], [o].[EmployeeID]");
|
|
}
|
|
|
|
public override async Task GroupBy_Composite_Select_Max(bool isAsync)
|
|
{
|
|
await base.GroupBy_Composite_Select_Max(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT MAX([o].[OrderID])
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID], [o].[EmployeeID]");
|
|
}
|
|
|
|
public override async Task GroupBy_Composite_Select_Min(bool isAsync)
|
|
{
|
|
await base.GroupBy_Composite_Select_Min(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT MIN([o].[OrderID])
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID], [o].[EmployeeID]");
|
|
}
|
|
|
|
public override async Task GroupBy_Composite_Select_Sum(bool isAsync)
|
|
{
|
|
await base.GroupBy_Composite_Select_Sum(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT SUM([o].[OrderID])
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID], [o].[EmployeeID]");
|
|
}
|
|
|
|
public override async Task GroupBy_Composite_Select_Sum_Min_Max_Avg(bool isAsync)
|
|
{
|
|
await base.GroupBy_Composite_Select_Sum_Min_Max_Avg(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT SUM([o].[OrderID]) AS [Sum], MIN([o].[OrderID]) AS [Min], MAX([o].[OrderID]) AS [Max], AVG(CAST([o].[OrderID] AS float)) AS [Avg]
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID], [o].[EmployeeID]");
|
|
}
|
|
|
|
public override async Task GroupBy_Composite_Select_Key_Average(bool isAsync)
|
|
{
|
|
await base.GroupBy_Composite_Select_Key_Average(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [o].[CustomerID], [o].[EmployeeID], AVG(CAST([o].[OrderID] AS float)) AS [Average]
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID], [o].[EmployeeID]");
|
|
}
|
|
|
|
public override async Task GroupBy_Composite_Select_Key_Count(bool isAsync)
|
|
{
|
|
await base.GroupBy_Composite_Select_Key_Count(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [o].[CustomerID], [o].[EmployeeID], COUNT(*) AS [Count]
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID], [o].[EmployeeID]");
|
|
}
|
|
|
|
public override async Task GroupBy_Composite_Select_Key_LongCount(bool isAsync)
|
|
{
|
|
await base.GroupBy_Composite_Select_Key_LongCount(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [o].[CustomerID], [o].[EmployeeID], COUNT(*) AS [LongCount]
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID], [o].[EmployeeID]");
|
|
}
|
|
|
|
public override async Task GroupBy_Composite_Select_Key_Max(bool isAsync)
|
|
{
|
|
await base.GroupBy_Composite_Select_Key_Max(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [o].[CustomerID], [o].[EmployeeID], MAX([o].[OrderID]) AS [Max]
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID], [o].[EmployeeID]");
|
|
}
|
|
|
|
public override async Task GroupBy_Composite_Select_Key_Min(bool isAsync)
|
|
{
|
|
await base.GroupBy_Composite_Select_Key_Min(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [o].[CustomerID], [o].[EmployeeID], MIN([o].[OrderID]) AS [Min]
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID], [o].[EmployeeID]");
|
|
}
|
|
|
|
public override async Task GroupBy_Composite_Select_Key_Sum(bool isAsync)
|
|
{
|
|
await base.GroupBy_Composite_Select_Key_Sum(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [o].[CustomerID], [o].[EmployeeID], SUM([o].[OrderID]) AS [Sum]
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID], [o].[EmployeeID]");
|
|
}
|
|
|
|
public override async Task GroupBy_Composite_Select_Key_Sum_Min_Max_Avg(bool isAsync)
|
|
{
|
|
await base.GroupBy_Composite_Select_Key_Sum_Min_Max_Avg(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [o].[CustomerID], [o].[EmployeeID], SUM([o].[OrderID]) AS [Sum], MIN([o].[OrderID]) AS [Min], MAX([o].[OrderID]) AS [Max], AVG(CAST([o].[OrderID] AS float)) AS [Avg]
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID], [o].[EmployeeID]");
|
|
}
|
|
|
|
public override async Task GroupBy_Composite_Select_Sum_Min_Key_Max_Avg(bool isAsync)
|
|
{
|
|
await base.GroupBy_Composite_Select_Sum_Min_Key_Max_Avg(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT SUM([o].[OrderID]) AS [Sum], MIN([o].[OrderID]) AS [Min], [o].[CustomerID], [o].[EmployeeID], MAX([o].[OrderID]) AS [Max], AVG(CAST([o].[OrderID] AS float)) AS [Avg]
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID], [o].[EmployeeID]");
|
|
}
|
|
|
|
public override async Task GroupBy_Composite_Select_Sum_Min_Key_flattened_Max_Avg(bool isAsync)
|
|
{
|
|
await base.GroupBy_Composite_Select_Sum_Min_Key_flattened_Max_Avg(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT SUM([o].[OrderID]) AS [Sum], MIN([o].[OrderID]) AS [Min], [o].[CustomerID], [o].[EmployeeID], MAX([o].[OrderID]) AS [Max], AVG(CAST([o].[OrderID] AS float)) AS [Avg]
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID], [o].[EmployeeID]");
|
|
}
|
|
|
|
public override async Task GroupBy_Dto_as_key_Select_Sum(bool isAsync)
|
|
{
|
|
await base.GroupBy_Dto_as_key_Select_Sum(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate]
|
|
FROM [Orders] AS [o0]");
|
|
}
|
|
|
|
public override async Task GroupBy_Dto_as_element_selector_Select_Sum(bool isAsync)
|
|
{
|
|
await base.GroupBy_Dto_as_element_selector_Select_Sum(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [o].[CustomerID], [o].[EmployeeID]
|
|
FROM [Orders] AS [o]
|
|
ORDER BY [o].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupBy_Composite_Select_Dto_Sum_Min_Key_flattened_Max_Avg(bool isAsync)
|
|
{
|
|
await base.GroupBy_Composite_Select_Dto_Sum_Min_Key_flattened_Max_Avg(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT SUM([o].[OrderID]) AS [Sum], MIN([o].[OrderID]) AS [Min], [o].[CustomerID], [o].[EmployeeID], MAX([o].[OrderID]) AS [Max], AVG(CAST([o].[OrderID] AS float)) AS [Avg]
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID], [o].[EmployeeID]");
|
|
}
|
|
|
|
public override async Task GroupBy_Composite_Select_Sum_Min_part_Key_flattened_Max_Avg(bool isAsync)
|
|
{
|
|
await base.GroupBy_Composite_Select_Sum_Min_part_Key_flattened_Max_Avg(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT SUM([o].[OrderID]) AS [Sum], MIN([o].[OrderID]) AS [Min], [o].[CustomerID], MAX([o].[OrderID]) AS [Max], AVG(CAST([o].[OrderID] AS float)) AS [Avg]
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID], [o].[EmployeeID]");
|
|
}
|
|
|
|
public override async Task GroupBy_Constant_Select_Sum_Min_Key_Max_Avg(bool isAsync)
|
|
{
|
|
await base.GroupBy_Constant_Select_Sum_Min_Key_Max_Avg(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT SUM([t].[OrderID]) AS [Sum], MIN([t].[OrderID]) AS [Min], [t].[Key], MAX([t].[OrderID]) AS [Max], AVG(CAST([t].[OrderID] AS float)) AS [Avg]
|
|
FROM (
|
|
SELECT [o].*, 2 AS [Key]
|
|
FROM [Orders] AS [o]
|
|
) AS [t]
|
|
GROUP BY [t].[Key]");
|
|
}
|
|
|
|
|
|
public override async Task GroupBy_after_predicate_Constant_Select_Sum_Min_Key_Max_Avg(bool isAsync)
|
|
{
|
|
await base.GroupBy_after_predicate_Constant_Select_Sum_Min_Key_Max_Avg(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT SUM([t].[OrderID]) AS [Sum], MIN([t].[OrderID]) AS [Min], [t].[Key] AS [Random], MAX([t].[OrderID]) AS [Max], AVG(CAST([t].[OrderID] AS float)) AS [Avg]
|
|
FROM (
|
|
SELECT [o].*, 2 AS [Key]
|
|
FROM [Orders] AS [o]
|
|
WHERE [o].[OrderID] > 10500
|
|
) AS [t]
|
|
GROUP BY [t].[Key]");
|
|
}
|
|
|
|
public override async Task GroupBy_Constant_with_element_selector_Select_Sum_Min_Key_Max_Avg(bool isAsync)
|
|
{
|
|
await base.GroupBy_Constant_with_element_selector_Select_Sum_Min_Key_Max_Avg(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT SUM([t].[OrderID]) AS [Sum], [t].[Key]
|
|
FROM (
|
|
SELECT [o].[OrderID], 2 AS [Key]
|
|
FROM [Orders] AS [o]
|
|
) AS [t]
|
|
GROUP BY [t].[Key]");
|
|
}
|
|
|
|
public override async Task GroupBy_param_Select_Sum_Min_Key_Max_Avg(bool isAsync)
|
|
{
|
|
await base.GroupBy_param_Select_Sum_Min_Key_Max_Avg(isAsync);
|
|
|
|
AssertSql(
|
|
@"@__a_0='2'
|
|
|
|
SELECT SUM([t].[OrderID]) AS [Sum], MIN([t].[OrderID]) AS [Min], [t].[Key], MAX([t].[OrderID]) AS [Max], AVG(CAST([t].[OrderID] AS float)) AS [Avg]
|
|
FROM (
|
|
SELECT [o].*, @__a_0 AS [Key]
|
|
FROM [Orders] AS [o]
|
|
) AS [t]
|
|
GROUP BY [t].[Key]");
|
|
}
|
|
|
|
public override async Task GroupBy_param_with_element_selector_Select_Sum_Min_Key_Max_Avg(bool isAsync)
|
|
{
|
|
await base.GroupBy_param_with_element_selector_Select_Sum_Min_Key_Max_Avg(isAsync);
|
|
|
|
AssertSql(
|
|
@"@__a_0='2'
|
|
|
|
SELECT SUM([t].[OrderID]) AS [Sum], [t].[Key]
|
|
FROM (
|
|
SELECT [o].[OrderID], @__a_0 AS [Key]
|
|
FROM [Orders] AS [o]
|
|
) AS [t]
|
|
GROUP BY [t].[Key]");
|
|
}
|
|
|
|
public override async Task GroupBy_Property_scalar_element_selector_Average(bool isAsync)
|
|
{
|
|
await base.GroupBy_Property_scalar_element_selector_Average(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT AVG(CAST([o].[OrderID] AS float))
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupBy_Property_scalar_element_selector_Count(bool isAsync)
|
|
{
|
|
await base.GroupBy_Property_scalar_element_selector_Count(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT COUNT(*)
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupBy_Property_scalar_element_selector_LongCount(bool isAsync)
|
|
{
|
|
await base.GroupBy_Property_scalar_element_selector_LongCount(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT COUNT(*)
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupBy_Property_scalar_element_selector_Max(bool isAsync)
|
|
{
|
|
await base.GroupBy_Property_scalar_element_selector_Max(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT MAX([o].[OrderID])
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupBy_Property_scalar_element_selector_Min(bool isAsync)
|
|
{
|
|
await base.GroupBy_Property_scalar_element_selector_Min(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT MIN([o].[OrderID])
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupBy_Property_scalar_element_selector_Sum(bool isAsync)
|
|
{
|
|
await base.GroupBy_Property_scalar_element_selector_Sum(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT SUM([o].[OrderID])
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupBy_Property_scalar_element_selector_Sum_Min_Max_Avg(bool isAsync)
|
|
{
|
|
await base.GroupBy_Property_scalar_element_selector_Sum_Min_Max_Avg(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT SUM([o].[OrderID]) AS [Sum], MIN([o].[OrderID]) AS [Min], MAX([o].[OrderID]) AS [Max], AVG(CAST([o].[OrderID] AS float)) AS [Avg]
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupBy_Property_anonymous_element_selector_Average(bool isAsync)
|
|
{
|
|
await base.GroupBy_Property_anonymous_element_selector_Average(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT AVG(CAST([o].[OrderID] AS float))
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupBy_Property_anonymous_element_selector_Count(bool isAsync)
|
|
{
|
|
await base.GroupBy_Property_anonymous_element_selector_Count(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT COUNT(*)
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupBy_Property_anonymous_element_selector_LongCount(bool isAsync)
|
|
{
|
|
await base.GroupBy_Property_anonymous_element_selector_LongCount(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT COUNT(*)
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupBy_Property_anonymous_element_selector_Max(bool isAsync)
|
|
{
|
|
await base.GroupBy_Property_anonymous_element_selector_Max(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT MAX([o].[OrderID])
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupBy_Property_anonymous_element_selector_Min(bool isAsync)
|
|
{
|
|
await base.GroupBy_Property_anonymous_element_selector_Min(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT MIN([o].[OrderID])
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupBy_Property_anonymous_element_selector_Sum(bool isAsync)
|
|
{
|
|
await base.GroupBy_Property_anonymous_element_selector_Sum(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT SUM([o].[OrderID])
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupBy_Property_anonymous_element_selector_Sum_Min_Max_Avg(bool isAsync)
|
|
{
|
|
await base.GroupBy_Property_anonymous_element_selector_Sum_Min_Max_Avg(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT SUM([o].[OrderID]) AS [Sum], MIN([o].[EmployeeID]) AS [Min], MAX([o].[EmployeeID]) AS [Max], AVG(CAST([o].[OrderID] AS float)) AS [Avg]
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupBy_empty_key_Aggregate(bool isAsync)
|
|
{
|
|
await base.GroupBy_empty_key_Aggregate(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT SUM([t].[OrderID])
|
|
FROM (
|
|
SELECT [o].*, 1 AS [Key]
|
|
FROM [Orders] AS [o]
|
|
) AS [t]
|
|
GROUP BY [t].[Key]");
|
|
}
|
|
|
|
public override async Task GroupBy_empty_key_Aggregate_Key(bool isAsync)
|
|
{
|
|
await base.GroupBy_empty_key_Aggregate_Key(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT SUM([t].[OrderID]) AS [Sum]
|
|
FROM (
|
|
SELECT [o].*, 1 AS [Key]
|
|
FROM [Orders] AS [o]
|
|
) AS [t]
|
|
GROUP BY [t].[Key]");
|
|
}
|
|
|
|
public override async Task OrderBy_GroupBy_Aggregate(bool isAsync)
|
|
{
|
|
await base.OrderBy_GroupBy_Aggregate(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT SUM([o].[OrderID])
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID]");
|
|
}
|
|
|
|
public override async Task OrderBy_Skip_GroupBy_Aggregate(bool isAsync)
|
|
{
|
|
await base.OrderBy_Skip_GroupBy_Aggregate(isAsync);
|
|
|
|
AssertSql(
|
|
@"@__p_0='80'
|
|
|
|
SELECT AVG(CAST([t].[OrderID] AS float))
|
|
FROM (
|
|
SELECT [o].*
|
|
FROM [Orders] AS [o]
|
|
ORDER BY [o].[OrderID]
|
|
OFFSET @__p_0 ROWS
|
|
) AS [t]
|
|
GROUP BY [t].[CustomerID]");
|
|
}
|
|
|
|
public override async Task OrderBy_Take_GroupBy_Aggregate(bool isAsync)
|
|
{
|
|
await base.OrderBy_Take_GroupBy_Aggregate(isAsync);
|
|
|
|
AssertSql(
|
|
@"@__p_0='500'
|
|
|
|
SELECT MIN([t].[OrderID])
|
|
FROM (
|
|
SELECT TOP @__p_0 [o].*
|
|
FROM [Orders] AS [o]
|
|
ORDER BY [o].[OrderID]
|
|
) AS [t]
|
|
GROUP BY [t].[CustomerID]");
|
|
}
|
|
|
|
public override async Task OrderBy_Skip_Take_GroupBy_Aggregate(bool isAsync)
|
|
{
|
|
await base.OrderBy_Skip_Take_GroupBy_Aggregate(isAsync);
|
|
|
|
AssertSql(
|
|
@"@__p_0='80'
|
|
@__p_1='500'
|
|
|
|
SELECT MAX([t].[OrderID])
|
|
FROM (
|
|
SELECT [o].*
|
|
FROM [Orders] AS [o]
|
|
ORDER BY [o].[OrderID]
|
|
OFFSET @__p_0 ROWS FETCH NEXT @__p_1 ROWS ONLY
|
|
) AS [t]
|
|
GROUP BY [t].[CustomerID]");
|
|
}
|
|
|
|
public override async Task Distinct_GroupBy_Aggregate(bool isAsync)
|
|
{
|
|
await base.Distinct_GroupBy_Aggregate(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [t].[CustomerID] AS [Key], COUNT(*) AS [c]
|
|
FROM (
|
|
SELECT DISTINCT [o].*
|
|
FROM [Orders] AS [o]
|
|
) AS [t]
|
|
GROUP BY [t].[CustomerID]");
|
|
}
|
|
|
|
public override async Task Anonymous_projection_Distinct_GroupBy_Aggregate(bool isAsync)
|
|
{
|
|
await base.Anonymous_projection_Distinct_GroupBy_Aggregate(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [t].[EmployeeID] AS [Key], COUNT(*) AS [c]
|
|
FROM (
|
|
SELECT DISTINCT [o].[OrderID], [o].[EmployeeID]
|
|
FROM [Orders] AS [o]
|
|
) AS [t]
|
|
GROUP BY [t].[EmployeeID]");
|
|
}
|
|
|
|
public override async Task SelectMany_GroupBy_Aggregate(bool isAsync)
|
|
{
|
|
await base.SelectMany_GroupBy_Aggregate(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [c.Orders].[EmployeeID] AS [Key], COUNT(*) AS [c]
|
|
FROM [Customers] AS [c]
|
|
INNER JOIN [Orders] AS [c.Orders] ON [c].[CustomerID] = [c.Orders].[CustomerID]
|
|
GROUP BY [c.Orders].[EmployeeID]");
|
|
}
|
|
|
|
public override async Task Join_GroupBy_Aggregate(bool isAsync)
|
|
{
|
|
await base.Join_GroupBy_Aggregate(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [c].[CustomerID] AS [Key], AVG(CAST([o].[OrderID] AS float)) AS [Count]
|
|
FROM [Orders] AS [o]
|
|
INNER JOIN [Customers] AS [c] ON [o].[CustomerID] = [c].[CustomerID]
|
|
GROUP BY [c].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupBy_required_navigation_member_Aggregate(bool isAsync)
|
|
{
|
|
await base.GroupBy_required_navigation_member_Aggregate(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [od.Order].[CustomerID] AS [CustomerId], COUNT(*) AS [Count]
|
|
FROM [Order Details] AS [od]
|
|
INNER JOIN [Orders] AS [od.Order] ON [od].[OrderID] = [od.Order].[OrderID]
|
|
GROUP BY [od.Order].[CustomerID]");
|
|
}
|
|
|
|
public override async Task Join_complex_GroupBy_Aggregate(bool isAsync)
|
|
{
|
|
await base.Join_complex_GroupBy_Aggregate(isAsync);
|
|
|
|
AssertSql(
|
|
@"@__p_0='100'
|
|
@__p_1='10'
|
|
@__p_2='50'
|
|
|
|
SELECT [t0].[CustomerID] AS [Key], AVG(CAST([t].[OrderID] AS float)) AS [Count]
|
|
FROM (
|
|
SELECT TOP(@__p_0) [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate]
|
|
FROM [Orders] AS [o]
|
|
WHERE [o].[OrderID] < 10400
|
|
ORDER BY [o].[OrderDate]
|
|
) AS [t]
|
|
INNER JOIN (
|
|
SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region]
|
|
FROM [Customers] AS [c]
|
|
WHERE [c].[CustomerID] NOT IN (N'DRACD', N'FOLKO')
|
|
ORDER BY [c].[City]
|
|
OFFSET @__p_1 ROWS FETCH NEXT @__p_2 ROWS ONLY
|
|
) AS [t0] ON [t].[CustomerID] = [t0].[CustomerID]
|
|
GROUP BY [t0].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupJoin_GroupBy_Aggregate(bool isAsync)
|
|
{
|
|
await base.GroupJoin_GroupBy_Aggregate(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [o].[CustomerID] AS [Key], AVG(CAST([o].[OrderID] AS float)) AS [Average]
|
|
FROM [Customers] AS [c]
|
|
LEFT JOIN [Orders] AS [o] ON [c].[CustomerID] = [o].[CustomerID]
|
|
WHERE [o].[OrderID] IS NOT NULL
|
|
GROUP BY [o].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupJoin_GroupBy_Aggregate_2(bool isAsync)
|
|
{
|
|
await base.GroupJoin_GroupBy_Aggregate_2(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [c].[CustomerID] AS [Key], MAX([c].[City]) AS [Max]
|
|
FROM [Customers] AS [c]
|
|
LEFT JOIN [Orders] AS [o] ON [c].[CustomerID] = [o].[CustomerID]
|
|
GROUP BY [c].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupJoin_GroupBy_Aggregate_3(bool isAsync)
|
|
{
|
|
await base.GroupJoin_GroupBy_Aggregate_3(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [o].[CustomerID] AS [Key], AVG(CAST([o].[OrderID] AS float)) AS [Average]
|
|
FROM [Orders] AS [o]
|
|
LEFT JOIN [Customers] AS [c] ON [o].[CustomerID] = [c].[CustomerID]
|
|
GROUP BY [o].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupJoin_GroupBy_Aggregate_4(bool isAsync)
|
|
{
|
|
await base.GroupJoin_GroupBy_Aggregate_4(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [c].[CustomerID] AS [Value], MAX([c].[City]) AS [Max]
|
|
FROM [Customers] AS [c]
|
|
LEFT JOIN [Orders] AS [o] ON [c].[CustomerID] = [o].[CustomerID]
|
|
GROUP BY [c].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupJoin_GroupBy_Aggregate_5(bool isAsync)
|
|
{
|
|
await base.GroupJoin_GroupBy_Aggregate_5(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [o].[OrderID] AS [Value], AVG(CAST([o].[OrderID] AS float)) AS [Average]
|
|
FROM [Orders] AS [o]
|
|
LEFT JOIN [Customers] AS [c] ON [o].[CustomerID] = [c].[CustomerID]
|
|
GROUP BY [o].[OrderID]");
|
|
}
|
|
|
|
public override async Task GroupBy_optional_navigation_member_Aggregate(bool isAsync)
|
|
{
|
|
await base.GroupBy_optional_navigation_member_Aggregate(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [o.Customer].[Country], COUNT(*) AS [Count]
|
|
FROM [Orders] AS [o]
|
|
LEFT JOIN [Customers] AS [o.Customer] ON [o].[CustomerID] = [o.Customer].[CustomerID]
|
|
GROUP BY [o.Customer].[Country]");
|
|
}
|
|
|
|
public override async Task GroupJoin_complex_GroupBy_Aggregate(bool isAsync)
|
|
{
|
|
await base.GroupJoin_complex_GroupBy_Aggregate(isAsync);
|
|
|
|
AssertSql(
|
|
@"@__p_0='10'
|
|
@__p_1='50'
|
|
@__p_2='100'
|
|
|
|
SELECT [t0].[CustomerID] AS [Key], AVG(CAST([t0].[OrderID] AS float)) AS [Count]
|
|
FROM (
|
|
SELECT [c].*
|
|
FROM [Customers] AS [c]
|
|
WHERE [c].[CustomerID] NOT IN (N'DRACD', N'FOLKO')
|
|
ORDER BY [c].[City]
|
|
OFFSET @__p_0 ROWS FETCH NEXT @__p_1 ROWS ONLY
|
|
) AS [t]
|
|
INNER JOIN (
|
|
SELECT TOP(@__p_2) [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate]
|
|
FROM [Orders] AS [o]
|
|
WHERE [o].[OrderID] < 10400
|
|
ORDER BY [o].[OrderDate]
|
|
) AS [t0] ON [t].[CustomerID] = [t0].[CustomerID]
|
|
WHERE [t0].[OrderID] > 10300
|
|
GROUP BY [t0].[CustomerID]");
|
|
}
|
|
|
|
public override async Task Self_join_GroupBy_Aggregate(bool isAsync)
|
|
{
|
|
await base.Self_join_GroupBy_Aggregate(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [o].[CustomerID] AS [Key], AVG(CAST([o2].[OrderID] AS float)) AS [Count]
|
|
FROM [Orders] AS [o]
|
|
INNER JOIN [Orders] AS [o2] ON [o].[OrderID] = [o2].[OrderID]
|
|
WHERE [o].[OrderID] < 10400
|
|
GROUP BY [o].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupBy_multi_navigation_members_Aggregate(bool isAsync)
|
|
{
|
|
await base.GroupBy_multi_navigation_members_Aggregate(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [od.Order].[CustomerID], [od.Product].[ProductName], COUNT(*) AS [Count]
|
|
FROM [Order Details] AS [od]
|
|
INNER JOIN [Products] AS [od.Product] ON [od].[ProductID] = [od.Product].[ProductID]
|
|
INNER JOIN [Orders] AS [od.Order] ON [od].[OrderID] = [od.Order].[OrderID]
|
|
GROUP BY [od.Order].[CustomerID], [od.Product].[ProductName]");
|
|
}
|
|
|
|
public override async Task Union_simple_groupby(bool isAsync)
|
|
{
|
|
await base.Union_simple_groupby(isAsync);
|
|
|
|
AssertSql(" ");
|
|
}
|
|
|
|
public override async Task Select_anonymous_GroupBy_Aggregate(bool isAsync)
|
|
{
|
|
await base.Select_anonymous_GroupBy_Aggregate(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT MIN([o].[OrderDate]) AS [Min], MAX([o].[OrderDate]) AS [Max], SUM([o].[OrderID]) AS [Sum], AVG(CAST([o].[OrderID] AS float)) AS [Avg]
|
|
FROM [Orders] AS [o]
|
|
WHERE [o].[OrderID] < 10300
|
|
GROUP BY [o].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupBy_OrderBy_key(bool isAsync)
|
|
{
|
|
await base.GroupBy_OrderBy_key(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [o].[CustomerID] AS [Key], COUNT(*) AS [c]
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID]
|
|
ORDER BY [o].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupBy_OrderBy_count(bool isAsync)
|
|
{
|
|
await base.GroupBy_OrderBy_count(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [o].[CustomerID] AS [Key], COUNT(*) AS [Count]
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID]
|
|
ORDER BY COUNT(*), [o].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupBy_OrderBy_count_Select_sum(bool isAsync)
|
|
{
|
|
await base.GroupBy_OrderBy_count_Select_sum(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [o].[CustomerID] AS [Key], SUM([o].[OrderID]) AS [Sum]
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID]
|
|
ORDER BY COUNT(*), [o].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupBy_aggregate_Contains(bool isAsync)
|
|
{
|
|
await base.GroupBy_aggregate_Contains(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate]
|
|
FROM [Orders] AS [o]
|
|
WHERE [o].[CustomerID] IN (
|
|
SELECT [e].[CustomerID] AS [Key]
|
|
FROM [Orders] AS [e]
|
|
GROUP BY [e].[CustomerID]
|
|
HAVING COUNT(*) > 30
|
|
)");
|
|
}
|
|
|
|
public override async Task GroupBy_aggregate_Pushdown(bool isAsync)
|
|
{
|
|
await base.GroupBy_aggregate_Pushdown(isAsync);
|
|
|
|
AssertSql(
|
|
@"@__p_0='20'
|
|
@__p_1='4'
|
|
|
|
SELECT [t].*
|
|
FROM (
|
|
SELECT TOP @__p_0 [e].[CustomerID] AS [c]
|
|
FROM [Orders] AS [e]
|
|
GROUP BY [e].[CustomerID]
|
|
HAVING COUNT(*) > 10
|
|
ORDER BY [e].[CustomerID]
|
|
) AS [t]
|
|
ORDER BY [t].[c]
|
|
OFFSET @__p_1 ROWS");
|
|
}
|
|
|
|
public override void GroupBy_Select_sum_over_unmapped_property()
|
|
{
|
|
base.GroupBy_Select_sum_over_unmapped_property();
|
|
|
|
AssertSql(
|
|
@"SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate]
|
|
FROM [Orders] AS [o]
|
|
ORDER BY [o].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupBy_filter_key(bool isAsync)
|
|
{
|
|
await base.GroupBy_filter_key(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [o].[CustomerID] AS [Key], COUNT(*) AS [c]
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID]
|
|
HAVING [o].[CustomerID] = 'ALFKI'");
|
|
}
|
|
|
|
public override async Task GroupBy_filter_count(bool isAsync)
|
|
{
|
|
await base.GroupBy_filter_count(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [o].[CustomerID] AS [Key], COUNT(*) AS [Count]
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID]
|
|
HAVING COUNT(*) > 4");
|
|
}
|
|
|
|
public override async Task GroupBy_filter_count_OrderBy_count_Select_sum(bool isAsync)
|
|
{
|
|
await base.GroupBy_filter_count_OrderBy_count_Select_sum(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [o].[CustomerID] AS [Key], COUNT(*) AS [Count], SUM([o].[OrderID]) AS [Sum]
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID]
|
|
HAVING COUNT(*) > 4
|
|
ORDER BY COUNT(*), [o].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupBy_Aggregate_Join(bool isAsync)
|
|
{
|
|
await base.GroupBy_Aggregate_Join(isAsync);
|
|
|
|
AssertContains(
|
|
@"SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate]
|
|
FROM [Orders] AS [o0]",
|
|
//
|
|
@"SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region]
|
|
FROM [Customers] AS [c]",
|
|
//
|
|
@"SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate]
|
|
FROM [Orders] AS [o]
|
|
ORDER BY [o].[CustomerID]");
|
|
}
|
|
|
|
public override async Task Join_GroupBy_Aggregate_multijoins(bool isAsync)
|
|
{
|
|
await base.Join_GroupBy_Aggregate_multijoins(isAsync);
|
|
|
|
// This could be lifted. Blocked by bug #10812
|
|
AssertContains(
|
|
@"SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate]
|
|
FROM [Orders] AS [o0]",
|
|
//
|
|
@"SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], [t].[CustomerID], [t].[LastOrderID]
|
|
FROM [Customers] AS [c]
|
|
INNER JOIN (
|
|
SELECT [o].[CustomerID], MAX([o].[OrderID]) AS [LastOrderID]
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID]
|
|
HAVING COUNT(*) > 5
|
|
) AS [t] ON [c].[CustomerID] = [t].[CustomerID]");
|
|
}
|
|
|
|
public override async Task Join_GroupBy_Aggregate_single_join(bool isAsync)
|
|
{
|
|
await base.Join_GroupBy_Aggregate_single_join(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], [t].[CustomerID], [t].[LastOrderID]
|
|
FROM [Customers] AS [c]
|
|
INNER JOIN (
|
|
SELECT [o].[CustomerID], MAX([o].[OrderID]) AS [LastOrderID]
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID]
|
|
HAVING COUNT(*) > 5
|
|
) AS [t] ON [c].[CustomerID] = [t].[CustomerID]");
|
|
}
|
|
|
|
public override async Task Join_GroupBy_Aggregate_with_another_join(bool isAsync)
|
|
{
|
|
await base.Join_GroupBy_Aggregate_with_another_join(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], [t].[CustomerID], [t].[LastOrderID], [o0].[OrderID]
|
|
FROM [Customers] AS [c]
|
|
INNER JOIN (
|
|
SELECT [o].[CustomerID], MAX([o].[OrderID]) AS [LastOrderID]
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID]
|
|
HAVING COUNT(*) > 5
|
|
) AS [t] ON [c].[CustomerID] = [t].[CustomerID]
|
|
INNER JOIN [Orders] AS [o0] ON [c].[CustomerID] = [o0].[CustomerID]");
|
|
}
|
|
|
|
public override async Task Join_GroupBy_Aggregate_in_subquery(bool isAsync)
|
|
{
|
|
await base.Join_GroupBy_Aggregate_in_subquery(isAsync);
|
|
|
|
AssertContains(
|
|
@"SELECT [c0].[CustomerID], [c0].[Address], [c0].[City], [c0].[CompanyName], [c0].[ContactName], [c0].[ContactTitle], [c0].[Country], [c0].[Fax], [c0].[Phone], [c0].[PostalCode], [c0].[Region], [t0].[CustomerID], [t0].[LastOrderID]
|
|
FROM [Customers] AS [c0]
|
|
INNER JOIN (
|
|
SELECT [o1].[CustomerID], MAX([o1].[OrderID]) AS [LastOrderID]
|
|
FROM [Orders] AS [o1]
|
|
GROUP BY [o1].[CustomerID]
|
|
HAVING COUNT(*) > 5
|
|
) AS [t0] ON [c0].[CustomerID] = [t0].[CustomerID]",
|
|
//
|
|
@"SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate]
|
|
FROM [Orders] AS [o]
|
|
WHERE [o].[OrderID] < 10400");
|
|
}
|
|
|
|
public override async Task Join_GroupBy_Aggregate_on_key(bool isAsync)
|
|
{
|
|
await base.Join_GroupBy_Aggregate_on_key(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], [t].[Key], [t].[LastOrderID]
|
|
FROM [Customers] AS [c]
|
|
INNER JOIN (
|
|
SELECT [o].[CustomerID] AS [Key], MAX([o].[OrderID]) AS [LastOrderID]
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID]
|
|
HAVING COUNT(*) > 5
|
|
) AS [t] ON [c].[CustomerID] = [t].[Key]");
|
|
}
|
|
|
|
public override async Task GroupBy_with_result_selector(bool isAsync)
|
|
{
|
|
await base.GroupBy_with_result_selector(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT SUM([o].[OrderID]) AS [Sum], MIN([o].[OrderID]) AS [Min], MAX([o].[OrderID]) AS [Max], AVG(CAST([o].[OrderID] AS float)) AS [Avg]
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupBy_Sum_constant(bool isAsync)
|
|
{
|
|
await base.GroupBy_Sum_constant(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT SUM(1)
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupBy_Sum_constant_cast(bool isAsync)
|
|
{
|
|
await base.GroupBy_Sum_constant_cast(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT SUM(CAST(1 AS bigint))
|
|
FROM [Orders] AS [o]
|
|
GROUP BY [o].[CustomerID]");
|
|
}
|
|
|
|
public override async Task Distinct_GroupBy_OrderBy_key(bool isAsync)
|
|
{
|
|
await base.Distinct_GroupBy_OrderBy_key(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [t].[CustomerID] AS [Key], COUNT(*) AS [c]
|
|
FROM (
|
|
SELECT DISTINCT [o].*
|
|
FROM [Orders] AS [o]
|
|
) AS [t]
|
|
GROUP BY [t].[CustomerID]
|
|
ORDER BY [t].[CustomerID]");
|
|
}
|
|
|
|
public override void Select_nested_collection_with_groupby()
|
|
{
|
|
base.Select_nested_collection_with_groupby();
|
|
|
|
AssertSql(
|
|
@"SELECT (
|
|
SELECT CASE
|
|
WHEN EXISTS (
|
|
SELECT 1
|
|
FROM [Orders] AS [o0]
|
|
WHERE [c].[CustomerID] = [o0].[CustomerID])
|
|
THEN CAST(1 AS BIT) ELSE CAST(0 AS BIT)
|
|
END
|
|
), [c].[CustomerID]
|
|
FROM [Customers] AS [c]
|
|
WHERE [c].[CustomerID] LIKE N'A' + N'%' AND (LEFT([c].[CustomerID], LEN(N'A')) = N'A')",
|
|
//
|
|
@"@_outer_CustomerID='ALFKI' (Size = 5)
|
|
|
|
SELECT [o1].[OrderID]
|
|
FROM [Orders] AS [o1]
|
|
WHERE @_outer_CustomerID = [o1].[CustomerID]
|
|
ORDER BY [o1].[OrderID]",
|
|
//
|
|
@"@_outer_CustomerID='ANATR' (Size = 5)
|
|
|
|
SELECT [o1].[OrderID]
|
|
FROM [Orders] AS [o1]
|
|
WHERE @_outer_CustomerID = [o1].[CustomerID]
|
|
ORDER BY [o1].[OrderID]",
|
|
//
|
|
@"@_outer_CustomerID='ANTON' (Size = 5)
|
|
|
|
SELECT [o1].[OrderID]
|
|
FROM [Orders] AS [o1]
|
|
WHERE @_outer_CustomerID = [o1].[CustomerID]
|
|
ORDER BY [o1].[OrderID]",
|
|
//
|
|
@"@_outer_CustomerID='AROUT' (Size = 5)
|
|
|
|
SELECT [o1].[OrderID]
|
|
FROM [Orders] AS [o1]
|
|
WHERE @_outer_CustomerID = [o1].[CustomerID]
|
|
ORDER BY [o1].[OrderID]");
|
|
}
|
|
|
|
public override void Select_GroupBy_All()
|
|
{
|
|
base.Select_GroupBy_All();
|
|
|
|
AssertSql(
|
|
@"SELECT [o].[OrderID] AS [Order], [o].[CustomerID] AS [Customer]
|
|
FROM [Orders] AS [o]
|
|
ORDER BY [o].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupBy_Where_in_aggregate(bool isAsync)
|
|
{
|
|
await base.GroupBy_Where_in_aggregate(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate]
|
|
FROM [Orders] AS [o]
|
|
ORDER BY [o].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupBy_anonymous(bool isAsync)
|
|
{
|
|
await base.GroupBy_anonymous(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [c].[City], [c].[CustomerID]
|
|
FROM [Customers] AS [c]
|
|
ORDER BY [c].[City]");
|
|
}
|
|
|
|
public override async Task GroupBy_anonymous_with_where(bool isAsync)
|
|
{
|
|
await base.GroupBy_anonymous_with_where(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [c].[City], [c].[CustomerID]
|
|
FROM [Customers] AS [c]
|
|
WHERE [c].[Country] IN ('Argentina', 'Austria', 'Brazil', 'France', 'Germany', 'USA')
|
|
ORDER BY [c].[City]");
|
|
}
|
|
|
|
public override async Task GroupBy_anonymous_subquery(bool isAsync)
|
|
{
|
|
await base.GroupBy_anonymous_subquery(isAsync);
|
|
|
|
AssertSql(" ");
|
|
}
|
|
|
|
public override async Task GroupBy_nested_order_by_enumerable(bool isAsync)
|
|
{
|
|
await base.GroupBy_nested_order_by_enumerable(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [c].[Country], [c].[CustomerID]
|
|
FROM [Customers] AS [c]
|
|
ORDER BY [c].[Country]");
|
|
}
|
|
|
|
public override async Task GroupBy_join_default_if_empty_anonymous(bool isAsync)
|
|
{
|
|
await base.GroupBy_join_default_if_empty_anonymous(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [order0].[OrderID], [order0].[CustomerID], [order0].[EmployeeID], [order0].[OrderDate], [orderDetail0].[OrderID], [orderDetail0].[ProductID], [orderDetail0].[Discount], [orderDetail0].[Quantity], [orderDetail0].[UnitPrice]
|
|
FROM [Orders] AS [order0]
|
|
LEFT JOIN [Order Details] AS [orderDetail0] ON [order0].[OrderID] = [orderDetail0].[OrderID]
|
|
ORDER BY [order0].[OrderID]");
|
|
}
|
|
|
|
public override async Task GroupBy_SelectMany(bool isAsync)
|
|
{
|
|
await base.GroupBy_SelectMany(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 [c].[City]");
|
|
}
|
|
|
|
public override async Task GroupBy_simple(bool isAsync)
|
|
{
|
|
await base.GroupBy_simple(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate]
|
|
FROM [Orders] AS [o]
|
|
ORDER BY [o].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupBy_simple2(bool isAsync)
|
|
{
|
|
await base.GroupBy_simple2(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate]
|
|
FROM [Orders] AS [o]
|
|
ORDER BY [o].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupBy_first(bool isAsync)
|
|
{
|
|
await base.GroupBy_first(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate]
|
|
FROM [Orders] AS [o]
|
|
WHERE [o].[CustomerID] = 'ALFKI'
|
|
ORDER BY [o].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupBy_with_element_selector(bool isAsync)
|
|
{
|
|
await base.GroupBy_with_element_selector(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [o].[CustomerID], [o].[OrderID]
|
|
FROM [Orders] AS [o]
|
|
ORDER BY [o].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupBy_with_element_selector2(bool isAsync)
|
|
{
|
|
await base.GroupBy_with_element_selector2(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate]
|
|
FROM [Orders] AS [o]
|
|
ORDER BY [o].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupBy_with_element_selector3(bool isAsync)
|
|
{
|
|
await base.GroupBy_with_element_selector3(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [e].[EmployeeID], [e].[City], [e].[Country], [e].[FirstName], [e].[ReportsTo], [e].[Title]
|
|
FROM [Employees] AS [e]
|
|
ORDER BY [e].[EmployeeID]");
|
|
}
|
|
|
|
public override async Task GroupBy_DateTimeOffset_Property(bool isAsync)
|
|
{
|
|
await base.GroupBy_DateTimeOffset_Property(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate]
|
|
FROM [Orders] AS [o]
|
|
WHERE [o].[OrderDate] IS NOT NULL
|
|
ORDER BY DatePart('m', [o].[OrderDate])");
|
|
}
|
|
|
|
public override async Task OrderBy_GroupBy_SelectMany(bool isAsync)
|
|
{
|
|
await base.OrderBy_GroupBy_SelectMany(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate]
|
|
FROM [Orders] AS [o]
|
|
ORDER BY [o].[CustomerID], [o].[OrderID]");
|
|
}
|
|
|
|
public override async Task OrderBy_GroupBy_SelectMany_shadow(bool isAsync)
|
|
{
|
|
await base.OrderBy_GroupBy_SelectMany_shadow(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [e].[EmployeeID], [e].[City], [e].[Country], [e].[FirstName], [e].[ReportsTo], [e].[Title]
|
|
FROM [Employees] AS [e]
|
|
ORDER BY [e].[EmployeeID]");
|
|
}
|
|
|
|
public override async Task GroupBy_with_orderby(bool isAsync)
|
|
{
|
|
await base.GroupBy_with_orderby(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate]
|
|
FROM [Orders] AS [o]
|
|
ORDER BY [o].[CustomerID], [o].[OrderID]");
|
|
}
|
|
|
|
public override async Task GroupBy_with_orderby_and_anonymous_projection(bool isAsync)
|
|
{
|
|
await base.GroupBy_with_orderby_and_anonymous_projection(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate]
|
|
FROM [Orders] AS [o]
|
|
ORDER BY [o].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupBy_with_orderby_take_skip_distinct(bool isAsync)
|
|
{
|
|
await base.GroupBy_with_orderby_take_skip_distinct(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate]
|
|
FROM [Orders] AS [o]
|
|
ORDER BY [o].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupBy_join_anonymous(bool isAsync)
|
|
{
|
|
await base.GroupBy_join_anonymous(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [order0].[OrderID], [order0].[CustomerID], [order0].[EmployeeID], [order0].[OrderDate], [orderDetail0].[OrderID], [orderDetail0].[ProductID], [orderDetail0].[Discount], [orderDetail0].[Quantity], [orderDetail0].[UnitPrice]
|
|
FROM [Orders] AS [order0]
|
|
LEFT JOIN [Order Details] AS [orderDetail0] ON [order0].[OrderID] = [orderDetail0].[OrderID]
|
|
ORDER BY [order0].[OrderID]");
|
|
}
|
|
|
|
public override async Task GroupBy_Distinct(bool isAsync)
|
|
{
|
|
await base.GroupBy_Distinct(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate]
|
|
FROM [Orders] AS [o0]
|
|
ORDER BY [o0].[CustomerID]");
|
|
}
|
|
|
|
public override async Task OrderBy_Skip_GroupBy(bool isAsync)
|
|
{
|
|
await base.OrderBy_Skip_GroupBy(isAsync);
|
|
|
|
AssertSql(
|
|
@"@__p_0='800'
|
|
|
|
SELECT [t].[OrderID], [t].[CustomerID], [t].[EmployeeID], [t].[OrderDate]
|
|
FROM (
|
|
SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate]
|
|
FROM [Orders] AS [o]
|
|
ORDER BY [o].[OrderDate], [o].[OrderID]
|
|
OFFSET @__p_0 ROWS
|
|
) AS [t]
|
|
ORDER BY [t].[CustomerID]");
|
|
}
|
|
|
|
public override async Task OrderBy_Take_GroupBy(bool isAsync)
|
|
{
|
|
await base.OrderBy_Take_GroupBy(isAsync);
|
|
|
|
AssertSql(
|
|
@"@__p_0='50'
|
|
|
|
SELECT [t].[OrderID], [t].[CustomerID], [t].[EmployeeID], [t].[OrderDate]
|
|
FROM (
|
|
SELECT TOP @__p_0 [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate]
|
|
FROM [Orders] AS [o]
|
|
ORDER BY [o].[OrderDate]
|
|
) AS [t]
|
|
ORDER BY [t].[CustomerID]");
|
|
}
|
|
|
|
public override async Task OrderBy_Skip_Take_GroupBy(bool isAsync)
|
|
{
|
|
await base.OrderBy_Skip_Take_GroupBy(isAsync);
|
|
|
|
AssertSql(
|
|
@"@__p_0='450'
|
|
@__p_1='50'
|
|
|
|
SELECT [t].[OrderID], [t].[CustomerID], [t].[EmployeeID], [t].[OrderDate]
|
|
FROM (
|
|
SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate]
|
|
FROM [Orders] AS [o]
|
|
ORDER BY [o].[OrderDate]
|
|
OFFSET @__p_0 ROWS FETCH NEXT @__p_1 ROWS ONLY
|
|
) AS [t]
|
|
ORDER BY [t].[CustomerID]");
|
|
}
|
|
|
|
public override async Task Select_Distinct_GroupBy(bool isAsync)
|
|
{
|
|
await base.Select_Distinct_GroupBy(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [t].[CustomerID], [t].[EmployeeID]
|
|
FROM (
|
|
SELECT DISTINCT [o].[CustomerID], [o].[EmployeeID]
|
|
FROM [Orders] AS [o]
|
|
) AS [t]
|
|
ORDER BY [t].[CustomerID]");
|
|
}
|
|
|
|
public override async Task GroupBy_with_aggregate_through_navigation_property(bool isAsync)
|
|
{
|
|
await base.GroupBy_with_aggregate_through_navigation_property(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [c].[OrderID], [c].[CustomerID], [c].[EmployeeID], [c].[OrderDate]
|
|
FROM [Orders] AS [c]
|
|
ORDER BY [c].[EmployeeID]",
|
|
//
|
|
@"SELECT [i#Customer0].[CustomerID], [i#Customer0].[Region]
|
|
FROM [Customers] AS [i#Customer0]",
|
|
//
|
|
@"SELECT [i#Customer0].[CustomerID], [i#Customer0].[Region]
|
|
FROM [Customers] AS [i#Customer0]");
|
|
}
|
|
|
|
public override void GroupBy_anonymous_key_without_aggregate()
|
|
{
|
|
base.GroupBy_anonymous_key_without_aggregate();
|
|
|
|
AssertSql(
|
|
@"SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate]
|
|
FROM [Orders] AS [o]
|
|
ORDER BY [o].[CustomerID], [o].[OrderDate]");
|
|
}
|
|
|
|
public override async Task GroupBy_Shadow(bool isAsync)
|
|
{
|
|
await base.GroupBy_Shadow(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [e].[EmployeeID], [e].[City], [e].[Country], [e].[FirstName], [e].[ReportsTo], [e].[Title]
|
|
FROM [Employees] AS [e]
|
|
WHERE ([e].[Title] = 'Sales Representative') AND ([e].[EmployeeID] = 1)
|
|
ORDER BY [e].[Title]");
|
|
}
|
|
|
|
public override async Task GroupBy_Shadow2(bool isAsync)
|
|
{
|
|
await base.GroupBy_Shadow2(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [e].[EmployeeID], [e].[City], [e].[Country], [e].[FirstName], [e].[ReportsTo], [e].[Title]
|
|
FROM [Employees] AS [e]
|
|
WHERE ([e].[Title] = 'Sales Representative') AND ([e].[EmployeeID] = 1)
|
|
ORDER BY [e].[Title]");
|
|
}
|
|
|
|
public override async Task GroupBy_Shadow3(bool isAsync)
|
|
{
|
|
await base.GroupBy_Shadow3(isAsync);
|
|
|
|
AssertSql(
|
|
@"SELECT [e].[EmployeeID], [e].[City], [e].[Country], [e].[FirstName], [e].[ReportsTo], [e].[Title]
|
|
FROM [Employees] AS [e]
|
|
WHERE [e].[EmployeeID] = 1
|
|
ORDER BY [e].[EmployeeID]");
|
|
}
|
|
|
|
public override async Task GroupBy_Select_First_GroupBy(bool isAsync)
|
|
{
|
|
await base.GroupBy_Select_First_GroupBy(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 [c].[City]");
|
|
}
|
|
|
|
public override void Select_GroupBy()
|
|
{
|
|
base.Select_GroupBy();
|
|
|
|
AssertSql(
|
|
@"SELECT [o].[OrderID] AS [Order], [o].[CustomerID] AS [Customer]
|
|
FROM [Orders] AS [o]
|
|
ORDER BY [o].[CustomerID]");
|
|
}
|
|
|
|
public override void Select_GroupBy_SelectMany()
|
|
{
|
|
base.Select_GroupBy_SelectMany();
|
|
|
|
AssertSql(
|
|
@"SELECT [o].[OrderID] AS [Order], [o].[CustomerID] AS [Customer]
|
|
FROM [Orders] AS [o]
|
|
ORDER BY [o].[OrderID]");
|
|
}
|
|
|
|
public override void Join_GroupBy_entity_ToList()
|
|
{
|
|
base.Join_GroupBy_entity_ToList();
|
|
|
|
AssertSql(
|
|
@"@__p_0='5'
|
|
@__p_1='50'
|
|
|
|
SELECT [t1].[CustomerID], [t1].[Address], [t1].[City], [t1].[CompanyName], [t1].[ContactName], [t1].[ContactTitle], [t1].[Country], [t1].[Fax], [t1].[Phone], [t1].[PostalCode], [t1].[Region], [t2].[OrderID], [t2].[CustomerID], [t2].[EmployeeID], [t2].[OrderDate]
|
|
FROM (
|
|
SELECT TOP(@__p_0) [c0].[CustomerID], [c0].[Address], [c0].[City], [c0].[CompanyName], [c0].[ContactName], [c0].[ContactTitle], [c0].[Country], [c0].[Fax], [c0].[Phone], [c0].[PostalCode], [c0].[Region]
|
|
FROM [Customers] AS [c0]
|
|
ORDER BY [c0].[CustomerID]
|
|
) AS [t1]
|
|
INNER JOIN (
|
|
SELECT TOP(@__p_1) [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate]
|
|
FROM [Orders] AS [o0]
|
|
ORDER BY [o0].[OrderID]
|
|
) AS [t2] ON [t1].[CustomerID] = [t2].[CustomerID]");
|
|
}
|
|
|
|
public override void Double_GroupBy_with_aggregate()
|
|
{
|
|
base.Double_GroupBy_with_aggregate();
|
|
|
|
AssertSql(
|
|
@"SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate]
|
|
FROM [Orders] AS [o0]
|
|
ORDER BY [o0].[OrderID], [o0].[OrderDate]");
|
|
}
|
|
|
|
private void AssertSql(params string[] expected)
|
|
=> Fixture.TestSqlLoggerFactory.AssertSql(expected);
|
|
|
|
private void AssertContains(params string[] expected)
|
|
=> Fixture.TestSqlLoggerFactory.AssertContains(expected);
|
|
|
|
protected override void ClearLog()
|
|
=> Fixture.TestSqlLoggerFactory.Clear();
|
|
}
|
|
}
|