Skip to content

Commit 11126a8

Browse files
authored
Merge branch 'master' into JoinSubQueryHql
2 parents 0a709a1 + 7de0282 commit 11126a8

File tree

105 files changed

+2998
-297
lines changed

Some content is hidden

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

105 files changed

+2998
-297
lines changed
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
name: Generate Async code
2+
3+
on:
4+
pull_request_target:
5+
paths:
6+
- '**.cs'
7+
8+
permissions: {}
9+
10+
jobs:
11+
generate-async:
12+
runs-on: ubuntu-latest
13+
14+
steps:
15+
- uses: actions/checkout@v3
16+
with:
17+
ref: ${{ github.event.pull_request.head.ref }}
18+
repository: ${{ github.event.pull_request.head.repo.full_name }}
19+
token: ${{ secrets.NHIBERNATE_BOT_TOKEN }}
20+
21+
- name: Setup .NET
22+
uses: actions/setup-dotnet@v2
23+
with:
24+
dotnet-version: 6.0.x
25+
26+
- name: Generate Async code
27+
run: |
28+
pushd src
29+
dotnet tool restore
30+
dotnet restore ./NHibernate.sln
31+
dotnet async-generator
32+
popd
33+
34+
- name: Push changes
35+
run: |
36+
git config user.name github-actions[bot]
37+
git config user.email github-actions[bot]@users.noreply.github.com
38+
if [[ -z "$(git status --porcelain)" ]]; then
39+
echo "No changes to commit"
40+
exit 0
41+
fi
42+
git add -A
43+
git commit -am "Generate async files"
44+
git push

.github/workflows/NetCoreTests.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ jobs:
5050
- name: Set up Oracle
5151
if: matrix.DB == 'Oracle'
5252
run: |
53-
docker run -d -p 1521:1521 -e APP_USER=nhibernate -e APP_USER_PASSWORD=nhibernate -e ORACLE_PASSWORD=nhibernate gvenzl/oracle-xe:18-slim
53+
docker run -d -p 1521:1521 -e APP_USER=nhibernate -e APP_USER_PASSWORD=nhibernate -e ORACLE_PASSWORD=nhibernate gvenzl/oracle-xe:21-slim
5454
5555
- uses: actions/checkout@v3
5656
- name: Setup .NET

build-common/NHibernate.props

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
<FileVersion Condition="'$(FileVersion)' == ''">$(VersionPrefix).0</FileVersion>
1616

1717
<NhAppTargetFrameworks Condition ="$(NhAppTargetFrameworks) == ''">net48;net6.0</NhAppTargetFrameworks>
18-
<NhLibTargetFrameworks Condition ="$(NhLibTargetFrameworks) == ''">net461;netcoreapp2.0;netstandard2.0</NhLibTargetFrameworks>
18+
<NhLibTargetFrameworks Condition ="$(NhLibTargetFrameworks) == ''">net461;netcoreapp2.0;netstandard2.0;netstandard2.1</NhLibTargetFrameworks>
1919
<NhNetFx>false</NhNetFx>
2020
<NhNetFx Condition="$(TargetFramework.StartsWith('net4'))">true</NhNetFx>
2121
<!-- Visual Basic requires to use coma (,) as a separator, other project types - semicolon (;) -->
@@ -32,8 +32,7 @@
3232
<TreatSpecificWarningsAsErrors />
3333

3434
<DisableImplicitPackageTargetFallback>True</DisableImplicitPackageTargetFallback>
35-
</PropertyGroup>
36-
<PropertyGroup Condition="'$(IsPackable)' == 'True'">
35+
3736
<PackageProjectUrl>https://nhibernate.info</PackageProjectUrl>
3837
<PackageIconUrl>https://raw.githubusercontent.com/nhibernate/nhibernate-core/master/logo/NHibernate-NuGet.png</PackageIconUrl>
3938
<PackageIcon>NHibernate-NuGet.png</PackageIcon>
@@ -46,6 +45,6 @@
4645
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
4746
</PropertyGroup>
4847
<ItemGroup>
49-
<PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies" Version="1.0.2" PrivateAssets="all" />
48+
<PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies" Version="1.0.3" PrivateAssets="all" />
5049
</ItemGroup>
5150
</Project>

default.build

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
<arg value="/t:Restore" />
4646
<arg value="/t:Rebuild" />
4747
<arg value="/v:q" />
48-
<arg value="/m" />
48+
<arg value="/m:1" />
4949
</exec>
5050
</target>
5151

lib/teamcity/oracle/oracle_installation.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11

