From: <fab...@us...> - 2009-03-28 15:28:22
|
Revision: 4155 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4155&view=rev Author: fabiomaulo Date: 2009-03-28 15:28:16 +0000 (Sat, 28 Mar 2009) Log Message: ----------- Fix NH-1710 Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Dialect/FirebirdDialect.cs trunk/nhibernate/src/NHibernate/Dialect/MsSql2000Dialect.cs trunk/nhibernate/src/NHibernate/Dialect/Oracle8iDialect.cs trunk/nhibernate/src/NHibernate/Mapping/Column.cs trunk/nhibernate/src/NHibernate/Type/TypeFactory.cs trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1710/ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1710/Defined.hbm.xml trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1710/Fixture.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1710/Heuristic.hbm.xml trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1710/InLine.hbm.xml trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1710/WithColumnNode.hbm.xml Modified: trunk/nhibernate/src/NHibernate/Dialect/FirebirdDialect.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Dialect/FirebirdDialect.cs 2009-03-25 18:35:41 UTC (rev 4154) +++ trunk/nhibernate/src/NHibernate/Dialect/FirebirdDialect.cs 2009-03-28 15:28:16 UTC (rev 4155) @@ -41,10 +41,11 @@ RegisterColumnType(DbType.Boolean, "SMALLINT"); RegisterColumnType(DbType.Byte, "SMALLINT"); RegisterColumnType(DbType.Currency, "DECIMAL(18,4)"); + RegisterColumnType(DbType.Currency, "DECIMAL($p,$s)"); RegisterColumnType(DbType.Date, "DATE"); RegisterColumnType(DbType.DateTime, "TIMESTAMP"); RegisterColumnType(DbType.Decimal, "DECIMAL(18,5)"); // NUMERIC(18,5) is equivalent to DECIMAL(18,5) - RegisterColumnType(DbType.Decimal, 18, "DECIMAL(18, $l)"); + RegisterColumnType(DbType.Decimal, 18, "DECIMAL($p, $s)"); RegisterColumnType(DbType.Double, "DOUBLE PRECISION"); RegisterColumnType(DbType.Guid, "CHAR(16) CHARACTER SET OCTETS"); RegisterColumnType(DbType.Int16, "SMALLINT"); Modified: trunk/nhibernate/src/NHibernate/Dialect/MsSql2000Dialect.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Dialect/MsSql2000Dialect.cs 2009-03-25 18:35:41 UTC (rev 4154) +++ trunk/nhibernate/src/NHibernate/Dialect/MsSql2000Dialect.cs 2009-03-28 15:28:16 UTC (rev 4155) @@ -57,7 +57,6 @@ RegisterColumnType(DbType.Date, "DATETIME"); RegisterColumnType(DbType.DateTime, "DATETIME"); RegisterColumnType(DbType.Decimal, "DECIMAL(19,5)"); - RegisterColumnType(DbType.Decimal, 19, "DECIMAL(19, $l)"); RegisterColumnType(DbType.Decimal, 19, "DECIMAL($p, $s)"); RegisterColumnType(DbType.Double, "DOUBLE PRECISION"); //synonym for FLOAT(53) RegisterColumnType(DbType.Guid, "UNIQUEIDENTIFIER"); Modified: trunk/nhibernate/src/NHibernate/Dialect/Oracle8iDialect.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Dialect/Oracle8iDialect.cs 2009-03-25 18:35:41 UTC (rev 4154) +++ trunk/nhibernate/src/NHibernate/Dialect/Oracle8iDialect.cs 2009-03-28 15:28:16 UTC (rev 4155) @@ -109,9 +109,7 @@ RegisterColumnType(DbType.Single, "FLOAT(24)"); RegisterColumnType(DbType.Double, "DOUBLE PRECISION"); RegisterColumnType(DbType.Double, 19, "NUMBER($p,$s)"); - RegisterColumnType(DbType.Double, 19, "NUMBER(19, $l)"); RegisterColumnType(DbType.Decimal, "NUMBER(19,5)"); - RegisterColumnType(DbType.Decimal, 19, "NUMBER(19, $l)"); RegisterColumnType(DbType.Decimal, 19, "NUMBER($p,$s)"); } Modified: trunk/nhibernate/src/NHibernate/Mapping/Column.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Mapping/Column.cs 2009-03-25 18:35:41 UTC (rev 4154) +++ trunk/nhibernate/src/NHibernate/Mapping/Column.cs 2009-03-28 15:28:16 UTC (rev 4155) @@ -211,7 +211,10 @@ private string GetDialectTypeName(Dialect.Dialect dialect, IMapping mapping) { if (IsCaracteristicsDefined()) - return dialect.GetTypeName(GetSqlTypeCode(mapping), Length, Precision, Scale); + { + // NH-1070 (the size should be 0 if the precision is defined) + return dialect.GetTypeName(GetSqlTypeCode(mapping), (!IsPrecisionDefined()) ? Length:0, Precision, Scale); + } else return dialect.GetTypeName(GetSqlTypeCode(mapping)); } @@ -414,6 +417,11 @@ return length.HasValue || precision.HasValue || scale.HasValue; } + private bool IsPrecisionDefined() + { + return precision.HasValue || scale.HasValue; + } + #region ICloneable Members /// <summary> Shallow copy, the value is not copied</summary> public object Clone() Modified: trunk/nhibernate/src/NHibernate/Type/TypeFactory.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Type/TypeFactory.cs 2009-03-25 18:35:41 UTC (rev 4154) +++ trunk/nhibernate/src/NHibernate/Type/TypeFactory.cs 2009-03-28 15:28:16 UTC (rev 4155) @@ -156,11 +156,12 @@ // be created. RegisterType(typeof(Object), NHibernateUtil.Object, "object"); - // These are in here for Hibernate mapping compatibility + // These are in here because needed to NO override default CLR types and be available in mappings typeByTypeOfName["int"] = NHibernateUtil.Int32; typeByTypeOfName["date"] = NHibernateUtil.Date; typeByTypeOfName["time"] = NHibernateUtil.Time; typeByTypeOfName["timestamp"] = NHibernateUtil.Timestamp; + typeByTypeOfName["decimal"] = NHibernateUtil.Decimal; typeByTypeOfName["serializable"] = NHibernateUtil.Serializable; typeByTypeOfName["true_false"] = NHibernateUtil.TrueFalse; Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1710/Defined.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1710/Defined.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1710/Defined.hbm.xml 2009-03-28 15:28:16 UTC (rev 4155) @@ -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.NHSpecificTest.NH1710"> + + <class name="A"> + <id type="int"> + <generator class="native" /> + </id> + <property name="Amount" type="decimal" precision="5" scale="2"/> + </class> + +</hibernate-mapping> Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1710/Fixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1710/Fixture.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1710/Fixture.cs 2009-03-28 15:28:16 UTC (rev 4155) @@ -0,0 +1,93 @@ +using System.Text; +using NHibernate.Cfg; +using NHibernate.Engine; +using NHibernate.Tool.hbm2ddl; +using NUnit.Framework; +using NUnit.Framework.SyntaxHelpers; + +namespace NHibernate.Test.NHSpecificTest.NH1710 +{ + public class A + { + public virtual decimal? Amount { get; set; } + } + + public abstract class BaseFixture + { + protected const string TestNameSpace = "NHibernate.Test.NHSpecificTest.NH1710."; + protected Configuration cfg; + protected ISessionFactoryImplementor factory; + private string expectedExportString; + + [TestFixtureSetUp] + public void Config() + { + cfg = new Configuration(); + if (TestConfigurationHelper.hibernateConfigFile != null) + cfg.Configure(TestConfigurationHelper.hibernateConfigFile); + + cfg.AddResource(GetResourceFullName(), GetType().Assembly); + + factory = (ISessionFactoryImplementor)cfg.BuildSessionFactory(); + + expectedExportString = GetDialect().GetTypeName(NHibernateUtil.Decimal.SqlType, 0, 5, 2); + } + + [Test] + public void NotIgnorePrecisionScaleInSchemaExport() + { + var script = new StringBuilder(); + new SchemaExport(cfg).Create(sl => script.AppendLine(sl), true); + Assert.That(script.ToString(), Text.Contains(expectedExportString)); + new SchemaExport(cfg).Drop(false, true); + } + + private Dialect.Dialect GetDialect() + { + return Dialect.Dialect.GetDialect(cfg.Properties); + } + + protected abstract string GetResourceName(); + + private string GetResourceFullName() + { + return TestNameSpace + GetResourceName(); + } + } + + [TestFixture] + public class FixtureWithExplicitDefinedType : BaseFixture + { + protected override string GetResourceName() + { + return "Heuristic.hbm.xml"; + } + } + + [TestFixture] + public class FixtureWithHeuristicDefinedType : BaseFixture + { + protected override string GetResourceName() + { + return "Defined.hbm.xml"; + } + } + + [TestFixture] + public class FixtureWithInLineDefinedType : BaseFixture + { + protected override string GetResourceName() + { + return "InLine.hbm.xml"; + } + } + + [TestFixture] + public class FixtureWithColumnNode : BaseFixture + { + protected override string GetResourceName() + { + return "WithColumnNode.hbm.xml"; + } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1710/Heuristic.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1710/Heuristic.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1710/Heuristic.hbm.xml 2009-03-28 15:28:16 UTC (rev 4155) @@ -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.NHSpecificTest.NH1710"> + + <class name="A"> + <id type="int"> + <generator class="native" /> + </id> + <property name="Amount" precision="5" scale="2"/> + </class> + +</hibernate-mapping> Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1710/InLine.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1710/InLine.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1710/InLine.hbm.xml 2009-03-28 15:28:16 UTC (rev 4155) @@ -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.NHSpecificTest.NH1710"> + + <class name="A"> + <id type="int"> + <generator class="native" /> + </id> + <property name="Amount" type="Decimal(5,2)"/> + </class> + +</hibernate-mapping> Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1710/WithColumnNode.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1710/WithColumnNode.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1710/WithColumnNode.hbm.xml 2009-03-28 15:28:16 UTC (rev 4155) @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8" ?> +<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" + assembly="NHibernate.Test" + namespace="NHibernate.Test.NHSpecificTest.NH1710"> + + <class name="A"> + <id type="int"> + <generator class="native" /> + </id> + <property name="Amount"> + <column name="Amount" precision="5" scale="2"/> + </property> + </class> + +</hibernate-mapping> Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-03-25 18:35:41 UTC (rev 4154) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-03-28 15:28:16 UTC (rev 4155) @@ -297,6 +297,7 @@ <Compile Include="NHSpecificTest\NH1694\Fixture.cs" /> <Compile Include="NHSpecificTest\NH1706\Domain.cs" /> <Compile Include="NHSpecificTest\NH1706\KeyPropertyRefFixture.cs" /> + <Compile Include="NHSpecificTest\NH1710\Fixture.cs" /> <Compile Include="NHSpecificTest\NH1715\Fixture.cs" /> <Compile Include="NHSpecificTest\NH1715\ClassA.cs" /> <Compile Include="NHSpecificTest\NH645\HQLFunctionFixture.cs" /> @@ -1689,6 +1690,10 @@ <EmbeddedResource Include="Cascade\JobBatch.hbm.xml" /> <EmbeddedResource Include="Deletetransient\Person.hbm.xml" /> <Content Include="DynamicEntity\package.html" /> + <EmbeddedResource Include="NHSpecificTest\NH1710\WithColumnNode.hbm.xml" /> + <EmbeddedResource Include="NHSpecificTest\NH1710\InLine.hbm.xml" /> + <EmbeddedResource Include="NHSpecificTest\NH1710\Heuristic.hbm.xml" /> + <EmbeddedResource Include="NHSpecificTest\NH1710\Defined.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH1715\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\DtcFailures\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH1694\Mappings.hbm.xml" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |