|
From: <fab...@us...> - 2009-03-29 06:27:17
|
Revision: 4165
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4165&view=rev
Author: fabiomaulo
Date: 2009-03-29 06:27:12 +0000 (Sun, 29 Mar 2009)
Log Message:
-----------
Fix NH-1718 (new feature Currency type)
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/NHibernate.csproj
trunk/nhibernate/src/NHibernate/NHibernateUtil.cs
trunk/nhibernate/src/NHibernate/Type/TypeFactory.cs
trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
Added Paths:
-----------
trunk/nhibernate/src/NHibernate/Type/CurrencyType.cs
trunk/nhibernate/src/NHibernate.Test/TypesTest/CurrencyClass.cs
trunk/nhibernate/src/NHibernate.Test/TypesTest/CurrencyClass.hbm.xml
trunk/nhibernate/src/NHibernate.Test/TypesTest/CurrencyTypeFixture.cs
Modified: trunk/nhibernate/src/NHibernate/NHibernate.csproj
===================================================================
--- trunk/nhibernate/src/NHibernate/NHibernate.csproj 2009-03-29 04:42:52 UTC (rev 4164)
+++ trunk/nhibernate/src/NHibernate/NHibernate.csproj 2009-03-29 06:27:12 UTC (rev 4165)
@@ -1091,6 +1091,7 @@
<Compile Include="Type\AnsiCharType.cs" />
<Compile Include="Type\AnyType.cs" />
<Compile Include="Type\AbstractCharType.cs" />
+ <Compile Include="Type\CurrencyType.cs" />
<Compile Include="Type\TimeSpanType.cs" />
<Compile Include="Type\DateTime2Type.cs" />
<Compile Include="Type\ClassMetaType.cs" />
Modified: trunk/nhibernate/src/NHibernate/NHibernateUtil.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/NHibernateUtil.cs 2009-03-29 04:42:52 UTC (rev 4164)
+++ trunk/nhibernate/src/NHibernate/NHibernateUtil.cs 2009-03-29 06:27:12 UTC (rev 4165)
@@ -141,6 +141,11 @@
public static readonly NullableType Double = new DoubleType();
/// <summary>
+ /// NHibernate Currency type (System.Decimal - DbType.Currency)
+ /// </summary>
+ public static readonly NullableType Currency = new CurrencyType();
+
+ /// <summary>
/// NHibernate Guid type.
/// </summary>
public static readonly NullableType Guid = new GuidType();
Added: trunk/nhibernate/src/NHibernate/Type/CurrencyType.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Type/CurrencyType.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate/Type/CurrencyType.cs 2009-03-29 06:27:12 UTC (rev 4165)
@@ -0,0 +1,17 @@
+using System;
+using NHibernate.SqlTypes;
+
+namespace NHibernate.Type
+{
+ [Serializable]
+ public class CurrencyType : DecimalType
+ {
+ internal CurrencyType() : this(SqlTypeFactory.Currency) { }
+ internal CurrencyType(SqlType sqlType) : base(sqlType) { }
+
+ public override string Name
+ {
+ get { return "Currency"; }
+ }
+ }
+}
\ No newline at end of file
Modified: trunk/nhibernate/src/NHibernate/Type/TypeFactory.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Type/TypeFactory.cs 2009-03-29 04:42:52 UTC (rev 4164)
+++ trunk/nhibernate/src/NHibernate/Type/TypeFactory.cs 2009-03-29 06:27:12 UTC (rev 4165)
@@ -95,8 +95,6 @@
//basicTypes.Add(NHibernate.Blob.Name, NHibernate.Blob);
//basicTypes.Add(NHibernate.Clob.Name, NHibernate.Clob);
- //basicTypes.Add(NHibernate.Currency.Name, NHibernate.Currency);
-
// the Timezone class .NET is not even close to the java.util.Timezone class - in
// .NET all you can do is get the local Timezone - there is no "factory" method to
// get a Timezone by name...
@@ -145,6 +143,7 @@
typeByTypeOfName[NHibernateUtil.Ticks.Name] = NHibernateUtil.Ticks;
typeByTypeOfName[NHibernateUtil.TimeSpanInt64.Name] = NHibernateUtil.TimeSpanInt64;
typeByTypeOfName[NHibernateUtil.TimeSpan.Name] = NHibernateUtil.TimeSpan;
+ typeByTypeOfName[NHibernateUtil.Currency.Name] = NHibernateUtil.Currency;
// need to do add the key "Serializable" because the hbm files will have a
// type="Serializable", but the SerializableType returns the Name as
@@ -162,6 +161,7 @@
typeByTypeOfName["time"] = NHibernateUtil.Time;
typeByTypeOfName["timestamp"] = NHibernateUtil.Timestamp;
typeByTypeOfName["decimal"] = NHibernateUtil.Decimal;
+ typeByTypeOfName["currency"] = NHibernateUtil.Currency;
typeByTypeOfName["serializable"] = NHibernateUtil.Serializable;
typeByTypeOfName["true_false"] = NHibernateUtil.TrueFalse;
Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-03-29 04:42:52 UTC (rev 4164)
+++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-03-29 06:27:12 UTC (rev 4165)
@@ -1059,6 +1059,8 @@
<Compile Include="TypesTest\BooleanTypeFixture.cs" />
<Compile Include="TypesTest\ByteClass.cs" />
<Compile Include="TypesTest\ByteTypeFixture.cs" />
+ <Compile Include="TypesTest\CurrencyClass.cs" />
+ <Compile Include="TypesTest\CurrencyTypeFixture.cs" />
<Compile Include="TypesTest\TimeSpanClass.cs" />
<Compile Include="TypesTest\TimeSpanTypeFixture.cs" />
<Compile Include="TypesTest\TimeSpanInt64Class.cs" />
@@ -1705,6 +1707,7 @@
<EmbeddedResource Include="Cascade\JobBatch.hbm.xml" />
<EmbeddedResource Include="Deletetransient\Person.hbm.xml" />
<Content Include="DynamicEntity\package.html" />
+ <EmbeddedResource Include="TypesTest\CurrencyClass.hbm.xml" />
<EmbeddedResource Include="NHSpecificTest\NH1635\Mappings.hbm.xml" />
<EmbeddedResource Include="NHSpecificTest\NH1688\Mappings.hbm.xml" />
<EmbeddedResource Include="NHSpecificTest\NH1700\Mappings.hbm.xml" />
Added: trunk/nhibernate/src/NHibernate.Test/TypesTest/CurrencyClass.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/TypesTest/CurrencyClass.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/TypesTest/CurrencyClass.cs 2009-03-29 06:27:12 UTC (rev 4165)
@@ -0,0 +1,7 @@
+namespace NHibernate.Test.TypesTest
+{
+ public class CurrencyClass
+ {
+ public decimal CurrencyValue { get; set; }
+ }
+}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate.Test/TypesTest/CurrencyClass.hbm.xml
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/TypesTest/CurrencyClass.hbm.xml (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/TypesTest/CurrencyClass.hbm.xml 2009-03-29 06:27:12 UTC (rev 4165)
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
+ assembly="NHibernate.Test"
+ namespace="NHibernate.Test.TypesTest"
+ default-lazy="false">
+
+ <class name="CurrencyClass">
+ <id type="int">
+ <generator class="native" />
+ </id>
+ <property name="CurrencyValue" type="currency"/>
+ </class>
+</hibernate-mapping>
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate.Test/TypesTest/CurrencyTypeFixture.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/TypesTest/CurrencyTypeFixture.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/TypesTest/CurrencyTypeFixture.cs 2009-03-29 06:27:12 UTC (rev 4165)
@@ -0,0 +1,72 @@
+using NHibernate.Dialect;
+using NHibernate.Type;
+using NUnit.Framework;
+using NUnit.Framework.SyntaxHelpers;
+
+namespace NHibernate.Test.TypesTest
+{
+ [TestFixture]
+ public class CurrencyTypeFixture : TypeFixtureBase
+ {
+ protected override string TypeName
+ {
+ get { return "Currency"; }
+ }
+
+ [Test]
+ public void ShouldBeMoneyType()
+ {
+ if (!(Dialect is MsSql2000Dialect))
+ {
+ Assert.Ignore("This test does not apply to " + Dialect);
+ }
+ var sqlType = Dialect.GetTypeName(NHibernateUtil.Currency.SqlType);
+ Assert.That(sqlType, Is.EqualTo("MONEY"));
+ }
+
+ /// <summary>
+ /// Test that two decimal fields that are exactly equal are returned
+ /// as Equal by the DecimalType.
+ /// </summary>
+ [Test]
+ public void Equals()
+ {
+ const decimal lhs = 5.6435M;
+ const decimal rhs = 5.6435M;
+
+ var type = (CurrencyType)NHibernateUtil.Currency;
+ Assert.IsTrue(type.IsEqual(lhs, rhs));
+ }
+
+ [Test]
+ public void ReadWrite()
+ {
+ const decimal expected = 5.6435M;
+
+ var basic = new CurrencyClass {CurrencyValue = expected};
+ ISession s = OpenSession();
+ object savedId = s.Save(basic);
+ s.Flush();
+ s.Close();
+
+ s = OpenSession();
+ basic = s.Load<CurrencyClass>(savedId);
+
+ Assert.AreEqual(expected, basic.CurrencyValue);
+
+ s.Delete(basic);
+ s.Flush();
+ s.Close();
+ }
+
+ [Test]
+ public void UnsavedValue()
+ {
+ var type = (CurrencyType)NHibernateUtil.Currency;
+ object mappedValue = type.StringToObject("0");
+ Assert.AreEqual(0m, mappedValue);
+ Assert.IsTrue(type.IsEqual(mappedValue, 0m), "'0' in the mapping file should have been converted to a 0m");
+ }
+
+ }
+}
\ No newline at end of file
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|