// 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. namespace EntityFramework.Jet.FunctionalTests.Query { public partial class SimpleQueryJetTest { public override void Join_customers_orders_projection() { base.Join_customers_orders_projection(); AssertSql( @"SELECT [c].[ContactName], [o].[OrderID] FROM [Customers] AS [c] INNER JOIN [Orders] AS [o] ON [c].[CustomerID] = [o].[CustomerID]"); } public override void Join_customers_orders_entities() { base.Join_customers_orders_entities(); AssertSql( @"SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] FROM [Customers] AS [c] INNER JOIN [Orders] AS [o] ON [c].[CustomerID] = [o].[CustomerID]"); } public override void Join_select_many() { base.Join_select_many(); AssertSql( @"SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate], [e].[EmployeeID], [e].[City], [e].[Country], [e].[FirstName], [e].[ReportsTo], [e].[Title] FROM [Customers] AS [c] INNER JOIN [Orders] AS [o] ON [c].[CustomerID] = [o].[CustomerID] , [Employees] AS [e]"); } public override void Client_Join_select_many() { base.Client_Join_select_many(); AssertContains( @"@__p_0='2' SELECT [t0].[EmployeeID], [t0].[City], [t0].[Country], [t0].[FirstName], [t0].[ReportsTo], [t0].[Title] FROM ( SELECT TOP @__p_0 [e0].[EmployeeID], [e0].[City], [e0].[Country], [e0].[FirstName], [e0].[ReportsTo], [e0].[Title] FROM [Employees] AS [e0] ) AS [t0]", // @"@__p_0='2' SELECT [t].[EmployeeID], [t].[City], [t].[Country], [t].[FirstName], [t].[ReportsTo], [t].[Title] FROM ( SELECT TOP @__p_0 [e].[EmployeeID], [e].[City], [e].[Country], [e].[FirstName], [e].[ReportsTo], [e].[Title] FROM [Employees] AS [e] ) AS [t]", // @"SELECT [t1].[EmployeeID], [t1].[City], [t1].[Country], [t1].[FirstName], [t1].[ReportsTo], [t1].[Title] FROM ( SELECT [e1].[EmployeeID], [e1].[City], [e1].[Country], [e1].[FirstName], [e1].[ReportsTo], [e1].[Title] FROM [Employees] AS [e1] ORDER BY (SELECT 1) OFFSET 6 ROWS FETCH NEXT 2 ROWS ONLY ) AS [t1]", // @"SELECT [t1].[EmployeeID], [t1].[City], [t1].[Country], [t1].[FirstName], [t1].[ReportsTo], [t1].[Title] FROM ( SELECT [e1].[EmployeeID], [e1].[City], [e1].[Country], [e1].[FirstName], [e1].[ReportsTo], [e1].[Title] FROM [Employees] AS [e1] ORDER BY (SELECT 1) OFFSET 6 ROWS FETCH NEXT 2 ROWS ONLY ) AS [t1]"); } public override void Join_customers_orders_select() { base.Join_customers_orders_select(); AssertSql( @"SELECT [c].[ContactName], [o].[OrderID] FROM [Customers] AS [c] INNER JOIN [Orders] AS [o] ON [c].[CustomerID] = [o].[CustomerID]"); } public override void Join_customers_orders_with_subquery() { base.Join_customers_orders_with_subquery(); AssertContains( @"SELECT [o20].[CustomerID], [o20].[OrderID] FROM [Orders] AS [o20] ORDER BY [o20].[OrderID]", // @"SELECT [c].[CustomerID], [c].[ContactName] FROM [Customers] AS [c]"); } public override void Join_customers_orders_with_subquery_with_take() { base.Join_customers_orders_with_subquery_with_take(); AssertSql( @"@__p_0='5' SELECT [c].[ContactName], [t].[OrderID] FROM [Customers] AS [c] INNER JOIN ( SELECT TOP @__p_0 [o2].* FROM [Orders] AS [o2] ORDER BY [o2].[OrderID] ) AS [t] ON [c].[CustomerID] = [t].[CustomerID] WHERE [t].[CustomerID] = 'ALFKI'"); } public override void Join_customers_orders_with_subquery_anonymous_property_method() { base.Join_customers_orders_with_subquery_anonymous_property_method(); AssertContains( @"SELECT [o20].[OrderID], [o20].[CustomerID], [o20].[EmployeeID], [o20].[OrderDate] FROM [Orders] AS [o20] ORDER BY [o20].[OrderID]", // @"SELECT [c].[CustomerID] FROM [Customers] AS [c]"); } public override void Join_customers_orders_with_subquery_anonymous_property_method_with_take() { base.Join_customers_orders_with_subquery_anonymous_property_method_with_take(); AssertContains( @"@__p_0='5' SELECT [t].[OrderID], [t].[CustomerID], [t].[EmployeeID], [t].[OrderDate] FROM ( SELECT TOP @__p_0 [o2].[OrderID], [o2].[CustomerID], [o2].[EmployeeID], [o2].[OrderDate] FROM [Orders] AS [o2] ORDER BY [o2].[OrderID] ) AS [t]", // @"SELECT [c].[CustomerID] FROM [Customers] AS [c]"); } public override void Join_customers_orders_with_subquery_predicate() { base.Join_customers_orders_with_subquery_predicate(); AssertContains( @"SELECT [o20].[CustomerID], [o20].[OrderID] FROM [Orders] AS [o20] WHERE [o20].[OrderID] > 0 ORDER BY [o20].[OrderID]", // @"SELECT [c].[CustomerID], [c].[ContactName] FROM [Customers] AS [c]"); } public override void Join_customers_orders_with_subquery_predicate_with_take() { base.Join_customers_orders_with_subquery_predicate_with_take(); AssertSql( @"@__p_0='5' SELECT [c].[ContactName], [t].[OrderID] FROM [Customers] AS [c] INNER JOIN ( SELECT TOP @__p_0 [o2].* FROM [Orders] AS [o2] WHERE [o2].[OrderID] > 0 ORDER BY [o2].[OrderID] ) AS [t] ON [c].[CustomerID] = [t].[CustomerID] WHERE [t].[CustomerID] = 'ALFKI'"); } public override void Join_composite_key() { base.Join_composite_key(); AssertSql( @"SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] FROM [Customers] AS [c] INNER JOIN [Orders] AS [o] ON ([c].[CustomerID] = [o].[CustomerID]) AND ([c].[CustomerID] = [o].[CustomerID])"); } public override void Join_complex_condition() { base.Join_complex_condition(); AssertSql( @"SELECT [c].[CustomerID] FROM [Customers] AS [c] INNER JOIN ( SELECT [o].* FROM [Orders] AS [o] WHERE [o].[OrderID] < 10250 ) AS [t] ON 1 = 1 WHERE [c].[CustomerID] = 'ALFKI'"); } public override void Join_client_new_expression() { base.Join_client_new_expression(); AssertContains( @"SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] FROM [Orders] AS [o]", // @"SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] FROM [Customers] AS [c]"); } public override void Join_same_collection_multiple() { base.Join_same_collection_multiple(); AssertSql( @"SELECT [c3].[CustomerID], [c3].[Address], [c3].[City], [c3].[CompanyName], [c3].[ContactName], [c3].[ContactTitle], [c3].[Country], [c3].[Fax], [c3].[Phone], [c3].[PostalCode], [c3].[Region] FROM [Customers] AS [o] INNER JOIN [Customers] AS [c2] ON [o].[CustomerID] = [c2].[CustomerID] INNER JOIN [Customers] AS [c3] ON [o].[CustomerID] = [c3].[CustomerID]"); } public override void Join_same_collection_force_alias_uniquefication() { base.Join_same_collection_force_alias_uniquefication(); AssertSql( @"SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate], [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate] FROM [Orders] AS [o] INNER JOIN [Orders] AS [o0] ON [o].[CustomerID] = [o0].[CustomerID]"); } public override void GroupJoin_customers_orders_count() { base.GroupJoin_customers_orders_count(); AssertSql( @"SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] FROM [Customers] AS [c] LEFT JOIN [Orders] AS [o] ON [c].[CustomerID] = [o].[CustomerID] ORDER BY [c].[CustomerID]"); } public override void GroupJoin_customers_orders_count_preserves_ordering() { base.GroupJoin_customers_orders_count_preserves_ordering(); AssertSql( @"@__p_0='5' SELECT [t].[CustomerID], [t].[Address], [t].[City], [t].[CompanyName], [t].[ContactName], [t].[ContactTitle], [t].[Country], [t].[Fax], [t].[Phone], [t].[PostalCode], [t].[Region], [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] FROM ( SELECT TOP @__p_0 [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] FROM [Customers] AS [c] WHERE [c].[CustomerID] NOT IN ('VAFFE', 'DRACD') ORDER BY [c].[City] ) AS [t] LEFT JOIN [Orders] AS [o] ON [t].[CustomerID] = [o].[CustomerID] ORDER BY [t].[City], [t].[CustomerID]"); } public override void GroupJoin_simple() { base.GroupJoin_simple(); AssertSql( @"SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] FROM [Customers] AS [c] INNER JOIN [Orders] AS [o] ON [c].[CustomerID] = [o].[CustomerID]"); } public override void GroupJoin_simple2() { base.GroupJoin_simple2(); AssertSql( @"SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] FROM [Customers] AS [c] INNER JOIN [Orders] AS [o] ON [c].[CustomerID] = [o].[CustomerID]"); } public override void GroupJoin_simple3() { base.GroupJoin_simple3(); AssertSql( @"SELECT [o].[OrderID] FROM [Customers] AS [c] INNER JOIN [Orders] AS [o] ON [c].[CustomerID] = [o].[CustomerID]"); } public override void GroupJoin_tracking_groups() { base.GroupJoin_tracking_groups(); AssertSql( @"SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] FROM [Customers] AS [c] LEFT JOIN [Orders] AS [o] ON [c].[CustomerID] = [o].[CustomerID] ORDER BY [c].[CustomerID]"); } public override void GroupJoin_simple_ordering() { base.GroupJoin_simple_ordering(); AssertSql( @"SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] FROM [Customers] AS [c] INNER JOIN [Orders] AS [o] ON [c].[CustomerID] = [o].[CustomerID] ORDER BY [c].[City]"); } public override void GroupJoin_simple_subquery() { base.GroupJoin_simple_subquery(); AssertSql( @"@__p_0='4' SELECT [t].[OrderID], [t].[CustomerID], [t].[EmployeeID], [t].[OrderDate] FROM [Customers] AS [c] INNER JOIN ( SELECT TOP @__p_0 [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] FROM [Orders] AS [o] ORDER BY [o].[OrderID] ) AS [t] ON [c].[CustomerID] = [t].[CustomerID]"); } public override void GroupJoin_DefaultIfEmpty() { base.GroupJoin_DefaultIfEmpty(); AssertSql( @"SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] FROM [Customers] AS [c] LEFT JOIN [Orders] AS [o] ON [c].[CustomerID] = [o].[CustomerID]"); } public override void GroupJoin_DefaultIfEmpty_multiple() { base.GroupJoin_DefaultIfEmpty_multiple(); AssertSql( @"SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], [o1].[OrderID], [o1].[CustomerID], [o1].[EmployeeID], [o1].[OrderDate], [o2].[OrderID], [o2].[CustomerID], [o2].[EmployeeID], [o2].[OrderDate] FROM [Customers] AS [c] LEFT JOIN [Orders] AS [o1] ON [c].[CustomerID] = [o1].[CustomerID] LEFT JOIN [Orders] AS [o2] ON [c].[CustomerID] = [o2].[CustomerID]"); } public override void GroupJoin_DefaultIfEmpty2() { base.GroupJoin_DefaultIfEmpty2(); AssertSql( @"SELECT [e].[EmployeeID], [e].[City], [e].[Country], [e].[FirstName], [e].[ReportsTo], [e].[Title], [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] FROM [Employees] AS [e] LEFT JOIN [Orders] AS [o] ON [e].[EmployeeID] = [o].[EmployeeID]"); } public override void GroupJoin_DefaultIfEmpty3() { base.GroupJoin_DefaultIfEmpty3(); AssertSql( @"@__p_0='1' SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] FROM ( SELECT TOP @__p_0 [c].* FROM [Customers] AS [c] ORDER BY [c].[CustomerID] ) AS [t] LEFT JOIN [Orders] AS [o] ON [t].[CustomerID] = [o].[CustomerID]"); } public override void GroupJoin_Where() { base.GroupJoin_Where(); AssertSql( @"SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] FROM [Customers] AS [c] INNER JOIN [Orders] AS [o] ON [c].[CustomerID] = [o].[CustomerID] WHERE [o].[CustomerID] = 'ALFKI'"); } public override void GroupJoin_Where_OrderBy() { base.GroupJoin_Where_OrderBy(); AssertSql( @"SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] FROM [Customers] AS [c] INNER JOIN [Orders] AS [o] ON [c].[CustomerID] = [o].[CustomerID] WHERE ([o].[CustomerID] = 'ALFKI') OR ([c].[CustomerID] = 'ANATR') ORDER BY [c].[City]"); } public override void GroupJoin_DefaultIfEmpty_Where() { base.GroupJoin_DefaultIfEmpty_Where(); AssertSql( @"SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] FROM [Customers] AS [c] LEFT JOIN [Orders] AS [o] ON [c].[CustomerID] = [o].[CustomerID] WHERE [o].[OrderID] IS NOT NULL AND ([o].[CustomerID] = 'ALFKI')"); } public override void Join_GroupJoin_DefaultIfEmpty_Where() { base.Join_GroupJoin_DefaultIfEmpty_Where(); AssertSql( @"SELECT [o2].[OrderID], [o2].[CustomerID], [o2].[EmployeeID], [o2].[OrderDate] FROM [Customers] AS [c] INNER JOIN [Orders] AS [o] ON [c].[CustomerID] = [o].[CustomerID] LEFT JOIN [Orders] AS [o2] ON [c].[CustomerID] = [o2].[CustomerID] WHERE [o2].[OrderID] IS NOT NULL AND ([o2].[CustomerID] = 'ALFKI')"); } public override void GroupJoin_DefaultIfEmpty_Project() { base.GroupJoin_DefaultIfEmpty_Project(); AssertSql( @"SELECT [o].[OrderID] FROM [Customers] AS [c] LEFT JOIN [Orders] AS [o] ON [c].[CustomerID] = [o].[CustomerID]"); } public override void GroupJoin_with_different_outer_elements_with_same_key() { base.GroupJoin_with_different_outer_elements_with_same_key(); AssertSql( @"SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate], [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] FROM [Orders] AS [o] LEFT JOIN [Customers] AS [c] ON [o].[CustomerID] = [c].[CustomerID]"); } public override void GroupJoin_with_different_outer_elements_with_same_key_with_predicate() { base.GroupJoin_with_different_outer_elements_with_same_key_with_predicate(); AssertSql( @"SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate], [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] FROM [Orders] AS [o] LEFT JOIN [Customers] AS [c] ON [o].[CustomerID] = [c].[CustomerID] WHERE [o].[OrderID] > 11500"); } public override void GroupJoin_with_different_outer_elements_with_same_key_projected_from_another_entity() { base.GroupJoin_with_different_outer_elements_with_same_key_projected_from_another_entity(); AssertSql( @"SELECT [od].[OrderID], [od].[ProductID], [od].[Discount], [od].[Quantity], [od].[UnitPrice], [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] FROM [Order Details] AS [od] INNER JOIN [Orders] AS [od.Order] ON [od].[OrderID] = [od.Order].[OrderID] LEFT JOIN [Customers] AS [c] ON [od.Order].[CustomerID] = [c].[CustomerID]"); } public override void GroupJoin_SelectMany_subquery_with_filter() { base.GroupJoin_SelectMany_subquery_with_filter(); AssertSql( @"SELECT [c].[ContactName], [t].[OrderID] FROM [Customers] AS [c] INNER JOIN ( SELECT [o].* FROM [Orders] AS [o] WHERE [o].[OrderID] > 5 ) AS [t] ON [c].[CustomerID] = [t].[CustomerID]"); } public override void GroupJoin_SelectMany_subquery_with_filter_orderby() { base.GroupJoin_SelectMany_subquery_with_filter_orderby(); AssertSql( @"SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] FROM [Customers] AS [c] LEFT JOIN [Orders] AS [o] ON [c].[CustomerID] = [o].[CustomerID] ORDER BY [c].[CustomerID]"); } public override void GroupJoin_SelectMany_subquery_with_filter_and_DefaultIfEmpty() { base.GroupJoin_SelectMany_subquery_with_filter_and_DefaultIfEmpty(); AssertSql( @"SELECT [t].[OrderID], [t].[CustomerID], [t].[EmployeeID], [t].[OrderDate], [c].[ContactName] FROM [Customers] AS [c] LEFT JOIN ( SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] FROM [Orders] AS [o] WHERE [o].[OrderID] > 5 ) AS [t] ON [c].[CustomerID] = [t].[CustomerID]"); } public override void GroupJoin_SelectMany_subquery_with_filter_orderby_and_DefaultIfEmpty() { base.GroupJoin_SelectMany_subquery_with_filter_orderby_and_DefaultIfEmpty(); AssertSql( @"SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] FROM [Customers] AS [c] LEFT JOIN [Orders] AS [o] ON [c].[CustomerID] = [o].[CustomerID] ORDER BY [c].[CustomerID]"); } public override void GroupJoin_with_order_by_key_descending1() { base.GroupJoin_with_order_by_key_descending1(); AssertSql( @"SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] FROM [Customers] AS [c] LEFT JOIN [Orders] AS [o] ON [c].[CustomerID] = [o].[CustomerID] WHERE [c].[CustomerID] LIKE 'A' + '%' ORDER BY [c].[CustomerID] DESC"); } public override void GroupJoin_with_order_by_key_descending2() { base.GroupJoin_with_order_by_key_descending2(); AssertSql( @"SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] FROM [Customers] AS [c] LEFT JOIN [Orders] AS [o] ON [c].[CustomerID] = [o].[CustomerID] WHERE [c].[CustomerID] LIKE 'A' + '%' ORDER BY [c].[CustomerID] DESC"); } } }