Skip to content

Commit 234c02b

Browse files
authored
Merge branch 'master' into gh2052
2 parents b10bab1 + 6277f51 commit 234c02b

File tree

77 files changed

+2740
-305
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

77 files changed

+2740
-305
lines changed

src/NHibernate.Test/Async/CacheTest/BatchableCacheFixture.cs

Lines changed: 363 additions & 8 deletions
Large diffs are not rendered by default.

src/NHibernate.Test/Async/Hql/EntityJoinHqlTest.cs

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
//------------------------------------------------------------------------------
99

1010

11+
using System.Text.RegularExpressions;
1112
using NHibernate.Cfg.MappingSchema;
1213
using NHibernate.Mapping.ByCode;
1314
using NHibernate.Test.Hql.EntityJoinHqlTestEntities;
@@ -152,6 +153,67 @@ public async Task EntityJoinFoSubqueryAsync()
152153
}
153154
}
154155

156+
[Test]
157+
public async Task EntityJoinWithEntityComparisonInWithClausShouldNotAddJoinAsync()
158+
{
159+
using (var sqlLog = new SqlLogSpy())
160+
using (var session = OpenSession())
161+
{
162+
EntityComplex entityComplex =
163+
await (session
164+
.CreateQuery(
165+
"select ex "
166+
+ "from EntityComplex ex "
167+
+ "inner join EntityComplex st with st = ex.SameTypeChild "
168+
).SetMaxResults(1)
169+
.UniqueResultAsync<EntityComplex>());
170+
171+
Assert.That(Regex.Matches(sqlLog.GetWholeLog(), "EntityComplex").Count, Is.EqualTo(2));
172+
Assert.That(sqlLog.Appender.GetEvents().Length, Is.EqualTo(1), "Only one SQL select is expected");
173+
}
174+
}
175+
176+
[Test]
177+
public async Task EntityJoinWithEntityAssociationComparisonShouldAddJoinAsync()
178+
{
179+
using (var sqlLog = new SqlLogSpy())
180+
using (var session = OpenSession())
181+
{
182+
EntityComplex entityComplex =
183+
await (session
184+
.CreateQuery(
185+
"select ex "
186+
+ "from EntityComplex ex "
187+
+ "inner join EntityComplex st with st = ex.SameTypeChild.SameTypeChild "
188+
).SetMaxResults(1)
189+
.UniqueResultAsync<EntityComplex>());
190+
191+
Assert.That(Regex.Matches(sqlLog.GetWholeLog(), "EntityComplex").Count, Is.EqualTo(3));
192+
Assert.That(sqlLog.Appender.GetEvents().Length, Is.EqualTo(1), "Only one SQL select is expected");
193+
}
194+
}
195+
196+
[Test]
197+
public async Task EntityJoinWithEntityAssociationComparison2ShouldAddJoinAsync()
198+
{
199+
using (var sqlLog = new SqlLogSpy())
200+
using (var session = OpenSession())
201+
{
202+
EntityComplex entityComplex =
203+
await (session
204+
.CreateQuery(
205+
"select ex "
206+
+ "from EntityComplex ex "
207+
+ "inner join EntityComplex st with st.Version = ex.SameTypeChild.Version "
208+
).SetMaxResults(1)
209+
.UniqueResultAsync<EntityComplex>());
210+
211+
Assert.That(Regex.Matches(sqlLog.GetWholeLog(), "EntityComplex").Count, Is.EqualTo(3));
212+
Assert.That(sqlLog.Appender.GetEvents().Length, Is.EqualTo(1), "Only one SQL select is expected");
213+
}
214+
}
215+
216+
155217
[Test, Ignore("Failing for unrelated reasons")]
156218
public async Task CrossJoinAndWithClauseAsync()
157219
{
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
//------------------------------------------------------------------------------
2+
// <auto-generated>
3+
// This code was generated by AsyncGenerator.
4+
//
5+
// Changes to this file may cause incorrect behavior and will be lost if
6+
// the code is regenerated.
7+
// </auto-generated>
8+
//------------------------------------------------------------------------------
9+
10+
11+
using System.Linq;
12+
using NHibernate.Linq;
13+
using NUnit.Framework;
14+
15+
namespace NHibernate.Test.NHSpecificTest.GH2053
16+
{
17+
using System.Threading.Tasks;
18+
[TestFixture]
19+
public class FixtureAsync : BugTestCase
20+
{
21+
protected override void OnSetUp()
22+
{
23+
using (var session = OpenSession())
24+
using (var transaction = session.BeginTransaction())
25+
{
26+
var e1 = new Entity { Description = "DESCRIPTION", Status = 0 };
27+
session.Save(e1);
28+
29+
var e2 = new Entity { Description = "DESCRIPTION", Status = 1 };
30+
session.Save(e2);
31+
32+
transaction.Commit();
33+
}
34+
}
35+
36+
protected override void OnTearDown()
37+
{
38+
using (var session = OpenSession())
39+
using (var transaction = session.BeginTransaction())
40+
{
41+
session.CreateQuery("delete from Entity").ExecuteUpdate();
42+
43+
transaction.Commit();
44+
}
45+
}
46+
47+
[Test]
48+
public async Task TestAsync()
49+
{
50+
var descriptions = new [] { "DESCRIPTION" };
51+
52+
using (var session = OpenSession())
53+
using (var transaction = session.BeginTransaction())
54+
{
55+
var result = await (session.Query<Entity>()
56+
.Where(x => descriptions.Contains(x.Description))
57+
.UpdateAsync(x => new Entity {Description = "DESCRIPTION_UPDATED"}));
58+
Assert.That(result, Is.EqualTo(1));
59+
60+
await (transaction.CommitAsync());
61+
}
62+
}
63+
}
64+
}
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
//------------------------------------------------------------------------------
2+
// <auto-generated>
3+
// This code was generated by AsyncGenerator.
4+
//
5+
// Changes to this file may cause incorrect behavior and will be lost if
6+
// the code is regenerated.
7+
// </auto-generated>
8+
//------------------------------------------------------------------------------
9+
10+
11+
using System;
12+
using System.Collections.Generic;
13+
using NHibernate.Cfg.MappingSchema;
14+
using NHibernate.Criterion;
15+
using NHibernate.Mapping.ByCode;
16+
using NHibernate.SqlCommand;
17+
using NUnit.Framework;
18+
19+
namespace NHibernate.Test.NHSpecificTest.NH1761
20+
{
21+
using System.Threading.Tasks;
22+
[TestFixture]
23+
public class ByCodeFixtureAsync : TestCaseMappingByCode
24+
{
25+
protected override HbmMapping GetMappings()
26+
{
27+
var mapper = new ModelMapper();
28+
mapper.Class<FundingCategory>(rc =>
29+
{
30+
rc.Id(x => x.Id, m => m.Generator(Generators.GuidComb));
31+
rc.Property(x => x.Name);
32+
rc.Bag(x => x.FundingPrograms, m => {}, r => r.OneToMany());
33+
34+
});
35+
mapper.Class<FundingProgram>(rc =>
36+
{
37+
rc.Id(x => x.Id, m => m.Generator(Generators.GuidComb));
38+
rc.ManyToOne(x => x.Recipient);
39+
rc.Property(x => x.ObligatedAmount);
40+
rc.Bag(x => x.Projects, m => { m.OrderBy("Name asc"); }, r => r.OneToMany());
41+
});
42+
mapper.Class<Project>(rc =>
43+
{
44+
rc.Id(x => x.Id, m => m.Generator(Generators.GuidComb));
45+
rc.ManyToOne(x => x.Recipient);
46+
rc.Property(x => x.ObligatedAmount);
47+
});
48+
mapper.Class<Recipient>(rc =>
49+
{
50+
rc.Id(x => x.Id, m => m.Generator(Generators.GuidComb));
51+
});
52+
return mapper.CompileMappingForAllExplicitlyAddedEntities();
53+
}
54+
55+
[Test]
56+
public async Task InvalidOrderByClauseAsync()
57+
{
58+
using (var session = OpenSession())
59+
{
60+
var recipientId = Guid.NewGuid();
61+
await (session.CreateCriteria(typeof(FundingCategory), "fc")
62+
.CreateCriteria("FundingPrograms", "fp")
63+
.CreateCriteria("Projects", "p", JoinType.LeftOuterJoin)
64+
.Add(
65+
Restrictions.Disjunction()
66+
.Add(Restrictions.Eq("fp.Recipient.Id", recipientId))
67+
.Add(Restrictions.Eq("p.Recipient.Id", recipientId))
68+
)
69+
.SetProjection(
70+
Projections.ProjectionList()
71+
.Add(Projections.GroupProperty("fc.Name"), "fcn")
72+
.Add(Projections.Sum("fp.ObligatedAmount"), "fpo")
73+
.Add(Projections.Sum("p.ObligatedAmount"), "po")
74+
)
75+
.AddOrder(Order.Desc("fpo"))
76+
.AddOrder(Order.Desc("po"))
77+
.AddOrder(Order.Asc("fcn"))
78+
.ListAsync<object[]>());
79+
}
80+
}
81+
}
82+
}

0 commit comments

Comments
 (0)