| 
0
 | 
     1 using System;
 | 
| 
 | 
     2 using System.Collections.Generic;
 | 
| 
 | 
     3 
 | 
| 
 | 
     4 using NUnit.Framework;
 | 
| 
 | 
     5 
 | 
| 
 | 
     6 using BLToolkit.Data;
 | 
| 
 | 
     7 using BLToolkit.DataAccess;
 | 
| 
 | 
     8 
 | 
| 
 | 
     9 namespace HowTo.DataAccess
 | 
| 
 | 
    10 {
 | 
| 
 | 
    11 	[TestFixture]
 | 
| 
 | 
    12 	public class CustomSqlQuery1
 | 
| 
 | 
    13 	{
 | 
| 
 | 
    14 		public class TestQueryAttribute : /*[a]*/SqlQueryAttribute/*[/a]*/
 | 
| 
 | 
    15 		{
 | 
| 
 | 
    16 			public TestQueryAttribute()
 | 
| 
 | 
    17 			{
 | 
| 
 | 
    18 				/*[a]*/IsDynamic = true/*[/a]*/;
 | 
| 
 | 
    19 			}
 | 
| 
 | 
    20 
 | 
| 
 | 
    21 			public string OracleText { get; set; }
 | 
| 
 | 
    22 			public string FbText     { get; set; }
 | 
| 
 | 
    23 			public string SQLiteText { get; set; }
 | 
| 
 | 
    24 
 | 
| 
 | 
    25 			public /*[a]*/override/*[/a]*/ string /*[a]*/GetSqlText/*[/a]*/(DataAccessor accessor, DbManager dbManager)
 | 
| 
 | 
    26 			{
 | 
| 
 | 
    27 				switch (dbManager.DataProvider.Name)
 | 
| 
 | 
    28 				{
 | 
| 
 | 
    29 					case "Sql"   :
 | 
| 
 | 
    30 					case "Access": return SqlText;
 | 
| 
 | 
    31 					case "Oracle": return OracleText ?? SqlText;
 | 
| 
 | 
    32 					case "Fdp"   : return FbText     ?? SqlText;
 | 
| 
 | 
    33 					case "SQLite": return SQLiteText ?? SqlText;
 | 
| 
 | 
    34 				}
 | 
| 
 | 
    35 
 | 
| 
 | 
    36 				throw new ApplicationException(string.Format("Unknown data provider '{0}'", dbManager.DataProvider.Name));
 | 
| 
 | 
    37 			}
 | 
| 
 | 
    38 		}
 | 
| 
 | 
    39 
 | 
| 
 | 
    40 		public abstract class PersonAccessor : DataAccessor
 | 
| 
 | 
    41 		{
 | 
| 
 | 
    42 			[TestQuery(
 | 
| 
 | 
    43 				/*[a]*/SqlText/*[/a]*/    = "SELECT * FROM Person WHERE LastName = @lastName",
 | 
| 
 | 
    44 				/*[a]*/OracleText/*[/a]*/ = "SELECT * FROM Person WHERE LastName = :lastName")]
 | 
| 
 | 
    45 			public abstract List<Person> SelectByLastName(string lastName);
 | 
| 
 | 
    46 
 | 
| 
 | 
    47 			[TestQuery(
 | 
| 
 | 
    48 				/*[a]*/SqlText/*[/a]*/    = "SELECT * FROM Person WHERE {0} = @value",
 | 
| 
 | 
    49 				/*[a]*/OracleText/*[/a]*/ = "SELECT * FROM Person WHERE {0} = :value")]
 | 
| 
 | 
    50 			public abstract List<Person> SelectBy([Format] string fieldName, string value);
 | 
| 
 | 
    51 
 | 
| 
 | 
    52 			[TestQuery(
 | 
| 
 | 
    53 				/*[a]*/SqlText/*[/a]*/    = "SELECT TOP {0} * FROM Person WHERE LastName = @lastName",
 | 
| 
 | 
    54 				/*[a]*/OracleText/*[/a]*/ = "SELECT * FROM Person WHERE LastName = :lastName AND rownum <= {0}",
 | 
| 
 | 
    55 				/*[a]*/FbText/*[/a]*/     = "SELECT FIRST {0} * FROM Person WHERE LastName = @lastName",
 | 
| 
 | 
    56 				/*[a]*/SQLiteText/*[/a]*/ = "SELECT * FROM Person WHERE LastName = @lastName LIMIT {0}")]
 | 
| 
 | 
    57 			public abstract List<Person> SelectByLastName(string lastName, [Format(0)] int top);
 | 
| 
 | 
    58 
 | 
| 
 | 
    59 			[TestQuery(
 | 
| 
 | 
    60 				/*[a]*/SqlText/*[/a]*/    = "SELECT @id as PersonID",
 | 
| 
 | 
    61 				/*[a]*/OracleText/*[/a]*/ = "SELECT :id PersonID FROM Dual",
 | 
| 
 | 
    62 				/*[a]*/FbText/*[/a]*/     = "SELECT CAST(@id AS INTEGER) PersonID FROM Dual")]
 | 
| 
 | 
    63 			public abstract List<Person> SelectID(int @id);
 | 
| 
 | 
    64 		}
 | 
| 
 | 
    65 
 | 
| 
 | 
    66 		[Test]
 | 
| 
 | 
    67 		public void Test1()
 | 
| 
 | 
    68 		{
 | 
| 
 | 
    69 			PersonAccessor da = DataAccessor.CreateInstance<PersonAccessor>();
 | 
| 
 | 
    70 
 | 
| 
 | 
    71 			List<Person> list = da.SelectByLastName("Testerson");
 | 
| 
 | 
    72 
 | 
| 
 | 
    73 			Assert.AreNotEqual(0, list.Count);
 | 
| 
 | 
    74 		}
 | 
| 
 | 
    75 
 | 
| 
 | 
    76 		[Test]
 | 
| 
 | 
    77 		public void Test2()
 | 
| 
 | 
    78 		{
 | 
| 
 | 
    79 			PersonAccessor da = DataAccessor.CreateInstance<PersonAccessor>();
 | 
| 
 | 
    80 
 | 
| 
 | 
    81 			List<Person> list = da.SelectBy("FirstName", "John");
 | 
| 
 | 
    82 
 | 
| 
 | 
    83 			Assert.AreNotEqual(0, list.Count);
 | 
| 
 | 
    84 		}
 | 
| 
 | 
    85 
 | 
| 
 | 
    86 		[Test]
 | 
| 
 | 
    87 		public void Test3()
 | 
| 
 | 
    88 		{
 | 
| 
 | 
    89 			PersonAccessor da = DataAccessor.CreateInstance<PersonAccessor>();
 | 
| 
 | 
    90 
 | 
| 
 | 
    91 			List<Person> list = da.SelectByLastName("Testerson", 1);
 | 
| 
 | 
    92 
 | 
| 
 | 
    93 			Assert.AreNotEqual(0, list.Count);
 | 
| 
 | 
    94 		}
 | 
| 
 | 
    95 
 | 
| 
 | 
    96 		[Test]
 | 
| 
 | 
    97 		public void Test4()
 | 
| 
 | 
    98 		{
 | 
| 
 | 
    99 			PersonAccessor da = DataAccessor.CreateInstance<PersonAccessor>();
 | 
| 
 | 
   100 
 | 
| 
 | 
   101 			List<Person> list = da.SelectID(42);
 | 
| 
 | 
   102 
 | 
| 
 | 
   103 			Assert.AreEqual(42, list[0].ID);
 | 
| 
 | 
   104 		}
 | 
| 
 | 
   105 	}
 | 
| 
 | 
   106 }
 |