22
Installation steps for Oracle for NH TeamCity:
3-
1. Download Oracle Database 12c from https://oracle.com/. Please make sure you comply with it's license.
4-
12.2 will fail some tests (mainly NH-1171) due to a bug with comments in queries, see
5-
https://stackoverflow.com/q/7493028/1178314. So take care of installing 12.1 instead.
3+
1. Download Oracle Database 21c Express Edition from https://oracle.com/. Please make sure you comply with it's license.
64
(Note: you'll need to sign-up for a (free) Oracle account to download)
75

86
2. Run the installer ...
@@ -37,6 +35,7 @@ Resolve conflict between Oracle client and with the managed driver NuGet package
3735
1. Within an elevated command line, navigate to {Oracle home}\product\{version}\{dbhome}\ODP.NET\managed\x64
3836
2. Run
3937
OraProvCfg /action:ungac /providerPath:Oracle.ManagedDataAccess
38+
4039
This is needed because NHibernate test uses the managed driver NuGet package, but Oracle client installation
4140
(excepted 12.2 and higher) put in the GAC a conflicting version of the assembly. This conflicting
4241
version needs to be removed from the GAC. Read more on https://stackoverflow.com/a/35176586/1178314.
@@ -46,6 +45,7 @@ Adjust the connection string for the tests:
4645
The tests involve creating and dropping many tables, sometimes with the same names but different data
4746
types. This does not play well with Oracle meta data pooling, which needs to be disabled.
4847
Add into your ODP.NET connection string:
48+
4949
Metadata Pooling=false;Self Tuning=false;
5050

5151
Please note that some tests are dependent on the machine locales, and may fail if they are not English.

psake.ps1

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ Task Build {
103103
Exec {
104104
dotnet `
105105
build ./src/NHibernate.sln `
106+
-m:1 `
106107
-c Release
107108
}
108109
}

releasenotes.txt

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,27 @@
1-
Build 5.3.12
1+
Build 5.3.13
2+
=============================
3+
4+
Release notes - NHibernate - Version 5.3.13
5+
6+
6 issues were resolved in this release.
7+
8+
** Bug
9+
10+
#3134 ManyToMany - Tries to select not existing column in Mapping Table
11+
#3113 Join fails on Oracle9Dialect
12+
#3030 Memory leak named parameter holds entity references
13+
14+
** Improvement
15+
16+
#3120 Guards against use of a disposed session factory
17+
#2994 Npgsql 6 is not compatible
18+
19+
** Task
20+
21+
* #3145 Release 5.3.13
22+
23+
24+
Build 5.3.12
225
=============================
326

427
Release notes - NHibernate - Version 5.3.12

src/NHibernate.Test/Async/Immutable/EntityWithMutableCollection/AbstractEntityWithOneToManyTest.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1234,7 +1234,6 @@ public virtual async Task OneToManyCollectionOptimisticLockingWithUpdateAsync()
12341234

12351235
s = OpenSession();
12361236
t = s.BeginTransaction();
1237-
c = await (s.CreateCriteria<Contract>().UniqueResultAsync<Contract>());
12381237
// If the entity uses a join mapping, DML queries require temp tables.
12391238
if (Dialect.SupportsTemporaryTables)
12401239
await (s.CreateQuery("delete from Party").ExecuteUpdateAsync());
@@ -1251,7 +1250,7 @@ public virtual async Task OneToManyCollectionOptimisticLockingWithUpdateAsync()
12511250
await (s.DeleteAsync(partyOrig));
12521251
await (s.DeleteAsync(newParty));
12531252
}
1254-
1253+
c = await (s.CreateCriteria<Contract>().UniqueResultAsync<Contract>());
12551254
await (s.DeleteAsync(c));
12561255
Assert.That(await (s.CreateCriteria<Contract>().SetProjection(Projections.RowCountInt64()).UniqueResultAsync<long>()), Is.EqualTo(0L));
12571256
Assert.That(await (s.CreateCriteria<Party>().SetProjection(Projections.RowCountInt64()).UniqueResultAsync<long>()), Is.EqualTo(0L));
Lines changed: 198 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,198 @@
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.Cfg.MappingSchema;
13+
using NHibernate.Mapping.ByCode;
14+
using NUnit.Framework;
15+
using NUnit.Framework.Constraints;
16+
using NHibernate.Linq;
17+
18+
namespace NHibernate.Test.NHSpecificTest.GH1235
19+
{
20+
using System.Threading.Tasks;
21+
//NH-2785
22+
[TestFixture(OptimisticLockMode.None)]
23+
[TestFixture(OptimisticLockMode.Version)]
24+
[TestFixture(OptimisticLockMode.Dirty)]
25+
public class OptionalJoinFixtureAsync : TestCaseMappingByCode
26+
{
27+
private readonly OptimisticLockMode _optimisticLock;
28+
29+
public OptionalJoinFixtureAsync(OptimisticLockMode optimisticLock)
30+
{
31+
_optimisticLock = optimisticLock;
32+
}
33+
34+
protected override void OnTearDown()
35+
{
36+
using (var session = OpenSession())
37+
using (var transaction = session.BeginTransaction())
38+
{
39+
if (Dialect.SupportsTemporaryTables)
40+
session.CreateQuery("delete from System.Object").ExecuteUpdate();
41+
else
42+
session.Delete("from System.Object");
43+
44+
transaction.Commit();
45+
}
46+
}
47+
48+
[Test]
49+
public async Task UpdateNullOptionalJoinToNotNullAsync()
50+
{
51+
object id;
52+
53+
using (var s = OpenSession())
54+
using (var t = s.BeginTransaction())
55+
{
56+
var entity = new MultiTableEntity { Name = "Bob" };
57+
id = await (s.SaveAsync(entity));
58+
await (t.CommitAsync());
59+
}
60+
61+
using (var s = OpenSession())
62+
using (var t = s.BeginTransaction())
63+
{
64+
var e = await (s.GetAsync<MultiTableEntity>(id));
65+
e.OtherName = "Sally";
66+
await (t.CommitAsync());
67+
}
68+
69+
using (var s = OpenSession())
70+
{
71+
var e = await (s.GetAsync<MultiTableEntity>(id));
72+
Assert.That(e.OtherName, Is.EqualTo("Sally"));
73+
}
74+
}
75+
76+
[Test]
77+
public async Task UpdateNullOptionalJoinToNotNullDetachedAsync()
78+
{
79+
object id;
80+
MultiTableEntity entity;
81+
82+
using (var s = OpenSession())
83+
using (var t = s.BeginTransaction())
84+
{
85+
entity = new MultiTableEntity { Name = "Bob" };
86+
id = await (s.SaveAsync(entity));
87+
await (t.CommitAsync());
88+
}
89+
90+
using (var s = OpenSession())
91+
using (var t = s.BeginTransaction())
92+
{
93+
entity.OtherName = "Sally";
94+
await (s.UpdateAsync(entity));
95+
await (t.CommitAsync());
96+
}
97+
98+
using (var s = OpenSession())
99+
{
100+
var e = await (s.GetAsync<MultiTableEntity>(id));
101+
Assert.That(e.OtherName, Is.EqualTo("Sally"));
102+
}
103+
}
104+
105+
[Test]
106+
public async Task ShouldThrowStaleStateForOptimisticLockUpdateAsync()
107+
{
108+
using (var s = OpenSession())
109+
using (var t = s.BeginTransaction())
110+
{
111+
var result = new MultiTableEntity { Name = "Bob", OtherName = "Bob" };
112+
await (s.SaveAsync(result));
113+
await (t.CommitAsync());
114+
}
115+
116+
using (var s1 = OpenSession())
117+
using (var t1 = s1.BeginTransaction())
118+
{
119+
var result = await (s1.Query<MultiTableEntity>().FirstOrDefaultAsync());
120+
121+
result.OtherName += "x";
122+
using (var s2 = OpenSession())
123+
{
124+
var result2 = await (s2.Query<MultiTableEntity>().FirstOrDefaultAsync());
125+
result2.OtherName += "y";
126+
await (t1.CommitAsync());
127+
128+
using (var t2 = s2.BeginTransaction())
129+
Assert.That(
130+
() => t2.CommitAsync(),
131+
_optimisticLock == OptimisticLockMode.None
132+
? (IResolveConstraint) Throws.Nothing
133+
: Throws.InstanceOf<StaleObjectStateException>());
134+
}
135+
}
136+
}
137+
138+
[Test]
139+
public async Task ShouldThrowStaleStateForOptimisticLockDeleteAsync()
140+
{
141+
using (var s = OpenSession())
142+
using (var t = s.BeginTransaction())
143+
{
144+
var result = new MultiTableEntity { Name = "Bob", OtherName = "Bob" };
145+
await (s.SaveAsync(result));
146+
await (t.CommitAsync());
147+
}
148+
149+
using (var s1 = OpenSession())
150+
using (var t1 = s1.BeginTransaction())
151+
{
152+
var result = await (s1.Query<MultiTableEntity>().FirstOrDefaultAsync());
153+
154+
result.OtherName += "x";
155+
using (var s2 = OpenSession())
156+
{
157+
var result2 = await (s2.Query<MultiTableEntity>().FirstOrDefaultAsync());
158+
await (s2.DeleteAsync(result2));
159+
await (t1.CommitAsync());
160+
161+
using (var t2 = s2.BeginTransaction())
162+
Assert.That(
163+
() => t2.CommitAsync(),
164+
_optimisticLock == OptimisticLockMode.None
165+
? (IResolveConstraint) Throws.Nothing
166+
: Throws.InstanceOf<StaleObjectStateException>());
167+
}
168+
}
169+
}
170+
171+
protected override HbmMapping GetMappings()
172+
{
173+
var mapper = new ModelMapper();
174+
mapper.Class<MultiTableEntity>(
175+
rc =>
176+
{
177+
rc.Id(x => x.Id, m => m.Generator(Generators.Native));
178+
rc.DynamicUpdate(true);
179+
rc.OptimisticLock(_optimisticLock);
180+
181+
if (_optimisticLock == OptimisticLockMode.Version)
182+
rc.Version(x => x.Version, _ => { });
183+
184+
rc.Property(x => x.Name);
185+
rc.Join(
186+
"SecondTable",
187+
m =>
188+
{
189+
m.Key(k => k.Column("Id"));
190+
m.Property(x => x.OtherName);
191+
m.Optional(true);
192+
});
193+
});
194+
195+
return mapper.CompileMappingForAllExplicitlyAddedEntities();
196+
}
197+
}
198+
}

0 commit comments

Comments
 (0)