2009-06-12 Bill Holmes <billholmes54@gmail.com>
[mono.git] / mcs / class / System.Data.Linq / src / DbLinq / Test / Providers / ReadTest_Subquery.cs
1 #region MIT license\r
2 // \r
3 // MIT license\r
4 //\r
5 // Copyright (c) 2007-2008 Jiri Moudry, Pascal Craponne\r
6 // \r
7 // Permission is hereby granted, free of charge, to any person obtaining a copy\r
8 // of this software and associated documentation files (the "Software"), to deal\r
9 // in the Software without restriction, including without limitation the rights\r
10 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r
11 // copies of the Software, and to permit persons to whom the Software is\r
12 // furnished to do so, subject to the following conditions:\r
13 // \r
14 // The above copyright notice and this permission notice shall be included in\r
15 // all copies or substantial portions of the Software.\r
16 // \r
17 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
18 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
19 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
20 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
21 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
22 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r
23 // THE SOFTWARE.\r
24 // \r
25 #endregion\r
26 using System;\r
27 using System.Collections.Generic;\r
28 using System.Data.Linq;\r
29 using System.Text;\r
30 using System.Linq;\r
31 using System.Linq.Expressions;\r
32 using NUnit.Framework;\r
33 using Test_NUnit;\r
34 \r
35 using nwind;\r
36 \r
37 #if ORACLE\r
38 using Id = System.Decimal;\r
39 #else\r
40 using Id = System.Int32;\r
41 #endif\r
42 \r
43 // test ns \r
44 #if MYSQL\r
45     namespace Test_NUnit_MySql\r
46 #elif ORACLE && ODP\r
47     namespace Test_NUnit_OracleODP\r
48 #elif ORACLE\r
49     namespace Test_NUnit_Oracle\r
50 #elif POSTGRES\r
51     namespace Test_NUnit_PostgreSql\r
52 #elif SQLITE\r
53     namespace Test_NUnit_Sqlite\r
54 #elif INGRES\r
55     namespace Test_NUnit_Ingres\r
56 #elif MSSQL && MONO_STRICT\r
57     namespace Test_NUnit_MsSql_Strict\r
58 #elif MSSQL\r
59     namespace Test_NUnit_MsSql\r
60 #elif FIREBIRD\r
61     namespace Test_NUnit_Firebird\r
62 #endif\r
63 {\r
64     [TestFixture]\r
65     public class ReadTest_Subquery : TestBase\r
66     {\r
67         [Description("Simple projection")]\r
68         [Test]\r
69         public void CQ1_SimpleProjection()\r
70         {\r
71             var db = CreateDB();\r
72             var q = db.Employees.Select(e => e.LastName);\r
73             var count = q.ToList().Count;\r
74             Assert.IsTrue(count > 0);\r
75         }\r
76 \r
77         /*\r
78          Generated SQL should look like\r
79 SELECT o$.*\r
80 FROM Employees AS e$\r
81 LEFT OUTER JOIN Orders AS o$ ON o$.[EmployeeID] = e$.[EmployeeID]\r
82          */\r
83         [Description("Subquery")]\r
84         [Test]\r
85         public void CQ2_Subquery()\r
86         {\r
87             var db = CreateDB();\r
88             var q = db.Employees.Select(e => e.Orders);\r
89             var l = q.ToList();\r
90             var count = l.Count;\r
91             Assert.IsTrue(count > 0);\r
92         }\r
93 \r
94         [Description("Subquery with nested select")]\r
95         [Test]\r
96         public void CQ3_SubquerySelect()\r
97         {\r
98             var db = CreateDB();\r
99             var q = db.Employees.Select(e => e.Orders.Select(o => o));\r
100             var count = q.ToList().Count;\r
101             Assert.IsTrue(count > 0);\r
102         }\r
103 \r
104         [Description("Subquery with nested entityset")]\r
105         [Test]\r
106         public void CQ4_SubqueryNested()\r
107         {\r
108             var db = CreateDB();\r
109             var q = db.Employees.Select(e => e.Orders.Select(o => o.OrderDetails));\r
110             var count = q.ToList().Count;\r
111             Assert.IsTrue(count > 0);\r
112         }\r
113 \r
114         [Description("Subquery with nested query")]\r
115         [Test]\r
116         public void CQ5_SubqueryNestedQuery()\r
117         {\r
118             var db = CreateDB();\r
119             var q = from d in db.Orders\r
120                     where (from r in db.OrderDetails\r
121                            where r.ProductID == 1\r
122                            select\r
123                                r.OrderID).Contains(d.OrderID)\r
124                     select d;\r
125             var count = q.ToList().Count;\r
126             Assert.AreEqual(count,1 );\r
127         }\r
128 \r
129     }\r
130 }\r