annotate UnitTests/Linq/ParserTest.cs @ 6:11b6da379593

Исправлена странная ошибка при использовании OfType<...>().Where(...)
author cin
date Mon, 05 Dec 2016 05:50:52 +0300
parents f990fcb411a9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1 using System;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2 using System.Linq;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3 using System.Linq.Expressions;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
4 using System.Reflection;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
5
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
6 using BLToolkit.Data.Linq;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
7 using BLToolkit.Data.Linq.Builder;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
8 using BLToolkit.Data.Sql;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
9
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
10 using Data.Linq.Model;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
11
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12 using NUnit.Framework;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14 namespace Data.Linq
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16 [TestFixture]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17 public class ParserTest : TestBase
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19 static ParserTest()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21 ExpressionBuilder.AddBuilder(new ContextParser());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24 #region IsExpressionTable
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27 public void IsExpressionTable1()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29 using (var db = new TestDbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31 var ctx = db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32 .Select (p1 => p1.ParentID)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33 .GetContext();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Association).Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Object). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37 Assert.IsTrue (ctx.IsExpression(null, 0, RequestFor.Field). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Expression). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.SubQuery). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44 public void IsExpressionTable2()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46 using (var db = new TestDbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48 var ctx = db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49 .Select (p1 => p1.ParentID + 1)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50 .GetContext();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Association).Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Object). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Field). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55 Assert.IsTrue (ctx.IsExpression(null, 0, RequestFor.Expression). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.SubQuery). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
58 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
59
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
60 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
61 public void IsExpressionTable3()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
62 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
63 using (var db = new TestDbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
64 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
65 var ctx = db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
66 .Select (p1 => p1)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
67 .GetContext();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
68
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
69 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Association).Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
70 Assert.IsTrue (ctx.IsExpression(null, 0, RequestFor.Object). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
71 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Field). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
72 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Expression). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
73 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.SubQuery). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
74 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
75 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
76
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
77 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
78
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
79 #region IsExpressionScalar
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
80
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
81 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
82 public void IsExpressionScalar1()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
83 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
84 using (var db = new TestDbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
85 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
86 var ctx = db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
87 .Select (p1 => p1.ParentID)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
88 .Select (p2 => p2)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
89 .GetContext();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
90
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
91 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Association).Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
92 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Object). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
93 Assert.IsTrue (ctx.IsExpression(null, 0, RequestFor.Field). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
94 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Expression). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
95 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.SubQuery). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
96 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
97 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
98
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
99 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
100 public void IsExpressionScalar2()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
101 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
102 using (var db = new TestDbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
103 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
104 var ctx = db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
105 .Select (p1 => p1.ParentID + 1)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
106 .Select (p2 => p2)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
107 .GetContext();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
108
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
109 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Association).Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
110 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Object). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
111 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Field). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
112 Assert.IsTrue (ctx.IsExpression(null, 0, RequestFor.Expression). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
113 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.SubQuery). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
114 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
115 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
116
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
117 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
118 public void IsExpressionScalar3()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
119 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
120 using (var db = new TestDbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
121 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
122 var ctx = db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
123 .Select (p1 => p1)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
124 .Select (p2 => p2)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
125 .GetContext();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
126
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
127 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Association).Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
128 Assert.IsTrue (ctx.IsExpression(null, 0, RequestFor.Object). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
129 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Field). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
130 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Expression). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
131 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.SubQuery). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
132 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
133 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
134
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
135 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
136 public void IsExpressionScalar4()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
137 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
138 using (var db = new TestDbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
139 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
140 var ctx = db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
141 .Select (p1 => p1.ParentID + 1)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
142 .Where (p3 => p3 == 1)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
143 .Select (p2 => p2)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
144 .GetContext();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
145
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
146 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Association).Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
147 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Object). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
148 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Field). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
149 Assert.IsTrue (ctx.IsExpression(null, 0, RequestFor.Expression). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
150 //Assert.IsTrue (ctx.IsExpression(null, 0, RequestFor.SubQuery));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
151 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
152 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
153
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
154 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
155 public void IsExpressionScalar5()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
156 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
157 using (var db = new TestDbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
158 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
159 var ctx = db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
160 .Select (p1 => p1)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
161 .Select (p2 => p2.ParentID)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
162 .GetContext();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
163
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
164 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Association).Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
165 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Object). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
166 Assert.IsTrue (ctx.IsExpression(null, 0, RequestFor.Field). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
167 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Expression). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
168 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.SubQuery). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
169 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
170 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
171
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
172 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
173 public void IsExpressionScalar6()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
174 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
175 using (var db = new TestDbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
176 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
177 var ctx = db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
178 .Select (p => p.Parent)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
179 .Select (p => p)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
180 .GetContext();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
181
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
182 Assert.IsTrue (ctx.IsExpression(null, 0, RequestFor.Association).Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
183 Assert.IsTrue (ctx.IsExpression(null, 0, RequestFor.Object). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
184 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Field). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
185 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Expression). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
186 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.SubQuery). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
187 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
188 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
189
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
190 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
191 public void IsExpressionScalar7()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
192 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
193 using (var db = new TestDbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
194 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
195 var ctx = db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
196 .Select (p => p)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
197 .Select (p => p)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
198 .Select (p => p.Parent)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
199 .GetContext();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
200
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
201 Assert.IsTrue (ctx.IsExpression(null, 0, RequestFor.Association).Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
202 Assert.IsTrue (ctx.IsExpression(null, 0, RequestFor.Object). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
203 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Field). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
204 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Expression). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
205 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.SubQuery). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
206 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
207 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
208
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
209 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
210 public void IsExpressionScalar8()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
211 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
212 using (var db = new TestDbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
213 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
214 var ctx = db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
215 .Select (p => p)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
216 .Select (p3 => new { p1 = new { p2 = new { p = p3 } } })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
217 .Select (p => p.p1.p2.p.Parent)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
218 .GetContext();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
219
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
220 Assert.IsTrue (ctx.IsExpression(null, 0, RequestFor.Association).Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
221 Assert.IsTrue (ctx.IsExpression(null, 0, RequestFor.Object). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
222 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Field). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
223 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Expression). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
224 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.SubQuery). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
225 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
226 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
227
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
228 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
229 public void IsExpressionScalar9()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
230 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
231 using (var db = new TestDbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
232 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
233 var ctx = db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
234 .Select (p => p)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
235 .Select (p3 => new { p1 = new { p2 = new { p = p3.Parent } } })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
236 .Select (p => p.p1.p2.p)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
237 .GetContext();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
238
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
239 Assert.IsTrue (ctx.IsExpression(null, 0, RequestFor.Association).Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
240 Assert.IsTrue (ctx.IsExpression(null, 0, RequestFor.Object). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
241 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Field). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
242 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Expression). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
243 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.SubQuery). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
244 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
245 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
246
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
247
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
248 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
249 public void IsExpressionScalar10()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
250 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
251 using (var db = new TestDbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
252 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
253 var ctx = db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
254 .Select (p => p)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
255 .Select (p => new { p = new { p } })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
256 .Select (p => p.p)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
257 .GetContext();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
258
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
259 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Association).Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
260 Assert.IsTrue (ctx.IsExpression(null, 0, RequestFor.Object). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
261 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Field). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
262 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Expression). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
263 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.SubQuery). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
264 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
265 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
266
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
267 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
268 public void IsExpressionScalar11()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
269 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
270 using (var db = new TestDbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
271 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
272 var ctx = db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
273 .Select (p => p)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
274 .Select (p => new { p = new Child { ChildID = p.ChildID } })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
275 .Select (p => p.p)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
276 .GetContext();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
277
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
278 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Association).Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
279 Assert.IsTrue (ctx.IsExpression(null, 0, RequestFor.Object). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
280 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Field). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
281 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Expression). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
282 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.SubQuery). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
283 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
284 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
285
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
286 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
287
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
288 #region IsExpressionSelect
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
289
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
290 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
291 public void IsExpressionSelect1()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
292 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
293 using (var db = new TestDbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
294 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
295 var ctx = db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
296 .Select (p1 => new { p1.ParentID })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
297 .Select (p2 => p2.ParentID)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
298 .GetContext();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
299
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
300 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Association).Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
301 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Object). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
302 Assert.IsTrue (ctx.IsExpression(null, 0, RequestFor.Field). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
303 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Expression). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
304 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
305 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
306
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
307 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
308 public void IsExpressionSelect2()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
309 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
310 using (var db = new TestDbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
311 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
312 var ctx = db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
313 .Select (p1 => new { p = p1.ParentID + 1 })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
314 .Select (p2 => p2.p)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
315 .GetContext();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
316
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
317 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Association).Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
318 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Object). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
319 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Field). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
320 Assert.IsTrue (ctx.IsExpression(null, 0, RequestFor.Expression). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
321 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
322 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
323
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
324 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
325 public void IsExpressionSelect3()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
326 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
327 using (var db = new TestDbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
328 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
329 var ctx = db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
330 .Select (p1 => new { p1 })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
331 .Select (p2 => p2.p1)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
332 .GetContext();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
333
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
334 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Association).Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
335 Assert.IsTrue (ctx.IsExpression(null, 0, RequestFor.Object). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
336 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Field). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
337 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Expression). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
338 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
339 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
340
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
341 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
342 public void IsExpressionSelect4()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
343 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
344 using (var db = new TestDbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
345 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
346 var ctx = db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
347 .Select (p1 => new { p = p1.ParentID + 1 })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
348 .Where (p3 => p3.p == 1)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
349 .Select (p2 => p2.p)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
350 .GetContext();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
351
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
352 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Association).Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
353 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Object). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
354 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Field). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
355 Assert.IsTrue (ctx.IsExpression(null, 0, RequestFor.Expression). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
356 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
357 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
358
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
359 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
360 public void IsExpressionSelect42()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
361 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
362 using (var db = new TestDbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
363 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
364 var ctx = db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
365 .Select (p1 => new { p = p1.ParentID + 1 })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
366 .Where (p3 => p3.p == 1)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
367 .Select (p2 => p2)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
368 .GetContext();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
369
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
370 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Association).Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
371 Assert.IsTrue (ctx.IsExpression(null, 0, RequestFor.Object). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
372 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Field). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
373 Assert.IsTrue (ctx.IsExpression(null, 0, RequestFor.Expression). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
374 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
375 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
376
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
377 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
378 public void IsExpressionSelect5()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
379 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
380 using (var db = new TestDbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
381 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
382 var ctx = db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
383 .Select (p1 => new { p1 })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
384 .Select (p2 => p2.p1.ParentID)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
385 .GetContext();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
386
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
387 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Association).Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
388 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Object). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
389 Assert.IsTrue (ctx.IsExpression(null, 0, RequestFor.Field). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
390 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Expression). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
391 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
392 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
393
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
394 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
395 public void IsExpressionSelect6()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
396 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
397 using (var db = new TestDbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
398 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
399 var ctx = db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
400 .Select (p => new { p })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
401 .Select (p => p)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
402 .GetContext();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
403
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
404 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Association).Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
405 Assert.IsTrue (ctx.IsExpression(null, 0, RequestFor.Object). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
406 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Field). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
407 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Expression). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
408 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
409 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
410
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
411 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
412 public void IsExpressionSelect7()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
413 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
414 using (var db = new TestDbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
415 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
416 var ctx = db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
417 .Select (p => new { p, p.Parent })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
418 .Select (p => new { p.Parent, p.p.ChildID })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
419 .Select (p => p.Parent)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
420 .GetContext();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
421
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
422 Assert.IsTrue (ctx.IsExpression(null, 0, RequestFor.Association).Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
423 Assert.IsTrue (ctx.IsExpression(null, 0, RequestFor.Object). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
424 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Field). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
425 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Expression). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
426 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
427 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
428
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
429 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
430 public void IsExpressionSelect8()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
431 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
432 using (var db = new TestDbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
433 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
434 var ctx = db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
435 .Select (p => new { p, p.Parent })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
436 .Select (p => new { p.Parent.ParentID, p.p.ChildID })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
437 .Select (p => p.ParentID)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
438 .GetContext();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
439
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
440 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Association).Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
441 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Object). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
442 Assert.IsTrue (ctx.IsExpression(null, 0, RequestFor.Field). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
443 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Expression). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
444 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
445 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
446
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
447 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
448 public void IsExpressionSelect9()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
449 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
450 using (var db = new TestDbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
451 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
452 var ctx = db.GrandChild
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
453 .Select (p => new { p, p.Child })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
454 .Select (p => new { p.Child.Parent.ParentID, p.p.ChildID })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
455 .Select (p => p.ParentID)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
456 .GetContext();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
457
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
458 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Association).Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
459 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Object). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
460 Assert.IsTrue (ctx.IsExpression(null, 0, RequestFor.Field). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
461 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Expression). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
462 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
463 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
464
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
465 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
466 public void IsExpressionSelect10()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
467 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
468 using (var db = new TestDbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
469 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
470 var ctx = db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
471 .Select (p => p.Children.Max(c => (int?)c.ChildID) ?? p.Value1)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
472 .Select (p => p)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
473 .GetContext();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
474
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
475 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Association).Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
476 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Object). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
477 Assert.IsFalse(ctx.IsExpression(null, 0, RequestFor.Field). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
478 Assert.IsTrue (ctx.IsExpression(null, 0, RequestFor.Expression). Result);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
479 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
480 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
481
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
482 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
483
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
484 #region ConvertToIndexTable
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
485
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
486 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
487 public void ConvertToIndexTable1()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
488 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
489 using (var db = new TestDbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
490 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
491 var ctx = db.Parent1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
492 .Select (t => t)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
493 .GetContext();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
494
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
495 Assert.AreEqual(new[] { 0, 1 }, ctx.ConvertToIndex(null, 0, ConvertFlags.All).Select(_ => _.Index).ToArray());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
496 Assert.AreEqual(new[] { 0 }, ctx.ConvertToIndex(null, 0, ConvertFlags.Key).Select(_ => _.Index).ToArray());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
497 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
498 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
499
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
500 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
501 public void ConvertToIndexTable2()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
502 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
503 using (var db = new TestDbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
504 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
505 var ctx = db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
506 .Select (t => t)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
507 .GetContext();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
508
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
509 Assert.AreEqual(new[] { 0, 1 }, ctx.ConvertToIndex(null, 0, ConvertFlags.All).Select(_ => _.Index).ToArray());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
510 Assert.AreEqual(new[] { 0, 1 }, ctx.ConvertToIndex(null, 0, ConvertFlags.Key).Select(_ => _.Index).ToArray());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
511 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
512 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
513
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
514 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
515 public void ConvertToIndexTable3()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
516 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
517 using (var db = new TestDbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
518 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
519 var ctx = db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
520 .Select (t => t.ParentID)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
521 .GetContext();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
522
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
523 Assert.AreEqual(new[] { 0 }, ctx.ConvertToIndex(null, 0, ConvertFlags.Field).Select(_ => _.Index).ToArray());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
524 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
525 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
526
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
527 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
528 public void ConvertToIndexTable4()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
529 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
530 using (var db = new TestDbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
531 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
532 var ctx = db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
533 .Select (t => t.Value1)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
534 .GetContext();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
535
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
536 Assert.AreEqual(new[] { 0 }, ctx.ConvertToIndex(null, 0, ConvertFlags.Field).Select(_ => _.Index).ToArray());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
537 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
538 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
539
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
540 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
541 public void ConvertToIndexTable5()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
542 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
543 using (var db = new TestDbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
544 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
545 var ctx = db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
546 .Select (t => new { t = new { t } })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
547 .Select (t => t.t.t.ParentID)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
548 .Select (t => t)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
549 .GetContext();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
550
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
551 Assert.AreEqual(new[] { 0 }, ctx.ConvertToIndex(null, 0, ConvertFlags.Field).Select(_ => _.Index).ToArray());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
552 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
553 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
554
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
555 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
556
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
557 #region ConvertToIndex
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
558
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
559 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
560 public void ConvertToIndexScalar1()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
561 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
562 using (var db = new TestDbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
563 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
564 var ctx = db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
565 .Select (p1 => p1.ParentID)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
566 .Select (p2 => p2)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
567 .GetContext();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
568
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
569 Assert.AreEqual(new[] { 0 }, ctx.ConvertToIndex(null, 0, ConvertFlags.Field).Select(_ => _.Index).ToArray());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
570 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
571 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
572
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
573 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
574 public void ConvertToIndexScalar2()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
575 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
576 using (var db = new TestDbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
577 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
578 var ctx = db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
579 .Select (p1 => p1.ParentID + 1)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
580 .Select (p2 => p2)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
581 .GetContext();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
582
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
583 Assert.AreEqual(new[] { 0 }, ctx.ConvertToIndex(null, 0, ConvertFlags.Field).Select(_ => _.Index).ToArray());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
584 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
585 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
586
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
587 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
588 public void ConvertToIndexScalar3()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
589 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
590 using (var db = new TestDbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
591 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
592 var ctx = db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
593 .Select (p1 => p1.ParentID + 1)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
594 .Where (p3 => p3 == 1)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
595 .Select (p2 => p2)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
596 .GetContext();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
597
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
598 Assert.AreEqual(new[] { 0 }, ctx.ConvertToIndex(null, 0, ConvertFlags.Field).Select(_ => _.Index).ToArray());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
599 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
600 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
601
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
602 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
603 public void ConvertToIndexScalar4()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
604 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
605 using (var db = new TestDbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
606 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
607 var ctx = db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
608 .Select (p1 => new { p = new { p = p1.ParentID } })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
609 .Select (p2 => p2.p.p)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
610 .GetContext();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
611
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
612 Assert.AreEqual(new[] { 0 }, ctx.ConvertToIndex(null, 0, ConvertFlags.Field).Select(_ => _.Index).ToArray());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
613 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
614 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
615
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
616 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
617 public void ConvertToIndexJoin1()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
618 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
619 using (var db = new TestDbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
620 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
621 var q2 =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
622 from gc1 in db.GrandChild
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
623 join max in
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
624 from gch in db.GrandChild
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
625 group gch by gch.ChildID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
626 select g.Max(c => c.GrandChildID)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
627 on gc1.GrandChildID equals max
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
628 select gc1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
629
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
630 var result =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
631 from ch in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
632 join p in db.Parent on ch.ParentID equals p.ParentID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
633 join gc2 in q2 on p.ParentID equals gc2.ParentID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
634 from gc3 in g.DefaultIfEmpty()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
635 select gc3;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
636
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
637 var ctx = result.GetContext();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
638 var idx = ctx.ConvertToIndex(null, 0, ConvertFlags.Key);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
639
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
640 Assert.AreEqual(new[] { 0, 1, 2 }, idx.Select(_ => _.Index).ToArray());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
641 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
642 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
643
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
644 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
645 public void ConvertToIndexJoin2()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
646 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
647 using (var db = new TestDbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
648 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
649 var result =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
650 from ch in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
651 join gc2 in db.GrandChild on ch.ParentID equals gc2.ParentID into g
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
652 from gc3 in g.DefaultIfEmpty()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
653 select gc3;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
654
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
655 var ctx = result.GetContext();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
656 var idx = ctx.ConvertToIndex(null, 0, ConvertFlags.Key);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
657
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
658 Assert.AreEqual(new[] { 0, 1, 2 }, idx.Select(_ => _.Index).ToArray());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
659
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
660 idx = ctx.ConvertToIndex(null, 0, ConvertFlags.All);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
661
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
662 Assert.AreEqual(new[] { 0, 1, 2 }, idx.Select(_ => _.Index).ToArray());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
663 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
664 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
665
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
666 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
667
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
668 #region ConvertToSql
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
669
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
670 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
671 public void ConvertToSql1()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
672 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
673 using (var db = new TestDbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
674 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
675 var ctx = db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
676 .Select (p1 => new { p1.ParentID })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
677 .Select (p2 => p2.ParentID)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
678 .GetContext();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
679
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
680 var sql = ctx.ConvertToSql(null, 0, ConvertFlags.Field);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
681
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
682 Assert.AreEqual (1, sql.Length);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
683 Assert.IsAssignableFrom(typeof(SqlField), sql[0].Sql);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
684 Assert.AreEqual ("ParentID", ((SqlField)sql[0].Sql).Name);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
685 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
686 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
687
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
688 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
689 public void ConvertToSql2()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
690 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
691 using (var db = new TestDbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
692 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
693 var ctx = db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
694 .Select (p1 => new { p = p1.ParentID + 1 })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
695 .Select (p2 => p2.p)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
696 .GetContext();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
697
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
698 var sql = ctx.ConvertToSql(null, 0, ConvertFlags.Field);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
699
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
700 Assert.AreEqual (1, sql.Length);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
701 Assert.IsAssignableFrom(typeof(SqlBinaryExpression), sql[0].Sql);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
702 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
703 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
704
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
705 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
706 public void ConvertToSql3()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
707 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
708 using (var db = new TestDbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
709 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
710 var ctx = db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
711 .Select (p1 => new { p = p1.ParentID + 1 })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
712 .Where (p3 => p3.p == 1)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
713 .Select (p2 => p2.p)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
714 .GetContext();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
715
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
716 var sql = ctx.ConvertToSql(null, 0, ConvertFlags.Field);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
717
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
718 Assert.AreEqual (1, sql.Length);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
719 Assert.IsAssignableFrom(typeof(SqlQuery.Column), sql[0].Sql);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
720 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
721 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
722
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
723 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
724 public void ConvertToSql4()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
725 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
726 using (var db = new TestDbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
727 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
728 var ctx = db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
729 .Select (p1 => new { p1 })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
730 .Select (p2 => p2.p1.ParentID)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
731 .GetContext();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
732
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
733 var sql = ctx.ConvertToSql(null, 0, ConvertFlags.Field);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
734
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
735 Assert.AreEqual (1, sql.Length);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
736 Assert.IsAssignableFrom(typeof(SqlField), sql[0].Sql);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
737 Assert.AreEqual ("ParentID", ((SqlField)sql[0].Sql).Name);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
738 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
739 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
740
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
741 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
742 public void ConvertToSql5()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
743 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
744 using (var db = new TestDbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
745 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
746 var ctx = db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
747 .Select (p => new { p, p.Parent })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
748 .Select (p => new { p.Parent.ParentID, p.p.ChildID })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
749 .Select (p => p.ParentID)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
750 .GetContext();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
751
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
752 var sql = ctx.ConvertToSql(null, 0, ConvertFlags.Field);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
753
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
754 Assert.AreEqual (1, sql.Length);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
755 Assert.IsAssignableFrom(typeof(SqlField), sql[0].Sql);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
756 Assert.AreEqual ("ParentID", ((SqlField)sql[0].Sql).Name);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
757 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
758 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
759
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
760 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
761
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
762 #region SqlTest
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
763
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
764 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
765 public void Join1()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
766 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
767 using (var db = new TestDbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
768 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
769 var q =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
770 from t in
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
771 from ch in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
772 join p in db.Parent on ch.ParentID equals p.ParentID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
773 select ch.ParentID + p.ParentID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
774 where t > 2
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
775 select t;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
776
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
777 var ctx = q.GetContext();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
778 ctx.BuildExpression(null, 0);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
779
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
780 Assert.AreEqual(1, ctx.SqlQuery.Select.Columns.Count);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
781 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
782 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
783
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
784 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
785 public void Join2()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
786 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
787 using (var db = new TestDbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
788 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
789 var q =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
790 from t in
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
791 from ch in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
792 join p in db.Parent on ch.ParentID equals p.ParentID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
793 select new { ID = ch.ParentID + p.ParentID }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
794 where t.ID > 2
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
795 select t;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
796
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
797 var ctx = q.GetContext();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
798 ctx.BuildExpression(null, 0);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
799
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
800 Assert.AreEqual(2, ctx.SqlQuery.Select.Columns.Count);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
801 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
802 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
803
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
804 public class MyClass
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
805 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
806 public int ID;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
807 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
808
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
809 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
810 public void Join3()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
811 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
812 using (var db = new TestDbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
813 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
814 var q =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
815 from p in db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
816 join j in db.Child on p.ParentID equals j.ParentID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
817 select p;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
818
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
819 var ctx = q.GetContext();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
820 ctx.BuildExpression(null, 0);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
821
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
822 Assert.AreEqual(2, ctx.SqlQuery.Select.Columns.Count);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
823 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
824 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
825
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
826 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
827 public void Join4()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
828 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
829 using (var db = new TestDbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
830 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
831 var q =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
832 from p in db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
833 select new { ID = new MyClass { ID = p.ParentID } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
834 into p
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
835 join j in
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
836 from c in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
837 select new { ID = new MyClass { ID = c.ParentID } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
838 on p.ID.ID equals j.ID.ID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
839 where p.ID.ID == 1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
840 select p;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
841
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
842 var ctx = q.GetContext();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
843 ctx.BuildExpression(null, 0);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
844
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
845 Assert.AreEqual(1, ctx.SqlQuery.Select.Columns.Count);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
846 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
847 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
848
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
849 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
850 public void Join5()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
851 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
852 using (var db = new TestDbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
853 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
854 var q =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
855 from p in db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
856 join c in db.Child on p.ParentID equals c.ParentID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
857 join g in db.GrandChild on p.ParentID equals g.ParentID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
858 select new { p, c, g } into x
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
859 select x.c.ParentID;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
860
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
861 var ctx = q.GetContext();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
862 var sql = ctx.ConvertToSql(null, 0, ConvertFlags.All);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
863
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
864 Assert.AreEqual(1, sql.Length);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
865 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
866 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
867
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
868 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
869 public void Join6([IncludeDataContexts("Sql2008", "Sql2012")] string context)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
870 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
871 using (var db = new TestDbManager(context))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
872 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
873 var q =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
874 from g in db.GrandChild
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
875 join p in db.Parent4 on g.Child.ParentID equals p.ParentID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
876 select g;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
877
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
878 var ctx = q.GetContext();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
879
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
880 ctx.BuildExpression(null, 0);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
881
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
882 var sql = db.GetSqlText(ctx.SqlQuery);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
883
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
884 CompareSql(sql, @"
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
885 SELECT
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
886 [g].[ParentID],
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
887 [g].[ChildID],
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
888 [g].[GrandChildID]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
889 FROM
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
890 [GrandChild] [g]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
891 LEFT JOIN [Child] [t1] ON [g].[ParentID] = [t1].[ParentID] AND [g].[ChildID] = [t1].[ChildID]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
892 INNER JOIN [Parent] [p] ON [t1].[ParentID] = [p].[ParentID]");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
893 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
894 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
895
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
896 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
897 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
898
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
899 class ContextParser : ISequenceBuilder
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
900 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
901 public int BuildCounter { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
902
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
903 public bool CanBuild(ExpressionBuilder builder, BuildInfo buildInfo)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
904 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
905 var call = buildInfo.Expression as MethodCallExpression;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
906 return call != null && call.Method.Name == "GetContext";
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
907 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
908
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
909 public IBuildContext BuildSequence(ExpressionBuilder builder, BuildInfo buildInfo)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
910 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
911 var call = (MethodCallExpression)buildInfo.Expression;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
912 return new Context(builder.BuildSequence(new BuildInfo(buildInfo, call.Arguments[0])));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
913 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
914
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
915 public SequenceConvertInfo Convert(ExpressionBuilder builder, BuildInfo buildInfo, ParameterExpression param)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
916 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
917 return null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
918 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
919
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
920 public bool IsSequence(ExpressionBuilder builder, BuildInfo buildInfo)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
921 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
922 return builder.IsSequence(new BuildInfo(buildInfo, ((MethodCallExpression)buildInfo.Expression).Arguments[0]));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
923 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
924
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
925 public class Context : PassThroughContext
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
926 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
927 public Context(IBuildContext context) : base(context)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
928 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
929 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
930
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
931 public override void BuildQuery<T>(Query<T> query, ParameterExpression queryParameter)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
932 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
933 query.GetElement = (ctx,db,expr,ps) => this;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
934 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
935 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
936 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
937
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
938 static class Extensions
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
939 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
940 public static ContextParser.Context GetContext<T>(this IQueryable<T> source)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
941 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
942 if (source == null) throw new ArgumentNullException("source");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
943
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
944 return source.Provider.Execute<ContextParser.Context>(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
945 Expression.Call(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
946 null,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
947 ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(new[] { typeof(T) }),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
948 new[] { source.Expression }));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
949 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
950
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
951 static public Expression Unwrap(this Expression ex)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
952 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
953 if (ex == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
954 return null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
955
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
956 switch (ex.NodeType)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
957 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
958 case ExpressionType.Quote :
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
959 case ExpressionType.Convert :
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
960 case ExpressionType.ConvertChecked : return ((UnaryExpression)ex).Operand.Unwrap();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
961 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
962
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
963 return ex;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
964 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
965 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
966 }