diff UnitTests/Linq/Model/NorthwindDB.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/UnitTests/Linq/Model/NorthwindDB.cs	Thu Mar 27 21:46:09 2014 +0400
@@ -0,0 +1,119 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Linq.Expressions;
+using System.Reflection;
+using System.Text;
+
+using BLToolkit.Data;
+using BLToolkit.Data.DataProvider;
+using BLToolkit.Data.Linq;
+using BLToolkit.Data.Sql;
+using BLToolkit.Data.Sql.SqlProvider;
+
+namespace Data.Linq.Model
+{
+	public class NorthwindDB : DbManager
+	{
+		public NorthwindDB() : base("Northwind")
+		{
+		}
+
+		public Table<Northwind.Category>            Category            { get { return GetTable<Northwind.Category>();            } }
+		public Table<Northwind.Customer>            Customer            { get { return GetTable<Northwind.Customer>();            } }
+		public Table<Northwind.Employee>            Employee            { get { return GetTable<Northwind.Employee>();            } }
+		public Table<Northwind.EmployeeTerritory>   EmployeeTerritory   { get { return GetTable<Northwind.EmployeeTerritory>();   } }
+		public Table<Northwind.OrderDetail>         OrderDetail         { get { return GetTable<Northwind.OrderDetail>();         } }
+		public Table<Northwind.Order>               Order               { get { return GetTable<Northwind.Order>();               } }
+		public Table<Northwind.Product>             Product             { get { return GetTable<Northwind.Product>();             } }
+		public Table<Northwind.ActiveProduct>       ActiveProduct       { get { return GetTable<Northwind.ActiveProduct>();       } }
+		public Table<Northwind.DiscontinuedProduct> DiscontinuedProduct { get { return GetTable<Northwind.DiscontinuedProduct>(); } }
+		public Table<Northwind.Region>              Region              { get { return GetTable<Northwind.Region>();              } }
+		public Table<Northwind.Shipper>             Shipper             { get { return GetTable<Northwind.Shipper>();             } }
+		public Table<Northwind.Supplier>            Supplier            { get { return GetTable<Northwind.Supplier>();            } }
+		public Table<Northwind.Territory>           Territory           { get { return GetTable<Northwind.Territory>();           } }
+		
+#if !MONO
+		
+		public class FreeTextKey<T>
+		{
+			public T   Key;
+			public int Rank;
+		}
+
+		class FreeTextTableExpressionAttribute : TableExpressionAttribute
+		{
+			public FreeTextTableExpressionAttribute()
+				: base("")
+			{
+			}
+
+			public override void SetTable(SqlTable table, MemberInfo member, IEnumerable<Expression> expArgs, IEnumerable<ISqlExpression> sqlArgs)
+			{
+				var aargs  = sqlArgs.ToArray();
+				var arr    = ConvertArgs(member, aargs).ToList();
+				var method = (MethodInfo)member;
+				var sp     = new MsSql2008SqlProvider();
+
+				{
+					var ttype  = method.GetGenericArguments()[0];
+					var tbl    = new SqlTable(ttype);
+
+					var database     = tbl.Database     == null ? null : sp.Convert(tbl.Database,     ConvertType.NameToDatabase).  ToString();
+					var owner        = tbl.Owner        == null ? null : sp.Convert(tbl.Owner,        ConvertType.NameToOwner).     ToString();
+					var physicalName = tbl.PhysicalName == null ? null : sp.Convert(tbl.PhysicalName, ConvertType.NameToQueryTable).ToString();
+
+					var name   = sp.BuildTableName(new StringBuilder(), database, owner, physicalName);
+
+					arr.Add(new SqlExpression(name.ToString(), Precedence.Primary));
+				}
+
+				{
+					var field = ((ConstantExpression)expArgs.First()).Value;
+
+					if (field is string)
+						arr[0] = new SqlExpression(field.ToString(), Precedence.Primary);
+					else if (field is LambdaExpression)
+					{
+						var body = ((LambdaExpression)field).Body;
+
+						if (body is MemberExpression)
+						{
+							var name = ((MemberExpression)body).Member.Name;
+
+							name = sp.Convert(name, ConvertType.NameToQueryField).ToString();
+
+							arr[0] = new SqlExpression(name, Precedence.Primary);
+						}
+					}
+				}
+
+				table.SqlTableType   = SqlTableType.Expression;
+				table.Name           = "FREETEXTTABLE({6}, {2}, {3}) {1}";
+				table.TableArguments = arr.ToArray();
+			}
+		}
+
+		[FreeTextTableExpressionAttribute]
+		public Table<FreeTextKey<TKey>> FreeTextTable<TTable,TKey>(string field, string text)
+		{
+			return GetTable<FreeTextKey<TKey>>(
+				this,
+				((MethodInfo)(MethodBase.GetCurrentMethod())).MakeGenericMethod(typeof(TTable), typeof(TKey)),
+				field,
+				text);
+		}
+
+		[FreeTextTableExpressionAttribute]
+		public Table<FreeTextKey<TKey>> FreeTextTable<TTable,TKey>(Expression<Func<TTable,string>> fieldSelector, string text)
+		{
+			return GetTable<FreeTextKey<TKey>>(
+				this,
+				((MethodInfo)(MethodBase.GetCurrentMethod())).MakeGenericMethod(typeof(TTable), typeof(TKey)),
+				fieldSelector,
+				text);
+		}
+		
+#endif
+	}
+}