diff UnitTests/Linq/UserTests/MultiPartIdentifierTest.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/UserTests/MultiPartIdentifierTest.cs	Thu Mar 27 21:46:09 2014 +0400
@@ -0,0 +1,106 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+
+using BLToolkit.Data.Linq;
+using BLToolkit.DataAccess;
+using BLToolkit.Mapping;
+
+using NUnit.Framework;
+
+// ReSharper disable ClassNeverInstantiated.Local
+
+namespace Data.Linq.UserTests
+{
+	[TestFixture]
+	public class MultiPartIdentifierTest : TestBase
+	{
+		class Table1
+		{
+			public long Field1;
+			public long Field2;
+			public int? Field3;
+
+			[Association(ThisKey = "Field2", OtherKey = "Field2", CanBeNull = false)]
+			public Table2 Table2Ref { get; set; }
+
+			[Association(ThisKey = "Field3", OtherKey = "Field3", CanBeNull = true)]
+			public Table4 Table4Ref { get; set; }
+		}
+
+		class Table2
+		{
+			public long Field2 { get; set; }
+			public int  Field4 { get; set; }
+
+			[Association(ThisKey = "Field2", OtherKey = "Field2", CanBeNull = false)]
+			public List<Table1> Table1s { get; set; }
+
+			[Association(ThisKey="Field4", OtherKey="Field4", CanBeNull=false)]
+			public Table3 Table3Ref { get; set; }
+		}
+
+		class Table3
+		{
+			public int Field4;
+
+			[Association(ThisKey="Field4", OtherKey="Field4", CanBeNull=true)]
+			public List<Table2> Table2s { get; set; }
+		}
+
+		class Table4
+		{
+			public int Field3 { get; set; }
+			public int Field4 { get; set; }
+
+			[Association(ThisKey = "Field3", OtherKey = "Field3", CanBeNull = true)]
+			public List<Table1> Table1s { get; set; }
+
+			[Association(ThisKey="Field4", OtherKey="ProblematicalField", CanBeNull=false)]
+			public Table5 Table5Ref { get; set; }
+		}
+
+		class Table5
+		{
+			public int? Field5;
+			public int  ProblematicalField;
+
+			[Association(ThisKey = "Field5", OtherKey = "ProblematicalField", CanBeNull = true)]
+			public Table5 Table5Ref { get; set; }
+
+			[Association(ThisKey = "ProblematicalField", OtherKey = "Field4", CanBeNull = true)]
+			public List<Table4> Table4s { get; set; }
+		}
+
+		[Test]
+		public void Test([IncludeDataContexts("Sql2008")] string context)
+		{
+			using (var db = GetDataContext(context))
+			{
+				var q =
+					from t1 in db.GetTable<Table5>()
+					from t2 in
+						(from t3 in t1.Table4s.SelectMany(x => x.Table1s)
+						 from t4 in
+							from t5 in t3.Table4Ref.Table5Ref.Table5Ref.Table4s
+							from t6 in t5.Table1s
+							select t6
+						 select t4.Field1)
+					from t7 in
+						(from t8 in t1.Table5Ref.Table4s.SelectMany(x => x.Table1s)
+						 from t9 in
+							from t10 in t8.Table2Ref.Table3Ref.Table2s
+							from t11 in t10.Table1s
+							select t11
+						 select t9.Field1)
+					where t2 == t7
+					select t7;
+
+				var sql = q.ToString();
+				var idx = sql.IndexOf(",");
+
+				Assert.That(idx, Is.EqualTo(-1));
+			}
+		}
+	}
+}