Skip to content

Commit a3bb8e6

Browse files
NH-3787 - Decimal with scale above 5 tests
1 parent faebdcc commit a3bb8e6

File tree

4 files changed

+148
-0
lines changed

4 files changed

+148
-0
lines changed
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?xml version="1.0" encoding="utf-8" ?>
2+
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="NHibernate.Test"
3+
namespace="NHibernate.Test.NHSpecificTest.NH3787">
4+
<class name="TestEntity" table="TestEntity">
5+
<id name="Id">
6+
<generator class="native"/>
7+
</id>
8+
<property name="UsePreviousRate" type="boolean" not-null="true"/>
9+
<property name="PreviousRate" type="decimal(15,9)" not-null="true"/>
10+
<property name="Rate" type="decimal(15,9)" not-null="true"/>
11+
</class>
12+
</hibernate-mapping>
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
namespace NHibernate.Test.NHSpecificTest.NH3787
2+
{
3+
public class RateDto
4+
{
5+
public decimal Rate { get; set; }
6+
}
7+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
namespace NHibernate.Test.NHSpecificTest.NH3787
2+
{
3+
public class TestEntity
4+
{
5+
public virtual int Id { get; set; }
6+
public virtual bool UsePreviousRate { get; set; }
7+
public virtual decimal Rate { get; set; }
8+
public virtual decimal PreviousRate { get; set; }
9+
}
10+
}
Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
using System.Linq;
2+
using NHibernate.Criterion;
3+
using NHibernate.Transform;
4+
using NUnit.Framework;
5+
6+
namespace NHibernate.Test.NHSpecificTest.NH3787
7+
{
8+
[TestFixture]
9+
public class TestFixture : BugTestCase
10+
{
11+
private const decimal _testRate = 12345.123456789M;
12+
13+
protected override void OnSetUp()
14+
{
15+
base.OnSetUp();
16+
17+
using (var s = OpenSession())
18+
using (var t = s.BeginTransaction())
19+
{
20+
var testEntity = new TestEntity
21+
{
22+
UsePreviousRate = true,
23+
PreviousRate = _testRate,
24+
Rate = 54321.123456789M
25+
};
26+
s.Save(testEntity);
27+
t.Commit();
28+
}
29+
}
30+
31+
protected override void OnTearDown()
32+
{
33+
using (var s = OpenSession())
34+
using (var t = s.BeginTransaction())
35+
{
36+
s.CreateQuery("delete from TestEntity").ExecuteUpdate();
37+
t.Commit();
38+
}
39+
}
40+
41+
[Test]
42+
public void TestLinqQuery()
43+
{
44+
using (var s = OpenSession())
45+
using (var t = s.BeginTransaction())
46+
{
47+
var queryResult = s
48+
.Query<TestEntity>()
49+
.Where(e => e.PreviousRate == _testRate)
50+
.ToList();
51+
52+
Assert.That(queryResult.Count, Is.EqualTo(1));
53+
Assert.That(queryResult[0].PreviousRate, Is.EqualTo(_testRate));
54+
t.Commit();
55+
}
56+
}
57+
58+
[Test]
59+
public void TestLinqProjection()
60+
{
61+
using (var s = OpenSession())
62+
using (var t = s.BeginTransaction())
63+
{
64+
var queryResult = (from test in s.Query<TestEntity>()
65+
select new RateDto { Rate = test.UsePreviousRate ? test.PreviousRate : test.Rate }).ToList();
66+
67+
// Check it has not been truncated to the default 5 positions of NHibernate.
68+
Assert.That(queryResult[0].Rate, Is.EqualTo(_testRate));
69+
t.Commit();
70+
}
71+
}
72+
73+
[Test, Ignore("Not fixed yet.")]
74+
public void TestLinqQueryOnExpression()
75+
{
76+
using (var s = OpenSession())
77+
using (var t = s.BeginTransaction())
78+
{
79+
var queryResult = s
80+
.Query<TestEntity>()
81+
.Where(e => (e.UsePreviousRate ? e.PreviousRate : e.Rate) == _testRate)
82+
.ToList();
83+
84+
Assert.That(queryResult.Count, Is.EqualTo(1));
85+
Assert.That(queryResult[0].PreviousRate, Is.EqualTo(_testRate));
86+
t.Commit();
87+
}
88+
}
89+
90+
[Test]
91+
public void TestQueryOverProjection()
92+
{
93+
using (var s = OpenSession())
94+
using (var t = s.BeginTransaction())
95+
{
96+
TestEntity testEntity = null;
97+
98+
var rateDto = new RateDto();
99+
//Generated sql
100+
//exec sp_executesql N'SELECT (case when this_.UsePreviousRate = @p0 then this_.PreviousRate else this_.Rate end) as y0_ FROM [TestEntity] this_',N'@p0 bit',@p0=1
101+
var query = s
102+
.QueryOver(() => testEntity)
103+
.Select(
104+
Projections.Alias(
105+
Projections.Conditional(
106+
Restrictions.Eq(Projections.Property(() => testEntity.UsePreviousRate), true),
107+
Projections.Property(() => testEntity.PreviousRate),
108+
Projections.Property(() => testEntity.Rate)),
109+
"Rate")
110+
.WithAlias(() => rateDto.Rate));
111+
112+
var queryResult = query.TransformUsing(Transformers.AliasToBean<RateDto>()).List<RateDto>();
113+
114+
Assert.That(queryResult[0].Rate, Is.EqualTo(_testRate));
115+
t.Commit();
116+
}
117+
}
118+
}
119+
}

0 commit comments

Comments
 (0)