using DataLinq = DbLinq.Data.Linq;\r
#endif\r
\r
+namespace nwind\r
+{\r
+ interface IHasAddress\r
+ {\r
+ string Address { get; set; }\r
+ }\r
+\r
+ partial class Customer : IHasAddress\r
+ {\r
+ }\r
+\r
+ partial class Employee : IHasAddress\r
+ {\r
+ }\r
+}\r
+\r
// test ns \r
#if MYSQL\r
namespace Test_NUnit_MySql\r
namespace Test_NUnit_Sqlite\r
#elif INGRES\r
namespace Test_NUnit_Ingres\r
-#elif MSSQL && MONO_STRICT\r
+#elif MSSQL && L2SQL\r
namespace Test_NUnit_MsSql_Strict\r
#elif MSSQL\r
namespace Test_NUnit_MsSql\r
\r
\r
\r
+#if !DEBUG && (MSSQL && L2SQL)\r
+ // L2SQL doesn't support 'SELECT' queries in DataContext.ExecuteCommand().\r
+ [Explicit]\r
+#endif\r
[Test]\r
public void A3_ProductsTableHasPen()\r
{\r
Northwind db = CreateDB();\r
- //string sql = @"SELECT count(*) FROM linqtestdb.Products WHERE ProductName='Pen'";\r
- string sql = @"SELECT count(*) FROM [Products] WHERE [ProductName]='Pen'";\r
+ //string sql = @"SELECT count(*) FROM linqtestdb.Products WHERE ProductName='Chai'";\r
+ string sql = @"SELECT count(*) FROM [Products] WHERE [ProductName]='Chai'";\r
long iResult = db.ExecuteCommand(sql);\r
//long iResult = base.ExecuteScalar(sql);\r
- Assert.AreEqual(iResult, 1L, "Expecting one Pen in Products table, got:" + iResult + " (SQL:" + sql + ")");\r
+ Assert.AreEqual(iResult, 1L, "Expecting one Chai in Products table, got:" + iResult + " (SQL:" + sql + ")");\r
}\r
\r
[Test]\r
Northwind db = CreateDB();\r
\r
// Query for a specific customer\r
- var cust = db.Customers.Single(c => c.CompanyName == "airbus");\r
- Assert.IsNotNull(cust, "Expected one customer 'airbus'");\r
+ var cust = db.Customers.Single(c => c.CompanyName == "Around the Horn");\r
+ Assert.IsNotNull(cust, "Expected one customer 'Around the Horn'.");\r
+ var id = 1;\r
+ var prod = db.Products.Single(p => p.ProductID == id);\r
+ Assert.AreEqual("Chai", prod.ProductName);\r
+ id = 2;\r
+ prod = db.Products.Single(p => p.ProductID == id);\r
+ Assert.AreEqual("Chang", prod.ProductName);\r
}\r
\r
[Test]\r
Northwind db = CreateDB();\r
\r
// Query for a specific customer\r
- var cust = db.Customers.SingleOrDefault(c => c.CompanyName == "airbus");\r
- Assert.IsNotNull(cust, "Expected one customer 'airbus'");\r
+ var cust = db.Customers.SingleOrDefault(c => c.CompanyName == "Around the Horn");\r
+ Assert.IsNotNull(cust, "Expected one customer 'Around the Horn'.");\r
+\r
+#if false\r
+ var id = "ALFKI";\r
+ cust = db.Customers.SingleOrDefault(c => c.CustomerID == id);\r
+ Assert.AreEqual("ALFKI", cust.CustomerID);\r
+ id = "BLAUS";\r
+ cust = db.Customers.SingleOrDefault(c => c.CustomerID == id);\r
+ Assert.AreEqual("BLAUS", cust.CustomerID);\r
+ id = "DNE";\r
+ cust = db.Customers.SingleOrDefault(c => c.CustomerID == id); // Does Not Exist\r
+ Assert.IsNull(cust);\r
+\r
+ id = "ALFKI";\r
+ cust = db.Customers.SingleOrDefault(c => c.CustomerID == id);\r
+ Assert.AreEqual("ALFKI", cust.CustomerID);\r
+ id = "BLAUS";\r
+ cust = db.Customers.SingleOrDefault(c => c.CustomerID == id);\r
+#endif\r
+ cust = GetCustomerById(db, "ALFKI");\r
+ Assert.AreEqual("ALFKI", cust.CustomerID);\r
+\r
+ cust = GetCustomerById(db, "BLAUS");\r
+ Assert.AreEqual("BLAUS", cust.CustomerID);\r
+\r
+ cust = GetCustomerById(db, "DNE");\r
+ Assert.IsNull(cust);\r
+\r
+ cust = GetCustomerById(db, "ALFKI");\r
+ Assert.AreEqual("ALFKI", cust.CustomerID);\r
+\r
+ cust = GetCustomerById(db, "BLAUS");\r
+ Assert.AreEqual("BLAUS", cust.CustomerID);\r
+ }\r
+\r
+\r
+ private static Customer GetCustomerById(Northwind db, string id)\r
+ {\r
+ return db.Customers.SingleOrDefault(c => c.CustomerID == id);\r
}\r
\r
\r
Assert.IsTrue(p1.ProductID == 1);\r
}\r
\r
+ [Test]\r
+ public void A8_SelectSingleOrDefault_QueryCacheDisabled()\r
+ {\r
+ Northwind db = CreateDB();\r
+#if !MONO_STRICT\r
+ db.QueryCacheEnabled = true;\r
+#endif\r
+\r
+ // Query for a specific customer\r
+ var cust = db.Customers.SingleOrDefault(c => c.CompanyName == "Around the Horn");\r
+ Assert.IsNotNull(cust, "Expected one customer 'Around the Horn'.");\r
+\r
+ cust = GetCustomerById(db, "ALFKI");\r
+ Assert.AreEqual("ALFKI", cust.CustomerID);\r
+\r
+ cust = GetCustomerById(db, "BLAUS");\r
+ Assert.AreEqual("BLAUS", cust.CustomerID);\r
+\r
+ cust = GetCustomerById(db, "DNE");\r
+ Assert.IsNull(cust);\r
+\r
+ cust = GetCustomerById(db, "ALFKI");\r
+ Assert.AreEqual("ALFKI", cust.CustomerID);\r
+\r
+ cust = GetCustomerById(db, "BLAUS");\r
+ Assert.AreEqual("BLAUS", cust.CustomerID);\r
+ }\r
+\r
#endregion\r
\r
//TODO: group B, which checks AllTypes\r
Assert.Greater(productCount, 0, "Expected some products, got none");\r
}\r
\r
+#if !DEBUG && SQLITE\r
+ [Explicit]\r
+#endif\r
[Test]\r
public void C2_SelectPenId()\r
{\r
Northwind db = CreateDB();\r
\r
- var q = from p in db.Products where p.ProductName == "Pen" select p.ProductID;\r
+ var q = from p in db.Products where p.ProductName == "Chai" select p.ProductID;\r
var productIDs = q.ToList();\r
int productCount = productIDs.Count;\r
Assert.AreEqual(productCount, 1, "Expected one pen, got count=" + productCount);\r
{\r
Northwind db = CreateDB();\r
\r
- var pen = "Pen";\r
+ var pen = "Chai";\r
var q = from p in db.Products where p.ProductName == pen select p.ProductID;\r
var productIDs = q.ToList();\r
int productCount = productIDs.Count;\r
Northwind db = CreateDB();\r
\r
var q = from p in db.Products\r
- where p.ProductName == "Pen"\r
+ where p.ProductName == "Chai"\r
select new { ProductId = p.ProductID, Name = p.ProductName };\r
int count = 0;\r
//string penName;\r
foreach (var v in q)\r
{\r
- Assert.AreEqual(v.Name, "Pen", "Expected ProductName='Pen'");\r
+ Assert.AreEqual(v.Name, "Chai", "Expected ProductName='Chai'");\r
count++;\r
}\r
Assert.AreEqual(count, 1, "Expected one pen, got count=" + count);\r
}\r
\r
+#if !DEBUG && POSTGRES\r
+ [Explicit]\r
+#endif\r
[Test]\r
public void C4_CountWithOrderBy()\r
{\r
var res = from o in db.Orders\r
select new { test = 1 };\r
var list = res.ToList();\r
- Assert.IsTrue(list.Count > 0);\r
+ Assert.AreEqual(db.Orders.Count(), list.Count);\r
}\r
\r
\r
/// <summary>\r
/// from http://www.agilior.pt/blogs/pedro.rainho/archive/2008/04/11/4271.aspx\r
/// </summary>\r
+#if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL))\r
+ [Explicit]\r
+#endif\r
[Test(Description = "Using LIKE operator from linq query")]\r
public void C7B_LikeOperator()\r
{\r
public void C8_SelectPenByLocalVariable()\r
{\r
Northwind db = CreateDB();\r
- string pen = "Pen";\r
+ string pen = "Chai";\r
\r
var q = from p in db.Products\r
where (p.ProductName == pen)\r
where true\r
select p;\r
\r
- int count = q.ToList().Count();\r
- Assert.Greater(count,0);\r
+ int count = q.ToList().Count;\r
+ Assert.AreEqual(count, db.Customers.Count());\r
+ }\r
+\r
+ [Test]\r
+ public void C10b_ConstantPredicate()\r
+ {\r
+ Northwind db = CreateDB();\r
+ var q = from p in db.Customers\r
+ where false\r
+ select p;\r
+\r
+ int count = q.Count();\r
+ Assert.AreEqual(count, 0);\r
+ }\r
+\r
+ [Test]\r
+ public void C10c_ConstantPredicate()\r
+ {\r
+ Northwind db = CreateDB();\r
+ var q = from p in db.Customers\r
+ where (p.Address.StartsWith("A") && false)\r
+ select p;\r
+\r
+ int count = q.Count();\r
+ Assert.AreEqual(count, 0);\r
+ }\r
+\r
+ [Test]\r
+ public void C10d_ConstantPredicate()\r
+ {\r
+ Northwind db = CreateDB();\r
+ var q = from p in db.Customers\r
+ where (p.Address.StartsWith("A") || true)\r
+ select p;\r
+\r
+ int count = q.Count();\r
+ Assert.AreEqual(count, db.Customers.Count());\r
+ }\r
+\r
+ [Test]\r
+ public void C10e_ConstantPredicate()\r
+ {\r
+ Northwind db = CreateDB();\r
+ var q = from p in db.Customers\r
+ where (p.Address.StartsWith("A") || false)\r
+ select p;\r
+\r
+ int count = q.Count();\r
+ Assert.Less(count, db.Customers.Count());\r
+ }\r
+\r
+ [Test]\r
+ public void C10f_ConstantPredicate()\r
+ {\r
+ Northwind db = CreateDB();\r
+ var q = from p in db.Customers\r
+ where (p.Address.StartsWith("A") && true)\r
+ select p;\r
+\r
+ int count = q.Count();\r
+ Assert.Less(count, db.Customers.Count());\r
}\r
\r
[Test]\r
Northwind db = CreateDB();\r
var q = from p in db.Products \r
#if INGRES\r
- where p.Discontinued != 0\r
+ where p.Discontinued == "Y"\r
#else\r
where p.Discontinued == true \r
#endif\r
Assert.AreEqual(productCount, 8, "Expected eight products discontinued, got count=" + productCount);\r
}\r
\r
+ [Explicit]\r
[Test]\r
public void C12_SelectEmployee_MultiJoinWithWhere()\r
{\r
Assert.AreEqual(4, employeeCount, "Expected for employees, got count=" + employeeCount);\r
}\r
\r
+ [Test]\r
+ [ExpectedException(ExceptionType=typeof(InvalidOperationException), ExpectedMessage="Data context options cannot be modified after results have been returned from a query.")]\r
+ public void C13_Changing_ObjectTrackingEnabled2False()\r
+ {\r
+ Northwind db = CreateDB();\r
+ var q = from t in db.Territories\r
+ select t;\r
+ var territoryCount = q.FirstOrDefault();\r
+ db.ObjectTrackingEnabled = false;\r
+ }\r
+\r
+ [Test]\r
+ [ExpectedException(ExceptionType = typeof(InvalidOperationException), ExpectedMessage = "Data context options cannot be modified after results have been returned from a query.")]\r
+ public void C14_Changing_DeferredLoadingEnabled2False()\r
+ {\r
+ Northwind db = CreateDB();\r
+ var q = from t in db.Territories\r
+ select t;\r
+ var territoryCount = q.FirstOrDefault();\r
+ db.DeferredLoadingEnabled = false;\r
+ }\r
+\r
+ [Test]\r
+ [ExpectedException(ExceptionType = typeof(InvalidOperationException), ExpectedMessage = "Object tracking is not enabled for the current data context instance.")]\r
+ public void C15_SubmitChanges_DeferredLoadingEnabled_False()\r
+ {\r
+ Northwind db = CreateDB();\r
+ db.ObjectTrackingEnabled = false;\r
+ var q = from t in db.Territories\r
+ select t;\r
+ var territoryCount = q.Count();\r
+ db.SubmitChanges();\r
+ }\r
+\r
+ [Test]\r
+ public void C16_GettingProperty_DeferredLoadingEnabled2False()\r
+ {\r
+ Northwind db = CreateDB();\r
+ db.DeferredLoadingEnabled = false;\r
+ var q = from t in db.Territories\r
+ select t;\r
+ Territory territory = q.FirstOrDefault();\r
+ Assert.IsNotNull(territory);\r
+ Assert.IsNull(territory.Region);\r
+ }\r
+\r
+ [Test]\r
+ public void C17_GettingProperty_ObjectTrackingEnabled2False()\r
+ {\r
+ Northwind db = CreateDB();\r
+ db.ObjectTrackingEnabled = false;\r
+ var q = from t in db.Territories\r
+ select t;\r
+ Territory territory = q.FirstOrDefault();\r
+ Assert.IsNotNull(territory);\r
+ Assert.IsNull(territory.Region);\r
+ }\r
+\r
+ [Test]\r
+ public void C18_GettingProperty_LazyLoaded()\r
+ {\r
+ Northwind db = CreateDB();\r
+ var q = from t in db.Territories\r
+ select t;\r
+ Territory territory = q.FirstOrDefault();\r
+ Assert.IsNotNull(territory);\r
+ Assert.IsNotNull(territory.Region);\r
+ }\r
+\r
+ [Test]\r
+ public void C19_SelectEmployee_Fluent()\r
+ {\r
+ Northwind db = CreateDB();\r
+ var q = db.GetTable<Territory>()\r
+ .Join(db.GetTable<EmployeeTerritory>(), t => t.TerritoryID, l => l.TerritoryID, (t, l) => l)\r
+ .Join(db.GetTable<Employee>().Where(e => e.EmployeeID > 0), l => l.EmployeeID, e => e.EmployeeID, (l, e) => e);\r
+ var employeeCount = q.Count();\r
+ Assert.Greater(employeeCount, 0, "Expected any employees, got count=" + employeeCount);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Test the use of DbLinq as a QueryObject\r
+ /// http://www.martinfowler.com/eaaCatalog/queryObject.html\r
+ /// </summary>\r
+ [Test]\r
+ public void C20_SelectEmployee_DbLinqAsQueryObject()\r
+ {\r
+ Northwind db = CreateDB();\r
+ IQueryable<Employee> allEmployees = db.GetTable<Employee>();\r
+\r
+ allEmployees = filterByNameOrSurnameContains(db, allEmployees, "an");\r
+\r
+ allEmployees = filterByTerritoryName(db, allEmployees, "Neward");\r
+\r
+ Assert.AreEqual(1, allEmployees.Count());\r
+ }\r
+\r
+ [Test]\r
+ public void C21_SelectEmployee_DbLinqAsQueryObjectWithOrderCount()\r
+ {\r
+ Northwind db = CreateDB();\r
+ IQueryable<Employee> allEmployees = db.GetTable<Employee>();\r
+\r
+ allEmployees = filterByOrderCountGreaterThan(db, allEmployees, 50);\r
+ allEmployees = filterByNameOrSurnameContains(db, allEmployees, "an");\r
+\r
+ allEmployees = filterByTerritoryNames(db, allEmployees, "Neward", "Boston", "Wilton");\r
+\r
+ int employeesCount = allEmployees.ToList().Count;\r
+\r
+ Assert.AreEqual(employeesCount, allEmployees.Count());\r
+ }\r
+\r
+\r
+ private IQueryable<Employee> filterByOrderCountGreaterThan(Northwind db, IQueryable<Employee> allEmployees, int minimumOrderNumber)\r
+ {\r
+ return from e in allEmployees.Where(e => e.Orders.Count > minimumOrderNumber) select e;\r
+ }\r
+\r
+ private IQueryable<Employee> filterByNameOrSurnameContains(Northwind db, IQueryable<Employee> allEmployees, string namePart)\r
+ {\r
+ return from e in allEmployees.Where(e => e.FirstName.Contains(namePart) || e.LastName.Contains(namePart)) select e;\r
+ }\r
+\r
+ private IQueryable<Employee> filterByTerritoryName(Northwind db, IQueryable<Employee> allEmployees, string territoryName)\r
+ {\r
+ IQueryable<Territory> territoryRequired = db.GetTable<Territory>().Where(t => t.TerritoryDescription == territoryName);\r
+ var q = territoryRequired\r
+ .Join(db.GetTable<EmployeeTerritory>(), t => t.TerritoryID, l => l.TerritoryID, (t, l) => l)\r
+ .Join(allEmployees, l => l.EmployeeID, e => e.EmployeeID, (l, e) => e);\r
+ return q;\r
+ }\r
+\r
+ private IQueryable<Employee> filterByTerritoryNames(Northwind db, IQueryable<Employee> allEmployees, params string[] territoryNames)\r
+ {\r
+ IQueryable<Territory> territoryRequired = db.GetTable<Territory>().Where(t => territoryNames.Contains(t.TerritoryDescription));\r
+ var q = territoryRequired\r
+ .Join(db.GetTable<EmployeeTerritory>(), t => t.TerritoryID, l => l.TerritoryID, (t, l) => l)\r
+ .Join(allEmployees, l => l.EmployeeID, e => e.EmployeeID, (l, e) => e);\r
+ return q;\r
+ }\r
+\r
+ [Test]\r
+ public void C22_SelectEmployee_GetCommandTextWithNoFilter()\r
+ {\r
+ Northwind db = CreateDB();\r
+ IQueryable<Employee> allEmployees = db.GetTable<Employee>();\r
+ var commandText = db.GetCommand(allEmployees).CommandText;\r
+ Assert.IsNotNull(commandText);\r
+ }\r
+\r
+ [Test]\r
+ public void C23_SelectEmployees()\r
+ {\r
+ Northwind db = CreateDB();\r
+ var allEmployees = db.GetTable<Employee>();\r
+ int count = 0;\r
+ foreach (var emp in allEmployees)\r
+ {\r
+ ++count;\r
+ }\r
+ Assert.AreEqual(9, count);\r
+ }\r
+\r
+#if !DEBUG && (MSSQL && !L2SQL)\r
+ [Explicit]\r
+#endif\r
+ [Test]\r
+ public void C24_SelectEmployee_DbLinqAsQueryObjectWithExceptAndImage()\r
+ {\r
+ // This fail becouse Employee contains a ndata, ndata is not comparable\r
+ // and EXCEPT make a distinct on DATA\r
+ Northwind db = CreateDB();\r
+ IQueryable<Employee> allEmployees = db.GetTable<Employee>();\r
+\r
+ var toExclude = filterByOrderCountGreaterThan(db, allEmployees, 50);\r
+ allEmployees = filterByNameOrSurnameContains(db, allEmployees, "a").Except(toExclude);\r
+\r
+ string commandText = db.GetCommand(allEmployees).CommandText;\r
+\r
+ int employeesCount = allEmployees.ToList().Count;\r
+\r
+ Assert.AreEqual(employeesCount, allEmployees.Count());\r
+ }\r
+\r
+ [Test]\r
+ public void C25_SelectViaInterface()\r
+ {\r
+ var db = CreateDB();\r
+ var c = MatchAddress(db.Customers, "ignoreme").FirstOrDefault();\r
+ Assert.IsNotNull(c);\r
+ var e = MatchAddress(db.Employees, "ignoreme").FirstOrDefault();\r
+ Assert.IsNotNull(e);\r
+ }\r
+\r
+ private static IEnumerable<T> MatchAddress<T>(IQueryable<T> query, string searchValue)\r
+ where T : IHasAddress\r
+ {\r
+ var lookups = query.OrderByDescending(v => v.Address.Length);\r
+ return lookups;\r
+ }\r
+\r
+#if !DEBUG && POSTGRES\r
+ [Explicit]\r
+#endif\r
+ [Test]\r
+ public void C26_SelectWithNestedMethodCall()\r
+ {\r
+ var db = CreateDB();\r
+ var s = "param";\r
+ var q = from e in db.Employees select new\r
+ {\r
+ BackName = e.LastName + ", " + e.FirstName,\r
+ StaticName = GetStaticName(e),\r
+ InstanceName= GetInstanceName(e, s, "constant"),\r
+ Territories = e.EmployeeTerritories.ToList(),\r
+ };\r
+ var actual = q.ToList();\r
+ var expected = new[]{\r
+ new {\r
+ BackName = "Davolio, Nancy",\r
+ StaticName = "Nancy Davolio [Hired: 1992-05-01]",\r
+ InstanceName = "Nancy Davolio [Home Phone: (206) 555-9857]",\r
+ TerritoryCount = 2,\r
+ },\r
+ new {\r
+ BackName = "Fuller, Andrew",\r
+ StaticName = "Andrew Fuller [Hired: 1992-08-14]",\r
+ InstanceName = "Andrew Fuller [Home Phone: (206) 555-9482]",\r
+ TerritoryCount = 7,\r
+ },\r
+ new {\r
+ BackName = "Leverling, Janet",\r
+ StaticName = "Janet Leverling [Hired: 1992-04-01]",\r
+ InstanceName = "Janet Leverling [Home Phone: (206) 555-3412]",\r
+ TerritoryCount = 4,\r
+ },\r
+ new {\r
+ BackName = "Peacock, Margaret",\r
+ StaticName = "Margaret Peacock [Hired: 1993-05-03]",\r
+ InstanceName = "Margaret Peacock [Home Phone: (206) 555-8122]",\r
+ TerritoryCount = 3,\r
+ },\r
+ new {\r
+ BackName = "Buchanan, Steven",\r
+ StaticName = "Steven Buchanan [Hired: 1993-10-17]",\r
+ InstanceName = "Steven Buchanan [Home Phone: (71) 555-4848]",\r
+ TerritoryCount = 7,\r
+ },\r
+ new {\r
+ BackName = "Suyama, Michael",\r
+ StaticName = "Michael Suyama [Hired: 1993-10-17]",\r
+ InstanceName = "Michael Suyama [Home Phone: (71) 555-7773]",\r
+ TerritoryCount = 5,\r
+ },\r
+ new {\r
+ BackName = "King, Robert",\r
+ StaticName = "Robert King [Hired: 1994-01-02]",\r
+ InstanceName = "Robert King [Home Phone: (71) 555-5598]",\r
+ TerritoryCount = 10,\r
+ },\r
+ new {\r
+ BackName = "Callahan, Laura",\r
+ StaticName = "Laura Callahan [Hired: 1994-03-05]",\r
+ InstanceName = "Laura Callahan [Home Phone: (206) 555-1189]",\r
+ TerritoryCount = 4,\r
+ },\r
+ new {\r
+ BackName = "Dodsworth, Anne",\r
+ StaticName = "Anne Dodsworth [Hired: 1994-11-15]",\r
+ InstanceName = "Anne Dodsworth [Home Phone: (71) 555-4444]",\r
+ TerritoryCount = 7,\r
+ },\r
+ };\r
+ Assert.AreEqual(expected.Length, actual.Count);\r
+ for (int i = 0; i < expected.Length; ++i)\r
+ {\r
+ Assert.AreEqual(expected[i].BackName, actual[i].BackName);\r
+ Assert.AreEqual(expected[i].StaticName, actual[i].StaticName);\r
+ Assert.AreEqual(expected[i].InstanceName, actual[i].InstanceName);\r
+ Assert.AreEqual(expected[i].TerritoryCount, actual[i].Territories.Count);\r
+ }\r
+ }\r
+\r
+ static string GetStaticName(Employee e)\r
+ {\r
+ return e.FirstName + " " + e.LastName + " [Hired: " + \r
+ (e.HireDate.HasValue ? e.HireDate.Value.ToString("yyyy-MM-dd") : "") + "]";\r
+ }\r
+\r
+ string GetInstanceName(Employee e, string a, string b)\r
+ {\r
+ return e.FirstName + " " + e.LastName + " [Home Phone: " + e.HomePhone.ToString() + "]";\r
+ }\r
+\r
+ [Test]\r
+ public void C27_SelectEntitySet()\r
+ {\r
+ // Debugger.Break();\r
+ var db = CreateDB();\r
+ var q = from e in db.Employees\r
+ orderby e.EmployeeID\r
+ select new\r
+ {\r
+ e.Orders\r
+ };\r
+ var expectedOrderCounts = new[]{\r
+ 123, // Nancy Davolio\r
+ 96, // Andrew Fuller\r
+ 127, // Janet Leverling\r
+ 156, // Margaret Peacock\r
+ 42, // Steven Buchanan\r
+ 67, // Michael Suyama\r
+ 72, // Robert King\r
+ 104, // Laura Callahan\r
+ 43, // Anne Dodsworth\r
+ };\r
+ int c = 0;\r
+ foreach (var e in q)\r
+ {\r
+ Assert.AreEqual(expectedOrderCounts[c], e.Orders.Count);\r
+ ++c;\r
+ }\r
+ Assert.AreEqual(expectedOrderCounts.Length, c);\r
+ }\r
+\r
+ [Test]\r
+ public void C28_SelectEntityRef()\r
+ {\r
+ var db = CreateDB();\r
+ var emp = db.Employees.Single(e => e.EmployeeID == 1);\r
+ Assert.IsNotNull(emp.ReportsToEmployee);\r
+ Assert.AreEqual(emp.ReportsTo.Value, emp.ReportsToEmployee.EmployeeID);\r
+ }\r
#endregion\r
\r
#region region D - select first or last - calls IQueryable.Execute instead of GetEnumerator\r
{\r
Northwind db = CreateDB();\r
\r
- var q = from p in db.Products where p.ProductName == "Pen" select p.ProductID;\r
+ var q = from p in db.Products where p.ProductName == "Chai" select p.ProductID;\r
var productID = q.First();\r
Assert.Greater(productID, 0, "Expected penID>0, got " + productID);\r
}\r
{\r
Northwind db = CreateDB();\r
\r
- var q = from p in db.Products where p.ProductName == "Pen" select p;\r
+ var q = from p in db.Products where p.ProductName == "Chai" select p;\r
Product pen = q.First();\r
Assert.IsNotNull(pen, "Expected non-null Product");\r
}\r
\r
+#if !DEBUG && MSSQL\r
+ // L2SQL: System.NotSupportedException : The query operator 'Last' is not supported.\r
+ [Explicit]\r
+#endif\r
[Test]\r
public void D03_SelectLastPenID()\r
{\r
Northwind db = CreateDB();\r
\r
- var q = from p in db.Products where p.ProductName == "Pen" select p.ProductID;\r
+ var q = from p in db.Products where p.ProductName == "Chai" select p.ProductID;\r
var productID = q.Last();\r
Assert.Greater(productID, 0, "Expected penID>0, got " + productID);\r
}\r
\r
+#if !DEBUG && (POSTGRES || (MSSQL && !L2SQL))\r
+ [Explicit]\r
+#endif\r
[Test]\r
public void D04_SelectProducts_OrderByName()\r
{\r
public void D05_SelectOrdersForProduct()\r
{\r
Northwind db = CreateDB();\r
- //var q = from p in db.Products where "Pen"==p.ProductName select p.Order;\r
+ //var q = from p in db.Products where "Chai"==p.ProductName select p.Order;\r
//List<Order> penOrders = q.ToList();\r
- //Assert.Greater(penOrders.Count,0,"Expected some orders for product 'Pen'");\r
+ //Assert.Greater(penOrders.Count,0,"Expected some orders for product 'Chai'");\r
\r
var q =\r
from o in db.Orders\r
}\r
Assert.Greater(list1.Count, 0, "Expected some orders for London customers");\r
}\r
+\r
[Test]\r
public void D07_OrdersFromLondon_Alt()\r
{\r
}\r
\r
\r
+#if !DEBUG && (SQLITE || POSTGRES || MSSQL)\r
+ // L2SQL: System.InvalidOperationException : The type 'Test_NUnit_MsSql_Strict.ReadTest+Northwind1+CustomerDerivedClass' is not mapped as a Table.\r
+ [Explicit]\r
+#endif\r
[Test]\r
public void D12_SelectDerivedClass()\r
{\r
{\r
Northwind db = CreateDB();\r
\r
- var res = db.ExecuteQuery<Pen>(@"SELECT [ProductID] AS PenId FROM [Products] WHERE\r
- [ProductName] ='Pen'").Single();\r
- Assert.AreEqual(1, res.PenId);\r
+ var res = db.ExecuteQuery<Chai>(@"SELECT [ProductID] AS ChaiId FROM [Products] WHERE\r
+ [ProductName] ='Chai'").Single();\r
+ Assert.AreEqual(1, res.ChaiId);\r
}\r
\r
- class Pen\r
+ class Chai\r
{\r
- internal int PenId;\r
+ internal int ChaiId;\r
}\r
\r
[Test]\r
}\r
}\r
\r
+#if !DEBUG && (SQLITE || POSTGRES || MSSQL)\r
+ // L2SQL: System.InvalidOperationException : The type 'Test_NUnit_MsSql_Strict.ReadTest+NorthwindDupl+CustomerDerivedClass' is not mapped as a Table.\r
+ [Explicit]\r
+#endif\r
[Test]\r
public void D15_DuplicateProperty()\r
{\r
\r
#endregion\r
\r
+ [Test]\r
+ public void SqlInjectionAttack()\r
+ {\r
+ var db = CreateDB();\r
+ var q = db.Customers.Where(c => c.ContactName == "'; DROP TABLE DoesNotExist; --");\r
+ Assert.AreEqual(0, q.Count());\r
+ }\r
+ \r
+#if POSTGRES || MSSQL\r
+ [Test]\r
+ public void Storage01()\r
+ {\r
+ var db = CreateDB();\r
+ var q = db.NoStorageCategories.Where(c => c.CategoryID == 1);\r
+ var r = q.First();\r
+ Assert.AreEqual(1, q.Count());\r
+ Assert.AreEqual(1, r.CategoryID);\r
+ Assert.IsTrue(r.propertyInvoked_CategoryName); \r
+ Assert.IsFalse(r.propertyInvoked_Description); \r
+ }\r
+#endif \r
}\r
}\r