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