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.
905 lines
27 KiB
C#
905 lines
27 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 Xunit;
|
|
|
|
namespace EntityFramework.Jet.FunctionalTests.Query
|
|
{
|
|
public partial class SimpleQueryJetTest
|
|
{
|
|
public override void Projection_when_arithmetic_expression_precendence()
|
|
{
|
|
base.Projection_when_arithmetic_expression_precendence();
|
|
|
|
AssertSql(
|
|
@"SELECT [o].[OrderID] / ([o].[OrderID] / 2) AS [A], ([o].[OrderID] / [o].[OrderID]) / 2 AS [B]
|
|
FROM [Orders] AS [o]");
|
|
}
|
|
|
|
public override void Projection_when_arithmetic_expressions()
|
|
{
|
|
base.Projection_when_arithmetic_expressions();
|
|
|
|
AssertSql(
|
|
@"SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate]
|
|
FROM [Orders] AS [o]");
|
|
}
|
|
|
|
public override void Projection_when_arithmetic_mixed()
|
|
{
|
|
base.Projection_when_arithmetic_mixed();
|
|
|
|
AssertSql(
|
|
@"@__p_0='10'
|
|
|
|
SELECT [t].[OrderID], [t].[CustomerID], [t].[EmployeeID], [t].[OrderDate], [t0].[EmployeeID], [t0].[City], [t0].[Country], [t0].[FirstName], [t0].[ReportsTo], [t0].[Title]
|
|
FROM (
|
|
SELECT TOP @__p_0 [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate]
|
|
FROM [Orders] AS [o]
|
|
ORDER BY [o].[OrderID]
|
|
) AS [t]
|
|
, (
|
|
SELECT TOP(5) [e].[EmployeeID], [e].[City], [e].[Country], [e].[FirstName], [e].[ReportsTo], [e].[Title]
|
|
FROM [Employees] AS [e]
|
|
ORDER BY [e].[EmployeeID]
|
|
) AS [t0]");
|
|
}
|
|
|
|
public override void Projection_when_arithmetic_mixed_subqueries()
|
|
{
|
|
base.Projection_when_arithmetic_mixed_subqueries();
|
|
|
|
AssertSql(
|
|
@"@__p_0='3'
|
|
|
|
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].[OrderID]
|
|
) AS [t]",
|
|
//
|
|
@"SELECT TOP 2 [e0].[EmployeeID], [e0].[City], [e0].[Country], [e0].[FirstName], [e0].[ReportsTo], [e0].[Title]
|
|
FROM [Employees] AS [e0]
|
|
ORDER BY [e0].[EmployeeID]",
|
|
//
|
|
@"SELECT TOP 2 [e0].[EmployeeID], [e0].[City], [e0].[Country], [e0].[FirstName], [e0].[ReportsTo], [e0].[Title]
|
|
FROM [Employees] AS [e0]
|
|
ORDER BY [e0].[EmployeeID]",
|
|
//
|
|
@"SELECT TOP 2 [e0].[EmployeeID], [e0].[City], [e0].[Country], [e0].[FirstName], [e0].[ReportsTo], [e0].[Title]
|
|
FROM [Employees] AS [e0]
|
|
ORDER BY [e0].[EmployeeID]");
|
|
}
|
|
|
|
public override void Projection_when_null_value()
|
|
{
|
|
base.Projection_when_null_value();
|
|
|
|
AssertSql(
|
|
@"SELECT [c].[Region]
|
|
FROM [Customers] AS [c]");
|
|
}
|
|
|
|
public override void Projection_when_client_evald_subquery()
|
|
{
|
|
base.Projection_when_client_evald_subquery();
|
|
|
|
AssertSql(
|
|
@"SELECT [c].[CustomerID]
|
|
FROM [Customers] AS [c]
|
|
ORDER BY [c].[CustomerID]",
|
|
//
|
|
@"SELECT [t].[CustomerID], [c.Orders].[CustomerID]
|
|
FROM [Orders] AS [c.Orders]
|
|
INNER JOIN (
|
|
SELECT [c0].[CustomerID]
|
|
FROM [Customers] AS [c0]
|
|
) AS [t] ON [c.Orders].[CustomerID] = [t].[CustomerID]
|
|
ORDER BY [t].[CustomerID]");
|
|
}
|
|
|
|
public override void Project_to_object_array()
|
|
{
|
|
base.Project_to_object_array();
|
|
|
|
AssertSql(
|
|
@"SELECT [e].[EmployeeID], [e].[ReportsTo], [e].[Title]
|
|
FROM [Employees] AS [e]
|
|
WHERE [e].[EmployeeID] = 1");
|
|
}
|
|
|
|
public override void Project_to_int_array()
|
|
{
|
|
base.Project_to_int_array();
|
|
|
|
AssertSql(
|
|
@"SELECT [e].[EmployeeID], [e].[ReportsTo]
|
|
FROM [Employees] AS [e]
|
|
WHERE [e].[EmployeeID] = 1");
|
|
}
|
|
|
|
public override void Select_scalar()
|
|
{
|
|
base.Select_scalar();
|
|
|
|
AssertSql(
|
|
@"SELECT [c].[City]
|
|
FROM [Customers] AS [c]");
|
|
}
|
|
|
|
public override void Select_anonymous_one()
|
|
{
|
|
base.Select_anonymous_one();
|
|
|
|
AssertSql(
|
|
@"SELECT [c].[City]
|
|
FROM [Customers] AS [c]");
|
|
}
|
|
|
|
public override void Select_anonymous_two()
|
|
{
|
|
base.Select_anonymous_two();
|
|
|
|
AssertSql(
|
|
@"SELECT [c].[City], [c].[Phone]
|
|
FROM [Customers] AS [c]");
|
|
}
|
|
|
|
public override void Select_anonymous_three()
|
|
{
|
|
base.Select_anonymous_three();
|
|
|
|
AssertSql(
|
|
@"SELECT [c].[City], [c].[Phone], [c].[Country]
|
|
FROM [Customers] AS [c]");
|
|
}
|
|
|
|
public override void Select_anonymous_bool_constant_true()
|
|
{
|
|
base.Select_anonymous_bool_constant_true();
|
|
|
|
AssertSql(
|
|
@"SELECT [c].[CustomerID]
|
|
FROM [Customers] AS [c]");
|
|
}
|
|
|
|
public override void Select_anonymous_constant_in_expression()
|
|
{
|
|
base.Select_anonymous_constant_in_expression();
|
|
|
|
AssertSql(
|
|
@"SELECT [c].[CustomerID], CAST(LEN([c].[CustomerID]) AS int) + 5 AS [Expression]
|
|
FROM [Customers] AS [c]");
|
|
}
|
|
|
|
#if !Test20
|
|
public override void Select_anonymous_conditional_expression()
|
|
{
|
|
base.Select_anonymous_conditional_expression();
|
|
|
|
AssertSql(
|
|
@"SELECT [p].[ProductID], CASE
|
|
WHEN [p].[UnitsInStock] > CAST(0 AS smallint)
|
|
THEN CAST(1 AS BIT) ELSE CAST(0 AS BIT)
|
|
END AS [IsAvailable]
|
|
FROM [Products] AS [p]");
|
|
}
|
|
#endif
|
|
|
|
public override void Select_constant_int()
|
|
{
|
|
base.Select_constant_int();
|
|
|
|
AssertSql(
|
|
@"SELECT 1
|
|
FROM [Customers] AS [c]");
|
|
}
|
|
|
|
public override void Select_constant_null_string()
|
|
{
|
|
base.Select_constant_null_string();
|
|
|
|
AssertSql(
|
|
@"SELECT 1
|
|
FROM [Customers] AS [c]");
|
|
}
|
|
|
|
public override void Select_local()
|
|
{
|
|
base.Select_local();
|
|
|
|
AssertSql(
|
|
@"@__x_0='10'
|
|
|
|
SELECT @__x_0
|
|
FROM [Customers] AS [c]");
|
|
}
|
|
|
|
public override void Select_scalar_primitive_after_take()
|
|
{
|
|
base.Select_scalar_primitive_after_take();
|
|
|
|
AssertSql(
|
|
@"@__p_0='9'
|
|
|
|
SELECT TOP @__p_0 [e].[EmployeeID]
|
|
FROM [Employees] AS [e]");
|
|
}
|
|
|
|
public override void Select_project_filter()
|
|
{
|
|
base.Select_project_filter();
|
|
|
|
AssertSql(
|
|
@"SELECT [c].[CompanyName]
|
|
FROM [Customers] AS [c]
|
|
WHERE [c].[City] = 'London'");
|
|
}
|
|
|
|
public override void Select_project_filter2()
|
|
{
|
|
base.Select_project_filter2();
|
|
|
|
AssertSql(
|
|
@"SELECT [c].[City]
|
|
FROM [Customers] AS [c]
|
|
WHERE [c].[City] = 'London'");
|
|
}
|
|
|
|
public override void Select_nested_collection()
|
|
{
|
|
base.Select_nested_collection();
|
|
|
|
AssertSql(
|
|
@"SELECT [c].[CustomerID]
|
|
FROM [Customers] AS [c]
|
|
WHERE [c].[City] = 'London'
|
|
ORDER BY [c].[CustomerID]",
|
|
//
|
|
@"@_outer_CustomerID='AROUT' (Nullable = false) (Size = 5)
|
|
|
|
SELECT [o].[OrderID]
|
|
FROM [Orders] AS [o]
|
|
WHERE ([o].[CustomerID] = @_outer_CustomerID) AND (DatePart('yyyy', [o].[OrderDate]) = 1997)
|
|
ORDER BY [o].[OrderID]",
|
|
//
|
|
@"@_outer_CustomerID='BSBEV' (Nullable = false) (Size = 5)
|
|
|
|
SELECT [o].[OrderID]
|
|
FROM [Orders] AS [o]
|
|
WHERE ([o].[CustomerID] = @_outer_CustomerID) AND (DatePart('yyyy', [o].[OrderDate]) = 1997)
|
|
ORDER BY [o].[OrderID]",
|
|
//
|
|
@"@_outer_CustomerID='CONSH' (Nullable = false) (Size = 5)
|
|
|
|
SELECT [o].[OrderID]
|
|
FROM [Orders] AS [o]
|
|
WHERE ([o].[CustomerID] = @_outer_CustomerID) AND (DatePart('yyyy', [o].[OrderDate]) = 1997)
|
|
ORDER BY [o].[OrderID]",
|
|
//
|
|
@"@_outer_CustomerID='EASTC' (Nullable = false) (Size = 5)
|
|
|
|
SELECT [o].[OrderID]
|
|
FROM [Orders] AS [o]
|
|
WHERE ([o].[CustomerID] = @_outer_CustomerID) AND (DatePart('yyyy', [o].[OrderDate]) = 1997)
|
|
ORDER BY [o].[OrderID]",
|
|
//
|
|
@"@_outer_CustomerID='NORTS' (Nullable = false) (Size = 5)
|
|
|
|
SELECT [o].[OrderID]
|
|
FROM [Orders] AS [o]
|
|
WHERE ([o].[CustomerID] = @_outer_CustomerID) AND (DatePart('yyyy', [o].[OrderDate]) = 1997)
|
|
ORDER BY [o].[OrderID]",
|
|
//
|
|
@"@_outer_CustomerID='SEVES' (Nullable = false) (Size = 5)
|
|
|
|
SELECT [o].[OrderID]
|
|
FROM [Orders] AS [o]
|
|
WHERE ([o].[CustomerID] = @_outer_CustomerID) AND (DatePart('yyyy', [o].[OrderDate]) = 1997)
|
|
ORDER BY [o].[OrderID]");
|
|
}
|
|
|
|
public override void Select_nested_collection_multi_level()
|
|
{
|
|
base.Select_nested_collection_multi_level();
|
|
|
|
AssertSql(
|
|
@"SELECT [c].[CustomerID]
|
|
FROM [Customers] AS [c]
|
|
WHERE [c].[CustomerID] LIKE 'A' + '%'",
|
|
//
|
|
@"@_outer_CustomerID='ALFKI' (Nullable = false) (Size = 5)
|
|
|
|
SELECT TOP 3 [o].[OrderDate] AS [Date]
|
|
FROM [Orders] AS [o]
|
|
WHERE ([o].[OrderID] < 10500) AND (@_outer_CustomerID = [o].[CustomerID])",
|
|
//
|
|
@"@_outer_CustomerID='ANATR' (Nullable = false) (Size = 5)
|
|
|
|
SELECT TOP 3 [o].[OrderDate] AS [Date]
|
|
FROM [Orders] AS [o]
|
|
WHERE ([o].[OrderID] < 10500) AND (@_outer_CustomerID = [o].[CustomerID])",
|
|
//
|
|
@"@_outer_CustomerID='ANTON' (Nullable = false) (Size = 5)
|
|
|
|
SELECT TOP 3 [o].[OrderDate] AS [Date]
|
|
FROM [Orders] AS [o]
|
|
WHERE ([o].[OrderID] < 10500) AND (@_outer_CustomerID = [o].[CustomerID])",
|
|
//
|
|
@"@_outer_CustomerID='AROUT' (Nullable = false) (Size = 5)
|
|
|
|
SELECT TOP 3 [o].[OrderDate] AS [Date]
|
|
FROM [Orders] AS [o]
|
|
WHERE ([o].[OrderID] < 10500) AND (@_outer_CustomerID = [o].[CustomerID])");
|
|
}
|
|
|
|
public override void Select_nested_collection_multi_level2()
|
|
{
|
|
base.Select_nested_collection_multi_level2();
|
|
|
|
AssertSql(
|
|
@"SELECT (
|
|
SELECT TOP 1 [o].[OrderDate]
|
|
FROM [Orders] AS [o]
|
|
WHERE ([o].[OrderID] < 10500) AND ([c].[CustomerID] = [o].[CustomerID])
|
|
) AS [OrderDates]
|
|
FROM [Customers] AS [c]
|
|
WHERE [c].[CustomerID] LIKE 'A' + '%'");
|
|
}
|
|
|
|
public override void Select_nested_collection_multi_level3()
|
|
{
|
|
base.Select_nested_collection_multi_level3();
|
|
|
|
AssertSql(
|
|
@"SELECT (
|
|
SELECT TOP 1 [o].[OrderDate]
|
|
FROM [Orders] AS [o]
|
|
WHERE ([o].[OrderID] < 10500) AND ([c].[CustomerID] = [o].[CustomerID])
|
|
) AS [OrderDates]
|
|
FROM [Customers] AS [c]
|
|
WHERE [c].[CustomerID] LIKE 'A' + '%'");
|
|
}
|
|
|
|
public override void Select_nested_collection_multi_level4()
|
|
{
|
|
base.Select_nested_collection_multi_level4();
|
|
|
|
AssertSql(
|
|
@"SELECT COALESCE((
|
|
SELECT TOP 1 (
|
|
SELECT COUNT(*)
|
|
FROM [Order Details] AS [od]
|
|
WHERE ([od].[OrderID] > 10) AND ([o].[OrderID] = [od].[OrderID])
|
|
)
|
|
FROM [Orders] AS [o]
|
|
WHERE ([o].[OrderID] < 10500) AND ([c].[CustomerID] = [o].[CustomerID])
|
|
), 0) AS [Order]
|
|
FROM [Customers] AS [c]
|
|
WHERE [c].[CustomerID] LIKE 'A' + '%'");
|
|
}
|
|
|
|
public override void Select_nested_collection_multi_level5()
|
|
{
|
|
base.Select_nested_collection_multi_level5();
|
|
|
|
AssertSql(
|
|
@"SELECT COALESCE((
|
|
SELECT TOP 1 (
|
|
SELECT TOP 1 [od].[ProductID]
|
|
FROM [Order Details] AS [od]
|
|
WHERE ([od].[OrderID] <> (
|
|
SELECT COUNT(*)
|
|
FROM [Orders] AS [o0]
|
|
WHERE [c].[CustomerID] = [o0].[CustomerID]
|
|
)) AND ([o].[OrderID] = [od].[OrderID])
|
|
)
|
|
FROM [Orders] AS [o]
|
|
WHERE ([o].[OrderID] < 10500) AND ([c].[CustomerID] = [o].[CustomerID])
|
|
), 0) AS [Order]
|
|
FROM [Customers] AS [c]
|
|
WHERE [c].[CustomerID] LIKE 'A' + '%'");
|
|
}
|
|
|
|
public override void Select_nested_collection_multi_level6()
|
|
{
|
|
base.Select_nested_collection_multi_level6();
|
|
|
|
AssertSql(
|
|
@"SELECT COALESCE((
|
|
SELECT TOP 1 (
|
|
SELECT TOP 1 [od].[ProductID]
|
|
FROM [Order Details] AS [od]
|
|
WHERE ([od].[OrderID] <> CAST(LEN([c].[CustomerID]) AS int)) AND ([o].[OrderID] = [od].[OrderID])
|
|
)
|
|
FROM [Orders] AS [o]
|
|
WHERE ([o].[OrderID] < 10500) AND ([c].[CustomerID] = [o].[CustomerID])
|
|
), 0) AS [Order]
|
|
FROM [Customers] AS [c]
|
|
WHERE [c].[CustomerID] LIKE 'A' + '%'");
|
|
}
|
|
|
|
public override void Select_nested_collection_count_using_anonymous_type()
|
|
{
|
|
base.Select_nested_collection_count_using_anonymous_type();
|
|
|
|
AssertSql(
|
|
@"SELECT (
|
|
SELECT COUNT(*)
|
|
FROM [Orders] AS [o]
|
|
WHERE [c].[CustomerID] = [o].[CustomerID]
|
|
) AS [Count]
|
|
FROM [Customers] AS [c]
|
|
WHERE [c].[CustomerID] LIKE 'A' + '%'");
|
|
}
|
|
|
|
public override void New_date_time_in_anonymous_type_works()
|
|
{
|
|
base.New_date_time_in_anonymous_type_works();
|
|
|
|
AssertSql(
|
|
@"SELECT 1
|
|
FROM [Customers] AS [c]
|
|
WHERE [c].[CustomerID] LIKE 'A' + '%'");
|
|
}
|
|
|
|
public override void Select_non_matching_value_types_int_to_long_introduces_explicit_cast()
|
|
{
|
|
base.Select_non_matching_value_types_int_to_long_introduces_explicit_cast();
|
|
|
|
AssertSql(
|
|
@"SELECT CAST([o].[OrderID] AS bigint)
|
|
FROM [Orders] AS [o]
|
|
WHERE [o].[CustomerID] = 'ALFKI'
|
|
ORDER BY [o].[OrderID]");
|
|
}
|
|
|
|
public override void Select_non_matching_value_types_nullable_int_to_long_introduces_explicit_cast()
|
|
{
|
|
base.Select_non_matching_value_types_nullable_int_to_long_introduces_explicit_cast();
|
|
|
|
AssertSql(
|
|
@"SELECT CAST([o].[EmployeeID] AS bigint)
|
|
FROM [Orders] AS [o]
|
|
WHERE [o].[CustomerID] = 'ALFKI'
|
|
ORDER BY [o].[OrderID]");
|
|
}
|
|
|
|
public override void Select_non_matching_value_types_nullable_int_to_int_doesnt_introduce_explicit_cast()
|
|
{
|
|
base.Select_non_matching_value_types_nullable_int_to_int_doesnt_introduce_explicit_cast();
|
|
|
|
AssertSql(
|
|
@"SELECT [o].[EmployeeID]
|
|
FROM [Orders] AS [o]
|
|
WHERE [o].[CustomerID] = 'ALFKI'
|
|
ORDER BY [o].[OrderID]");
|
|
}
|
|
|
|
public override void Select_non_matching_value_types_int_to_nullable_int_doesnt_introduce_explicit_cast()
|
|
{
|
|
base.Select_non_matching_value_types_int_to_nullable_int_doesnt_introduce_explicit_cast();
|
|
|
|
AssertSql(
|
|
@"SELECT [o].[OrderID]
|
|
FROM [Orders] AS [o]
|
|
WHERE [o].[CustomerID] = 'ALFKI'
|
|
ORDER BY [o].[OrderID]");
|
|
}
|
|
|
|
public override void Select_non_matching_value_types_from_binary_expression_introduces_explicit_cast()
|
|
{
|
|
base.Select_non_matching_value_types_from_binary_expression_introduces_explicit_cast();
|
|
|
|
AssertSql(
|
|
@"SELECT CAST([o].[OrderID] + [o].[OrderID] AS bigint)
|
|
FROM [Orders] AS [o]
|
|
WHERE [o].[CustomerID] = 'ALFKI'
|
|
ORDER BY [o].[OrderID]");
|
|
}
|
|
|
|
public override void Select_non_matching_value_types_from_binary_expression_nested_introduces_top_level_explicit_cast()
|
|
{
|
|
base.Select_non_matching_value_types_from_binary_expression_nested_introduces_top_level_explicit_cast();
|
|
|
|
AssertSql(
|
|
@"SELECT CAST([o].[OrderID] + [o].[OrderID] AS smallint)
|
|
FROM [Orders] AS [o]
|
|
WHERE [o].[CustomerID] = 'ALFKI'
|
|
ORDER BY [o].[OrderID]");
|
|
}
|
|
|
|
public override void Select_non_matching_value_types_from_unary_expression_introduces_explicit_cast1()
|
|
{
|
|
base.Select_non_matching_value_types_from_unary_expression_introduces_explicit_cast1();
|
|
|
|
AssertSql(
|
|
@"SELECT CAST(-[o].[OrderID] AS bigint)
|
|
FROM [Orders] AS [o]
|
|
WHERE [o].[CustomerID] = 'ALFKI'
|
|
ORDER BY [o].[OrderID]");
|
|
}
|
|
|
|
public override void Select_non_matching_value_types_from_unary_expression_introduces_explicit_cast2()
|
|
{
|
|
base.Select_non_matching_value_types_from_unary_expression_introduces_explicit_cast2();
|
|
|
|
AssertSql(
|
|
@"SELECT -CAST([o].[OrderID] AS bigint)
|
|
FROM [Orders] AS [o]
|
|
WHERE [o].[CustomerID] = 'ALFKI'
|
|
ORDER BY [o].[OrderID]");
|
|
}
|
|
|
|
public override void Select_non_matching_value_types_from_length_introduces_explicit_cast()
|
|
{
|
|
base.Select_non_matching_value_types_from_length_introduces_explicit_cast();
|
|
|
|
AssertSql(
|
|
@"SELECT CAST(CAST(LEN([o].[CustomerID]) AS int) AS bigint)
|
|
FROM [Orders] AS [o]
|
|
WHERE [o].[CustomerID] = 'ALFKI'
|
|
ORDER BY [o].[OrderID]");
|
|
}
|
|
|
|
public override void Select_non_matching_value_types_from_method_call_introduces_explicit_cast()
|
|
{
|
|
base.Select_non_matching_value_types_from_method_call_introduces_explicit_cast();
|
|
|
|
AssertSql(
|
|
@"SELECT CAST(ABS([o].[OrderID]) AS bigint)
|
|
FROM [Orders] AS [o]
|
|
WHERE [o].[CustomerID] = 'ALFKI'
|
|
ORDER BY [o].[OrderID]");
|
|
}
|
|
|
|
public override void Select_non_matching_value_types_from_anonymous_type_introduces_explicit_cast()
|
|
{
|
|
base.Select_non_matching_value_types_from_anonymous_type_introduces_explicit_cast();
|
|
|
|
AssertSql(
|
|
@"SELECT CAST([o].[OrderID] AS bigint) AS [LongOrder], CAST([o].[OrderID] AS smallint) AS [ShortOrder], [o].[OrderID] AS [Order]
|
|
FROM [Orders] AS [o]
|
|
WHERE [o].[CustomerID] = 'ALFKI'
|
|
ORDER BY [Order]");
|
|
}
|
|
|
|
public override void Select_conditional_with_null_comparison_in_test()
|
|
{
|
|
base.Select_conditional_with_null_comparison_in_test();
|
|
|
|
AssertSql(
|
|
@"SELECT CASE
|
|
WHEN [o].[CustomerID] IS NULL OR ([o].[CustomerID] IS NOT NULL AND ([o].[OrderID] < 100))
|
|
THEN CAST(1 AS BIT) ELSE CAST(0 AS BIT)
|
|
END
|
|
FROM [Orders] AS [o]
|
|
WHERE [o].[CustomerID] = 'ALFKI'");
|
|
}
|
|
|
|
public override void Projection_in_a_subquery_should_be_liftable()
|
|
{
|
|
base.Projection_in_a_subquery_should_be_liftable();
|
|
|
|
AssertSql(
|
|
@"@__p_0='1'
|
|
|
|
SELECT [e].[EmployeeID]
|
|
FROM [Employees] AS [e]
|
|
ORDER BY [e].[EmployeeID]
|
|
OFFSET @__p_0 ROWS");
|
|
}
|
|
|
|
#if !Test20
|
|
public override void Projection_containing_DateTime_subtraction()
|
|
{
|
|
base.Projection_containing_DateTime_subtraction();
|
|
|
|
AssertSql(
|
|
@"SELECT [o].[OrderDate]
|
|
FROM [Orders] AS [o]
|
|
WHERE [o].[OrderID] < 10300");
|
|
}
|
|
#endif
|
|
|
|
public override void Project_single_element_from_collection_with_OrderBy_Take_and_FirstOrDefault()
|
|
{
|
|
base.Project_single_element_from_collection_with_OrderBy_Take_and_FirstOrDefault();
|
|
|
|
AssertSql(
|
|
@"SELECT (
|
|
SELECT TOP 1 [t].[CustomerID]
|
|
FROM (
|
|
SELECT TOP 1 [o].[CustomerID], [o].[OrderID]
|
|
FROM [Orders] AS [o]
|
|
WHERE [c].[CustomerID] = [o].[CustomerID]
|
|
ORDER BY [o].[OrderID]
|
|
) AS [t]
|
|
ORDER BY [t].[OrderID]
|
|
)
|
|
FROM [Customers] AS [c]");
|
|
}
|
|
|
|
public override void Project_single_element_from_collection_with_OrderBy_Skip_and_FirstOrDefault()
|
|
{
|
|
base.Project_single_element_from_collection_with_OrderBy_Skip_and_FirstOrDefault();
|
|
|
|
AssertSql(
|
|
@"SELECT (
|
|
SELECT [o].[CustomerID]
|
|
FROM [Orders] AS [o]
|
|
WHERE [c].[CustomerID] = [o].[CustomerID]
|
|
ORDER BY [o].[OrderID]
|
|
OFFSET 1 ROWS FETCH NEXT 1 ROWS ONLY
|
|
)
|
|
FROM [Customers] AS [c]");
|
|
}
|
|
|
|
public override void Project_single_element_from_collection_with_OrderBy_Distinct_and_FirstOrDefault()
|
|
{
|
|
base.Project_single_element_from_collection_with_OrderBy_Distinct_and_FirstOrDefault();
|
|
|
|
AssertSql(
|
|
@"SELECT (
|
|
SELECT DISTINCT TOP 1 [o].[CustomerID]
|
|
FROM [Orders] AS [o]
|
|
WHERE [c].[CustomerID] = [o].[CustomerID]
|
|
)
|
|
FROM [Customers] AS [c]");
|
|
}
|
|
|
|
public override void Project_single_element_from_collection_with_OrderBy_Take_and_SingleOrDefault()
|
|
{
|
|
base.Project_single_element_from_collection_with_OrderBy_Take_and_SingleOrDefault();
|
|
|
|
AssertSql(
|
|
@"SELECT [c].[CustomerID]
|
|
FROM [Customers] AS [c]
|
|
WHERE [c].[CustomerID] = 'ALFKI'",
|
|
//
|
|
@"@_outer_CustomerID='ALFKI' (Nullable = false) (Size = 5)
|
|
|
|
SELECT TOP 2 [t0].[CustomerID]
|
|
FROM (
|
|
SELECT TOP 1 [o0].[CustomerID], [o0].[OrderID]
|
|
FROM [Orders] AS [o0]
|
|
WHERE @_outer_CustomerID = [o0].[CustomerID]
|
|
ORDER BY [o0].[OrderID]
|
|
) AS [t0]
|
|
ORDER BY [t0].[OrderID]");
|
|
}
|
|
|
|
public override void Project_single_element_from_collection_with_OrderBy_Take_and_FirstOrDefault_with_parameter()
|
|
{
|
|
base.Project_single_element_from_collection_with_OrderBy_Take_and_FirstOrDefault_with_parameter();
|
|
|
|
AssertSql(
|
|
@"@__i_0='1'
|
|
|
|
SELECT (
|
|
SELECT TOP 1 [t].[CustomerID]
|
|
FROM (
|
|
SELECT TOP(@__i_0) [o].[CustomerID], [o].[OrderID]
|
|
FROM [Orders] AS [o]
|
|
WHERE [c].[CustomerID] = [o].[CustomerID]
|
|
ORDER BY [o].[OrderID]
|
|
) AS [t]
|
|
ORDER BY [t].[OrderID]
|
|
)
|
|
FROM [Customers] AS [c]");
|
|
}
|
|
|
|
public override void Project_single_element_from_collection_with_multiple_OrderBys_Take_and_FirstOrDefault()
|
|
{
|
|
base.Project_single_element_from_collection_with_multiple_OrderBys_Take_and_FirstOrDefault();
|
|
|
|
AssertSql(
|
|
@"SELECT (
|
|
SELECT TOP 1 [t].[CustomerID]
|
|
FROM (
|
|
SELECT TOP 2 [o].[CustomerID], [o].[OrderID], [o].[OrderDate]
|
|
FROM [Orders] AS [o]
|
|
WHERE [c].[CustomerID] = [o].[CustomerID]
|
|
ORDER BY [o].[OrderID], [o].[OrderDate] DESC
|
|
) AS [t]
|
|
ORDER BY [t].[OrderID], [t].[OrderDate] DESC
|
|
)
|
|
FROM [Customers] AS [c]");
|
|
}
|
|
|
|
public override void Project_single_element_from_collection_with_multiple_OrderBys_Take_and_FirstOrDefault_2()
|
|
{
|
|
base.Project_single_element_from_collection_with_multiple_OrderBys_Take_and_FirstOrDefault_2();
|
|
|
|
AssertSql(
|
|
@"SELECT (
|
|
SELECT TOP 1 [t].[CustomerID]
|
|
FROM (
|
|
SELECT TOP 2 [o].[CustomerID], [o].[OrderDate]
|
|
FROM [Orders] AS [o]
|
|
WHERE [c].[CustomerID] = [o].[CustomerID]
|
|
ORDER BY [o].[CustomerID], [o].[OrderDate] DESC
|
|
) AS [t]
|
|
ORDER BY [t].[CustomerID], [t].[OrderDate] DESC
|
|
)
|
|
FROM [Customers] AS [c]");
|
|
}
|
|
|
|
public override void Project_single_element_from_collection_with_OrderBy_over_navigation_Take_and_FirstOrDefault()
|
|
{
|
|
base.Project_single_element_from_collection_with_OrderBy_over_navigation_Take_and_FirstOrDefault();
|
|
|
|
AssertSql(
|
|
@"SELECT COALESCE((
|
|
SELECT TOP 1 [t].[OrderID]
|
|
FROM (
|
|
SELECT TOP 1 [od].[OrderID], [od.Product].[ProductName]
|
|
FROM [Order Details] AS [od]
|
|
INNER JOIN [Products] AS [od.Product] ON [od].[ProductID] = [od.Product].[ProductID]
|
|
WHERE [o].[OrderID] = [od].[OrderID]
|
|
ORDER BY [od.Product].[ProductName]
|
|
) AS [t]
|
|
ORDER BY [t].[ProductName]
|
|
), 0)
|
|
FROM [Orders] AS [o]
|
|
WHERE [o].[OrderID] < 10300");
|
|
}
|
|
|
|
public override void Project_single_element_from_collection_with_OrderBy_over_navigation_Take_and_FirstOrDefault_2()
|
|
{
|
|
base.Project_single_element_from_collection_with_OrderBy_over_navigation_Take_and_FirstOrDefault_2();
|
|
|
|
AssertSql(
|
|
@"SELECT [o].[OrderID]
|
|
FROM [Orders] AS [o]
|
|
WHERE [o].[OrderID] < 10250",
|
|
//
|
|
@"@_outer_OrderID='10248'
|
|
|
|
SELECT TOP 1 [t].*
|
|
FROM (
|
|
SELECT TOP 1 [od].[OrderID], [od].[ProductID], [od].[Discount], [od].[Quantity], [od].[UnitPrice], [od.Product].[ProductName]
|
|
FROM [Order Details] AS [od]
|
|
INNER JOIN [Products] AS [od.Product] ON [od].[ProductID] = [od.Product].[ProductID]
|
|
WHERE @_outer_OrderID = [od].[OrderID]
|
|
ORDER BY [od.Product].[ProductName]
|
|
) AS [t]
|
|
ORDER BY [t].[ProductName]",
|
|
//
|
|
@"@_outer_OrderID='10249'
|
|
|
|
SELECT TOP 1 [t].*
|
|
FROM (
|
|
SELECT TOP 1 [od].[OrderID], [od].[ProductID], [od].[Discount], [od].[Quantity], [od].[UnitPrice], [od.Product].[ProductName]
|
|
FROM [Order Details] AS [od]
|
|
INNER JOIN [Products] AS [od.Product] ON [od].[ProductID] = [od.Product].[ProductID]
|
|
WHERE @_outer_OrderID = [od].[OrderID]
|
|
ORDER BY [od.Product].[ProductName]
|
|
) AS [t]
|
|
ORDER BY [t].[ProductName]");
|
|
}
|
|
|
|
public override void Select_datetime_year_component()
|
|
{
|
|
base.Select_datetime_year_component();
|
|
|
|
AssertSql(
|
|
@"SELECT DatePart('yyyy', [o].[OrderDate])
|
|
FROM [Orders] AS [o]");
|
|
}
|
|
|
|
public override void Select_datetime_month_component()
|
|
{
|
|
base.Select_datetime_month_component();
|
|
|
|
AssertSql(
|
|
@"SELECT DatePart('m', [o].[OrderDate])
|
|
FROM [Orders] AS [o]");
|
|
}
|
|
|
|
public override void Select_datetime_day_of_year_component()
|
|
{
|
|
base.Select_datetime_day_of_year_component();
|
|
|
|
AssertSql(
|
|
@"SELECT DATEPART(dayofyear, [o].[OrderDate])
|
|
FROM [Orders] AS [o]");
|
|
}
|
|
|
|
public override void Select_datetime_day_component()
|
|
{
|
|
base.Select_datetime_day_component();
|
|
|
|
AssertSql(
|
|
@"SELECT DatePart('d', [o].[OrderDate])
|
|
FROM [Orders] AS [o]");
|
|
}
|
|
|
|
public override void Select_datetime_hour_component()
|
|
{
|
|
base.Select_datetime_hour_component();
|
|
|
|
AssertSql(
|
|
@"SELECT DatePart('h', [o].[OrderDate])
|
|
FROM [Orders] AS [o]");
|
|
}
|
|
|
|
public override void Select_datetime_minute_component()
|
|
{
|
|
base.Select_datetime_minute_component();
|
|
|
|
AssertSql(
|
|
@"SELECT DatePart('n', [o].[OrderDate])
|
|
FROM [Orders] AS [o]");
|
|
}
|
|
|
|
public override void Select_datetime_second_component()
|
|
{
|
|
base.Select_datetime_second_component();
|
|
|
|
AssertSql(
|
|
@"SELECT DatePart('s', [o].[OrderDate])
|
|
FROM [Orders] AS [o]");
|
|
}
|
|
|
|
[Fact(Skip = "JET does not support milliseconds in DateTime")]
|
|
public override void Select_datetime_millisecond_component()
|
|
{
|
|
base.Select_datetime_millisecond_component();
|
|
|
|
AssertSql(
|
|
@"SELECT DATEPART(millisecond, [o].[OrderDate])
|
|
FROM [Orders] AS [o]");
|
|
}
|
|
|
|
#if !Test20
|
|
public override void Select_byte_constant()
|
|
{
|
|
base.Select_byte_constant();
|
|
|
|
AssertSql(
|
|
@"SELECT CASE
|
|
WHEN [c].[CustomerID] = 'ALFKI'
|
|
THEN CAST(1 AS tinyint) ELSE CAST(2 AS tinyint)
|
|
END
|
|
FROM [Customers] AS [c]");
|
|
}
|
|
|
|
public override void Select_short_constant()
|
|
{
|
|
base.Select_short_constant();
|
|
|
|
AssertSql(
|
|
@"SELECT CASE
|
|
WHEN [c].[CustomerID] = 'ALFKI'
|
|
THEN CAST(1 AS smallint) ELSE CAST(2 AS smallint)
|
|
END
|
|
FROM [Customers] AS [c]");
|
|
}
|
|
|
|
public override void Select_bool_constant()
|
|
{
|
|
base.Select_bool_constant();
|
|
|
|
AssertSql(
|
|
@"SELECT CASE
|
|
WHEN [c].[CustomerID] = 'ALFKI'
|
|
THEN CAST(1 AS BIT) ELSE CAST(0 AS BIT)
|
|
END
|
|
FROM [Customers] AS [c]");
|
|
}
|
|
#endif
|
|
|
|
public override void Anonymous_projection_AsNoTracking_Selector()
|
|
{
|
|
base.Anonymous_projection_AsNoTracking_Selector();
|
|
|
|
AssertSql(
|
|
@"SELECT [o].[CustomerID] AS [A], [o].[OrderDate] AS [B]
|
|
FROM [Orders] AS [o]");
|
|
}
|
|
|
|
}
|
|
}
|