diff HowTo/DataAccess/CustomSqlQuery1.cs @ 0:f990fcb411a9

Копия текущей версии из github
author cin
date Thu, 27 Mar 2014 21:46:09 +0400
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/HowTo/DataAccess/CustomSqlQuery1.cs	Thu Mar 27 21:46:09 2014 +0400
@@ -0,0 +1,106 @@
+using System;
+using System.Collections.Generic;
+
+using NUnit.Framework;
+
+using BLToolkit.Data;
+using BLToolkit.DataAccess;
+
+namespace HowTo.DataAccess
+{
+	[TestFixture]
+	public class CustomSqlQuery1
+	{
+		public class TestQueryAttribute : /*[a]*/SqlQueryAttribute/*[/a]*/
+		{
+			public TestQueryAttribute()
+			{
+				/*[a]*/IsDynamic = true/*[/a]*/;
+			}
+
+			public string OracleText { get; set; }
+			public string FbText     { get; set; }
+			public string SQLiteText { get; set; }
+
+			public /*[a]*/override/*[/a]*/ string /*[a]*/GetSqlText/*[/a]*/(DataAccessor accessor, DbManager dbManager)
+			{
+				switch (dbManager.DataProvider.Name)
+				{
+					case "Sql"   :
+					case "Access": return SqlText;
+					case "Oracle": return OracleText ?? SqlText;
+					case "Fdp"   : return FbText     ?? SqlText;
+					case "SQLite": return SQLiteText ?? SqlText;
+				}
+
+				throw new ApplicationException(string.Format("Unknown data provider '{0}'", dbManager.DataProvider.Name));
+			}
+		}
+
+		public abstract class PersonAccessor : DataAccessor
+		{
+			[TestQuery(
+				/*[a]*/SqlText/*[/a]*/    = "SELECT * FROM Person WHERE LastName = @lastName",
+				/*[a]*/OracleText/*[/a]*/ = "SELECT * FROM Person WHERE LastName = :lastName")]
+			public abstract List<Person> SelectByLastName(string lastName);
+
+			[TestQuery(
+				/*[a]*/SqlText/*[/a]*/    = "SELECT * FROM Person WHERE {0} = @value",
+				/*[a]*/OracleText/*[/a]*/ = "SELECT * FROM Person WHERE {0} = :value")]
+			public abstract List<Person> SelectBy([Format] string fieldName, string value);
+
+			[TestQuery(
+				/*[a]*/SqlText/*[/a]*/    = "SELECT TOP {0} * FROM Person WHERE LastName = @lastName",
+				/*[a]*/OracleText/*[/a]*/ = "SELECT * FROM Person WHERE LastName = :lastName AND rownum <= {0}",
+				/*[a]*/FbText/*[/a]*/     = "SELECT FIRST {0} * FROM Person WHERE LastName = @lastName",
+				/*[a]*/SQLiteText/*[/a]*/ = "SELECT * FROM Person WHERE LastName = @lastName LIMIT {0}")]
+			public abstract List<Person> SelectByLastName(string lastName, [Format(0)] int top);
+
+			[TestQuery(
+				/*[a]*/SqlText/*[/a]*/    = "SELECT @id as PersonID",
+				/*[a]*/OracleText/*[/a]*/ = "SELECT :id PersonID FROM Dual",
+				/*[a]*/FbText/*[/a]*/     = "SELECT CAST(@id AS INTEGER) PersonID FROM Dual")]
+			public abstract List<Person> SelectID(int @id);
+		}
+
+		[Test]
+		public void Test1()
+		{
+			PersonAccessor da = DataAccessor.CreateInstance<PersonAccessor>();
+
+			List<Person> list = da.SelectByLastName("Testerson");
+
+			Assert.AreNotEqual(0, list.Count);
+		}
+
+		[Test]
+		public void Test2()
+		{
+			PersonAccessor da = DataAccessor.CreateInstance<PersonAccessor>();
+
+			List<Person> list = da.SelectBy("FirstName", "John");
+
+			Assert.AreNotEqual(0, list.Count);
+		}
+
+		[Test]
+		public void Test3()
+		{
+			PersonAccessor da = DataAccessor.CreateInstance<PersonAccessor>();
+
+			List<Person> list = da.SelectByLastName("Testerson", 1);
+
+			Assert.AreNotEqual(0, list.Count);
+		}
+
+		[Test]
+		public void Test4()
+		{
+			PersonAccessor da = DataAccessor.CreateInstance<PersonAccessor>();
+
+			List<Person> list = da.SelectID(42);
+
+			Assert.AreEqual(42, list[0].ID);
+		}
+	}
+}