column name and ordinal fix...tested on 10.1
[mono.git] / mcs / class / System.Data.Linq / src / DbLinq / Test / Providers / ReadTests_DateTimeFunctions.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.Globalization;\r
28 using System.Collections.Generic;\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 MONO_STRICT\r
38 using System.Data.Linq;\r
39 #else\r
40 using DbLinq.Data.Linq;\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 && L2SQL\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 ReadTests_DateTimeFunctions : TestBase\r
66     {\r
67 #if !DEBUG && SQLITE\r
68         [Explicit]\r
69 #endif\r
70         [Test]\r
71         public void GetYear()\r
72         {\r
73             Northwind db = CreateDB();\r
74 \r
75             var q = from o in db.Orders\r
76                     where o.OrderDate.Value.Year == 1996\r
77                     select o;\r
78 \r
79             var list = q.ToList();\r
80             Assert.IsTrue(list.Count > 0);\r
81         }\r
82 \r
83 #if !DEBUG && SQLITE\r
84         [Explicit]\r
85 #endif\r
86         [Test]\r
87         public void GetMonth()\r
88         {\r
89             Northwind db = CreateDB();\r
90 \r
91             var q = from o in db.Orders\r
92                     where o.OrderDate.Value.Month == 10\r
93                     select o;\r
94 \r
95             var list = q.ToList();\r
96             Assert.IsTrue(list.Count > 0);\r
97         }\r
98 \r
99 #if !DEBUG && SQLITE\r
100         [Explicit]\r
101 #endif\r
102         [Test]\r
103         public void GetDay()\r
104         {\r
105             Northwind db = CreateDB();\r
106 \r
107             var q = from o in db.Orders\r
108                     where o.OrderDate.Value.Day == 16\r
109                     select o;\r
110 \r
111             var list = q.ToList();\r
112             Assert.IsTrue(list.Count > 0);\r
113         }\r
114 \r
115 #if !DEBUG && SQLITE\r
116         [Explicit]\r
117 #endif\r
118         [Test]\r
119         public void GetHours()\r
120         {\r
121             Northwind db = CreateDB();\r
122 \r
123             var q = (from o in db.Orders\r
124                      where o.OrderDate.Value.Hour == 0\r
125                      select o).ToList();\r
126 \r
127 \r
128         }\r
129 \r
130 #if !DEBUG && SQLITE\r
131         [Explicit]\r
132 #endif\r
133         [Test]\r
134         public void GetMinutes()\r
135         {\r
136             Northwind db = CreateDB();\r
137 \r
138             var q = (from o in db.Orders\r
139                      where o.OrderDate.Value.Minute == 0\r
140                      select o).ToList();\r
141 \r
142 \r
143         }\r
144 \r
145 #if !DEBUG && SQLITE\r
146         [Explicit]\r
147 #endif\r
148         [Test]\r
149         public void GetSeconds()\r
150         {\r
151             Northwind db = CreateDB();\r
152 \r
153             var q = (from o in db.Orders\r
154                      where o.OrderDate.Value.Second == 16\r
155                      select o).ToList();\r
156 \r
157         }\r
158 \r
159 #if !DEBUG && SQLITE\r
160         [Explicit]\r
161 #endif\r
162         [Test]\r
163         public void GetMilliSeconds()\r
164         {\r
165             Northwind db = CreateDB();\r
166 \r
167             var q = (from o in db.Orders\r
168                      where o.OrderDate.Value.Millisecond == 0\r
169                      select o).ToList();\r
170 \r
171         }\r
172 \r
173 #if !DEBUG && SQLITE\r
174         [Explicit]\r
175 #endif\r
176         [Test]\r
177         public void GetCurrentDateTime()\r
178         {\r
179             Northwind db = CreateDB();\r
180             var query = from e in db.Employees\r
181                         where e.BirthDate.HasValue && e.BirthDate.Value == DateTime.Now\r
182                         select e;\r
183 \r
184             var list = query.ToList();\r
185         }\r
186 \r
187 #if !DEBUG && SQLITE\r
188         [Explicit]\r
189 #endif\r
190         [Test]\r
191         public void Parse01()\r
192         {\r
193             Northwind db = CreateDB();\r
194             var query = from e in db.Employees\r
195                         where e.BirthDate.Value == DateTime.Parse("1984/05/02")\r
196                         select e;\r
197 \r
198             var list = query.ToList();\r
199         }\r
200 \r
201         [Test]\r
202         [ExpectedException(typeof(NotSupportedException))]\r
203         public void Parse02()\r
204         {\r
205             Northwind db = CreateDB();\r
206             var query = from e in db.Employees\r
207                         where e.BirthDate.Value == DateTime.Parse(e.BirthDate.ToString())\r
208                         select e;\r
209 \r
210             var list = query.ToList();\r
211         }\r
212 \r
213         [Test]\r
214         public void Parse03()\r
215         {\r
216             Northwind db = CreateDB();\r
217             var query = from e in db.Employees\r
218                         where e.BirthDate.HasValue\r
219                         select e.BirthDate.Value == DateTime.Parse("1984/05/02");\r
220 \r
221 \r
222             var list = query.ToList();\r
223         }\r
224 \r
225         [Test]\r
226         [ExpectedException(typeof(InvalidOperationException))]\r
227         public void Parse04()\r
228         {\r
229             Northwind db = CreateDB();\r
230             var query = from e in db.Employees\r
231                         select e.BirthDate.Value == DateTime.Parse(e.BirthDate.ToString());\r
232 \r
233 \r
234             var list = query.ToList();\r
235         }\r
236 \r
237 #if !DEBUG && SQLITE\r
238         [Explicit]\r
239 #endif\r
240         [Test]\r
241         public void DateTimeDiffTotalHours()\r
242         {\r
243             Northwind db = CreateDB();\r
244             var query = from e in db.Employees\r
245                         where (e.BirthDate.Value - DateTime.Parse("1984/05/02")).TotalHours > 0\r
246                         select e;\r
247 \r
248 \r
249             var list = query.ToList();\r
250         }\r
251 \r
252 #if !DEBUG && SQLITE\r
253         [Explicit]\r
254 #endif\r
255         [Test]\r
256         public void DateTimeDiffHours()\r
257         {\r
258             Northwind db = CreateDB();\r
259 \r
260             DateTime parameterDateTime = db.Employees.First().BirthDate.Value.AddHours(2);\r
261 \r
262             var query = from e in db.Employees\r
263                         where (e.BirthDate.Value - parameterDateTime).Hours > -2\r
264                         select e;\r
265 \r
266 \r
267             var list = query.ToList();\r
268             Assert.Greater(list.Count, 0);\r
269         }\r
270 \r
271 #if !DEBUG && SQLITE\r
272         [Explicit]\r
273 #endif\r
274         [Test]\r
275         public void DateTimeDiffTotalMinutes()\r
276         {\r
277             Northwind db = CreateDB();\r
278             var query = from e in db.Employees\r
279                         where (e.BirthDate.Value - DateTime.Parse("1984/05/02")).TotalMinutes > 0\r
280                         select e;\r
281 \r
282 \r
283             var list = query.ToList();\r
284         }\r
285 \r
286 #if !DEBUG && SQLITE\r
287         [Explicit]\r
288 #endif\r
289         [Test]\r
290         public void DateTimeDiffMinutes()\r
291         {\r
292             Northwind db = CreateDB();\r
293 \r
294             DateTime parameterDateTime = db.Employees.First().BirthDate.Value.AddMinutes(2);\r
295 \r
296             var query = from e in db.Employees\r
297                         where (e.BirthDate.Value - parameterDateTime).Minutes == -2\r
298                         select e;\r
299 \r
300 \r
301             var list = query.ToList();\r
302             Assert.Greater(list.Count, 0);\r
303         }\r
304 \r
305 \r
306 #if !DEBUG && SQLITE\r
307         [Explicit]\r
308 #endif\r
309         [Test]\r
310         public void DateTimeDiffTotalSeconds()\r
311         {\r
312             Northwind db = CreateDB();\r
313             var query = from e in db.Employees\r
314                         where (e.BirthDate.Value - DateTime.Parse("1984/05/02")).TotalSeconds > 0\r
315                         select e;\r
316 \r
317 \r
318             var list = query.ToList();\r
319         }\r
320 \r
321 #if !DEBUG && SQLITE\r
322         [Explicit]\r
323 #endif\r
324         [Test]\r
325         public void DateTimeDiffSeconds()\r
326         {\r
327             Northwind db = CreateDB();\r
328 \r
329             DateTime parameterDateTime = db.Employees.First().BirthDate.Value.AddSeconds(2);\r
330 \r
331             var query = from e in db.Employees\r
332                         where (e.BirthDate.Value - parameterDateTime).Seconds == -2\r
333                         select e;\r
334 \r
335 \r
336             var list = query.ToList();\r
337             Assert.Greater(list.Count, 0);\r
338         }\r
339 \r
340 #if !DEBUG && (SQLITE || MSSQL)\r
341         // L2SQL: SQL Server doesnt' seem to support millisecond precision.\r
342         [Explicit]\r
343 #endif\r
344         [Test]\r
345         public void DateTimeDiffMilliseconds()\r
346         {\r
347             Northwind db = CreateDB();\r
348 \r
349             DateTime parameterDateTime = db.Employees.First().BirthDate.Value.AddMilliseconds(2);\r
350 \r
351             var query = from e in db.Employees\r
352                         where (e.BirthDate.Value - parameterDateTime).Milliseconds == -2\r
353                         select e;\r
354             \r
355 \r
356             var list = query.ToList();\r
357             Assert.Greater(list.Count, 0);\r
358         }\r
359 \r
360 #if !DEBUG && SQLITE\r
361         [Explicit]\r
362 #endif\r
363         [Test]\r
364         public void DateTimeDiffTotalMilliseconds()\r
365         {\r
366             Northwind db = CreateDB();\r
367             var query = from e in db.Employees\r
368                         where (e.BirthDate.Value - DateTime.Parse("1984/05/02")).TotalMinutes > 0\r
369                         select e;\r
370 \r
371 \r
372             var list = query.ToList();\r
373         }\r
374 \r
375 #if !DEBUG && SQLITE\r
376         [Explicit]\r
377 #endif\r
378         [Test]\r
379         public void DateTimeDiffDays()\r
380         {\r
381             Northwind db = CreateDB();\r
382 \r
383             DateTime parameterDateTime = db.Employees.First().BirthDate.Value.AddDays(2);\r
384 \r
385             var query = from e in db.Employees\r
386                         where (e.BirthDate.Value - parameterDateTime).Days == -2\r
387                         select e;\r
388 \r
389 \r
390             var list = query.ToList();\r
391             Assert.Greater(list.Count, 0);\r
392         }\r
393 \r
394 #if !DEBUG && SQLITE\r
395         [Explicit]\r
396 #endif\r
397         [Test]\r
398         public void DateTimeDiffTotalDays()\r
399         {\r
400             Northwind db = CreateDB();\r
401             DateTime firstDate = db.Employees.First().BirthDate.Value;\r
402 \r
403             DateTime parameterDate = firstDate.Date.AddDays(2);\r
404             parameterDate = parameterDate.Date.AddHours(12);\r
405 \r
406 \r
407             var query = from e in db.Employees\r
408                         where (e.BirthDate.Value -parameterDate).TotalDays == -2.5\r
409                         select e;\r
410 \r
411             var list = query.ToList();\r
412 \r
413             Assert.Greater(list.Count, 0);\r
414         }\r
415 \r
416 #if !DEBUG && POSTGRES\r
417         [Explicit]\r
418 #endif\r
419         [Test]\r
420         [ExpectedException(typeof(InvalidOperationException))]\r
421         public void DateTimeDiffTotalDaysSelectWithNulls01()\r
422         {\r
423             \r
424             Northwind db = CreateDB();\r
425 \r
426             var employee = new Employee\r
427             {\r
428                 FirstName = "Test First",\r
429                 LastName  = "Test Last",\r
430             };\r
431             db.Employees.InsertOnSubmit(employee);\r
432             db.SubmitChanges();\r
433 \r
434             DateTime firstDate = db.Employees.First().BirthDate.Value;\r
435             firstDate.Date.AddDays(2);\r
436             DateTime parameterDate = firstDate.Date.AddHours(12);\r
437 \r
438             try\r
439             {\r
440                 //this test should throw an invalid operation exception since one BirthDate is null so select clausle should crash\r
441                 var query = from e in db.Employees\r
442                             select (e.BirthDate.Value - parameterDate).TotalDays;\r
443 \r
444                 var list = query.ToList();\r
445 \r
446                 Assert.Greater(list.Count, 0);\r
447             }\r
448             finally\r
449             {\r
450                 db.Employees.DeleteOnSubmit(employee);\r
451                 db.SubmitChanges();\r
452             }\r
453         }\r
454 \r
455 #if !DEBUG && POSTGRES\r
456         [Explicit]\r
457 #endif\r
458         [Test]\r
459         public void DateTimeDiffTotalDaysSelectWithNulls02()\r
460         {\r
461             Northwind db = CreateDB();\r
462 \r
463             var employee = new Employee\r
464             {\r
465                 FirstName = "Test First",\r
466                 LastName = "Test Last",\r
467             };\r
468             db.Employees.InsertOnSubmit(employee);\r
469             db.SubmitChanges();\r
470 \r
471             DateTime firstDate = db.Employees.First().BirthDate.Value;\r
472 \r
473             DateTime parameterDate = firstDate.Date.AddDays(2);\r
474             parameterDate = parameterDate.Date.AddHours(12);\r
475 \r
476             try\r
477             {\r
478                 var query = from e in db.Employees\r
479                             where e.BirthDate.HasValue\r
480                             select (e.BirthDate.Value - parameterDate).TotalDays;\r
481 \r
482                 var list = query.ToList();\r
483 \r
484                 Assert.Greater(list.Count, 0);\r
485             }\r
486             finally\r
487             {\r
488                 db.Employees.DeleteOnSubmit(employee);\r
489                 db.SubmitChanges();\r
490             }\r
491         }\r
492 \r
493 \r
494 #if !DEBUG && (SQLITE || (MSSQL && L2SQL))\r
495         // L2SQL: System.Data.SqlClient.SqlException : The datepart minute is not supported by date function datepart for data type date.\r
496         [Explicit]\r
497 #endif\r
498         [Test]\r
499         public void DateGetDate()\r
500         {\r
501             Northwind db = CreateDB();\r
502             var query = from e in db.Employees\r
503                         where (e.BirthDate.Value.Date).Minute == 0\r
504                         select e;\r
505 \r
506 \r
507             var list = query.ToList();\r
508         }\r
509     }\r
510 }\r