|
From: <fab...@us...> - 2009-06-14 18:25:18
|
Revision: 4467
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4467&view=rev
Author: fabiomaulo
Date: 2009-06-14 18:25:16 +0000 (Sun, 14 Jun 2009)
Log Message:
-----------
Fix TypeFactory bugs after tests
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/Type/DoubleType.cs
trunk/nhibernate/src/NHibernate/Type/SingleType.cs
trunk/nhibernate/src/NHibernate/Type/TypeFactory.cs
trunk/nhibernate/src/NHibernate.Test/TypesTest/TypeFactoryFixture.cs
Modified: trunk/nhibernate/src/NHibernate/Type/DoubleType.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Type/DoubleType.cs 2009-06-14 18:17:12 UTC (rev 4466)
+++ trunk/nhibernate/src/NHibernate/Type/DoubleType.cs 2009-06-14 18:25:16 UTC (rev 4467)
@@ -16,6 +16,8 @@
{
}
+ internal DoubleType(SqlType sqlType) : base(sqlType) {}
+
/// <summary>
///
/// </summary>
Modified: trunk/nhibernate/src/NHibernate/Type/SingleType.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Type/SingleType.cs 2009-06-14 18:17:12 UTC (rev 4466)
+++ trunk/nhibernate/src/NHibernate/Type/SingleType.cs 2009-06-14 18:25:16 UTC (rev 4467)
@@ -20,6 +20,8 @@
{
}
+ internal SingleType(SqlType sqlType) : base(sqlType) {}
+
/// <summary></summary>
public override string Name
{
Modified: trunk/nhibernate/src/NHibernate/Type/TypeFactory.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Type/TypeFactory.cs 2009-06-14 18:17:12 UTC (rev 4466)
+++ trunk/nhibernate/src/NHibernate/Type/TypeFactory.cs 2009-06-14 18:25:16 UTC (rev 4467)
@@ -1,7 +1,6 @@
using System;
using System.Collections;
using System.Collections.Generic;
-using System.Data;
using System.Globalization;
using System.Reflection;
using NHibernate.Bytecode;
@@ -74,6 +73,8 @@
private delegate NullableType GetNullableTypeWithPrecision(byte precision, byte scale);
+ private delegate NullableType NullableTypeCreatorDelegate(SqlType sqlType);
+
private static void RegisterType(System.Type systemType, IType nhibernateType, string additionalName)
{
typeByTypeOfName[systemType.FullName] = nhibernateType;
@@ -182,10 +183,14 @@
getTypeDelegatesWithLength.Add(NHibernateUtil.StringClob.Name, GetStringType);
getTypeDelegatesWithLength.Add(NHibernateUtil.Class.Name, GetTypeType);
- getTypeDelegatesWithPrecision.Add(NHibernateUtil.Decimal.Name, GetDecimalType);
- getTypeDelegatesWithPrecision.Add(NHibernateUtil.Currency.Name, GetDecimalType);
- getTypeDelegatesWithPrecision.Add(NHibernateUtil.Double.Name, GetDecimalType);
- getTypeDelegatesWithPrecision.Add(NHibernateUtil.Single.Name, GetDecimalType);
+ getTypeDelegatesWithPrecision.Add(NHibernateUtil.Decimal.Name,
+ (p, s) => GetType(NHibernateUtil.Decimal, p, s, st => new DecimalType(st)));
+ getTypeDelegatesWithPrecision.Add(NHibernateUtil.Currency.Name,
+ (p, s) => GetType(NHibernateUtil.Currency, p, s, st => new CurrencyType(st)));
+ getTypeDelegatesWithPrecision.Add(NHibernateUtil.Double.Name,
+ (p, s) => GetType(NHibernateUtil.Double, p, s, st => new DoubleType(st)));
+ getTypeDelegatesWithPrecision.Add(NHibernateUtil.Single.Name,
+ (p, s) => GetType(NHibernateUtil.Single, p, s, st => new SingleType(st)));
}
public ICollectionTypeFactory CollectionTypeFactory
@@ -516,14 +521,13 @@
return (NullableType)returnType;
}
- [MethodImpl(MethodImplOptions.Synchronized)]
- public static NullableType GetDecimalType(byte precision, byte scale)
+ private static NullableType GetType(NullableType defaultUnqualifiedType, byte precision, byte scale, NullableTypeCreatorDelegate ctor)
{
- string key = GetKeyForPrecisionScaleBased(NHibernateUtil.Decimal.Name, precision, scale);
+ string key = GetKeyForPrecisionScaleBased(defaultUnqualifiedType.Name, precision, scale);
IType returnType;
if (!typeByTypeOfName.TryGetValue(key, out returnType))
{
- returnType = new DecimalType(SqlTypeFactory.GetSqlType(DbType.Decimal, precision, scale));
+ returnType = ctor(SqlTypeFactory.GetSqlType(defaultUnqualifiedType.SqlType.DbType, precision, scale));
AddToTypeOfNameWithPrecision(key, returnType);
}
Modified: trunk/nhibernate/src/NHibernate.Test/TypesTest/TypeFactoryFixture.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/TypesTest/TypeFactoryFixture.cs 2009-06-14 18:17:12 UTC (rev 4466)
+++ trunk/nhibernate/src/NHibernate.Test/TypesTest/TypeFactoryFixture.cs 2009-06-14 18:25:16 UTC (rev 4467)
@@ -111,5 +111,32 @@
log.DebugFormat("{0} calls", totalCall);
}
+ [Test]
+ public void HoldQualifiedTypes()
+ {
+ var decimalType = TypeFactory.Basic("Decimal(10,5)");
+ var doubleType = TypeFactory.Basic("Double(10,5)");
+ var singleType = TypeFactory.Basic("Single(10,5)");
+ var currencyType = TypeFactory.Basic("Currency(10,5)");
+
+ Assert.That(decimalType, Is.SameAs(TypeFactory.Basic("Decimal(10,5)")));
+ Assert.That(decimalType, Is.Not.SameAs(doubleType));
+ Assert.That(decimalType, Is.Not.SameAs(singleType));
+ Assert.That(decimalType, Is.Not.SameAs(currencyType));
+ Assert.That(decimalType, Is.Not.SameAs(TypeFactory.Basic("Decimal(11,5)")));
+
+ Assert.That(doubleType, Is.SameAs(TypeFactory.Basic("Double(10,5)")));
+ Assert.That(doubleType, Is.Not.SameAs(TypeFactory.Basic("Double(11,5)")));
+ Assert.That(doubleType, Is.Not.SameAs(singleType));
+ Assert.That(doubleType, Is.Not.SameAs(currencyType));
+
+ Assert.That(singleType, Is.Not.SameAs(currencyType));
+
+ Assert.That(currencyType, Is.SameAs(TypeFactory.Basic("Currency(10,5)")));
+ Assert.That(currencyType, Is.Not.SameAs(TypeFactory.Basic("Currency(11,5)")));
+
+ Assert.That(singleType, Is.SameAs(TypeFactory.Basic("Single(10,5)")));
+ Assert.That(singleType, Is.Not.SameAs(TypeFactory.Basic("Single(11,5)")));
+ }
}
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|