|
From: <fab...@us...> - 2010-10-07 12:34:46
|
Revision: 5235
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5235&view=rev
Author: fabiomaulo
Date: 2010-10-07 12:34:39 +0000 (Thu, 07 Oct 2010)
Log Message:
-----------
Fix NH-2367 (UriType)
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/UriType.cs
trunk/nhibernate/src/NHibernate.Test/TypesTest/UriClass.cs
trunk/nhibernate/src/NHibernate.Test/TypesTest/UriClass.hbm.xml
trunk/nhibernate/src/NHibernate.Test/TypesTest/UriTypeFixture.cs
Modified: trunk/nhibernate/src/NHibernate/NHibernate.csproj
===================================================================
--- trunk/nhibernate/src/NHibernate/NHibernate.csproj 2010-10-06 20:55:15 UTC (rev 5234)
+++ trunk/nhibernate/src/NHibernate/NHibernate.csproj 2010-10-07 12:34:39 UTC (rev 5235)
@@ -859,6 +859,7 @@
<Compile Include="Type\DefaultCollectionTypeFactory.cs" />
<Compile Include="Bytecode\ICollectionTypeFactory.cs" />
<Compile Include="Type\LocalDateTimeType.cs" />
+ <Compile Include="Type\UriType.cs" />
<Compile Include="Type\UtcDateTimeType.cs" />
<Compile Include="Type\XmlDocType.cs" />
<Compile Include="Util\ExpressionsHelper.cs" />
Modified: trunk/nhibernate/src/NHibernate/NHibernateUtil.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/NHibernateUtil.cs 2010-10-06 20:55:15 UTC (rev 5234)
+++ trunk/nhibernate/src/NHibernate/NHibernateUtil.cs 2010-10-07 12:34:39 UTC (rev 5235)
@@ -283,6 +283,8 @@
public static readonly NullableType XmlDoc = new XmlDocType();
+ public static readonly NullableType Uri = new UriType();
+
/// <summary>
/// A NHibernate persistent enum type
/// </summary>
Modified: trunk/nhibernate/src/NHibernate/Type/TypeFactory.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Type/TypeFactory.cs 2010-10-06 20:55:15 UTC (rev 5234)
+++ trunk/nhibernate/src/NHibernate/Type/TypeFactory.cs 2010-10-07 12:34:39 UTC (rev 5235)
@@ -208,6 +208,8 @@
RegisterType(typeof (UInt64), NHibernateUtil.UInt64, new[] {"ulong"});
RegisterType(typeof (XmlDocument), NHibernateUtil.XmlDoc, new[] {"xmldoc", "xmldocument", "xml"});
+
+ RegisterType(typeof (Uri), NHibernateUtil.Uri, new[] {"uri", "url"});
// object needs to have both class and serializable setup before it can
// be created.
Added: trunk/nhibernate/src/NHibernate/Type/UriType.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Type/UriType.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate/Type/UriType.cs 2010-10-07 12:34:39 UTC (rev 5235)
@@ -0,0 +1,64 @@
+using System;
+using System.Data;
+using NHibernate.SqlTypes;
+
+namespace NHibernate.Type
+{
+ [Serializable]
+ public class UriType : ImmutableType, IDiscriminatorType
+ {
+ public UriType()
+ : base(new StringSqlType())
+ {
+ }
+
+ public UriType(SqlType sqlType) : base(sqlType)
+ {
+ }
+
+ public override string Name
+ {
+ get { return "Uri"; }
+ }
+
+ public override System.Type ReturnedClass
+ {
+ get { return typeof(Uri); }
+ }
+
+ public object StringToObject(string xml)
+ {
+ return new Uri(xml);
+ }
+
+ public override void Set(IDbCommand cmd, object value, int index)
+ {
+ ((IDataParameter)cmd.Parameters[index]).Value = ToString(value);
+ }
+
+ public override object Get(IDataReader rs, int index)
+ {
+ return StringToObject(Convert.ToString(rs[index]));
+ }
+
+ public override object Get(IDataReader rs, string name)
+ {
+ return StringToObject(Convert.ToString(rs[name]));
+ }
+
+ public override string ToString(object val)
+ {
+ return ((Uri)val).OriginalString;
+ }
+
+ public override object FromStringValue(string xml)
+ {
+ return StringToObject(xml);
+ }
+
+ public string ObjectToSQLString(object value, Dialect.Dialect dialect)
+ {
+ return "'" + ((Uri)value).OriginalString + "'";
+ }
+ }
+}
\ No newline at end of file
Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-10-06 20:55:15 UTC (rev 5234)
+++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-10-07 12:34:39 UTC (rev 5235)
@@ -529,6 +529,8 @@
<Compile Include="TypesTest\CharClassFixture.cs" />
<Compile Include="TypesTest\DateTimeClass.cs" />
<Compile Include="TypesTest\LocalDateTimeTypeFixture.cs" />
+ <Compile Include="TypesTest\UriClass.cs" />
+ <Compile Include="TypesTest\UriTypeFixture.cs" />
<Compile Include="TypesTest\UtcDateTimeTypeFixture.cs" />
<Compile Include="TypesTest\XmlDocClass.cs" />
<Compile Include="TypesTest\XmlDocTypeFixture.cs" />
@@ -2321,6 +2323,7 @@
<EmbeddedResource Include="CollectionTest\NullableValueTypeElementMapFixture.hbm.xml" />
<EmbeddedResource Include="DriverTest\EntityForMs2008.hbm.xml" />
<Content Include="DynamicEntity\package.html" />
+ <EmbeddedResource Include="TypesTest\UriClass.hbm.xml" />
<EmbeddedResource Include="NHSpecificTest\EntityNameWithFullName\Mappings.hbm.xml" />
<EmbeddedResource Include="NHSpecificTest\NH2361\Mappings.hbm.xml" />
<EmbeddedResource Include="NHSpecificTest\EntityNameAndCompositeId\Mappings.hbm.xml" />
Added: trunk/nhibernate/src/NHibernate.Test/TypesTest/UriClass.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/TypesTest/UriClass.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/TypesTest/UriClass.cs 2010-10-07 12:34:39 UTC (rev 5235)
@@ -0,0 +1,11 @@
+using System;
+
+namespace NHibernate.Test.TypesTest
+{
+ public class UriClass
+ {
+ public int Id { get; set; }
+ public Uri Url { get; set; }
+ public Uri AutoUri { get; set; }
+ }
+}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate.Test/TypesTest/UriClass.hbm.xml
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/TypesTest/UriClass.hbm.xml (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/TypesTest/UriClass.hbm.xml 2010-10-07 12:34:39 UTC (rev 5235)
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-lazy="false">
+ <class name="NHibernate.Test.TypesTest.UriClass, NHibernate.Test" table="nh_uri">
+ <id name="Id" column="id">
+ <generator class="assigned" />
+ </id>
+
+ <property name="Url" type="Uri" />
+ <property name="AutoUri" />
+ </class>
+</hibernate-mapping>
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate.Test/TypesTest/UriTypeFixture.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/TypesTest/UriTypeFixture.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/TypesTest/UriTypeFixture.cs 2010-10-07 12:34:39 UTC (rev 5235)
@@ -0,0 +1,73 @@
+using System;
+using NHibernate.Type;
+using NUnit.Framework;
+using SharpTestsEx;
+
+namespace NHibernate.Test.TypesTest
+{
+ public class UriTypeFixture : TypeFixtureBase
+ {
+ protected override string TypeName
+ {
+ get { return "Uri"; }
+ }
+
+ [Test]
+ public void ReadWrite()
+ {
+ using (var s = OpenSession())
+ {
+ var entity = new UriClass { Id = 1 };
+ entity.Url = new Uri("http://www.fabiomaulo.blogspot.com/");
+ s.Save(entity);
+ s.Flush();
+ }
+
+ using (var s = OpenSession())
+ {
+ var entity = s.Get<UriClass>(1);
+ entity.Url.Should().Not.Be.Null();
+ entity.Url.OriginalString.Should().Be("http://www.fabiomaulo.blogspot.com/");
+ entity.Url = new Uri("http://fabiomaulo.blogspot.com/2010/10/nhibernate-30-cookbook.html");
+ s.Save(entity);
+ s.Flush();
+ }
+ using (var s = OpenSession())
+ {
+ var entity = s.Get<UriClass>(1);
+ entity.Url.OriginalString.Should().Be("http://fabiomaulo.blogspot.com/2010/10/nhibernate-30-cookbook.html");
+ s.Delete(entity);
+ s.Flush();
+ }
+ }
+
+ [Test]
+ public void InsertNullValue()
+ {
+ using (ISession s = OpenSession())
+ {
+ var entity = new UriClass { Id = 1 };
+ entity.Url = null;
+ s.Save(entity);
+ s.Flush();
+ }
+
+ using (ISession s = OpenSession())
+ {
+ var entity = s.Get<UriClass>(1);
+ entity.Url.Should().Be.Null();
+ s.Delete(entity);
+ s.Flush();
+ }
+ }
+
+ [Test]
+ public void AutoDiscoverFromNetType()
+ {
+ // integration test to be 100% sure
+ var propertyType = sessions.GetEntityPersister(typeof(UriClass).FullName).GetPropertyType("AutoUri");
+ propertyType.Should().Be.InstanceOf<UriType>();
+ }
+
+ }
+}
\ No newline at end of file
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|