Skip to content

Commit fd08421

Browse files
committed
Ported back support for collection projections (NH-2986, NH-3052, NH-3333)
1 parent dcc553e commit fd08421

17 files changed

+1016
-119
lines changed
Lines changed: 350 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,350 @@
1+
using System;
2+
using System.Collections.ObjectModel;
3+
using System.Linq;
4+
using NUnit.Framework;
5+
6+
namespace NHibernate.Test.Linq
7+
{
8+
[TestFixture]
9+
public class NestedSelectsTests : LinqTestCase
10+
{
11+
[Test]
12+
public void OrdersIdWithOrderLinesId()
13+
{
14+
var orders = db.Orders
15+
.Select(o => new
16+
{
17+
o.OrderId,
18+
OrderLinesIds = o.OrderLines.Select(ol => ol.Id).ToArray()
19+
})
20+
.ToList();
21+
22+
Assert.That(orders.Count, Is.EqualTo(830));
23+
}
24+
25+
[Test]
26+
public void OrdersOrderLinesId()
27+
{
28+
var orders = db.Orders
29+
.Select(o => new
30+
{
31+
OrderLinesIds = o.OrderLines.Select(ol => ol.Id).ToArray()
32+
})
33+
.ToList();
34+
35+
Assert.That(orders.Count, Is.EqualTo(830));
36+
}
37+
38+
[Test]
39+
public void OrdersIdWithOrderLinesIdShouldBeNotLazy()
40+
{
41+
var orders = db.Orders
42+
.Select(o => new
43+
{
44+
o.OrderId,
45+
OrderLinesIds = o.OrderLines.Select(ol => ol.Id)
46+
})
47+
.ToList();
48+
49+
Assert.That(orders.Count, Is.EqualTo(830));
50+
Assert.That(orders[0].OrderLinesIds, Is.InstanceOf<ReadOnlyCollection<long>>());
51+
}
52+
53+
[Test]
54+
public void OrdersIdWithOrderLinesIdToArray()
55+
{
56+
var orders = db.Orders
57+
.Select(o => new
58+
{
59+
o.OrderId,
60+
OrderLinesIds = o.OrderLines.Select(ol => ol.Id).ToArray()
61+
})
62+
.ToArray();
63+
64+
Assert.That(orders.Length, Is.EqualTo(830));
65+
}
66+
67+
[Test]
68+
public void OrdersIdWithOrderLinesIdAndDiscount()
69+
{
70+
var orders = db.Orders
71+
.Select(o =>
72+
new
73+
{
74+
o.OrderId,
75+
OrderLines = o.OrderLines.Select(ol =>
76+
new
77+
{
78+
ol.Id,
79+
ol.Discount
80+
}).ToArray()
81+
})
82+
.ToList();
83+
84+
Assert.That(orders.Count, Is.EqualTo(830));
85+
}
86+
87+
[Test]
88+
public void OrdersIdAndDateWithOrderLinesIdAndDiscount()
89+
{
90+
var orders = db.Orders
91+
.Select(o =>
92+
new
93+
{
94+
o.OrderId,
95+
o.OrderDate,
96+
OrderLines = o.OrderLines.Select(ol =>
97+
new
98+
{
99+
ol.Id,
100+
ol.Discount
101+
}).ToArray()
102+
})
103+
.ToList();
104+
105+
Assert.That(orders.Count, Is.EqualTo(830));
106+
}
107+
108+
[Test]
109+
public void TimesheetIdAndUserLastLoginDates()
110+
{
111+
var timesheets = db.Timesheets
112+
.Select(o =>
113+
new
114+
{
115+
o.Id,
116+
Users = o.Users.Select(x => x.LastLoginDate).ToArray()
117+
})
118+
.ToList();
119+
120+
Assert.That(timesheets.Count, Is.EqualTo(3));
121+
Assert.That(timesheets[0].Users, Is.Not.Empty);
122+
}
123+
124+
[Test]
125+
public void TimesheetIdAndUserLastLoginDatesAndEntriesIds()
126+
{
127+
var timesheets = db.Timesheets
128+
.Select(o =>
129+
new
130+
{
131+
o.Id,
132+
LastLoginDates = o.Users.Select(u => u.LastLoginDate).ToArray(),
133+
EntriesIds = o.Entries.Select(e => e.Id).ToArray()
134+
})
135+
.ToList();
136+
137+
Assert.That(timesheets.Count, Is.EqualTo(3));
138+
Assert.That(timesheets[0].LastLoginDates, Is.Not.Empty);
139+
}
140+
141+
[Test(Description = "NH-2986")]
142+
public void TimesheetIdAndUsersTransparentProjection()
143+
{
144+
var timesheets = db.Timesheets
145+
.Select(o =>
146+
new
147+
{
148+
o.Id,
149+
Users = o.Users.Select(x => x)
150+
})
151+
.ToList();
152+
153+
Assert.That(timesheets.Count, Is.EqualTo(3));
154+
Assert.That(timesheets[0].Users, Is.Not.Empty);
155+
}
156+
157+
[Test(Description = "NH-2986")]
158+
public void TimesheetAndUsersTransparentProjection()
159+
{
160+
var timesheets = db.Timesheets
161+
.Select(o =>
162+
new
163+
{
164+
o,
165+
Users = o.Users.Select(x => x)
166+
})
167+
.ToList();
168+
169+
Assert.That(timesheets.Count, Is.EqualTo(3));
170+
Assert.That(timesheets[0].Users, Is.Not.Empty);
171+
}
172+
173+
[Test(Description = "NH-2986")]
174+
public void TimesheetUsersTransparentProjection()
175+
{
176+
var timesheets = db.Timesheets
177+
.Select(o =>
178+
new
179+
{
180+
Users = o.Users.Select(x => x)
181+
})
182+
.ToList();
183+
184+
Assert.That(timesheets.Count, Is.EqualTo(3));
185+
Assert.That(timesheets[0].Users, Is.Not.Empty);
186+
}
187+
188+
[Test(Description = "NH-2986")]
189+
public void TimesheetIdAndUsersAndEntriesTransparentProjection()
190+
{
191+
var timesheets = db.Timesheets
192+
.Select(o =>
193+
new
194+
{
195+
o.Id,
196+
Users = o.Users.Select(x => x),
197+
Entries = o.Entries.Select(x => x)
198+
})
199+
.ToList();
200+
201+
Assert.That(timesheets.Count, Is.EqualTo(3));
202+
Assert.That(timesheets[0].Users, Is.Not.Empty);
203+
}
204+
205+
[Test(Description = "NH-2986")]
206+
public void TimesheetAndUsersAndEntriesTransparentProjection()
207+
{
208+
var timesheets = db.Timesheets
209+
.Select(o =>
210+
new
211+
{
212+
o,
213+
Users = o.Users.Select(x => x),
214+
Entries = o.Entries.Select(x => x)
215+
})
216+
.ToList();
217+
218+
Assert.That(timesheets.Count, Is.EqualTo(3));
219+
Assert.That(timesheets[0].Users, Is.Not.Empty);
220+
}
221+
222+
[Test(Description = "NH-2986")]
223+
public void TimesheetUsersAndEntriesTransparentProjection()
224+
{
225+
var timesheets = db.Timesheets
226+
.Select(o =>
227+
new
228+
{
229+
Users = o.Users.Select(x => x),
230+
Entries = o.Entries.Select(x => x)
231+
})
232+
.ToList();
233+
234+
Assert.That(timesheets.Count, Is.EqualTo(3));
235+
Assert.That(timesheets[0].Users, Is.Not.Empty);
236+
}
237+
238+
[Test(Description = "NH-3333")]
239+
public void TimesheetIdAndUsers()
240+
{
241+
var timesheets = db.Timesheets
242+
.Select(o =>
243+
new
244+
{
245+
o.Id,
246+
o.Users
247+
})
248+
.ToList();
249+
250+
Assert.That(timesheets.Count, Is.EqualTo(3));
251+
Assert.That(timesheets[0].Users, Is.Not.Empty);
252+
}
253+
254+
[Test(Description = "NH-3333")]
255+
public void TimesheetAndUsers()
256+
{
257+
var timesheets = db.Timesheets
258+
.Select(o =>
259+
new
260+
{
261+
o,
262+
o.Users
263+
})
264+
.ToList();
265+
266+
Assert.That(timesheets.Count, Is.EqualTo(3));
267+
Assert.That(timesheets[0].Users, Is.Not.Empty);
268+
}
269+
270+
[Test(Description = "NH-3333")]
271+
public void TimesheetUsers()
272+
{
273+
var timesheets = db.Timesheets
274+
.Select(o =>
275+
new
276+
{
277+
o.Users
278+
})
279+
.ToList();
280+
281+
Assert.That(timesheets.Count, Is.EqualTo(3));
282+
Assert.That(timesheets[0].Users, Is.Not.Empty);
283+
}
284+
285+
[Test(Description = "NH-3333")]
286+
public void TimesheetIdAndUsersAndEntries()
287+
{
288+
var timesheets = db.Timesheets
289+
.Select(o =>
290+
new
291+
{
292+
o.Id,
293+
o.Users,
294+
o.Entries
295+
})
296+
.ToList();
297+
298+
Assert.That(timesheets.Count, Is.EqualTo(3));
299+
Assert.That(timesheets[0].Users, Is.Not.Empty);
300+
}
301+
302+
[Test(Description = "NH-3333")]
303+
public void TimesheetAndUsersAndEntries()
304+
{
305+
var timesheets = db.Timesheets
306+
.Select(o =>
307+
new
308+
{
309+
o,
310+
o.Users,
311+
o.Entries
312+
})
313+
.ToList();
314+
315+
Assert.That(timesheets.Count, Is.EqualTo(3));
316+
Assert.That(timesheets[0].Users, Is.Not.Empty);
317+
}
318+
319+
[Test(Description = "NH-3333")]
320+
public void TimesheetUsersAndEntries()
321+
{
322+
var timesheets = db.Timesheets
323+
.Select(o =>
324+
new
325+
{
326+
o.Users,
327+
o.Entries
328+
})
329+
.ToList();
330+
331+
Assert.That(timesheets.Count, Is.EqualTo(3));
332+
Assert.That(timesheets[0].Users, Is.Not.Empty);
333+
}
334+
335+
[Test]
336+
public void EmployeesIdAndWithSubordinatesId()
337+
{
338+
var emplyees = db.Employees
339+
.Select(o =>
340+
new
341+
{
342+
o.EmployeeId,
343+
SubordinatesIds = o.Subordinates.Select(so => so.EmployeeId).ToArray()
344+
})
345+
.ToList();
346+
347+
Assert.That(emplyees.Count, Is.EqualTo(9));
348+
}
349+
}
350+
}

0 commit comments

Comments
 (0)