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. |