511 lines
14 KiB
C#
Raw Normal View History

#region MIT license
//
// MIT license
//
// Copyright (c) 2007-2008 Jiri Moudry, Pascal Craponne
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
//
#endregion
using System;
using System.Globalization;
using System.Collections.Generic;
using System.Text;
using System.Linq;
using System.Linq.Expressions;
using NUnit.Framework;
using Test_NUnit;
using nwind;
#if MONO_STRICT
using System.Data.Linq;
#else
using DbLinq.Data.Linq;
#endif
// test ns
#if MYSQL
namespace Test_NUnit_MySql
#elif ORACLE && ODP
namespace Test_NUnit_OracleODP
#elif ORACLE
namespace Test_NUnit_Oracle
#elif POSTGRES
namespace Test_NUnit_PostgreSql
#elif SQLITE
namespace Test_NUnit_Sqlite
#elif INGRES
namespace Test_NUnit_Ingres
#elif MSSQL && L2SQL
namespace Test_NUnit_MsSql_Strict
#elif MSSQL
namespace Test_NUnit_MsSql
#elif FIREBIRD
namespace Test_NUnit_Firebird
#endif
{
[TestFixture]
public class ReadTests_DateTimeFunctions : TestBase
{
#if !DEBUG && SQLITE
[Explicit]
#endif
[Test]
public void GetYear()
{
Northwind db = CreateDB();
var q = from o in db.Orders
where o.OrderDate.Value.Year == 1996
select o;
var list = q.ToList();
Assert.IsTrue(list.Count > 0);
}
#if !DEBUG && SQLITE
[Explicit]
#endif
[Test]
public void GetMonth()
{
Northwind db = CreateDB();
var q = from o in db.Orders
where o.OrderDate.Value.Month == 10
select o;
var list = q.ToList();
Assert.IsTrue(list.Count > 0);
}
#if !DEBUG && SQLITE
[Explicit]
#endif
[Test]
public void GetDay()
{
Northwind db = CreateDB();
var q = from o in db.Orders
where o.OrderDate.Value.Day == 16
select o;
var list = q.ToList();
Assert.IsTrue(list.Count > 0);
}
#if !DEBUG && SQLITE
[Explicit]
#endif
[Test]
public void GetHours()
{
Northwind db = CreateDB();
var q = (from o in db.Orders
where o.OrderDate.Value.Hour == 0
select o).ToList();
}
#if !DEBUG && SQLITE
[Explicit]
#endif
[Test]
public void GetMinutes()
{
Northwind db = CreateDB();
var q = (from o in db.Orders
where o.OrderDate.Value.Minute == 0
select o).ToList();
}
#if !DEBUG && SQLITE
[Explicit]
#endif
[Test]
public void GetSeconds()
{
Northwind db = CreateDB();
var q = (from o in db.Orders
where o.OrderDate.Value.Second == 16
select o).ToList();
}
#if !DEBUG && SQLITE
[Explicit]
#endif
[Test]
public void GetMilliSeconds()
{
Northwind db = CreateDB();
var q = (from o in db.Orders
where o.OrderDate.Value.Millisecond == 0
select o).ToList();
}
#if !DEBUG && SQLITE
[Explicit]
#endif
[Test]
public void GetCurrentDateTime()
{
Northwind db = CreateDB();
var query = from e in db.Employees
where e.BirthDate.HasValue && e.BirthDate.Value == DateTime.Now
select e;
var list = query.ToList();
}
#if !DEBUG && SQLITE
[Explicit]
#endif
[Test]
public void Parse01()
{
Northwind db = CreateDB();
var query = from e in db.Employees
where e.BirthDate.Value == DateTime.Parse("1984/05/02")
select e;
var list = query.ToList();
}
[Test]
[ExpectedException(typeof(NotSupportedException))]
public void Parse02()
{
Northwind db = CreateDB();
var query = from e in db.Employees
where e.BirthDate.Value == DateTime.Parse(e.BirthDate.ToString())
select e;
var list = query.ToList();
}
[Test]
public void Parse03()
{
Northwind db = CreateDB();
var query = from e in db.Employees
where e.BirthDate.HasValue
select e.BirthDate.Value == DateTime.Parse("1984/05/02");
var list = query.ToList();
}
[Test]
[ExpectedException(typeof(InvalidOperationException))]
public void Parse04()
{
Northwind db = CreateDB();
var query = from e in db.Employees
select e.BirthDate.Value == DateTime.Parse(e.BirthDate.ToString());
var list = query.ToList();
}
#if !DEBUG && SQLITE
[Explicit]
#endif
[Test]
public void DateTimeDiffTotalHours()
{
Northwind db = CreateDB();
var query = from e in db.Employees
where (e.BirthDate.Value - DateTime.Parse("1984/05/02")).TotalHours > 0
select e;
var list = query.ToList();
}
#if !DEBUG && SQLITE
[Explicit]
#endif
[Test]
public void DateTimeDiffHours()
{
Northwind db = CreateDB();
DateTime parameterDateTime = db.Employees.First().BirthDate.Value.AddHours(2);
var query = from e in db.Employees
where (e.BirthDate.Value - parameterDateTime).Hours > -2
select e;
var list = query.ToList();
AssertHelper.Greater(list.Count, 0);
}
#if !DEBUG && SQLITE
[Explicit]
#endif
[Test]
public void DateTimeDiffTotalMinutes()
{
Northwind db = CreateDB();
var query = from e in db.Employees
where (e.BirthDate.Value - DateTime.Parse("1984/05/02")).TotalMinutes > 0
select e;
var list = query.ToList();
}
#if !DEBUG && SQLITE
[Explicit]
#endif
[Test]
public void DateTimeDiffMinutes()
{
Northwind db = CreateDB();
DateTime parameterDateTime = db.Employees.First().BirthDate.Value.AddMinutes(2);
var query = from e in db.Employees
where (e.BirthDate.Value - parameterDateTime).Minutes == -2
select e;
var list = query.ToList();
AssertHelper.Greater(list.Count, 0);
}
#if !DEBUG && SQLITE
[Explicit]
#endif
[Test]
public void DateTimeDiffTotalSeconds()
{
Northwind db = CreateDB();
var query = from e in db.Employees
where (e.BirthDate.Value - DateTime.Parse("1984/05/02")).TotalSeconds > 0
select e;
var list = query.ToList();
}
#if !DEBUG && SQLITE
[Explicit]
#endif
[Test]
public void DateTimeDiffSeconds()
{
Northwind db = CreateDB();
DateTime parameterDateTime = db.Employees.First().BirthDate.Value.AddSeconds(2);
var query = from e in db.Employees
where (e.BirthDate.Value - parameterDateTime).Seconds == -2
select e;
var list = query.ToList();
AssertHelper.Greater(list.Count, 0);
}
#if !DEBUG && (SQLITE || MSSQL)
// L2SQL: SQL Server doesnt' seem to support millisecond precision.
[Explicit]
#endif
[Test]
public void DateTimeDiffMilliseconds()
{
Northwind db = CreateDB();
DateTime parameterDateTime = db.Employees.First().BirthDate.Value.AddMilliseconds(2);
var query = from e in db.Employees
where (e.BirthDate.Value - parameterDateTime).Milliseconds == -2
select e;
var list = query.ToList();
AssertHelper.Greater(list.Count, 0);
}
#if !DEBUG && SQLITE
[Explicit]
#endif
[Test]
public void DateTimeDiffTotalMilliseconds()
{
Northwind db = CreateDB();
var query = from e in db.Employees
where (e.BirthDate.Value - DateTime.Parse("1984/05/02")).TotalMinutes > 0
select e;
var list = query.ToList();
}
#if !DEBUG && SQLITE
[Explicit]
#endif
[Test]
public void DateTimeDiffDays()
{
Northwind db = CreateDB();
DateTime parameterDateTime = db.Employees.First().BirthDate.Value.AddDays(2);
var query = from e in db.Employees
where (e.BirthDate.Value - parameterDateTime).Days == -2
select e;
var list = query.ToList();
AssertHelper.Greater(list.Count, 0);
}
#if !DEBUG && SQLITE
[Explicit]
#endif
[Test]
public void DateTimeDiffTotalDays()
{
Northwind db = CreateDB();
DateTime firstDate = db.Employees.First().BirthDate.Value;
DateTime parameterDate = firstDate.Date.AddDays(2);
parameterDate = parameterDate.Date.AddHours(12);
var query = from e in db.Employees
where (e.BirthDate.Value -parameterDate).TotalDays == -2.5
select e;
var list = query.ToList();
AssertHelper.Greater(list.Count, 0);
}
#if !DEBUG && POSTGRES
[Explicit]
#endif
[Test]
[ExpectedException(typeof(InvalidOperationException))]
public void DateTimeDiffTotalDaysSelectWithNulls01()
{
Northwind db = CreateDB();
var employee = new Employee
{
FirstName = "Test First",
LastName = "Test Last",
};
db.Employees.InsertOnSubmit(employee);
db.SubmitChanges();
DateTime firstDate = db.Employees.First().BirthDate.Value;
firstDate.Date.AddDays(2);
DateTime parameterDate = firstDate.Date.AddHours(12);
try
{
//this test should throw an invalid operation exception since one BirthDate is null so select clausle should crash
var query = from e in db.Employees
select (e.BirthDate.Value - parameterDate).TotalDays;
var list = query.ToList();
AssertHelper.Greater(list.Count, 0);
}
finally
{
db.Employees.DeleteOnSubmit(employee);
db.SubmitChanges();
}
}
#if !DEBUG && POSTGRES
[Explicit]
#endif
[Test]
public void DateTimeDiffTotalDaysSelectWithNulls02()
{
Northwind db = CreateDB();
var employee = new Employee
{
FirstName = "Test First",
LastName = "Test Last",
};
db.Employees.InsertOnSubmit(employee);
db.SubmitChanges();
DateTime firstDate = db.Employees.First().BirthDate.Value;
DateTime parameterDate = firstDate.Date.AddDays(2);
parameterDate = parameterDate.Date.AddHours(12);
try
{
var query = from e in db.Employees
where e.BirthDate.HasValue
select (e.BirthDate.Value - parameterDate).TotalDays;
var list = query.ToList();
AssertHelper.Greater(list.Count, 0);
}
finally
{
db.Employees.DeleteOnSubmit(employee);
db.SubmitChanges();
}
}
#if !DEBUG && (SQLITE || (MSSQL && L2SQL))
// L2SQL: System.Data.SqlClient.SqlException : The datepart minute is not supported by date function datepart for data type date.
[Explicit]
#endif
[Test]
public void DateGetDate()
{
Northwind db = CreateDB();
var query = from e in db.Employees
where (e.BirthDate.Value.Date).Minute == 0
select e;
var list = query.ToList();
}
}
}