Skip to content

Commit 7bb83f6

Browse files
authored
Fix casting unsigned numeric types for Linq provider (#2447)
Fix #2445
1 parent f797ec5 commit 7bb83f6

File tree

4 files changed

+386
-57
lines changed

4 files changed

+386
-57
lines changed
Lines changed: 168 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,168 @@
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;
13+
using NHibernate.Cfg.MappingSchema;
14+
using NHibernate.Dialect;
15+
using NHibernate.Mapping.ByCode;
16+
using NHibernate.Test.NHSpecificTest.GH2445;
17+
using NUnit.Framework;
18+
using NHibernate.Linq;
19+
20+
namespace NHibernate.Test.NHSpecificTest.GH2446
21+
{
22+
using System.Threading.Tasks;
23+
[TestFixture]
24+
public class FixtureAsync : TestCaseMappingByCode
25+
{
26+
protected override void Configure(Configuration configuration)
27+
{
28+
configuration.SetProperty(Environment.Hbm2ddlKeyWords, "auto-quote");
29+
}
30+
31+
protected override bool AppliesTo(Dialect.Dialect dialect)
32+
{
33+
return dialect is MySQLDialect || dialect is SQLiteDialect;
34+
}
35+
36+
protected override HbmMapping GetMappings()
37+
{
38+
var mapper = new ModelMapper();
39+
mapper.Class<UnsignedEntity>(m =>
40+
{
41+
m.Id(c => c.Id, id =>
42+
{
43+
id.Generator(Generators.Native);
44+
});
45+
m.Property(o => o.Short, o => o.NotNullable(true));
46+
m.Property(o => o.Integer, o => o.NotNullable(true));
47+
m.Property(o => o.Long, o => o.NotNullable(true));
48+
m.Property(o => o.NullableNumber);
49+
m.Property(o => o.ShortNumber, o => o.NotNullable(true));
50+
m.Property(o => o.NullableShortNumber);
51+
m.Property(o => o.LargeNumber, o => o.NotNullable(true));
52+
m.Property(o => o.NullableLargeNumber);
53+
});
54+
55+
return mapper.CompileMappingForAllExplicitlyAddedEntities();
56+
}
57+
58+
protected override void OnSetUp()
59+
{
60+
using (var session = OpenSession())
61+
using (var tx = session.BeginTransaction())
62+
{
63+
var entity = new UnsignedEntity()
64+
{
65+
Short = 123,
66+
Integer = 12345,
67+
Long = 123456789,
68+
LargeNumber = 123456789,
69+
NullableLargeNumber = null,
70+
NullableNumber = null,
71+
ShortNumber = 123,
72+
NullableShortNumber = null
73+
};
74+
session.Save(entity);
75+
tx.Commit();
76+
}
77+
}
78+
79+
protected override void OnTearDown()
80+
{
81+
using (var session = OpenSession())
82+
using (var tx = session.BeginTransaction())
83+
{
84+
session.CreateQuery("delete from UnsignedEntity").ExecuteUpdate();
85+
tx.Commit();
86+
}
87+
}
88+
89+
[Test]
90+
public async Task TestUIntAsync()
91+
{
92+
using (var session = OpenSession())
93+
using (var tx = session.BeginTransaction())
94+
{
95+
var number = 10;
96+
await (session.Query<UnsignedEntity>().Where(o => o.Id == (uint) number).ToListAsync());
97+
await (session.Query<UnsignedEntity>().Where(o => o.Id == (uint) o.Integer).ToListAsync());
98+
await (session.Query<UnsignedEntity>().Where(o => o.Id > number).ToListAsync());
99+
}
100+
}
101+
102+
[Test]
103+
public async Task TestNullableUIntAsync()
104+
{
105+
using (var session = OpenSession())
106+
using (var tx = session.BeginTransaction())
107+
{
108+
var number = 10;
109+
await (session.Query<UnsignedEntity>().Where(o => o.NullableNumber == (uint?) number).ToListAsync());
110+
await (session.Query<UnsignedEntity>().Where(o => o.NullableNumber == (uint?) o.Integer).ToListAsync());
111+
await (session.Query<UnsignedEntity>().Where(o => o.NullableNumber > number).ToListAsync());
112+
}
113+
}
114+
115+
116+
[Test]
117+
public async Task TestUShortAsync()
118+
{
119+
using (var session = OpenSession())
120+
using (var tx = session.BeginTransaction())
121+
{
122+
short number = 10;
123+
await (session.Query<UnsignedEntity>().Where(o => o.ShortNumber == (ushort) number).ToListAsync());
124+
await (session.Query<UnsignedEntity>().Where(o => o.ShortNumber == (ushort) o.Short).ToListAsync());
125+
await (session.Query<UnsignedEntity>().Where(o => o.ShortNumber > number).ToListAsync());
126+
}
127+
}
128+
129+
[Test]
130+
public async Task TestNullableUShortAsync()
131+
{
132+
using (var session = OpenSession())
133+
using (var tx = session.BeginTransaction())
134+
{
135+
short number = 10;
136+
await (session.Query<UnsignedEntity>().Where(o => o.NullableShortNumber == (ushort?) number).ToListAsync());
137+
await (session.Query<UnsignedEntity>().Where(o => o.NullableShortNumber == (ushort?) o.Short).ToListAsync());
138+
await (session.Query<UnsignedEntity>().Where(o => o.NullableShortNumber > number).ToListAsync());
139+
}
140+
}
141+
142+
[Test]
143+
public async Task TestULongAsync()
144+
{
145+
using (var session = OpenSession())
146+
using (var tx = session.BeginTransaction())
147+
{
148+
long number = 10;
149+
await (session.Query<UnsignedEntity>().Where(o => o.LargeNumber == (ulong) number).ToListAsync());
150+
await (session.Query<UnsignedEntity>().Where(o => o.LargeNumber == (ulong) o.Long).ToListAsync());
151+
await (session.Query<UnsignedEntity>().Where(o => o.LargeNumber > (ulong) number).ToListAsync());
152+
}
153+
}
154+
155+
[Test]
156+
public async Task TestNullableULongAsync()
157+
{
158+
using (var session = OpenSession())
159+
using (var tx = session.BeginTransaction())
160+
{
161+
long number = 10;
162+
await (session.Query<UnsignedEntity>().Where(o => o.NullableLargeNumber == (ulong?) number).ToListAsync());
163+
await (session.Query<UnsignedEntity>().Where(o => o.NullableLargeNumber == (ulong?) o.Long).ToListAsync());
164+
await (session.Query<UnsignedEntity>().Where(o => o.NullableLargeNumber > (ulong?) number).ToListAsync());
165+
}
166+
}
167+
}
168+
}
Lines changed: 156 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,156 @@
1+
using System.Linq;
2+
using NHibernate.Cfg;
3+
using NHibernate.Cfg.MappingSchema;
4+
using NHibernate.Dialect;
5+
using NHibernate.Mapping.ByCode;
6+
using NHibernate.Test.NHSpecificTest.GH2445;
7+
using NUnit.Framework;
8+
9+
namespace NHibernate.Test.NHSpecificTest.GH2446
10+
{
11+
[TestFixture]
12+
public class Fixture : TestCaseMappingByCode
13+
{
14+
protected override void Configure(Configuration configuration)
15+
{
16+
configuration.SetProperty(Environment.Hbm2ddlKeyWords, "auto-quote");
17+
}
18+
19+
protected override bool AppliesTo(Dialect.Dialect dialect)
20+
{
21+
return dialect is MySQLDialect || dialect is SQLiteDialect;
22+
}
23+
24+
protected override HbmMapping GetMappings()
25+
{
26+
var mapper = new ModelMapper();
27+
mapper.Class<UnsignedEntity>(m =>
28+
{
29+
m.Id(c => c.Id, id =>
30+
{
31+
id.Generator(Generators.Native);
32+
});
33+
m.Property(o => o.Short, o => o.NotNullable(true));
34+
m.Property(o => o.Integer, o => o.NotNullable(true));
35+
m.Property(o => o.Long, o => o.NotNullable(true));
36+
m.Property(o => o.NullableNumber);
37+
m.Property(o => o.ShortNumber, o => o.NotNullable(true));
38+
m.Property(o => o.NullableShortNumber);
39+
m.Property(o => o.LargeNumber, o => o.NotNullable(true));
40+
m.Property(o => o.NullableLargeNumber);
41+
});
42+
43+
return mapper.CompileMappingForAllExplicitlyAddedEntities();
44+
}
45+
46+
protected override void OnSetUp()
47+
{
48+
using (var session = OpenSession())
49+
using (var tx = session.BeginTransaction())
50+
{
51+
var entity = new UnsignedEntity()
52+
{
53+
Short = 123,
54+
Integer = 12345,
55+
Long = 123456789,
56+
LargeNumber = 123456789,
57+
NullableLargeNumber = null,
58+
NullableNumber = null,
59+
ShortNumber = 123,
60+
NullableShortNumber = null
61+
};
62+
session.Save(entity);
63+
tx.Commit();
64+
}
65+
}
66+
67+
protected override void OnTearDown()
68+
{
69+
using (var session = OpenSession())
70+
using (var tx = session.BeginTransaction())
71+
{
72+
session.CreateQuery("delete from UnsignedEntity").ExecuteUpdate();
73+
tx.Commit();
74+
}
75+
}
76+
77+
[Test]
78+
public void TestUInt()
79+
{
80+
using (var session = OpenSession())
81+
using (var tx = session.BeginTransaction())
82+
{
83+
var number = 10;
84+
session.Query<UnsignedEntity>().Where(o => o.Id == (uint) number).ToList();
85+
session.Query<UnsignedEntity>().Where(o => o.Id == (uint) o.Integer).ToList();
86+
session.Query<UnsignedEntity>().Where(o => o.Id > number).ToList();
87+
}
88+
}
89+
90+
[Test]
91+
public void TestNullableUInt()
92+
{
93+
using (var session = OpenSession())
94+
using (var tx = session.BeginTransaction())
95+
{
96+
var number = 10;
97+
session.Query<UnsignedEntity>().Where(o => o.NullableNumber == (uint?) number).ToList();
98+
session.Query<UnsignedEntity>().Where(o => o.NullableNumber == (uint?) o.Integer).ToList();
99+
session.Query<UnsignedEntity>().Where(o => o.NullableNumber > number).ToList();
100+
}
101+
}
102+
103+
104+
[Test]
105+
public void TestUShort()
106+
{
107+
using (var session = OpenSession())
108+
using (var tx = session.BeginTransaction())
109+
{
110+
short number = 10;
111+
session.Query<UnsignedEntity>().Where(o => o.ShortNumber == (ushort) number).ToList();
112+
session.Query<UnsignedEntity>().Where(o => o.ShortNumber == (ushort) o.Short).ToList();
113+
session.Query<UnsignedEntity>().Where(o => o.ShortNumber > number).ToList();
114+
}
115+
}
116+
117+
[Test]
118+
public void TestNullableUShort()
119+
{
120+
using (var session = OpenSession())
121+
using (var tx = session.BeginTransaction())
122+
{
123+
short number = 10;
124+
session.Query<UnsignedEntity>().Where(o => o.NullableShortNumber == (ushort?) number).ToList();
125+
session.Query<UnsignedEntity>().Where(o => o.NullableShortNumber == (ushort?) o.Short).ToList();
126+
session.Query<UnsignedEntity>().Where(o => o.NullableShortNumber > number).ToList();
127+
}
128+
}
129+
130+
[Test]
131+
public void TestULong()
132+
{
133+
using (var session = OpenSession())
134+
using (var tx = session.BeginTransaction())
135+
{
136+
long number = 10;
137+
session.Query<UnsignedEntity>().Where(o => o.LargeNumber == (ulong) number).ToList();
138+
session.Query<UnsignedEntity>().Where(o => o.LargeNumber == (ulong) o.Long).ToList();
139+
session.Query<UnsignedEntity>().Where(o => o.LargeNumber > (ulong) number).ToList();
140+
}
141+
}
142+
143+
[Test]
144+
public void TestNullableULong()
145+
{
146+
using (var session = OpenSession())
147+
using (var tx = session.BeginTransaction())
148+
{
149+
long number = 10;
150+
session.Query<UnsignedEntity>().Where(o => o.NullableLargeNumber == (ulong?) number).ToList();
151+
session.Query<UnsignedEntity>().Where(o => o.NullableLargeNumber == (ulong?) o.Long).ToList();
152+
session.Query<UnsignedEntity>().Where(o => o.NullableLargeNumber > (ulong?) number).ToList();
153+
}
154+
}
155+
}
156+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
namespace NHibernate.Test.NHSpecificTest.GH2445
2+
{
3+
public class UnsignedEntity
4+
{
5+
public virtual uint Id { get; set; }
6+
7+
public virtual short Short { get; set; }
8+
9+
public virtual int Integer { get; set; }
10+
11+
public virtual long Long { get; set; }
12+
13+
public virtual uint? NullableNumber { get; set; }
14+
15+
public virtual ushort ShortNumber { get; set; }
16+
17+
public virtual ushort? NullableShortNumber { get; set; }
18+
19+
public virtual ulong LargeNumber { get; set; }
20+
21+
public virtual ulong? NullableLargeNumber { get; set; }
22+
}
23+
}

0 commit comments

Comments
 (0)